summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl')
-rw-r--r--Master/tlpkg/tlperl/README.txt12
-rwxr-xr-xMaster/tlpkg/tlperl/bin/perl.exebin0 -> 5632 bytes
-rwxr-xr-xMaster/tlpkg/tlperl/bin/perl58.dllbin0 -> 1098752 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/AnyDBM_File.pm93
-rw-r--r--Master/tlpkg/tlperl/lib/AutoLoader.pm343
-rw-r--r--Master/tlpkg/tlperl/lib/B.pm1111
-rw-r--r--Master/tlpkg/tlperl/lib/B/Asmdata.pm250
-rw-r--r--Master/tlpkg/tlperl/lib/B/Assembler.pm328
-rw-r--r--Master/tlpkg/tlperl/lib/B/Bblock.pm224
-rw-r--r--Master/tlpkg/tlperl/lib/B/Bytecode.pm889
-rw-r--r--Master/tlpkg/tlperl/lib/B/C.pm2272
-rw-r--r--Master/tlpkg/tlperl/lib/B/CC.pm2005
-rw-r--r--Master/tlpkg/tlperl/lib/B/Concise.pm1628
-rw-r--r--Master/tlpkg/tlperl/lib/B/Debug.pm305
-rw-r--r--Master/tlpkg/tlperl/lib/B/Deparse.pm4642
-rw-r--r--Master/tlpkg/tlperl/lib/B/Disassembler.pm233
-rw-r--r--Master/tlpkg/tlperl/lib/B/Lint.pm392
-rw-r--r--Master/tlpkg/tlperl/lib/B/Showlex.pm205
-rw-r--r--Master/tlpkg/tlperl/lib/B/Stackobj.pm349
-rw-r--r--Master/tlpkg/tlperl/lib/B/Stash.pm52
-rw-r--r--Master/tlpkg/tlperl/lib/B/Terse.pm103
-rw-r--r--Master/tlpkg/tlperl/lib/B/Xref.pm430
-rw-r--r--Master/tlpkg/tlperl/lib/B/assemble30
-rw-r--r--Master/tlpkg/tlperl/lib/B/cc_harness12
-rw-r--r--Master/tlpkg/tlperl/lib/B/disassemble22
-rw-r--r--Master/tlpkg/tlperl/lib/B/makeliblinks54
-rw-r--r--Master/tlpkg/tlperl/lib/Carp.pm274
-rw-r--r--Master/tlpkg/tlperl/lib/Carp/Heavy.pm241
-rw-r--r--Master/tlpkg/tlperl/lib/Class/ISA.pm214
-rw-r--r--Master/tlpkg/tlperl/lib/Class/Struct.pm636
-rw-r--r--Master/tlpkg/tlperl/lib/Config.pm95
-rw-r--r--Master/tlpkg/tlperl/lib/Cwd.pm710
-rw-r--r--Master/tlpkg/tlperl/lib/Data/Dumper.pm1264
-rw-r--r--Master/tlpkg/tlperl/lib/Digest/MD5.pm376
-rw-r--r--Master/tlpkg/tlperl/lib/Digest/base.pm100
-rw-r--r--Master/tlpkg/tlperl/lib/Digest/file.pm85
-rw-r--r--Master/tlpkg/tlperl/lib/DynaLoader.pm833
-rw-r--r--Master/tlpkg/tlperl/lib/Encode.pm851
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Alias.pm341
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Byte.pm119
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/CJKConstants.pm66
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/CN.pm76
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/CN/HZ.pm196
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Changes.e2x7
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Config.pm166
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/ConfigLocal_PM.e2x13
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/EBCDIC.pm43
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Encoder.pm249
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Encoding.pm341
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Guess.pm351
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/JP.pm97
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/JP/H2Z.pm174
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/JP/JIS7.pm165
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/KR.pm72
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/KR/2022_KR.pm79
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/MIME/Header.pm230
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/MIME/Header/ISO_2022_JP.pm127
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Makefile_PL.e2x180
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/PerlIO.pod167
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/README.e2x31
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Supported.pod890
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Symbol.pm42
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/TW.pm78
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Unicode.pm268
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/Unicode/UTF7.pm118
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/_PM.e2x23
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/_T.e2x7
-rw-r--r--Master/tlpkg/tlperl/lib/Encode/encode.h111
-rw-r--r--Master/tlpkg/tlperl/lib/Exporter.pm440
-rw-r--r--Master/tlpkg/tlperl/lib/Exporter/Heavy.pm248
-rw-r--r--Master/tlpkg/tlperl/lib/Fcntl.pm236
-rw-r--r--Master/tlpkg/tlperl/lib/File/Basename.pm398
-rw-r--r--Master/tlpkg/tlperl/lib/File/CheckTree.pm229
-rw-r--r--Master/tlpkg/tlperl/lib/File/Compare.pm178
-rw-r--r--Master/tlpkg/tlperl/lib/File/Copy.pm459
-rw-r--r--Master/tlpkg/tlperl/lib/File/DosGlob.pm571
-rw-r--r--Master/tlpkg/tlperl/lib/File/Find.pm1275
-rw-r--r--Master/tlpkg/tlperl/lib/File/Glob.pm496
-rw-r--r--Master/tlpkg/tlperl/lib/File/Path.pm285
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec.pm322
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm93
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm77
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Functions.pm109
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Mac.pm780
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/OS2.pm272
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Unix.pm510
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/VMS.pm521
-rw-r--r--Master/tlpkg/tlperl/lib/File/Spec/Win32.pm369
-rw-r--r--Master/tlpkg/tlperl/lib/File/Temp.pm2244
-rw-r--r--Master/tlpkg/tlperl/lib/File/stat.pm139
-rw-r--r--Master/tlpkg/tlperl/lib/FileHandle.pm262
-rw-r--r--Master/tlpkg/tlperl/lib/Getopt/Long.pm2504
-rw-r--r--Master/tlpkg/tlperl/lib/Getopt/Std.pm294
-rw-r--r--Master/tlpkg/tlperl/lib/IO.pm68
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Dir.pm246
-rw-r--r--Master/tlpkg/tlperl/lib/IO/File.pm208
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Handle.pm625
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Pipe.pm257
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Poll.pm209
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Seekable.pm128
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Select.pm381
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Socket.pm476
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Socket/INET.pm431
-rw-r--r--Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm144
-rw-r--r--Master/tlpkg/tlperl/lib/List/Util.pm277
-rw-r--r--Master/tlpkg/tlperl/lib/SelectSaver.pm54
-rw-r--r--Master/tlpkg/tlperl/lib/Symbol.pm170
-rw-r--r--Master/tlpkg/tlperl/lib/Term/ANSIColor.pm472
-rw-r--r--Master/tlpkg/tlperl/lib/Term/Cap.pm669
-rw-r--r--Master/tlpkg/tlperl/lib/Term/Complete.pm188
-rw-r--r--Master/tlpkg/tlperl/lib/Term/ReadLine.pm399
-rw-r--r--Master/tlpkg/tlperl/lib/Text/Abbrev.pm84
-rw-r--r--Master/tlpkg/tlperl/lib/Text/Balanced.pm2302
-rw-r--r--Master/tlpkg/tlperl/lib/Text/ParseWords.pm263
-rw-r--r--Master/tlpkg/tlperl/lib/Text/Soundex.pm150
-rw-r--r--Master/tlpkg/tlperl/lib/Text/Tabs.pm121
-rw-r--r--Master/tlpkg/tlperl/lib/Text/Wrap.pm223
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/Array.pm287
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/File.pm2632
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/Handle.pm234
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/Hash.pm257
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/Memoize.pm128
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/RefHash.pm170
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/Scalar.pm140
-rw-r--r--Master/tlpkg/tlperl/lib/Tie/SubstrHash.pm215
-rw-r--r--Master/tlpkg/tlperl/lib/Time/HiRes.pm500
-rw-r--r--Master/tlpkg/tlperl/lib/Time/Local.pm366
-rw-r--r--Master/tlpkg/tlperl/lib/Time/gmtime.pm90
-rw-r--r--Master/tlpkg/tlperl/lib/Time/localtime.pm86
-rw-r--r--Master/tlpkg/tlperl/lib/Time/tm.pm33
-rw-r--r--Master/tlpkg/tlperl/lib/Tk.pm821
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Adjuster.pm436
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/After.pm104
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Animation.pm178
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Balloon.pm621
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Bitmap.pm10
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm510
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Button.pm148
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Camel.xpm41
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Canvas.pm1436
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm42
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Clipboard.pm122
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/CmdLine.pm954
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm58
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm761
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Compound.pm40
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Config.pm12
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Configure.pm69
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Credits7
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Derived.pm512
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Dialog.pm70
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DialogBox.pm135
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DirTree.pm252
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Dirlist.pm113
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop.pm332
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm59
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm61
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm110
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm34
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm200
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm107
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm8
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm50
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm145
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm159
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DropSite.pm257
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm46
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/English.pm307
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Entry.pm615
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm125
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Event.pm13
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Event/IO.pm132
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/FBox.pm1043
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/FileSelect.pm578
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm109
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Font.pm163
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Frame.pm378
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/HList.pm680
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/IO.pm182
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/IconList.pm712
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Image.pm74
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm38
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/JPEG.pm50
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/LabEntry.pm31
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/LabFrame.pm138
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/LabRadio.pm63
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Label.pm21
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Labelframe.pm16
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Listbox.pm910
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/MMtry.pm54
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/MMutil.pm600
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/MainWindow.pm213
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm292
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Menu.pm1145
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm180
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Menubar.pm15
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Menubutton.pm398
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Message.pm20
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/NBFrame.pm20
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/NoteBook.pm452
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm130
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/PNG.pm43
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Pane.pm544
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm221
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Photo.pm22
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Pixmap.pm19
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Pretty.pm93
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm498
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/README.Adjust77
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ROText.pm43
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm45
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Region.pm182
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Reindex.pm225
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm13
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm13
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Scale.pm278
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm429
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Spinbox.pm115
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Stats.pm26
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Submethods.pm46
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TList.pm416
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Table.pm598
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Text.pm1653
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm46
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TextEdit.pm509
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TextList.pm985
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TextUndo.pm1022
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Tiler.pm203
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TixGrid.pm1597
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Tk.xbm44
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Tk.xpm41
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/TkXSUB.def62
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Toplevel.pm211
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Trace.pm405
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Tree.pm228
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Widget.pm1510
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Wm.pm174
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X.pm398
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/X.h677
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h79
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h60
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h1214
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h855
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h79
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/keysym.h39
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h1169
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11/license.terms39
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/X11Font.pm184
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Xcamel.gifbin0 -> 4193 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Xlib.pm15
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/Xrm.pm11
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/act_folder.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/act_folder.xpm22
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/anim.gifbin0 -> 2533 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/balArrow.xbm4
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm6
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/file.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/file.xpm18
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/folder.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/folder.xpm21
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/icon.gifbin0 -> 1924 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/install.pm37
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/license.terms35
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/openfile.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/openfolder.xbm5
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/openfolder.xpm21
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/prolog.ps284
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/reindex.pl33
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/srcfile.xpm18
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/textfile.xpm18
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tkGlue.def130
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tkGlue.h79
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tkGlue.m74
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tkGlue.t70
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h14
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/tranicon.gifbin0 -> 1718 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/typemap96
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/vtab.def90
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/widgets.pm21
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/win.xbm6
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/winfolder.xpm39
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/wintext.xpm42
-rw-r--r--Master/tlpkg/tlperl/lib/UNIVERSAL.pm147
-rw-r--r--Master/tlpkg/tlperl/lib/Win32.pm712
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm198
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Client.pl63
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Clipboard.pm369
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Console.pm1463
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Event.pm104
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/EventLog.pm471
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/File.pm118
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/FileSecurity.pm308
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/IPC.pm195
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Internet.pm3009
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Job.pm370
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Mutex.pm125
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/NetAdmin.pm419
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/NetResource.pm456
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/ODBC.pm1493
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/PerfLib.pm538
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Pipe.pm414
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Process.pm217
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Registry.pm547
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Semaphore.pm128
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Server.pl48
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Service.pm103
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Shortcut.pm323
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Sound.pm582
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/Test.pl477
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm3801
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/WinError.pm1017
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/test-async.pl129
-rw-r--r--Master/tlpkg/tlperl/lib/Win32API/Registry.pm1792
-rw-r--r--Master/tlpkg/tlperl/lib/Win32API/Registry/cRegistry.pc87
-rw-r--r--Master/tlpkg/tlperl/lib/XSLoader.pm356
-rw-r--r--Master/tlpkg/tlperl/lib/attributes.pm418
-rw-r--r--Master/tlpkg/tlperl/lib/auto/B/B.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/B/B.dllbin0 -> 113152 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/B/C/C.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/B/C/C.dllbin0 -> 8192 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Cwd/Cwd.dllbin0 -> 10240 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dllbin0 -> 30720 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dllbin0 -> 15872 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/DynaLoader/autosplit.ix8
-rw-r--r--Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_expandspec.al34
-rw-r--r--Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_findfile.al115
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dllbin0 -> 14848 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/File/Glob/Glob.dllbin0 -> 16384 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/IO/IO.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/IO/IO.dllbin0 -> 16896 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/List/Util/Util.dllbin0 -> 26624 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/POSIX/POSIX.dllbin0 -> 97792 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al9
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/handler.al11
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al9
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al9
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/abs.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/assert.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/atof.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/atol.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix159
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/chown.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/cos.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/creat.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/div.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/errno.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execl.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execle.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execv.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execve.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/exit.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/exp.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/feof.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fork.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fread.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/free.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al17
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getc.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/gets.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/kill.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/labs.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/link.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al225
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/log.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/memset.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/perror.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/pow.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/printf.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/putc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/puts.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/raise.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/rand.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/redef.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/remove.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/rename.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sin.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/srand.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/stat.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/system.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/time.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/umask.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/usage.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/utime.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al12
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/wait.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dllbin0 -> 29696 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dllbin0 -> 18944 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/.packlist650
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dllbin0 -> 153600 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/autosplit.ix6
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/getSelected.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dllbin0 -> 19968 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dllbin0 -> 11264 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al27
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dllbin0 -> 41472 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Error.al20
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Event/Event.dllbin0 -> 56832 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al21
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al35
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al36
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/AddScrollbars.al52
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al22
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/freeze_on_map.al18
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al50
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelVariable.al27
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/packscrollbars.al86
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al18
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/HList/HList.dllbin0 -> 51712 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/IO/IO.dllbin0 -> 11264 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dllbin0 -> 118784 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al49
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginExtend.al34
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginSelect.al46
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginToggle.al40
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al42
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al39
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al36
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al56
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dllbin0 -> 31232 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al77
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al84
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al80
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al32
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al41
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix56
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/clipboardPaste.al21
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/deleteSelected.al18
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/getSelected.al24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al29
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.dllbin0 -> 20992 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dllbin0 -> 22016 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dllbin0 -> 168960 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dllbin0 -> 27136 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Receive.al23
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al33
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al40
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al16
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al31
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al29
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al23
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al61
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dllbin0 -> 24576 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix22
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al55
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al26
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al43
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al28
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al21
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al18
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al38
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al37
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al35
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al32
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dllbin0 -> 21504 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al59
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/StartDrag.al38
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/autosplit.ix30
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Selection.al18
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/TList/TList.dllbin0 -> 28672 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al17
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al46
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Text/Text.dllbin0 -> 114176 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dllbin0 -> 52224 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Tk.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Tk.dllbin0 -> 804864 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al20
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al56
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al29
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al32
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix10
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al27
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al30
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix11
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al87
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al51
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al15
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al17
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al29
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al50
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al20
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al24
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/X/X.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/X/X.dllbin0 -> 25088 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dllbin0 -> 29696 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix45
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/break.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al45
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al65
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al43
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/interps.al14
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al19
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld1
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al13
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al17
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.dllbin0 -> 11776 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.dllbin0 -> 20480 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Console/Console.dllbin0 -> 47104 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Event/Event.dllbin0 -> 12288 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.dllbin0 -> 25088 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/File/File.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/File/File.dllbin0 -> 10240 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.dllbin0 -> 16384 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.dllbin0 -> 13312 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.dllbin0 -> 51712 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Job/Job.dllbin0 -> 25088 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.dllbin0 -> 10752 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.dllbin0 -> 57344 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.dllbin0 -> 25088 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/NetResource/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.dllbin0 -> 141824 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dllbin0 -> 139264 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.dllbin0 -> 23040 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/autosplit.ix3
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.dllbin0 -> 37376 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Process/Process.dllbin0 -> 39424 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.dllbin0 -> 37376 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.dllbin0 -> 11264 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Service/Service.dllbin0 -> 14848 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.dllbin0 -> 29184 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.dllbin0 -> 44544 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.dllbin0 -> 67584 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.dllbin0 -> 181760 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/auto/re/re.bs0
-rwxr-xr-xMaster/tlpkg/tlperl/lib/auto/re/re.dllbin0 -> 138240 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/base.pm226
-rw-r--r--Master/tlpkg/tlperl/lib/bytes.pm88
-rw-r--r--Master/tlpkg/tlperl/lib/bytes_heavy.pl40
-rw-r--r--Master/tlpkg/tlperl/lib/constant.pm340
-rw-r--r--Master/tlpkg/tlperl/lib/fields.pm319
-rw-r--r--Master/tlpkg/tlperl/lib/lib.pm206
-rw-r--r--Master/tlpkg/tlperl/lib/lib/Win32/API.pm719
-rw-r--r--Master/tlpkg/tlperl/lib/lib/Win32/API/Struct.pm528
-rw-r--r--Master/tlpkg/tlperl/lib/lib/Win32/API/Type.pm440
-rwxr-xr-xMaster/tlpkg/tlperl/lib/lib/auto/Win32/API/API.dllbin0 -> 20480 bytes
-rw-r--r--Master/tlpkg/tlperl/lib/newgetopt.pl75
-rw-r--r--Master/tlpkg/tlperl/lib/overload.pm1434
-rw-r--r--Master/tlpkg/tlperl/lib/re.pm134
-rw-r--r--Master/tlpkg/tlperl/lib/strict.pm136
-rw-r--r--Master/tlpkg/tlperl/lib/subs.pm40
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/ArabicShaping.txt299
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/BidiMirroring.txt550
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Blocks.txt172
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Canonical.pl1042
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/CaseFolding.txt1064
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl203
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/CompositionExclusions.txt179
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Decomposition.pl5366
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/EastAsianWidth.txt16368
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Exact.pl73
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/HangulSyllableType.txt851
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Index.txt4307
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Jamo.txt92
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/LineBreak.txt17169
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Name.pl16346
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt95
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/NamesList.txt27024
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/NormalizationCorrections.txt48
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/PVA.pl2044
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/PropList.txt1049
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/PropValueAliases.txt578
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Properties350
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/PropertyAliases.txt163
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/ReadMe.txt24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/Scripts.txt1464
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt260
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/StandardizedVariants.txt122
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/To/Digit.pl276
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/To/Fold.pl993
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/To/Lower.pl905
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/To/Title.pl966
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/To/Upper.pl989
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/UnicodeData.txt16351
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/AL.pl34
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/AN.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/B.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/BN.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/CS.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/EN.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/ES.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/ET.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/L.pl400
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/LRE.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/LRO.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/NSM.pl131
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/ON.pl150
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/PDF.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/R.pl36
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/RLE.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/RLO.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/S.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/bc/WS.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/A.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/AL.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/AR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATAR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATB.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATBL.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/B.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/BL.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/BR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/DA.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/DB.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/IS.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/KV.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/L.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/NK.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/NR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/OV.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/R.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ccc/VR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/can.pl222
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/com.pl820
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/enc.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/fin.pl122
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/font.pl43
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/fra.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/init.pl84
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/iso.pl107
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/med.pl63
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/nar.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/nb.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/sml.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/sqr.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/sub.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/sup.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/vert.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/dt/wide.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/A.pl168
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/F.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/H.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/N.pl540
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/Na.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/ea/W.pl40
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AHex.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ASCII.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alnum.pl448
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alpha.pl430
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alphabet.pl415
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Any.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Arab.pl29
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Armn.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AsciiHex.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Assigned.pl432
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Beng.pl26
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiC.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiCont.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Blank.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bopo.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Brai.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bugi.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Buhd.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/C.pl435
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Canadian.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cc.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cf.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cher.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cn.pl433
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cntrl.pl31
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Co.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Copt.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cprt.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cs.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cyrl.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash2.pl28
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dep.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deprecat.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deva.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dia.pl91
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Diacriti.pl94
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Digit.pl35
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dsrt.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ethi.pl39
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ext.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Extender.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Geor.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Glag.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Goth.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/GrLink.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Graph.pl436
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grapheme.pl28
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grek.pl43
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Gujr.pl26
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Guru.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hang.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hani.pl26
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hano.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hebr.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hex.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/HexDigit.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hira.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen2.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDSB.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDST.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdContin.pl460
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdStart.pl364
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideo.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideograp.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsBinar.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsTrina.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAegean.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAlphab.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncie2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncien.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi4.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabic.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArmeni.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArrows.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBasicL.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBengal.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBlockE.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopom2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopomo.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBoxDra.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBraill.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBugine.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBuhid.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InByzant.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCherok.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo4.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCom.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkRad.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkStr.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkSym.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUni.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi4.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombin.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InContro.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCoptic.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCurren.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyprio.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyril2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyrill.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDesere.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDevana.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDingba.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclo2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclos.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthiop.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGenera.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeomet.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorg2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorgi.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGlagol.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGothic.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekA.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekE.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGujara.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGurmuk.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHalfwi.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangul.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHanuno.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHebrew.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighPr.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighSu.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHiraga.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIdeogr.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIpaExt.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKanbun.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKangxi.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKannad.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKatak2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKataka.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKharos.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmer.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmerS.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLao.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin1.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatinE.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLetter.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLimbu.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinea2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinear.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLowSur.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMalaya.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathe2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathem.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce4.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce5.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMiscel.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InModifi.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMongol.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMusica.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMyanma.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNewTai.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNumber.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOgham.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldIta.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldPer.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOptica.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOriya.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOsmany.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhone2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhonet.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPrivat.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InRunic.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InShavia.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSinhal.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSmallF.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpacin.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpecia.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupers.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl3.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl4.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl5.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl6.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupple.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyloti.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyriac.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagalo.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagban.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTags.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiLe.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiXua.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTamil.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTelugu.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThaana.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThai.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTibeta.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTifina.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUgarit.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUnifie.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVaria2.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVariat.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVertic.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiRadi.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiSyll.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYijing.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinC.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinCont.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Kana.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khar.pl20
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khmr.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Knda.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/L.pl360
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LC.pl116
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LOE.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Laoo.pl30
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Latn.pl35
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Limb.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LinearB.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ll.pl493
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lm.pl39
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lo.pl258
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LogicalO.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lower.pl492
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lowercas.pl497
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lt.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lu.pl489
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/M.pl146
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Math.pl103
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mc.pl76
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Me.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mlym.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mn.pl137
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mong.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mymr.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/N.pl66
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NChar.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nd.pl36
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NewTaiLu.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nl.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/No.pl39
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nonchara.pl30
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OAlpha.pl108
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ODI.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OGrExt.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDC.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDS.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OLower.pl20
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OMath.pl77
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OUpper.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ogam.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldItali.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldPersi.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Orya.pl26
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Osma.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherAlp.pl111
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherDef.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherGra.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdC.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdS.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherLow.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherMat.pl80
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherUpp.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/P.pl109
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatSyn.pl37
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatWS.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternS.pl40
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternW.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pc.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pd.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pe.pl78
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pf.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pi.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Po.pl101
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Print.pl435
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ps.pl80
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Punct.pl108
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/QMark.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Qaai.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Quotatio.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical2.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Runr.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/S.pl175
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SD.pl38
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/STerm.pl35
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sc.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Shaw.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sinh.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sk.pl36
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sm.pl72
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/So.pl133
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SoftDott.pl41
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Space.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SpacePer.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sterm2.pl38
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SylotiNa.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Syrc.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tagb.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/TaiLe.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Taml.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Telu.pl24
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Term.pl49
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Terminal.pl52
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tfng.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tglg.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thaa.pl13
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thai.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tibt.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Title.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UIdeo.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ugar.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UnifiedI.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Upper.pl488
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Uppercas.pl490
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/VS.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Variatio.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WSpace.pl20
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WhiteSpa.pl23
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Word.pl476
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/XDigit.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Yiii.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Z.pl22
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zl.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zp.pl14
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zs.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zyyy.pl138
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CanonDC.pl16
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CaseIgn.pl138
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CombAbo.pl69
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/hst/L.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/hst/LV.pl408
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/hst/LVT.pl408
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/hst/T.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/hst/V.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/jt/C.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/jt/D.pl33
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/jt/R.pl34
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/jt/U.pl15
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/AI.pl101
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/AL.pl449
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/B2.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/BA.pl45
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/BB.pl17
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/BK.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/CB.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/CL.pl80
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/CM.pl155
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/CR.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/EX.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/GL.pl19
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/H2.pl408
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/H3.pl408
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/HY.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/ID.pl80
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/IN.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/IS.pl18
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/JL.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/JT.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/JV.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/LF.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/NL.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/NS.pl46
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/NU.pl32
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/OP.pl76
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/PO.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/PR.pl27
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/QU.pl21
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/SA.pl34
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/SG.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/SP.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/SY.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/WJ.pl11
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/XX.pl12
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/lb/ZW.pl10
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/nt/De.pl32
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/nt/Di.pl25
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/lib/nt/Nu.pl42
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/mktables2197
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/mktables.lst505
-rw-r--r--Master/tlpkg/tlperl/lib/unicore/version1
-rw-r--r--Master/tlpkg/tlperl/lib/utf8.pm214
-rw-r--r--Master/tlpkg/tlperl/lib/utf8_heavy.pl412
-rw-r--r--Master/tlpkg/tlperl/lib/vars.pm82
-rw-r--r--Master/tlpkg/tlperl/lib/warnings.pm497
-rw-r--r--Master/tlpkg/tlperl/lib/warnings/register.pm51
1221 files changed, 267608 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/README.txt b/Master/tlpkg/tlperl/README.txt
new file mode 100644
index 00000000000..47b7a03d1ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/README.txt
@@ -0,0 +1,12 @@
+$ Id: $
+
+This directory contains a subset of the Perl distribution which is
+supposed to be used by the Perl scripts shipped with TeX Live only.
+
+The files had been compiled by Siep Kroonenberg with MinGW.
+
+If you want to run any other Perl scripts, please install a complete
+Perl system. A complete Perl system for Windows can be obtained from:
+
+ http://www.activestate.com
+
diff --git a/Master/tlpkg/tlperl/bin/perl.exe b/Master/tlpkg/tlperl/bin/perl.exe
new file mode 100755
index 00000000000..30108d9a8cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/bin/perl.exe
Binary files differ
diff --git a/Master/tlpkg/tlperl/bin/perl58.dll b/Master/tlpkg/tlperl/bin/perl58.dll
new file mode 100755
index 00000000000..d783261a862
--- /dev/null
+++ b/Master/tlpkg/tlperl/bin/perl58.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/AnyDBM_File.pm b/Master/tlpkg/tlperl/lib/AnyDBM_File.pm
new file mode 100644
index 00000000000..d73abab0f9e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/AnyDBM_File.pm
@@ -0,0 +1,93 @@
+package AnyDBM_File;
+
+use 5.006_001;
+our $VERSION = '1.00';
+our @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA;
+
+my $mod;
+for $mod (@ISA) {
+ if (eval "require $mod") {
+ @ISA = ($mod); # if we leave @ISA alone, warnings abound
+ return 1;
+ }
+}
+
+die "No DBM package was successfully found or installed";
+#return 0;
+
+=head1 NAME
+
+AnyDBM_File - provide framework for multiple DBMs
+
+NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations
+
+=head1 SYNOPSIS
+
+ use AnyDBM_File;
+
+=head1 DESCRIPTION
+
+This module is a "pure virtual base class"--it has nothing of its own.
+It's just there to inherit from one of the various DBM packages. It
+prefers ndbm for compatibility reasons with Perl 4, then Berkeley DB (See
+L<DB_File>), GDBM, SDBM (which is always there--it comes with Perl), and
+finally ODBM. This way old programs that used to use NDBM via dbmopen()
+can still do so, but new ones can reorder @ISA:
+
+ BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File) }
+ use AnyDBM_File;
+
+Having multiple DBM implementations makes it trivial to copy database formats:
+
+ use POSIX; use NDBM_File; use DB_File;
+ tie %newhash, 'DB_File', $new_filename, O_CREAT|O_RDWR;
+ tie %oldhash, 'NDBM_File', $old_filename, 1, 0;
+ %newhash = %oldhash;
+
+=head2 DBM Comparisons
+
+Here's a partial table of features the different packages offer:
+
+ odbm ndbm sdbm gdbm bsd-db
+ ---- ---- ---- ---- ------
+ Linkage comes w/ perl yes yes yes yes yes
+ Src comes w/ perl no no yes no no
+ Comes w/ many unix os yes yes[0] no no no
+ Builds ok on !unix ? ? yes yes ?
+ Code Size ? ? small big big
+ Database Size ? ? small big? ok[1]
+ Speed ? ? slow ok fast
+ FTPable no no yes yes yes
+ Easy to build N/A N/A yes yes ok[2]
+ Size limits 1k 4k 1k[3] none none
+ Byte-order independent no no no no yes
+ Licensing restrictions ? ? no yes no
+
+
+=over 4
+
+=item [0]
+
+on mixed universe machines, may be in the bsd compat library,
+which is often shunned.
+
+=item [1]
+
+Can be trimmed if you compile for one access method.
+
+=item [2]
+
+See L<DB_File>.
+Requires symbolic links.
+
+=item [3]
+
+By default, but can be redefined.
+
+=back
+
+=head1 SEE ALSO
+
+dbm(3), ndbm(3), DB_File(3), L<perldbmfilter>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/AutoLoader.pm b/Master/tlpkg/tlperl/lib/AutoLoader.pm
new file mode 100644
index 00000000000..4352d8b1fbe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/AutoLoader.pm
@@ -0,0 +1,343 @@
+package AutoLoader;
+
+use strict;
+use 5.006_001;
+
+our($VERSION, $AUTOLOAD);
+
+my $is_dosish;
+my $is_epoc;
+my $is_vms;
+my $is_macos;
+
+BEGIN {
+ $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
+ $is_epoc = $^O eq 'epoc';
+ $is_vms = $^O eq 'VMS';
+ $is_macos = $^O eq 'MacOS';
+ $VERSION = '5.60';
+}
+
+AUTOLOAD {
+ my $sub = $AUTOLOAD;
+ my $filename;
+ # Braces used to preserve $1 et al.
+ {
+ # Try to find the autoloaded file from the package-qualified
+ # name of the sub. e.g., if the sub needed is
+ # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
+ # something like '/usr/lib/perl5/Getopt/Long.pm', and the
+ # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
+ #
+ # However, if @INC is a relative path, this might not work. If,
+ # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
+ # 'lib/Getopt/Long.pm', and we want to require
+ # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
+ # In this case, we simple prepend the 'auto/' and let the
+ # C<require> take care of the searching for us.
+
+ my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
+ $pkg =~ s#::#/#g;
+ if (defined($filename = $INC{"$pkg.pm"})) {
+ if ($is_macos) {
+ $pkg =~ tr#/#:#;
+ $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
+ } else {
+ $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
+ }
+
+ # if the file exists, then make sure that it is a
+ # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
+ # or './lib/auto/foo/bar.al'. This avoids C<require> searching
+ # (and failing) to find the 'lib/auto/foo/bar.al' because it
+ # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
+
+ if (-r $filename) {
+ unless ($filename =~ m|^/|s) {
+ if ($is_dosish) {
+ unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
+ if ($^O ne 'NetWare') {
+ $filename = "./$filename";
+ } else {
+ $filename = "$filename";
+ }
+ }
+ }
+ elsif ($is_epoc) {
+ unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
+ $filename = "./$filename";
+ }
+ }
+ elsif ($is_vms) {
+ # XXX todo by VMSmiths
+ $filename = "./$filename";
+ }
+ elsif (!$is_macos) {
+ $filename = "./$filename";
+ }
+ }
+ }
+ else {
+ $filename = undef;
+ }
+ }
+ unless (defined $filename) {
+ # let C<require> do the searching
+ $filename = "auto/$sub.al";
+ $filename =~ s#::#/#g;
+ }
+ }
+ my $save = $@;
+ local $!; # Do not munge the value.
+ eval { local $SIG{__DIE__}; require $filename };
+ if ($@) {
+ if (substr($sub,-9) eq '::DESTROY') {
+ no strict 'refs';
+ *$sub = sub {};
+ $@ = undef;
+ } elsif ($@ =~ /^Can't locate/) {
+ # The load might just have failed because the filename was too
+ # long for some old SVR3 systems which treat long names as errors.
+ # If we can successfully truncate a long name then it's worth a go.
+ # There is a slight risk that we could pick up the wrong file here
+ # but autosplit should have warned about that when splitting.
+ if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
+ eval { local $SIG{__DIE__}; require $filename };
+ }
+ }
+ if ($@){
+ $@ =~ s/ at .*\n//;
+ my $error = $@;
+ require Carp;
+ Carp::croak($error);
+ }
+ }
+ $@ = $save;
+ goto &$sub;
+}
+
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller;
+
+ #
+ # Export symbols, but not by accident of inheritance.
+ #
+
+ if ($pkg eq 'AutoLoader') {
+ no strict 'refs';
+ *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD
+ if @_ and $_[0] =~ /^&?AUTOLOAD$/;
+ }
+
+ #
+ # Try to find the autosplit index file. Eg., if the call package
+ # is POSIX, then $INC{POSIX.pm} is something like
+ # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
+ # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
+ #
+ # However, if @INC is a relative path, this might not work. If,
+ # for example, @INC = ('lib'), then
+ # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
+ # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
+ #
+
+ (my $calldir = $callpkg) =~ s#::#/#g;
+ my $path = $INC{$calldir . '.pm'};
+ if (defined($path)) {
+ # Try absolute path name.
+ if ($is_macos) {
+ (my $malldir = $calldir) =~ tr#/#:#;
+ $path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s;
+ } else {
+ $path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#;
+ }
+
+ eval { require $path; };
+ # If that failed, try relative path with normal @INC searching.
+ if ($@) {
+ $path ="auto/$calldir/autosplit.ix";
+ eval { require $path; };
+ }
+ if ($@) {
+ my $error = $@;
+ require Carp;
+ Carp::carp($error);
+ }
+ }
+}
+
+sub unimport {
+ my $callpkg = caller;
+
+ no strict 'refs';
+ my $symname = $callpkg . '::AUTOLOAD';
+ undef *{ $symname } if \&{ $symname } == \&AUTOLOAD;
+ *{ $symname } = \&{ $symname };
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+AutoLoader - load subroutines only on demand
+
+=head1 SYNOPSIS
+
+ package Foo;
+ use AutoLoader 'AUTOLOAD'; # import the default AUTOLOAD subroutine
+
+ package Bar;
+ use AutoLoader; # don't import AUTOLOAD, define our own
+ sub AUTOLOAD {
+ ...
+ $AutoLoader::AUTOLOAD = "...";
+ goto &AutoLoader::AUTOLOAD;
+ }
+
+=head1 DESCRIPTION
+
+The B<AutoLoader> module works with the B<AutoSplit> module and the
+C<__END__> token to defer the loading of some subroutines until they are
+used rather than loading them all at once.
+
+To use B<AutoLoader>, the author of a module has to place the
+definitions of subroutines to be autoloaded after an C<__END__> token.
+(See L<perldata>.) The B<AutoSplit> module can then be run manually to
+extract the definitions into individual files F<auto/funcname.al>.
+
+B<AutoLoader> implements an AUTOLOAD subroutine. When an undefined
+subroutine in is called in a client module of B<AutoLoader>,
+B<AutoLoader>'s AUTOLOAD subroutine attempts to locate the subroutine in a
+file with a name related to the location of the file from which the
+client module was read. As an example, if F<POSIX.pm> is located in
+F</usr/local/lib/perl5/POSIX.pm>, B<AutoLoader> will look for perl
+subroutines B<POSIX> in F</usr/local/lib/perl5/auto/POSIX/*.al>, where
+the C<.al> file has the same name as the subroutine, sans package. If
+such a file exists, AUTOLOAD will read and evaluate it,
+thus (presumably) defining the needed subroutine. AUTOLOAD will then
+C<goto> the newly defined subroutine.
+
+Once this process completes for a given function, it is defined, so
+future calls to the subroutine will bypass the AUTOLOAD mechanism.
+
+=head2 Subroutine Stubs
+
+In order for object method lookup and/or prototype checking to operate
+correctly even when methods have not yet been defined it is necessary to
+"forward declare" each subroutine (as in C<sub NAME;>). See
+L<perlsub/"SYNOPSIS">. Such forward declaration creates "subroutine
+stubs", which are place holders with no code.
+
+The AutoSplit and B<AutoLoader> modules automate the creation of forward
+declarations. The AutoSplit module creates an 'index' file containing
+forward declarations of all the AutoSplit subroutines. When the
+AutoLoader module is 'use'd it loads these declarations into its callers
+package.
+
+Because of this mechanism it is important that B<AutoLoader> is always
+C<use>d and not C<require>d.
+
+=head2 Using B<AutoLoader>'s AUTOLOAD Subroutine
+
+In order to use B<AutoLoader>'s AUTOLOAD subroutine you I<must>
+explicitly import it:
+
+ use AutoLoader 'AUTOLOAD';
+
+=head2 Overriding B<AutoLoader>'s AUTOLOAD Subroutine
+
+Some modules, mainly extensions, provide their own AUTOLOAD subroutines.
+They typically need to check for some special cases (such as constants)
+and then fallback to B<AutoLoader>'s AUTOLOAD for the rest.
+
+Such modules should I<not> import B<AutoLoader>'s AUTOLOAD subroutine.
+Instead, they should define their own AUTOLOAD subroutines along these
+lines:
+
+ use AutoLoader;
+ use Carp;
+
+ sub AUTOLOAD {
+ my $sub = $AUTOLOAD;
+ (my $constname = $sub) =~ s/.*:://;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/ || $!{EINVAL}) {
+ $AutoLoader::AUTOLOAD = $sub;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ croak "Your vendor has not defined constant $constname";
+ }
+ }
+ *$sub = sub { $val }; # same as: eval "sub $sub { $val }";
+ goto &$sub;
+ }
+
+If any module's own AUTOLOAD subroutine has no need to fallback to the
+AutoLoader's AUTOLOAD subroutine (because it doesn't have any AutoSplit
+subroutines), then that module should not use B<AutoLoader> at all.
+
+=head2 Package Lexicals
+
+Package lexicals declared with C<my> in the main block of a package
+using B<AutoLoader> will not be visible to auto-loaded subroutines, due to
+the fact that the given scope ends at the C<__END__> marker. A module
+using such variables as package globals will not work properly under the
+B<AutoLoader>.
+
+The C<vars> pragma (see L<perlmod/"vars">) may be used in such
+situations as an alternative to explicitly qualifying all globals with
+the package namespace. Variables pre-declared with this pragma will be
+visible to any autoloaded routines (but will not be invisible outside
+the package, unfortunately).
+
+=head2 Not Using AutoLoader
+
+You can stop using AutoLoader by simply
+
+ no AutoLoader;
+
+=head2 B<AutoLoader> vs. B<SelfLoader>
+
+The B<AutoLoader> is similar in purpose to B<SelfLoader>: both delay the
+loading of subroutines.
+
+B<SelfLoader> uses the C<__DATA__> marker rather than C<__END__>.
+While this avoids the use of a hierarchy of disk files and the
+associated open/close for each routine loaded, B<SelfLoader> suffers a
+startup speed disadvantage in the one-time parsing of the lines after
+C<__DATA__>, after which routines are cached. B<SelfLoader> can also
+handle multiple packages in a file.
+
+B<AutoLoader> only reads code as it is requested, and in many cases
+should be faster, but requires a mechanism like B<AutoSplit> be used to
+create the individual files. L<ExtUtils::MakeMaker> will invoke
+B<AutoSplit> automatically if B<AutoLoader> is used in a module source
+file.
+
+=head1 CAVEATS
+
+AutoLoaders prior to Perl 5.002 had a slightly different interface. Any
+old modules which use B<AutoLoader> should be changed to the new calling
+style. Typically this just means changing a require to a use, adding
+the explicit C<'AUTOLOAD'> import if needed, and removing B<AutoLoader>
+from C<@ISA>.
+
+On systems with restrictions on file name length, the file corresponding
+to a subroutine may have a shorter name that the routine itself. This
+can lead to conflicting file names. The I<AutoSplit> package warns of
+these potential conflicts when used to split a module.
+
+AutoLoader may fail to find the autosplit files (or even find the wrong
+ones) in cases where C<@INC> contains relative paths, B<and> the program
+does C<chdir>.
+
+=head1 SEE ALSO
+
+L<SelfLoader> - an autoloader that doesn't use external files.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B.pm b/Master/tlpkg/tlperl/lib/B.pm
new file mode 100644
index 00000000000..12917347cd0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B.pm
@@ -0,0 +1,1111 @@
+# B.pm
+#
+# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+package B;
+
+our $VERSION = '1.09_01';
+
+use XSLoader ();
+require Exporter;
+@ISA = qw(Exporter);
+
+# walkoptree_slow comes from B.pm (you are there),
+# walkoptree comes from B.xs
+@EXPORT_OK = qw(minus_c ppname save_BEGINs
+ class peekop cast_I32 cstring cchar hash threadsv_names
+ main_root main_start main_cv svref_2object opnumber
+ amagic_generation perlstring
+ walkoptree_slow walkoptree walkoptree_exec walksymtable
+ parents comppadlist sv_undef compile_stats timing_info
+ begin_av init_av check_av end_av regex_padav dowarn
+ defstash curstash warnhook diehook inc_gv
+ );
+
+sub OPf_KIDS ();
+use strict;
+@B::SV::ISA = 'B::OBJECT';
+@B::NULL::ISA = 'B::SV';
+@B::PV::ISA = 'B::SV';
+@B::IV::ISA = 'B::SV';
+@B::NV::ISA = 'B::SV';
+@B::RV::ISA = 'B::SV';
+@B::PVIV::ISA = qw(B::PV B::IV);
+@B::PVNV::ISA = qw(B::PVIV B::NV);
+@B::PVMG::ISA = 'B::PVNV';
+# Change in the inheritance hierarchy post 5.9.0
+@B::PVLV::ISA = $] > 5.009 ? 'B::GV' : 'B::PVMG';
+@B::BM::ISA = 'B::PVMG';
+@B::AV::ISA = 'B::PVMG';
+@B::GV::ISA = 'B::PVMG';
+@B::HV::ISA = 'B::PVMG';
+@B::CV::ISA = 'B::PVMG';
+@B::IO::ISA = 'B::PVMG';
+@B::FM::ISA = 'B::CV';
+
+@B::OP::ISA = 'B::OBJECT';
+@B::UNOP::ISA = 'B::OP';
+@B::BINOP::ISA = 'B::UNOP';
+@B::LOGOP::ISA = 'B::UNOP';
+@B::LISTOP::ISA = 'B::BINOP';
+@B::SVOP::ISA = 'B::OP';
+@B::PADOP::ISA = 'B::OP';
+@B::PVOP::ISA = 'B::OP';
+@B::LOOP::ISA = 'B::LISTOP';
+@B::PMOP::ISA = 'B::LISTOP';
+@B::COP::ISA = 'B::OP';
+
+@B::SPECIAL::ISA = 'B::OBJECT';
+
+{
+ # Stop "-w" from complaining about the lack of a real B::OBJECT class
+ package B::OBJECT;
+}
+
+sub B::GV::SAFENAME {
+ my $name = (shift())->NAME;
+
+ # The regex below corresponds to the isCONTROLVAR macro
+ # from toke.c
+
+ $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".
+ chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e;
+
+ # When we say unicode_to_native we really mean ascii_to_native,
+ # which matters iff this is a non-ASCII platform (EBCDIC).
+
+ return $name;
+}
+
+sub B::IV::int_value {
+ my ($self) = @_;
+ return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
+}
+
+sub B::NULL::as_string() {""}
+sub B::IV::as_string() {goto &B::IV::int_value}
+sub B::PV::as_string() {goto &B::PV::PV}
+
+my $debug;
+my $op_count = 0;
+my @parents = ();
+
+sub debug {
+ my ($class, $value) = @_;
+ $debug = $value;
+ walkoptree_debug($value);
+}
+
+sub class {
+ my $obj = shift;
+ my $name = ref $obj;
+ $name =~ s/^.*:://;
+ return $name;
+}
+
+sub parents { \@parents }
+
+# For debugging
+sub peekop {
+ my $op = shift;
+ return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
+}
+
+sub walkoptree_slow {
+ my($op, $method, $level) = @_;
+ $op_count++; # just for statistics
+ $level ||= 0;
+ warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
+ $op->$method($level);
+ if ($$op && ($op->flags & OPf_KIDS)) {
+ my $kid;
+ unshift(@parents, $op);
+ for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
+ walkoptree_slow($kid, $method, $level + 1);
+ }
+ shift @parents;
+ }
+ if (class($op) eq 'PMOP' && ref($op->pmreplroot) && ${$op->pmreplroot}) {
+ unshift(@parents, $op);
+ walkoptree_slow($op->pmreplroot, $method, $level + 1);
+ shift @parents;
+ }
+}
+
+sub compile_stats {
+ return "Total number of OPs processed: $op_count\n";
+}
+
+sub timing_info {
+ my ($sec, $min, $hr) = localtime;
+ my ($user, $sys) = times;
+ sprintf("%02d:%02d:%02d user=$user sys=$sys",
+ $hr, $min, $sec, $user, $sys);
+}
+
+my %symtable;
+
+sub clearsym {
+ %symtable = ();
+}
+
+sub savesym {
+ my ($obj, $value) = @_;
+# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
+ $symtable{sprintf("sym_%x", $$obj)} = $value;
+}
+
+sub objsym {
+ my $obj = shift;
+ return $symtable{sprintf("sym_%x", $$obj)};
+}
+
+sub walkoptree_exec {
+ my ($op, $method, $level) = @_;
+ $level ||= 0;
+ my ($sym, $ppname);
+ my $prefix = " " x $level;
+ for (; $$op; $op = $op->next) {
+ $sym = objsym($op);
+ if (defined($sym)) {
+ print $prefix, "goto $sym\n";
+ return;
+ }
+ savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
+ $op->$method($level);
+ $ppname = $op->name;
+ if ($ppname =~
+ /^(d?or(assign)?|and(assign)?|mapwhile|grepwhile|entertry|range|cond_expr)$/)
+ {
+ print $prefix, uc($1), " => {\n";
+ walkoptree_exec($op->other, $method, $level + 1);
+ print $prefix, "}\n";
+ } elsif ($ppname eq "match" || $ppname eq "subst") {
+ my $pmreplstart = $op->pmreplstart;
+ if ($$pmreplstart) {
+ print $prefix, "PMREPLSTART => {\n";
+ walkoptree_exec($pmreplstart, $method, $level + 1);
+ print $prefix, "}\n";
+ }
+ } elsif ($ppname eq "substcont") {
+ print $prefix, "SUBSTCONT => {\n";
+ walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
+ print $prefix, "}\n";
+ $op = $op->other;
+ } elsif ($ppname eq "enterloop") {
+ print $prefix, "REDO => {\n";
+ walkoptree_exec($op->redoop, $method, $level + 1);
+ print $prefix, "}\n", $prefix, "NEXT => {\n";
+ walkoptree_exec($op->nextop, $method, $level + 1);
+ print $prefix, "}\n", $prefix, "LAST => {\n";
+ walkoptree_exec($op->lastop, $method, $level + 1);
+ print $prefix, "}\n";
+ } elsif ($ppname eq "subst") {
+ my $replstart = $op->pmreplstart;
+ if ($$replstart) {
+ print $prefix, "SUBST => {\n";
+ walkoptree_exec($replstart, $method, $level + 1);
+ print $prefix, "}\n";
+ }
+ }
+ }
+}
+
+sub walksymtable {
+ my ($symref, $method, $recurse, $prefix) = @_;
+ my $sym;
+ my $ref;
+ my $fullname;
+ no strict 'refs';
+ $prefix = '' unless defined $prefix;
+ while (($sym, $ref) = each %$symref) {
+ $fullname = "*main::".$prefix.$sym;
+ if ($sym =~ /::$/) {
+ $sym = $prefix . $sym;
+ if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
+ walksymtable(\%$fullname, $method, $recurse, $sym);
+ }
+ } else {
+ svref_2object(\*$fullname)->$method();
+ }
+ }
+}
+
+{
+ package B::Section;
+ my $output_fh;
+ my %sections;
+
+ sub new {
+ my ($class, $section, $symtable, $default) = @_;
+ $output_fh ||= FileHandle->new_tmpfile;
+ my $obj = bless [-1, $section, $symtable, $default], $class;
+ $sections{$section} = $obj;
+ return $obj;
+ }
+
+ sub get {
+ my ($class, $section) = @_;
+ return $sections{$section};
+ }
+
+ sub add {
+ my $section = shift;
+ while (defined($_ = shift)) {
+ print $output_fh "$section->[1]\t$_\n";
+ $section->[0]++;
+ }
+ }
+
+ sub index {
+ my $section = shift;
+ return $section->[0];
+ }
+
+ sub name {
+ my $section = shift;
+ return $section->[1];
+ }
+
+ sub symtable {
+ my $section = shift;
+ return $section->[2];
+ }
+
+ sub default {
+ my $section = shift;
+ return $section->[3];
+ }
+
+ sub output {
+ my ($section, $fh, $format) = @_;
+ my $name = $section->name;
+ my $sym = $section->symtable || {};
+ my $default = $section->default;
+
+ seek($output_fh, 0, 0);
+ while (<$output_fh>) {
+ chomp;
+ s/^(.*?)\t//;
+ if ($1 eq $name) {
+ s{(s\\_[0-9a-f]+)} {
+ exists($sym->{$1}) ? $sym->{$1} : $default;
+ }ge;
+ printf $fh $format, $_;
+ }
+ }
+ }
+}
+
+XSLoader::load 'B';
+
+1;
+
+__END__
+
+=head1 NAME
+
+B - The Perl Compiler
+
+=head1 SYNOPSIS
+
+ use B;
+
+=head1 DESCRIPTION
+
+The C<B> module supplies classes which allow a Perl program to delve
+into its own innards. It is the module used to implement the
+"backends" of the Perl compiler. Usage of the compiler does not
+require knowledge of this module: see the F<O> module for the
+user-visible part. The C<B> module is of use to those who want to
+write new compiler backends. This documentation assumes that the
+reader knows a fair amount about perl's internals including such
+things as SVs, OPs and the internal symbol table and syntax tree
+of a program.
+
+=head1 OVERVIEW
+
+The C<B> module contains a set of utility functions for querying the
+current state of the Perl interpreter; typically these functions
+return objects from the B::SV and B::OP classes, or their derived
+classes. These classes in turn define methods for querying the
+resulting objects about their own internal state.
+
+=head1 Utility Functions
+
+The C<B> module exports a variety of functions: some are simple
+utility functions, others provide a Perl program with a way to
+get an initial "handle" on an internal object.
+
+=head2 Functions Returning C<B::SV>, C<B::AV>, C<B::HV>, and C<B::CV> objects
+
+For descriptions of the class hierarchy of these objects and the
+methods that can be called on them, see below, L<"OVERVIEW OF
+CLASSES"> and L<"SV-RELATED CLASSES">.
+
+=over 4
+
+=item sv_undef
+
+Returns the SV object corresponding to the C variable C<sv_undef>.
+
+=item sv_yes
+
+Returns the SV object corresponding to the C variable C<sv_yes>.
+
+=item sv_no
+
+Returns the SV object corresponding to the C variable C<sv_no>.
+
+=item svref_2object(SVREF)
+
+Takes a reference to any Perl value, and turns the referred-to value
+into an object in the appropriate B::OP-derived or B::SV-derived
+class. Apart from functions such as C<main_root>, this is the primary
+way to get an initial "handle" on an internal perl data structure
+which can then be followed with the other access methods.
+
+The returned object will only be valid as long as the underlying OPs
+and SVs continue to exist. Do not attempt to use the object after the
+underlying structures are freed.
+
+=item amagic_generation
+
+Returns the SV object corresponding to the C variable C<amagic_generation>.
+
+=item init_av
+
+Returns the AV object (i.e. in class B::AV) representing INIT blocks.
+
+=item check_av
+
+Returns the AV object (i.e. in class B::AV) representing CHECK blocks.
+
+=item begin_av
+
+Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
+
+=item end_av
+
+Returns the AV object (i.e. in class B::AV) representing END blocks.
+
+=item comppadlist
+
+Returns the AV object (i.e. in class B::AV) of the global comppadlist.
+
+=item regex_padav
+
+Only when perl was compiled with ithreads.
+
+=item main_cv
+
+Return the (faked) CV corresponding to the main part of the Perl
+program.
+
+=back
+
+=head2 Functions for Examining the Symbol Table
+
+=over 4
+
+=item walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
+
+Walk the symbol table starting at SYMREF and call METHOD on each
+symbol (a B::GV object) visited. When the walk reaches package
+symbols (such as "Foo::") it invokes RECURSE, passing in the symbol
+name, and only recurses into the package if that sub returns true.
+
+PREFIX is the name of the SYMREF you're walking.
+
+For example:
+
+ # Walk CGI's symbol table calling print_subs on each symbol.
+ # Recurse only into CGI::Util::
+ walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' },
+ 'CGI::');
+
+print_subs() is a B::GV method you have declared. Also see L<"B::GV
+Methods">, below.
+
+=back
+
+=head2 Functions Returning C<B::OP> objects or for walking op trees
+
+For descriptions of the class hierarchy of these objects and the
+methods that can be called on them, see below, L<"OVERVIEW OF
+CLASSES"> and L<"OP-RELATED CLASSES">.
+
+=over 4
+
+=item main_root
+
+Returns the root op (i.e. an object in the appropriate B::OP-derived
+class) of the main part of the Perl program.
+
+=item main_start
+
+Returns the starting op of the main part of the Perl program.
+
+=item walkoptree(OP, METHOD)
+
+Does a tree-walk of the syntax tree based at OP and calls METHOD on
+each op it visits. Each node is visited before its children. If
+C<walkoptree_debug> (see below) has been called to turn debugging on then
+the method C<walkoptree_debug> is called on each op before METHOD is
+called.
+
+=item walkoptree_debug(DEBUG)
+
+Returns the current debugging flag for C<walkoptree>. If the optional
+DEBUG argument is non-zero, it sets the debugging flag to that. See
+the description of C<walkoptree> above for what the debugging flag
+does.
+
+=back
+
+=head2 Miscellaneous Utility Functions
+
+=over 4
+
+=item ppname(OPNUM)
+
+Return the PP function name (e.g. "pp_add") of op number OPNUM.
+
+=item hash(STR)
+
+Returns a string in the form "0x..." representing the value of the
+internal hash function used by perl on string STR.
+
+=item cast_I32(I)
+
+Casts I to the internal I32 type used by that perl.
+
+=item minus_c
+
+Does the equivalent of the C<-c> command-line option. Obviously, this
+is only useful in a BEGIN block or else the flag is set too late.
+
+=item cstring(STR)
+
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in C source code.
+
+=item perlstring(STR)
+
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in Perl source code.
+
+=item class(OBJ)
+
+Returns the class of an object without the part of the classname
+preceding the first C<"::">. This is used to turn C<"B::UNOP"> into
+C<"UNOP"> for example.
+
+=item threadsv_names
+
+In a perl compiled for threads, this returns a list of the special
+per-thread threadsv variables.
+
+=back
+
+
+
+
+=head1 OVERVIEW OF CLASSES
+
+The C structures used by Perl's internals to hold SV and OP
+information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
+class hierarchy and the C<B> module gives access to them via a true
+object hierarchy. Structure fields which point to other objects
+(whether types of SV or types of OP) are represented by the C<B>
+module as Perl objects of the appropriate class.
+
+The bulk of the C<B> module is the methods for accessing fields of
+these structures.
+
+Note that all access is read-only. You cannot modify the internals by
+using this module. Also, note that the B::OP and B::SV objects created
+by this module are only valid for as long as the underlying objects
+exist; their creation doesn't increase the reference counts of the
+underlying objects. Trying to access the fields of a freed object will
+give incomprehensible results, or worse.
+
+=head2 SV-RELATED CLASSES
+
+B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
+B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
+the obvious way to the underlying C structures of similar names. The
+inheritance hierarchy mimics the underlying C "inheritance". For 5.9.1
+and later this is:
+
+ B::SV
+ |
+ +--------------+----------+------------+
+ | | | |
+ B::PV B::IV B::NV B::RV
+ \ / /
+ \ / /
+ B::PVIV /
+ \ /
+ \ /
+ \ /
+ B::PVNV
+ |
+ |
+ B::PVMG
+ |
+ +-----+----+------+-----+-----+
+ | | | | | |
+ B::BM B::AV B::GV B::HV B::CV B::IO
+ | |
+ B::PVLV |
+ B::FM
+
+
+For 5.9.0 and earlier, PVLV is a direct subclass of PVMG, so the base
+of this diagram is
+
+ |
+ B::PVMG
+ |
+ +------+-----+----+------+-----+-----+
+ | | | | | | |
+ B::PVLV B::BM B::AV B::GV B::HV B::CV B::IO
+ |
+ |
+ B::FM
+
+
+Access methods correspond to the underlying C macros for field access,
+usually with the leading "class indication" prefix removed (Sv, Av,
+Hv, ...). The leading prefix is only left in cases where its removal
+would cause a clash in method name. For example, C<GvREFCNT> stays
+as-is since its abbreviation would clash with the "superclass" method
+C<REFCNT> (corresponding to the C function C<SvREFCNT>).
+
+=head2 B::SV Methods
+
+=over 4
+
+=item REFCNT
+
+=item FLAGS
+
+=item object_2svref
+
+Returns a reference to the regular scalar corresponding to this
+B::SV object. In other words, this method is the inverse operation
+to the svref_2object() subroutine. This scalar and other data it points
+at should be considered read-only: modifying them is neither safe nor
+guaranteed to have a sensible effect.
+
+=back
+
+=head2 B::IV Methods
+
+=over 4
+
+=item IV
+
+Returns the value of the IV, I<interpreted as
+a signed integer>. This will be misleading
+if C<FLAGS & SVf_IVisUV>. Perhaps you want the
+C<int_value> method instead?
+
+=item IVX
+
+=item UVX
+
+=item int_value
+
+This method returns the value of the IV as an integer.
+It differs from C<IV> in that it returns the correct
+value regardless of whether it's stored signed or
+unsigned.
+
+=item needs64bits
+
+=item packiv
+
+=back
+
+=head2 B::NV Methods
+
+=over 4
+
+=item NV
+
+=item NVX
+
+=back
+
+=head2 B::RV Methods
+
+=over 4
+
+=item RV
+
+=back
+
+=head2 B::PV Methods
+
+=over 4
+
+=item PV
+
+This method is the one you usually want. It constructs a
+string using the length and offset information in the struct:
+for ordinary scalars it will return the string that you'd see
+from Perl, even if it contains null characters.
+
+=item RV
+
+Same as B::RV::RV, except that it will die() if the PV isn't
+a reference.
+
+=item PVX
+
+This method is less often useful. It assumes that the string
+stored in the struct is null-terminated, and disregards the
+length information.
+
+It is the appropriate method to use if you need to get the name
+of a lexical variable from a padname array. Lexical variable names
+are always stored with a null terminator, and the length field
+(SvCUR) is overloaded for other purposes and can't be relied on here.
+
+=back
+
+=head2 B::PVMG Methods
+
+=over 4
+
+=item MAGIC
+
+=item SvSTASH
+
+=back
+
+=head2 B::MAGIC Methods
+
+=over 4
+
+=item MOREMAGIC
+
+=item precomp
+
+Only valid on r-magic, returns the string that generated the regexp.
+
+=item PRIVATE
+
+=item TYPE
+
+=item FLAGS
+
+=item OBJ
+
+Will die() if called on r-magic.
+
+=item PTR
+
+=item REGEX
+
+Only valid on r-magic, returns the integer value of the REGEX stored
+in the MAGIC.
+
+=back
+
+=head2 B::PVLV Methods
+
+=over 4
+
+=item TARGOFF
+
+=item TARGLEN
+
+=item TYPE
+
+=item TARG
+
+=back
+
+=head2 B::BM Methods
+
+=over 4
+
+=item USEFUL
+
+=item PREVIOUS
+
+=item RARE
+
+=item TABLE
+
+=back
+
+=head2 B::GV Methods
+
+=over 4
+
+=item is_empty
+
+This method returns TRUE if the GP field of the GV is NULL.
+
+=item NAME
+
+=item SAFENAME
+
+This method returns the name of the glob, but if the first
+character of the name is a control character, then it converts
+it to ^X first, so that *^G would return "^G" rather than "\cG".
+
+It's useful if you want to print out the name of a variable.
+If you restrict yourself to globs which exist at compile-time
+then the result ought to be unambiguous, because code like
+C<${"^G"} = 1> is compiled as two ops - a constant string and
+a dereference (rv2gv) - so that the glob is created at runtime.
+
+If you're working with globs at runtime, and need to disambiguate
+*^G from *{"^G"}, then you should use the raw NAME method.
+
+=item STASH
+
+=item SV
+
+=item IO
+
+=item FORM
+
+=item AV
+
+=item HV
+
+=item EGV
+
+=item CV
+
+=item CVGEN
+
+=item LINE
+
+=item FILE
+
+=item FILEGV
+
+=item GvREFCNT
+
+=item FLAGS
+
+=back
+
+=head2 B::IO Methods
+
+=over 4
+
+=item LINES
+
+=item PAGE
+
+=item PAGE_LEN
+
+=item LINES_LEFT
+
+=item TOP_NAME
+
+=item TOP_GV
+
+=item FMT_NAME
+
+=item FMT_GV
+
+=item BOTTOM_NAME
+
+=item BOTTOM_GV
+
+=item SUBPROCESS
+
+=item IoTYPE
+
+=item IoFLAGS
+
+=item IsSTD
+
+Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true
+if the IoIFP of the object is equal to the handle whose name was
+passed as argument ( i.e. $io->IsSTD('stderr') is true if
+IoIFP($io) == PerlIO_stdin() ).
+
+=back
+
+=head2 B::AV Methods
+
+=over 4
+
+=item FILL
+
+=item MAX
+
+=item OFF
+
+=item ARRAY
+
+=item ARRAYelt
+
+Like C<ARRAY>, but takes an index as an argument to get only one element,
+rather than a list of all of them.
+
+=item AvFLAGS
+
+=back
+
+=head2 B::CV Methods
+
+=over 4
+
+=item STASH
+
+=item START
+
+=item ROOT
+
+=item GV
+
+=item FILE
+
+=item DEPTH
+
+=item PADLIST
+
+=item OUTSIDE
+
+=item OUTSIDE_SEQ
+
+=item XSUB
+
+=item XSUBANY
+
+For constant subroutines, returns the constant SV returned by the subroutine.
+
+=item CvFLAGS
+
+=item const_sv
+
+=back
+
+=head2 B::HV Methods
+
+=over 4
+
+=item FILL
+
+=item MAX
+
+=item KEYS
+
+=item RITER
+
+=item NAME
+
+=item PMROOT
+
+=item ARRAY
+
+=back
+
+=head2 OP-RELATED CLASSES
+
+C<B::OP>, C<B::UNOP>, C<B::BINOP>, C<B::LOGOP>, C<B::LISTOP>, C<B::PMOP>,
+C<B::SVOP>, C<B::PADOP>, C<B::PVOP>, C<B::LOOP>, C<B::COP>.
+
+These classes correspond in the obvious way to the underlying C
+structures of similar names. The inheritance hierarchy mimics the
+underlying C "inheritance":
+
+ B::OP
+ |
+ +---------------+--------+--------+
+ | | | |
+ B::UNOP B::SVOP B::PADOP B::COP
+ ,' `-.
+ / `--.
+ B::BINOP B::LOGOP
+ |
+ |
+ B::LISTOP
+ ,' `.
+ / \
+ B::LOOP B::PMOP
+
+Access methods correspond to the underlying C structre field names,
+with the leading "class indication" prefix (C<"op_">) removed.
+
+=head2 B::OP Methods
+
+These methods get the values of similarly named fields within the OP
+data structure. See top of C<op.h> for more info.
+
+=over 4
+
+=item next
+
+=item sibling
+
+=item name
+
+This returns the op name as a string (e.g. "add", "rv2av").
+
+=item ppaddr
+
+This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
+"PL_ppaddr[OP_RV2AV]").
+
+=item desc
+
+This returns the op description from the global C PL_op_desc array
+(e.g. "addition" "array deref").
+
+=item targ
+
+=item type
+
+=item opt
+
+=item static
+
+=item flags
+
+=item private
+
+=item spare
+
+=back
+
+=head2 B::UNOP METHOD
+
+=over 4
+
+=item first
+
+=back
+
+=head2 B::BINOP METHOD
+
+=over 4
+
+=item last
+
+=back
+
+=head2 B::LOGOP METHOD
+
+=over 4
+
+=item other
+
+=back
+
+=head2 B::LISTOP METHOD
+
+=over 4
+
+=item children
+
+=back
+
+=head2 B::PMOP Methods
+
+=over 4
+
+=item pmreplroot
+
+=item pmreplstart
+
+=item pmnext
+
+=item pmregexp
+
+=item pmflags
+
+=item pmdynflags
+
+=item pmpermflags
+
+=item precomp
+
+=item pmoffset
+
+Only when perl was compiled with ithreads.
+
+=back
+
+=head2 B::SVOP METHOD
+
+=over 4
+
+=item sv
+
+=item gv
+
+=back
+
+=head2 B::PADOP METHOD
+
+=over 4
+
+=item padix
+
+=back
+
+=head2 B::PVOP METHOD
+
+=over 4
+
+=item pv
+
+=back
+
+=head2 B::LOOP Methods
+
+=over 4
+
+=item redoop
+
+=item nextop
+
+=item lastop
+
+=back
+
+=head2 B::COP Methods
+
+=over 4
+
+=item label
+
+=item stash
+
+=item stashpv
+
+=item file
+
+=item cop_seq
+
+=item arybase
+
+=item line
+
+=item warnings
+
+=item io
+
+=back
+
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Asmdata.pm b/Master/tlpkg/tlperl/lib/B/Asmdata.pm
new file mode 100644
index 00000000000..9e41d6dd757
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Asmdata.pm
@@ -0,0 +1,250 @@
+# -#- buffer-read-only: t -#-
+#
+# Copyright (c) 1996-1999 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+#
+#
+# This file is autogenerated from bytecode.pl. Changes made here will be lost.
+#
+package B::Asmdata;
+
+our $VERSION = '1.01';
+
+use Exporter;
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(%insn_data @insn_name @optype @specialsv_name);
+our(%insn_data, @insn_name, @optype, @specialsv_name);
+
+@optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP);
+@specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no pWARN_ALL pWARN_NONE);
+
+# XXX insn_data is initialised this way because with a large
+# %insn_data = (foo => [...], bar => [...], ...) initialiser
+# I get a hard-to-track-down stack underflow and segfault.
+$insn_data{comment} = [35, \&PUT_comment_t, "GET_comment_t"];
+$insn_data{nop} = [10, \&PUT_none, "GET_none"];
+$insn_data{ret} = [0, \&PUT_none, "GET_none"];
+$insn_data{ldsv} = [1, \&PUT_svindex, "GET_svindex"];
+$insn_data{ldop} = [2, \&PUT_opindex, "GET_opindex"];
+$insn_data{stsv} = [3, \&PUT_U32, "GET_U32"];
+$insn_data{stop} = [4, \&PUT_U32, "GET_U32"];
+$insn_data{stpv} = [5, \&PUT_U32, "GET_U32"];
+$insn_data{ldspecsv} = [6, \&PUT_U8, "GET_U8"];
+$insn_data{ldspecsvx} = [7, \&PUT_U8, "GET_U8"];
+$insn_data{newsv} = [8, \&PUT_U8, "GET_U8"];
+$insn_data{newsvx} = [9, \&PUT_U32, "GET_U32"];
+$insn_data{newop} = [11, \&PUT_U8, "GET_U8"];
+$insn_data{newopx} = [12, \&PUT_U16, "GET_U16"];
+$insn_data{newopn} = [13, \&PUT_U8, "GET_U8"];
+$insn_data{newpv} = [14, \&PUT_PV, "GET_PV"];
+$insn_data{pv_cur} = [15, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{pv_free} = [16, \&PUT_none, "GET_none"];
+$insn_data{sv_upgrade} = [17, \&PUT_U8, "GET_U8"];
+$insn_data{sv_refcnt} = [18, \&PUT_U32, "GET_U32"];
+$insn_data{sv_refcnt_add} = [19, \&PUT_I32, "GET_I32"];
+$insn_data{sv_flags} = [20, \&PUT_U32, "GET_U32"];
+$insn_data{xrv} = [21, \&PUT_svindex, "GET_svindex"];
+$insn_data{xpv} = [22, \&PUT_none, "GET_none"];
+$insn_data{xpv_cur} = [23, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xpv_len} = [24, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xiv} = [25, \&PUT_IV, "GET_IV"];
+$insn_data{xnv} = [26, \&PUT_NV, "GET_NV"];
+$insn_data{xlv_targoff} = [27, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xlv_targlen} = [28, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xlv_targ} = [29, \&PUT_svindex, "GET_svindex"];
+$insn_data{xlv_type} = [30, \&PUT_U8, "GET_U8"];
+$insn_data{xbm_useful} = [31, \&PUT_I32, "GET_I32"];
+$insn_data{xbm_previous} = [32, \&PUT_U16, "GET_U16"];
+$insn_data{xbm_rare} = [33, \&PUT_U8, "GET_U8"];
+$insn_data{xfm_lines} = [34, \&PUT_IV, "GET_IV"];
+$insn_data{xio_lines} = [36, \&PUT_IV, "GET_IV"];
+$insn_data{xio_page} = [37, \&PUT_IV, "GET_IV"];
+$insn_data{xio_page_len} = [38, \&PUT_IV, "GET_IV"];
+$insn_data{xio_lines_left} = [39, \&PUT_IV, "GET_IV"];
+$insn_data{xio_top_name} = [40, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{xio_top_gv} = [41, \&PUT_svindex, "GET_svindex"];
+$insn_data{xio_fmt_name} = [42, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{xio_fmt_gv} = [43, \&PUT_svindex, "GET_svindex"];
+$insn_data{xio_bottom_name} = [44, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{xio_bottom_gv} = [45, \&PUT_svindex, "GET_svindex"];
+$insn_data{xio_subprocess} = [46, \&PUT_U16, "GET_U16"];
+$insn_data{xio_type} = [47, \&PUT_U8, "GET_U8"];
+$insn_data{xio_flags} = [48, \&PUT_U8, "GET_U8"];
+$insn_data{xcv_xsubany} = [49, \&PUT_svindex, "GET_svindex"];
+$insn_data{xcv_stash} = [50, \&PUT_svindex, "GET_svindex"];
+$insn_data{xcv_start} = [51, \&PUT_opindex, "GET_opindex"];
+$insn_data{xcv_root} = [52, \&PUT_opindex, "GET_opindex"];
+$insn_data{xcv_gv} = [53, \&PUT_svindex, "GET_svindex"];
+$insn_data{xcv_file} = [54, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{xcv_depth} = [55, \&PUT_long, "GET_long"];
+$insn_data{xcv_padlist} = [56, \&PUT_svindex, "GET_svindex"];
+$insn_data{xcv_outside} = [57, \&PUT_svindex, "GET_svindex"];
+$insn_data{xcv_outside_seq} = [58, \&PUT_U32, "GET_U32"];
+$insn_data{xcv_flags} = [59, \&PUT_U16, "GET_U16"];
+$insn_data{av_extend} = [60, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{av_pushx} = [61, \&PUT_svindex, "GET_svindex"];
+$insn_data{av_push} = [62, \&PUT_svindex, "GET_svindex"];
+$insn_data{xav_fill} = [63, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xav_max} = [64, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{xav_flags} = [65, \&PUT_U8, "GET_U8"];
+$insn_data{xhv_riter} = [66, \&PUT_I32, "GET_I32"];
+$insn_data{xhv_name} = [67, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{xhv_pmroot} = [68, \&PUT_opindex, "GET_opindex"];
+$insn_data{hv_store} = [69, \&PUT_svindex, "GET_svindex"];
+$insn_data{sv_magic} = [70, \&PUT_U8, "GET_U8"];
+$insn_data{mg_obj} = [71, \&PUT_svindex, "GET_svindex"];
+$insn_data{mg_private} = [72, \&PUT_U16, "GET_U16"];
+$insn_data{mg_flags} = [73, \&PUT_U8, "GET_U8"];
+$insn_data{mg_name} = [74, \&PUT_pvcontents, "GET_pvcontents"];
+$insn_data{mg_namex} = [75, \&PUT_svindex, "GET_svindex"];
+$insn_data{xmg_stash} = [76, \&PUT_svindex, "GET_svindex"];
+$insn_data{gv_fetchpv} = [77, \&PUT_strconst, "GET_strconst"];
+$insn_data{gv_fetchpvx} = [78, \&PUT_strconst, "GET_strconst"];
+$insn_data{gv_stashpv} = [79, \&PUT_strconst, "GET_strconst"];
+$insn_data{gv_stashpvx} = [80, \&PUT_strconst, "GET_strconst"];
+$insn_data{gp_sv} = [81, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_refcnt} = [82, \&PUT_U32, "GET_U32"];
+$insn_data{gp_refcnt_add} = [83, \&PUT_I32, "GET_I32"];
+$insn_data{gp_av} = [84, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_hv} = [85, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_cv} = [86, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_file} = [87, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{gp_io} = [88, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_form} = [89, \&PUT_svindex, "GET_svindex"];
+$insn_data{gp_cvgen} = [90, \&PUT_U32, "GET_U32"];
+$insn_data{gp_line} = [91, \&PUT_U32, "GET_U32"];
+$insn_data{gp_share} = [92, \&PUT_svindex, "GET_svindex"];
+$insn_data{xgv_flags} = [93, \&PUT_U8, "GET_U8"];
+$insn_data{op_next} = [94, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_sibling} = [95, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_ppaddr} = [96, \&PUT_strconst, "GET_strconst"];
+$insn_data{op_targ} = [97, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{op_type} = [98, \&PUT_U16, "GET_U16"];
+$insn_data{op_seq} = [99, \&PUT_U16, "GET_U16"];
+$insn_data{op_flags} = [100, \&PUT_U8, "GET_U8"];
+$insn_data{op_private} = [101, \&PUT_U8, "GET_U8"];
+$insn_data{op_first} = [102, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_last} = [103, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_other} = [104, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmreplroot} = [105, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmreplstart} = [106, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmnext} = [107, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmstashpv} = [108, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{op_pmreplrootpo} = [109, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{op_pmstash} = [110, \&PUT_svindex, "GET_svindex"];
+$insn_data{op_pmreplrootgv} = [111, \&PUT_svindex, "GET_svindex"];
+$insn_data{pregcomp} = [112, \&PUT_pvcontents, "GET_pvcontents"];
+$insn_data{op_pmflags} = [113, \&PUT_U16, "GET_U16"];
+$insn_data{op_pmpermflags} = [114, \&PUT_U16, "GET_U16"];
+$insn_data{op_pmdynflags} = [115, \&PUT_U8, "GET_U8"];
+$insn_data{op_sv} = [116, \&PUT_svindex, "GET_svindex"];
+$insn_data{op_padix} = [117, \&PUT_PADOFFSET, "GET_PADOFFSET"];
+$insn_data{op_pv} = [118, \&PUT_pvcontents, "GET_pvcontents"];
+$insn_data{op_pv_tr} = [119, \&PUT_op_tr_array, "GET_op_tr_array"];
+$insn_data{op_redoop} = [120, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_nextop} = [121, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_lastop} = [122, \&PUT_opindex, "GET_opindex"];
+$insn_data{cop_label} = [123, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_stashpv} = [124, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_file} = [125, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_stash} = [126, \&PUT_svindex, "GET_svindex"];
+$insn_data{cop_filegv} = [127, \&PUT_svindex, "GET_svindex"];
+$insn_data{cop_seq} = [128, \&PUT_U32, "GET_U32"];
+$insn_data{cop_arybase} = [129, \&PUT_I32, "GET_I32"];
+$insn_data{cop_line} = [130, \&PUT_U32, "GET_U32"];
+$insn_data{cop_io} = [131, \&PUT_svindex, "GET_svindex"];
+$insn_data{cop_warnings} = [132, \&PUT_svindex, "GET_svindex"];
+$insn_data{main_start} = [133, \&PUT_opindex, "GET_opindex"];
+$insn_data{main_root} = [134, \&PUT_opindex, "GET_opindex"];
+$insn_data{main_cv} = [135, \&PUT_svindex, "GET_svindex"];
+$insn_data{curpad} = [136, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_begin} = [137, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_init} = [138, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_end} = [139, \&PUT_svindex, "GET_svindex"];
+$insn_data{curstash} = [140, \&PUT_svindex, "GET_svindex"];
+$insn_data{defstash} = [141, \&PUT_svindex, "GET_svindex"];
+$insn_data{data} = [142, \&PUT_U8, "GET_U8"];
+$insn_data{incav} = [143, \&PUT_svindex, "GET_svindex"];
+$insn_data{load_glob} = [144, \&PUT_svindex, "GET_svindex"];
+$insn_data{regex_padav} = [145, \&PUT_svindex, "GET_svindex"];
+$insn_data{dowarn} = [146, \&PUT_U8, "GET_U8"];
+$insn_data{comppad_name} = [147, \&PUT_svindex, "GET_svindex"];
+$insn_data{xgv_stash} = [148, \&PUT_svindex, "GET_svindex"];
+$insn_data{signal} = [149, \&PUT_strconst, "GET_strconst"];
+$insn_data{formfeed} = [150, \&PUT_svindex, "GET_svindex"];
+
+my ($insn_name, $insn_data);
+while (($insn_name, $insn_data) = each %insn_data) {
+ $insn_name[$insn_data->[0]] = $insn_name;
+}
+# Fill in any gaps
+@insn_name = map($_ || "unused", @insn_name);
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Asmdata - Autogenerated data about Perl ops, used to generate bytecode
+
+=head1 SYNOPSIS
+
+ use B::Asmdata qw(%insn_data @insn_name @optype @specialsv_name);
+
+=head1 DESCRIPTION
+
+Provides information about Perl ops in order to generate bytecode via
+a bunch of exported variables. Its mostly used by B::Assembler and
+B::Disassembler.
+
+=over 4
+
+=item %insn_data
+
+ my($bytecode_num, $put_sub, $get_meth) = @$insn_data{$op_name};
+
+For a given $op_name (for example, 'cop_label', 'sv_flags', etc...)
+you get an array ref containing the bytecode number of the op, a
+reference to the subroutine used to 'PUT', and the name of the method
+used to 'GET'.
+
+=for _private
+Add more detail about what $put_sub and $get_meth are and how to use them.
+
+=item @insn_name
+
+ my $op_name = $insn_name[$bytecode_num];
+
+A simple mapping of the bytecode number to the name of the op.
+Suitable for using with %insn_data like so:
+
+ my $op_info = $insn_data{$insn_name[$bytecode_num]};
+
+=item @optype
+
+ my $op_type = $optype[$op_type_num];
+
+A simple mapping of the op type number to its type (like 'COP' or 'BINOP').
+
+=item @specialsv_name
+
+ my $sv_name = $specialsv_name[$sv_index];
+
+Certain SV types are considered 'special'. They're represented by
+B::SPECIAL and are referred to by a number from the specialsv_list.
+This array maps that number back to the name of the SV (like 'Nullsv'
+or '&PL_sv_undef').
+
+=back
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
+
+# ex: set ro:
diff --git a/Master/tlpkg/tlperl/lib/B/Assembler.pm b/Master/tlpkg/tlperl/lib/B/Assembler.pm
new file mode 100644
index 00000000000..f312273ce36
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Assembler.pm
@@ -0,0 +1,328 @@
+# Assembler.pm
+#
+# Copyright (c) 1996 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+
+package B::Assembler;
+use Exporter;
+use B qw(ppname);
+use B::Asmdata qw(%insn_data @insn_name);
+use Config qw(%Config);
+require ByteLoader; # we just need its $VERSION
+
+no warnings; # XXX
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(assemble_fh newasm endasm assemble asm);
+$VERSION = 0.07;
+
+use strict;
+my %opnumber;
+my ($i, $opname);
+for ($i = 0; defined($opname = ppname($i)); $i++) {
+ $opnumber{$opname} = $i;
+}
+
+my($linenum, $errors, $out); # global state, set up by newasm
+
+sub error {
+ my $str = shift;
+ warn "$linenum: $str\n";
+ $errors++;
+}
+
+my $debug = 0;
+sub debug { $debug = shift }
+
+sub limcheck($$$$){
+ my( $val, $lo, $hi, $loc ) = @_;
+ if( $val < $lo || $hi < $val ){
+ error "argument for $loc outside [$lo, $hi]: $val";
+ $val = $hi;
+ }
+ return $val;
+}
+
+#
+# First define all the data conversion subs to which Asmdata will refer
+#
+
+sub B::Asmdata::PUT_U8 {
+ my $arg = shift;
+ my $c = uncstring($arg);
+ if (defined($c)) {
+ if (length($c) != 1) {
+ error "argument for U8 is too long: $c";
+ $c = substr($c, 0, 1);
+ }
+ } else {
+ $arg = limcheck( $arg, 0, 0xff, 'U8' );
+ $c = chr($arg);
+ }
+ return $c;
+}
+
+sub B::Asmdata::PUT_U16 {
+ my $arg = limcheck( $_[0], 0, 0xffff, 'U16' );
+ pack("S", $arg);
+}
+sub B::Asmdata::PUT_U32 {
+ my $arg = limcheck( $_[0], 0, 0xffffffff, 'U32' );
+ pack("L", $arg);
+}
+sub B::Asmdata::PUT_I32 {
+ my $arg = limcheck( $_[0], -0x80000000, 0x7fffffff, 'I32' );
+ pack("l", $arg);
+}
+sub B::Asmdata::PUT_NV { sprintf("%s\0", $_[0]) } # "%lf" looses precision and pack('d',...)
+ # may not even be portable between compilers
+sub B::Asmdata::PUT_objindex { # could allow names here
+ my $arg = limcheck( $_[0], 0, 0xffffffff, '*index' );
+ pack("L", $arg);
+}
+sub B::Asmdata::PUT_svindex { &B::Asmdata::PUT_objindex }
+sub B::Asmdata::PUT_opindex { &B::Asmdata::PUT_objindex }
+sub B::Asmdata::PUT_pvindex { &B::Asmdata::PUT_objindex }
+
+sub B::Asmdata::PUT_strconst {
+ my $arg = shift;
+ my $str = uncstring($arg);
+ if (!defined($str)) {
+ error "bad string constant: $arg";
+ $str = '';
+ }
+ if ($str =~ s/\0//g) {
+ error "string constant argument contains NUL: $arg";
+ $str = '';
+ }
+ return $str . "\0";
+}
+
+sub B::Asmdata::PUT_pvcontents {
+ my $arg = shift;
+ error "extraneous argument: $arg" if defined $arg;
+ return "";
+}
+sub B::Asmdata::PUT_PV {
+ my $arg = shift;
+ my $str = uncstring($arg);
+ if( ! defined($str) ){
+ error "bad string argument: $arg";
+ $str = '';
+ }
+ return pack("L", length($str)) . $str;
+}
+sub B::Asmdata::PUT_comment_t {
+ my $arg = shift;
+ $arg = uncstring($arg);
+ error "bad string argument: $arg" unless defined($arg);
+ if ($arg =~ s/\n//g) {
+ error "comment argument contains linefeed: $arg";
+ }
+ return $arg . "\n";
+}
+sub B::Asmdata::PUT_double { sprintf("%s\0", $_[0]) } # see PUT_NV above
+sub B::Asmdata::PUT_none {
+ my $arg = shift;
+ error "extraneous argument: $arg" if defined $arg;
+ return "";
+}
+sub B::Asmdata::PUT_op_tr_array {
+ my @ary = split /\s*,\s*/, shift;
+ return pack "S*", @ary;
+}
+
+sub B::Asmdata::PUT_IV64 {
+ return pack "Q", shift;
+}
+
+sub B::Asmdata::PUT_IV {
+ $Config{ivsize} == 4 ? &B::Asmdata::PUT_I32 : &B::Asmdata::PUT_IV64;
+}
+
+sub B::Asmdata::PUT_PADOFFSET {
+ $Config{ptrsize} == 8 ? &B::Asmdata::PUT_IV64 : &B::Asmdata::PUT_U32;
+}
+
+sub B::Asmdata::PUT_long {
+ $Config{longsize} == 8 ? &B::Asmdata::PUT_IV64 : &B::Asmdata::PUT_U32;
+}
+
+my %unesc = (n => "\n", r => "\r", t => "\t", a => "\a",
+ b => "\b", f => "\f", v => "\013");
+
+sub uncstring {
+ my $s = shift;
+ $s =~ s/^"// and $s =~ s/"$// or return undef;
+ $s =~ s/\\(\d\d\d|.)/length($1) == 3 ? chr(oct($1)) : ($unesc{$1}||$1)/eg;
+ return $s;
+}
+
+sub strip_comments {
+ my $stmt = shift;
+ # Comments only allowed in instructions which don't take string arguments
+ # Treat string as a single line so .* eats \n characters.
+ $stmt =~ s{
+ ^\s* # Ignore leading whitespace
+ (
+ [^"]* # A double quote '"' indicates a string argument. If we
+ # find a double quote, the match fails and we strip nothing.
+ )
+ \s*\# # Any amount of whitespace plus the comment marker...
+ .*$ # ...which carries on to end-of-string.
+ }{$1}sx; # Keep only the instruction and optional argument.
+ return $stmt;
+}
+
+# create the ByteCode header: magic, archname, ByteLoader $VERSION, ivsize,
+# ptrsize, byteorder
+# nvtype is irrelevant (floats are stored as strings)
+# byteorder is strconst not U32 because of varying size issues
+
+sub gen_header {
+ my $header = "";
+
+ $header .= B::Asmdata::PUT_U32(0x43424c50); # 'PLBC'
+ $header .= B::Asmdata::PUT_strconst('"' . $Config{archname}. '"');
+ $header .= B::Asmdata::PUT_strconst(qq["$ByteLoader::VERSION"]);
+ $header .= B::Asmdata::PUT_U32($Config{ivsize});
+ $header .= B::Asmdata::PUT_U32($Config{ptrsize});
+ $header;
+}
+
+sub parse_statement {
+ my $stmt = shift;
+ my ($insn, $arg) = $stmt =~ m{
+ ^\s* # allow (but ignore) leading whitespace
+ (.*?) # Instruction continues up until...
+ (?: # ...an optional whitespace+argument group
+ \s+ # first whitespace.
+ (.*) # The argument is all the rest (newlines included).
+ )?$ # anchor at end-of-line
+ }sx;
+ if (defined($arg)) {
+ if ($arg =~ s/^0x(?=[0-9a-fA-F]+$)//) {
+ $arg = hex($arg);
+ } elsif ($arg =~ s/^0(?=[0-7]+$)//) {
+ $arg = oct($arg);
+ } elsif ($arg =~ /^pp_/) {
+ $arg =~ s/\s*$//; # strip trailing whitespace
+ my $opnum = $opnumber{$arg};
+ if (defined($opnum)) {
+ $arg = $opnum;
+ } else {
+ error qq(No such op type "$arg");
+ $arg = 0;
+ }
+ }
+ }
+ return ($insn, $arg);
+}
+
+sub assemble_insn {
+ my ($insn, $arg) = @_;
+ my $data = $insn_data{$insn};
+ if (defined($data)) {
+ my ($bytecode, $putsub) = @{$data}[0, 1];
+ my $argcode = &$putsub($arg);
+ return chr($bytecode).$argcode;
+ } else {
+ error qq(no such instruction "$insn");
+ return "";
+ }
+}
+
+sub assemble_fh {
+ my ($fh, $out) = @_;
+ my $line;
+ my $asm = newasm($out);
+ while ($line = <$fh>) {
+ assemble($line);
+ }
+ endasm();
+}
+
+sub newasm {
+ my($outsub) = @_;
+
+ die "Invalid printing routine for B::Assembler\n" unless ref $outsub eq 'CODE';
+ die <<EOD if ref $out;
+Can't have multiple byteassembly sessions at once!
+ (perhaps you forgot an endasm()?)
+EOD
+
+ $linenum = $errors = 0;
+ $out = $outsub;
+
+ $out->(gen_header());
+}
+
+sub endasm {
+ if ($errors) {
+ die "There were $errors assembly errors\n";
+ }
+ $linenum = $errors = $out = 0;
+}
+
+sub assemble {
+ my($line) = @_;
+ my ($insn, $arg);
+ $linenum++;
+ chomp $line;
+ if ($debug) {
+ my $quotedline = $line;
+ $quotedline =~ s/\\/\\\\/g;
+ $quotedline =~ s/"/\\"/g;
+ $out->(assemble_insn("comment", qq("$quotedline")));
+ }
+ if( $line = strip_comments($line) ){
+ ($insn, $arg) = parse_statement($line);
+ $out->(assemble_insn($insn, $arg));
+ if ($debug) {
+ $out->(assemble_insn("nop", undef));
+ }
+ }
+}
+
+### temporary workaround
+
+sub asm {
+ return if $_[0] =~ /\s*\W/;
+ if (defined $_[1]) {
+ return if $_[1] eq "0" and
+ $_[0] !~ /^(?:newsvx?|av_pushx?|av_extend|xav_flags)$/;
+ return if $_[1] eq "1" and $_[0] =~ /^(?:sv_refcnt)$/;
+ }
+ assemble "@_";
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Assembler - Assemble Perl bytecode
+
+=head1 SYNOPSIS
+
+ use B::Assembler qw(newasm endasm assemble);
+ newasm(\&printsub); # sets up for assembly
+ assemble($buf); # assembles one line
+ endasm(); # closes down
+
+ use B::Assembler qw(assemble_fh);
+ assemble_fh($fh, \&printsub); # assemble everything in $fh
+
+=head1 DESCRIPTION
+
+See F<ext/B/B/Assembler.pm>.
+
+=head1 AUTHORS
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+Per-statement interface by Benjamin Stuhl, C<sho_pi@hotmail.com>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Bblock.pm b/Master/tlpkg/tlperl/lib/B/Bblock.pm
new file mode 100644
index 00000000000..9566d125aaa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Bblock.pm
@@ -0,0 +1,224 @@
+package B::Bblock;
+
+our $VERSION = '1.02_01';
+
+use Exporter ();
+@ISA = "Exporter";
+@EXPORT_OK = qw(find_leaders);
+
+use B qw(peekop walkoptree walkoptree_exec
+ main_root main_start svref_2object
+ OPf_SPECIAL OPf_STACKED );
+
+use B::Concise qw(concise_cv concise_main set_style_standard);
+use strict;
+
+my $bblock;
+my @bblock_ends;
+
+sub mark_leader {
+ my $op = shift;
+ if ($$op) {
+ $bblock->{$$op} = $op;
+ }
+}
+
+sub remove_sortblock{
+ foreach (keys %$bblock){
+ my $leader=$$bblock{$_};
+ delete $$bblock{$_} if( $leader == 0);
+ }
+}
+sub find_leaders {
+ my ($root, $start) = @_;
+ $bblock = {};
+ mark_leader($start) if ( ref $start ne "B::NULL" );
+ walkoptree($root, "mark_if_leader") if ((ref $root) ne "B::NULL") ;
+ remove_sortblock();
+ return $bblock;
+}
+
+# Debugging
+sub walk_bblocks {
+ my ($root, $start) = @_;
+ my ($op, $lastop, $leader, $bb);
+ $bblock = {};
+ mark_leader($start);
+ walkoptree($root, "mark_if_leader");
+ my @leaders = values %$bblock;
+ while ($leader = shift @leaders) {
+ $lastop = $leader;
+ $op = $leader->next;
+ while ($$op && !exists($bblock->{$$op})) {
+ $bblock->{$$op} = $leader;
+ $lastop = $op;
+ $op = $op->next;
+ }
+ push(@bblock_ends, [$leader, $lastop]);
+ }
+ foreach $bb (@bblock_ends) {
+ ($leader, $lastop) = @$bb;
+ printf "%s .. %s\n", peekop($leader), peekop($lastop);
+ for ($op = $leader; $$op != $$lastop; $op = $op->next) {
+ printf " %s\n", peekop($op);
+ }
+ printf " %s\n", peekop($lastop);
+ }
+}
+
+sub walk_bblocks_obj {
+ my $cvref = shift;
+ my $cv = svref_2object($cvref);
+ walk_bblocks($cv->ROOT, $cv->START);
+}
+
+sub B::OP::mark_if_leader {}
+
+sub B::COP::mark_if_leader {
+ my $op = shift;
+ if ($op->label) {
+ mark_leader($op);
+ }
+}
+
+sub B::LOOP::mark_if_leader {
+ my $op = shift;
+ mark_leader($op->next);
+ mark_leader($op->nextop);
+ mark_leader($op->redoop);
+ mark_leader($op->lastop->next);
+}
+
+sub B::LOGOP::mark_if_leader {
+ my $op = shift;
+ my $opname = $op->name;
+ mark_leader($op->next);
+ if ($opname eq "entertry") {
+ mark_leader($op->other->next);
+ } else {
+ mark_leader($op->other);
+ }
+}
+
+sub B::LISTOP::mark_if_leader {
+ my $op = shift;
+ my $first=$op->first;
+ $first=$first->next while ($first->name eq "null");
+ mark_leader($op->first) unless (exists( $bblock->{$$first}));
+ mark_leader($op->next);
+ if ($op->name eq "sort" and $op->flags & OPf_SPECIAL
+ and $op->flags & OPf_STACKED){
+ my $root=$op->first->sibling->first;
+ my $leader=$root->first;
+ $bblock->{$$leader} = 0;
+ }
+}
+
+sub B::PMOP::mark_if_leader {
+ my $op = shift;
+ if ($op->name ne "pushre") {
+ my $replroot = $op->pmreplroot;
+ if ($$replroot) {
+ mark_leader($replroot);
+ mark_leader($op->next);
+ mark_leader($op->pmreplstart);
+ }
+ }
+}
+
+# PMOP stuff omitted
+
+sub compile {
+ my @options = @_;
+ B::clearsym();
+ if (@options) {
+ return sub {
+ my $objname;
+ foreach $objname (@options) {
+ $objname = "main::$objname" unless $objname =~ /::/;
+ eval "walk_bblocks_obj(\\&$objname)";
+ die "walk_bblocks_obj(\\&$objname) failed: $@" if $@;
+ print "-------\n";
+ set_style_standard("terse");
+ eval "concise_cv('exec', \\&$objname)";
+ die "concise_cv('exec', \\&$objname) failed: $@" if $@;
+ }
+ }
+ } else {
+ return sub {
+ walk_bblocks(main_root, main_start);
+ print "-------\n";
+ set_style_standard("terse");
+ concise_main("exec");
+ };
+ }
+}
+
+# Basic block leaders:
+# Any COP (pp_nextstate) with a non-NULL label
+# [The op after a pp_enter] Omit
+# [The op after a pp_entersub. Don't count this one.]
+# The ops pointed at by nextop, redoop and lastop->op_next of a LOOP
+# The ops pointed at by op_next and op_other of a LOGOP, except
+# for pp_entertry which has op_next and op_other->op_next
+# The op pointed at by op_pmreplstart of a PMOP
+# The op pointed at by op_other->op_pmreplstart of pp_substcont?
+# [The op after a pp_return] Omit
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Bblock - Walk basic blocks
+
+=head1 SYNOPSIS
+
+ # External interface
+ perl -MO=Bblock[,OPTIONS] foo.pl
+
+ # Programmatic API
+ use B::Bblock qw(find_leaders);
+ my $leaders = find_leaders($root_op, $start_op);
+
+=head1 DESCRIPTION
+
+This module is used by the B::CC back end. It walks "basic blocks".
+A basic block is a series of operations which is known to execute from
+start to finish, with no possibility of branching or halting.
+
+It can be used either stand alone or from inside another program.
+
+=for _private
+Somebody who understands the stand-alone options document them, please.
+
+=head2 Functions
+
+=over 4
+
+=item B<find_leaders>
+
+ my $leaders = find_leaders($root_op, $start_op);
+
+Given the root of the op tree and an op from which to start
+processing, it will return a hash ref representing all the ops which
+start a block.
+
+=for _private
+The above description may be somewhat wrong.
+
+The values of %$leaders are the op objects themselves. Keys are $$op
+addresses.
+
+=for _private
+Above cribbed from B::CC's comments. What's a $$op address?
+
+=back
+
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Bytecode.pm b/Master/tlpkg/tlperl/lib/B/Bytecode.pm
new file mode 100644
index 00000000000..250569ae57b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Bytecode.pm
@@ -0,0 +1,889 @@
+# B::Bytecode.pm
+# Copyright (c) 2003 Enache Adrian. All rights reserved.
+# This module is free software; you can redistribute and/or modify
+# it under the same terms as Perl itself.
+
+# Based on the original Bytecode.pm module written by Malcolm Beattie.
+
+package B::Bytecode;
+
+our $VERSION = '1.01_01';
+
+use strict;
+use Config;
+use B qw(class main_cv main_root main_start cstring comppadlist
+ defstash curstash begin_av init_av end_av inc_gv warnhook diehook
+ dowarn SVt_PVGV SVt_PVHV OPf_SPECIAL OPf_STACKED OPf_MOD
+ OPpLVAL_INTRO SVf_FAKE SVf_READONLY);
+use B::Asmdata qw(@specialsv_name);
+use B::Assembler qw(asm newasm endasm);
+
+#################################################
+
+my ($varix, $opix, $savebegins, %walked, %files, @cloop);
+my %strtab = (0,0);
+my %svtab = (0,0);
+my %optab = (0,0);
+my %spectab = (0,0);
+my $tix = 1;
+sub asm;
+sub nice ($) { }
+
+BEGIN {
+ my $ithreads = $Config{'useithreads'} eq 'define';
+ eval qq{
+ sub ITHREADS() { $ithreads }
+ sub VERSION() { $] }
+ }; die $@ if $@;
+}
+
+#################################################
+
+sub pvstring {
+ my $pv = shift;
+ defined($pv) ? cstring ($pv."\0") : "\"\"";
+}
+
+sub pvix {
+ my $str = pvstring shift;
+ my $ix = $strtab{$str};
+ defined($ix) ? $ix : do {
+ asm "newpv", $str;
+ asm "stpv", $strtab{$str} = $tix;
+ $tix++;
+ }
+}
+
+sub B::OP::ix {
+ my $op = shift;
+ my $ix = $optab{$$op};
+ defined($ix) ? $ix : do {
+ nice "[".$op->name." $tix]";
+ asm "newopx", $op->size | $op->type <<7;
+ $optab{$$op} = $opix = $ix = $tix++;
+ $op->bsave($ix);
+ $ix;
+ }
+}
+
+sub B::SPECIAL::ix {
+ my $spec = shift;
+ my $ix = $spectab{$$spec};
+ defined($ix) ? $ix : do {
+ nice '['.$specialsv_name[$$spec].']';
+ asm "ldspecsvx", $$spec;
+ $spectab{$$spec} = $varix = $tix++;
+ }
+}
+
+sub B::SV::ix {
+ my $sv = shift;
+ my $ix = $svtab{$$sv};
+ defined($ix) ? $ix : do {
+ nice '['.class($sv).']';
+ asm "newsvx", $sv->FLAGS;
+ $svtab{$$sv} = $varix = $ix = $tix++;
+ $sv->bsave($ix);
+ $ix;
+ }
+}
+
+sub B::GV::ix {
+ my ($gv,$desired) = @_;
+ my $ix = $svtab{$$gv};
+ defined($ix) ? $ix : do {
+ if ($gv->GP) {
+ my ($svix, $avix, $hvix, $cvix, $ioix, $formix);
+ nice "[GV]";
+ my $name = $gv->STASH->NAME . "::" . $gv->NAME;
+ asm "gv_fetchpvx", cstring $name;
+ $svtab{$$gv} = $varix = $ix = $tix++;
+ asm "sv_flags", $gv->FLAGS;
+ asm "sv_refcnt", $gv->REFCNT;
+ asm "xgv_flags", $gv->GvFLAGS;
+
+ asm "gp_refcnt", $gv->GvREFCNT;
+ asm "load_glob", $ix if $name eq "CORE::GLOBAL::glob";
+ return $ix
+ unless $desired || desired $gv;
+ $svix = $gv->SV->ix;
+ $avix = $gv->AV->ix;
+ $hvix = $gv->HV->ix;
+
+ # XXX {{{{
+ my $cv = $gv->CV;
+ $cvix = $$cv && defined $files{$cv->FILE} ? $cv->ix : 0;
+ my $form = $gv->FORM;
+ $formix = $$form && defined $files{$form->FILE} ? $form->ix : 0;
+
+ $ioix = $name !~ /STDOUT$/ ? $gv->IO->ix : 0;
+ # }}}} XXX
+
+ nice "-GV-",
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ asm "gp_sv", $svix;
+ asm "gp_av", $avix;
+ asm "gp_hv", $hvix;
+ asm "gp_cv", $cvix;
+ asm "gp_io", $ioix;
+ asm "gp_cvgen", $gv->CVGEN;
+ asm "gp_form", $formix;
+ asm "gp_file", pvix $gv->FILE;
+ asm "gp_line", $gv->LINE;
+ asm "formfeed", $svix if $name eq "main::\cL";
+ } else {
+ nice "[GV]";
+ asm "newsvx", $gv->FLAGS;
+ $svtab{$$gv} = $varix = $ix = $tix++;
+ my $stashix = $gv->STASH->ix;
+ $gv->B::PVMG::bsave($ix);
+ asm "xgv_flags", $gv->GvFLAGS;
+ asm "xgv_stash", $stashix;
+ }
+ $ix;
+ }
+}
+
+sub B::HV::ix {
+ my $hv = shift;
+ my $ix = $svtab{$$hv};
+ defined($ix) ? $ix : do {
+ my ($ix,$i,@array);
+ my $name = $hv->NAME;
+ if ($name) {
+ nice "[STASH]";
+ asm "gv_stashpvx", cstring $name;
+ asm "sv_flags", $hv->FLAGS;
+ $svtab{$$hv} = $varix = $ix = $tix++;
+ asm "xhv_name", pvix $name;
+ # my $pmrootix = $hv->PMROOT->ix; # XXX
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ # asm "xhv_pmroot", $pmrootix; # XXX
+ } else {
+ nice "[HV]";
+ asm "newsvx", $hv->FLAGS;
+ $svtab{$$hv} = $varix = $ix = $tix++;
+ my $stashix = $hv->SvSTASH->ix;
+ for (@array = $hv->ARRAY) {
+ next if $i = not $i;
+ $_ = $_->ix;
+ }
+ nice "-HV-",
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ ($i = not $i) ? asm ("newpv", pvstring $_) : asm("hv_store", $_)
+ for @array;
+ if (VERSION < 5.009) {
+ asm "xnv", $hv->NVX;
+ }
+ asm "xmg_stash", $stashix;
+ asm "xhv_riter", $hv->RITER;
+ }
+ asm "sv_refcnt", $hv->REFCNT;
+ $ix;
+ }
+}
+
+sub B::NULL::ix {
+ my $sv = shift;
+ $$sv ? $sv->B::SV::ix : 0;
+}
+
+sub B::NULL::opwalk { 0 }
+
+#################################################
+
+sub B::NULL::bsave {
+ my ($sv,$ix) = @_;
+
+ nice '-'.class($sv).'-',
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ asm "sv_refcnt", $sv->REFCNT;
+}
+
+sub B::SV::bsave;
+ *B::SV::bsave = *B::NULL::bsave;
+
+sub B::RV::bsave {
+ my ($sv,$ix) = @_;
+ my $rvix = $sv->RV->ix;
+ $sv->B::NULL::bsave($ix);
+ asm "xrv", $rvix;
+}
+
+sub B::PV::bsave {
+ my ($sv,$ix) = @_;
+ $sv->B::NULL::bsave($ix);
+ asm "newpv", pvstring $sv->PVBM;
+ asm "xpv";
+}
+
+sub B::IV::bsave {
+ my ($sv,$ix) = @_;
+ $sv->B::NULL::bsave($ix);
+ asm "xiv", $sv->IVX;
+}
+
+sub B::NV::bsave {
+ my ($sv,$ix) = @_;
+ $sv->B::NULL::bsave($ix);
+ asm "xnv", sprintf "%.40g", $sv->NVX;
+}
+
+sub B::PVIV::bsave {
+ my ($sv,$ix) = @_;
+ $sv->POK ?
+ $sv->B::PV::bsave($ix):
+ $sv->ROK ?
+ $sv->B::RV::bsave($ix):
+ $sv->B::NULL::bsave($ix);
+ if (VERSION >= 5.009) {
+ # See note below in B::PVNV::bsave
+ return if $sv->isa('B::AV');
+ return if $sv->isa('B::HV');
+ }
+ asm "xiv", !ITHREADS && $sv->FLAGS & (SVf_FAKE|SVf_READONLY) ?
+ "0 but true" : $sv->IVX;
+}
+
+sub B::PVNV::bsave {
+ my ($sv,$ix) = @_;
+ $sv->B::PVIV::bsave($ix);
+ if (VERSION >= 5.009) {
+ # Magical AVs end up here, but AVs now don't have an NV slot actually
+ # allocated. Hence don't write out assembly to store the NV slot if
+ # we're actually an array.
+ return if $sv->isa('B::AV');
+ # Likewise HVs have no NV slot actually allocated.
+ # I don't think that they can get here, but better safe than sorry
+ return if $sv->isa('B::HV');
+ }
+ asm "xnv", sprintf "%.40g", $sv->NVX;
+}
+
+sub B::PVMG::domagic {
+ my ($sv,$ix) = @_;
+ nice '-MAGICAL-';
+ my @mglist = $sv->MAGIC;
+ my (@mgix, @namix);
+ for (@mglist) {
+ push @mgix, $_->OBJ->ix;
+ push @namix, $_->PTR->ix if $_->LENGTH == B::HEf_SVKEY;
+ }
+
+ nice '-'.class($sv).'-',
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ for (@mglist) {
+ asm "sv_magic", cstring $_->TYPE;
+ asm "mg_obj", shift @mgix;
+ my $length = $_->LENGTH;
+ if ($length == B::HEf_SVKEY) {
+ asm "mg_namex", shift @namix;
+ } elsif ($length) {
+ asm "newpv", pvstring $_->PTR;
+ asm "mg_name";
+ }
+ }
+}
+
+sub B::PVMG::bsave {
+ my ($sv,$ix) = @_;
+ my $stashix = $sv->SvSTASH->ix;
+ $sv->B::PVNV::bsave($ix);
+ asm "xmg_stash", $stashix;
+ $sv->domagic($ix) if $sv->MAGICAL;
+}
+
+sub B::PVLV::bsave {
+ my ($sv,$ix) = @_;
+ my $targix = $sv->TARG->ix;
+ $sv->B::PVMG::bsave($ix);
+ asm "xlv_targ", $targix;
+ asm "xlv_targoff", $sv->TARGOFF;
+ asm "xlv_targlen", $sv->TARGLEN;
+ asm "xlv_type", $sv->TYPE;
+
+}
+
+sub B::BM::bsave {
+ my ($sv,$ix) = @_;
+ $sv->B::PVMG::bsave($ix);
+ asm "xpv_cur", $sv->CUR;
+ asm "xbm_useful", $sv->USEFUL;
+ asm "xbm_previous", $sv->PREVIOUS;
+ asm "xbm_rare", $sv->RARE;
+}
+
+sub B::IO::bsave {
+ my ($io,$ix) = @_;
+ my $topix = $io->TOP_GV->ix;
+ my $fmtix = $io->FMT_GV->ix;
+ my $bottomix = $io->BOTTOM_GV->ix;
+ $io->B::PVMG::bsave($ix);
+ asm "xio_lines", $io->LINES;
+ asm "xio_page", $io->PAGE;
+ asm "xio_page_len", $io->PAGE_LEN;
+ asm "xio_lines_left", $io->LINES_LEFT;
+ asm "xio_top_name", pvix $io->TOP_NAME;
+ asm "xio_top_gv", $topix;
+ asm "xio_fmt_name", pvix $io->FMT_NAME;
+ asm "xio_fmt_gv", $fmtix;
+ asm "xio_bottom_name", pvix $io->BOTTOM_NAME;
+ asm "xio_bottom_gv", $bottomix;
+ asm "xio_subprocess", $io->SUBPROCESS;
+ asm "xio_type", ord $io->IoTYPE;
+ # asm "xio_flags", ord($io->IoFLAGS) & ~32; # XXX XXX
+}
+
+sub B::CV::bsave {
+ my ($cv,$ix) = @_;
+ my $stashix = $cv->STASH->ix;
+ my $gvix = $cv->GV->ix;
+ my $padlistix = $cv->PADLIST->ix;
+ my $outsideix = $cv->OUTSIDE->ix;
+ my $constix = $cv->CONST ? $cv->XSUBANY->ix : 0;
+ my $startix = $cv->START->opwalk;
+ my $rootix = $cv->ROOT->ix;
+
+ $cv->B::PVMG::bsave($ix);
+ asm "xcv_stash", $stashix;
+ asm "xcv_start", $startix;
+ asm "xcv_root", $rootix;
+ asm "xcv_xsubany", $constix;
+ asm "xcv_gv", $gvix;
+ asm "xcv_file", pvix $cv->FILE if $cv->FILE; # XXX AD
+ asm "xcv_padlist", $padlistix;
+ asm "xcv_outside", $outsideix;
+ asm "xcv_flags", $cv->CvFLAGS;
+ asm "xcv_outside_seq", $cv->OUTSIDE_SEQ;
+ asm "xcv_depth", $cv->DEPTH;
+}
+
+sub B::FM::bsave {
+ my ($form,$ix) = @_;
+
+ $form->B::CV::bsave($ix);
+ asm "xfm_lines", $form->LINES;
+}
+
+sub B::AV::bsave {
+ my ($av,$ix) = @_;
+ return $av->B::PVMG::bsave($ix) if $av->MAGICAL;
+ my @array = $av->ARRAY;
+ $_ = $_->ix for @array;
+ my $stashix = $av->SvSTASH->ix;
+
+ nice "-AV-",
+ asm "ldsv", $varix = $ix unless $ix == $varix;
+ asm "av_extend", $av->MAX if $av->MAX >= 0;
+ asm "av_pushx", $_ for @array;
+ asm "sv_refcnt", $av->REFCNT;
+ if (VERSION < 5.009) {
+ asm "xav_flags", $av->AvFLAGS;
+ }
+ asm "xmg_stash", $stashix;
+}
+
+sub B::GV::desired {
+ my $gv = shift;
+ my ($cv, $form);
+ $files{$gv->FILE} && $gv->LINE
+ || ${$cv = $gv->CV} && $files{$cv->FILE}
+ || ${$form = $gv->FORM} && $files{$form->FILE}
+}
+
+sub B::HV::bwalk {
+ my $hv = shift;
+ return if $walked{$$hv}++;
+ my %stash = $hv->ARRAY;
+ while (my($k,$v) = each %stash) {
+ if ($v->SvTYPE == SVt_PVGV) {
+ my $hash = $v->HV;
+ if ($$hash && $hash->NAME) {
+ $hash->bwalk;
+ }
+ $v->ix(1) if desired $v;
+ } else {
+ nice "[prototype]";
+ asm "gv_fetchpvx", cstring $hv->NAME . "::$k";
+ $svtab{$$v} = $varix = $tix;
+ $v->bsave($tix++);
+ asm "sv_flags", $v->FLAGS;
+ }
+ }
+}
+
+######################################################
+
+
+sub B::OP::bsave_thin {
+ my ($op, $ix) = @_;
+ my $next = $op->next;
+ my $nextix = $optab{$$next};
+ $nextix = 0, push @cloop, $op unless defined $nextix;
+ if ($ix != $opix) {
+ nice '-'.$op->name.'-',
+ asm "ldop", $opix = $ix;
+ }
+ asm "op_next", $nextix;
+ asm "op_targ", $op->targ if $op->type; # tricky
+ asm "op_flags", $op->flags;
+ asm "op_private", $op->private;
+}
+
+sub B::OP::bsave;
+ *B::OP::bsave = *B::OP::bsave_thin;
+
+sub B::UNOP::bsave {
+ my ($op, $ix) = @_;
+ my $name = $op->name;
+ my $flags = $op->flags;
+ my $first = $op->first;
+ my $firstix =
+ $name =~ /fl[io]p/
+ # that's just neat
+ || (!ITHREADS && $name eq 'regcomp')
+ # trick for /$a/o in pp_regcomp
+ || $name eq 'rv2sv'
+ && $op->flags & OPf_MOD
+ && $op->private & OPpLVAL_INTRO
+ # change #18774 made my life hard
+ ? $first->ix
+ : 0;
+
+ $op->B::OP::bsave($ix);
+ asm "op_first", $firstix;
+}
+
+sub B::BINOP::bsave {
+ my ($op, $ix) = @_;
+ if ($op->name eq 'aassign' && $op->private & B::OPpASSIGN_HASH()) {
+ my $last = $op->last;
+ my $lastix = do {
+ local *B::OP::bsave = *B::OP::bsave_fat;
+ local *B::UNOP::bsave = *B::UNOP::bsave_fat;
+ $last->ix;
+ };
+ asm "ldop", $lastix unless $lastix == $opix;
+ asm "op_targ", $last->targ;
+ $op->B::OP::bsave($ix);
+ asm "op_last", $lastix;
+ } else {
+ $op->B::OP::bsave($ix);
+ }
+}
+
+# not needed if no pseudohashes
+
+*B::BINOP::bsave = *B::OP::bsave if VERSION >= 5.009;
+
+# deal with sort / formline
+
+sub B::LISTOP::bsave {
+ my ($op, $ix) = @_;
+ my $name = $op->name;
+ sub blocksort() { OPf_SPECIAL|OPf_STACKED }
+ if ($name eq 'sort' && ($op->flags & blocksort) == blocksort) {
+ my $first = $op->first;
+ my $pushmark = $first->sibling;
+ my $rvgv = $pushmark->first;
+ my $leave = $rvgv->first;
+
+ my $leaveix = $leave->ix;
+
+ my $rvgvix = $rvgv->ix;
+ asm "ldop", $rvgvix unless $rvgvix == $opix;
+ asm "op_first", $leaveix;
+
+ my $pushmarkix = $pushmark->ix;
+ asm "ldop", $pushmarkix unless $pushmarkix == $opix;
+ asm "op_first", $rvgvix;
+
+ my $firstix = $first->ix;
+ asm "ldop", $firstix unless $firstix == $opix;
+ asm "op_sibling", $pushmarkix;
+
+ $op->B::OP::bsave($ix);
+ asm "op_first", $firstix;
+ } elsif ($name eq 'formline') {
+ $op->B::UNOP::bsave_fat($ix);
+ } else {
+ $op->B::OP::bsave($ix);
+ }
+}
+
+# fat versions
+
+sub B::OP::bsave_fat {
+ my ($op, $ix) = @_;
+ my $siblix = $op->sibling->ix;
+
+ $op->B::OP::bsave_thin($ix);
+ asm "op_sibling", $siblix;
+ # asm "op_seq", -1; XXX don't allocate OPs piece by piece
+}
+
+sub B::UNOP::bsave_fat {
+ my ($op,$ix) = @_;
+ my $firstix = $op->first->ix;
+
+ $op->B::OP::bsave($ix);
+ asm "op_first", $firstix;
+}
+
+sub B::BINOP::bsave_fat {
+ my ($op,$ix) = @_;
+ my $last = $op->last;
+ my $lastix = $op->last->ix;
+ if (VERSION < 5.009 && $op->name eq 'aassign' && $last->name eq 'null') {
+ asm "ldop", $lastix unless $lastix == $opix;
+ asm "op_targ", $last->targ;
+ }
+
+ $op->B::UNOP::bsave($ix);
+ asm "op_last", $lastix;
+}
+
+sub B::LOGOP::bsave {
+ my ($op,$ix) = @_;
+ my $otherix = $op->other->ix;
+
+ $op->B::UNOP::bsave($ix);
+ asm "op_other", $otherix;
+}
+
+sub B::PMOP::bsave {
+ my ($op,$ix) = @_;
+ my ($rrop, $rrarg, $rstart);
+
+ # my $pmnextix = $op->pmnext->ix; # XXX
+
+ if (ITHREADS) {
+ if ($op->name eq 'subst') {
+ $rrop = "op_pmreplroot";
+ $rrarg = $op->pmreplroot->ix;
+ $rstart = $op->pmreplstart->ix;
+ } elsif ($op->name eq 'pushre') {
+ $rrop = "op_pmreplrootpo";
+ $rrarg = $op->pmreplroot;
+ }
+ $op->B::BINOP::bsave($ix);
+ asm "op_pmstashpv", pvix $op->pmstashpv;
+ } else {
+ $rrop = "op_pmreplrootgv";
+ $rrarg = $op->pmreplroot->ix;
+ $rstart = $op->pmreplstart->ix if $op->name eq 'subst';
+ my $stashix = $op->pmstash->ix;
+ $op->B::BINOP::bsave($ix);
+ asm "op_pmstash", $stashix;
+ }
+
+ asm $rrop, $rrarg if $rrop;
+ asm "op_pmreplstart", $rstart if $rstart;
+
+ asm "op_pmflags", $op->pmflags;
+ asm "op_pmpermflags", $op->pmpermflags;
+ asm "op_pmdynflags", $op->pmdynflags;
+ # asm "op_pmnext", $pmnextix; # XXX
+ asm "newpv", pvstring $op->precomp;
+ asm "pregcomp";
+}
+
+sub B::SVOP::bsave {
+ my ($op,$ix) = @_;
+ my $svix = $op->sv->ix;
+
+ $op->B::OP::bsave($ix);
+ asm "op_sv", $svix;
+}
+
+sub B::PADOP::bsave {
+ my ($op,$ix) = @_;
+
+ $op->B::OP::bsave($ix);
+ asm "op_padix", $op->padix;
+}
+
+sub B::PVOP::bsave {
+ my ($op,$ix) = @_;
+ $op->B::OP::bsave($ix);
+ return unless my $pv = $op->pv;
+
+ if ($op->name eq 'trans') {
+ asm "op_pv_tr", join ',', length($pv)/2, unpack("s*", $pv);
+ } else {
+ asm "newpv", pvstring $pv;
+ asm "op_pv";
+ }
+}
+
+sub B::LOOP::bsave {
+ my ($op,$ix) = @_;
+ my $nextix = $op->nextop->ix;
+ my $lastix = $op->lastop->ix;
+ my $redoix = $op->redoop->ix;
+
+ $op->B::BINOP::bsave($ix);
+ asm "op_redoop", $redoix;
+ asm "op_nextop", $nextix;
+ asm "op_lastop", $lastix;
+}
+
+sub B::COP::bsave {
+ my ($cop,$ix) = @_;
+ my $warnix = $cop->warnings->ix;
+ my $ioix = $cop->io->ix;
+ if (ITHREADS) {
+ $cop->B::OP::bsave($ix);
+ asm "cop_stashpv", pvix $cop->stashpv;
+ asm "cop_file", pvix $cop->file;
+ } else {
+ my $stashix = $cop->stash->ix;
+ my $fileix = $cop->filegv->ix(1);
+ $cop->B::OP::bsave($ix);
+ asm "cop_stash", $stashix;
+ asm "cop_filegv", $fileix;
+ }
+ asm "cop_label", pvix $cop->label if $cop->label; # XXX AD
+ asm "cop_seq", $cop->cop_seq;
+ asm "cop_arybase", $cop->arybase;
+ asm "cop_line", $cop->line;
+ asm "cop_warnings", $warnix;
+ asm "cop_io", $ioix;
+}
+
+sub B::OP::opwalk {
+ my $op = shift;
+ my $ix = $optab{$$op};
+ defined($ix) ? $ix : do {
+ my $ix;
+ my @oplist = $op->oplist;
+ push @cloop, undef;
+ $ix = $_->ix while $_ = pop @oplist;
+ while ($_ = pop @cloop) {
+ asm "ldop", $optab{$$_};
+ asm "op_next", $optab{${$_->next}};
+ }
+ $ix;
+ }
+}
+
+#################################################
+
+sub save_cq {
+ my $av;
+ if (($av=begin_av)->isa("B::AV")) {
+ if ($savebegins) {
+ for ($av->ARRAY) {
+ next unless $_->FILE eq $0;
+ asm "push_begin", $_->ix;
+ }
+ } else {
+ for ($av->ARRAY) {
+ next unless $_->FILE eq $0;
+ # XXX BEGIN { goto A while 1; A: }
+ for (my $op = $_->START; $$op; $op = $op->next) {
+ next unless $op->name eq 'require' ||
+ # this kludge needed for tests
+ $op->name eq 'gv' && do {
+ my $gv = class($op) eq 'SVOP' ?
+ $op->gv :
+ (($_->PADLIST->ARRAY)[1]->ARRAY)[$op->padix];
+ $$gv && $gv->NAME =~ /use_ok|plan/
+ };
+ asm "push_begin", $_->ix;
+ last;
+ }
+ }
+ }
+ }
+ if (($av=init_av)->isa("B::AV")) {
+ for ($av->ARRAY) {
+ next unless $_->FILE eq $0;
+ asm "push_init", $_->ix;
+ }
+ }
+ if (($av=end_av)->isa("B::AV")) {
+ for ($av->ARRAY) {
+ next unless $_->FILE eq $0;
+ asm "push_end", $_->ix;
+ }
+ }
+}
+
+sub compile {
+ my ($head, $scan, $T_inhinc, $keep_syn);
+ my $cwd = '';
+ $files{$0} = 1;
+ sub keep_syn {
+ $keep_syn = 1;
+ *B::OP::bsave = *B::OP::bsave_fat;
+ *B::UNOP::bsave = *B::UNOP::bsave_fat;
+ *B::BINOP::bsave = *B::BINOP::bsave_fat;
+ *B::LISTOP::bsave = *B::LISTOP::bsave_fat;
+ }
+ sub bwarn { print STDERR "Bytecode.pm: @_\n" }
+
+ for (@_) {
+ if (/^-S/) {
+ *newasm = *endasm = sub { };
+ *asm = sub { print " @_\n" };
+ *nice = sub ($) { print "\n@_\n" };
+ } elsif (/^-H/) {
+ require ByteLoader;
+ $head = "#! $^X\nuse ByteLoader $ByteLoader::VERSION;\n";
+ } elsif (/^-k/) {
+ keep_syn;
+ } elsif (/^-o(.*)$/) {
+ open STDOUT, ">$1" or die "open $1: $!";
+ } elsif (/^-f(.*)$/) {
+ $files{$1} = 1;
+ } elsif (/^-s(.*)$/) {
+ $scan = length($1) ? $1 : $0;
+ } elsif (/^-b/) {
+ $savebegins = 1;
+ # this is here for the testsuite
+ } elsif (/^-TI/) {
+ $T_inhinc = 1;
+ } elsif (/^-TF(.*)/) {
+ my $thatfile = $1;
+ *B::COP::file = sub { $thatfile };
+ } else {
+ bwarn "Ignoring '$_' option";
+ }
+ }
+ if ($scan) {
+ my $f;
+ if (open $f, $scan) {
+ while (<$f>) {
+ /^#\s*line\s+\d+\s+("?)(.*)\1/ and $files{$2} = 1;
+ /^#/ and next;
+ if (/\bgoto\b\s*[^&]/ && !$keep_syn) {
+ bwarn "keeping the syntax tree: \"goto\" op found";
+ keep_syn;
+ }
+ }
+ } else {
+ bwarn "cannot rescan '$scan'";
+ }
+ close $f;
+ }
+ binmode STDOUT;
+ return sub {
+ print $head if $head;
+ newasm sub { print @_ };
+
+ defstash->bwalk;
+ asm "main_start", main_start->opwalk;
+ asm "main_root", main_root->ix;
+ asm "main_cv", main_cv->ix;
+ asm "curpad", (comppadlist->ARRAY)[1]->ix;
+
+ asm "signal", cstring "__WARN__" # XXX
+ if warnhook->ix;
+ asm "incav", inc_gv->AV->ix if $T_inhinc;
+ save_cq;
+ asm "incav", inc_gv->AV->ix if $T_inhinc;
+ asm "dowarn", dowarn;
+
+ {
+ no strict 'refs';
+ nice "<DATA>";
+ my $dh = *{defstash->NAME."::DATA"};
+ unless (eof $dh) {
+ local undef $/;
+ asm "data", ord 'D';
+ print <$dh>;
+ } else {
+ asm "ret";
+ }
+ }
+
+ endasm;
+ }
+}
+
+1;
+
+=head1 NAME
+
+B::Bytecode - Perl compiler's bytecode backend
+
+=head1 SYNOPSIS
+
+B<perl -MO=Bytecode>[B<,-H>][B<,-o>I<script.plc>] I<script.pl>
+
+=head1 DESCRIPTION
+
+Compiles a Perl script into a bytecode format that could be loaded
+later by the ByteLoader module and executed as a regular Perl script.
+
+=head1 EXAMPLE
+
+ $ perl -MO=Bytecode,-H,-ohi -e 'print "hi!\n"'
+ $ perl hi
+ hi!
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-b>
+
+Save all the BEGIN blocks. Normally only BEGIN blocks that C<require>
+other files (ex. C<use Foo;>) are saved.
+
+=item B<-H>
+
+prepend a C<use ByteLoader VERSION;> line to the produced bytecode.
+
+=item B<-k>
+
+keep the syntax tree - it is stripped by default.
+
+=item B<-o>I<outfile>
+
+put the bytecode in <outfile> instead of dumping it to STDOUT.
+
+=item B<-s>
+
+scan the script for C<# line ..> directives and for <goto LABEL>
+expressions. When gotos are found keep the syntax tree.
+
+=back
+
+=head1 KNOWN BUGS
+
+=over 4
+
+=item *
+
+C<BEGIN { goto A: while 1; A: }> won't even compile.
+
+=item *
+
+C<?...?> and C<reset> do not work as expected.
+
+=item *
+
+variables in C<(?{ ... })> constructs are not properly scoped.
+
+=item *
+
+scripts that use source filters will fail miserably.
+
+=back
+
+=head1 NOTICE
+
+There are also undocumented bugs and options.
+
+THIS CODE IS HIGHLY EXPERIMENTAL. USE AT YOUR OWN RISK.
+
+=head1 AUTHORS
+
+Originally written by Malcolm Beattie <mbeattie@sable.ox.ac.uk> and
+modified by Benjamin Stuhl <sho_pi@hotmail.com>.
+
+Rewritten by Enache Adrian <enache@rdslink.ro>, 2003 a.d.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/C.pm b/Master/tlpkg/tlperl/lib/B/C.pm
new file mode 100644
index 00000000000..cebf4132ffd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/C.pm
@@ -0,0 +1,2272 @@
+# C.pm
+#
+# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+
+package B::C;
+
+our $VERSION = '1.04_01';
+
+package B::C::Section;
+
+use B ();
+use base B::Section;
+
+sub new
+{
+ my $class = shift;
+ my $o = $class->SUPER::new(@_);
+ push @$o, { values => [] };
+ return $o;
+}
+
+sub add
+{
+ my $section = shift;
+ push(@{$section->[-1]{values}},@_);
+}
+
+sub index
+{
+ my $section = shift;
+ return scalar(@{$section->[-1]{values}})-1;
+}
+
+sub output
+{
+ my ($section, $fh, $format) = @_;
+ my $sym = $section->symtable || {};
+ my $default = $section->default;
+ my $i;
+ foreach (@{$section->[-1]{values}})
+ {
+ s{(s\\_[0-9a-f]+)}{ exists($sym->{$1}) ? $sym->{$1} : $default; }ge;
+ printf $fh $format, $_, $i;
+ ++$i;
+ }
+}
+
+package B::C::InitSection;
+
+# avoid use vars
+@B::C::InitSection::ISA = qw(B::C::Section);
+
+sub new {
+ my $class = shift;
+ my $max_lines = 10000; #pop;
+ my $section = $class->SUPER::new( @_ );
+
+ $section->[-1]{evals} = [];
+ $section->[-1]{chunks} = [];
+ $section->[-1]{nosplit} = 0;
+ $section->[-1]{current} = [];
+ $section->[-1]{count} = 0;
+ $section->[-1]{max_lines} = $max_lines;
+
+ return $section;
+}
+
+sub split {
+ my $section = shift;
+ $section->[-1]{nosplit}--
+ if $section->[-1]{nosplit} > 0;
+}
+
+sub no_split {
+ shift->[-1]{nosplit}++;
+}
+
+sub inc_count {
+ my $section = shift;
+
+ $section->[-1]{count} += $_[0];
+ # this is cheating
+ $section->add();
+}
+
+sub add {
+ my $section = shift->[-1];
+ my $current = $section->{current};
+ my $nosplit = $section->{nosplit};
+
+ push @$current, @_;
+ $section->{count} += scalar(@_);
+ if( !$nosplit && $section->{count} >= $section->{max_lines} ) {
+ push @{$section->{chunks}}, $current;
+ $section->{current} = [];
+ $section->{count} = 0;
+ }
+}
+
+sub add_eval {
+ my $section = shift;
+ my @strings = @_;
+
+ foreach my $i ( @strings ) {
+ $i =~ s/\"/\\\"/g;
+ }
+ push @{$section->[-1]{evals}}, @strings;
+}
+
+sub output {
+ my( $section, $fh, $format, $init_name ) = @_;
+ my $sym = $section->symtable || {};
+ my $default = $section->default;
+ push @{$section->[-1]{chunks}}, $section->[-1]{current};
+
+ my $name = "aaaa";
+ foreach my $i ( @{$section->[-1]{chunks}} ) {
+ print $fh <<"EOT";
+static int perl_init_${name}()
+{
+ dTARG;
+ dSP;
+EOT
+ foreach my $j ( @$i ) {
+ $j =~ s{(s\\_[0-9a-f]+)}
+ { exists($sym->{$1}) ? $sym->{$1} : $default; }ge;
+ print $fh "\t$j\n";
+ }
+ print $fh "\treturn 0;\n}\n";
+
+ $section->SUPER::add( "perl_init_${name}();" );
+ ++$name;
+ }
+ foreach my $i ( @{$section->[-1]{evals}} ) {
+ $section->SUPER::add( sprintf q{eval_pv("%s",1);}, $i );
+ }
+
+ print $fh <<"EOT";
+static int ${init_name}()
+{
+ dTARG;
+ dSP;
+EOT
+ $section->SUPER::output( $fh, $format );
+ print $fh "\treturn 0;\n}\n";
+}
+
+
+package B::C;
+use Exporter ();
+our %REGEXP;
+
+{ # block necessary for caller to work
+ my $caller = caller;
+ if( $caller eq 'O' ) {
+ require XSLoader;
+ XSLoader::load( 'B::C' );
+ }
+}
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(output_all output_boilerplate output_main mark_unused
+ init_sections set_callback save_unused_subs objsym save_context);
+
+use B qw(minus_c sv_undef walkoptree walksymtable main_root main_start peekop
+ class cstring cchar svref_2object compile_stats comppadlist hash
+ threadsv_names main_cv init_av end_av regex_padav opnumber amagic_generation
+ HEf_SVKEY SVf_POK SVf_ROK CVf_CONST);
+use B::Asmdata qw(@specialsv_name);
+
+use FileHandle;
+use Carp;
+use strict;
+use Config;
+
+my $hv_index = 0;
+my $gv_index = 0;
+my $re_index = 0;
+my $pv_index = 0;
+my $cv_index = 0;
+my $anonsub_index = 0;
+my $initsub_index = 0;
+
+my %symtable;
+my %xsub;
+my $warn_undefined_syms;
+my $verbose;
+my %unused_sub_packages;
+my $use_xsloader;
+my $nullop_count;
+my $pv_copy_on_grow = 0;
+my $optimize_ppaddr = 0;
+my $optimize_warn_sv = 0;
+my $use_perl_script_name = 0;
+my $save_data_fh = 0;
+my $save_sig = 0;
+my ($debug_cops, $debug_av, $debug_cv, $debug_mg);
+my $max_string_len;
+
+my $ithreads = $Config{useithreads} eq 'define';
+
+my @threadsv_names;
+BEGIN {
+ @threadsv_names = threadsv_names();
+}
+
+# Code sections
+my ($init, $decl, $symsect, $binopsect, $condopsect, $copsect,
+ $padopsect, $listopsect, $logopsect, $loopsect, $opsect, $pmopsect,
+ $pvopsect, $svopsect, $unopsect, $svsect, $xpvsect, $xpvavsect,
+ $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect, $xpvmgsect, $xpvlvsect,
+ $xrvsect, $xpvbmsect, $xpviosect );
+my @op_sections = \( $binopsect, $condopsect, $copsect, $padopsect, $listopsect,
+ $logopsect, $loopsect, $opsect, $pmopsect, $pvopsect, $svopsect,
+ $unopsect );
+
+sub walk_and_save_optree;
+my $saveoptree_callback = \&walk_and_save_optree;
+sub set_callback { $saveoptree_callback = shift }
+sub saveoptree { &$saveoptree_callback(@_) }
+
+sub walk_and_save_optree {
+ my ($name, $root, $start) = @_;
+ walkoptree($root, "save");
+ return objsym($start);
+}
+
+# Look this up here so we can do just a number compare
+# rather than looking up the name of every BASEOP in B::OP
+my $OP_THREADSV = opnumber('threadsv');
+
+sub savesym {
+ my ($obj, $value) = @_;
+ my $sym = sprintf("s\\_%x", $$obj);
+ $symtable{$sym} = $value;
+}
+
+sub objsym {
+ my $obj = shift;
+ return $symtable{sprintf("s\\_%x", $$obj)};
+}
+
+sub getsym {
+ my $sym = shift;
+ my $value;
+
+ return 0 if $sym eq "sym_0"; # special case
+ $value = $symtable{$sym};
+ if (defined($value)) {
+ return $value;
+ } else {
+ warn "warning: undefined symbol $sym\n" if $warn_undefined_syms;
+ return "UNUSED";
+ }
+}
+
+sub savere {
+ my $re = shift;
+ my $sym = sprintf("re%d", $re_index++);
+ $decl->add(sprintf("static char *$sym = %s;", cstring($re)));
+
+ return ($sym,length(pack "a*",$re));
+}
+
+sub savepv {
+ my $pv = pack "a*", shift;
+ my $pvsym = 0;
+ my $pvmax = 0;
+ if ($pv_copy_on_grow) {
+ $pvsym = sprintf("pv%d", $pv_index++);
+
+ if( defined $max_string_len && length($pv) > $max_string_len ) {
+ my $chars = join ', ', map { cchar $_ } split //, $pv;
+ $decl->add(sprintf("static char %s[] = { %s };", $pvsym, $chars));
+ }
+ else {
+ my $cstring = cstring($pv);
+ if ($cstring ne "0") { # sic
+ $decl->add(sprintf("static char %s[] = %s;",
+ $pvsym, $cstring));
+ }
+ }
+ } else {
+ $pvmax = length(pack "a*",$pv) + 1;
+ }
+ return ($pvsym, $pvmax);
+}
+
+sub save_rv {
+ my $sv = shift;
+# confess "Can't save RV: not ROK" unless $sv->FLAGS & SVf_ROK;
+ my $rv = $sv->RV->save;
+
+ $rv =~ s/^\(([AGHS]V|IO)\s*\*\)\s*(\&sv_list.*)$/$2/;
+
+ return $rv;
+}
+
+# savesym, pvmax, len, pv
+sub save_pv_or_rv {
+ my $sv = shift;
+
+ my $rok = $sv->FLAGS & SVf_ROK;
+ my $pok = $sv->FLAGS & SVf_POK;
+ my( $len, $pvmax, $savesym, $pv ) = ( 0, 0 );
+ if( $rok ) {
+ $savesym = '(char*)' . save_rv( $sv );
+ }
+ else {
+ $pv = $pok ? (pack "a*", $sv->PV) : undef;
+ $len = $pok ? length($pv) : 0;
+ ($savesym, $pvmax) = $pok ? savepv($pv) : ( 'NULL', 0 );
+ }
+
+ return ( $savesym, $pvmax, $len, $pv );
+}
+
+# see also init_op_ppaddr below; initializes the ppaddt to the
+# OpTYPE; init_op_ppaddr iterates over the ops and sets
+# op_ppaddr to PL_ppaddr[op_ppaddr]; this avoids an explicit assignmente
+# in perl_init ( ~10 bytes/op with GCC/i386 )
+sub B::OP::fake_ppaddr {
+ return $optimize_ppaddr ?
+ sprintf("INT2PTR(void*,OP_%s)", uc( $_[0]->name ) ) :
+ 'NULL';
+}
+
+# This pair is needed becase B::FAKEOP::save doesn't scalar dereference
+# $op->next and $op->sibling
+
+{
+ # For 5.9 the hard coded text is the values for op_opt and op_static in each
+ # op. The value of op_opt is irrelevant, and the value of op_static needs to
+ # be 1 to tell op_free that this is a statically defined op and that is
+ # shouldn't be freed.
+
+ # For 5.8:
+ # Current workaround/fix for op_free() trying to free statically
+ # defined OPs is to set op_seq = -1 and check for that in op_free().
+ # Instead of hardwiring -1 in place of $op->seq, we use $op_seq
+ # so that it can be changed back easily if necessary. In fact, to
+ # stop compilers from moaning about a U16 being initialised with an
+ # uncast -1 (the printf format is %d so we can't tweak it), we have
+ # to "know" that op_seq is a U16 and use 65535. Ugh.
+
+ my $static = $] > 5.009 ? '0, 1, 0' : sprintf "%u", 65535;
+ sub B::OP::_save_common_middle {
+ my $op = shift;
+ sprintf ("%s, %u, %u, $static, 0x%x, 0x%x",
+ $op->fake_ppaddr, $op->targ, $op->type, $op->flags, $op->private);
+ }
+}
+
+sub B::OP::_save_common {
+ my $op = shift;
+ return sprintf("s\\_%x, s\\_%x, %s",
+ ${$op->next}, ${$op->sibling}, $op->_save_common_middle);
+}
+
+sub B::OP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ my $type = $op->type;
+ $nullop_count++ unless $type;
+ if ($type == $OP_THREADSV) {
+ # saves looking up ppaddr but it's a bit naughty to hard code this
+ $init->add(sprintf("(void)find_threadsv(%s);",
+ cstring($threadsv_names[$op->targ])));
+ }
+ $opsect->add($op->_save_common);
+ my $ix = $opsect->index;
+ $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "&op_list[$ix]");
+}
+
+sub B::FAKEOP::new {
+ my ($class, %objdata) = @_;
+ bless \%objdata, $class;
+}
+
+sub B::FAKEOP::save {
+ my ($op, $level) = @_;
+ $opsect->add(sprintf("%s, %s, %s",
+ $op->next, $op->sibling, $op->_save_common_middle));
+ my $ix = $opsect->index;
+ $init->add(sprintf("op_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ return "&op_list[$ix]";
+}
+
+sub B::FAKEOP::next { $_[0]->{"next"} || 0 }
+sub B::FAKEOP::type { $_[0]->{type} || 0}
+sub B::FAKEOP::sibling { $_[0]->{sibling} || 0 }
+sub B::FAKEOP::ppaddr { $_[0]->{ppaddr} || 0 }
+sub B::FAKEOP::targ { $_[0]->{targ} || 0 }
+sub B::FAKEOP::flags { $_[0]->{flags} || 0 }
+sub B::FAKEOP::private { $_[0]->{private} || 0 }
+
+sub B::UNOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $unopsect->add(sprintf("%s, s\\_%x", $op->_save_common, ${$op->first}));
+ my $ix = $unopsect->index;
+ $init->add(sprintf("unop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&unop_list[$ix]");
+}
+
+sub B::BINOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $binopsect->add(sprintf("%s, s\\_%x, s\\_%x",
+ $op->_save_common, ${$op->first}, ${$op->last}));
+ my $ix = $binopsect->index;
+ $init->add(sprintf("binop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&binop_list[$ix]");
+}
+
+sub B::LISTOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $listopsect->add(sprintf("%s, s\\_%x, s\\_%x",
+ $op->_save_common, ${$op->first}, ${$op->last}));
+ my $ix = $listopsect->index;
+ $init->add(sprintf("listop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&listop_list[$ix]");
+}
+
+sub B::LOGOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $logopsect->add(sprintf("%s, s\\_%x, s\\_%x",
+ $op->_save_common, ${$op->first}, ${$op->other}));
+ my $ix = $logopsect->index;
+ $init->add(sprintf("logop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&logop_list[$ix]");
+}
+
+sub B::LOOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ #warn sprintf("LOOP: redoop %s, nextop %s, lastop %s\n",
+ # peekop($op->redoop), peekop($op->nextop),
+ # peekop($op->lastop)); # debug
+ $loopsect->add(sprintf("%s, s\\_%x, s\\_%x, s\\_%x, s\\_%x, s\\_%x",
+ $op->_save_common, ${$op->first}, ${$op->last},
+ ${$op->redoop}, ${$op->nextop},
+ ${$op->lastop}));
+ my $ix = $loopsect->index;
+ $init->add(sprintf("loop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&loop_list[$ix]");
+}
+
+sub B::PVOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $pvopsect->add(sprintf("%s, %s", $op->_save_common, cstring($op->pv)));
+ my $ix = $pvopsect->index;
+ $init->add(sprintf("pvop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ savesym($op, "(OP*)&pvop_list[$ix]");
+}
+
+sub B::SVOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ my $sv = $op->sv;
+ my $svsym = '(SV*)' . $sv->save;
+ my $is_const_addr = $svsym =~ m/Null|\&/;
+ $svopsect->add(sprintf("%s, %s", $op->_save_common,
+ ( $is_const_addr ? $svsym : 'Nullsv' )));
+ my $ix = $svopsect->index;
+ $init->add(sprintf("svop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ $init->add("svop_list[$ix].op_sv = $svsym;")
+ unless $is_const_addr;
+ savesym($op, "(OP*)&svop_list[$ix]");
+}
+
+sub B::PADOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ $padopsect->add(sprintf("%s, %d",
+ $op->_save_common, $op->padix));
+ my $ix = $padopsect->index;
+ $init->add(sprintf("padop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+# $init->add(sprintf("padop_list[$ix].op_padix = %ld;", $op->padix));
+ savesym($op, "(OP*)&padop_list[$ix]");
+}
+
+sub B::COP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ warn sprintf("COP: line %d file %s\n", $op->line, $op->file)
+ if $debug_cops;
+ # shameless cut'n'paste from B::Deparse
+ my $warn_sv;
+ my $warnings = $op->warnings;
+ my $is_special = $warnings->isa("B::SPECIAL");
+ if ($is_special && $$warnings == 4) {
+ # use warnings 'all';
+ $warn_sv = $optimize_warn_sv ?
+ 'INT2PTR(SV*,1)' :
+ 'pWARN_ALL';
+ }
+ elsif ($is_special && $$warnings == 5) {
+ # no warnings 'all';
+ $warn_sv = $optimize_warn_sv ?
+ 'INT2PTR(SV*,2)' :
+ 'pWARN_NONE';
+ }
+ elsif ($is_special) {
+ # use warnings;
+ $warn_sv = $optimize_warn_sv ?
+ 'INT2PTR(SV*,3)' :
+ 'pWARN_STD';
+ }
+ else {
+ # something else
+ $warn_sv = $warnings->save;
+ }
+
+ $copsect->add(sprintf("%s, %s, NULL, NULL, %u, %d, %u, %s",
+ $op->_save_common, cstring($op->label), $op->cop_seq,
+ $op->arybase, $op->line,
+ ( $optimize_warn_sv ? $warn_sv : 'NULL' )));
+ my $ix = $copsect->index;
+ $init->add(sprintf("cop_list[$ix].op_ppaddr = %s;", $op->ppaddr))
+ unless $optimize_ppaddr;
+ $init->add(sprintf("cop_list[$ix].cop_warnings = %s;", $warn_sv ))
+ unless $optimize_warn_sv;
+ $init->add(sprintf("CopFILE_set(&cop_list[$ix], %s);", cstring($op->file)),
+ sprintf("CopSTASHPV_set(&cop_list[$ix], %s);", cstring($op->stashpv)));
+
+ savesym($op, "(OP*)&cop_list[$ix]");
+}
+
+sub B::PMOP::save {
+ my ($op, $level) = @_;
+ my $sym = objsym($op);
+ return $sym if defined $sym;
+ my $replroot = $op->pmreplroot;
+ my $replstart = $op->pmreplstart;
+ my $replrootfield;
+ my $replstartfield = sprintf("s\\_%x", $$replstart);
+ my $gvsym;
+ my $ppaddr = $op->ppaddr;
+ # under ithreads, OP_PUSHRE.op_replroot is an integer
+ $replrootfield = sprintf("s\\_%x", $$replroot) if ref $replroot;
+ if($ithreads && $op->name eq "pushre") {
+ $replrootfield = "INT2PTR(OP*,${replroot})";
+ } elsif ($$replroot) {
+ # OP_PUSHRE (a mutated version of OP_MATCH for the regexp
+ # argument to a split) stores a GV in op_pmreplroot instead
+ # of a substitution syntax tree. We don't want to walk that...
+ if ($op->name eq "pushre") {
+ $gvsym = $replroot->save;
+# warn "PMOP::save saving a pp_pushre with GV $gvsym\n"; # debug
+ $replrootfield = 0;
+ } else {
+ $replstartfield = saveoptree("*ignore*", $replroot, $replstart);
+ }
+ }
+ # pmnext handling is broken in perl itself, I think. Bad op_pmnext
+ # fields aren't noticed in perl's runtime (unless you try reset) but we
+ # segfault when trying to dereference it to find op->op_pmnext->op_type
+ $pmopsect->add(sprintf("%s, s\\_%x, s\\_%x, %s, %s, 0, %u, 0x%x, 0x%x, 0x%x",
+ $op->_save_common, ${$op->first}, ${$op->last},
+ $replrootfield, $replstartfield,
+ ( $ithreads ? $op->pmoffset : 0 ),
+ $op->pmflags, $op->pmpermflags, $op->pmdynflags ));
+ my $pm = sprintf("pmop_list[%d]", $pmopsect->index);
+ $init->add(sprintf("$pm.op_ppaddr = %s;", $ppaddr))
+ unless $optimize_ppaddr;
+ my $re = $op->precomp;
+ if (defined($re)) {
+ my( $resym, $relen ) = savere( $re );
+ $init->add(sprintf("PM_SETRE(&$pm,pregcomp($resym, $resym + %u, &$pm));",
+ $relen));
+ }
+ if ($gvsym) {
+ $init->add("$pm.op_pmreplroot = (OP*)$gvsym;");
+ }
+ savesym($op, "(OP*)&$pm");
+}
+
+sub B::SPECIAL::save {
+ my ($sv) = @_;
+ # special case: $$sv is not the address but an index into specialsv_list
+# warn "SPECIAL::save specialsv $$sv\n"; # debug
+ my $sym = $specialsv_name[$$sv];
+ if (!defined($sym)) {
+ confess "unknown specialsv index $$sv passed to B::SPECIAL::save";
+ }
+ return $sym;
+}
+
+sub B::OBJECT::save {}
+
+sub B::NULL::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+# warn "Saving SVt_NULL SV\n"; # debug
+ # debug
+ if ($$sv == 0) {
+ warn "NULL::save for sv = 0 called from @{[(caller(1))[3]]}\n";
+ return savesym($sv, "(void*)Nullsv /* XXX */");
+ }
+ $svsect->add(sprintf("0, %u, 0x%x", $sv->REFCNT , $sv->FLAGS));
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::IV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ $xpvivsect->add(sprintf("0, 0, 0, %d", $sv->IVX));
+ $svsect->add(sprintf("&xpviv_list[%d], %lu, 0x%x",
+ $xpvivsect->index, $sv->REFCNT , $sv->FLAGS));
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::NV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my $val= $sv->NVX;
+ $val .= '.00' if $val =~ /^-?\d+$/;
+ $xpvnvsect->add(sprintf("0, 0, 0, %d, %s", $sv->IVX, $val));
+ $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x",
+ $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS));
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub savepvn {
+ my ($dest,$pv) = @_;
+ my @res;
+ # work with byte offsets/lengths
+ my $pv = pack "a*", $pv;
+ if (defined $max_string_len && length($pv) > $max_string_len) {
+ push @res, sprintf("Newx(%s,%u,char);", $dest, length($pv)+1);
+ my $offset = 0;
+ while (length $pv) {
+ my $str = substr $pv, 0, $max_string_len, '';
+ push @res, sprintf("Copy(%s,$dest+$offset,%u,char);",
+ cstring($str), length($str));
+ $offset += length $str;
+ }
+ push @res, sprintf("%s[%u] = '\\0';", $dest, $offset);
+ }
+ else {
+ push @res, sprintf("%s = savepvn(%s, %u);", $dest,
+ cstring($pv), length($pv));
+ }
+ return @res;
+}
+
+sub B::PVLV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my $pv = $sv->PV;
+ my $len = length($pv);
+ my ($pvsym, $pvmax) = savepv($pv);
+ my ($lvtarg, $lvtarg_sym);
+ $xpvlvsect->add(sprintf("%s, %u, %u, %d, %g, 0, 0, %u, %u, 0, %s",
+ $pvsym, $len, $pvmax, $sv->IVX, $sv->NVX,
+ $sv->TARGOFF, $sv->TARGLEN, cchar($sv->TYPE)));
+ $svsect->add(sprintf("&xpvlv_list[%d], %lu, 0x%x",
+ $xpvlvsect->index, $sv->REFCNT , $sv->FLAGS));
+ if (!$pv_copy_on_grow) {
+ $init->add(savepvn(sprintf("xpvlv_list[%d].xpv_pv",
+ $xpvlvsect->index), $pv));
+ }
+ $sv->save_magic;
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::PVIV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my( $savesym, $pvmax, $len, $pv ) = save_pv_or_rv( $sv );
+ $xpvivsect->add(sprintf("%s, %u, %u, %d", $savesym, $len, $pvmax, $sv->IVX));
+ $svsect->add(sprintf("&xpviv_list[%d], %u, 0x%x",
+ $xpvivsect->index, $sv->REFCNT , $sv->FLAGS));
+ if (defined($pv) && !$pv_copy_on_grow) {
+ $init->add(savepvn(sprintf("xpviv_list[%d].xpv_pv",
+ $xpvivsect->index), $pv));
+ }
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::PVNV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my( $savesym, $pvmax, $len, $pv ) = save_pv_or_rv( $sv );
+ my $val= $sv->NVX;
+ $val .= '.00' if $val =~ /^-?\d+$/;
+ $xpvnvsect->add(sprintf("%s, %u, %u, %d, %s",
+ $savesym, $len, $pvmax, $sv->IVX, $val));
+ $svsect->add(sprintf("&xpvnv_list[%d], %lu, 0x%x",
+ $xpvnvsect->index, $sv->REFCNT , $sv->FLAGS));
+ if (defined($pv) && !$pv_copy_on_grow) {
+ $init->add(savepvn(sprintf("xpvnv_list[%d].xpv_pv",
+ $xpvnvsect->index), $pv));
+ }
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::BM::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my $pv = pack "a*", ($sv->PV . "\0" . $sv->TABLE);
+ my $len = length($pv);
+ $xpvbmsect->add(sprintf("0, %u, %u, %d, %s, 0, 0, %d, %u, 0x%x",
+ $len, $len + 258, $sv->IVX, $sv->NVX,
+ $sv->USEFUL, $sv->PREVIOUS, $sv->RARE));
+ $svsect->add(sprintf("&xpvbm_list[%d], %lu, 0x%x",
+ $xpvbmsect->index, $sv->REFCNT , $sv->FLAGS));
+ $sv->save_magic;
+ $init->add(savepvn(sprintf("xpvbm_list[%d].xpv_pv",
+ $xpvbmsect->index), $pv),
+ sprintf("xpvbm_list[%d].xpv_cur = %u;",
+ $xpvbmsect->index, $len - 257));
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::PV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my( $savesym, $pvmax, $len, $pv ) = save_pv_or_rv( $sv );
+ $xpvsect->add(sprintf("%s, %u, %u", $savesym, $len, $pvmax));
+ $svsect->add(sprintf("&xpv_list[%d], %lu, 0x%x",
+ $xpvsect->index, $sv->REFCNT , $sv->FLAGS));
+ if (defined($pv) && !$pv_copy_on_grow) {
+ $init->add(savepvn(sprintf("xpv_list[%d].xpv_pv",
+ $xpvsect->index), $pv));
+ }
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub B::PVMG::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my( $savesym, $pvmax, $len, $pv ) = save_pv_or_rv( $sv );
+
+ $xpvmgsect->add(sprintf("%s, %u, %u, %d, %s, 0, 0",
+ $savesym, $len, $pvmax,
+ $sv->IVX, $sv->NVX));
+ $svsect->add(sprintf("&xpvmg_list[%d], %lu, 0x%x",
+ $xpvmgsect->index, $sv->REFCNT , $sv->FLAGS));
+ if (defined($pv) && !$pv_copy_on_grow) {
+ $init->add(savepvn(sprintf("xpvmg_list[%d].xpv_pv",
+ $xpvmgsect->index), $pv));
+ }
+ $sym = savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+ $sv->save_magic;
+ return $sym;
+}
+
+sub B::PVMG::save_magic {
+ my ($sv) = @_;
+ #warn sprintf("saving magic for %s (0x%x)\n", class($sv), $$sv); # debug
+ my $stash = $sv->SvSTASH;
+ $stash->save;
+ if ($$stash) {
+ warn sprintf("xmg_stash = %s (0x%x)\n", $stash->NAME, $$stash)
+ if $debug_mg;
+ # XXX Hope stash is already going to be saved.
+ $init->add(sprintf("SvSTASH(s\\_%x) = s\\_%x;", $$sv, $$stash));
+ }
+ my @mgchain = $sv->MAGIC;
+ my ($mg, $type, $obj, $ptr,$len,$ptrsv);
+ foreach $mg (@mgchain) {
+ $type = $mg->TYPE;
+ $ptr = $mg->PTR;
+ $len=$mg->LENGTH;
+ if ($debug_mg) {
+ warn sprintf("magic %s (0x%x), obj %s (0x%x), type %s, ptr %s\n",
+ class($sv), $$sv, class($obj), $$obj,
+ cchar($type), cstring($ptr));
+ }
+
+ unless( $type eq 'r' ) {
+ $obj = $mg->OBJ;
+ $obj->save;
+ }
+
+ if ($len == HEf_SVKEY){
+ #The pointer is an SV*
+ $ptrsv=svref_2object($ptr)->save;
+ $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s,(char *) %s, %d);",
+ $$sv, $$obj, cchar($type),$ptrsv,$len));
+ }elsif( $type eq 'r' ){
+ my $rx = $mg->REGEX;
+ my $pmop = $REGEXP{$rx};
+
+ confess "PMOP not found for REGEXP $rx" unless $pmop;
+
+ my( $resym, $relen ) = savere( $mg->precomp );
+ my $pmsym = $pmop->save;
+ $init->add( split /\n/, sprintf <<CODE, $$sv, cchar($type), cstring($ptr) );
+{
+ REGEXP* rx = pregcomp($resym, $resym + $relen, (PMOP*)$pmsym);
+ sv_magic((SV*)s\\_%x, (SV*)rx, %s, %s, %d);
+}
+CODE
+ }else{
+ $init->add(sprintf("sv_magic((SV*)s\\_%x, (SV*)s\\_%x, %s, %s, %d);",
+ $$sv, $$obj, cchar($type),cstring($ptr),$len));
+ }
+ }
+}
+
+sub B::RV::save {
+ my ($sv) = @_;
+ my $sym = objsym($sv);
+ return $sym if defined $sym;
+ my $rv = save_rv( $sv );
+ # GVs need to be handled at runtime
+ if( ref( $sv->RV ) eq 'B::GV' ) {
+ $xrvsect->add( "(SV*)Nullgv" );
+ $init->add(sprintf("xrv_list[%d].xrv_rv = (SV*)%s;\n", $xrvsect->index, $rv));
+ }
+ # and stashes, too
+ elsif( $sv->RV->isa( 'B::HV' ) && $sv->RV->NAME ) {
+ $xrvsect->add( "(SV*)Nullhv" );
+ $init->add(sprintf("xrv_list[%d].xrv_rv = (SV*)%s;\n", $xrvsect->index, $rv));
+ }
+ else {
+ $xrvsect->add($rv);
+ }
+ $svsect->add(sprintf("&xrv_list[%d], %lu, 0x%x",
+ $xrvsect->index, $sv->REFCNT , $sv->FLAGS));
+ return savesym($sv, sprintf("&sv_list[%d]", $svsect->index));
+}
+
+sub try_autoload {
+ my ($cvstashname, $cvname) = @_;
+ warn sprintf("No definition for sub %s::%s\n", $cvstashname, $cvname);
+ # Handle AutoLoader classes explicitly. Any more general AUTOLOAD
+ # use should be handled by the class itself.
+ no strict 'refs';
+ my $isa = \@{"$cvstashname\::ISA"};
+ if (grep($_ eq "AutoLoader", @$isa)) {
+ warn "Forcing immediate load of sub derived from AutoLoader\n";
+ # Tweaked version of AutoLoader::AUTOLOAD
+ my $dir = $cvstashname;
+ $dir =~ s(::)(/)g;
+ eval { require "auto/$dir/$cvname.al" };
+ if ($@) {
+ warn qq(failed require "auto/$dir/$cvname.al": $@\n);
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+}
+sub Dummy_initxs{};
+sub B::CV::save {
+ my ($cv) = @_;
+ my $sym = objsym($cv);
+ if (defined($sym)) {
+# warn sprintf("CV 0x%x already saved as $sym\n", $$cv); # debug
+ return $sym;
+ }
+ # Reserve a place in svsect and xpvcvsect and record indices
+ my $gv = $cv->GV;
+ my ($cvname, $cvstashname);
+ if ($$gv){
+ $cvname = $gv->NAME;
+ $cvstashname = $gv->STASH->NAME;
+ }
+ my $root = $cv->ROOT;
+ my $cvxsub = $cv->XSUB;
+ my $isconst = $cv->CvFLAGS & CVf_CONST;
+ if( $isconst ) {
+ my $value = $cv->XSUBANY;
+ my $stash = $gv->STASH;
+ my $vsym = $value->save;
+ my $stsym = $stash->save;
+ my $name = cstring($cvname);
+ $decl->add( "static CV* cv$cv_index;" );
+ $init->add( "cv$cv_index = newCONSTSUB( $stsym, NULL, $vsym );" );
+ my $sym = savesym( $cv, "cv$cv_index" );
+ $cv_index++;
+ return $sym;
+ }
+ #INIT is removed from the symbol table, so this call must come
+ # from PL_initav->save. Re-bootstrapping will push INIT back in
+ # so nullop should be sent.
+ if (!$isconst && $cvxsub && ($cvname ne "INIT")) {
+ my $egv = $gv->EGV;
+ my $stashname = $egv->STASH->NAME;
+ if ($cvname eq "bootstrap")
+ {
+ my $file = $gv->FILE;
+ $decl->add("/* bootstrap $file */");
+ warn "Bootstrap $stashname $file\n";
+ # if it not isa('DynaLoader'), it should hopefully be XSLoaded
+ # ( attributes being an exception, of course )
+ if( $stashname ne 'attributes' &&
+ !UNIVERSAL::isa($stashname,'DynaLoader') ) {
+ $xsub{$stashname}='Dynamic-XSLoaded';
+ $use_xsloader = 1;
+ }
+ else {
+ $xsub{$stashname}='Dynamic';
+ }
+ # $xsub{$stashname}='Static' unless $xsub{$stashname};
+ return qq/NULL/;
+ }
+ else
+ {
+ # XSUBs for IO::File, IO::Handle, IO::Socket,
+ # IO::Seekable and IO::Poll
+ # are defined in IO.xs, so let's bootstrap it
+ svref_2object( \&IO::bootstrap )->save
+ if grep { $stashname eq $_ } qw(IO::File IO::Handle IO::Socket
+ IO::Seekable IO::Poll);
+ }
+ warn sprintf("stub for XSUB $cvstashname\:\:$cvname CV 0x%x\n", $$cv) if $debug_cv;
+ return qq/(perl_get_cv("$stashname\:\:$cvname",TRUE))/;
+ }
+ if ($cvxsub && $cvname eq "INIT") {
+ no strict 'refs';
+ return svref_2object(\&Dummy_initxs)->save;
+ }
+ my $sv_ix = $svsect->index + 1;
+ $svsect->add("svix$sv_ix");
+ my $xpvcv_ix = $xpvcvsect->index + 1;
+ $xpvcvsect->add("xpvcvix$xpvcv_ix");
+ # Save symbol now so that GvCV() doesn't recurse back to us via CvGV()
+ $sym = savesym($cv, "&sv_list[$sv_ix]");
+ warn sprintf("saving $cvstashname\:\:$cvname CV 0x%x as $sym\n", $$cv) if $debug_cv;
+ if (!$$root && !$cvxsub) {
+ if (try_autoload($cvstashname, $cvname)) {
+ # Recalculate root and xsub
+ $root = $cv->ROOT;
+ $cvxsub = $cv->XSUB;
+ if ($$root || $cvxsub) {
+ warn "Successful forced autoload\n";
+ }
+ }
+ }
+ my $startfield = 0;
+ my $padlist = $cv->PADLIST;
+ my $pv = $cv->PV;
+ my $xsub = 0;
+ my $xsubany = "Nullany";
+ if ($$root) {
+ warn sprintf("saving op tree for CV 0x%x, root = 0x%x\n",
+ $$cv, $$root) if $debug_cv;
+ my $ppname = "";
+ if ($$gv) {
+ my $stashname = $gv->STASH->NAME;
+ my $gvname = $gv->NAME;
+ if ($gvname ne "__ANON__") {
+ $ppname = (${$gv->FORM} == $$cv) ? "pp_form_" : "pp_sub_";
+ $ppname .= ($stashname eq "main") ?
+ $gvname : "$stashname\::$gvname";
+ $ppname =~ s/::/__/g;
+ if ($gvname eq "INIT"){
+ $ppname .= "_$initsub_index";
+ $initsub_index++;
+ }
+ }
+ }
+ if (!$ppname) {
+ $ppname = "pp_anonsub_$anonsub_index";
+ $anonsub_index++;
+ }
+ $startfield = saveoptree($ppname, $root, $cv->START, $padlist->ARRAY);
+ warn sprintf("done saving op tree for CV 0x%x, name %s, root 0x%x\n",
+ $$cv, $ppname, $$root) if $debug_cv;
+ if ($$padlist) {
+ warn sprintf("saving PADLIST 0x%x for CV 0x%x\n",
+ $$padlist, $$cv) if $debug_cv;
+ $padlist->save;
+ warn sprintf("done saving PADLIST 0x%x for CV 0x%x\n",
+ $$padlist, $$cv) if $debug_cv;
+ }
+ }
+ else {
+ warn sprintf("No definition for sub %s::%s (unable to autoload)\n",
+ $cvstashname, $cvname); # debug
+ }
+ $pv = '' unless defined $pv; # Avoid use of undef warnings
+ $symsect->add(sprintf("xpvcvix%d\t%s, %u, 0, %d, %s, 0, Nullhv, Nullhv, %s, s\\_%x, $xsub, $xsubany, Nullgv, \"\", %d, s\\_%x, (CV*)s\\_%x, 0x%x, 0x%x",
+ $xpvcv_ix, cstring($pv), length($pv), $cv->IVX,
+ $cv->NVX, $startfield, ${$cv->ROOT}, $cv->DEPTH,
+ $$padlist, ${$cv->OUTSIDE}, $cv->CvFLAGS,
+ $cv->OUTSIDE_SEQ));
+
+ if (${$cv->OUTSIDE} == ${main_cv()}){
+ $init->add(sprintf("CvOUTSIDE(s\\_%x)=PL_main_cv;",$$cv));
+ $init->add(sprintf("SvREFCNT_inc(PL_main_cv);"));
+ }
+
+ if ($$gv) {
+ $gv->save;
+ $init->add(sprintf("CvGV(s\\_%x) = s\\_%x;",$$cv,$$gv));
+ warn sprintf("done saving GV 0x%x for CV 0x%x\n",
+ $$gv, $$cv) if $debug_cv;
+ }
+ if( $ithreads ) {
+ $init->add( savepvn( "CvFILE($sym)", $cv->FILE) );
+ }
+ else {
+ $init->add(sprintf("CvFILE($sym) = %s;", cstring($cv->FILE)));
+ }
+ my $stash = $cv->STASH;
+ if ($$stash) {
+ $stash->save;
+ $init->add(sprintf("CvSTASH(s\\_%x) = s\\_%x;", $$cv, $$stash));
+ warn sprintf("done saving STASH 0x%x for CV 0x%x\n",
+ $$stash, $$cv) if $debug_cv;
+ }
+ $symsect->add(sprintf("svix%d\t(XPVCV*)&xpvcv_list[%u], %lu, 0x%x",
+ $sv_ix, $xpvcv_ix, $cv->REFCNT +1*0 , $cv->FLAGS));
+ return $sym;
+}
+
+sub B::GV::save {
+ my ($gv) = @_;
+ my $sym = objsym($gv);
+ if (defined($sym)) {
+ #warn sprintf("GV 0x%x already saved as $sym\n", $$gv); # debug
+ return $sym;
+ } else {
+ my $ix = $gv_index++;
+ $sym = savesym($gv, "gv_list[$ix]");
+ #warn sprintf("Saving GV 0x%x as $sym\n", $$gv); # debug
+ }
+ my $is_empty = $gv->is_empty;
+ my $gvname = $gv->NAME;
+ my $fullname = $gv->STASH->NAME . "::" . $gvname;
+ my $name = cstring($fullname);
+ #warn "GV name is $name\n"; # debug
+ my $egvsym;
+ unless ($is_empty) {
+ my $egv = $gv->EGV;
+ if ($$gv != $$egv) {
+ #warn(sprintf("EGV name is %s, saving it now\n",
+ # $egv->STASH->NAME . "::" . $egv->NAME)); # debug
+ $egvsym = $egv->save;
+ }
+ }
+ $init->add(qq[$sym = gv_fetchpv($name, TRUE, SVt_PV);],
+ sprintf("SvFLAGS($sym) = 0x%x;", $gv->FLAGS ),
+ sprintf("GvFLAGS($sym) = 0x%x;", $gv->GvFLAGS));
+ $init->add(sprintf("GvLINE($sym) = %u;", $gv->LINE)) unless $is_empty;
+ # XXX hack for when Perl accesses PVX of GVs
+ $init->add("SvPVX($sym) = emptystring;\n");
+ # Shouldn't need to do save_magic since gv_fetchpv handles that
+ #$gv->save_magic;
+ # XXX will always be > 1!!!
+ my $refcnt = $gv->REFCNT + 1;
+ $init->add(sprintf("SvREFCNT($sym) += %u;", $refcnt - 1 )) if $refcnt > 1;
+
+ return $sym if $is_empty;
+
+ # XXX B::walksymtable creates an extra reference to the GV
+ my $gvrefcnt = $gv->GvREFCNT;
+ if ($gvrefcnt > 1) {
+ $init->add(sprintf("GvREFCNT($sym) += %u;", $gvrefcnt - 1));
+ }
+ # some non-alphavetic globs require some parts to be saved
+ # ( ex. %!, but not $! )
+ sub Save_HV() { 1 }
+ sub Save_AV() { 2 }
+ sub Save_SV() { 4 }
+ sub Save_CV() { 8 }
+ sub Save_FORM() { 16 }
+ sub Save_IO() { 32 }
+ my $savefields = 0;
+ if( $gvname !~ /^([^A-Za-z]|STDIN|STDOUT|STDERR|ARGV|SIG|ENV)$/ ) {
+ $savefields = Save_HV|Save_AV|Save_SV|Save_CV|Save_FORM|Save_IO;
+ }
+ elsif( $gvname eq '!' ) {
+ $savefields = Save_HV;
+ }
+ # attributes::bootstrap is created in perl_parse
+ # saving it would overwrite it, because perl_init() is
+ # called after perl_parse()
+ $savefields&=~Save_CV if $fullname eq 'attributes::bootstrap';
+
+ # save it
+ # XXX is that correct?
+ if (defined($egvsym) && $egvsym !~ m/Null/ ) {
+ # Shared glob *foo = *bar
+ $init->add("gp_free($sym);",
+ "GvGP($sym) = GvGP($egvsym);");
+ } elsif ($savefields) {
+ # Don't save subfields of special GVs (*_, *1, *# and so on)
+# warn "GV::save saving subfields\n"; # debug
+ my $gvsv = $gv->SV;
+ if ($$gvsv && $savefields&Save_SV) {
+ $gvsv->save;
+ $init->add(sprintf("GvSV($sym) = s\\_%x;", $$gvsv));
+# warn "GV::save \$$name\n"; # debug
+ }
+ my $gvav = $gv->AV;
+ if ($$gvav && $savefields&Save_AV) {
+ $gvav->save;
+ $init->add(sprintf("GvAV($sym) = s\\_%x;", $$gvav));
+# warn "GV::save \@$name\n"; # debug
+ }
+ my $gvhv = $gv->HV;
+ if ($$gvhv && $savefields&Save_HV) {
+ $gvhv->save;
+ $init->add(sprintf("GvHV($sym) = s\\_%x;", $$gvhv));
+# warn "GV::save \%$name\n"; # debug
+ }
+ my $gvcv = $gv->CV;
+ if ($$gvcv && $savefields&Save_CV) {
+ my $origname=cstring($gvcv->GV->EGV->STASH->NAME .
+ "::" . $gvcv->GV->EGV->NAME);
+ if (0 && $gvcv->XSUB && $name ne $origname) { #XSUB alias
+ # must save as a 'stub' so newXS() has a CV to populate
+ $init->add("{ CV *cv;");
+ $init->add("\tcv=perl_get_cv($origname,TRUE);");
+ $init->add("\tGvCV($sym)=cv;");
+ $init->add("\tSvREFCNT_inc((SV *)cv);");
+ $init->add("}");
+ } else {
+ $init->add(sprintf("GvCV($sym) = (CV*)(%s);", $gvcv->save));
+# warn "GV::save &$name\n"; # debug
+ }
+ }
+ $init->add(sprintf("GvFILE($sym) = %s;", cstring($gv->FILE)));
+# warn "GV::save GvFILE(*$name)\n"; # debug
+ my $gvform = $gv->FORM;
+ if ($$gvform && $savefields&Save_FORM) {
+ $gvform->save;
+ $init->add(sprintf("GvFORM($sym) = (CV*)s\\_%x;", $$gvform));
+# warn "GV::save GvFORM(*$name)\n"; # debug
+ }
+ my $gvio = $gv->IO;
+ if ($$gvio && $savefields&Save_IO) {
+ $gvio->save;
+ $init->add(sprintf("GvIOp($sym) = s\\_%x;", $$gvio));
+ if( $fullname =~ m/::DATA$/ && $save_data_fh ) {
+ no strict 'refs';
+ my $fh = *{$fullname}{IO};
+ use strict 'refs';
+ $gvio->save_data( $fullname, <$fh> ) if $fh->opened;
+ }
+# warn "GV::save GvIO(*$name)\n"; # debug
+ }
+ }
+ return $sym;
+}
+
+sub B::AV::save {
+ my ($av) = @_;
+ my $sym = objsym($av);
+ return $sym if defined $sym;
+ my $line = "0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0";
+ $line .= sprintf(", 0x%x", $av->AvFLAGS) if $] < 5.009;
+ $xpvavsect->add($line);
+ $svsect->add(sprintf("&xpvav_list[%d], %lu, 0x%x",
+ $xpvavsect->index, $av->REFCNT , $av->FLAGS));
+ my $sv_list_index = $svsect->index;
+ my $fill = $av->FILL;
+ $av->save_magic;
+ if ($debug_av) {
+ $line = sprintf("saving AV 0x%x FILL=$fill", $$av);
+ $line .= sprintf(" AvFLAGS=0x%x", $av->AvFLAGS) if $] < 5.009;
+ warn $line;
+ }
+ # XXX AVf_REAL is wrong test: need to save comppadlist but not stack
+ #if ($fill > -1 && ($avflags & AVf_REAL)) {
+ if ($fill > -1) {
+ my @array = $av->ARRAY;
+ if ($debug_av) {
+ my $el;
+ my $i = 0;
+ foreach $el (@array) {
+ warn sprintf("AV 0x%x[%d] = %s 0x%x\n",
+ $$av, $i++, class($el), $$el);
+ }
+ }
+# my @names = map($_->save, @array);
+ # XXX Better ways to write loop?
+ # Perhaps svp[0] = ...; svp[1] = ...; svp[2] = ...;
+ # Perhaps I32 i = 0; svp[i++] = ...; svp[i++] = ...; svp[i++] = ...;
+
+ # micro optimization: op/pat.t ( and other code probably )
+ # has very large pads ( 20k/30k elements ) passing them to
+ # ->add is a performance bottleneck: passing them as a
+ # single string cuts runtime from 6min20sec to 40sec
+
+ # you want to keep this out of the no_split/split
+ # map("\t*svp++ = (SV*)$_;", @names),
+ my $acc = '';
+ foreach my $i ( 0..$#array ) {
+ $acc .= "\t*svp++ = (SV*)" . $array[$i]->save . ";\n\t";
+ }
+ $acc .= "\n";
+
+ $init->no_split;
+ $init->add("{",
+ "\tSV **svp;",
+ "\tAV *av = (AV*)&sv_list[$sv_list_index];",
+ "\tav_extend(av, $fill);",
+ "\tsvp = AvARRAY(av);" );
+ $init->add($acc);
+ $init->add("\tAvFILLp(av) = $fill;",
+ "}");
+ $init->split;
+ # we really added a lot of lines ( B::C::InitSection->add
+ # should really scan for \n, but that would slow
+ # it down
+ $init->inc_count( $#array );
+ } else {
+ my $max = $av->MAX;
+ $init->add("av_extend((AV*)&sv_list[$sv_list_index], $max);")
+ if $max > -1;
+ }
+ return savesym($av, "(AV*)&sv_list[$sv_list_index]");
+}
+
+sub B::HV::save {
+ my ($hv) = @_;
+ my $sym = objsym($hv);
+ return $sym if defined $sym;
+ my $name = $hv->NAME;
+ if ($name) {
+ # It's a stash
+
+ # A perl bug means HvPMROOT isn't altered when a PMOP is freed. Usually
+ # the only symptom is that sv_reset tries to reset the PMf_USED flag of
+ # a trashed op but we look at the trashed op_type and segfault.
+ #my $adpmroot = ${$hv->PMROOT};
+ my $adpmroot = 0;
+ $decl->add("static HV *hv$hv_index;");
+ # XXX Beware of weird package names containing double-quotes, \n, ...?
+ $init->add(qq[hv$hv_index = gv_stashpv("$name", TRUE);]);
+ if ($adpmroot) {
+ $init->add(sprintf("HvPMROOT(hv$hv_index) = (PMOP*)s\\_%x;",
+ $adpmroot));
+ }
+ $sym = savesym($hv, "hv$hv_index");
+ $hv_index++;
+ return $sym;
+ }
+ # It's just an ordinary HV
+ $xpvhvsect->add(sprintf("0, 0, %d, 0, 0.0, 0, Nullhv, %d, 0, 0, 0",
+ $hv->MAX, $hv->RITER));
+ $svsect->add(sprintf("&xpvhv_list[%d], %lu, 0x%x",
+ $xpvhvsect->index, $hv->REFCNT , $hv->FLAGS));
+ my $sv_list_index = $svsect->index;
+ my @contents = $hv->ARRAY;
+ if (@contents) {
+ my $i;
+ for ($i = 1; $i < @contents; $i += 2) {
+ $contents[$i] = $contents[$i]->save;
+ }
+ $init->no_split;
+ $init->add("{", "\tHV *hv = (HV*)&sv_list[$sv_list_index];");
+ while (@contents) {
+ my ($key, $value) = splice(@contents, 0, 2);
+ $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);",
+ cstring($key),length(pack "a*",$key),
+ $value, hash($key)));
+# $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);",
+# cstring($key),length($key),$value, 0));
+ }
+ $init->add("}");
+ $init->split;
+ }
+ $hv->save_magic();
+ return savesym($hv, "(HV*)&sv_list[$sv_list_index]");
+}
+
+sub B::IO::save_data {
+ my( $io, $globname, @data ) = @_;
+ my $data = join '', @data;
+
+ # XXX using $DATA might clobber it!
+ my $sym = svref_2object( \\$data )->save;
+ $init->add( split /\n/, <<CODE );
+ {
+ GV* gv = (GV*)gv_fetchpv( "$globname", TRUE, SVt_PV );
+ SV* sv = $sym;
+ GvSV( gv ) = sv;
+ }
+CODE
+ # for PerlIO::scalar
+ $use_xsloader = 1;
+ $init->add_eval( sprintf 'open(%s, "<", $%s)', $globname, $globname );
+}
+
+sub B::IO::save {
+ my ($io) = @_;
+ my $sym = objsym($io);
+ return $sym if defined $sym;
+ my $pv = $io->PV;
+ $pv = '' unless defined $pv;
+ my $len = length($pv);
+ $xpviosect->add(sprintf("0, %u, %u, %d, %s, 0, 0, 0, 0, 0, %d, %d, %d, %d, %s, Nullgv, %s, Nullgv, %s, Nullgv, %d, %s, 0x%x",
+ $len, $len+1, $io->IVX, $io->NVX, $io->LINES,
+ $io->PAGE, $io->PAGE_LEN, $io->LINES_LEFT,
+ cstring($io->TOP_NAME), cstring($io->FMT_NAME),
+ cstring($io->BOTTOM_NAME), $io->SUBPROCESS,
+ cchar($io->IoTYPE), $io->IoFLAGS));
+ $svsect->add(sprintf("&xpvio_list[%d], %lu, 0x%x",
+ $xpviosect->index, $io->REFCNT , $io->FLAGS));
+ $sym = savesym($io, sprintf("(IO*)&sv_list[%d]", $svsect->index));
+ # deal with $x = *STDIN/STDOUT/STDERR{IO}
+ my $perlio_func;
+ foreach ( qw(stdin stdout stderr) ) {
+ $io->IsSTD($_) and $perlio_func = $_;
+ }
+ if( $perlio_func ) {
+ $init->add( "IoIFP(${sym})=PerlIO_${perlio_func}();" );
+ $init->add( "IoOFP(${sym})=PerlIO_${perlio_func}();" );
+ }
+
+ my ($field, $fsym);
+ foreach $field (qw(TOP_GV FMT_GV BOTTOM_GV)) {
+ $fsym = $io->$field();
+ if ($$fsym) {
+ $init->add(sprintf("Io$field($sym) = (GV*)s\\_%x;", $$fsym));
+ $fsym->save;
+ }
+ }
+ $io->save_magic;
+ return $sym;
+}
+
+sub B::SV::save {
+ my $sv = shift;
+ # This is where we catch an honest-to-goodness Nullsv (which gets
+ # blessed into B::SV explicitly) and any stray erroneous SVs.
+ return 0 unless $$sv;
+ confess sprintf("cannot save that type of SV: %s (0x%x)\n",
+ class($sv), $$sv);
+}
+
+sub output_all {
+ my $init_name = shift;
+ my $section;
+ my @sections = ($opsect, $unopsect, $binopsect, $logopsect, $condopsect,
+ $listopsect, $pmopsect, $svopsect, $padopsect, $pvopsect,
+ $loopsect, $copsect, $svsect, $xpvsect,
+ $xpvavsect, $xpvhvsect, $xpvcvsect, $xpvivsect, $xpvnvsect,
+ $xpvmgsect, $xpvlvsect, $xrvsect, $xpvbmsect, $xpviosect);
+ $symsect->output(\*STDOUT, "#define %s\n");
+ print "\n";
+ output_declarations();
+ foreach $section (@sections) {
+ my $lines = $section->index + 1;
+ if ($lines) {
+ my $name = $section->name;
+ my $typename = ($name eq "xpvcv") ? "XPVCV_or_similar" : uc($name);
+ print "Static $typename ${name}_list[$lines];\n";
+ }
+ }
+ # XXX hack for when Perl accesses PVX of GVs
+ print 'Static char emptystring[] = "\0";';
+
+ $decl->output(\*STDOUT, "%s\n");
+ print "\n";
+ foreach $section (@sections) {
+ my $lines = $section->index + 1;
+ if ($lines) {
+ my $name = $section->name;
+ my $typename = ($name eq "xpvcv") ? "XPVCV_or_similar" : uc($name);
+ printf "static %s %s_list[%u] = {\n", $typename, $name, $lines;
+ $section->output(\*STDOUT, "\t{ %s }, /* %d */\n");
+ print "};\n\n";
+ }
+ }
+
+ $init->output(\*STDOUT, "\t%s\n", $init_name );
+ if ($verbose) {
+ warn compile_stats();
+ warn "NULLOP count: $nullop_count\n";
+ }
+}
+
+sub output_declarations {
+ print <<'EOT';
+#ifdef BROKEN_STATIC_REDECL
+#define Static extern
+#else
+#define Static static
+#endif /* BROKEN_STATIC_REDECL */
+
+#ifdef BROKEN_UNION_INIT
+/*
+ * Cribbed from cv.h with ANY (a union) replaced by void*.
+ * Some pre-Standard compilers can't cope with initialising unions. Ho hum.
+ */
+typedef struct {
+ char * xpv_pv; /* pointer to malloced string */
+ STRLEN xpv_cur; /* length of xp_pv as a C string */
+ STRLEN xpv_len; /* allocated size */
+ IV xof_off; /* integer value */
+ NV xnv_nv; /* numeric value, if any */
+ MAGIC* xmg_magic; /* magic for scalar array */
+ HV* xmg_stash; /* class package */
+
+ HV * xcv_stash;
+ OP * xcv_start;
+ OP * xcv_root;
+ void (*xcv_xsub) (pTHX_ CV*);
+ ANY xcv_xsubany;
+ GV * xcv_gv;
+ char * xcv_file;
+ long xcv_depth; /* >= 2 indicates recursive call */
+ AV * xcv_padlist;
+ CV * xcv_outside;
+EOT
+ print <<'EOT' if $] < 5.009;
+#ifdef USE_5005THREADS
+ perl_mutex *xcv_mutexp;
+ struct perl_thread *xcv_owner; /* current owner thread */
+#endif /* USE_5005THREADS */
+EOT
+ print <<'EOT';
+ cv_flags_t xcv_flags;
+ U32 xcv_outside_seq; /* the COP sequence (at the point of our
+ * compilation) in the lexically enclosing
+ * sub */
+} XPVCV_or_similar;
+#define ANYINIT(i) i
+#else
+#define XPVCV_or_similar XPVCV
+#define ANYINIT(i) {i}
+#endif /* BROKEN_UNION_INIT */
+#define Nullany ANYINIT(0)
+
+#define UNUSED 0
+#define sym_0 0
+EOT
+ print "static GV *gv_list[$gv_index];\n" if $gv_index;
+ print "\n";
+}
+
+
+sub output_boilerplate {
+ print <<'EOT';
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+/* Workaround for mapstart: the only op which needs a different ppaddr */
+#undef Perl_pp_mapstart
+#define Perl_pp_mapstart Perl_pp_grepstart
+#undef OP_MAPSTART
+#define OP_MAPSTART OP_GREPSTART
+#define XS_DynaLoader_boot_DynaLoader boot_DynaLoader
+EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
+
+static void xs_init (pTHX);
+static void dl_init (pTHX);
+static PerlInterpreter *my_perl;
+EOT
+}
+
+sub init_op_addr {
+ my( $op_type, $num ) = @_;
+ my $op_list = $op_type."_list";
+
+ $init->add( split /\n/, <<EOT );
+ {
+ int i;
+
+ for( i = 0; i < ${num}; ++i )
+ {
+ ${op_list}\[i].op_ppaddr = PL_ppaddr[INT2PTR(int,${op_list}\[i].op_ppaddr)];
+ }
+ }
+EOT
+}
+
+sub init_op_warn {
+ my( $op_type, $num ) = @_;
+ my $op_list = $op_type."_list";
+
+ # for resons beyond imagination, MSVC5 considers pWARN_ALL non-const
+ $init->add( split /\n/, <<EOT );
+ {
+ int i;
+
+ for( i = 0; i < ${num}; ++i )
+ {
+ switch( (int)(${op_list}\[i].cop_warnings) )
+ {
+ case 1:
+ ${op_list}\[i].cop_warnings = pWARN_ALL;
+ break;
+ case 2:
+ ${op_list}\[i].cop_warnings = pWARN_NONE;
+ break;
+ case 3:
+ ${op_list}\[i].cop_warnings = pWARN_STD;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+EOT
+}
+
+sub output_main {
+ print <<'EOT';
+/* if USE_IMPLICIT_SYS, we need a 'real' exit */
+#if defined(exit)
+#undef exit
+#endif
+
+int
+main(int argc, char **argv, char **env)
+{
+ int exitstatus;
+ int i;
+ char **fakeargv;
+ GV* tmpgv;
+ SV* tmpsv;
+ int options_count;
+
+ PERL_SYS_INIT3(&argc,&argv,&env);
+
+ if (!PL_do_undump) {
+ my_perl = perl_alloc();
+ if (!my_perl)
+ exit(1);
+ perl_construct( my_perl );
+ PL_perl_destruct_level = 0;
+ }
+EOT
+ if( $ithreads ) {
+ # XXX init free elems!
+ my $pad_len = regex_padav->FILL + 1 - 1; # first is an avref
+
+ print <<EOT;
+#ifdef USE_ITHREADS
+ for( i = 0; i < $pad_len; ++i ) {
+ av_push( PL_regex_padav, newSViv(0) );
+ }
+ PL_regex_pad = AvARRAY( PL_regex_padav );
+#endif
+EOT
+ }
+
+ print <<'EOT';
+#ifdef CSH
+ if (!PL_cshlen)
+ PL_cshlen = strlen(PL_cshname);
+#endif
+
+#ifdef ALLOW_PERL_OPTIONS
+#define EXTRA_OPTIONS 3
+#else
+#define EXTRA_OPTIONS 4
+#endif /* ALLOW_PERL_OPTIONS */
+ Newx(fakeargv, argc + EXTRA_OPTIONS + 1, char *);
+
+ fakeargv[0] = argv[0];
+ fakeargv[1] = "-e";
+ fakeargv[2] = "";
+ options_count = 3;
+EOT
+ # honour -T
+ print <<EOT;
+ if( ${^TAINT} ) {
+ fakeargv[options_count] = "-T";
+ ++options_count;
+ }
+EOT
+ print <<'EOT';
+#ifndef ALLOW_PERL_OPTIONS
+ fakeargv[options_count] = "--";
+ ++options_count;
+#endif /* ALLOW_PERL_OPTIONS */
+ for (i = 1; i < argc; i++)
+ fakeargv[i + options_count - 1] = argv[i];
+ fakeargv[argc + options_count - 1] = 0;
+
+ exitstatus = perl_parse(my_perl, xs_init, argc + options_count - 1,
+ fakeargv, NULL);
+
+ if (exitstatus)
+ exit( exitstatus );
+
+ TAINT;
+EOT
+
+ if( $use_perl_script_name ) {
+ my $dollar_0 = $0;
+ $dollar_0 =~ s/\\/\\\\/g;
+ $dollar_0 = '"' . $dollar_0 . '"';
+
+ print <<EOT;
+ if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {/* $0 */
+ tmpsv = GvSV(tmpgv);
+ sv_setpv(tmpsv, ${dollar_0});
+ SvSETMAGIC(tmpsv);
+ }
+EOT
+ }
+ else {
+ print <<EOT;
+ if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {/* $0 */
+ tmpsv = GvSV(tmpgv);
+ sv_setpv(tmpsv, argv[0]);
+ SvSETMAGIC(tmpsv);
+ }
+EOT
+ }
+
+ print <<'EOT';
+ if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
+ tmpsv = GvSV(tmpgv);
+#ifdef WIN32
+ sv_setpv(tmpsv,"perl.exe");
+#else
+ sv_setpv(tmpsv,"perl");
+#endif
+ SvSETMAGIC(tmpsv);
+ }
+
+ TAINT_NOT;
+
+ /* PL_main_cv = PL_compcv; */
+ PL_compcv = 0;
+
+ exitstatus = perl_init();
+ if (exitstatus)
+ exit( exitstatus );
+ dl_init(aTHX);
+
+ exitstatus = perl_run( my_perl );
+
+ perl_destruct( my_perl );
+ perl_free( my_perl );
+
+ PERL_SYS_TERM();
+
+ exit( exitstatus );
+}
+
+/* yanked from perl.c */
+static void
+xs_init(pTHX)
+{
+ char *file = __FILE__;
+ dTARG;
+ dSP;
+EOT
+ print "\n#ifdef USE_DYNAMIC_LOADING";
+ print qq/\n\tnewXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);/;
+ print "\n#endif\n" ;
+ # delete $xsub{'DynaLoader'};
+ delete $xsub{'UNIVERSAL'};
+ print("/* bootstrapping code*/\n\tSAVETMPS;\n");
+ print("\ttarg=sv_newmortal();\n");
+ print "#ifdef USE_DYNAMIC_LOADING\n";
+ print "\tPUSHMARK(sp);\n";
+ print qq/\tXPUSHp("DynaLoader",strlen("DynaLoader"));\n/;
+ print qq/\tPUTBACK;\n/;
+ print "\tboot_DynaLoader(aTHX_ NULL);\n";
+ print qq/\tSPAGAIN;\n/;
+ print "#endif\n";
+ foreach my $stashname (keys %xsub){
+ if ($xsub{$stashname} !~ m/Dynamic/ ) {
+ my $stashxsub=$stashname;
+ $stashxsub =~ s/::/__/g;
+ print "\tPUSHMARK(sp);\n";
+ print qq/\tXPUSHp("$stashname",strlen("$stashname"));\n/;
+ print qq/\tPUTBACK;\n/;
+ print "\tboot_$stashxsub(aTHX_ NULL);\n";
+ print qq/\tSPAGAIN;\n/;
+ }
+ }
+ print("\tFREETMPS;\n/* end bootstrapping code */\n");
+ print "}\n";
+
+print <<'EOT';
+static void
+dl_init(pTHX)
+{
+ char *file = __FILE__;
+ dTARG;
+ dSP;
+EOT
+ print("/* Dynamicboot strapping code*/\n\tSAVETMPS;\n");
+ print("\ttarg=sv_newmortal();\n");
+ foreach my $stashname (@DynaLoader::dl_modules) {
+ warn "Loaded $stashname\n";
+ if (exists($xsub{$stashname}) && $xsub{$stashname} =~ m/Dynamic/) {
+ my $stashxsub=$stashname;
+ $stashxsub =~ s/::/__/g;
+ print "\tPUSHMARK(sp);\n";
+ print qq/\tXPUSHp("$stashname",/,length($stashname),qq/);\n/;
+ print qq/\tPUTBACK;\n/;
+ print "#ifdef USE_DYNAMIC_LOADING\n";
+ warn "bootstrapping $stashname added to xs_init\n";
+ if( $xsub{$stashname} eq 'Dynamic' ) {
+ print qq/\tperl_call_method("bootstrap",G_DISCARD);\n/;
+ }
+ else {
+ print qq/\tperl_call_pv("XSLoader::load",G_DISCARD);\n/;
+ }
+ print "#else\n";
+ print "\tboot_$stashxsub(aTHX_ NULL);\n";
+ print "#endif\n";
+ print qq/\tSPAGAIN;\n/;
+ }
+ }
+ print("\tFREETMPS;\n/* end Dynamic bootstrapping code */\n");
+ print "}\n";
+}
+sub dump_symtable {
+ # For debugging
+ my ($sym, $val);
+ warn "----Symbol table:\n";
+ while (($sym, $val) = each %symtable) {
+ warn "$sym => $val\n";
+ }
+ warn "---End of symbol table\n";
+}
+
+sub save_object {
+ my $sv;
+ foreach $sv (@_) {
+ svref_2object($sv)->save;
+ }
+}
+
+sub Dummy_BootStrap { }
+
+sub B::GV::savecv
+{
+ my $gv = shift;
+ my $package=$gv->STASH->NAME;
+ my $name = $gv->NAME;
+ my $cv = $gv->CV;
+ my $sv = $gv->SV;
+ my $av = $gv->AV;
+ my $hv = $gv->HV;
+
+ my $fullname = $gv->STASH->NAME . "::" . $gv->NAME;
+
+ # We may be looking at this package just because it is a branch in the
+ # symbol table which is on the path to a package which we need to save
+ # e.g. this is 'Getopt' and we need to save 'Getopt::Long'
+ #
+ return unless ($unused_sub_packages{$package});
+ return unless ($$cv || $$av || $$sv || $$hv);
+ $gv->save;
+}
+
+sub mark_package
+{
+ my $package = shift;
+ unless ($unused_sub_packages{$package})
+ {
+ no strict 'refs';
+ $unused_sub_packages{$package} = 1;
+ if (defined @{$package.'::ISA'})
+ {
+ foreach my $isa (@{$package.'::ISA'})
+ {
+ if ($isa eq 'DynaLoader')
+ {
+ unless (defined(&{$package.'::bootstrap'}))
+ {
+ warn "Forcing bootstrap of $package\n";
+ eval { $package->bootstrap };
+ }
+ }
+# else
+ {
+ unless ($unused_sub_packages{$isa})
+ {
+ warn "$isa saved (it is in $package\'s \@ISA)\n";
+ mark_package($isa);
+ }
+ }
+ }
+ }
+ }
+ return 1;
+}
+
+sub should_save
+{
+ no strict qw(vars refs);
+ my $package = shift;
+ $package =~ s/::$//;
+ return $unused_sub_packages{$package} = 0 if ($package =~ /::::/); # skip ::::ISA::CACHE etc.
+ # warn "Considering $package\n";#debug
+ foreach my $u (grep($unused_sub_packages{$_},keys %unused_sub_packages))
+ {
+ # If this package is a prefix to something we are saving, traverse it
+ # but do not mark it for saving if it is not already
+ # e.g. to get to Getopt::Long we need to traverse Getopt but need
+ # not save Getopt
+ return 1 if ($u =~ /^$package\:\:/);
+ }
+ if (exists $unused_sub_packages{$package})
+ {
+ # warn "Cached $package is ".$unused_sub_packages{$package}."\n";
+ delete_unsaved_hashINC($package) unless $unused_sub_packages{$package} ;
+ return $unused_sub_packages{$package};
+ }
+ # Omit the packages which we use (and which cause grief
+ # because of fancy "goto &$AUTOLOAD" stuff).
+ # XXX Surely there must be a nicer way to do this.
+ if ($package eq "FileHandle" || $package eq "Config" ||
+ $package eq "SelectSaver" || $package =~/^(B|IO)::/)
+ {
+ delete_unsaved_hashINC($package);
+ return $unused_sub_packages{$package} = 0;
+ }
+ # Now see if current package looks like an OO class this is probably too strong.
+ foreach my $m (qw(new DESTROY TIESCALAR TIEARRAY TIEHASH TIEHANDLE))
+ {
+ if (UNIVERSAL::can($package, $m))
+ {
+ warn "$package has method $m: saving package\n";#debug
+ return mark_package($package);
+ }
+ }
+ delete_unsaved_hashINC($package);
+ return $unused_sub_packages{$package} = 0;
+}
+sub delete_unsaved_hashINC{
+ my $packname=shift;
+ $packname =~ s/\:\:/\//g;
+ $packname .= '.pm';
+# warn "deleting $packname" if $INC{$packname} ;# debug
+ delete $INC{$packname};
+}
+sub walkpackages
+{
+ my ($symref, $recurse, $prefix) = @_;
+ my $sym;
+ my $ref;
+ no strict 'vars';
+ $prefix = '' unless defined $prefix;
+ while (($sym, $ref) = each %$symref)
+ {
+ local(*glob);
+ *glob = $ref;
+ if ($sym =~ /::$/)
+ {
+ $sym = $prefix . $sym;
+ if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym))
+ {
+ walkpackages(\%glob, $recurse, $sym);
+ }
+ }
+ }
+}
+
+
+sub save_unused_subs
+{
+ no strict qw(refs);
+ &descend_marked_unused;
+ warn "Prescan\n";
+ walkpackages(\%{"main::"}, sub { should_save($_[0]); return 1 });
+ warn "Saving methods\n";
+ walksymtable(\%{"main::"}, "savecv", \&should_save);
+}
+
+sub save_context
+{
+ my $curpad_nam = (comppadlist->ARRAY)[0]->save;
+ my $curpad_sym = (comppadlist->ARRAY)[1]->save;
+ my $inc_hv = svref_2object(\%INC)->save;
+ my $inc_av = svref_2object(\@INC)->save;
+ my $amagic_generate= amagic_generation;
+ $init->add( "PL_curpad = AvARRAY($curpad_sym);",
+ "GvHV(PL_incgv) = $inc_hv;",
+ "GvAV(PL_incgv) = $inc_av;",
+ "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));",
+ "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));",
+ "PL_amagic_generation= $amagic_generate;" );
+}
+
+sub descend_marked_unused {
+ foreach my $pack (keys %unused_sub_packages)
+ {
+ mark_package($pack);
+ }
+}
+
+sub save_main {
+ # this is mainly for the test suite
+ my $warner = $SIG{__WARN__};
+ local $SIG{__WARN__} = sub { print STDERR @_ };
+
+ warn "Starting compile\n";
+ warn "Walking tree\n";
+ seek(STDOUT,0,0); #exclude print statements in BEGIN{} into output
+ walkoptree(main_root, "save");
+ warn "done main optree, walking symtable for extras\n" if $debug_cv;
+ save_unused_subs();
+ # XSLoader was used, force saving of XSLoader::load
+ if( $use_xsloader ) {
+ my $cv = svref_2object( \&XSLoader::load );
+ $cv->save;
+ }
+ # save %SIG ( in case it was set in a BEGIN block )
+ if( $save_sig ) {
+ local $SIG{__WARN__} = $warner;
+ $init->no_split;
+ $init->add("{", "\tHV* hv = get_hv(\"main::SIG\",1);" );
+ foreach my $k ( keys %SIG ) {
+ next unless ref $SIG{$k};
+ my $cv = svref_2object( \$SIG{$k} );
+ my $sv = $cv->save;
+ $init->add('{',sprintf 'SV* sv = (SV*)%s;', $sv );
+ $init->add(sprintf("\thv_store(hv, %s, %u, %s, %s);",
+ cstring($k),length(pack "a*",$k),
+ 'sv', hash($k)));
+ $init->add('mg_set(sv);','}');
+ }
+ $init->add('}');
+ $init->split;
+ }
+ # honour -w
+ $init->add( sprintf " PL_dowarn = ( %s ) ? G_WARN_ON : G_WARN_OFF;", $^W );
+ #
+ my $init_av = init_av->save;
+ my $end_av = end_av->save;
+ $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}),
+ sprintf("PL_main_start = s\\_%x;", ${main_start()}),
+ "PL_initav = (AV *) $init_av;",
+ "PL_endav = (AV*) $end_av;");
+ save_context();
+ # init op addrs ( must be the last action, otherwise
+ # some ops might not be initialized
+ if( $optimize_ppaddr ) {
+ foreach my $i ( @op_sections ) {
+ my $section = $$i;
+ next unless $section->index >= 0;
+ init_op_addr( $section->name, $section->index + 1);
+ }
+ }
+ init_op_warn( $copsect->name, $copsect->index + 1)
+ if $optimize_warn_sv && $copsect->index >= 0;
+
+ warn "Writing output\n";
+ output_boilerplate();
+ print "\n";
+ output_all("perl_init");
+ print "\n";
+ output_main();
+}
+
+sub init_sections {
+ my @sections = (decl => \$decl, sym => \$symsect,
+ binop => \$binopsect, condop => \$condopsect,
+ cop => \$copsect, padop => \$padopsect,
+ listop => \$listopsect, logop => \$logopsect,
+ loop => \$loopsect, op => \$opsect, pmop => \$pmopsect,
+ pvop => \$pvopsect, svop => \$svopsect, unop => \$unopsect,
+ sv => \$svsect, xpv => \$xpvsect, xpvav => \$xpvavsect,
+ xpvhv => \$xpvhvsect, xpvcv => \$xpvcvsect,
+ xpviv => \$xpvivsect, xpvnv => \$xpvnvsect,
+ xpvmg => \$xpvmgsect, xpvlv => \$xpvlvsect,
+ xrv => \$xrvsect, xpvbm => \$xpvbmsect,
+ xpvio => \$xpviosect);
+ my ($name, $sectref);
+ while (($name, $sectref) = splice(@sections, 0, 2)) {
+ $$sectref = new B::C::Section $name, \%symtable, 0;
+ }
+ $init = new B::C::InitSection 'init', \%symtable, 0;
+}
+
+sub mark_unused
+{
+ my ($arg,$val) = @_;
+ $unused_sub_packages{$arg} = $val;
+}
+
+sub compile {
+ my @options = @_;
+ my ($option, $opt, $arg);
+ my @eval_at_startup;
+ my %option_map = ( 'cog' => \$pv_copy_on_grow,
+ 'save-data' => \$save_data_fh,
+ 'ppaddr' => \$optimize_ppaddr,
+ 'warn-sv' => \$optimize_warn_sv,
+ 'use-script-name' => \$use_perl_script_name,
+ 'save-sig-hash' => \$save_sig,
+ );
+ my %optimization_map = ( 0 => [ qw() ], # special case
+ 1 => [ qw(-fcog) ],
+ 2 => [ qw(-fwarn-sv -fppaddr) ],
+ );
+ OPTION:
+ while ($option = shift @options) {
+ if ($option =~ /^-(.)(.*)/) {
+ $opt = $1;
+ $arg = $2;
+ } else {
+ unshift @options, $option;
+ last OPTION;
+ }
+ if ($opt eq "-" && $arg eq "-") {
+ shift @options;
+ last OPTION;
+ }
+ if ($opt eq "w") {
+ $warn_undefined_syms = 1;
+ } elsif ($opt eq "D") {
+ $arg ||= shift @options;
+ foreach $arg (split(//, $arg)) {
+ if ($arg eq "o") {
+ B->debug(1);
+ } elsif ($arg eq "c") {
+ $debug_cops = 1;
+ } elsif ($arg eq "A") {
+ $debug_av = 1;
+ } elsif ($arg eq "C") {
+ $debug_cv = 1;
+ } elsif ($arg eq "M") {
+ $debug_mg = 1;
+ } else {
+ warn "ignoring unknown debug option: $arg\n";
+ }
+ }
+ } elsif ($opt eq "o") {
+ $arg ||= shift @options;
+ open(STDOUT, ">$arg") or return "$arg: $!\n";
+ } elsif ($opt eq "v") {
+ $verbose = 1;
+ } elsif ($opt eq "u") {
+ $arg ||= shift @options;
+ mark_unused($arg,undef);
+ } elsif ($opt eq "f") {
+ $arg ||= shift @options;
+ $arg =~ m/(no-)?(.*)/;
+ my $no = defined($1) && $1 eq 'no-';
+ $arg = $no ? $2 : $arg;
+ if( exists $option_map{$arg} ) {
+ ${$option_map{$arg}} = !$no;
+ } else {
+ die "Invalid optimization '$arg'";
+ }
+ } elsif ($opt eq "O") {
+ $arg = 1 if $arg eq "";
+ my @opt;
+ foreach my $i ( 1 .. $arg ) {
+ push @opt, @{$optimization_map{$i}}
+ if exists $optimization_map{$i};
+ }
+ unshift @options, @opt;
+ } elsif ($opt eq "e") {
+ push @eval_at_startup, $arg;
+ } elsif ($opt eq "l") {
+ $max_string_len = $arg;
+ }
+ }
+ init_sections();
+ foreach my $i ( @eval_at_startup ) {
+ $init->add_eval( $i );
+ }
+ if (@options) {
+ return sub {
+ my $objname;
+ foreach $objname (@options) {
+ eval "save_object(\\$objname)";
+ }
+ output_all();
+ }
+ } else {
+ return sub { save_main() };
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::C - Perl compiler's C backend
+
+=head1 SYNOPSIS
+
+ perl -MO=C[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+This compiler backend takes Perl source and generates C source code
+corresponding to the internal structures that perl uses to run
+your program. When the generated C source is compiled and run, it
+cuts out the time which perl would have taken to load and parse
+your program into its internal semi-compiled form. That means that
+compiling with this backend will not help improve the runtime
+execution speed of your program but may improve the start-up time.
+Depending on the environment in which your program runs this may be
+either a help or a hindrance.
+
+=head1 OPTIONS
+
+If there are any non-option arguments, they are taken to be
+names of objects to be saved (probably doesn't work properly yet).
+Without extra arguments, it saves the main program.
+
+=over 4
+
+=item B<-ofilename>
+
+Output to filename instead of STDOUT
+
+=item B<-v>
+
+Verbose compilation (currently gives a few compilation statistics).
+
+=item B<-->
+
+Force end of options
+
+=item B<-uPackname>
+
+Force apparently unused subs from package Packname to be compiled.
+This allows programs to use eval "foo()" even when sub foo is never
+seen to be used at compile time. The down side is that any subs which
+really are never used also have code generated. This option is
+necessary, for example, if you have a signal handler foo which you
+initialise with C<$SIG{BAR} = "foo">. A better fix, though, is just
+to change it to C<$SIG{BAR} = \&foo>. You can have multiple B<-u>
+options. The compiler tries to figure out which packages may possibly
+have subs in which need compiling but the current version doesn't do
+it very well. In particular, it is confused by nested packages (i.e.
+of the form C<A::B>) where package C<A> does not contain any subs.
+
+=item B<-D>
+
+Debug options (concatenated or separate flags like C<perl -D>).
+
+=item B<-Do>
+
+OPs, prints each OP as it's processed
+
+=item B<-Dc>
+
+COPs, prints COPs as processed (incl. file & line num)
+
+=item B<-DA>
+
+prints AV information on saving
+
+=item B<-DC>
+
+prints CV information on saving
+
+=item B<-DM>
+
+prints MAGIC information on saving
+
+=item B<-f>
+
+Force options/optimisations on or off one at a time. You can explicitly
+disable an option using B<-fno-option>. All options default to
+B<disabled>.
+
+=over 4
+
+=item B<-fcog>
+
+Copy-on-grow: PVs declared and initialised statically.
+
+=item B<-fsave-data>
+
+Save package::DATA filehandles ( only available with PerlIO ).
+
+=item B<-fppaddr>
+
+Optimize the initialization of op_ppaddr.
+
+=item B<-fwarn-sv>
+
+Optimize the initialization of cop_warnings.
+
+=item B<-fuse-script-name>
+
+Use the script name instead of the program name as $0.
+
+=item B<-fsave-sig-hash>
+
+Save compile-time modifications to the %SIG hash.
+
+=back
+
+=item B<-On>
+
+Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>.
+
+=over 4
+
+=item B<-O0>
+
+Disable all optimizations.
+
+=item B<-O1>
+
+Enable B<-fcog>.
+
+=item B<-O2>
+
+Enable B<-fppaddr>, B<-fwarn-sv>.
+
+=back
+
+=item B<-llimit>
+
+Some C compilers impose an arbitrary limit on the length of string
+constants (e.g. 2048 characters for Microsoft Visual C++). The
+B<-llimit> options tells the C backend not to generate string literals
+exceeding that limit.
+
+=back
+
+=head1 EXAMPLES
+
+ perl -MO=C,-ofoo.c foo.pl
+ perl cc_harness -o foo foo.c
+
+Note that C<cc_harness> lives in the C<B> subdirectory of your perl
+library directory. The utility called C<perlcc> may also be used to
+help make use of this compiler.
+
+ perl -MO=C,-v,-DcA,-l2048 bar.pl > /dev/null
+
+=head1 BUGS
+
+Plenty. Current status: experimental.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/CC.pm b/Master/tlpkg/tlperl/lib/B/CC.pm
new file mode 100644
index 00000000000..079313a0a4e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/CC.pm
@@ -0,0 +1,2005 @@
+# CC.pm
+#
+# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+package B::CC;
+
+our $VERSION = '1.00_01';
+
+use Config;
+use strict;
+use B qw(main_start main_root class comppadlist peekop svref_2object
+ timing_info init_av sv_undef amagic_generation
+ OPf_WANT_LIST OPf_WANT OPf_MOD OPf_STACKED OPf_SPECIAL
+ OPpASSIGN_BACKWARDS OPpLVAL_INTRO OPpDEREF_AV OPpDEREF_HV
+ OPpDEREF OPpFLIP_LINENUM G_ARRAY G_SCALAR
+ CXt_NULL CXt_SUB CXt_EVAL CXt_LOOP CXt_SUBST CXt_BLOCK
+ );
+use B::C qw(save_unused_subs objsym init_sections mark_unused
+ output_all output_boilerplate output_main);
+use B::Bblock qw(find_leaders);
+use B::Stackobj qw(:types :flags);
+
+# These should probably be elsewhere
+# Flags for $op->flags
+
+my $module; # module name (when compiled with -m)
+my %done; # hash keyed by $$op of leaders of basic blocks
+ # which have already been done.
+my $leaders; # ref to hash of basic block leaders. Keys are $$op
+ # addresses, values are the $op objects themselves.
+my @bblock_todo; # list of leaders of basic blocks that need visiting
+ # sometime.
+my @cc_todo; # list of tuples defining what PP code needs to be
+ # saved (e.g. CV, main or PMOP repl code). Each tuple
+ # is [$name, $root, $start, @padlist]. PMOP repl code
+ # tuples inherit padlist.
+my @stack; # shadows perl's stack when contents are known.
+ # Values are objects derived from class B::Stackobj
+my @pad; # Lexicals in current pad as Stackobj-derived objects
+my @padlist; # Copy of current padlist so PMOP repl code can find it
+my @cxstack; # Shadows the (compile-time) cxstack for next,last,redo
+my $jmpbuf_ix = 0; # Next free index for dynamically allocated jmpbufs
+my %constobj; # OP_CONST constants as Stackobj-derived objects
+ # keyed by $$sv.
+my $need_freetmps = 0; # We may postpone FREETMPS to the end of each basic
+ # block or even to the end of each loop of blocks,
+ # depending on optimisation options.
+my $know_op = 0; # Set when C variable op already holds the right op
+ # (from an immediately preceding DOOP(ppname)).
+my $errors = 0; # Number of errors encountered
+my %skip_stack; # Hash of PP names which don't need write_back_stack
+my %skip_lexicals; # Hash of PP names which don't need write_back_lexicals
+my %skip_invalidate; # Hash of PP names which don't need invalidate_lexicals
+my %ignore_op; # Hash of ops which do nothing except returning op_next
+my %need_curcop; # Hash of ops which need PL_curcop
+
+my %lexstate; #state of padsvs at the start of a bblock
+
+BEGIN {
+ foreach (qw(pp_scalar pp_regcmaybe pp_lineseq pp_scope pp_null)) {
+ $ignore_op{$_} = 1;
+ }
+}
+
+my ($module_name);
+my ($debug_op, $debug_stack, $debug_cxstack, $debug_pad, $debug_runtime,
+ $debug_shadow, $debug_queue, $debug_lineno, $debug_timings);
+
+# Optimisation options. On the command line, use hyphens instead of
+# underscores for compatibility with gcc-style options. We use
+# underscores here because they are OK in (strict) barewords.
+my ($freetmps_each_bblock, $freetmps_each_loop, $omit_taint);
+my %optimise = (freetmps_each_bblock => \$freetmps_each_bblock,
+ freetmps_each_loop => \$freetmps_each_loop,
+ omit_taint => \$omit_taint);
+# perl patchlevel to generate code for (defaults to current patchlevel)
+my $patchlevel = int(0.5 + 1000 * ($] - 5));
+
+# Could rewrite push_runtime() and output_runtime() to use a
+# temporary file if memory is at a premium.
+my $ppname; # name of current fake PP function
+my $runtime_list_ref;
+my $declare_ref; # Hash ref keyed by C variable type of declarations.
+
+my @pp_list; # list of [$ppname, $runtime_list_ref, $declare_ref]
+ # tuples to be written out.
+
+my ($init, $decl);
+
+sub init_hash { map { $_ => 1 } @_ }
+
+#
+# Initialise the hashes for the default PP functions where we can avoid
+# either write_back_stack, write_back_lexicals or invalidate_lexicals.
+#
+%skip_lexicals = init_hash qw(pp_enter pp_enterloop);
+%skip_invalidate = init_hash qw(pp_enter pp_enterloop);
+%need_curcop = init_hash qw(pp_rv2gv pp_bless pp_repeat pp_sort pp_caller
+ pp_reset pp_rv2cv pp_entereval pp_require pp_dofile
+ pp_entertry pp_enterloop pp_enteriter pp_entersub
+ pp_enter pp_method);
+
+sub debug {
+ if ($debug_runtime) {
+ warn(@_);
+ } else {
+ my @tmp=@_;
+ runtime(map { chomp; "/* $_ */"} @tmp);
+ }
+}
+
+sub declare {
+ my ($type, $var) = @_;
+ push(@{$declare_ref->{$type}}, $var);
+}
+
+sub push_runtime {
+ push(@$runtime_list_ref, @_);
+ warn join("\n", @_) . "\n" if $debug_runtime;
+}
+
+sub save_runtime {
+ push(@pp_list, [$ppname, $runtime_list_ref, $declare_ref]);
+}
+
+sub output_runtime {
+ my $ppdata;
+ print qq(#include "cc_runtime.h"\n);
+ foreach $ppdata (@pp_list) {
+ my ($name, $runtime, $declare) = @$ppdata;
+ print "\nstatic\nCCPP($name)\n{\n";
+ my ($type, $varlist, $line);
+ while (($type, $varlist) = each %$declare) {
+ print "\t$type ", join(", ", @$varlist), ";\n";
+ }
+ foreach $line (@$runtime) {
+ print $line, "\n";
+ }
+ print "}\n";
+ }
+}
+
+sub runtime {
+ my $line;
+ foreach $line (@_) {
+ push_runtime("\t$line");
+ }
+}
+
+sub init_pp {
+ $ppname = shift;
+ $runtime_list_ref = [];
+ $declare_ref = {};
+ runtime("dSP;");
+ declare("I32", "oldsave");
+ declare("SV", "**svp");
+ map { declare("SV", "*$_") } qw(sv src dst left right);
+ declare("MAGIC", "*mg");
+ $decl->add("static OP * $ppname (pTHX);");
+ debug "init_pp: $ppname\n" if $debug_queue;
+}
+
+# Initialise runtime_callback function for Stackobj class
+BEGIN { B::Stackobj::set_callback(\&runtime) }
+
+# Initialise saveoptree_callback for B::C class
+sub cc_queue {
+ my ($name, $root, $start, @pl) = @_;
+ debug "cc_queue: name $name, root $root, start $start, padlist (@pl)\n"
+ if $debug_queue;
+ if ($name eq "*ignore*") {
+ $name = 0;
+ } else {
+ push(@cc_todo, [$name, $root, $start, (@pl ? @pl : @padlist)]);
+ }
+ my $fakeop = new B::FAKEOP ("next" => 0, sibling => 0, ppaddr => $name);
+ $start = $fakeop->save;
+ debug "cc_queue: name $name returns $start\n" if $debug_queue;
+ return $start;
+}
+BEGIN { B::C::set_callback(\&cc_queue) }
+
+sub valid_int { $_[0]->{flags} & VALID_INT }
+sub valid_double { $_[0]->{flags} & VALID_DOUBLE }
+sub valid_numeric { $_[0]->{flags} & (VALID_INT | VALID_DOUBLE) }
+sub valid_sv { $_[0]->{flags} & VALID_SV }
+
+sub top_int { @stack ? $stack[-1]->as_int : "TOPi" }
+sub top_double { @stack ? $stack[-1]->as_double : "TOPn" }
+sub top_numeric { @stack ? $stack[-1]->as_numeric : "TOPn" }
+sub top_sv { @stack ? $stack[-1]->as_sv : "TOPs" }
+sub top_bool { @stack ? $stack[-1]->as_bool : "SvTRUE(TOPs)" }
+
+sub pop_int { @stack ? (pop @stack)->as_int : "POPi" }
+sub pop_double { @stack ? (pop @stack)->as_double : "POPn" }
+sub pop_numeric { @stack ? (pop @stack)->as_numeric : "POPn" }
+sub pop_sv { @stack ? (pop @stack)->as_sv : "POPs" }
+sub pop_bool {
+ if (@stack) {
+ return ((pop @stack)->as_bool);
+ } else {
+ # Careful: POPs has an auto-decrement and SvTRUE evaluates
+ # its argument more than once.
+ runtime("sv = POPs;");
+ return "SvTRUE(sv)";
+ }
+}
+
+sub write_back_lexicals {
+ my $avoid = shift || 0;
+ debug "write_back_lexicals($avoid) called from @{[(caller(1))[3]]}\n"
+ if $debug_shadow;
+ my $lex;
+ foreach $lex (@pad) {
+ next unless ref($lex);
+ $lex->write_back unless $lex->{flags} & $avoid;
+ }
+}
+
+sub save_or_restore_lexical_state {
+ my $bblock=shift;
+ unless( exists $lexstate{$bblock}){
+ foreach my $lex (@pad) {
+ next unless ref($lex);
+ ${$lexstate{$bblock}}{$lex->{iv}} = $lex->{flags} ;
+ }
+ }
+ else {
+ foreach my $lex (@pad) {
+ next unless ref($lex);
+ my $old_flags=${$lexstate{$bblock}}{$lex->{iv}} ;
+ next if ( $old_flags eq $lex->{flags});
+ if (($old_flags & VALID_SV) && !($lex->{flags} & VALID_SV)){
+ $lex->write_back;
+ }
+ if (($old_flags & VALID_DOUBLE) && !($lex->{flags} & VALID_DOUBLE)){
+ $lex->load_double;
+ }
+ if (($old_flags & VALID_INT) && !($lex->{flags} & VALID_INT)){
+ $lex->load_int;
+ }
+ }
+ }
+}
+
+sub write_back_stack {
+ my $obj;
+ return unless @stack;
+ runtime(sprintf("EXTEND(sp, %d);", scalar(@stack)));
+ foreach $obj (@stack) {
+ runtime(sprintf("PUSHs((SV*)%s);", $obj->as_sv));
+ }
+ @stack = ();
+}
+
+sub invalidate_lexicals {
+ my $avoid = shift || 0;
+ debug "invalidate_lexicals($avoid) called from @{[(caller(1))[3]]}\n"
+ if $debug_shadow;
+ my $lex;
+ foreach $lex (@pad) {
+ next unless ref($lex);
+ $lex->invalidate unless $lex->{flags} & $avoid;
+ }
+}
+
+sub reload_lexicals {
+ my $lex;
+ foreach $lex (@pad) {
+ next unless ref($lex);
+ my $type = $lex->{type};
+ if ($type == T_INT) {
+ $lex->as_int;
+ } elsif ($type == T_DOUBLE) {
+ $lex->as_double;
+ } else {
+ $lex->as_sv;
+ }
+ }
+}
+
+{
+ package B::Pseudoreg;
+ #
+ # This class allocates pseudo-registers (OK, so they're C variables).
+ #
+ my %alloc; # Keyed by variable name. A value of 1 means the
+ # variable has been declared. A value of 2 means
+ # it's in use.
+
+ sub new_scope { %alloc = () }
+
+ sub new ($$$) {
+ my ($class, $type, $prefix) = @_;
+ my ($ptr, $i, $varname, $status, $obj);
+ $prefix =~ s/^(\**)//;
+ $ptr = $1;
+ $i = 0;
+ do {
+ $varname = "$prefix$i";
+ $status = $alloc{$varname};
+ } while $status == 2;
+ if ($status != 1) {
+ # Not declared yet
+ B::CC::declare($type, "$ptr$varname");
+ $alloc{$varname} = 2; # declared and in use
+ }
+ $obj = bless \$varname, $class;
+ return $obj;
+ }
+ sub DESTROY {
+ my $obj = shift;
+ $alloc{$$obj} = 1; # no longer in use but still declared
+ }
+}
+{
+ package B::Shadow;
+ #
+ # This class gives a standard API for a perl object to shadow a
+ # C variable and only generate reloads/write-backs when necessary.
+ #
+ # Use $obj->load($foo) instead of runtime("shadowed_c_var = foo").
+ # Use $obj->write_back whenever shadowed_c_var needs to be up to date.
+ # Use $obj->invalidate whenever an unknown function may have
+ # set shadow itself.
+
+ sub new {
+ my ($class, $write_back) = @_;
+ # Object fields are perl shadow variable, validity flag
+ # (for *C* variable) and callback sub for write_back
+ # (passed perl shadow variable as argument).
+ bless [undef, 1, $write_back], $class;
+ }
+ sub load {
+ my ($obj, $newval) = @_;
+ $obj->[1] = 0; # C variable no longer valid
+ $obj->[0] = $newval;
+ }
+ sub write_back {
+ my $obj = shift;
+ if (!($obj->[1])) {
+ $obj->[1] = 1; # C variable will now be valid
+ &{$obj->[2]}($obj->[0]);
+ }
+ }
+ sub invalidate { $_[0]->[1] = 0 } # force C variable to be invalid
+}
+my $curcop = new B::Shadow (sub {
+ my $opsym = shift->save;
+ runtime("PL_curcop = (COP*)$opsym;");
+});
+
+#
+# Context stack shadowing. Mimics stuff in pp_ctl.c, cop.h and so on.
+#
+sub dopoptoloop {
+ my $cxix = $#cxstack;
+ while ($cxix >= 0 && $cxstack[$cxix]->{type} != CXt_LOOP) {
+ $cxix--;
+ }
+ debug "dopoptoloop: returning $cxix" if $debug_cxstack;
+ return $cxix;
+}
+
+sub dopoptolabel {
+ my $label = shift;
+ my $cxix = $#cxstack;
+ while ($cxix >= 0 &&
+ ($cxstack[$cxix]->{type} != CXt_LOOP ||
+ $cxstack[$cxix]->{label} ne $label)) {
+ $cxix--;
+ }
+ debug "dopoptolabel: returning $cxix" if $debug_cxstack;
+ return $cxix;
+}
+
+sub error {
+ my $format = shift;
+ my $file = $curcop->[0]->file;
+ my $line = $curcop->[0]->line;
+ $errors++;
+ if (@_) {
+ warn sprintf("%s:%d: $format\n", $file, $line, @_);
+ } else {
+ warn sprintf("%s:%d: %s\n", $file, $line, $format);
+ }
+}
+
+#
+# Load pad takes (the elements of) a PADLIST as arguments and loads
+# up @pad with Stackobj-derived objects which represent those lexicals.
+# If/when perl itself can generate type information (my int $foo) then
+# we'll take advantage of that here. Until then, we'll use various hacks
+# to tell the compiler when we want a lexical to be a particular type
+# or to be a register.
+#
+sub load_pad {
+ my ($namelistav, $valuelistav) = @_;
+ @padlist = @_;
+ my @namelist = $namelistav->ARRAY;
+ my @valuelist = $valuelistav->ARRAY;
+ my $ix;
+ @pad = ();
+ debug "load_pad: $#namelist names, $#valuelist values\n" if $debug_pad;
+ # Temporary lexicals don't get named so it's possible for @valuelist
+ # to be strictly longer than @namelist. We count $ix up to the end of
+ # @valuelist but index into @namelist for the name. Any temporaries which
+ # run off the end of @namelist will make $namesv undefined and we treat
+ # that the same as having an explicit SPECIAL sv_undef object in @namelist.
+ # [XXX If/when @_ becomes a lexical, we must start at 0 here.]
+ for ($ix = 1; $ix < @valuelist; $ix++) {
+ my $namesv = $namelist[$ix];
+ my $type = T_UNKNOWN;
+ my $flags = 0;
+ my $name = "tmp$ix";
+ my $class = class($namesv);
+ if (!defined($namesv) || $class eq "SPECIAL") {
+ # temporaries have &PL_sv_undef instead of a PVNV for a name
+ $flags = VALID_SV|TEMPORARY|REGISTER;
+ } else {
+ if ($namesv->PV =~ /^\$(.*)_([di])(r?)$/) {
+ $name = $1;
+ if ($2 eq "i") {
+ $type = T_INT;
+ $flags = VALID_SV|VALID_INT;
+ } elsif ($2 eq "d") {
+ $type = T_DOUBLE;
+ $flags = VALID_SV|VALID_DOUBLE;
+ }
+ $flags |= REGISTER if $3;
+ }
+ }
+ $pad[$ix] = new B::Stackobj::Padsv ($type, $flags, $ix,
+ "i_$name", "d_$name");
+
+ debug sprintf("PL_curpad[$ix] = %s\n", $pad[$ix]->peek) if $debug_pad;
+ }
+}
+
+sub declare_pad {
+ my $ix;
+ for ($ix = 1; $ix <= $#pad; $ix++) {
+ my $type = $pad[$ix]->{type};
+ declare("IV", $type == T_INT ?
+ sprintf("%s=0",$pad[$ix]->{iv}):$pad[$ix]->{iv}) if $pad[$ix]->save_int;
+ declare("double", $type == T_DOUBLE ?
+ sprintf("%s = 0",$pad[$ix]->{nv}):$pad[$ix]->{nv} )if $pad[$ix]->save_double;
+
+ }
+}
+#
+# Debugging stuff
+#
+sub peek_stack { sprintf "stack = %s\n", join(" ", map($_->minipeek, @stack)) }
+
+#
+# OP stuff
+#
+
+sub label {
+ my $op = shift;
+ # XXX Preserve original label name for "real" labels?
+ return sprintf("lab_%x", $$op);
+}
+
+sub write_label {
+ my $op = shift;
+ push_runtime(sprintf(" %s:", label($op)));
+}
+
+sub loadop {
+ my $op = shift;
+ my $opsym = $op->save;
+ runtime("PL_op = $opsym;") unless $know_op;
+ return $opsym;
+}
+
+sub doop {
+ my $op = shift;
+ my $ppname = $op->ppaddr;
+ my $sym = loadop($op);
+ runtime("DOOP($ppname);");
+ $know_op = 1;
+ return $sym;
+}
+
+sub gimme {
+ my $op = shift;
+ my $flags = $op->flags;
+ return (($flags & OPf_WANT) ? (($flags & OPf_WANT)== OPf_WANT_LIST? G_ARRAY:G_SCALAR) : "dowantarray()");
+}
+
+#
+# Code generation for PP code
+#
+
+sub pp_null {
+ my $op = shift;
+ return $op->next;
+}
+
+sub pp_stub {
+ my $op = shift;
+ my $gimme = gimme($op);
+ if ($gimme != G_ARRAY) {
+ my $obj= new B::Stackobj::Const(sv_undef);
+ push(@stack, $obj);
+ # XXX Change to push a constant sv_undef Stackobj onto @stack
+ #write_back_stack();
+ #runtime("if ($gimme != G_ARRAY) XPUSHs(&PL_sv_undef);");
+ }
+ return $op->next;
+}
+
+sub pp_unstack {
+ my $op = shift;
+ @stack = ();
+ runtime("PP_UNSTACK;");
+ return $op->next;
+}
+
+sub pp_and {
+ my $op = shift;
+ my $next = $op->next;
+ reload_lexicals();
+ unshift(@bblock_todo, $next);
+ if (@stack >= 1) {
+ my $bool = pop_bool();
+ write_back_stack();
+ save_or_restore_lexical_state($$next);
+ runtime(sprintf("if (!$bool) {XPUSHs(&PL_sv_no); goto %s;}", label($next)));
+ } else {
+ save_or_restore_lexical_state($$next);
+ runtime(sprintf("if (!%s) goto %s;", top_bool(), label($next)),
+ "*sp--;");
+ }
+ return $op->other;
+}
+
+sub pp_or {
+ my $op = shift;
+ my $next = $op->next;
+ reload_lexicals();
+ unshift(@bblock_todo, $next);
+ if (@stack >= 1) {
+ my $bool = pop_bool @stack;
+ write_back_stack();
+ save_or_restore_lexical_state($$next);
+ runtime(sprintf("if (%s) { XPUSHs(&PL_sv_yes); goto %s; }",
+ $bool, label($next)));
+ } else {
+ save_or_restore_lexical_state($$next);
+ runtime(sprintf("if (%s) goto %s;", top_bool(), label($next)),
+ "*sp--;");
+ }
+ return $op->other;
+}
+
+sub pp_cond_expr {
+ my $op = shift;
+ my $false = $op->next;
+ unshift(@bblock_todo, $false);
+ reload_lexicals();
+ my $bool = pop_bool();
+ write_back_stack();
+ save_or_restore_lexical_state($$false);
+ runtime(sprintf("if (!$bool) goto %s;", label($false)));
+ return $op->other;
+}
+
+sub pp_padsv {
+ my $op = shift;
+ my $ix = $op->targ;
+ push(@stack, $pad[$ix]);
+ if ($op->flags & OPf_MOD) {
+ my $private = $op->private;
+ if ($private & OPpLVAL_INTRO) {
+ runtime("SAVECLEARSV(PL_curpad[$ix]);");
+ } elsif ($private & OPpDEREF) {
+ runtime(sprintf("vivify_ref(PL_curpad[%d], %d);",
+ $ix, $private & OPpDEREF));
+ $pad[$ix]->invalidate;
+ }
+ }
+ return $op->next;
+}
+
+sub pp_const {
+ my $op = shift;
+ my $sv = $op->sv;
+ my $obj;
+ # constant could be in the pad (under useithreads)
+ if ($$sv) {
+ $obj = $constobj{$$sv};
+ if (!defined($obj)) {
+ $obj = $constobj{$$sv} = new B::Stackobj::Const ($sv);
+ }
+ }
+ else {
+ $obj = $pad[$op->targ];
+ }
+ push(@stack, $obj);
+ return $op->next;
+}
+
+sub pp_nextstate {
+ my $op = shift;
+ $curcop->load($op);
+ @stack = ();
+ debug(sprintf("%s:%d\n", $op->file, $op->line)) if $debug_lineno;
+ runtime("TAINT_NOT;") unless $omit_taint;
+ runtime("sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;");
+ if ($freetmps_each_bblock || $freetmps_each_loop) {
+ $need_freetmps = 1;
+ } else {
+ runtime("FREETMPS;");
+ }
+ return $op->next;
+}
+
+sub pp_dbstate {
+ my $op = shift;
+ $curcop->invalidate; # XXX?
+ return default_pp($op);
+}
+
+#default_pp will handle this:
+#sub pp_bless { $curcop->write_back; default_pp(@_) }
+#sub pp_repeat { $curcop->write_back; default_pp(@_) }
+# The following subs need $curcop->write_back if we decide to support arybase:
+# pp_pos, pp_substr, pp_index, pp_rindex, pp_aslice, pp_lslice, pp_splice
+#sub pp_caller { $curcop->write_back; default_pp(@_) }
+#sub pp_reset { $curcop->write_back; default_pp(@_) }
+
+sub pp_rv2gv{
+ my $op =shift;
+ $curcop->write_back;
+ write_back_lexicals() unless $skip_lexicals{$ppname};
+ write_back_stack() unless $skip_stack{$ppname};
+ my $sym=doop($op);
+ if ($op->private & OPpDEREF) {
+ $init->add(sprintf("((UNOP *)$sym)->op_first = $sym;"));
+ $init->add(sprintf("((UNOP *)$sym)->op_type = %d;",
+ $op->first->type));
+ }
+ return $op->next;
+}
+sub pp_sort {
+ my $op = shift;
+ my $ppname = $op->ppaddr;
+ if ( $op->flags & OPf_SPECIAL && $op->flags & OPf_STACKED){
+ #this indicates the sort BLOCK Array case
+ #ugly surgery required.
+ my $root=$op->first->sibling->first;
+ my $start=$root->first;
+ $op->first->save;
+ $op->first->sibling->save;
+ $root->save;
+ my $sym=$start->save;
+ my $fakeop=cc_queue("pp_sort".$$op,$root,$start);
+ $init->add(sprintf("(%s)->op_next=%s;",$sym,$fakeop));
+ }
+ $curcop->write_back;
+ write_back_lexicals();
+ write_back_stack();
+ doop($op);
+ return $op->next;
+}
+
+sub pp_gv {
+ my $op = shift;
+ my $gvsym;
+ if ($Config{useithreads}) {
+ $gvsym = $pad[$op->padix]->as_sv;
+ }
+ else {
+ $gvsym = $op->gv->save;
+ }
+ write_back_stack();
+ runtime("XPUSHs((SV*)$gvsym);");
+ return $op->next;
+}
+
+sub pp_gvsv {
+ my $op = shift;
+ my $gvsym;
+ if ($Config{useithreads}) {
+ $gvsym = $pad[$op->padix]->as_sv;
+ }
+ else {
+ $gvsym = $op->gv->save;
+ }
+ write_back_stack();
+ if ($op->private & OPpLVAL_INTRO) {
+ runtime("XPUSHs(save_scalar($gvsym));");
+ } else {
+ runtime("XPUSHs(GvSV($gvsym));");
+ }
+ return $op->next;
+}
+
+sub pp_aelemfast {
+ my $op = shift;
+ my $gvsym;
+ if ($Config{useithreads}) {
+ $gvsym = $pad[$op->padix]->as_sv;
+ }
+ else {
+ $gvsym = $op->gv->save;
+ }
+ my $ix = $op->private;
+ my $flag = $op->flags & OPf_MOD;
+ write_back_stack();
+ runtime("svp = av_fetch(GvAV($gvsym), $ix, $flag);",
+ "PUSHs(svp ? *svp : &PL_sv_undef);");
+ return $op->next;
+}
+
+sub int_binop {
+ my ($op, $operator) = @_;
+ if ($op->flags & OPf_STACKED) {
+ my $right = pop_int();
+ if (@stack >= 1) {
+ my $left = top_int();
+ $stack[-1]->set_int(&$operator($left, $right));
+ } else {
+ runtime(sprintf("sv_setiv(TOPs, %s);",&$operator("TOPi", $right)));
+ }
+ } else {
+ my $targ = $pad[$op->targ];
+ my $right = new B::Pseudoreg ("IV", "riv");
+ my $left = new B::Pseudoreg ("IV", "liv");
+ runtime(sprintf("$$right = %s; $$left = %s;", pop_int(), pop_int));
+ $targ->set_int(&$operator($$left, $$right));
+ push(@stack, $targ);
+ }
+ return $op->next;
+}
+
+sub INTS_CLOSED () { 0x1 }
+sub INT_RESULT () { 0x2 }
+sub NUMERIC_RESULT () { 0x4 }
+
+sub numeric_binop {
+ my ($op, $operator, $flags) = @_;
+ my $force_int = 0;
+ $force_int ||= ($flags & INT_RESULT);
+ $force_int ||= ($flags & INTS_CLOSED && @stack >= 2
+ && valid_int($stack[-2]) && valid_int($stack[-1]));
+ if ($op->flags & OPf_STACKED) {
+ my $right = pop_numeric();
+ if (@stack >= 1) {
+ my $left = top_numeric();
+ if ($force_int) {
+ $stack[-1]->set_int(&$operator($left, $right));
+ } else {
+ $stack[-1]->set_numeric(&$operator($left, $right));
+ }
+ } else {
+ if ($force_int) {
+ my $rightruntime = new B::Pseudoreg ("IV", "riv");
+ runtime(sprintf("$$rightruntime = %s;",$right));
+ runtime(sprintf("sv_setiv(TOPs, %s);",
+ &$operator("TOPi", $$rightruntime)));
+ } else {
+ my $rightruntime = new B::Pseudoreg ("double", "rnv");
+ runtime(sprintf("$$rightruntime = %s;",$right));
+ runtime(sprintf("sv_setnv(TOPs, %s);",
+ &$operator("TOPn",$$rightruntime)));
+ }
+ }
+ } else {
+ my $targ = $pad[$op->targ];
+ $force_int ||= ($targ->{type} == T_INT);
+ if ($force_int) {
+ my $right = new B::Pseudoreg ("IV", "riv");
+ my $left = new B::Pseudoreg ("IV", "liv");
+ runtime(sprintf("$$right = %s; $$left = %s;",
+ pop_numeric(), pop_numeric));
+ $targ->set_int(&$operator($$left, $$right));
+ } else {
+ my $right = new B::Pseudoreg ("double", "rnv");
+ my $left = new B::Pseudoreg ("double", "lnv");
+ runtime(sprintf("$$right = %s; $$left = %s;",
+ pop_numeric(), pop_numeric));
+ $targ->set_numeric(&$operator($$left, $$right));
+ }
+ push(@stack, $targ);
+ }
+ return $op->next;
+}
+
+sub pp_ncmp {
+ my ($op) = @_;
+ if ($op->flags & OPf_STACKED) {
+ my $right = pop_numeric();
+ if (@stack >= 1) {
+ my $left = top_numeric();
+ runtime sprintf("if (%s > %s){",$left,$right);
+ $stack[-1]->set_int(1);
+ $stack[-1]->write_back();
+ runtime sprintf("}else if (%s < %s ) {",$left,$right);
+ $stack[-1]->set_int(-1);
+ $stack[-1]->write_back();
+ runtime sprintf("}else if (%s == %s) {",$left,$right);
+ $stack[-1]->set_int(0);
+ $stack[-1]->write_back();
+ runtime sprintf("}else {");
+ $stack[-1]->set_sv("&PL_sv_undef");
+ runtime "}";
+ } else {
+ my $rightruntime = new B::Pseudoreg ("double", "rnv");
+ runtime(sprintf("$$rightruntime = %s;",$right));
+ runtime sprintf(qq/if ("TOPn" > %s){/,$rightruntime);
+ runtime sprintf("sv_setiv(TOPs,1);");
+ runtime sprintf(qq/}else if ( "TOPn" < %s ) {/,$$rightruntime);
+ runtime sprintf("sv_setiv(TOPs,-1);");
+ runtime sprintf(qq/} else if ("TOPn" == %s) {/,$$rightruntime);
+ runtime sprintf("sv_setiv(TOPs,0);");
+ runtime sprintf(qq/}else {/);
+ runtime sprintf("sv_setiv(TOPs,&PL_sv_undef;");
+ runtime "}";
+ }
+ } else {
+ my $targ = $pad[$op->targ];
+ my $right = new B::Pseudoreg ("double", "rnv");
+ my $left = new B::Pseudoreg ("double", "lnv");
+ runtime(sprintf("$$right = %s; $$left = %s;",
+ pop_numeric(), pop_numeric));
+ runtime sprintf("if (%s > %s){",$$left,$$right);
+ $targ->set_int(1);
+ $targ->write_back();
+ runtime sprintf("}else if (%s < %s ) {",$$left,$$right);
+ $targ->set_int(-1);
+ $targ->write_back();
+ runtime sprintf("}else if (%s == %s) {",$$left,$$right);
+ $targ->set_int(0);
+ $targ->write_back();
+ runtime sprintf("}else {");
+ $targ->set_sv("&PL_sv_undef");
+ runtime "}";
+ push(@stack, $targ);
+ }
+ return $op->next;
+}
+
+sub sv_binop {
+ my ($op, $operator, $flags) = @_;
+ if ($op->flags & OPf_STACKED) {
+ my $right = pop_sv();
+ if (@stack >= 1) {
+ my $left = top_sv();
+ if ($flags & INT_RESULT) {
+ $stack[-1]->set_int(&$operator($left, $right));
+ } elsif ($flags & NUMERIC_RESULT) {
+ $stack[-1]->set_numeric(&$operator($left, $right));
+ } else {
+ # XXX Does this work?
+ runtime(sprintf("sv_setsv($left, %s);",
+ &$operator($left, $right)));
+ $stack[-1]->invalidate;
+ }
+ } else {
+ my $f;
+ if ($flags & INT_RESULT) {
+ $f = "sv_setiv";
+ } elsif ($flags & NUMERIC_RESULT) {
+ $f = "sv_setnv";
+ } else {
+ $f = "sv_setsv";
+ }
+ runtime(sprintf("%s(TOPs, %s);", $f, &$operator("TOPs", $right)));
+ }
+ } else {
+ my $targ = $pad[$op->targ];
+ runtime(sprintf("right = %s; left = %s;", pop_sv(), pop_sv));
+ if ($flags & INT_RESULT) {
+ $targ->set_int(&$operator("left", "right"));
+ } elsif ($flags & NUMERIC_RESULT) {
+ $targ->set_numeric(&$operator("left", "right"));
+ } else {
+ # XXX Does this work?
+ runtime(sprintf("sv_setsv(%s, %s);",
+ $targ->as_sv, &$operator("left", "right")));
+ $targ->invalidate;
+ }
+ push(@stack, $targ);
+ }
+ return $op->next;
+}
+
+sub bool_int_binop {
+ my ($op, $operator) = @_;
+ my $right = new B::Pseudoreg ("IV", "riv");
+ my $left = new B::Pseudoreg ("IV", "liv");
+ runtime(sprintf("$$right = %s; $$left = %s;", pop_int(), pop_int()));
+ my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
+ $bool->set_int(&$operator($$left, $$right));
+ push(@stack, $bool);
+ return $op->next;
+}
+
+sub bool_numeric_binop {
+ my ($op, $operator) = @_;
+ my $right = new B::Pseudoreg ("double", "rnv");
+ my $left = new B::Pseudoreg ("double", "lnv");
+ runtime(sprintf("$$right = %s; $$left = %s;",
+ pop_numeric(), pop_numeric()));
+ my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
+ $bool->set_numeric(&$operator($$left, $$right));
+ push(@stack, $bool);
+ return $op->next;
+}
+
+sub bool_sv_binop {
+ my ($op, $operator) = @_;
+ runtime(sprintf("right = %s; left = %s;", pop_sv(), pop_sv()));
+ my $bool = new B::Stackobj::Bool (new B::Pseudoreg ("int", "b"));
+ $bool->set_numeric(&$operator("left", "right"));
+ push(@stack, $bool);
+ return $op->next;
+}
+
+sub infix_op {
+ my $opname = shift;
+ return sub { "$_[0] $opname $_[1]" }
+}
+
+sub prefix_op {
+ my $opname = shift;
+ return sub { sprintf("%s(%s)", $opname, join(", ", @_)) }
+}
+
+BEGIN {
+ my $plus_op = infix_op("+");
+ my $minus_op = infix_op("-");
+ my $multiply_op = infix_op("*");
+ my $divide_op = infix_op("/");
+ my $modulo_op = infix_op("%");
+ my $lshift_op = infix_op("<<");
+ my $rshift_op = infix_op(">>");
+ my $scmp_op = prefix_op("sv_cmp");
+ my $seq_op = prefix_op("sv_eq");
+ my $sne_op = prefix_op("!sv_eq");
+ my $slt_op = sub { "sv_cmp($_[0], $_[1]) < 0" };
+ my $sgt_op = sub { "sv_cmp($_[0], $_[1]) > 0" };
+ my $sle_op = sub { "sv_cmp($_[0], $_[1]) <= 0" };
+ my $sge_op = sub { "sv_cmp($_[0], $_[1]) >= 0" };
+ my $eq_op = infix_op("==");
+ my $ne_op = infix_op("!=");
+ my $lt_op = infix_op("<");
+ my $gt_op = infix_op(">");
+ my $le_op = infix_op("<=");
+ my $ge_op = infix_op(">=");
+
+ #
+ # XXX The standard perl PP code has extra handling for
+ # some special case arguments of these operators.
+ #
+ sub pp_add { numeric_binop($_[0], $plus_op) }
+ sub pp_subtract { numeric_binop($_[0], $minus_op) }
+ sub pp_multiply { numeric_binop($_[0], $multiply_op) }
+ sub pp_divide { numeric_binop($_[0], $divide_op) }
+ sub pp_modulo { int_binop($_[0], $modulo_op) } # differs from perl's
+
+ sub pp_left_shift { int_binop($_[0], $lshift_op) }
+ sub pp_right_shift { int_binop($_[0], $rshift_op) }
+ sub pp_i_add { int_binop($_[0], $plus_op) }
+ sub pp_i_subtract { int_binop($_[0], $minus_op) }
+ sub pp_i_multiply { int_binop($_[0], $multiply_op) }
+ sub pp_i_divide { int_binop($_[0], $divide_op) }
+ sub pp_i_modulo { int_binop($_[0], $modulo_op) }
+
+ sub pp_eq { bool_numeric_binop($_[0], $eq_op) }
+ sub pp_ne { bool_numeric_binop($_[0], $ne_op) }
+ sub pp_lt { bool_numeric_binop($_[0], $lt_op) }
+ sub pp_gt { bool_numeric_binop($_[0], $gt_op) }
+ sub pp_le { bool_numeric_binop($_[0], $le_op) }
+ sub pp_ge { bool_numeric_binop($_[0], $ge_op) }
+
+ sub pp_i_eq { bool_int_binop($_[0], $eq_op) }
+ sub pp_i_ne { bool_int_binop($_[0], $ne_op) }
+ sub pp_i_lt { bool_int_binop($_[0], $lt_op) }
+ sub pp_i_gt { bool_int_binop($_[0], $gt_op) }
+ sub pp_i_le { bool_int_binop($_[0], $le_op) }
+ sub pp_i_ge { bool_int_binop($_[0], $ge_op) }
+
+ sub pp_scmp { sv_binop($_[0], $scmp_op, INT_RESULT) }
+ sub pp_slt { bool_sv_binop($_[0], $slt_op) }
+ sub pp_sgt { bool_sv_binop($_[0], $sgt_op) }
+ sub pp_sle { bool_sv_binop($_[0], $sle_op) }
+ sub pp_sge { bool_sv_binop($_[0], $sge_op) }
+ sub pp_seq { bool_sv_binop($_[0], $seq_op) }
+ sub pp_sne { bool_sv_binop($_[0], $sne_op) }
+}
+
+
+sub pp_sassign {
+ my $op = shift;
+ my $backwards = $op->private & OPpASSIGN_BACKWARDS;
+ my ($dst, $src);
+ if (@stack >= 2) {
+ $dst = pop @stack;
+ $src = pop @stack;
+ ($src, $dst) = ($dst, $src) if $backwards;
+ my $type = $src->{type};
+ if ($type == T_INT) {
+ $dst->set_int($src->as_int,$src->{flags} & VALID_UNSIGNED);
+ } elsif ($type == T_DOUBLE) {
+ $dst->set_numeric($src->as_numeric);
+ } else {
+ $dst->set_sv($src->as_sv);
+ }
+ push(@stack, $dst);
+ } elsif (@stack == 1) {
+ if ($backwards) {
+ my $src = pop @stack;
+ my $type = $src->{type};
+ runtime("if (PL_tainting && PL_tainted) TAINT_NOT;");
+ if ($type == T_INT) {
+ if ($src->{flags} & VALID_UNSIGNED){
+ runtime sprintf("sv_setuv(TOPs, %s);", $src->as_int);
+ }else{
+ runtime sprintf("sv_setiv(TOPs, %s);", $src->as_int);
+ }
+ } elsif ($type == T_DOUBLE) {
+ runtime sprintf("sv_setnv(TOPs, %s);", $src->as_double);
+ } else {
+ runtime sprintf("sv_setsv(TOPs, %s);", $src->as_sv);
+ }
+ runtime("SvSETMAGIC(TOPs);");
+ } else {
+ my $dst = $stack[-1];
+ my $type = $dst->{type};
+ runtime("sv = POPs;");
+ runtime("MAYBE_TAINT_SASSIGN_SRC(sv);");
+ if ($type == T_INT) {
+ $dst->set_int("SvIV(sv)");
+ } elsif ($type == T_DOUBLE) {
+ $dst->set_double("SvNV(sv)");
+ } else {
+ runtime("SvSetMagicSV($dst->{sv}, sv);");
+ $dst->invalidate;
+ }
+ }
+ } else {
+ if ($backwards) {
+ runtime("src = POPs; dst = TOPs;");
+ } else {
+ runtime("dst = POPs; src = TOPs;");
+ }
+ runtime("MAYBE_TAINT_SASSIGN_SRC(src);",
+ "SvSetSV(dst, src);",
+ "SvSETMAGIC(dst);",
+ "SETs(dst);");
+ }
+ return $op->next;
+}
+
+sub pp_preinc {
+ my $op = shift;
+ if (@stack >= 1) {
+ my $obj = $stack[-1];
+ my $type = $obj->{type};
+ if ($type == T_INT || $type == T_DOUBLE) {
+ $obj->set_int($obj->as_int . " + 1");
+ } else {
+ runtime sprintf("PP_PREINC(%s);", $obj->as_sv);
+ $obj->invalidate();
+ }
+ } else {
+ runtime sprintf("PP_PREINC(TOPs);");
+ }
+ return $op->next;
+}
+
+
+sub pp_pushmark {
+ my $op = shift;
+ write_back_stack();
+ runtime("PUSHMARK(sp);");
+ return $op->next;
+}
+
+sub pp_list {
+ my $op = shift;
+ write_back_stack();
+ my $gimme = gimme($op);
+ if ($gimme == G_ARRAY) { # sic
+ runtime("POPMARK;"); # need this even though not a "full" pp_list
+ } else {
+ runtime("PP_LIST($gimme);");
+ }
+ return $op->next;
+}
+
+sub pp_entersub {
+ my $op = shift;
+ $curcop->write_back;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = doop($op);
+ runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
+ runtime("PL_op = (*PL_op->op_ppaddr)(aTHX);");
+ runtime("SPAGAIN;}");
+ $know_op = 0;
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+sub pp_formline {
+ my $op = shift;
+ my $ppname = $op->ppaddr;
+ write_back_lexicals() unless $skip_lexicals{$ppname};
+ write_back_stack() unless $skip_stack{$ppname};
+ my $sym=doop($op);
+ # See comment in pp_grepwhile to see why!
+ $init->add("((LISTOP*)$sym)->op_first = $sym;");
+ runtime("if (PL_op == ((LISTOP*)($sym))->op_first){");
+ save_or_restore_lexical_state(${$op->first});
+ runtime( sprintf("goto %s;",label($op->first)));
+ runtime("}");
+ return $op->next;
+}
+
+sub pp_goto{
+
+ my $op = shift;
+ my $ppname = $op->ppaddr;
+ write_back_lexicals() unless $skip_lexicals{$ppname};
+ write_back_stack() unless $skip_stack{$ppname};
+ my $sym=doop($op);
+ runtime("if (PL_op != ($sym)->op_next && PL_op != (OP*)0){return PL_op;}");
+ invalidate_lexicals() unless $skip_invalidate{$ppname};
+ return $op->next;
+}
+sub pp_enterwrite {
+ my $op = shift;
+ pp_entersub($op);
+}
+sub pp_leavesub{
+ my $op = shift;
+ write_back_lexicals() unless $skip_lexicals{$ppname};
+ write_back_stack() unless $skip_stack{$ppname};
+ runtime("if (PL_curstackinfo->si_type == PERLSI_SORT){");
+ runtime("\tPUTBACK;return 0;");
+ runtime("}");
+ doop($op);
+ return $op->next;
+}
+sub pp_leavewrite {
+ my $op = shift;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = doop($op);
+ # XXX Is this the right way to distinguish between it returning
+ # CvSTART(cv) (via doform) and pop_return()?
+ #runtime("if (PL_op) PL_op = (*PL_op->op_ppaddr)(aTHX);");
+ runtime("SPAGAIN;");
+ $know_op = 0;
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+
+sub doeval {
+ my $op = shift;
+ $curcop->write_back;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = loadop($op);
+ my $ppaddr = $op->ppaddr;
+ #runtime(qq/printf("$ppaddr type eval\n");/);
+ runtime("PP_EVAL($ppaddr, ($sym)->op_next);");
+ $know_op = 1;
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+
+sub pp_entereval { doeval(@_) }
+sub pp_dofile { doeval(@_) }
+
+#pp_require is protected by pp_entertry, so no protection for it.
+sub pp_require {
+ my $op = shift;
+ $curcop->write_back;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = doop($op);
+ runtime("while (PL_op != ($sym)->op_next && PL_op != (OP*)0 ){");
+ runtime("PL_op = (*PL_op->op_ppaddr)(ARGS);");
+ runtime("SPAGAIN;}");
+ $know_op = 1;
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+
+
+sub pp_entertry {
+ my $op = shift;
+ $curcop->write_back;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ my $sym = doop($op);
+ my $jmpbuf = sprintf("jmpbuf%d", $jmpbuf_ix++);
+ declare("JMPENV", $jmpbuf);
+ runtime(sprintf("PP_ENTERTRY(%s,%s);", $jmpbuf, label($op->other->next)));
+ invalidate_lexicals(REGISTER|TEMPORARY);
+ return $op->next;
+}
+
+sub pp_leavetry{
+ my $op=shift;
+ default_pp($op);
+ runtime("PP_LEAVETRY;");
+ return $op->next;
+}
+
+sub pp_grepstart {
+ my $op = shift;
+ if ($need_freetmps && $freetmps_each_loop) {
+ runtime("FREETMPS;"); # otherwise the grepwhile loop messes things up
+ $need_freetmps = 0;
+ }
+ write_back_stack();
+ my $sym= doop($op);
+ my $next=$op->next;
+ $next->save;
+ my $nexttonext=$next->next;
+ $nexttonext->save;
+ save_or_restore_lexical_state($$nexttonext);
+ runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
+ label($nexttonext)));
+ return $op->next->other;
+}
+
+sub pp_mapstart {
+ my $op = shift;
+ if ($need_freetmps && $freetmps_each_loop) {
+ runtime("FREETMPS;"); # otherwise the mapwhile loop messes things up
+ $need_freetmps = 0;
+ }
+ write_back_stack();
+ # pp_mapstart can return either op_next->op_next or op_next->op_other and
+ # we need to be able to distinguish the two at runtime.
+ my $sym= doop($op);
+ my $next=$op->next;
+ $next->save;
+ my $nexttonext=$next->next;
+ $nexttonext->save;
+ save_or_restore_lexical_state($$nexttonext);
+ runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
+ label($nexttonext)));
+ return $op->next->other;
+}
+
+sub pp_grepwhile {
+ my $op = shift;
+ my $next = $op->next;
+ unshift(@bblock_todo, $next);
+ write_back_lexicals();
+ write_back_stack();
+ my $sym = doop($op);
+ # pp_grepwhile can return either op_next or op_other and we need to
+ # be able to distinguish the two at runtime. Since it's possible for
+ # both ops to be "inlined", the fields could both be zero. To get
+ # around that, we hack op_next to be our own op (purely because we
+ # know it's a non-NULL pointer and can't be the same as op_other).
+ $init->add("((LOGOP*)$sym)->op_next = $sym;");
+ save_or_restore_lexical_state($$next);
+ runtime(sprintf("if (PL_op == ($sym)->op_next) goto %s;", label($next)));
+ $know_op = 0;
+ return $op->other;
+}
+
+sub pp_mapwhile {
+ pp_grepwhile(@_);
+}
+
+sub pp_return {
+ my $op = shift;
+ write_back_lexicals(REGISTER|TEMPORARY);
+ write_back_stack();
+ doop($op);
+ runtime("PUTBACK;", "return PL_op;");
+ $know_op = 0;
+ return $op->next;
+}
+
+sub nyi {
+ my $op = shift;
+ warn sprintf("%s not yet implemented properly\n", $op->ppaddr);
+ return default_pp($op);
+}
+
+sub pp_range {
+ my $op = shift;
+ my $flags = $op->flags;
+ if (!($flags & OPf_WANT)) {
+ error("context of range unknown at compile-time");
+ }
+ write_back_lexicals();
+ write_back_stack();
+ unless (($flags & OPf_WANT)== OPf_WANT_LIST) {
+ # We need to save our UNOP structure since pp_flop uses
+ # it to find and adjust out targ. We don't need it ourselves.
+ $op->save;
+ save_or_restore_lexical_state(${$op->other});
+ runtime sprintf("if (SvTRUE(PL_curpad[%d])) goto %s;",
+ $op->targ, label($op->other));
+ unshift(@bblock_todo, $op->other);
+ }
+ return $op->next;
+}
+
+sub pp_flip {
+ my $op = shift;
+ my $flags = $op->flags;
+ if (!($flags & OPf_WANT)) {
+ error("context of flip unknown at compile-time");
+ }
+ if (($flags & OPf_WANT)==OPf_WANT_LIST) {
+ return $op->first->other;
+ }
+ write_back_lexicals();
+ write_back_stack();
+ # We need to save our UNOP structure since pp_flop uses
+ # it to find and adjust out targ. We don't need it ourselves.
+ $op->save;
+ my $ix = $op->targ;
+ my $rangeix = $op->first->targ;
+ runtime(($op->private & OPpFLIP_LINENUM) ?
+ "if (PL_last_in_gv && SvIV(TOPs) == IoLINES(GvIOp(PL_last_in_gv))) {"
+ : "if (SvTRUE(TOPs)) {");
+ runtime("\tsv_setiv(PL_curpad[$rangeix], 1);");
+ if ($op->flags & OPf_SPECIAL) {
+ runtime("sv_setiv(PL_curpad[$ix], 1);");
+ } else {
+ save_or_restore_lexical_state(${$op->first->other});
+ runtime("\tsv_setiv(PL_curpad[$ix], 0);",
+ "\tsp--;",
+ sprintf("\tgoto %s;", label($op->first->other)));
+ }
+ runtime("}",
+ qq{sv_setpv(PL_curpad[$ix], "");},
+ "SETs(PL_curpad[$ix]);");
+ $know_op = 0;
+ return $op->next;
+}
+
+sub pp_flop {
+ my $op = shift;
+ default_pp($op);
+ $know_op = 0;
+ return $op->next;
+}
+
+sub enterloop {
+ my $op = shift;
+ my $nextop = $op->nextop;
+ my $lastop = $op->lastop;
+ my $redoop = $op->redoop;
+ $curcop->write_back;
+ debug "enterloop: pushing on cxstack" if $debug_cxstack;
+ push(@cxstack, {
+ type => CXt_LOOP,
+ op => $op,
+ "label" => $curcop->[0]->label,
+ nextop => $nextop,
+ lastop => $lastop,
+ redoop => $redoop
+ });
+ $nextop->save;
+ $lastop->save;
+ $redoop->save;
+ return default_pp($op);
+}
+
+sub pp_enterloop { enterloop(@_) }
+sub pp_enteriter { enterloop(@_) }
+
+sub pp_leaveloop {
+ my $op = shift;
+ if (!@cxstack) {
+ die "panic: leaveloop";
+ }
+ debug "leaveloop: popping from cxstack" if $debug_cxstack;
+ pop(@cxstack);
+ return default_pp($op);
+}
+
+sub pp_next {
+ my $op = shift;
+ my $cxix;
+ if ($op->flags & OPf_SPECIAL) {
+ $cxix = dopoptoloop();
+ if ($cxix < 0) {
+ error('"next" used outside loop');
+ return $op->next; # ignore the op
+ }
+ } else {
+ $cxix = dopoptolabel($op->pv);
+ if ($cxix < 0) {
+ error('Label not found at compile time for "next %s"', $op->pv);
+ return $op->next; # ignore the op
+ }
+ }
+ default_pp($op);
+ my $nextop = $cxstack[$cxix]->{nextop};
+ push(@bblock_todo, $nextop);
+ save_or_restore_lexical_state($$nextop);
+ runtime(sprintf("goto %s;", label($nextop)));
+ return $op->next;
+}
+
+sub pp_redo {
+ my $op = shift;
+ my $cxix;
+ if ($op->flags & OPf_SPECIAL) {
+ $cxix = dopoptoloop();
+ if ($cxix < 0) {
+ error('"redo" used outside loop');
+ return $op->next; # ignore the op
+ }
+ } else {
+ $cxix = dopoptolabel($op->pv);
+ if ($cxix < 0) {
+ error('Label not found at compile time for "redo %s"', $op->pv);
+ return $op->next; # ignore the op
+ }
+ }
+ default_pp($op);
+ my $redoop = $cxstack[$cxix]->{redoop};
+ push(@bblock_todo, $redoop);
+ save_or_restore_lexical_state($$redoop);
+ runtime(sprintf("goto %s;", label($redoop)));
+ return $op->next;
+}
+
+sub pp_last {
+ my $op = shift;
+ my $cxix;
+ if ($op->flags & OPf_SPECIAL) {
+ $cxix = dopoptoloop();
+ if ($cxix < 0) {
+ error('"last" used outside loop');
+ return $op->next; # ignore the op
+ }
+ } else {
+ $cxix = dopoptolabel($op->pv);
+ if ($cxix < 0) {
+ error('Label not found at compile time for "last %s"', $op->pv);
+ return $op->next; # ignore the op
+ }
+ # XXX Add support for "last" to leave non-loop blocks
+ if ($cxstack[$cxix]->{type} != CXt_LOOP) {
+ error('Use of "last" for non-loop blocks is not yet implemented');
+ return $op->next; # ignore the op
+ }
+ }
+ default_pp($op);
+ my $lastop = $cxstack[$cxix]->{lastop}->next;
+ push(@bblock_todo, $lastop);
+ save_or_restore_lexical_state($$lastop);
+ runtime(sprintf("goto %s;", label($lastop)));
+ return $op->next;
+}
+
+sub pp_subst {
+ my $op = shift;
+ write_back_lexicals();
+ write_back_stack();
+ my $sym = doop($op);
+ my $replroot = $op->pmreplroot;
+ if ($$replroot) {
+ save_or_restore_lexical_state($$replroot);
+ runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplroot) goto %s;",
+ $sym, label($replroot));
+ $op->pmreplstart->save;
+ push(@bblock_todo, $replroot);
+ }
+ invalidate_lexicals();
+ return $op->next;
+}
+
+sub pp_substcont {
+ my $op = shift;
+ write_back_lexicals();
+ write_back_stack();
+ doop($op);
+ my $pmop = $op->other;
+ # warn sprintf("substcont: op = %s, pmop = %s\n",
+ # peekop($op), peekop($pmop));#debug
+# my $pmopsym = objsym($pmop);
+ my $pmopsym = $pmop->save; # XXX can this recurse?
+# warn "pmopsym = $pmopsym\n";#debug
+ save_or_restore_lexical_state(${$pmop->pmreplstart});
+ runtime sprintf("if (PL_op == ((PMOP*)(%s))->op_pmreplstart) goto %s;",
+ $pmopsym, label($pmop->pmreplstart));
+ invalidate_lexicals();
+ return $pmop->next;
+}
+
+sub default_pp {
+ my $op = shift;
+ my $ppname = "pp_" . $op->name;
+ if ($curcop and $need_curcop{$ppname}){
+ $curcop->write_back;
+ }
+ write_back_lexicals() unless $skip_lexicals{$ppname};
+ write_back_stack() unless $skip_stack{$ppname};
+ doop($op);
+ # XXX If the only way that ops can write to a TEMPORARY lexical is
+ # when it's named in $op->targ then we could call
+ # invalidate_lexicals(TEMPORARY) and avoid having to write back all
+ # the temporaries. For now, we'll play it safe and write back the lot.
+ invalidate_lexicals() unless $skip_invalidate{$ppname};
+ return $op->next;
+}
+
+sub compile_op {
+ my $op = shift;
+ my $ppname = "pp_" . $op->name;
+ if (exists $ignore_op{$ppname}) {
+ return $op->next;
+ }
+ debug peek_stack() if $debug_stack;
+ if ($debug_op) {
+ debug sprintf("%s [%s]\n",
+ peekop($op),
+ $op->flags & OPf_STACKED ? "OPf_STACKED" : $op->targ);
+ }
+ no strict 'refs';
+ if (defined(&$ppname)) {
+ $know_op = 0;
+ return &$ppname($op);
+ } else {
+ return default_pp($op);
+ }
+}
+
+sub compile_bblock {
+ my $op = shift;
+ #warn "compile_bblock: ", peekop($op), "\n"; # debug
+ save_or_restore_lexical_state($$op);
+ write_label($op);
+ $know_op = 0;
+ do {
+ $op = compile_op($op);
+ } while (defined($op) && $$op && !exists($leaders->{$$op}));
+ write_back_stack(); # boo hoo: big loss
+ reload_lexicals();
+ return $op;
+}
+
+sub cc {
+ my ($name, $root, $start, @padlist) = @_;
+ my $op;
+ if($done{$$start}){
+ #warn "repeat=>".ref($start)."$name,\n";#debug
+ $decl->add(sprintf("#define $name %s",$done{$$start}));
+ return;
+ }
+ init_pp($name);
+ load_pad(@padlist);
+ %lexstate=();
+ B::Pseudoreg->new_scope;
+ @cxstack = ();
+ if ($debug_timings) {
+ warn sprintf("Basic block analysis at %s\n", timing_info);
+ }
+ $leaders = find_leaders($root, $start);
+ my @leaders= keys %$leaders;
+ if ($#leaders > -1) {
+ @bblock_todo = ($start, values %$leaders) ;
+ } else{
+ runtime("return PL_op?PL_op->op_next:0;");
+ }
+ if ($debug_timings) {
+ warn sprintf("Compilation at %s\n", timing_info);
+ }
+ while (@bblock_todo) {
+ $op = shift @bblock_todo;
+ #warn sprintf("Considering basic block %s\n", peekop($op)); # debug
+ next if !defined($op) || !$$op || $done{$$op};
+ #warn "...compiling it\n"; # debug
+ do {
+ $done{$$op} = $name;
+ $op = compile_bblock($op);
+ if ($need_freetmps && $freetmps_each_bblock) {
+ runtime("FREETMPS;");
+ $need_freetmps = 0;
+ }
+ } while defined($op) && $$op && !$done{$$op};
+ if ($need_freetmps && $freetmps_each_loop) {
+ runtime("FREETMPS;");
+ $need_freetmps = 0;
+ }
+ if (!$$op) {
+ runtime("PUTBACK;","return PL_op;");
+ } elsif ($done{$$op}) {
+ save_or_restore_lexical_state($$op);
+ runtime(sprintf("goto %s;", label($op)));
+ }
+ }
+ if ($debug_timings) {
+ warn sprintf("Saving runtime at %s\n", timing_info);
+ }
+ declare_pad(@padlist) ;
+ save_runtime();
+}
+
+sub cc_recurse {
+ my $ccinfo;
+ my $start;
+ $start = cc_queue(@_) if @_;
+ while ($ccinfo = shift @cc_todo) {
+ cc(@$ccinfo);
+ }
+ return $start;
+}
+
+sub cc_obj {
+ my ($name, $cvref) = @_;
+ my $cv = svref_2object($cvref);
+ my @padlist = $cv->PADLIST->ARRAY;
+ my $curpad_sym = $padlist[1]->save;
+ cc_recurse($name, $cv->ROOT, $cv->START, @padlist);
+}
+
+sub cc_main {
+ my @comppadlist = comppadlist->ARRAY;
+ my $curpad_nam = $comppadlist[0]->save;
+ my $curpad_sym = $comppadlist[1]->save;
+ my $init_av = init_av->save;
+ my $start = cc_recurse("pp_main", main_root, main_start, @comppadlist);
+ # Do save_unused_subs before saving inc_hv
+ save_unused_subs();
+ cc_recurse();
+
+ my $inc_hv = svref_2object(\%INC)->save;
+ my $inc_av = svref_2object(\@INC)->save;
+ my $amagic_generate= amagic_generation;
+ return if $errors;
+ if (!defined($module)) {
+ $init->add(sprintf("PL_main_root = s\\_%x;", ${main_root()}),
+ "PL_main_start = $start;",
+ "PL_curpad = AvARRAY($curpad_sym);",
+ "PL_initav = (AV *) $init_av;",
+ "GvHV(PL_incgv) = $inc_hv;",
+ "GvAV(PL_incgv) = $inc_av;",
+ "av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc($curpad_nam));",
+ "av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc($curpad_sym));",
+ "PL_amagic_generation= $amagic_generate;",
+ );
+
+ }
+ seek(STDOUT,0,0); #prevent print statements from BEGIN{} into the output
+ output_boilerplate();
+ print "\n";
+ output_all("perl_init");
+ output_runtime();
+ print "\n";
+ output_main();
+ if (defined($module)) {
+ my $cmodule = $module;
+ $cmodule =~ s/::/__/g;
+ print <<"EOT";
+
+#include "XSUB.h"
+XS(boot_$cmodule)
+{
+ dXSARGS;
+ perl_init();
+ ENTER;
+ SAVETMPS;
+ SAVEVPTR(PL_curpad);
+ SAVEVPTR(PL_op);
+ PL_curpad = AvARRAY($curpad_sym);
+ PL_op = $start;
+ pp_main(aTHX);
+ FREETMPS;
+ LEAVE;
+ ST(0) = &PL_sv_yes;
+ XSRETURN(1);
+}
+EOT
+ }
+ if ($debug_timings) {
+ warn sprintf("Done at %s\n", timing_info);
+ }
+}
+
+sub compile {
+ my @options = @_;
+ my ($option, $opt, $arg);
+ OPTION:
+ while ($option = shift @options) {
+ if ($option =~ /^-(.)(.*)/) {
+ $opt = $1;
+ $arg = $2;
+ } else {
+ unshift @options, $option;
+ last OPTION;
+ }
+ if ($opt eq "-" && $arg eq "-") {
+ shift @options;
+ last OPTION;
+ } elsif ($opt eq "o") {
+ $arg ||= shift @options;
+ open(STDOUT, ">$arg") or return "open '>$arg': $!\n";
+ } elsif ($opt eq "n") {
+ $arg ||= shift @options;
+ $module_name = $arg;
+ } elsif ($opt eq "u") {
+ $arg ||= shift @options;
+ mark_unused($arg,undef);
+ } elsif ($opt eq "f") {
+ $arg ||= shift @options;
+ my $value = $arg !~ s/^no-//;
+ $arg =~ s/-/_/g;
+ my $ref = $optimise{$arg};
+ if (defined($ref)) {
+ $$ref = $value;
+ } else {
+ warn qq(ignoring unknown optimisation option "$arg"\n);
+ }
+ } elsif ($opt eq "O") {
+ $arg = 1 if $arg eq "";
+ my $ref;
+ foreach $ref (values %optimise) {
+ $$ref = 0;
+ }
+ if ($arg >= 2) {
+ $freetmps_each_loop = 1;
+ }
+ if ($arg >= 1) {
+ $freetmps_each_bblock = 1 unless $freetmps_each_loop;
+ }
+ } elsif ($opt eq "m") {
+ $arg ||= shift @options;
+ $module = $arg;
+ mark_unused($arg,undef);
+ } elsif ($opt eq "p") {
+ $arg ||= shift @options;
+ $patchlevel = $arg;
+ } elsif ($opt eq "D") {
+ $arg ||= shift @options;
+ foreach $arg (split(//, $arg)) {
+ if ($arg eq "o") {
+ B->debug(1);
+ } elsif ($arg eq "O") {
+ $debug_op = 1;
+ } elsif ($arg eq "s") {
+ $debug_stack = 1;
+ } elsif ($arg eq "c") {
+ $debug_cxstack = 1;
+ } elsif ($arg eq "p") {
+ $debug_pad = 1;
+ } elsif ($arg eq "r") {
+ $debug_runtime = 1;
+ } elsif ($arg eq "S") {
+ $debug_shadow = 1;
+ } elsif ($arg eq "q") {
+ $debug_queue = 1;
+ } elsif ($arg eq "l") {
+ $debug_lineno = 1;
+ } elsif ($arg eq "t") {
+ $debug_timings = 1;
+ }
+ }
+ }
+ }
+ init_sections();
+ $init = B::Section->get("init");
+ $decl = B::Section->get("decl");
+
+ if (@options) {
+ return sub {
+ my ($objname, $ppname);
+ foreach $objname (@options) {
+ $objname = "main::$objname" unless $objname =~ /::/;
+ ($ppname = $objname) =~ s/^.*?:://;
+ eval "cc_obj(qq(pp_sub_$ppname), \\&$objname)";
+ die "cc_obj(qq(pp_sub_$ppname, \\&$objname) failed: $@" if $@;
+ return if $errors;
+ }
+ output_boilerplate();
+ print "\n";
+ output_all($module_name || "init_module");
+ output_runtime();
+ }
+ } else {
+ return sub { cc_main() };
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::CC - Perl compiler's optimized C translation backend
+
+=head1 SYNOPSIS
+
+ perl -MO=CC[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+This compiler backend takes Perl source and generates C source code
+corresponding to the flow of your program. In other words, this
+backend is somewhat a "real" compiler in the sense that many people
+think about compilers. Note however that, currently, it is a very
+poor compiler in that although it generates (mostly, or at least
+sometimes) correct code, it performs relatively few optimisations.
+This will change as the compiler develops. The result is that
+running an executable compiled with this backend may start up more
+quickly than running the original Perl program (a feature shared
+by the B<C> compiler backend--see F<B::C>) and may also execute
+slightly faster. This is by no means a good optimising compiler--yet.
+
+=head1 OPTIONS
+
+If there are any non-option arguments, they are taken to be
+names of objects to be saved (probably doesn't work properly yet).
+Without extra arguments, it saves the main program.
+
+=over 4
+
+=item B<-ofilename>
+
+Output to filename instead of STDOUT
+
+=item B<-v>
+
+Verbose compilation (currently gives a few compilation statistics).
+
+=item B<-->
+
+Force end of options
+
+=item B<-uPackname>
+
+Force apparently unused subs from package Packname to be compiled.
+This allows programs to use eval "foo()" even when sub foo is never
+seen to be used at compile time. The down side is that any subs which
+really are never used also have code generated. This option is
+necessary, for example, if you have a signal handler foo which you
+initialise with C<$SIG{BAR} = "foo">. A better fix, though, is just
+to change it to C<$SIG{BAR} = \&foo>. You can have multiple B<-u>
+options. The compiler tries to figure out which packages may possibly
+have subs in which need compiling but the current version doesn't do
+it very well. In particular, it is confused by nested packages (i.e.
+of the form C<A::B>) where package C<A> does not contain any subs.
+
+=item B<-mModulename>
+
+Instead of generating source for a runnable executable, generate
+source for an XSUB module. The boot_Modulename function (which
+DynaLoader can look for) does the appropriate initialisation and runs
+the main part of the Perl source that is being compiled.
+
+
+=item B<-D>
+
+Debug options (concatenated or separate flags like C<perl -D>).
+
+=item B<-Dr>
+
+Writes debugging output to STDERR just as it's about to write to the
+program's runtime (otherwise writes debugging info as comments in
+its C output).
+
+=item B<-DO>
+
+Outputs each OP as it's compiled
+
+=item B<-Ds>
+
+Outputs the contents of the shadow stack at each OP
+
+=item B<-Dp>
+
+Outputs the contents of the shadow pad of lexicals as it's loaded for
+each sub or the main program.
+
+=item B<-Dq>
+
+Outputs the name of each fake PP function in the queue as it's about
+to process it.
+
+=item B<-Dl>
+
+Output the filename and line number of each original line of Perl
+code as it's processed (C<pp_nextstate>).
+
+=item B<-Dt>
+
+Outputs timing information of compilation stages.
+
+=item B<-f>
+
+Force optimisations on or off one at a time.
+
+=item B<-ffreetmps-each-bblock>
+
+Delays FREETMPS from the end of each statement to the end of the each
+basic block.
+
+=item B<-ffreetmps-each-loop>
+
+Delays FREETMPS from the end of each statement to the end of the group
+of basic blocks forming a loop. At most one of the freetmps-each-*
+options can be used.
+
+=item B<-fomit-taint>
+
+Omits generating code for handling perl's tainting mechanism.
+
+=item B<-On>
+
+Optimisation level (n = 0, 1, 2, ...). B<-O> means B<-O1>.
+Currently, B<-O1> sets B<-ffreetmps-each-bblock> and B<-O2>
+sets B<-ffreetmps-each-loop>.
+
+=back
+
+=head1 EXAMPLES
+
+ perl -MO=CC,-O2,-ofoo.c foo.pl
+ perl cc_harness -o foo foo.c
+
+Note that C<cc_harness> lives in the C<B> subdirectory of your perl
+library directory. The utility called C<perlcc> may also be used to
+help make use of this compiler.
+
+ perl -MO=CC,-mFoo,-oFoo.c Foo.pm
+ perl cc_harness -shared -c -o Foo.so Foo.c
+
+=head1 BUGS
+
+Plenty. Current status: experimental.
+
+=head1 DIFFERENCES
+
+These aren't really bugs but they are constructs which are heavily
+tied to perl's compile-and-go implementation and with which this
+compiler backend cannot cope.
+
+=head2 Loops
+
+Standard perl calculates the target of "next", "last", and "redo"
+at run-time. The compiler calculates the targets at compile-time.
+For example, the program
+
+ sub skip_on_odd { next NUMBER if $_[0] % 2 }
+ NUMBER: for ($i = 0; $i < 5; $i++) {
+ skip_on_odd($i);
+ print $i;
+ }
+
+produces the output
+
+ 024
+
+with standard perl but gives a compile-time error with the compiler.
+
+=head2 Context of ".."
+
+The context (scalar or array) of the ".." operator determines whether
+it behaves as a range or a flip/flop. Standard perl delays until
+runtime the decision of which context it is in but the compiler needs
+to know the context at compile-time. For example,
+
+ @a = (4,6,1,0,0,1);
+ sub range { (shift @a)..(shift @a) }
+ print range();
+ while (@a) { print scalar(range()) }
+
+generates the output
+
+ 456123E0
+
+with standard Perl but gives a compile-time error with compiled Perl.
+
+=head2 Arithmetic
+
+Compiled Perl programs use native C arithmetic much more frequently
+than standard perl. Operations on large numbers or on boundary
+cases may produce different behaviour.
+
+=head2 Deprecated features
+
+Features of standard perl such as C<$[> which have been deprecated
+in standard perl since Perl5 was released have not been implemented
+in the compiler.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Concise.pm b/Master/tlpkg/tlperl/lib/B/Concise.pm
new file mode 100644
index 00000000000..c84578e44c4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Concise.pm
@@ -0,0 +1,1628 @@
+package B::Concise;
+# Copyright (C) 2000-2003 Stephen McCamant. All rights reserved.
+# This program is free software; you can redistribute and/or modify it
+# under the same terms as Perl itself.
+
+# Note: we need to keep track of how many use declarations/BEGIN
+# blocks this module uses, so we can avoid printing them when user
+# asks for the BEGIN blocks in her program. Update the comments and
+# the count in concise_specials if you add or delete one. The
+# -MO=Concise counts as use #1.
+
+use strict; # use #2
+use warnings; # uses #3 and #4, since warnings uses Carp
+
+use Exporter (); # use #5
+
+our $VERSION = "0.66";
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw( set_style set_style_standard add_callback
+ concise_subref concise_cv concise_main
+ add_style walk_output compile reset_sequence );
+our %EXPORT_TAGS =
+ ( io => [qw( walk_output compile reset_sequence )],
+ style => [qw( add_style set_style_standard )],
+ cb => [qw( add_callback )],
+ mech => [qw( concise_subref concise_cv concise_main )], );
+
+# use #6
+use B qw(class ppname main_start main_root main_cv cstring svref_2object
+ SVf_IOK SVf_NOK SVf_POK SVf_IVisUV SVf_FAKE OPf_KIDS OPf_SPECIAL
+ CVf_ANON);
+
+my %style =
+ ("terse" =>
+ ["(?(#label =>\n)?)(*( )*)#class (#addr) #name (?([#targ])?) "
+ . "#svclass~(?((#svaddr))?)~#svval~(?(label \"#coplabel\")?)\n",
+ "(*( )*)goto #class (#addr)\n",
+ "#class pp_#name"],
+ "concise" =>
+ ["#hyphseq2 (*( (x( ;)x))*)<#classsym> "
+ . "#exname#arg(?([#targarglife])?)~#flags(?(/#private)?)(x(;~->#next)x)\n"
+ , " (*( )*) goto #seq\n",
+ "(?(<#seq>)?)#exname#arg(?([#targarglife])?)"],
+ "linenoise" =>
+ ["(x(;(*( )*))x)#noise#arg(?([#targarg])?)(x( ;\n)x)",
+ "gt_#seq ",
+ "(?(#seq)?)#noise#arg(?([#targarg])?)"],
+ "debug" =>
+ ["#class (#addr)\n\top_next\t\t#nextaddr\n\top_sibling\t#sibaddr\n\t"
+ . "op_ppaddr\tPL_ppaddr[OP_#NAME]\n\top_type\t\t#typenum\n" .
+ ($] > 5.009 ? '' : "\top_seq\t\t#seqnum\n")
+ . "\top_flags\t#flagval\n\top_private\t#privval\n"
+ . "(?(\top_first\t#firstaddr\n)?)(?(\top_last\t\t#lastaddr\n)?)"
+ . "(?(\top_sv\t\t#svaddr\n)?)",
+ " GOTO #addr\n",
+ "#addr"],
+ "env" => [$ENV{B_CONCISE_FORMAT}, $ENV{B_CONCISE_GOTO_FORMAT},
+ $ENV{B_CONCISE_TREE_FORMAT}],
+ );
+
+# Renderings, ie how Concise prints, is controlled by these vars
+# primary:
+our $stylename; # selects current style from %style
+my $order = "basic"; # how optree is walked & printed: basic, exec, tree
+
+# rendering mechanics:
+# these 'formats' are the line-rendering templates
+# they're updated from %style when $stylename changes
+my ($format, $gotofmt, $treefmt);
+
+# lesser players:
+my $base = 36; # how <sequence#> is displayed
+my $big_endian = 1; # more <sequence#> display
+my $tree_style = 0; # tree-order details
+my $banner = 1; # print banner before optree is traversed
+my $do_main = 0; # force printing of main routine
+
+# another factor: can affect all styles!
+our @callbacks; # allow external management
+
+set_style_standard("concise");
+
+my $curcv;
+my $cop_seq_base;
+
+sub set_style {
+ ($format, $gotofmt, $treefmt) = @_;
+ #warn "set_style: deprecated, use set_style_standard instead\n"; # someday
+ die "expecting 3 style-format args\n" unless @_ == 3;
+}
+
+sub add_style {
+ my ($newstyle,@args) = @_;
+ die "style '$newstyle' already exists, choose a new name\n"
+ if exists $style{$newstyle};
+ die "expecting 3 style-format args\n" unless @args == 3;
+ $style{$newstyle} = [@args];
+ $stylename = $newstyle; # update rendering state
+}
+
+sub set_style_standard {
+ ($stylename) = @_; # update rendering state
+ die "err: style '$stylename' unknown\n" unless exists $style{$stylename};
+ set_style(@{$style{$stylename}});
+}
+
+sub add_callback {
+ push @callbacks, @_;
+}
+
+# output handle, used with all Concise-output printing
+our $walkHandle; # public for your convenience
+BEGIN { $walkHandle = \*STDOUT }
+
+sub walk_output { # updates $walkHandle
+ my $handle = shift;
+ return $walkHandle unless $handle; # allow use as accessor
+
+ if (ref $handle eq 'SCALAR') {
+ require Config;
+ die "no perlio in this build, can't call walk_output (\\\$scalar)\n"
+ unless $Config::Config{useperlio};
+ # in 5.8+, open(FILEHANDLE,MODE,REFERENCE) writes to string
+ open my $tmp, '>', $handle; # but cant re-set existing STDOUT
+ $walkHandle = $tmp; # so use my $tmp as intermediate var
+ return $walkHandle;
+ }
+ my $iotype = ref $handle;
+ die "expecting argument/object that can print\n"
+ unless $iotype eq 'GLOB' or $iotype and $handle->can('print');
+ $walkHandle = $handle;
+}
+
+sub concise_subref {
+ my($order, $coderef, $name) = @_;
+ my $codeobj = svref_2object($coderef);
+
+ return concise_stashref(@_)
+ unless ref $codeobj eq 'B::CV';
+ concise_cv_obj($order, $codeobj, $name);
+}
+
+sub concise_stashref {
+ my($order, $h) = @_;
+ foreach my $k (sort keys %$h) {
+ local *s = $h->{$k};
+ my $coderef = *s{CODE} or next;
+ reset_sequence();
+ print "FUNC: ", *s, "\n";
+ my $codeobj = svref_2object($coderef);
+ next unless ref $codeobj eq 'B::CV';
+ eval { concise_cv_obj($order, $codeobj) }
+ or warn "err $@ on $codeobj";
+ }
+}
+
+# This should have been called concise_subref, but it was exported
+# under this name in versions before 0.56
+*concise_cv = \&concise_subref;
+
+sub concise_cv_obj {
+ my ($order, $cv, $name) = @_;
+ # name is either a string, or a CODE ref (copy of $cv arg??)
+
+ $curcv = $cv;
+ if ($cv->XSUB) {
+ print $walkHandle "$name is XS code\n";
+ return;
+ }
+ if (class($cv->START) eq "NULL") {
+ no strict 'refs';
+ if (ref $name eq 'CODE') {
+ print $walkHandle "coderef $name has no START\n";
+ }
+ elsif (exists &$name) {
+ print $walkHandle "$name exists in stash, but has no START\n";
+ }
+ else {
+ print $walkHandle "$name not in symbol table\n";
+ }
+ return;
+ }
+ sequence($cv->START);
+ if ($order eq "exec") {
+ walk_exec($cv->START);
+ }
+ elsif ($order eq "basic") {
+ # walk_topdown($cv->ROOT, sub { $_[0]->concise($_[1]) }, 0);
+ my $root = $cv->ROOT;
+ unless (ref $root eq 'B::NULL') {
+ walk_topdown($root, sub { $_[0]->concise($_[1]) }, 0);
+ } else {
+ print $walkHandle "B::NULL encountered doing ROOT on $cv. avoiding disaster\n";
+ }
+ } else {
+ print $walkHandle tree($cv->ROOT, 0);
+ }
+}
+
+sub concise_main {
+ my($order) = @_;
+ sequence(main_start);
+ $curcv = main_cv;
+ if ($order eq "exec") {
+ return if class(main_start) eq "NULL";
+ walk_exec(main_start);
+ } elsif ($order eq "tree") {
+ return if class(main_root) eq "NULL";
+ print $walkHandle tree(main_root, 0);
+ } elsif ($order eq "basic") {
+ return if class(main_root) eq "NULL";
+ walk_topdown(main_root,
+ sub { $_[0]->concise($_[1]) }, 0);
+ }
+}
+
+sub concise_specials {
+ my($name, $order, @cv_s) = @_;
+ my $i = 1;
+ if ($name eq "BEGIN") {
+ splice(@cv_s, 0, 8); # skip 7 BEGIN blocks in this file. NOW 8 ??
+ } elsif ($name eq "CHECK") {
+ pop @cv_s; # skip the CHECK block that calls us
+ }
+ for my $cv (@cv_s) {
+ print $walkHandle "$name $i:\n";
+ $i++;
+ concise_cv_obj($order, $cv, $name);
+ }
+}
+
+my $start_sym = "\e(0"; # "\cN" sometimes also works
+my $end_sym = "\e(B"; # "\cO" respectively
+
+my @tree_decorations =
+ ([" ", "--", "+-", "|-", "| ", "`-", "-", 1],
+ [" ", "-", "+", "+", "|", "`", "", 0],
+ [" ", map("$start_sym$_$end_sym", "qq", "wq", "tq", "x ", "mq", "q"), 1],
+ [" ", map("$start_sym$_$end_sym", "q", "w", "t", "x", "m"), "", 0],
+ );
+
+
+sub compileOpts {
+ # set rendering state from options and args
+ my (@options,@args);
+ if (@_) {
+ @options = grep(/^-/, @_);
+ @args = grep(!/^-/, @_);
+ }
+ for my $o (@options) {
+ # mode/order
+ if ($o eq "-basic") {
+ $order = "basic";
+ } elsif ($o eq "-exec") {
+ $order = "exec";
+ } elsif ($o eq "-tree") {
+ $order = "tree";
+ }
+ # tree-specific
+ elsif ($o eq "-compact") {
+ $tree_style |= 1;
+ } elsif ($o eq "-loose") {
+ $tree_style &= ~1;
+ } elsif ($o eq "-vt") {
+ $tree_style |= 2;
+ } elsif ($o eq "-ascii") {
+ $tree_style &= ~2;
+ }
+ # sequence numbering
+ elsif ($o =~ /^-base(\d+)$/) {
+ $base = $1;
+ } elsif ($o eq "-bigendian") {
+ $big_endian = 1;
+ } elsif ($o eq "-littleendian") {
+ $big_endian = 0;
+ }
+ elsif ($o eq "-nobanner") {
+ $banner = 0;
+ } elsif ($o eq "-banner") {
+ $banner = 1;
+ }
+ elsif ($o eq "-main") {
+ $do_main = 1;
+ } elsif ($o eq "-nomain") {
+ $do_main = 0;
+ }
+ # line-style options
+ elsif (exists $style{substr($o, 1)}) {
+ $stylename = substr($o, 1);
+ set_style_standard($stylename);
+ } else {
+ warn "Option $o unrecognized";
+ }
+ }
+ return (@args);
+}
+
+sub compile {
+ my (@args) = compileOpts(@_);
+ return sub {
+ my @newargs = compileOpts(@_); # accept new rendering options
+ warn "disregarding non-options: @newargs\n" if @newargs;
+
+ for my $objname (@args) {
+ next unless $objname; # skip null args to avoid noisy responses
+
+ if ($objname eq "BEGIN") {
+ concise_specials("BEGIN", $order,
+ B::begin_av->isa("B::AV") ?
+ B::begin_av->ARRAY : ());
+ } elsif ($objname eq "INIT") {
+ concise_specials("INIT", $order,
+ B::init_av->isa("B::AV") ?
+ B::init_av->ARRAY : ());
+ } elsif ($objname eq "CHECK") {
+ concise_specials("CHECK", $order,
+ B::check_av->isa("B::AV") ?
+ B::check_av->ARRAY : ());
+ } elsif ($objname eq "END") {
+ concise_specials("END", $order,
+ B::end_av->isa("B::AV") ?
+ B::end_av->ARRAY : ());
+ }
+ else {
+ # convert function names to subrefs
+ my $objref;
+ if (ref $objname) {
+ print $walkHandle "B::Concise::compile($objname)\n"
+ if $banner;
+ $objref = $objname;
+ } else {
+ $objname = "main::" . $objname unless $objname =~ /::/;
+ print $walkHandle "$objname:\n";
+ no strict 'refs';
+ unless (exists &$objname) {
+ print $walkHandle "err: unknown function ($objname)\n";
+ return;
+ }
+ $objref = \&$objname;
+ }
+ concise_subref($order, $objref, $objname);
+ }
+ }
+ if (!@args or $do_main) {
+ print $walkHandle "main program:\n" if $do_main;
+ concise_main($order);
+ }
+ return @args; # something
+ }
+}
+
+my %labels;
+my $lastnext; # remembers op-chain, used to insert gotos
+
+my %opclass = ('OP' => "0", 'UNOP' => "1", 'BINOP' => "2", 'LOGOP' => "|",
+ 'LISTOP' => "@", 'PMOP' => "/", 'SVOP' => "\$", 'GVOP' => "*",
+ 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";", 'PADOP' => "#");
+
+no warnings 'qw'; # "Possible attempt to put comments..."; use #7
+my @linenoise =
+ qw'# () sc ( @? 1 $* gv *{ m$ m@ m% m? p/ *$ $ $# & a& pt \\ s\\ rf bl
+ ` *? <> ?? ?/ r/ c/ // qr s/ /c y/ = @= C sC Cp sp df un BM po +1 +I
+ -1 -I 1+ I+ 1- I- ** * i* / i/ %$ i% x + i+ - i- . " << >> < i<
+ > i> <= i, >= i. == i= != i! <? i? s< s> s, s. s= s! s? b& b^ b| -0 -i
+ ! ~ a2 si cs rd sr e^ lg sq in %x %o ab le ss ve ix ri sf FL od ch cy
+ uf lf uc lc qm @ [f [ @[ eh vl ky dl ex % ${ @{ uk pk st jn ) )[ a@
+ a% sl +] -] [- [+ so rv GS GW MS MW .. f. .f && || ^^ ?: &= |= -> s{ s}
+ v} ca wa di rs ;; ; ;d }{ { } {} f{ it {l l} rt }l }n }r dm }g }e ^o
+ ^c ^| ^# um bm t~ u~ ~d DB db ^s se ^g ^r {w }w pf pr ^O ^K ^R ^W ^d ^v
+ ^e ^t ^k t. fc ic fl .s .p .b .c .l .a .h g1 s1 g2 s2 ?. l? -R -W -X -r
+ -w -x -e -o -O -z -s -M -A -C -S -c -b -f -d -p -l -u -g -k -t -T -B cd
+ co cr u. cm ut r. l@ s@ r@ mD uD oD rD tD sD wD cD f$ w$ p$ sh e$ k$ g3
+ g4 s4 g5 s5 T@ C@ L@ G@ A@ S@ Hg Hc Hr Hw Mg Mc Ms Mr Sg Sc So rq do {e
+ e} {t t} g6 G6 6e g7 G7 7e g8 G8 8e g9 G9 9e 6s 7s 8s 9s 6E 7E 8E 9E Pn
+ Pu GP SP EP Gn Gg GG SG EG g0 c$ lk t$ ;s n> // /= CO';
+
+my $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+sub op_flags { # common flags (see BASOP.op_flags in op.h)
+ my($x) = @_;
+ my(@v);
+ push @v, "v" if ($x & 3) == 1;
+ push @v, "s" if ($x & 3) == 2;
+ push @v, "l" if ($x & 3) == 3;
+ push @v, "K" if $x & 4;
+ push @v, "P" if $x & 8;
+ push @v, "R" if $x & 16;
+ push @v, "M" if $x & 32;
+ push @v, "S" if $x & 64;
+ push @v, "*" if $x & 128;
+ return join("", @v);
+}
+
+sub base_n {
+ my $x = shift;
+ return "-" . base_n(-$x) if $x < 0;
+ my $str = "";
+ do { $str .= substr($chars, $x % $base, 1) } while $x = int($x / $base);
+ $str = reverse $str if $big_endian;
+ return $str;
+}
+
+my %sequence_num;
+my $seq_max = 1;
+
+sub reset_sequence {
+ # reset the sequence
+ %sequence_num = ();
+ $seq_max = 1;
+ $lastnext = 0;
+}
+
+sub seq {
+ my($op) = @_;
+ return "-" if not exists $sequence_num{$$op};
+ return base_n($sequence_num{$$op});
+}
+
+sub walk_topdown {
+ my($op, $sub, $level) = @_;
+ $sub->($op, $level);
+ if ($op->flags & OPf_KIDS) {
+ for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
+ walk_topdown($kid, $sub, $level + 1);
+ }
+ }
+ elsif (class($op) eq "PMOP") {
+ my $maybe_root = $op->pmreplroot;
+ if (ref($maybe_root) and $maybe_root->isa("B::OP")) {
+ # It really is the root of the replacement, not something
+ # else stored here for lack of space elsewhere
+ walk_topdown($maybe_root, $sub, $level + 1);
+ }
+ }
+}
+
+sub walklines {
+ my($ar, $level) = @_;
+ for my $l (@$ar) {
+ if (ref($l) eq "ARRAY") {
+ walklines($l, $level + 1);
+ } else {
+ $l->concise($level);
+ }
+ }
+}
+
+sub walk_exec {
+ my($top, $level) = @_;
+ my %opsseen;
+ my @lines;
+ my @todo = ([$top, \@lines]);
+ while (@todo and my($op, $targ) = @{shift @todo}) {
+ for (; $$op; $op = $op->next) {
+ last if $opsseen{$$op}++;
+ push @$targ, $op;
+ my $name = $op->name;
+ if (class($op) eq "LOGOP") {
+ my $ar = [];
+ push @$targ, $ar;
+ push @todo, [$op->other, $ar];
+ } elsif ($name eq "subst" and $ {$op->pmreplstart}) {
+ my $ar = [];
+ push @$targ, $ar;
+ push @todo, [$op->pmreplstart, $ar];
+ } elsif ($name =~ /^enter(loop|iter)$/) {
+ if ($] > 5.009) {
+ $labels{${$op->nextop}} = "NEXT";
+ $labels{${$op->lastop}} = "LAST";
+ $labels{${$op->redoop}} = "REDO";
+ } else {
+ $labels{$op->nextop->seq} = "NEXT";
+ $labels{$op->lastop->seq} = "LAST";
+ $labels{$op->redoop->seq} = "REDO";
+ }
+ }
+ }
+ }
+ walklines(\@lines, 0);
+}
+
+# The structure of this routine is purposely modeled after op.c's peep()
+sub sequence {
+ my($op) = @_;
+ my $oldop = 0;
+ return if class($op) eq "NULL" or exists $sequence_num{$$op};
+ for (; $$op; $op = $op->next) {
+ last if exists $sequence_num{$$op};
+ my $name = $op->name;
+ if ($name =~ /^(null|scalar|lineseq|scope)$/) {
+ next if $oldop and $ {$op->next};
+ } else {
+ $sequence_num{$$op} = $seq_max++;
+ if (class($op) eq "LOGOP") {
+ my $other = $op->other;
+ $other = $other->next while $other->name eq "null";
+ sequence($other);
+ } elsif (class($op) eq "LOOP") {
+ my $redoop = $op->redoop;
+ $redoop = $redoop->next while $redoop->name eq "null";
+ sequence($redoop);
+ my $nextop = $op->nextop;
+ $nextop = $nextop->next while $nextop->name eq "null";
+ sequence($nextop);
+ my $lastop = $op->lastop;
+ $lastop = $lastop->next while $lastop->name eq "null";
+ sequence($lastop);
+ } elsif ($name eq "subst" and $ {$op->pmreplstart}) {
+ my $replstart = $op->pmreplstart;
+ $replstart = $replstart->next while $replstart->name eq "null";
+ sequence($replstart);
+ }
+ }
+ $oldop = $op;
+ }
+}
+
+sub fmt_line { # generate text-line for op.
+ my($hr, $op, $text, $level) = @_;
+
+ $_->($hr, $op, \$text, \$level, $stylename) for @callbacks;
+
+ return '' if $hr->{SKIP}; # suppress line if a callback said so
+ return '' if $hr->{goto} and $hr->{goto} eq '-'; # no goto nowhere
+
+ # spec: (?(text1#varText2)?)
+ $text =~ s/\(\?\(([^\#]*?)\#(\w+)([^\#]*?)\)\?\)/
+ $hr->{$2} ? $1.$hr->{$2}.$3 : ""/eg;
+
+ # spec: (x(exec_text;basic_text)x)
+ $text =~ s/\(x\((.*?);(.*?)\)x\)/$order eq "exec" ? $1 : $2/egs;
+
+ # spec: (*(text)*)
+ $text =~ s/\(\*\(([^;]*?)\)\*\)/$1 x $level/egs;
+
+ # spec: (*(text1;text2)*)
+ $text =~ s/\(\*\((.*?);(.*?)\)\*\)/$1 x ($level - 1) . $2 x ($level>0)/egs;
+
+ # convert #Var to tag=>val form: Var\t#var
+ $text =~ s/\#([A-Z][a-z]+)(\d+)?/\t\u$1\t\L#$1$2/gs;
+
+ # spec: #varN
+ $text =~ s/\#([a-zA-Z]+)(\d+)/sprintf("%-$2s", $hr->{$1})/eg;
+
+ $text =~ s/\#([a-zA-Z]+)/$hr->{$1}/eg; # populate #var's
+ $text =~ s/[ \t]*~+[ \t]*/ /g; # squeeze tildes
+ chomp $text;
+ return "$text\n" if $text ne "";
+ return $text; # suppress empty lines
+}
+
+our %priv; # used to display each opcode's BASEOP.op_private values
+
+$priv{$_}{128} = "LVINTRO"
+ for ("pos", "substr", "vec", "threadsv", "gvsv", "rv2sv", "rv2hv", "rv2gv",
+ "rv2av", "rv2arylen", "aelem", "helem", "aslice", "hslice", "padsv",
+ "padav", "padhv", "enteriter");
+$priv{$_}{64} = "REFC" for ("leave", "leavesub", "leavesublv", "leavewrite");
+$priv{"aassign"}{64} = "COMMON";
+$priv{"aassign"}{32} = "PHASH" if $] < 5.009;
+$priv{"sassign"}{64} = "BKWARD";
+$priv{$_}{64} = "RTIME" for ("match", "subst", "substcont", "qr");
+@{$priv{"trans"}}{1,2,4,8,16,64} = ("<UTF", ">UTF", "IDENT", "SQUASH", "DEL",
+ "COMPL", "GROWS");
+$priv{"repeat"}{64} = "DOLIST";
+$priv{"leaveloop"}{64} = "CONT";
+@{$priv{$_}}{32,64,96} = ("DREFAV", "DREFHV", "DREFSV")
+ for (qw(rv2gv rv2sv padsv aelem helem));
+@{$priv{"entersub"}}{16,32,64} = ("DBG","TARG","NOMOD");
+@{$priv{$_}}{4,8,128} = ("INARGS","AMPER","NO()") for ("entersub", "rv2cv");
+$priv{"gv"}{32} = "EARLYCV";
+$priv{"aelem"}{16} = $priv{"helem"}{16} = "LVDEFER";
+$priv{$_}{16} = "OURINTR" for ("gvsv", "rv2sv", "rv2av", "rv2hv", "r2gv",
+ "enteriter");
+$priv{$_}{16} = "TARGMY"
+ for (map(($_,"s$_"),"chop", "chomp"),
+ map(($_,"i_$_"), "postinc", "postdec", "multiply", "divide", "modulo",
+ "add", "subtract", "negate"), "pow", "concat", "stringify",
+ "left_shift", "right_shift", "bit_and", "bit_xor", "bit_or",
+ "complement", "atan2", "sin", "cos", "rand", "exp", "log", "sqrt",
+ "int", "hex", "oct", "abs", "length", "index", "rindex", "sprintf",
+ "ord", "chr", "crypt", "quotemeta", "join", "push", "unshift", "flock",
+ "chdir", "chown", "chroot", "unlink", "chmod", "utime", "rename",
+ "link", "symlink", "mkdir", "rmdir", "wait", "waitpid", "system",
+ "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority",
+ "setpriority", "time", "sleep");
+$priv{$_}{4} = "REVERSED" for ("enteriter", "iter");
+@{$priv{"const"}}{4,8,16,32,64,128} = ("SHORT","STRICT","ENTERED",'$[',"BARE","WARN");
+$priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM";
+$priv{"list"}{64} = "GUESSED";
+$priv{"delete"}{64} = "SLICE";
+$priv{"exists"}{64} = "SUB";
+$priv{$_}{64} = "LOCALE"
+ for ("sort", "prtf", "sprintf", "slt", "sle", "seq", "sne", "sgt", "sge",
+ "scmp", "lc", "uc", "lcfirst", "ucfirst");
+@{$priv{"sort"}}{1,2,4,8,16} = ("NUM", "INT", "REV", "INPLACE","DESC");
+$priv{"threadsv"}{64} = "SVREFd";
+@{$priv{$_}}{16,32,64,128} = ("INBIN","INCR","OUTBIN","OUTCR")
+ for ("open", "backtick");
+$priv{"exit"}{128} = "VMS";
+$priv{$_}{2} = "FTACCESS"
+ for ("ftrread", "ftrwrite", "ftrexec", "fteread", "ftewrite", "fteexec");
+if ($] >= 5.009) {
+ # Stacked filetests are post 5.8.x
+ $priv{$_}{4} = "FTSTACKED"
+ for ("ftrread", "ftrwrite", "ftrexec", "fteread", "ftewrite", "fteexec",
+ "ftis", "fteowned", "ftrowned", "ftzero", "ftsize", "ftmtime",
+ "ftatime", "ftctime", "ftsock", "ftchr", "ftblk", "ftfile", "ftdir",
+ "ftpipe", "ftlink", "ftsuid", "ftsgid", "ftsvtx", "fttty", "fttext",
+ "ftbinary");
+ # Lexical $_ is post 5.8.x
+ $priv{$_}{2} = "GREPLEX"
+ for ("mapwhile", "mapstart", "grepwhile", "grepstart");
+}
+
+sub private_flags {
+ my($name, $x) = @_;
+ my @s;
+ for my $flag (128, 96, 64, 32, 16, 8, 4, 2, 1) {
+ if ($priv{$name}{$flag} and $x & $flag and $x >= $flag) {
+ $x -= $flag;
+ push @s, $priv{$name}{$flag};
+ }
+ }
+ push @s, $x if $x;
+ return join(",", @s);
+}
+
+sub concise_sv {
+ my($sv, $hr, $preferpv) = @_;
+ $hr->{svclass} = class($sv);
+ $hr->{svclass} = "UV"
+ if $hr->{svclass} eq "IV" and $sv->FLAGS & SVf_IVisUV;
+ Carp::cluck("bad concise_sv: $sv") unless $sv and $$sv;
+ $hr->{svaddr} = sprintf("%#x", $$sv);
+ if ($hr->{svclass} eq "GV") {
+ my $gv = $sv;
+ my $stash = $gv->STASH->NAME;
+ if ($stash eq "main") {
+ $stash = "";
+ } else {
+ $stash = $stash . "::";
+ }
+ $hr->{svval} = "*$stash" . $gv->SAFENAME;
+ return "*$stash" . $gv->SAFENAME;
+ } else {
+ while (class($sv) eq "RV") {
+ $hr->{svval} .= "\\";
+ $sv = $sv->RV;
+ }
+ if (class($sv) eq "SPECIAL") {
+ $hr->{svval} .= ["Null", "sv_undef", "sv_yes", "sv_no"]->[$$sv];
+ } elsif ($preferpv && $sv->FLAGS & SVf_POK) {
+ $hr->{svval} .= cstring($sv->PV);
+ } elsif ($sv->FLAGS & SVf_NOK) {
+ $hr->{svval} .= $sv->NV;
+ } elsif ($sv->FLAGS & SVf_IOK) {
+ $hr->{svval} .= $sv->int_value;
+ } elsif ($sv->FLAGS & SVf_POK) {
+ $hr->{svval} .= cstring($sv->PV);
+ } elsif (class($sv) eq "HV") {
+ $hr->{svval} .= 'HASH';
+ }
+
+ $hr->{svval} = 'undef' unless defined $hr->{svval};
+ my $out = $hr->{svclass};
+ return $out .= " $hr->{svval}" ;
+ }
+}
+
+sub concise_op {
+ my ($op, $level, $format) = @_;
+ my %h;
+ $h{exname} = $h{name} = $op->name;
+ $h{NAME} = uc $h{name};
+ $h{class} = class($op);
+ $h{extarg} = $h{targ} = $op->targ;
+ $h{extarg} = "" unless $h{extarg};
+ if ($h{name} eq "null" and $h{targ}) {
+ # targ holds the old type
+ $h{exname} = "ex-" . substr(ppname($h{targ}), 3);
+ $h{extarg} = "";
+ } elsif ($op->name =~ /^leave(sub(lv)?|write)?$/) {
+ # targ potentially holds a reference count
+ if ($op->private & 64) {
+ my $refs = "ref" . ($h{targ} != 1 ? "s" : "");
+ $h{targarglife} = $h{targarg} = "$h{targ} $refs";
+ }
+ } elsif ($h{targ}) {
+ my $padname = (($curcv->PADLIST->ARRAY)[0]->ARRAY)[$h{targ}];
+ if (defined $padname and class($padname) ne "SPECIAL") {
+ $h{targarg} = $padname->PVX;
+ if ($padname->FLAGS & SVf_FAKE) {
+ if ($] < 5.009) {
+ $h{targarglife} = "$h{targarg}:FAKE";
+ } else {
+ # These changes relate to the jumbo closure fix.
+ # See changes 19939 and 20005
+ my $fake = '';
+ $fake .= 'a' if $padname->IVX & 1; # PAD_FAKELEX_ANON
+ $fake .= 'm' if $padname->IVX & 2; # PAD_FAKELEX_MULTI
+ $fake .= ':' . $padname->NVX if $curcv->CvFLAGS & CVf_ANON;
+ $h{targarglife} = "$h{targarg}:FAKE:$fake";
+ }
+ }
+ else {
+ my $intro = $padname->NVX - $cop_seq_base;
+ my $finish = int($padname->IVX) - $cop_seq_base;
+ $finish = "end" if $finish == 999999999 - $cop_seq_base;
+ $h{targarglife} = "$h{targarg}:$intro,$finish";
+ }
+ } else {
+ $h{targarglife} = $h{targarg} = "t" . $h{targ};
+ }
+ }
+ $h{arg} = "";
+ $h{svclass} = $h{svaddr} = $h{svval} = "";
+ if ($h{class} eq "PMOP") {
+ my $precomp = $op->precomp;
+ if (defined $precomp) {
+ $precomp = cstring($precomp); # Escape literal control sequences
+ $precomp = "/$precomp/";
+ } else {
+ $precomp = "";
+ }
+ my $pmreplroot = $op->pmreplroot;
+ my $pmreplstart;
+ if (ref($pmreplroot) eq "B::GV") {
+ # with C<@stash_array = split(/pat/, str);>,
+ # *stash_array is stored in /pat/'s pmreplroot.
+ $h{arg} = "($precomp => \@" . $pmreplroot->NAME . ")";
+ } elsif (!ref($pmreplroot) and $pmreplroot) {
+ # same as the last case, except the value is actually a
+ # pad offset for where the GV is kept (this happens under
+ # ithreads)
+ my $gv = (($curcv->PADLIST->ARRAY)[1]->ARRAY)[$pmreplroot];
+ $h{arg} = "($precomp => \@" . $gv->NAME . ")";
+ } elsif ($ {$op->pmreplstart}) {
+ undef $lastnext;
+ $pmreplstart = "replstart->" . seq($op->pmreplstart);
+ $h{arg} = "(" . join(" ", $precomp, $pmreplstart) . ")";
+ } else {
+ $h{arg} = "($precomp)";
+ }
+ } elsif ($h{class} eq "PVOP" and $h{name} ne "trans") {
+ $h{arg} = '("' . $op->pv . '")';
+ $h{svval} = '"' . $op->pv . '"';
+ } elsif ($h{class} eq "COP") {
+ my $label = $op->label;
+ $h{coplabel} = $label;
+ $label = $label ? "$label: " : "";
+ my $loc = $op->file;
+ $loc =~ s[.*/][];
+ $loc .= ":" . $op->line;
+ my($stash, $cseq) = ($op->stash->NAME, $op->cop_seq - $cop_seq_base);
+ my $arybase = $op->arybase;
+ $arybase = $arybase ? ' $[=' . $arybase : "";
+ $h{arg} = "($label$stash $cseq $loc$arybase)";
+ } elsif ($h{class} eq "LOOP") {
+ $h{arg} = "(next->" . seq($op->nextop) . " last->" . seq($op->lastop)
+ . " redo->" . seq($op->redoop) . ")";
+ } elsif ($h{class} eq "LOGOP") {
+ undef $lastnext;
+ $h{arg} = "(other->" . seq($op->other) . ")";
+ }
+ elsif ($h{class} eq "SVOP" or $h{class} eq "PADOP") {
+ unless ($h{name} eq 'aelemfast' and $op->flags & OPf_SPECIAL) {
+ my $idx = ($h{class} eq "SVOP") ? $op->targ : $op->padix;
+ my $preferpv = $h{name} eq "method_named";
+ if ($h{class} eq "PADOP" or !${$op->sv}) {
+ my $sv = (($curcv->PADLIST->ARRAY)[1]->ARRAY)[$idx];
+ $h{arg} = "[" . concise_sv($sv, \%h, $preferpv) . "]";
+ $h{targarglife} = $h{targarg} = "";
+ } else {
+ $h{arg} = "(" . concise_sv($op->sv, \%h, $preferpv) . ")";
+ }
+ }
+ }
+ $h{seq} = $h{hyphseq} = seq($op);
+ $h{seq} = "" if $h{seq} eq "-";
+ if ($] > 5.009) {
+ $h{opt} = $op->opt;
+ $h{static} = $op->static;
+ $h{label} = $labels{$$op};
+ } else {
+ $h{seqnum} = $op->seq;
+ $h{label} = $labels{$op->seq};
+ }
+ $h{next} = $op->next;
+ $h{next} = (class($h{next}) eq "NULL") ? "(end)" : seq($h{next});
+ $h{nextaddr} = sprintf("%#x", $ {$op->next});
+ $h{sibaddr} = sprintf("%#x", $ {$op->sibling});
+ $h{firstaddr} = sprintf("%#x", $ {$op->first}) if $op->can("first");
+ $h{lastaddr} = sprintf("%#x", $ {$op->last}) if $op->can("last");
+
+ $h{classsym} = $opclass{$h{class}};
+ $h{flagval} = $op->flags;
+ $h{flags} = op_flags($op->flags);
+ $h{privval} = $op->private;
+ $h{private} = private_flags($h{name}, $op->private);
+ $h{addr} = sprintf("%#x", $$op);
+ $h{typenum} = $op->type;
+ $h{noise} = $linenoise[$op->type];
+
+ return fmt_line(\%h, $op, $format, $level);
+}
+
+sub B::OP::concise {
+ my($op, $level) = @_;
+ if ($order eq "exec" and $lastnext and $$lastnext != $$op) {
+ # insert a 'goto' line
+ my $synth = {"seq" => seq($lastnext), "class" => class($lastnext),
+ "addr" => sprintf("%#x", $$lastnext),
+ "goto" => seq($lastnext), # simplify goto '-' removal
+ };
+ print $walkHandle fmt_line($synth, $op, $gotofmt, $level+1);
+ }
+ $lastnext = $op->next;
+ print $walkHandle concise_op($op, $level, $format);
+}
+
+# B::OP::terse (see Terse.pm) now just calls this
+sub b_terse {
+ my($op, $level) = @_;
+
+ # This isn't necessarily right, but there's no easy way to get
+ # from an OP to the right CV. This is a limitation of the
+ # ->terse() interface style, and there isn't much to do about
+ # it. In particular, we can die in concise_op if the main pad
+ # isn't long enough, or has the wrong kind of entries, compared to
+ # the pad a sub was compiled with. The fix for that would be to
+ # make a backwards compatible "terse" format that never even
+ # looked at the pad, just like the old B::Terse. I don't think
+ # that's worth the effort, though.
+ $curcv = main_cv unless $curcv;
+
+ if ($order eq "exec" and $lastnext and $$lastnext != $$op) {
+ # insert a 'goto'
+ my $h = {"seq" => seq($lastnext), "class" => class($lastnext),
+ "addr" => sprintf("%#x", $$lastnext)};
+ print # $walkHandle
+ fmt_line($h, $op, $style{"terse"}[1], $level+1);
+ }
+ $lastnext = $op->next;
+ print # $walkHandle
+ concise_op($op, $level, $style{"terse"}[0]);
+}
+
+sub tree {
+ my $op = shift;
+ my $level = shift;
+ my $style = $tree_decorations[$tree_style];
+ my($space, $single, $kids, $kid, $nokid, $last, $lead, $size) = @$style;
+ my $name = concise_op($op, $level, $treefmt);
+ if (not $op->flags & OPf_KIDS) {
+ return $name . "\n";
+ }
+ my @lines;
+ for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
+ push @lines, tree($kid, $level+1);
+ }
+ my $i;
+ for ($i = $#lines; substr($lines[$i], 0, 1) eq " "; $i--) {
+ $lines[$i] = $space . $lines[$i];
+ }
+ if ($i > 0) {
+ $lines[$i] = $last . $lines[$i];
+ while ($i-- > 1) {
+ if (substr($lines[$i], 0, 1) eq " ") {
+ $lines[$i] = $nokid . $lines[$i];
+ } else {
+ $lines[$i] = $kid . $lines[$i];
+ }
+ }
+ $lines[$i] = $kids . $lines[$i];
+ } else {
+ $lines[0] = $single . $lines[0];
+ }
+ return("$name$lead" . shift @lines,
+ map(" " x (length($name)+$size) . $_, @lines));
+}
+
+# *** Warning: fragile kludge ahead ***
+# Because the B::* modules run in the same interpreter as the code
+# they're compiling, their presence tends to distort the view we have of
+# the code we're looking at. In particular, perl gives sequence numbers
+# to COPs. If the program we're looking at were run on its own, this
+# would start at 1. Because all of B::Concise and all the modules it
+# uses are compiled first, though, by the time we get to the user's
+# program the sequence number is already pretty high, which could be
+# distracting if you're trying to tell OPs apart. Therefore we'd like to
+# subtract an offset from all the sequence numbers we display, to
+# restore the simpler view of the world. The trick is to know what that
+# offset will be, when we're still compiling B::Concise! If we
+# hardcoded a value, it would have to change every time B::Concise or
+# other modules we use do. To help a little, what we do here is compile
+# a little code at the end of the module, and compute the base sequence
+# number for the user's program as being a small offset later, so all we
+# have to worry about are changes in the offset.
+
+# [For 5.8.x and earlier perl is generating sequence numbers for all ops,
+# and using them to reference labels]
+
+
+# When you say "perl -MO=Concise -e '$a'", the output should look like:
+
+# 4 <@> leave[t1] vKP/REFC ->(end)
+# 1 <0> enter ->2
+ #^ smallest OP sequence number should be 1
+# 2 <;> nextstate(main 1 -e:1) v ->3
+ # ^ smallest COP sequence number should be 1
+# - <1> ex-rv2sv vK/1 ->4
+# 3 <$> gvsv(*a) s ->4
+
+# If the second of the marked numbers there isn't 1, it means you need
+# to update the corresponding magic number in the next line.
+# Remember, this needs to stay the last things in the module.
+
+# Why is this different for MacOS? Does it matter?
+my $cop_seq_mnum = $^O eq 'MacOS' ? 12 : 11;
+$cop_seq_base = svref_2object(eval 'sub{0;}')->START->cop_seq + $cop_seq_mnum;
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Concise - Walk Perl syntax tree, printing concise info about ops
+
+=head1 SYNOPSIS
+
+ perl -MO=Concise[,OPTIONS] foo.pl
+
+ use B::Concise qw(set_style add_callback);
+
+=head1 DESCRIPTION
+
+This compiler backend prints the internal OPs of a Perl program's syntax
+tree in one of several space-efficient text formats suitable for debugging
+the inner workings of perl or other compiler backends. It can print OPs in
+the order they appear in the OP tree, in the order they will execute, or
+in a text approximation to their tree structure, and the format of the
+information displayed is customizable. Its function is similar to that of
+perl's B<-Dx> debugging flag or the B<B::Terse> module, but it is more
+sophisticated and flexible.
+
+=head1 EXAMPLE
+
+Here's an example of 2 outputs (aka 'renderings'), using the
+-exec and -basic (i.e. default) formatting conventions on the same code
+snippet.
+
+ % perl -MO=Concise,-exec -e '$a = $b + 42'
+ 1 <0> enter
+ 2 <;> nextstate(main 1 -e:1) v
+ 3 <#> gvsv[*b] s
+ 4 <$> const[IV 42] s
+ * 5 <2> add[t3] sK/2
+ 6 <#> gvsv[*a] s
+ 7 <2> sassign vKS/2
+ 8 <@> leave[1 ref] vKP/REFC
+
+Each line corresponds to an opcode. The opcode marked with '*' is used
+in a few examples below.
+
+The 1st column is the op's sequence number, starting at 1, and is
+displayed in base 36 by default. This rendering is in -exec (i.e.
+execution) order.
+
+The symbol between angle brackets indicates the op's type, for
+example; <2> is a BINOP, <@> a LISTOP, and <#> is a PADOP, which is
+used in threaded perls. (see L</"OP class abbreviations">).
+
+The opname, as in B<'add[t1]'>, which may be followed by op-specific
+information in parentheses or brackets (ex B<'[t1]'>).
+
+The op-flags (ex B<'sK/2'>) follow, and are described in (L</"OP flags
+abbreviations">).
+
+ % perl -MO=Concise -e '$a = $b + 42'
+ 8 <@> leave[1 ref] vKP/REFC ->(end)
+ 1 <0> enter ->2
+ 2 <;> nextstate(main 1 -e:1) v ->3
+ 7 <2> sassign vKS/2 ->8
+ * 5 <2> add[t1] sK/2 ->6
+ - <1> ex-rv2sv sK/1 ->4
+ 3 <$> gvsv(*b) s ->4
+ 4 <$> const(IV 42) s ->5
+ - <1> ex-rv2sv sKRM*/1 ->7
+ 6 <$> gvsv(*a) s ->7
+
+The default rendering is top-down, so they're not in execution order.
+This form reflects the way the stack is used to parse and evaluate
+expressions; the add operates on the two terms below it in the tree.
+
+Nullops appear as C<ex-opname>, where I<opname> is an op that has been
+optimized away by perl. They're displayed with a sequence-number of
+'-', because they are not executed (they don't appear in previous
+example), they're printed here because they reflect the parse.
+
+The arrow points to the sequence number of the next op; they're not
+displayed in -exec mode, for obvious reasons.
+
+Note that because this rendering was done on a non-threaded perl, the
+PADOPs in the previous examples are now SVOPs, and some (but not all)
+of the square brackets have been replaced by round ones. This is a
+subtle feature to provide some visual distinction between renderings
+on threaded and un-threaded perls.
+
+
+=head1 OPTIONS
+
+Arguments that don't start with a hyphen are taken to be the names of
+subroutines to print the OPs of; if no such functions are specified,
+the main body of the program (outside any subroutines, and not
+including use'd or require'd files) is rendered. Passing C<BEGIN>,
+C<CHECK>, C<INIT>, or C<END> will cause all of the corresponding
+special blocks to be printed.
+
+Options affect how things are rendered (ie printed). They're presented
+here by their visual effect, 1st being strongest. They're grouped
+according to how they interrelate; within each group the options are
+mutually exclusive (unless otherwise stated).
+
+=head2 Options for Opcode Ordering
+
+These options control the 'vertical display' of opcodes. The display
+'order' is also called 'mode' elsewhere in this document.
+
+=over 4
+
+=item B<-basic>
+
+Print OPs in the order they appear in the OP tree (a preorder
+traversal, starting at the root). The indentation of each OP shows its
+level in the tree, and the '->' at the end of the line indicates the
+next opcode in execution order. This mode is the default, so the flag
+is included simply for completeness.
+
+=item B<-exec>
+
+Print OPs in the order they would normally execute (for the majority
+of constructs this is a postorder traversal of the tree, ending at the
+root). In most cases the OP that usually follows a given OP will
+appear directly below it; alternate paths are shown by indentation. In
+cases like loops when control jumps out of a linear path, a 'goto'
+line is generated.
+
+=item B<-tree>
+
+Print OPs in a text approximation of a tree, with the root of the tree
+at the left and 'left-to-right' order of children transformed into
+'top-to-bottom'. Because this mode grows both to the right and down,
+it isn't suitable for large programs (unless you have a very wide
+terminal).
+
+=back
+
+=head2 Options for Line-Style
+
+These options select the line-style (or just style) used to render
+each opcode, and dictates what info is actually printed into each line.
+
+=over 4
+
+=item B<-concise>
+
+Use the author's favorite set of formatting conventions. This is the
+default, of course.
+
+=item B<-terse>
+
+Use formatting conventions that emulate the output of B<B::Terse>. The
+basic mode is almost indistinguishable from the real B<B::Terse>, and the
+exec mode looks very similar, but is in a more logical order and lacks
+curly brackets. B<B::Terse> doesn't have a tree mode, so the tree mode
+is only vaguely reminiscent of B<B::Terse>.
+
+=item B<-linenoise>
+
+Use formatting conventions in which the name of each OP, rather than being
+written out in full, is represented by a one- or two-character abbreviation.
+This is mainly a joke.
+
+=item B<-debug>
+
+Use formatting conventions reminiscent of B<B::Debug>; these aren't
+very concise at all.
+
+=item B<-env>
+
+Use formatting conventions read from the environment variables
+C<B_CONCISE_FORMAT>, C<B_CONCISE_GOTO_FORMAT>, and C<B_CONCISE_TREE_FORMAT>.
+
+=back
+
+=head2 Options for tree-specific formatting
+
+=over 4
+
+=item B<-compact>
+
+Use a tree format in which the minimum amount of space is used for the
+lines connecting nodes (one character in most cases). This squeezes out
+a few precious columns of screen real estate.
+
+=item B<-loose>
+
+Use a tree format that uses longer edges to separate OP nodes. This format
+tends to look better than the compact one, especially in ASCII, and is
+the default.
+
+=item B<-vt>
+
+Use tree connecting characters drawn from the VT100 line-drawing set.
+This looks better if your terminal supports it.
+
+=item B<-ascii>
+
+Draw the tree with standard ASCII characters like C<+> and C<|>. These don't
+look as clean as the VT100 characters, but they'll work with almost any
+terminal (or the horizontal scrolling mode of less(1)) and are suitable
+for text documentation or email. This is the default.
+
+=back
+
+These are pairwise exclusive, i.e. compact or loose, vt or ascii.
+
+=head2 Options controlling sequence numbering
+
+=over 4
+
+=item B<-base>I<n>
+
+Print OP sequence numbers in base I<n>. If I<n> is greater than 10, the
+digit for 11 will be 'a', and so on. If I<n> is greater than 36, the digit
+for 37 will be 'A', and so on until 62. Values greater than 62 are not
+currently supported. The default is 36.
+
+=item B<-bigendian>
+
+Print sequence numbers with the most significant digit first. This is the
+usual convention for Arabic numerals, and the default.
+
+=item B<-littleendian>
+
+Print seqence numbers with the least significant digit first. This is
+obviously mutually exclusive with bigendian.
+
+=back
+
+=head2 Other options
+
+These are pairwise exclusive.
+
+=over 4
+
+=item B<-main>
+
+Include the main program in the output, even if subroutines were also
+specified. This rendering is normally suppressed when a subroutine
+name or reference is given.
+
+=item B<-nomain>
+
+This restores the default behavior after you've changed it with '-main'
+(it's not normally needed). If no subroutine name/ref is given, main is
+rendered, regardless of this flag.
+
+=item B<-nobanner>
+
+Renderings usually include a banner line identifying the function name
+or stringified subref. This suppresses the printing of the banner.
+
+TBC: Remove the stringified coderef; while it provides a 'cookie' for
+each function rendered, the cookies used should be 1,2,3.. not a
+random hex-address. It also complicates string comparison of two
+different trees.
+
+=item B<-banner>
+
+restores default banner behavior.
+
+=item B<-banneris> => subref
+
+TBC: a hookpoint (and an option to set it) for a user-supplied
+function to produce a banner appropriate for users needs. It's not
+ideal, because the rendering-state variables, which are a natural
+candidate for use in concise.t, are unavailable to the user.
+
+=back
+
+=head2 Option Stickiness
+
+If you invoke Concise more than once in a program, you should know that
+the options are 'sticky'. This means that the options you provide in
+the first call will be remembered for the 2nd call, unless you
+re-specify or change them.
+
+=head1 ABBREVIATIONS
+
+The concise style uses symbols to convey maximum info with minimal
+clutter (like hex addresses). With just a little practice, you can
+start to see the flowers, not just the branches, in the trees.
+
+=head2 OP class abbreviations
+
+These symbols appear before the op-name, and indicate the
+B:: namespace that represents the ops in your Perl code.
+
+ 0 OP (aka BASEOP) An OP with no children
+ 1 UNOP An OP with one child
+ 2 BINOP An OP with two children
+ | LOGOP A control branch OP
+ @ LISTOP An OP that could have lots of children
+ / PMOP An OP with a regular expression
+ $ SVOP An OP with an SV
+ " PVOP An OP with a string
+ { LOOP An OP that holds pointers for a loop
+ ; COP An OP that marks the start of a statement
+ # PADOP An OP with a GV on the pad
+
+=head2 OP flags abbreviations
+
+OP flags are either public or private. The public flags alter the
+behavior of each opcode in consistent ways, and are represented by 0
+or more single characters.
+
+ v OPf_WANT_VOID Want nothing (void context)
+ s OPf_WANT_SCALAR Want single value (scalar context)
+ l OPf_WANT_LIST Want list of any length (list context)
+ Want is unknown
+ K OPf_KIDS There is a firstborn child.
+ P OPf_PARENS This operator was parenthesized.
+ (Or block needs explicit scope entry.)
+ R OPf_REF Certified reference.
+ (Return container, not containee).
+ M OPf_MOD Will modify (lvalue).
+ S OPf_STACKED Some arg is arriving on the stack.
+ * OPf_SPECIAL Do something weird for this op (see op.h)
+
+Private flags, if any are set for an opcode, are displayed after a '/'
+
+ 8 <@> leave[1 ref] vKP/REFC ->(end)
+ 7 <2> sassign vKS/2 ->8
+
+They're opcode specific, and occur less often than the public ones, so
+they're represented by short mnemonics instead of single-chars; see
+F<op.h> for gory details, or try this quick 2-liner:
+
+ $> perl -MB::Concise -de 1
+ DB<1> |x \%B::Concise::priv
+
+=head1 FORMATTING SPECIFICATIONS
+
+For each line-style ('concise', 'terse', 'linenoise', etc.) there are
+3 format-specs which control how OPs are rendered.
+
+The first is the 'default' format, which is used in both basic and exec
+modes to print all opcodes. The 2nd, goto-format, is used in exec
+mode when branches are encountered. They're not real opcodes, and are
+inserted to look like a closing curly brace. The tree-format is tree
+specific.
+
+When a line is rendered, the correct format-spec is copied and scanned
+for the following items; data is substituted in, and other
+manipulations like basic indenting are done, for each opcode rendered.
+
+There are 3 kinds of items that may be populated; special patterns,
+#vars, and literal text, which is copied verbatim. (Yes, it's a set
+of s///g steps.)
+
+=head2 Special Patterns
+
+These items are the primitives used to perform indenting, and to
+select text from amongst alternatives.
+
+=over 4
+
+=item B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>
+
+Generates I<exec_text> in exec mode, or I<basic_text> in basic mode.
+
+=item B<(*(>I<text>B<)*)>
+
+Generates one copy of I<text> for each indentation level.
+
+=item B<(*(>I<text1>B<;>I<text2>B<)*)>
+
+Generates one fewer copies of I<text1> than the indentation level, followed
+by one copy of I<text2> if the indentation level is more than 0.
+
+=item B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>
+
+If the value of I<var> is true (not empty or zero), generates the
+value of I<var> surrounded by I<text1> and I<Text2>, otherwise
+nothing.
+
+=item B<~>
+
+Any number of tildes and surrounding whitespace will be collapsed to
+a single space.
+
+=back
+
+=head2 # Variables
+
+These #vars represent opcode properties that you may want as part of
+your rendering. The '#' is intended as a private sigil; a #var's
+value is interpolated into the style-line, much like "read $this".
+
+These vars take 3 forms:
+
+=over 4
+
+=item B<#>I<var>
+
+A property named 'var' is assumed to exist for the opcodes, and is
+interpolated into the rendering.
+
+=item B<#>I<var>I<N>
+
+Generates the value of I<var>, left justified to fill I<N> spaces.
+Note that this means while you can have properties 'foo' and 'foo2',
+you cannot render 'foo2', but you could with 'foo2a'. You would be
+wise not to rely on this behavior going forward ;-)
+
+=item B<#>I<Var>
+
+This ucfirst form of #var generates a tag-value form of itself for
+display; it converts '#Var' into a 'Var => #var' style, which is then
+handled as described above. (Imp-note: #Vars cannot be used for
+conditional-fills, because the => #var transform is done after the check
+for #Var's value).
+
+=back
+
+The following variables are 'defined' by B::Concise; when they are
+used in a style, their respective values are plugged into the
+rendering of each opcode.
+
+Only some of these are used by the standard styles, the others are
+provided for you to delve into optree mechanics, should you wish to
+add a new style (see L</add_style> below) that uses them. You can
+also add new ones using L</add_callback>.
+
+=over 4
+
+=item B<#addr>
+
+The address of the OP, in hexadecimal.
+
+=item B<#arg>
+
+The OP-specific information of the OP (such as the SV for an SVOP, the
+non-local exit pointers for a LOOP, etc.) enclosed in parentheses.
+
+=item B<#class>
+
+The B-determined class of the OP, in all caps.
+
+=item B<#classsym>
+
+A single symbol abbreviating the class of the OP.
+
+=item B<#coplabel>
+
+The label of the statement or block the OP is the start of, if any.
+
+=item B<#exname>
+
+The name of the OP, or 'ex-foo' if the OP is a null that used to be a foo.
+
+=item B<#extarg>
+
+The target of the OP, or nothing for a nulled OP.
+
+=item B<#firstaddr>
+
+The address of the OP's first child, in hexadecimal.
+
+=item B<#flags>
+
+The OP's flags, abbreviated as a series of symbols.
+
+=item B<#flagval>
+
+The numeric value of the OP's flags.
+
+=item B<#hyphseq>
+
+The sequence number of the OP, or a hyphen if it doesn't have one.
+
+=item B<#label>
+
+'NEXT', 'LAST', or 'REDO' if the OP is a target of one of those in exec
+mode, or empty otherwise.
+
+=item B<#lastaddr>
+
+The address of the OP's last child, in hexadecimal.
+
+=item B<#name>
+
+The OP's name.
+
+=item B<#NAME>
+
+The OP's name, in all caps.
+
+=item B<#next>
+
+The sequence number of the OP's next OP.
+
+=item B<#nextaddr>
+
+The address of the OP's next OP, in hexadecimal.
+
+=item B<#noise>
+
+A one- or two-character abbreviation for the OP's name.
+
+=item B<#private>
+
+The OP's private flags, rendered with abbreviated names if possible.
+
+=item B<#privval>
+
+The numeric value of the OP's private flags.
+
+=item B<#seq>
+
+The sequence number of the OP. Note that this is a sequence number
+generated by B::Concise.
+
+=item B<#seqnum>
+
+5.8.x and earlier only. 5.9 and later do not provide this.
+
+The real sequence number of the OP, as a regular number and not adjusted
+to be relative to the start of the real program. (This will generally be
+a fairly large number because all of B<B::Concise> is compiled before
+your program is).
+
+=item B<#opt>
+
+Whether or not the op has been optimised by the peephole optimiser.
+
+Only available in 5.9 and later.
+
+=item B<#static>
+
+Whether or not the op is statically defined. This flag is used by the
+B::C compiler backend and indicates that the op should not be freed.
+
+Only available in 5.9 and later.
+
+=item B<#sibaddr>
+
+The address of the OP's next youngest sibling, in hexadecimal.
+
+=item B<#svaddr>
+
+The address of the OP's SV, if it has an SV, in hexadecimal.
+
+=item B<#svclass>
+
+The class of the OP's SV, if it has one, in all caps (e.g., 'IV').
+
+=item B<#svval>
+
+The value of the OP's SV, if it has one, in a short human-readable format.
+
+=item B<#targ>
+
+The numeric value of the OP's targ.
+
+=item B<#targarg>
+
+The name of the variable the OP's targ refers to, if any, otherwise the
+letter t followed by the OP's targ in decimal.
+
+=item B<#targarglife>
+
+Same as B<#targarg>, but followed by the COP sequence numbers that delimit
+the variable's lifetime (or 'end' for a variable in an open scope) for a
+variable.
+
+=item B<#typenum>
+
+The numeric value of the OP's type, in decimal.
+
+=back
+
+=head1 Using B::Concise outside of the O framework
+
+The common (and original) usage of B::Concise was for command-line
+renderings of simple code, as given in EXAMPLE. But you can also use
+B<B::Concise> from your code, and call compile() directly, and
+repeatedly. By doing so, you can avoid the compile-time only
+operation of O.pm, and even use the debugger to step through
+B::Concise::compile() itself.
+
+Once you're doing this, you may alter Concise output by adding new
+rendering styles, and by optionally adding callback routines which
+populate new variables, if such were referenced from those (just
+added) styles.
+
+=head2 Example: Altering Concise Renderings
+
+ use B::Concise qw(set_style add_callback);
+ add_style($yourStyleName => $defaultfmt, $gotofmt, $treefmt);
+ add_callback
+ ( sub {
+ my ($h, $op, $format, $level, $stylename) = @_;
+ $h->{variable} = some_func($op);
+ });
+ $walker = B::Concise::compile(@options,@subnames,@subrefs);
+ $walker->();
+
+=head2 set_style()
+
+B<set_style> accepts 3 arguments, and updates the three format-specs
+comprising a line-style (basic-exec, goto, tree). It has one minor
+drawback though; it doesn't register the style under a new name. This
+can become an issue if you render more than once and switch styles.
+Thus you may prefer to use add_style() and/or set_style_standard()
+instead.
+
+=head2 set_style_standard($name)
+
+This restores one of the standard line-styles: C<terse>, C<concise>,
+C<linenoise>, C<debug>, C<env>, into effect. It also accepts style
+names previously defined with add_style().
+
+=head2 add_style()
+
+This subroutine accepts a new style name and three style arguments as
+above, and creates, registers, and selects the newly named style. It is
+an error to re-add a style; call set_style_standard() to switch between
+several styles.
+
+=head2 add_callback()
+
+If your newly minted styles refer to any new #variables, you'll need
+to define a callback subroutine that will populate (or modify) those
+variables. They are then available for use in the style you've
+chosen.
+
+The callbacks are called for each opcode visited by Concise, in the
+same order as they are added. Each subroutine is passed five
+parameters.
+
+ 1. A hashref, containing the variable names and values which are
+ populated into the report-line for the op
+ 2. the op, as a B<B::OP> object
+ 3. a reference to the format string
+ 4. the formatting (indent) level
+ 5. the selected stylename
+
+To define your own variables, simply add them to the hash, or change
+existing values if you need to. The level and format are passed in as
+references to scalars, but it is unlikely that they will need to be
+changed or even used.
+
+=head2 Running B::Concise::compile()
+
+B<compile> accepts options as described above in L</OPTIONS>, and
+arguments, which are either coderefs, or subroutine names.
+
+It constructs and returns a $treewalker coderef, which when invoked,
+traverses, or walks, and renders the optrees of the given arguments to
+STDOUT. You can reuse this, and can change the rendering style used
+each time; thereafter the coderef renders in the new style.
+
+B<walk_output> lets you change the print destination from STDOUT to
+another open filehandle, or into a string passed as a ref (unless
+you've built perl with -Uuseperlio).
+
+ my $walker = B::Concise::compile('-terse','aFuncName', \&aSubRef); # 1
+ walk_output(\my $buf);
+ $walker->(); # 1 renders -terse
+ set_style_standard('concise'); # 2
+ $walker->(); # 2 renders -concise
+ $walker->(@new); # 3 renders whatever
+ print "3 different renderings: terse, concise, and @new: $buf\n";
+
+When $walker is called, it traverses the subroutines supplied when it
+was created, and renders them using the current style. You can change
+the style afterwards in several different ways:
+
+ 1. call C<compile>, altering style or mode/order
+ 2. call C<set_style_standard>
+ 3. call $walker, passing @new options
+
+Passing new options to the $walker is the easiest way to change
+amongst any pre-defined styles (the ones you add are automatically
+recognized as options), and is the only way to alter rendering order
+without calling compile again. Note however that rendering state is
+still shared amongst multiple $walker objects, so they must still be
+used in a coordinated manner.
+
+=head2 B::Concise::reset_sequence()
+
+This function (not exported) lets you reset the sequence numbers (note
+that they're numbered arbitrarily, their goal being to be human
+readable). Its purpose is mostly to support testing, i.e. to compare
+the concise output from two identical anonymous subroutines (but
+different instances). Without the reset, B::Concise, seeing that
+they're separate optrees, generates different sequence numbers in
+the output.
+
+=head2 Errors
+
+Errors in rendering (non-existent function-name, non-existent coderef)
+are written to the STDOUT, or wherever you've set it via
+walk_output().
+
+Errors using the various *style* calls, and bad args to walk_output(),
+result in die(). Use an eval if you wish to catch these errors and
+continue processing.
+
+=head1 AUTHOR
+
+Stephen McCamant, E<lt>smcc@CSUA.Berkeley.EDUE<gt>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Debug.pm b/Master/tlpkg/tlperl/lib/B/Debug.pm
new file mode 100644
index 00000000000..cb369682d66
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Debug.pm
@@ -0,0 +1,305 @@
+package B::Debug;
+
+our $VERSION = '1.02_01';
+
+use strict;
+use B qw(peekop class walkoptree walkoptree_exec
+ main_start main_root cstring sv_undef);
+use B::Asmdata qw(@specialsv_name);
+
+my %done_gv;
+
+sub B::OP::debug {
+ my ($op) = @_;
+ printf <<'EOT', class($op), $$op, ${$op->next}, ${$op->sibling}, $op->ppaddr, $op->targ, $op->type;
+%s (0x%lx)
+ op_next 0x%x
+ op_sibling 0x%x
+ op_ppaddr %s
+ op_targ %d
+ op_type %d
+EOT
+ if ($] > 5.009) {
+ printf <<'EOT', $op->opt, $op->static;
+ op_opt %d
+ op_static %d
+EOT
+ } else {
+ printf <<'EOT', $op->seq;
+ op_seq %d
+EOT
+ }
+ printf <<'EOT', $op->flags, $op->private;
+ op_flags %d
+ op_private %d
+EOT
+}
+
+sub B::UNOP::debug {
+ my ($op) = @_;
+ $op->B::OP::debug();
+ printf "\top_first\t0x%x\n", ${$op->first};
+}
+
+sub B::BINOP::debug {
+ my ($op) = @_;
+ $op->B::UNOP::debug();
+ printf "\top_last\t\t0x%x\n", ${$op->last};
+}
+
+sub B::LOOP::debug {
+ my ($op) = @_;
+ $op->B::BINOP::debug();
+ printf <<'EOT', ${$op->redoop}, ${$op->nextop}, ${$op->lastop};
+ op_redoop 0x%x
+ op_nextop 0x%x
+ op_lastop 0x%x
+EOT
+}
+
+sub B::LOGOP::debug {
+ my ($op) = @_;
+ $op->B::UNOP::debug();
+ printf "\top_other\t0x%x\n", ${$op->other};
+}
+
+sub B::LISTOP::debug {
+ my ($op) = @_;
+ $op->B::BINOP::debug();
+ printf "\top_children\t%d\n", $op->children;
+}
+
+sub B::PMOP::debug {
+ my ($op) = @_;
+ $op->B::LISTOP::debug();
+ printf "\top_pmreplroot\t0x%x\n", ${$op->pmreplroot};
+ printf "\top_pmreplstart\t0x%x\n", ${$op->pmreplstart};
+ printf "\top_pmnext\t0x%x\n", ${$op->pmnext};
+ printf "\top_pmregexp->precomp\t%s\n", cstring($op->precomp);
+ printf "\top_pmflags\t0x%x\n", $op->pmflags;
+ $op->pmreplroot->debug;
+}
+
+sub B::COP::debug {
+ my ($op) = @_;
+ $op->B::OP::debug();
+ my $cop_io = class($op->io) eq 'SPECIAL' ? '' : $op->io->as_string;
+ printf <<'EOT', $op->label, $op->stashpv, $op->file, $op->cop_seq, $op->arybase, $op->line, ${$op->warnings}, cstring($cop_io);
+ cop_label %s
+ cop_stashpv %s
+ cop_file %s
+ cop_seq %d
+ cop_arybase %d
+ cop_line %d
+ cop_warnings 0x%x
+ cop_io %s
+EOT
+}
+
+sub B::SVOP::debug {
+ my ($op) = @_;
+ $op->B::OP::debug();
+ printf "\top_sv\t\t0x%x\n", ${$op->sv};
+ $op->sv->debug;
+}
+
+sub B::PVOP::debug {
+ my ($op) = @_;
+ $op->B::OP::debug();
+ printf "\top_pv\t\t%s\n", cstring($op->pv);
+}
+
+sub B::PADOP::debug {
+ my ($op) = @_;
+ $op->B::OP::debug();
+ printf "\top_padix\t\t%ld\n", $op->padix;
+}
+
+sub B::NULL::debug {
+ my ($sv) = @_;
+ if ($$sv == ${sv_undef()}) {
+ print "&sv_undef\n";
+ } else {
+ printf "NULL (0x%x)\n", $$sv;
+ }
+}
+
+sub B::SV::debug {
+ my ($sv) = @_;
+ if (!$$sv) {
+ print class($sv), " = NULL\n";
+ return;
+ }
+ printf <<'EOT', class($sv), $$sv, $sv->REFCNT, $sv->FLAGS;
+%s (0x%x)
+ REFCNT %d
+ FLAGS 0x%x
+EOT
+}
+
+sub B::RV::debug {
+ my ($rv) = @_;
+ B::SV::debug($rv);
+ printf <<'EOT', ${$rv->RV};
+ RV 0x%x
+EOT
+ $rv->RV->debug;
+}
+
+sub B::PV::debug {
+ my ($sv) = @_;
+ $sv->B::SV::debug();
+ my $pv = $sv->PV();
+ printf <<'EOT', cstring($pv), length($pv);
+ xpv_pv %s
+ xpv_cur %d
+EOT
+}
+
+sub B::IV::debug {
+ my ($sv) = @_;
+ $sv->B::SV::debug();
+ printf "\txiv_iv\t\t%d\n", $sv->IV;
+}
+
+sub B::NV::debug {
+ my ($sv) = @_;
+ $sv->B::IV::debug();
+ printf "\txnv_nv\t\t%s\n", $sv->NV;
+}
+
+sub B::PVIV::debug {
+ my ($sv) = @_;
+ $sv->B::PV::debug();
+ printf "\txiv_iv\t\t%d\n", $sv->IV;
+}
+
+sub B::PVNV::debug {
+ my ($sv) = @_;
+ $sv->B::PVIV::debug();
+ printf "\txnv_nv\t\t%s\n", $sv->NV;
+}
+
+sub B::PVLV::debug {
+ my ($sv) = @_;
+ $sv->B::PVNV::debug();
+ printf "\txlv_targoff\t%d\n", $sv->TARGOFF;
+ printf "\txlv_targlen\t%u\n", $sv->TARGLEN;
+ printf "\txlv_type\t%s\n", cstring(chr($sv->TYPE));
+}
+
+sub B::BM::debug {
+ my ($sv) = @_;
+ $sv->B::PVNV::debug();
+ printf "\txbm_useful\t%d\n", $sv->USEFUL;
+ printf "\txbm_previous\t%u\n", $sv->PREVIOUS;
+ printf "\txbm_rare\t%s\n", cstring(chr($sv->RARE));
+}
+
+sub B::CV::debug {
+ my ($sv) = @_;
+ $sv->B::PVNV::debug();
+ my ($stash) = $sv->STASH;
+ my ($start) = $sv->START;
+ my ($root) = $sv->ROOT;
+ my ($padlist) = $sv->PADLIST;
+ my ($file) = $sv->FILE;
+ my ($gv) = $sv->GV;
+ printf <<'EOT', $$stash, $$start, $$root, $$gv, $file, $sv->DEPTH, $padlist, ${$sv->OUTSIDE}, $sv->OUTSIDE_SEQ;
+ STASH 0x%x
+ START 0x%x
+ ROOT 0x%x
+ GV 0x%x
+ FILE %s
+ DEPTH %d
+ PADLIST 0x%x
+ OUTSIDE 0x%x
+ OUTSIDE_SEQ %d
+EOT
+ $start->debug if $start;
+ $root->debug if $root;
+ $gv->debug if $gv;
+ $padlist->debug if $padlist;
+}
+
+sub B::AV::debug {
+ my ($av) = @_;
+ $av->B::SV::debug;
+ my(@array) = $av->ARRAY;
+ print "\tARRAY\t\t(", join(", ", map("0x" . $$_, @array)), ")\n";
+ printf <<'EOT', scalar(@array), $av->MAX, $av->OFF;
+ FILL %d
+ MAX %d
+ OFF %d
+EOT
+ printf <<'EOT', $av->AvFLAGS if $] < 5.009;
+ AvFLAGS %d
+EOT
+}
+
+sub B::GV::debug {
+ my ($gv) = @_;
+ if ($done_gv{$$gv}++) {
+ printf "GV %s::%s\n", $gv->STASH->NAME, $gv->SAFENAME;
+ return;
+ }
+ my ($sv) = $gv->SV;
+ my ($av) = $gv->AV;
+ my ($cv) = $gv->CV;
+ $gv->B::SV::debug;
+ printf <<'EOT', $gv->SAFENAME, $gv->STASH->NAME, $gv->STASH, $$sv, $gv->GvREFCNT, $gv->FORM, $$av, ${$gv->HV}, ${$gv->EGV}, $$cv, $gv->CVGEN, $gv->LINE, $gv->FILE, $gv->GvFLAGS;
+ NAME %s
+ STASH %s (0x%x)
+ SV 0x%x
+ GvREFCNT %d
+ FORM 0x%x
+ AV 0x%x
+ HV 0x%x
+ EGV 0x%x
+ CV 0x%x
+ CVGEN %d
+ LINE %d
+ FILE %s
+ GvFLAGS 0x%x
+EOT
+ $sv->debug if $sv;
+ $av->debug if $av;
+ $cv->debug if $cv;
+}
+
+sub B::SPECIAL::debug {
+ my $sv = shift;
+ print $specialsv_name[$$sv], "\n";
+}
+
+sub compile {
+ my $order = shift;
+ B::clearsym();
+ if ($order && $order eq "exec") {
+ return sub { walkoptree_exec(main_start, "debug") }
+ } else {
+ return sub { walkoptree(main_root, "debug") }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Debug - Walk Perl syntax tree, printing debug info about ops
+
+=head1 SYNOPSIS
+
+ perl -MO=Debug[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+See F<ext/B/README>.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Deparse.pm b/Master/tlpkg/tlperl/lib/B/Deparse.pm
new file mode 100644
index 00000000000..3db6fbe6e1f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Deparse.pm
@@ -0,0 +1,4642 @@
+# B::Deparse.pm
+# Copyright (c) 1998-2000, 2002, 2003 Stephen McCamant. All rights reserved.
+# This module is free software; you can redistribute and/or modify
+# it under the same terms as Perl itself.
+
+# This is based on the module of the same name by Malcolm Beattie,
+# but essentially none of his code remains.
+
+package B::Deparse;
+use Carp;
+use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
+ OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST
+ OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD
+ OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE
+ OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY
+ OPpCONST_ARYBASE OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER
+ OPpSORT_REVERSE OPpSORT_INPLACE OPpSORT_DESCEND OPpITER_REVERSED
+ SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG
+ CVf_METHOD CVf_LOCKED CVf_LVALUE CVf_ASSERTION
+ PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
+ PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
+$VERSION = 0.71;
+use strict;
+use vars qw/$AUTOLOAD/;
+use warnings ();
+
+# Changes between 0.50 and 0.51:
+# - fixed nulled leave with live enter in sort { }
+# - fixed reference constants (\"str")
+# - handle empty programs gracefully
+# - handle infinte loops (for (;;) {}, while (1) {})
+# - differentiate between `for my $x ...' and `my $x; for $x ...'
+# - various minor cleanups
+# - moved globals into an object
+# - added `-u', like B::C
+# - package declarations using cop_stash
+# - subs, formats and code sorted by cop_seq
+# Changes between 0.51 and 0.52:
+# - added pp_threadsv (special variables under USE_5005THREADS)
+# - added documentation
+# Changes between 0.52 and 0.53:
+# - many changes adding precedence contexts and associativity
+# - added `-p' and `-s' output style options
+# - various other minor fixes
+# Changes between 0.53 and 0.54:
+# - added support for new `for (1..100)' optimization,
+# thanks to Gisle Aas
+# Changes between 0.54 and 0.55:
+# - added support for new qr// construct
+# - added support for new pp_regcreset OP
+# Changes between 0.55 and 0.56:
+# - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t
+# - fixed $# on non-lexicals broken in last big rewrite
+# - added temporary fix for change in opcode of OP_STRINGIFY
+# - fixed problem in 0.54's for() patch in `for (@ary)'
+# - fixed precedence in conditional of ?:
+# - tweaked list paren elimination in `my($x) = @_'
+# - made continue-block detection trickier wrt. null ops
+# - fixed various prototype problems in pp_entersub
+# - added support for sub prototypes that never get GVs
+# - added unquoting for special filehandle first arg in truncate
+# - print doubled rv2gv (a bug) as `*{*GV}' instead of illegal `**GV'
+# - added semicolons at the ends of blocks
+# - added -l `#line' declaration option -- fixes cmd/subval.t 27,28
+# Changes between 0.56 and 0.561:
+# - fixed multiply-declared my var in pp_truncate (thanks to Sarathy)
+# - used new B.pm symbolic constants (done by Nick Ing-Simmons)
+# Changes between 0.561 and 0.57:
+# - stylistic changes to symbolic constant stuff
+# - handled scope in s///e replacement code
+# - added unquote option for expanding "" into concats, etc.
+# - split method and proto parts of pp_entersub into separate functions
+# - various minor cleanups
+# Changes after 0.57:
+# - added parens in \&foo (patch by Albert Dvornik)
+# Changes between 0.57 and 0.58:
+# - fixed `0' statements that weren't being printed
+# - added methods for use from other programs
+# (based on patches from James Duncan and Hugo van der Sanden)
+# - added -si and -sT to control indenting (also based on a patch from Hugo)
+# - added -sv to print something else instead of '???'
+# - preliminary version of utf8 tr/// handling
+# Changes after 0.58:
+# - uses of $op->ppaddr changed to new $op->name (done by Sarathy)
+# - added support for Hugo's new OP_SETSTATE (like nextstate)
+# Changes between 0.58 and 0.59
+# - added support for Chip's OP_METHOD_NAMED
+# - added support for Ilya's OPpTARGET_MY optimization
+# - elided arrows before `()' subscripts when possible
+# Changes between 0.59 and 0.60
+# - support for method attribues was added
+# - some warnings fixed
+# - separate recognition of constant subs
+# - rewrote continue block handling, now recoginizing for loops
+# - added more control of expanding control structures
+# Changes between 0.60 and 0.61 (mostly by Robin Houston)
+# - many bug-fixes
+# - support for pragmas and 'use'
+# - support for the little-used $[ variable
+# - support for __DATA__ sections
+# - UTF8 support
+# - BEGIN, CHECK, INIT and END blocks
+# - scoping of subroutine declarations fixed
+# - compile-time output from the input program can be suppressed, so that the
+# output is just the deparsed code. (a change to O.pm in fact)
+# - our() declarations
+# - *all* the known bugs are now listed in the BUGS section
+# - comprehensive test mechanism (TEST -deparse)
+# Changes between 0.62 and 0.63 (mostly by Rafael Garcia-Suarez)
+# - bug-fixes
+# - new switch -P
+# - support for command-line switches (-l, -0, etc.)
+# Changes between 0.63 and 0.64
+# - support for //, CHECK blocks, and assertions
+# - improved handling of foreach loops and lexicals
+# - option to use Data::Dumper for constants
+# - more bug fixes
+# - discovered lots more bugs not yet fixed
+
+# Todo:
+# (See also BUGS section at the end of this file)
+#
+# - finish tr/// changes
+# - add option for even more parens (generalize \&foo change)
+# - left/right context
+# - copy comments (look at real text with $^P?)
+# - avoid semis in one-statement blocks
+# - associativity of &&=, ||=, ?:
+# - ',' => '=>' (auto-unquote?)
+# - break long lines ("\r" as discretionary break?)
+# - configurable syntax highlighting: ANSI color, HTML, TeX, etc.
+# - more style options: brace style, hex vs. octal, quotes, ...
+# - print big ints as hex/octal instead of decimal (heuristic?)
+# - handle `my $x if 0'?
+# - version using op_next instead of op_first/sibling?
+# - avoid string copies (pass arrays, one big join?)
+# - here-docs?
+
+# Current test.deparse failures
+# comp/assertions 38 - disabled assertions should be like "my($x) if 0"
+# 'sub f : assertion {}; no assertions; my $x=1; {f(my $x=2); print "$x\n"}'
+# comp/hints 6 - location of BEGIN blocks wrt. block openings
+# run/switchI 1 - missing -I switches entirely
+# perl -Ifoo -e 'print @INC'
+# op/caller 2 - warning mask propagates backwards before warnings::register
+# 'use warnings; BEGIN {${^WARNING_BITS} eq "U"x12;} use warnings::register'
+# op/getpid 2 - can't assign to shared my() declaration (threads only)
+# 'my $x : shared = 5'
+# op/override 7 - parens on overriden require change v-string interpretation
+# 'BEGIN{*CORE::GLOBAL::require=sub {}} require v5.6'
+# c.f. 'BEGIN { *f = sub {0} }; f 2'
+# op/pat 774 - losing Unicode-ness of Latin1-only strings
+# 'use charnames ":short"; $x="\N{latin:a with acute}"'
+# op/recurse 12 - missing parens on recursive call makes it look like method
+# 'sub f { f($x) }'
+# op/subst 90 - inconsistent handling of utf8 under "use utf8"
+# op/taint 29 - "use re 'taint'" deparsed in the wrong place wrt. block open
+# op/tiehandle compile - "use strict" deparsed in the wrong place
+# uni/tr_ several
+# ext/B/t/xref 11 - line numbers when we add newlines to one-line subs
+# ext/Data/Dumper/t/dumper compile
+# ext/DB_file/several
+# ext/Encode/several
+# ext/Ernno/Errno warnings
+# ext/IO/lib/IO/t/io_sel 23
+# ext/PerlIO/t/encoding compile
+# ext/POSIX/t/posix 6
+# ext/Socket/Socket 8
+# ext/Storable/t/croak compile
+# lib/Attribute/Handlers/t/multi compile
+# lib/bignum/ several
+# lib/charnames 35
+# lib/constant 32
+# lib/English 40
+# lib/ExtUtils/t/bytes 4
+# lib/File/DosGlob compile
+# lib/Filter/Simple/t/data 1
+# lib/Math/BigInt/t/constant 1
+# lib/Net/t/config Deparse-warning
+# lib/overload compile
+# lib/Switch/ several
+# lib/Symbol 4
+# lib/Test/Simple several
+# lib/Term/Complete
+# lib/Tie/File/t/29_downcopy 5
+# lib/vars 22
+
+# Object fields (were globals):
+#
+# avoid_local:
+# (local($a), local($b)) and local($a, $b) have the same internal
+# representation but the short form looks better. We notice we can
+# use a large-scale local when checking the list, but need to prevent
+# individual locals too. This hash holds the addresses of OPs that
+# have already had their local-ness accounted for. The same thing
+# is done with my().
+#
+# curcv:
+# CV for current sub (or main program) being deparsed
+#
+# curcvlex:
+# Cached hash of lexical variables for curcv: keys are names,
+# each value is an array of pairs, indicating the cop_seq of scopes
+# in which a var of that name is valid.
+#
+# curcop:
+# COP for statement being deparsed
+#
+# curstash:
+# name of the current package for deparsed code
+#
+# subs_todo:
+# array of [cop_seq, CV, is_format?] for subs and formats we still
+# want to deparse
+#
+# protos_todo:
+# as above, but [name, prototype] for subs that never got a GV
+#
+# subs_done, forms_done:
+# keys are addresses of GVs for subs and formats we've already
+# deparsed (or at least put into subs_todo)
+#
+# subs_declared
+# keys are names of subs for which we've printed declarations.
+# That means we can omit parentheses from the arguments.
+#
+# subs_deparsed
+# Keeps track of fully qualified names of all deparsed subs.
+#
+# parens: -p
+# linenums: -l
+# unquote: -q
+# cuddle: ` ' or `\n', depending on -sC
+# indent_size: -si
+# use_tabs: -sT
+# ex_const: -sv
+
+# A little explanation of how precedence contexts and associativity
+# work:
+#
+# deparse() calls each per-op subroutine with an argument $cx (short
+# for context, but not the same as the cx* in the perl core), which is
+# a number describing the op's parents in terms of precedence, whether
+# they're inside an expression or at statement level, etc. (see
+# chart below). When ops with children call deparse on them, they pass
+# along their precedence. Fractional values are used to implement
+# associativity (`($x + $y) + $z' => `$x + $y + $y') and related
+# parentheses hacks. The major disadvantage of this scheme is that
+# it doesn't know about right sides and left sides, so say if you
+# assign a listop to a variable, it can't tell it's allowed to leave
+# the parens off the listop.
+
+# Precedences:
+# 26 [TODO] inside interpolation context ("")
+# 25 left terms and list operators (leftward)
+# 24 left ->
+# 23 nonassoc ++ --
+# 22 right **
+# 21 right ! ~ \ and unary + and -
+# 20 left =~ !~
+# 19 left * / % x
+# 18 left + - .
+# 17 left << >>
+# 16 nonassoc named unary operators
+# 15 nonassoc < > <= >= lt gt le ge
+# 14 nonassoc == != <=> eq ne cmp
+# 13 left &
+# 12 left | ^
+# 11 left &&
+# 10 left ||
+# 9 nonassoc .. ...
+# 8 right ?:
+# 7 right = += -= *= etc.
+# 6 left , =>
+# 5 nonassoc list operators (rightward)
+# 4 right not
+# 3 left and
+# 2 left or xor
+# 1 statement modifiers
+# 0.5 statements, but still print scopes as do { ... }
+# 0 statement level
+
+# Nonprinting characters with special meaning:
+# \cS - steal parens (see maybe_parens_unop)
+# \n - newline and indent
+# \t - increase indent
+# \b - decrease indent (`outdent')
+# \f - flush left (no indent)
+# \cK - kill following semicolon, if any
+
+sub null {
+ my $op = shift;
+ return class($op) eq "NULL";
+}
+
+sub todo {
+ my $self = shift;
+ my($cv, $is_form) = @_;
+ return unless ($cv->FILE eq $0 || exists $self->{files}{$cv->FILE});
+ my $seq;
+ if ($cv->OUTSIDE_SEQ) {
+ $seq = $cv->OUTSIDE_SEQ;
+ } elsif (!null($cv->START) and is_state($cv->START)) {
+ $seq = $cv->START->cop_seq;
+ } else {
+ $seq = 0;
+ }
+ push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form];
+ unless ($is_form || class($cv->STASH) eq 'SPECIAL') {
+ $self->{'subs_deparsed'}{$cv->STASH->NAME."::".$cv->GV->NAME} = 1;
+ }
+}
+
+sub next_todo {
+ my $self = shift;
+ my $ent = shift @{$self->{'subs_todo'}};
+ my $cv = $ent->[1];
+ my $gv = $cv->GV;
+ my $name = $self->gv_name($gv);
+ if ($ent->[2]) {
+ return "format $name =\n"
+ . $self->deparse_format($ent->[1]). "\n";
+ } else {
+ $self->{'subs_declared'}{$name} = 1;
+ if ($name eq "BEGIN") {
+ my $use_dec = $self->begin_is_use($cv);
+ if (defined ($use_dec) and $self->{'expand'} < 5) {
+ return () if 0 == length($use_dec);
+ return $use_dec;
+ }
+ }
+ my $l = '';
+ if ($self->{'linenums'}) {
+ my $line = $gv->LINE;
+ my $file = $gv->FILE;
+ $l = "\n\f#line $line \"$file\"\n";
+ }
+ my $p = '';
+ if (class($cv->STASH) ne "SPECIAL") {
+ my $stash = $cv->STASH->NAME;
+ if ($stash ne $self->{'curstash'}) {
+ $p = "package $stash;\n";
+ $name = "$self->{'curstash'}::$name" unless $name =~ /::/;
+ $self->{'curstash'} = $stash;
+ }
+ $name =~ s/^\Q$stash\E:://;
+ }
+ return "${p}${l}sub $name " . $self->deparse_sub($cv);
+ }
+}
+
+# Return a "use" declaration for this BEGIN block, if appropriate
+sub begin_is_use {
+ my ($self, $cv) = @_;
+ my $root = $cv->ROOT;
+ local @$self{qw'curcv curcvlex'} = ($cv);
+#require B::Debug;
+#B::walkoptree($cv->ROOT, "debug");
+ my $lineseq = $root->first;
+ return if $lineseq->name ne "lineseq";
+
+ my $req_op = $lineseq->first->sibling;
+ return if $req_op->name ne "require";
+
+ my $module;
+ if ($req_op->first->private & OPpCONST_BARE) {
+ # Actually it should always be a bareword
+ $module = $self->const_sv($req_op->first)->PV;
+ $module =~ s[/][::]g;
+ $module =~ s/.pm$//;
+ }
+ else {
+ $module = $self->const($self->const_sv($req_op->first), 6);
+ }
+
+ my $version;
+ my $version_op = $req_op->sibling;
+ return if class($version_op) eq "NULL";
+ if ($version_op->name eq "lineseq") {
+ # We have a version parameter; skip nextstate & pushmark
+ my $constop = $version_op->first->next->next;
+
+ return unless $self->const_sv($constop)->PV eq $module;
+ $constop = $constop->sibling;
+ $version = $self->const_sv($constop);
+ if (class($version) eq "IV") {
+ $version = $version->int_value;
+ } elsif (class($version) eq "NV") {
+ $version = $version->NV;
+ } elsif (class($version) ne "PVMG") {
+ # Includes PVIV and PVNV
+ $version = $version->PV;
+ } else {
+ # version specified as a v-string
+ $version = 'v'.join '.', map ord, split //, $version->PV;
+ }
+ $constop = $constop->sibling;
+ return if $constop->name ne "method_named";
+ return if $self->const_sv($constop)->PV ne "VERSION";
+ }
+
+ $lineseq = $version_op->sibling;
+ return if $lineseq->name ne "lineseq";
+ my $entersub = $lineseq->first->sibling;
+ if ($entersub->name eq "stub") {
+ return "use $module $version ();\n" if defined $version;
+ return "use $module ();\n";
+ }
+ return if $entersub->name ne "entersub";
+
+ # See if there are import arguments
+ my $args = '';
+
+ my $svop = $entersub->first->sibling; # Skip over pushmark
+ return unless $self->const_sv($svop)->PV eq $module;
+
+ # Pull out the arguments
+ for ($svop=$svop->sibling; $svop->name ne "method_named";
+ $svop = $svop->sibling) {
+ $args .= ", " if length($args);
+ $args .= $self->deparse($svop, 6);
+ }
+
+ my $use = 'use';
+ my $method_named = $svop;
+ return if $method_named->name ne "method_named";
+ my $method_name = $self->const_sv($method_named)->PV;
+
+ if ($method_name eq "unimport") {
+ $use = 'no';
+ }
+
+ # Certain pragmas are dealt with using hint bits,
+ # so we ignore them here
+ if ($module eq 'strict' || $module eq 'integer'
+ || $module eq 'bytes' || $module eq 'warnings') {
+ return "";
+ }
+
+ if (defined $version && length $args) {
+ return "$use $module $version ($args);\n";
+ } elsif (defined $version) {
+ return "$use $module $version;\n";
+ } elsif (length $args) {
+ return "$use $module ($args);\n";
+ } else {
+ return "$use $module;\n";
+ }
+}
+
+sub stash_subs {
+ my ($self, $pack) = @_;
+ my (@ret, $stash);
+ if (!defined $pack) {
+ $pack = '';
+ $stash = \%::;
+ }
+ else {
+ $pack =~ s/(::)?$/::/;
+ no strict 'refs';
+ $stash = \%$pack;
+ }
+ my %stash = svref_2object($stash)->ARRAY;
+ while (my ($key, $val) = each %stash) {
+ next if $key eq 'main::'; # avoid infinite recursion
+ my $class = class($val);
+ if ($class eq "PV") {
+ # Just a prototype. As an ugly but fairly effective way
+ # to find out if it belongs here is to see if the AUTOLOAD
+ # (if any) for the stash was defined in one of our files.
+ my $A = $stash{"AUTOLOAD"};
+ if (defined ($A) && class($A) eq "GV" && defined($A->CV)
+ && class($A->CV) eq "CV") {
+ my $AF = $A->FILE;
+ next unless $AF eq $0 || exists $self->{'files'}{$AF};
+ }
+ push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV];
+ } elsif ($class eq "IV") {
+ # Just a name. As above.
+ my $A = $stash{"AUTOLOAD"};
+ if (defined ($A) && class($A) eq "GV" && defined($A->CV)
+ && class($A->CV) eq "CV") {
+ my $AF = $A->FILE;
+ next unless $AF eq $0 || exists $self->{'files'}{$AF};
+ }
+ push @{$self->{'protos_todo'}}, [$pack . $key, undef];
+ } elsif ($class eq "GV") {
+ if (class(my $cv = $val->CV) ne "SPECIAL") {
+ next if $self->{'subs_done'}{$$val}++;
+ next if $$val != ${$cv->GV}; # Ignore imposters
+ $self->todo($cv, 0);
+ }
+ if (class(my $cv = $val->FORM) ne "SPECIAL") {
+ next if $self->{'forms_done'}{$$val}++;
+ next if $$val != ${$cv->GV}; # Ignore imposters
+ $self->todo($cv, 1);
+ }
+ if (class($val->HV) ne "SPECIAL" && $key =~ /::$/) {
+ $self->stash_subs($pack . $key);
+ }
+ }
+ }
+}
+
+sub print_protos {
+ my $self = shift;
+ my $ar;
+ my @ret;
+ foreach $ar (@{$self->{'protos_todo'}}) {
+ my $proto = (defined $ar->[1] ? " (". $ar->[1] . ")" : "");
+ push @ret, "sub " . $ar->[0] . "$proto;\n";
+ }
+ delete $self->{'protos_todo'};
+ return @ret;
+}
+
+sub style_opts {
+ my $self = shift;
+ my $opts = shift;
+ my $opt;
+ while (length($opt = substr($opts, 0, 1))) {
+ if ($opt eq "C") {
+ $self->{'cuddle'} = " ";
+ $opts = substr($opts, 1);
+ } elsif ($opt eq "i") {
+ $opts =~ s/^i(\d+)//;
+ $self->{'indent_size'} = $1;
+ } elsif ($opt eq "T") {
+ $self->{'use_tabs'} = 1;
+ $opts = substr($opts, 1);
+ } elsif ($opt eq "v") {
+ $opts =~ s/^v([^.]*)(.|$)//;
+ $self->{'ex_const'} = $1;
+ }
+ }
+}
+
+sub new {
+ my $class = shift;
+ my $self = bless {}, $class;
+ $self->{'cuddle'} = "\n";
+ $self->{'curcop'} = undef;
+ $self->{'curstash'} = "main";
+ $self->{'ex_const'} = "'???'";
+ $self->{'expand'} = 0;
+ $self->{'files'} = {};
+ $self->{'indent_size'} = 4;
+ $self->{'linenums'} = 0;
+ $self->{'parens'} = 0;
+ $self->{'subs_todo'} = [];
+ $self->{'unquote'} = 0;
+ $self->{'use_dumper'} = 0;
+ $self->{'use_tabs'} = 0;
+
+ $self->{'ambient_arybase'} = 0;
+ $self->{'ambient_warnings'} = undef; # Assume no lexical warnings
+ $self->{'ambient_hints'} = 0;
+ $self->init();
+
+ while (my $arg = shift @_) {
+ if ($arg eq "-d") {
+ $self->{'use_dumper'} = 1;
+ require Data::Dumper;
+ } elsif ($arg =~ /^-f(.*)/) {
+ $self->{'files'}{$1} = 1;
+ } elsif ($arg eq "-l") {
+ $self->{'linenums'} = 1;
+ } elsif ($arg eq "-p") {
+ $self->{'parens'} = 1;
+ } elsif ($arg eq "-P") {
+ $self->{'noproto'} = 1;
+ } elsif ($arg eq "-q") {
+ $self->{'unquote'} = 1;
+ } elsif (substr($arg, 0, 2) eq "-s") {
+ $self->style_opts(substr $arg, 2);
+ } elsif ($arg =~ /^-x(\d)$/) {
+ $self->{'expand'} = $1;
+ }
+ }
+ return $self;
+}
+
+{
+ # Mask out the bits that L<warnings::register> uses
+ my $WARN_MASK;
+ BEGIN {
+ $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
+ }
+ sub WARN_MASK () {
+ return $WARN_MASK;
+ }
+}
+
+# Initialise the contextual information, either from
+# defaults provided with the ambient_pragmas method,
+# or from perl's own defaults otherwise.
+sub init {
+ my $self = shift;
+
+ $self->{'arybase'} = $self->{'ambient_arybase'};
+ $self->{'warnings'} = defined ($self->{'ambient_warnings'})
+ ? $self->{'ambient_warnings'} & WARN_MASK
+ : undef;
+ $self->{'hints'} = $self->{'ambient_hints'} & 0xFF;
+
+ # also a convenient place to clear out subs_declared
+ delete $self->{'subs_declared'};
+}
+
+sub compile {
+ my(@args) = @_;
+ return sub {
+ my $self = B::Deparse->new(@args);
+ # First deparse command-line args
+ if (defined $^I) { # deparse -i
+ print q(BEGIN { $^I = ).perlstring($^I).qq(; }\n);
+ }
+ if ($^W) { # deparse -w
+ print qq(BEGIN { \$^W = $^W; }\n);
+ }
+ if ($/ ne "\n" or defined $O::savebackslash) { # deparse -l and -0
+ my $fs = perlstring($/) || 'undef';
+ my $bs = perlstring($O::savebackslash) || 'undef';
+ print qq(BEGIN { \$/ = $fs; \$\\ = $bs; }\n);
+ }
+ my @BEGINs = B::begin_av->isa("B::AV") ? B::begin_av->ARRAY : ();
+ my @CHECKs = B::check_av->isa("B::AV") ? B::check_av->ARRAY : ();
+ my @INITs = B::init_av->isa("B::AV") ? B::init_av->ARRAY : ();
+ my @ENDs = B::end_av->isa("B::AV") ? B::end_av->ARRAY : ();
+ for my $block (@BEGINs, @CHECKs, @INITs, @ENDs) {
+ $self->todo($block, 0);
+ }
+ $self->stash_subs();
+ local($SIG{"__DIE__"}) =
+ sub {
+ if ($self->{'curcop'}) {
+ my $cop = $self->{'curcop'};
+ my($line, $file) = ($cop->line, $cop->file);
+ print STDERR "While deparsing $file near line $line,\n";
+ }
+ };
+ $self->{'curcv'} = main_cv;
+ $self->{'curcvlex'} = undef;
+ print $self->print_protos;
+ @{$self->{'subs_todo'}} =
+ sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}};
+ print $self->indent($self->deparse_root(main_root)), "\n"
+ unless null main_root;
+ my @text;
+ while (scalar(@{$self->{'subs_todo'}})) {
+ push @text, $self->next_todo;
+ }
+ print $self->indent(join("", @text)), "\n" if @text;
+
+ # Print __DATA__ section, if necessary
+ no strict 'refs';
+ my $laststash = defined $self->{'curcop'}
+ ? $self->{'curcop'}->stash->NAME : $self->{'curstash'};
+ if (defined *{$laststash."::DATA"}{IO}) {
+ print "package $laststash;\n"
+ unless $laststash eq $self->{'curstash'};
+ print "__DATA__\n";
+ print readline(*{$laststash."::DATA"});
+ }
+ }
+}
+
+sub coderef2text {
+ my $self = shift;
+ my $sub = shift;
+ croak "Usage: ->coderef2text(CODEREF)" unless UNIVERSAL::isa($sub, "CODE");
+
+ $self->init();
+ return $self->indent($self->deparse_sub(svref_2object($sub)));
+}
+
+sub ambient_pragmas {
+ my $self = shift;
+ my ($arybase, $hint_bits, $warning_bits) = (0, 0);
+
+ while (@_ > 1) {
+ my $name = shift();
+ my $val = shift();
+
+ if ($name eq 'strict') {
+ require strict;
+
+ if ($val eq 'none') {
+ $hint_bits &= ~strict::bits(qw/refs subs vars/);
+ next();
+ }
+
+ my @names;
+ if ($val eq "all") {
+ @names = qw/refs subs vars/;
+ }
+ elsif (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split' ', $val;
+ }
+ $hint_bits |= strict::bits(@names);
+ }
+
+ elsif ($name eq '$[') {
+ $arybase = $val;
+ }
+
+ elsif ($name eq 'integer'
+ || $name eq 'bytes'
+ || $name eq 'utf8') {
+ require "$name.pm";
+ if ($val) {
+ $hint_bits |= ${$::{"${name}::"}{"hint_bits"}};
+ }
+ else {
+ $hint_bits &= ~${$::{"${name}::"}{"hint_bits"}};
+ }
+ }
+
+ elsif ($name eq 're') {
+ require re;
+ if ($val eq 'none') {
+ $hint_bits &= ~re::bits(qw/taint eval/);
+ next();
+ }
+
+ my @names;
+ if ($val eq 'all') {
+ @names = qw/taint eval/;
+ }
+ elsif (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split' ',$val;
+ }
+ $hint_bits |= re::bits(@names);
+ }
+
+ elsif ($name eq 'warnings') {
+ if ($val eq 'none') {
+ $warning_bits = $warnings::NONE;
+ next();
+ }
+
+ my @names;
+ if (ref $val) {
+ @names = @$val;
+ }
+ else {
+ @names = split/\s+/, $val;
+ }
+
+ $warning_bits = $warnings::NONE if !defined ($warning_bits);
+ $warning_bits |= warnings::bits(@names);
+ }
+
+ elsif ($name eq 'warning_bits') {
+ $warning_bits = $val;
+ }
+
+ elsif ($name eq 'hint_bits') {
+ $hint_bits = $val;
+ }
+
+ else {
+ croak "Unknown pragma type: $name";
+ }
+ }
+ if (@_) {
+ croak "The ambient_pragmas method expects an even number of args";
+ }
+
+ $self->{'ambient_arybase'} = $arybase;
+ $self->{'ambient_warnings'} = $warning_bits;
+ $self->{'ambient_hints'} = $hint_bits;
+}
+
+# This method is the inner loop, so try to keep it simple
+sub deparse {
+ my $self = shift;
+ my($op, $cx) = @_;
+
+ Carp::confess("Null op in deparse") if !defined($op)
+ || class($op) eq "NULL";
+ my $meth = "pp_" . $op->name;
+ return $self->$meth($op, $cx);
+}
+
+sub indent {
+ my $self = shift;
+ my $txt = shift;
+ my @lines = split(/\n/, $txt);
+ my $leader = "";
+ my $level = 0;
+ my $line;
+ for $line (@lines) {
+ my $cmd = substr($line, 0, 1);
+ if ($cmd eq "\t" or $cmd eq "\b") {
+ $level += ($cmd eq "\t" ? 1 : -1) * $self->{'indent_size'};
+ if ($self->{'use_tabs'}) {
+ $leader = "\t" x ($level / 8) . " " x ($level % 8);
+ } else {
+ $leader = " " x $level;
+ }
+ $line = substr($line, 1);
+ }
+ if (substr($line, 0, 1) eq "\f") {
+ $line = substr($line, 1); # no indent
+ } else {
+ $line = $leader . $line;
+ }
+ $line =~ s/\cK;?//g;
+ }
+ return join("\n", @lines);
+}
+
+sub deparse_sub {
+ my $self = shift;
+ my $cv = shift;
+ my $proto = "";
+Carp::confess("NULL in deparse_sub") if !defined($cv) || $cv->isa("B::NULL");
+Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
+ local $self->{'curcop'} = $self->{'curcop'};
+ if ($cv->FLAGS & SVf_POK) {
+ $proto = "(". $cv->PV . ") ";
+ }
+ if ($cv->CvFLAGS & (CVf_METHOD|CVf_LOCKED|CVf_LVALUE|CVf_ASSERTION)) {
+ $proto .= ": ";
+ $proto .= "lvalue " if $cv->CvFLAGS & CVf_LVALUE;
+ $proto .= "locked " if $cv->CvFLAGS & CVf_LOCKED;
+ $proto .= "method " if $cv->CvFLAGS & CVf_METHOD;
+ $proto .= "assertion " if $cv->CvFLAGS & CVf_ASSERTION;
+ }
+
+ local($self->{'curcv'}) = $cv;
+ local($self->{'curcvlex'});
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $body;
+ if (not null $cv->ROOT) {
+ my $lineseq = $cv->ROOT->first;
+ if ($lineseq->name eq "lineseq") {
+ my @ops;
+ for(my$o=$lineseq->first; $$o; $o=$o->sibling) {
+ push @ops, $o;
+ }
+ $body = $self->lineseq(undef, @ops).";";
+ my $scope_en = $self->find_scope_en($lineseq);
+ if (defined $scope_en) {
+ my $subs = join"", $self->seq_subs($scope_en);
+ $body .= ";\n$subs" if length($subs);
+ }
+ }
+ else {
+ $body = $self->deparse($cv->ROOT->first, 0);
+ }
+ }
+ else {
+ my $sv = $cv->const_sv;
+ if ($$sv) {
+ # uh-oh. inlinable sub... format it differently
+ return $proto . "{ " . $self->const($sv, 0) . " }\n";
+ } else { # XSUB? (or just a declaration)
+ return "$proto;\n";
+ }
+ }
+ return $proto ."{\n\t$body\n\b}" ."\n";
+}
+
+sub deparse_format {
+ my $self = shift;
+ my $form = shift;
+ my @text;
+ local($self->{'curcv'}) = $form;
+ local($self->{'curcvlex'});
+ local($self->{'in_format'}) = 1;
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $op = $form->ROOT;
+ my $kid;
+ return "\f." if $op->first->name eq 'stub'
+ || $op->first->name eq 'nextstate';
+ $op = $op->first->first; # skip leavewrite, lineseq
+ while (not null $op) {
+ $op = $op->sibling; # skip nextstate
+ my @exprs;
+ $kid = $op->first->sibling; # skip pushmark
+ push @text, "\f".$self->const_sv($kid)->PV;
+ $kid = $kid->sibling;
+ for (; not null $kid; $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 0);
+ }
+ push @text, "\f".join(", ", @exprs)."\n" if @exprs;
+ $op = $op->sibling;
+ }
+ return join("", @text) . "\f.";
+}
+
+sub is_scope {
+ my $op = shift;
+ return $op->name eq "leave" || $op->name eq "scope"
+ || $op->name eq "lineseq"
+ || ($op->name eq "null" && class($op) eq "UNOP"
+ && (is_scope($op->first) || $op->first->name eq "enter"));
+}
+
+sub is_state {
+ my $name = $_[0]->name;
+ return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate";
+}
+
+sub is_miniwhile { # check for one-line loop (`foo() while $y--')
+ my $op = shift;
+ return (!null($op) and null($op->sibling)
+ and $op->name eq "null" and class($op) eq "UNOP"
+ and (($op->first->name =~ /^(and|or)$/
+ and $op->first->first->sibling->name eq "lineseq")
+ or ($op->first->name eq "lineseq"
+ and not null $op->first->first->sibling
+ and $op->first->first->sibling->name eq "unstack")
+ ));
+}
+
+# Check if the op and its sibling are the initialization and the rest of a
+# for (..;..;..) { ... } loop
+sub is_for_loop {
+ my $op = shift;
+ # This OP might be almost anything, though it won't be a
+ # nextstate. (It's the initialization, so in the canonical case it
+ # will be an sassign.) The sibling is a lineseq whose first child
+ # is a nextstate and whose second is a leaveloop.
+ my $lseq = $op->sibling;
+ if (!is_state $op and !null($lseq) and $lseq->name eq "lineseq") {
+ if ($lseq->first && !null($lseq->first) && is_state($lseq->first)
+ && (my $sib = $lseq->first->sibling)) {
+ return (!null($sib) && $sib->name eq "leaveloop");
+ }
+ }
+ return 0;
+}
+
+sub is_scalar {
+ my $op = shift;
+ return ($op->name eq "rv2sv" or
+ $op->name eq "padsv" or
+ $op->name eq "gv" or # only in array/hash constructs
+ $op->flags & OPf_KIDS && !null($op->first)
+ && $op->first->name eq "gvsv");
+}
+
+sub maybe_parens {
+ my $self = shift;
+ my($text, $cx, $prec) = @_;
+ if ($prec < $cx # unary ops nest just fine
+ or $prec == $cx and $cx != 4 and $cx != 16 and $cx != 21
+ or $self->{'parens'})
+ {
+ $text = "($text)";
+ # In a unop, let parent reuse our parens; see maybe_parens_unop
+ $text = "\cS" . $text if $cx == 16;
+ return $text;
+ } else {
+ return $text;
+ }
+}
+
+# same as above, but get around the `if it looks like a function' rule
+sub maybe_parens_unop {
+ my $self = shift;
+ my($name, $kid, $cx) = @_;
+ if ($cx > 16 or $self->{'parens'}) {
+ $kid = $self->deparse($kid, 1);
+ if ($name eq "umask" && $kid =~ /^\d+$/) {
+ $kid = sprintf("%#o", $kid);
+ }
+ return "$name($kid)";
+ } else {
+ $kid = $self->deparse($kid, 16);
+ if ($name eq "umask" && $kid =~ /^\d+$/) {
+ $kid = sprintf("%#o", $kid);
+ }
+ if (substr($kid, 0, 1) eq "\cS") {
+ # use kid's parens
+ return $name . substr($kid, 1);
+ } elsif (substr($kid, 0, 1) eq "(") {
+ # avoid looks-like-a-function trap with extra parens
+ # (`+' can lead to ambiguities)
+ return "$name(" . $kid . ")";
+ } else {
+ return "$name $kid";
+ }
+ }
+}
+
+sub maybe_parens_func {
+ my $self = shift;
+ my($func, $text, $cx, $prec) = @_;
+ if ($prec <= $cx or substr($text, 0, 1) eq "(" or $self->{'parens'}) {
+ return "$func($text)";
+ } else {
+ return "$func $text";
+ }
+}
+
+sub maybe_local {
+ my $self = shift;
+ my($op, $cx, $text) = @_;
+ my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0;
+ if ($op->private & (OPpLVAL_INTRO|$our_intro)
+ and not $self->{'avoid_local'}{$$op}) {
+ my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our";
+ if( $our_local eq 'our' ) {
+ # XXX This assertion fails code with non-ASCII identifiers,
+ # like ./ext/Encode/t/jperl.t
+ die "Unexpected our($text)\n" unless $text =~ /^\W(\w+::)*\w+\z/;
+ $text =~ s/(\w+::)+//;
+ }
+ if (want_scalar($op)) {
+ return "$our_local $text";
+ } else {
+ return $self->maybe_parens_func("$our_local", $text, $cx, 16);
+ }
+ } else {
+ return $text;
+ }
+}
+
+sub maybe_targmy {
+ my $self = shift;
+ my($op, $cx, $func, @args) = @_;
+ if ($op->private & OPpTARGET_MY) {
+ my $var = $self->padname($op->targ);
+ my $val = $func->($self, $op, 7, @args);
+ return $self->maybe_parens("$var = $val", $cx, 7);
+ } else {
+ return $func->($self, $op, $cx, @args);
+ }
+}
+
+sub padname_sv {
+ my $self = shift;
+ my $targ = shift;
+ return $self->{'curcv'}->PADLIST->ARRAYelt(0)->ARRAYelt($targ);
+}
+
+sub maybe_my {
+ my $self = shift;
+ my($op, $cx, $text) = @_;
+ if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) {
+ if (want_scalar($op)) {
+ return "my $text";
+ } else {
+ return $self->maybe_parens_func("my", $text, $cx, 16);
+ }
+ } else {
+ return $text;
+ }
+}
+
+# The following OPs don't have functions:
+
+# pp_padany -- does not exist after parsing
+
+sub AUTOLOAD {
+ if ($AUTOLOAD =~ s/^.*::pp_//) {
+ warn "unexpected OP_".uc $AUTOLOAD;
+ return "XXX";
+ } else {
+ die "Undefined subroutine $AUTOLOAD called";
+ }
+}
+
+sub DESTROY {} # Do not AUTOLOAD
+
+# $root should be the op which represents the root of whatever
+# we're sequencing here. If it's undefined, then we don't append
+# any subroutine declarations to the deparsed ops, otherwise we
+# append appropriate declarations.
+sub lineseq {
+ my($self, $root, @ops) = @_;
+ my($expr, @exprs);
+
+ my $out_cop = $self->{'curcop'};
+ my $out_seq = defined($out_cop) ? $out_cop->cop_seq : undef;
+ my $limit_seq;
+ if (defined $root) {
+ $limit_seq = $out_seq;
+ my $nseq;
+ $nseq = $self->find_scope_st($root->sibling) if ${$root->sibling};
+ $limit_seq = $nseq if !defined($limit_seq)
+ or defined($nseq) && $nseq < $limit_seq;
+ }
+ $limit_seq = $self->{'limit_seq'}
+ if defined($self->{'limit_seq'})
+ && (!defined($limit_seq) || $self->{'limit_seq'} < $limit_seq);
+ local $self->{'limit_seq'} = $limit_seq;
+ for (my $i = 0; $i < @ops; $i++) {
+ $expr = "";
+ if (is_state $ops[$i]) {
+ $expr = $self->deparse($ops[$i], 0);
+ $i++;
+ if ($i > $#ops) {
+ push @exprs, $expr;
+ last;
+ }
+ }
+ if (!is_state $ops[$i] and (my $ls = $ops[$i+1]) and
+ !null($ops[$i+1]) and $ops[$i+1]->name eq "lineseq")
+ {
+ if ($ls->first && !null($ls->first) && is_state($ls->first)
+ && (my $sib = $ls->first->sibling)) {
+ if (!null($sib) && $sib->name eq "leaveloop") {
+ push @exprs, $expr . $self->for_loop($ops[$i], 0);
+ $i++;
+ next;
+ }
+ }
+ }
+ $expr .= $self->deparse($ops[$i], (@ops != 1)/2);
+ $expr =~ s/;\n?\z//;
+ push @exprs, $expr;
+ }
+ my $body = join(";\n", grep {length} @exprs);
+ my $subs = "";
+ if (defined $root && defined $limit_seq && !$self->{'in_format'}) {
+ $subs = join "\n", $self->seq_subs($limit_seq);
+ }
+ return join(";\n", grep {length} $body, $subs);
+}
+
+sub scopeop {
+ my($real_block, $self, $op, $cx) = @_;
+ my $kid;
+ my @kids;
+
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'} if $real_block;
+ if ($real_block) {
+ $kid = $op->first->sibling; # skip enter
+ if (is_miniwhile($kid)) {
+ my $top = $kid->first;
+ my $name = $top->name;
+ if ($name eq "and") {
+ $name = "while";
+ } elsif ($name eq "or") {
+ $name = "until";
+ } else { # no conditional -> while 1 or until 0
+ return $self->deparse($top->first, 1) . " while 1";
+ }
+ my $cond = $top->first;
+ my $body = $cond->sibling->first; # skip lineseq
+ $cond = $self->deparse($cond, 1);
+ $body = $self->deparse($body, 1);
+ return "$body $name $cond";
+ }
+ } else {
+ $kid = $op->first;
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @kids, $kid;
+ }
+ if ($cx > 0) { # inside an expression, (a do {} while for lineseq)
+ return "do {\n\t" . $self->lineseq($op, @kids) . "\n\b}";
+ } else {
+ my $lineseq = $self->lineseq($op, @kids);
+ return (length ($lineseq) ? "$lineseq;" : "");
+ }
+}
+
+sub pp_scope { scopeop(0, @_); }
+sub pp_lineseq { scopeop(0, @_); }
+sub pp_leave { scopeop(1, @_); }
+
+# This is a special case of scopeop and lineseq, for the case of the
+# main_root. The difference is that we print the output statements as
+# soon as we get them, for the sake of impatient users.
+sub deparse_root {
+ my $self = shift;
+ my($op) = @_;
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my @kids;
+ for (my $kid = $op->first->sibling; !null($kid); $kid = $kid->sibling) {
+ push @kids, $kid;
+ }
+ for (my $i = 0; $i < @kids; $i++) {
+ my $expr = "";
+ if (is_state $kids[$i]) {
+ $expr = $self->deparse($kids[$i], 0);
+ $i++;
+ if ($i > $#kids) {
+ print $self->indent($expr);
+ last;
+ }
+ }
+ if (is_for_loop($kids[$i])) {
+ $expr .= $self->for_loop($kids[$i], 0);
+ $expr .= ";\n" unless $i == $#kids;
+ print $self->indent($expr);
+ $i++;
+ next;
+ }
+ $expr .= $self->deparse($kids[$i], (@kids != 1)/2);
+ $expr =~ s/;\n?\z//;
+ $expr .= ";";
+ print $self->indent($expr);
+ print "\n" unless $i == $#kids;
+ }
+}
+
+# The BEGIN {} is used here because otherwise this code isn't executed
+# when you run B::Deparse on itself.
+my %globalnames;
+BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC",
+ "ENV", "ARGV", "ARGVOUT", "_"); }
+
+sub gv_name {
+ my $self = shift;
+ my $gv = shift;
+Carp::confess() unless ref($gv) eq "B::GV";
+ my $stash = $gv->STASH->NAME;
+ my $name = $gv->SAFENAME;
+ if (($stash eq 'main' && $globalnames{$name})
+ or ($stash eq $self->{'curstash'} && !$globalnames{$name})
+ or $name =~ /^[^A-Za-z_:]/)
+ {
+ $stash = "";
+ } else {
+ $stash = $stash . "::";
+ }
+ if ($name =~ /^(\^..|{)/) {
+ $name = "{$name}"; # ${^WARNING_BITS}, etc and ${
+ }
+ return $stash . $name;
+}
+
+# Return the name to use for a stash variable.
+# If a lexical with the same name is in scope, it may need to be
+# fully-qualified.
+sub stash_variable {
+ my ($self, $prefix, $name) = @_;
+
+ return "$prefix$name" if $name =~ /::/;
+
+ unless ($prefix eq '$' || $prefix eq '@' || #'
+ $prefix eq '%' || $prefix eq '$#') {
+ return "$prefix$name";
+ }
+
+ my $v = ($prefix eq '$#' ? '@' : $prefix) . $name;
+ return $prefix .$self->{'curstash'}.'::'. $name if $self->lex_in_scope($v);
+ return "$prefix$name";
+}
+
+sub lex_in_scope {
+ my ($self, $name) = @_;
+ $self->populate_curcvlex() if !defined $self->{'curcvlex'};
+
+ return 0 if !defined($self->{'curcop'});
+ my $seq = $self->{'curcop'}->cop_seq;
+ return 0 if !exists $self->{'curcvlex'}{$name};
+ for my $a (@{$self->{'curcvlex'}{$name}}) {
+ my ($st, $en) = @$a;
+ return 1 if $seq > $st && $seq <= $en;
+ }
+ return 0;
+}
+
+sub populate_curcvlex {
+ my $self = shift;
+ for (my $cv = $self->{'curcv'}; class($cv) eq "CV"; $cv = $cv->OUTSIDE) {
+ my $padlist = $cv->PADLIST;
+ # an undef CV still in lexical chain
+ next if class($padlist) eq "SPECIAL";
+ my @padlist = $padlist->ARRAY;
+ my @ns = $padlist[0]->ARRAY;
+
+ for (my $i=0; $i<@ns; ++$i) {
+ next if class($ns[$i]) eq "SPECIAL";
+ next if $ns[$i]->FLAGS & SVpad_OUR; # Skip "our" vars
+ if (class($ns[$i]) eq "PV") {
+ # Probably that pesky lexical @_
+ next;
+ }
+ my $name = $ns[$i]->PVX;
+ my ($seq_st, $seq_en) =
+ ($ns[$i]->FLAGS & SVf_FAKE)
+ ? (0, 999999)
+ : ($ns[$i]->NVX, $ns[$i]->IVX);
+
+ push @{$self->{'curcvlex'}{$name}}, [$seq_st, $seq_en];
+ }
+ }
+}
+
+sub find_scope_st { ((find_scope(@_))[0]); }
+sub find_scope_en { ((find_scope(@_))[1]); }
+
+# Recurses down the tree, looking for pad variable introductions and COPs
+sub find_scope {
+ my ($self, $op, $scope_st, $scope_en) = @_;
+ carp("Undefined op in find_scope") if !defined $op;
+ return ($scope_st, $scope_en) unless $op->flags & OPf_KIDS;
+
+ for (my $o=$op->first; $$o; $o=$o->sibling) {
+ if ($o->name =~ /^pad.v$/ && $o->private & OPpLVAL_INTRO) {
+ my $s = int($self->padname_sv($o->targ)->NVX);
+ my $e = $self->padname_sv($o->targ)->IVX;
+ $scope_st = $s if !defined($scope_st) || $s < $scope_st;
+ $scope_en = $e if !defined($scope_en) || $e > $scope_en;
+ }
+ elsif (is_state($o)) {
+ my $c = $o->cop_seq;
+ $scope_st = $c if !defined($scope_st) || $c < $scope_st;
+ $scope_en = $c if !defined($scope_en) || $c > $scope_en;
+ }
+ elsif ($o->flags & OPf_KIDS) {
+ ($scope_st, $scope_en) =
+ $self->find_scope($o, $scope_st, $scope_en)
+ }
+ }
+
+ return ($scope_st, $scope_en);
+}
+
+# Returns a list of subs which should be inserted before the COP
+sub cop_subs {
+ my ($self, $op, $out_seq) = @_;
+ my $seq = $op->cop_seq;
+ # If we have nephews, then our sequence number indicates
+ # the cop_seq of the end of some sort of scope.
+ if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS
+ and my $nseq = $self->find_scope_st($op->sibling) ) {
+ $seq = $nseq;
+ }
+ $seq = $out_seq if defined($out_seq) && $out_seq < $seq;
+ return $self->seq_subs($seq);
+}
+
+sub seq_subs {
+ my ($self, $seq) = @_;
+ my @text;
+#push @text, "# ($seq)\n";
+
+ return "" if !defined $seq;
+ while (scalar(@{$self->{'subs_todo'}})
+ and $seq > $self->{'subs_todo'}[0][0]) {
+ push @text, $self->next_todo;
+ }
+ return @text;
+}
+
+# Notice how subs and formats are inserted between statements here;
+# also $[ assignments and pragmas.
+sub pp_nextstate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ $self->{'curcop'} = $op;
+ my @text;
+ push @text, $self->cop_subs($op);
+ push @text, $op->label . ": " if $op->label;
+ my $stash = $op->stashpv;
+ if ($stash ne $self->{'curstash'}) {
+ push @text, "package $stash;\n";
+ $self->{'curstash'} = $stash;
+ }
+
+ if ($self->{'arybase'} != $op->arybase) {
+ push @text, '$[ = '. $op->arybase .";\n";
+ $self->{'arybase'} = $op->arybase;
+ }
+
+ my $warnings = $op->warnings;
+ my $warning_bits;
+ if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
+ $warning_bits = $warnings::Bits{"all"} & WARN_MASK;
+ }
+ elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
+ $warning_bits = $warnings::NONE;
+ }
+ elsif ($warnings->isa("B::SPECIAL")) {
+ $warning_bits = undef;
+ }
+ else {
+ $warning_bits = $warnings->PV & WARN_MASK;
+ }
+
+ if (defined ($warning_bits) and
+ !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) {
+ push @text, declare_warnings($self->{'warnings'}, $warning_bits);
+ $self->{'warnings'} = $warning_bits;
+ }
+
+ if ($self->{'hints'} != $op->private) {
+ push @text, declare_hints($self->{'hints'}, $op->private);
+ $self->{'hints'} = $op->private;
+ }
+
+ # This should go after of any branches that add statements, to
+ # increase the chances that it refers to the same line it did in
+ # the original program.
+ if ($self->{'linenums'}) {
+ push @text, "\f#line " . $op->line .
+ ' "' . $op->file, qq'"\n';
+ }
+
+ return join("", @text);
+}
+
+sub declare_warnings {
+ my ($from, $to) = @_;
+ if (($to & WARN_MASK) eq (warnings::bits("all") & WARN_MASK)) {
+ return "use warnings;\n";
+ }
+ elsif (($to & WARN_MASK) eq ("\0"x length($to) & WARN_MASK)) {
+ return "no warnings;\n";
+ }
+ return "BEGIN {\${^WARNING_BITS} = ".perlstring($to)."}\n";
+}
+
+sub declare_hints {
+ my ($from, $to) = @_;
+ my $use = $to & ~$from;
+ my $no = $from & ~$to;
+ my $decls = "";
+ for my $pragma (hint_pragmas($use)) {
+ $decls .= "use $pragma;\n";
+ }
+ for my $pragma (hint_pragmas($no)) {
+ $decls .= "no $pragma;\n";
+ }
+ return $decls;
+}
+
+sub hint_pragmas {
+ my ($bits) = @_;
+ my @pragmas;
+ push @pragmas, "integer" if $bits & 0x1;
+ push @pragmas, "strict 'refs'" if $bits & 0x2;
+ push @pragmas, "bytes" if $bits & 0x8;
+ return @pragmas;
+}
+
+sub pp_dbstate { pp_nextstate(@_) }
+sub pp_setstate { pp_nextstate(@_) }
+
+sub pp_unstack { return "" } # see also leaveloop
+
+sub baseop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ return $name;
+}
+
+sub pp_stub {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ if ($cx >= 1) {
+ return "()";
+ }
+ else {
+ return "();";
+ }
+}
+sub pp_wantarray { baseop(@_, "wantarray") }
+sub pp_fork { baseop(@_, "fork") }
+sub pp_wait { maybe_targmy(@_, \&baseop, "wait") }
+sub pp_getppid { maybe_targmy(@_, \&baseop, "getppid") }
+sub pp_time { maybe_targmy(@_, \&baseop, "time") }
+sub pp_tms { baseop(@_, "times") }
+sub pp_ghostent { baseop(@_, "gethostent") }
+sub pp_gnetent { baseop(@_, "getnetent") }
+sub pp_gprotoent { baseop(@_, "getprotoent") }
+sub pp_gservent { baseop(@_, "getservent") }
+sub pp_ehostent { baseop(@_, "endhostent") }
+sub pp_enetent { baseop(@_, "endnetent") }
+sub pp_eprotoent { baseop(@_, "endprotoent") }
+sub pp_eservent { baseop(@_, "endservent") }
+sub pp_gpwent { baseop(@_, "getpwent") }
+sub pp_spwent { baseop(@_, "setpwent") }
+sub pp_epwent { baseop(@_, "endpwent") }
+sub pp_ggrent { baseop(@_, "getgrent") }
+sub pp_sgrent { baseop(@_, "setgrent") }
+sub pp_egrent { baseop(@_, "endgrent") }
+sub pp_getlogin { baseop(@_, "getlogin") }
+
+sub POSTFIX () { 1 }
+
+# I couldn't think of a good short name, but this is the category of
+# symbolic unary operators with interesting precedence
+
+sub pfixop {
+ my $self = shift;
+ my($op, $cx, $name, $prec, $flags) = (@_, 0);
+ my $kid = $op->first;
+ $kid = $self->deparse($kid, $prec);
+ return $self->maybe_parens(($flags & POSTFIX) ? "$kid$name" : "$name$kid",
+ $cx, $prec);
+}
+
+sub pp_preinc { pfixop(@_, "++", 23) }
+sub pp_predec { pfixop(@_, "--", 23) }
+sub pp_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
+sub pp_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
+sub pp_i_preinc { pfixop(@_, "++", 23) }
+sub pp_i_predec { pfixop(@_, "--", 23) }
+sub pp_i_postinc { maybe_targmy(@_, \&pfixop, "++", 23, POSTFIX) }
+sub pp_i_postdec { maybe_targmy(@_, \&pfixop, "--", 23, POSTFIX) }
+sub pp_complement { maybe_targmy(@_, \&pfixop, "~", 21) }
+
+sub pp_negate { maybe_targmy(@_, \&real_negate) }
+sub real_negate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->first->name =~ /^(i_)?negate$/) {
+ # avoid --$x
+ $self->pfixop($op, $cx, "-", 21.5);
+ } else {
+ $self->pfixop($op, $cx, "-", 21);
+ }
+}
+sub pp_i_negate { pp_negate(@_) }
+
+sub pp_not {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($cx <= 4) {
+ $self->pfixop($op, $cx, "not ", 4);
+ } else {
+ $self->pfixop($op, $cx, "!", 21);
+ }
+}
+
+sub unop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my $kid;
+ if ($op->flags & OPf_KIDS) {
+ $kid = $op->first;
+ if (defined prototype("CORE::$name")
+ && prototype("CORE::$name") =~ /^;?\*/
+ && $kid->name eq "rv2gv") {
+ $kid = $kid->first;
+ }
+
+ return $self->maybe_parens_unop($name, $kid, $cx);
+ } else {
+ return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
+ }
+}
+
+sub pp_chop { maybe_targmy(@_, \&unop, "chop") }
+sub pp_chomp { maybe_targmy(@_, \&unop, "chomp") }
+sub pp_schop { maybe_targmy(@_, \&unop, "chop") }
+sub pp_schomp { maybe_targmy(@_, \&unop, "chomp") }
+sub pp_defined { unop(@_, "defined") }
+sub pp_undef { unop(@_, "undef") }
+sub pp_study { unop(@_, "study") }
+sub pp_ref { unop(@_, "ref") }
+sub pp_pos { maybe_local(@_, unop(@_, "pos")) }
+
+sub pp_sin { maybe_targmy(@_, \&unop, "sin") }
+sub pp_cos { maybe_targmy(@_, \&unop, "cos") }
+sub pp_rand { maybe_targmy(@_, \&unop, "rand") }
+sub pp_srand { unop(@_, "srand") }
+sub pp_exp { maybe_targmy(@_, \&unop, "exp") }
+sub pp_log { maybe_targmy(@_, \&unop, "log") }
+sub pp_sqrt { maybe_targmy(@_, \&unop, "sqrt") }
+sub pp_int { maybe_targmy(@_, \&unop, "int") }
+sub pp_hex { maybe_targmy(@_, \&unop, "hex") }
+sub pp_oct { maybe_targmy(@_, \&unop, "oct") }
+sub pp_abs { maybe_targmy(@_, \&unop, "abs") }
+
+sub pp_length { maybe_targmy(@_, \&unop, "length") }
+sub pp_ord { maybe_targmy(@_, \&unop, "ord") }
+sub pp_chr { maybe_targmy(@_, \&unop, "chr") }
+
+sub pp_each { unop(@_, "each") }
+sub pp_values { unop(@_, "values") }
+sub pp_keys { unop(@_, "keys") }
+sub pp_pop { unop(@_, "pop") }
+sub pp_shift { unop(@_, "shift") }
+
+sub pp_caller { unop(@_, "caller") }
+sub pp_reset { unop(@_, "reset") }
+sub pp_exit { unop(@_, "exit") }
+sub pp_prototype { unop(@_, "prototype") }
+
+sub pp_close { unop(@_, "close") }
+sub pp_fileno { unop(@_, "fileno") }
+sub pp_umask { unop(@_, "umask") }
+sub pp_untie { unop(@_, "untie") }
+sub pp_tied { unop(@_, "tied") }
+sub pp_dbmclose { unop(@_, "dbmclose") }
+sub pp_getc { unop(@_, "getc") }
+sub pp_eof { unop(@_, "eof") }
+sub pp_tell { unop(@_, "tell") }
+sub pp_getsockname { unop(@_, "getsockname") }
+sub pp_getpeername { unop(@_, "getpeername") }
+
+sub pp_chdir { maybe_targmy(@_, \&unop, "chdir") }
+sub pp_chroot { maybe_targmy(@_, \&unop, "chroot") }
+sub pp_readlink { unop(@_, "readlink") }
+sub pp_rmdir { maybe_targmy(@_, \&unop, "rmdir") }
+sub pp_readdir { unop(@_, "readdir") }
+sub pp_telldir { unop(@_, "telldir") }
+sub pp_rewinddir { unop(@_, "rewinddir") }
+sub pp_closedir { unop(@_, "closedir") }
+sub pp_getpgrp { maybe_targmy(@_, \&unop, "getpgrp") }
+sub pp_localtime { unop(@_, "localtime") }
+sub pp_gmtime { unop(@_, "gmtime") }
+sub pp_alarm { unop(@_, "alarm") }
+sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") }
+
+sub pp_dofile { unop(@_, "do") }
+sub pp_entereval { unop(@_, "eval") }
+
+sub pp_ghbyname { unop(@_, "gethostbyname") }
+sub pp_gnbyname { unop(@_, "getnetbyname") }
+sub pp_gpbyname { unop(@_, "getprotobyname") }
+sub pp_shostent { unop(@_, "sethostent") }
+sub pp_snetent { unop(@_, "setnetent") }
+sub pp_sprotoent { unop(@_, "setprotoent") }
+sub pp_sservent { unop(@_, "setservent") }
+sub pp_gpwnam { unop(@_, "getpwnam") }
+sub pp_gpwuid { unop(@_, "getpwuid") }
+sub pp_ggrnam { unop(@_, "getgrnam") }
+sub pp_ggrgid { unop(@_, "getgrgid") }
+
+sub pp_lock { unop(@_, "lock") }
+
+sub pp_exists {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $arg;
+ if ($op->private & OPpEXISTS_SUB) {
+ # Checking for the existence of a subroutine
+ return $self->maybe_parens_func("exists",
+ $self->pp_rv2cv($op->first, 16), $cx, 16);
+ }
+ if ($op->flags & OPf_SPECIAL) {
+ # Array element, not hash element
+ return $self->maybe_parens_func("exists",
+ $self->pp_aelem($op->first, 16), $cx, 16);
+ }
+ return $self->maybe_parens_func("exists", $self->pp_helem($op->first, 16),
+ $cx, 16);
+}
+
+sub pp_delete {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $arg;
+ if ($op->private & OPpSLICE) {
+ if ($op->flags & OPf_SPECIAL) {
+ # Deleting from an array, not a hash
+ return $self->maybe_parens_func("delete",
+ $self->pp_aslice($op->first, 16),
+ $cx, 16);
+ }
+ return $self->maybe_parens_func("delete",
+ $self->pp_hslice($op->first, 16),
+ $cx, 16);
+ } else {
+ if ($op->flags & OPf_SPECIAL) {
+ # Deleting from an array, not a hash
+ return $self->maybe_parens_func("delete",
+ $self->pp_aelem($op->first, 16),
+ $cx, 16);
+ }
+ return $self->maybe_parens_func("delete",
+ $self->pp_helem($op->first, 16),
+ $cx, 16);
+ }
+}
+
+sub pp_require {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $opname = $op->flags & OPf_SPECIAL ? 'CORE::require' : 'require';
+ if (class($op) eq "UNOP" and $op->first->name eq "const"
+ and $op->first->private & OPpCONST_BARE)
+ {
+ my $name = $self->const_sv($op->first)->PV;
+ $name =~ s[/][::]g;
+ $name =~ s/\.pm//g;
+ return "$opname $name";
+ } else {
+ $self->unop($op, $cx, $opname);
+ }
+}
+
+sub pp_scalar {
+ my $self = shift;
+ my($op, $cv) = @_;
+ my $kid = $op->first;
+ if (not null $kid->sibling) {
+ # XXX Was a here-doc
+ return $self->dquote($op);
+ }
+ $self->unop(@_, "scalar");
+}
+
+
+sub padval {
+ my $self = shift;
+ my $targ = shift;
+ return $self->{'curcv'}->PADLIST->ARRAYelt(1)->ARRAYelt($targ);
+}
+
+sub pp_refgen {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ if ($kid->name eq "null") {
+ $kid = $kid->first;
+ if ($kid->name eq "anonlist" || $kid->name eq "anonhash") {
+ my($pre, $post) = @{{"anonlist" => ["[","]"],
+ "anonhash" => ["{","}"]}->{$kid->name}};
+ my($expr, @exprs);
+ $kid = $kid->first->sibling; # skip pushmark
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr;
+ }
+ return $pre . join(", ", @exprs) . $post;
+ } elsif (!null($kid->sibling) and
+ $kid->sibling->name eq "anoncode") {
+ return "sub " .
+ $self->deparse_sub($self->padval($kid->sibling->targ));
+ } elsif ($kid->name eq "pushmark") {
+ my $sib_name = $kid->sibling->name;
+ if ($sib_name =~ /^(pad|rv2)[ah]v$/
+ and not $kid->sibling->flags & OPf_REF)
+ {
+ # The @a in \(@a) isn't in ref context, but only when the
+ # parens are there.
+ return "\\(" . $self->pp_list($op->first) . ")";
+ } elsif ($sib_name eq 'entersub') {
+ my $text = $self->deparse($kid->sibling, 1);
+ # Always show parens for \(&func()), but only with -p otherwise
+ $text = "($text)" if $self->{'parens'}
+ or $kid->sibling->private & OPpENTERSUB_AMPER;
+ return "\\$text";
+ }
+ }
+ }
+ $self->pfixop($op, $cx, "\\", 20);
+}
+
+sub pp_srefgen { pp_refgen(@_) }
+
+sub pp_readline {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh>
+ return "<" . $self->deparse($kid, 1) . ">" if is_scalar($kid);
+ return $self->unop($op, $cx, "readline");
+}
+
+sub pp_rcatline {
+ my $self = shift;
+ my($op) = @_;
+ return "<" . $self->gv_name($self->gv_or_padgv($op)) . ">";
+}
+
+# Unary operators that can occur as pseudo-listops inside double quotes
+sub dq_unop {
+ my $self = shift;
+ my($op, $cx, $name, $prec, $flags) = (@_, 0, 0);
+ my $kid;
+ if ($op->flags & OPf_KIDS) {
+ $kid = $op->first;
+ # If there's more than one kid, the first is an ex-pushmark.
+ $kid = $kid->sibling if not null $kid->sibling;
+ return $self->maybe_parens_unop($name, $kid, $cx);
+ } else {
+ return $name . ($op->flags & OPf_SPECIAL ? "()" : "");
+ }
+}
+
+sub pp_ucfirst { dq_unop(@_, "ucfirst") }
+sub pp_lcfirst { dq_unop(@_, "lcfirst") }
+sub pp_uc { dq_unop(@_, "uc") }
+sub pp_lc { dq_unop(@_, "lc") }
+sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") }
+
+sub loopex {
+ my $self = shift;
+ my ($op, $cx, $name) = @_;
+ if (class($op) eq "PVOP") {
+ return "$name " . $op->pv;
+ } elsif (class($op) eq "OP") {
+ return $name;
+ } elsif (class($op) eq "UNOP") {
+ # Note -- loop exits are actually exempt from the
+ # looks-like-a-func rule, but a few extra parens won't hurt
+ return $self->maybe_parens_unop($name, $op->first, $cx);
+ }
+}
+
+sub pp_last { loopex(@_, "last") }
+sub pp_next { loopex(@_, "next") }
+sub pp_redo { loopex(@_, "redo") }
+sub pp_goto { loopex(@_, "goto") }
+sub pp_dump { loopex(@_, "dump") }
+
+sub ftst {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ if (class($op) eq "UNOP") {
+ # Genuine `-X' filetests are exempt from the LLAFR, but not
+ # l?stat(); for the sake of clarity, give'em all parens
+ return $self->maybe_parens_unop($name, $op->first, $cx);
+ } elsif (class($op) =~ /^(SV|PAD)OP$/) {
+ return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16);
+ } else { # I don't think baseop filetests ever survive ck_ftst, but...
+ return $name;
+ }
+}
+
+sub pp_lstat { ftst(@_, "lstat") }
+sub pp_stat { ftst(@_, "stat") }
+sub pp_ftrread { ftst(@_, "-R") }
+sub pp_ftrwrite { ftst(@_, "-W") }
+sub pp_ftrexec { ftst(@_, "-X") }
+sub pp_fteread { ftst(@_, "-r") }
+sub pp_ftewrite { ftst(@_, "-w") }
+sub pp_fteexec { ftst(@_, "-x") }
+sub pp_ftis { ftst(@_, "-e") }
+sub pp_fteowned { ftst(@_, "-O") }
+sub pp_ftrowned { ftst(@_, "-o") }
+sub pp_ftzero { ftst(@_, "-z") }
+sub pp_ftsize { ftst(@_, "-s") }
+sub pp_ftmtime { ftst(@_, "-M") }
+sub pp_ftatime { ftst(@_, "-A") }
+sub pp_ftctime { ftst(@_, "-C") }
+sub pp_ftsock { ftst(@_, "-S") }
+sub pp_ftchr { ftst(@_, "-c") }
+sub pp_ftblk { ftst(@_, "-b") }
+sub pp_ftfile { ftst(@_, "-f") }
+sub pp_ftdir { ftst(@_, "-d") }
+sub pp_ftpipe { ftst(@_, "-p") }
+sub pp_ftlink { ftst(@_, "-l") }
+sub pp_ftsuid { ftst(@_, "-u") }
+sub pp_ftsgid { ftst(@_, "-g") }
+sub pp_ftsvtx { ftst(@_, "-k") }
+sub pp_fttty { ftst(@_, "-t") }
+sub pp_fttext { ftst(@_, "-T") }
+sub pp_ftbinary { ftst(@_, "-B") }
+
+sub SWAP_CHILDREN () { 1 }
+sub ASSIGN () { 2 } # has OP= variant
+sub LIST_CONTEXT () { 4 } # Assignment is in list context
+
+my(%left, %right);
+
+sub assoc_class {
+ my $op = shift;
+ my $name = $op->name;
+ if ($name eq "concat" and $op->first->name eq "concat") {
+ # avoid spurious `=' -- see comment in pp_concat
+ return "concat";
+ }
+ if ($name eq "null" and class($op) eq "UNOP"
+ and $op->first->name =~ /^(and|x?or)$/
+ and null $op->first->sibling)
+ {
+ # Like all conditional constructs, OP_ANDs and OP_ORs are topped
+ # with a null that's used as the common end point of the two
+ # flows of control. For precedence purposes, ignore it.
+ # (COND_EXPRs have these too, but we don't bother with
+ # their associativity).
+ return assoc_class($op->first);
+ }
+ return $name . ($op->flags & OPf_STACKED ? "=" : "");
+}
+
+# Left associative operators, like `+', for which
+# $a + $b + $c is equivalent to ($a + $b) + $c
+
+BEGIN {
+ %left = ('multiply' => 19, 'i_multiply' => 19,
+ 'divide' => 19, 'i_divide' => 19,
+ 'modulo' => 19, 'i_modulo' => 19,
+ 'repeat' => 19,
+ 'add' => 18, 'i_add' => 18,
+ 'subtract' => 18, 'i_subtract' => 18,
+ 'concat' => 18,
+ 'left_shift' => 17, 'right_shift' => 17,
+ 'bit_and' => 13,
+ 'bit_or' => 12, 'bit_xor' => 12,
+ 'and' => 3,
+ 'or' => 2, 'xor' => 2,
+ );
+}
+
+sub deparse_binop_left {
+ my $self = shift;
+ my($op, $left, $prec) = @_;
+ if ($left{assoc_class($op)} && $left{assoc_class($left)}
+ and $left{assoc_class($op)} == $left{assoc_class($left)})
+ {
+ return $self->deparse($left, $prec - .00001);
+ } else {
+ return $self->deparse($left, $prec);
+ }
+}
+
+# Right associative operators, like `=', for which
+# $a = $b = $c is equivalent to $a = ($b = $c)
+
+BEGIN {
+ %right = ('pow' => 22,
+ 'sassign=' => 7, 'aassign=' => 7,
+ 'multiply=' => 7, 'i_multiply=' => 7,
+ 'divide=' => 7, 'i_divide=' => 7,
+ 'modulo=' => 7, 'i_modulo=' => 7,
+ 'repeat=' => 7,
+ 'add=' => 7, 'i_add=' => 7,
+ 'subtract=' => 7, 'i_subtract=' => 7,
+ 'concat=' => 7,
+ 'left_shift=' => 7, 'right_shift=' => 7,
+ 'bit_and=' => 7,
+ 'bit_or=' => 7, 'bit_xor=' => 7,
+ 'andassign' => 7,
+ 'orassign' => 7,
+ );
+}
+
+sub deparse_binop_right {
+ my $self = shift;
+ my($op, $right, $prec) = @_;
+ if ($right{assoc_class($op)} && $right{assoc_class($right)}
+ and $right{assoc_class($op)} == $right{assoc_class($right)})
+ {
+ return $self->deparse($right, $prec - .00001);
+ } else {
+ return $self->deparse($right, $prec);
+ }
+}
+
+sub binop {
+ my $self = shift;
+ my ($op, $cx, $opname, $prec, $flags) = (@_, 0);
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ if ($op->flags & OPf_STACKED && $flags & ASSIGN) {
+ $eq = "=";
+ $prec = 7;
+ }
+ if ($flags & SWAP_CHILDREN) {
+ ($left, $right) = ($right, $left);
+ }
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ $left = "($left)" if $flags & LIST_CONTEXT
+ && $left !~ /^(my|our|local|)[\@\(]/;
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left $opname$eq $right", $cx, $prec);
+}
+
+sub pp_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
+sub pp_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
+sub pp_subtract { maybe_targmy(@_, \&binop, "-",18, ASSIGN) }
+sub pp_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
+sub pp_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
+sub pp_i_add { maybe_targmy(@_, \&binop, "+", 18, ASSIGN) }
+sub pp_i_multiply { maybe_targmy(@_, \&binop, "*", 19, ASSIGN) }
+sub pp_i_subtract { maybe_targmy(@_, \&binop, "-", 18, ASSIGN) }
+sub pp_i_divide { maybe_targmy(@_, \&binop, "/", 19, ASSIGN) }
+sub pp_i_modulo { maybe_targmy(@_, \&binop, "%", 19, ASSIGN) }
+sub pp_pow { maybe_targmy(@_, \&binop, "**", 22, ASSIGN) }
+
+sub pp_left_shift { maybe_targmy(@_, \&binop, "<<", 17, ASSIGN) }
+sub pp_right_shift { maybe_targmy(@_, \&binop, ">>", 17, ASSIGN) }
+sub pp_bit_and { maybe_targmy(@_, \&binop, "&", 13, ASSIGN) }
+sub pp_bit_or { maybe_targmy(@_, \&binop, "|", 12, ASSIGN) }
+sub pp_bit_xor { maybe_targmy(@_, \&binop, "^", 12, ASSIGN) }
+
+sub pp_eq { binop(@_, "==", 14) }
+sub pp_ne { binop(@_, "!=", 14) }
+sub pp_lt { binop(@_, "<", 15) }
+sub pp_gt { binop(@_, ">", 15) }
+sub pp_ge { binop(@_, ">=", 15) }
+sub pp_le { binop(@_, "<=", 15) }
+sub pp_ncmp { binop(@_, "<=>", 14) }
+sub pp_i_eq { binop(@_, "==", 14) }
+sub pp_i_ne { binop(@_, "!=", 14) }
+sub pp_i_lt { binop(@_, "<", 15) }
+sub pp_i_gt { binop(@_, ">", 15) }
+sub pp_i_ge { binop(@_, ">=", 15) }
+sub pp_i_le { binop(@_, "<=", 15) }
+sub pp_i_ncmp { binop(@_, "<=>", 14) }
+
+sub pp_seq { binop(@_, "eq", 14) }
+sub pp_sne { binop(@_, "ne", 14) }
+sub pp_slt { binop(@_, "lt", 15) }
+sub pp_sgt { binop(@_, "gt", 15) }
+sub pp_sge { binop(@_, "ge", 15) }
+sub pp_sle { binop(@_, "le", 15) }
+sub pp_scmp { binop(@_, "cmp", 14) }
+
+sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
+sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
+
+# `.' is special because concats-of-concats are optimized to save copying
+# by making all but the first concat stacked. The effect is as if the
+# programmer had written `($a . $b) .= $c', except legal.
+sub pp_concat { maybe_targmy(@_, \&real_concat) }
+sub real_concat {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ my $prec = 18;
+ if ($op->flags & OPf_STACKED and $op->first->name ne "concat") {
+ $eq = "=";
+ $prec = 7;
+ }
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left .$eq $right", $cx, $prec);
+}
+
+# `x' is weird when the left arg is a list
+sub pp_repeat {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $left = $op->first;
+ my $right = $op->last;
+ my $eq = "";
+ my $prec = 19;
+ if ($op->flags & OPf_STACKED) {
+ $eq = "=";
+ $prec = 7;
+ }
+ if (null($right)) { # list repeat; count is inside left-side ex-list
+ my $kid = $left->first->sibling; # skip pushmark
+ my @exprs;
+ for (; !null($kid->sibling); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ $right = $kid;
+ $left = "(" . join(", ", @exprs). ")";
+ } else {
+ $left = $self->deparse_binop_left($op, $left, $prec);
+ }
+ $right = $self->deparse_binop_right($op, $right, $prec);
+ return $self->maybe_parens("$left x$eq $right", $cx, $prec);
+}
+
+sub range {
+ my $self = shift;
+ my ($op, $cx, $type) = @_;
+ my $left = $op->first;
+ my $right = $left->sibling;
+ $left = $self->deparse($left, 9);
+ $right = $self->deparse($right, 9);
+ return $self->maybe_parens("$left $type $right", $cx, 9);
+}
+
+sub pp_flop {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $flip = $op->first;
+ my $type = ($flip->flags & OPf_SPECIAL) ? "..." : "..";
+ return $self->range($flip->first, $cx, $type);
+}
+
+# one-line while/until is handled in pp_leave
+
+sub logop {
+ my $self = shift;
+ my ($op, $cx, $lowop, $lowprec, $highop, $highprec, $blockname) = @_;
+ my $left = $op->first;
+ my $right = $op->first->sibling;
+ if ($cx < 1 and is_scope($right) and $blockname
+ and $self->{'expand'} < 7)
+ { # if ($a) {$b}
+ $left = $self->deparse($left, 1);
+ $right = $self->deparse($right, 0);
+ return "$blockname ($left) {\n\t$right\n\b}\cK";
+ } elsif ($cx < 1 and $blockname and not $self->{'parens'}
+ and $self->{'expand'} < 7) { # $b if $a
+ $right = $self->deparse($right, 1);
+ $left = $self->deparse($left, 1);
+ return "$right $blockname $left";
+ } elsif ($cx > $lowprec and $highop) { # $a && $b
+ $left = $self->deparse_binop_left($op, $left, $highprec);
+ $right = $self->deparse_binop_right($op, $right, $highprec);
+ return $self->maybe_parens("$left $highop $right", $cx, $highprec);
+ } else { # $a and $b
+ $left = $self->deparse_binop_left($op, $left, $lowprec);
+ $right = $self->deparse_binop_right($op, $right, $lowprec);
+ return $self->maybe_parens("$left $lowop $right", $cx, $lowprec);
+ }
+}
+
+sub pp_and { logop(@_, "and", 3, "&&", 11, "if") }
+sub pp_or { logop(@_, "or", 2, "||", 10, "unless") }
+sub pp_dor { logop(@_, "err", 2, "//", 10, "") }
+
+# xor is syntactically a logop, but it's really a binop (contrary to
+# old versions of opcode.pl). Syntax is what matters here.
+sub pp_xor { logop(@_, "xor", 2, "", 0, "") }
+
+sub logassignop {
+ my $self = shift;
+ my ($op, $cx, $opname) = @_;
+ my $left = $op->first;
+ my $right = $op->first->sibling->first; # skip sassign
+ $left = $self->deparse($left, 7);
+ $right = $self->deparse($right, 7);
+ return $self->maybe_parens("$left $opname $right", $cx, 7);
+}
+
+sub pp_andassign { logassignop(@_, "&&=") }
+sub pp_orassign { logassignop(@_, "||=") }
+sub pp_dorassign { logassignop(@_, "//=") }
+
+sub listop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my(@exprs);
+ my $parens = ($cx >= 5) || $self->{'parens'};
+ my $kid = $op->first->sibling;
+ return $name if null $kid;
+ my $first;
+ $name = "socketpair" if $name eq "sockpair";
+ my $proto = prototype("CORE::$name");
+ if (defined $proto
+ && $proto =~ /^;?\*/
+ && $kid->name eq "rv2gv") {
+ $first = $self->deparse($kid->first, 6);
+ }
+ else {
+ $first = $self->deparse($kid, 6);
+ }
+ if ($name eq "chmod" && $first =~ /^\d+$/) {
+ $first = sprintf("%#o", $first);
+ }
+ $first = "+$first" if not $parens and substr($first, 0, 1) eq "(";
+ push @exprs, $first;
+ $kid = $kid->sibling;
+ if (defined $proto && $proto =~ /^\*\*/ && $kid->name eq "rv2gv") {
+ push @exprs, $self->deparse($kid->first, 6);
+ $kid = $kid->sibling;
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ if ($parens) {
+ return "$name(" . join(", ", @exprs) . ")";
+ } else {
+ return "$name " . join(", ", @exprs);
+ }
+}
+
+sub pp_bless { listop(@_, "bless") }
+sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") }
+sub pp_substr { maybe_local(@_, listop(@_, "substr")) }
+sub pp_vec { maybe_local(@_, listop(@_, "vec")) }
+sub pp_index { maybe_targmy(@_, \&listop, "index") }
+sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") }
+sub pp_sprintf { maybe_targmy(@_, \&listop, "sprintf") }
+sub pp_formline { listop(@_, "formline") } # see also deparse_format
+sub pp_crypt { maybe_targmy(@_, \&listop, "crypt") }
+sub pp_unpack { listop(@_, "unpack") }
+sub pp_pack { listop(@_, "pack") }
+sub pp_join { maybe_targmy(@_, \&listop, "join") }
+sub pp_splice { listop(@_, "splice") }
+sub pp_push { maybe_targmy(@_, \&listop, "push") }
+sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") }
+sub pp_reverse { listop(@_, "reverse") }
+sub pp_warn { listop(@_, "warn") }
+sub pp_die { listop(@_, "die") }
+# Actually, return is exempt from the LLAFR (see examples in this very
+# module!), but for consistency's sake, ignore that fact
+sub pp_return { listop(@_, "return") }
+sub pp_open { listop(@_, "open") }
+sub pp_pipe_op { listop(@_, "pipe") }
+sub pp_tie { listop(@_, "tie") }
+sub pp_binmode { listop(@_, "binmode") }
+sub pp_dbmopen { listop(@_, "dbmopen") }
+sub pp_sselect { listop(@_, "select") }
+sub pp_select { listop(@_, "select") }
+sub pp_read { listop(@_, "read") }
+sub pp_sysopen { listop(@_, "sysopen") }
+sub pp_sysseek { listop(@_, "sysseek") }
+sub pp_sysread { listop(@_, "sysread") }
+sub pp_syswrite { listop(@_, "syswrite") }
+sub pp_send { listop(@_, "send") }
+sub pp_recv { listop(@_, "recv") }
+sub pp_seek { listop(@_, "seek") }
+sub pp_fcntl { listop(@_, "fcntl") }
+sub pp_ioctl { listop(@_, "ioctl") }
+sub pp_flock { maybe_targmy(@_, \&listop, "flock") }
+sub pp_socket { listop(@_, "socket") }
+sub pp_sockpair { listop(@_, "sockpair") }
+sub pp_bind { listop(@_, "bind") }
+sub pp_connect { listop(@_, "connect") }
+sub pp_listen { listop(@_, "listen") }
+sub pp_accept { listop(@_, "accept") }
+sub pp_shutdown { listop(@_, "shutdown") }
+sub pp_gsockopt { listop(@_, "getsockopt") }
+sub pp_ssockopt { listop(@_, "setsockopt") }
+sub pp_chown { maybe_targmy(@_, \&listop, "chown") }
+sub pp_unlink { maybe_targmy(@_, \&listop, "unlink") }
+sub pp_chmod { maybe_targmy(@_, \&listop, "chmod") }
+sub pp_utime { maybe_targmy(@_, \&listop, "utime") }
+sub pp_rename { maybe_targmy(@_, \&listop, "rename") }
+sub pp_link { maybe_targmy(@_, \&listop, "link") }
+sub pp_symlink { maybe_targmy(@_, \&listop, "symlink") }
+sub pp_mkdir { maybe_targmy(@_, \&listop, "mkdir") }
+sub pp_open_dir { listop(@_, "opendir") }
+sub pp_seekdir { listop(@_, "seekdir") }
+sub pp_waitpid { maybe_targmy(@_, \&listop, "waitpid") }
+sub pp_system { maybe_targmy(@_, \&listop, "system") }
+sub pp_exec { maybe_targmy(@_, \&listop, "exec") }
+sub pp_kill { maybe_targmy(@_, \&listop, "kill") }
+sub pp_setpgrp { maybe_targmy(@_, \&listop, "setpgrp") }
+sub pp_getpriority { maybe_targmy(@_, \&listop, "getpriority") }
+sub pp_setpriority { maybe_targmy(@_, \&listop, "setpriority") }
+sub pp_shmget { listop(@_, "shmget") }
+sub pp_shmctl { listop(@_, "shmctl") }
+sub pp_shmread { listop(@_, "shmread") }
+sub pp_shmwrite { listop(@_, "shmwrite") }
+sub pp_msgget { listop(@_, "msgget") }
+sub pp_msgctl { listop(@_, "msgctl") }
+sub pp_msgsnd { listop(@_, "msgsnd") }
+sub pp_msgrcv { listop(@_, "msgrcv") }
+sub pp_semget { listop(@_, "semget") }
+sub pp_semctl { listop(@_, "semctl") }
+sub pp_semop { listop(@_, "semop") }
+sub pp_ghbyaddr { listop(@_, "gethostbyaddr") }
+sub pp_gnbyaddr { listop(@_, "getnetbyaddr") }
+sub pp_gpbynumber { listop(@_, "getprotobynumber") }
+sub pp_gsbyname { listop(@_, "getservbyname") }
+sub pp_gsbyport { listop(@_, "getservbyport") }
+sub pp_syscall { listop(@_, "syscall") }
+
+sub pp_glob {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $text = $self->dq($op->first->sibling); # skip pushmark
+ if ($text =~ /^\$?(\w|::|\`)+$/ # could look like a readline
+ or $text =~ /[<>]/) {
+ return 'glob(' . single_delim('qq', '"', $text) . ')';
+ } else {
+ return '<' . $text . '>';
+ }
+}
+
+# Truncate is special because OPf_SPECIAL makes a bareword first arg
+# be a filehandle. This could probably be better fixed in the core
+# by moving the GV lookup into ck_truc.
+
+sub pp_truncate {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my(@exprs);
+ my $parens = ($cx >= 5) || $self->{'parens'};
+ my $kid = $op->first->sibling;
+ my $fh;
+ if ($op->flags & OPf_SPECIAL) {
+ # $kid is an OP_CONST
+ $fh = $self->const_sv($kid)->PV;
+ } else {
+ $fh = $self->deparse($kid, 6);
+ $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "(";
+ }
+ my $len = $self->deparse($kid->sibling, 6);
+ if ($parens) {
+ return "truncate($fh, $len)";
+ } else {
+ return "truncate $fh, $len";
+ }
+}
+
+sub indirop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first->sibling;
+ my $indir = "";
+ if ($op->flags & OPf_STACKED) {
+ $indir = $kid;
+ $indir = $indir->first; # skip rv2gv
+ if (is_scope($indir)) {
+ $indir = "{" . $self->deparse($indir, 0) . "}";
+ $indir = "{;}" if $indir eq "{}";
+ } elsif ($indir->name eq "const" && $indir->private & OPpCONST_BARE) {
+ $indir = $self->const_sv($indir)->PV;
+ } else {
+ $indir = $self->deparse($indir, 24);
+ }
+ $indir = $indir . " ";
+ $kid = $kid->sibling;
+ }
+ if ($name eq "sort" && $op->private & (OPpSORT_NUMERIC | OPpSORT_INTEGER)) {
+ $indir = ($op->private & OPpSORT_DESCEND) ? '{$b <=> $a} '
+ : '{$a <=> $b} ';
+ }
+ elsif ($name eq "sort" && $op->private & OPpSORT_DESCEND) {
+ $indir = '{$b cmp $a} ';
+ }
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr;
+ }
+ my $name2 = $name;
+ if ($name eq "sort" && $op->private & OPpSORT_REVERSE) {
+ $name2 = 'reverse sort';
+ }
+ if ($name eq "sort" && ($op->private & OPpSORT_INPLACE)) {
+ return "$exprs[0] = $name2 $indir $exprs[0]";
+ }
+
+ my $args = $indir . join(", ", @exprs);
+ if ($indir ne "" and $name eq "sort") {
+ # We don't want to say "sort(f 1, 2, 3)", since perl -w will
+ # give bareword warnings in that case. Therefore if context
+ # requires, we'll put parens around the outside "(sort f 1, 2,
+ # 3)". Unfortunately, we'll currently think the parens are
+ # necessary more often that they really are, because we don't
+ # distinguish which side of an assignment we're on.
+ if ($cx >= 5) {
+ return "($name2 $args)";
+ } else {
+ return "$name2 $args";
+ }
+ } else {
+ return $self->maybe_parens_func($name2, $args, $cx, 5);
+ }
+
+}
+
+sub pp_prtf { indirop(@_, "printf") }
+sub pp_print { indirop(@_, "print") }
+sub pp_sort { indirop(@_, "sort") }
+
+sub mapop {
+ my $self = shift;
+ my($op, $cx, $name) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first; # this is the (map|grep)start
+ $kid = $kid->first->sibling; # skip a pushmark
+ my $code = $kid->first; # skip a null
+ if (is_scope $code) {
+ $code = "{" . $self->deparse($code, 0) . "} ";
+ } else {
+ $code = $self->deparse($code, 24) . ", ";
+ }
+ $kid = $kid->sibling;
+ for (; !null($kid); $kid = $kid->sibling) {
+ $expr = $self->deparse($kid, 6);
+ push @exprs, $expr if defined $expr;
+ }
+ return $self->maybe_parens_func($name, $code . join(", ", @exprs), $cx, 5);
+}
+
+sub pp_mapwhile { mapop(@_, "map") }
+sub pp_grepwhile { mapop(@_, "grep") }
+sub pp_mapstart { baseop(@_, "map") }
+sub pp_grepstart { baseop(@_, "grep") }
+
+sub pp_list {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($expr, @exprs);
+ my $kid = $op->first->sibling; # skip pushmark
+ my $lop;
+ my $local = "either"; # could be local(...), my(...) or our(...)
+ for ($lop = $kid; !null($lop); $lop = $lop->sibling) {
+ # This assumes that no other private flags equal 128, and that
+ # OPs that store things other than flags in their op_private,
+ # like OP_AELEMFAST, won't be immediate children of a list.
+ #
+ # OP_ENTERSUB can break this logic, so check for it.
+ # I suspect that open and exit can too.
+
+ if (!($lop->private & (OPpLVAL_INTRO|OPpOUR_INTRO)
+ or $lop->name eq "undef")
+ or $lop->name eq "entersub"
+ or $lop->name eq "exit"
+ or $lop->name eq "open")
+ {
+ $local = ""; # or not
+ last;
+ }
+ if ($lop->name =~ /^pad[ash]v$/) { # my()
+ ($local = "", last) if $local eq "local" || $local eq "our";
+ $local = "my";
+ } elsif ($lop->name =~ /^(gv|rv2)[ash]v$/
+ && $lop->private & OPpOUR_INTRO
+ or $lop->name eq "null" && $lop->first->name eq "gvsv"
+ && $lop->first->private & OPpOUR_INTRO) { # our()
+ ($local = "", last) if $local eq "my" || $local eq "local";
+ $local = "our";
+ } elsif ($lop->name ne "undef"
+ # specifically avoid the "reverse sort" optimisation,
+ # where "reverse" is nullified
+ && !($lop->name eq 'sort' && ($lop->flags & OPpSORT_REVERSE)))
+ {
+ # local()
+ ($local = "", last) if $local eq "my" || $local eq "our";
+ $local = "local";
+ }
+ }
+ $local = "" if $local eq "either"; # no point if it's all undefs
+ return $self->deparse($kid, $cx) if null $kid->sibling and not $local;
+ for (; !null($kid); $kid = $kid->sibling) {
+ if ($local) {
+ if (class($kid) eq "UNOP" and $kid->first->name eq "gvsv") {
+ $lop = $kid->first;
+ } else {
+ $lop = $kid;
+ }
+ $self->{'avoid_local'}{$$lop}++;
+ $expr = $self->deparse($kid, 6);
+ delete $self->{'avoid_local'}{$$lop};
+ } else {
+ $expr = $self->deparse($kid, 6);
+ }
+ push @exprs, $expr;
+ }
+ if ($local) {
+ return "$local(" . join(", ", @exprs) . ")";
+ } else {
+ return $self->maybe_parens( join(", ", @exprs), $cx, 6);
+ }
+}
+
+sub is_ifelse_cont {
+ my $op = shift;
+ return ($op->name eq "null" and class($op) eq "UNOP"
+ and $op->first->name =~ /^(and|cond_expr)$/
+ and is_scope($op->first->first->sibling));
+}
+
+sub pp_cond_expr {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $cond = $op->first;
+ my $true = $cond->sibling;
+ my $false = $true->sibling;
+ my $cuddle = $self->{'cuddle'};
+ unless ($cx < 1 and (is_scope($true) and $true->name ne "null") and
+ (is_scope($false) || is_ifelse_cont($false))
+ and $self->{'expand'} < 7) {
+ $cond = $self->deparse($cond, 8);
+ $true = $self->deparse($true, 8);
+ $false = $self->deparse($false, 8);
+ return $self->maybe_parens("$cond ? $true : $false", $cx, 8);
+ }
+
+ $cond = $self->deparse($cond, 1);
+ $true = $self->deparse($true, 0);
+ my $head = "if ($cond) {\n\t$true\n\b}";
+ my @elsifs;
+ while (!null($false) and is_ifelse_cont($false)) {
+ my $newop = $false->first;
+ my $newcond = $newop->first;
+ my $newtrue = $newcond->sibling;
+ $false = $newtrue->sibling; # last in chain is OP_AND => no else
+ $newcond = $self->deparse($newcond, 1);
+ $newtrue = $self->deparse($newtrue, 0);
+ push @elsifs, "elsif ($newcond) {\n\t$newtrue\n\b}";
+ }
+ if (!null($false)) {
+ $false = $cuddle . "else {\n\t" .
+ $self->deparse($false, 0) . "\n\b}\cK";
+ } else {
+ $false = "\cK";
+ }
+ return $head . join($cuddle, "", @elsifs) . $false;
+}
+
+sub loop_common {
+ my $self = shift;
+ my($op, $cx, $init) = @_;
+ my $enter = $op->first;
+ my $kid = $enter->sibling;
+ local(@$self{qw'curstash warnings hints'})
+ = @$self{qw'curstash warnings hints'};
+ my $head = "";
+ my $bare = 0;
+ my $body;
+ my $cond = undef;
+ if ($kid->name eq "lineseq") { # bare or infinite loop
+ if ($kid->last->name eq "unstack") { # infinite
+ $head = "while (1) "; # Can't use for(;;) if there's a continue
+ $cond = "";
+ } else {
+ $bare = 1;
+ }
+ $body = $kid;
+ } elsif ($enter->name eq "enteriter") { # foreach
+ my $ary = $enter->first->sibling; # first was pushmark
+ my $var = $ary->sibling;
+ if ($ary->name eq 'null' and $enter->private & OPpITER_REVERSED) {
+ # "reverse" was optimised away
+ $ary = listop($self, $ary->first->sibling, 1, 'reverse');
+ } elsif ($enter->flags & OPf_STACKED
+ and not null $ary->first->sibling->sibling)
+ {
+ $ary = $self->deparse($ary->first->sibling, 9) . " .. " .
+ $self->deparse($ary->first->sibling->sibling, 9);
+ } else {
+ $ary = $self->deparse($ary, 1);
+ }
+ if (null $var) {
+ if ($enter->flags & OPf_SPECIAL) { # thread special var
+ $var = $self->pp_threadsv($enter, 1);
+ } else { # regular my() variable
+ $var = $self->pp_padsv($enter, 1);
+ }
+ } elsif ($var->name eq "rv2gv") {
+ $var = $self->pp_rv2sv($var, 1);
+ if ($enter->private & OPpOUR_INTRO) {
+ # our declarations don't have package names
+ $var =~ s/^(.).*::/$1/;
+ $var = "our $var";
+ }
+ } elsif ($var->name eq "gv") {
+ $var = "\$" . $self->deparse($var, 1);
+ }
+ $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER
+ if (!is_state $body->first and $body->first->name ne "stub") {
+ confess unless $var eq '$_';
+ $body = $body->first;
+ return $self->deparse($body, 2) . " foreach ($ary)";
+ }
+ $head = "foreach $var ($ary) ";
+ } elsif ($kid->name eq "null") { # while/until
+ $kid = $kid->first;
+ my $name = {"and" => "while", "or" => "until"}->{$kid->name};
+ $cond = $self->deparse($kid->first, 1);
+ $head = "$name ($cond) ";
+ $body = $kid->first->sibling;
+ } elsif ($kid->name eq "stub") { # bare and empty
+ return "{;}"; # {} could be a hashref
+ }
+ # If there isn't a continue block, then the next pointer for the loop
+ # will point to the unstack, which is kid's last child, except
+ # in a bare loop, when it will point to the leaveloop. When neither of
+ # these conditions hold, then the second-to-last child is the continue
+ # block (or the last in a bare loop).
+ my $cont_start = $enter->nextop;
+ my $cont;
+ if ($$cont_start != $$op && ${$cont_start} != ${$body->last}) {
+ if ($bare) {
+ $cont = $body->last;
+ } else {
+ $cont = $body->first;
+ while (!null($cont->sibling->sibling)) {
+ $cont = $cont->sibling;
+ }
+ }
+ my $state = $body->first;
+ my $cuddle = $self->{'cuddle'};
+ my @states;
+ for (; $$state != $$cont; $state = $state->sibling) {
+ push @states, $state;
+ }
+ $body = $self->lineseq(undef, @states);
+ if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) {
+ $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") ";
+ $cont = "\cK";
+ } else {
+ $cont = $cuddle . "continue {\n\t" .
+ $self->deparse($cont, 0) . "\n\b}\cK";
+ }
+ } else {
+ return "" if !defined $body;
+ if (length $init) {
+ $head = "for ($init; $cond;) ";
+ }
+ $cont = "\cK";
+ $body = $self->deparse($body, 0);
+ }
+ $body =~ s/;?$/;\n/;
+
+ return $head . "{\n\t" . $body . "\b}" . $cont;
+}
+
+sub pp_leaveloop { loop_common(@_, "") }
+
+sub for_loop {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $init = $self->deparse($op, 1);
+ return $self->loop_common($op->sibling->first->sibling, $cx, $init);
+}
+
+sub pp_leavetry {
+ my $self = shift;
+ return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}";
+}
+
+BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" }
+BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" }
+BEGIN { eval "sub OP_RV2SV () {" . opnumber("rv2sv") . "}" }
+BEGIN { eval "sub OP_LIST () {" . opnumber("list") . "}" }
+
+sub pp_null {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if (class($op) eq "OP") {
+ # old value is lost
+ return $self->{'ex_const'} if $op->targ == OP_CONST;
+ } elsif ($op->first->name eq "pushmark") {
+ return $self->pp_list($op, $cx);
+ } elsif ($op->first->name eq "enter") {
+ return $self->pp_leave($op, $cx);
+ } elsif ($op->targ == OP_STRINGIFY) {
+ return $self->dquote($op, $cx);
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "readline" and
+ $op->first->sibling->flags & OPf_STACKED) {
+ return $self->maybe_parens($self->deparse($op->first, 7) . " = "
+ . $self->deparse($op->first->sibling, 7),
+ $cx, 7);
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "trans" and
+ $op->first->sibling->flags & OPf_STACKED) {
+ return $self->maybe_parens($self->deparse($op->first, 20) . " =~ "
+ . $self->deparse($op->first->sibling, 20),
+ $cx, 20);
+ } elsif ($op->flags & OPf_SPECIAL && $cx < 1 && !$op->targ) {
+ return "do {\n\t". $self->deparse($op->first, $cx) ."\n\b};";
+ } elsif (!null($op->first->sibling) and
+ $op->first->sibling->name eq "null" and
+ class($op->first->sibling) eq "UNOP" and
+ $op->first->sibling->first->flags & OPf_STACKED and
+ $op->first->sibling->first->name eq "rcatline") {
+ return $self->maybe_parens($self->deparse($op->first, 18) . " .= "
+ . $self->deparse($op->first->sibling, 18),
+ $cx, 18);
+ } else {
+ return $self->deparse($op->first, $cx);
+ }
+}
+
+sub padname {
+ my $self = shift;
+ my $targ = shift;
+ return $self->padname_sv($targ)->PVX;
+}
+
+sub padany {
+ my $self = shift;
+ my $op = shift;
+ return substr($self->padname($op->targ), 1); # skip $/@/%
+}
+
+sub pp_padsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->maybe_my($op, $cx, $self->padname($op->targ));
+}
+
+sub pp_padav { pp_padsv(@_) }
+sub pp_padhv { pp_padsv(@_) }
+
+my @threadsv_names;
+
+BEGIN {
+ @threadsv_names = ("_", "1", "2", "3", "4", "5", "6", "7", "8", "9",
+ "&", "`", "'", "+", "/", ".", ",", "\\", '"', ";",
+ "^", "-", "%", "=", "|", "~", ":", "^A", "^E",
+ "!", "@");
+}
+
+sub pp_threadsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->maybe_local($op, $cx, "\$" . $threadsv_names[$op->targ]);
+}
+
+sub gv_or_padgv {
+ my $self = shift;
+ my $op = shift;
+ if (class($op) eq "PADOP") {
+ return $self->padval($op->padix);
+ } else { # class($op) eq "SVOP"
+ return $op->gv;
+ }
+}
+
+sub pp_gvsv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $gv = $self->gv_or_padgv($op);
+ return $self->maybe_local($op, $cx, $self->stash_variable("\$",
+ $self->gv_name($gv)));
+}
+
+sub pp_gv {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $gv = $self->gv_or_padgv($op);
+ return $self->gv_name($gv);
+}
+
+sub pp_aelemfast {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $name;
+ if ($op->flags & OPf_SPECIAL) { # optimised PADAV
+ $name = $self->padname($op->targ);
+ $name =~ s/^@/\$/;
+ }
+ else {
+ my $gv = $self->gv_or_padgv($op);
+ $name = $self->gv_name($gv);
+ $name = $self->{'curstash'}."::$name"
+ if $name !~ /::/ && $self->lex_in_scope('@'.$name);
+ $name = '$' . $name;
+ }
+
+ return $name . "[" . ($op->private + $self->{'arybase'}) . "]";
+}
+
+sub rv2x {
+ my $self = shift;
+ my($op, $cx, $type) = @_;
+
+ if (class($op) eq 'NULL' || !$op->can("first")) {
+ carp("Unexpected op in pp_rv2x");
+ return 'XXX';
+ }
+ my $kid = $op->first;
+ if ($kid->name eq "gv") {
+ return $self->stash_variable($type, $self->deparse($kid, 0));
+ } elsif (is_scalar $kid) {
+ my $str = $self->deparse($kid, 0);
+ if ($str =~ /^\$([^\w\d])\z/) {
+ # "$$+" isn't a legal way to write the scalar dereference
+ # of $+, since the lexer can't tell you aren't trying to
+ # do something like "$$ + 1" to get one more than your
+ # PID. Either "${$+}" or "$${+}" are workable
+ # disambiguations, but if the programmer did the former,
+ # they'd be in the "else" clause below rather than here.
+ # It's not clear if this should somehow be unified with
+ # the code in dq and re_dq that also adds lexer
+ # disambiguation braces.
+ $str = '$' . "{$1}"; #'
+ }
+ return $type . $str;
+ } else {
+ return $type . "{" . $self->deparse($kid, 0) . "}";
+ }
+}
+
+sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) }
+sub pp_rv2hv { maybe_local(@_, rv2x(@_, "%")) }
+sub pp_rv2gv { maybe_local(@_, rv2x(@_, "*")) }
+
+# skip rv2av
+sub pp_av2arylen {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->first->name eq "padav") {
+ return $self->maybe_local($op, $cx, '$#' . $self->padany($op->first));
+ } else {
+ return $self->maybe_local($op, $cx,
+ $self->rv2x($op->first, $cx, '$#'));
+ }
+}
+
+# skip down to the old, ex-rv2cv
+sub pp_rv2cv {
+ my ($self, $op, $cx) = @_;
+ if (!null($op->first) && $op->first->name eq 'null' &&
+ $op->first->targ eq OP_LIST)
+ {
+ return $self->rv2x($op->first->first->sibling, $cx, "&")
+ }
+ else {
+ return $self->rv2x($op, $cx, "")
+ }
+}
+
+sub list_const {
+ my $self = shift;
+ my($cx, @list) = @_;
+ my @a = map $self->const($_, 6), @list;
+ if (@a == 0) {
+ return "()";
+ } elsif (@a == 1) {
+ return $a[0];
+ } elsif ( @a > 2 and !grep(!/^-?\d+$/, @a)) {
+ # collapse (-1,0,1,2) into (-1..2)
+ my ($s, $e) = @a[0,-1];
+ my $i = $s;
+ return $self->maybe_parens("$s..$e", $cx, 9)
+ unless grep $i++ != $_, @a;
+ }
+ return $self->maybe_parens(join(", ", @a), $cx, 6);
+}
+
+sub pp_rv2av {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ if ($kid->name eq "const") { # constant list
+ my $av = $self->const_sv($kid);
+ return $self->list_const($cx, $av->ARRAY);
+ } else {
+ return $self->maybe_local($op, $cx, $self->rv2x($op, $cx, "\@"));
+ }
+ }
+
+sub is_subscriptable {
+ my $op = shift;
+ if ($op->name =~ /^[ahg]elem/) {
+ return 1;
+ } elsif ($op->name eq "entersub") {
+ my $kid = $op->first;
+ return 0 unless null $kid->sibling;
+ $kid = $kid->first;
+ $kid = $kid->sibling until null $kid->sibling;
+ return 0 if is_scope($kid);
+ $kid = $kid->first;
+ return 0 if $kid->name eq "gv";
+ return 0 if is_scalar($kid);
+ return is_subscriptable($kid);
+ } else {
+ return 0;
+ }
+}
+
+sub elem {
+ my $self = shift;
+ my ($op, $cx, $left, $right, $padname) = @_;
+ my($array, $idx) = ($op->first, $op->first->sibling);
+ unless ($array->name eq $padname) { # Maybe this has been fixed
+ $array = $array->first; # skip rv2av (or ex-rv2av in _53+)
+ }
+ if ($array->name eq $padname) {
+ $array = $self->padany($array);
+ } elsif (is_scope($array)) { # ${expr}[0]
+ $array = "{" . $self->deparse($array, 0) . "}";
+ } elsif ($array->name eq "gv") {
+ $array = $self->gv_name($self->gv_or_padgv($array));
+ if ($array !~ /::/) {
+ my $prefix = ($left eq '[' ? '@' : '%');
+ $array = $self->{curstash}.'::'.$array
+ if $self->lex_in_scope($prefix . $array);
+ }
+ } elsif (is_scalar $array) { # $x[0], $$x[0], ...
+ $array = $self->deparse($array, 24);
+ } else {
+ # $x[20][3]{hi} or expr->[20]
+ my $arrow = is_subscriptable($array) ? "" : "->";
+ return $self->deparse($array, 24) . $arrow .
+ $left . $self->deparse($idx, 1) . $right;
+ }
+ $idx = $self->deparse($idx, 1);
+
+ # Outer parens in an array index will confuse perl
+ # if we're interpolating in a regular expression, i.e.
+ # /$x$foo[(-1)]/ is *not* the same as /$x$foo[-1]/
+ #
+ # If $self->{parens}, then an initial '(' will
+ # definitely be paired with a final ')'. If
+ # !$self->{parens}, the misleading parens won't
+ # have been added in the first place.
+ #
+ # [You might think that we could get "(...)...(...)"
+ # where the initial and final parens do not match
+ # each other. But we can't, because the above would
+ # only happen if there's an infix binop between the
+ # two pairs of parens, and *that* means that the whole
+ # expression would be parenthesized as well.]
+ #
+ $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
+
+ # Hash-element braces will autoquote a bareword inside themselves.
+ # We need to make sure that C<$hash{warn()}> doesn't come out as
+ # C<$hash{warn}>, which has a quite different meaning. Currently
+ # B::Deparse will always quote strings, even if the string was a
+ # bareword in the original (i.e. the OPpCONST_BARE flag is ignored
+ # for constant strings.) So we can cheat slightly here - if we see
+ # a bareword, we know that it is supposed to be a function call.
+ #
+ $idx =~ s/^([A-Za-z_]\w*)$/$1()/;
+
+ return "\$" . $array . $left . $idx . $right;
+}
+
+sub pp_aelem { maybe_local(@_, elem(@_, "[", "]", "padav")) }
+sub pp_helem { maybe_local(@_, elem(@_, "{", "}", "padhv")) }
+
+sub pp_gelem {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($glob, $part) = ($op->first, $op->last);
+ $glob = $glob->first; # skip rv2gv
+ $glob = $glob->first if $glob->name eq "rv2gv"; # this one's a bug
+ my $scope = is_scope($glob);
+ $glob = $self->deparse($glob, 0);
+ $part = $self->deparse($part, 1);
+ return "*" . ($scope ? "{$glob}" : $glob) . "{$part}";
+}
+
+sub slice {
+ my $self = shift;
+ my ($op, $cx, $left, $right, $regname, $padname) = @_;
+ my $last;
+ my(@elems, $kid, $array, $list);
+ if (class($op) eq "LISTOP") {
+ $last = $op->last;
+ } else { # ex-hslice inside delete()
+ for ($kid = $op->first; !null $kid->sibling; $kid = $kid->sibling) {}
+ $last = $kid;
+ }
+ $array = $last;
+ $array = $array->first
+ if $array->name eq $regname or $array->name eq "null";
+ if (is_scope($array)) {
+ $array = "{" . $self->deparse($array, 0) . "}";
+ } elsif ($array->name eq $padname) {
+ $array = $self->padany($array);
+ } else {
+ $array = $self->deparse($array, 24);
+ }
+ $kid = $op->first->sibling; # skip pushmark
+ if ($kid->name eq "list") {
+ $kid = $kid->first->sibling; # skip list, pushmark
+ for (; !null $kid; $kid = $kid->sibling) {
+ push @elems, $self->deparse($kid, 6);
+ }
+ $list = join(", ", @elems);
+ } else {
+ $list = $self->deparse($kid, 1);
+ }
+ return "\@" . $array . $left . $list . $right;
+}
+
+sub pp_aslice { maybe_local(@_, slice(@_, "[", "]", "rv2av", "padav")) }
+sub pp_hslice { maybe_local(@_, slice(@_, "{", "}", "rv2hv", "padhv")) }
+
+sub pp_lslice {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $idx = $op->first;
+ my $list = $op->last;
+ my(@elems, $kid);
+ $list = $self->deparse($list, 1);
+ $idx = $self->deparse($idx, 1);
+ return "($list)" . "[$idx]";
+}
+
+sub want_scalar {
+ my $op = shift;
+ return ($op->flags & OPf_WANT) == OPf_WANT_SCALAR;
+}
+
+sub want_list {
+ my $op = shift;
+ return ($op->flags & OPf_WANT) == OPf_WANT_LIST;
+}
+
+sub method {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first->sibling; # skip pushmark
+ my($meth, $obj, @exprs);
+ if ($kid->name eq "list" and want_list $kid) {
+ # When an indirect object isn't a bareword but the args are in
+ # parens, the parens aren't part of the method syntax (the LLAFR
+ # doesn't apply), but they make a list with OPf_PARENS set that
+ # doesn't get flattened by the append_elem that adds the method,
+ # making a (object, arg1, arg2, ...) list where the object
+ # usually is. This can be distinguished from
+ # `($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an
+ # object) because in the later the list is in scalar context
+ # as the left side of -> always is, while in the former
+ # the list is in list context as method arguments always are.
+ # (Good thing there aren't method prototypes!)
+ $meth = $kid->sibling;
+ $kid = $kid->first->sibling; # skip pushmark
+ $obj = $kid;
+ $kid = $kid->sibling;
+ for (; not null $kid; $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ } else {
+ $obj = $kid;
+ $kid = $kid->sibling;
+ for (; !null ($kid->sibling) && $kid->name ne "method_named";
+ $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+ $meth = $kid;
+ }
+ $obj = $self->deparse($obj, 24);
+ if ($meth->name eq "method_named") {
+ $meth = $self->const_sv($meth)->PV;
+ } else {
+ $meth = $meth->first;
+ if ($meth->name eq "const") {
+ # As of 5.005_58, this case is probably obsoleted by the
+ # method_named case above
+ $meth = $self->const_sv($meth)->PV; # needs to be bare
+ } else {
+ $meth = $self->deparse($meth, 1);
+ }
+ }
+ my $args = join(", ", @exprs);
+ $kid = $obj . "->" . $meth;
+ if (length $args) {
+ return $kid . "(" . $args . ")"; # parens mandatory
+ } else {
+ return $kid;
+ }
+}
+
+# returns "&" if the prototype doesn't match the args,
+# or ("", $args_after_prototype_demunging) if it does.
+sub check_proto {
+ my $self = shift;
+ return "&" if $self->{'noproto'};
+ my($proto, @args) = @_;
+ my($arg, $real);
+ my $doneok = 0;
+ my @reals;
+ # An unbackslashed @ or % gobbles up the rest of the args
+ 1 while $proto =~ s/(?<!\\)([@%])[^\]]+$/$1/;
+ while ($proto) {
+ $proto =~ s/^(\\?[\$\@&%*]|\\\[[\$\@&%*]+\]|;)//;
+ my $chr = $1;
+ if ($chr eq "") {
+ return "&" if @args;
+ } elsif ($chr eq ";") {
+ $doneok = 1;
+ } elsif ($chr eq "@" or $chr eq "%") {
+ push @reals, map($self->deparse($_, 6), @args);
+ @args = ();
+ } else {
+ $arg = shift @args;
+ last unless $arg;
+ if ($chr eq "\$") {
+ if (want_scalar $arg) {
+ push @reals, $self->deparse($arg, 6);
+ } else {
+ return "&";
+ }
+ } elsif ($chr eq "&") {
+ if ($arg->name =~ /^(s?refgen|undef)$/) {
+ push @reals, $self->deparse($arg, 6);
+ } else {
+ return "&";
+ }
+ } elsif ($chr eq "*") {
+ if ($arg->name =~ /^s?refgen$/
+ and $arg->first->first->name eq "rv2gv")
+ {
+ $real = $arg->first->first; # skip refgen, null
+ if ($real->first->name eq "gv") {
+ push @reals, $self->deparse($real, 6);
+ } else {
+ push @reals, $self->deparse($real->first, 6);
+ }
+ } else {
+ return "&";
+ }
+ } elsif (substr($chr, 0, 1) eq "\\") {
+ $chr =~ tr/\\[]//d;
+ if ($arg->name =~ /^s?refgen$/ and
+ !null($real = $arg->first) and
+ ($chr =~ /\$/ && is_scalar($real->first)
+ or ($chr =~ /@/
+ && class($real->first->sibling) ne 'NULL'
+ && $real->first->sibling->name
+ =~ /^(rv2|pad)av$/)
+ or ($chr =~ /%/
+ && class($real->first->sibling) ne 'NULL'
+ && $real->first->sibling->name
+ =~ /^(rv2|pad)hv$/)
+ #or ($chr =~ /&/ # This doesn't work
+ # && $real->first->name eq "rv2cv")
+ or ($chr =~ /\*/
+ && $real->first->name eq "rv2gv")))
+ {
+ push @reals, $self->deparse($real, 6);
+ } else {
+ return "&";
+ }
+ }
+ }
+ }
+ return "&" if $proto and !$doneok; # too few args and no `;'
+ return "&" if @args; # too many args
+ return ("", join ", ", @reals);
+}
+
+sub pp_entersub {
+ my $self = shift;
+ my($op, $cx) = @_;
+ return $self->method($op, $cx) unless null $op->first->sibling;
+ my $prefix = "";
+ my $amper = "";
+ my($kid, @exprs);
+ if ($op->flags & OPf_SPECIAL && !($op->flags & OPf_MOD)) {
+ $prefix = "do ";
+ } elsif ($op->private & OPpENTERSUB_AMPER) {
+ $amper = "&";
+ }
+ $kid = $op->first;
+ $kid = $kid->first->sibling; # skip ex-list, pushmark
+ for (; not null $kid->sibling; $kid = $kid->sibling) {
+ push @exprs, $kid;
+ }
+ my $simple = 0;
+ my $proto = undef;
+ if (is_scope($kid)) {
+ $amper = "&";
+ $kid = "{" . $self->deparse($kid, 0) . "}";
+ } elsif ($kid->first->name eq "gv") {
+ my $gv = $self->gv_or_padgv($kid->first);
+ if (class($gv->CV) ne "SPECIAL") {
+ $proto = $gv->CV->PV if $gv->CV->FLAGS & SVf_POK;
+ }
+ $simple = 1; # only calls of named functions can be prototyped
+ $kid = $self->deparse($kid, 24);
+ } elsif (is_scalar ($kid->first) && $kid->first->name ne 'rv2cv') {
+ $amper = "&";
+ $kid = $self->deparse($kid, 24);
+ } else {
+ $prefix = "";
+ my $arrow = is_subscriptable($kid->first) ? "" : "->";
+ $kid = $self->deparse($kid, 24) . $arrow;
+ }
+
+ # Doesn't matter how many prototypes there are, if
+ # they haven't happened yet!
+ my $declared;
+ {
+ no strict 'refs';
+ no warnings 'uninitialized';
+ $declared = exists $self->{'subs_declared'}{$kid}
+ || (
+ defined &{ ${$self->{'curstash'}."::"}{$kid} }
+ && !exists
+ $self->{'subs_deparsed'}{$self->{'curstash'}."::".$kid}
+ && defined prototype $self->{'curstash'}."::".$kid
+ );
+ if (!$declared && defined($proto)) {
+ # Avoid "too early to check prototype" warning
+ ($amper, $proto) = ('&');
+ }
+ }
+
+ my $args;
+ if ($declared and defined $proto and not $amper) {
+ ($amper, $args) = $self->check_proto($proto, @exprs);
+ if ($amper eq "&") {
+ $args = join(", ", map($self->deparse($_, 6), @exprs));
+ }
+ } else {
+ $args = join(", ", map($self->deparse($_, 6), @exprs));
+ }
+ if ($prefix or $amper) {
+ if ($op->flags & OPf_STACKED) {
+ return $prefix . $amper . $kid . "(" . $args . ")";
+ } else {
+ return $prefix . $amper. $kid;
+ }
+ } else {
+ # glob() invocations can be translated into calls of
+ # CORE::GLOBAL::glob with a second parameter, a number.
+ # Reverse this.
+ if ($kid eq "CORE::GLOBAL::glob") {
+ $kid = "glob";
+ $args =~ s/\s*,[^,]+$//;
+ }
+
+ # It's a syntax error to call CORE::GLOBAL::foo without a prefix,
+ # so it must have been translated from a keyword call. Translate
+ # it back.
+ $kid =~ s/^CORE::GLOBAL:://;
+
+ my $dproto = defined($proto) ? $proto : "undefined";
+ if (!$declared) {
+ return "$kid(" . $args . ")";
+ } elsif ($dproto eq "") {
+ return $kid;
+ } elsif ($dproto eq "\$" and is_scalar($exprs[0])) {
+ # is_scalar is an excessively conservative test here:
+ # really, we should be comparing to the precedence of the
+ # top operator of $exprs[0] (ala unop()), but that would
+ # take some major code restructuring to do right.
+ return $self->maybe_parens_func($kid, $args, $cx, 16);
+ } elsif ($dproto ne '$' and defined($proto) || $simple) { #'
+ return $self->maybe_parens_func($kid, $args, $cx, 5);
+ } else {
+ return "$kid(" . $args . ")";
+ }
+ }
+}
+
+sub pp_enterwrite { unop(@_, "write") }
+
+# escape things that cause interpolation in double quotes,
+# but not character escapes
+sub uninterp {
+ my($str) = @_;
+ $str =~ s/(^|\G|[^\\])((?:\\\\)*)([\$\@]|\\[uUlLQE])/$1$2\\$3/g;
+ return $str;
+}
+
+{
+my $bal;
+BEGIN {
+ use re "eval";
+ # Matches any string which is balanced with respect to {braces}
+ $bal = qr(
+ (?:
+ [^\\{}]
+ | \\\\
+ | \\[{}]
+ | \{(??{$bal})\}
+ )*
+ )x;
+}
+
+# the same, but treat $|, $), $( and $ at the end of the string differently
+sub re_uninterp {
+ my($str) = @_;
+
+ $str =~ s/
+ ( ^|\G # $1
+ | [^\\]
+ )
+
+ ( # $2
+ (?:\\\\)*
+ )
+
+ ( # $3
+ (\(\?\??\{$bal\}\)) # $4
+ | [\$\@]
+ (?!\||\)|\(|$)
+ | \\[uUlLQE]
+ )
+
+ /defined($4) && length($4) ? "$1$2$4" : "$1$2\\$3"/xeg;
+
+ return $str;
+}
+
+# This is for regular expressions with the /x modifier
+# We have to leave comments unmangled.
+sub re_uninterp_extended {
+ my($str) = @_;
+
+ $str =~ s/
+ ( ^|\G # $1
+ | [^\\]
+ )
+
+ ( # $2
+ (?:\\\\)*
+ )
+
+ ( # $3
+ ( \(\?\??\{$bal\}\) # $4 (skip over (?{}) and (??{}) blocks)
+ | \#[^\n]* # (skip over comments)
+ )
+ | [\$\@]
+ (?!\||\)|\(|$|\s)
+ | \\[uUlLQE]
+ )
+
+ /defined($4) && length($4) ? "$1$2$4" : "$1$2\\$3"/xeg;
+
+ return $str;
+}
+}
+
+my %unctrl = # portable to to EBCDIC
+ (
+ "\c@" => '\c@', # unused
+ "\cA" => '\cA',
+ "\cB" => '\cB',
+ "\cC" => '\cC',
+ "\cD" => '\cD',
+ "\cE" => '\cE',
+ "\cF" => '\cF',
+ "\cG" => '\cG',
+ "\cH" => '\cH',
+ "\cI" => '\cI',
+ "\cJ" => '\cJ',
+ "\cK" => '\cK',
+ "\cL" => '\cL',
+ "\cM" => '\cM',
+ "\cN" => '\cN',
+ "\cO" => '\cO',
+ "\cP" => '\cP',
+ "\cQ" => '\cQ',
+ "\cR" => '\cR',
+ "\cS" => '\cS',
+ "\cT" => '\cT',
+ "\cU" => '\cU',
+ "\cV" => '\cV',
+ "\cW" => '\cW',
+ "\cX" => '\cX',
+ "\cY" => '\cY',
+ "\cZ" => '\cZ',
+ "\c[" => '\c[', # unused
+ "\c\\" => '\c\\', # unused
+ "\c]" => '\c]', # unused
+ "\c_" => '\c_', # unused
+ );
+
+# character escapes, but not delimiters that might need to be escaped
+sub escape_str { # ASCII, UTF8
+ my($str) = @_;
+ $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
+ $str =~ s/\a/\\a/g;
+# $str =~ s/\cH/\\b/g; # \b means something different in a regex
+ $str =~ s/\t/\\t/g;
+ $str =~ s/\n/\\n/g;
+ $str =~ s/\e/\\e/g;
+ $str =~ s/\f/\\f/g;
+ $str =~ s/\r/\\r/g;
+ $str =~ s/([\cA-\cZ])/$unctrl{$1}/ge;
+ $str =~ s/([[:^print:]])/sprintf("\\%03o", ord($1))/ge;
+ return $str;
+}
+
+# For regexes with the /x modifier.
+# Leave whitespace unmangled.
+sub escape_extended_re {
+ my($str) = @_;
+ $str =~ s/(.)/ord($1) > 255 ? sprintf("\\x{%x}", ord($1)) : $1/eg;
+ $str =~ s/([[:^print:]])/
+ ($1 =~ y! \t\n!!) ? $1 : sprintf("\\%03o", ord($1))/ge;
+ $str =~ s/\n/\n\f/g;
+ return $str;
+}
+
+# Don't do this for regexen
+sub unback {
+ my($str) = @_;
+ $str =~ s/\\/\\\\/g;
+ return $str;
+}
+
+# Remove backslashes which precede literal control characters,
+# to avoid creating ambiguity when we escape the latter.
+sub re_unback {
+ my($str) = @_;
+
+ # the insane complexity here is due to the behaviour of "\c\"
+ $str =~ s/(^|[^\\]|\\c\\)(?<!\\c)\\(\\\\)*(?=[[:^print:]])/$1$2/g;
+ return $str;
+}
+
+sub balanced_delim {
+ my($str) = @_;
+ my @str = split //, $str;
+ my($ar, $open, $close, $fail, $c, $cnt);
+ for $ar (['[',']'], ['(',')'], ['<','>'], ['{','}']) {
+ ($open, $close) = @$ar;
+ $fail = 0; $cnt = 0;
+ for $c (@str) {
+ if ($c eq $open) {
+ $cnt++;
+ } elsif ($c eq $close) {
+ $cnt--;
+ if ($cnt < 0) {
+ # qq()() isn't ")("
+ $fail = 1;
+ last;
+ }
+ }
+ }
+ $fail = 1 if $cnt != 0;
+ return ($open, "$open$str$close") if not $fail;
+ }
+ return ("", $str);
+}
+
+sub single_delim {
+ my($q, $default, $str) = @_;
+ return "$default$str$default" if $default and index($str, $default) == -1;
+ if ($q ne 'qr') {
+ (my $succeed, $str) = balanced_delim($str);
+ return "$q$str" if $succeed;
+ }
+ for my $delim ('/', '"', '#') {
+ return "$q$delim" . $str . $delim if index($str, $delim) == -1;
+ }
+ if ($default) {
+ $str =~ s/$default/\\$default/g;
+ return "$default$str$default";
+ } else {
+ $str =~ s[/][\\/]g;
+ return "$q/$str/";
+ }
+}
+
+my $max_prec;
+BEGIN { $max_prec = int(0.999 + 8*length(pack("F", 42))*log(2)/log(10)); }
+
+# Split a floating point number into an integer mantissa and a binary
+# exponent. Assumes you've already made sure the number isn't zero or
+# some weird infinity or NaN.
+sub split_float {
+ my($f) = @_;
+ my $exponent = 0;
+ if ($f == int($f)) {
+ while ($f % 2 == 0) {
+ $f /= 2;
+ $exponent++;
+ }
+ } else {
+ while ($f != int($f)) {
+ $f *= 2;
+ $exponent--;
+ }
+ }
+ my $mantissa = sprintf("%.0f", $f);
+ return ($mantissa, $exponent);
+}
+
+sub const {
+ my $self = shift;
+ my($sv, $cx) = @_;
+ if ($self->{'use_dumper'}) {
+ return $self->const_dumper($sv, $cx);
+ }
+ if (class($sv) eq "SPECIAL") {
+ # sv_undef, sv_yes, sv_no
+ return ('undef', '1', $self->maybe_parens("!1", $cx, 21))[$$sv-1];
+ } elsif (class($sv) eq "NULL") {
+ return 'undef';
+ }
+ # convert a version object into the "v1.2.3" string in its V magic
+ if ($sv->FLAGS & SVs_RMG) {
+ for (my $mg = $sv->MAGIC; $mg; $mg = $mg->MOREMAGIC) {
+ return $mg->PTR if $mg->TYPE eq 'V';
+ }
+ }
+
+ if ($sv->FLAGS & SVf_IOK) {
+ my $str = $sv->int_value;
+ $str = $self->maybe_parens($str, $cx, 21) if $str < 0;
+ return $str;
+ } elsif ($sv->FLAGS & SVf_NOK) {
+ my $nv = $sv->NV;
+ if ($nv == 0) {
+ if (pack("F", $nv) eq pack("F", 0)) {
+ # positive zero
+ return "0";
+ } else {
+ # negative zero
+ return $self->maybe_parens("-.0", $cx, 21);
+ }
+ } elsif (1/$nv == 0) {
+ if ($nv > 0) {
+ # positive infinity
+ return $self->maybe_parens("9**9**9", $cx, 22);
+ } else {
+ # negative infinity
+ return $self->maybe_parens("-9**9**9", $cx, 21);
+ }
+ } elsif ($nv != $nv) {
+ # NaN
+ if (pack("F", $nv) eq pack("F", sin(9**9**9))) {
+ # the normal kind
+ return "sin(9**9**9)";
+ } elsif (pack("F", $nv) eq pack("F", -sin(9**9**9))) {
+ # the inverted kind
+ return $self->maybe_parens("-sin(9**9**9)", $cx, 21);
+ } else {
+ # some other kind
+ my $hex = unpack("h*", pack("F", $nv));
+ return qq'unpack("F", pack("h*", "$hex"))';
+ }
+ }
+ # first, try the default stringification
+ my $str = "$nv";
+ if ($str != $nv) {
+ # failing that, try using more precision
+ $str = sprintf("%.${max_prec}g", $nv);
+# if (pack("F", $str) ne pack("F", $nv)) {
+ if ($str != $nv) {
+ # not representable in decimal with whatever sprintf()
+ # and atof() Perl is using here.
+ my($mant, $exp) = split_float($nv);
+ return $self->maybe_parens("$mant * 2**$exp", $cx, 19);
+ }
+ }
+ $str = $self->maybe_parens($str, $cx, 21) if $nv < 0;
+ return $str;
+ } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) {
+ my $ref = $sv->RV;
+ if (class($ref) eq "AV") {
+ return "[" . $self->list_const(2, $ref->ARRAY) . "]";
+ } elsif (class($ref) eq "HV") {
+ my %hash = $ref->ARRAY;
+ my @elts;
+ for my $k (sort keys %hash) {
+ push @elts, "$k => " . $self->const($hash{$k}, 6);
+ }
+ return "{" . join(", ", @elts) . "}";
+ } elsif (class($ref) eq "CV") {
+ return "sub " . $self->deparse_sub($ref);
+ }
+ if ($ref->FLAGS & SVs_SMG) {
+ for (my $mg = $ref->MAGIC; $mg; $mg = $mg->MOREMAGIC) {
+ if ($mg->TYPE eq 'r') {
+ my $re = re_uninterp(escape_str(re_unback($mg->precomp)));
+ return single_delim("qr", "", $re);
+ }
+ }
+ }
+
+ return $self->maybe_parens("\\" . $self->const($ref, 20), $cx, 20);
+ } elsif ($sv->FLAGS & SVf_POK) {
+ my $str = $sv->PV;
+ if ($str =~ /[^ -~]/) { # ASCII for non-printing
+ return single_delim("qq", '"', uninterp escape_str unback $str);
+ } else {
+ return single_delim("q", "'", unback $str);
+ }
+ } else {
+ return "undef";
+ }
+}
+
+sub const_dumper {
+ my $self = shift;
+ my($sv, $cx) = @_;
+ my $ref = $sv->object_2svref();
+ my $dumper = Data::Dumper->new([$$ref], ['$v']);
+ $dumper->Purity(1)->Terse(1)->Deparse(1)->Indent(0)->Useqq(1)->Sortkeys(1);
+ my $str = $dumper->Dump();
+ if ($str =~ /^\$v/) {
+ return '${my ' . $str . ' \$v}';
+ } else {
+ return $str;
+ }
+}
+
+sub const_sv {
+ my $self = shift;
+ my $op = shift;
+ my $sv = $op->sv;
+ # the constant could be in the pad (under useithreads)
+ $sv = $self->padval($op->targ) unless $$sv;
+ return $sv;
+}
+
+sub pp_const {
+ my $self = shift;
+ my($op, $cx) = @_;
+ if ($op->private & OPpCONST_ARYBASE) {
+ return '$[';
+ }
+# if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting
+# return $self->const_sv($op)->PV;
+# }
+ my $sv = $self->const_sv($op);
+ return $self->const($sv, $cx);
+}
+
+sub dq {
+ my $self = shift;
+ my $op = shift;
+ my $type = $op->name;
+ if ($type eq "const") {
+ return '$[' if $op->private & OPpCONST_ARYBASE;
+ return uninterp(escape_str(unback($self->const_sv($op)->as_string)));
+ } elsif ($type eq "concat") {
+ my $first = $self->dq($op->first);
+ my $last = $self->dq($op->last);
+
+ # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]", "$foo\::bar"
+ ($last =~ /^[A-Z\\\^\[\]_?]/ &&
+ $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
+ || ($last =~ /^[:'{\[\w_]/ && #'
+ $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
+
+ return $first . $last;
+ } elsif ($type eq "uc") {
+ return '\U' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "lc") {
+ return '\L' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "ucfirst") {
+ return '\u' . $self->dq($op->first->sibling);
+ } elsif ($type eq "lcfirst") {
+ return '\l' . $self->dq($op->first->sibling);
+ } elsif ($type eq "quotemeta") {
+ return '\Q' . $self->dq($op->first->sibling) . '\E';
+ } elsif ($type eq "join") {
+ return $self->deparse($op->last, 26); # was join($", @ary)
+ } else {
+ return $self->deparse($op, 26);
+ }
+}
+
+sub pp_backtick {
+ my $self = shift;
+ my($op, $cx) = @_;
+ # skip pushmark
+ return single_delim("qx", '`', $self->dq($op->first->sibling));
+}
+
+sub dquote {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first->sibling; # skip ex-stringify, pushmark
+ return $self->deparse($kid, $cx) if $self->{'unquote'};
+ $self->maybe_targmy($kid, $cx,
+ sub {single_delim("qq", '"', $self->dq($_[1]))});
+}
+
+# OP_STRINGIFY is a listop, but it only ever has one arg
+sub pp_stringify { maybe_targmy(@_, \&dquote) }
+
+# tr/// and s/// (and tr[][], tr[]//, tr###, etc)
+# note that tr(from)/to/ is OK, but not tr/from/(to)
+sub double_delim {
+ my($from, $to) = @_;
+ my($succeed, $delim);
+ if ($from !~ m[/] and $to !~ m[/]) {
+ return "/$from/$to/";
+ } elsif (($succeed, $from) = balanced_delim($from) and $succeed) {
+ if (($succeed, $to) = balanced_delim($to) and $succeed) {
+ return "$from$to";
+ } else {
+ for $delim ('/', '"', '#') { # note no `'' -- s''' is special
+ return "$from$delim$to$delim" if index($to, $delim) == -1;
+ }
+ $to =~ s[/][\\/]g;
+ return "$from/$to/";
+ }
+ } else {
+ for $delim ('/', '"', '#') { # note no '
+ return "$delim$from$delim$to$delim"
+ if index($to . $from, $delim) == -1;
+ }
+ $from =~ s[/][\\/]g;
+ $to =~ s[/][\\/]g;
+ return "/$from/$to/";
+ }
+}
+
+# Only used by tr///, so backslashes hyphens
+sub pchr { # ASCII
+ my($n) = @_;
+ if ($n == ord '\\') {
+ return '\\\\';
+ } elsif ($n == ord "-") {
+ return "\\-";
+ } elsif ($n >= ord(' ') and $n <= ord('~')) {
+ return chr($n);
+ } elsif ($n == ord "\a") {
+ return '\\a';
+ } elsif ($n == ord "\b") {
+ return '\\b';
+ } elsif ($n == ord "\t") {
+ return '\\t';
+ } elsif ($n == ord "\n") {
+ return '\\n';
+ } elsif ($n == ord "\e") {
+ return '\\e';
+ } elsif ($n == ord "\f") {
+ return '\\f';
+ } elsif ($n == ord "\r") {
+ return '\\r';
+ } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) {
+ return '\\c' . chr(ord("@") + $n);
+ } else {
+# return '\x' . sprintf("%02x", $n);
+ return '\\' . sprintf("%03o", $n);
+ }
+}
+
+sub collapse {
+ my(@chars) = @_;
+ my($str, $c, $tr) = ("");
+ for ($c = 0; $c < @chars; $c++) {
+ $tr = $chars[$c];
+ $str .= pchr($tr);
+ if ($c <= $#chars - 2 and $chars[$c + 1] == $tr + 1 and
+ $chars[$c + 2] == $tr + 2)
+ {
+ for (; $c <= $#chars-1 and $chars[$c + 1] == $chars[$c] + 1; $c++)
+ {}
+ $str .= "-";
+ $str .= pchr($chars[$c]);
+ }
+ }
+ return $str;
+}
+
+sub tr_decode_byte {
+ my($table, $flags) = @_;
+ my(@table) = unpack("s*", $table);
+ splice @table, 0x100, 1; # Number of subsequent elements
+ my($c, $tr, @from, @to, @delfrom, $delhyphen);
+ if ($table[ord "-"] != -1 and
+ $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1)
+ {
+ $tr = $table[ord "-"];
+ $table[ord "-"] = -1;
+ if ($tr >= 0) {
+ @from = ord("-");
+ @to = $tr;
+ } else { # -2 ==> delete
+ $delhyphen = 1;
+ }
+ }
+ for ($c = 0; $c < @table; $c++) {
+ $tr = $table[$c];
+ if ($tr >= 0) {
+ push @from, $c; push @to, $tr;
+ } elsif ($tr == -2) {
+ push @delfrom, $c;
+ }
+ }
+ @from = (@from, @delfrom);
+ if ($flags & OPpTRANS_COMPLEMENT) {
+ my @newfrom = ();
+ my %from;
+ @from{@from} = (1) x @from;
+ for ($c = 0; $c < 256; $c++) {
+ push @newfrom, $c unless $from{$c};
+ }
+ @from = @newfrom;
+ }
+ unless ($flags & OPpTRANS_DELETE || !@to) {
+ pop @to while $#to and $to[$#to] == $to[$#to -1];
+ }
+ my($from, $to);
+ $from = collapse(@from);
+ $to = collapse(@to);
+ $from .= "-" if $delhyphen;
+ return ($from, $to);
+}
+
+sub tr_chr {
+ my $x = shift;
+ if ($x == ord "-") {
+ return "\\-";
+ } elsif ($x == ord "\\") {
+ return "\\\\";
+ } else {
+ return chr $x;
+ }
+}
+
+# XXX This doesn't yet handle all cases correctly either
+
+sub tr_decode_utf8 {
+ my($swash_hv, $flags) = @_;
+ my %swash = $swash_hv->ARRAY;
+ my $final = undef;
+ $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'};
+ my $none = $swash{"NONE"}->IV;
+ my $extra = $none + 1;
+ my(@from, @delfrom, @to);
+ my $line;
+ foreach $line (split /\n/, $swash{'LIST'}->PV) {
+ my($min, $max, $result) = split(/\t/, $line);
+ $min = hex $min;
+ if (length $max) {
+ $max = hex $max;
+ } else {
+ $max = $min;
+ }
+ $result = hex $result;
+ if ($result == $extra) {
+ push @delfrom, [$min, $max];
+ } else {
+ push @from, [$min, $max];
+ push @to, [$result, $result + $max - $min];
+ }
+ }
+ for my $i (0 .. $#from) {
+ if ($from[$i][0] == ord '-') {
+ unshift @from, splice(@from, $i, 1);
+ unshift @to, splice(@to, $i, 1);
+ last;
+ } elsif ($from[$i][1] == ord '-') {
+ $from[$i][1]--;
+ $to[$i][1]--;
+ unshift @from, ord '-';
+ unshift @to, ord '-';
+ last;
+ }
+ }
+ for my $i (0 .. $#delfrom) {
+ if ($delfrom[$i][0] == ord '-') {
+ push @delfrom, splice(@delfrom, $i, 1);
+ last;
+ } elsif ($delfrom[$i][1] == ord '-') {
+ $delfrom[$i][1]--;
+ push @delfrom, ord '-';
+ last;
+ }
+ }
+ if (defined $final and $to[$#to][1] != $final) {
+ push @to, [$final, $final];
+ }
+ push @from, @delfrom;
+ if ($flags & OPpTRANS_COMPLEMENT) {
+ my @newfrom;
+ my $next = 0;
+ for my $i (0 .. $#from) {
+ push @newfrom, [$next, $from[$i][0] - 1];
+ $next = $from[$i][1] + 1;
+ }
+ @from = ();
+ for my $range (@newfrom) {
+ if ($range->[0] <= $range->[1]) {
+ push @from, $range;
+ }
+ }
+ }
+ my($from, $to, $diff);
+ for my $chunk (@from) {
+ $diff = $chunk->[1] - $chunk->[0];
+ if ($diff > 1) {
+ $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
+ } elsif ($diff == 1) {
+ $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
+ } else {
+ $from .= tr_chr($chunk->[0]);
+ }
+ }
+ for my $chunk (@to) {
+ $diff = $chunk->[1] - $chunk->[0];
+ if ($diff > 1) {
+ $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
+ } elsif ($diff == 1) {
+ $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
+ } else {
+ $to .= tr_chr($chunk->[0]);
+ }
+ }
+ #$final = sprintf("%04x", $final) if defined $final;
+ #$none = sprintf("%04x", $none) if defined $none;
+ #$extra = sprintf("%04x", $extra) if defined $extra;
+ #print STDERR "final: $final\n none: $none\nextra: $extra\n";
+ #print STDERR $swash{'LIST'}->PV;
+ return (escape_str($from), escape_str($to));
+}
+
+sub pp_trans {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($from, $to);
+ if (class($op) eq "PVOP") {
+ ($from, $to) = tr_decode_byte($op->pv, $op->private);
+ } else { # class($op) eq "SVOP"
+ ($from, $to) = tr_decode_utf8($op->sv->RV, $op->private);
+ }
+ my $flags = "";
+ $flags .= "c" if $op->private & OPpTRANS_COMPLEMENT;
+ $flags .= "d" if $op->private & OPpTRANS_DELETE;
+ $to = "" if $from eq $to and $flags eq "";
+ $flags .= "s" if $op->private & OPpTRANS_SQUASH;
+ return "tr" . double_delim($from, $to) . $flags;
+}
+
+# Like dq(), but different
+sub re_dq {
+ my $self = shift;
+ my ($op, $extended) = @_;
+
+ my $type = $op->name;
+ if ($type eq "const") {
+ return '$[' if $op->private & OPpCONST_ARYBASE;
+ my $unbacked = re_unback($self->const_sv($op)->as_string);
+ return re_uninterp_extended(escape_extended_re($unbacked))
+ if $extended;
+ return re_uninterp(escape_str($unbacked));
+ } elsif ($type eq "concat") {
+ my $first = $self->re_dq($op->first, $extended);
+ my $last = $self->re_dq($op->last, $extended);
+
+ # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]"
+ ($last =~ /^[A-Z\\\^\[\]_?]/ &&
+ $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc
+ || ($last =~ /^[{\[\w_]/ &&
+ $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/);
+
+ return $first . $last;
+ } elsif ($type eq "uc") {
+ return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "lc") {
+ return '\L' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "ucfirst") {
+ return '\u' . $self->re_dq($op->first->sibling, $extended);
+ } elsif ($type eq "lcfirst") {
+ return '\l' . $self->re_dq($op->first->sibling, $extended);
+ } elsif ($type eq "quotemeta") {
+ return '\Q' . $self->re_dq($op->first->sibling, $extended) . '\E';
+ } elsif ($type eq "join") {
+ return $self->deparse($op->last, 26); # was join($", @ary)
+ } else {
+ return $self->deparse($op, 26);
+ }
+}
+
+sub pure_string {
+ my ($self, $op) = @_;
+ return 0 if null $op;
+ my $type = $op->name;
+
+ if ($type eq 'const') {
+ return 1;
+ }
+ elsif ($type =~ /^[ul]c(first)?$/ || $type eq 'quotemeta') {
+ return $self->pure_string($op->first->sibling);
+ }
+ elsif ($type eq 'join') {
+ my $join_op = $op->first->sibling; # Skip pushmark
+ return 0 unless $join_op->name eq 'null' && $join_op->targ eq OP_RV2SV;
+
+ my $gvop = $join_op->first;
+ return 0 unless $gvop->name eq 'gvsv';
+ return 0 unless '"' eq $self->gv_name($self->gv_or_padgv($gvop));
+
+ return 0 unless ${$join_op->sibling} eq ${$op->last};
+ return 0 unless $op->last->name =~ /^(rv2|pad)av$/;
+ }
+ elsif ($type eq 'concat') {
+ return $self->pure_string($op->first)
+ && $self->pure_string($op->last);
+ }
+ elsif (is_scalar($op) || $type =~ /^[ah]elem$/) {
+ return 1;
+ }
+ elsif ($type eq "null" and $op->can('first') and not null $op->first and
+ $op->first->name eq "null" and $op->first->can('first')
+ and not null $op->first->first and
+ $op->first->first->name eq "aelemfast") {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+
+ return 1;
+}
+
+sub regcomp {
+ my $self = shift;
+ my($op, $cx, $extended) = @_;
+ my $kid = $op->first;
+ $kid = $kid->first if $kid->name eq "regcmaybe";
+ $kid = $kid->first if $kid->name eq "regcreset";
+ if ($kid->name eq "null" and !null($kid->first)
+ and $kid->first->name eq 'pushmark')
+ {
+ my $str = '';
+ $kid = $kid->first->sibling;
+ while (!null($kid)) {
+ $str .= $self->re_dq($kid, $extended);
+ $kid = $kid->sibling;
+ }
+ return $str, 1;
+ }
+
+ return ($self->re_dq($kid, $extended), 1) if $self->pure_string($kid);
+ return ($self->deparse($kid, $cx), 0);
+}
+
+sub pp_regcomp {
+ my ($self, $op, $cx) = @_;
+ return (($self->regcomp($op, $cx, 0))[0]);
+}
+
+# osmic acid -- see osmium tetroxide
+
+my %matchwords;
+map($matchwords{join "", sort split //, $_} = $_, 'cig', 'cog', 'cos', 'cogs',
+ 'cox', 'go', 'is', 'ism', 'iso', 'mig', 'mix', 'osmic', 'ox', 'sic',
+ 'sig', 'six', 'smog', 'so', 'soc', 'sog', 'xi');
+
+sub matchop {
+ my $self = shift;
+ my($op, $cx, $name, $delim) = @_;
+ my $kid = $op->first;
+ my ($binop, $var, $re) = ("", "", "");
+ if ($op->flags & OPf_STACKED) {
+ $binop = 1;
+ $var = $self->deparse($kid, 20);
+ $kid = $kid->sibling;
+ }
+ my $quote = 1;
+ my $extended = ($op->pmflags & PMf_EXTENDED);
+ if (null $kid) {
+ my $unbacked = re_unback($op->precomp);
+ if ($extended) {
+ $re = re_uninterp_extended(escape_extended_re($unbacked));
+ } else {
+ $re = re_uninterp(escape_str(re_unback($op->precomp)));
+ }
+ } elsif ($kid->name ne 'regcomp') {
+ carp("found ".$kid->name." where regcomp expected");
+ } else {
+ ($re, $quote) = $self->regcomp($kid, 21, $extended);
+ }
+ my $flags = "";
+ $flags .= "c" if $op->pmflags & PMf_CONTINUE;
+ $flags .= "g" if $op->pmflags & PMf_GLOBAL;
+ $flags .= "i" if $op->pmflags & PMf_FOLD;
+ $flags .= "m" if $op->pmflags & PMf_MULTILINE;
+ $flags .= "o" if $op->pmflags & PMf_KEEP;
+ $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
+ $flags .= "x" if $op->pmflags & PMf_EXTENDED;
+ $flags = $matchwords{$flags} if $matchwords{$flags};
+ if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here
+ $re =~ s/\?/\\?/g;
+ $re = "?$re?";
+ } elsif ($quote) {
+ $re = single_delim($name, $delim, $re);
+ }
+ $re = $re . $flags if $quote;
+ if ($binop) {
+ return $self->maybe_parens("$var =~ $re", $cx, 20);
+ } else {
+ return $re;
+ }
+}
+
+sub pp_match { matchop(@_, "m", "/") }
+sub pp_pushre { matchop(@_, "m", "/") }
+sub pp_qr { matchop(@_, "qr", "") }
+
+sub pp_split {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my($kid, @exprs, $ary, $expr);
+ $kid = $op->first;
+
+ # For our kid (an OP_PUSHRE), pmreplroot is never actually the
+ # root of a replacement; it's either empty, or abused to point to
+ # the GV for an array we split into (an optimization to save
+ # assignment overhead). Depending on whether we're using ithreads,
+ # this OP* holds either a GV* or a PADOFFSET. Luckily, B.xs
+ # figures out for us which it is.
+ my $replroot = $kid->pmreplroot;
+ my $gv = 0;
+ if (ref($replroot) eq "B::GV") {
+ $gv = $replroot;
+ } elsif (!ref($replroot) and $replroot > 0) {
+ $gv = $self->padval($replroot);
+ }
+ $ary = $self->stash_variable('@', $self->gv_name($gv)) if $gv;
+
+ for (; !null($kid); $kid = $kid->sibling) {
+ push @exprs, $self->deparse($kid, 6);
+ }
+
+ # handle special case of split(), and split(" ") that compiles to /\s+/
+ $kid = $op->first;
+ if ($kid->flags & OPf_SPECIAL
+ && $exprs[0] eq '/\\s+/'
+ && $kid->pmflags & PMf_SKIPWHITE ) {
+ $exprs[0] = '" "';
+ }
+
+ $expr = "split(" . join(", ", @exprs) . ")";
+ if ($ary) {
+ return $self->maybe_parens("$ary = $expr", $cx, 7);
+ } else {
+ return $expr;
+ }
+}
+
+# oxime -- any of various compounds obtained chiefly by the action of
+# hydroxylamine on aldehydes and ketones and characterized by the
+# bivalent grouping C=NOH [Webster's Tenth]
+
+my %substwords;
+map($substwords{join "", sort split //, $_} = $_, 'ego', 'egoism', 'em',
+ 'es', 'ex', 'exes', 'gee', 'go', 'goes', 'ie', 'ism', 'iso', 'me',
+ 'meese', 'meso', 'mig', 'mix', 'os', 'ox', 'oxime', 'see', 'seem',
+ 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi');
+
+sub pp_subst {
+ my $self = shift;
+ my($op, $cx) = @_;
+ my $kid = $op->first;
+ my($binop, $var, $re, $repl) = ("", "", "", "");
+ if ($op->flags & OPf_STACKED) {
+ $binop = 1;
+ $var = $self->deparse($kid, 20);
+ $kid = $kid->sibling;
+ }
+ my $flags = "";
+ if (null($op->pmreplroot)) {
+ $repl = $self->dq($kid);
+ $kid = $kid->sibling;
+ } else {
+ $repl = $op->pmreplroot->first; # skip substcont
+ while ($repl->name eq "entereval") {
+ $repl = $repl->first;
+ $flags .= "e";
+ }
+ if ($op->pmflags & PMf_EVAL) {
+ $repl = $self->deparse($repl->first, 0);
+ } else {
+ $repl = $self->dq($repl);
+ }
+ }
+ my $extended = ($op->pmflags & PMf_EXTENDED);
+ if (null $kid) {
+ my $unbacked = re_unback($op->precomp);
+ if ($extended) {
+ $re = re_uninterp_extended(escape_extended_re($unbacked));
+ }
+ else {
+ $re = re_uninterp(escape_str($unbacked));
+ }
+ } else {
+ ($re) = $self->regcomp($kid, 1, $extended);
+ }
+ $flags .= "e" if $op->pmflags & PMf_EVAL;
+ $flags .= "g" if $op->pmflags & PMf_GLOBAL;
+ $flags .= "i" if $op->pmflags & PMf_FOLD;
+ $flags .= "m" if $op->pmflags & PMf_MULTILINE;
+ $flags .= "o" if $op->pmflags & PMf_KEEP;
+ $flags .= "s" if $op->pmflags & PMf_SINGLELINE;
+ $flags .= "x" if $extended;
+ $flags = $substwords{$flags} if $substwords{$flags};
+ if ($binop) {
+ return $self->maybe_parens("$var =~ s"
+ . double_delim($re, $repl) . $flags,
+ $cx, 20);
+ } else {
+ return "s". double_delim($re, $repl) . $flags;
+ }
+}
+
+1;
+__END__
+
+=head1 NAME
+
+B::Deparse - Perl compiler backend to produce perl code
+
+=head1 SYNOPSIS
+
+B<perl> B<-MO=Deparse>[B<,-d>][B<,-f>I<FILE>][B<,-p>][B<,-q>][B<,-l>]
+ [B<,-s>I<LETTERS>][B<,-x>I<LEVEL>] I<prog.pl>
+
+=head1 DESCRIPTION
+
+B::Deparse is a backend module for the Perl compiler that generates
+perl source code, based on the internal compiled structure that perl
+itself creates after parsing a program. The output of B::Deparse won't
+be exactly the same as the original source, since perl doesn't keep
+track of comments or whitespace, and there isn't a one-to-one
+correspondence between perl's syntactical constructions and their
+compiled form, but it will often be close. When you use the B<-p>
+option, the output also includes parentheses even when they are not
+required by precedence, which can make it easy to see if perl is
+parsing your expressions the way you intended.
+
+While B::Deparse goes to some lengths to try to figure out what your
+original program was doing, some parts of the language can still trip
+it up; it still fails even on some parts of Perl's own test suite. If
+you encounter a failure other than the most common ones described in
+the BUGS section below, you can help contribute to B::Deparse's
+ongoing development by submitting a bug report with a small
+example.
+
+=head1 OPTIONS
+
+As with all compiler backend options, these must follow directly after
+the '-MO=Deparse', separated by a comma but not any white space.
+
+=over 4
+
+=item B<-d>
+
+Output data values (when they appear as constants) using Data::Dumper.
+Without this option, B::Deparse will use some simple routines of its
+own for the same purpose. Currently, Data::Dumper is better for some
+kinds of data (such as complex structures with sharing and
+self-reference) while the built-in routines are better for others
+(such as odd floating-point values).
+
+=item B<-f>I<FILE>
+
+Normally, B::Deparse deparses the main code of a program, and all the subs
+defined in the same file. To include subs defined in other files, pass the
+B<-f> option with the filename. You can pass the B<-f> option several times, to
+include more than one secondary file. (Most of the time you don't want to
+use it at all.) You can also use this option to include subs which are
+defined in the scope of a B<#line> directive with two parameters.
+
+=item B<-l>
+
+Add '#line' declarations to the output based on the line and file
+locations of the original code.
+
+=item B<-p>
+
+Print extra parentheses. Without this option, B::Deparse includes
+parentheses in its output only when they are needed, based on the
+structure of your program. With B<-p>, it uses parentheses (almost)
+whenever they would be legal. This can be useful if you are used to
+LISP, or if you want to see how perl parses your input. If you say
+
+ if ($var & 0x7f == 65) {print "Gimme an A!"}
+ print ($which ? $a : $b), "\n";
+ $name = $ENV{USER} or "Bob";
+
+C<B::Deparse,-p> will print
+
+ if (($var & 0)) {
+ print('Gimme an A!')
+ };
+ (print(($which ? $a : $b)), '???');
+ (($name = $ENV{'USER'}) or '???')
+
+which probably isn't what you intended (the C<'???'> is a sign that
+perl optimized away a constant value).
+
+=item B<-P>
+
+Disable prototype checking. With this option, all function calls are
+deparsed as if no prototype was defined for them. In other words,
+
+ perl -MO=Deparse,-P -e 'sub foo (\@) { 1 } foo @x'
+
+will print
+
+ sub foo (\@) {
+ 1;
+ }
+ &foo(\@x);
+
+making clear how the parameters are actually passed to C<foo>.
+
+=item B<-q>
+
+Expand double-quoted strings into the corresponding combinations of
+concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For
+instance, print
+
+ print "Hello, $world, @ladies, \u$gentlemen\E, \u\L$me!";
+
+as
+
+ print 'Hello, ' . $world . ', ' . join($", @ladies) . ', '
+ . ucfirst($gentlemen) . ', ' . ucfirst(lc $me . '!');
+
+Note that the expanded form represents the way perl handles such
+constructions internally -- this option actually turns off the reverse
+translation that B::Deparse usually does. On the other hand, note that
+C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value
+of $y into a string before doing the assignment.
+
+=item B<-s>I<LETTERS>
+
+Tweak the style of B::Deparse's output. The letters should follow
+directly after the 's', with no space or punctuation. The following
+options are available:
+
+=over 4
+
+=item B<C>
+
+Cuddle C<elsif>, C<else>, and C<continue> blocks. For example, print
+
+ if (...) {
+ ...
+ } else {
+ ...
+ }
+
+instead of
+
+ if (...) {
+ ...
+ }
+ else {
+ ...
+ }
+
+The default is not to cuddle.
+
+=item B<i>I<NUMBER>
+
+Indent lines by multiples of I<NUMBER> columns. The default is 4 columns.
+
+=item B<T>
+
+Use tabs for each 8 columns of indent. The default is to use only spaces.
+For instance, if the style options are B<-si4T>, a line that's indented
+3 times will be preceded by one tab and four spaces; if the options were
+B<-si8T>, the same line would be preceded by three tabs.
+
+=item B<v>I<STRING>B<.>
+
+Print I<STRING> for the value of a constant that can't be determined
+because it was optimized away (mnemonic: this happens when a constant
+is used in B<v>oid context). The end of the string is marked by a period.
+The string should be a valid perl expression, generally a constant.
+Note that unless it's a number, it probably needs to be quoted, and on
+a command line quotes need to be protected from the shell. Some
+conventional values include 0, 1, 42, '', 'foo', and
+'Useless use of constant omitted' (which may need to be
+B<-sv"'Useless use of constant omitted'.">
+or something similar depending on your shell). The default is '???'.
+If you're using B::Deparse on a module or other file that's require'd,
+you shouldn't use a value that evaluates to false, since the customary
+true constant at the end of a module will be in void context when the
+file is compiled as a main program.
+
+=back
+
+=item B<-x>I<LEVEL>
+
+Expand conventional syntax constructions into equivalent ones that expose
+their internal operation. I<LEVEL> should be a digit, with higher values
+meaning more expansion. As with B<-q>, this actually involves turning off
+special cases in B::Deparse's normal operations.
+
+If I<LEVEL> is at least 3, C<for> loops will be translated into equivalent
+while loops with continue blocks; for instance
+
+ for ($i = 0; $i < 10; ++$i) {
+ print $i;
+ }
+
+turns into
+
+ $i = 0;
+ while ($i < 10) {
+ print $i;
+ } continue {
+ ++$i
+ }
+
+Note that in a few cases this translation can't be perfectly carried back
+into the source code -- if the loop's initializer declares a my variable,
+for instance, it won't have the correct scope outside of the loop.
+
+If I<LEVEL> is at least 5, C<use> declarations will be translated into
+C<BEGIN> blocks containing calls to C<require> and C<import>; for
+instance,
+
+ use strict 'refs';
+
+turns into
+
+ sub BEGIN {
+ require strict;
+ do {
+ 'strict'->import('refs')
+ };
+ }
+
+If I<LEVEL> is at least 7, C<if> statements will be translated into
+equivalent expressions using C<&&>, C<?:> and C<do {}>; for instance
+
+ print 'hi' if $nice;
+ if ($nice) {
+ print 'hi';
+ }
+ if ($nice) {
+ print 'hi';
+ } else {
+ print 'bye';
+ }
+
+turns into
+
+ $nice and print 'hi';
+ $nice and do { print 'hi' };
+ $nice ? do { print 'hi' } : do { print 'bye' };
+
+Long sequences of elsifs will turn into nested ternary operators, which
+B::Deparse doesn't know how to indent nicely.
+
+=back
+
+=head1 USING B::Deparse AS A MODULE
+
+=head2 Synopsis
+
+ use B::Deparse;
+ $deparse = B::Deparse->new("-p", "-sC");
+ $body = $deparse->coderef2text(\&func);
+ eval "sub func $body"; # the inverse operation
+
+=head2 Description
+
+B::Deparse can also be used on a sub-by-sub basis from other perl
+programs.
+
+=head2 new
+
+ $deparse = B::Deparse->new(OPTIONS)
+
+Create an object to store the state of a deparsing operation and any
+options. The options are the same as those that can be given on the
+command line (see L</OPTIONS>); options that are separated by commas
+after B<-MO=Deparse> should be given as separate strings. Some
+options, like B<-u>, don't make sense for a single subroutine, so
+don't pass them.
+
+=head2 ambient_pragmas
+
+ $deparse->ambient_pragmas(strict => 'all', '$[' => $[);
+
+The compilation of a subroutine can be affected by a few compiler
+directives, B<pragmas>. These are:
+
+=over 4
+
+=item *
+
+use strict;
+
+=item *
+
+use warnings;
+
+=item *
+
+Assigning to the special variable $[
+
+=item *
+
+use integer;
+
+=item *
+
+use bytes;
+
+=item *
+
+use utf8;
+
+=item *
+
+use re;
+
+=back
+
+Ordinarily, if you use B::Deparse on a subroutine which has
+been compiled in the presence of one or more of these pragmas,
+the output will include statements to turn on the appropriate
+directives. So if you then compile the code returned by coderef2text,
+it will behave the same way as the subroutine which you deparsed.
+
+However, you may know that you intend to use the results in a
+particular context, where some pragmas are already in scope. In
+this case, you use the B<ambient_pragmas> method to describe the
+assumptions you wish to make.
+
+Not all of the options currently have any useful effect. See
+L</BUGS> for more details.
+
+The parameters it accepts are:
+
+=over 4
+
+=item strict
+
+Takes a string, possibly containing several values separated
+by whitespace. The special values "all" and "none" mean what you'd
+expect.
+
+ $deparse->ambient_pragmas(strict => 'subs refs');
+
+=item $[
+
+Takes a number, the value of the array base $[.
+
+=item bytes
+
+=item utf8
+
+=item integer
+
+If the value is true, then the appropriate pragma is assumed to
+be in the ambient scope, otherwise not.
+
+=item re
+
+Takes a string, possibly containing a whitespace-separated list of
+values. The values "all" and "none" are special. It's also permissible
+to pass an array reference here.
+
+ $deparser->ambient_pragmas(re => 'eval');
+
+
+=item warnings
+
+Takes a string, possibly containing a whitespace-separated list of
+values. The values "all" and "none" are special, again. It's also
+permissible to pass an array reference here.
+
+ $deparser->ambient_pragmas(warnings => [qw[void io]]);
+
+If one of the values is the string "FATAL", then all the warnings
+in that list will be considered fatal, just as with the B<warnings>
+pragma itself. Should you need to specify that some warnings are
+fatal, and others are merely enabled, you can pass the B<warnings>
+parameter twice:
+
+ $deparser->ambient_pragmas(
+ warnings => 'all',
+ warnings => [FATAL => qw/void io/],
+ );
+
+See L<perllexwarn> for more information about lexical warnings.
+
+=item hint_bits
+
+=item warning_bits
+
+These two parameters are used to specify the ambient pragmas in
+the format used by the special variables $^H and ${^WARNING_BITS}.
+
+They exist principally so that you can write code like:
+
+ { my ($hint_bits, $warning_bits);
+ BEGIN {($hint_bits, $warning_bits) = ($^H, ${^WARNING_BITS})}
+ $deparser->ambient_pragmas (
+ hint_bits => $hint_bits,
+ warning_bits => $warning_bits,
+ '$[' => 0 + $[
+ ); }
+
+which specifies that the ambient pragmas are exactly those which
+are in scope at the point of calling.
+
+=back
+
+=head2 coderef2text
+
+ $body = $deparse->coderef2text(\&func)
+ $body = $deparse->coderef2text(sub ($$) { ... })
+
+Return source code for the body of a subroutine (a block, optionally
+preceded by a prototype in parens), given a reference to the
+sub. Because a subroutine can have no names, or more than one name,
+this method doesn't return a complete subroutine definition -- if you
+want to eval the result, you should prepend "sub subname ", or "sub "
+for an anonymous function constructor. Unless the sub was defined in
+the main:: package, the code will include a package declaration.
+
+=head1 BUGS
+
+=over 4
+
+=item *
+
+The only pragmas to be completely supported are: C<use warnings>,
+C<use strict 'refs'>, C<use bytes>, and C<use integer>. (C<$[>, which
+behaves like a pragma, is also supported.)
+
+Excepting those listed above, we're currently unable to guarantee that
+B::Deparse will produce a pragma at the correct point in the program.
+(Specifically, pragmas at the beginning of a block often appear right
+before the start of the block instead.)
+Since the effects of pragmas are often lexically scoped, this can mean
+that the pragma holds sway over a different portion of the program
+than in the input file.
+
+=item *
+
+In fact, the above is a specific instance of a more general problem:
+we can't guarantee to produce BEGIN blocks or C<use> declarations in
+exactly the right place. So if you use a module which affects compilation
+(such as by over-riding keywords, overloading constants or whatever)
+then the output code might not work as intended.
+
+This is the most serious outstanding problem, and will require some help
+from the Perl core to fix.
+
+=item *
+
+If a keyword is over-ridden, and your program explicitly calls
+the built-in version by using CORE::keyword, the output of B::Deparse
+will not reflect this. If you run the resulting code, it will call
+the over-ridden version rather than the built-in one. (Maybe there
+should be an option to B<always> print keyword calls as C<CORE::name>.)
+
+=item *
+
+Some constants don't print correctly either with or without B<-d>.
+For instance, neither B::Deparse nor Data::Dumper know how to print
+dual-valued scalars correctly, as in:
+
+ use constant E2BIG => ($!=7); $y = E2BIG; print $y, 0+$y;
+
+=item *
+
+An input file that uses source filtering probably won't be deparsed into
+runnable code, because it will still include the B<use> declaration
+for the source filtering module, even though the code that is
+produced is already ordinary Perl which shouldn't be filtered again.
+
+=item *
+
+Optimised away statements are rendered as '???'. This includes statements that
+have a compile-time side-effect, such as the obscure
+
+ my $x if 0;
+
+which is not, consequently, deparsed correctly.
+
+=item *
+
+There are probably many more bugs on non-ASCII platforms (EBCDIC).
+
+=back
+
+=head1 AUTHOR
+
+Stephen McCamant <smcc@CSUA.Berkeley.EDU>, based on an earlier version
+by Malcolm Beattie <mbeattie@sable.ox.ac.uk>, with contributions from
+Gisle Aas, James Duncan, Albert Dvornik, Robin Houston, Dave Mitchell,
+Hugo van der Sanden, Gurusamy Sarathy, Nick Ing-Simmons, and Rafael
+Garcia-Suarez.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Disassembler.pm b/Master/tlpkg/tlperl/lib/B/Disassembler.pm
new file mode 100644
index 00000000000..e1993aa9537
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Disassembler.pm
@@ -0,0 +1,233 @@
+# Disassembler.pm
+#
+# Copyright (c) 1996 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+
+$B::Disassembler::VERSION = '1.05';
+
+package B::Disassembler::BytecodeStream;
+
+use FileHandle;
+use Carp;
+use Config qw(%Config);
+use B qw(cstring cast_I32);
+@ISA = qw(FileHandle);
+sub readn {
+ my ($fh, $len) = @_;
+ my $data;
+ read($fh, $data, $len);
+ croak "reached EOF while reading $len bytes" unless length($data) == $len;
+ return $data;
+}
+
+sub GET_U8 {
+ my $fh = shift;
+ my $c = $fh->getc;
+ croak "reached EOF while reading U8" unless defined($c);
+ return ord($c);
+}
+
+sub GET_U16 {
+ my $fh = shift;
+ my $str = $fh->readn(2);
+ croak "reached EOF while reading U16" unless length($str) == 2;
+ return unpack("S", $str);
+}
+
+sub GET_NV {
+ my $fh = shift;
+ my ($str, $c);
+ while (defined($c = $fh->getc) && $c ne "\0") {
+ $str .= $c;
+ }
+ croak "reached EOF while reading double" unless defined($c);
+ return $str;
+}
+
+sub GET_U32 {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading U32" unless length($str) == 4;
+ return unpack("L", $str);
+}
+
+sub GET_I32 {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading I32" unless length($str) == 4;
+ return unpack("l", $str);
+}
+
+sub GET_objindex {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading objindex" unless length($str) == 4;
+ return unpack("L", $str);
+}
+
+sub GET_opindex {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading opindex" unless length($str) == 4;
+ return unpack("L", $str);
+}
+
+sub GET_svindex {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading svindex" unless length($str) == 4;
+ return unpack("L", $str);
+}
+
+sub GET_pvindex {
+ my $fh = shift;
+ my $str = $fh->readn(4);
+ croak "reached EOF while reading pvindex" unless length($str) == 4;
+ return unpack("L", $str);
+}
+
+sub GET_strconst {
+ my $fh = shift;
+ my ($str, $c);
+ $str = '';
+ while (defined($c = $fh->getc) && $c ne "\0") {
+ $str .= $c;
+ }
+ croak "reached EOF while reading strconst" unless defined($c);
+ return cstring($str);
+}
+
+sub GET_pvcontents {}
+
+sub GET_PV {
+ my $fh = shift;
+ my $str;
+ my $len = $fh->GET_U32;
+ if ($len) {
+ read($fh, $str, $len);
+ croak "reached EOF while reading PV" unless length($str) == $len;
+ return cstring($str);
+ } else {
+ return '""';
+ }
+}
+
+sub GET_comment_t {
+ my $fh = shift;
+ my ($str, $c);
+ while (defined($c = $fh->getc) && $c ne "\n") {
+ $str .= $c;
+ }
+ croak "reached EOF while reading comment" unless defined($c);
+ return cstring($str);
+}
+
+sub GET_double {
+ my $fh = shift;
+ my ($str, $c);
+ while (defined($c = $fh->getc) && $c ne "\0") {
+ $str .= $c;
+ }
+ croak "reached EOF while reading double" unless defined($c);
+ return $str;
+}
+
+sub GET_none {}
+
+sub GET_op_tr_array {
+ my $fh = shift;
+ my $len = unpack "S", $fh->readn(2);
+ my @ary = unpack "S*", $fh->readn($len*2);
+ return join(",", $len, @ary);
+}
+
+sub GET_IV64 {
+ my $fh = shift;
+ my $str = $fh->readn(8);
+ croak "reached EOF while reading I32" unless length($str) == 8;
+ return sprintf "0x%09llx", unpack("q", $str);
+}
+
+sub GET_IV {
+ $Config{ivsize} == 4 ? &GET_I32 : &GET_IV64;
+}
+
+sub GET_PADOFFSET {
+ $Config{ptrsize} == 8 ? &GET_IV64 : &GET_U32;
+}
+
+sub GET_long {
+ $Config{longsize} == 8 ? &GET_IV64 : &GET_U32;
+}
+
+
+package B::Disassembler;
+use Exporter;
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(disassemble_fh get_header);
+use Carp;
+use strict;
+
+use B::Asmdata qw(%insn_data @insn_name);
+
+our( $magic, $archname, $blversion, $ivsize, $ptrsize );
+
+sub dis_header($){
+ my( $fh ) = @_;
+ $magic = $fh->GET_U32();
+ warn( "bad magic" ) if $magic != 0x43424c50;
+ $archname = $fh->GET_strconst();
+ $blversion = $fh->GET_strconst();
+ $ivsize = $fh->GET_U32();
+ $ptrsize = $fh->GET_U32();
+}
+
+sub get_header(){
+ return( $magic, $archname, $blversion, $ivsize, $ptrsize);
+}
+
+sub disassemble_fh {
+ my ($fh, $out) = @_;
+ my ($c, $getmeth, $insn, $arg);
+ bless $fh, "B::Disassembler::BytecodeStream";
+ dis_header( $fh );
+ while (defined($c = $fh->getc)) {
+ $c = ord($c);
+ $insn = $insn_name[$c];
+ if (!defined($insn) || $insn eq "unused") {
+ my $pos = $fh->tell - 1;
+ die "Illegal instruction code $c at stream offset $pos\n";
+ }
+ $getmeth = $insn_data{$insn}->[2];
+ $arg = $fh->$getmeth();
+ if (defined($arg)) {
+ &$out($insn, $arg);
+ } else {
+ &$out($insn);
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Disassembler - Disassemble Perl bytecode
+
+=head1 SYNOPSIS
+
+ use Disassembler;
+
+=head1 DESCRIPTION
+
+See F<ext/B/B/Disassembler.pm>.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Lint.pm b/Master/tlpkg/tlperl/lib/B/Lint.pm
new file mode 100644
index 00000000000..3475bd2596e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Lint.pm
@@ -0,0 +1,392 @@
+package B::Lint;
+
+our $VERSION = '1.03';
+
+=head1 NAME
+
+B::Lint - Perl lint
+
+=head1 SYNOPSIS
+
+perl -MO=Lint[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+The B::Lint module is equivalent to an extended version of the B<-w>
+option of B<perl>. It is named after the program F<lint> which carries
+out a similar process for C programs.
+
+=head1 OPTIONS AND LINT CHECKS
+
+Option words are separated by commas (not whitespace) and follow the
+usual conventions of compiler backend options. Following any options
+(indicated by a leading B<->) come lint check arguments. Each such
+argument (apart from the special B<all> and B<none> options) is a
+word representing one possible lint check (turning on that check) or
+is B<no-foo> (turning off that check). Before processing the check
+arguments, a standard list of checks is turned on. Later options
+override earlier ones. Available options are:
+
+=over 8
+
+=item B<context>
+
+Produces a warning whenever an array is used in an implicit scalar
+context. For example, both of the lines
+
+ $foo = length(@bar);
+ $foo = @bar;
+
+will elicit a warning. Using an explicit B<scalar()> silences the
+warning. For example,
+
+ $foo = scalar(@bar);
+
+=item B<implicit-read> and B<implicit-write>
+
+These options produce a warning whenever an operation implicitly
+reads or (respectively) writes to one of Perl's special variables.
+For example, B<implicit-read> will warn about these:
+
+ /foo/;
+
+and B<implicit-write> will warn about these:
+
+ s/foo/bar/;
+
+Both B<implicit-read> and B<implicit-write> warn about this:
+
+ for (@a) { ... }
+
+=item B<bare-subs>
+
+This option warns whenever a bareword is implicitly quoted, but is also
+the name of a subroutine in the current package. Typical mistakes that it will
+trap are:
+
+ use constant foo => 'bar';
+ @a = ( foo => 1 );
+ $b{foo} = 2;
+
+Neither of these will do what a naive user would expect.
+
+=item B<dollar-underscore>
+
+This option warns whenever C<$_> is used either explicitly anywhere or
+as the implicit argument of a B<print> statement.
+
+=item B<private-names>
+
+This option warns on each use of any variable, subroutine or
+method name that lives in a non-current package but begins with
+an underscore ("_"). Warnings aren't issued for the special case
+of the single character name "_" by itself (e.g. C<$_> and C<@_>).
+
+=item B<undefined-subs>
+
+This option warns whenever an undefined subroutine is invoked.
+This option will only catch explicitly invoked subroutines such
+as C<foo()> and not indirect invocations such as C<&$subref()>
+or C<$obj-E<gt>meth()>. Note that some programs or modules delay
+definition of subs until runtime by means of the AUTOLOAD
+mechanism.
+
+=item B<regexp-variables>
+
+This option warns whenever one of the regexp variables C<$`>, C<$&> or C<$'>
+is used. Any occurrence of any of these variables in your
+program can slow your whole program down. See L<perlre> for
+details.
+
+=item B<all>
+
+Turn all warnings on.
+
+=item B<none>
+
+Turn all warnings off.
+
+=back
+
+=head1 NON LINT-CHECK OPTIONS
+
+=over 8
+
+=item B<-u Package>
+
+Normally, Lint only checks the main code of the program together
+with all subs defined in package main. The B<-u> option lets you
+include other package names whose subs are then checked by Lint.
+
+=back
+
+=head1 BUGS
+
+This is only a very preliminary version.
+
+This module doesn't work correctly on thread-enabled perls.
+
+=head1 AUTHOR
+
+Malcolm Beattie, mbeattie@sable.ox.ac.uk.
+
+=cut
+
+use strict;
+use B qw(walkoptree_slow main_root walksymtable svref_2object parents
+ OPf_WANT_LIST OPf_WANT OPf_STACKED G_ARRAY SVf_POK
+ );
+
+my $file = "unknown"; # shadows current filename
+my $line = 0; # shadows current line number
+my $curstash = "main"; # shadows current stash
+
+# Lint checks
+my %check;
+my %implies_ok_context;
+BEGIN {
+ map($implies_ok_context{$_}++,
+ qw(scalar av2arylen aelem aslice helem hslice
+ keys values hslice defined undef delete));
+}
+
+# Lint checks turned on by default
+my @default_checks = qw(context);
+
+my %valid_check;
+# All valid checks
+BEGIN {
+ map($valid_check{$_}++,
+ qw(context implicit_read implicit_write dollar_underscore
+ private_names bare_subs undefined_subs regexp_variables));
+}
+
+# Debugging options
+my ($debug_op);
+
+my %done_cv; # used to mark which subs have already been linted
+my @extra_packages; # Lint checks mainline code and all subs which are
+ # in main:: or in one of these packages.
+
+sub warning {
+ my $format = (@_ < 2) ? "%s" : shift;
+ warn sprintf("$format at %s line %d\n", @_, $file, $line);
+}
+
+# This gimme can't cope with context that's only determined
+# at runtime via dowantarray().
+sub gimme {
+ my $op = shift;
+ my $flags = $op->flags;
+ if ($flags & OPf_WANT) {
+ return(($flags & OPf_WANT) == OPf_WANT_LIST ? 1 : 0);
+ }
+ return undef;
+}
+
+sub B::OP::lint {}
+
+sub B::COP::lint {
+ my $op = shift;
+ if ($op->name eq "nextstate") {
+ $file = $op->file;
+ $line = $op->line;
+ $curstash = $op->stash->NAME;
+ }
+}
+
+sub B::UNOP::lint {
+ my $op = shift;
+ my $opname = $op->name;
+ if ($check{context} && ($opname eq "rv2av" || $opname eq "rv2hv")) {
+ my $parent = parents->[0];
+ my $pname = $parent->name;
+ return if gimme($op) || $implies_ok_context{$pname};
+ # Two special cases to deal with: "foreach (@foo)" and "delete $a{$b}"
+ # null out the parent so we have to check for a parent of pp_null and
+ # a grandparent of pp_enteriter or pp_delete
+ if ($pname eq "null") {
+ my $gpname = parents->[1]->name;
+ return if $gpname eq "enteriter" || $gpname eq "delete";
+ }
+ warning("Implicit scalar context for %s in %s",
+ $opname eq "rv2av" ? "array" : "hash", $parent->desc);
+ }
+ if ($check{private_names} && $opname eq "method") {
+ my $methop = $op->first;
+ if ($methop->name eq "const") {
+ my $method = $methop->sv->PV;
+ if ($method =~ /^_/ && !defined(&{"$curstash\::$method"})) {
+ warning("Illegal reference to private method name $method");
+ }
+ }
+ }
+}
+
+sub B::PMOP::lint {
+ my $op = shift;
+ if ($check{implicit_read}) {
+ if ($op->name eq "match" && !($op->flags & OPf_STACKED)) {
+ warning('Implicit match on $_');
+ }
+ }
+ if ($check{implicit_write}) {
+ if ($op->name eq "subst" && !($op->flags & OPf_STACKED)) {
+ warning('Implicit substitution on $_');
+ }
+ }
+}
+
+sub B::LOOP::lint {
+ my $op = shift;
+ if ($check{implicit_read} || $check{implicit_write}) {
+ if ($op->name eq "enteriter") {
+ my $last = $op->last;
+ if ($last->name eq "gv" && $last->gv->NAME eq "_") {
+ warning('Implicit use of $_ in foreach');
+ }
+ }
+ }
+}
+
+sub B::SVOP::lint {
+ my $op = shift;
+ if ( $check{bare_subs} && $op->name eq 'const'
+ && $op->private & 64 ) # OPpCONST_BARE = 64 in op.h
+ {
+ my $sv = $op->sv;
+ if( $sv->FLAGS & SVf_POK && exists &{$curstash.'::'.$sv->PV} ) {
+ warning "Bare sub name '" . $sv->PV . "' interpreted as string";
+ }
+ }
+ if ($check{dollar_underscore} && $op->name eq "gvsv"
+ && $op->gv->NAME eq "_")
+ {
+ warning('Use of $_');
+ }
+ if ($check{private_names}) {
+ my $opname = $op->name;
+ if ($opname eq "gv" || $opname eq "gvsv") {
+ my $gv = $op->gv;
+ if ($gv->NAME =~ /^_./ && $gv->STASH->NAME ne $curstash) {
+ warning('Illegal reference to private name %s', $gv->NAME);
+ }
+ } elsif ($opname eq "method_named") {
+ my $method = $op->gv->PV;
+ if ($method =~ /^_./) {
+ warning("Illegal reference to private method name $method");
+ }
+ }
+ }
+ if ($check{undefined_subs}) {
+ if ($op->name eq "gv"
+ && $op->next->name eq "entersub")
+ {
+ my $gv = $op->gv;
+ my $subname = $gv->STASH->NAME . "::" . $gv->NAME;
+ no strict 'refs';
+ if (!defined(&$subname)) {
+ $subname =~ s/^main:://;
+ warning('Undefined subroutine %s called', $subname);
+ }
+ }
+ }
+ if ($check{regexp_variables} && $op->name eq "gvsv") {
+ my $name = $op->gv->NAME;
+ if ($name =~ /^[&'`]$/) {
+ warning('Use of regexp variable $%s', $name);
+ }
+ }
+}
+
+sub B::GV::lintcv {
+ my $gv = shift;
+ my $cv = $gv->CV;
+ #warn sprintf("lintcv: %s::%s (done=%d)\n",
+ # $gv->STASH->NAME, $gv->NAME, $done_cv{$$cv});#debug
+ return if !$$cv || $done_cv{$$cv}++;
+ my $root = $cv->ROOT;
+ #warn " root = $root (0x$$root)\n";#debug
+ walkoptree_slow($root, "lint") if $$root;
+}
+
+sub do_lint {
+ my %search_pack;
+ walkoptree_slow(main_root, "lint") if ${main_root()};
+
+ # Now do subs in main
+ no strict qw(vars refs);
+ local(*glob);
+ for my $sym (keys %main::) {
+ next if $sym =~ /::$/;
+ *glob = $main::{$sym};
+ svref_2object(\*glob)->EGV->lintcv;
+ }
+
+ # Now do subs in non-main packages given by -u options
+ map { $search_pack{$_} = 1 } @extra_packages;
+ walksymtable(\%{"main::"}, "lintcv", sub {
+ my $package = shift;
+ $package =~ s/::$//;
+ #warn "Considering $package\n";#debug
+ return exists $search_pack{$package};
+ });
+}
+
+sub compile {
+ my @options = @_;
+ my ($option, $opt, $arg);
+ # Turn on default lint checks
+ for $opt (@default_checks) {
+ $check{$opt} = 1;
+ }
+ OPTION:
+ while ($option = shift @options) {
+ if ($option =~ /^-(.)(.*)/) {
+ $opt = $1;
+ $arg = $2;
+ } else {
+ unshift @options, $option;
+ last OPTION;
+ }
+ if ($opt eq "-" && $arg eq "-") {
+ shift @options;
+ last OPTION;
+ } elsif ($opt eq "D") {
+ $arg ||= shift @options;
+ foreach $arg (split(//, $arg)) {
+ if ($arg eq "o") {
+ B->debug(1);
+ } elsif ($arg eq "O") {
+ $debug_op = 1;
+ }
+ }
+ } elsif ($opt eq "u") {
+ $arg ||= shift @options;
+ push(@extra_packages, $arg);
+ }
+ }
+ foreach $opt (@default_checks, @options) {
+ $opt =~ tr/-/_/;
+ if ($opt eq "all") {
+ %check = %valid_check;
+ }
+ elsif ($opt eq "none") {
+ %check = ();
+ }
+ else {
+ if ($opt =~ s/^no_//) {
+ $check{$opt} = 0;
+ }
+ else {
+ $check{$opt} = 1;
+ }
+ warn "No such check: $opt\n" unless defined $valid_check{$opt};
+ }
+ }
+ # Remaining arguments are things to check
+
+ return \&do_lint;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/B/Showlex.pm b/Master/tlpkg/tlperl/lib/B/Showlex.pm
new file mode 100644
index 00000000000..3b261a337df
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Showlex.pm
@@ -0,0 +1,205 @@
+package B::Showlex;
+
+our $VERSION = '1.02';
+
+use strict;
+use B qw(svref_2object comppadlist class);
+use B::Terse ();
+use B::Concise ();
+
+#
+# Invoke as
+# perl -MO=Showlex,foo bar.pl
+# to see the names of lexical variables used by &foo
+# or as
+# perl -MO=Showlex bar.pl
+# to see the names of file scope lexicals used by bar.pl
+#
+
+
+# borrowed from B::Concise
+our $walkHandle = \*STDOUT;
+
+sub walk_output { # updates $walkHandle
+ $walkHandle = B::Concise::walk_output(@_);
+ #print "got $walkHandle";
+ #print $walkHandle "using it";
+ $walkHandle;
+}
+
+sub shownamearray {
+ my ($name, $av) = @_;
+ my @els = $av->ARRAY;
+ my $count = @els;
+ my $i;
+ print $walkHandle "$name has $count entries\n";
+ for ($i = 0; $i < $count; $i++) {
+ my $sv = $els[$i];
+ if (class($sv) ne "SPECIAL") {
+ printf $walkHandle "$i: %s (0x%lx) %s\n", class($sv), $$sv, $sv->PVX;
+ } else {
+ printf $walkHandle "$i: %s\n", $sv->terse;
+ #printf $walkHandle "$i: %s\n", B::Concise::concise_sv($sv);
+ }
+ }
+}
+
+sub showvaluearray {
+ my ($name, $av) = @_;
+ my @els = $av->ARRAY;
+ my $count = @els;
+ my $i;
+ print $walkHandle "$name has $count entries\n";
+ for ($i = 0; $i < $count; $i++) {
+ printf $walkHandle "$i: %s\n", $els[$i]->terse;
+ #print $walkHandle "$i: %s\n", B::Concise::concise_sv($els[$i]);
+ }
+}
+
+sub showlex {
+ my ($objname, $namesav, $valsav) = @_;
+ shownamearray("Pad of lexical names for $objname", $namesav);
+ showvaluearray("Pad of lexical values for $objname", $valsav);
+}
+
+my ($newlex, $nosp1); # rendering state vars
+
+sub newlex { # drop-in for showlex
+ my ($objname, $names, $vals) = @_;
+ my @names = $names->ARRAY;
+ my @vals = $vals->ARRAY;
+ my $count = @names;
+ print $walkHandle "$objname Pad has $count entries\n";
+ printf $walkHandle "0: %s\n", $names[0]->terse unless $nosp1;
+ for (my $i = 1; $i < $count; $i++) {
+ printf $walkHandle "$i: %s = %s\n", $names[$i]->terse, $vals[$i]->terse
+ unless $nosp1 and $names[$i]->terse =~ /SPECIAL/;
+ }
+}
+
+sub showlex_obj {
+ my ($objname, $obj) = @_;
+ $objname =~ s/^&main::/&/;
+ showlex($objname, svref_2object($obj)->PADLIST->ARRAY) if !$newlex;
+ newlex ($objname, svref_2object($obj)->PADLIST->ARRAY) if $newlex;
+}
+
+sub showlex_main {
+ showlex("comppadlist", comppadlist->ARRAY) if !$newlex;
+ newlex ("main", comppadlist->ARRAY) if $newlex;
+}
+
+sub compile {
+ my @options = grep(/^-/, @_);
+ my @args = grep(!/^-/, @_);
+ for my $o (@options) {
+ $newlex = 1 if $o eq "-newlex";
+ $nosp1 = 1 if $o eq "-nosp";
+ }
+
+ return \&showlex_main unless @args;
+ return sub {
+ my $objref;
+ foreach my $objname (@args) {
+ next unless $objname; # skip nulls w/o carping
+
+ if (ref $objname) {
+ print $walkHandle "B::Showlex::compile($objname)\n";
+ $objref = $objname;
+ } else {
+ $objname = "main::$objname" unless $objname =~ /::/;
+ print $walkHandle "$objname:\n";
+ no strict 'refs';
+ die "err: unknown function ($objname)\n"
+ unless *{$objname}{CODE};
+ $objref = \&$objname;
+ }
+ showlex_obj($objname, $objref);
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Showlex - Show lexical variables used in functions or files
+
+=head1 SYNOPSIS
+
+ perl -MO=Showlex[,-OPTIONS][,SUBROUTINE] foo.pl
+
+=head1 DESCRIPTION
+
+When a comma-separated list of subroutine names is given as options, Showlex
+prints the lexical variables used in those subroutines. Otherwise, it prints
+the file-scope lexicals in the file.
+
+=head1 EXAMPLES
+
+Traditional form:
+
+ $ perl -MO=Showlex -e 'my ($i,$j,$k)=(1,"foo")'
+ Pad of lexical names for comppadlist has 4 entries
+ 0: SPECIAL #1 &PL_sv_undef
+ 1: PVNV (0x9db0fb0) $i
+ 2: PVNV (0x9db0f38) $j
+ 3: PVNV (0x9db0f50) $k
+ Pad of lexical values for comppadlist has 5 entries
+ 0: SPECIAL #1 &PL_sv_undef
+ 1: NULL (0x9da4234)
+ 2: NULL (0x9db0f2c)
+ 3: NULL (0x9db0f44)
+ 4: NULL (0x9da4264)
+ -e syntax OK
+
+New-style form:
+
+ $ perl -MO=Showlex,-newlex -e 'my ($i,$j,$k)=(1,"foo")'
+ main Pad has 4 entries
+ 0: SPECIAL #1 &PL_sv_undef
+ 1: PVNV (0xa0c4fb8) "$i" = NULL (0xa0b8234)
+ 2: PVNV (0xa0c4f40) "$j" = NULL (0xa0c4f34)
+ 3: PVNV (0xa0c4f58) "$k" = NULL (0xa0c4f4c)
+ -e syntax OK
+
+New form, no specials, outside O framework:
+
+ $ perl -MB::Showlex -e \
+ 'my ($i,$j,$k)=(1,"foo"); B::Showlex::compile(-newlex,-nosp)->()'
+ main Pad has 4 entries
+ 1: PVNV (0x998ffb0) "$i" = IV (0x9983234) 1
+ 2: PVNV (0x998ff68) "$j" = PV (0x998ff5c) "foo"
+ 3: PVNV (0x998ff80) "$k" = NULL (0x998ff74)
+
+Note that this example shows the values of the lexicals, whereas the other
+examples did not (as they're compile-time only).
+
+=head2 OPTIONS
+
+The C<-newlex> option produces a more readable C<< name => value >> format,
+and is shown in the second example above.
+
+The C<-nosp> option eliminates reporting of SPECIALs, such as C<0: SPECIAL
+#1 &PL_sv_undef> above. Reporting of SPECIALs can sometimes overwhelm
+your declared lexicals.
+
+=head1 SEE ALSO
+
+C<B::Showlex> can also be used outside of the O framework, as in the third
+example. See C<B::Concise> for a fuller explanation of reasons.
+
+=head1 TODO
+
+Some of the reported info, such as hex addresses, is not particularly
+valuable. Other information would be more useful for the typical
+programmer, such as line-numbers, pad-slot reuses, etc.. Given this,
+-newlex isnt a particularly good flag-name.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Stackobj.pm b/Master/tlpkg/tlperl/lib/B/Stackobj.pm
new file mode 100644
index 00000000000..b17dfb8173a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Stackobj.pm
@@ -0,0 +1,349 @@
+# Stackobj.pm
+#
+# Copyright (c) 1996 Malcolm Beattie
+#
+# You may distribute under the terms of either the GNU General Public
+# License or the Artistic License, as specified in the README file.
+#
+package B::Stackobj;
+
+our $VERSION = '1.00';
+
+use Exporter ();
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(set_callback T_UNKNOWN T_DOUBLE T_INT VALID_UNSIGNED
+ VALID_INT VALID_DOUBLE VALID_SV REGISTER TEMPORARY);
+%EXPORT_TAGS = (types => [qw(T_UNKNOWN T_DOUBLE T_INT)],
+ flags => [qw(VALID_INT VALID_DOUBLE VALID_SV
+ VALID_UNSIGNED REGISTER TEMPORARY)]);
+
+use Carp qw(confess);
+use strict;
+use B qw(class SVf_IOK SVf_NOK SVf_IVisUV);
+
+# Types
+sub T_UNKNOWN () { 0 }
+sub T_DOUBLE () { 1 }
+sub T_INT () { 2 }
+sub T_SPECIAL () { 3 }
+
+# Flags
+sub VALID_INT () { 0x01 }
+sub VALID_UNSIGNED () { 0x02 }
+sub VALID_DOUBLE () { 0x04 }
+sub VALID_SV () { 0x08 }
+sub REGISTER () { 0x10 } # no implicit write-back when calling subs
+sub TEMPORARY () { 0x20 } # no implicit write-back needed at all
+sub SAVE_INT () { 0x40 } #if int part needs to be saved at all
+sub SAVE_DOUBLE () { 0x80 } #if double part needs to be saved at all
+
+
+#
+# Callback for runtime code generation
+#
+my $runtime_callback = sub { confess "set_callback not yet called" };
+sub set_callback (&) { $runtime_callback = shift }
+sub runtime { &$runtime_callback(@_) }
+
+#
+# Methods
+#
+
+sub write_back { confess "stack object does not implement write_back" }
+
+sub invalidate { shift->{flags} &= ~(VALID_INT |VALID_UNSIGNED | VALID_DOUBLE) }
+
+sub as_sv {
+ my $obj = shift;
+ if (!($obj->{flags} & VALID_SV)) {
+ $obj->write_back;
+ $obj->{flags} |= VALID_SV;
+ }
+ return $obj->{sv};
+}
+
+sub as_int {
+ my $obj = shift;
+ if (!($obj->{flags} & VALID_INT)) {
+ $obj->load_int;
+ $obj->{flags} |= VALID_INT|SAVE_INT;
+ }
+ return $obj->{iv};
+}
+
+sub as_double {
+ my $obj = shift;
+ if (!($obj->{flags} & VALID_DOUBLE)) {
+ $obj->load_double;
+ $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
+ }
+ return $obj->{nv};
+}
+
+sub as_numeric {
+ my $obj = shift;
+ return $obj->{type} == T_INT ? $obj->as_int : $obj->as_double;
+}
+
+sub as_bool {
+ my $obj=shift;
+ if ($obj->{flags} & VALID_INT ){
+ return $obj->{iv};
+ }
+ if ($obj->{flags} & VALID_DOUBLE ){
+ return $obj->{nv};
+ }
+ return sprintf("(SvTRUE(%s))", $obj->as_sv) ;
+}
+
+#
+# Debugging methods
+#
+sub peek {
+ my $obj = shift;
+ my $type = $obj->{type};
+ my $flags = $obj->{flags};
+ my @flags;
+ if ($type == T_UNKNOWN) {
+ $type = "T_UNKNOWN";
+ } elsif ($type == T_INT) {
+ $type = "T_INT";
+ } elsif ($type == T_DOUBLE) {
+ $type = "T_DOUBLE";
+ } else {
+ $type = "(illegal type $type)";
+ }
+ push(@flags, "VALID_INT") if $flags & VALID_INT;
+ push(@flags, "VALID_DOUBLE") if $flags & VALID_DOUBLE;
+ push(@flags, "VALID_SV") if $flags & VALID_SV;
+ push(@flags, "REGISTER") if $flags & REGISTER;
+ push(@flags, "TEMPORARY") if $flags & TEMPORARY;
+ @flags = ("none") unless @flags;
+ return sprintf("%s type=$type flags=%s sv=$obj->{sv}",
+ class($obj), join("|", @flags));
+}
+
+sub minipeek {
+ my $obj = shift;
+ my $type = $obj->{type};
+ my $flags = $obj->{flags};
+ if ($type == T_INT || $flags & VALID_INT) {
+ return $obj->{iv};
+ } elsif ($type == T_DOUBLE || $flags & VALID_DOUBLE) {
+ return $obj->{nv};
+ } else {
+ return $obj->{sv};
+ }
+}
+
+#
+# Caller needs to ensure that set_int, set_double,
+# set_numeric and set_sv are only invoked on legal lvalues.
+#
+sub set_int {
+ my ($obj, $expr,$unsigned) = @_;
+ runtime("$obj->{iv} = $expr;");
+ $obj->{flags} &= ~(VALID_SV | VALID_DOUBLE);
+ $obj->{flags} |= VALID_INT|SAVE_INT;
+ $obj->{flags} |= VALID_UNSIGNED if $unsigned;
+}
+
+sub set_double {
+ my ($obj, $expr) = @_;
+ runtime("$obj->{nv} = $expr;");
+ $obj->{flags} &= ~(VALID_SV | VALID_INT);
+ $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
+}
+
+sub set_numeric {
+ my ($obj, $expr) = @_;
+ if ($obj->{type} == T_INT) {
+ $obj->set_int($expr);
+ } else {
+ $obj->set_double($expr);
+ }
+}
+
+sub set_sv {
+ my ($obj, $expr) = @_;
+ runtime("SvSetSV($obj->{sv}, $expr);");
+ $obj->invalidate;
+ $obj->{flags} |= VALID_SV;
+}
+
+#
+# Stackobj::Padsv
+#
+
+@B::Stackobj::Padsv::ISA = 'B::Stackobj';
+sub B::Stackobj::Padsv::new {
+ my ($class, $type, $extra_flags, $ix, $iname, $dname) = @_;
+ $extra_flags |= SAVE_INT if $extra_flags & VALID_INT;
+ $extra_flags |= SAVE_DOUBLE if $extra_flags & VALID_DOUBLE;
+ bless {
+ type => $type,
+ flags => VALID_SV | $extra_flags,
+ sv => "PL_curpad[$ix]",
+ iv => "$iname",
+ nv => "$dname"
+ }, $class;
+}
+
+sub B::Stackobj::Padsv::load_int {
+ my $obj = shift;
+ if ($obj->{flags} & VALID_DOUBLE) {
+ runtime("$obj->{iv} = $obj->{nv};");
+ } else {
+ runtime("$obj->{iv} = SvIV($obj->{sv});");
+ }
+ $obj->{flags} |= VALID_INT|SAVE_INT;
+}
+
+sub B::Stackobj::Padsv::load_double {
+ my $obj = shift;
+ $obj->write_back;
+ runtime("$obj->{nv} = SvNV($obj->{sv});");
+ $obj->{flags} |= VALID_DOUBLE|SAVE_DOUBLE;
+}
+sub B::Stackobj::Padsv::save_int {
+ my $obj = shift;
+ return $obj->{flags} & SAVE_INT;
+}
+
+sub B::Stackobj::Padsv::save_double {
+ my $obj = shift;
+ return $obj->{flags} & SAVE_DOUBLE;
+}
+
+sub B::Stackobj::Padsv::write_back {
+ my $obj = shift;
+ my $flags = $obj->{flags};
+ return if $flags & VALID_SV;
+ if ($flags & VALID_INT) {
+ if ($flags & VALID_UNSIGNED ){
+ runtime("sv_setuv($obj->{sv}, $obj->{iv});");
+ }else{
+ runtime("sv_setiv($obj->{sv}, $obj->{iv});");
+ }
+ } elsif ($flags & VALID_DOUBLE) {
+ runtime("sv_setnv($obj->{sv}, $obj->{nv});");
+ } else {
+ confess "write_back failed for lexical @{[$obj->peek]}\n";
+ }
+ $obj->{flags} |= VALID_SV;
+}
+
+#
+# Stackobj::Const
+#
+
+@B::Stackobj::Const::ISA = 'B::Stackobj';
+sub B::Stackobj::Const::new {
+ my ($class, $sv) = @_;
+ my $obj = bless {
+ flags => 0,
+ sv => $sv # holds the SV object until write_back happens
+ }, $class;
+ if ( ref($sv) eq "B::SPECIAL" ){
+ $obj->{type}= T_SPECIAL;
+ }else{
+ my $svflags = $sv->FLAGS;
+ if ($svflags & SVf_IOK) {
+ $obj->{flags} = VALID_INT|VALID_DOUBLE;
+ $obj->{type} = T_INT;
+ if ($svflags & SVf_IVisUV){
+ $obj->{flags} |= VALID_UNSIGNED;
+ $obj->{nv} = $obj->{iv} = $sv->UVX;
+ }else{
+ $obj->{nv} = $obj->{iv} = $sv->IV;
+ }
+ } elsif ($svflags & SVf_NOK) {
+ $obj->{flags} = VALID_INT|VALID_DOUBLE;
+ $obj->{type} = T_DOUBLE;
+ $obj->{iv} = $obj->{nv} = $sv->NV;
+ } else {
+ $obj->{type} = T_UNKNOWN;
+ }
+ }
+ return $obj;
+}
+
+sub B::Stackobj::Const::write_back {
+ my $obj = shift;
+ return if $obj->{flags} & VALID_SV;
+ # Save the SV object and replace $obj->{sv} by its C source code name
+ $obj->{sv} = $obj->{sv}->save;
+ $obj->{flags} |= VALID_SV|VALID_INT|VALID_DOUBLE;
+}
+
+sub B::Stackobj::Const::load_int {
+ my $obj = shift;
+ if (ref($obj->{sv}) eq "B::RV"){
+ $obj->{iv} = int($obj->{sv}->RV->PV);
+ }else{
+ $obj->{iv} = int($obj->{sv}->PV);
+ }
+ $obj->{flags} |= VALID_INT;
+}
+
+sub B::Stackobj::Const::load_double {
+ my $obj = shift;
+ if (ref($obj->{sv}) eq "B::RV"){
+ $obj->{nv} = $obj->{sv}->RV->PV + 0.0;
+ }else{
+ $obj->{nv} = $obj->{sv}->PV + 0.0;
+ }
+ $obj->{flags} |= VALID_DOUBLE;
+}
+
+sub B::Stackobj::Const::invalidate {}
+
+#
+# Stackobj::Bool
+#
+
+@B::Stackobj::Bool::ISA = 'B::Stackobj';
+sub B::Stackobj::Bool::new {
+ my ($class, $preg) = @_;
+ my $obj = bless {
+ type => T_INT,
+ flags => VALID_INT|VALID_DOUBLE,
+ iv => $$preg,
+ nv => $$preg,
+ preg => $preg # this holds our ref to the pseudo-reg
+ }, $class;
+ return $obj;
+}
+
+sub B::Stackobj::Bool::write_back {
+ my $obj = shift;
+ return if $obj->{flags} & VALID_SV;
+ $obj->{sv} = "($obj->{iv} ? &PL_sv_yes : &PL_sv_no)";
+ $obj->{flags} |= VALID_SV;
+}
+
+# XXX Might want to handle as_double/set_double/load_double?
+
+sub B::Stackobj::Bool::invalidate {}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Stackobj - Helper module for CC backend
+
+=head1 SYNOPSIS
+
+ use B::Stackobj;
+
+=head1 DESCRIPTION
+
+See F<ext/B/README>.
+
+=head1 AUTHOR
+
+Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Stash.pm b/Master/tlpkg/tlperl/lib/B/Stash.pm
new file mode 100644
index 00000000000..5e60868a28e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Stash.pm
@@ -0,0 +1,52 @@
+# Stash.pm -- show what stashes are loaded
+# vishalb@hotmail.com
+package B::Stash;
+
+our $VERSION = '1.00';
+
+=pod
+
+=head1 NAME
+
+B::Stash - show what stashes are loaded
+
+=cut
+
+BEGIN { %Seen = %INC }
+
+CHECK {
+ my @arr=scan($main::{"main::"});
+ @arr=map{s/\:\:$//;$_ eq "<none>"?():$_;} @arr;
+ print "-umain,-u", join (",-u",@arr) ,"\n";
+}
+sub scan{
+ my $start=shift;
+ my $prefix=shift;
+ $prefix = '' unless defined $prefix;
+ my @return;
+ foreach my $key ( keys %{$start}){
+# print $prefix,$key,"\n";
+ if ($key =~ /::$/){
+ unless ($start eq ${$start}{$key} or $key eq "B::" ){
+ push @return, $key unless omit($prefix.$key);
+ foreach my $subscan ( scan(${$start}{$key},$prefix.$key)){
+ push @return, "$key".$subscan;
+ }
+ }
+ }
+ }
+ return @return;
+}
+sub omit{
+ my $module = shift;
+ my %omit=("DynaLoader::" => 1 , "XSLoader::" => 1, "CORE::" => 1 ,
+ "CORE::GLOBAL::" => 1, "UNIVERSAL::" => 1 );
+ return 1 if $omit{$module};
+ if ($module eq "IO::" or $module eq "IO::Handle::"){
+ $module =~ s/::/\//g;
+ return 1 unless $INC{$module};
+ }
+
+ return 0;
+}
+1;
diff --git a/Master/tlpkg/tlperl/lib/B/Terse.pm b/Master/tlpkg/tlperl/lib/B/Terse.pm
new file mode 100644
index 00000000000..1d53950ad3b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Terse.pm
@@ -0,0 +1,103 @@
+package B::Terse;
+
+our $VERSION = '1.03_01';
+
+use strict;
+use B qw(class);
+use B::Asmdata qw(@specialsv_name);
+use B::Concise qw(concise_subref set_style_standard);
+use Carp;
+
+sub terse {
+ my ($order, $subref) = @_;
+ set_style_standard("terse");
+ if ($order eq "exec") {
+ concise_subref('exec', $subref);
+ } else {
+ concise_subref('basic', $subref);
+ }
+}
+
+sub compile {
+ my @args = @_;
+ my $order = @args ? shift(@args) : "";
+ $order = "-exec" if $order eq "exec";
+ unshift @args, $order if $order ne "";
+ B::Concise::compile("-terse", @args);
+}
+
+sub indent {
+ my ($level) = @_ ? shift : 0;
+ return " " x $level;
+}
+
+# Don't use this, at least on OPs in subroutines: it has no way of
+# getting to the pad, and will give wrong answers or crash.
+sub B::OP::terse {
+ carp "B::OP::terse is deprecated; use B::Concise instead";
+ B::Concise::b_terse(@_);
+}
+
+sub B::SV::terse {
+ my($sv, $level) = (@_, 0);
+ my %info;
+ B::Concise::concise_sv($sv, \%info);
+ my $s = indent($level)
+ . B::Concise::fmt_line(\%info, $sv,
+ "#svclass~(?((#svaddr))?)~#svval", 0);
+ chomp $s;
+ print "$s\n" unless defined wantarray;
+ $s;
+}
+
+sub B::NULL::terse {
+ my ($sv, $level) = (@_, 0);
+ my $s = indent($level) . sprintf "%s (0x%lx)", class($sv), $$sv;
+ print "$s\n" unless defined wantarray;
+ $s;
+}
+
+sub B::SPECIAL::terse {
+ my ($sv, $level) = (@_, 0);
+ my $s = indent($level)
+ . sprintf( "%s #%d %s", class($sv), $$sv, $specialsv_name[$$sv]);
+ print "$s\n" unless defined wantarray;
+ $s;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Terse - Walk Perl syntax tree, printing terse info about ops
+
+=head1 SYNOPSIS
+
+ perl -MO=Terse[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+This version of B::Terse is really just a wrapper that calls B::Concise
+with the B<-terse> option. It is provided for compatibility with old scripts
+(and habits) but using B::Concise directly is now recommended instead.
+
+For compatibility with the old B::Terse, this module also adds a
+method named C<terse> to B::OP and B::SV objects. The B::SV method is
+largely compatible with the old one, though authors of new software
+might be advised to choose a more user-friendly output format. The
+B::OP C<terse> method, however, doesn't work well. Since B::Terse was
+first written, much more information in OPs has migrated to the
+scratchpad datastructure, but the C<terse> interface doesn't have any
+way of getting to the correct pad. As a kludge, the new version will
+always use the pad for the main program, but for OPs in subroutines
+this will give the wrong answer or crash.
+
+=head1 AUTHOR
+
+The original version of B::Terse was written by Malcolm Beattie,
+E<lt>mbeattie@sable.ox.ac.ukE<gt>. This wrapper was written by Stephen
+McCamant, E<lt>smcc@MIT.EDUE<gt>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/B/Xref.pm b/Master/tlpkg/tlperl/lib/B/Xref.pm
new file mode 100644
index 00000000000..f727dc766b5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/Xref.pm
@@ -0,0 +1,430 @@
+package B::Xref;
+
+our $VERSION = '1.01';
+
+=head1 NAME
+
+B::Xref - Generates cross reference reports for Perl programs
+
+=head1 SYNOPSIS
+
+perl -MO=Xref[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+The B::Xref module is used to generate a cross reference listing of all
+definitions and uses of variables, subroutines and formats in a Perl program.
+It is implemented as a backend for the Perl compiler.
+
+The report generated is in the following format:
+
+ File filename1
+ Subroutine subname1
+ Package package1
+ object1 line numbers
+ object2 line numbers
+ ...
+ Package package2
+ ...
+
+Each B<File> section reports on a single file. Each B<Subroutine> section
+reports on a single subroutine apart from the special cases
+"(definitions)" and "(main)". These report, respectively, on subroutine
+definitions found by the initial symbol table walk and on the main part of
+the program or module external to all subroutines.
+
+The report is then grouped by the B<Package> of each variable,
+subroutine or format with the special case "(lexicals)" meaning
+lexical variables. Each B<object> name (implicitly qualified by its
+containing B<Package>) includes its type character(s) at the beginning
+where possible. Lexical variables are easier to track and even
+included dereferencing information where possible.
+
+The C<line numbers> are a comma separated list of line numbers (some
+preceded by code letters) where that object is used in some way.
+Simple uses aren't preceded by a code letter. Introductions (such as
+where a lexical is first defined with C<my>) are indicated with the
+letter "i". Subroutine and method calls are indicated by the character
+"&". Subroutine definitions are indicated by "s" and format
+definitions by "f".
+
+=head1 OPTIONS
+
+Option words are separated by commas (not whitespace) and follow the
+usual conventions of compiler backend options.
+
+=over 8
+
+=item C<-oFILENAME>
+
+Directs output to C<FILENAME> instead of standard output.
+
+=item C<-r>
+
+Raw output. Instead of producing a human-readable report, outputs a line
+in machine-readable form for each definition/use of a variable/sub/format.
+
+=item C<-d>
+
+Don't output the "(definitions)" sections.
+
+=item C<-D[tO]>
+
+(Internal) debug options, probably only useful if C<-r> included.
+The C<t> option prints the object on the top of the stack as it's
+being tracked. The C<O> option prints each operator as it's being
+processed in the execution order of the program.
+
+=back
+
+=head1 BUGS
+
+Non-lexical variables are quite difficult to track through a program.
+Sometimes the type of a non-lexical variable's use is impossible to
+determine. Introductions of non-lexical non-scalars don't seem to be
+reported properly.
+
+=head1 AUTHOR
+
+Malcolm Beattie, mbeattie@sable.ox.ac.uk.
+
+=cut
+
+use strict;
+use Config;
+use B qw(peekop class comppadlist main_start svref_2object walksymtable
+ OPpLVAL_INTRO SVf_POK OPpOUR_INTRO cstring
+ );
+
+sub UNKNOWN { ["?", "?", "?"] }
+
+my @pad; # lexicals in current pad
+ # as ["(lexical)", type, name]
+my %done; # keyed by $$op: set when each $op is done
+my $top = UNKNOWN; # shadows top element of stack as
+ # [pack, type, name] (pack can be "(lexical)")
+my $file; # shadows current filename
+my $line; # shadows current line number
+my $subname; # shadows current sub name
+my %table; # Multi-level hash to record all uses etc.
+my @todo = (); # List of CVs that need processing
+
+my %code = (intro => "i", used => "",
+ subdef => "s", subused => "&",
+ formdef => "f", meth => "->");
+
+
+# Options
+my ($debug_op, $debug_top, $nodefs, $raw);
+
+sub process {
+ my ($var, $event) = @_;
+ my ($pack, $type, $name) = @$var;
+ if ($type eq "*") {
+ if ($event eq "used") {
+ return;
+ } elsif ($event eq "subused") {
+ $type = "&";
+ }
+ }
+ $type =~ s/(.)\*$/$1/g;
+ if ($raw) {
+ printf "%-16s %-12s %5d %-12s %4s %-16s %s\n",
+ $file, $subname, $line, $pack, $type, $name, $event;
+ } else {
+ # Wheee
+ push(@{$table{$file}->{$subname}->{$pack}->{$type.$name}->{$event}},
+ $line);
+ }
+}
+
+sub load_pad {
+ my $padlist = shift;
+ my ($namelistav, $vallistav, @namelist, $ix);
+ @pad = ();
+ return if class($padlist) eq "SPECIAL";
+ ($namelistav,$vallistav) = $padlist->ARRAY;
+ @namelist = $namelistav->ARRAY;
+ for ($ix = 1; $ix < @namelist; $ix++) {
+ my $namesv = $namelist[$ix];
+ next if class($namesv) eq "SPECIAL";
+ my ($type, $name) = $namesv->PV =~ /^(.)([^\0]*)(\0.*)?$/;
+ $pad[$ix] = ["(lexical)", $type || '?', $name || '?'];
+ }
+ if ($Config{useithreads}) {
+ my (@vallist);
+ @vallist = $vallistav->ARRAY;
+ for ($ix = 1; $ix < @vallist; $ix++) {
+ my $valsv = $vallist[$ix];
+ next unless class($valsv) eq "GV";
+ # these pad GVs don't have corresponding names, so same @pad
+ # array can be used without collisions
+ $pad[$ix] = [$valsv->STASH->NAME, "*", $valsv->NAME];
+ }
+ }
+}
+
+sub xref {
+ my $start = shift;
+ my $op;
+ for ($op = $start; $$op; $op = $op->next) {
+ last if $done{$$op}++;
+ warn sprintf("top = [%s, %s, %s]\n", @$top) if $debug_top;
+ warn peekop($op), "\n" if $debug_op;
+ my $opname = $op->name;
+ if ($opname =~ /^(or|and|mapwhile|grepwhile|range|cond_expr)$/) {
+ xref($op->other);
+ } elsif ($opname eq "match" || $opname eq "subst") {
+ xref($op->pmreplstart);
+ } elsif ($opname eq "substcont") {
+ xref($op->other->pmreplstart);
+ $op = $op->other;
+ redo;
+ } elsif ($opname eq "enterloop") {
+ xref($op->redoop);
+ xref($op->nextop);
+ xref($op->lastop);
+ } elsif ($opname eq "subst") {
+ xref($op->pmreplstart);
+ } else {
+ no strict 'refs';
+ my $ppname = "pp_$opname";
+ &$ppname($op) if defined(&$ppname);
+ }
+ }
+}
+
+sub xref_cv {
+ my $cv = shift;
+ my $pack = $cv->GV->STASH->NAME;
+ $subname = ($pack eq "main" ? "" : "$pack\::") . $cv->GV->NAME;
+ load_pad($cv->PADLIST);
+ xref($cv->START);
+ $subname = "(main)";
+}
+
+sub xref_object {
+ my $cvref = shift;
+ xref_cv(svref_2object($cvref));
+}
+
+sub xref_main {
+ $subname = "(main)";
+ load_pad(comppadlist);
+ xref(main_start);
+ while (@todo) {
+ xref_cv(shift @todo);
+ }
+}
+
+sub pp_nextstate {
+ my $op = shift;
+ $file = $op->file;
+ $line = $op->line;
+ $top = UNKNOWN;
+}
+
+sub pp_padsv {
+ my $op = shift;
+ $top = $pad[$op->targ];
+ process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
+}
+
+sub pp_padav { pp_padsv(@_) }
+sub pp_padhv { pp_padsv(@_) }
+
+sub deref {
+ my ($op, $var, $as) = @_;
+ $var->[1] = $as . $var->[1];
+ process($var, $op->private & OPpOUR_INTRO ? "intro" : "used");
+}
+
+sub pp_rv2cv { deref(shift, $top, "&"); }
+sub pp_rv2hv { deref(shift, $top, "%"); }
+sub pp_rv2sv { deref(shift, $top, "\$"); }
+sub pp_rv2av { deref(shift, $top, "\@"); }
+sub pp_rv2gv { deref(shift, $top, "*"); }
+
+sub pp_gvsv {
+ my $op = shift;
+ my $gv;
+ if ($Config{useithreads}) {
+ $top = $pad[$op->padix];
+ $top = UNKNOWN unless $top;
+ $top->[1] = '$';
+ }
+ else {
+ $gv = $op->gv;
+ $top = [$gv->STASH->NAME, '$', $gv->SAFENAME];
+ }
+ process($top, $op->private & OPpLVAL_INTRO ||
+ $op->private & OPpOUR_INTRO ? "intro" : "used");
+}
+
+sub pp_gv {
+ my $op = shift;
+ my $gv;
+ if ($Config{useithreads}) {
+ $top = $pad[$op->padix];
+ $top = UNKNOWN unless $top;
+ $top->[1] = '*';
+ }
+ else {
+ $gv = $op->gv;
+ $top = [$gv->STASH->NAME, "*", $gv->SAFENAME];
+ }
+ process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
+}
+
+sub pp_const {
+ my $op = shift;
+ my $sv = $op->sv;
+ # constant could be in the pad (under useithreads)
+ if ($$sv) {
+ $top = ["?", "",
+ (class($sv) ne "SPECIAL" && $sv->FLAGS & SVf_POK)
+ ? cstring($sv->PV) : "?"];
+ }
+ else {
+ $top = $pad[$op->targ];
+ $top = UNKNOWN unless $top;
+ }
+}
+
+sub pp_method {
+ my $op = shift;
+ $top = ["(method)", "->".$top->[1], $top->[2]];
+}
+
+sub pp_entersub {
+ my $op = shift;
+ if ($top->[1] eq "m") {
+ process($top, "meth");
+ } else {
+ process($top, "subused");
+ }
+ $top = UNKNOWN;
+}
+
+#
+# Stuff for cross referencing definitions of variables and subs
+#
+
+sub B::GV::xref {
+ my $gv = shift;
+ my $cv = $gv->CV;
+ if ($$cv) {
+ #return if $done{$$cv}++;
+ $file = $gv->FILE;
+ $line = $gv->LINE;
+ process([$gv->STASH->NAME, "&", $gv->NAME], "subdef");
+ push(@todo, $cv);
+ }
+ my $form = $gv->FORM;
+ if ($$form) {
+ return if $done{$$form}++;
+ $file = $gv->FILE;
+ $line = $gv->LINE;
+ process([$gv->STASH->NAME, "", $gv->NAME], "formdef");
+ }
+}
+
+sub xref_definitions {
+ my ($pack, %exclude);
+ return if $nodefs;
+ $subname = "(definitions)";
+ foreach $pack (qw(B O AutoLoader DynaLoader XSLoader Config DB VMS
+ strict vars FileHandle Exporter Carp PerlIO::Layer
+ attributes utf8 warnings)) {
+ $exclude{$pack."::"} = 1;
+ }
+ no strict qw(vars refs);
+ walksymtable(\%{"main::"}, "xref", sub { !defined($exclude{$_[0]}) });
+}
+
+sub output {
+ return if $raw;
+ my ($file, $subname, $pack, $name, $ev, $perfile, $persubname,
+ $perpack, $pername, $perev);
+ foreach $file (sort(keys(%table))) {
+ $perfile = $table{$file};
+ print "File $file\n";
+ foreach $subname (sort(keys(%$perfile))) {
+ $persubname = $perfile->{$subname};
+ print " Subroutine $subname\n";
+ foreach $pack (sort(keys(%$persubname))) {
+ $perpack = $persubname->{$pack};
+ print " Package $pack\n";
+ foreach $name (sort(keys(%$perpack))) {
+ $pername = $perpack->{$name};
+ my @lines;
+ foreach $ev (qw(intro formdef subdef meth subused used)) {
+ $perev = $pername->{$ev};
+ if (defined($perev) && @$perev) {
+ my $code = $code{$ev};
+ push(@lines, map("$code$_", @$perev));
+ }
+ }
+ printf " %-16s %s\n", $name, join(", ", @lines);
+ }
+ }
+ }
+ }
+}
+
+sub compile {
+ my @options = @_;
+ my ($option, $opt, $arg);
+ OPTION:
+ while ($option = shift @options) {
+ if ($option =~ /^-(.)(.*)/) {
+ $opt = $1;
+ $arg = $2;
+ } else {
+ unshift @options, $option;
+ last OPTION;
+ }
+ if ($opt eq "-" && $arg eq "-") {
+ shift @options;
+ last OPTION;
+ } elsif ($opt eq "o") {
+ $arg ||= shift @options;
+ open(STDOUT, ">$arg") or return "$arg: $!\n";
+ } elsif ($opt eq "d") {
+ $nodefs = 1;
+ } elsif ($opt eq "r") {
+ $raw = 1;
+ } elsif ($opt eq "D") {
+ $arg ||= shift @options;
+ foreach $arg (split(//, $arg)) {
+ if ($arg eq "o") {
+ B->debug(1);
+ } elsif ($arg eq "O") {
+ $debug_op = 1;
+ } elsif ($arg eq "t") {
+ $debug_top = 1;
+ }
+ }
+ }
+ }
+ if (@options) {
+ return sub {
+ my $objname;
+ xref_definitions();
+ foreach $objname (@options) {
+ $objname = "main::$objname" unless $objname =~ /::/;
+ eval "xref_object(\\&$objname)";
+ die "xref_object(\\&$objname) failed: $@" if $@;
+ }
+ output();
+ }
+ } else {
+ return sub {
+ xref_definitions();
+ xref_main();
+ output();
+ }
+ }
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/B/assemble b/Master/tlpkg/tlperl/lib/B/assemble
new file mode 100644
index 00000000000..43cc5bc4b33
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/assemble
@@ -0,0 +1,30 @@
+use B::Assembler qw(assemble_fh);
+use FileHandle;
+
+my ($filename, $fh, $out);
+
+if ($ARGV[0] eq "-d") {
+ B::Assembler::debug(1);
+ shift;
+}
+
+$out = \*STDOUT;
+
+if (@ARGV == 0) {
+ $fh = \*STDIN;
+ $filename = "-";
+} elsif (@ARGV == 1) {
+ $filename = $ARGV[0];
+ $fh = new FileHandle "<$filename";
+} elsif (@ARGV == 2) {
+ $filename = $ARGV[0];
+ $fh = new FileHandle "<$filename";
+ $out = new FileHandle ">$ARGV[1]";
+} else {
+ die "Usage: assemble [filename] [outfilename]\n";
+}
+
+binmode $out;
+$SIG{__WARN__} = sub { warn "$filename:@_" };
+$SIG{__DIE__} = sub { die "$filename: @_" };
+assemble_fh($fh, sub { print $out @_ });
diff --git a/Master/tlpkg/tlperl/lib/B/cc_harness b/Master/tlpkg/tlperl/lib/B/cc_harness
new file mode 100644
index 00000000000..79f8727a8f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/cc_harness
@@ -0,0 +1,12 @@
+use Config;
+
+$libdir = $ENV{PERL_SRC} || "$Config{installarchlib}/CORE";
+
+if (!grep(/^-[cS]$/, @ARGV)) {
+ $linkargs = sprintf("%s $libdir/$Config{libperl} %s",
+ @Config{qw(ldflags libs)});
+}
+
+$cccmd = "$Config{cc} $Config{ccflags} -I$libdir @ARGV $linkargs";
+print "$cccmd\n";
+exec $cccmd;
diff --git a/Master/tlpkg/tlperl/lib/B/disassemble b/Master/tlpkg/tlperl/lib/B/disassemble
new file mode 100644
index 00000000000..6530b809502
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/disassemble
@@ -0,0 +1,22 @@
+use B::Disassembler qw(disassemble_fh);
+use FileHandle;
+
+my $fh;
+if (@ARGV == 0) {
+ $fh = \*STDIN;
+} elsif (@ARGV == 1) {
+ $fh = new FileHandle "<$ARGV[0]";
+} else {
+ die "Usage: disassemble [filename]\n";
+}
+
+sub print_insn {
+ my ($insn, $arg) = @_;
+ if (defined($arg)) {
+ printf "%s %s\n", $insn, $arg;
+ } else {
+ print $insn, "\n";
+ }
+}
+
+disassemble_fh($fh, \&print_insn);
diff --git a/Master/tlpkg/tlperl/lib/B/makeliblinks b/Master/tlpkg/tlperl/lib/B/makeliblinks
new file mode 100644
index 00000000000..82560783c01
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/B/makeliblinks
@@ -0,0 +1,54 @@
+use File::Find;
+use Config;
+
+if (@ARGV != 2) {
+ warn <<"EOT";
+Usage: makeliblinks libautodir targetdir
+where libautodir is the architecture-dependent auto directory
+(e.g. $Config::Config{archlib}/auto).
+EOT
+ exit 2;
+}
+
+my ($libautodir, $targetdir) = @ARGV;
+
+# Calculate relative path prefix from $targetdir to $libautodir
+sub relprefix {
+ my ($to, $from) = @_;
+ my $up;
+ for ($up = 0; substr($to, 0, length($from)) ne $from; $up++) {
+ $from =~ s(
+ [^/]+ (?# a group of non-slashes)
+ /* (?# maybe with some trailing slashes)
+ $ (?# at the end of the path)
+ )()x;
+ }
+ return (("../" x $up) . substr($to, length($from)));
+}
+
+my $relprefix = relprefix($libautodir, $targetdir);
+
+my ($dlext, $lib_ext) = @Config::Config{qw(dlext lib_ext)};
+
+sub link_if_library {
+ if (/\.($dlext|$lib_ext)$/o) {
+ my $ext = $1;
+ my $name = $File::Find::name;
+ if (substr($name, 0, length($libautodir) + 1) ne "$libautodir/") {
+ die "directory of $name doesn't match $libautodir\n";
+ }
+ substr($name, 0, length($libautodir) + 1) = '';
+ my @parts = split(m(/), $name);
+ if ($parts[-1] ne "$parts[-2].$ext") {
+ die "module name $_ doesn't match its directory $libautodir\n";
+ }
+ pop @parts;
+ my $libpath = "$targetdir/lib" . join("__", @parts) . ".$ext";
+ print "$libpath -> $relprefix/$name\n";
+ symlink("$relprefix/$name", $libpath)
+ or warn "above link failed with error: $!\n";
+ }
+}
+
+find(\&link_if_library, $libautodir);
+exit 0;
diff --git a/Master/tlpkg/tlperl/lib/Carp.pm b/Master/tlpkg/tlperl/lib/Carp.pm
new file mode 100644
index 00000000000..1a814ead34f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Carp.pm
@@ -0,0 +1,274 @@
+package Carp;
+
+our $VERSION = '1.04';
+
+=head1 NAME
+
+carp - warn of errors (from perspective of caller)
+
+cluck - warn of errors with stack backtrace
+ (not exported by default)
+
+croak - die of errors (from perspective of caller)
+
+confess - die of errors with stack backtrace
+
+shortmess - return the message that carp and croak produce
+
+longmess - return the message that cluck and confess produce
+
+=head1 SYNOPSIS
+
+ use Carp;
+ croak "We're outta here!";
+
+ use Carp qw(cluck);
+ cluck "This is how we got here!";
+
+ print FH Carp::shortmess("This will have caller's details added");
+ print FH Carp::longmess("This will have stack backtrace added");
+
+=head1 DESCRIPTION
+
+The Carp routines are useful in your own modules because
+they act like die() or warn(), but with a message which is more
+likely to be useful to a user of your module. In the case of
+cluck, confess, and longmess that context is a summary of every
+call in the call-stack. For a shorter message you can use carp,
+croak or shortmess which report the error as being from where
+your module was called. There is no guarantee that that is where
+the error was, but it is a good educated guess.
+
+You can also alter the way the output and logic of C<Carp> works, by
+changing some global variables in the C<Carp> namespace. See the
+section on C<GLOBAL VARIABLES> below.
+
+Here is a more complete description of how shortmess works. What
+it does is search the call-stack for a function call stack where
+it hasn't been told that there shouldn't be an error. If every
+call is marked safe, it then gives up and gives a full stack
+backtrace instead. In other words it presumes that the first likely
+looking potential suspect is guilty. Its rules for telling whether
+a call shouldn't generate errors work as follows:
+
+=over 4
+
+=item 1.
+
+Any call from a package to itself is safe.
+
+=item 2.
+
+Packages claim that there won't be errors on calls to or from
+packages explicitly marked as safe by inclusion in @CARP_NOT, or
+(if that array is empty) @ISA. The ability to override what
+@ISA says is new in 5.8.
+
+=item 3.
+
+The trust in item 2 is transitive. If A trusts B, and B
+trusts C, then A trusts C. So if you do not override @ISA
+with @CARP_NOT, then this trust relationship is identical to,
+"inherits from".
+
+=item 4.
+
+Any call from an internal Perl module is safe. (Nothing keeps
+user modules from marking themselves as internal to Perl, but
+this practice is discouraged.)
+
+=item 5.
+
+Any call to Carp is safe. (This rule is what keeps it from
+reporting the error where you call carp/croak/shortmess.)
+
+=back
+
+=head2 Forcing a Stack Trace
+
+As a debugging aid, you can force Carp to treat a croak as a confess
+and a carp as a cluck across I<all> modules. In other words, force a
+detailed stack trace to be given. This can be very helpful when trying
+to understand why, or from where, a warning or error is being generated.
+
+This feature is enabled by 'importing' the non-existent symbol
+'verbose'. You would typically enable it by saying
+
+ perl -MCarp=verbose script.pl
+
+or by including the string C<MCarp=verbose> in the PERL5OPT
+environment variable.
+
+Alternately, you can set the global variable C<$Carp::Verbose> to true.
+See the C<GLOBAL VARIABLES> section below.
+
+=cut
+
+# This package is heavily used. Be small. Be fast. Be good.
+
+# Comments added by Andy Wardley <abw@kfs.org> 09-Apr-98, based on an
+# _almost_ complete understanding of the package. Corrections and
+# comments are welcome.
+
+# The members of %Internal are packages that are internal to perl.
+# Carp will not report errors from within these packages if it
+# can. The members of %CarpInternal are internal to Perl's warning
+# system. Carp will not report errors from within these packages
+# either, and will not report calls *to* these packages for carp and
+# croak. They replace $CarpLevel, which is deprecated. The
+# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
+# text and function arguments should be formatted when printed.
+
+# Comments added by Jos I. Boumans <kane@dwim.org> 11-Aug-2004
+# I can not get %CarpInternal or %Internal to work as advertised,
+# therefor leaving it out of the below documentation.
+# $CarpLevel may be decprecated according to the last comment, but
+# after 6 years, it's still around and in heavy use ;)
+
+=pod
+
+=head1 GLOBAL VARIABLES
+
+=head2 $Carp::CarpLevel
+
+This variable determines how many call frames are to be skipped when
+reporting where an error occurred on a call to one of C<Carp>'s
+functions. For example:
+
+ $Carp::CarpLevel = 1;
+ sub bar { .... or _error('Wrong input') }
+ sub _error { Carp::carp(@_) }
+
+This would make Carp report the error as coming from C<bar>'s caller,
+rather than from C<_error>'s caller, as it normally would.
+
+Defaults to C<0>.
+
+=head2 $Carp::MaxEvalLen
+
+This variable determines how many characters of a string-eval are to
+be shown in the output. Use a value of C<0> to show all text.
+
+Defaults to C<0>.
+
+=head2 $Carp::MaxArgLen
+
+This variable determines how many characters of each argument to a
+function to print. Use a value of C<0> to show the full length of the
+argument.
+
+Defaults to C<64>.
+
+=head2 $Carp::MaxArgNums
+
+This variable determines how many arguments to each function to show.
+Use a value of C<0> to show all arguments to a function call.
+
+Defaults to C<8>.
+
+=head2 $Carp::Verbose
+
+This variable makes C<Carp> use the C<longmess> function at all times.
+This effectively means that all calls to C<carp> become C<cluck> and
+all calls to C<croak> become C<confess>.
+
+Note, this is analogous to using C<use Carp 'verbose'>.
+
+Defaults to C<0>.
+
+=cut
+
+
+$CarpInternal{Carp}++;
+$CarpInternal{warnings}++;
+$CarpLevel = 0; # How many extra package levels to skip on carp.
+ # How many calls to skip on confess.
+ # Reconciling these notions is hard, use
+ # %Internal and %CarpInternal instead.
+$MaxEvalLen = 0; # How much eval '...text...' to show. 0 = all.
+$MaxArgLen = 64; # How much of each argument to print. 0 = all.
+$MaxArgNums = 8; # How many arguments to print. 0 = all.
+$Verbose = 0; # If true then make shortmess call longmess instead
+
+require Exporter;
+@ISA = ('Exporter');
+@EXPORT = qw(confess croak carp);
+@EXPORT_OK = qw(cluck verbose longmess shortmess);
+@EXPORT_FAIL = qw(verbose); # hook to enable verbose mode
+
+=head1 BUGS
+
+The Carp routines don't handle exception objects currently.
+If called with a first argument that is a reference, they simply
+call die() or warn(), as appropriate.
+
+=cut
+
+# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
+# then the following method will be called by the Exporter which knows
+# to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word
+# 'verbose'.
+
+sub export_fail {
+ shift;
+ $Verbose = shift if $_[0] eq 'verbose';
+ return @_;
+}
+
+
+# longmess() crawls all the way up the stack reporting on all the function
+# calls made. The error string, $error, is originally constructed from the
+# arguments passed into longmess() via confess(), cluck() or shortmess().
+# This gets appended with the stack trace messages which are generated for
+# each function call on the stack.
+
+sub longmess {
+ {
+ local($@, $!);
+ # XXX fix require to not clear $@ or $!?
+ # don't use require unless we need to (for Safe compartments)
+ require Carp::Heavy unless $INC{"Carp/Heavy.pm"};
+ }
+ # Icky backwards compatibility wrapper. :-(
+ my $call_pack = caller();
+ if ($Internal{$call_pack} or $CarpInternal{$call_pack}) {
+ return longmess_heavy(@_);
+ }
+ else {
+ local $CarpLevel = $CarpLevel + 1;
+ return longmess_heavy(@_);
+ }
+}
+
+
+# shortmess() is called by carp() and croak() to skip all the way up to
+# the top-level caller's package and report the error from there. confess()
+# and cluck() generate a full stack trace so they call longmess() to
+# generate that. In verbose mode shortmess() calls longmess() so
+# you always get a stack trace
+
+sub shortmess { # Short-circuit &longmess if called via multiple packages
+ {
+ local($@, $!);
+ # XXX fix require to not clear $@ or $!?
+ # don't use require unless we need to (for Safe compartments)
+ require Carp::Heavy unless $INC{"Carp/Heavy.pm"};
+ }
+ # Icky backwards compatibility wrapper. :-(
+ my $call_pack = caller();
+ local @CARP_NOT = caller();
+ shortmess_heavy(@_);
+}
+
+
+# the following four functions call longmess() or shortmess() depending on
+# whether they should generate a full stack trace (confess() and cluck())
+# or simply report the caller's package (croak() and carp()), respectively.
+# confess() and croak() die, carp() and cluck() warn.
+
+sub croak { die shortmess @_ }
+sub confess { die longmess @_ }
+sub carp { warn shortmess @_ }
+sub cluck { warn longmess @_ }
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Carp/Heavy.pm b/Master/tlpkg/tlperl/lib/Carp/Heavy.pm
new file mode 100644
index 00000000000..55bca2b421a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Carp/Heavy.pm
@@ -0,0 +1,241 @@
+# Carp::Heavy uses some variables in common with Carp.
+package Carp;
+
+=head1 NAME
+
+Carp::Heavy - heavy machinery, no user serviceable parts inside
+
+=cut
+
+# use strict; # not yet
+
+# On one line so MakeMaker will see it.
+use Carp; our $VERSION = $Carp::VERSION;
+
+our ($CarpLevel, $MaxArgNums, $MaxEvalLen, $MaxArgLen, $Verbose);
+
+sub caller_info {
+ my $i = shift(@_) + 1;
+ package DB;
+ my %call_info;
+ @call_info{
+ qw(pack file line sub has_args wantarray evaltext is_require)
+ } = caller($i);
+
+ unless (defined $call_info{pack}) {
+ return ();
+ }
+
+ my $sub_name = Carp::get_subname(\%call_info);
+ if ($call_info{has_args}) {
+ my @args = map {Carp::format_arg($_)} @DB::args;
+ if ($MaxArgNums and @args > $MaxArgNums) { # More than we want to show?
+ $#args = $MaxArgNums;
+ push @args, '...';
+ }
+ # Push the args onto the subroutine
+ $sub_name .= '(' . join (', ', @args) . ')';
+ }
+ $call_info{sub_name} = $sub_name;
+ return wantarray() ? %call_info : \%call_info;
+}
+
+# Transform an argument to a function into a string.
+sub format_arg {
+ my $arg = shift;
+ if (ref($arg)) {
+ $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg";
+ }elsif (not defined($arg)) {
+ $arg = 'undef';
+ }
+ $arg =~ s/'/\\'/g;
+ $arg = str_len_trim($arg, $MaxArgLen);
+
+ # Quote it?
+ $arg = "'$arg'" unless $arg =~ /^-?[\d.]+\z/;
+
+ # The following handling of "control chars" is direct from
+ # the original code - it is broken on Unicode though.
+ # Suggestions?
+ utf8::is_utf8($arg)
+ or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg;
+ return $arg;
+}
+
+# Takes an inheritance cache and a package and returns
+# an anon hash of known inheritances and anon array of
+# inheritances which consequences have not been figured
+# for.
+sub get_status {
+ my $cache = shift;
+ my $pkg = shift;
+ $cache->{$pkg} ||= [{$pkg => $pkg}, [trusts_directly($pkg)]];
+ return @{$cache->{$pkg}};
+}
+
+# Takes the info from caller() and figures out the name of
+# the sub/require/eval
+sub get_subname {
+ my $info = shift;
+ if (defined($info->{evaltext})) {
+ my $eval = $info->{evaltext};
+ if ($info->{is_require}) {
+ return "require $eval";
+ }
+ else {
+ $eval =~ s/([\\\'])/\\$1/g;
+ return "eval '" . str_len_trim($eval, $MaxEvalLen) . "'";
+ }
+ }
+
+ return ($info->{sub} eq '(eval)') ? 'eval {...}' : $info->{sub};
+}
+
+# Figures out what call (from the point of view of the caller)
+# the long error backtrace should start at.
+sub long_error_loc {
+ my $i;
+ my $lvl = $CarpLevel;
+ {
+ my $pkg = caller(++$i);
+ unless(defined($pkg)) {
+ # This *shouldn't* happen.
+ if (%Internal) {
+ local %Internal;
+ $i = long_error_loc();
+ last;
+ }
+ else {
+ # OK, now I am irritated.
+ return 2;
+ }
+ }
+ redo if $CarpInternal{$pkg};
+ redo unless 0 > --$lvl;
+ redo if $Internal{$pkg};
+ }
+ return $i - 1;
+}
+
+
+sub longmess_heavy {
+ return @_ if ref($_[0]); # don't break references as exceptions
+ my $i = long_error_loc();
+ return ret_backtrace($i, @_);
+}
+
+# Returns a full stack backtrace starting from where it is
+# told.
+sub ret_backtrace {
+ my ($i, @error) = @_;
+ my $mess;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if (defined &Thread::tid) {
+ my $tid = Thread->self->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ my %i = caller_info($i);
+ $mess = "$err at $i{file} line $i{line}$tid_msg\n";
+
+ while (my %i = caller_info(++$i)) {
+ $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
+ }
+
+ return $mess;
+}
+
+sub ret_summary {
+ my ($i, @error) = @_;
+ my $err = join '', @error;
+ $i++;
+
+ my $tid_msg = '';
+ if (defined &Thread::tid) {
+ my $tid = Thread->self->tid;
+ $tid_msg = " thread $tid" if $tid;
+ }
+
+ my %i = caller_info($i);
+ return "$err at $i{file} line $i{line}$tid_msg\n";
+}
+
+
+sub short_error_loc {
+ my $cache;
+ my $i = 1;
+ my $lvl = $CarpLevel;
+ {
+ my $called = caller($i++);
+ my $caller = caller($i);
+ return 0 unless defined($caller); # What happened?
+ redo if $Internal{$caller};
+ redo if $CarpInternal{$called};
+ redo if trusts($called, $caller, $cache);
+ redo if trusts($caller, $called, $cache);
+ redo unless 0 > --$lvl;
+ }
+ return $i - 1;
+}
+
+sub shortmess_heavy {
+ return longmess_heavy(@_) if $Verbose;
+ return @_ if ref($_[0]); # don't break references as exceptions
+ my $i = short_error_loc();
+ if ($i) {
+ ret_summary($i, @_);
+ }
+ else {
+ longmess_heavy(@_);
+ }
+}
+
+# If a string is too long, trims it with ...
+sub str_len_trim {
+ my $str = shift;
+ my $max = shift || 0;
+ if (2 < $max and $max < length($str)) {
+ substr($str, $max - 3) = '...';
+ }
+ return $str;
+}
+
+# Takes two packages and an optional cache. Says whether the
+# first inherits from the second.
+#
+# Recursive versions of this have to work to avoid certain
+# possible endless loops, and when following long chains of
+# inheritance are less efficient.
+sub trusts {
+ my $child = shift;
+ my $parent = shift;
+ my $cache = shift || {};
+ my ($known, $partial) = get_status($cache, $child);
+ # Figure out consequences until we have an answer
+ while (@$partial and not exists $known->{$parent}) {
+ my $anc = shift @$partial;
+ next if exists $known->{$anc};
+ $known->{$anc}++;
+ my ($anc_knows, $anc_partial) = get_status($cache, $anc);
+ my @found = keys %$anc_knows;
+ @$known{@found} = ();
+ push @$partial, @$anc_partial;
+ }
+ return exists $known->{$parent};
+}
+
+# Takes a package and gives a list of those trusted directly
+sub trusts_directly {
+ my $class = shift;
+ no strict 'refs';
+ no warnings 'once';
+ return @{"$class\::CARP_NOT"}
+ ? @{"$class\::CARP_NOT"}
+ : @{"$class\::ISA"};
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Class/ISA.pm b/Master/tlpkg/tlperl/lib/Class/ISA.pm
new file mode 100644
index 00000000000..e1371912e2c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Class/ISA.pm
@@ -0,0 +1,214 @@
+#!/usr/local/bin/perl
+# Time-stamp: "2004-12-29 20:01:02 AST" -*-Perl-*-
+
+package Class::ISA;
+require 5;
+use strict;
+use vars qw($Debug $VERSION);
+$VERSION = '0.33';
+$Debug = 0 unless defined $Debug;
+
+=head1 NAME
+
+Class::ISA -- report the search path for a class's ISA tree
+
+=head1 SYNOPSIS
+
+ # Suppose you go: use Food::Fishstick, and that uses and
+ # inherits from other things, which in turn use and inherit
+ # from other things. And suppose, for sake of brevity of
+ # example, that their ISA tree is the same as:
+
+ @Food::Fishstick::ISA = qw(Food::Fish Life::Fungus Chemicals);
+ @Food::Fish::ISA = qw(Food);
+ @Food::ISA = qw(Matter);
+ @Life::Fungus::ISA = qw(Life);
+ @Chemicals::ISA = qw(Matter);
+ @Life::ISA = qw(Matter);
+ @Matter::ISA = qw();
+
+ use Class::ISA;
+ print "Food::Fishstick path is:\n ",
+ join(", ", Class::ISA::super_path('Food::Fishstick')),
+ "\n";
+
+That prints:
+
+ Food::Fishstick path is:
+ Food::Fish, Food, Matter, Life::Fungus, Life, Chemicals
+
+=head1 DESCRIPTION
+
+Suppose you have a class (like Food::Fish::Fishstick) that is derived,
+via its @ISA, from one or more superclasses (as Food::Fish::Fishstick
+is from Food::Fish, Life::Fungus, and Chemicals), and some of those
+superclasses may themselves each be derived, via its @ISA, from one or
+more superclasses (as above).
+
+When, then, you call a method in that class ($fishstick->calories),
+Perl first searches there for that method, but if it's not there, it
+goes searching in its superclasses, and so on, in a depth-first (or
+maybe "height-first" is the word) search. In the above example, it'd
+first look in Food::Fish, then Food, then Matter, then Life::Fungus,
+then Life, then Chemicals.
+
+This library, Class::ISA, provides functions that return that list --
+the list (in order) of names of classes Perl would search to find a
+method, with no duplicates.
+
+=head1 FUNCTIONS
+
+=over
+
+=item the function Class::ISA::super_path($CLASS)
+
+This returns the ordered list of names of classes that Perl would
+search thru in order to find a method, with no duplicates in the list.
+$CLASS is not included in the list. UNIVERSAL is not included -- if
+you need to consider it, add it to the end.
+
+
+=item the function Class::ISA::self_and_super_path($CLASS)
+
+Just like C<super_path>, except that $CLASS is included as the first
+element.
+
+=item the function Class::ISA::self_and_super_versions($CLASS)
+
+This returns a hash whose keys are $CLASS and its
+(super-)superclasses, and whose values are the contents of each
+class's $VERSION (or undef, for classes with no $VERSION).
+
+The code for self_and_super_versions is meant to serve as an example
+for precisely the kind of tasks I anticipate that self_and_super_path
+and super_path will be used for. You are strongly advised to read the
+source for self_and_super_versions, and the comments there.
+
+=back
+
+=head1 CAUTIONARY NOTES
+
+* Class::ISA doesn't export anything. You have to address the
+functions with a "Class::ISA::" on the front.
+
+* Contrary to its name, Class::ISA isn't a class; it's just a package.
+Strange, isn't it?
+
+* Say you have a loop in the ISA tree of the class you're calling one
+of the Class::ISA functions on: say that Food inherits from Matter,
+but Matter inherits from Food (for sake of argument). If Perl, while
+searching for a method, actually discovers this cyclicity, it will
+throw a fatal error. The functions in Class::ISA effectively ignore
+this cyclicity; the Class::ISA algorithm is "never go down the same
+path twice", and cyclicities are just a special case of that.
+
+* The Class::ISA functions just look at @ISAs. But theoretically, I
+suppose, AUTOLOADs could bypass Perl's ISA-based search mechanism and
+do whatever they please. That would be bad behavior, tho; and I try
+not to think about that.
+
+* If Perl can't find a method anywhere in the ISA tree, it then looks
+in the magical class UNIVERSAL. This is rarely relevant to the tasks
+that I expect Class::ISA functions to be put to, but if it matters to
+you, then instead of this:
+
+ @supers = Class::Tree::super_path($class);
+
+do this:
+
+ @supers = (Class::Tree::super_path($class), 'UNIVERSAL');
+
+And don't say no-one ever told ya!
+
+* When you call them, the Class::ISA functions look at @ISAs anew --
+that is, there is no memoization, and so if ISAs change during
+runtime, you get the current ISA tree's path, not anything memoized.
+However, changing ISAs at runtime is probably a sign that you're out
+of your mind!
+
+=head1 COPYRIGHT
+
+Copyright (c) 1999, 2000 Sean M. Burke. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 AUTHOR
+
+Sean M. Burke C<sburke@cpan.org>
+
+=cut
+
+###########################################################################
+
+sub self_and_super_versions {
+ no strict 'refs';
+ map {
+ $_ => (defined(${"$_\::VERSION"}) ? ${"$_\::VERSION"} : undef)
+ } self_and_super_path($_[0])
+}
+
+# Also consider magic like:
+# no strict 'refs';
+# my %class2SomeHashr =
+# map { defined(%{"$_\::SomeHash"}) ? ($_ => \%{"$_\::SomeHash"}) : () }
+# Class::ISA::self_and_super_path($class);
+# to get a hash of refs to all the defined (and non-empty) hashes in
+# $class and its superclasses.
+#
+# Or even consider this incantation for doing something like hash-data
+# inheritance:
+# no strict 'refs';
+# %union_hash =
+# map { defined(%{"$_\::SomeHash"}) ? %{"$_\::SomeHash"}) : () }
+# reverse(Class::ISA::self_and_super_path($class));
+# Consider that reverse() is necessary because with
+# %foo = ('a', 'wun', 'b', 'tiw', 'a', 'foist');
+# $foo{'a'} is 'foist', not 'wun'.
+
+###########################################################################
+sub super_path {
+ my @ret = &self_and_super_path(@_);
+ shift @ret if @ret;
+ return @ret;
+}
+
+#--------------------------------------------------------------------------
+sub self_and_super_path {
+ # Assumption: searching is depth-first.
+ # Assumption: '' (empty string) can't be a class package name.
+ # Note: 'UNIVERSAL' is not given any special treatment.
+ return () unless @_;
+
+ my @out = ();
+
+ my @in_stack = ($_[0]);
+ my %seen = ($_[0] => 1);
+
+ my $current;
+ while(@in_stack) {
+ next unless defined($current = shift @in_stack) && length($current);
+ print "At $current\n" if $Debug;
+ push @out, $current;
+ no strict 'refs';
+ unshift @in_stack,
+ map
+ { my $c = $_; # copy, to avoid being destructive
+ substr($c,0,2) = "main::" if substr($c,0,2) eq '::';
+ # Canonize the :: -> main::, ::foo -> main::foo thing.
+ # Should I ever canonize the Foo'Bar = Foo::Bar thing?
+ $seen{$c}++ ? () : $c;
+ }
+ @{"$current\::ISA"}
+ ;
+ # I.e., if this class has any parents (at least, ones I've never seen
+ # before), push them, in order, onto the stack of classes I need to
+ # explore.
+ }
+
+ return @out;
+}
+#--------------------------------------------------------------------------
+1;
+
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Class/Struct.pm b/Master/tlpkg/tlperl/lib/Class/Struct.pm
new file mode 100644
index 00000000000..7a9af54faf8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Class/Struct.pm
@@ -0,0 +1,636 @@
+package Class::Struct;
+
+## See POD after __END__
+
+use 5.006_001;
+
+use strict;
+use warnings::register;
+our(@ISA, @EXPORT, $VERSION);
+
+use Carp;
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(struct);
+
+$VERSION = '0.63';
+
+## Tested on 5.002 and 5.003 without class membership tests:
+my $CHECK_CLASS_MEMBERSHIP = ($] >= 5.003_95);
+
+my $print = 0;
+sub printem {
+ if (@_) { $print = shift }
+ else { $print++ }
+}
+
+{
+ package Class::Struct::Tie_ISA;
+
+ sub TIEARRAY {
+ my $class = shift;
+ return bless [], $class;
+ }
+
+ sub STORE {
+ my ($self, $index, $value) = @_;
+ Class::Struct::_subclass_error();
+ }
+
+ sub FETCH {
+ my ($self, $index) = @_;
+ $self->[$index];
+ }
+
+ sub FETCHSIZE {
+ my $self = shift;
+ return scalar(@$self);
+ }
+
+ sub DESTROY { }
+}
+
+sub import {
+ my $self = shift;
+
+ if ( @_ == 0 ) {
+ $self->export_to_level( 1, $self, @EXPORT );
+ } elsif ( @_ == 1 ) {
+ # This is admittedly a little bit silly:
+ # do we ever export anything else than 'struct'...?
+ $self->export_to_level( 1, $self, @_ );
+ } else {
+ goto &struct;
+ }
+}
+
+sub struct {
+
+ # Determine parameter list structure, one of:
+ # struct( class => [ element-list ])
+ # struct( class => { element-list })
+ # struct( element-list )
+ # Latter form assumes current package name as struct name.
+
+ my ($class, @decls);
+ my $base_type = ref $_[1];
+ if ( $base_type eq 'HASH' ) {
+ $class = shift;
+ @decls = %{shift()};
+ _usage_error() if @_;
+ }
+ elsif ( $base_type eq 'ARRAY' ) {
+ $class = shift;
+ @decls = @{shift()};
+ _usage_error() if @_;
+ }
+ else {
+ $base_type = 'ARRAY';
+ $class = (caller())[0];
+ @decls = @_;
+ }
+
+ _usage_error() if @decls % 2 == 1;
+
+ # Ensure we are not, and will not be, a subclass.
+
+ my $isa = do {
+ no strict 'refs';
+ \@{$class . '::ISA'};
+ };
+ _subclass_error() if @$isa;
+ tie @$isa, 'Class::Struct::Tie_ISA';
+
+ # Create constructor.
+
+ croak "function 'new' already defined in package $class"
+ if do { no strict 'refs'; defined &{$class . "::new"} };
+
+ my @methods = ();
+ my %refs = ();
+ my %arrays = ();
+ my %hashes = ();
+ my %classes = ();
+ my $got_class = 0;
+ my $out = '';
+
+ $out = "{\n package $class;\n use Carp;\n sub new {\n";
+ $out .= " my (\$class, \%init) = \@_;\n";
+ $out .= " \$class = __PACKAGE__ unless \@_;\n";
+
+ my $cnt = 0;
+ my $idx = 0;
+ my( $cmt, $name, $type, $elem );
+
+ if( $base_type eq 'HASH' ){
+ $out .= " my(\$r) = {};\n";
+ $cmt = '';
+ }
+ elsif( $base_type eq 'ARRAY' ){
+ $out .= " my(\$r) = [];\n";
+ }
+ while( $idx < @decls ){
+ $name = $decls[$idx];
+ $type = $decls[$idx+1];
+ push( @methods, $name );
+ if( $base_type eq 'HASH' ){
+ $elem = "{'${class}::$name'}";
+ }
+ elsif( $base_type eq 'ARRAY' ){
+ $elem = "[$cnt]";
+ ++$cnt;
+ $cmt = " # $name";
+ }
+ if( $type =~ /^\*(.)/ ){
+ $refs{$name}++;
+ $type = $1;
+ }
+ my $init = "defined(\$init{'$name'}) ? \$init{'$name'} :";
+ if( $type eq '@' ){
+ $out .= " croak 'Initializer for $name must be array reference'\n";
+ $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'ARRAY';\n";
+ $out .= " \$r->$elem = $init [];$cmt\n";
+ $arrays{$name}++;
+ }
+ elsif( $type eq '%' ){
+ $out .= " croak 'Initializer for $name must be hash reference'\n";
+ $out .= " if defined(\$init{'$name'}) && ref(\$init{'$name'}) ne 'HASH';\n";
+ $out .= " \$r->$elem = $init {};$cmt\n";
+ $hashes{$name}++;
+ }
+ elsif ( $type eq '$') {
+ $out .= " \$r->$elem = $init undef;$cmt\n";
+ }
+ elsif( $type =~ /^\w+(?:::\w+)*$/ ){
+ $out .= " if (defined(\$init{'$name'})) {\n";
+ $out .= " if (ref \$init{'$name'} eq 'HASH')\n";
+ $out .= " { \$r->$elem = $type->new(\%{\$init{'$name'}}) } $cmt\n";
+ $out .= " elsif (UNIVERSAL::isa(\$init{'$name'}, '$type'))\n";
+ $out .= " { \$r->$elem = \$init{'$name'} } $cmt\n";
+ $out .= " else { croak 'Initializer for $name must be hash or $type reference' }\n";
+ $out .= " }\n";
+ $classes{$name} = $type;
+ $got_class = 1;
+ }
+ else{
+ croak "'$type' is not a valid struct element type";
+ }
+ $idx += 2;
+ }
+ $out .= " bless \$r, \$class;\n }\n";
+
+ # Create accessor methods.
+
+ my( $pre, $pst, $sel );
+ $cnt = 0;
+ foreach $name (@methods){
+ if ( do { no strict 'refs'; defined &{$class . "::$name"} } ) {
+ warnings::warnif("function '$name' already defined, overrides struct accessor method");
+ }
+ else {
+ $pre = $pst = $cmt = $sel = '';
+ if( defined $refs{$name} ){
+ $pre = "\\(";
+ $pst = ")";
+ $cmt = " # returns ref";
+ }
+ $out .= " sub $name {$cmt\n my \$r = shift;\n";
+ if( $base_type eq 'ARRAY' ){
+ $elem = "[$cnt]";
+ ++$cnt;
+ }
+ elsif( $base_type eq 'HASH' ){
+ $elem = "{'${class}::$name'}";
+ }
+ if( defined $arrays{$name} ){
+ $out .= " my \$i;\n";
+ $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
+ $out .= " if (ref(\$i) eq 'ARRAY' && !\@_) { \$r->$elem = \$i; return \$r }\n";
+ $sel = "->[\$i]";
+ }
+ elsif( defined $hashes{$name} ){
+ $out .= " my \$i;\n";
+ $out .= " \@_ ? (\$i = shift) : return \$r->$elem;\n";
+ $out .= " if (ref(\$i) eq 'HASH' && !\@_) { \$r->$elem = \$i; return \$r }\n";
+ $sel = "->{\$i}";
+ }
+ elsif( defined $classes{$name} ){
+ if ( $CHECK_CLASS_MEMBERSHIP ) {
+ $out .= " croak '$name argument is wrong class' if \@_ && ! UNIVERSAL::isa(\$_[0], '$classes{$name}');\n";
+ }
+ }
+ $out .= " croak 'Too many args to $name' if \@_ > 1;\n";
+ $out .= " \@_ ? ($pre\$r->$elem$sel = shift$pst) : $pre\$r->$elem$sel$pst;\n";
+ $out .= " }\n";
+ }
+ }
+ $out .= "}\n1;\n";
+
+ print $out if $print;
+ my $result = eval $out;
+ carp $@ if $@;
+}
+
+sub _usage_error {
+ confess "struct usage error";
+}
+
+sub _subclass_error {
+ croak 'struct class cannot be a subclass (@ISA not allowed)';
+}
+
+1; # for require
+
+
+__END__
+
+=head1 NAME
+
+Class::Struct - declare struct-like datatypes as Perl classes
+
+=head1 SYNOPSIS
+
+ use Class::Struct;
+ # declare struct, based on array:
+ struct( CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ]);
+ # declare struct, based on hash:
+ struct( CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... });
+
+ package CLASS_NAME;
+ use Class::Struct;
+ # declare struct, based on array, implicit class name:
+ struct( ELEMENT_NAME => ELEMENT_TYPE, ... );
+
+ # Declare struct at compile time
+ use Class::Struct CLASS_NAME => [ ELEMENT_NAME => ELEMENT_TYPE, ... ];
+ use Class::Struct CLASS_NAME => { ELEMENT_NAME => ELEMENT_TYPE, ... };
+
+ # declare struct at compile time, based on array, implicit class name:
+ package CLASS_NAME;
+ use Class::Struct ELEMENT_NAME => ELEMENT_TYPE, ... ;
+
+ package Myobj;
+ use Class::Struct;
+ # declare struct with four types of elements:
+ struct( s => '$', a => '@', h => '%', c => 'My_Other_Class' );
+
+ $obj = new Myobj; # constructor
+
+ # scalar type accessor:
+ $element_value = $obj->s; # element value
+ $obj->s('new value'); # assign to element
+
+ # array type accessor:
+ $ary_ref = $obj->a; # reference to whole array
+ $ary_element_value = $obj->a(2); # array element value
+ $obj->a(2, 'new value'); # assign to array element
+
+ # hash type accessor:
+ $hash_ref = $obj->h; # reference to whole hash
+ $hash_element_value = $obj->h('x'); # hash element value
+ $obj->h('x', 'new value'); # assign to hash element
+
+ # class type accessor:
+ $element_value = $obj->c; # object reference
+ $obj->c->method(...); # call method of object
+ $obj->c(new My_Other_Class); # assign a new object
+
+=head1 DESCRIPTION
+
+C<Class::Struct> exports a single function, C<struct>.
+Given a list of element names and types, and optionally
+a class name, C<struct> creates a Perl 5 class that implements
+a "struct-like" data structure.
+
+The new class is given a constructor method, C<new>, for creating
+struct objects.
+
+Each element in the struct data has an accessor method, which is
+used to assign to the element and to fetch its value. The
+default accessor can be overridden by declaring a C<sub> of the
+same name in the package. (See Example 2.)
+
+Each element's type can be scalar, array, hash, or class.
+
+=head2 The C<struct()> function
+
+The C<struct> function has three forms of parameter-list.
+
+ struct( CLASS_NAME => [ ELEMENT_LIST ]);
+ struct( CLASS_NAME => { ELEMENT_LIST });
+ struct( ELEMENT_LIST );
+
+The first and second forms explicitly identify the name of the
+class being created. The third form assumes the current package
+name as the class name.
+
+An object of a class created by the first and third forms is
+based on an array, whereas an object of a class created by the
+second form is based on a hash. The array-based forms will be
+somewhat faster and smaller; the hash-based forms are more
+flexible.
+
+The class created by C<struct> must not be a subclass of another
+class other than C<UNIVERSAL>.
+
+It can, however, be used as a superclass for other classes. To facilitate
+this, the generated constructor method uses a two-argument blessing.
+Furthermore, if the class is hash-based, the key of each element is
+prefixed with the class name (see I<Perl Cookbook>, Recipe 13.12).
+
+A function named C<new> must not be explicitly defined in a class
+created by C<struct>.
+
+The I<ELEMENT_LIST> has the form
+
+ NAME => TYPE, ...
+
+Each name-type pair declares one element of the struct. Each
+element name will be defined as an accessor method unless a
+method by that name is explicitly defined; in the latter case, a
+warning is issued if the warning flag (B<-w>) is set.
+
+=head2 Class Creation at Compile Time
+
+C<Class::Struct> can create your class at compile time. The main reason
+for doing this is obvious, so your class acts like every other class in
+Perl. Creating your class at compile time will make the order of events
+similar to using any other class ( or Perl module ).
+
+There is no significant speed gain between compile time and run time
+class creation, there is just a new, more standard order of events.
+
+=head2 Element Types and Accessor Methods
+
+The four element types -- scalar, array, hash, and class -- are
+represented by strings -- C<'$'>, C<'@'>, C<'%'>, and a class name --
+optionally preceded by a C<'*'>.
+
+The accessor method provided by C<struct> for an element depends
+on the declared type of the element.
+
+=over 4
+
+=item Scalar (C<'$'> or C<'*$'>)
+
+The element is a scalar, and by default is initialized to C<undef>
+(but see L<Initializing with new>).
+
+The accessor's argument, if any, is assigned to the element.
+
+If the element type is C<'$'>, the value of the element (after
+assignment) is returned. If the element type is C<'*$'>, a reference
+to the element is returned.
+
+=item Array (C<'@'> or C<'*@'>)
+
+The element is an array, initialized by default to C<()>.
+
+With no argument, the accessor returns a reference to the
+element's whole array (whether or not the element was
+specified as C<'@'> or C<'*@'>).
+
+With one or two arguments, the first argument is an index
+specifying one element of the array; the second argument, if
+present, is assigned to the array element. If the element type
+is C<'@'>, the accessor returns the array element value. If the
+element type is C<'*@'>, a reference to the array element is
+returned.
+
+As a special case, when the accessor is called with an array reference
+as the sole argument, this causes an assignment of the whole array element.
+The object reference is returned.
+
+=item Hash (C<'%'> or C<'*%'>)
+
+The element is a hash, initialized by default to C<()>.
+
+With no argument, the accessor returns a reference to the
+element's whole hash (whether or not the element was
+specified as C<'%'> or C<'*%'>).
+
+With one or two arguments, the first argument is a key specifying
+one element of the hash; the second argument, if present, is
+assigned to the hash element. If the element type is C<'%'>, the
+accessor returns the hash element value. If the element type is
+C<'*%'>, a reference to the hash element is returned.
+
+As a special case, when the accessor is called with a hash reference
+as the sole argument, this causes an assignment of the whole hash element.
+The object reference is returned.
+
+=item Class (C<'Class_Name'> or C<'*Class_Name'>)
+
+The element's value must be a reference blessed to the named
+class or to one of its subclasses. The element is not initialized
+by default.
+
+The accessor's argument, if any, is assigned to the element. The
+accessor will C<croak> if this is not an appropriate object
+reference.
+
+If the element type does not start with a C<'*'>, the accessor
+returns the element value (after assignment). If the element type
+starts with a C<'*'>, a reference to the element itself is returned.
+
+=back
+
+=head2 Initializing with C<new>
+
+C<struct> always creates a constructor called C<new>. That constructor
+may take a list of initializers for the various elements of the new
+struct.
+
+Each initializer is a pair of values: I<element name>C< =E<gt> >I<value>.
+The initializer value for a scalar element is just a scalar value. The
+initializer for an array element is an array reference. The initializer
+for a hash is a hash reference.
+
+The initializer for a class element is an object of the corresponding class,
+or of one of it's subclasses, or a reference to a hash containing named
+arguments to be passed to the element's constructor.
+
+See Example 3 below for an example of initialization.
+
+=head1 EXAMPLES
+
+=over 4
+
+=item Example 1
+
+Giving a struct element a class type that is also a struct is how
+structs are nested. Here, C<Timeval> represents a time (seconds and
+microseconds), and C<Rusage> has two elements, each of which is of
+type C<Timeval>.
+
+ use Class::Struct;
+
+ struct( Rusage => {
+ ru_utime => 'Timeval', # user time used
+ ru_stime => 'Timeval', # system time used
+ });
+
+ struct( Timeval => [
+ tv_secs => '$', # seconds
+ tv_usecs => '$', # microseconds
+ ]);
+
+ # create an object:
+ my $t = Rusage->new(ru_utime=>Timeval->new(), ru_stime=>Timeval->new());
+
+ # $t->ru_utime and $t->ru_stime are objects of type Timeval.
+ # set $t->ru_utime to 100.0 sec and $t->ru_stime to 5.0 sec.
+ $t->ru_utime->tv_secs(100);
+ $t->ru_utime->tv_usecs(0);
+ $t->ru_stime->tv_secs(5);
+ $t->ru_stime->tv_usecs(0);
+
+=item Example 2
+
+An accessor function can be redefined in order to provide
+additional checking of values, etc. Here, we want the C<count>
+element always to be nonnegative, so we redefine the C<count>
+accessor accordingly.
+
+ package MyObj;
+ use Class::Struct;
+
+ # declare the struct
+ struct ( 'MyObj', { count => '$', stuff => '%' } );
+
+ # override the default accessor method for 'count'
+ sub count {
+ my $self = shift;
+ if ( @_ ) {
+ die 'count must be nonnegative' if $_[0] < 0;
+ $self->{'MyObj::count'} = shift;
+ warn "Too many args to count" if @_;
+ }
+ return $self->{'MyObj::count'};
+ }
+
+ package main;
+ $x = new MyObj;
+ print "\$x->count(5) = ", $x->count(5), "\n";
+ # prints '$x->count(5) = 5'
+
+ print "\$x->count = ", $x->count, "\n";
+ # prints '$x->count = 5'
+
+ print "\$x->count(-5) = ", $x->count(-5), "\n";
+ # dies due to negative argument!
+
+=item Example 3
+
+The constructor of a generated class can be passed a list
+of I<element>=>I<value> pairs, with which to initialize the struct.
+If no initializer is specified for a particular element, its default
+initialization is performed instead. Initializers for non-existent
+elements are silently ignored.
+
+Note that the initializer for a nested class may be specified as
+an object of that class, or as a reference to a hash of initializers
+that are passed on to the nested struct's constructor.
+
+ use Class::Struct;
+
+ struct Breed =>
+ {
+ name => '$',
+ cross => '$',
+ };
+
+ struct Cat =>
+ [
+ name => '$',
+ kittens => '@',
+ markings => '%',
+ breed => 'Breed',
+ ];
+
+
+ my $cat = Cat->new( name => 'Socks',
+ kittens => ['Monica', 'Kenneth'],
+ markings => { socks=>1, blaze=>"white" },
+ breed => Breed->new(name=>'short-hair', cross=>1),
+ or: breed => {name=>'short-hair', cross=>1},
+ );
+
+ print "Once a cat called ", $cat->name, "\n";
+ print "(which was a ", $cat->breed->name, ")\n";
+ print "had two kittens: ", join(' and ', @{$cat->kittens}), "\n";
+
+=back
+
+=head1 Author and Modification History
+
+Modified by Damian Conway, 2001-09-10, v0.62.
+
+ Modified implicit construction of nested objects.
+ Now will also take an object ref instead of requiring a hash ref.
+ Also default initializes nested object attributes to undef, rather
+ than calling object constructor without args
+ Original over-helpfulness was fraught with problems:
+ * the class's constructor might not be called 'new'
+ * the class might not have a hash-like-arguments constructor
+ * the class might not have a no-argument constructor
+ * "recursive" data structures didn't work well:
+ package Person;
+ struct { mother => 'Person', father => 'Person'};
+
+
+Modified by Casey West, 2000-11-08, v0.59.
+
+ Added the ability for compile time class creation.
+
+Modified by Damian Conway, 1999-03-05, v0.58.
+
+ Added handling of hash-like arg list to class ctor.
+
+ Changed to two-argument blessing in ctor to support
+ derivation from created classes.
+
+ Added classname prefixes to keys in hash-based classes
+ (refer to "Perl Cookbook", Recipe 13.12 for rationale).
+
+ Corrected behaviour of accessors for '*@' and '*%' struct
+ elements. Package now implements documented behaviour when
+ returning a reference to an entire hash or array element.
+ Previously these were returned as a reference to a reference
+ to the element.
+
+Renamed to C<Class::Struct> and modified by Jim Miner, 1997-04-02.
+
+ members() function removed.
+ Documentation corrected and extended.
+ Use of struct() in a subclass prohibited.
+ User definition of accessor allowed.
+ Treatment of '*' in element types corrected.
+ Treatment of classes as element types corrected.
+ Class name to struct() made optional.
+ Diagnostic checks added.
+
+Originally C<Class::Template> by Dean Roehrich.
+
+ # Template.pm --- struct/member template builder
+ # 12mar95
+ # Dean Roehrich
+ #
+ # changes/bugs fixed since 28nov94 version:
+ # - podified
+ # changes/bugs fixed since 21nov94 version:
+ # - Fixed examples.
+ # changes/bugs fixed since 02sep94 version:
+ # - Moved to Class::Template.
+ # changes/bugs fixed since 20feb94 version:
+ # - Updated to be a more proper module.
+ # - Added "use strict".
+ # - Bug in build_methods, was using @var when @$var needed.
+ # - Now using my() rather than local().
+ #
+ # Uses perl5 classes to create nested data types.
+ # This is offered as one implementation of Tom Christiansen's "structs.pl"
+ # idea.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Config.pm b/Master/tlpkg/tlperl/lib/Config.pm
new file mode 100644
index 00000000000..7e5ad77b30a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Config.pm
@@ -0,0 +1,95 @@
+# This file was created by configpm when Perl was built. Any changes
+# made to this file will be lost the next time perl is built.
+
+package Config;
+use strict;
+# use warnings; Pulls in Carp
+# use vars pulls in Carp
+@Config::EXPORT = qw(%Config);
+@Config::EXPORT_OK = qw(myconfig config_sh config_vars config_re);
+
+# Need to stub all the functions to make code such as print Config::config_sh
+# keep working
+
+sub myconfig;
+sub config_sh;
+sub config_vars;
+sub config_re;
+
+my %Export_Cache = map {($_ => 1)} (@Config::EXPORT, @Config::EXPORT_OK);
+
+our %Config;
+
+# Define our own import method to avoid pulling in the full Exporter:
+sub import {
+ my $pkg = shift;
+ @_ = @Config::EXPORT unless @_;
+
+ my @funcs = grep $_ ne '%Config', @_;
+ my $export_Config = @funcs < @_ ? 1 : 0;
+
+ no strict 'refs';
+ my $callpkg = caller(0);
+ foreach my $func (@funcs) {
+ die sprintf qq{"%s" is not exported by the %s module\n},
+ $func, __PACKAGE__ unless $Export_Cache{$func};
+ *{$callpkg.'::'.$func} = \&{$func};
+ }
+
+ *{"$callpkg\::Config"} = \%Config if $export_Config;
+ return;
+}
+
+die "Perl lib version (v5.8.8) doesn't match executable version ($])"
+ unless $^V;
+
+$^V eq v5.8.8
+ or die "Perl lib version (v5.8.8) doesn't match executable version (" .
+ sprintf("v%vd",$^V) . ")";
+
+
+sub FETCH {
+ my($self, $key) = @_;
+
+ # check for cached value (which may be undef so we use exists not defined)
+ return $self->{$key} if exists $self->{$key};
+
+ return $self->fetch_string($key);
+}
+sub TIEHASH {
+ bless $_[1], $_[0];
+}
+
+sub DESTROY { }
+
+sub AUTOLOAD {
+ require 'Config_heavy.pl';
+ goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
+ die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
+}
+
+# tie returns the object, so the value returned to require will be true.
+tie %Config, 'Config', {
+ archlibexp => 'x:\\perl\\lib',
+ archname => 'MSWin32-x86-multi-thread',
+ cc => 'gcc',
+ d_readlink => undef,
+ d_symlink => undef,
+ dlsrc => 'dl_win32.xs',
+ dont_use_nlink => undef,
+ exe_ext => '.exe',
+ inc_version_list => '',
+ intsize => '4',
+ ldlibpthname => '',
+ libpth => 'x:\\msys\\mingw\\lib',
+ osname => 'MSWin32',
+ osvers => '5.1',
+ path_sep => ';',
+ privlibexp => 'x:\\perl\\lib',
+ scriptdir => 'x:\\perl\\bin',
+ sitearchexp => 'x:\\perl\\site\\lib',
+ sitelibexp => 'x:\\perl\\site\\lib',
+ useithreads => 'define',
+ usevendorprefix => undef,
+ version => '5.8.8',
+};
diff --git a/Master/tlpkg/tlperl/lib/Cwd.pm b/Master/tlpkg/tlperl/lib/Cwd.pm
new file mode 100644
index 00000000000..8d25af9f7cd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Cwd.pm
@@ -0,0 +1,710 @@
+package Cwd;
+
+=head1 NAME
+
+Cwd - get pathname of current working directory
+
+=head1 SYNOPSIS
+
+ use Cwd;
+ my $dir = getcwd;
+
+ use Cwd 'abs_path';
+ my $abs_path = abs_path($file);
+
+=head1 DESCRIPTION
+
+This module provides functions for determining the pathname of the
+current working directory. It is recommended that getcwd (or another
+*cwd() function) be used in I<all> code to ensure portability.
+
+By default, it exports the functions cwd(), getcwd(), fastcwd(), and
+fastgetcwd() (and, on Win32, getdcwd()) into the caller's namespace.
+
+
+=head2 getcwd and friends
+
+Each of these functions are called without arguments and return the
+absolute path of the current working directory.
+
+=over 4
+
+=item getcwd
+
+ my $cwd = getcwd();
+
+Returns the current working directory.
+
+Re-implements the getcwd(3) (or getwd(3)) functions in Perl.
+
+=item cwd
+
+ my $cwd = cwd();
+
+The cwd() is the most natural form for the current architecture. For
+most systems it is identical to `pwd` (but without the trailing line
+terminator).
+
+=item fastcwd
+
+ my $cwd = fastcwd();
+
+A more dangerous version of getcwd(), but potentially faster.
+
+It might conceivably chdir() you out of a directory that it can't
+chdir() you back into. If fastcwd encounters a problem it will return
+undef but will probably leave you in a different directory. For a
+measure of extra security, if everything appears to have worked, the
+fastcwd() function will check that it leaves you in the same directory
+that it started in. If it has changed it will C<die> with the message
+"Unstable directory path, current directory changed
+unexpectedly". That should never happen.
+
+=item fastgetcwd
+
+ my $cwd = fastgetcwd();
+
+The fastgetcwd() function is provided as a synonym for cwd().
+
+=item getdcwd
+
+ my $cwd = getdcwd();
+ my $cwd = getdcwd('C:');
+
+The getdcwd() function is also provided on Win32 to get the current working
+directory on the specified drive, since Windows maintains a separate current
+working directory for each drive. If no drive is specified then the current
+drive is assumed.
+
+This function simply calls the Microsoft C library _getdcwd() function.
+
+=back
+
+
+=head2 abs_path and friends
+
+These functions are exported only on request. They each take a single
+argument and return the absolute pathname for it. If no argument is
+given they'll use the current working directory.
+
+=over 4
+
+=item abs_path
+
+ my $abs_path = abs_path($file);
+
+Uses the same algorithm as getcwd(). Symbolic links and relative-path
+components ("." and "..") are resolved to return the canonical
+pathname, just like realpath(3).
+
+=item realpath
+
+ my $abs_path = realpath($file);
+
+A synonym for abs_path().
+
+=item fast_abs_path
+
+ my $abs_path = fast_abs_path($file);
+
+A more dangerous, but potentially faster version of abs_path.
+
+=back
+
+=head2 $ENV{PWD}
+
+If you ask to override your chdir() built-in function,
+
+ use Cwd qw(chdir);
+
+then your PWD environment variable will be kept up to date. Note that
+it will only be kept up to date if all packages which use chdir import
+it from Cwd.
+
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+Since the path seperators are different on some operating systems ('/'
+on Unix, ':' on MacPerl, etc...) we recommend you use the File::Spec
+modules wherever portability is a concern.
+
+=item *
+
+Actually, on Mac OS, the C<getcwd()>, C<fastgetcwd()> and C<fastcwd()>
+functions are all aliases for the C<cwd()> function, which, on Mac OS,
+calls `pwd`. Likewise, the C<abs_path()> function is an alias for
+C<fast_abs_path()>.
+
+=back
+
+=head1 AUTHOR
+
+Originally by the perl5-porters.
+
+Maintained by Ken Williams <KWILLIAMS@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+Portions of the C code in this library are copyright (c) 1994 by the
+Regents of the University of California. All rights reserved. The
+license on this code is compatible with the licensing of the rest of
+the distribution - please see the source code in F<Cwd.xs> for the
+details.
+
+=head1 SEE ALSO
+
+L<File::chdir>
+
+=cut
+
+use strict;
+use Exporter;
+use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
+
+$VERSION = '3.12';
+
+@ISA = qw/ Exporter /;
+@EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
+push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32';
+@EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
+
+# sys_cwd may keep the builtin command
+
+# All the functionality of this module may provided by builtins,
+# there is no sense to process the rest of the file.
+# The best choice may be to have this in BEGIN, but how to return from BEGIN?
+
+if ($^O eq 'os2') {
+ local $^W = 0;
+
+ *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd;
+ *getcwd = \&cwd;
+ *fastgetcwd = \&cwd;
+ *fastcwd = \&cwd;
+
+ *fast_abs_path = \&sys_abspath if defined &sys_abspath;
+ *abs_path = \&fast_abs_path;
+ *realpath = \&fast_abs_path;
+ *fast_realpath = \&fast_abs_path;
+
+ return 1;
+}
+
+# If loading the XS stuff doesn't work, we can fall back to pure perl
+eval {
+ if ( $] >= 5.006 ) {
+ require XSLoader;
+ XSLoader::load( __PACKAGE__, $VERSION );
+ } else {
+ require DynaLoader;
+ push @ISA, 'DynaLoader';
+ __PACKAGE__->bootstrap( $VERSION );
+ }
+};
+
+# Must be after the DynaLoader stuff:
+$VERSION = eval $VERSION;
+
+# Big nasty table of function aliases
+my %METHOD_MAP =
+ (
+ VMS =>
+ {
+ cwd => '_vms_cwd',
+ getcwd => '_vms_cwd',
+ fastcwd => '_vms_cwd',
+ fastgetcwd => '_vms_cwd',
+ abs_path => '_vms_abs_path',
+ fast_abs_path => '_vms_abs_path',
+ },
+
+ MSWin32 =>
+ {
+ # We assume that &_NT_cwd is defined as an XSUB or in the core.
+ cwd => '_NT_cwd',
+ getcwd => '_NT_cwd',
+ fastcwd => '_NT_cwd',
+ fastgetcwd => '_NT_cwd',
+ abs_path => 'fast_abs_path',
+ realpath => 'fast_abs_path',
+ },
+
+ dos =>
+ {
+ cwd => '_dos_cwd',
+ getcwd => '_dos_cwd',
+ fastgetcwd => '_dos_cwd',
+ fastcwd => '_dos_cwd',
+ abs_path => 'fast_abs_path',
+ },
+
+ qnx =>
+ {
+ cwd => '_qnx_cwd',
+ getcwd => '_qnx_cwd',
+ fastgetcwd => '_qnx_cwd',
+ fastcwd => '_qnx_cwd',
+ abs_path => '_qnx_abs_path',
+ fast_abs_path => '_qnx_abs_path',
+ },
+
+ cygwin =>
+ {
+ getcwd => 'cwd',
+ fastgetcwd => 'cwd',
+ fastcwd => 'cwd',
+ abs_path => 'fast_abs_path',
+ realpath => 'fast_abs_path',
+ },
+
+ epoc =>
+ {
+ cwd => '_epoc_cwd',
+ getcwd => '_epoc_cwd',
+ fastgetcwd => '_epoc_cwd',
+ fastcwd => '_epoc_cwd',
+ abs_path => 'fast_abs_path',
+ },
+
+ MacOS =>
+ {
+ getcwd => 'cwd',
+ fastgetcwd => 'cwd',
+ fastcwd => 'cwd',
+ abs_path => 'fast_abs_path',
+ },
+ );
+
+$METHOD_MAP{NT} = $METHOD_MAP{MSWin32};
+$METHOD_MAP{nto} = $METHOD_MAP{qnx};
+
+
+# Find the pwd command in the expected locations. We assume these
+# are safe. This prevents _backtick_pwd() consulting $ENV{PATH}
+# so everything works under taint mode.
+my $pwd_cmd;
+foreach my $try ('/bin/pwd',
+ '/usr/bin/pwd',
+ '/QOpenSys/bin/pwd', # OS/400 PASE.
+ ) {
+
+ if( -x $try ) {
+ $pwd_cmd = $try;
+ last;
+ }
+}
+unless ($pwd_cmd) {
+ # Isn't this wrong? _backtick_pwd() will fail if somenone has
+ # pwd in their path but it is not /bin/pwd or /usr/bin/pwd?
+ # See [perl #16774]. --jhi
+ $pwd_cmd = 'pwd';
+}
+
+# Lazy-load Carp
+sub _carp { require Carp; Carp::carp(@_) }
+sub _croak { require Carp; Carp::croak(@_) }
+
+# The 'natural and safe form' for UNIX (pwd may be setuid root)
+sub _backtick_pwd {
+ # Localize %ENV entries in a way that won't create new hash keys
+ my @localize = grep exists $ENV{$_}, qw(PATH IFS CDPATH ENV BASH_ENV);
+ local @ENV{@localize};
+
+ my $cwd = `$pwd_cmd`;
+ # Belt-and-suspenders in case someone said "undef $/".
+ local $/ = "\n";
+ # `pwd` may fail e.g. if the disk is full
+ chomp($cwd) if defined $cwd;
+ $cwd;
+}
+
+# Since some ports may predefine cwd internally (e.g., NT)
+# we take care not to override an existing definition for cwd().
+
+unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) {
+ # The pwd command is not available in some chroot(2)'ed environments
+ my $sep = $Config::Config{path_sep} || ':';
+ my $os = $^O; # Protect $^O from tainting
+ if( $os eq 'MacOS' || (defined $ENV{PATH} &&
+ $os ne 'MSWin32' && # no pwd on Windows
+ grep { -x "$_/pwd" } split($sep, $ENV{PATH})) )
+ {
+ *cwd = \&_backtick_pwd;
+ }
+ else {
+ *cwd = \&getcwd;
+ }
+}
+
+# set a reasonable (and very safe) default for fastgetcwd, in case it
+# isn't redefined later (20001212 rspier)
+*fastgetcwd = \&cwd;
+
+# By Brandon S. Allbery
+#
+# Usage: $cwd = getcwd();
+
+sub getcwd
+{
+ abs_path('.');
+}
+
+
+# By John Bazik
+#
+# Usage: $cwd = &fastcwd;
+#
+# This is a faster version of getcwd. It's also more dangerous because
+# you might chdir out of a directory that you can't chdir back into.
+
+sub fastcwd_ {
+ my($odev, $oino, $cdev, $cino, $tdev, $tino);
+ my(@path, $path);
+ local(*DIR);
+
+ my($orig_cdev, $orig_cino) = stat('.');
+ ($cdev, $cino) = ($orig_cdev, $orig_cino);
+ for (;;) {
+ my $direntry;
+ ($odev, $oino) = ($cdev, $cino);
+ CORE::chdir('..') || return undef;
+ ($cdev, $cino) = stat('.');
+ last if $odev == $cdev && $oino == $cino;
+ opendir(DIR, '.') || return undef;
+ for (;;) {
+ $direntry = readdir(DIR);
+ last unless defined $direntry;
+ next if $direntry eq '.';
+ next if $direntry eq '..';
+
+ ($tdev, $tino) = lstat($direntry);
+ last unless $tdev != $odev || $tino != $oino;
+ }
+ closedir(DIR);
+ return undef unless defined $direntry; # should never happen
+ unshift(@path, $direntry);
+ }
+ $path = '/' . join('/', @path);
+ if ($^O eq 'apollo') { $path = "/".$path; }
+ # At this point $path may be tainted (if tainting) and chdir would fail.
+ # Untaint it then check that we landed where we started.
+ $path =~ /^(.*)\z/s # untaint
+ && CORE::chdir($1) or return undef;
+ ($cdev, $cino) = stat('.');
+ die "Unstable directory path, current directory changed unexpectedly"
+ if $cdev != $orig_cdev || $cino != $orig_cino;
+ $path;
+}
+if (not defined &fastcwd) { *fastcwd = \&fastcwd_ }
+
+
+# Keeps track of current working directory in PWD environment var
+# Usage:
+# use Cwd 'chdir';
+# chdir $newdir;
+
+my $chdir_init = 0;
+
+sub chdir_init {
+ if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') {
+ my($dd,$di) = stat('.');
+ my($pd,$pi) = stat($ENV{'PWD'});
+ if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) {
+ $ENV{'PWD'} = cwd();
+ }
+ }
+ else {
+ my $wd = cwd();
+ $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32';
+ $ENV{'PWD'} = $wd;
+ }
+ # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar)
+ if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) {
+ my($pd,$pi) = stat($2);
+ my($dd,$di) = stat($1);
+ if (defined $pd and defined $dd and $di == $pi and $dd == $pd) {
+ $ENV{'PWD'}="$2$3";
+ }
+ }
+ $chdir_init = 1;
+}
+
+sub chdir {
+ my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir)
+ $newdir =~ s|///*|/|g unless $^O eq 'MSWin32';
+ chdir_init() unless $chdir_init;
+ my $newpwd;
+ if ($^O eq 'MSWin32') {
+ # get the full path name *before* the chdir()
+ $newpwd = Win32::GetFullPathName($newdir);
+ }
+
+ return 0 unless CORE::chdir $newdir;
+
+ if ($^O eq 'VMS') {
+ return $ENV{'PWD'} = $ENV{'DEFAULT'}
+ }
+ elsif ($^O eq 'MacOS') {
+ return $ENV{'PWD'} = cwd();
+ }
+ elsif ($^O eq 'MSWin32') {
+ $ENV{'PWD'} = $newpwd;
+ return 1;
+ }
+
+ if ($newdir =~ m#^/#s) {
+ $ENV{'PWD'} = $newdir;
+ } else {
+ my @curdir = split(m#/#,$ENV{'PWD'});
+ @curdir = ('') unless @curdir;
+ my $component;
+ foreach $component (split(m#/#, $newdir)) {
+ next if $component eq '.';
+ pop(@curdir),next if $component eq '..';
+ push(@curdir,$component);
+ }
+ $ENV{'PWD'} = join('/',@curdir) || '/';
+ }
+ 1;
+}
+
+
+sub _perl_abs_path
+{
+ my $start = @_ ? shift : '.';
+ my($dotdots, $cwd, @pst, @cst, $dir, @tst);
+
+ unless (@cst = stat( $start ))
+ {
+ _carp("stat($start): $!");
+ return '';
+ }
+
+ unless (-d _) {
+ # Make sure we can be invoked on plain files, not just directories.
+ # NOTE that this routine assumes that '/' is the only directory separator.
+
+ my ($dir, $file) = $start =~ m{^(.*)/(.+)$}
+ or return cwd() . '/' . $start;
+
+ # Can't use "-l _" here, because the previous stat was a stat(), not an lstat().
+ if (-l $start) {
+ my $link_target = readlink($start);
+ die "Can't resolve link $start: $!" unless defined $link_target;
+
+ require File::Spec;
+ $link_target = $dir . '/' . $link_target
+ unless File::Spec->file_name_is_absolute($link_target);
+
+ return abs_path($link_target);
+ }
+
+ return $dir ? abs_path($dir) . "/$file" : "/$file";
+ }
+
+ $cwd = '';
+ $dotdots = $start;
+ do
+ {
+ $dotdots .= '/..';
+ @pst = @cst;
+ local *PARENT;
+ unless (opendir(PARENT, $dotdots))
+ {
+ _carp("opendir($dotdots): $!");
+ return '';
+ }
+ unless (@cst = stat($dotdots))
+ {
+ _carp("stat($dotdots): $!");
+ closedir(PARENT);
+ return '';
+ }
+ if ($pst[0] == $cst[0] && $pst[1] == $cst[1])
+ {
+ $dir = undef;
+ }
+ else
+ {
+ do
+ {
+ unless (defined ($dir = readdir(PARENT)))
+ {
+ _carp("readdir($dotdots): $!");
+ closedir(PARENT);
+ return '';
+ }
+ $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir"))
+ }
+ while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] ||
+ $tst[1] != $pst[1]);
+ }
+ $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ;
+ closedir(PARENT);
+ } while (defined $dir);
+ chop($cwd) unless $cwd eq '/'; # drop the trailing /
+ $cwd;
+}
+
+
+my $Curdir;
+sub fast_abs_path {
+ local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage
+ my $cwd = getcwd();
+ require File::Spec;
+ my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir);
+
+ # Detaint else we'll explode in taint mode. This is safe because
+ # we're not doing anything dangerous with it.
+ ($path) = $path =~ /(.*)/;
+ ($cwd) = $cwd =~ /(.*)/;
+
+ unless (-e $path) {
+ _croak("$path: No such file or directory");
+ }
+
+ unless (-d _) {
+ # Make sure we can be invoked on plain files, not just directories.
+
+ my ($vol, $dir, $file) = File::Spec->splitpath($path);
+ return File::Spec->catfile($cwd, $path) unless length $dir;
+
+ if (-l $path) {
+ my $link_target = readlink($path);
+ die "Can't resolve link $path: $!" unless defined $link_target;
+
+ $link_target = File::Spec->catpath($vol, $dir, $link_target)
+ unless File::Spec->file_name_is_absolute($link_target);
+
+ return fast_abs_path($link_target);
+ }
+
+ return $dir eq File::Spec->rootdir
+ ? File::Spec->catpath($vol, $dir, $file)
+ : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file;
+ }
+
+ if (!CORE::chdir($path)) {
+ _croak("Cannot chdir to $path: $!");
+ }
+ my $realpath = getcwd();
+ if (! ((-d $cwd) && (CORE::chdir($cwd)))) {
+ _croak("Cannot chdir back to $cwd: $!");
+ }
+ $realpath;
+}
+
+# added function alias to follow principle of least surprise
+# based on previous aliasing. --tchrist 27-Jan-00
+*fast_realpath = \&fast_abs_path;
+
+
+# --- PORTING SECTION ---
+
+# VMS: $ENV{'DEFAULT'} points to default directory at all times
+# 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu
+# Note: Use of Cwd::chdir() causes the logical name PWD to be defined
+# in the process logical name table as the default device and directory
+# seen by Perl. This may not be the same as the default device
+# and directory seen by DCL after Perl exits, since the effects
+# the CRTL chdir() function persist only until Perl exits.
+
+sub _vms_cwd {
+ return $ENV{'DEFAULT'};
+}
+
+sub _vms_abs_path {
+ return $ENV{'DEFAULT'} unless @_;
+
+ # may need to turn foo.dir into [.foo]
+ my $path = VMS::Filespec::pathify($_[0]);
+ $path = $_[0] unless defined $path;
+
+ return VMS::Filespec::rmsexpand($path);
+}
+
+sub _os2_cwd {
+ $ENV{'PWD'} = `cmd /c cd`;
+ chomp $ENV{'PWD'};
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ return $ENV{'PWD'};
+}
+
+sub _win32_cwd {
+ $ENV{'PWD'} = Win32::GetCwd();
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ return $ENV{'PWD'};
+}
+
+*_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_os2_cwd;
+
+sub _dos_cwd {
+ if (!defined &Dos::GetCwd) {
+ $ENV{'PWD'} = `command /c cd`;
+ chomp $ENV{'PWD'};
+ $ENV{'PWD'} =~ s:\\:/:g ;
+ } else {
+ $ENV{'PWD'} = Dos::GetCwd();
+ }
+ return $ENV{'PWD'};
+}
+
+sub _qnx_cwd {
+ local $ENV{PATH} = '';
+ local $ENV{CDPATH} = '';
+ local $ENV{ENV} = '';
+ $ENV{'PWD'} = `/usr/bin/fullpath -t`;
+ chomp $ENV{'PWD'};
+ return $ENV{'PWD'};
+}
+
+sub _qnx_abs_path {
+ local $ENV{PATH} = '';
+ local $ENV{CDPATH} = '';
+ local $ENV{ENV} = '';
+ my $path = @_ ? shift : '.';
+ local *REALPATH;
+
+ defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or
+ die "Can't open /usr/bin/fullpath: $!";
+ my $realpath = <REALPATH>;
+ close REALPATH;
+ chomp $realpath;
+ return $realpath;
+}
+
+sub _epoc_cwd {
+ $ENV{'PWD'} = EPOC::getcwd();
+ return $ENV{'PWD'};
+}
+
+
+# Now that all the base-level functions are set up, alias the
+# user-level functions to the right places
+
+if (exists $METHOD_MAP{$^O}) {
+ my $map = $METHOD_MAP{$^O};
+ foreach my $name (keys %$map) {
+ local $^W = 0; # assignments trigger 'subroutine redefined' warning
+ no strict 'refs';
+ *{$name} = \&{$map->{$name}};
+ }
+}
+
+# In case the XS version doesn't load.
+*abs_path = \&_perl_abs_path unless defined &abs_path;
+
+# added function alias for those of us more
+# used to the libc function. --tchrist 27-Jan-00
+*realpath = \&abs_path;
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Data/Dumper.pm b/Master/tlpkg/tlperl/lib/Data/Dumper.pm
new file mode 100644
index 00000000000..b7fe1d61e77
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Data/Dumper.pm
@@ -0,0 +1,1264 @@
+#
+# Data/Dumper.pm
+#
+# convert perl data structures into perl syntax suitable for both printing
+# and eval
+#
+# Documentation at the __END__
+#
+
+package Data::Dumper;
+
+$VERSION = '2.121_08';
+
+#$| = 1;
+
+use 5.006_001;
+require Exporter;
+require overload;
+
+use Carp;
+
+BEGIN {
+ @ISA = qw(Exporter);
+ @EXPORT = qw(Dumper);
+ @EXPORT_OK = qw(DumperX);
+
+ # if run under miniperl, or otherwise lacking dynamic loading,
+ # XSLoader should be attempted to load, or the pure perl flag
+ # toggled on load failure.
+ eval {
+ require XSLoader;
+ };
+ $Useperl = 1 if $@;
+}
+
+XSLoader::load( 'Data::Dumper' ) unless $Useperl;
+
+# module vars and their defaults
+$Indent = 2 unless defined $Indent;
+$Purity = 0 unless defined $Purity;
+$Pad = "" unless defined $Pad;
+$Varname = "VAR" unless defined $Varname;
+$Useqq = 0 unless defined $Useqq;
+$Terse = 0 unless defined $Terse;
+$Freezer = "" unless defined $Freezer;
+$Toaster = "" unless defined $Toaster;
+$Deepcopy = 0 unless defined $Deepcopy;
+$Quotekeys = 1 unless defined $Quotekeys;
+$Bless = "bless" unless defined $Bless;
+#$Expdepth = 0 unless defined $Expdepth;
+$Maxdepth = 0 unless defined $Maxdepth;
+$Pair = ' => ' unless defined $Pair;
+$Useperl = 0 unless defined $Useperl;
+$Sortkeys = 0 unless defined $Sortkeys;
+$Deparse = 0 unless defined $Deparse;
+
+#
+# expects an arrayref of values to be dumped.
+# can optionally pass an arrayref of names for the values.
+# names must have leading $ sign stripped. begin the name with *
+# to cause output of arrays and hashes rather than refs.
+#
+sub new {
+ my($c, $v, $n) = @_;
+
+ croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
+ unless (defined($v) && (ref($v) eq 'ARRAY'));
+ $n = [] unless (defined($n) && (ref($v) eq 'ARRAY'));
+
+ my($s) = {
+ level => 0, # current recursive depth
+ indent => $Indent, # various styles of indenting
+ pad => $Pad, # all lines prefixed by this string
+ xpad => "", # padding-per-level
+ apad => "", # added padding for hash keys n such
+ sep => "", # list separator
+ pair => $Pair, # hash key/value separator: defaults to ' => '
+ seen => {}, # local (nested) refs (id => [name, val])
+ todump => $v, # values to dump []
+ names => $n, # optional names for values []
+ varname => $Varname, # prefix to use for tagging nameless ones
+ purity => $Purity, # degree to which output is evalable
+ useqq => $Useqq, # use "" for strings (backslashitis ensues)
+ terse => $Terse, # avoid name output (where feasible)
+ freezer => $Freezer, # name of Freezer method for objects
+ toaster => $Toaster, # name of method to revive objects
+ deepcopy => $Deepcopy, # dont cross-ref, except to stop recursion
+ quotekeys => $Quotekeys, # quote hash keys
+ 'bless' => $Bless, # keyword to use for "bless"
+# expdepth => $Expdepth, # cutoff depth for explicit dumping
+ maxdepth => $Maxdepth, # depth beyond which we give up
+ useperl => $Useperl, # use the pure Perl implementation
+ sortkeys => $Sortkeys, # flag or filter for sorting hash keys
+ deparse => $Deparse, # use B::Deparse for coderefs
+ };
+
+ if ($Indent > 0) {
+ $s->{xpad} = " ";
+ $s->{sep} = "\n";
+ }
+ return bless($s, $c);
+}
+
+sub init_refaddr_format {
+ require Config;
+ my $f = $Config::Config{uvxformat};
+ $f =~ tr/"//d;
+ our $refaddr_format = "0x%" . $f;
+}
+
+sub format_refaddr {
+ require Scalar::Util;
+ sprintf our $refaddr_format, Scalar::Util::refaddr(shift);
+}
+
+#
+# add-to or query the table of already seen references
+#
+sub Seen {
+ my($s, $g) = @_;
+ if (defined($g) && (ref($g) eq 'HASH')) {
+ my($k, $v, $id);
+ while (($k, $v) = each %$g) {
+ if (defined $v and ref $v) {
+ $id = format_refaddr($v);
+ if ($k =~ /^[*](.*)$/) {
+ $k = (ref $v eq 'ARRAY') ? ( "\\\@" . $1 ) :
+ (ref $v eq 'HASH') ? ( "\\\%" . $1 ) :
+ (ref $v eq 'CODE') ? ( "\\\&" . $1 ) :
+ ( "\$" . $1 ) ;
+ }
+ elsif ($k !~ /^\$/) {
+ $k = "\$" . $k;
+ }
+ $s->{seen}{$id} = [$k, $v];
+ }
+ else {
+ carp "Only refs supported, ignoring non-ref item \$$k";
+ }
+ }
+ return $s;
+ }
+ else {
+ return map { @$_ } values %{$s->{seen}};
+ }
+}
+
+#
+# set or query the values to be dumped
+#
+sub Values {
+ my($s, $v) = @_;
+ if (defined($v) && (ref($v) eq 'ARRAY')) {
+ $s->{todump} = [@$v]; # make a copy
+ return $s;
+ }
+ else {
+ return @{$s->{todump}};
+ }
+}
+
+#
+# set or query the names of the values to be dumped
+#
+sub Names {
+ my($s, $n) = @_;
+ if (defined($n) && (ref($n) eq 'ARRAY')) {
+ $s->{names} = [@$n]; # make a copy
+ return $s;
+ }
+ else {
+ return @{$s->{names}};
+ }
+}
+
+sub DESTROY {}
+
+sub Dump {
+ return &Dumpxs
+ unless $Data::Dumper::Useperl || (ref($_[0]) && $_[0]->{useperl}) ||
+ $Data::Dumper::Useqq || (ref($_[0]) && $_[0]->{useqq}) ||
+ $Data::Dumper::Deparse || (ref($_[0]) && $_[0]->{deparse});
+ return &Dumpperl;
+}
+
+#
+# dump the refs in the current dumper object.
+# expects same args as new() if called via package name.
+#
+sub Dumpperl {
+ my($s) = shift;
+ my(@out, $val, $name);
+ my($i) = 0;
+ local(@post);
+ init_refaddr_format();
+
+ $s = $s->new(@_) unless ref $s;
+
+ for $val (@{$s->{todump}}) {
+ my $out = "";
+ @post = ();
+ $name = $s->{names}[$i++];
+ if (defined $name) {
+ if ($name =~ /^[*](.*)$/) {
+ if (defined $val) {
+ $name = (ref $val eq 'ARRAY') ? ( "\@" . $1 ) :
+ (ref $val eq 'HASH') ? ( "\%" . $1 ) :
+ (ref $val eq 'CODE') ? ( "\*" . $1 ) :
+ ( "\$" . $1 ) ;
+ }
+ else {
+ $name = "\$" . $1;
+ }
+ }
+ elsif ($name !~ /^\$/) {
+ $name = "\$" . $name;
+ }
+ }
+ else {
+ $name = "\$" . $s->{varname} . $i;
+ }
+
+ my $valstr;
+ {
+ local($s->{apad}) = $s->{apad};
+ $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2;
+ $valstr = $s->_dump($val, $name);
+ }
+
+ $valstr = "$name = " . $valstr . ';' if @post or !$s->{terse};
+ $out .= $s->{pad} . $valstr . $s->{sep};
+ $out .= $s->{pad} . join(';' . $s->{sep} . $s->{pad}, @post)
+ . ';' . $s->{sep} if @post;
+
+ push @out, $out;
+ }
+ return wantarray ? @out : join('', @out);
+}
+
+#
+# twist, toil and turn;
+# and recurse, of course.
+# sometimes sordidly;
+# and curse if no recourse.
+#
+sub _dump {
+ my($s, $val, $name) = @_;
+ my($sname);
+ my($out, $realpack, $realtype, $type, $ipad, $id, $blesspad);
+
+ $type = ref $val;
+ $out = "";
+
+ if ($type) {
+
+ # Call the freezer method if it's specified and the object has the
+ # method. Trap errors and warn() instead of die()ing, like the XS
+ # implementation.
+ my $freezer = $s->{freezer};
+ if ($freezer and UNIVERSAL::can($val, $freezer)) {
+ eval { $val->$freezer() };
+ warn "WARNING(Freezer method call failed): $@" if $@;
+ }
+
+ require Scalar::Util;
+ $realpack = Scalar::Util::blessed($val);
+ $realtype = $realpack ? Scalar::Util::reftype($val) : ref $val;
+ $id = format_refaddr($val);
+
+ # if it has a name, we need to either look it up, or keep a tab
+ # on it so we know when we hit it later
+ if (defined($name) and length($name)) {
+ # keep a tab on it so that we dont fall into recursive pit
+ if (exists $s->{seen}{$id}) {
+# if ($s->{expdepth} < $s->{level}) {
+ if ($s->{purity} and $s->{level} > 0) {
+ $out = ($realtype eq 'HASH') ? '{}' :
+ ($realtype eq 'ARRAY') ? '[]' :
+ 'do{my $o}' ;
+ push @post, $name . " = " . $s->{seen}{$id}[0];
+ }
+ else {
+ $out = $s->{seen}{$id}[0];
+ if ($name =~ /^([\@\%])/) {
+ my $start = $1;
+ if ($out =~ /^\\$start/) {
+ $out = substr($out, 1);
+ }
+ else {
+ $out = $start . '{' . $out . '}';
+ }
+ }
+ }
+ return $out;
+# }
+ }
+ else {
+ # store our name
+ $s->{seen}{$id} = [ (($name =~ /^[@%]/) ? ('\\' . $name ) :
+ ($realtype eq 'CODE' and
+ $name =~ /^[*](.*)$/) ? ('\\&' . $1 ) :
+ $name ),
+ $val ];
+ }
+ }
+
+ if ($realpack and $realpack eq 'Regexp') {
+ $out = "$val";
+ $out =~ s,/,\\/,g;
+ return "qr/$out/";
+ }
+
+ # If purity is not set and maxdepth is set, then check depth:
+ # if we have reached maximum depth, return the string
+ # representation of the thing we are currently examining
+ # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)').
+ if (!$s->{purity}
+ and $s->{maxdepth} > 0
+ and $s->{level} >= $s->{maxdepth})
+ {
+ return qq['$val'];
+ }
+
+ # we have a blessed ref
+ if ($realpack) {
+ $out = $s->{'bless'} . '( ';
+ $blesspad = $s->{apad};
+ $s->{apad} .= ' ' if ($s->{indent} >= 2);
+ }
+
+ $s->{level}++;
+ $ipad = $s->{xpad} x $s->{level};
+
+ if ($realtype eq 'SCALAR' || $realtype eq 'REF') {
+ if ($realpack) {
+ $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}';
+ }
+ else {
+ $out .= '\\' . $s->_dump($$val, "\${$name}");
+ }
+ }
+ elsif ($realtype eq 'GLOB') {
+ $out .= '\\' . $s->_dump($$val, "*{$name}");
+ }
+ elsif ($realtype eq 'ARRAY') {
+ my($v, $pad, $mname);
+ my($i) = 0;
+ $out .= ($name =~ /^\@/) ? '(' : '[';
+ $pad = $s->{sep} . $s->{pad} . $s->{apad};
+ ($name =~ /^\@(.*)$/) ? ($mname = "\$" . $1) :
+ # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
+ ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
+ ($mname = $name . '->');
+ $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
+ for $v (@$val) {
+ $sname = $mname . '[' . $i . ']';
+ $out .= $pad . $ipad . '#' . $i if $s->{indent} >= 3;
+ $out .= $pad . $ipad . $s->_dump($v, $sname);
+ $out .= "," if $i++ < $#$val;
+ }
+ $out .= $pad . ($s->{xpad} x ($s->{level} - 1)) if $i;
+ $out .= ($name =~ /^\@/) ? ')' : ']';
+ }
+ elsif ($realtype eq 'HASH') {
+ my($k, $v, $pad, $lpad, $mname, $pair);
+ $out .= ($name =~ /^\%/) ? '(' : '{';
+ $pad = $s->{sep} . $s->{pad} . $s->{apad};
+ $lpad = $s->{apad};
+ $pair = $s->{pair};
+ ($name =~ /^\%(.*)$/) ? ($mname = "\$" . $1) :
+ # omit -> if $foo->[0]->{bar}, but not ${$foo->[0]}->{bar}
+ ($name =~ /^\\?[\%\@\*\$][^{].*[]}]$/) ? ($mname = $name) :
+ ($mname = $name . '->');
+ $mname .= '->' if $mname =~ /^\*.+\{[A-Z]+\}$/;
+ my ($sortkeys, $keys, $key) = ("$s->{sortkeys}");
+ if ($sortkeys) {
+ if (ref($s->{sortkeys}) eq 'CODE') {
+ $keys = $s->{sortkeys}($val);
+ unless (ref($keys) eq 'ARRAY') {
+ carp "Sortkeys subroutine did not return ARRAYREF";
+ $keys = [];
+ }
+ }
+ else {
+ $keys = [ sort keys %$val ];
+ }
+ }
+ while (($k, $v) = ! $sortkeys ? (each %$val) :
+ @$keys ? ($key = shift(@$keys), $val->{$key}) :
+ () )
+ {
+ my $nk = $s->_dump($k, "");
+ $nk = $1 if !$s->{quotekeys} and $nk =~ /^[\"\']([A-Za-z_]\w*)[\"\']$/;
+ $sname = $mname . '{' . $nk . '}';
+ $out .= $pad . $ipad . $nk . $pair;
+
+ # temporarily alter apad
+ $s->{apad} .= (" " x (length($nk) + 4)) if $s->{indent} >= 2;
+ $out .= $s->_dump($val->{$k}, $sname) . ",";
+ $s->{apad} = $lpad if $s->{indent} >= 2;
+ }
+ if (substr($out, -1) eq ',') {
+ chop $out;
+ $out .= $pad . ($s->{xpad} x ($s->{level} - 1));
+ }
+ $out .= ($name =~ /^\%/) ? ')' : '}';
+ }
+ elsif ($realtype eq 'CODE') {
+ if ($s->{deparse}) {
+ require B::Deparse;
+ my $sub = 'sub ' . (B::Deparse->new)->coderef2text($val);
+ $pad = $s->{sep} . $s->{pad} . $s->{apad} . $s->{xpad} x ($s->{level} - 1);
+ $sub =~ s/\n/$pad/gse;
+ $out .= $sub;
+ } else {
+ $out .= 'sub { "DUMMY" }';
+ carp "Encountered CODE ref, using dummy placeholder" if $s->{purity};
+ }
+ }
+ else {
+ croak "Can\'t handle $realtype type.";
+ }
+
+ if ($realpack) { # we have a blessed ref
+ $out .= ', \'' . $realpack . '\'' . ' )';
+ $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne '';
+ $s->{apad} = $blesspad;
+ }
+ $s->{level}--;
+
+ }
+ else { # simple scalar
+
+ my $ref = \$_[1];
+ # first, catalog the scalar
+ if ($name ne '') {
+ $id = format_refaddr($ref);
+ if (exists $s->{seen}{$id}) {
+ if ($s->{seen}{$id}[2]) {
+ $out = $s->{seen}{$id}[0];
+ #warn "[<$out]\n";
+ return "\${$out}";
+ }
+ }
+ else {
+ #warn "[>\\$name]\n";
+ $s->{seen}{$id} = ["\\$name", $ref];
+ }
+ }
+ if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob
+ my $name = substr($val, 1);
+ if ($name =~ /^[A-Za-z_][\w:]*$/) {
+ $name =~ s/^main::/::/;
+ $sname = $name;
+ }
+ else {
+ $sname = $s->_dump($name, "");
+ $sname = '{' . $sname . '}';
+ }
+ if ($s->{purity}) {
+ my $k;
+ local ($s->{level}) = 0;
+ for $k (qw(SCALAR ARRAY HASH)) {
+ my $gval = *$val{$k};
+ next unless defined $gval;
+ next if $k eq "SCALAR" && ! defined $$gval; # always there
+
+ # _dump can push into @post, so we hold our place using $postlen
+ my $postlen = scalar @post;
+ $post[$postlen] = "\*$sname = ";
+ local ($s->{apad}) = " " x length($post[$postlen]) if $s->{indent} >= 2;
+ $post[$postlen] .= $s->_dump($gval, "\*$sname\{$k\}");
+ }
+ }
+ $out .= '*' . $sname;
+ }
+ elsif (!defined($val)) {
+ $out .= "undef";
+ }
+ elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})\z/) { # safe decimal number
+ $out .= $val;
+ }
+ else { # string
+ if ($s->{useqq} or $val =~ tr/\0-\377//c) {
+ # Fall back to qq if there's unicode
+ $out .= qquote($val, $s->{useqq});
+ }
+ else {
+ $val =~ s/([\\\'])/\\$1/g;
+ $out .= '\'' . $val . '\'';
+ }
+ }
+ }
+ if ($id) {
+ # if we made it this far, $id was added to seen list at current
+ # level, so remove it to get deep copies
+ if ($s->{deepcopy}) {
+ delete($s->{seen}{$id});
+ }
+ elsif ($name) {
+ $s->{seen}{$id}[2] = 1;
+ }
+ }
+ return $out;
+}
+
+#
+# non-OO style of earlier version
+#
+sub Dumper {
+ return Data::Dumper->Dump([@_]);
+}
+
+# compat stub
+sub DumperX {
+ return Data::Dumper->Dumpxs([@_], []);
+}
+
+sub Dumpf { return Data::Dumper->Dump(@_) }
+
+sub Dumpp { print Data::Dumper->Dump(@_) }
+
+#
+# reset the "seen" cache
+#
+sub Reset {
+ my($s) = shift;
+ $s->{seen} = {};
+ return $s;
+}
+
+sub Indent {
+ my($s, $v) = @_;
+ if (defined($v)) {
+ if ($v == 0) {
+ $s->{xpad} = "";
+ $s->{sep} = "";
+ }
+ else {
+ $s->{xpad} = " ";
+ $s->{sep} = "\n";
+ }
+ $s->{indent} = $v;
+ return $s;
+ }
+ else {
+ return $s->{indent};
+ }
+}
+
+sub Pair {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{pair} = $v), return $s) : $s->{pair};
+}
+
+sub Pad {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{pad} = $v), return $s) : $s->{pad};
+}
+
+sub Varname {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{varname} = $v), return $s) : $s->{varname};
+}
+
+sub Purity {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{purity} = $v), return $s) : $s->{purity};
+}
+
+sub Useqq {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{useqq} = $v), return $s) : $s->{useqq};
+}
+
+sub Terse {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{terse} = $v), return $s) : $s->{terse};
+}
+
+sub Freezer {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{freezer} = $v), return $s) : $s->{freezer};
+}
+
+sub Toaster {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{toaster} = $v), return $s) : $s->{toaster};
+}
+
+sub Deepcopy {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{deepcopy} = $v), return $s) : $s->{deepcopy};
+}
+
+sub Quotekeys {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{quotekeys} = $v), return $s) : $s->{quotekeys};
+}
+
+sub Bless {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
+}
+
+sub Maxdepth {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'};
+}
+
+sub Useperl {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'useperl'} = $v), return $s) : $s->{'useperl'};
+}
+
+sub Sortkeys {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'sortkeys'} = $v), return $s) : $s->{'sortkeys'};
+}
+
+sub Deparse {
+ my($s, $v) = @_;
+ defined($v) ? (($s->{'deparse'} = $v), return $s) : $s->{'deparse'};
+}
+
+# used by qquote below
+my %esc = (
+ "\a" => "\\a",
+ "\b" => "\\b",
+ "\t" => "\\t",
+ "\n" => "\\n",
+ "\f" => "\\f",
+ "\r" => "\\r",
+ "\e" => "\\e",
+);
+
+# put a string value in double quotes
+sub qquote {
+ local($_) = shift;
+ s/([\\\"\@\$])/\\$1/g;
+ my $bytes; { use bytes; $bytes = length }
+ s/([^\x00-\x7f])/'\x{'.sprintf("%x",ord($1)).'}'/ge if $bytes > length;
+ return qq("$_") unless
+ /[^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~]/; # fast exit
+
+ my $high = shift || "";
+ s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
+
+ if (ord('^')==94) { # ascii
+ # no need for 3 digits in escape for these
+ s/([\0-\037])(?!\d)/'\\'.sprintf('%o',ord($1))/eg;
+ s/([\0-\037\177])/'\\'.sprintf('%03o',ord($1))/eg;
+ # all but last branch below not supported --BEHAVIOR SUBJECT TO CHANGE--
+ if ($high eq "iso8859") {
+ s/([\200-\240])/'\\'.sprintf('%o',ord($1))/eg;
+ } elsif ($high eq "utf8") {
+# use utf8;
+# $str =~ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
+ } elsif ($high eq "8bit") {
+ # leave it as it is
+ } else {
+ s/([\200-\377])/'\\'.sprintf('%03o',ord($1))/eg;
+ s/([^\040-\176])/sprintf "\\x{%04x}", ord($1)/ge;
+ }
+ }
+ else { # ebcdic
+ s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])(?!\d)}
+ {my $v = ord($1); '\\'.sprintf(($v <= 037 ? '%o' : '%03o'), $v)}eg;
+ s{([^ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@A-Z[\\\]^_`a-z{|}~])}
+ {'\\'.sprintf('%03o',ord($1))}eg;
+ }
+
+ return qq("$_");
+}
+
+# helper sub to sort hash keys in Perl < 5.8.0 where we don't have
+# access to sortsv() from XS
+sub _sortkeys { [ sort keys %{$_[0]} ] }
+
+1;
+__END__
+
+=head1 NAME
+
+Data::Dumper - stringified perl data structures, suitable for both printing and C<eval>
+
+=head1 SYNOPSIS
+
+ use Data::Dumper;
+
+ # simple procedural interface
+ print Dumper($foo, $bar);
+
+ # extended usage with names
+ print Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
+
+ # configuration variables
+ {
+ local $Data::Dumper::Purity = 1;
+ eval Data::Dumper->Dump([$foo, $bar], [qw(foo *ary)]);
+ }
+
+ # OO usage
+ $d = Data::Dumper->new([$foo, $bar], [qw(foo *ary)]);
+ ...
+ print $d->Dump;
+ ...
+ $d->Purity(1)->Terse(1)->Deepcopy(1);
+ eval $d->Dump;
+
+
+=head1 DESCRIPTION
+
+Given a list of scalars or reference variables, writes out their contents in
+perl syntax. The references can also be objects. The contents of each
+variable is output in a single Perl statement. Handles self-referential
+structures correctly.
+
+The return value can be C<eval>ed to get back an identical copy of the
+original reference structure.
+
+Any references that are the same as one of those passed in will be named
+C<$VAR>I<n> (where I<n> is a numeric suffix), and other duplicate references
+to substructures within C<$VAR>I<n> will be appropriately labeled using arrow
+notation. You can specify names for individual values to be dumped if you
+use the C<Dump()> method, or you can change the default C<$VAR> prefix to
+something else. See C<$Data::Dumper::Varname> and C<$Data::Dumper::Terse>
+below.
+
+The default output of self-referential structures can be C<eval>ed, but the
+nested references to C<$VAR>I<n> will be undefined, since a recursive
+structure cannot be constructed using one Perl statement. You should set the
+C<Purity> flag to 1 to get additional statements that will correctly fill in
+these references. Moreover, if C<eval>ed when strictures are in effect,
+you need to ensure that any variables it accesses are previously declared.
+
+In the extended usage form, the references to be dumped can be given
+user-specified names. If a name begins with a C<*>, the output will
+describe the dereferenced type of the supplied reference for hashes and
+arrays, and coderefs. Output of names will be avoided where possible if
+the C<Terse> flag is set.
+
+In many cases, methods that are used to set the internal state of the
+object will return the object itself, so method calls can be conveniently
+chained together.
+
+Several styles of output are possible, all controlled by setting
+the C<Indent> flag. See L<Configuration Variables or Methods> below
+for details.
+
+
+=head2 Methods
+
+=over 4
+
+=item I<PACKAGE>->new(I<ARRAYREF [>, I<ARRAYREF]>)
+
+Returns a newly created C<Data::Dumper> object. The first argument is an
+anonymous array of values to be dumped. The optional second argument is an
+anonymous array of names for the values. The names need not have a leading
+C<$> sign, and must be comprised of alphanumeric characters. You can begin
+a name with a C<*> to specify that the dereferenced type must be dumped
+instead of the reference itself, for ARRAY and HASH references.
+
+The prefix specified by C<$Data::Dumper::Varname> will be used with a
+numeric suffix if the name for a value is undefined.
+
+Data::Dumper will catalog all references encountered while dumping the
+values. Cross-references (in the form of names of substructures in perl
+syntax) will be inserted at all possible points, preserving any structural
+interdependencies in the original set of values. Structure traversal is
+depth-first, and proceeds in order from the first supplied value to
+the last.
+
+=item I<$OBJ>->Dump I<or> I<PACKAGE>->Dump(I<ARRAYREF [>, I<ARRAYREF]>)
+
+Returns the stringified form of the values stored in the object (preserving
+the order in which they were supplied to C<new>), subject to the
+configuration options below. In a list context, it returns a list
+of strings corresponding to the supplied values.
+
+The second form, for convenience, simply calls the C<new> method on its
+arguments before dumping the object immediately.
+
+=item I<$OBJ>->Seen(I<[HASHREF]>)
+
+Queries or adds to the internal table of already encountered references.
+You must use C<Reset> to explicitly clear the table if needed. Such
+references are not dumped; instead, their names are inserted wherever they
+are encountered subsequently. This is useful especially for properly
+dumping subroutine references.
+
+Expects an anonymous hash of name => value pairs. Same rules apply for names
+as in C<new>. If no argument is supplied, will return the "seen" list of
+name => value pairs, in a list context. Otherwise, returns the object
+itself.
+
+=item I<$OBJ>->Values(I<[ARRAYREF]>)
+
+Queries or replaces the internal array of values that will be dumped.
+When called without arguments, returns the values. Otherwise, returns the
+object itself.
+
+=item I<$OBJ>->Names(I<[ARRAYREF]>)
+
+Queries or replaces the internal array of user supplied names for the values
+that will be dumped. When called without arguments, returns the names.
+Otherwise, returns the object itself.
+
+=item I<$OBJ>->Reset
+
+Clears the internal table of "seen" references and returns the object
+itself.
+
+=back
+
+=head2 Functions
+
+=over 4
+
+=item Dumper(I<LIST>)
+
+Returns the stringified form of the values in the list, subject to the
+configuration options below. The values will be named C<$VAR>I<n> in the
+output, where I<n> is a numeric suffix. Will return a list of strings
+in a list context.
+
+=back
+
+=head2 Configuration Variables or Methods
+
+Several configuration variables can be used to control the kind of output
+generated when using the procedural interface. These variables are usually
+C<local>ized in a block so that other parts of the code are not affected by
+the change.
+
+These variables determine the default state of the object created by calling
+the C<new> method, but cannot be used to alter the state of the object
+thereafter. The equivalent method names should be used instead to query
+or set the internal state of the object.
+
+The method forms return the object itself when called with arguments,
+so that they can be chained together nicely.
+
+=over 4
+
+=item *
+
+$Data::Dumper::Indent I<or> I<$OBJ>->Indent(I<[NEWVAL]>)
+
+Controls the style of indentation. It can be set to 0, 1, 2 or 3. Style 0
+spews output without any newlines, indentation, or spaces between list
+items. It is the most compact format possible that can still be called
+valid perl. Style 1 outputs a readable form with newlines but no fancy
+indentation (each level in the structure is simply indented by a fixed
+amount of whitespace). Style 2 (the default) outputs a very readable form
+which takes into account the length of hash keys (so the hash value lines
+up). Style 3 is like style 2, but also annotates the elements of arrays
+with their index (but the comment is on its own line, so array output
+consumes twice the number of lines). Style 2 is the default.
+
+=item *
+
+$Data::Dumper::Purity I<or> I<$OBJ>->Purity(I<[NEWVAL]>)
+
+Controls the degree to which the output can be C<eval>ed to recreate the
+supplied reference structures. Setting it to 1 will output additional perl
+statements that will correctly recreate nested references. The default is
+0.
+
+=item *
+
+$Data::Dumper::Pad I<or> I<$OBJ>->Pad(I<[NEWVAL]>)
+
+Specifies the string that will be prefixed to every line of the output.
+Empty string by default.
+
+=item *
+
+$Data::Dumper::Varname I<or> I<$OBJ>->Varname(I<[NEWVAL]>)
+
+Contains the prefix to use for tagging variable names in the output. The
+default is "VAR".
+
+=item *
+
+$Data::Dumper::Useqq I<or> I<$OBJ>->Useqq(I<[NEWVAL]>)
+
+When set, enables the use of double quotes for representing string values.
+Whitespace other than space will be represented as C<[\n\t\r]>, "unsafe"
+characters will be backslashed, and unprintable characters will be output as
+quoted octal integers. Since setting this variable imposes a performance
+penalty, the default is 0. C<Dump()> will run slower if this flag is set,
+since the fast XSUB implementation doesn't support it yet.
+
+=item *
+
+$Data::Dumper::Terse I<or> I<$OBJ>->Terse(I<[NEWVAL]>)
+
+When set, Data::Dumper will emit single, non-self-referential values as
+atoms/terms rather than statements. This means that the C<$VAR>I<n> names
+will be avoided where possible, but be advised that such output may not
+always be parseable by C<eval>.
+
+=item *
+
+$Data::Dumper::Freezer I<or> $I<OBJ>->Freezer(I<[NEWVAL]>)
+
+Can be set to a method name, or to an empty string to disable the feature.
+Data::Dumper will invoke that method via the object before attempting to
+stringify it. This method can alter the contents of the object (if, for
+instance, it contains data allocated from C), and even rebless it in a
+different package. The client is responsible for making sure the specified
+method can be called via the object, and that the object ends up containing
+only perl data types after the method has been called. Defaults to an empty
+string.
+
+If an object does not support the method specified (determined using
+UNIVERSAL::can()) then the call will be skipped. If the method dies a
+warning will be generated.
+
+=item *
+
+$Data::Dumper::Toaster I<or> $I<OBJ>->Toaster(I<[NEWVAL]>)
+
+Can be set to a method name, or to an empty string to disable the feature.
+Data::Dumper will emit a method call for any objects that are to be dumped
+using the syntax C<bless(DATA, CLASS)-E<gt>METHOD()>. Note that this means that
+the method specified will have to perform any modifications required on the
+object (like creating new state within it, and/or reblessing it in a
+different package) and then return it. The client is responsible for making
+sure the method can be called via the object, and that it returns a valid
+object. Defaults to an empty string.
+
+=item *
+
+$Data::Dumper::Deepcopy I<or> $I<OBJ>->Deepcopy(I<[NEWVAL]>)
+
+Can be set to a boolean value to enable deep copies of structures.
+Cross-referencing will then only be done when absolutely essential
+(i.e., to break reference cycles). Default is 0.
+
+=item *
+
+$Data::Dumper::Quotekeys I<or> $I<OBJ>->Quotekeys(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether hash keys are quoted.
+A false value will avoid quoting hash keys when it looks like a simple
+string. Default is 1, which will always enclose hash keys in quotes.
+
+=item *
+
+$Data::Dumper::Bless I<or> $I<OBJ>->Bless(I<[NEWVAL]>)
+
+Can be set to a string that specifies an alternative to the C<bless>
+builtin operator used to create objects. A function with the specified
+name should exist, and should accept the same arguments as the builtin.
+Default is C<bless>.
+
+=item *
+
+$Data::Dumper::Pair I<or> $I<OBJ>->Pair(I<[NEWVAL]>)
+
+Can be set to a string that specifies the separator between hash keys
+and values. To dump nested hash, array and scalar values to JavaScript,
+use: C<$Data::Dumper::Pair = ' : ';>. Implementing C<bless> in JavaScript
+is left as an exercise for the reader.
+A function with the specified name exists, and accepts the same arguments
+as the builtin.
+
+Default is: C< =E<gt> >.
+
+=item *
+
+$Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<[NEWVAL]>)
+
+Can be set to a positive integer that specifies the depth beyond which
+which we don't venture into a structure. Has no effect when
+C<Data::Dumper::Purity> is set. (Useful in debugger when we often don't
+want to see more than enough). Default is 0, which means there is
+no maximum depth.
+
+=item *
+
+$Data::Dumper::Useperl I<or> $I<OBJ>->Useperl(I<[NEWVAL]>)
+
+Can be set to a boolean value which controls whether the pure Perl
+implementation of C<Data::Dumper> is used. The C<Data::Dumper> module is
+a dual implementation, with almost all functionality written in both
+pure Perl and also in XS ('C'). Since the XS version is much faster, it
+will always be used if possible. This option lets you override the
+default behavior, usually for testing purposes only. Default is 0, which
+means the XS implementation will be used if possible.
+
+=item *
+
+$Data::Dumper::Sortkeys I<or> $I<OBJ>->Sortkeys(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether hash keys are dumped in
+sorted order. A true value will cause the keys of all hashes to be
+dumped in Perl's default sort order. Can also be set to a subroutine
+reference which will be called for each hash that is dumped. In this
+case C<Data::Dumper> will call the subroutine once for each hash,
+passing it the reference of the hash. The purpose of the subroutine is
+to return a reference to an array of the keys that will be dumped, in
+the order that they should be dumped. Using this feature, you can
+control both the order of the keys, and which keys are actually used. In
+other words, this subroutine acts as a filter by which you can exclude
+certain keys from being dumped. Default is 0, which means that hash keys
+are not sorted.
+
+=item *
+
+$Data::Dumper::Deparse I<or> $I<OBJ>->Deparse(I<[NEWVAL]>)
+
+Can be set to a boolean value to control whether code references are
+turned into perl source code. If set to a true value, C<B::Deparse>
+will be used to get the source of the code reference. Using this option
+will force using the Perl implementation of the dumper, since the fast
+XSUB implementation doesn't support it.
+
+Caution : use this option only if you know that your coderefs will be
+properly reconstructed by C<B::Deparse>.
+
+=back
+
+=head2 Exports
+
+=over 4
+
+=item Dumper
+
+=back
+
+=head1 EXAMPLES
+
+Run these code snippets to get a quick feel for the behavior of this
+module. When you are through with these examples, you may want to
+add or change the various configuration variables described above,
+to see their behavior. (See the testsuite in the Data::Dumper
+distribution for more examples.)
+
+
+ use Data::Dumper;
+
+ package Foo;
+ sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
+
+ package Fuz; # a weird REF-REF-SCALAR object
+ sub new {bless \($_ = \ 'fu\'z'), $_[0]};
+
+ package main;
+ $foo = Foo->new;
+ $fuz = Fuz->new;
+ $boo = [ 1, [], "abcd", \*foo,
+ {1 => 'a', 023 => 'b', 0x45 => 'c'},
+ \\"p\q\'r", $foo, $fuz];
+
+ ########
+ # simple usage
+ ########
+
+ $bar = eval(Dumper($boo));
+ print($@) if $@;
+ print Dumper($boo), Dumper($bar); # pretty print (no array indices)
+
+ $Data::Dumper::Terse = 1; # don't output names where feasible
+ $Data::Dumper::Indent = 0; # turn off all pretty print
+ print Dumper($boo), "\n";
+
+ $Data::Dumper::Indent = 1; # mild pretty print
+ print Dumper($boo);
+
+ $Data::Dumper::Indent = 3; # pretty print with array indices
+ print Dumper($boo);
+
+ $Data::Dumper::Useqq = 1; # print strings in double quotes
+ print Dumper($boo);
+
+ $Data::Dumper::Pair = " : "; # specify hash key/value separator
+ print Dumper($boo);
+
+
+ ########
+ # recursive structures
+ ########
+
+ @c = ('c');
+ $c = \@c;
+ $b = {};
+ $a = [1, $b, $c];
+ $b->{a} = $a;
+ $b->{b} = $a->[1];
+ $b->{c} = $a->[2];
+ print Data::Dumper->Dump([$a,$b,$c], [qw(a b c)]);
+
+
+ $Data::Dumper::Purity = 1; # fill in the holes for eval
+ print Data::Dumper->Dump([$a, $b], [qw(*a b)]); # print as @a
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]); # print as %b
+
+
+ $Data::Dumper::Deepcopy = 1; # avoid cross-refs
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
+
+
+ $Data::Dumper::Purity = 0; # avoid cross-refs
+ print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
+
+ ########
+ # deep structures
+ ########
+
+ $a = "pearl";
+ $b = [ $a ];
+ $c = { 'b' => $b };
+ $d = [ $c ];
+ $e = { 'd' => $d };
+ $f = { 'e' => $e };
+ print Data::Dumper->Dump([$f], [qw(f)]);
+
+ $Data::Dumper::Maxdepth = 3; # no deeper than 3 refs down
+ print Data::Dumper->Dump([$f], [qw(f)]);
+
+
+ ########
+ # object-oriented usage
+ ########
+
+ $d = Data::Dumper->new([$a,$b], [qw(a b)]);
+ $d->Seen({'*c' => $c}); # stash a ref without printing it
+ $d->Indent(3);
+ print $d->Dump;
+ $d->Reset->Purity(0); # empty the seen cache
+ print join "----\n", $d->Dump;
+
+
+ ########
+ # persistence
+ ########
+
+ package Foo;
+ sub new { bless { state => 'awake' }, shift }
+ sub Freeze {
+ my $s = shift;
+ print STDERR "preparing to sleep\n";
+ $s->{state} = 'asleep';
+ return bless $s, 'Foo::ZZZ';
+ }
+
+ package Foo::ZZZ;
+ sub Thaw {
+ my $s = shift;
+ print STDERR "waking up\n";
+ $s->{state} = 'awake';
+ return bless $s, 'Foo';
+ }
+
+ package Foo;
+ use Data::Dumper;
+ $a = Foo->new;
+ $b = Data::Dumper->new([$a], ['c']);
+ $b->Freezer('Freeze');
+ $b->Toaster('Thaw');
+ $c = $b->Dump;
+ print $c;
+ $d = eval $c;
+ print Data::Dumper->Dump([$d], ['d']);
+
+
+ ########
+ # symbol substitution (useful for recreating CODE refs)
+ ########
+
+ sub foo { print "foo speaking\n" }
+ *other = \&foo;
+ $bar = [ \&other ];
+ $d = Data::Dumper->new([\&other,$bar],['*other','bar']);
+ $d->Seen({ '*foo' => \&foo });
+ print $d->Dump;
+
+
+ ########
+ # sorting and filtering hash keys
+ ########
+
+ $Data::Dumper::Sortkeys = \&my_filter;
+ my $foo = { map { (ord, "$_$_$_") } 'I'..'Q' };
+ my $bar = { %$foo };
+ my $baz = { reverse %$foo };
+ print Dumper [ $foo, $bar, $baz ];
+
+ sub my_filter {
+ my ($hash) = @_;
+ # return an array ref containing the hash keys to dump
+ # in the order that you want them to be dumped
+ return [
+ # Sort the keys of %$foo in reverse numeric order
+ $hash eq $foo ? (sort {$b <=> $a} keys %$hash) :
+ # Only dump the odd number keys of %$bar
+ $hash eq $bar ? (grep {$_ % 2} keys %$hash) :
+ # Sort keys in default order for all other hashes
+ (sort keys %$hash)
+ ];
+ }
+
+=head1 BUGS
+
+Due to limitations of Perl subroutine call semantics, you cannot pass an
+array or hash. Prepend it with a C<\> to pass its reference instead. This
+will be remedied in time, now that Perl has subroutine prototypes.
+For now, you need to use the extended usage form, and prepend the
+name with a C<*> to output it as a hash or array.
+
+C<Data::Dumper> cheats with CODE references. If a code reference is
+encountered in the structure being processed (and if you haven't set
+the C<Deparse> flag), an anonymous subroutine that
+contains the string '"DUMMY"' will be inserted in its place, and a warning
+will be printed if C<Purity> is set. You can C<eval> the result, but bear
+in mind that the anonymous sub that gets created is just a placeholder.
+Someday, perl will have a switch to cache-on-demand the string
+representation of a compiled piece of code, I hope. If you have prior
+knowledge of all the code refs that your data structures are likely
+to have, you can use the C<Seen> method to pre-seed the internal reference
+table and make the dumped output point to them, instead. See L</EXAMPLES>
+above.
+
+The C<Useqq> and C<Deparse> flags makes Dump() run slower, since the
+XSUB implementation does not support them.
+
+SCALAR objects have the weirdest looking C<bless> workaround.
+
+Pure Perl version of C<Data::Dumper> escapes UTF-8 strings correctly
+only in Perl 5.8.0 and later.
+
+=head2 NOTE
+
+Starting from Perl 5.8.1 different runs of Perl will have different
+ordering of hash keys. The change was done for greater security,
+see L<perlsec/"Algorithmic Complexity Attacks">. This means that
+different runs of Perl will have different Data::Dumper outputs if
+the data contains hashes. If you need to have identical Data::Dumper
+outputs from different runs of Perl, use the environment variable
+PERL_HASH_SEED, see L<perlrun/PERL_HASH_SEED>. Using this restores
+the old (platform-specific) ordering: an even prettier solution might
+be to use the C<Sortkeys> filter of Data::Dumper.
+
+=head1 AUTHOR
+
+Gurusamy Sarathy gsar@activestate.com
+
+Copyright (c) 1996-98 Gurusamy Sarathy. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=head1 VERSION
+
+Version 2.121 (Aug 24 2003)
+
+=head1 SEE ALSO
+
+perl(1)
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Digest/MD5.pm b/Master/tlpkg/tlperl/lib/Digest/MD5.pm
new file mode 100644
index 00000000000..17fb11d678a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Digest/MD5.pm
@@ -0,0 +1,376 @@
+package Digest::MD5;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT_OK);
+
+$VERSION = '2.36'; # $Date: 2005/11/30 13:46:47 $
+
+require Exporter;
+*import = \&Exporter::import;
+@EXPORT_OK = qw(md5 md5_hex md5_base64);
+
+eval {
+ require Digest::base;
+ push(@ISA, 'Digest::base');
+};
+if ($@) {
+ my $err = $@;
+ *add_bits = sub { die $err };
+}
+
+
+eval {
+ require XSLoader;
+ XSLoader::load('Digest::MD5', $VERSION);
+};
+if ($@) {
+ my $olderr = $@;
+ eval {
+ # Try to load the pure perl version
+ require Digest::Perl::MD5;
+
+ Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64));
+ push(@ISA, "Digest::Perl::MD5"); # make OO interface work
+ };
+ if ($@) {
+ # restore the original error
+ die $olderr;
+ }
+}
+else {
+ *reset = \&new;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Digest::MD5 - Perl interface to the MD5 Algorithm
+
+=head1 SYNOPSIS
+
+ # Functional style
+ use Digest::MD5 qw(md5 md5_hex md5_base64);
+
+ $digest = md5($data);
+ $digest = md5_hex($data);
+ $digest = md5_base64($data);
+
+ # OO style
+ use Digest::MD5;
+
+ $ctx = Digest::MD5->new;
+
+ $ctx->add($data);
+ $ctx->addfile(*FILE);
+
+ $digest = $ctx->digest;
+ $digest = $ctx->hexdigest;
+ $digest = $ctx->b64digest;
+
+=head1 DESCRIPTION
+
+The C<Digest::MD5> module allows you to use the RSA Data Security
+Inc. MD5 Message Digest algorithm from within Perl programs. The
+algorithm takes as input a message of arbitrary length and produces as
+output a 128-bit "fingerprint" or "message digest" of the input.
+
+Note that the MD5 algorithm is not as strong as it used to be. It has
+since 2005 been easy to generate different messages that produce the
+same MD5 digest. It still seems hard to generate messages that
+produce a given digest, but it is probably wise to move to stronger
+algorithms for applications that depend on the digest to uniquely identify
+a message.
+
+The C<Digest::MD5> module provide a procedural interface for simple
+use, as well as an object oriented interface that can handle messages
+of arbitrary length and which can read files directly.
+
+=head1 FUNCTIONS
+
+The following functions are provided by the C<Digest::MD5> module.
+None of these functions are exported by default.
+
+=over 4
+
+=item md5($data,...)
+
+This function will concatenate all arguments, calculate the MD5 digest
+of this "message", and return it in binary form. The returned string
+will be 16 bytes long.
+
+The result of md5("a", "b", "c") will be exactly the same as the
+result of md5("abc").
+
+=item md5_hex($data,...)
+
+Same as md5(), but will return the digest in hexadecimal form. The
+length of the returned string will be 32 and it will only contain
+characters from this set: '0'..'9' and 'a'..'f'.
+
+=item md5_base64($data,...)
+
+Same as md5(), but will return the digest as a base64 encoded string.
+The length of the returned string will be 22 and it will only contain
+characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and
+'/'.
+
+Note that the base64 encoded string returned is not padded to be a
+multiple of 4 bytes long. If you want interoperability with other
+base64 encoded md5 digests you might want to append the redundant
+string "==" to the result.
+
+=back
+
+=head1 METHODS
+
+The object oriented interface to C<Digest::MD5> is described in this
+section. After a C<Digest::MD5> object has been created, you will add
+data to it and finally ask for the digest in a suitable format. A
+single object can be used to calculate multiple digests.
+
+The following methods are provided:
+
+=over 4
+
+=item $md5 = Digest::MD5->new
+
+The constructor returns a new C<Digest::MD5> object which encapsulate
+the state of the MD5 message-digest algorithm.
+
+If called as an instance method (i.e. $md5->new) it will just reset the
+state the object to the state of a newly created object. No new
+object is created in this case.
+
+=item $md5->reset
+
+This is just an alias for $md5->new.
+
+=item $md5->clone
+
+This a copy of the $md5 object. It is useful when you do not want to
+destroy the digests state, but need an intermediate value of the
+digest, e.g. when calculating digests iteratively on a continuous data
+stream. Example:
+
+ my $md5 = Digest::MD5->new;
+ while (<>) {
+ $md5->add($_);
+ print "Line $.: ", $md5->clone->hexdigest, "\n";
+ }
+
+=item $md5->add($data,...)
+
+The $data provided as argument are appended to the message we
+calculate the digest for. The return value is the $md5 object itself.
+
+All these lines will have the same effect on the state of the $md5
+object:
+
+ $md5->add("a"); $md5->add("b"); $md5->add("c");
+ $md5->add("a")->add("b")->add("c");
+ $md5->add("a", "b", "c");
+ $md5->add("abc");
+
+=item $md5->addfile($io_handle)
+
+The $io_handle will be read until EOF and its content appended to the
+message we calculate the digest for. The return value is the $md5
+object itself.
+
+The addfile() method will croak() if it fails reading data for some
+reason. If it croaks it is unpredictable what the state of the $md5
+object will be in. The addfile() method might have been able to read
+the file partially before it failed. It is probably wise to discard
+or reset the $md5 object if this occurs.
+
+In most cases you want to make sure that the $io_handle is in
+C<binmode> before you pass it as argument to the addfile() method.
+
+=item $md5->add_bits($data, $nbits)
+
+=item $md5->add_bits($bitstring)
+
+Since the MD5 algorithm is byte oriented you might only add bits as
+multiples of 8, so you probably want to just use add() instead. The
+add_bits() method is provided for compatibility with other digest
+implementations. See L<Digest> for description of the arguments
+that add_bits() take.
+
+=item $md5->digest
+
+Return the binary digest for the message. The returned string will be
+16 bytes long.
+
+Note that the C<digest> operation is effectively a destructive,
+read-once operation. Once it has been performed, the C<Digest::MD5>
+object is automatically C<reset> and can be used to calculate another
+digest value. Call $md5->clone->digest if you want to calculate the
+digest without resetting the digest state.
+
+=item $md5->hexdigest
+
+Same as $md5->digest, but will return the digest in hexadecimal
+form. The length of the returned string will be 32 and it will only
+contain characters from this set: '0'..'9' and 'a'..'f'.
+
+=item $md5->b64digest
+
+Same as $md5->digest, but will return the digest as a base64 encoded
+string. The length of the returned string will be 22 and it will only
+contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+'
+and '/'.
+
+
+The base64 encoded string returned is not padded to be a multiple of 4
+bytes long. If you want interoperability with other base64 encoded
+md5 digests you might want to append the string "==" to the result.
+
+=back
+
+
+=head1 EXAMPLES
+
+The simplest way to use this library is to import the md5_hex()
+function (or one of its cousins):
+
+ use Digest::MD5 qw(md5_hex);
+ print "Digest is ", md5_hex("foobarbaz"), "\n";
+
+The above example would print out the message:
+
+ Digest is 6df23dc03f9b54cc38a0fc1483df6e21
+
+The same checksum can also be calculated in OO style:
+
+ use Digest::MD5;
+
+ $md5 = Digest::MD5->new;
+ $md5->add('foo', 'bar');
+ $md5->add('baz');
+ $digest = $md5->hexdigest;
+
+ print "Digest is $digest\n";
+
+With OO style you can break the message arbitrary. This means that we
+are no longer limited to have space for the whole message in memory, i.e.
+we can handle messages of any size.
+
+This is useful when calculating checksum for files:
+
+ use Digest::MD5;
+
+ my $file = shift || "/etc/passwd";
+ open(FILE, $file) or die "Can't open '$file': $!";
+ binmode(FILE);
+
+ $md5 = Digest::MD5->new;
+ while (<FILE>) {
+ $md5->add($_);
+ }
+ close(FILE);
+ print $md5->b64digest, " $file\n";
+
+Or we can use the addfile method for more efficient reading of
+the file:
+
+ use Digest::MD5;
+
+ my $file = shift || "/etc/passwd";
+ open(FILE, $file) or die "Can't open '$file': $!";
+ binmode(FILE);
+
+ print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";
+
+Perl 5.8 support Unicode characters in strings. Since the MD5
+algorithm is only defined for strings of bytes, it can not be used on
+strings that contains chars with ordinal number above 255. The MD5
+functions and methods will croak if you try to feed them such input
+data:
+
+ use Digest::MD5 qw(md5_hex);
+
+ my $str = "abc\x{300}";
+ print md5_hex($str), "\n"; # croaks
+ # Wide character in subroutine entry
+
+What you can do is calculate the MD5 checksum of the UTF-8
+representation of such strings. This is achieved by filtering the
+string through encode_utf8() function:
+
+ use Digest::MD5 qw(md5_hex);
+ use Encode qw(encode_utf8);
+
+ my $str = "abc\x{300}";
+ print md5_hex(encode_utf8($str)), "\n";
+ # 8c2d46911f3f5a326455f0ed7a8ed3b3
+
+=head1 SEE ALSO
+
+L<Digest>,
+L<Digest::MD2>,
+L<Digest::SHA1>,
+L<Digest::HMAC>
+
+L<md5sum(1)>
+
+RFC 1321
+
+http://en.wikipedia.org/wiki/MD5
+
+The paper "How to Break MD5 and Other Hash Functions" by Xiaoyun Wang
+and Hongbo Yu.
+
+=head1 COPYRIGHT
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+ Copyright 1998-2003 Gisle Aas.
+ Copyright 1995-1996 Neil Winton.
+ Copyright 1991-1992 RSA Data Security, Inc.
+
+The MD5 algorithm is defined in RFC 1321. This implementation is
+derived from the reference C code in RFC 1321 which is covered by
+the following copyright statement:
+
+=over 4
+
+=item
+
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+
+=back
+
+This copyright does not prohibit distribution of any version of Perl
+containing this extension under the terms of the GNU or Artistic
+licenses.
+
+=head1 AUTHORS
+
+The original C<MD5> interface was written by Neil Winton
+(C<N.Winton@axion.bt.co.uk>).
+
+The C<Digest::MD5> module is written by Gisle Aas <gisle@ActiveState.com>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Digest/base.pm b/Master/tlpkg/tlperl/lib/Digest/base.pm
new file mode 100644
index 00000000000..cb336c2cf61
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Digest/base.pm
@@ -0,0 +1,100 @@
+package Digest::base;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = "1.00";
+
+# subclass is supposed to implement at least these
+sub new;
+sub clone;
+sub add;
+sub digest;
+
+sub reset {
+ my $self = shift;
+ $self->new(@_); # ugly
+}
+
+sub addfile {
+ my ($self, $handle) = @_;
+
+ my $n;
+ my $buf = "";
+
+ while (($n = read($handle, $buf, 4*1024))) {
+ $self->add($buf);
+ }
+ unless (defined $n) {
+ require Carp;
+ Carp::croak("Read failed: $!");
+ }
+
+ $self;
+}
+
+sub add_bits {
+ my $self = shift;
+ my $bits;
+ my $nbits;
+ if (@_ == 1) {
+ my $arg = shift;
+ $bits = pack("B*", $arg);
+ $nbits = length($arg);
+ }
+ else {
+ ($bits, $nbits) = @_;
+ }
+ if (($nbits % 8) != 0) {
+ require Carp;
+ Carp::croak("Number of bits must be multiple of 8 for this algorithm");
+ }
+ return $self->add(substr($bits, 0, $nbits/8));
+}
+
+sub hexdigest {
+ my $self = shift;
+ return unpack("H*", $self->digest(@_));
+}
+
+sub b64digest {
+ my $self = shift;
+ require MIME::Base64;
+ my $b64 = MIME::Base64::encode($self->digest(@_), "");
+ $b64 =~ s/=+$//;
+ return $b64;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::base - Digest base class
+
+=head1 SYNOPSIS
+
+ package Digest::Foo;
+ use base 'Digest::base';
+
+=head1 DESCRIPTION
+
+The C<Digest::base> class provide implementations of the methods
+C<addfile> and C<add_bits> in terms of C<add>, and of the methods
+C<hexdigest> and C<b64digest> in terms of C<digest>.
+
+Digest implementations might want to inherit from this class to get
+this implementations of the alternative I<add> and I<digest> methods.
+A minimal subclass needs to implement the following methods by itself:
+
+ new
+ clone
+ add
+ digest
+
+The arguments and expected behaviour of these methods are described in
+L<Digest>.
+
+=head1 SEE ALSO
+
+L<Digest>
diff --git a/Master/tlpkg/tlperl/lib/Digest/file.pm b/Master/tlpkg/tlperl/lib/Digest/file.pm
new file mode 100644
index 00000000000..67985fd7599
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Digest/file.pm
@@ -0,0 +1,85 @@
+package Digest::file;
+
+use strict;
+
+use Exporter ();
+use Carp qw(croak);
+use Digest ();
+
+use vars qw($VERSION @ISA @EXPORT_OK);
+
+$VERSION = "1.00";
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(digest_file_ctx digest_file digest_file_hex digest_file_base64);
+
+sub digest_file_ctx {
+ my $file = shift;
+ croak("No digest algorithm specified") unless @_;
+ local *F;
+ open(F, $file) || croak("Can't open '$file': $!");
+ binmode(F);
+ my $ctx = Digest->new(@_);
+ $ctx->addfile(*F);
+ close(F);
+ return $ctx;
+}
+
+sub digest_file {
+ digest_file_ctx(@_)->digest;
+}
+
+sub digest_file_hex {
+ digest_file_ctx(@_)->hexdigest;
+}
+
+sub digest_file_base64 {
+ digest_file_ctx(@_)->b64digest;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::file - Calculate digests of files
+
+=head1 SYNOPSIS
+
+ # Poor mans "md5sum" command
+ use Digest::file qw(digest_file_hex);
+ for (@ARGV) {
+ print digest_file_hex($_, "MD5"), " $_\n";
+ }
+
+=head1 DESCRIPTION
+
+This module provide 3 convenience functions to calculate the digest
+of files. The following functions are provided:
+
+=over
+
+=item digest_file( $file, $algorithm, [$arg,...] )
+
+This function will calculate and return the binary digest of the bytes
+of the given file. The function will croak if it fails to open or
+read the file.
+
+The $algorithm is a string like "MD2", "MD5", "SHA-1", "SHA-512".
+Additional arguments are passed to the constructor for the
+implementation of the given algorithm.
+
+=item digest_file_hex( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest in hex form.
+
+=item digest_file_base64( $file, $algorithm, [$arg,...] )
+
+Same as digest_file(), but return the digest as a base64 encoded
+string.
+
+=back
+
+=head1 SEE ALSO
+
+L<Digest>
diff --git a/Master/tlpkg/tlperl/lib/DynaLoader.pm b/Master/tlpkg/tlperl/lib/DynaLoader.pm
new file mode 100644
index 00000000000..178e9b2616c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/DynaLoader.pm
@@ -0,0 +1,833 @@
+
+# Generated from DynaLoader.pm.PL
+
+package DynaLoader;
+
+# And Gandalf said: 'Many folk like to know beforehand what is to
+# be set on the table; but those who have laboured to prepare the
+# feast like to keep their secret; for wonder makes the words of
+# praise louder.'
+
+# (Quote from Tolkien suggested by Anno Siegel.)
+#
+# See pod text at end of file for documentation.
+# See also ext/DynaLoader/README in source tree for other information.
+#
+# Tim.Bunce@ig.co.uk, August 1994
+
+use vars qw($VERSION *AUTOLOAD);
+
+$VERSION = '1.05'; # avoid typo warning
+
+require AutoLoader;
+*AUTOLOAD = \&AutoLoader::AUTOLOAD;
+
+use Config;
+
+# The following require can't be removed during maintenance
+# releases, sadly, because of the risk of buggy code that does
+# require Carp; Carp::croak "..."; without brackets dying
+# if Carp hasn't been loaded in earlier compile time. :-(
+# We'll let those bugs get found on the development track.
+require Carp if $] < 5.00450;
+
+# enable debug/trace messages from DynaLoader perl code
+$dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
+
+#
+# Flags to alter dl_load_file behaviour. Assigned bits:
+# 0x01 make symbols available for linking later dl_load_file's.
+# (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
+# (ignored under VMS; effect is built-in to image linking)
+#
+# This is called as a class method $module->dl_load_flags. The
+# definition here will be inherited and result on "default" loading
+# behaviour unless a sub-class of DynaLoader defines its own version.
+#
+
+sub dl_load_flags { 0x00 }
+
+# ($dl_dlext, $dlsrc)
+# = @Config::Config{'dlext', 'dlsrc'};
+ ($dl_dlext, $dlsrc) = ('dll','dl_win32.xs')
+;
+# Some systems need special handling to expand file specifications
+# (VMS support by Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>)
+# See dl_expandspec() for more details. Should be harmless but
+# inefficient to define on systems that don't need it.
+$Is_VMS = $^O eq 'VMS';
+$do_expand = $Is_VMS;
+$Is_MacOS = $^O eq 'MacOS';
+
+my $Mac_FS;
+$Mac_FS = eval { require Mac::FileSpec::Unixish } if $Is_MacOS;
+
+@dl_require_symbols = (); # names of symbols we need
+@dl_resolve_using = (); # names of files to link with
+@dl_library_path = (); # path to look for files
+
+#XSLoader.pm may have added elements before we were required
+#@dl_shared_objects = (); # shared objects for symbols we have
+#@dl_librefs = (); # things we have loaded
+#@dl_modules = (); # Modules we have loaded
+
+# This is a fix to support DLD's unfortunate desire to relink -lc
+@dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
+
+# Initialise @dl_library_path with the 'standard' library path
+# for this platform as determined by Configure.
+
+push(@dl_library_path, split(' ', $Config::Config{libpth}));
+
+
+my $ldlibpthname = $Config::Config{ldlibpthname};
+my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
+my $pthsep = $Config::Config{path_sep};
+
+# Add to @dl_library_path any extra directories we can gather from environment
+# during runtime.
+
+if ($ldlibpthname_defined &&
+ exists $ENV{$ldlibpthname}) {
+ push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
+}
+
+# E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
+
+if ($ldlibpthname_defined &&
+ $ldlibpthname ne 'LD_LIBRARY_PATH' &&
+ exists $ENV{LD_LIBRARY_PATH}) {
+ push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
+}
+
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+ !defined(&dl_error);
+
+if ($dl_debug) {
+ print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
+ print STDERR "DynaLoader not linked into this perl\n"
+ unless defined(&boot_DynaLoader);
+}
+
+1; # End of main code
+
+
+sub croak { require Carp; Carp::croak(@_) }
+
+sub bootstrap_inherit {
+ my $module = $_[0];
+ local *isa = *{"$module\::ISA"};
+ local @isa = (@isa, 'DynaLoader');
+ # Cannot goto due to delocalization. Will report errors on a wrong line?
+ bootstrap(@_);
+}
+
+# The bootstrap function cannot be autoloaded (without complications)
+# so we define it here:
+
+sub bootstrap {
+ # use local vars to enable $module.bs script to edit values
+ local(@args) = @_;
+ local($module) = $args[0];
+ local(@dirs, $file);
+
+ unless ($module) {
+ require Carp;
+ Carp::confess("Usage: DynaLoader::bootstrap(module)");
+ }
+
+ # A common error on platforms which don't support dynamic loading.
+ # Since it's fatal and potentially confusing we give a detailed message.
+ croak("Can't load module $module, dynamic loading not available in this perl.\n".
+ " (You may need to build a new perl executable which either supports\n".
+ " dynamic loading or has the $module module statically linked into it.)\n")
+ unless defined(&dl_load_file);
+
+ my @modparts = split(/::/,$module);
+ my $modfname = $modparts[-1];
+
+ # Some systems have restrictions on files names for DLL's etc.
+ # mod2fname returns appropriate file base name (typically truncated)
+ # It may also edit @modparts if required.
+ $modfname = &mod2fname(\@modparts) if defined &mod2fname;
+
+ # Truncate the module name to 8.3 format for NetWare
+ if (($^O eq 'NetWare') && (length($modfname) > 8)) {
+ $modfname = substr($modfname, 0, 8);
+ }
+
+ my $modpname = join(($Is_MacOS ? ':' : '/'),@modparts);
+
+ print STDERR "DynaLoader::bootstrap for $module ",
+ ($Is_MacOS
+ ? "(:auto:$modpname:$modfname.$dl_dlext)\n" :
+ "(auto/$modpname/$modfname.$dl_dlext)\n")
+ if $dl_debug;
+
+ foreach (@INC) {
+ chop($_ = VMS::Filespec::unixpath($_)) if $Is_VMS;
+ my $dir;
+ if ($Is_MacOS) {
+ my $path = $_;
+ if ($Mac_FS && ! -d $path) {
+ $path = Mac::FileSpec::Unixish::nativize($path);
+ }
+ $path .= ":" unless /:$/;
+ $dir = "${path}auto:$modpname";
+ } else {
+ $dir = "$_/auto/$modpname";
+ }
+
+ next unless -d $dir; # skip over uninteresting directories
+
+ # check for common cases to avoid autoload of dl_findfile
+ my $try = $Is_MacOS ? "$dir:$modfname.$dl_dlext" : "$dir/$modfname.$dl_dlext";
+ last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try);
+
+ # no luck here, save dir for possible later dl_findfile search
+ push @dirs, $dir;
+ }
+ # last resort, let dl_findfile have a go in all known locations
+ $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
+
+ croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
+ unless $file; # wording similar to error from 'require'
+
+ $file = uc($file) if $Is_VMS && $Config::Config{d_vms_case_sensitive_symbols};
+ my $bootname = "boot_$module";
+ $bootname =~ s/\W/_/g;
+ @dl_require_symbols = ($bootname);
+
+ # Execute optional '.bootstrap' perl script for this module.
+ # The .bs file can be used to configure @dl_resolve_using etc to
+ # match the needs of the individual module on this architecture.
+ my $bs = $file;
+ $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+ if (-s $bs) { # only read file if it's not empty
+ print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
+ eval { do $bs; };
+ warn "$bs: $@\n" if $@;
+ }
+
+ my $boot_symbol_ref;
+
+ if ($^O eq 'darwin') {
+ if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) {
+ goto boot; #extension library has already been loaded, e.g. darwin
+ }
+ }
+
+ # Many dynamic extension loading problems will appear to come from
+ # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+ # Often these errors are actually occurring in the initialisation
+ # C code of the extension XS file. Perl reports the error as being
+ # in this perl code simply because this was the last perl code
+ # it executed.
+
+ my $libref = dl_load_file($file, $module->dl_load_flags) or
+ croak("Can't load '$file' for module $module: ".dl_error());
+
+ push(@dl_librefs,$libref); # record loaded object
+
+ my @unresolved = dl_undef_symbols();
+ if (@unresolved) {
+ require Carp;
+ Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
+ }
+
+ $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
+ croak("Can't find '$bootname' symbol in $file\n");
+
+ push(@dl_modules, $module); # record loaded module
+
+ boot:
+ my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+
+ # See comment block above
+
+ push(@dl_shared_objects, $file); # record files loaded
+
+ &$xs(@args);
+}
+
+
+#sub _check_file { # private utility to handle dl_expandspec vs -f tests
+# my($file) = @_;
+# return $file if (!$do_expand && -f $file); # the common case
+# return $file if ( $do_expand && ($file=dl_expandspec($file)));
+# return undef;
+#}
+
+
+# Let autosplit and the autoloader deal with these functions:
+__END__
+
+
+sub dl_findfile {
+ # Read ext/DynaLoader/DynaLoader.doc for detailed information.
+ # This function does not automatically consider the architecture
+ # or the perl library auto directories.
+ my (@args) = @_;
+ my (@dirs, $dir); # which directories to search
+ my (@found); # full paths to real files we have found
+ my $dl_ext= 'dll'; # $Config::Config{'dlext'} suffix for perl extensions
+ my $dl_so = 'dll'; # $Config::Config{'so'} suffix for shared libraries
+
+ print STDERR "dl_findfile(@args)\n" if $dl_debug;
+
+ # accumulate directories but process files as they appear
+ arg: foreach(@args) {
+ # Special fast case: full filepath requires no search
+ if ($Is_VMS && m%[:>/\]]% && -f $_) {
+ push(@found,dl_expandspec(VMS::Filespec::vmsify($_)));
+ last arg unless wantarray;
+ next;
+ }
+ elsif ($Is_MacOS) {
+ if (m/:/ && -f $_) {
+ push(@found,$_);
+ last arg unless wantarray;
+ }
+ }
+ elsif (m:/: && -f $_ && !$do_expand) {
+ push(@found,$_);
+ last arg unless wantarray;
+ next;
+ }
+
+ # Deal with directories first:
+ # Using a -L prefix is the preferred option (faster and more robust)
+ if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
+
+ if ($Is_MacOS) {
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m/:/ && -d $_) { push(@dirs, $_); next; }
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ s/^-l//;
+ push(@names, $_);
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ $dir =~ s/^([^:]+)$/:$1/;
+ $dir =~ s/:$//;
+ foreach $name (@names) {
+ my($file) = "$dir:$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ if (-f $file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ next;
+ }
+
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m:/: && -d $_) { push(@dirs, $_); next; }
+
+ # VMS: we may be using native VMS directory syntax instead of
+ # Unix emulation, so check this as well
+ if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; }
+
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ if (m:-l: ) { # convert -lname to appropriate library name
+ s/-l//;
+ push(@names,"lib$_.$dl_so");
+ push(@names,"lib$_.a");
+ } else { # Umm, a bare name. Try various alternatives:
+ # these should be ordered with the most likely first
+ push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o;
+ push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
+ push(@names,"lib$_.$dl_so") unless m:/:;
+ push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs";
+ push(@names, $_);
+ }
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS;
+ foreach $name (@names) {
+ my($file) = "$dir/$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
+ #$file = _check_file($file);
+ if ($file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ }
+ if ($dl_debug) {
+ foreach(@dirs) {
+ print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
+ }
+ print STDERR "dl_findfile found: @found\n";
+ }
+ return $found[0] unless wantarray;
+ @found;
+}
+
+
+sub dl_expandspec {
+ my($spec) = @_;
+ # Optional function invoked if DynaLoader.pm sets $do_expand.
+ # Most systems do not require or use this function.
+ # Some systems may implement it in the dl_*.xs file in which case
+ # this autoload version will not be called but is harmless.
+
+ # This function is designed to deal with systems which treat some
+ # 'filenames' in a special way. For example VMS 'Logical Names'
+ # (something like unix environment variables - but different).
+ # This function should recognise such names and expand them into
+ # full file paths.
+ # Must return undef if $spec is invalid or file does not exist.
+
+ my $file = $spec; # default output to input
+
+ if ($Is_VMS) { # dl_expandspec should be defined in dl_vms.xs
+ require Carp;
+ Carp::croak("dl_expandspec: should be defined in XS file!\n");
+ } else {
+ return undef unless -f $file;
+ }
+ print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
+ $file;
+}
+
+sub dl_find_symbol_anywhere
+{
+ my $sym = shift;
+ my $libref;
+ foreach $libref (@dl_librefs) {
+ my $symref = dl_find_symbol($libref,$sym);
+ return $symref if $symref;
+ }
+ return undef;
+}
+
+=head1 NAME
+
+DynaLoader - Dynamically load C libraries into Perl code
+
+=head1 SYNOPSIS
+
+ package YourPackage;
+ require DynaLoader;
+ @ISA = qw(... DynaLoader ...);
+ bootstrap YourPackage;
+
+ # optional method for 'global' loading
+ sub dl_load_flags { 0x01 }
+
+
+=head1 DESCRIPTION
+
+This document defines a standard generic interface to the dynamic
+linking mechanisms available on many platforms. Its primary purpose is
+to implement automatic dynamic loading of Perl modules.
+
+This document serves as both a specification for anyone wishing to
+implement the DynaLoader for a new platform and as a guide for
+anyone wishing to use the DynaLoader directly in an application.
+
+The DynaLoader is designed to be a very simple high-level
+interface that is sufficiently general to cover the requirements
+of SunOS, HP-UX, NeXT, Linux, VMS and other platforms.
+
+It is also hoped that the interface will cover the needs of OS/2, NT
+etc and also allow pseudo-dynamic linking (using C<ld -A> at runtime).
+
+It must be stressed that the DynaLoader, by itself, is practically
+useless for accessing non-Perl libraries because it provides almost no
+Perl-to-C 'glue'. There is, for example, no mechanism for calling a C
+library function or supplying arguments. A C::DynaLib module
+is available from CPAN sites which performs that function for some
+common system types. And since the year 2000, there's also Inline::C,
+a module that allows you to write Perl subroutines in C. Also available
+from your local CPAN site.
+
+DynaLoader Interface Summary
+
+ @dl_library_path
+ @dl_resolve_using
+ @dl_require_symbols
+ $dl_debug
+ @dl_librefs
+ @dl_modules
+ @dl_shared_objects
+ Implemented in:
+ bootstrap($modulename) Perl
+ @filepaths = dl_findfile(@names) Perl
+ $flags = $modulename->dl_load_flags Perl
+ $symref = dl_find_symbol_anywhere($symbol) Perl
+
+ $libref = dl_load_file($filename, $flags) C
+ $status = dl_unload_file($libref) C
+ $symref = dl_find_symbol($libref, $symbol) C
+ @symbols = dl_undef_symbols() C
+ dl_install_xsub($name, $symref [, $filename]) C
+ $message = dl_error C
+
+=over 4
+
+=item @dl_library_path
+
+The standard/default list of directories in which dl_findfile() will
+search for libraries etc. Directories are searched in order:
+$dl_library_path[0], [1], ... etc
+
+@dl_library_path is initialised to hold the list of 'normal' directories
+(F</usr/lib>, etc) determined by B<Configure> (C<$Config{'libpth'}>). This should
+ensure portability across a wide range of platforms.
+
+@dl_library_path should also be initialised with any other directories
+that can be determined from the environment at runtime (such as
+LD_LIBRARY_PATH for SunOS).
+
+After initialisation @dl_library_path can be manipulated by an
+application using push and unshift before calling dl_findfile().
+Unshift can be used to add directories to the front of the search order
+either to save search time or to override libraries with the same name
+in the 'normal' directories.
+
+The load function that dl_load_file() calls may require an absolute
+pathname. The dl_findfile() function and @dl_library_path can be
+used to search for and return the absolute pathname for the
+library/object that you wish to load.
+
+=item @dl_resolve_using
+
+A list of additional libraries or other shared objects which can be
+used to resolve any undefined symbols that might be generated by a
+later call to load_file().
+
+This is only required on some platforms which do not handle dependent
+libraries automatically. For example the Socket Perl extension
+library (F<auto/Socket/Socket.so>) contains references to many socket
+functions which need to be resolved when it's loaded. Most platforms
+will automatically know where to find the 'dependent' library (e.g.,
+F</usr/lib/libsocket.so>). A few platforms need to be told the
+location of the dependent library explicitly. Use @dl_resolve_using
+for this.
+
+Example usage:
+
+ @dl_resolve_using = dl_findfile('-lsocket');
+
+=item @dl_require_symbols
+
+A list of one or more symbol names that are in the library/object file
+to be dynamically loaded. This is only required on some platforms.
+
+=item @dl_librefs
+
+An array of the handles returned by successful calls to dl_load_file(),
+made by bootstrap, in the order in which they were loaded.
+Can be used with dl_find_symbol() to look for a symbol in any of
+the loaded files.
+
+=item @dl_modules
+
+An array of module (package) names that have been bootstrap'ed.
+
+=item @dl_shared_objects
+
+An array of file names for the shared objects that were loaded.
+
+=item dl_error()
+
+Syntax:
+
+ $message = dl_error();
+
+Error message text from the last failed DynaLoader function. Note
+that, similar to errno in unix, a successful function call does not
+reset this message.
+
+Implementations should detect the error as soon as it occurs in any of
+the other functions and save the corresponding message for later
+retrieval. This will avoid problems on some platforms (such as SunOS)
+where the error message is very temporary (e.g., dlerror()).
+
+=item $dl_debug
+
+Internal debugging messages are enabled when $dl_debug is set true.
+Currently setting $dl_debug only affects the Perl side of the
+DynaLoader. These messages should help an application developer to
+resolve any DynaLoader usage problems.
+
+$dl_debug is set to C<$ENV{'PERL_DL_DEBUG'}> if defined.
+
+For the DynaLoader developer/porter there is a similar debugging
+variable added to the C code (see dlutils.c) and enabled if Perl was
+built with the B<-DDEBUGGING> flag. This can also be set via the
+PERL_DL_DEBUG environment variable. Set to 1 for minimal information or
+higher for more.
+
+=item dl_findfile()
+
+Syntax:
+
+ @filepaths = dl_findfile(@names)
+
+Determine the full paths (including file suffix) of one or more
+loadable files given their generic names and optionally one or more
+directories. Searches directories in @dl_library_path by default and
+returns an empty list if no files were found.
+
+Names can be specified in a variety of platform independent forms. Any
+names in the form B<-lname> are converted into F<libname.*>, where F<.*> is
+an appropriate suffix for the platform.
+
+If a name does not already have a suitable prefix and/or suffix then
+the corresponding file will be searched for by trying combinations of
+prefix and suffix appropriate to the platform: "$name.o", "lib$name.*"
+and "$name".
+
+If any directories are included in @names they are searched before
+@dl_library_path. Directories may be specified as B<-Ldir>. Any other
+names are treated as filenames to be searched for.
+
+Using arguments of the form C<-Ldir> and C<-lname> is recommended.
+
+Example:
+
+ @dl_resolve_using = dl_findfile(qw(-L/usr/5lib -lposix));
+
+
+=item dl_expandspec()
+
+Syntax:
+
+ $filepath = dl_expandspec($spec)
+
+Some unusual systems, such as VMS, require special filename handling in
+order to deal with symbolic names for files (i.e., VMS's Logical Names).
+
+To support these systems a dl_expandspec() function can be implemented
+either in the F<dl_*.xs> file or code can be added to the autoloadable
+dl_expandspec() function in F<DynaLoader.pm>. See F<DynaLoader.pm> for
+more information.
+
+=item dl_load_file()
+
+Syntax:
+
+ $libref = dl_load_file($filename, $flags)
+
+Dynamically load $filename, which must be the path to a shared object
+or library. An opaque 'library reference' is returned as a handle for
+the loaded object. Returns undef on error.
+
+The $flags argument to alters dl_load_file behaviour.
+Assigned bits:
+
+ 0x01 make symbols available for linking later dl_load_file's.
+ (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
+ (ignored under VMS; this is a normal part of image linking)
+
+(On systems that provide a handle for the loaded object such as SunOS
+and HPUX, $libref will be that handle. On other systems $libref will
+typically be $filename or a pointer to a buffer containing $filename.
+The application should not examine or alter $libref in any way.)
+
+This is the function that does the real work. It should use the
+current values of @dl_require_symbols and @dl_resolve_using if required.
+
+ SunOS: dlopen($filename)
+ HP-UX: shl_load($filename)
+ Linux: dld_create_reference(@dl_require_symbols); dld_link($filename)
+ NeXT: rld_load($filename, @dl_resolve_using)
+ VMS: lib$find_image_symbol($filename,$dl_require_symbols[0])
+
+(The dlopen() function is also used by Solaris and some versions of
+Linux, and is a common choice when providing a "wrapper" on other
+mechanisms as is done in the OS/2 port.)
+
+=item dl_unload_file()
+
+Syntax:
+
+ $status = dl_unload_file($libref)
+
+Dynamically unload $libref, which must be an opaque 'library reference' as
+returned from dl_load_file. Returns one on success and zero on failure.
+
+This function is optional and may not necessarily be provided on all platforms.
+If it is defined, it is called automatically when the interpreter exits for
+every shared object or library loaded by DynaLoader::bootstrap. All such
+library references are stored in @dl_librefs by DynaLoader::Bootstrap as it
+loads the libraries. The files are unloaded in last-in, first-out order.
+
+This unloading is usually necessary when embedding a shared-object perl (e.g.
+one configured with -Duseshrplib) within a larger application, and the perl
+interpreter is created and destroyed several times within the lifetime of the
+application. In this case it is possible that the system dynamic linker will
+unload and then subsequently reload the shared libperl without relocating any
+references to it from any files DynaLoaded by the previous incarnation of the
+interpreter. As a result, any shared objects opened by DynaLoader may point to
+a now invalid 'ghost' of the libperl shared object, causing apparently random
+memory corruption and crashes. This behaviour is most commonly seen when using
+Apache and mod_perl built with the APXS mechanism.
+
+ SunOS: dlclose($libref)
+ HP-UX: ???
+ Linux: ???
+ NeXT: ???
+ VMS: ???
+
+(The dlclose() function is also used by Solaris and some versions of
+Linux, and is a common choice when providing a "wrapper" on other
+mechanisms as is done in the OS/2 port.)
+
+=item dl_load_flags()
+
+Syntax:
+
+ $flags = dl_load_flags $modulename;
+
+Designed to be a method call, and to be overridden by a derived class
+(i.e. a class which has DynaLoader in its @ISA). The definition in
+DynaLoader itself returns 0, which produces standard behavior from
+dl_load_file().
+
+=item dl_find_symbol()
+
+Syntax:
+
+ $symref = dl_find_symbol($libref, $symbol)
+
+Return the address of the symbol $symbol or C<undef> if not found. If the
+target system has separate functions to search for symbols of different
+types then dl_find_symbol() should search for function symbols first and
+then other types.
+
+The exact manner in which the address is returned in $symref is not
+currently defined. The only initial requirement is that $symref can
+be passed to, and understood by, dl_install_xsub().
+
+ SunOS: dlsym($libref, $symbol)
+ HP-UX: shl_findsym($libref, $symbol)
+ Linux: dld_get_func($symbol) and/or dld_get_symbol($symbol)
+ NeXT: rld_lookup("_$symbol")
+ VMS: lib$find_image_symbol($libref,$symbol)
+
+
+=item dl_find_symbol_anywhere()
+
+Syntax:
+
+ $symref = dl_find_symbol_anywhere($symbol)
+
+Applies dl_find_symbol() to the members of @dl_librefs and returns
+the first match found.
+
+=item dl_undef_symbols()
+
+Example
+
+ @symbols = dl_undef_symbols()
+
+Return a list of symbol names which remain undefined after load_file().
+Returns C<()> if not known. Don't worry if your platform does not provide
+a mechanism for this. Most do not need it and hence do not provide it,
+they just return an empty list.
+
+
+=item dl_install_xsub()
+
+Syntax:
+
+ dl_install_xsub($perl_name, $symref [, $filename])
+
+Create a new Perl external subroutine named $perl_name using $symref as
+a pointer to the function which implements the routine. This is simply
+a direct call to newXSUB(). Returns a reference to the installed
+function.
+
+The $filename parameter is used by Perl to identify the source file for
+the function if required by die(), caller() or the debugger. If
+$filename is not defined then "DynaLoader" will be used.
+
+
+=item bootstrap()
+
+Syntax:
+
+bootstrap($module)
+
+This is the normal entry point for automatic dynamic loading in Perl.
+
+It performs the following actions:
+
+=over 8
+
+=item *
+
+locates an auto/$module directory by searching @INC
+
+=item *
+
+uses dl_findfile() to determine the filename to load
+
+=item *
+
+sets @dl_require_symbols to C<("boot_$module")>
+
+=item *
+
+executes an F<auto/$module/$module.bs> file if it exists
+(typically used to add to @dl_resolve_using any files which
+are required to load the module on the current platform)
+
+=item *
+
+calls dl_load_flags() to determine how to load the file.
+
+=item *
+
+calls dl_load_file() to load the file
+
+=item *
+
+calls dl_undef_symbols() and warns if any symbols are undefined
+
+=item *
+
+calls dl_find_symbol() for "boot_$module"
+
+=item *
+
+calls dl_install_xsub() to install it as "${module}::bootstrap"
+
+=item *
+
+calls &{"${module}::bootstrap"} to bootstrap the module (actually
+it uses the function reference returned by dl_install_xsub for speed)
+
+=back
+
+=back
+
+
+=head1 AUTHOR
+
+Tim Bunce, 11 August 1994.
+
+This interface is based on the work and comments of (in no particular
+order): Larry Wall, Robert Sanders, Dean Roehrich, Jeff Okamoto, Anno
+Siegel, Thomas Neumann, Paul Marquess, Charles Bailey, myself and others.
+
+Larry Wall designed the elegant inherited bootstrap mechanism and
+implemented the first Perl 5 dynamic loader using it.
+
+Solaris global loading added by Nick Ing-Simmons with design/coding
+assistance from Tim Bunce, January 1996.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode.pm b/Master/tlpkg/tlperl/lib/Encode.pm
new file mode 100644
index 00000000000..ac0123c89ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode.pm
@@ -0,0 +1,851 @@
+#
+# $Id: Encode.pm,v 2.12 2005/09/08 14:17:17 dankogai Exp dankogai $
+#
+package Encode;
+use strict;
+our $VERSION = sprintf "%d.%02d", q$Revision: 2.12 $ =~ /(\d+)/g;
+sub DEBUG () { 0 }
+use XSLoader ();
+XSLoader::load(__PACKAGE__, $VERSION);
+
+require Exporter;
+use base qw/Exporter/;
+
+# Public, encouraged API is exported by default
+
+our @EXPORT = qw(
+ decode decode_utf8 encode encode_utf8
+ encodings find_encoding clone_encoding
+);
+
+our @FB_FLAGS = qw(DIE_ON_ERR WARN_ON_ERR RETURN_ON_ERR LEAVE_SRC
+ PERLQQ HTMLCREF XMLCREF STOP_AT_PARTIAL);
+our @FB_CONSTS = qw(FB_DEFAULT FB_CROAK FB_QUIET FB_WARN
+ FB_PERLQQ FB_HTMLCREF FB_XMLCREF);
+
+our @EXPORT_OK =
+ (
+ qw(
+ _utf8_off _utf8_on define_encoding from_to is_16bit is_8bit
+ is_utf8 perlio_ok resolve_alias utf8_downgrade utf8_upgrade
+ ),
+ @FB_FLAGS, @FB_CONSTS,
+ );
+
+our %EXPORT_TAGS =
+ (
+ all => [ @EXPORT, @EXPORT_OK ],
+ fallbacks => [ @FB_CONSTS ],
+ fallback_all => [ @FB_CONSTS, @FB_FLAGS ],
+ );
+
+# Documentation moved after __END__ for speed - NI-S
+
+our $ON_EBCDIC = (ord("A") == 193);
+
+use Encode::Alias;
+
+# Make a %Encoding package variable to allow a certain amount of cheating
+our %Encoding;
+our %ExtModule;
+require Encode::Config;
+eval { require Encode::ConfigLocal };
+
+sub encodings
+{
+ my $class = shift;
+ my %enc;
+ if (@_ and $_[0] eq ":all"){
+ %enc = ( %Encoding, %ExtModule );
+ }else{
+ %enc = %Encoding;
+ for my $mod (map {m/::/o ? $_ : "Encode::$_" } @_){
+ DEBUG and warn $mod;
+ for my $enc (keys %ExtModule){
+ $ExtModule{$enc} eq $mod and $enc{$enc} = $mod;
+ }
+ }
+ }
+ return
+ sort { lc $a cmp lc $b }
+ grep {!/^(?:Internal|Unicode|Guess)$/o} keys %enc;
+}
+
+sub perlio_ok{
+ my $obj = ref($_[0]) ? $_[0] : find_encoding($_[0]);
+ $obj->can("perlio_ok") and return $obj->perlio_ok();
+ return 0; # safety net
+}
+
+sub define_encoding
+{
+ my $obj = shift;
+ my $name = shift;
+ $Encoding{$name} = $obj;
+ my $lc = lc($name);
+ define_alias($lc => $obj) unless $lc eq $name;
+ while (@_){
+ my $alias = shift;
+ define_alias($alias, $obj);
+ }
+ return $obj;
+}
+
+sub getEncoding
+{
+ my ($class, $name, $skip_external) = @_;
+
+ ref($name) && $name->can('renew') and return $name;
+ exists $Encoding{$name} and return $Encoding{$name};
+ my $lc = lc $name;
+ exists $Encoding{$lc} and return $Encoding{$lc};
+
+ my $oc = $class->find_alias($name);
+ defined($oc) and return $oc;
+ $lc ne $name and $oc = $class->find_alias($lc);
+ defined($oc) and return $oc;
+
+ unless ($skip_external)
+ {
+ if (my $mod = $ExtModule{$name} || $ExtModule{$lc}){
+ $mod =~ s,::,/,g ; $mod .= '.pm';
+ eval{ require $mod; };
+ exists $Encoding{$name} and return $Encoding{$name};
+ }
+ }
+ return;
+}
+
+sub find_encoding($;$)
+{
+ my ($name, $skip_external) = @_;
+ return __PACKAGE__->getEncoding($name,$skip_external);
+}
+
+sub resolve_alias($){
+ my $obj = find_encoding(shift);
+ defined $obj and return $obj->name;
+ return;
+}
+
+sub clone_encoding($){
+ my $obj = find_encoding(shift);
+ ref $obj or return;
+ eval { require Storable };
+ $@ and return;
+ return Storable::dclone($obj);
+}
+
+sub encode($$;$)
+{
+ my ($name, $string, $check) = @_;
+ return undef unless defined $string;
+ $string .= '' if ref $string; # stringify;
+ $check ||=0;
+ my $enc = find_encoding($name);
+ unless(defined $enc){
+ require Carp;
+ Carp::croak("Unknown encoding '$name'");
+ }
+ my $octets = $enc->encode($string,$check);
+ $_[1] = $string if $check and !($check & LEAVE_SRC());
+ return $octets;
+}
+
+sub decode($$;$)
+{
+ my ($name,$octets,$check) = @_;
+ return undef unless defined $octets;
+ $octets .= '' if ref $octets;
+ $check ||=0;
+ my $enc = find_encoding($name);
+ unless(defined $enc){
+ require Carp;
+ Carp::croak("Unknown encoding '$name'");
+ }
+ my $string = $enc->decode($octets,$check);
+ $_[1] = $octets if $check and !($check & LEAVE_SRC());
+ return $string;
+}
+
+sub from_to($$$;$)
+{
+ my ($string,$from,$to,$check) = @_;
+ return undef unless defined $string;
+ $check ||=0;
+ my $f = find_encoding($from);
+ unless (defined $f){
+ require Carp;
+ Carp::croak("Unknown encoding '$from'");
+ }
+ my $t = find_encoding($to);
+ unless (defined $t){
+ require Carp;
+ Carp::croak("Unknown encoding '$to'");
+ }
+ my $uni = $f->decode($string,$check);
+ return undef if ($check && length($string));
+ $string = $t->encode($uni,$check);
+ return undef if ($check && length($uni));
+ return defined($_[0] = $string) ? length($string) : undef ;
+}
+
+sub encode_utf8($)
+{
+ my ($str) = @_;
+ utf8::encode($str);
+ return $str;
+}
+
+sub decode_utf8($;$)
+{
+ my ($str, $check) = @_;
+ if ($check){
+ return decode("utf8", $str, $check);
+ }else{
+ return decode("utf8", $str);
+ return $str;
+ }
+}
+
+predefine_encodings(1);
+
+#
+# This is to restore %Encoding if really needed;
+#
+
+sub predefine_encodings{
+ use Encode::Encoding;
+ no warnings 'redefine';
+ my $use_xs = shift;
+ if ($ON_EBCDIC) {
+ # was in Encode::UTF_EBCDIC
+ package Encode::UTF_EBCDIC;
+ push @Encode::UTF_EBCDIC::ISA, 'Encode::Encoding';
+ *decode = sub{
+ my ($obj,$str,$chk) = @_;
+ my $res = '';
+ for (my $i = 0; $i < length($str); $i++) {
+ $res .=
+ chr(utf8::unicode_to_native(ord(substr($str,$i,1))));
+ }
+ $_[1] = '' if $chk;
+ return $res;
+ };
+ *encode = sub{
+ my ($obj,$str,$chk) = @_;
+ my $res = '';
+ for (my $i = 0; $i < length($str); $i++) {
+ $res .=
+ chr(utf8::native_to_unicode(ord(substr($str,$i,1))));
+ }
+ $_[1] = '' if $chk;
+ return $res;
+ };
+ $Encode::Encoding{Unicode} =
+ bless {Name => "UTF_EBCDIC"} => "Encode::UTF_EBCDIC";
+ } else {
+ package Encode::Internal;
+ push @Encode::Internal::ISA, 'Encode::Encoding';
+ *decode = sub{
+ my ($obj,$str,$chk) = @_;
+ utf8::upgrade($str);
+ $_[1] = '' if $chk;
+ return $str;
+ };
+ *encode = \&decode;
+ $Encode::Encoding{Unicode} =
+ bless {Name => "Internal"} => "Encode::Internal";
+ }
+
+ {
+ # was in Encode::utf8
+ package Encode::utf8;
+ push @Encode::utf8::ISA, 'Encode::Encoding';
+ #
+ if ($use_xs){
+ Encode::DEBUG and warn __PACKAGE__, " XS on";
+ *decode = \&decode_xs;
+ *encode = \&encode_xs;
+ }else{
+ Encode::DEBUG and warn __PACKAGE__, " XS off";
+ *decode = sub{
+ my ($obj,$octets,$chk) = @_;
+ my $str = Encode::decode_utf8($octets);
+ if (defined $str) {
+ $_[1] = '' if $chk;
+ return $str;
+ }
+ return undef;
+ };
+ *encode = sub {
+ my ($obj,$string,$chk) = @_;
+ my $octets = Encode::encode_utf8($string);
+ $_[1] = '' if $chk;
+ return $octets;
+ };
+ }
+ *cat_decode = sub{ # ($obj, $dst, $src, $pos, $trm, $chk)
+ my ($obj, undef, undef, $pos, $trm) = @_; # currently ignores $chk
+ my ($rdst, $rsrc, $rpos) = \@_[1,2,3];
+ use bytes;
+ if ((my $npos = index($$rsrc, $trm, $pos)) >= 0) {
+ $$rdst .= substr($$rsrc, $pos, $npos - $pos + length($trm));
+ $$rpos = $npos + length($trm);
+ return 1;
+ }
+ $$rdst .= substr($$rsrc, $pos);
+ $$rpos = length($$rsrc);
+ return '';
+ };
+ $Encode::Encoding{utf8} =
+ bless {Name => "utf8"} => "Encode::utf8";
+ $Encode::Encoding{"utf-8-strict"} =
+ bless {Name => "utf-8-strict", strict_utf8 => 1 } => "Encode::utf8";
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Encode - character encodings
+
+=head1 SYNOPSIS
+
+ use Encode;
+
+=head2 Table of Contents
+
+Encode consists of a collection of modules whose details are too big
+to fit in one document. This POD itself explains the top-level APIs
+and general topics at a glance. For other topics and more details,
+see the PODs below:
+
+ Name Description
+ --------------------------------------------------------
+ Encode::Alias Alias definitions to encodings
+ Encode::Encoding Encode Implementation Base Class
+ Encode::Supported List of Supported Encodings
+ Encode::CN Simplified Chinese Encodings
+ Encode::JP Japanese Encodings
+ Encode::KR Korean Encodings
+ Encode::TW Traditional Chinese Encodings
+ --------------------------------------------------------
+
+=head1 DESCRIPTION
+
+The C<Encode> module provides the interfaces between Perl's strings
+and the rest of the system. Perl strings are sequences of
+B<characters>.
+
+The repertoire of characters that Perl can represent is at least that
+defined by the Unicode Consortium. On most platforms the ordinal
+values of the characters (as returned by C<ord(ch)>) is the "Unicode
+codepoint" for the character (the exceptions are those platforms where
+the legacy encoding is some variant of EBCDIC rather than a super-set
+of ASCII - see L<perlebcdic>).
+
+Traditionally, computer data has been moved around in 8-bit chunks
+often called "bytes". These chunks are also known as "octets" in
+networking standards. Perl is widely used to manipulate data of many
+types - not only strings of characters representing human or computer
+languages but also "binary" data being the machine's representation of
+numbers, pixels in an image - or just about anything.
+
+When Perl is processing "binary data", the programmer wants Perl to
+process "sequences of bytes". This is not a problem for Perl - as a
+byte has 256 possible values, it easily fits in Perl's much larger
+"logical character".
+
+=head2 TERMINOLOGY
+
+=over 2
+
+=item *
+
+I<character>: a character in the range 0..(2**32-1) (or more).
+(What Perl's strings are made of.)
+
+=item *
+
+I<byte>: a character in the range 0..255
+(A special case of a Perl character.)
+
+=item *
+
+I<octet>: 8 bits of data, with ordinal values 0..255
+(Term for bytes passed to or from a non-Perl context, e.g. a disk file.)
+
+=back
+
+=head1 PERL ENCODING API
+
+=over 2
+
+=item $octets = encode(ENCODING, $string [, CHECK])
+
+Encodes a string from Perl's internal form into I<ENCODING> and returns
+a sequence of octets. ENCODING can be either a canonical name or
+an alias. For encoding names and aliases, see L</"Defining Aliases">.
+For CHECK, see L</"Handling Malformed Data">.
+
+For example, to convert a string from Perl's internal format to
+iso-8859-1 (also known as Latin1),
+
+ $octets = encode("iso-8859-1", $string);
+
+B<CAVEAT>: When you run C<$octets = encode("utf8", $string)>, then $octets
+B<may not be equal to> $string. Though they both contain the same data, the utf8 flag
+for $octets is B<always> off. When you encode anything, utf8 flag of
+the result is always off, even when it contains completely valid utf8
+string. See L</"The UTF-8 flag"> below.
+
+If the $string is C<undef> then C<undef> is returned.
+
+=item $string = decode(ENCODING, $octets [, CHECK])
+
+Decodes a sequence of octets assumed to be in I<ENCODING> into Perl's
+internal form and returns the resulting string. As in encode(),
+ENCODING can be either a canonical name or an alias. For encoding names
+and aliases, see L</"Defining Aliases">. For CHECK, see
+L</"Handling Malformed Data">.
+
+For example, to convert ISO-8859-1 data to a string in Perl's internal format:
+
+ $string = decode("iso-8859-1", $octets);
+
+B<CAVEAT>: When you run C<$string = decode("utf8", $octets)>, then $string
+B<may not be equal to> $octets. Though they both contain the same data,
+the utf8 flag for $string is on unless $octets entirely consists of
+ASCII data (or EBCDIC on EBCDIC machines). See L</"The UTF-8 flag">
+below.
+
+If the $string is C<undef> then C<undef> is returned.
+
+=item [$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK])
+
+Converts B<in-place> data between two encodings. The data in $octets
+must be encoded as octets and not as characters in Perl's internal
+format. For example, to convert ISO-8859-1 data to Microsoft's CP1250
+encoding:
+
+ from_to($octets, "iso-8859-1", "cp1250");
+
+and to convert it back:
+
+ from_to($octets, "cp1250", "iso-8859-1");
+
+Note that because the conversion happens in place, the data to be
+converted cannot be a string constant; it must be a scalar variable.
+
+from_to() returns the length of the converted string in octets on
+success, I<undef> on error.
+
+B<CAVEAT>: The following operations look the same but are not quite so;
+
+ from_to($data, "iso-8859-1", "utf8"); #1
+ $data = decode("iso-8859-1", $data); #2
+
+Both #1 and #2 make $data consist of a completely valid UTF-8 string
+but only #2 turns utf8 flag on. #1 is equivalent to
+
+ $data = encode("utf8", decode("iso-8859-1", $data));
+
+See L</"The UTF-8 flag"> below.
+
+=item $octets = encode_utf8($string);
+
+Equivalent to C<$octets = encode("utf8", $string);> The characters
+that comprise $string are encoded in Perl's internal format and the
+result is returned as a sequence of octets. All possible
+characters have a UTF-8 representation so this function cannot fail.
+
+
+=item $string = decode_utf8($octets [, CHECK]);
+
+equivalent to C<$string = decode("utf8", $octets [, CHECK])>.
+The sequence of octets represented by
+$octets is decoded from UTF-8 into a sequence of logical
+characters. Not all sequences of octets form valid UTF-8 encodings, so
+it is possible for this call to fail. For CHECK, see
+L</"Handling Malformed Data">.
+
+=back
+
+=head2 Listing available encodings
+
+ use Encode;
+ @list = Encode->encodings();
+
+Returns a list of the canonical names of the available encodings that
+are loaded. To get a list of all available encodings including the
+ones that are not loaded yet, say
+
+ @all_encodings = Encode->encodings(":all");
+
+Or you can give the name of a specific module.
+
+ @with_jp = Encode->encodings("Encode::JP");
+
+When "::" is not in the name, "Encode::" is assumed.
+
+ @ebcdic = Encode->encodings("EBCDIC");
+
+To find out in detail which encodings are supported by this package,
+see L<Encode::Supported>.
+
+=head2 Defining Aliases
+
+To add a new alias to a given encoding, use:
+
+ use Encode;
+ use Encode::Alias;
+ define_alias(newName => ENCODING);
+
+After that, newName can be used as an alias for ENCODING.
+ENCODING may be either the name of an encoding or an
+I<encoding object>
+
+But before you do so, make sure the alias is nonexistent with
+C<resolve_alias()>, which returns the canonical name thereof.
+i.e.
+
+ Encode::resolve_alias("latin1") eq "iso-8859-1" # true
+ Encode::resolve_alias("iso-8859-12") # false; nonexistent
+ Encode::resolve_alias($name) eq $name # true if $name is canonical
+
+resolve_alias() does not need C<use Encode::Alias>; it can be
+exported via C<use Encode qw(resolve_alias)>.
+
+See L<Encode::Alias> for details.
+
+=head1 Encoding via PerlIO
+
+If your perl supports I<PerlIO> (which is the default), you can use a PerlIO layer to decode
+and encode directly via a filehandle. The following two examples
+are totally identical in their functionality.
+
+ # via PerlIO
+ open my $in, "<:encoding(shiftjis)", $infile or die;
+ open my $out, ">:encoding(euc-jp)", $outfile or die;
+ while(<$in>){ print $out $_; }
+
+ # via from_to
+ open my $in, "<", $infile or die;
+ open my $out, ">", $outfile or die;
+ while(<$in>){
+ from_to($_, "shiftjis", "euc-jp", 1);
+ print $out $_;
+ }
+
+Unfortunately, it may be that encodings are PerlIO-savvy. You can check
+if your encoding is supported by PerlIO by calling the C<perlio_ok>
+method.
+
+ Encode::perlio_ok("hz"); # False
+ find_encoding("euc-cn")->perlio_ok; # True where PerlIO is available
+
+ use Encode qw(perlio_ok); # exported upon request
+ perlio_ok("euc-jp")
+
+Fortunately, all encodings that come with Encode core are PerlIO-savvy
+except for hz and ISO-2022-kr. For gory details, see
+L<Encode::Encoding> and L<Encode::PerlIO>.
+
+=head1 Handling Malformed Data
+
+The optional I<CHECK> argument tells Encode what to do when it
+encounters malformed data. Without CHECK, Encode::FB_DEFAULT ( == 0 )
+is assumed.
+
+As of version 2.12 Encode supports coderef values for CHECK. See below.
+
+=over 2
+
+=item B<NOTE:> Not all encoding support this feature
+
+Some encodings ignore I<CHECK> argument. For example,
+L<Encode::Unicode> ignores I<CHECK> and it always croaks on error.
+
+=back
+
+Now here is the list of I<CHECK> values available
+
+=over 2
+
+=item I<CHECK> = Encode::FB_DEFAULT ( == 0)
+
+If I<CHECK> is 0, (en|de)code will put a I<substitution character> in
+place of a malformed character. When you encode, E<lt>subcharE<gt>
+will be used. When you decode the code point C<0xFFFD> is used. If
+the data is supposed to be UTF-8, an optional lexical warning
+(category utf8) is given.
+
+=item I<CHECK> = Encode::FB_CROAK ( == 1)
+
+If I<CHECK> is 1, methods will die on error immediately with an error
+message. Therefore, when I<CHECK> is set to 1, you should trap the
+error with eval{} unless you really want to let it die.
+
+=item I<CHECK> = Encode::FB_QUIET
+
+If I<CHECK> is set to Encode::FB_QUIET, (en|de)code will immediately
+return the portion of the data that has been processed so far when an
+error occurs. The data argument will be overwritten with everything
+after that point (that is, the unprocessed part of data). This is
+handy when you have to call decode repeatedly in the case where your
+source data may contain partial multi-byte character sequences,
+(i.e. you are reading with a fixed-width buffer). Here is a sample
+code that does exactly this:
+
+ my $buffer = ''; my $string = '';
+ while(read $fh, $buffer, 256, length($buffer)){
+ $string .= decode($encoding, $buffer, Encode::FB_QUIET);
+ # $buffer now contains the unprocessed partial character
+ }
+
+=item I<CHECK> = Encode::FB_WARN
+
+This is the same as above, except that it warns on error. Handy when
+you are debugging the mode above.
+
+=item perlqq mode (I<CHECK> = Encode::FB_PERLQQ)
+
+=item HTML charref mode (I<CHECK> = Encode::FB_HTMLCREF)
+
+=item XML charref mode (I<CHECK> = Encode::FB_XMLCREF)
+
+For encodings that are implemented by Encode::XS, CHECK ==
+Encode::FB_PERLQQ turns (en|de)code into C<perlqq> fallback mode.
+
+When you decode, C<\xI<HH>> will be inserted for a malformed character,
+where I<HH> is the hex representation of the octet that could not be
+decoded to utf8. And when you encode, C<\x{I<HHHH>}> will be inserted,
+where I<HHHH> is the Unicode ID of the character that cannot be found
+in the character repertoire of the encoding.
+
+HTML/XML character reference modes are about the same, in place of
+C<\x{I<HHHH>}>, HTML uses C<&#I<NNN>;> where I<NNN> is a decimal number and
+XML uses C<&#xI<HHHH>;> where I<HHHH> is the hexadecimal number.
+
+In Encode 2.10 or later, C<LEAVE_SRC> is also implied.
+
+=item The bitmask
+
+These modes are actually set via a bitmask. Here is how the FB_XX
+constants are laid out. You can import the FB_XX constants via
+C<use Encode qw(:fallbacks)>; you can import the generic bitmask
+constants via C<use Encode qw(:fallback_all)>.
+
+ FB_DEFAULT FB_CROAK FB_QUIET FB_WARN FB_PERLQQ
+ DIE_ON_ERR 0x0001 X
+ WARN_ON_ERR 0x0002 X
+ RETURN_ON_ERR 0x0004 X X
+ LEAVE_SRC 0x0008 X
+ PERLQQ 0x0100 X
+ HTMLCREF 0x0200
+ XMLCREF 0x0400
+
+=back
+
+=head2 coderef for CHECK
+
+As of Encode 2.12 CHECK can also be a code reference which takes the
+ord value of unmapped caharacter as an argument and returns a string
+that represents the fallback character. For instance,
+
+ $ascii = encode("ascii", $utf8, sub{ sprintf "<U+%04X>", shift });
+
+Acts like FB_PERLQQ but E<lt>U+I<XXXX>E<gt> is used instead of
+\x{I<XXXX>}.
+
+=head1 Defining Encodings
+
+To define a new encoding, use:
+
+ use Encode qw(define_encoding);
+ define_encoding($object, 'canonicalName' [, alias...]);
+
+I<canonicalName> will be associated with I<$object>. The object
+should provide the interface described in L<Encode::Encoding>.
+If more than two arguments are provided then additional
+arguments are taken as aliases for I<$object>.
+
+See L<Encode::Encoding> for more details.
+
+=head1 The UTF-8 flag
+
+Before the introduction of utf8 support in perl, The C<eq> operator
+just compared the strings represented by two scalars. Beginning with
+perl 5.8, C<eq> compares two strings with simultaneous consideration
+of I<the utf8 flag>. To explain why we made it so, I will quote page
+402 of C<Programming Perl, 3rd ed.>
+
+=over 2
+
+=item Goal #1:
+
+Old byte-oriented programs should not spontaneously break on the old
+byte-oriented data they used to work on.
+
+=item Goal #2:
+
+Old byte-oriented programs should magically start working on the new
+character-oriented data when appropriate.
+
+=item Goal #3:
+
+Programs should run just as fast in the new character-oriented mode
+as in the old byte-oriented mode.
+
+=item Goal #4:
+
+Perl should remain one language, rather than forking into a
+byte-oriented Perl and a character-oriented Perl.
+
+=back
+
+Back when C<Programming Perl, 3rd ed.> was written, not even Perl 5.6.0
+was born and many features documented in the book remained
+unimplemented for a long time. Perl 5.8 corrected this and the introduction
+of the UTF-8 flag is one of them. You can think of this perl notion as of a
+byte-oriented mode (utf8 flag off) and a character-oriented mode (utf8
+flag on).
+
+Here is how Encode takes care of the utf8 flag.
+
+=over 2
+
+=item *
+
+When you encode, the resulting utf8 flag is always off.
+
+=item *
+
+When you decode, the resulting utf8 flag is on unless you can
+unambiguously represent data. Here is the definition of
+dis-ambiguity.
+
+After C<$utf8 = decode('foo', $octet);>,
+
+ When $octet is... The utf8 flag in $utf8 is
+ ---------------------------------------------
+ In ASCII only (or EBCDIC only) OFF
+ In ISO-8859-1 ON
+ In any other Encoding ON
+ ---------------------------------------------
+
+As you see, there is one exception, In ASCII. That way you can assume
+Goal #1. And with Encode Goal #2 is assumed but you still have to be
+careful in such cases mentioned in B<CAVEAT> paragraphs.
+
+This utf8 flag is not visible in perl scripts, exactly for the same
+reason you cannot (or you I<don't have to>) see if a scalar contains a
+string, integer, or floating point number. But you can still peek
+and poke these if you will. See the section below.
+
+=back
+
+=head2 Messing with Perl's Internals
+
+The following API uses parts of Perl's internals in the current
+implementation. As such, they are efficient but may change.
+
+=over 2
+
+=item is_utf8(STRING [, CHECK])
+
+[INTERNAL] Tests whether the UTF-8 flag is turned on in the STRING.
+If CHECK is true, also checks the data in STRING for being well-formed
+UTF-8. Returns true if successful, false otherwise.
+
+As of perl 5.8.1, L<utf8> also has utf8::is_utf8().
+
+=item _utf8_on(STRING)
+
+[INTERNAL] Turns on the UTF-8 flag in STRING. The data in STRING is
+B<not> checked for being well-formed UTF-8. Do not use unless you
+B<know> that the STRING is well-formed UTF-8. Returns the previous
+state of the UTF-8 flag (so please don't treat the return value as
+indicating success or failure), or C<undef> if STRING is not a string.
+
+=item _utf8_off(STRING)
+
+[INTERNAL] Turns off the UTF-8 flag in STRING. Do not use frivolously.
+Returns the previous state of the UTF-8 flag (so please don't treat the
+return value as indicating success or failure), or C<undef> if STRING is
+not a string.
+
+=back
+
+=head1 UTF-8 vs. utf8
+
+ ....We now view strings not as sequences of bytes, but as sequences
+ of numbers in the range 0 .. 2**32-1 (or in the case of 64-bit
+ computers, 0 .. 2**64-1) -- Programming Perl, 3rd ed.
+
+That has been the perl's notion of UTF-8 but official UTF-8 is more
+strict; Its ranges is much narrower (0 .. 10FFFF), some sequences are
+not allowed (i.e. Those used in the surrogate pair, 0xFFFE, et al).
+
+Now that is overruled by Larry Wall himself.
+
+ From: Larry Wall <larry@wall.org>
+ Date: December 04, 2004 11:51:58 JST
+ To: perl-unicode@perl.org
+ Subject: Re: Make Encode.pm support the real UTF-8
+ Message-Id: <20041204025158.GA28754@wall.org>
+
+ On Fri, Dec 03, 2004 at 10:12:12PM +0000, Tim Bunce wrote:
+ : I've no problem with 'utf8' being perl's unrestricted uft8 encoding,
+ : but "UTF-8" is the name of the standard and should give the
+ : corresponding behaviour.
+
+ For what it's worth, that's how I've always kept them straight in my
+ head.
+
+ Also for what it's worth, Perl 6 will mostly default to strict but
+ make it easy to switch back to lax.
+
+ Larry
+
+Do you copy? As of Perl 5.8.7, B<UTF-8> means strict, official UTF-8
+while B<utf8> means liberal, lax, version thereof. And Encode version
+2.10 or later thus groks the difference between C<UTF-8> and C"utf8".
+
+ encode("utf8", "\x{FFFF_FFFF}", 1); # okay
+ encode("UTF-8", "\x{FFFF_FFFF}", 1); # croaks
+
+C<UTF-8> in Encode is actually a canonical name for C<utf-8-strict>.
+Yes, the hyphen between "UTF" and "8" is important. Without it Encode
+goes "liberal"
+
+ find_encoding("UTF-8")->name # is 'utf-8-strict'
+ find_encoding("utf-8")->name # ditto. names are case insensitive
+ find_encoding("utf8")->name # ditto. "_" are treated as "-"
+ find_encoding("UTF8")->name # is 'utf8'.
+
+
+=head1 SEE ALSO
+
+L<Encode::Encoding>,
+L<Encode::Supported>,
+L<Encode::PerlIO>,
+L<encoding>,
+L<perlebcdic>,
+L<perlfunc/open>,
+L<perlunicode>,
+L<utf8>,
+the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt>
+
+=head1 MAINTAINER
+
+This project was originated by Nick Ing-Simmons and later maintained
+by Dan Kogai E<lt>dankogai@dan.co.jpE<gt>. See AUTHORS for a full
+list of people involved. For any questions, use
+E<lt>perl-unicode@perl.orgE<gt> so we can all share.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Alias.pm b/Master/tlpkg/tlperl/lib/Encode/Alias.pm
new file mode 100644
index 00000000000..c0bbf69f469
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Alias.pm
@@ -0,0 +1,341 @@
+package Encode::Alias;
+use strict;
+no warnings 'redefine';
+use Encode;
+our $VERSION = do { my @r = (q$Revision: 2.4 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+sub DEBUG () { 0 }
+
+use base qw(Exporter);
+
+# Public, encouraged API is exported by default
+
+our @EXPORT =
+ qw (
+ define_alias
+ find_alias
+ );
+
+our @Alias; # ordered matching list
+our %Alias; # cached known aliases
+
+sub find_alias{
+ my $class = shift;
+ my $find = shift;
+ unless (exists $Alias{$find}) {
+ $Alias{$find} = undef; # Recursion guard
+ for (my $i=0; $i < @Alias; $i += 2){
+ my $alias = $Alias[$i];
+ my $val = $Alias[$i+1];
+ my $new;
+ if (ref($alias) eq 'Regexp' && $find =~ $alias){
+ DEBUG and warn "eval $val";
+ $new = eval $val;
+ DEBUG and $@ and warn "$val, $@";
+ }elsif (ref($alias) eq 'CODE'){
+ DEBUG and warn "$alias", "->", "($find)";
+ $new = $alias->($find);
+ }elsif (lc($find) eq lc($alias)){
+ $new = $val;
+ }
+ if (defined($new)){
+ next if $new eq $find; # avoid (direct) recursion on bugs
+ DEBUG and warn "$alias, $new";
+ my $enc = (ref($new)) ? $new : Encode::find_encoding($new);
+ if ($enc){
+ $Alias{$find} = $enc;
+ last;
+ }
+ }
+ }
+ # case insensitive search when canonical is not in all lowercase
+ # RT ticket #7835
+ unless ($Alias{$find}){
+ my $lcfind = lc($find);
+ for my $name (keys %Encode::Encoding, keys %Encode::ExtModule){
+ $lcfind eq lc($name) or next;
+ $Alias{$find} = Encode::find_encoding($name);
+ DEBUG and warn "$find => $name";
+ }
+ }
+ }
+ if (DEBUG){
+ my $name;
+ if (my $e = $Alias{$find}){
+ $name = $e->name;
+ }else{
+ $name = "";
+ }
+ warn "find_alias($class, $find)->name = $name";
+ }
+ return $Alias{$find};
+}
+
+sub define_alias{
+ while (@_){
+ my ($alias,$name) = splice(@_,0,2);
+ unshift(@Alias, $alias => $name); # newer one has precedence
+ if (ref($alias)){
+ # clear %Alias cache to allow overrides
+ my @a = keys %Alias;
+ for my $k (@a){
+ if (ref($alias) eq 'Regexp' && $k =~ $alias){
+ DEBUG and warn "delete \$Alias\{$k\}";
+ delete $Alias{$k};
+ }
+ elsif (ref($alias) eq 'CODE'){
+ DEBUG and warn "delete \$Alias\{$k\}";
+ delete $Alias{$alias->($name)};
+ }
+ }
+ }else{
+ DEBUG and warn "delete \$Alias\{$alias\}";
+ delete $Alias{$alias};
+ }
+ }
+}
+
+# Allow latin-1 style names as well
+# 0 1 2 3 4 5 6 7 8 9 10
+our @Latin2iso = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 );
+# Allow winlatin1 style names as well
+our %Winlatin2cp = (
+ 'latin1' => 1252,
+ 'latin2' => 1250,
+ 'cyrillic' => 1251,
+ 'greek' => 1253,
+ 'turkish' => 1254,
+ 'hebrew' => 1255,
+ 'arabic' => 1256,
+ 'baltic' => 1257,
+ 'vietnamese' => 1258,
+ );
+
+init_aliases();
+
+sub undef_aliases{
+ @Alias = ();
+ %Alias = ();
+}
+
+sub init_aliases
+{
+ undef_aliases();
+ # Try all-lower-case version should all else fails
+ define_alias( qr/^(.*)$/ => '"\L$1"' );
+
+ # UTF/UCS stuff
+ define_alias( qr/^UTF-?7$/i => '"UTF-7"');
+ define_alias( qr/^UCS-?2-?LE$/i => '"UCS-2LE"' );
+ define_alias( qr/^UCS-?2-?(BE)?$/i => '"UCS-2BE"',
+ qr/^UCS-?4-?(BE|LE)?$/i => 'uc("UTF-32$1")',
+ qr/^iso-10646-1$/i => '"UCS-2BE"' );
+ define_alias( qr/^UTF-?(16|32)-?BE$/i => '"UTF-$1BE"',
+ qr/^UTF-?(16|32)-?LE$/i => '"UTF-$1LE"',
+ qr/^UTF-?(16|32)$/i => '"UTF-$1"',
+ );
+ # ASCII
+ define_alias(qr/^(?:US-?)ascii$/i => '"ascii"');
+ define_alias('C' => 'ascii');
+ define_alias(qr/\bISO[-_]?646[-_]?US$/i => '"ascii"');
+ # Allow variants of iso-8859-1 etc.
+ define_alias( qr/\biso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' );
+
+ # At least HP-UX has these.
+ define_alias( qr/\biso8859(\d+)$/i => '"iso-8859-$1"' );
+
+ # More HP stuff.
+ define_alias( qr/\b(?:hp-)?(arabic|greek|hebrew|kana|roman|thai|turkish)8$/i => '"${1}8"' );
+
+ # The Official name of ASCII.
+ define_alias( qr/\bANSI[-_]?X3\.4[-_]?1968$/i => '"ascii"' );
+
+ # This is a font issue, not an encoding issue.
+ # (The currency symbol of the Latin 1 upper half
+ # has been redefined as the euro symbol.)
+ define_alias( qr/^(.+)\@euro$/i => '"$1"' );
+
+ define_alias( qr/\b(?:iso[-_]?)?latin[-_]?(\d+)$/i
+ => 'defined $Encode::Alias::Latin2iso[$1] ? "iso-8859-$Encode::Alias::Latin2iso[$1]" : undef' );
+
+ define_alias( qr/\bwin(latin[12]|cyrillic|baltic|greek|turkish|
+ hebrew|arabic|baltic|vietnamese)$/ix =>
+ '"cp" . $Encode::Alias::Winlatin2cp{lc($1)}' );
+
+ # Common names for non-latin preferred MIME names
+ define_alias( 'ascii' => 'US-ascii',
+ 'cyrillic' => 'iso-8859-5',
+ 'arabic' => 'iso-8859-6',
+ 'greek' => 'iso-8859-7',
+ 'hebrew' => 'iso-8859-8',
+ 'thai' => 'iso-8859-11',
+ 'tis620' => 'iso-8859-11',
+ );
+
+ # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN.
+ # And Microsoft has their own naming (again, surprisingly).
+ # And windows-* is registered in IANA!
+ define_alias( qr/\b(?:cp|ibm|ms|windows)[-_ ]?(\d{2,4})$/i => '"cp$1"');
+
+ # Sometimes seen with a leading zero.
+ # define_alias( qr/\bcp037\b/i => '"cp37"');
+
+ # Mac Mappings
+ # predefined in *.ucm; unneeded
+ # define_alias( qr/\bmacIcelandic$/i => '"macIceland"');
+ define_alias( qr/^mac_(.*)$/i => '"mac$1"');
+ # Ououououou. gone. They are differente!
+ # define_alias( qr/\bmacRomanian$/i => '"macRumanian"');
+
+ # Standardize on the dashed versions.
+ define_alias( qr/\bkoi8[\s\-_]*([ru])$/i => '"koi8-$1"' );
+
+ unless ($Encode::ON_EBCDIC){
+ # for Encode::CN
+ define_alias( qr/\beuc.*cn$/i => '"euc-cn"' );
+ define_alias( qr/\bcn.*euc$/i => '"euc-cn"' );
+ # define_alias( qr/\bGB[- ]?(\d+)$/i => '"euc-cn"' )
+ # CP936 doesn't have vendor-addon for GBK, so they're identical.
+ define_alias( qr/^gbk$/i => '"cp936"');
+ # This fixes gb2312 vs. euc-cn confusion, practically
+ define_alias( qr/\bGB[-_ ]?2312(?!-?raw)/i => '"euc-cn"' );
+ # for Encode::JP
+ define_alias( qr/\bjis$/i => '"7bit-jis"' );
+ define_alias( qr/\beuc.*jp$/i => '"euc-jp"' );
+ define_alias( qr/\bjp.*euc$/i => '"euc-jp"' );
+ define_alias( qr/\bujis$/i => '"euc-jp"' );
+ define_alias( qr/\bshift.*jis$/i => '"shiftjis"' );
+ define_alias( qr/\bsjis$/i => '"shiftjis"' );
+ define_alias( qr/\bwindows-31j$/i => '"cp932"' );
+ # for Encode::KR
+ define_alias( qr/\beuc.*kr$/i => '"euc-kr"' );
+ define_alias( qr/\bkr.*euc$/i => '"euc-kr"' );
+ # This fixes ksc5601 vs. euc-kr confusion, practically
+ define_alias( qr/(?:x-)?uhc$/i => '"cp949"' );
+ define_alias( qr/(?:x-)?windows-949$/i => '"cp949"' );
+ define_alias( qr/\bks_c_5601-1987$/i => '"cp949"' );
+ # for Encode::TW
+ define_alias( qr/\bbig-?5$/i => '"big5-eten"' );
+ define_alias( qr/\bbig5-?et(?:en)?$/i => '"big5-eten"' );
+ define_alias( qr/\btca[-_]?big5$/i => '"big5-eten"' );
+ define_alias( qr/\bbig5-?hk(?:scs)?$/i => '"big5-hkscs"' );
+ define_alias( qr/\bhk(?:scs)?[-_]?big5$/i => '"big5-hkscs"' );
+ }
+ # utf8 is blessed :)
+ define_alias( qr/^UTF-8$/i => '"utf-8-strict"');
+ # At last, Map white space and _ to '-'
+ define_alias( qr/^(\S+)[\s_]+(.*)$/i => '"$1-$2"' );
+}
+
+1;
+__END__
+
+# TODO: HP-UX '8' encodings arabic8 greek8 hebrew8 kana8 thai8 turkish8
+# TODO: HP-UX '15' encodings japanese15 korean15 roi15
+# TODO: Cyrillic encoding ISO-IR-111 (useful?)
+# TODO: Armenian encoding ARMSCII-8
+# TODO: Hebrew encoding ISO-8859-8-1
+# TODO: Thai encoding TCVN
+# TODO: Vietnamese encodings VPS
+# TODO: Mac Asian+African encodings: Arabic Armenian Bengali Burmese
+# ChineseSimp ChineseTrad Devanagari Ethiopic ExtArabic
+# Farsi Georgian Gujarati Gurmukhi Hebrew Japanese
+# Kannada Khmer Korean Laotian Malayalam Mongolian
+# Oriya Sinhalese Symbol Tamil Telugu Tibetan Vietnamese
+
+=head1 NAME
+
+Encode::Alias - alias definitions to encodings
+
+=head1 SYNOPSIS
+
+ use Encode;
+ use Encode::Alias;
+ define_alias( newName => ENCODING);
+
+=head1 DESCRIPTION
+
+Allows newName to be used as an alias for ENCODING. ENCODING may be
+either the name of an encoding or an encoding object (as described
+in L<Encode>).
+
+Currently I<newName> can be specified in the following ways:
+
+=over 4
+
+=item As a simple string.
+
+=item As a qr// compiled regular expression, e.g.:
+
+ define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' );
+
+In this case, if I<ENCODING> is not a reference, it is C<eval>-ed
+in order to allow C<$1> etc. to be substituted. The example is one
+way to alias names as used in X11 fonts to the MIME names for the
+iso-8859-* family. Note the double quotes inside the single quotes.
+
+(or, you don't have to do this yourself because this example is predefined)
+
+If you are using a regex here, you have to use the quotes as shown or
+it won't work. Also note that regex handling is tricky even for the
+experienced. Use this feature with caution.
+
+=item As a code reference, e.g.:
+
+ define_alias( sub {shift =~ /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } );
+
+The same effect as the example above in a different way. The coderef
+takes the alias name as an argument and returns a canonical name on
+success or undef if not. Note the second argument is not required.
+Use this with even more caution than the regex version.
+
+=back
+
+=head3 Changes in code reference aliasing
+
+As of Encode 1.87, the older form
+
+ define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } );
+
+no longer works.
+
+Encode up to 1.86 internally used "local $_" to implement ths older
+form. But consider the code below;
+
+ use Encode;
+ $_ = "eeeee" ;
+ while (/(e)/g) {
+ my $utf = decode('aliased-encoding-name', $1);
+ print "position:",pos,"\n";
+ }
+
+Prior to Encode 1.86 this fails because of "local $_".
+
+=head2 Alias overloading
+
+You can override predefined aliases by simply applying define_alias().
+The new alias is always evaluated first, and when necessary,
+define_alias() flushes the internal cache to make the new definition
+available.
+
+ # redirect SHIFT_JIS to MS/IBM Code Page 932, which is a
+ # superset of SHIFT_JIS
+
+ define_alias( qr/shift.*jis$/i => '"cp932"' );
+ define_alias( qr/sjis$/i => '"cp932"' );
+
+If you want to zap all predefined aliases, you can use
+
+ Encode::Alias->undef_aliases;
+
+to do so. And
+
+ Encode::Alias->init_aliases;
+
+gets the factory settings back.
+
+=head1 SEE ALSO
+
+L<Encode>, L<Encode::Supported>
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/Byte.pm b/Master/tlpkg/tlperl/lib/Encode/Byte.pm
new file mode 100644
index 00000000000..d40c1c3d9d1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Byte.pm
@@ -0,0 +1,119 @@
+package Encode::Byte;
+use Encode;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Byte - Single Byte Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $greek = encode("iso-8859-7", $utf8); # loads Encode::Byte implicitly
+ $utf8 = decode("iso-8859-7", $greek); # ditto
+
+=head1 ABSTRACT
+
+This module implements various single byte encodings. For most cases it uses
+\x80-\xff (upper half) to map non-ASCII characters. Encodings
+supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ # ISO 8859 series
+ (iso-8859-1 is in built-in)
+ iso-8859-2 latin2 [ISO]
+ iso-8859-3 latin3 [ISO]
+ iso-8859-4 latin4 [ISO]
+ iso-8859-5 [ISO]
+ iso-8859-6 [ISO]
+ iso-8859-7 [ISO]
+ iso-8859-8 [ISO]
+ iso-8859-9 latin5 [ISO]
+ iso-8859-10 latin6 [ISO]
+ iso-8859-11
+ (iso-8859-12 is nonexistent)
+ iso-8859-13 latin7 [ISO]
+ iso-8859-14 latin8 [ISO]
+ iso-8859-15 latin9 [ISO]
+ iso-8859-16 latin10 [ISO]
+
+ # Cyrillic
+ koi8-f
+ koi8-r cp878 [RFC1489]
+ koi8-u [RFC2319]
+
+ # Vietnamese
+ viscii
+
+ # all cp* are also available as ibm-*, ms-*, and windows-*
+ # also see L<http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset4.asp>
+
+ cp424
+ cp437
+ cp737
+ cp775
+ cp850
+ cp852
+ cp855
+ cp856
+ cp857
+ cp860
+ cp861
+ cp862
+ cp863
+ cp864
+ cp865
+ cp866
+ cp869
+ cp874
+ cp1006
+ cp1250 WinLatin2
+ cp1251 WinCyrillic
+ cp1252 WinLatin1
+ cp1253 WinGreek
+ cp1254 WinTurkish
+ cp1255 WinHebrew
+ cp1256 WinArabic
+ cp1257 WinBaltic
+ cp1258 WinVietnamese
+
+ # Macintosh
+ # Also see L<http://developer.apple.com/technotes/tn/tn1150.html>
+ MacArabic
+ MacCentralEurRoman
+ MacCroatian
+ MacCyrillic
+ MacFarsi
+ MacGreek
+ MacHebrew
+ MacIcelandic
+ MacRoman
+ MacRomanian
+ MacRumanian
+ MacSami
+ MacThai
+ MacTurkish
+ MacUkrainian
+
+ # More vendor encodings
+ AdobeStandardEncoding
+ nextstep
+ gsm0338 # used in GSM handsets
+ hp-roman8
+
+=head1 DESCRIPTION
+
+To find how to use this module in detail, see L<Encode>.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/CJKConstants.pm b/Master/tlpkg/tlperl/lib/Encode/CJKConstants.pm
new file mode 100644
index 00000000000..4ab40e72ef2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/CJKConstants.pm
@@ -0,0 +1,66 @@
+#
+# $Id: CJKConstants.pm,v 2.0 2004/05/16 20:55:16 dankogai Exp $
+#
+
+package Encode::CJKConstants;
+
+use strict;
+
+our $RCSID = q$Id: CJKConstants.pm,v 2.0 2004/05/16 20:55:16 dankogai Exp $;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Carp;
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = qw();
+our @EXPORT_OK = qw(%CHARCODE %ESC %RE);
+our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK, @EXPORT ] );
+
+my %_0208 = (
+ 1978 => '\e\$\@',
+ 1983 => '\e\$B',
+ 1990 => '\e&\@\e\$B',
+ );
+
+our %CHARCODE = (
+ UNDEF_EUC => "\xa2\xae", # ¢® in EUC
+ UNDEF_SJIS => "\x81\xac", # ¢® in SJIS
+ UNDEF_JIS => "\xa2\xf7", # ¢÷ -- used in unicode
+ UNDEF_UNICODE => "\x20\x20", # ¢÷ -- used in unicode
+ );
+
+our %ESC = (
+ GB_2312 => "\e\$A",
+ JIS_0208 => "\e\$B",
+ JIS_0212 => "\e\$(D",
+ KSC_5601 => "\e\$(C",
+ ASC => "\e\(B",
+ KANA => "\e\(I",
+ '2022_KR' => "\e\$)C",
+ );
+
+our %RE =
+ (
+ ASCII => '[\x00-\x7f]',
+ BIN => '[\x00-\x06\x7f\xff]',
+ EUC_0212 => '\x8f[\xa1-\xfe][\xa1-\xfe]',
+ EUC_C => '[\xa1-\xfe][\xa1-\xfe]',
+ EUC_KANA => '\x8e[\xa1-\xdf]',
+ JIS_0208 => "$_0208{1978}|$_0208{1983}|$_0208{1990}",
+ JIS_0212 => "\e" . '\$\(D',
+ ISO_ASC => "\e" . '\([BJ]',
+ JIS_KANA => "\e" . '\(I',
+ '2022_KR' => "\e" . '\$\)C',
+ SJIS_C => '[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]',
+ SJIS_KANA => '[\xa1-\xdf]',
+ UTF8 => '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]'
+ );
+
+1;
+
+=head1 NAME
+
+Encode::CJKConstants.pm -- Internally used by Encode::??::ISO_2022_*
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/CN.pm b/Master/tlpkg/tlperl/lib/Encode/CN.pm
new file mode 100644
index 00000000000..be5a830fc51
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/CN.pm
@@ -0,0 +1,76 @@
+package Encode::CN;
+BEGIN {
+ if (ord("A") == 193) {
+ die "Encode::CN not supported on EBCDIC\n";
+ }
+}
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode;
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+# Relocated from Encode.pm
+
+use Encode::CN::HZ;
+# use Encode::CN::2022_CN;
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::CN - China-based Chinese Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $euc_cn = encode("euc-cn", $utf8); # loads Encode::CN implicitly
+ $utf8 = decode("euc-cn", $euc_cn); # ditto
+
+=head1 DESCRIPTION
+
+This module implements China-based Chinese charset encodings.
+Encodings supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ euc-cn /\beuc.*cn$/i EUC (Extended Unix Character)
+ /\bcn.*euc$/i
+ /\bGB[-_ ]?2312(?:\D.*$|$)/i (see below)
+ gb2312-raw The raw (low-bit) GB2312 character map
+ gb12345-raw Traditional chinese counterpart to
+ GB2312 (raw)
+ iso-ir-165 GB2312 + GB6345 + GB8565 + additions
+ MacChineseSimp GB2312 + Apple Additions
+ cp936 Code Page 936, also known as GBK
+ (Extended GuoBiao)
+ hz 7-bit escaped GB2312 encoding
+ --------------------------------------------------------------------
+
+To find how to use this module in detail, see L<Encode>.
+
+=head1 NOTES
+
+Due to size concerns, C<GB 18030> (an extension to C<GBK>) is distributed
+separately on CPAN, under the name L<Encode::HanExtra>. That module
+also contains extra Taiwan-based encodings.
+
+=head1 BUGS
+
+When you see C<charset=gb2312> on mails and web pages, they really
+mean C<euc-cn> encodings. To fix that, C<gb2312> is aliased to C<euc-cn>.
+Use C<gb2312-raw> when you really mean it.
+
+The ASCII region (0x00-0x7f) is preserved for all encodings, even though
+this conflicts with mappings by the Unicode Consortium. See
+
+L<http://www.debian.or.jp/~kubota/unicode-symbols.html.en>
+
+to find out why it is implemented that way.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/CN/HZ.pm b/Master/tlpkg/tlperl/lib/Encode/CN/HZ.pm
new file mode 100644
index 00000000000..fbc6ba60ced
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/CN/HZ.pm
@@ -0,0 +1,196 @@
+package Encode::CN::HZ;
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = do { my @r = (q$Revision: 2.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode qw(:fallbacks);
+
+use base qw(Encode::Encoding);
+__PACKAGE__->Define('hz');
+
+# HZ is a combination of ASCII and escaped GB, so we implement it
+# with the GB2312(raw) encoding here. Cf. RFCs 1842 & 1843.
+
+# not ported for EBCDIC. Which should be used, "~" or "\x7E"?
+
+sub needs_lines { 1 }
+
+sub decode ($$;$)
+{
+ my ($obj,$str,$chk) = @_;
+
+ my $GB = Encode::find_encoding('gb2312-raw');
+ my $ret = '';
+ my $in_ascii = 1; # default mode is ASCII.
+
+ while (length $str) {
+ if ($in_ascii) { # ASCII mode
+ if ($str =~ s/^([\x00-\x7D\x7F]+)//) { # no '~' => ASCII
+ $ret .= $1;
+ # EBCDIC should need ascii2native, but not ported.
+ }
+ elsif ($str =~ s/^\x7E\x7E//) { # escaped tilde
+ $ret .= '~';
+ }
+ elsif ($str =~ s/^\x7E\cJ//) { # '\cJ' == LF in ASCII
+ 1; # no-op
+ }
+ elsif ($str =~ s/^\x7E\x7B//) { # '~{'
+ $in_ascii = 0; # to GB
+ }
+ else { # encounters an invalid escape, \x80 or greater
+ last;
+ }
+ }
+ else { # GB mode; the byte ranges are as in RFC 1843.
+ if ($str =~ s/^((?:[\x21-\x77][\x21-\x7E])+)//) {
+ $ret .= $GB->decode($1, $chk);
+ }
+ elsif ($str =~ s/^\x7E\x7D//) { # '~}'
+ $in_ascii = 1;
+ }
+ else { # invalid
+ last;
+ }
+ }
+ }
+ $_[1] = '' if $chk; # needs_lines guarantees no partial character
+ return $ret;
+}
+
+sub cat_decode {
+ my ($obj, undef, $src, $pos, $trm, $chk) = @_;
+ my ($rdst, $rsrc, $rpos) = \@_[1..3];
+
+ my $GB = Encode::find_encoding('gb2312-raw');
+ my $ret = '';
+ my $in_ascii = 1; # default mode is ASCII.
+
+ my $ini_pos = pos($$rsrc);
+
+ substr($src, 0, $pos) = '';
+
+ my $ini_len = bytes::length($src);
+
+ # $trm is the first of the pair '~~', then 2nd tilde is to be removed.
+ # XXX: Is better C<$src =~ s/^\x7E// or die if ...>?
+ $src =~ s/^\x7E// if $trm eq "\x7E";
+
+ while (length $src) {
+ my $now;
+ if ($in_ascii) { # ASCII mode
+ if ($src =~ s/^([\x00-\x7D\x7F])//) { # no '~' => ASCII
+ $now = $1;
+ }
+ elsif ($src =~ s/^\x7E\x7E//) { # escaped tilde
+ $now = '~';
+ }
+ elsif ($src =~ s/^\x7E\cJ//) { # '\cJ' == LF in ASCII
+ next;
+ }
+ elsif ($src =~ s/^\x7E\x7B//) { # '~{'
+ $in_ascii = 0; # to GB
+ next;
+ }
+ else { # encounters an invalid escape, \x80 or greater
+ last;
+ }
+ }
+ else { # GB mode; the byte ranges are as in RFC 1843.
+ if ($src =~ s/^((?:[\x21-\x77][\x21-\x7F])+)//) {
+ $now = $GB->decode($1, $chk);
+ }
+ elsif ($src =~ s/^\x7E\x7D//) { # '~}'
+ $in_ascii = 1;
+ next;
+ }
+ else { # invalid
+ last;
+ }
+ }
+
+ next if ! defined $now;
+
+ $ret .= $now;
+
+ if ($now eq $trm) {
+ $$rdst .= $ret;
+ $$rpos = $ini_pos + $pos + $ini_len - bytes::length($src);
+ pos($$rsrc) = $ini_pos;
+ return 1;
+ }
+ }
+
+ $$rdst .= $ret;
+ $$rpos = $ini_pos + $pos + $ini_len - bytes::length($src);
+ pos($$rsrc) = $ini_pos;
+ return ''; # terminator not found
+}
+
+
+sub encode($$;$)
+{
+ my ($obj,$str,$chk) = @_;
+
+ my $GB = Encode::find_encoding('gb2312-raw');
+ my $ret = '';
+ my $in_ascii = 1; # default mode is ASCII.
+
+ no warnings 'utf8'; # $str may be malformed UTF8 at the end of a chunk.
+
+ while (length $str) {
+ if ($str =~ s/^([[:ascii:]]+)//) {
+ my $tmp = $1;
+ $tmp =~ s/~/~~/g; # escapes tildes
+ if (! $in_ascii) {
+ $ret .= "\x7E\x7D"; # '~}'
+ $in_ascii = 1;
+ }
+ $ret .= pack 'a*', $tmp; # remove UTF8 flag.
+ }
+ elsif ($str =~ s/(.)//) {
+ my $s = $1;
+ my $tmp = $GB->encode($s, $chk);
+ last if !defined $tmp;
+ if (length $tmp == 2) { # maybe a valid GB char (XXX)
+ if ($in_ascii) {
+ $ret .= "\x7E\x7B"; # '~{'
+ $in_ascii = 0;
+ }
+ $ret .= $tmp;
+ }
+ elsif (length $tmp) { # maybe FALLBACK in ASCII (XXX)
+ if (!$in_ascii) {
+ $ret .= "\x7E\x7D"; # '~}'
+ $in_ascii = 1;
+ }
+ $ret .= $tmp;
+ }
+ }
+ else { # if $str is malformed UTF8 *and* if length $str != 0.
+ last;
+ }
+ }
+ $_[1] = $str if $chk;
+
+ # The state at the end of the chunk is discarded, even if in GB mode.
+ # That results in the combination of GB-OUT and GB-IN, i.e. "~}~{".
+ # Parhaps it is harmless, but further investigations may be required...
+
+ if (! $in_ascii) {
+ $ret .= "\x7E\x7D"; # '~}'
+ $in_ascii = 1;
+ }
+ return $ret;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::CN::HZ -- internally used by Encode::CN
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Changes.e2x b/Master/tlpkg/tlperl/lib/Encode/Changes.e2x
new file mode 100644
index 00000000000..5c67c55cb93
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Changes.e2x
@@ -0,0 +1,7 @@
+#
+# $Id: Changes.e2x,v 2.0 2004/05/16 20:55:15 dankogai Exp $
+# Revision history for Perl extension Encode::$_Name_.
+#
+
+0.01 $_Now_
+ Autogenerated by enc2xs version $_Version_.
diff --git a/Master/tlpkg/tlperl/lib/Encode/Config.pm b/Master/tlpkg/tlperl/lib/Encode/Config.pm
new file mode 100644
index 00000000000..d69b92d8248
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Config.pm
@@ -0,0 +1,166 @@
+#
+# Demand-load module list
+#
+package Encode::Config;
+our $VERSION = do { my @r = (q$Revision: 2.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use strict;
+
+our %ExtModule =
+ (
+ # Encode::Byte
+ #iso-8859-1 is in Encode.pm itself
+ 'iso-8859-2' => 'Encode::Byte',
+ 'iso-8859-3' => 'Encode::Byte',
+ 'iso-8859-4' => 'Encode::Byte',
+ 'iso-8859-5' => 'Encode::Byte',
+ 'iso-8859-6' => 'Encode::Byte',
+ 'iso-8859-7' => 'Encode::Byte',
+ 'iso-8859-8' => 'Encode::Byte',
+ 'iso-8859-9' => 'Encode::Byte',
+ 'iso-8859-10' => 'Encode::Byte',
+ 'iso-8859-11' => 'Encode::Byte',
+ 'iso-8859-13' => 'Encode::Byte',
+ 'iso-8859-14' => 'Encode::Byte',
+ 'iso-8859-15' => 'Encode::Byte',
+ 'iso-8859-16' => 'Encode::Byte',
+ 'koi8-f' => 'Encode::Byte',
+ 'koi8-r' => 'Encode::Byte',
+ 'koi8-u' => 'Encode::Byte',
+ 'viscii' => 'Encode::Byte',
+ 'cp424' => 'Encode::Byte',
+ 'cp437' => 'Encode::Byte',
+ 'cp737' => 'Encode::Byte',
+ 'cp775' => 'Encode::Byte',
+ 'cp850' => 'Encode::Byte',
+ 'cp852' => 'Encode::Byte',
+ 'cp855' => 'Encode::Byte',
+ 'cp856' => 'Encode::Byte',
+ 'cp857' => 'Encode::Byte',
+ 'cp860' => 'Encode::Byte',
+ 'cp861' => 'Encode::Byte',
+ 'cp862' => 'Encode::Byte',
+ 'cp863' => 'Encode::Byte',
+ 'cp864' => 'Encode::Byte',
+ 'cp865' => 'Encode::Byte',
+ 'cp866' => 'Encode::Byte',
+ 'cp869' => 'Encode::Byte',
+ 'cp874' => 'Encode::Byte',
+ 'cp1006' => 'Encode::Byte',
+ 'cp1250' => 'Encode::Byte',
+ 'cp1251' => 'Encode::Byte',
+ 'cp1252' => 'Encode::Byte',
+ 'cp1253' => 'Encode::Byte',
+ 'cp1254' => 'Encode::Byte',
+ 'cp1255' => 'Encode::Byte',
+ 'cp1256' => 'Encode::Byte',
+ 'cp1257' => 'Encode::Byte',
+ 'cp1258' => 'Encode::Byte',
+ 'AdobeStandardEncoding' => 'Encode::Byte',
+ 'MacArabic' => 'Encode::Byte',
+ 'MacCentralEurRoman' => 'Encode::Byte',
+ 'MacCroatian' => 'Encode::Byte',
+ 'MacCyrillic' => 'Encode::Byte',
+ 'MacFarsi' => 'Encode::Byte',
+ 'MacGreek' => 'Encode::Byte',
+ 'MacHebrew' => 'Encode::Byte',
+ 'MacIcelandic' => 'Encode::Byte',
+ 'MacRoman' => 'Encode::Byte',
+ 'MacRomanian' => 'Encode::Byte',
+ 'MacRumanian' => 'Encode::Byte',
+ 'MacSami' => 'Encode::Byte',
+ 'MacThai' => 'Encode::Byte',
+ 'MacTurkish' => 'Encode::Byte',
+ 'MacUkrainian' => 'Encode::Byte',
+ 'nextstep' => 'Encode::Byte',
+ 'hp-roman8' => 'Encode::Byte',
+ 'gsm0338' => 'Encode::Byte',
+ # Encode::EBCDIC
+ 'cp37' => 'Encode::EBCDIC',
+ 'cp500' => 'Encode::EBCDIC',
+ 'cp875' => 'Encode::EBCDIC',
+ 'cp1026' => 'Encode::EBCDIC',
+ 'cp1047' => 'Encode::EBCDIC',
+ 'posix-bc' => 'Encode::EBCDIC',
+ # Encode::Symbol
+ 'dingbats' => 'Encode::Symbol',
+ 'symbol' => 'Encode::Symbol',
+ 'AdobeSymbol' => 'Encode::Symbol',
+ 'AdobeZdingbat' => 'Encode::Symbol',
+ 'MacDingbats' => 'Encode::Symbol',
+ 'MacSymbol' => 'Encode::Symbol',
+ # Encode::Unicode
+ 'UCS-2BE' => 'Encode::Unicode',
+ 'UCS-2LE' => 'Encode::Unicode',
+ 'UTF-16' => 'Encode::Unicode',
+ 'UTF-16BE' => 'Encode::Unicode',
+ 'UTF-16LE' => 'Encode::Unicode',
+ 'UTF-32' => 'Encode::Unicode',
+ 'UTF-32BE' => 'Encode::Unicode',
+ 'UTF-32LE' => 'Encode::Unicode',
+ 'UTF-7' => 'Encode::Unicode::UTF7',
+ );
+
+unless (ord("A") == 193){
+ %ExtModule =
+ (
+ %ExtModule,
+ 'euc-cn' => 'Encode::CN',
+ 'gb12345-raw' => 'Encode::CN',
+ 'gb2312-raw' => 'Encode::CN',
+ 'hz' => 'Encode::CN',
+ 'iso-ir-165' => 'Encode::CN',
+ 'cp936' => 'Encode::CN',
+ 'MacChineseSimp' => 'Encode::CN',
+
+ '7bit-jis' => 'Encode::JP',
+ 'euc-jp' => 'Encode::JP',
+ 'iso-2022-jp' => 'Encode::JP',
+ 'iso-2022-jp-1' => 'Encode::JP',
+ 'jis0201-raw' => 'Encode::JP',
+ 'jis0208-raw' => 'Encode::JP',
+ 'jis0212-raw' => 'Encode::JP',
+ 'cp932' => 'Encode::JP',
+ 'MacJapanese' => 'Encode::JP',
+ 'shiftjis' => 'Encode::JP',
+
+
+ 'euc-kr' => 'Encode::KR',
+ 'iso-2022-kr' => 'Encode::KR',
+ 'johab' => 'Encode::KR',
+ 'ksc5601-raw' => 'Encode::KR',
+ 'cp949' => 'Encode::KR',
+ 'MacKorean' => 'Encode::KR',
+
+ 'big5-eten' => 'Encode::TW',
+ 'big5-hkscs' => 'Encode::TW',
+ 'cp950' => 'Encode::TW',
+ 'MacChineseTrad' => 'Encode::TW',
+
+ #'big5plus' => 'Encode::HanExtra',
+ #'euc-tw' => 'Encode::HanExtra',
+ #'gb18030' => 'Encode::HanExtra',
+
+ 'MIME-Header' => 'Encode::MIME::Header',
+ 'MIME-B' => 'Encode::MIME::Header',
+ 'MIME-Q' => 'Encode::MIME::Header',
+
+ 'MIME-Header-ISO_2022_JP' => 'Encode::MIME::Header::ISO_2022_JP',
+ );
+}
+
+#
+# Why not export ? to keep ConfigLocal Happy!
+#
+while (my ($enc,$mod) = each %ExtModule){
+ $Encode::ExtModule{$enc} = $mod;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Config -- internally used by Encode
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/ConfigLocal_PM.e2x b/Master/tlpkg/tlperl/lib/Encode/ConfigLocal_PM.e2x
new file mode 100644
index 00000000000..e203dfded50
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/ConfigLocal_PM.e2x
@@ -0,0 +1,13 @@
+#
+# Local demand-load module list
+#
+# You should not edit this file by hand! use "enc2xs -C"
+#
+package Encode::ConfigLocal;
+our $VERSION = $_LocalVer_;
+
+use strict;
+
+$_ModLines_
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Encode/EBCDIC.pm b/Master/tlpkg/tlperl/lib/Encode/EBCDIC.pm
new file mode 100644
index 00000000000..200a82fea46
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/EBCDIC.pm
@@ -0,0 +1,43 @@
+package Encode::EBCDIC;
+use Encode;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::EBCDIC - EBCDIC Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $posix_bc = encode("posix-bc", $utf8); # loads Encode::EBCDIC implicitly
+ $utf8 = decode("", $posix_bc); # ditto
+
+=head1 ABSTRACT
+
+This module implements various EBCDIC-Based encodings. Encodings
+supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ cp37
+ cp500
+ cp875
+ cp1026
+ cp1047
+ posix-bc
+
+=head1 DESCRIPTION
+
+To find how to use this module in detail, see L<Encode>.
+
+=head1 SEE ALSO
+
+L<Encode>, L<perlebcdic>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Encoder.pm b/Master/tlpkg/tlperl/lib/Encode/Encoder.pm
new file mode 100644
index 00000000000..fe2a2b90ff6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Encoder.pm
@@ -0,0 +1,249 @@
+#
+# $Id: Encoder.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $
+#
+package Encode::Encoder;
+use strict;
+use warnings;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw ( encoder );
+
+our $AUTOLOAD;
+sub DEBUG () { 0 }
+use Encode qw(encode decode find_encoding from_to);
+use Carp;
+
+sub new{
+ my ($class, $data, $encname) = @_;
+ unless($encname){
+ $encname = Encode::is_utf8($data) ? 'utf8' : '';
+ }else{
+ my $obj = find_encoding($encname)
+ or croak __PACKAGE__, ": unknown encoding: $encname";
+ $encname = $obj->name;
+ }
+ my $self = {
+ data => $data,
+ encoding => $encname,
+ };
+ bless $self => $class;
+}
+
+sub encoder{ __PACKAGE__->new(@_) }
+
+sub data{
+ my ($self, $data) = @_;
+ if (defined $data){
+ $self->{data} = $data;
+ return $data;
+ }else{
+ return $self->{data};
+ }
+}
+
+sub encoding{
+ my ($self, $encname) = @_;
+ if ($encname){
+ my $obj = find_encoding($encname)
+ or confess __PACKAGE__, ": unknown encoding: $encname";
+ $self->{encoding} = $obj->name;
+ return $self;
+ }else{
+ return $self->{encoding}
+ }
+}
+
+sub bytes {
+ my ($self, $encname) = @_;
+ $encname ||= $self->{encoding};
+ my $obj = find_encoding($encname)
+ or confess __PACKAGE__, ": unknown encoding: $encname";
+ $self->{data} = $obj->decode($self->{data}, 1);
+ $self->{encoding} = '' ;
+ return $self;
+}
+
+sub DESTROY{ # defined so it won't autoload.
+ DEBUG and warn shift;
+}
+
+sub AUTOLOAD {
+ my $self = shift;
+ my $type = ref($self)
+ or confess "$self is not an object";
+ my $myname = $AUTOLOAD;
+ $myname =~ s/.*://; # strip fully-qualified portion
+ my $obj = find_encoding($myname)
+ or confess __PACKAGE__, ": unknown encoding: $myname";
+ DEBUG and warn $self->{encoding}, " => ", $obj->name;
+ if ($self->{encoding}){
+ from_to($self->{data}, $self->{encoding}, $obj->name, 1);
+ }else{
+ $self->{data} = $obj->encode($self->{data}, 1);
+ }
+ $self->{encoding} = $obj->name;
+ return $self;
+}
+
+use overload
+ q("") => sub { $_[0]->{data} },
+ q(0+) => sub { use bytes (); bytes::length($_[0]->{data}) },
+ fallback => 1,
+ ;
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Encoder -- Object Oriented Encoder
+
+=head1 SYNOPSIS
+
+ use Encode::Encoder;
+ # Encode::encode("ISO-8859-1", $data);
+ Encode::Encoder->new($data)->iso_8859_1; # OOP way
+ # shortcut
+ use Encode::Encoder qw(encoder);
+ encoder($data)->iso_8859_1;
+ # you can stack them!
+ encoder($data)->iso_8859_1->base64; # provided base64() is defined
+ # you can use it as a decoder as well
+ encoder($base64)->bytes('base64')->latin1;
+ # stringified
+ print encoder($data)->utf8->latin1; # prints the string in latin1
+ # numified
+ encoder("\x{abcd}\x{ef}g")->utf8 == 6; # true. bytes::length($data)
+
+=head1 ABSTRACT
+
+B<Encode::Encoder> allows you to use Encode in an object-oriented
+style. This is not only more intuitive than a functional approach,
+but also handier when you want to stack encodings. Suppose you want
+your UTF-8 string converted to Latin1 then Base64: you can simply say
+
+ my $base64 = encoder($utf8)->latin1->base64;
+
+instead of
+
+ my $latin1 = encode("latin1", $utf8);
+ my $base64 = encode_base64($utf8);
+
+or the lazier and more convoluted
+
+ my $base64 = encode_base64(encode("latin1", $utf8));
+
+=head1 Description
+
+Here is how to use this module.
+
+=over 4
+
+=item *
+
+There are at least two instance variables stored in a hash reference,
+{data} and {encoding}.
+
+=item *
+
+When there is no method, it takes the method name as the name of the
+encoding and encodes the instance I<data> with I<encoding>. If successful,
+the instance I<encoding> is set accordingly.
+
+=item *
+
+You can retrieve the result via -E<gt>data but usually you don't have to
+because the stringify operator ("") is overridden to do exactly that.
+
+=back
+
+=head2 Predefined Methods
+
+This module predefines the methods below:
+
+=over 4
+
+=item $e = Encode::Encoder-E<gt>new([$data, $encoding]);
+
+returns an encoder object. Its data is initialized with $data if
+present, and its encoding is set to $encoding if present.
+
+When $encoding is omitted, it defaults to utf8 if $data is already in
+utf8 or "" (empty string) otherwise.
+
+=item encoder()
+
+is an alias of Encode::Encoder-E<gt>new(). This one is exported on demand.
+
+=item $e-E<gt>data([$data])
+
+When $data is present, sets the instance data to $data and returns the
+object itself. Otherwise, the current instance data is returned.
+
+=item $e-E<gt>encoding([$encoding])
+
+When $encoding is present, sets the instance encoding to $encoding and
+returns the object itself. Otherwise, the current instance encoding is
+returned.
+
+=item $e-E<gt>bytes([$encoding])
+
+decodes instance data from $encoding, or the instance encoding if
+omitted. If the conversion is successful, the instance encoding
+will be set to "".
+
+The name I<bytes> was deliberately picked to avoid namespace tainting
+-- this module may be used as a base class so method names that appear
+in Encode::Encoding are avoided.
+
+=back
+
+=head2 Example: base64 transcoder
+
+This module is designed to work with L<Encode::Encoding>.
+To make the Base64 transcoder example above really work, you could
+write a module like this:
+
+ package Encode::Base64;
+ use base 'Encode::Encoding';
+ __PACKAGE__->Define('base64');
+ use MIME::Base64;
+ sub encode{
+ my ($obj, $data) = @_;
+ return encode_base64($data);
+ }
+ sub decode{
+ my ($obj, $data) = @_;
+ return decode_base64($data);
+ }
+ 1;
+ __END__
+
+And your caller module would be something like this:
+
+ use Encode::Encoder;
+ use Encode::Base64;
+
+ # now you can really do the following
+
+ encoder($data)->iso_8859_1->base64;
+ encoder($base64)->bytes('base64')->latin1;
+
+=head2 Operator Overloading
+
+This module overloads two operators, stringify ("") and numify (0+).
+
+Stringify dumps the data inside the object.
+
+Numify returns the number of bytes in the instance data.
+
+They come in handy when you want to print or find the size of data.
+
+=head1 SEE ALSO
+
+L<Encode>,
+L<Encode::Encoding>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Encoding.pm b/Master/tlpkg/tlperl/lib/Encode/Encoding.pm
new file mode 100644
index 00000000000..06af9fb6994
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Encoding.pm
@@ -0,0 +1,341 @@
+package Encode::Encoding;
+# Base class for classes which implement encodings
+use strict;
+our $VERSION = do { my @r = (q$Revision: 2.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+require Encode;
+
+sub DEBUG { 0 }
+sub Define
+{
+ my $obj = shift;
+ my $canonical = shift;
+ $obj = bless { Name => $canonical },$obj unless ref $obj;
+ # warn "$canonical => $obj\n";
+ Encode::define_encoding($obj, $canonical, @_);
+}
+
+sub name { return shift->{'Name'} }
+
+# sub renew { return $_[0] }
+
+sub renew {
+ my $self = shift;
+ my $clone = bless { %$self } => ref($self);
+ $clone->{renewed}++; # so the caller can see it
+ DEBUG and warn $clone->{renewed};
+ return $clone;
+}
+
+sub renewed{ return $_[0]->{renewed} || 0 }
+
+*new_sequence = \&renew;
+
+sub needs_lines { 0 };
+
+sub perlio_ok {
+ eval{ require PerlIO::encoding };
+ return $@ ? 0 : 1;
+}
+
+# (Temporary|legacy) methods
+
+sub toUnicode { shift->decode(@_) }
+sub fromUnicode { shift->encode(@_) }
+
+#
+# Needs to be overloaded or just croak
+#
+
+sub encode {
+ require Carp;
+ my $obj = shift;
+ my $class = ref($obj) ? ref($obj) : $obj;
+ Carp::croak($class . "->encode() not defined!");
+}
+
+sub decode{
+ require Carp;
+ my $obj = shift;
+ my $class = ref($obj) ? ref($obj) : $obj;
+ Carp::croak($class . "->encode() not defined!");
+}
+
+sub DESTROY {}
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Encoding - Encode Implementation Base Class
+
+=head1 SYNOPSIS
+
+ package Encode::MyEncoding;
+ use base qw(Encode::Encoding);
+
+ __PACKAGE__->Define(qw(myCanonical myAlias));
+
+=head1 DESCRIPTION
+
+As mentioned in L<Encode>, encodings are (in the current
+implementation at least) defined as objects. The mapping of encoding
+name to object is via the C<%Encode::Encoding> hash. Though you can
+directly manipulate this hash, it is strongly encouraged to use this
+base class module and add encode() and decode() methods.
+
+=head2 Methods you should implement
+
+You are strongly encouraged to implement methods below, at least
+either encode() or decode().
+
+=over 4
+
+=item -E<gt>encode($string [,$check])
+
+MUST return the octet sequence representing I<$string>.
+
+=over 2
+
+=item *
+
+If I<$check> is true, it SHOULD modify I<$string> in place to remove
+the converted part (i.e. the whole string unless there is an error).
+If perlio_ok() is true, SHOULD becomes MUST.
+
+=item *
+
+If an error occurs, it SHOULD return the octet sequence for the
+fragment of string that has been converted and modify $string in-place
+to remove the converted part leaving it starting with the problem
+fragment. If perlio_ok() is true, SHOULD becomes MUST.
+
+=item *
+
+If I<$check> is is false then C<encode> MUST make a "best effort" to
+convert the string - for example, by using a replacement character.
+
+=back
+
+=item -E<gt>decode($octets [,$check])
+
+MUST return the string that I<$octets> represents.
+
+=over 2
+
+=item *
+
+If I<$check> is true, it SHOULD modify I<$octets> in place to remove
+the converted part (i.e. the whole sequence unless there is an
+error). If perlio_ok() is true, SHOULD becomes MUST.
+
+=item *
+
+If an error occurs, it SHOULD return the fragment of string that has
+been converted and modify $octets in-place to remove the converted
+part leaving it starting with the problem fragment. If perlio_ok() is
+true, SHOULD becomes MUST.
+
+=item *
+
+If I<$check> is false then C<decode> should make a "best effort" to
+convert the string - for example by using Unicode's "\x{FFFD}" as a
+replacement character.
+
+=back
+
+=back
+
+If you want your encoding to work with L<encoding> pragma, you should
+also implement the method below.
+
+=over 4
+
+=item -E<gt>cat_decode($destination, $octets, $offset, $terminator [,$check])
+
+MUST decode I<$octets> with I<$offset> and concatenate it to I<$destination>.
+Decoding will terminate when $terminator (a string) appears in output.
+I<$offset> will be modified to the last $octets position at end of decode.
+Returns true if $terminator appears output, else returns false.
+
+=back
+
+=head2 Other methods defined in Encode::Encodings
+
+You do not have to override methods shown below unless you have to.
+
+=over 4
+
+=item -E<gt>name
+
+Predefined As:
+
+ sub name { return shift->{'Name'} }
+
+MUST return the string representing the canonical name of the encoding.
+
+=item -E<gt>renew
+
+Predefined As:
+
+ sub renew {
+ my $self = shift;
+ my $clone = bless { %$self } => ref($self);
+ $clone->{renewed}++;
+ return $clone;
+ }
+
+This method reconstructs the encoding object if necessary. If you need
+to store the state during encoding, this is where you clone your object.
+
+PerlIO ALWAYS calls this method to make sure it has its own private
+encoding object.
+
+=item -E<gt>renewed
+
+Predefined As:
+
+ sub renewed { $_[0]->{renewed} || 0 }
+
+Tells whether the object is renewed (and how many times). Some
+modules emit C<Use of uninitialized value in null operation> warning
+unless the value is numeric so return 0 for false.
+
+=item -E<gt>perlio_ok()
+
+Predefined As:
+
+ sub perlio_ok {
+ eval{ require PerlIO::encoding };
+ return $@ ? 0 : 1;
+ }
+
+If your encoding does not support PerlIO for some reasons, just;
+
+ sub perlio_ok { 0 }
+
+=item -E<gt>needs_lines()
+
+Predefined As:
+
+ sub needs_lines { 0 };
+
+If your encoding can work with PerlIO but needs line buffering, you
+MUST define this method so it returns true. 7bit ISO-2022 encodings
+are one example that needs this. When this method is missing, false
+is assumed.
+
+=back
+
+=head2 Example: Encode::ROT13
+
+ package Encode::ROT13;
+ use strict;
+ use base qw(Encode::Encoding);
+
+ __PACKAGE__->Define('rot13');
+
+ sub encode($$;$){
+ my ($obj, $str, $chk) = @_;
+ $str =~ tr/A-Za-z/N-ZA-Mn-za-m/;
+ $_[1] = '' if $chk; # this is what in-place edit means
+ return $str;
+ }
+
+ # Jr pna or ynml yvxr guvf;
+ *decode = \&encode;
+
+ 1;
+
+=head1 Why the heck Encode API is different?
+
+It should be noted that the I<$check> behaviour is different from the
+outer public API. The logic is that the "unchecked" case is useful
+when the encoding is part of a stream which may be reporting errors
+(e.g. STDERR). In such cases, it is desirable to get everything
+through somehow without causing additional errors which obscure the
+original one. Also, the encoding is best placed to know what the
+correct replacement character is, so if that is the desired behaviour
+then letting low level code do it is the most efficient.
+
+By contrast, if I<$check> is true, the scheme above allows the
+encoding to do as much as it can and tell the layer above how much
+that was. What is lacking at present is a mechanism to report what
+went wrong. The most likely interface will be an additional method
+call to the object, or perhaps (to avoid forcing per-stream objects
+on otherwise stateless encodings) an additional parameter.
+
+It is also highly desirable that encoding classes inherit from
+C<Encode::Encoding> as a base class. This allows that class to define
+additional behaviour for all encoding objects.
+
+ package Encode::MyEncoding;
+ use base qw(Encode::Encoding);
+
+ __PACKAGE__->Define(qw(myCanonical myAlias));
+
+to create an object with C<< bless {Name => ...}, $class >>, and call
+define_encoding. They inherit their C<name> method from
+C<Encode::Encoding>.
+
+=head2 Compiled Encodings
+
+For the sake of speed and efficiency, most of the encodings are now
+supported via a I<compiled form>: XS modules generated from UCM
+files. Encode provides the enc2xs tool to achieve that. Please see
+L<enc2xs> for more details.
+
+=head1 SEE ALSO
+
+L<perlmod>, L<enc2xs>
+
+=begin future
+
+=over 4
+
+=item Scheme 1
+
+The fixup routine gets passed the remaining fragment of string being
+processed. It modifies it in place to remove bytes/characters it can
+understand and returns a string used to represent them. For example:
+
+ sub fixup {
+ my $ch = substr($_[0],0,1,'');
+ return sprintf("\x{%02X}",ord($ch);
+ }
+
+This scheme is close to how the underlying C code for Encode works,
+but gives the fixup routine very little context.
+
+=item Scheme 2
+
+The fixup routine gets passed the original string, an index into
+it of the problem area, and the output string so far. It appends
+what it wants to the output string and returns a new index into the
+original string. For example:
+
+ sub fixup {
+ # my ($s,$i,$d) = @_;
+ my $ch = substr($_[0],$_[1],1);
+ $_[2] .= sprintf("\x{%02X}",ord($ch);
+ return $_[1]+1;
+ }
+
+This scheme gives maximal control to the fixup routine but is more
+complicated to code, and may require that the internals of Encode be tweaked to
+keep the original string intact.
+
+=item Other Schemes
+
+Hybrids of the above.
+
+Multiple return values rather than in-place modifications.
+
+Index into the string could be C<pos($str)> allowing C<s/\G...//>.
+
+=back
+
+=end future
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Guess.pm b/Master/tlpkg/tlperl/lib/Encode/Guess.pm
new file mode 100644
index 00000000000..5692cee9a4a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Guess.pm
@@ -0,0 +1,351 @@
+package Encode::Guess;
+use strict;
+
+use Encode qw(:fallbacks find_encoding);
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+my $Canon = 'Guess';
+sub DEBUG () { 0 }
+our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8);
+$Encode::Encoding{$Canon} =
+ bless {
+ Name => $Canon,
+ Suspects => { %DEF_SUSPECTS },
+ } => __PACKAGE__;
+
+use base qw(Encode::Encoding);
+sub needs_lines { 1 }
+sub perlio_ok { 0 }
+
+our @EXPORT = qw(guess_encoding);
+our $NoUTFAutoGuess = 0;
+our $UTF8_BOM = pack("C3", 0xef, 0xbb, 0xbf);
+
+sub import { # Exporter not used so we do it on our own
+ my $callpkg = caller;
+ for my $item (@EXPORT){
+ no strict 'refs';
+ *{"$callpkg\::$item"} = \&{"$item"};
+ }
+ set_suspects(@_);
+}
+
+sub set_suspects{
+ my $class = shift;
+ my $self = ref($class) ? $class : $Encode::Encoding{$Canon};
+ $self->{Suspects} = { %DEF_SUSPECTS };
+ $self->add_suspects(@_);
+}
+
+sub add_suspects{
+ my $class = shift;
+ my $self = ref($class) ? $class : $Encode::Encoding{$Canon};
+ for my $c (@_){
+ my $e = find_encoding($c) or die "Unknown encoding: $c";
+ $self->{Suspects}{$e->name} = $e;
+ DEBUG and warn "Added: ", $e->name;
+ }
+}
+
+sub decode($$;$){
+ my ($obj, $octet, $chk) = @_;
+ my $guessed = guess($obj, $octet);
+ unless (ref($guessed)){
+ require Carp;
+ Carp::croak($guessed);
+ }
+ my $utf8 = $guessed->decode($octet, $chk);
+ $_[1] = $octet if $chk;
+ return $utf8;
+}
+
+sub guess_encoding{
+ guess($Encode::Encoding{$Canon}, @_);
+}
+
+sub guess {
+ my $class = shift;
+ my $obj = ref($class) ? $class : $Encode::Encoding{$Canon};
+ my $octet = shift;
+
+ # sanity check
+ return unless defined $octet and length $octet;
+
+ # cheat 0: utf8 flag;
+ if ( Encode::is_utf8($octet) ) {
+ return find_encoding('utf8') unless $NoUTFAutoGuess;
+ Encode::_utf8_off($octet);
+ }
+ # cheat 1: BOM
+ use Encode::Unicode;
+ unless ($NoUTFAutoGuess) {
+ my $BOM = pack('C3', unpack("C3", $octet));
+ return find_encoding('utf8')
+ if (defined $BOM and $BOM eq $UTF8_BOM);
+ $BOM = unpack('N', $octet);
+ return find_encoding('UTF-32')
+ if (defined $BOM and ($BOM == 0xFeFF or $BOM == 0xFFFe0000));
+ $BOM = unpack('n', $octet);
+ return find_encoding('UTF-16')
+ if (defined $BOM and ($BOM == 0xFeFF or $BOM == 0xFFFe));
+ if ($octet =~ /\x00/o){ # if \x00 found, we assume UTF-(16|32)(BE|LE)
+ my $utf;
+ my ($be, $le) = (0, 0);
+ if ($octet =~ /\x00\x00/o){ # UTF-32(BE|LE) assumed
+ $utf = "UTF-32";
+ for my $char (unpack('N*', $octet)){
+ $char & 0x0000ffff and $be++;
+ $char & 0xffff0000 and $le++;
+ }
+ }else{ # UTF-16(BE|LE) assumed
+ $utf = "UTF-16";
+ for my $char (unpack('n*', $octet)){
+ $char & 0x00ff and $be++;
+ $char & 0xff00 and $le++;
+ }
+ }
+ DEBUG and warn "$utf, be == $be, le == $le";
+ $be == $le
+ and return
+ "Encodings ambiguous between $utf BE and LE ($be, $le)";
+ $utf .= ($be > $le) ? 'BE' : 'LE';
+ return find_encoding($utf);
+ }
+ }
+ my %try = %{$obj->{Suspects}};
+ for my $c (@_){
+ my $e = find_encoding($c) or die "Unknown encoding: $c";
+ $try{$e->name} = $e;
+ DEBUG and warn "Added: ", $e->name;
+ }
+ my $nline = 1;
+ for my $line (split /\r\n?|\n/, $octet){
+ # cheat 2 -- \e in the string
+ if ($line =~ /\e/o){
+ my @keys = keys %try;
+ delete @try{qw/utf8 ascii/};
+ for my $k (@keys){
+ ref($try{$k}) eq 'Encode::XS' and delete $try{$k};
+ }
+ }
+ my %ok = %try;
+ # warn join(",", keys %try);
+ for my $k (keys %try){
+ my $scratch = $line;
+ $try{$k}->decode($scratch, FB_QUIET);
+ if ($scratch eq ''){
+ DEBUG and warn sprintf("%4d:%-24s ok\n", $nline, $k);
+ }else{
+ use bytes ();
+ DEBUG and
+ warn sprintf("%4d:%-24s not ok; %d bytes left\n",
+ $nline, $k, bytes::length($scratch));
+ delete $ok{$k};
+ }
+ }
+ %ok or return "No appropriate encodings found!";
+ if (scalar(keys(%ok)) == 1){
+ my ($retval) = values(%ok);
+ return $retval;
+ }
+ %try = %ok; $nline++;
+ }
+ $try{ascii} or
+ return "Encodings too ambiguous: ", join(" or ", keys %try);
+ return $try{ascii};
+}
+
+
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Guess -- Guesses encoding from data
+
+=head1 SYNOPSIS
+
+ # if you are sure $data won't contain anything bogus
+
+ use Encode;
+ use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
+ my $utf8 = decode("Guess", $data);
+ my $data = encode("Guess", $utf8); # this doesn't work!
+
+ # more elaborate way
+ use Encode::Guess;
+ my $enc = guess_encoding($data, qw/euc-jp shiftjis 7bit-jis/);
+ ref($enc) or die "Can't guess: $enc"; # trap error this way
+ $utf8 = $enc->decode($data);
+ # or
+ $utf8 = decode($enc->name, $data)
+
+=head1 ABSTRACT
+
+Encode::Guess enables you to guess in what encoding a given data is
+encoded, or at least tries to.
+
+=head1 DESCRIPTION
+
+By default, it checks only ascii, utf8 and UTF-16/32 with BOM.
+
+ use Encode::Guess; # ascii/utf8/BOMed UTF
+
+To use it more practically, you have to give the names of encodings to
+check (I<suspects> as follows). The name of suspects can either be
+canonical names or aliases.
+
+CAVEAT: Unlike UTF-(16|32), BOM in utf8 is NOT AUTOMATICALLY STRIPPED.
+
+ # tries all major Japanese Encodings as well
+ use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
+
+If the C<$Encode::Guess::NoUTFAutoGuess> variable is set to a true
+value, no heuristics will be applied to UTF8/16/32, and the result
+will be limited to the suspects and C<ascii>.
+
+=over 4
+
+=item Encode::Guess->set_suspects
+
+You can also change the internal suspects list via C<set_suspects>
+method.
+
+ use Encode::Guess;
+ Encode::Guess->set_suspects(qw/euc-jp shiftjis 7bit-jis/);
+
+=item Encode::Guess->add_suspects
+
+Or you can use C<add_suspects> method. The difference is that
+C<set_suspects> flushes the current suspects list while
+C<add_suspects> adds.
+
+ use Encode::Guess;
+ Encode::Guess->add_suspects(qw/euc-jp shiftjis 7bit-jis/);
+ # now the suspects are euc-jp,shiftjis,7bit-jis, AND
+ # euc-kr,euc-cn, and big5-eten
+ Encode::Guess->add_suspects(qw/euc-kr euc-cn big5-eten/);
+
+=item Encode::decode("Guess" ...)
+
+When you are content with suspects list, you can now
+
+ my $utf8 = Encode::decode("Guess", $data);
+
+=item Encode::Guess->guess($data)
+
+But it will croak if:
+
+=over
+
+=item *
+
+Two or more suspects remain
+
+=item *
+
+No suspects left
+
+=back
+
+So you should instead try this;
+
+ my $decoder = Encode::Guess->guess($data);
+
+On success, $decoder is an object that is documented in
+L<Encode::Encoding>. So you can now do this;
+
+ my $utf8 = $decoder->decode($data);
+
+On failure, $decoder now contains an error message so the whole thing
+would be as follows;
+
+ my $decoder = Encode::Guess->guess($data);
+ die $decoder unless ref($decoder);
+ my $utf8 = $decoder->decode($data);
+
+=item guess_encoding($data, [, I<list of suspects>])
+
+You can also try C<guess_encoding> function which is exported by
+default. It takes $data to check and it also takes the list of
+suspects by option. The optional suspect list is I<not reflected> to
+the internal suspects list.
+
+ my $decoder = guess_encoding($data, qw/euc-jp euc-kr euc-cn/);
+ die $decoder unless ref($decoder);
+ my $utf8 = $decoder->decode($data);
+ # check only ascii and utf8
+ my $decoder = guess_encoding($data);
+
+=back
+
+=head1 CAVEATS
+
+=over 4
+
+=item *
+
+Because of the algorithm used, ISO-8859 series and other single-byte
+encodings do not work well unless either one of ISO-8859 is the only
+one suspect (besides ascii and utf8).
+
+ use Encode::Guess;
+ # perhaps ok
+ my $decoder = guess_encoding($data, 'latin1');
+ # definitely NOT ok
+ my $decoder = guess_encoding($data, qw/latin1 greek/);
+
+The reason is that Encode::Guess guesses encoding by trial and error.
+It first splits $data into lines and tries to decode the line for each
+suspect. It keeps it going until all but one encoding is eliminated
+out of suspects list. ISO-8859 series is just too successful for most
+cases (because it fills almost all code points in \x00-\xff).
+
+=item *
+
+Do not mix national standard encodings and the corresponding vendor
+encodings.
+
+ # a very bad idea
+ my $decoder
+ = guess_encoding($data, qw/shiftjis MacJapanese cp932/);
+
+The reason is that vendor encoding is usually a superset of national
+standard so it becomes too ambiguous for most cases.
+
+=item *
+
+On the other hand, mixing various national standard encodings
+automagically works unless $data is too short to allow for guessing.
+
+ # This is ok if $data is long enough
+ my $decoder =
+ guess_encoding($data, qw/euc-cn
+ euc-jp shiftjis 7bit-jis
+ euc-kr
+ big5-eten/);
+
+=item *
+
+DO NOT PUT TOO MANY SUSPECTS! Don't you try something like this!
+
+ my $decoder = guess_encoding($data,
+ Encode->encodings(":all"));
+
+=back
+
+It is, after all, just a guess. You should alway be explicit when it
+comes to encodings. But there are some, especially Japanese,
+environment that guess-coding is a must. Use this module with care.
+
+=head1 TO DO
+
+Encode::Guess does not work on EBCDIC platforms.
+
+=head1 SEE ALSO
+
+L<Encode>, L<Encode::Encoding>
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/JP.pm b/Master/tlpkg/tlperl/lib/Encode/JP.pm
new file mode 100644
index 00000000000..01ad37f30db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/JP.pm
@@ -0,0 +1,97 @@
+package Encode::JP;
+BEGIN {
+ if (ord("A") == 193) {
+ die "Encode::JP not supported on EBCDIC\n";
+ }
+}
+use Encode;
+our $VERSION = do { my @r = (q$Revision: 2.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+use Encode::JP::JIS7;
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::JP - Japanese Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $euc_jp = encode("euc-jp", $utf8); # loads Encode::JP implicitly
+ $utf8 = decode("euc-jp", $euc_jp); # ditto
+
+=head1 ABSTRACT
+
+This module implements Japanese charset encodings. Encodings
+supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ euc-jp /\beuc.*jp$/i EUC (Extended Unix Character)
+ /\bjp.*euc/i
+ /\bujis$/i
+ shiftjis /\bshift.*jis$/i Shift JIS (aka MS Kanji)
+ /\bsjis$/i
+ 7bit-jis /\bjis$/i 7bit JIS
+ iso-2022-jp ISO-2022-JP [RFC1468]
+ = 7bit JIS with all Halfwidth Kana
+ converted to Fullwidth
+ iso-2022-jp-1 ISO-2022-JP-1 [RFC2237]
+ = ISO-2022-JP with JIS X 0212-1990
+ support. See below
+ MacJapanese Shift JIS + Apple vendor mappings
+ cp932 /\bwindows-31j$/i Code Page 932
+ = Shift JIS + MS/IBM vendor mappings
+ jis0201-raw JIS0201, raw format
+ jis0208-raw JIS0201, raw format
+ jis0212-raw JIS0201, raw format
+ --------------------------------------------------------------------
+
+=head1 DESCRIPTION
+
+To find out how to use this module in detail, see L<Encode>.
+
+=head1 Note on ISO-2022-JP(-1)?
+
+ISO-2022-JP-1 (RFC2237) is a superset of ISO-2022-JP (RFC1468) which
+adds support for JIS X 0212-1990. That means you can use the same
+code to decode to utf8 but not vice versa.
+
+ $utf8 = decode('iso-2022-jp-1', $stream);
+
+and
+
+ $utf8 = decode('iso-2022-jp', $stream);
+
+yield the same result but
+
+ $with_0212 = encode('iso-2022-jp-1', $utf8);
+
+is now different from
+
+ $without_0212 = encode('iso-2022-jp', $utf8 );
+
+In the latter case, characters that map to 0212 are first converted
+to U+3013 (0xA2AE in EUC-JP; a white square also known as 'Tofu' or
+'geta mark') then fed to the decoding engine. U+FFFD is not used,
+in order to preserve text layout as much as possible.
+
+=head1 BUGS
+
+The ASCII region (0x00-0x7f) is preserved for all encodings, even
+though this conflicts with mappings by the Unicode Consortium. See
+
+L<http://www.debian.or.jp/~kubota/unicode-symbols.html.en>
+
+to find out why it is implemented that way.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/JP/H2Z.pm b/Master/tlpkg/tlperl/lib/Encode/JP/H2Z.pm
new file mode 100644
index 00000000000..0c84c62fda6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/JP/H2Z.pm
@@ -0,0 +1,174 @@
+#
+# $Id: H2Z.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $
+#
+
+package Encode::JP::H2Z;
+
+use strict;
+
+our $RCSID = q$Id: H2Z.pm,v 2.0 2004/05/16 20:55:17 dankogai Exp $;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode::CJKConstants qw(:all);
+
+use vars qw(%_D2Z $_PAT_D2Z
+ %_Z2D $_PAT_Z2D
+ %_H2Z $_PAT_H2Z
+ %_Z2H $_PAT_Z2H);
+
+%_H2Z = (
+ "\x8e\xa1" => "\xa1\xa3", #¡£
+ "\x8e\xa2" => "\xa1\xd6", #¡Ö
+ "\x8e\xa3" => "\xa1\xd7", #¡×
+ "\x8e\xa4" => "\xa1\xa2", #¡¢
+ "\x8e\xa5" => "\xa1\xa6", #¡¦
+ "\x8e\xa6" => "\xa5\xf2", #¥ò
+ "\x8e\xa7" => "\xa5\xa1", #¥¡
+ "\x8e\xa8" => "\xa5\xa3", #¥£
+ "\x8e\xa9" => "\xa5\xa5", #¥¥
+ "\x8e\xaa" => "\xa5\xa7", #¥§
+ "\x8e\xab" => "\xa5\xa9", #¥©
+ "\x8e\xac" => "\xa5\xe3", #¥ã
+ "\x8e\xad" => "\xa5\xe5", #¥å
+ "\x8e\xae" => "\xa5\xe7", #¥ç
+ "\x8e\xaf" => "\xa5\xc3", #¥Ã
+ "\x8e\xb0" => "\xa1\xbc", #¡¼
+ "\x8e\xb1" => "\xa5\xa2", #¥¢
+ "\x8e\xb2" => "\xa5\xa4", #¥¤
+ "\x8e\xb3" => "\xa5\xa6", #¥¦
+ "\x8e\xb4" => "\xa5\xa8", #¥¨
+ "\x8e\xb5" => "\xa5\xaa", #¥ª
+ "\x8e\xb6" => "\xa5\xab", #¥«
+ "\x8e\xb7" => "\xa5\xad", #¥­
+ "\x8e\xb8" => "\xa5\xaf", #¥¯
+ "\x8e\xb9" => "\xa5\xb1", #¥±
+ "\x8e\xba" => "\xa5\xb3", #¥³
+ "\x8e\xbb" => "\xa5\xb5", #¥µ
+ "\x8e\xbc" => "\xa5\xb7", #¥·
+ "\x8e\xbd" => "\xa5\xb9", #¥¹
+ "\x8e\xbe" => "\xa5\xbb", #¥»
+ "\x8e\xbf" => "\xa5\xbd", #¥½
+ "\x8e\xc0" => "\xa5\xbf", #¥¿
+ "\x8e\xc1" => "\xa5\xc1", #¥Á
+ "\x8e\xc2" => "\xa5\xc4", #¥Ä
+ "\x8e\xc3" => "\xa5\xc6", #¥Æ
+ "\x8e\xc4" => "\xa5\xc8", #¥È
+ "\x8e\xc5" => "\xa5\xca", #¥Ê
+ "\x8e\xc6" => "\xa5\xcb", #¥Ë
+ "\x8e\xc7" => "\xa5\xcc", #¥Ì
+ "\x8e\xc8" => "\xa5\xcd", #¥Í
+ "\x8e\xc9" => "\xa5\xce", #¥Î
+ "\x8e\xca" => "\xa5\xcf", #¥Ï
+ "\x8e\xcb" => "\xa5\xd2", #¥Ò
+ "\x8e\xcc" => "\xa5\xd5", #¥Õ
+ "\x8e\xcd" => "\xa5\xd8", #¥Ø
+ "\x8e\xce" => "\xa5\xdb", #¥Û
+ "\x8e\xcf" => "\xa5\xde", #¥Þ
+ "\x8e\xd0" => "\xa5\xdf", #¥ß
+ "\x8e\xd1" => "\xa5\xe0", #¥à
+ "\x8e\xd2" => "\xa5\xe1", #¥á
+ "\x8e\xd3" => "\xa5\xe2", #¥â
+ "\x8e\xd4" => "\xa5\xe4", #¥ä
+ "\x8e\xd5" => "\xa5\xe6", #¥æ
+ "\x8e\xd6" => "\xa5\xe8", #¥è
+ "\x8e\xd7" => "\xa5\xe9", #¥é
+ "\x8e\xd8" => "\xa5\xea", #¥ê
+ "\x8e\xd9" => "\xa5\xeb", #¥ë
+ "\x8e\xda" => "\xa5\xec", #¥ì
+ "\x8e\xdb" => "\xa5\xed", #¥í
+ "\x8e\xdc" => "\xa5\xef", #¥ï
+ "\x8e\xdd" => "\xa5\xf3", #¥ó
+ "\x8e\xde" => "\xa1\xab", #¡«
+ "\x8e\xdf" => "\xa1\xac", #¡¬
+);
+
+%_D2Z = (
+ "\x8e\xb6\x8e\xde" => "\xa5\xac", #¥¬
+ "\x8e\xb7\x8e\xde" => "\xa5\xae", #¥®
+ "\x8e\xb8\x8e\xde" => "\xa5\xb0", #¥°
+ "\x8e\xb9\x8e\xde" => "\xa5\xb2", #¥²
+ "\x8e\xba\x8e\xde" => "\xa5\xb4", #¥´
+ "\x8e\xbb\x8e\xde" => "\xa5\xb6", #¥¶
+ "\x8e\xbc\x8e\xde" => "\xa5\xb8", #¥¸
+ "\x8e\xbd\x8e\xde" => "\xa5\xba", #¥º
+ "\x8e\xbe\x8e\xde" => "\xa5\xbc", #¥¼
+ "\x8e\xbf\x8e\xde" => "\xa5\xbe", #¥¾
+ "\x8e\xc0\x8e\xde" => "\xa5\xc0", #¥À
+ "\x8e\xc1\x8e\xde" => "\xa5\xc2", #¥Â
+ "\x8e\xc2\x8e\xde" => "\xa5\xc5", #¥Å
+ "\x8e\xc3\x8e\xde" => "\xa5\xc7", #¥Ç
+ "\x8e\xc4\x8e\xde" => "\xa5\xc9", #¥É
+ "\x8e\xca\x8e\xde" => "\xa5\xd0", #¥Ð
+ "\x8e\xcb\x8e\xde" => "\xa5\xd3", #¥Ó
+ "\x8e\xcc\x8e\xde" => "\xa5\xd6", #¥Ö
+ "\x8e\xcd\x8e\xde" => "\xa5\xd9", #¥Ù
+ "\x8e\xce\x8e\xde" => "\xa5\xdc", #¥Ü
+ "\x8e\xca\x8e\xdf" => "\xa5\xd1", #¥Ñ
+ "\x8e\xcb\x8e\xdf" => "\xa5\xd4", #¥Ô
+ "\x8e\xcc\x8e\xdf" => "\xa5\xd7", #¥×
+ "\x8e\xcd\x8e\xdf" => "\xa5\xda", #¥Ú
+ "\x8e\xce\x8e\xdf" => "\xa5\xdd", #¥Ý
+ "\x8e\xb3\x8e\xde" => "\xa5\xf4", #¥ô
+);
+
+# init only once;
+
+#$_PAT_D2Z = join("|", keys %_D2Z);
+#$_PAT_H2Z = join("|", keys %_H2Z);
+
+%_Z2H = reverse %_H2Z;
+%_Z2D = reverse %_D2Z;
+
+#$_PAT_Z2H = join("|", keys %_Z2H);
+#$_PAT_Z2D = join("|", keys %_Z2D);
+
+sub h2z {
+ no warnings qw(uninitialized);
+ my $r_str = shift;
+ my ($keep_dakuten) = @_;
+ my $n = 0;
+ unless ($keep_dakuten){
+ $n = (
+ $$r_str =~ s(
+ ($RE{EUC_KANA}
+ (?:\x8e[\xde\xdf])?)
+ ){
+ my $str = $1;
+ $_D2Z{$str} || $_H2Z{$str} ||
+ # in case dakuten and handakuten are side-by-side!
+ $_H2Z{substr($str,0,2)} . $_H2Z{substr($str,2,2)};
+ }eogx
+ );
+ }else{
+ $n = (
+ $$r_str =~ s(
+ ($RE{EUC_KANA})
+ ){
+ $_H2Z{$1};
+ }eogx
+ );
+ }
+ $n;
+}
+
+sub z2h {
+ my $r_str = shift;
+ my $n = (
+ $$r_str =~ s(
+ ($RE{EUC_C}|$RE{EUC_0212}|$RE{EUC_KANA})
+ ){
+ $_Z2D{$1} || $_Z2H{$1} || $1;
+ }eogx
+ );
+ $n;
+}
+
+1;
+__END__
+
+
+=head1 NAME
+
+Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/JP/JIS7.pm b/Master/tlpkg/tlperl/lib/Encode/JP/JIS7.pm
new file mode 100644
index 00000000000..28503ec760c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/JP/JIS7.pm
@@ -0,0 +1,165 @@
+package Encode::JP::JIS7;
+use strict;
+
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode qw(:fallbacks);
+
+for my $name ('7bit-jis', 'iso-2022-jp', 'iso-2022-jp-1'){
+ my $h2z = ($name eq '7bit-jis') ? 0 : 1;
+ my $jis0212 = ($name eq 'iso-2022-jp') ? 0 : 1;
+
+ $Encode::Encoding{$name} =
+ bless {
+ Name => $name,
+ h2z => $h2z,
+ jis0212 => $jis0212,
+ } => __PACKAGE__;
+}
+
+use base qw(Encode::Encoding);
+
+# we override this to 1 so PerlIO works
+sub needs_lines { 1 }
+
+use Encode::CJKConstants qw(:all);
+
+#
+# decode is identical for all 2022 variants
+#
+
+sub decode($$;$)
+{
+ my ($obj, $str, $chk) = @_;
+ my $residue = '';
+ if ($chk){
+ $str =~ s/([^\x00-\x7f].*)$//so and $residue = $1;
+ }
+ $residue .= jis_euc(\$str);
+ $_[1] = $residue if $chk;
+ return Encode::decode('euc-jp', $str, FB_PERLQQ);
+}
+
+#
+# encode is different
+#
+
+sub encode($$;$)
+{
+ require Encode::JP::H2Z;
+ my ($obj, $utf8, $chk) = @_;
+ # empty the input string in the stack so perlio is ok
+ $_[1] = '' if $chk;
+ my ($h2z, $jis0212) = @$obj{qw(h2z jis0212)};
+ my $octet = Encode::encode('euc-jp', $utf8, FB_PERLQQ) ;
+ $h2z and &Encode::JP::H2Z::h2z(\$octet);
+ euc_jis(\$octet, $jis0212);
+ return $octet;
+}
+
+#
+# cat_decode
+#
+my $re_scan_jis_g = qr{
+ \G ( ($RE{JIS_0212}) | $RE{JIS_0208} |
+ ($RE{ISO_ASC}) | ($RE{JIS_KANA}) | )
+ ([^\e]*)
+}x;
+sub cat_decode { # ($obj, $dst, $src, $pos, $trm, $chk)
+ my ($obj, undef, undef, $pos, $trm) = @_; # currently ignores $chk
+ my ($rdst, $rsrc, $rpos) = \@_[1,2,3];
+ local ${^ENCODING};
+ use bytes;
+ my $opos = pos($$rsrc);
+ pos($$rsrc) = $pos;
+ while ($$rsrc =~ /$re_scan_jis_g/gc) {
+ my ($esc, $esc_0212, $esc_asc, $esc_kana, $chunk) =
+ ($1, $2, $3, $4, $5);
+
+ unless ($chunk) { $esc or last; next; }
+
+ if ($esc && !$esc_asc) {
+ $chunk =~ tr/\x21-\x7e/\xa1-\xfe/;
+ if ($esc_kana) {
+ $chunk =~ s/([\xa1-\xdf])/\x8e$1/og;
+ } elsif ($esc_0212) {
+ $chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og;
+ }
+ $chunk = Encode::decode('euc-jp', $chunk, 0);
+ }
+ elsif ((my $npos = index($chunk, $trm)) >= 0) {
+ $$rdst .= substr($chunk, 0, $npos + length($trm));
+ $$rpos += length($esc) + $npos + length($trm);
+ pos($$rsrc) = $opos;
+ return 1;
+ }
+ $$rdst .= $chunk;
+ $$rpos = pos($$rsrc);
+ }
+ $$rpos = pos($$rsrc);
+ pos($$rsrc) = $opos;
+ return '';
+}
+
+# JIS<->EUC
+my $re_scan_jis = qr{
+ (?:($RE{JIS_0212})|$RE{JIS_0208}|($RE{ISO_ASC})|($RE{JIS_KANA}))([^\e]*)
+}x;
+
+sub jis_euc {
+ local ${^ENCODING};
+ my $r_str = shift;
+ $$r_str =~ s($re_scan_jis)
+ {
+ my ($esc_0212, $esc_asc, $esc_kana, $chunk) =
+ ($1, $2, $3, $4);
+ if (!$esc_asc) {
+ $chunk =~ tr/\x21-\x7e/\xa1-\xfe/;
+ if ($esc_kana) {
+ $chunk =~ s/([\xa1-\xdf])/\x8e$1/og;
+ }
+ elsif ($esc_0212) {
+ $chunk =~ s/([\xa1-\xfe][\xa1-\xfe])/\x8f$1/og;
+ }
+ }
+ $chunk;
+ }geox;
+ my ($residue) = ($$r_str =~ s/(\e.*)$//so);
+ return $residue;
+}
+
+sub euc_jis{
+ no warnings qw(uninitialized);
+ my $r_str = shift;
+ my $jis0212 = shift;
+ $$r_str =~ s{
+ ((?:$RE{EUC_C})+|(?:$RE{EUC_KANA})+|(?:$RE{EUC_0212})+)
+ }{
+ my $chunk = $1;
+ my $esc =
+ ( $chunk =~ tr/\x8E//d ) ? $ESC{KANA} :
+ ( $chunk =~ tr/\x8F//d ) ? $ESC{JIS_0212} :
+ $ESC{JIS_0208};
+ if ($esc eq $ESC{JIS_0212} && !$jis0212){
+ # fallback to '?'
+ $chunk =~ tr/\xA1-\xFE/\x3F/;
+ }else{
+ $chunk =~ tr/\xA1-\xFE/\x21-\x7E/;
+ }
+ $esc . $chunk . $ESC{ASC};
+ }geox;
+ $$r_str =~
+ s/\Q$ESC{ASC}\E
+ (\Q$ESC{KANA}\E|\Q$ESC{JIS_0212}\E|\Q$ESC{JIS_0208}\E)/$1/gox;
+ $$r_str;
+}
+
+1;
+__END__
+
+
+=head1 NAME
+
+Encode::JP::JIS7 -- internally used by Encode::JP
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/KR.pm b/Master/tlpkg/tlperl/lib/Encode/KR.pm
new file mode 100644
index 00000000000..e9d4073b7b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/KR.pm
@@ -0,0 +1,72 @@
+package Encode::KR;
+BEGIN {
+ if (ord("A") == 193) {
+ die "Encode::KR not supported on EBCDIC\n";
+ }
+}
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode;
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+use Encode::KR::2022_KR;
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::KR - Korean Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $euc_kr = encode("euc-kr", $utf8); # loads Encode::KR implicitly
+ $utf8 = decode("euc-kr", $euc_kr); # ditto
+
+=head1 DESCRIPTION
+
+This module implements Korean charset encodings. Encodings supported
+are as follows.
+
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ euc-kr /\beuc.*kr$/i EUC (Extended Unix Character)
+ /\bkr.*euc$/i
+ ksc5601-raw Korean standard code set (as is)
+ cp949 /(?:x-)?uhc$/i
+ /(?:x-)?windows-949$/i
+ /\bks_c_5601-1987$/i
+ Code Page 949 (EUC-KR + 8,822
+ (additional Hangul syllables)
+ MacKorean EUC-KR + Apple Vendor Mappings
+ johab JOHAB A supplementary encoding defined in
+ Annex 3 of KS X 1001:1998
+ iso-2022-kr iso-2022-kr [RFC1557]
+ --------------------------------------------------------------------
+
+To find how to use this module in detail, see L<Encode>.
+
+=head1 BUGS
+
+When you see C<charset=ks_c_5601-1987> on mails and web pages, they really
+mean "cp949" encodings. To fix that, the following aliases are set;
+
+ qr/(?:x-)?uhc$/i => '"cp949"'
+ qr/(?:x-)?windows-949$/i => '"cp949"'
+ qr/ks_c_5601-1987$/i => '"cp949"'
+
+The ASCII region (0x00-0x7f) is preserved for all encodings, even
+though this conflicts with mappings by the Unicode Consortium. See
+
+L<http://www.debian.or.jp/~kubota/unicode-symbols.html.en>
+
+to find out why it is implemented that way.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/KR/2022_KR.pm b/Master/tlpkg/tlperl/lib/Encode/KR/2022_KR.pm
new file mode 100644
index 00000000000..8b4052be570
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/KR/2022_KR.pm
@@ -0,0 +1,79 @@
+package Encode::KR::2022_KR;
+use strict;
+
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode qw(:fallbacks);
+
+use base qw(Encode::Encoding);
+__PACKAGE__->Define('iso-2022-kr');
+
+sub needs_lines { 1 }
+
+sub perlio_ok {
+ return 0; # for the time being
+}
+
+sub decode
+{
+ my ($obj, $str, $chk) = @_;
+ my $res = $str;
+ my $residue = iso_euc(\$res);
+ # This is for PerlIO
+ $_[1] = $residue if $chk;
+ return Encode::decode('euc-kr', $res, FB_PERLQQ);
+}
+
+sub encode
+{
+ my ($obj, $utf8, $chk) = @_;
+ # empty the input string in the stack so perlio is ok
+ $_[1] = '' if $chk;
+ my $octet = Encode::encode('euc-kr', $utf8, FB_PERLQQ) ;
+ euc_iso(\$octet);
+ return $octet;
+}
+
+use Encode::CJKConstants qw(:all);
+
+# ISO<->EUC
+
+sub iso_euc{
+ my $r_str = shift;
+ $$r_str =~ s/$RE{'2022_KR'}//gox; # remove the designator
+ $$r_str =~ s{ # replace characters in GL
+ \x0e # between SO(\x0e) and SI(\x0f)
+ ([^\x0f]*) # with characters in GR
+ \x0f
+ }
+ {
+ my $out= $1;
+ $out =~ tr/\x21-\x7e/\xa1-\xfe/;
+ $out;
+ }geox;
+ my ($residue) = ($$r_str =~ s/(\e.*)$//so);
+ return $residue;
+}
+
+sub euc_iso{
+ no warnings qw(uninitialized);
+ my $r_str = shift;
+ substr($$r_str,0,0)=$ESC{'2022_KR'}; # put the designator at the beg.
+ $$r_str =~ s{ # move KS X 1001 characters in GR to GL
+ ($RE{EUC_C}+) # and enclose them with SO and SI
+ }{
+ my $str = $1;
+ $str =~ tr/\xA1-\xFE/\x21-\x7E/;
+ "\x0e" . $str . "\x0f";
+ }geox;
+ $$r_str;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::KR::2022_KR -- internally used by Encode::KR
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/MIME/Header.pm b/Master/tlpkg/tlperl/lib/Encode/MIME/Header.pm
new file mode 100644
index 00000000000..f4e2ad6e2b5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/MIME/Header.pm
@@ -0,0 +1,230 @@
+package Encode::MIME::Header;
+use strict;
+# use warnings;
+our $VERSION = do { my @r = (q$Revision: 2.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+use Encode qw(find_encoding encode_utf8 decode_utf8);
+use MIME::Base64;
+use Carp;
+
+my %seed =
+ (
+ decode_b => '1', # decodes 'B' encoding ?
+ decode_q => '1', # decodes 'Q' encoding ?
+ encode => 'B', # encode with 'B' or 'Q' ?
+ bpl => 75, # bytes per line
+ );
+
+$Encode::Encoding{'MIME-Header'} =
+ bless {
+ %seed,
+ Name => 'MIME-Header',
+ } => __PACKAGE__;
+
+$Encode::Encoding{'MIME-B'} =
+ bless {
+ %seed,
+ decode_q => 0,
+ Name => 'MIME-B',
+ } => __PACKAGE__;
+
+$Encode::Encoding{'MIME-Q'} =
+ bless {
+ %seed,
+ decode_q => 1,
+ encode => 'Q',
+ Name => 'MIME-Q',
+ } => __PACKAGE__;
+
+use base qw(Encode::Encoding);
+
+sub needs_lines { 1 }
+sub perlio_ok{ 0 };
+
+sub decode($$;$){
+ use utf8;
+ my ($obj, $str, $chk) = @_;
+ # zap spaces between encoded words
+ $str =~ s/\?=\s+=\?/\?==\?/gos;
+ # multi-line header to single line
+ $str =~ s/(:?\r|\n|\r\n)[ \t]//gos;
+ $str =~
+ s{
+ =\? # begin encoded word
+ ([0-9A-Za-z\-_]+) # charset (encoding)
+ \?([QqBb])\? # delimiter
+ (.*?) # Base64-encodede contents
+ \?= # end encoded word
+ }{
+ if (uc($2) eq 'B'){
+ $obj->{decode_b} or croak qq(MIME "B" unsupported);
+ decode_b($1, $3);
+ }elsif(uc($2) eq 'Q'){
+ $obj->{decode_q} or croak qq(MIME "Q" unsupported);
+ decode_q($1, $3);
+ }else{
+ croak qq(MIME "$2" encoding is nonexistent!);
+ }
+ }egox;
+ $_[1] = '' if $chk;
+ return $str;
+}
+
+sub decode_b{
+ my $enc = shift;
+ my $d = find_encoding($enc) or croak qq(Unknown encoding "$enc");
+ my $db64 = decode_base64(shift);
+ return $d->name eq 'utf8' ?
+ Encode::decode_utf8($db64) : $d->decode($db64, Encode::FB_PERLQQ);
+}
+
+sub decode_q{
+ my ($enc, $q) = @_;
+ my $d = find_encoding($enc) or croak qq(Unknown encoding "$enc");
+ $q =~ s/_/ /go;
+ $q =~ s/=([0-9A-Fa-f]{2})/pack("C", hex($1))/ego;
+ return $d->name eq 'utf8' ?
+ Encode::decode_utf8($q) : $d->decode($q, Encode::FB_PERLQQ);
+}
+
+my $especials =
+ join('|' =>
+ map {quotemeta(chr($_))}
+ unpack("C*", qq{()<>@,;:\"\'/[]?.=}));
+
+my $re_encoded_word =
+ qr{
+ (?:
+ =\? # begin encoded word
+ (?:[0-9A-Za-z\-_]+) # charset (encoding)
+ \?(?:[QqBb])\? # delimiter
+ (?:.*?) # Base64-encodede contents
+ \?= # end encoded word
+ )
+ }xo;
+
+my $re_especials = qr{$re_encoded_word|$especials}xo;
+
+sub encode($$;$){
+ my ($obj, $str, $chk) = @_;
+ my @line = ();
+ for my $line (split /\r|\n|\r\n/o, $str){
+ my (@word, @subline);
+ for my $word (split /($re_especials)/o, $line){
+ if ($word =~ /[^\x00-\x7f]/o or $word =~ /^$re_encoded_word$/o){
+ push @word, $obj->_encode($word);
+ }else{
+ push @word, $word;
+ }
+ }
+ my $subline = '';
+ for my $word (@word){
+ use bytes ();
+ if (bytes::length($subline) + bytes::length($word) > $obj->{bpl}){
+ push @subline, $subline;
+ $subline = '';
+ }
+ $subline .= $word;
+ }
+ $subline and push @subline, $subline;
+ push @line, join("\n " => @subline);
+ }
+ $_[1] = '' if $chk;
+ return join("\n", @line);
+}
+
+use constant HEAD => '=?UTF-8?';
+use constant TAIL => '?=';
+use constant SINGLE => { B => \&_encode_b, Q => \&_encode_q, };
+
+sub _encode{
+ my ($o, $str) = @_;
+ my $enc = $o->{encode};
+ my $llen = ($o->{bpl} - length(HEAD) - 2 - length(TAIL));
+ # to coerce a floating-point arithmetics, the following contains
+ # .0 in numbers -- dankogai
+ $llen *= $enc eq 'B' ? 3.0/4.0 : 1.0/3.0;
+ my @result = ();
+ my $chunk = '';
+ while(length(my $chr = substr($str, 0, 1, ''))){
+ use bytes ();
+ if (bytes::length($chunk) + bytes::length($chr) > $llen){
+ push @result, SINGLE->{$enc}($chunk);
+ $chunk = '';
+ }
+ $chunk .= $chr;
+ }
+ $chunk and push @result, SINGLE->{$enc}($chunk);
+ return @result;
+}
+
+sub _encode_b{
+ HEAD . 'B?' . encode_base64(encode_utf8(shift), '') . TAIL;
+}
+
+sub _encode_q{
+ my $chunk = shift;
+ $chunk =~ s{
+ ([^0-9A-Za-z])
+ }{
+ join("" => map {sprintf "=%02X", $_} unpack("C*", $1))
+ }egox;
+ return decode_utf8(HEAD . 'Q?' . $chunk . TAIL);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $utf8 = decode('MIME-Header', $header);
+ $header = encode('MIME-Header', $utf8);
+
+=head1 ABSTRACT
+
+This module implements RFC 2047 Mime Header Encoding. There are 3
+variant encoding names; C<MIME-Header>, C<MIME-B> and C<MIME-Q>. The
+difference is described below
+
+ decode() encode()
+ ----------------------------------------------
+ MIME-Header Both B and Q =?UTF-8?B?....?=
+ MIME-B B only; Q croaks =?UTF-8?B?....?=
+ MIME-Q Q only; B croaks =?UTF-8?Q?....?=
+
+=head1 DESCRIPTION
+
+When you decode(=?I<encoding>?I<X>?I<ENCODED WORD>?=), I<ENCODED WORD>
+is extracted and decoded for I<X> encoding (B for Base64, Q for
+Quoted-Printable). Then the decoded chunk is fed to
+decode(I<encoding>). So long as I<encoding> is supported by Encode,
+any source encoding is fine.
+
+When you encode, it just encodes UTF-8 string with I<X> encoding then
+quoted with =?UTF-8?I<X>?....?= . The parts that RFC 2047 forbids to
+encode are left as is and long lines are folded within 76 bytes per
+line.
+
+=head1 BUGS
+
+It would be nice to support encoding to non-UTF8, such as =?ISO-2022-JP?
+and =?ISO-8859-1?= but that makes the implementation too complicated.
+These days major mail agents all support =?UTF-8? so I think it is
+just good enough.
+
+Due to popular demand, 'MIME-Header-ISO_2022_JP' was introduced by
+Makamaka. Thre are still too many MUAs especially cellular phone
+handsets which does not grok UTF-8.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+RFC 2047, L<http://www.faqs.org/rfcs/rfc2047.html> and many other
+locations.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/MIME/Header/ISO_2022_JP.pm b/Master/tlpkg/tlperl/lib/Encode/MIME/Header/ISO_2022_JP.pm
new file mode 100644
index 00000000000..5f637a32472
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/MIME/Header/ISO_2022_JP.pm
@@ -0,0 +1,127 @@
+package Encode::MIME::Header::ISO_2022_JP;
+
+use strict;
+use base qw(Encode::MIME::Header);
+
+$Encode::Encoding{'MIME-Header-ISO_2022_JP'}
+ = bless {encode => 'B', bpl => 76, Name => 'MIME-Header-ISO_2022_JP'}
+ => __PACKAGE__;
+
+use constant HEAD => '=?ISO-2022-JP?B?';
+use constant TAIL => '?=';
+
+use Encode::CJKConstants qw(%RE);
+
+our $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+
+# I owe the below codes totally to
+# Jcode by Dan Kogai & http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
+
+sub encode {
+ my $self = shift;
+ my $str = shift;
+
+ utf8::encode($str) if( Encode::is_utf8($str) );
+ Encode::from_to($str, 'utf8', 'euc-jp');
+
+ my($trailing_crlf) = ($str =~ /(\n|\r|\x0d\x0a)$/o);
+
+ $str = _mime_unstructured_header($str, $self->{bpl});
+
+ not $trailing_crlf and $str =~ s/(\n|\r|\x0d\x0a)$//o;
+
+ return $str;
+}
+
+
+sub _mime_unstructured_header {
+ my ($oldheader, $bpl) = @_;
+ my $crlf = $oldheader =~ /\n$/;
+ my($header, @words, @wordstmp, $i) = ('');
+
+ $oldheader =~ s/\s+$//;
+
+ @wordstmp = split /\s+/, $oldheader;
+
+ for ($i = 0; $i < $#wordstmp; $i++){
+ if( $wordstmp[$i] !~ /^[\x21-\x7E]+$/ and $wordstmp[$i + 1] !~ /^[\x21-\x7E]+$/){
+ $wordstmp[$i + 1] = "$wordstmp[$i] $wordstmp[$i + 1]";
+ }
+ else{
+ push(@words, $wordstmp[$i]);
+ }
+ }
+
+ push(@words, $wordstmp[-1]);
+
+ for my $word (@words){
+ if ($word =~ /^[\x21-\x7E]+$/) {
+ $header =~ /(?:.*\n)*(.*)/;
+ if (length($1) + length($word) > $bpl) {
+ $header .= "\n $word";
+ }
+ else{
+ $header .= $word;
+ }
+ }
+ else{
+ $header = _add_encoded_word($word, $header, $bpl);
+ }
+
+ $header =~ /(?:.*\n)*(.*)/;
+
+ if(length($1) == $bpl){
+ $header .= "\n ";
+ }
+ else {
+ $header .= ' ';
+ }
+ }
+
+ $header =~ s/\n? $//mg;
+
+ $crlf ? "$header\n" : $header;
+}
+
+
+sub _add_encoded_word {
+ my($str, $line, $bpl) = @_;
+ my $result = '';
+
+ while( length($str) ){
+ my $target = $str;
+ $str = '';
+
+ if(length($line) + 22 + ($target =~ /^(?:$RE{EUC_0212}|$RE{EUC_C})/o) * 8 > $bpl){
+ $line =~ s/[ \t\n\r]*$/\n/;
+ $result .= $line;
+ $line = ' ';
+ }
+
+ while(1){
+ my $iso_2022_jp = $target;
+ Encode::from_to($iso_2022_jp, 'euc-jp', 'iso-2022-jp');
+
+ my $encoded
+ = HEAD . MIME::Base64::encode_base64($iso_2022_jp, '') . TAIL;
+
+ if(length($encoded) + length($line) > $bpl){
+ $target =~ s/($RE{EUC_0212}|$RE{EUC_KANA}|$RE{EUC_C}|$RE{ASCII})$//o;
+ $str = $1 . $str;
+ }
+ else{
+ $line .= $encoded;
+ last;
+ }
+ }
+
+ }
+
+ $result . $line;
+}
+
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/Makefile_PL.e2x b/Master/tlpkg/tlperl/lib/Encode/Makefile_PL.e2x
new file mode 100644
index 00000000000..3bca0bff52b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Makefile_PL.e2x
@@ -0,0 +1,180 @@
+#
+# This file is auto-generated by:
+# enc2xs version $_Version_
+# $_Now_
+#
+use 5.7.2;
+use strict;
+use ExtUtils::MakeMaker;
+use Config;
+
+# Please edit the following to the taste!
+my $name = '$_Name_';
+my %tables = (
+ $_Name__t => [ $_TableFiles_ ],
+ );
+
+#### DO NOT EDIT BEYOND THIS POINT!
+require File::Spec;
+my ($enc2xs, $encode_h) = ();
+PATHLOOP:
+for my $d (@Config{qw/bin sitebin vendorbin/},
+ (split /$Config{path_sep}/o, $ENV{PATH})){
+ for my $f (qw/enc2xs enc2xs5.7.3/){
+ my $path = File::Spec->catfile($d, $f);
+ -r $path and $enc2xs = $path and last PATHLOOP;
+ }
+}
+$enc2xs or die "enc2xs not found!";
+print "enc2xs is $enc2xs\n";
+my %encode_h = ();
+for my $d (@INC){
+ my $dir = File::Spec->catfile($d, "Encode");
+ my $file = File::Spec->catfile($dir, "encode.h");
+ -f $file and $encode_h{$dir} = -M $file;
+}
+%encode_h or die "encode.h not found!";
+# find the latest one
+($encode_h) = sort {$encode_h{$b} <=> $encode_h{$a}} keys %encode_h;
+print "encode.h is at $encode_h\n";
+
+WriteMakefile(
+ INC => "-I$encode_h",
+#### END_OF_HEADER -- DO NOT EDIT THIS LINE BY HAND! ####
+ NAME => 'Encode::'.$name,
+ VERSION_FROM => "$name.pm",
+ OBJECT => '$(O_FILES)',
+ 'dist' => {
+ COMPRESS => 'gzip -9f',
+ SUFFIX => 'gz',
+ DIST_DEFAULT => 'all tardist',
+ },
+ MAN3PODS => {},
+ PREREQ_PM => {
+ 'Encode' => "1.41",
+ },
+ # OS 390 winges about line numbers > 64K ???
+ XSOPT => '-nolinenumbers',
+ );
+
+package MY;
+
+sub post_initialize
+{
+ my ($self) = @_;
+ my %o;
+ my $x = $self->{'OBJ_EXT'};
+ # Add the table O_FILES
+ foreach my $e (keys %tables)
+ {
+ $o{$e.$x} = 1;
+ }
+ $o{"$name$x"} = 1;
+ $self->{'O_FILES'} = [sort keys %o];
+ my @files = ("$name.xs");
+ $self->{'C'} = ["$name.c"];
+ # The next two lines to make MacPerl Happy -- dankogai via pudge
+ $self->{SOURCE} .= " $name.c"
+ if $^O eq 'MacOS' && $self->{SOURCE} !~ /\b$name\.c\b/;
+ # $self->{'H'} = [$self->catfile($self->updir,'encode.h')];
+ my %xs;
+ foreach my $table (keys %tables) {
+ push (@{$self->{'C'}},"$table.c");
+ # Do NOT add $table.h etc. to H_FILES unless we own up as to how they
+ # get built.
+ foreach my $ext (qw($(OBJ_EXT) .c .h .exh .fnm)) {
+ push (@files,$table.$ext);
+ }
+ }
+ $self->{'XS'} = { "$name.xs" => "$name.c" };
+ $self->{'clean'}{'FILES'} .= join(' ',@files);
+ open(XS,">$name.xs") || die "Cannot open $name.xs:$!";
+ print XS <<'END';
+#include <EXTERN.h>
+#include <perl.h>
+#include <XSUB.h>
+#define U8 U8
+#include "encode.h"
+END
+ foreach my $table (keys %tables) {
+ print XS qq[#include "${table}.h"\n];
+ }
+ print XS <<"END";
+
+static void
+Encode_XSEncoding(pTHX_ encode_t *enc)
+{
+ dSP;
+ HV *stash = gv_stashpv("Encode::XS", TRUE);
+ SV *sv = sv_bless(newRV_noinc(newSViv(PTR2IV(enc))),stash);
+ int i = 0;
+ PUSHMARK(sp);
+ XPUSHs(sv);
+ while (enc->name[i])
+ {
+ const char *name = enc->name[i++];
+ XPUSHs(sv_2mortal(newSVpvn(name,strlen(name))));
+ }
+ PUTBACK;
+ call_pv("Encode::define_encoding",G_DISCARD);
+ SvREFCNT_dec(sv);
+}
+
+MODULE = Encode::$name PACKAGE = Encode::$name
+PROTOTYPES: DISABLE
+BOOT:
+{
+END
+ foreach my $table (keys %tables) {
+ print XS qq[#include "${table}.exh"\n];
+ }
+ print XS "}\n";
+ close(XS);
+ return "# Built $name.xs\n\n";
+}
+
+sub postamble
+{
+ my $self = shift;
+ my $dir = "."; # $self->catdir('Encode');
+ my $str = "# $name\$(OBJ_EXT) depends on .h and .exh files not .c files - but all written by enc2xs\n";
+ $str .= "$name.c : $name.xs ";
+ foreach my $table (keys %tables)
+ {
+ $str .= " $table.c";
+ }
+ $str .= "\n\n";
+ $str .= "$name\$(OBJ_EXT) : $name.c\n\n";
+
+ foreach my $table (keys %tables)
+ {
+ my $numlines = 1;
+ my $lengthsofar = length($str);
+ my $continuator = '';
+ $str .= "$table.c : Makefile.PL";
+ foreach my $file (@{$tables{$table}})
+ {
+ $str .= $continuator.' '.$self->catfile($dir,$file);
+ if ( length($str)-$lengthsofar > 128*$numlines )
+ {
+ $continuator .= " \\\n\t";
+ $numlines++;
+ } else {
+ $continuator = '';
+ }
+ }
+ my $plib = $self->{PERL_CORE} ? '"-I$(PERL_LIB)"' : '';
+ my $ucopts = '-"Q"';
+ $str .=
+ qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n};
+ open (FILELIST, ">$table.fnm")
+ || die "Could not open $table.fnm: $!";
+ foreach my $file (@{$tables{$table}})
+ {
+ print FILELIST $self->catfile($dir,$file) . "\n";
+ }
+ close(FILELIST);
+ }
+ return $str;
+}
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/PerlIO.pod b/Master/tlpkg/tlperl/lib/Encode/PerlIO.pod
new file mode 100644
index 00000000000..abd1f2d10a1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/PerlIO.pod
@@ -0,0 +1,167 @@
+=head1 NAME
+
+Encode::PerlIO -- a detailed document on Encode and PerlIO
+
+=head1 Overview
+
+It is very common to want to do encoding transformations when
+reading or writing files, network connections, pipes etc.
+If Perl is configured to use the new 'perlio' IO system then
+C<Encode> provides a "layer" (see L<PerlIO>) which can transform
+data as it is read or written.
+
+Here is how the blind poet would modernise the encoding:
+
+ use Encode;
+ open(my $iliad,'<:encoding(iso-8859-7)','iliad.greek');
+ open(my $utf8,'>:utf8','iliad.utf8');
+ my @epic = <$iliad>;
+ print $utf8 @epic;
+ close($utf8);
+ close($illiad);
+
+In addition, the new IO system can also be configured to read/write
+UTF-8 encoded characters (as noted above, this is efficient):
+
+ open(my $fh,'>:utf8','anything');
+ print $fh "Any \x{0021} string \N{SMILEY FACE}\n";
+
+Either of the above forms of "layer" specifications can be made the default
+for a lexical scope with the C<use open ...> pragma. See L<open>.
+
+Once a handle is open, its layers can be altered using C<binmode>.
+
+Without any such configuration, or if Perl itself is built using the
+system's own IO, then write operations assume that the file handle
+accepts only I<bytes> and will C<die> if a character larger than 255 is
+written to the handle. When reading, each octet from the handle becomes
+a byte-in-a-character. Note that this default is the same behaviour
+as bytes-only languages (including Perl before v5.6) would have,
+and is sufficient to handle native 8-bit encodings e.g. iso-8859-1,
+EBCDIC etc. and any legacy mechanisms for handling other encodings
+and binary data.
+
+In other cases, it is the program's responsibility to transform
+characters into bytes using the API above before doing writes, and to
+transform the bytes read from a handle into characters before doing
+"character operations" (e.g. C<lc>, C</\W+/>, ...).
+
+You can also use PerlIO to convert larger amounts of data you don't
+want to bring into memory. For example, to convert between ISO-8859-1
+(Latin 1) and UTF-8 (or UTF-EBCDIC in EBCDIC machines):
+
+ open(F, "<:encoding(iso-8859-1)", "data.txt") or die $!;
+ open(G, ">:utf8", "data.utf") or die $!;
+ while (<F>) { print G }
+
+ # Could also do "print G <F>" but that would pull
+ # the whole file into memory just to write it out again.
+
+More examples:
+
+ open(my $f, "<:encoding(cp1252)")
+ open(my $g, ">:encoding(iso-8859-2)")
+ open(my $h, ">:encoding(latin9)") # iso-8859-15
+
+See also L<encoding> for how to change the default encoding of the
+data in your script.
+
+=head1 How does it work?
+
+Here is a crude diagram of how filehandle, PerlIO, and Encode
+interact.
+
+ filehandle <-> PerlIO PerlIO <-> scalar (read/printed)
+ \ /
+ Encode
+
+When PerlIO receives data from either direction, it fills a buffer
+(currently with 1024 bytes) and passes the buffer to Encode.
+Encode tries to convert the valid part and passes it back to PerlIO,
+leaving invalid parts (usually a partial character) in the buffer.
+PerlIO then appends more data to the buffer, calls Encode again,
+and so on until the data stream ends.
+
+To do so, PerlIO always calls (de|en)code methods with CHECK set to 1.
+This ensures that the method stops at the right place when it
+encounters partial character. The following is what happens when
+PerlIO and Encode tries to encode (from utf8) more than 1024 bytes
+and the buffer boundary happens to be in the middle of a character.
+
+ A B C .... ~ \x{3000} ....
+ 41 42 43 .... 7E e3 80 80 ....
+ <- buffer --------------->
+ << encoded >>>>>>>>>>
+ <- next buffer ------
+
+Encode converts from the beginning to \x7E, leaving \xe3 in the buffer
+because it is invalid (partial character).
+
+Unfortunately, this scheme does not work well with escape-based
+encodings such as ISO-2022-JP.
+
+=head1 Line Buffering
+
+Now let's see what happens when you try to decode from ISO-2022-JP and
+the buffer ends in the middle of a character.
+
+ JIS208-ESC \x{5f3e}
+ A B C .... ~ \e $ B |DAN | ....
+ 41 42 43 .... 7E 1b 24 41 43 46 ....
+ <- buffer --------------------------->
+ << encoded >>>>>>>>>>>>>>>>>>>>>>>
+
+As you see, the next buffer begins with \x43. But \x43 is 'C' in
+ASCII, which is wrong in this case because we are now in JISX 0208
+area so it has to convert \x43\x46, not \x43. Unlike utf8 and EUC,
+in escape-based encodings you can't tell if a given octet is a whole
+character or just part of it.
+
+Fortunately PerlIO also supports line buffer if you tell PerlIO to use
+one instead of fixed buffer. Since ISO-2022-JP is guaranteed to revert to ASCII at the end of the line, partial
+character will never happen when line buffer is used.
+
+To tell PerlIO to use line buffer, implement -E<gt>needs_lines method
+for your encoding object. See L<Encode::Encoding> for details.
+
+Thanks to these efforts most encodings that come with Encode support
+PerlIO but that still leaves following encodings.
+
+ iso-2022-kr
+ MIME-B
+ MIME-Header
+ MIME-Q
+
+Fortunately iso-2022-kr is hardly used (according to Jungshik) and
+MIME-* are very unlikely to be fed to PerlIO because they are for mail
+headers. See L<Encode::MIME::Header> for details.
+
+=head2 How can I tell whether my encoding fully supports PerlIO ?
+
+As of this writing, any encoding whose class belongs to Encode::XS and
+Encode::Unicode works. The Encode module has a C<perlio_ok> method
+which you can use before applying PerlIO encoding to the filehandle.
+Here is an example:
+
+ my $use_perlio = perlio_ok($enc);
+ my $layer = $use_perlio ? "<:raw" : "<:encoding($enc)";
+ open my $fh, $layer, $file or die "$file : $!";
+ while(<$fh>){
+ $_ = decode($enc, $_) unless $use_perlio;
+ # ....
+ }
+
+=head1 SEE ALSO
+
+L<Encode::Encoding>,
+L<Encode::Supported>,
+L<Encode::PerlIO>,
+L<encoding>,
+L<perlebcdic>,
+L<perlfunc/open>,
+L<perlunicode>,
+L<utf8>,
+the Perl Unicode Mailing List E<lt>perl-unicode@perl.orgE<gt>
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/README.e2x b/Master/tlpkg/tlperl/lib/Encode/README.e2x
new file mode 100644
index 00000000000..28a31a655c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/README.e2x
@@ -0,0 +1,31 @@
+Encode::$_Name_ version 0.1
+========
+
+NAME
+ Encode::$_Name_ - <describe encoding>
+
+SYNOPSIS
+ use Encode::$_Name_;
+ #<put more words here>
+ABSTRACT
+ <fill this in>
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+DEPENDENCIES
+
+This module requires perl version 5.7.3 or later.
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2002 Your Name <your@address.domain>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
diff --git a/Master/tlpkg/tlperl/lib/Encode/Supported.pod b/Master/tlpkg/tlperl/lib/Encode/Supported.pod
new file mode 100644
index 00000000000..651f7e6ed4f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Supported.pod
@@ -0,0 +1,890 @@
+=head1 NAME
+
+Encode::Supported -- Encodings supported by Encode
+
+=head1 DESCRIPTION
+
+=head2 Encoding Names
+
+Encoding names are case insensitive. White space in names
+is ignored. In addition, an encoding may have aliases.
+Each encoding has one "canonical" name. The "canonical"
+name is chosen from the names of the encoding by picking
+the first in the following sequence (with a few exceptions).
+
+=over 4
+
+=item *
+
+The name used by the Perl community. That includes 'utf8' and 'ascii'.
+Unlike aliases, canonical names directly reach the method so such
+frequently used words like 'utf8' don't need to do alias lookups.
+
+=item *
+
+The MIME name as defined in IETF RFCs. This includes all "iso-"s.
+
+=item *
+
+The name in the IANA registry.
+
+=item *
+
+The name used by the organization that defined it.
+
+=back
+
+In case I<de jure> canonical names differ from that of the Encode
+module, they are always aliased if it ever be implemented. So you can
+safely tell if a given encoding is implemented or not just by passing
+the canonical name.
+
+Because of all the alias issues, and because in the general case
+encodings have state, "Encode" uses an encoding object internally
+once an operation is in progress.
+
+=head1 Supported Encodings
+
+As of Perl 5.8.0, at least the following encodings are recognized.
+Note that unless otherwise specified, they are all case insensitive
+(via alias) and all occurrence of spaces are replaced with '-'.
+In other words, "ISO 8859 1" and "iso-8859-1" are identical.
+
+Encodings are categorized and implemented in several different modules
+but you don't have to C<use Encode::XX> to make them available for
+most cases. Encode.pm will automatically load those modules on demand.
+
+=head2 Built-in Encodings
+
+The following encodings are always available.
+
+ Canonical Aliases Comments & References
+ ----------------------------------------------------------------
+ ascii US-ascii ISO-646-US [ECMA]
+ ascii-ctrl Special Encoding
+ iso-8859-1 latin1 [ISO]
+ null Special Encoding
+ utf8 UTF-8 [RFC2279]
+ ----------------------------------------------------------------
+
+I<null> and I<ascii-ctrl> are special. "null" fails for all character
+so when you set fallback mode to PERLQQ, HTMLCREF or XMLCREF, ALL
+CHARACTERS will fall back to character references. Ditto for
+"ascii-ctrl" except for control characters. For fallback modes, see
+L<Encode>.
+
+=head2 Encode::Unicode -- other Unicode encodings
+
+Unicode coding schemes other than native utf8 are supported by
+Encode::Unicode, which will be autoloaded on demand.
+
+ ----------------------------------------------------------------
+ UCS-2BE UCS-2, iso-10646-1 [IANA, UC]
+ UCS-2LE [UC]
+ UTF-16 [UC]
+ UTF-16BE [UC]
+ UTF-16LE [UC]
+ UTF-32 [UC]
+ UTF-32BE UCS-4 [UC]
+ UTF-32LE [UC]
+ UTF-7 [RFC2152]
+ ----------------------------------------------------------------
+
+To find how (UCS-2|UTF-(16|32))(LE|BE)? differ from one another,
+see L<Encode::Unicode>.
+
+UTF-7 is a special encoding which "re-encodes" UTF-16BE into a 7-bit
+encoding. It is implemented seperately by Encode::Unicode::UTF7.
+
+=head2 Encode::Byte -- Extended ASCII
+
+Encode::Byte implements most single-byte encodings except for
+Symbols and EBCDIC. The following encodings are based on single-byte
+encodings implemented as extended ASCII. Most of them map
+\x80-\xff (upper half) to non-ASCII characters.
+
+=over 4
+
+=item ISO-8859 and corresponding vendor mappings
+
+Since there are so many, they are presented in table format with
+languages and corresponding encoding names by vendors. Note that
+the table is sorted in order of ISO-8859 and the corresponding vendor
+mappings are slightly different from that of ISO. See
+L<http://czyborra.com/charsets/iso8859.html> for details.
+
+ Lang/Regions ISO/Other Std. DOS Windows Macintosh Others
+ ----------------------------------------------------------------
+ N. America (ASCII) cp437 AdobeStandardEncoding
+ cp863 (DOSCanadaF)
+ W. Europe iso-8859-1 cp850 cp1252 MacRoman nextstep
+ hp-roman8
+ cp860 (DOSPortuguese)
+ Cntrl. Europe iso-8859-2 cp852 cp1250 MacCentralEurRoman
+ MacCroatian
+ MacRomanian
+ MacRumanian
+ Latin3[1] iso-8859-3
+ Latin4[2] iso-8859-4
+ Cyrillics iso-8859-5 cp855 cp1251 MacCyrillic
+ (See also next section) cp866 MacUkrainian
+ Arabic iso-8859-6 cp864 cp1256 MacArabic
+ cp1006 MacFarsi
+ Greek iso-8859-7 cp737 cp1253 MacGreek
+ cp869 (DOSGreek2)
+ Hebrew iso-8859-8 cp862 cp1255 MacHebrew
+ Turkish iso-8859-9 cp857 cp1254 MacTurkish
+ Nordics iso-8859-10 cp865
+ cp861 MacIcelandic
+ MacSami
+ Thai iso-8859-11[3] cp874 MacThai
+ (iso-8859-12 is nonexistent. Reserved for Indics?)
+ Baltics iso-8859-13 cp775 cp1257
+ Celtics iso-8859-14
+ Latin9 [4] iso-8859-15
+ Latin10 iso-8859-16
+ Vietnamese viscii cp1258 MacVietnamese
+ ----------------------------------------------------------------
+
+ [1] Esperanto, Maltese, and Turkish. Turkish is now on 8859-9.
+ [2] Baltics. Now on 8859-10, except for Latvian.
+ [3] TIS 620 + Non-Breaking Space (0xA0 / U+00A0)
+ [4] Nicknamed Latin0; the Euro sign as well as French and Finnish
+ letters that are missing from 8859-1 were added.
+
+All cp* are also available as ibm-*, ms-*, and windows-* . See also
+L<http://czyborra.com/charsets/codepages.html>.
+
+Macintosh encodings don't seem to be registered in such entities as
+IANA. "Canonical" names in Encode are based upon Apple's Tech Note
+1150. See L<http://developer.apple.com/technotes/tn/tn1150.html>
+for details.
+
+=item KOI8 - De Facto Standard for the Cyrillic world
+
+Though ISO-8859 does have ISO-8859-5, the KOI8 series is far more
+popular in the Net. L<Encode> comes with the following KOI charsets.
+For gory details, see L<http://czyborra.com/charsets/cyrillic.html>
+
+ ----------------------------------------------------------------
+ koi8-f
+ koi8-r cp878 [RFC1489]
+ koi8-u [RFC2319]
+ ----------------------------------------------------------------
+
+=item gsm0338 - Hentai Latin 1
+
+GSM0338 is for GSM handsets. Though it shares alphanumerals with
+ASCII, control character ranges and other parts are mapped very
+differently, mainly to store Greek characters. There are also escape
+sequences (starting with 0x1B) to cover e.g. the Euro sign. Some
+special cases like a trailing 0x00 byte or a lone 0x1B byte are not
+well-defined and decode() will return an empty string for them.
+One possible workaround is
+
+ $gsm =~ s/\x00\z/\x00\x00/;
+ $uni = decode("gsm0338", $gsm);
+ $uni .= "\xA0" if $gsm =~ /\x1B\z/;
+
+Note that the Encode implementation of GSM0338 does not implement the
+reuse of Latin capital letters as Greek capital letters (for example,
+the 0x5A is U+005A (LATIN CAPITAL LETTER Z), not U+0396 (GREEK CAPITAL
+LETTER ZETA).
+
+The GSM0338 is also covered in Encode::Byte even though it is not
+an "extended ASCII" encoding.
+
+=back
+
+=head2 CJK: Chinese, Japanese, Korean (Multibyte)
+
+Note that Vietnamese is listed above. Also read "Encoding vs Charset"
+below. Also note that these are implemented in distinct modules by
+countries, due to the size concerns (simplified Chinese is mapped
+to 'CN', continental China, while traditional Chinese is mapped to
+'TW', Taiwan). Please refer to their respective documentation pages.
+
+=over 4
+
+=item Encode::CN -- Continental China
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ euc-cn [1] MacChineseSimp
+ (gbk) cp936 [2]
+ gb12345-raw { GB12345 without CES }
+ gb2312-raw { GB2312 without CES }
+ hz
+ iso-ir-165
+ ----------------------------------------------------------------
+
+ [1] GB2312 is aliased to this. See L<Microsoft-related naming mess>
+ [2] gbk is aliased to this. See L<Microsoft-related naming mess>
+
+=item Encode::JP -- Japan
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ euc-jp
+ shiftjis cp932 macJapanese
+ 7bit-jis
+ iso-2022-jp [RFC1468]
+ iso-2022-jp-1 [RFC2237]
+ jis0201-raw { JIS X 0201 (roman + halfwidth kana) without CES }
+ jis0208-raw { JIS X 0208 (Kanji + fullwidth kana) without CES }
+ jis0212-raw { JIS X 0212 (Extended Kanji) without CES }
+ ----------------------------------------------------------------
+
+=item Encode::KR -- Korea
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ euc-kr MacKorean [RFC1557]
+ cp949 [1]
+ iso-2022-kr [RFC1557]
+ johab [KS X 1001:1998, Annex 3]
+ ksc5601-raw { KSC5601 without CES }
+ ----------------------------------------------------------------
+
+ [1] ks_c_5601-1987, (x-)?windows-949, and uhc are aliased to this.
+ See below.
+
+=item Encode::TW -- Taiwan
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ big5-eten cp950 MacChineseTrad {big5 aliased to big5-eten}
+ big5-hkscs
+ ----------------------------------------------------------------
+
+=item Encode::HanExtra -- More Chinese via CPAN
+
+Due to the size concerns, additional Chinese encodings below are
+distributed separately on CPAN, under the name Encode::HanExtra.
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ big5ext CMEX's Big5e Extension
+ big5plus CMEX's Big5+ Extension
+ cccii Chinese Character Code for Information Interchange
+ euc-tw EUC (Extended Unix Character)
+ gb18030 GBK with Traditional Characters
+ ----------------------------------------------------------------
+
+=item Encode::JIS2K -- JIS X 0213 encodings via CPAN
+
+Due to size concerns, additional Japanese encodings below are
+distributed separately on CPAN, under the name Encode::JIS2K.
+
+ Standard DOS/Win Macintosh Comment/Reference
+ ----------------------------------------------------------------
+ euc-jisx0213
+ shiftjisx0123
+ iso-2022-jp-3
+ jis0213-1-raw
+ jis0213-2-raw
+ ----------------------------------------------------------------
+
+=back
+
+=head2 Miscellaneous encodings
+
+=over 4
+
+=item Encode::EBCDIC
+
+See L<perlebcdic> for details.
+
+ ----------------------------------------------------------------
+ cp37
+ cp500
+ cp875
+ cp1026
+ cp1047
+ posix-bc
+ ----------------------------------------------------------------
+
+=item Encode::Symbols
+
+For symbols and dingbats.
+
+ ----------------------------------------------------------------
+ symbol
+ dingbats
+ MacDingbats
+ AdobeZdingbat
+ AdobeSymbol
+ ----------------------------------------------------------------
+
+=item Encode::MIME::Header
+
+Strictly speaking, MIME header encoding documented in RFC 2047 is more
+of encapsulation than encoding. However, their support in modern
+world is imperative so they are supported.
+
+ ----------------------------------------------------------------
+ MIME-Header [RFC2047]
+ MIME-B [RFC2047]
+ MIME-Q [RFC2047]
+ ----------------------------------------------------------------
+
+=item Encode::Guess
+
+This one is not a name of encoding but a utility that lets you pick up
+the most appropriate encoding for a data out of given I<suspects>. See
+L<Encode::Guess> for details.
+
+=back
+
+=head1 Unsupported encodings
+
+The following encodings are not supported as yet; some because they
+are rarely used, some because of technical difficulties. They may
+be supported by external modules via CPAN in the future, however.
+
+=over 4
+
+=item ISO-2022-JP-2 [RFC1554]
+
+Not very popular yet. Needs Unicode Database or equivalent to
+implement encode() (because it includes JIS X 0208/0212, KSC5601, and
+GB2312 simultaneously, whose code points in Unicode overlap. So you
+need to lookup the database to determine to what character set a given
+Unicode character should belong).
+
+=item ISO-2022-CN [RFC1922]
+
+Not very popular. Needs CNS 11643-1 and -2 which are not available in
+this module. CNS 11643 is supported (via euc-tw) in Encode::HanExtra.
+Autrijus Tang may add support for this encoding in his module in future.
+
+=item Various HP-UX encodings
+
+The following are unsupported due to the lack of mapping data.
+
+ '8' - arabic8, greek8, hebrew8, kana8, thai8, and turkish8
+ '15' - japanese15, korean15, and roi15
+
+=item Cyrillic encoding ISO-IR-111
+
+Anton Tagunov doubts its usefulness.
+
+=item ISO-8859-8-1 [Hebrew]
+
+None of the Encode team knows Hebrew enough (ISO-8859-8, cp1255 and
+MacHebrew are supported because and just because there were mappings
+available at L<http://www.unicode.org/>). Contributions welcome.
+
+=item ISIRI 3342, Iran System, ISIRI 2900 [Farsi]
+
+Ditto.
+
+=item Thai encoding TCVN
+
+Ditto.
+
+=item Vietnamese encodings VPS
+
+Though Jungshik Shin has reported that Mozilla supports this encoding,
+it was too late before 5.8.0 for us to add it. In the future, it
+may be available via a separate module. See
+L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.uf>
+and
+L<http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ut>
+if you are interested in helping us.
+
+=item Various Mac encodings
+
+The following are unsupported due to the lack of mapping data.
+
+ MacArmenian, MacBengali, MacBurmese, MacEthiopic
+ MacExtArabic, MacGeorgian, MacKannada, MacKhmer
+ MacLaotian, MacMalayalam, MacMongolian, MacOriya
+ MacSinhalese, MacTamil, MacTelugu, MacTibetan
+ MacVietnamese
+
+The rest which are already available are based upon the vendor mappings
+at L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/> .
+
+=item (Mac) Indic encodings
+
+The maps for the following are available at L<http://www.unicode.org/>
+but remain unsupport because those encodings need algorithmical
+approach, currently unsupported by F<enc2xs>:
+
+ MacDevanagari
+ MacGurmukhi
+ MacGujarati
+
+For details, please see C<Unicode mapping issues and notes:> at
+L<http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/DEVANAGA.TXT> .
+
+I believe this issue is prevalent not only for Mac Indics but also in
+other Indic encodings, but the above were the only Indic encodings
+maps that I could find at L<http://www.unicode.org/> .
+
+=back
+
+=head1 Encoding vs. Charset -- terminology
+
+We are used to using the term (character) I<encoding> and I<character
+set> interchangeably. But just as confusing the terms byte and
+character is dangerous and the terms should be differentiated when
+needed, we need to differentiate I<encoding> and I<character set>.
+
+To understand that, here is a description of how we make computers
+grok our characters.
+
+=over 4
+
+=item *
+
+First we start with which characters to include. We call this
+collection of characters I<character repertoire>.
+
+=item *
+
+Then we have to give each character a unique ID so your computer can
+tell the difference between 'a' and 'A'. This itemized character
+repertoire is now a I<character set>.
+
+=item *
+
+If your computer can grow the character set without further
+processing, you can go ahead and use it. This is called a I<coded
+character set> (CCS) or I<raw character encoding>. ASCII is used this
+way for most cases.
+
+=item *
+
+But in many cases, especially multi-byte CJK encodings, you have to
+tweak a little more. Your network connection may not accept any data
+with the Most Significant Bit set, and your computer may not be able to
+tell if a given byte is a whole character or just half of it. So you
+have to I<encode> the character set to use it.
+
+A I<character encoding scheme> (CES) determines how to encode a given
+character set, or a set of multiple character sets. 7bit ISO-2022 is
+an example of a CES. You switch between character sets via I<escape
+sequences>.
+
+=back
+
+Technically, or mathematically, speaking, a character set encoded in
+such a CES that maps character by character may form a CCS. EUC is such
+an example. The CES of EUC is as follows:
+
+=over 4
+
+=item *
+
+Map ASCII unchanged.
+
+=item *
+
+Map such a character set that consists of 94 or 96 powered by N
+members by adding 0x80 to each byte.
+
+=item *
+
+You can also use 0x8e and 0x8f to indicate that the following sequence of
+characters belongs to yet another character set. To each following byte
+is added the value 0x80.
+
+=back
+
+By carefully looking at the encoded byte sequence, you can find that the
+byte sequence conforms a unique number. In that sense, EUC is a CCS
+generated by a CES above from up to four CCS (complicated?). UTF-8
+falls into this category. See L<perlUnicode/"UTF-8"> to find out how
+UTF-8 maps Unicode to a byte sequence.
+
+You may also have found out by now why 7bit ISO-2022 cannot comprise
+a CCS. If you look at a byte sequence \x21\x21, you can't tell if
+it is two !'s or IDEOGRAPHIC SPACE. EUC maps the latter to \xA1\xA1
+so you have no trouble differentiating between "!!". and S<" ">.
+
+=head1 Encoding Classification (by Anton Tagunov and Dan Kogai)
+
+This section tries to classify the supported encodings by their
+applicability for information exchange over the Internet and to
+choose the most suitable aliases to name them in the context of
+such communication.
+
+=over 4
+
+=item *
+
+To (en|de)code encodings marked by C<(**)>, you need
+C<Encode::HanExtra>, available from CPAN.
+
+=back
+
+Encoding names
+
+ US-ASCII UTF-8 ISO-8859-* KOI8-R
+ Shift_JIS EUC-JP ISO-2022-JP ISO-2022-JP-1
+ EUC-KR Big5 GB2312
+
+are registered with IANA as preferred MIME names and may
+be used over the Internet.
+
+C<Shift_JIS> has been officialized by JIS X 0208:1997.
+L<Microsoft-related naming mess> gives details.
+
+C<GB2312> is the IANA name for C<EUC-CN>.
+See L<Microsoft-related naming mess> for details.
+
+C<GB_2312-80> I<raw> encoding is available as C<gb2312-raw>
+with Encode. See L<Encode::CN> for details.
+
+ EUC-CN
+ KOI8-U [RFC2319]
+
+have not been registered with IANA (as of March 2002) but
+seem to be supported by major web browsers.
+The IANA name for C<EUC-CN> is C<GB2312>.
+
+ KS_C_5601-1987
+
+is heavily misused.
+See L<Microsoft-related naming mess> for details.
+
+C<KS_C_5601-1987> I<raw> encoding is available as C<kcs5601-raw>
+with Encode. See L<Encode::KR> for details.
+
+ UTF-16 UTF-16BE UTF-16LE
+
+are IANA-registered C<charset>s. See [RFC 2781] for details.
+Jungshik Shin reports that UTF-16 with a BOM is well accepted
+by MS IE 5/6 and NS 4/6. Beware however that
+
+=over 4
+
+=item *
+
+C<UTF-16> support in any software you're going to be
+using/interoperating with has probably been less tested
+then C<UTF-8> support
+
+=item *
+
+C<UTF-8> coded data seamlessly passes traditional
+command piping (C<cat>, C<more>, etc.) while C<UTF-16> coded
+data is likely to cause confusion (with its zero bytes,
+for example)
+
+=item *
+
+it is beyond the power of words to describe the way HTML browsers
+encode non-C<ASCII> form data. To get a general impression, visit
+L<http://ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html>.
+While encoding of form data has stabilized for C<UTF-8> encoded pages
+(at least IE 5/6, NS 6, and Opera 6 behave consistently), be sure to
+expect fun (and cross-browser discrepancies) with C<UTF-16> encoded
+pages!
+
+=back
+
+The rule of thumb is to use C<UTF-8> unless you know what
+you're doing and unless you really benefit from using C<UTF-16>.
+
+ ISO-IR-165 [RFC1345]
+ VISCII
+ GB 12345
+ GB 18030 (**) (see links bellow)
+ EUC-TW (**)
+
+are totally valid encodings but not registered at IANA.
+The names under which they are listed here are probably the
+most widely-known names for these encodings and are recommended
+names.
+
+ BIG5PLUS (**)
+
+is a proprietary name.
+
+=head2 Microsoft-related naming mess
+
+Microsoft products misuse the following names:
+
+=over 4
+
+=item KS_C_5601-1987
+
+Microsoft extension to C<EUC-KR>.
+
+Proper names: C<CP949>, C<UHC>, C<x-windows-949> (as used by Mozilla).
+
+See L<http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0033.html>
+for details.
+
+Encode aliases C<KS_C_5601-1987> to C<cp949> to reflect this common
+misusage. I<Raw> C<KS_C_5601-1987> encoding is available as
+C<kcs5601-raw>.
+
+See L<Encode::KR> for details.
+
+=item GB2312
+
+Microsoft extension to C<EUC-CN>.
+
+Proper names: C<CP936>, C<GBK>.
+
+C<GB2312> has been registered in the C<EUC-CN> meaning at
+IANA. This has partially repaired the situation: Microsoft's
+C<GB2312> has become a superset of the official C<GB2312>.
+
+Encode aliases C<GB2312> to C<euc-cn> in full agreement with
+IANA registration. C<cp936> is supported separately.
+I<Raw> C<GB_2312-80> encoding is available as C<gb2312-raw>.
+
+See L<Encode::CN> for details.
+
+=item Big5
+
+Microsoft extension to C<Big5>.
+
+Proper name: C<CP950>.
+
+Encode separately supports C<Big5> and C<cp950>.
+
+=item Shift_JIS
+
+Microsoft's understanding of C<Shift_JIS>.
+
+JIS has not endorsed the full Microsoft standard however.
+The official C<Shift_JIS> includes only JIS X 0201 and JIS X 0208
+character sets, while Microsoft has always used C<Shift_JIS>
+to encode a wider character repertoire. See C<IANA> registration for
+C<Windows-31J>.
+
+As a historical predecessor, Microsoft's variant
+probably has more rights for the name, though it may be objected
+that Microsoft shouldn't have used JIS as part of the name
+in the first place.
+
+Unambiguous name: C<CP932>. C<IANA> name (also used by Mozilla, and
+provided as an alias by Encode): C<Windows-31J>.
+
+Encode separately supports C<Shift_JIS> and C<cp932>.
+
+=back
+
+=head1 Glossary
+
+=over 4
+
+=item character repertoire
+
+A collection of unique characters. A I<character> set in the strictest
+sense. At this stage, characters are not numbered.
+
+=item coded character set (CCS)
+
+A character set that is mapped in a way computers can use directly.
+Many character encodings, including EUC, fall in this category.
+
+=item character encoding scheme (CES)
+
+An algorithm to map a character set to a byte sequence. You don't
+have to be able to tell which character set a given byte sequence
+belongs. 7-bit ISO-2022 is a CES but it cannot be a CCS. EUC is an
+example of being both a CCS and CES.
+
+=item charset (in MIME context)
+
+has long been used in the meaning of C<encoding>, CES.
+
+While the word combination C<character set> has lost this meaning
+in MIME context since [RFC 2130], the C<charset> abbreviation has
+retained it. This is how [RFC 2277] and [RFC 2278] bless C<charset>:
+
+ This document uses the term "charset" to mean a set of rules for
+ mapping from a sequence of octets to a sequence of characters, such
+ as the combination of a coded character set and a character encoding
+ scheme; this is also what is used as an identifier in MIME "charset="
+ parameters, and registered in the IANA charset registry ... (Note
+ that this is NOT a term used by other standards bodies, such as ISO).
+ [RFC 2277]
+
+=item EUC
+
+Extended Unix Character. See ISO-2022.
+
+=item ISO-2022
+
+A CES that was carefully designed to coexist with ASCII. There are a 7
+bit version and an 8 bit version.
+
+The 7 bit version switches character set via escape sequence so it
+cannot form a CCS. Since this is more difficult to handle in programs
+than the 8 bit version, the 7 bit version is not very popular except for
+iso-2022-jp, the I<de facto> standard CES for e-mails.
+
+The 8 bit version can form a CCS. EUC and ISO-8859 are two examples
+thereof. Pre-5.6 perl could use them as string literals.
+
+=item UCS
+
+Short for I<Universal Character Set>. When you say just UCS, it means
+I<Unicode>.
+
+=item UCS-2
+
+ISO/IEC 10646 encoding form: Universal Character Set coded in two
+octets.
+
+=item Unicode
+
+A character set that aims to include all character repertoires of the
+world. Many character sets in various national as well as industrial
+standards have become, in a way, just subsets of Unicode.
+
+=item UTF
+
+Short for I<Unicode Transformation Format>. Determines how to map a
+Unicode character into a byte sequence.
+
+=item UTF-16
+
+A UTF in 16-bit encoding. Can either be in big endian or little
+endian. The big endian version is called UTF-16BE (equal to UCS-2 +
+surrogate support) and the little endian version is called UTF-16LE.
+
+=back
+
+=head1 See Also
+
+L<Encode>,
+L<Encode::Byte>,
+L<Encode::CN>, L<Encode::JP>, L<Encode::KR>, L<Encode::TW>,
+L<Encode::EBCDIC>, L<Encode::Symbol>
+L<Encode::MIME::Header>, L<Encode::Guess>
+
+=head1 References
+
+=over 4
+
+=item ECMA
+
+European Computer Manufacturers Association
+L<http://www.ecma.ch>
+
+=over 4
+
+=item ECMA-035 (eq C<ISO-2022>)
+
+L<http://www.ecma.ch/ecma1/STAND/ECMA-035.HTM>
+
+The specification of ISO-2022 is available from the link above.
+
+=back
+
+=item IANA
+
+Internet Assigned Numbers Authority
+L<http://www.iana.org/>
+
+=over 4
+
+=item Assigned Charset Names by IANA
+
+L<http://www.iana.org/assignments/character-sets>
+
+Most of the C<canonical names> in Encode derive from this list
+so you can directly apply the string you have extracted from MIME
+header of mails and web pages.
+
+=back
+
+=item ISO
+
+International Organization for Standardization
+L<http://www.iso.ch/>
+
+=item RFC
+
+Request For Comments -- need I say more?
+L<http://www.rfc-editor.org/>, L<http://www.rfc.net/>,
+L<http://www.faqs.org/rfcs/>
+
+=item UC
+
+Unicode Consortium
+L<http://www.unicode.org/>
+
+=over 4
+
+=item Unicode Glossary
+
+L<http://www.unicode.org/glossary/>
+
+The glossary of this document is based upon this site.
+
+=back
+
+=back
+
+=head2 Other Notable Sites
+
+=over 4
+
+=item czyborra.com
+
+L<http://czyborra.com/>
+
+Contains a lot of useful information, especially gory details of ISO
+vs. vendor mappings.
+
+=item CJK.inf
+
+L<http://www.oreilly.com/people/authors/lunde/cjk_inf.html>
+
+Somewhat obsolete (last update in 1996), but still useful. Also try
+
+L<ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf>
+
+You will find brief info on C<EUC-CN>, C<GBK> and mostly on C<GB 18030>.
+
+=item Jungshik Shin's Hangul FAQ
+
+L<http://jshin.net/faq>
+
+And especially its subject 8.
+
+L<http://jshin.net/faq/qa8.html>
+
+A comprehensive overview of the Korean (C<KS *>) standards.
+
+=item debian.org: "Introduction to i18n"
+
+A brief description for most of the mentioned CJK encodings is
+contained in
+L<http://www.debian.org/doc/manuals/intro-i18n/ch-codes.en.html>
+
+=back
+
+=head2 Offline sources
+
+=over 4
+
+=item C<CJKV Information Processing> by Ken Lunde
+
+CJKV Information Processing
+1999 O'Reilly & Associates, ISBN : 1-56592-224-7
+
+The modern successor of C<CJK.inf>.
+
+Features a comprehensive coverage of CJKV character sets and
+encodings along with many other issues faced by anyone trying
+to better support CJKV languages/scripts in all the areas of
+information processing.
+
+To purchase this book, visit
+L<http://www.oreilly.com/catalog/cjkvinfo/>
+or your favourite bookstore.
+
+=back
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Symbol.pm b/Master/tlpkg/tlperl/lib/Encode/Symbol.pm
new file mode 100644
index 00000000000..7ad8ca92c7d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Symbol.pm
@@ -0,0 +1,42 @@
+package Encode::Symbol;
+use Encode;
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Symbol - Symbol Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $symbol = encode("symbol", $utf8); # loads Encode::Symbol implicitly
+ $utf8 = decode("", $symbol); # ditto
+
+=head1 ABSTRACT
+
+This module implements symbol and dingbats encodings. Encodings
+supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ symbol
+ dingbats
+ AdobeZDingbat
+ AdobeSymbol
+ MacDingbats
+
+=head1 DESCRIPTION
+
+To find out how to use this module in detail, see L<Encode>.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/TW.pm b/Master/tlpkg/tlperl/lib/Encode/TW.pm
new file mode 100644
index 00000000000..2e1abc0c7f9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/TW.pm
@@ -0,0 +1,78 @@
+package Encode::TW;
+BEGIN {
+ if (ord("A") == 193) {
+ die "Encode::TW not supported on EBCDIC\n";
+ }
+}
+our $VERSION = do { my @r = (q$Revision: 2.0 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use Encode;
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::TW - Taiwan-based Chinese Encodings
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $big5 = encode("big5", $utf8); # loads Encode::TW implicitly
+ $utf8 = decode("big5", $big5); # ditto
+
+=head1 DESCRIPTION
+
+This module implements tradition Chinese charset encodings as used
+in Taiwan and Hong Kong.
+Encodings supported are as follows.
+
+ Canonical Alias Description
+ --------------------------------------------------------------------
+ big5-eten /\bbig-?5$/i Big5 encoding (with ETen extensions)
+ /\bbig5-?et(en)?$/i
+ /\btca-?big5$/i
+ big5-hkscs /\bbig5-?hk(scs)?$/i
+ /\bhk(scs)?-?big5$/i
+ Big5 + Cantonese characters in Hong Kong
+ MacChineseTrad Big5 + Apple Vendor Mappings
+ cp950 Code Page 950
+ = Big5 + Microsoft vendor mappings
+ --------------------------------------------------------------------
+
+To find out how to use this module in detail, see L<Encode>.
+
+=head1 NOTES
+
+Due to size concerns, C<EUC-TW> (Extended Unix Character), C<CCCII>
+(Chinese Character Code for Information Interchange), C<BIG5PLUS>
+(CMEX's Big5+) and C<BIG5EXT> (CMEX's Big5e) are distributed separately
+on CPAN, under the name L<Encode::HanExtra>. That module also contains
+extra China-based encodings.
+
+=head1 BUGS
+
+Since the original C<big5> encoding (1984) is not supported anywhere
+(glibc and DOS-based systems uses C<big5> to mean C<big5-eten>; Microsoft
+uses C<big5> to mean C<cp950>), a conscious decision was made to alias
+C<big5> to C<big5-eten>, which is the de facto superset of the original
+big5.
+
+The C<CNS11643> encoding files are not complete. For common C<CNS11643>
+manipulation, please use C<EUC-TW> in L<Encode::HanExtra>, which contains
+planes 1-7.
+
+The ASCII region (0x00-0x7f) is preserved for all encodings, even
+though this conflicts with mappings by the Unicode Consortium. See
+
+L<http://www.debian.or.jp/~kubota/unicode-symbols.html.en>
+
+to find out why it is implemented that way.
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Unicode.pm b/Master/tlpkg/tlperl/lib/Encode/Unicode.pm
new file mode 100644
index 00000000000..4d0c31d82d3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Unicode.pm
@@ -0,0 +1,268 @@
+package Encode::Unicode;
+
+use strict;
+use warnings;
+no warnings 'redefine';
+
+our $VERSION = do { my @r = (q$Revision: 2.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+#
+# Object Generator 8 transcoders all at once!
+#
+
+require Encode;
+
+our %BOM_Unknown = map {$_ => 1} qw(UTF-16 UTF-32);
+
+for my $name (qw(UTF-16 UTF-16BE UTF-16LE
+ UTF-32 UTF-32BE UTF-32LE
+ UCS-2BE UCS-2LE))
+{
+ my ($size, $endian, $ucs2, $mask);
+ $name =~ /^(\w+)-(\d+)(\w*)$/o;
+ if ($ucs2 = ($1 eq 'UCS')){
+ $size = 2;
+ }else{
+ $size = $2/8;
+ }
+ $endian = ($3 eq 'BE') ? 'n' : ($3 eq 'LE') ? 'v' : '' ;
+ $size == 4 and $endian = uc($endian);
+
+ $Encode::Encoding{$name} =
+ bless {
+ Name => $name,
+ size => $size,
+ endian => $endian,
+ ucs2 => $ucs2,
+ } => __PACKAGE__;
+}
+
+use base qw(Encode::Encoding);
+
+sub renew {
+ my $self = shift;
+ $BOM_Unknown{$self->name} or return $self;
+ my $clone = bless { %$self } => ref($self);
+ $clone->{renewed}++; # so the caller knows it is renewed.
+ return $clone;
+}
+
+# There used to be a perl implemntation of (en|de)code but with
+# XS version is ripe, perl version is zapped for optimal speed
+
+*decode = \&decode_xs;
+*encode = \&encode_xs;
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::Unicode -- Various Unicode Transformation Formats
+
+=cut
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $ucs2 = encode("UCS-2BE", $utf8);
+ $utf8 = decode("UCS-2BE", $ucs2);
+
+=head1 ABSTRACT
+
+This module implements all Character Encoding Schemes of Unicode that
+are officially documented by Unicode Consortium (except, of course,
+for UTF-8, which is a native format in perl).
+
+=over 4
+
+=item L<http://www.unicode.org/glossary/> says:
+
+I<Character Encoding Scheme> A character encoding form plus byte
+serialization. There are Seven character encoding schemes in Unicode:
+UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32 (UCS-4), UTF-32BE (UCS-4BE) and
+UTF-32LE (UCS-4LE), and UTF-7.
+
+Since UTF-7 is a 7-bit (re)encoded version of UTF-16BE, It is not part of
+Unicode's Character Encoding Scheme. It is separately implemented in
+Encode::Unicode::UTF7. For details see L<Encode::Unicode::UTF7>.
+
+=item Quick Reference
+
+ Decodes from ord(N) Encodes chr(N) to...
+ octet/char BOM S.P d800-dfff ord > 0xffff \x{1abcd} ==
+ ---------------+-----------------+------------------------------
+ UCS-2BE 2 N N is bogus Not Available
+ UCS-2LE 2 N N bogus Not Available
+ UTF-16 2/4 Y Y is S.P S.P BE/LE
+ UTF-16BE 2/4 N Y S.P S.P 0xd82a,0xdfcd
+ UTF-16LE 2 N Y S.P S.P 0x2ad8,0xcddf
+ UTF-32 4 Y - is bogus As is BE/LE
+ UTF-32BE 4 N - bogus As is 0x0001abcd
+ UTF-32LE 4 N - bogus As is 0xcdab0100
+ UTF-8 1-4 - - bogus >= 4 octets \xf0\x9a\af\8d
+ ---------------+-----------------+------------------------------
+
+=back
+
+=head1 Size, Endianness, and BOM
+
+You can categorize these CES by 3 criteria: size of each character,
+endianness, and Byte Order Mark.
+
+=head2 by size
+
+UCS-2 is a fixed-length encoding with each character taking 16 bits.
+It B<does not> support I<surrogate pairs>. When a surrogate pair
+is encountered during decode(), its place is filled with \x{FFFD}
+if I<CHECK> is 0, or the routine croaks if I<CHECK> is 1. When a
+character whose ord value is larger than 0xFFFF is encountered,
+its place is filled with \x{FFFD} if I<CHECK> is 0, or the routine
+croaks if I<CHECK> is 1.
+
+UTF-16 is almost the same as UCS-2 but it supports I<surrogate pairs>.
+When it encounters a high surrogate (0xD800-0xDBFF), it fetches the
+following low surrogate (0xDC00-0xDFFF) and C<desurrogate>s them to
+form a character. Bogus surrogates result in death. When \x{10000}
+or above is encountered during encode(), it C<ensurrogate>s them and
+pushes the surrogate pair to the output stream.
+
+UTF-32 (UCS-4) is a fixed-length encoding with each character taking 32 bits.
+Since it is 32-bit, there is no need for I<surrogate pairs>.
+
+=head2 by endianness
+
+The first (and now failed) goal of Unicode was to map all character
+repertoires into a fixed-length integer so that programmers are happy.
+Since each character is either a I<short> or I<long> in C, you have to
+pay attention to the endianness of each platform when you pass data
+to one another.
+
+Anything marked as BE is Big Endian (or network byte order) and LE is
+Little Endian (aka VAX byte order). For anything not marked either
+BE or LE, a character called Byte Order Mark (BOM) indicating the
+endianness is prepended to the string.
+
+CAVEAT: Though BOM in utf8 (\xEF\xBB\xBF) is valid, it is meaningless
+and as of this writing Encode suite just leave it as is (\x{FeFF}).
+
+=over 4
+
+=item BOM as integer when fetched in network byte order
+
+ 16 32 bits/char
+ -------------------------
+ BE 0xFeFF 0x0000FeFF
+ LE 0xFFeF 0xFFFe0000
+ -------------------------
+
+=back
+
+This modules handles the BOM as follows.
+
+=over 4
+
+=item *
+
+When BE or LE is explicitly stated as the name of encoding, BOM is
+simply treated as a normal character (ZERO WIDTH NO-BREAK SPACE).
+
+=item *
+
+When BE or LE is omitted during decode(), it checks if BOM is at the
+beginning of the string; if one is found, the endianness is set to
+what the BOM says. If no BOM is found, the routine dies.
+
+=item *
+
+When BE or LE is omitted during encode(), it returns a BE-encoded
+string with BOM prepended. So when you want to encode a whole text
+file, make sure you encode() the whole text at once, not line by line
+or each line, not file, will have a BOM prepended.
+
+=item *
+
+C<UCS-2> is an exception. Unlike others, this is an alias of UCS-2BE.
+UCS-2 is already registered by IANA and others that way.
+
+=back
+
+=head1 Surrogate Pairs
+
+To say the least, surrogate pairs were the biggest mistake of the
+Unicode Consortium. But according to the late Douglas Adams in I<The
+Hitchhiker's Guide to the Galaxy> Trilogy, C<In the beginning the
+Universe was created. This has made a lot of people very angry and
+been widely regarded as a bad move>. Their mistake was not of this
+magnitude so let's forgive them.
+
+(I don't dare make any comparison with Unicode Consortium and the
+Vogons here ;) Or, comparing Encode to Babel Fish is completely
+appropriate -- if you can only stick this into your ear :)
+
+Surrogate pairs were born when the Unicode Consortium finally
+admitted that 16 bits were not big enough to hold all the world's
+character repertoires. But they already made UCS-2 16-bit. What
+do we do?
+
+Back then, the range 0xD800-0xDFFF was not allocated. Let's split
+that range in half and use the first half to represent the C<upper
+half of a character> and the second half to represent the C<lower
+half of a character>. That way, you can represent 1024 * 1024 =
+1048576 more characters. Now we can store character ranges up to
+\x{10ffff} even with 16-bit encodings. This pair of half-character is
+now called a I<surrogate pair> and UTF-16 is the name of the encoding
+that embraces them.
+
+Here is a formula to ensurrogate a Unicode character \x{10000} and
+above;
+
+ $hi = ($uni - 0x10000) / 0x400 + 0xD800;
+ $lo = ($uni - 0x10000) % 0x400 + 0xDC00;
+
+And to desurrogate;
+
+ $uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);
+
+Note this move has made \x{D800}-\x{DFFF} into a forbidden zone but
+perl does not prohibit the use of characters within this range. To perl,
+every one of \x{0000_0000} up to \x{ffff_ffff} (*) is I<a character>.
+
+ (*) or \x{ffff_ffff_ffff_ffff} if your perl is compiled with 64-bit
+ integer support!
+
+=head1 Error Checking
+
+Unlike most encodings which accept various ways to handle errors,
+Unicode encodings simply croaks.
+
+ % perl -MEncode -e '$_ = "\xfe\xff\xd8\xd9\xda\xdb\0\n"' \
+ -e 'Encode::from_to($_, "utf16","shift_jis", 0); print'
+ UTF-16:Malformed LO surrogate d8d9 at /path/to/Encode.pm line 184.
+ % perl -MEncode -e '$a = "BOM missing"' \
+ -e ' Encode::from_to($a, "utf16", "shift_jis", 0); print'
+ UTF-16:Unrecognised BOM 424f at /path/to/Encode.pm line 184.
+
+Unlike other encodings where mappings are not one-to-one against
+Unicode, UTFs are supposed to map 100% against one another. So Encode
+is more strict on UTFs.
+
+Consider that "division by zero" of Encode :)
+
+=head1 SEE ALSO
+
+L<Encode>, L<Encode::Unicode::UTF7>, L<http://www.unicode.org/glossary/>,
+L<http://www.unicode.org/unicode/faq/utf_bom.html>,
+
+RFC 2781 L<http://rfc.net/rfc2781.html>,
+
+The whole Unicode standard L<http://www.unicode.org/unicode/uni2book/u2.html>
+
+Ch. 15, pp. 403 of C<Programming Perl (3rd Edition)>
+by Larry Wall, Tom Christiansen, Jon Orwant;
+O'Reilly & Associates; ISBN 0-596-00027-8
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/Unicode/UTF7.pm b/Master/tlpkg/tlperl/lib/Encode/Unicode/UTF7.pm
new file mode 100644
index 00000000000..dc75ce37816
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/Unicode/UTF7.pm
@@ -0,0 +1,118 @@
+#
+# $Id: UTF7.pm,v 2.1 2004/05/25 16:27:14 dankogai Exp $
+#
+package Encode::Unicode::UTF7;
+use strict;
+no warnings 'redefine';
+use base qw(Encode::Encoding);
+__PACKAGE__->Define('UTF-7');
+our $VERSION = do { my @r = (q$Revision: 2.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+use MIME::Base64;
+use Encode;
+
+#
+# Algorithms taken from Unicode::String by Gisle Aas
+#
+
+our $OPTIONAL_DIRECT_CHARS = 1;
+my $specials = quotemeta "\'(),-./:?";
+$OPTIONAL_DIRECT_CHARS and
+ $specials .= quotemeta "!\"#$%&*;<=>@[]^_`{|}";
+# \s will not work because it matches U+3000 DEOGRAPHIC SPACE
+# We use qr/[\n\r\t\ ] instead
+my $re_asis = qr/(?:[\n\r\t\ A-Za-z0-9$specials])/;
+my $re_encoded = qr/(?:[^\n\r\t\ A-Za-z0-9$specials])/;
+my $e_utf16 = find_encoding("UTF-16BE");
+
+sub needs_lines { 1 };
+
+sub encode($$;$){
+ my ($obj, $str, $chk) = @_;
+ my $len = length($str);
+ pos($str) = 0;
+ my $bytes = '';
+ while (pos($str) < $len){
+ if ($str =~ /\G($re_asis+)/ogc){
+ $bytes .= $1;
+ }elsif($str =~ /\G($re_encoded+)/ogsc){
+ if ($1 eq "+"){
+ $bytes .= "+-";
+ }else{
+ my $s = $1;
+ my $base64 = encode_base64($e_utf16->encode($s), '');
+ $base64 =~ s/=+$//;
+ $bytes .= "+$base64-";
+ }
+ }else{
+ die "This should not happen! (pos=" . pos($str) . ")";
+ }
+ }
+ $_[1] = '' if $chk;
+ return $bytes;
+}
+
+sub decode{
+ my ($obj, $bytes, $chk) = @_;
+ my $len = length($bytes);
+ my $str = "";
+ while (pos($bytes) < $len) {
+ if ($bytes =~ /\G([^+]+)/ogc) {
+ $str .= $1;
+ }elsif($bytes =~ /\G\+-/ogc) {
+ $str .= "+";
+ }elsif($bytes =~ /\G\+([A-Za-z0-9+\/]+)-?/ogsc) {
+ my $base64 = $1;
+ my $pad = length($base64) % 4;
+ $base64 .= "=" x (4 - $pad) if $pad;
+ $str .= $e_utf16->decode(decode_base64($base64));
+ }elsif($bytes =~ /\G\+/ogc) {
+ $^W and warn "Bad UTF7 data escape";
+ $str .= "+";
+ }else{
+ die "This should not happen " . pos($bytes);
+ }
+ }
+ $_[1] = '' if $chk;
+ return $str;
+}
+1;
+__END__
+
+=head1 NAME
+
+Encode::Unicode::UTF7 -- UTF-7 encoding
+
+=head1 SYNOPSIS
+
+ use Encode qw/encode decode/;
+ $utf7 = encode("UTF-7", $utf8);
+ $utf8 = decode("UTF-7", $ucs2);
+
+=head1 ABSTRACT
+
+This module implements UTF-7 encoding documented in RFC 2152. UTF-7,
+as its name suggests, is a 7-bit re-encoded version of UTF-16BE. It
+is designed to be MTA-safe and expected to be a standard way to
+exchange Unicoded mails via mails. But with the advent of UTF-8 and
+8-bit compliant MTAs, UTF-7 is hardly ever used.
+
+UTF-7 was not supported by Encode until version 1.95 because of that.
+But Unicode::String, a module by Gisle Aas which adds Unicode supports
+to non-utf8-savvy perl did support UTF-7, the UTF-7 support was added
+so Encode can supersede Unicode::String 100%.
+
+=head1 In Practice
+
+When you want to encode Unicode for mails and web pages, however, do
+not use UTF-7 unless you are sure your recipients and readers can
+handle it. Very few MUAs and WWW Browsers support these days (only
+Mozilla seems to support one). For general cases, use UTF-8 for
+message body and MIME-Header for header instead.
+
+=head1 SEE ALSO
+
+L<Encode>, L<Encode::Unicode>, L<Unicode::String>
+
+RFC 2781 L<http://www.ietf.org/rfc/rfc2152.txt>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/_PM.e2x b/Master/tlpkg/tlperl/lib/Encode/_PM.e2x
new file mode 100644
index 00000000000..eb59cd1b520
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/_PM.e2x
@@ -0,0 +1,23 @@
+package Encode::$_Name_;
+our $VERSION = "0.01";
+
+use Encode;
+use XSLoader;
+XSLoader::load(__PACKAGE__,$VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Encode::$_Name_ - New Encoding
+
+=head1 SYNOPSIS
+
+You got to fill this in!
+
+=head1 SEE ALSO
+
+L<Encode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Encode/_T.e2x b/Master/tlpkg/tlperl/lib/Encode/_T.e2x
new file mode 100644
index 00000000000..6cf5f293d54
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/_T.e2x
@@ -0,0 +1,7 @@
+use strict;
+# Adjust the number here!
+use Test::More tests => 2;
+
+use_ok('Encode');
+use_ok('Encode::$_Name_');
+# Add more test here!
diff --git a/Master/tlpkg/tlperl/lib/Encode/encode.h b/Master/tlpkg/tlperl/lib/Encode/encode.h
new file mode 100644
index 00000000000..94764a6a14c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Encode/encode.h
@@ -0,0 +1,111 @@
+#ifndef ENCODE_H
+#define ENCODE_H
+
+#ifndef U8
+/*
+ A tad devious this:
+ perl normally has a #define for U8 - if that isn't present then we
+ typedef it - leaving it #ifndef so we can do data parts without
+ getting extern references to the code parts
+*/
+typedef unsigned char U8;
+#endif
+
+typedef struct encpage_s encpage_t;
+
+struct encpage_s
+{
+ /* fields ordered to pack nicely on 32-bit machines */
+ const U8 *seq; /* Packed output sequences we generate
+ if we match */
+ encpage_t *next; /* Page to go to if we match */
+ U8 min; /* Min value of octet to match this entry */
+ U8 max; /* Max value of octet to match this entry */
+ U8 dlen; /* destination length -
+ size of entries in seq */
+ U8 slen; /* source length -
+ number of source octets needed */
+};
+
+/*
+ At any point in a translation there is a page pointer which points
+ at an array of the above structures.
+
+ Basic operation :
+ get octet from source stream.
+ if (octet >= min && octet < max) {
+ if slen is 0 then we cannot represent this character.
+ if we have less than slen octets (including this one) then
+ we have a partial character.
+ otherwise
+ copy dlen octets from seq + dlen*(octet-min) to output
+ (dlen may be zero if we don't know yet.)
+ load page pointer with next to continue.
+ (is slen is one this is end of a character)
+ get next octet.
+ }
+ else {
+ increment the page pointer to look at next slot in the array
+ }
+
+ arrays SHALL be constructed so there is an entry which matches
+ ..0xFF at the end, and either maps it or indicates no
+ representation.
+
+ if MSB of slen is set then mapping is an approximate "FALLBACK" entry.
+
+*/
+
+
+typedef struct encode_s encode_t;
+struct encode_s
+{
+ encpage_t *t_utf8; /* Starting table for translation from
+ the encoding to UTF-8 form */
+ encpage_t *f_utf8; /* Starting table for translation
+ from UTF-8 to the encoding */
+ const U8 *rep; /* Replacement character in this encoding
+ e.g. "?" */
+ int replen; /* Number of octets in rep */
+ U8 min_el; /* Minimum octets to represent a character */
+ U8 max_el; /* Maximum octets to represent a character */
+ const char *name[2]; /* name(s) of this encoding */
+};
+
+#ifdef U8
+/* See comment at top of file for deviousness */
+
+extern int do_encode(encpage_t *enc, const U8 *src, STRLEN *slen,
+ U8 *dst, STRLEN dlen, STRLEN *dout, int approx,
+ const U8 *term, STRLEN tlen);
+
+extern void Encode_DefineEncoding(encode_t *enc);
+
+#endif /* U8 */
+
+#define ENCODE_NOSPACE 1
+#define ENCODE_PARTIAL 2
+#define ENCODE_NOREP 3
+#define ENCODE_FALLBACK 4
+#define ENCODE_FOUND_TERM 5
+
+#define FBCHAR_UTF8 "\xEF\xBF\xBD"
+
+#define ENCODE_DIE_ON_ERR 0x0001 /* croaks immediately */
+#define ENCODE_WARN_ON_ERR 0x0002 /* warn on error; may proceed */
+#define ENCODE_RETURN_ON_ERR 0x0004 /* immediately returns on NOREP */
+#define ENCODE_LEAVE_SRC 0x0008 /* $src updated unless set */
+#define ENCODE_PERLQQ 0x0100 /* perlqq fallback string */
+#define ENCODE_HTMLCREF 0x0200 /* HTML character ref. fb mode */
+#define ENCODE_XMLCREF 0x0400 /* XML character ref. fb mode */
+#define ENCODE_STOP_AT_PARTIAL 0x0800 /* stop at partial explicitly */
+
+#define ENCODE_FB_DEFAULT 0x0000
+#define ENCODE_FB_CROAK 0x0001
+#define ENCODE_FB_QUIET ENCODE_RETURN_ON_ERR
+#define ENCODE_FB_WARN (ENCODE_RETURN_ON_ERR|ENCODE_WARN_ON_ERR)
+#define ENCODE_FB_PERLQQ (ENCODE_PERLQQ|ENCODE_LEAVE_SRC)
+#define ENCODE_FB_HTMLCREF (ENCODE_HTMLCREF|ENCODE_LEAVE_SRC)
+#define ENCODE_FB_XMLCREF (ENCODE_XMLCREF|ENCODE_LEAVE_SRC)
+
+#endif /* ENCODE_H */
diff --git a/Master/tlpkg/tlperl/lib/Exporter.pm b/Master/tlpkg/tlperl/lib/Exporter.pm
new file mode 100644
index 00000000000..d9c22049776
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Exporter.pm
@@ -0,0 +1,440 @@
+package Exporter;
+
+require 5.006;
+
+# Be lean.
+#use strict;
+#no strict 'refs';
+
+our $Debug = 0;
+our $ExportLevel = 0;
+our $Verbose ||= 0;
+our $VERSION = '5.58';
+our (%Cache);
+$Carp::Internal{Exporter} = 1;
+
+sub as_heavy {
+ require Exporter::Heavy;
+ # Unfortunately, this does not work if the caller is aliased as *name = \&foo
+ # Thus the need to create a lot of identical subroutines
+ my $c = (caller(1))[3];
+ $c =~ s/.*:://;
+ \&{"Exporter::Heavy::heavy_$c"};
+}
+
+sub export {
+ goto &{as_heavy()};
+}
+
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller($ExportLevel);
+
+ if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
+ *{$callpkg."::import"} = \&import;
+ return;
+ }
+
+ # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
+ my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"});
+ return export $pkg, $callpkg, @_
+ if $Verbose or $Debug or @$fail > 1;
+ my $export_cache = ($Cache{$pkg} ||= {});
+ my $args = @_ or @_ = @$exports;
+
+ local $_;
+ if ($args and not %$export_cache) {
+ s/^&//, $export_cache->{$_} = 1
+ foreach (@$exports, @{"$pkg\::EXPORT_OK"});
+ }
+ my $heavy;
+ # Try very hard not to use {} and hence have to enter scope on the foreach
+ # We bomb out of the loop with last as soon as heavy is set.
+ if ($args or $fail) {
+ ($heavy = (/\W/ or $args and not exists $export_cache->{$_}
+ or @$fail and $_ eq $fail->[0])) and last
+ foreach (@_);
+ } else {
+ ($heavy = /\W/) and last
+ foreach (@_);
+ }
+ return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy;
+ local $SIG{__WARN__} =
+ sub {require Carp; &Carp::carp};
+ # shortcut for the common case of no type character
+ *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
+}
+
+# Default methods
+
+sub export_fail {
+ my $self = shift;
+ @_;
+}
+
+# Unfortunately, caller(1)[3] "does not work" if the caller is aliased as
+# *name = \&foo. Thus the need to create a lot of identical subroutines
+# Otherwise we could have aliased them to export().
+
+sub export_to_level {
+ goto &{as_heavy()};
+}
+
+sub export_tags {
+ goto &{as_heavy()};
+}
+
+sub export_ok_tags {
+ goto &{as_heavy()};
+}
+
+sub require_version {
+ goto &{as_heavy()};
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Exporter - Implements default import method for modules
+
+=head1 SYNOPSIS
+
+In module YourModule.pm:
+
+ package YourModule;
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw(munge frobnicate); # symbols to export on request
+
+or
+
+ package YourModule;
+ use Exporter 'import'; # gives you Exporter's import() method directly
+ @EXPORT_OK = qw(munge frobnicate); # symbols to export on request
+
+In other files which wish to use YourModule:
+
+ use ModuleName qw(frobnicate); # import listed symbols
+ frobnicate ($left, $right) # calls YourModule::frobnicate
+
+=head1 DESCRIPTION
+
+The Exporter module implements an C<import> method which allows a module
+to export functions and variables to its users' namespaces. Many modules
+use Exporter rather than implementing their own C<import> method because
+Exporter provides a highly flexible interface, with an implementation optimised
+for the common case.
+
+Perl automatically calls the C<import> method when processing a
+C<use> statement for a module. Modules and C<use> are documented
+in L<perlfunc> and L<perlmod>. Understanding the concept of
+modules and how the C<use> statement operates is important to
+understanding the Exporter.
+
+=head2 How to Export
+
+The arrays C<@EXPORT> and C<@EXPORT_OK> in a module hold lists of
+symbols that are going to be exported into the users name space by
+default, or which they can request to be exported, respectively. The
+symbols can represent functions, scalars, arrays, hashes, or typeglobs.
+The symbols must be given by full name with the exception that the
+ampersand in front of a function is optional, e.g.
+
+ @EXPORT = qw(afunc $scalar @array); # afunc is a function
+ @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc
+
+If you are only exporting function names it is recommended to omit the
+ampersand, as the implementation is faster this way.
+
+=head2 Selecting What To Export
+
+Do B<not> export method names!
+
+Do B<not> export anything else by default without a good reason!
+
+Exports pollute the namespace of the module user. If you must export
+try to use @EXPORT_OK in preference to @EXPORT and avoid short or
+common symbol names to reduce the risk of name clashes.
+
+Generally anything not exported is still accessible from outside the
+module using the ModuleName::item_name (or $blessed_ref-E<gt>method)
+syntax. By convention you can use a leading underscore on names to
+informally indicate that they are 'internal' and not for public use.
+
+(It is actually possible to get private functions by saying:
+
+ my $subref = sub { ... };
+ $subref->(@args); # Call it as a function
+ $obj->$subref(@args); # Use it as a method
+
+However if you use them for methods it is up to you to figure out
+how to make inheritance work.)
+
+As a general rule, if the module is trying to be object oriented
+then export nothing. If it's just a collection of functions then
+@EXPORT_OK anything but use @EXPORT with caution. For function and
+method names use barewords in preference to names prefixed with
+ampersands for the export lists.
+
+Other module design guidelines can be found in L<perlmod>.
+
+=head2 How to Import
+
+In other files which wish to use your module there are three basic ways for
+them to load your module and import its symbols:
+
+=over 4
+
+=item C<use ModuleName;>
+
+This imports all the symbols from ModuleName's @EXPORT into the namespace
+of the C<use> statement.
+
+=item C<use ModuleName ();>
+
+This causes perl to load your module but does not import any symbols.
+
+=item C<use ModuleName qw(...);>
+
+This imports only the symbols listed by the caller into their namespace.
+All listed symbols must be in your @EXPORT or @EXPORT_OK, else an error
+occurs. The advanced export features of Exporter are accessed like this,
+but with list entries that are syntactically distinct from symbol names.
+
+=back
+
+Unless you want to use its advanced features, this is probably all you
+need to know to use Exporter.
+
+=head1 Advanced features
+
+=head2 Specialised Import Lists
+
+If any of the entries in an import list begins with !, : or / then
+the list is treated as a series of specifications which either add to
+or delete from the list of names to import. They are processed left to
+right. Specifications are in the form:
+
+ [!]name This name only
+ [!]:DEFAULT All names in @EXPORT
+ [!]:tag All names in $EXPORT_TAGS{tag} anonymous list
+ [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match
+
+A leading ! indicates that matching names should be deleted from the
+list of names to import. If the first specification is a deletion it
+is treated as though preceded by :DEFAULT. If you just want to import
+extra names in addition to the default set you will still need to
+include :DEFAULT explicitly.
+
+e.g., Module.pm defines:
+
+ @EXPORT = qw(A1 A2 A3 A4 A5);
+ @EXPORT_OK = qw(B1 B2 B3 B4 B5);
+ %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);
+
+ Note that you cannot use tags in @EXPORT or @EXPORT_OK.
+ Names in EXPORT_TAGS must also appear in @EXPORT or @EXPORT_OK.
+
+An application using Module can say something like:
+
+ use Module qw(:DEFAULT :T2 !B3 A3);
+
+Other examples include:
+
+ use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET);
+ use POSIX qw(:errno_h :termios_h !TCSADRAIN !/^EXIT/);
+
+Remember that most patterns (using //) will need to be anchored
+with a leading ^, e.g., C</^EXIT/> rather than C</EXIT/>.
+
+You can say C<BEGIN { $Exporter::Verbose=1 }> to see how the
+specifications are being processed and what is actually being imported
+into modules.
+
+=head2 Exporting without using Exporter's import method
+
+Exporter has a special method, 'export_to_level' which is used in situations
+where you can't directly call Exporter's import method. The export_to_level
+method looks like:
+
+ MyPackage->export_to_level($where_to_export, $package, @what_to_export);
+
+where $where_to_export is an integer telling how far up the calling stack
+to export your symbols, and @what_to_export is an array telling what
+symbols *to* export (usually this is @_). The $package argument is
+currently unused.
+
+For example, suppose that you have a module, A, which already has an
+import function:
+
+ package A;
+
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw ($b);
+
+ sub import
+ {
+ $A::b = 1; # not a very useful import method
+ }
+
+and you want to Export symbol $A::b back to the module that called
+package A. Since Exporter relies on the import method to work, via
+inheritance, as it stands Exporter::import() will never get called.
+Instead, say the following:
+
+ package A;
+ @ISA = qw(Exporter);
+ @EXPORT_OK = qw ($b);
+
+ sub import
+ {
+ $A::b = 1;
+ A->export_to_level(1, @_);
+ }
+
+This will export the symbols one level 'above' the current package - ie: to
+the program or module that used package A.
+
+Note: Be careful not to modify C<@_> at all before you call export_to_level
+- or people using your package will get very unexplained results!
+
+=head2 Exporting without inheriting from Exporter
+
+By including Exporter in your @ISA you inherit an Exporter's import() method
+but you also inherit several other helper methods which you probably don't
+want. To avoid this you can do
+
+ package YourModule;
+ use Exporter qw( import );
+
+which will export Exporter's own import() method into YourModule.
+Everything will work as before but you won't need to include Exporter in
+@YourModule::ISA.
+
+=head2 Module Version Checking
+
+The Exporter module will convert an attempt to import a number from a
+module into a call to $module_name-E<gt>require_version($value). This can
+be used to validate that the version of the module being used is
+greater than or equal to the required version.
+
+The Exporter module supplies a default require_version method which
+checks the value of $VERSION in the exporting module.
+
+Since the default require_version method treats the $VERSION number as
+a simple numeric value it will regard version 1.10 as lower than
+1.9. For this reason it is strongly recommended that you use numbers
+with at least two decimal places, e.g., 1.09.
+
+=head2 Managing Unknown Symbols
+
+In some situations you may want to prevent certain symbols from being
+exported. Typically this applies to extensions which have functions
+or constants that may not exist on some systems.
+
+The names of any symbols that cannot be exported should be listed
+in the C<@EXPORT_FAIL> array.
+
+If a module attempts to import any of these symbols the Exporter
+will give the module an opportunity to handle the situation before
+generating an error. The Exporter will call an export_fail method
+with a list of the failed symbols:
+
+ @failed_symbols = $module_name->export_fail(@failed_symbols);
+
+If the export_fail method returns an empty list then no error is
+recorded and all the requested symbols are exported. If the returned
+list is not empty then an error is generated for each symbol and the
+export fails. The Exporter provides a default export_fail method which
+simply returns the list unchanged.
+
+Uses for the export_fail method include giving better error messages
+for some symbols and performing lazy architectural checks (put more
+symbols into @EXPORT_FAIL by default and then take them out if someone
+actually tries to use them and an expensive check shows that they are
+usable on that platform).
+
+=head2 Tag Handling Utility Functions
+
+Since the symbols listed within %EXPORT_TAGS must also appear in either
+@EXPORT or @EXPORT_OK, two utility functions are provided which allow
+you to easily add tagged sets of symbols to @EXPORT or @EXPORT_OK:
+
+ %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]);
+
+ Exporter::export_tags('foo'); # add aa, bb and cc to @EXPORT
+ Exporter::export_ok_tags('bar'); # add aa, cc and dd to @EXPORT_OK
+
+Any names which are not tags are added to @EXPORT or @EXPORT_OK
+unchanged but will trigger a warning (with C<-w>) to avoid misspelt tags
+names being silently added to @EXPORT or @EXPORT_OK. Future versions
+may make this a fatal error.
+
+=head2 Generating combined tags
+
+If several symbol categories exist in %EXPORT_TAGS, it's usually
+useful to create the utility ":all" to simplify "use" statements.
+
+The simplest way to do this is:
+
+ %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]);
+
+ # add all the other ":class" tags to the ":all" class,
+ # deleting duplicates
+ {
+ my %seen;
+
+ push @{$EXPORT_TAGS{all}},
+ grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS;
+ }
+
+CGI.pm creates an ":all" tag which contains some (but not really
+all) of its categories. That could be done with one small
+change:
+
+ # add some of the other ":class" tags to the ":all" class,
+ # deleting duplicates
+ {
+ my %seen;
+
+ push @{$EXPORT_TAGS{all}},
+ grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}}
+ foreach qw/html2 html3 netscape form cgi internal/;
+ }
+
+Note that the tag names in %EXPORT_TAGS don't have the leading ':'.
+
+=head2 C<AUTOLOAD>ed Constants
+
+Many modules make use of C<AUTOLOAD>ing for constant subroutines to
+avoid having to compile and waste memory on rarely used values (see
+L<perlsub> for details on constant subroutines). Calls to such
+constant subroutines are not optimized away at compile time because
+they can't be checked at compile time for constancy.
+
+Even if a prototype is available at compile time, the body of the
+subroutine is not (it hasn't been C<AUTOLOAD>ed yet). perl needs to
+examine both the C<()> prototype and the body of a subroutine at
+compile time to detect that it can safely replace calls to that
+subroutine with the constant value.
+
+A workaround for this is to call the constants once in a C<BEGIN> block:
+
+ package My ;
+
+ use Socket ;
+
+ foo( SO_LINGER ); ## SO_LINGER NOT optimized away; called at runtime
+ BEGIN { SO_LINGER }
+ foo( SO_LINGER ); ## SO_LINGER optimized away at compile time.
+
+This forces the C<AUTOLOAD> for C<SO_LINGER> to take place before
+SO_LINGER is encountered later in C<My> package.
+
+If you are writing a package that C<AUTOLOAD>s, consider forcing
+an C<AUTOLOAD> for any constants explicitly imported by other packages
+or which are usually used when your package is C<use>d.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Exporter/Heavy.pm b/Master/tlpkg/tlperl/lib/Exporter/Heavy.pm
new file mode 100644
index 00000000000..2cc792288f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Exporter/Heavy.pm
@@ -0,0 +1,248 @@
+package Exporter::Heavy;
+
+use strict;
+no strict 'refs';
+
+# On one line so MakeMaker will see it.
+require Exporter; our $VERSION = $Exporter::VERSION;
+$Carp::Internal{"Exporter::Heavy"} = 1;
+
+=head1 NAME
+
+Exporter::Heavy - Exporter guts
+
+=head1 SYNOPSIS
+
+(internal use only)
+
+=head1 DESCRIPTION
+
+No user-serviceable parts inside.
+
+=cut
+
+#
+# We go to a lot of trouble not to 'require Carp' at file scope,
+# because Carp requires Exporter, and something has to give.
+#
+
+sub _rebuild_cache {
+ my ($pkg, $exports, $cache) = @_;
+ s/^&// foreach @$exports;
+ @{$cache}{@$exports} = (1) x @$exports;
+ my $ok = \@{"${pkg}::EXPORT_OK"};
+ if (@$ok) {
+ s/^&// foreach @$ok;
+ @{$cache}{@$ok} = (1) x @$ok;
+ }
+}
+
+sub heavy_export {
+
+ # First make import warnings look like they're coming from the "use".
+ local $SIG{__WARN__} = sub {
+ my $text = shift;
+ if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
+ require Carp;
+ local $Carp::CarpLevel = 1; # ignore package calling us too.
+ Carp::carp($text);
+ }
+ else {
+ warn $text;
+ }
+ };
+ local $SIG{__DIE__} = sub {
+ require Carp;
+ local $Carp::CarpLevel = 1; # ignore package calling us too.
+ Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
+ if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
+ };
+
+ my($pkg, $callpkg, @imports) = @_;
+ my($type, $sym, $cache_is_current, $oops);
+ my($exports, $export_cache) = (\@{"${pkg}::EXPORT"},
+ $Exporter::Cache{$pkg} ||= {});
+
+ if (@imports) {
+ if (!%$export_cache) {
+ _rebuild_cache ($pkg, $exports, $export_cache);
+ $cache_is_current = 1;
+ }
+
+ if (grep m{^[/!:]}, @imports) {
+ my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
+ my $tagdata;
+ my %imports;
+ my($remove, $spec, @names, @allexports);
+ # negated first item implies starting with default set:
+ unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
+ foreach $spec (@imports){
+ $remove = $spec =~ s/^!//;
+
+ if ($spec =~ s/^://){
+ if ($spec eq 'DEFAULT'){
+ @names = @$exports;
+ }
+ elsif ($tagdata = $tagsref->{$spec}) {
+ @names = @$tagdata;
+ }
+ else {
+ warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
+ ++$oops;
+ next;
+ }
+ }
+ elsif ($spec =~ m:^/(.*)/$:){
+ my $patn = $1;
+ @allexports = keys %$export_cache unless @allexports; # only do keys once
+ @names = grep(/$patn/, @allexports); # not anchored by default
+ }
+ else {
+ @names = ($spec); # is a normal symbol name
+ }
+
+ warn "Import ".($remove ? "del":"add").": @names "
+ if $Exporter::Verbose;
+
+ if ($remove) {
+ foreach $sym (@names) { delete $imports{$sym} }
+ }
+ else {
+ @imports{@names} = (1) x @names;
+ }
+ }
+ @imports = keys %imports;
+ }
+
+ my @carp;
+ foreach $sym (@imports) {
+ if (!$export_cache->{$sym}) {
+ if ($sym =~ m/^\d/) {
+ $pkg->VERSION($sym); # inherit from UNIVERSAL
+ # If the version number was the only thing specified
+ # then we should act as if nothing was specified:
+ if (@imports == 1) {
+ @imports = @$exports;
+ last;
+ }
+ # We need a way to emulate 'use Foo ()' but still
+ # allow an easy version check: "use Foo 1.23, ''";
+ if (@imports == 2 and !$imports[1]) {
+ @imports = ();
+ last;
+ }
+ } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) {
+ # Last chance - see if they've updated EXPORT_OK since we
+ # cached it.
+
+ unless ($cache_is_current) {
+ %$export_cache = ();
+ _rebuild_cache ($pkg, $exports, $export_cache);
+ $cache_is_current = 1;
+ }
+
+ if (!$export_cache->{$sym}) {
+ # accumulate the non-exports
+ push @carp,
+ qq["$sym" is not exported by the $pkg module\n];
+ $oops++;
+ }
+ }
+ }
+ }
+ if ($oops) {
+ require Carp;
+ Carp::croak("@{carp}Can't continue after import errors");
+ }
+ }
+ else {
+ @imports = @$exports;
+ }
+
+ my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"},
+ $Exporter::FailCache{$pkg} ||= {});
+
+ if (@$fail) {
+ if (!%$fail_cache) {
+ # Build cache of symbols. Optimise the lookup by adding
+ # barewords twice... both with and without a leading &.
+ # (Technique could be applied to $export_cache at cost of memory)
+ my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail;
+ warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose;
+ @{$fail_cache}{@expanded} = (1) x @expanded;
+ }
+ my @failed;
+ foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} }
+ if (@failed) {
+ @failed = $pkg->export_fail(@failed);
+ foreach $sym (@failed) {
+ require Carp;
+ Carp::carp(qq["$sym" is not implemented by the $pkg module ],
+ "on this architecture");
+ }
+ if (@failed) {
+ require Carp;
+ Carp::croak("Can't continue after import errors");
+ }
+ }
+ }
+
+ warn "Importing into $callpkg from $pkg: ",
+ join(", ",sort @imports) if $Exporter::Verbose;
+
+ foreach $sym (@imports) {
+ # shortcut for the common case of no type character
+ (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
+ unless $sym =~ s/^(\W)//;
+ $type = $1;
+ *{"${callpkg}::$sym"} =
+ $type eq '&' ? \&{"${pkg}::$sym"} :
+ $type eq '$' ? \${"${pkg}::$sym"} :
+ $type eq '@' ? \@{"${pkg}::$sym"} :
+ $type eq '%' ? \%{"${pkg}::$sym"} :
+ $type eq '*' ? *{"${pkg}::$sym"} :
+ do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
+ }
+}
+
+sub heavy_export_to_level
+{
+ my $pkg = shift;
+ my $level = shift;
+ (undef) = shift; # XXX redundant arg
+ my $callpkg = caller($level);
+ $pkg->export($callpkg, @_);
+}
+
+# Utility functions
+
+sub _push_tags {
+ my($pkg, $var, $syms) = @_;
+ my @nontag = ();
+ my $export_tags = \%{"${pkg}::EXPORT_TAGS"};
+ push(@{"${pkg}::$var"},
+ map { $export_tags->{$_} ? @{$export_tags->{$_}}
+ : scalar(push(@nontag,$_),$_) }
+ (@$syms) ? @$syms : keys %$export_tags);
+ if (@nontag and $^W) {
+ # This may change to a die one day
+ require Carp;
+ Carp::carp(join(", ", @nontag)." are not tags of $pkg");
+ }
+}
+
+sub heavy_require_version {
+ my($self, $wanted) = @_;
+ my $pkg = ref $self || $self;
+ return ${pkg}->VERSION($wanted);
+}
+
+sub heavy_export_tags {
+ _push_tags((caller)[0], "EXPORT", \@_);
+}
+
+sub heavy_export_ok_tags {
+ _push_tags((caller)[0], "EXPORT_OK", \@_);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Fcntl.pm b/Master/tlpkg/tlperl/lib/Fcntl.pm
new file mode 100644
index 00000000000..7ef0038bd18
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Fcntl.pm
@@ -0,0 +1,236 @@
+package Fcntl;
+
+=head1 NAME
+
+Fcntl - load the C Fcntl.h defines
+
+=head1 SYNOPSIS
+
+ use Fcntl;
+ use Fcntl qw(:DEFAULT :flock);
+
+=head1 DESCRIPTION
+
+This module is just a translation of the C F<fcntl.h> file.
+Unlike the old mechanism of requiring a translated F<fcntl.ph>
+file, this uses the B<h2xs> program (see the Perl source distribution)
+and your native C compiler. This means that it has a
+far more likely chance of getting the numbers right.
+
+=head1 NOTE
+
+Only C<#define> symbols get translated; you must still correctly
+pack up your own arguments to pass as args for locking functions, etc.
+
+=head1 EXPORTED SYMBOLS
+
+By default your system's F_* and O_* constants (eg, F_DUPFD and
+O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
+
+You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
+and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
+
+You can request that the old constants (FAPPEND, FASYNC, FCREAT,
+FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
+compatibility reasons by using the tag C<:Fcompat>. For new
+applications the newer versions of these constants are suggested
+(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
+O_SYNC, O_TRUNC).
+
+For ease of use also the SEEK_* constants (for seek() and sysseek(),
+e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
+available for import. They can be imported either separately or using
+the tags C<:seek> and C<:mode>.
+
+Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
+(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
+documentation to see what constants are implemented in your system.
+
+See L<perlopentut> to learn about the uses of the O_* constants
+with sysopen().
+
+See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
+
+See L<perlfunc/stat> about the S_I* constants.
+
+=cut
+
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
+
+require Exporter;
+use XSLoader ();
+@ISA = qw(Exporter);
+$VERSION = "1.05";
+# Items to export into callers namespace by default
+# (move infrequently used names to @EXPORT_OK below)
+@EXPORT =
+ qw(
+ FD_CLOEXEC
+ F_ALLOCSP
+ F_ALLOCSP64
+ F_COMPAT
+ F_DUP2FD
+ F_DUPFD
+ F_EXLCK
+ F_FREESP
+ F_FREESP64
+ F_FSYNC
+ F_FSYNC64
+ F_GETFD
+ F_GETFL
+ F_GETLK
+ F_GETLK64
+ F_GETOWN
+ F_NODNY
+ F_POSIX
+ F_RDACC
+ F_RDDNY
+ F_RDLCK
+ F_RWACC
+ F_RWDNY
+ F_SETFD
+ F_SETFL
+ F_SETLK
+ F_SETLK64
+ F_SETLKW
+ F_SETLKW64
+ F_SETOWN
+ F_SHARE
+ F_SHLCK
+ F_UNLCK
+ F_UNSHARE
+ F_WRACC
+ F_WRDNY
+ F_WRLCK
+ O_ACCMODE
+ O_ALIAS
+ O_APPEND
+ O_ASYNC
+ O_BINARY
+ O_CREAT
+ O_DEFER
+ O_DIRECT
+ O_DIRECTORY
+ O_DSYNC
+ O_EXCL
+ O_EXLOCK
+ O_LARGEFILE
+ O_NDELAY
+ O_NOCTTY
+ O_NOFOLLOW
+ O_NOINHERIT
+ O_NONBLOCK
+ O_RANDOM
+ O_RAW
+ O_RDONLY
+ O_RDWR
+ O_RSRC
+ O_RSYNC
+ O_SEQUENTIAL
+ O_SHLOCK
+ O_SYNC
+ O_TEMPORARY
+ O_TEXT
+ O_TRUNC
+ O_WRONLY
+ );
+
+# Other items we are prepared to export if requested
+@EXPORT_OK = qw(
+ DN_ACCESS
+ DN_ATTRIB
+ DN_CREATE
+ DN_DELETE
+ DN_MODIFY
+ DN_MULTISHOT
+ DN_RENAME
+ FAPPEND
+ FASYNC
+ FCREAT
+ FDEFER
+ FDSYNC
+ FEXCL
+ FLARGEFILE
+ FNDELAY
+ FNONBLOCK
+ FRSYNC
+ FSYNC
+ FTRUNC
+ F_GETLEASE
+ F_GETSIG
+ F_NOTIFY
+ F_SETLEASE
+ F_SETSIG
+ LOCK_EX
+ LOCK_MAND
+ LOCK_NB
+ LOCK_READ
+ LOCK_RW
+ LOCK_SH
+ LOCK_UN
+ LOCK_WRITE
+ O_IGNORE_CTTY
+ O_NOATIME
+ O_NOLINK
+ O_NOTRANS
+ SEEK_CUR
+ SEEK_END
+ SEEK_SET
+ S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
+ S_IREAD S_IWRITE S_IEXEC
+ S_IRGRP S_IWGRP S_IXGRP S_IRWXG
+ S_IROTH S_IWOTH S_IXOTH S_IRWXO
+ S_IRUSR S_IWUSR S_IXUSR S_IRWXU
+ S_ISUID S_ISGID S_ISVTX S_ISTXT
+ _S_IFMT S_IFREG S_IFDIR S_IFLNK
+ &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
+ &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
+);
+# Named groups of exports
+%EXPORT_TAGS = (
+ 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
+ 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
+ FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
+ 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
+ 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
+ _S_IFMT S_IFREG S_IFDIR S_IFLNK
+ S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
+ S_IRUSR S_IWUSR S_IXUSR S_IRWXU
+ S_IRGRP S_IWGRP S_IXGRP S_IRWXG
+ S_IROTH S_IWOTH S_IXOTH S_IRWXO
+ S_IREAD S_IWRITE S_IEXEC
+ S_ISREG S_ISDIR S_ISLNK S_ISSOCK
+ S_ISBLK S_ISCHR S_ISFIFO
+ S_ISWHT S_ISENFMT
+ S_IFMT S_IMODE
+ )],
+);
+
+sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() }
+sub S_IMODE { $_[0] & 07777 }
+
+sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() }
+sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() }
+sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() }
+sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() }
+sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() }
+sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() }
+sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() }
+sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() }
+sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
+
+sub AUTOLOAD {
+ (my $constname = $AUTOLOAD) =~ s/.*:://;
+ die "&Fcntl::constant not defined" if $constname eq 'constant';
+ my ($error, $val) = constant($constname);
+ if ($error) {
+ my (undef,$file,$line) = caller;
+ die "$error at $file line $line.\n";
+ }
+ *$AUTOLOAD = sub { $val };
+ goto &$AUTOLOAD;
+}
+
+XSLoader::load 'Fcntl', $VERSION;
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Basename.pm b/Master/tlpkg/tlperl/lib/File/Basename.pm
new file mode 100644
index 00000000000..837b753972a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Basename.pm
@@ -0,0 +1,398 @@
+=head1 NAME
+
+File::Basename - Parse file paths into directory, filename and suffix.
+
+=head1 SYNOPSIS
+
+ use File::Basename;
+
+ ($name,$path,$suffix) = fileparse($fullname,@suffixlist);
+ $name = fileparse($fullname,@suffixlist);
+
+ $basename = basename($fullname,@suffixlist);
+ $dirname = dirname($fullname);
+
+
+=head1 DESCRIPTION
+
+These routines allow you to parse file paths into their directory, filename
+and suffix.
+
+B<NOTE>: C<dirname()> and C<basename()> emulate the behaviours, and
+quirks, of the shell and C functions of the same name. See each
+function's documentation for details. If your concern is just parsing
+paths it is safer to use L<File::Spec>'s C<splitpath()> and
+C<splitdir()> methods.
+
+It is guaranteed that
+
+ # Where $path_separator is / for Unix, \ for Windows, etc...
+ dirname($path) . $path_separator . basename($path);
+
+is equivalent to the original path for all systems but VMS.
+
+
+=cut
+
+
+package File::Basename;
+
+# A bit of juggling to insure that C<use re 'taint';> always works, since
+# File::Basename is used during the Perl build, when the re extension may
+# not be available.
+BEGIN {
+ unless (eval { require re; })
+ { eval ' sub re::import { $^H |= 0x00100000; } ' } # HINT_RE_TAINT
+ import re 'taint';
+}
+
+
+use strict;
+use 5.006;
+use warnings;
+our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase);
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(fileparse fileparse_set_fstype basename dirname);
+$VERSION = "2.74";
+
+fileparse_set_fstype($^O);
+
+
+=over 4
+
+=item C<fileparse>
+
+ my($filename, $directories, $suffix) = fileparse($path);
+ my($filename, $directories, $suffix) = fileparse($path, @suffixes);
+ my $filename = fileparse($path, @suffixes);
+
+The C<fileparse()> routine divides a file path into its $directories, $filename
+and (optionally) the filename $suffix.
+
+$directories contains everything up to and including the last
+directory separator in the $path including the volume (if applicable).
+The remainder of the $path is the $filename.
+
+ # On Unix returns ("baz", "/foo/bar/", "")
+ fileparse("/foo/bar/baz");
+
+ # On Windows returns ("baz", "C:\foo\bar\", "")
+ fileparse("C:\foo\bar\baz");
+
+ # On Unix returns ("", "/foo/bar/baz/", "")
+ fileparse("/foo/bar/baz/");
+
+If @suffixes are given each element is a pattern (either a string or a
+C<qr//>) matched against the end of the $filename. The matching
+portion is removed and becomes the $suffix.
+
+ # On Unix returns ("baz", "/foo/bar", ".txt")
+ fileparse("/foo/bar/baz", qr/\.[^.]*/);
+
+If type is non-Unix (see C<fileparse_set_fstype()>) then the pattern
+matching for suffix removal is performed case-insensitively, since
+those systems are not case-sensitive when opening existing files.
+
+You are guaranteed that C<$directories . $filename . $suffix> will
+denote the same location as the original $path.
+
+=cut
+
+
+sub fileparse {
+ my($fullname,@suffices) = @_;
+
+ unless (defined $fullname) {
+ require Carp;
+ Carp::croak("fileparse(): need a valid pathname");
+ }
+
+ my $orig_type = '';
+ my($type,$igncase) = ($Fileparse_fstype, $Fileparse_igncase);
+
+ my($taint) = substr($fullname,0,0); # Is $fullname tainted?
+
+ if ($type eq "VMS" and $fullname =~ m{/} ) {
+ # We're doing Unix emulation
+ $orig_type = $type;
+ $type = 'Unix';
+ }
+
+ my($dirpath, $basename);
+
+ if (grep { $type eq $_ } qw(MSDOS DOS MSWin32 Epoc)) {
+ ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s);
+ $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/;
+ }
+ elsif ($type eq "OS2") {
+ ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s);
+ $dirpath = './' unless $dirpath; # Can't be 0
+ $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#;
+ }
+ elsif ($type eq "MacOS") {
+ ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s);
+ $dirpath = ':' unless $dirpath;
+ }
+ elsif ($type eq "AmigaOS") {
+ ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s);
+ $dirpath = './' unless $dirpath;
+ }
+ elsif ($type eq 'VMS' ) {
+ ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s);
+ $dirpath ||= ''; # should always be defined
+ }
+ else { # Default to Unix semantics.
+ ($dirpath,$basename) = ($fullname =~ m#^(.*/)?(.*)#s);
+ if ($orig_type eq 'VMS' and $fullname =~ m:^(/[^/]+/000000(/|$))(.*):) {
+ # dev:[000000] is top of VMS tree, similar to Unix '/'
+ # so strip it off and treat the rest as "normal"
+ my $devspec = $1;
+ my $remainder = $3;
+ ($dirpath,$basename) = ($remainder =~ m#^(.*/)?(.*)#s);
+ $dirpath ||= ''; # should always be defined
+ $dirpath = $devspec.$dirpath;
+ }
+ $dirpath = './' unless $dirpath;
+ }
+
+
+ my $tail = '';
+ my $suffix = '';
+ if (@suffices) {
+ foreach $suffix (@suffices) {
+ my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$";
+ if ($basename =~ s/$pat//s) {
+ $taint .= substr($suffix,0,0);
+ $tail = $1 . $tail;
+ }
+ }
+ }
+
+ # Ensure taint is propgated from the path to its pieces.
+ $tail .= $taint;
+ wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail)
+ : ($basename .= $taint);
+}
+
+
+
+=item C<basename>
+
+ my $filename = basename($path);
+ my $filename = basename($path, @suffixes);
+
+This function is provided for compatibility with the Unix shell command
+C<basename(1)>. It does B<NOT> always return the file name portion of a
+path as you might expect. To be safe, if you want the file name portion of
+a path use C<fileparse()>.
+
+C<basename()> returns the last level of a filepath even if the last
+level is clearly directory. In effect, it is acting like C<pop()> for
+paths. This differs from C<fileparse()>'s behaviour.
+
+ # Both return "bar"
+ basename("/foo/bar");
+ basename("/foo/bar/");
+
+@suffixes work as in C<fileparse()> except all regex metacharacters are
+quoted.
+
+ # These two function calls are equivalent.
+ my $filename = basename("/foo/bar/baz.txt", ".txt");
+ my $filename = fileparse("/foo/bar/baz.txt", qr/\Q.txt\E/);
+
+Also note that in order to be compatible with the shell command,
+C<basename()> does not strip off a suffix if it is identical to the
+remaining characters in the filename.
+
+=cut
+
+
+sub basename {
+ my($path) = shift;
+
+ # From BSD basename(1)
+ # The basename utility deletes any prefix ending with the last slash `/'
+ # character present in string (after first stripping trailing slashes)
+ _strip_trailing_sep($path);
+
+ my($basename, $dirname, $suffix) = fileparse( $path, map("\Q$_\E",@_) );
+
+ # From BSD basename(1)
+ # The suffix is not stripped if it is identical to the remaining
+ # characters in string.
+ if( length $suffix and !length $basename ) {
+ $basename = $suffix;
+ }
+
+ # Ensure that basename '/' == '/'
+ if( !length $basename ) {
+ $basename = $dirname;
+ }
+
+ return $basename;
+}
+
+
+
+=item C<dirname>
+
+This function is provided for compatibility with the Unix shell
+command C<dirname(1)> and has inherited some of its quirks. In spite of
+its name it does B<NOT> always return the directory name as you might
+expect. To be safe, if you want the directory name of a path use
+C<fileparse()>.
+
+Only on VMS (where there is no ambiguity between the file and directory
+portions of a path) and AmigaOS (possibly due to an implementation quirk in
+this module) does C<dirname()> work like C<fileparse($path)>, returning just the
+$directories.
+
+ # On VMS and AmigaOS
+ my $directories = dirname($path);
+
+When using Unix or MSDOS syntax this emulates the C<dirname(1)> shell function
+which is subtly different from how C<fileparse()> works. It returns all but
+the last level of a file path even if the last level is clearly a directory.
+In effect, it is not returning the directory portion but simply the path one
+level up acting like C<chop()> for file paths.
+
+Also unlike C<fileparse()>, C<dirname()> does not include a trailing slash on
+its returned path.
+
+ # returns /foo/bar. fileparse() would return /foo/bar/
+ dirname("/foo/bar/baz");
+
+ # also returns /foo/bar despite the fact that baz is clearly a
+ # directory. fileparse() would return /foo/bar/baz/
+ dirname("/foo/bar/baz/");
+
+ # returns '.'. fileparse() would return 'foo/'
+ dirname("foo/");
+
+Under VMS, if there is no directory information in the $path, then the
+current default device and directory is used.
+
+=cut
+
+
+sub dirname {
+ my $path = shift;
+
+ my($type) = $Fileparse_fstype;
+
+ if( $type eq 'VMS' and $path =~ m{/} ) {
+ # Parse as Unix
+ local($File::Basename::Fileparse_fstype) = '';
+ return dirname($path);
+ }
+
+ my($basename, $dirname) = fileparse($path);
+
+ if ($type eq 'VMS') {
+ $dirname ||= $ENV{DEFAULT};
+ }
+ elsif ($type eq 'MacOS') {
+ if( !length($basename) && $dirname !~ /^[^:]+:\z/) {
+ _strip_trailing_sep($dirname);
+ ($basename,$dirname) = fileparse $dirname;
+ }
+ $dirname .= ":" unless $dirname =~ /:\z/;
+ }
+ elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
+ _strip_trailing_sep($dirname);
+ unless( length($basename) ) {
+ ($basename,$dirname) = fileparse $dirname;
+ _strip_trailing_sep($dirname);
+ }
+ }
+ elsif ($type eq 'AmigaOS') {
+ if ( $dirname =~ /:\z/) { return $dirname }
+ chop $dirname;
+ $dirname =~ s#[^:/]+\z## unless length($basename);
+ }
+ else {
+ _strip_trailing_sep($dirname);
+ unless( length($basename) ) {
+ ($basename,$dirname) = fileparse $dirname;
+ _strip_trailing_sep($dirname);
+ }
+ }
+
+ $dirname;
+}
+
+
+# Strip the trailing path separator.
+sub _strip_trailing_sep {
+ my $type = $Fileparse_fstype;
+
+ if ($type eq 'MacOS') {
+ $_[0] =~ s/([^:]):\z/$1/s;
+ }
+ elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) {
+ $_[0] =~ s/([^:])[\\\/]*\z/$1/;
+ }
+ else {
+ $_[0] =~ s{(.)/*\z}{$1}s;
+ }
+}
+
+
+=item C<fileparse_set_fstype>
+
+ my $type = fileparse_set_fstype();
+ my $previous_type = fileparse_set_fstype($type);
+
+Normally File::Basename will assume a file path type native to your current
+operating system (ie. /foo/bar style on Unix, \foo\bar on Windows, etc...).
+With this function you can override that assumption.
+
+Valid $types are "MacOS", "VMS", "AmigaOS", "OS2", "RISCOS",
+"MSWin32", "DOS" (also "MSDOS" for backwards bug compatibility),
+"Epoc" and "Unix" (all case-insensitive). If an unrecognized $type is
+given "Unix" will be assumed.
+
+If you've selected VMS syntax, and the file specification you pass to
+one of these routines contains a "/", they assume you are using Unix
+emulation and apply the Unix syntax rules instead, for that function
+call only.
+
+=back
+
+=cut
+
+
+BEGIN {
+
+my @Ignore_Case = qw(MacOS VMS AmigaOS OS2 RISCOS MSWin32 MSDOS DOS Epoc);
+my @Types = (@Ignore_Case, qw(Unix));
+
+sub fileparse_set_fstype {
+ my $old = $Fileparse_fstype;
+
+ if (@_) {
+ my $new_type = shift;
+
+ $Fileparse_fstype = 'Unix'; # default
+ foreach my $type (@Types) {
+ $Fileparse_fstype = $type if $new_type =~ /^$type/i;
+ }
+
+ $Fileparse_igncase =
+ (grep $Fileparse_fstype eq $_, @Ignore_Case) ? 1 : 0;
+ }
+
+ return $old;
+}
+
+}
+
+
+1;
+
+
+=head1 SEE ALSO
+
+L<dirname(1)>, L<basename(1)>, L<File::Spec>
diff --git a/Master/tlpkg/tlperl/lib/File/CheckTree.pm b/Master/tlpkg/tlperl/lib/File/CheckTree.pm
new file mode 100644
index 00000000000..20ffd68124d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/CheckTree.pm
@@ -0,0 +1,229 @@
+package File::CheckTree;
+
+use 5.006;
+use Cwd;
+use Exporter;
+use File::Spec;
+use warnings;
+use strict;
+
+our $VERSION = '4.3';
+our @ISA = qw(Exporter);
+our @EXPORT = qw(validate);
+
+=head1 NAME
+
+validate - run many filetest checks on a tree
+
+=head1 SYNOPSIS
+
+ use File::CheckTree;
+
+ $num_warnings = validate( q{
+ /vmunix -e || die
+ /boot -e || die
+ /bin cd
+ csh -ex
+ csh !-ug
+ sh -ex
+ sh !-ug
+ /usr -d || warn "What happened to $file?\n"
+ });
+
+=head1 DESCRIPTION
+
+The validate() routine takes a single multiline string consisting of
+directives, each containing a filename plus a file test to try on it.
+(The file test may also be a "cd", causing subsequent relative filenames
+to be interpreted relative to that directory.) After the file test
+you may put C<|| die> to make it a fatal error if the file test fails.
+The default is C<|| warn>. The file test may optionally have a "!' prepended
+to test for the opposite condition. If you do a cd and then list some
+relative filenames, you may want to indent them slightly for readability.
+If you supply your own die() or warn() message, you can use $file to
+interpolate the filename.
+
+Filetests may be bunched: "-rwx" tests for all of C<-r>, C<-w>, and C<-x>.
+Only the first failed test of the bunch will produce a warning.
+
+The routine returns the number of warnings issued.
+
+=head1 AUTHOR
+
+File::CheckTree was derived from lib/validate.pl which was
+written by Larry Wall.
+Revised by Paul Grassie <F<grassie@perl.com>> in 2002.
+
+=head1 HISTORY
+
+File::CheckTree used to not display fatal error messages.
+It used to count only those warnings produced by a generic C<|| warn>
+(and not those in which the user supplied the message). In addition,
+the validate() routine would leave the user program in whatever
+directory was last entered through the use of "cd" directives.
+These bugs were fixed during the development of perl 5.8.
+The first fixed version of File::CheckTree was 4.2.
+
+=cut
+
+my $Warnings;
+
+sub validate {
+ my ($starting_dir, $file, $test, $cwd, $oldwarnings);
+
+ $starting_dir = cwd;
+
+ $cwd = "";
+ $Warnings = 0;
+
+ foreach my $check (split /\n/, $_[0]) {
+ my ($testlist, @testlist);
+
+ # skip blanks/comments
+ next if $check =~ /^\s*#/ || $check =~ /^\s*$/;
+
+ # Todo:
+ # should probably check for invalid directives and die
+ # but earlier versions of File::CheckTree did not do this either
+
+ # split a line like "/foo -r || die"
+ # so that $file is "/foo", $test is "-rwx || die"
+ ($file, $test) = split(' ', $check, 2); # special whitespace split
+
+ # change a $test like "!-ug || die" to "!-Z || die",
+ # capturing the bundled tests (e.g. "ug") in $2
+ if ($test =~ s/ ^ (!?-) (\w{2,}) \b /$1Z/x) {
+ $testlist = $2;
+ # split bundled tests, e.g. "ug" to 'u', 'g'
+ @testlist = split(//, $testlist);
+ }
+ else {
+ # put in placeholder Z for stand-alone test
+ @testlist = ('Z');
+ }
+
+ # will compare these two later to stop on 1st warning w/in a bundle
+ $oldwarnings = $Warnings;
+
+ foreach my $one (@testlist) {
+ # examples of $test: "!-Z || die" or "-w || warn"
+ my $this = $test;
+
+ # expand relative $file to full pathname if preceded by cd directive
+ $file = File::Spec->catfile($cwd, $file)
+ if $cwd && !File::Spec->file_name_is_absolute($file);
+
+ # put filename in after the test operator
+ $this =~ s/(-\w\b)/$1 "\$file"/g;
+
+ # change the "-Z" representing a bundle with the $one test
+ $this =~ s/-Z/-$one/;
+
+ # if it's a "cd" directive...
+ if ($this =~ /^cd\b/) {
+ # add "|| die ..."
+ $this .= ' || die "cannot cd to $file\n"';
+ # expand "cd" directive with directory name
+ $this =~ s/\bcd\b/chdir(\$cwd = '$file')/;
+ }
+ else {
+ # add "|| warn" as a default disposition
+ $this .= ' || warn' unless $this =~ /\|\|/;
+
+ # change a generic ".. || die" or ".. || warn"
+ # to call valmess instead of die/warn directly
+ # valmess will look up the error message from %Val_Message
+ $this =~ s/ ^ ( (\S+) \s+ \S+ ) \s* \|\| \s* (die|warn) \s* $
+ /$1 || valmess('$3', '$2', \$file)/x;
+ }
+
+ {
+ # count warnings, either from valmess or '-r || warn "my msg"'
+ # also, call any pre-existing signal handler for __WARN__
+ my $orig_sigwarn = $SIG{__WARN__};
+ local $SIG{__WARN__} = sub {
+ ++$Warnings;
+ if ( $orig_sigwarn ) {
+ $orig_sigwarn->(@_);
+ }
+ else {
+ warn "@_";
+ }
+ };
+
+ # do the test
+ eval $this;
+
+ # re-raise an exception caused by a "... || die" test
+ if ($@) {
+ # in case of any cd directives, return from whence we came
+ if ($starting_dir ne cwd) {
+ chdir($starting_dir) || die "$starting_dir: $!";
+ }
+ die $@ if $@;
+ }
+ }
+
+ # stop on 1st warning within a bundle of tests
+ last if $Warnings > $oldwarnings;
+ }
+ }
+
+ # in case of any cd directives, return from whence we came
+ if ($starting_dir ne cwd) {
+ chdir($starting_dir) || die "chdir $starting_dir: $!";
+ }
+
+ return $Warnings;
+}
+
+my %Val_Message = (
+ 'r' => "is not readable by uid $>.",
+ 'w' => "is not writable by uid $>.",
+ 'x' => "is not executable by uid $>.",
+ 'o' => "is not owned by uid $>.",
+ 'R' => "is not readable by you.",
+ 'W' => "is not writable by you.",
+ 'X' => "is not executable by you.",
+ 'O' => "is not owned by you.",
+ 'e' => "does not exist.",
+ 'z' => "does not have zero size.",
+ 's' => "does not have non-zero size.",
+ 'f' => "is not a plain file.",
+ 'd' => "is not a directory.",
+ 'l' => "is not a symbolic link.",
+ 'p' => "is not a named pipe (FIFO).",
+ 'S' => "is not a socket.",
+ 'b' => "is not a block special file.",
+ 'c' => "is not a character special file.",
+ 'u' => "does not have the setuid bit set.",
+ 'g' => "does not have the setgid bit set.",
+ 'k' => "does not have the sticky bit set.",
+ 'T' => "is not a text file.",
+ 'B' => "is not a binary file."
+);
+
+sub valmess {
+ my ($disposition, $test, $file) = @_;
+ my $ferror;
+
+ if ($test =~ / ^ (!?) -(\w) \s* $ /x) {
+ my ($neg, $ftype) = ($1, $2);
+
+ $ferror = "$file $Val_Message{$ftype}";
+
+ if ($neg eq '!') {
+ $ferror =~ s/ is not / should not be / ||
+ $ferror =~ s/ does not / should not / ||
+ $ferror =~ s/ not / /;
+ }
+ }
+ else {
+ $ferror = "Can't do $test $file.\n";
+ }
+
+ die "$ferror\n" if $disposition eq 'die';
+ warn "$ferror\n";
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Compare.pm b/Master/tlpkg/tlperl/lib/File/Compare.pm
new file mode 100644
index 00000000000..0b73d7c7657
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Compare.pm
@@ -0,0 +1,178 @@
+package File::Compare;
+
+use 5.006;
+use strict;
+use warnings;
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
+
+require Exporter;
+use Carp;
+
+$VERSION = '1.1003';
+@ISA = qw(Exporter);
+@EXPORT = qw(compare);
+@EXPORT_OK = qw(cmp compare_text);
+
+$Too_Big = 1024 * 1024 * 2;
+
+sub compare {
+ croak("Usage: compare( file1, file2 [, buffersize]) ")
+ unless(@_ == 2 || @_ == 3);
+
+ my ($from,$to,$size) = @_;
+ my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
+
+ my ($fromsize,$closefrom,$closeto);
+ local (*FROM, *TO);
+
+ croak("from undefined") unless (defined $from);
+ croak("to undefined") unless (defined $to);
+
+ if (ref($from) &&
+ (UNIVERSAL::isa($from,'GLOB') || UNIVERSAL::isa($from,'IO::Handle'))) {
+ *FROM = *$from;
+ } elsif (ref(\$from) eq 'GLOB') {
+ *FROM = $from;
+ } else {
+ open(FROM,"<$from") or goto fail_open1;
+ unless ($text_mode) {
+ binmode FROM;
+ $fromsize = -s FROM;
+ }
+ $closefrom = 1;
+ }
+
+ if (ref($to) &&
+ (UNIVERSAL::isa($to,'GLOB') || UNIVERSAL::isa($to,'IO::Handle'))) {
+ *TO = *$to;
+ } elsif (ref(\$to) eq 'GLOB') {
+ *TO = $to;
+ } else {
+ open(TO,"<$to") or goto fail_open2;
+ binmode TO unless $text_mode;
+ $closeto = 1;
+ }
+
+ if (!$text_mode && $closefrom && $closeto) {
+ # If both are opened files we know they differ if their size differ
+ goto fail_inner if $fromsize != -s TO;
+ }
+
+ if ($text_mode) {
+ local $/ = "\n";
+ my ($fline,$tline);
+ while (defined($fline = <FROM>)) {
+ goto fail_inner unless defined($tline = <TO>);
+ if (ref $size) {
+ # $size contains ref to comparison function
+ goto fail_inner if &$size($fline, $tline);
+ } else {
+ goto fail_inner if $fline ne $tline;
+ }
+ }
+ goto fail_inner if defined($tline = <TO>);
+ }
+ else {
+ unless (defined($size) && $size > 0) {
+ $size = $fromsize || -s TO || 0;
+ $size = 1024 if $size < 512;
+ $size = $Too_Big if $size > $Too_Big;
+ }
+
+ my ($fr,$tr,$fbuf,$tbuf);
+ $fbuf = $tbuf = '';
+ while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
+ unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
+ goto fail_inner;
+ }
+ }
+ goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
+ }
+
+ close(TO) || goto fail_open2 if $closeto;
+ close(FROM) || goto fail_open1 if $closefrom;
+
+ return 0;
+
+ # All of these contortions try to preserve error messages...
+ fail_inner:
+ close(TO) || goto fail_open2 if $closeto;
+ close(FROM) || goto fail_open1 if $closefrom;
+
+ return 1;
+
+ fail_open2:
+ if ($closefrom) {
+ my $status = $!;
+ $! = 0;
+ close FROM;
+ $! = $status unless $!;
+ }
+ fail_open1:
+ return -1;
+}
+
+sub cmp;
+*cmp = \&compare;
+
+sub compare_text {
+ my ($from,$to,$cmp) = @_;
+ croak("Usage: compare_text( file1, file2 [, cmp-function])")
+ unless @_ == 2 || @_ == 3;
+ croak("Third arg to compare_text() function must be a code reference")
+ if @_ == 3 && ref($cmp) ne 'CODE';
+
+ # Using a negative buffer size puts compare into text_mode too
+ $cmp = -1 unless defined $cmp;
+ compare($from, $to, $cmp);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Compare - Compare files or filehandles
+
+=head1 SYNOPSIS
+
+ use File::Compare;
+
+ if (compare("file1","file2") == 0) {
+ print "They're equal\n";
+ }
+
+=head1 DESCRIPTION
+
+The File::Compare::compare function compares the contents of two
+sources, each of which can be a file or a file handle. It is exported
+from File::Compare by default.
+
+File::Compare::cmp is a synonym for File::Compare::compare. It is
+exported from File::Compare only by request.
+
+File::Compare::compare_text does a line by line comparison of the two
+files. It stops as soon as a difference is detected. compare_text()
+accepts an optional third argument: This must be a CODE reference to
+a line comparison function, which returns 0 when both lines are considered
+equal. For example:
+
+ compare_text($file1, $file2)
+
+is basically equivalent to
+
+ compare_text($file1, $file2, sub {$_[0] ne $_[1]} )
+
+=head1 RETURN
+
+File::Compare::compare and its sibling functions return 0 if the files
+are equal, 1 if the files are unequal, or -1 if an error was encountered.
+
+=head1 AUTHOR
+
+File::Compare was written by Nick Ing-Simmons.
+Its original documentation was written by Chip Salzenberg.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/File/Copy.pm b/Master/tlpkg/tlperl/lib/File/Copy.pm
new file mode 100644
index 00000000000..52ba7c6d81a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Copy.pm
@@ -0,0 +1,459 @@
+# File/Copy.pm. Written in 1994 by Aaron Sherman <ajs@ajs.com>. This
+# source code has been placed in the public domain by the author.
+# Please be kind and preserve the documentation.
+#
+# Additions copyright 1996 by Charles Bailey. Permission is granted
+# to distribute the revised code under the same terms as Perl itself.
+
+package File::Copy;
+
+use 5.006;
+use strict;
+use warnings;
+use Carp;
+use File::Spec;
+use Config;
+our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy);
+sub copy;
+sub syscopy;
+sub cp;
+sub mv;
+
+# Note that this module implements only *part* of the API defined by
+# the File/Copy.pm module of the File-Tools-2.0 package. However, that
+# package has not yet been updated to work with Perl 5.004, and so it
+# would be a Bad Thing for the CPAN module to grab it and replace this
+# module. Therefore, we set this module's version higher than 2.0.
+$VERSION = '2.09';
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(copy move);
+@EXPORT_OK = qw(cp mv);
+
+$Too_Big = 1024 * 1024 * 2;
+
+my $macfiles;
+if ($^O eq 'MacOS') {
+ $macfiles = eval { require Mac::MoreFiles };
+ warn 'Mac::MoreFiles could not be loaded; using non-native syscopy'
+ if $@ && $^W;
+}
+
+sub _catname {
+ my($from, $to) = @_;
+ if (not defined &basename) {
+ require File::Basename;
+ import File::Basename 'basename';
+ }
+
+ if ($^O eq 'MacOS') {
+ # a partial dir name that's valid only in the cwd (e.g. 'tmp')
+ $to = ':' . $to if $to !~ /:/;
+ }
+
+ return File::Spec->catfile($to, basename($from));
+}
+
+sub copy {
+ croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ")
+ unless(@_ == 2 || @_ == 3);
+
+ my $from = shift;
+ my $to = shift;
+
+ my $from_a_handle = (ref($from)
+ ? (ref($from) eq 'GLOB'
+ || UNIVERSAL::isa($from, 'GLOB')
+ || UNIVERSAL::isa($from, 'IO::Handle'))
+ : (ref(\$from) eq 'GLOB'));
+ my $to_a_handle = (ref($to)
+ ? (ref($to) eq 'GLOB'
+ || UNIVERSAL::isa($to, 'GLOB')
+ || UNIVERSAL::isa($to, 'IO::Handle'))
+ : (ref(\$to) eq 'GLOB'));
+
+ if ($from eq $to) { # works for references, too
+ carp("'$from' and '$to' are identical (not copied)");
+ # The "copy" was a success as the source and destination contain
+ # the same data.
+ return 1;
+ }
+
+ if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) &&
+ !($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'vms')) {
+ my @fs = stat($from);
+ if (@fs) {
+ my @ts = stat($to);
+ if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) {
+ carp("'$from' and '$to' are identical (not copied)");
+ return 0;
+ }
+ }
+ }
+
+ if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
+ $to = _catname($from, $to);
+ }
+
+ if (defined &syscopy && !$Syscopy_is_copy
+ && !$to_a_handle
+ && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles
+ && !($from_a_handle && $^O eq 'mpeix') # and neither can MPE/iX.
+ && !($from_a_handle && $^O eq 'MSWin32')
+ && !($from_a_handle && $^O eq 'MacOS')
+ && !($from_a_handle && $^O eq 'NetWare')
+ )
+ {
+ return syscopy($from, $to);
+ }
+
+ my $closefrom = 0;
+ my $closeto = 0;
+ my ($size, $status, $r, $buf);
+ local($\) = '';
+
+ my $from_h;
+ if ($from_a_handle) {
+ $from_h = $from;
+ } else {
+ $from = _protect($from) if $from =~ /^\s/s;
+ $from_h = \do { local *FH };
+ open($from_h, "< $from\0") or goto fail_open1;
+ binmode $from_h or die "($!,$^E)";
+ $closefrom = 1;
+ }
+
+ my $to_h;
+ if ($to_a_handle) {
+ $to_h = $to;
+ } else {
+ $to = _protect($to) if $to =~ /^\s/s;
+ $to_h = \do { local *FH };
+ open($to_h,"> $to\0") or goto fail_open2;
+ binmode $to_h or die "($!,$^E)";
+ $closeto = 1;
+ }
+
+ if (@_) {
+ $size = shift(@_) + 0;
+ croak("Bad buffer size for copy: $size\n") unless ($size > 0);
+ } else {
+ $size = tied(*$from_h) ? 0 : -s $from_h || 0;
+ $size = 1024 if ($size < 512);
+ $size = $Too_Big if ($size > $Too_Big);
+ }
+
+ $! = 0;
+ for (;;) {
+ my ($r, $w, $t);
+ defined($r = sysread($from_h, $buf, $size))
+ or goto fail_inner;
+ last unless $r;
+ for ($w = 0; $w < $r; $w += $t) {
+ $t = syswrite($to_h, $buf, $r - $w, $w)
+ or goto fail_inner;
+ }
+ }
+
+ close($to_h) || goto fail_open2 if $closeto;
+ close($from_h) || goto fail_open1 if $closefrom;
+
+ # Use this idiom to avoid uninitialized value warning.
+ return 1;
+
+ # All of these contortions try to preserve error messages...
+ fail_inner:
+ if ($closeto) {
+ $status = $!;
+ $! = 0;
+ close $to_h;
+ $! = $status unless $!;
+ }
+ fail_open2:
+ if ($closefrom) {
+ $status = $!;
+ $! = 0;
+ close $from_h;
+ $! = $status unless $!;
+ }
+ fail_open1:
+ return 0;
+}
+
+sub move {
+ croak("Usage: move(FROM, TO) ") unless @_ == 2;
+
+ my($from,$to) = @_;
+
+ my($fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts);
+
+ if (-d $to && ! -d $from) {
+ $to = _catname($from, $to);
+ }
+
+ ($tosz1,$tomt1) = (stat($to))[7,9];
+ $fromsz = -s $from;
+ if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) {
+ # will not rename with overwrite
+ unlink $to;
+ }
+ return 1 if rename $from, $to;
+
+ # Did rename return an error even though it succeeded, because $to
+ # is on a remote NFS file system, and NFS lost the server's ack?
+ return 1 if defined($fromsz) && !-e $from && # $from disappeared
+ (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there
+ ($tosz1 != $tosz2 or $tomt1 != $tomt2) && # and changed
+ $tosz2 == $fromsz; # it's all there
+
+ ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something
+
+ {
+ local $@;
+ eval {
+ local $SIG{__DIE__};
+ copy($from,$to) or die;
+ my($atime, $mtime) = (stat($from))[8,9];
+ utime($atime, $mtime, $to);
+ unlink($from) or die;
+ };
+ return 1 unless $@;
+ }
+ ($sts,$ossts) = ($! + 0, $^E + 0);
+
+ ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1;
+ unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2;
+ ($!,$^E) = ($sts,$ossts);
+ return 0;
+}
+
+*cp = \&copy;
+*mv = \&move;
+
+
+if ($^O eq 'MacOS') {
+ *_protect = sub { MacPerl::MakeFSSpec($_[0]) };
+} else {
+ *_protect = sub { "./$_[0]" };
+}
+
+# &syscopy is an XSUB under OS/2
+unless (defined &syscopy) {
+ if ($^O eq 'VMS') {
+ *syscopy = \&rmscopy;
+ } elsif ($^O eq 'mpeix') {
+ *syscopy = sub {
+ return 0 unless @_ == 2;
+ # Use the MPE cp program in order to
+ # preserve MPE file attributes.
+ return system('/bin/cp', '-f', $_[0], $_[1]) == 0;
+ };
+ } elsif ($^O eq 'MSWin32') {
+ *syscopy = sub {
+ return 0 unless @_ == 2;
+ return Win32::CopyFile(@_, 1);
+ };
+ } elsif ($macfiles) {
+ *syscopy = sub {
+ my($from, $to) = @_;
+ my($dir, $toname);
+
+ return 0 unless -e $from;
+
+ if ($to =~ /(.*:)([^:]+):?$/) {
+ ($dir, $toname) = ($1, $2);
+ } else {
+ ($dir, $toname) = (":", $to);
+ }
+
+ unlink($to);
+ Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1);
+ };
+ } else {
+ $Syscopy_is_copy = 1;
+ *syscopy = \&copy;
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Copy - Copy files or filehandles
+
+=head1 SYNOPSIS
+
+ use File::Copy;
+
+ copy("file1","file2") or die "Copy failed: $!";
+ copy("Copy.pm",\*STDOUT);
+ move("/dev1/fileA","/dev2/fileB");
+
+ use File::Copy "cp";
+
+ $n = FileHandle->new("/a/file","r");
+ cp($n,"x");
+
+=head1 DESCRIPTION
+
+The File::Copy module provides two basic functions, C<copy> and
+C<move>, which are useful for getting the contents of a file from
+one place to another.
+
+=over 4
+
+=item *
+
+The C<copy> function takes two
+parameters: a file to copy from and a file to copy to. Either
+argument may be a string, a FileHandle reference or a FileHandle
+glob. Obviously, if the first argument is a filehandle of some
+sort, it will be read from, and if it is a file I<name> it will
+be opened for reading. Likewise, the second argument will be
+written to (and created if need be). Trying to copy a file on top
+of itself is a fatal error.
+
+B<Note that passing in
+files as handles instead of names may lead to loss of information
+on some operating systems; it is recommended that you use file
+names whenever possible.> Files are opened in binary mode where
+applicable. To get a consistent behaviour when copying from a
+filehandle to a file, use C<binmode> on the filehandle.
+
+An optional third parameter can be used to specify the buffer
+size used for copying. This is the number of bytes from the
+first file, that wil be held in memory at any given time, before
+being written to the second file. The default buffer size depends
+upon the file, but will generally be the whole file (up to 2Mb), or
+1k for filehandles that do not reference files (eg. sockets).
+
+You may use the syntax C<use File::Copy "cp"> to get at the
+"cp" alias for this function. The syntax is I<exactly> the same.
+
+=item *
+
+The C<move> function also takes two parameters: the current name
+and the intended name of the file to be moved. If the destination
+already exists and is a directory, and the source is not a
+directory, then the source file will be renamed into the directory
+specified by the destination.
+
+If possible, move() will simply rename the file. Otherwise, it copies
+the file to the new location and deletes the original. If an error occurs
+during this copy-and-delete process, you may be left with a (possibly partial)
+copy of the file under the destination name.
+
+You may use the "mv" alias for this function in the same way that
+you may use the "cp" alias for C<copy>.
+
+=back
+
+File::Copy also provides the C<syscopy> routine, which copies the
+file specified in the first parameter to the file specified in the
+second parameter, preserving OS-specific attributes and file
+structure. For Unix systems, this is equivalent to the simple
+C<copy> routine, which doesn't preserve OS-specific attributes. For
+VMS systems, this calls the C<rmscopy> routine (see below). For OS/2
+systems, this calls the C<syscopy> XSUB directly. For Win32 systems,
+this calls C<Win32::CopyFile>.
+
+On Mac OS (Classic), C<syscopy> calls C<Mac::MoreFiles::FSpFileCopy>,
+if available.
+
+=head2 Special behaviour if C<syscopy> is defined (OS/2, VMS and Win32)
+
+If both arguments to C<copy> are not file handles,
+then C<copy> will perform a "system copy" of
+the input file to a new output file, in order to preserve file
+attributes, indexed file structure, I<etc.> The buffer size
+parameter is ignored. If either argument to C<copy> is a
+handle to an opened file, then data is copied using Perl
+operators, and no effort is made to preserve file attributes
+or record structure.
+
+The system copy routine may also be called directly under VMS and OS/2
+as C<File::Copy::syscopy> (or under VMS as C<File::Copy::rmscopy>, which
+is the routine that does the actual work for syscopy).
+
+=over 4
+
+=item rmscopy($from,$to[,$date_flag])
+
+The first and second arguments may be strings, typeglobs, typeglob
+references, or objects inheriting from IO::Handle;
+they are used in all cases to obtain the
+I<filespec> of the input and output files, respectively. The
+name and type of the input file are used as defaults for the
+output file, if necessary.
+
+A new version of the output file is always created, which
+inherits the structure and RMS attributes of the input file,
+except for owner and protections (and possibly timestamps;
+see below). All data from the input file is copied to the
+output file; if either of the first two parameters to C<rmscopy>
+is a file handle, its position is unchanged. (Note that this
+means a file handle pointing to the output file will be
+associated with an old version of that file after C<rmscopy>
+returns, not the newly created version.)
+
+The third parameter is an integer flag, which tells C<rmscopy>
+how to handle timestamps. If it is E<lt> 0, none of the input file's
+timestamps are propagated to the output file. If it is E<gt> 0, then
+it is interpreted as a bitmask: if bit 0 (the LSB) is set, then
+timestamps other than the revision date are propagated; if bit 1
+is set, the revision date is propagated. If the third parameter
+to C<rmscopy> is 0, then it behaves much like the DCL COPY command:
+if the name or type of the output file was explicitly specified,
+then no timestamps are propagated, but if they were taken implicitly
+from the input filespec, then all timestamps other than the
+revision date are propagated. If this parameter is not supplied,
+it defaults to 0.
+
+Like C<copy>, C<rmscopy> returns 1 on success. If an error occurs,
+it sets C<$!>, deletes the output file, and returns 0.
+
+=back
+
+=head1 RETURN
+
+All functions return 1 on success, 0 on failure.
+$! will be set if an error was encountered.
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+On Mac OS (Classic), the path separator is ':', not '/', and the
+current directory is denoted as ':', not '.'. You should be careful
+about specifying relative pathnames. While a full path always begins
+with a volume name, a relative pathname should always begin with a
+':'. If specifying a volume name only, a trailing ':' is required.
+
+E.g.
+
+ copy("file1", "tmp"); # creates the file 'tmp' in the current directory
+ copy("file1", ":tmp:"); # creates :tmp:file1
+ copy("file1", ":tmp"); # same as above
+ copy("file1", "tmp"); # same as above, if 'tmp' is a directory (but don't do
+ # that, since it may cause confusion, see example #1)
+ copy("file1", "tmp:file1"); # error, since 'tmp:' is not a volume
+ copy("file1", ":tmp:file1"); # ok, partial path
+ copy("file1", "DataHD:"); # creates DataHD:file1
+
+ move("MacintoshHD:fileA", "DataHD:fileB"); # moves (don't copies) files from one
+ # volume to another
+
+=back
+
+=head1 AUTHOR
+
+File::Copy was written by Aaron Sherman I<E<lt>ajs@ajs.comE<gt>> in 1995,
+and updated by Charles Bailey I<E<lt>bailey@newman.upenn.eduE<gt>> in 1996.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/File/DosGlob.pm b/Master/tlpkg/tlperl/lib/File/DosGlob.pm
new file mode 100644
index 00000000000..a1c27d5c32a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/DosGlob.pm
@@ -0,0 +1,571 @@
+#!perl -w
+
+# use strict fails
+#Can't use string ("main::glob") as a symbol ref while "strict refs" in use at /usr/lib/perl5/5.005/File/DosGlob.pm line 191.
+
+#
+# Documentation at the __END__
+#
+
+package File::DosGlob;
+
+our $VERSION = '1.00';
+use strict;
+use warnings;
+
+sub doglob {
+ my $cond = shift;
+ my @retval = ();
+ #print "doglob: ", join('|', @_), "\n";
+ OUTER:
+ for my $pat (@_) {
+ my @matched = ();
+ my @globdirs = ();
+ my $head = '.';
+ my $sepchr = '/';
+ my $tail;
+ next OUTER unless defined $pat and $pat ne '';
+ # if arg is within quotes strip em and do no globbing
+ if ($pat =~ /^"(.*)"\z/s) {
+ $pat = $1;
+ if ($cond eq 'd') { push(@retval, $pat) if -d $pat }
+ else { push(@retval, $pat) if -e $pat }
+ next OUTER;
+ }
+ # wildcards with a drive prefix such as h:*.pm must be changed
+ # to h:./*.pm to expand correctly
+ if ($pat =~ m|^([A-Za-z]:)[^/\\]|s) {
+ substr($_,0,2) = $1 . "./";
+ }
+ if ($pat =~ m|^(.*)([\\/])([^\\/]*)\z|s) {
+ ($head, $sepchr, $tail) = ($1,$2,$3);
+ #print "div: |$head|$sepchr|$tail|\n";
+ push (@retval, $pat), next OUTER if $tail eq '';
+ if ($head =~ /[*?]/) {
+ @globdirs = doglob('d', $head);
+ push(@retval, doglob($cond, map {"$_$sepchr$tail"} @globdirs)),
+ next OUTER if @globdirs;
+ }
+ $head .= $sepchr if $head eq '' or $head =~ /^[A-Za-z]:\z/s;
+ $pat = $tail;
+ }
+ #
+ # If file component has no wildcards, we can avoid opendir
+ unless ($pat =~ /[*?]/) {
+ $head = '' if $head eq '.';
+ $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
+ $head .= $pat;
+ if ($cond eq 'd') { push(@retval,$head) if -d $head }
+ else { push(@retval,$head) if -e $head }
+ next OUTER;
+ }
+ opendir(D, $head) or next OUTER;
+ my @leaves = readdir D;
+ closedir D;
+ $head = '' if $head eq '.';
+ $head .= $sepchr unless $head eq '' or substr($head,-1) eq $sepchr;
+
+ # escape regex metachars but not glob chars
+ $pat =~ s:([].+^\-\${}[|]):\\$1:g;
+ # and convert DOS-style wildcards to regex
+ $pat =~ s/\*/.*/g;
+ $pat =~ s/\?/.?/g;
+
+ #print "regex: '$pat', head: '$head'\n";
+ my $matchsub = sub { $_[0] =~ m|^$pat\z|is };
+ INNER:
+ for my $e (@leaves) {
+ next INNER if $e eq '.' or $e eq '..';
+ next INNER if $cond eq 'd' and ! -d "$head$e";
+ push(@matched, "$head$e"), next INNER if &$matchsub($e);
+ #
+ # [DOS compatibility special case]
+ # Failed, add a trailing dot and try again, but only
+ # if name does not have a dot in it *and* pattern
+ # has a dot *and* name is shorter than 9 chars.
+ #
+ if (index($e,'.') == -1 and length($e) < 9
+ and index($pat,'\\.') != -1) {
+ push(@matched, "$head$e"), next INNER if &$matchsub("$e.");
+ }
+ }
+ push @retval, @matched if @matched;
+ }
+ return @retval;
+}
+
+
+#
+# Do DOS-like globbing on Mac OS
+#
+sub doglob_Mac {
+ my $cond = shift;
+ my @retval = ();
+
+ #print "doglob_Mac: ", join('|', @_), "\n";
+ OUTER:
+ for my $arg (@_) {
+ local $_ = $arg;
+ my @matched = ();
+ my @globdirs = ();
+ my $head = ':';
+ my $not_esc_head = $head;
+ my $sepchr = ':';
+ next OUTER unless defined $_ and $_ ne '';
+ # if arg is within quotes strip em and do no globbing
+ if (/^"(.*)"\z/s) {
+ $_ = $1;
+ # $_ may contain escaped metachars '\*', '\?' and '\'
+ my $not_esc_arg = $_;
+ $not_esc_arg =~ s/\\([*?\\])/$1/g;
+ if ($cond eq 'd') { push(@retval, $not_esc_arg) if -d $not_esc_arg }
+ else { push(@retval, $not_esc_arg) if -e $not_esc_arg }
+ next OUTER;
+ }
+
+ if (m|^(.*?)(:+)([^:]*)\z|s) { # note: $1 is not greedy
+ my $tail;
+ ($head, $sepchr, $tail) = ($1,$2,$3);
+ #print "div: |$head|$sepchr|$tail|\n";
+ push (@retval, $_), next OUTER if $tail eq '';
+ #
+ # $head may contain escaped metachars '\*' and '\?'
+
+ my $tmp_head = $head;
+ # if a '*' or '?' is preceded by an odd count of '\', temporary delete
+ # it (and its preceding backslashes), i.e. don't treat '\*' and '\?' as
+ # wildcards
+ $tmp_head =~ s/(\\*)([*?])/$2 x ((length($1) + 1) % 2)/eg;
+
+ if ($tmp_head =~ /[*?]/) { # if there are wildcards ...
+ @globdirs = doglob_Mac('d', $head);
+ push(@retval, doglob_Mac($cond, map {"$_$sepchr$tail"} @globdirs)),
+ next OUTER if @globdirs;
+ }
+
+ $head .= $sepchr;
+ $not_esc_head = $head;
+ # unescape $head for file operations
+ $not_esc_head =~ s/\\([*?\\])/$1/g;
+ $_ = $tail;
+ }
+ #
+ # If file component has no wildcards, we can avoid opendir
+
+ my $tmp_tail = $_;
+ # if a '*' or '?' is preceded by an odd count of '\', temporary delete
+ # it (and its preceding backslashes), i.e. don't treat '\*' and '\?' as
+ # wildcards
+ $tmp_tail =~ s/(\\*)([*?])/$2 x ((length($1) + 1) % 2)/eg;
+
+ unless ($tmp_tail =~ /[*?]/) { # if there are wildcards ...
+ $not_esc_head = $head = '' if $head eq ':';
+ my $not_esc_tail = $_;
+ # unescape $head and $tail for file operations
+ $not_esc_tail =~ s/\\([*?\\])/$1/g;
+ $head .= $_;
+ $not_esc_head .= $not_esc_tail;
+ if ($cond eq 'd') { push(@retval,$head) if -d $not_esc_head }
+ else { push(@retval,$head) if -e $not_esc_head }
+ next OUTER;
+ }
+ #print "opendir($not_esc_head)\n";
+ opendir(D, $not_esc_head) or next OUTER;
+ my @leaves = readdir D;
+ closedir D;
+
+ # escape regex metachars but not '\' and glob chars '*', '?'
+ $_ =~ s:([].+^\-\${}[|]):\\$1:g;
+ # and convert DOS-style wildcards to regex,
+ # but only if they are not escaped
+ $_ =~ s/(\\*)([*?])/$1 . ('.' x ((length($1) + 1) % 2)) . $2/eg;
+
+ #print "regex: '$_', head: '$head', unescaped head: '$not_esc_head'\n";
+ my $matchsub = eval 'sub { $_[0] =~ m|^' . $_ . '\\z|ios }';
+ warn($@), next OUTER if $@;
+ INNER:
+ for my $e (@leaves) {
+ next INNER if $e eq '.' or $e eq '..';
+ next INNER if $cond eq 'd' and ! -d "$not_esc_head$e";
+
+ if (&$matchsub($e)) {
+ my $leave = (($not_esc_head eq ':') && (-f "$not_esc_head$e")) ?
+ "$e" : "$not_esc_head$e";
+ #
+ # On Mac OS, the two glob metachars '*' and '?' and the escape
+ # char '\' are valid characters for file and directory names.
+ # We have to escape and treat them specially.
+ $leave =~ s|([*?\\])|\\$1|g;
+ push(@matched, $leave);
+ next INNER;
+ }
+ }
+ push @retval, @matched if @matched;
+ }
+ return @retval;
+}
+
+#
+# _expand_volume() will only be used on Mac OS (Classic):
+# Takes an array of original patterns as argument and returns an array of
+# possibly modified patterns. Each original pattern is processed like
+# that:
+# + If there's a volume name in the pattern, we push a separate pattern
+# for each mounted volume that matches (with '*', '?' and '\' escaped).
+# + If there's no volume name in the original pattern, it is pushed
+# unchanged.
+# Note that the returned array of patterns may be empty.
+#
+sub _expand_volume {
+
+ require MacPerl; # to be verbose
+
+ my @pat = @_;
+ my @new_pat = ();
+ my @FSSpec_Vols = MacPerl::Volumes();
+ my @mounted_volumes = ();
+
+ foreach my $spec_vol (@FSSpec_Vols) {
+ # push all mounted volumes into array
+ push @mounted_volumes, MacPerl::MakePath($spec_vol);
+ }
+ #print "mounted volumes: |@mounted_volumes|\n";
+
+ while (@pat) {
+ my $pat = shift @pat;
+ if ($pat =~ /^([^:]+:)(.*)\z/) { # match a volume name?
+ my $vol_pat = $1;
+ my $tail = $2;
+ #
+ # escape regex metachars but not '\' and glob chars '*', '?'
+ $vol_pat =~ s:([].+^\-\${}[|]):\\$1:g;
+ # and convert DOS-style wildcards to regex,
+ # but only if they are not escaped
+ $vol_pat =~ s/(\\*)([*?])/$1 . ('.' x ((length($1) + 1) % 2)) . $2/eg;
+ #print "volume regex: '$vol_pat' \n";
+
+ foreach my $volume (@mounted_volumes) {
+ if ($volume =~ m|^$vol_pat\z|ios) {
+ #
+ # On Mac OS, the two glob metachars '*' and '?' and the
+ # escape char '\' are valid characters for volume names.
+ # We have to escape and treat them specially.
+ $volume =~ s|([*?\\])|\\$1|g;
+ push @new_pat, $volume . $tail;
+ }
+ }
+ } else { # no volume name in pattern, push original pattern
+ push @new_pat, $pat;
+ }
+ }
+ return @new_pat;
+}
+
+
+#
+# _preprocess_pattern() will only be used on Mac OS (Classic):
+# Resolves any updirs in the pattern. Removes a single trailing colon
+# from the pattern, unless it's a volume name pattern like "*HD:"
+#
+sub _preprocess_pattern {
+ my @pat = @_;
+
+ foreach my $p (@pat) {
+ my $proceed;
+ # resolve any updirs, e.g. "*HD:t?p::a*" -> "*HD:a*"
+ do {
+ $proceed = ($p =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/);
+ } while ($proceed);
+ # remove a single trailing colon, e.g. ":*:" -> ":*"
+ $p =~ s/:([^:]+):\z/:$1/;
+ }
+ return @pat;
+}
+
+
+#
+# _un_escape() will only be used on Mac OS (Classic):
+# Unescapes a list of arguments which may contain escaped
+# metachars '*', '?' and '\'.
+#
+sub _un_escape {
+ foreach (@_) {
+ s/\\([*?\\])/$1/g;
+ }
+ return @_;
+}
+
+#
+# this can be used to override CORE::glob in a specific
+# package by saying C<use File::DosGlob 'glob';> in that
+# namespace.
+#
+
+# context (keyed by second cxix arg provided by core)
+my %iter;
+my %entries;
+
+sub glob {
+ my($pat,$cxix) = @_;
+ my @pat;
+
+ # glob without args defaults to $_
+ $pat = $_ unless defined $pat;
+
+ # extract patterns
+ if ($pat =~ /\s/) {
+ require Text::ParseWords;
+ @pat = Text::ParseWords::parse_line('\s+',0,$pat);
+ }
+ else {
+ push @pat, $pat;
+ }
+
+ # Mike Mestnik: made to do abc{1,2,3} == abc1 abc2 abc3.
+ # abc3 will be the original {3} (and drop the {}).
+ # abc1 abc2 will be put in @appendpat.
+ # This was just the esiest way, not nearly the best.
+ REHASH: {
+ my @appendpat = ();
+ for (@pat) {
+ # There must be a "," I.E. abc{efg} is not what we want.
+ while ( /^(.*)(?<!\\)\{(.*?)(?<!\\)\,.*?(?<!\\)\}(.*)$/ ) {
+ my ($start, $match, $end) = ($1, $2, $3);
+ #print "Got: \n\t$start\n\t$match\n\t$end\n";
+ my $tmp = "$start$match$end";
+ while ( $tmp =~ s/^(.*?)(?<!\\)\{(?:.*(?<!\\)\,)?(.*\Q$match\E.*?)(?:(?<!\\)\,.*)?(?<!\\)\}(.*)$/$1$2$3/ ) {
+ #print "Striped: $tmp\n";
+ # these expanshions will be preformed by the original,
+ # when we call REHASH.
+ }
+ push @appendpat, ("$tmp");
+ s/^\Q$start\E(?<!\\)\{\Q$match\E(?<!\\)\,/$start\{/;
+ if ( /^\Q$start\E(?<!\\)\{(?!.*?(?<!\\)\,.*?\Q$end\E$)(.*)(?<!\\)\}\Q$end\E$/ ) {
+ $match = $1;
+ #print "GOT: \n\t$start\n\t$match\n\t$end\n\n";
+ $_ = "$start$match$end";
+ }
+ }
+ #print "Sould have "GOT" vs "Got"!\n";
+ #FIXME: There should be checking for this.
+ # How or what should be done about failure is beond me.
+ }
+ if ( $#appendpat != -1
+ ) {
+ #print "LOOP\n";
+ #FIXME: Max loop, no way! :")
+ for ( @appendpat ) {
+ push @pat, $_;
+ }
+ goto REHASH;
+ }
+ }
+ for ( @pat ) {
+ s/\\{/{/g;
+ s/\\}/}/g;
+ s/\\,/,/g;
+ }
+ #print join ("\n", @pat). "\n";
+
+ # assume global context if not provided one
+ $cxix = '_G_' unless defined $cxix;
+ $iter{$cxix} = 0 unless exists $iter{$cxix};
+
+ # if we're just beginning, do it all first
+ if ($iter{$cxix} == 0) {
+ if ($^O eq 'MacOS') {
+ # first, take care of updirs and trailing colons
+ @pat = _preprocess_pattern(@pat);
+ # expand volume names
+ @pat = _expand_volume(@pat);
+ $entries{$cxix} = (@pat) ? [_un_escape( doglob_Mac(1,@pat) )] : [()];
+ } else {
+ $entries{$cxix} = [doglob(1,@pat)];
+ }
+ }
+
+ # chuck it all out, quick or slow
+ if (wantarray) {
+ delete $iter{$cxix};
+ return @{delete $entries{$cxix}};
+ }
+ else {
+ if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
+ return shift @{$entries{$cxix}};
+ }
+ else {
+ # return undef for EOL
+ delete $iter{$cxix};
+ delete $entries{$cxix};
+ return undef;
+ }
+ }
+}
+
+{
+ no strict 'refs';
+
+ sub import {
+ my $pkg = shift;
+ return unless @_;
+ my $sym = shift;
+ my $callpkg = ($sym =~ s/^GLOBAL_//s ? 'CORE::GLOBAL' : caller(0));
+ *{$callpkg.'::'.$sym} = \&{$pkg.'::'.$sym} if $sym eq 'glob';
+ }
+}
+1;
+
+__END__
+
+=head1 NAME
+
+File::DosGlob - DOS like globbing and then some
+
+=head1 SYNOPSIS
+
+ require 5.004;
+
+ # override CORE::glob in current package
+ use File::DosGlob 'glob';
+
+ # override CORE::glob in ALL packages (use with extreme caution!)
+ use File::DosGlob 'GLOBAL_glob';
+
+ @perlfiles = glob "..\\pe?l/*.p?";
+ print <..\\pe?l/*.p?>;
+
+ # from the command line (overrides only in main::)
+ > perl -MFile::DosGlob=glob -e "print <../pe*/*p?>"
+
+=head1 DESCRIPTION
+
+A module that implements DOS-like globbing with a few enhancements.
+It is largely compatible with perlglob.exe (the M$ setargv.obj
+version) in all but one respect--it understands wildcards in
+directory components.
+
+For example, C<<..\\l*b\\file/*glob.p?>> will work as expected (in
+that it will find something like '..\lib\File/DosGlob.pm' alright).
+Note that all path components are case-insensitive, and that
+backslashes and forward slashes are both accepted, and preserved.
+You may have to double the backslashes if you are putting them in
+literally, due to double-quotish parsing of the pattern by perl.
+
+Spaces in the argument delimit distinct patterns, so
+C<glob('*.exe *.dll')> globs all filenames that end in C<.exe>
+or C<.dll>. If you want to put in literal spaces in the glob
+pattern, you can escape them with either double quotes, or backslashes.
+e.g. C<glob('c:/"Program Files"/*/*.dll')>, or
+C<glob('c:/Program\ Files/*/*.dll')>. The argument is tokenized using
+C<Text::ParseWords::parse_line()>, so see L<Text::ParseWords> for details
+of the quoting rules used.
+
+Extending it to csh patterns is left as an exercise to the reader.
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+Mac OS (Classic) users should note a few differences. The specification
+of pathnames in glob patterns adheres to the usual Mac OS conventions:
+The path separator is a colon ':', not a slash '/' or backslash '\'. A
+full path always begins with a volume name. A relative pathname on Mac
+OS must always begin with a ':', except when specifying a file or
+directory name in the current working directory, where the leading colon
+is optional. If specifying a volume name only, a trailing ':' is
+required. Due to these rules, a glob like E<lt>*:E<gt> will find all
+mounted volumes, while a glob like E<lt>*E<gt> or E<lt>:*E<gt> will find
+all files and directories in the current directory.
+
+Note that updirs in the glob pattern are resolved before the matching begins,
+i.e. a pattern like "*HD:t?p::a*" will be matched as "*HD:a*". Note also,
+that a single trailing ':' in the pattern is ignored (unless it's a volume
+name pattern like "*HD:"), i.e. a glob like <:*:> will find both directories
+I<and> files (and not, as one might expect, only directories).
+
+The metachars '*', '?' and the escape char '\' are valid characters in
+volume, directory and file names on Mac OS. Hence, if you want to match
+a '*', '?' or '\' literally, you have to escape these characters. Due to
+perl's quoting rules, things may get a bit complicated, when you want to
+match a string like '\*' literally, or when you want to match '\' literally,
+but treat the immediately following character '*' as metachar. So, here's a
+rule of thumb (applies to both single- and double-quoted strings): escape
+each '*' or '?' or '\' with a backslash, if you want to treat them literally,
+and then double each backslash and your are done. E.g.
+
+- Match '\*' literally
+
+ escape both '\' and '*' : '\\\*'
+ double the backslashes : '\\\\\\*'
+
+(Internally, the glob routine sees a '\\\*', which means that both '\' and
+'*' are escaped.)
+
+
+- Match '\' literally, treat '*' as metachar
+
+ escape '\' but not '*' : '\\*'
+ double the backslashes : '\\\\*'
+
+(Internally, the glob routine sees a '\\*', which means that '\' is escaped and
+'*' is not.)
+
+Note that you also have to quote literal spaces in the glob pattern, as described
+above.
+
+=back
+
+=head1 EXPORTS (by request only)
+
+glob()
+
+=head1 BUGS
+
+Should probably be built into the core, and needs to stop
+pandering to DOS habits. Needs a dose of optimizium too.
+
+=head1 AUTHOR
+
+Gurusamy Sarathy <gsar@activestate.com>
+
+=head1 HISTORY
+
+=over 4
+
+=item *
+
+Support for globally overriding glob() (GSAR 3-JUN-98)
+
+=item *
+
+Scalar context, independent iterator context fixes (GSAR 15-SEP-97)
+
+=item *
+
+A few dir-vs-file optimizations result in glob importation being
+10 times faster than using perlglob.exe, and using perlglob.bat is
+only twice as slow as perlglob.exe (GSAR 28-MAY-97)
+
+=item *
+
+Several cleanups prompted by lack of compatible perlglob.exe
+under Borland (GSAR 27-MAY-97)
+
+=item *
+
+Initial version (GSAR 20-FEB-97)
+
+=back
+
+=head1 SEE ALSO
+
+perl
+
+perlglob.bat
+
+Text::ParseWords
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/File/Find.pm b/Master/tlpkg/tlperl/lib/File/Find.pm
new file mode 100644
index 00000000000..497051e0635
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Find.pm
@@ -0,0 +1,1275 @@
+package File::Find;
+use 5.006;
+use strict;
+use warnings;
+use warnings::register;
+our $VERSION = '1.10';
+require Exporter;
+require Cwd;
+
+#
+# Modified to ensure sub-directory traversal order is not inverded by stack
+# push and pops. That is remains in the same order as in the directory file,
+# or user pre-processing (EG:sorted).
+#
+
+=head1 NAME
+
+File::Find - Traverse a directory tree.
+
+=head1 SYNOPSIS
+
+ use File::Find;
+ find(\&wanted, @directories_to_search);
+ sub wanted { ... }
+
+ use File::Find;
+ finddepth(\&wanted, @directories_to_search);
+ sub wanted { ... }
+
+ use File::Find;
+ find({ wanted => \&process, follow => 1 }, '.');
+
+=head1 DESCRIPTION
+
+These are functions for searching through directory trees doing work
+on each file found similar to the Unix I<find> command. File::Find
+exports two functions, C<find> and C<finddepth>. They work similarly
+but have subtle differences.
+
+=over 4
+
+=item B<find>
+
+ find(\&wanted, @directories);
+ find(\%options, @directories);
+
+C<find()> does a depth-first search over the given C<@directories> in
+the order they are given. For each file or directory found, it calls
+the C<&wanted> subroutine. (See below for details on how to use the
+C<&wanted> function). Additionally, for each directory found, it will
+C<chdir()> into that directory and continue the search, invoking the
+C<&wanted> function on each file or subdirectory in the directory.
+
+=item B<finddepth>
+
+ finddepth(\&wanted, @directories);
+ finddepth(\%options, @directories);
+
+C<finddepth()> works just like C<find()> except that is invokes the
+C<&wanted> function for a directory I<after> invoking it for the
+directory's contents. It does a postorder traversal instead of a
+preorder traversal, working from the bottom of the directory tree up
+where C<find()> works from the top of the tree down.
+
+=back
+
+=head2 %options
+
+The first argument to C<find()> is either a code reference to your
+C<&wanted> function, or a hash reference describing the operations
+to be performed for each file. The
+code reference is described in L<The wanted function> below.
+
+Here are the possible keys for the hash:
+
+=over 3
+
+=item C<wanted>
+
+The value should be a code reference. This code reference is
+described in L<The wanted function> below.
+
+=item C<bydepth>
+
+Reports the name of a directory only AFTER all its entries
+have been reported. Entry point C<finddepth()> is a shortcut for
+specifying C<<{ bydepth => 1 }>> in the first argument of C<find()>.
+
+=item C<preprocess>
+
+The value should be a code reference. This code reference is used to
+preprocess the current directory. The name of the currently processed
+directory is in C<$File::Find::dir>. Your preprocessing function is
+called after C<readdir()>, but before the loop that calls the C<wanted()>
+function. It is called with a list of strings (actually file/directory
+names) and is expected to return a list of strings. The code can be
+used to sort the file/directory names alphabetically, numerically,
+or to filter out directory entries based on their name alone. When
+I<follow> or I<follow_fast> are in effect, C<preprocess> is a no-op.
+
+=item C<postprocess>
+
+The value should be a code reference. It is invoked just before leaving
+the currently processed directory. It is called in void context with no
+arguments. The name of the current directory is in C<$File::Find::dir>. This
+hook is handy for summarizing a directory, such as calculating its disk
+usage. When I<follow> or I<follow_fast> are in effect, C<postprocess> is a
+no-op.
+
+=item C<follow>
+
+Causes symbolic links to be followed. Since directory trees with symbolic
+links (followed) may contain files more than once and may even have
+cycles, a hash has to be built up with an entry for each file.
+This might be expensive both in space and time for a large
+directory tree. See I<follow_fast> and I<follow_skip> below.
+If either I<follow> or I<follow_fast> is in effect:
+
+=over 6
+
+=item *
+
+It is guaranteed that an I<lstat> has been called before the user's
+C<wanted()> function is called. This enables fast file checks involving S<_>.
+Note that this guarantee no longer holds if I<follow> or I<follow_fast>
+are not set.
+
+=item *
+
+There is a variable C<$File::Find::fullname> which holds the absolute
+pathname of the file with all symbolic links resolved. If the link is
+a dangling symbolic link, then fullname will be set to C<undef>.
+
+=back
+
+This is a no-op on Win32.
+
+=item C<follow_fast>
+
+This is similar to I<follow> except that it may report some files more
+than once. It does detect cycles, however. Since only symbolic links
+have to be hashed, this is much cheaper both in space and time. If
+processing a file more than once (by the user's C<wanted()> function)
+is worse than just taking time, the option I<follow> should be used.
+
+This is also a no-op on Win32.
+
+=item C<follow_skip>
+
+C<follow_skip==1>, which is the default, causes all files which are
+neither directories nor symbolic links to be ignored if they are about
+to be processed a second time. If a directory or a symbolic link
+are about to be processed a second time, File::Find dies.
+
+C<follow_skip==0> causes File::Find to die if any file is about to be
+processed a second time.
+
+C<follow_skip==2> causes File::Find to ignore any duplicate files and
+directories but to proceed normally otherwise.
+
+=item C<dangling_symlinks>
+
+If true and a code reference, will be called with the symbolic link
+name and the directory it lives in as arguments. Otherwise, if true
+and warnings are on, warning "symbolic_link_name is a dangling
+symbolic link\n" will be issued. If false, the dangling symbolic link
+will be silently ignored.
+
+=item C<no_chdir>
+
+Does not C<chdir()> to each directory as it recurses. The C<wanted()>
+function will need to be aware of this, of course. In this case,
+C<$_> will be the same as C<$File::Find::name>.
+
+=item C<untaint>
+
+If find is used in taint-mode (-T command line switch or if EUID != UID
+or if EGID != GID) then internally directory names have to be untainted
+before they can be chdir'ed to. Therefore they are checked against a regular
+expression I<untaint_pattern>. Note that all names passed to the user's
+I<wanted()> function are still tainted. If this option is used while
+not in taint-mode, C<untaint> is a no-op.
+
+=item C<untaint_pattern>
+
+See above. This should be set using the C<qr> quoting operator.
+The default is set to C<qr|^([-+@\w./]+)$|>.
+Note that the parentheses are vital.
+
+=item C<untaint_skip>
+
+If set, a directory which fails the I<untaint_pattern> is skipped,
+including all its sub-directories. The default is to 'die' in such a case.
+
+=back
+
+=head2 The wanted function
+
+The C<wanted()> function does whatever verifications you want on
+each file and directory. Note that despite its name, the C<wanted()>
+function is a generic callback function, and does B<not> tell
+File::Find if a file is "wanted" or not. In fact, its return value
+is ignored.
+
+The wanted function takes no arguments but rather does its work
+through a collection of variables.
+
+=over 4
+
+=item C<$File::Find::dir> is the current directory name,
+
+=item C<$_> is the current filename within that directory
+
+=item C<$File::Find::name> is the complete pathname to the file.
+
+=back
+
+Don't modify these variables.
+
+For example, when examining the file F</some/path/foo.ext> you will have:
+
+ $File::Find::dir = /some/path/
+ $_ = foo.ext
+ $File::Find::name = /some/path/foo.ext
+
+You are chdir()'d to C<$File::Find::dir> when the function is called,
+unless C<no_chdir> was specified. Note that when changing to
+directories is in effect the root directory (F</>) is a somewhat
+special case inasmuch as the concatenation of C<$File::Find::dir>,
+C<'/'> and C<$_> is not literally equal to C<$File::Find::name>. The
+table below summarizes all variants:
+
+ $File::Find::name $File::Find::dir $_
+ default / / .
+ no_chdir=>0 /etc / etc
+ /etc/x /etc x
+
+ no_chdir=>1 / / /
+ /etc / /etc
+ /etc/x /etc /etc/x
+
+
+When <follow> or <follow_fast> are in effect, there is
+also a C<$File::Find::fullname>. The function may set
+C<$File::Find::prune> to prune the tree unless C<bydepth> was
+specified. Unless C<follow> or C<follow_fast> is specified, for
+compatibility reasons (find.pl, find2perl) there are in addition the
+following globals available: C<$File::Find::topdir>,
+C<$File::Find::topdev>, C<$File::Find::topino>,
+C<$File::Find::topmode> and C<$File::Find::topnlink>.
+
+This library is useful for the C<find2perl> tool, which when fed,
+
+ find2perl / -name .nfs\* -mtime +7 \
+ -exec rm -f {} \; -o -fstype nfs -prune
+
+produces something like:
+
+ sub wanted {
+ /^\.nfs.*\z/s &&
+ (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_)) &&
+ int(-M _) > 7 &&
+ unlink($_)
+ ||
+ ($nlink || (($dev, $ino, $mode, $nlink, $uid, $gid) = lstat($_))) &&
+ $dev < 0 &&
+ ($File::Find::prune = 1);
+ }
+
+Notice the C<_> in the above C<int(-M _)>: the C<_> is a magical
+filehandle that caches the information from the preceding
+C<stat()>, C<lstat()>, or filetest.
+
+Here's another interesting wanted function. It will find all symbolic
+links that don't resolve:
+
+ sub wanted {
+ -l && !-e && print "bogus link: $File::Find::name\n";
+ }
+
+See also the script C<pfind> on CPAN for a nice application of this
+module.
+
+=head1 WARNINGS
+
+If you run your program with the C<-w> switch, or if you use the
+C<warnings> pragma, File::Find will report warnings for several weird
+situations. You can disable these warnings by putting the statement
+
+ no warnings 'File::Find';
+
+in the appropriate scope. See L<perllexwarn> for more info about lexical
+warnings.
+
+=head1 CAVEAT
+
+=over 2
+
+=item $dont_use_nlink
+
+You can set the variable C<$File::Find::dont_use_nlink> to 1, if you want to
+force File::Find to always stat directories. This was used for file systems
+that do not have an C<nlink> count matching the number of sub-directories.
+Examples are ISO-9660 (CD-ROM), AFS, HPFS (OS/2 file system), FAT (DOS file
+system) and a couple of others.
+
+You shouldn't need to set this variable, since File::Find should now detect
+such file systems on-the-fly and switch itself to using stat. This works even
+for parts of your file system, like a mounted CD-ROM.
+
+If you do set C<$File::Find::dont_use_nlink> to 1, you will notice slow-downs.
+
+=item symlinks
+
+Be aware that the option to follow symbolic links can be dangerous.
+Depending on the structure of the directory tree (including symbolic
+links to directories) you might traverse a given (physical) directory
+more than once (only if C<follow_fast> is in effect).
+Furthermore, deleting or changing files in a symbolically linked directory
+might cause very unpleasant surprises, since you delete or change files
+in an unknown directory.
+
+=back
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+Mac OS (Classic) users should note a few differences:
+
+=over 4
+
+=item *
+
+The path separator is ':', not '/', and the current directory is denoted
+as ':', not '.'. You should be careful about specifying relative pathnames.
+While a full path always begins with a volume name, a relative pathname
+should always begin with a ':'. If specifying a volume name only, a
+trailing ':' is required.
+
+=item *
+
+C<$File::Find::dir> is guaranteed to end with a ':'. If C<$_>
+contains the name of a directory, that name may or may not end with a
+':'. Likewise, C<$File::Find::name>, which contains the complete
+pathname to that directory, and C<$File::Find::fullname>, which holds
+the absolute pathname of that directory with all symbolic links resolved,
+may or may not end with a ':'.
+
+=item *
+
+The default C<untaint_pattern> (see above) on Mac OS is set to
+C<qr|^(.+)$|>. Note that the parentheses are vital.
+
+=item *
+
+The invisible system file "Icon\015" is ignored. While this file may
+appear in every directory, there are some more invisible system files
+on every volume, which are all located at the volume root level (i.e.
+"MacintoshHD:"). These system files are B<not> excluded automatically.
+Your filter may use the following code to recognize invisible files or
+directories (requires Mac::Files):
+
+ use Mac::Files;
+
+ # invisible() -- returns 1 if file/directory is invisible,
+ # 0 if it's visible or undef if an error occurred
+
+ sub invisible($) {
+ my $file = shift;
+ my ($fileCat, $fileInfo);
+ my $invisible_flag = 1 << 14;
+
+ if ( $fileCat = FSpGetCatInfo($file) ) {
+ if ($fileInfo = $fileCat->ioFlFndrInfo() ) {
+ return (($fileInfo->fdFlags & $invisible_flag) && 1);
+ }
+ }
+ return undef;
+ }
+
+Generally, invisible files are system files, unless an odd application
+decides to use invisible files for its own purposes. To distinguish
+such files from system files, you have to look at the B<type> and B<creator>
+file attributes. The MacPerl built-in functions C<GetFileInfo(FILE)> and
+C<SetFileInfo(CREATOR, TYPE, FILES)> offer access to these attributes
+(see MacPerl.pm for details).
+
+Files that appear on the desktop actually reside in an (hidden) directory
+named "Desktop Folder" on the particular disk volume. Note that, although
+all desktop files appear to be on the same "virtual" desktop, each disk
+volume actually maintains its own "Desktop Folder" directory.
+
+=back
+
+=back
+
+=head1 BUGS AND CAVEATS
+
+Despite the name of the C<finddepth()> function, both C<find()> and
+C<finddepth()> perform a depth-first search of the directory
+hierarchy.
+
+=head1 HISTORY
+
+File::Find used to produce incorrect results if called recursively.
+During the development of perl 5.8 this bug was fixed.
+The first fixed version of File::Find was 1.01.
+
+=cut
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(find finddepth);
+
+
+use strict;
+my $Is_VMS;
+my $Is_MacOS;
+
+require File::Basename;
+require File::Spec;
+
+# Should ideally be my() not our() but local() currently
+# refuses to operate on lexicals
+
+our %SLnkSeen;
+our ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
+ $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
+ $pre_process, $post_process, $dangling_symlinks);
+
+sub contract_name {
+ my ($cdir,$fn) = @_;
+
+ return substr($cdir,0,rindex($cdir,'/')) if $fn eq $File::Find::current_dir;
+
+ $cdir = substr($cdir,0,rindex($cdir,'/')+1);
+
+ $fn =~ s|^\./||;
+
+ my $abs_name= $cdir . $fn;
+
+ if (substr($fn,0,3) eq '../') {
+ 1 while $abs_name =~ s!/[^/]*/\.\./!/!;
+ }
+
+ return $abs_name;
+}
+
+# return the absolute name of a directory or file
+sub contract_name_Mac {
+ my ($cdir,$fn) = @_;
+ my $abs_name;
+
+ if ($fn =~ /^(:+)(.*)$/) { # valid pathname starting with a ':'
+
+ my $colon_count = length ($1);
+ if ($colon_count == 1) {
+ $abs_name = $cdir . $2;
+ return $abs_name;
+ }
+ else {
+ # need to move up the tree, but
+ # only if it's not a volume name
+ for (my $i=1; $i<$colon_count; $i++) {
+ unless ($cdir =~ /^[^:]+:$/) { # volume name
+ $cdir =~ s/[^:]+:$//;
+ }
+ else {
+ return undef;
+ }
+ }
+ $abs_name = $cdir . $2;
+ return $abs_name;
+ }
+
+ }
+ else {
+
+ # $fn may be a valid path to a directory or file or (dangling)
+ # symlink, without a leading ':'
+ if ( (-e $fn) || (-l $fn) ) {
+ if ($fn =~ /^[^:]+:/) { # a volume name like DataHD:*
+ return $fn; # $fn is already an absolute path
+ }
+ else {
+ $abs_name = $cdir . $fn;
+ return $abs_name;
+ }
+ }
+ else { # argh!, $fn is not a valid directory/file
+ return undef;
+ }
+ }
+}
+
+sub PathCombine($$) {
+ my ($Base,$Name) = @_;
+ my $AbsName;
+
+ if ($Is_MacOS) {
+ # $Name is the resolved symlink (always a full path on MacOS),
+ # i.e. there's no need to call contract_name_Mac()
+ $AbsName = $Name;
+
+ # (simple) check for recursion
+ if ( ( $Base =~ /^$AbsName/) && (-d $AbsName) ) { # recursion
+ return undef;
+ }
+ }
+ else {
+ if (substr($Name,0,1) eq '/') {
+ $AbsName= $Name;
+ }
+ else {
+ $AbsName= contract_name($Base,$Name);
+ }
+
+ # (simple) check for recursion
+ my $newlen= length($AbsName);
+ if ($newlen <= length($Base)) {
+ if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/')
+ && $AbsName eq substr($Base,0,$newlen))
+ {
+ return undef;
+ }
+ }
+ }
+ return $AbsName;
+}
+
+sub Follow_SymLink($) {
+ my ($AbsName) = @_;
+
+ my ($NewName,$DEV, $INO);
+ ($DEV, $INO)= lstat $AbsName;
+
+ while (-l _) {
+ if ($SLnkSeen{$DEV, $INO}++) {
+ if ($follow_skip < 2) {
+ die "$AbsName is encountered a second time";
+ }
+ else {
+ return undef;
+ }
+ }
+ $NewName= PathCombine($AbsName, readlink($AbsName));
+ unless(defined $NewName) {
+ if ($follow_skip < 2) {
+ die "$AbsName is a recursive symbolic link";
+ }
+ else {
+ return undef;
+ }
+ }
+ else {
+ $AbsName= $NewName;
+ }
+ ($DEV, $INO) = lstat($AbsName);
+ return undef unless defined $DEV; # dangling symbolic link
+ }
+
+ if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) {
+ if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) {
+ die "$AbsName encountered a second time";
+ }
+ else {
+ return undef;
+ }
+ }
+
+ return $AbsName;
+}
+
+our($dir, $name, $fullname, $prune);
+sub _find_dir_symlnk($$$);
+sub _find_dir($$$);
+
+# check whether or not a scalar variable is tainted
+# (code straight from the Camel, 3rd ed., page 561)
+sub is_tainted_pp {
+ my $arg = shift;
+ my $nada = substr($arg, 0, 0); # zero-length
+ local $@;
+ eval { eval "# $nada" };
+ return length($@) != 0;
+}
+
+sub _find_opt {
+ my $wanted = shift;
+ die "invalid top directory" unless defined $_[0];
+
+ # This function must local()ize everything because callbacks may
+ # call find() or finddepth()
+
+ local %SLnkSeen;
+ local ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow,
+ $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat,
+ $pre_process, $post_process, $dangling_symlinks);
+ local($dir, $name, $fullname, $prune);
+ local *_ = \my $a;
+
+ my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::getcwd();
+ my $cwd_untainted = $cwd;
+ my $check_t_cwd = 1;
+ $wanted_callback = $wanted->{wanted};
+ $bydepth = $wanted->{bydepth};
+ $pre_process = $wanted->{preprocess};
+ $post_process = $wanted->{postprocess};
+ $no_chdir = $wanted->{no_chdir};
+ $full_check = $^O eq 'MSWin32' ? 0 : $wanted->{follow};
+ $follow = $^O eq 'MSWin32' ? 0 :
+ $full_check || $wanted->{follow_fast};
+ $follow_skip = $wanted->{follow_skip};
+ $untaint = $wanted->{untaint};
+ $untaint_pat = $wanted->{untaint_pattern};
+ $untaint_skip = $wanted->{untaint_skip};
+ $dangling_symlinks = $wanted->{dangling_symlinks};
+
+ # for compatibility reasons (find.pl, find2perl)
+ local our ($topdir, $topdev, $topino, $topmode, $topnlink);
+
+ # a symbolic link to a directory doesn't increase the link count
+ $avoid_nlink = $follow || $File::Find::dont_use_nlink;
+
+ my ($abs_dir, $Is_Dir);
+
+ Proc_Top_Item:
+ foreach my $TOP (@_) {
+ my $top_item = $TOP;
+
+ ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item;
+
+ if ($Is_MacOS) {
+ $top_item = ":$top_item"
+ if ( (-d _) && ( $top_item !~ /:/ ) );
+ } elsif ($^O eq 'MSWin32') {
+ $top_item =~ s|/\z|| unless $top_item =~ m|\w:/$|;
+ }
+ else {
+ $top_item =~ s|/\z|| unless $top_item eq '/';
+ }
+
+ $Is_Dir= 0;
+
+ if ($follow) {
+
+ if ($Is_MacOS) {
+ $cwd = "$cwd:" unless ($cwd =~ /:$/); # for safety
+
+ if ($top_item eq $File::Find::current_dir) {
+ $abs_dir = $cwd;
+ }
+ else {
+ $abs_dir = contract_name_Mac($cwd, $top_item);
+ unless (defined $abs_dir) {
+ warnings::warnif "Can't determine absolute path for $top_item (No such file or directory)\n";
+ next Proc_Top_Item;
+ }
+ }
+
+ }
+ else {
+ if (substr($top_item,0,1) eq '/') {
+ $abs_dir = $top_item;
+ }
+ elsif ($top_item eq $File::Find::current_dir) {
+ $abs_dir = $cwd;
+ }
+ else { # care about any ../
+ $abs_dir = contract_name("$cwd/",$top_item);
+ }
+ }
+ $abs_dir= Follow_SymLink($abs_dir);
+ unless (defined $abs_dir) {
+ if ($dangling_symlinks) {
+ if (ref $dangling_symlinks eq 'CODE') {
+ $dangling_symlinks->($top_item, $cwd);
+ } else {
+ warnings::warnif "$top_item is a dangling symbolic link\n";
+ }
+ }
+ next Proc_Top_Item;
+ }
+
+ if (-d _) {
+ _find_dir_symlnk($wanted, $abs_dir, $top_item);
+ $Is_Dir= 1;
+ }
+ }
+ else { # no follow
+ $topdir = $top_item;
+ unless (defined $topnlink) {
+ warnings::warnif "Can't stat $top_item: $!\n";
+ next Proc_Top_Item;
+ }
+ if (-d _) {
+ $top_item =~ s/\.dir\z//i if $Is_VMS;
+ _find_dir($wanted, $top_item, $topnlink);
+ $Is_Dir= 1;
+ }
+ else {
+ $abs_dir= $top_item;
+ }
+ }
+
+ unless ($Is_Dir) {
+ unless (($_,$dir) = File::Basename::fileparse($abs_dir)) {
+ if ($Is_MacOS) {
+ ($dir,$_) = (':', $top_item); # $File::Find::dir, $_
+ }
+ else {
+ ($dir,$_) = ('./', $top_item);
+ }
+ }
+
+ $abs_dir = $dir;
+ if (( $untaint ) && (is_tainted($dir) )) {
+ ( $abs_dir ) = $dir =~ m|$untaint_pat|;
+ unless (defined $abs_dir) {
+ if ($untaint_skip == 0) {
+ die "directory $dir is still tainted";
+ }
+ else {
+ next Proc_Top_Item;
+ }
+ }
+ }
+
+ unless ($no_chdir || chdir $abs_dir) {
+ warnings::warnif "Couldn't chdir $abs_dir: $!\n";
+ next Proc_Top_Item;
+ }
+
+ $name = $abs_dir . $_; # $File::Find::name
+ $_ = $name if $no_chdir;
+
+ { $wanted_callback->() }; # protect against wild "next"
+
+ }
+
+ unless ( $no_chdir ) {
+ if ( ($check_t_cwd) && (($untaint) && (is_tainted($cwd) )) ) {
+ ( $cwd_untainted ) = $cwd =~ m|$untaint_pat|;
+ unless (defined $cwd_untainted) {
+ die "insecure cwd in find(depth)";
+ }
+ $check_t_cwd = 0;
+ }
+ unless (chdir $cwd_untainted) {
+ die "Can't cd to $cwd: $!\n";
+ }
+ }
+ }
+}
+
+# API:
+# $wanted
+# $p_dir : "parent directory"
+# $nlink : what came back from the stat
+# preconditions:
+# chdir (if not no_chdir) to dir
+
+sub _find_dir($$$) {
+ my ($wanted, $p_dir, $nlink) = @_;
+ my ($CdLvl,$Level) = (0,0);
+ my @Stack;
+ my @filenames;
+ my ($subcount,$sub_nlink);
+ my $SE= [];
+ my $dir_name= $p_dir;
+ my $dir_pref;
+ my $dir_rel = $File::Find::current_dir;
+ my $tainted = 0;
+ my $no_nlink;
+
+ if ($Is_MacOS) {
+ $dir_pref= ($p_dir =~ /:$/) ? $p_dir : "$p_dir:"; # preface
+ } elsif ($^O eq 'MSWin32') {
+ $dir_pref = ($p_dir =~ m|\w:/$| ? $p_dir : "$p_dir/" );
+ }
+ else {
+ $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" );
+ }
+
+ local ($dir, $name, $prune, *DIR);
+
+ unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) {
+ my $udir = $p_dir;
+ if (( $untaint ) && (is_tainted($p_dir) )) {
+ ( $udir ) = $p_dir =~ m|$untaint_pat|;
+ unless (defined $udir) {
+ if ($untaint_skip == 0) {
+ die "directory $p_dir is still tainted";
+ }
+ else {
+ return;
+ }
+ }
+ }
+ unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) {
+ warnings::warnif "Can't cd to $udir: $!\n";
+ return;
+ }
+ }
+
+ # push the starting directory
+ push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
+
+ if ($Is_MacOS) {
+ $p_dir = $dir_pref; # ensure trailing ':'
+ }
+
+ while (defined $SE) {
+ unless ($bydepth) {
+ $dir= $p_dir; # $File::Find::dir
+ $name= $dir_name; # $File::Find::name
+ $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
+ # prune may happen here
+ $prune= 0;
+ { $wanted_callback->() }; # protect against wild "next"
+ next if $prune;
+ }
+
+ # change to that directory
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ my $udir= $dir_rel;
+ if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_rel) )) ) {
+ ( $udir ) = $dir_rel =~ m|$untaint_pat|;
+ unless (defined $udir) {
+ if ($untaint_skip == 0) {
+ if ($Is_MacOS) {
+ die "directory ($p_dir) $dir_rel is still tainted";
+ }
+ else {
+ die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted";
+ }
+ } else { # $untaint_skip == 1
+ next;
+ }
+ }
+ }
+ unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) {
+ if ($Is_MacOS) {
+ warnings::warnif "Can't cd to ($p_dir) $udir: $!\n";
+ }
+ else {
+ warnings::warnif "Can't cd to (" .
+ ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n";
+ }
+ next;
+ }
+ $CdLvl++;
+ }
+
+ if ($Is_MacOS) {
+ $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
+ }
+
+ $dir= $dir_name; # $File::Find::dir
+
+ # Get the list of files in the current directory.
+ unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) {
+ warnings::warnif "Can't opendir($dir_name): $!\n";
+ next;
+ }
+ @filenames = readdir DIR;
+ closedir(DIR);
+ @filenames = $pre_process->(@filenames) if $pre_process;
+ push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process;
+
+ # default: use whatever was specifid
+ # (if $nlink >= 2, and $avoid_nlink == 0, this will switch back)
+ $no_nlink = $avoid_nlink;
+ # if dir has wrong nlink count, force switch to slower stat method
+ $no_nlink = 1 if ($nlink < 2);
+
+ if ($nlink == 2 && !$no_nlink) {
+ # This dir has no subdirectories.
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_ = ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+
+ }
+ else {
+ # This dir has subdirectories.
+ $subcount = $nlink - 2;
+
+ # HACK: insert directories at this position. so as to preserve
+ # the user pre-processed ordering of files.
+ # EG: directory traversal is in user sorted order, not at random.
+ my $stack_top = @Stack;
+
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+ if ($subcount > 0 || $no_nlink) {
+ # Seen all the subdirs?
+ # check for directoriness.
+ # stat is faster for a file in the current directory
+ $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3];
+
+ if (-d _) {
+ --$subcount;
+ $FN =~ s/\.dir\z//i if $Is_VMS;
+ # HACK: replace push to preserve dir traversal order
+ #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink];
+ splice @Stack, $stack_top, 0,
+ [$CdLvl,$dir_name,$FN,$sub_nlink];
+ }
+ else {
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_= ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+ else {
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_= ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+ }
+ }
+ continue {
+ while ( defined ($SE = pop @Stack) ) {
+ ($Level, $p_dir, $dir_rel, $nlink) = @$SE;
+ if ($CdLvl > $Level && !$no_chdir) {
+ my $tmp;
+ if ($Is_MacOS) {
+ $tmp = (':' x ($CdLvl-$Level)) . ':';
+ }
+ else {
+ $tmp = join('/',('..') x ($CdLvl-$Level));
+ }
+ die "Can't cd to $dir_name" . $tmp
+ unless chdir ($tmp);
+ $CdLvl = $Level;
+ }
+
+ if ($Is_MacOS) {
+ # $pdir always has a trailing ':', except for the starting dir,
+ # where $dir_rel eq ':'
+ $dir_name = "$p_dir$dir_rel";
+ $dir_pref = "$dir_name:";
+ }
+ elsif ($^O eq 'MSWin32') {
+ $dir_name = ($p_dir =~ m|\w:/$| ? "$p_dir$dir_rel" : "$p_dir/$dir_rel");
+ $dir_pref = "$dir_name/";
+ }
+ else {
+ $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
+ $dir_pref = "$dir_name/";
+ }
+
+ if ( $nlink == -2 ) {
+ $name = $dir = $p_dir; # $File::Find::name / dir
+ $_ = $File::Find::current_dir;
+ $post_process->(); # End-of-directory processing
+ }
+ elsif ( $nlink < 0 ) { # must be finddepth, report dirname now
+ $name = $dir_name;
+ if ($Is_MacOS) {
+ if ($dir_rel eq ':') { # must be the top dir, where we started
+ $name =~ s|:$||; # $File::Find::name
+ $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $name : $dir_rel); # $_
+ }
+ else {
+ if ( substr($name,-2) eq '/.' ) {
+ substr($name, length($name) == 2 ? -1 : -2) = '';
+ }
+ $dir = $p_dir;
+ $_ = ($no_chdir ? $dir_name : $dir_rel );
+ if ( substr($_,-2) eq '/.' ) {
+ substr($_, length($_) == 2 ? -1 : -2) = '';
+ }
+ }
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ else {
+ push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth;
+ last;
+ }
+ }
+ }
+}
+
+
+# API:
+# $wanted
+# $dir_loc : absolute location of a dir
+# $p_dir : "parent directory"
+# preconditions:
+# chdir (if not no_chdir) to dir
+
+sub _find_dir_symlnk($$$) {
+ my ($wanted, $dir_loc, $p_dir) = @_; # $dir_loc is the absolute directory
+ my @Stack;
+ my @filenames;
+ my $new_loc;
+ my $updir_loc = $dir_loc; # untainted parent directory
+ my $SE = [];
+ my $dir_name = $p_dir;
+ my $dir_pref;
+ my $loc_pref;
+ my $dir_rel = $File::Find::current_dir;
+ my $byd_flag; # flag for pending stack entry if $bydepth
+ my $tainted = 0;
+ my $ok = 1;
+
+ if ($Is_MacOS) {
+ $dir_pref = ($p_dir =~ /:$/) ? "$p_dir" : "$p_dir:";
+ $loc_pref = ($dir_loc =~ /:$/) ? "$dir_loc" : "$dir_loc:";
+ } else {
+ $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" );
+ $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" );
+ }
+
+ local ($dir, $name, $fullname, $prune, *DIR);
+
+ unless ($no_chdir) {
+ # untaint the topdir
+ if (( $untaint ) && (is_tainted($dir_loc) )) {
+ ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; # parent dir, now untainted
+ # once untainted, $updir_loc is pushed on the stack (as parent directory);
+ # hence, we don't need to untaint the parent directory every time we chdir
+ # to it later
+ unless (defined $updir_loc) {
+ if ($untaint_skip == 0) {
+ die "directory $dir_loc is still tainted";
+ }
+ else {
+ return;
+ }
+ }
+ }
+ $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir);
+ unless ($ok) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ return;
+ }
+ }
+
+ push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1] if $bydepth;
+
+ if ($Is_MacOS) {
+ $p_dir = $dir_pref; # ensure trailing ':'
+ }
+
+ while (defined $SE) {
+
+ unless ($bydepth) {
+ # change (back) to parent directory (always untainted)
+ unless ($no_chdir) {
+ unless (chdir $updir_loc) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+ $dir= $p_dir; # $File::Find::dir
+ $name= $dir_name; # $File::Find::name
+ $_= ($no_chdir ? $dir_name : $dir_rel ); # $_
+ $fullname= $dir_loc; # $File::Find::fullname
+ # prune may happen here
+ $prune= 0;
+ lstat($_); # make sure file tests with '_' work
+ { $wanted_callback->() }; # protect against wild "next"
+ next if $prune;
+ }
+
+ # change to that directory
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ $updir_loc = $dir_loc;
+ if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_loc) )) ) {
+ # untaint $dir_loc, what will be pushed on the stack as (untainted) parent dir
+ ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|;
+ unless (defined $updir_loc) {
+ if ($untaint_skip == 0) {
+ die "directory $dir_loc is still tainted";
+ }
+ else {
+ next;
+ }
+ }
+ }
+ unless (chdir $updir_loc) {
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+
+ if ($Is_MacOS) {
+ $dir_name = "$dir_name:" unless ($dir_name =~ /:$/);
+ }
+
+ $dir = $dir_name; # $File::Find::dir
+
+ # Get the list of files in the current directory.
+ unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) {
+ warnings::warnif "Can't opendir($dir_loc): $!\n";
+ next;
+ }
+ @filenames = readdir DIR;
+ closedir(DIR);
+
+ for my $FN (@filenames) {
+ next if $FN =~ $File::Find::skip_pattern;
+
+ # follow symbolic links / do an lstat
+ $new_loc = Follow_SymLink($loc_pref.$FN);
+
+ # ignore if invalid symlink
+ unless (defined $new_loc) {
+ if ($dangling_symlinks) {
+ if (ref $dangling_symlinks eq 'CODE') {
+ $dangling_symlinks->($FN, $dir_pref);
+ } else {
+ warnings::warnif "$dir_pref$FN is a dangling symbolic link\n";
+ }
+ }
+
+ $fullname = undef;
+ $name = $dir_pref . $FN;
+ $_ = ($no_chdir ? $name : $FN);
+ { $wanted_callback->() };
+ next;
+ }
+
+ if (-d _) {
+ push @Stack,[$new_loc,$updir_loc,$dir_name,$FN,1];
+ }
+ else {
+ $fullname = $new_loc; # $File::Find::fullname
+ $name = $dir_pref . $FN; # $File::Find::name
+ $_ = ($no_chdir ? $name : $FN); # $_
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ }
+
+ }
+ continue {
+ while (defined($SE = pop @Stack)) {
+ ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE;
+ if ($Is_MacOS) {
+ # $p_dir always has a trailing ':', except for the starting dir,
+ # where $dir_rel eq ':'
+ $dir_name = "$p_dir$dir_rel";
+ $dir_pref = "$dir_name:";
+ $loc_pref = ($dir_loc =~ /:$/) ? $dir_loc : "$dir_loc:";
+ }
+ else {
+ $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel");
+ $dir_pref = "$dir_name/";
+ $loc_pref = "$dir_loc/";
+ }
+ if ( $byd_flag < 0 ) { # must be finddepth, report dirname now
+ unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) {
+ unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted
+ warnings::warnif "Can't cd to $updir_loc: $!\n";
+ next;
+ }
+ }
+ $fullname = $dir_loc; # $File::Find::fullname
+ $name = $dir_name; # $File::Find::name
+ if ($Is_MacOS) {
+ if ($dir_rel eq ':') { # must be the top dir, where we started
+ $name =~ s|:$||; # $File::Find::name
+ $p_dir = "$p_dir:" unless ($p_dir =~ /:$/);
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $name : $dir_rel); # $_
+ }
+ else {
+ if ( substr($name,-2) eq '/.' ) {
+ substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name
+ }
+ $dir = $p_dir; # $File::Find::dir
+ $_ = ($no_chdir ? $dir_name : $dir_rel); # $_
+ if ( substr($_,-2) eq '/.' ) {
+ substr($_, length($_) == 2 ? -1 : -2) = '';
+ }
+ }
+
+ lstat($_); # make sure file tests with '_' work
+ { $wanted_callback->() }; # protect against wild "next"
+ }
+ else {
+ push @Stack,[$dir_loc, $updir_loc, $p_dir, $dir_rel,-1] if $bydepth;
+ last;
+ }
+ }
+ }
+}
+
+
+sub wrap_wanted {
+ my $wanted = shift;
+ if ( ref($wanted) eq 'HASH' ) {
+ if ( $wanted->{follow} || $wanted->{follow_fast}) {
+ $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip};
+ }
+ if ( $wanted->{untaint} ) {
+ $wanted->{untaint_pattern} = $File::Find::untaint_pattern
+ unless defined $wanted->{untaint_pattern};
+ $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip};
+ }
+ return $wanted;
+ }
+ else {
+ return { wanted => $wanted };
+ }
+}
+
+sub find {
+ my $wanted = shift;
+ _find_opt(wrap_wanted($wanted), @_);
+}
+
+sub finddepth {
+ my $wanted = wrap_wanted(shift);
+ $wanted->{bydepth} = 1;
+ _find_opt($wanted, @_);
+}
+
+# default
+$File::Find::skip_pattern = qr/^\.{1,2}\z/;
+$File::Find::untaint_pattern = qr|^([-+@\w./]+)$|;
+
+# These are hard-coded for now, but may move to hint files.
+if ($^O eq 'VMS') {
+ $Is_VMS = 1;
+ $File::Find::dont_use_nlink = 1;
+}
+elsif ($^O eq 'MacOS') {
+ $Is_MacOS = 1;
+ $File::Find::dont_use_nlink = 1;
+ $File::Find::skip_pattern = qr/^Icon\015\z/;
+ $File::Find::untaint_pattern = qr|^(.+)$|;
+}
+
+# this _should_ work properly on all platforms
+# where File::Find can be expected to work
+$File::Find::current_dir = File::Spec->curdir || '.';
+
+$File::Find::dont_use_nlink = 1
+ if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' ||
+ $^O eq 'interix' || $^O eq 'cygwin' || $^O eq 'epoc' || $^O eq 'qnx' ||
+ $^O eq 'nto';
+
+# Set dont_use_nlink in your hint file if your system's stat doesn't
+# report the number of links in a directory as an indication
+# of the number of files.
+# See, e.g. hints/machten.sh for MachTen 2.2.
+unless ($File::Find::dont_use_nlink) {
+ require Config;
+ $File::Find::dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'});
+}
+
+# We need a function that checks if a scalar is tainted. Either use the
+# Scalar::Util module's tainted() function or our (slower) pure Perl
+# fallback is_tainted_pp()
+{
+ local $@;
+ eval { require Scalar::Util };
+ *is_tainted = $@ ? \&is_tainted_pp : \&Scalar::Util::tainted;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Glob.pm b/Master/tlpkg/tlperl/lib/File/Glob.pm
new file mode 100644
index 00000000000..133c650529b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Glob.pm
@@ -0,0 +1,496 @@
+package File::Glob;
+
+use strict;
+our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS,
+ $AUTOLOAD, $DEFAULT_FLAGS);
+
+use XSLoader ();
+
+@ISA = qw(Exporter);
+
+# NOTE: The glob() export is only here for compatibility with 5.6.0.
+# csh_glob() should not be used directly, unless you know what you're doing.
+
+@EXPORT_OK = qw(
+ csh_glob
+ bsd_glob
+ glob
+ GLOB_ABEND
+ GLOB_ALPHASORT
+ GLOB_ALTDIRFUNC
+ GLOB_BRACE
+ GLOB_CSH
+ GLOB_ERR
+ GLOB_ERROR
+ GLOB_LIMIT
+ GLOB_MARK
+ GLOB_NOCASE
+ GLOB_NOCHECK
+ GLOB_NOMAGIC
+ GLOB_NOSORT
+ GLOB_NOSPACE
+ GLOB_QUOTE
+ GLOB_TILDE
+);
+
+%EXPORT_TAGS = (
+ 'glob' => [ qw(
+ GLOB_ABEND
+ GLOB_ALPHASORT
+ GLOB_ALTDIRFUNC
+ GLOB_BRACE
+ GLOB_CSH
+ GLOB_ERR
+ GLOB_ERROR
+ GLOB_LIMIT
+ GLOB_MARK
+ GLOB_NOCASE
+ GLOB_NOCHECK
+ GLOB_NOMAGIC
+ GLOB_NOSORT
+ GLOB_NOSPACE
+ GLOB_QUOTE
+ GLOB_TILDE
+ glob
+ bsd_glob
+ ) ],
+);
+
+$VERSION = '1.05';
+
+sub import {
+ require Exporter;
+ my $i = 1;
+ while ($i < @_) {
+ if ($_[$i] =~ /^:(case|nocase|globally)$/) {
+ splice(@_, $i, 1);
+ $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case';
+ $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase';
+ if ($1 eq 'globally') {
+ local $^W;
+ *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
+ }
+ next;
+ }
+ ++$i;
+ }
+ goto &Exporter::import;
+}
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ my ($error, $val) = constant($constname);
+ if ($error) {
+ require Carp;
+ Carp::croak($error);
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+XSLoader::load 'File::Glob', $VERSION;
+
+# Preloaded methods go here.
+
+sub GLOB_ERROR {
+ return (constant('GLOB_ERROR'))[1];
+}
+
+sub GLOB_CSH () {
+ GLOB_BRACE()
+ | GLOB_NOMAGIC()
+ | GLOB_QUOTE()
+ | GLOB_TILDE()
+ | GLOB_ALPHASORT()
+}
+
+$DEFAULT_FLAGS = GLOB_CSH();
+if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) {
+ $DEFAULT_FLAGS |= GLOB_NOCASE();
+}
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+sub bsd_glob {
+ my ($pat,$flags) = @_;
+ $flags = $DEFAULT_FLAGS if @_ < 2;
+ return doglob($pat,$flags);
+}
+
+# File::Glob::glob() is deprecated because its prototype is different from
+# CORE::glob() (use bsd_glob() instead)
+sub glob {
+ splice @_, 1; # don't pass PL_glob_index as flags!
+ goto &bsd_glob;
+}
+
+## borrowed heavily from gsar's File::DosGlob
+my %iter;
+my %entries;
+
+sub csh_glob {
+ my $pat = shift;
+ my $cxix = shift;
+ my @pat;
+
+ # glob without args defaults to $_
+ $pat = $_ unless defined $pat;
+
+ # extract patterns
+ $pat =~ s/^\s+//; # Protect against empty elements in
+ $pat =~ s/\s+$//; # things like < *.c> and <*.c >.
+ # These alone shouldn't trigger ParseWords.
+ if ($pat =~ /\s/) {
+ # XXX this is needed for compatibility with the csh
+ # implementation in Perl. Need to support a flag
+ # to disable this behavior.
+ require Text::ParseWords;
+ @pat = Text::ParseWords::parse_line('\s+',0,$pat);
+ }
+
+ # assume global context if not provided one
+ $cxix = '_G_' unless defined $cxix;
+ $iter{$cxix} = 0 unless exists $iter{$cxix};
+
+ # if we're just beginning, do it all first
+ if ($iter{$cxix} == 0) {
+ if (@pat) {
+ $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ];
+ }
+ else {
+ $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ];
+ }
+ }
+
+ # chuck it all out, quick or slow
+ if (wantarray) {
+ delete $iter{$cxix};
+ return @{delete $entries{$cxix}};
+ }
+ else {
+ if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
+ return shift @{$entries{$cxix}};
+ }
+ else {
+ # return undef for EOL
+ delete $iter{$cxix};
+ delete $entries{$cxix};
+ return undef;
+ }
+ }
+}
+
+1;
+__END__
+
+=head1 NAME
+
+File::Glob - Perl extension for BSD glob routine
+
+=head1 SYNOPSIS
+
+ use File::Glob ':glob';
+
+ @list = bsd_glob('*.[ch]');
+ $homedir = bsd_glob('~gnat', GLOB_TILDE | GLOB_ERR);
+
+ if (GLOB_ERROR) {
+ # an error occurred reading $homedir
+ }
+
+ ## override the core glob (CORE::glob() does this automatically
+ ## by default anyway, since v5.6.0)
+ use File::Glob ':globally';
+ my @sources = <*.{c,h,y}>;
+
+ ## override the core glob, forcing case sensitivity
+ use File::Glob qw(:globally :case);
+ my @sources = <*.{c,h,y}>;
+
+ ## override the core glob forcing case insensitivity
+ use File::Glob qw(:globally :nocase);
+ my @sources = <*.{c,h,y}>;
+
+ ## glob on all files in home directory
+ use File::Glob ':globally';
+ my @sources = <~gnat/*>;
+
+=head1 DESCRIPTION
+
+The glob angle-bracket operator C<< <> >> is a pathname generator that
+implements the rules for file name pattern matching used by Unix-like shells
+such as the Bourne shell or C shell.
+
+File::Glob::bsd_glob() implements the FreeBSD glob(3) routine, which is
+a superset of the POSIX glob() (described in IEEE Std 1003.2 "POSIX.2").
+bsd_glob() takes a mandatory C<pattern> argument, and an optional
+C<flags> argument, and returns a list of filenames matching the
+pattern, with interpretation of the pattern modified by the C<flags>
+variable.
+
+Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob().
+Note that they don't share the same prototype--CORE::glob() only accepts
+a single argument. Due to historical reasons, CORE::glob() will also
+split its argument on whitespace, treating it as multiple patterns,
+whereas bsd_glob() considers them as one pattern.
+
+=head2 META CHARACTERS
+
+ \ Quote the next metacharacter
+ [] Character class
+ {} Multiple pattern
+ * Match any string of characters
+ ? Match any single character
+ ~ User name home directory
+
+The metanotation C<a{b,c,d}e> is a shorthand for C<abe ace ade>. Left to
+right order is preserved, with results of matches being sorted separately
+at a low level to preserve this order. As a special case C<{>, C<}>, and
+C<{}> are passed undisturbed.
+
+=head2 POSIX FLAGS
+
+The POSIX defined flags for bsd_glob() are:
+
+=over 4
+
+=item C<GLOB_ERR>
+
+Force bsd_glob() to return an error when it encounters a directory it
+cannot open or read. Ordinarily bsd_glob() continues to find matches.
+
+=item C<GLOB_LIMIT>
+
+Make bsd_glob() return an error (GLOB_NOSPACE) when the pattern expands
+to a size bigger than the system constant C<ARG_MAX> (usually found in
+limits.h). If your system does not define this constant, bsd_glob() uses
+C<sysconf(_SC_ARG_MAX)> or C<_POSIX_ARG_MAX> where available (in that
+order). You can inspect these values using the standard C<POSIX>
+extension.
+
+=item C<GLOB_MARK>
+
+Each pathname that is a directory that matches the pattern has a slash
+appended.
+
+=item C<GLOB_NOCASE>
+
+By default, file names are assumed to be case sensitive; this flag
+makes bsd_glob() treat case differences as not significant.
+
+=item C<GLOB_NOCHECK>
+
+If the pattern does not match any pathname, then bsd_glob() returns a list
+consisting of only the pattern. If C<GLOB_QUOTE> is set, its effect
+is present in the pattern returned.
+
+=item C<GLOB_NOSORT>
+
+By default, the pathnames are sorted in ascending ASCII order; this
+flag prevents that sorting (speeding up bsd_glob()).
+
+=back
+
+The FreeBSD extensions to the POSIX standard are the following flags:
+
+=over 4
+
+=item C<GLOB_BRACE>
+
+Pre-process the string to expand C<{pat,pat,...}> strings like csh(1).
+The pattern '{}' is left unexpanded for historical reasons (and csh(1)
+does the same thing to ease typing of find(1) patterns).
+
+=item C<GLOB_NOMAGIC>
+
+Same as C<GLOB_NOCHECK> but it only returns the pattern if it does not
+contain any of the special characters "*", "?" or "[". C<NOMAGIC> is
+provided to simplify implementing the historic csh(1) globbing
+behaviour and should probably not be used anywhere else.
+
+=item C<GLOB_QUOTE>
+
+Use the backslash ('\') character for quoting: every occurrence of a
+backslash followed by a character in the pattern is replaced by that
+character, avoiding any special interpretation of the character.
+(But see below for exceptions on DOSISH systems).
+
+=item C<GLOB_TILDE>
+
+Expand patterns that start with '~' to user name home directories.
+
+=item C<GLOB_CSH>
+
+For convenience, C<GLOB_CSH> is a synonym for
+C<GLOB_BRACE | GLOB_NOMAGIC | GLOB_QUOTE | GLOB_TILDE | GLOB_ALPHASORT>.
+
+=back
+
+The POSIX provided C<GLOB_APPEND>, C<GLOB_DOOFFS>, and the FreeBSD
+extensions C<GLOB_ALTDIRFUNC>, and C<GLOB_MAGCHAR> flags have not been
+implemented in the Perl version because they involve more complex
+interaction with the underlying C structures.
+
+The following flag has been added in the Perl implementation for
+csh compatibility:
+
+=over 4
+
+=item C<GLOB_ALPHASORT>
+
+If C<GLOB_NOSORT> is not in effect, sort filenames is alphabetical
+order (case does not matter) rather than in ASCII order.
+
+=back
+
+=head1 DIAGNOSTICS
+
+bsd_glob() returns a list of matching paths, possibly zero length. If an
+error occurred, &File::Glob::GLOB_ERROR will be non-zero and C<$!> will be
+set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred,
+or one of the following values otherwise:
+
+=over 4
+
+=item C<GLOB_NOSPACE>
+
+An attempt to allocate memory failed.
+
+=item C<GLOB_ABEND>
+
+The glob was stopped because an error was encountered.
+
+=back
+
+In the case where bsd_glob() has found some matching paths, but is
+interrupted by an error, it will return a list of filenames B<and>
+set &File::Glob::ERROR.
+
+Note that bsd_glob() deviates from POSIX and FreeBSD glob(3) behaviour
+by not considering C<ENOENT> and C<ENOTDIR> as errors - bsd_glob() will
+continue processing despite those errors, unless the C<GLOB_ERR> flag is
+set.
+
+Be aware that all filenames returned from File::Glob are tainted.
+
+=head1 NOTES
+
+=over 4
+
+=item *
+
+If you want to use multiple patterns, e.g. C<bsd_glob("a* b*")>, you should
+probably throw them in a set as in C<bsd_glob("{a*,b*}")>. This is because
+the argument to bsd_glob() isn't subjected to parsing by the C shell.
+Remember that you can use a backslash to escape things.
+
+=item *
+
+On DOSISH systems, backslash is a valid directory separator character.
+In this case, use of backslash as a quoting character (via GLOB_QUOTE)
+interferes with the use of backslash as a directory separator. The
+best (simplest, most portable) solution is to use forward slashes for
+directory separators, and backslashes for quoting. However, this does
+not match "normal practice" on these systems. As a concession to user
+expectation, therefore, backslashes (under GLOB_QUOTE) only quote the
+glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself.
+All other backslashes are passed through unchanged.
+
+=item *
+
+Win32 users should use the real slash. If you really want to use
+backslashes, consider using Sarathy's File::DosGlob, which comes with
+the standard Perl distribution.
+
+=item *
+
+Mac OS (Classic) users should note a few differences. Since
+Mac OS is not Unix, when the glob code encounters a tilde glob (e.g.
+~user) and the C<GLOB_TILDE> flag is used, it simply returns that
+pattern without doing any expansion.
+
+Glob on Mac OS is case-insensitive by default (if you don't use any
+flags). If you specify any flags at all and still want glob
+to be case-insensitive, you must include C<GLOB_NOCASE> in the flags.
+
+The path separator is ':' (aka colon), not '/' (aka slash). Mac OS users
+should be careful about specifying relative pathnames. While a full path
+always begins with a volume name, a relative pathname should always
+begin with a ':'. If specifying a volume name only, a trailing ':' is
+required.
+
+The specification of pathnames in glob patterns adheres to the usual Mac
+OS conventions: The path separator is a colon ':', not a slash '/'. A
+full path always begins with a volume name. A relative pathname on Mac
+OS must always begin with a ':', except when specifying a file or
+directory name in the current working directory, where the leading colon
+is optional. If specifying a volume name only, a trailing ':' is
+required. Due to these rules, a glob like E<lt>*:E<gt> will find all
+mounted volumes, while a glob like E<lt>*E<gt> or E<lt>:*E<gt> will find
+all files and directories in the current directory.
+
+Note that updirs in the glob pattern are resolved before the matching begins,
+i.e. a pattern like "*HD:t?p::a*" will be matched as "*HD:a*". Note also,
+that a single trailing ':' in the pattern is ignored (unless it's a volume
+name pattern like "*HD:"), i.e. a glob like E<lt>:*:E<gt> will find both
+directories I<and> files (and not, as one might expect, only directories).
+You can, however, use the C<GLOB_MARK> flag to distinguish (without a file
+test) directory names from file names.
+
+If the C<GLOB_MARK> flag is set, all directory paths will have a ':' appended.
+Since a directory like 'lib:' is I<not> a valid I<relative> path on Mac OS,
+both a leading and a trailing colon will be added, when the directory name in
+question doesn't contain any colons (e.g. 'lib' becomes ':lib:').
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc/glob>, glob(3)
+
+=head1 AUTHOR
+
+The Perl interface was written by Nathan Torkington E<lt>gnat@frii.comE<gt>,
+and is released under the artistic license. Further modifications were
+made by Greg Bacon E<lt>gbacon@cs.uah.eduE<gt>, Gurusamy Sarathy
+E<lt>gsar@activestate.comE<gt>, and Thomas Wegner
+E<lt>wegner_thomas@yahoo.comE<gt>. The C glob code has the
+following copyright:
+
+ Copyright (c) 1989, 1993 The Regents of the University of California.
+ All rights reserved.
+
+ This code is derived from software contributed to Berkeley by
+ Guido van Rossum.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/File/Path.pm b/Master/tlpkg/tlperl/lib/File/Path.pm
new file mode 100644
index 00000000000..2e41ff3f77f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Path.pm
@@ -0,0 +1,285 @@
+package File::Path;
+
+=head1 NAME
+
+File::Path - create or remove directory trees
+
+=head1 SYNOPSIS
+
+ use File::Path;
+
+ mkpath(['/foo/bar/baz', 'blurfl/quux'], 1, 0711);
+ rmtree(['foo/bar/baz', 'blurfl/quux'], 1, 1);
+
+=head1 DESCRIPTION
+
+The C<mkpath> function provides a convenient way to create directories, even
+if your C<mkdir> kernel call won't create more than one level of directory at
+a time. C<mkpath> takes three arguments:
+
+=over 4
+
+=item *
+
+the name of the path to create, or a reference
+to a list of paths to create,
+
+=item *
+
+a boolean value, which if TRUE will cause C<mkpath>
+to print the name of each directory as it is created
+(defaults to FALSE), and
+
+=item *
+
+the numeric mode to use when creating the directories
+(defaults to 0777), to be modified by the current umask.
+
+=back
+
+It returns a list of all directories (including intermediates, determined
+using the Unix '/' separator) created.
+
+If a system error prevents a directory from being created, then the
+C<mkpath> function throws a fatal error with C<Carp::croak>. This error
+can be trapped with an C<eval> block:
+
+ eval { mkpath($dir) };
+ if ($@) {
+ print "Couldn't create $dir: $@";
+ }
+
+Similarly, the C<rmtree> function provides a convenient way to delete a
+subtree from the directory structure, much like the Unix command C<rm -r>.
+C<rmtree> takes three arguments:
+
+=over 4
+
+=item *
+
+the root of the subtree to delete, or a reference to
+a list of roots. All of the files and directories
+below each root, as well as the roots themselves,
+will be deleted.
+
+=item *
+
+a boolean value, which if TRUE will cause C<rmtree> to
+print a message each time it examines a file, giving the
+name of the file, and indicating whether it's using C<rmdir>
+or C<unlink> to remove it, or that it's skipping it.
+(defaults to FALSE)
+
+=item *
+
+a boolean value, which if TRUE will cause C<rmtree> to
+skip any files to which you do not have delete access
+(if running under VMS) or write access (if running
+under another OS). This will change in the future when
+a criterion for 'delete permission' under OSs other
+than VMS is settled. (defaults to FALSE)
+
+=back
+
+It returns the number of files successfully deleted. Symlinks are
+simply deleted and not followed.
+
+B<NOTE:> There are race conditions internal to the implementation of
+C<rmtree> making it unsafe to use on directory trees which may be
+altered or moved while C<rmtree> is running, and in particular on any
+directory trees with any path components or subdirectories potentially
+writable by untrusted users.
+
+Additionally, if the third parameter is not TRUE and C<rmtree> is
+interrupted, it may leave files and directories with permissions altered
+to allow deletion (and older versions of this module would even set
+files and directories to world-read/writable!)
+
+Note also that the occurrence of errors in C<rmtree> can be determined I<only>
+by trapping diagnostic messages using C<$SIG{__WARN__}>; it is not apparent
+from the return value.
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=item *
+
+On Windows, if C<mkpath> gives you the warning: B<No such file or
+directory>, this may mean that you've exceeded your filesystem's
+maximum path length.
+
+=back
+
+=head1 AUTHORS
+
+Tim Bunce <F<Tim.Bunce@ig.co.uk>> and
+Charles Bailey <F<bailey@newman.upenn.edu>>
+
+=cut
+
+use 5.006;
+use Carp;
+use File::Basename ();
+use Exporter ();
+use strict;
+use warnings;
+
+our $VERSION = "1.08";
+our @ISA = qw( Exporter );
+our @EXPORT = qw( mkpath rmtree );
+
+my $Is_VMS = $^O eq 'VMS';
+my $Is_MacOS = $^O eq 'MacOS';
+
+# These OSes complain if you want to remove a file that you have no
+# write permission to:
+my $force_writeable = ($^O eq 'os2' || $^O eq 'dos' || $^O eq 'MSWin32' ||
+ $^O eq 'amigaos' || $^O eq 'MacOS' || $^O eq 'epoc');
+
+sub mkpath {
+ my($paths, $verbose, $mode) = @_;
+ # $paths -- either a path string or ref to list of paths
+ # $verbose -- optional print "mkdir $path" for each directory created
+ # $mode -- optional permissions, defaults to 0777
+ local($")=$Is_MacOS ? ":" : "/";
+ $mode = 0777 unless defined($mode);
+ $paths = [$paths] unless ref $paths;
+ my(@created,$path);
+ foreach $path (@$paths) {
+ $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT
+ # Logic wants Unix paths, so go with the flow.
+ if ($Is_VMS) {
+ next if $path eq '/';
+ $path = VMS::Filespec::unixify($path);
+ if ($path =~ m:^(/[^/]+)/?\z:) {
+ $path = $1.'/000000';
+ }
+ }
+ next if -d $path;
+ my $parent = File::Basename::dirname($path);
+ unless (-d $parent or $path eq $parent) {
+ push(@created,mkpath($parent, $verbose, $mode));
+ }
+ print "mkdir $path\n" if $verbose;
+ unless (mkdir($path,$mode)) {
+ my $e = $!;
+ # allow for another process to have created it meanwhile
+ $! = $e, croak ("mkdir $path: $e") unless -d $path;
+ }
+ push(@created, $path);
+ }
+ @created;
+}
+
+sub rmtree {
+ my($roots, $verbose, $safe) = @_;
+ my(@files);
+ my($count) = 0;
+ $verbose ||= 0;
+ $safe ||= 0;
+
+ if ( defined($roots) && length($roots) ) {
+ $roots = [$roots] unless ref $roots;
+ }
+ else {
+ carp "No root path(s) specified\n";
+ return 0;
+ }
+
+ my($root);
+ foreach $root (@{$roots}) {
+ if ($Is_MacOS) {
+ $root = ":$root" if $root !~ /:/;
+ $root =~ s#([^:])\z#$1:#;
+ } else {
+ $root =~ s#/\z##;
+ }
+ (undef, undef, my $rp) = lstat $root or next;
+ $rp &= 07777; # don't forget setuid, setgid, sticky bits
+ if ( -d _ ) {
+ # notabene: 0700 is for making readable in the first place,
+ # it's also intended to change it to writable in case we have
+ # to recurse in which case we are better than rm -rf for
+ # subtrees with strange permissions
+ chmod($rp | 0700, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
+ or carp "Can't make directory $root read+writeable: $!"
+ unless $safe;
+
+ if (opendir my $d, $root) {
+ no strict 'refs';
+ if (!defined ${"\cTAINT"} or ${"\cTAINT"}) {
+ # Blindly untaint dir names
+ @files = map { /^(.*)$/s ; $1 } readdir $d;
+ } else {
+ @files = readdir $d;
+ }
+ closedir $d;
+ }
+ else {
+ carp "Can't read $root: $!";
+ @files = ();
+ }
+
+ # Deleting large numbers of files from VMS Files-11 filesystems
+ # is faster if done in reverse ASCIIbetical order
+ @files = reverse @files if $Is_VMS;
+ ($root = VMS::Filespec::unixify($root)) =~ s#\.dir\z## if $Is_VMS;
+ if ($Is_MacOS) {
+ @files = map("$root$_", @files);
+ } else {
+ @files = map("$root/$_", grep $_!~/^\.{1,2}\z/s,@files);
+ }
+ $count += rmtree(\@files,$verbose,$safe);
+ if ($safe &&
+ ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) {
+ print "skipped $root\n" if $verbose;
+ next;
+ }
+ chmod $rp | 0700, $root
+ or carp "Can't make directory $root writeable: $!"
+ if $force_writeable;
+ print "rmdir $root\n" if $verbose;
+ if (rmdir $root) {
+ ++$count;
+ }
+ else {
+ carp "Can't remove directory $root: $!";
+ chmod($rp, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
+ or carp("and can't restore permissions to "
+ . sprintf("0%o",$rp) . "\n");
+ }
+ }
+ else {
+ if ($safe &&
+ ($Is_VMS ? !&VMS::Filespec::candelete($root)
+ : !(-l $root || -w $root)))
+ {
+ print "skipped $root\n" if $verbose;
+ next;
+ }
+ chmod $rp | 0600, $root
+ or carp "Can't make file $root writeable: $!"
+ if $force_writeable;
+ print "unlink $root\n" if $verbose;
+ # delete all versions under VMS
+ for (;;) {
+ unless (unlink $root) {
+ carp "Can't unlink file $root: $!";
+ if ($force_writeable) {
+ chmod $rp, $root
+ or carp("and can't restore permissions to "
+ . sprintf("0%o",$rp) . "\n");
+ }
+ last;
+ }
+ ++$count;
+ last unless $Is_VMS && lstat $root;
+ }
+ }
+ }
+
+ $count;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec.pm b/Master/tlpkg/tlperl/lib/File/Spec.pm
new file mode 100644
index 00000000000..0c8cd21e057
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec.pm
@@ -0,0 +1,322 @@
+package File::Spec;
+
+use strict;
+use vars qw(@ISA $VERSION);
+
+$VERSION = '3.12';
+$VERSION = eval $VERSION;
+
+my %module = (MacOS => 'Mac',
+ MSWin32 => 'Win32',
+ os2 => 'OS2',
+ VMS => 'VMS',
+ epoc => 'Epoc',
+ NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
+ symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
+ dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
+ cygwin => 'Cygwin');
+
+
+my $module = $module{$^O} || 'Unix';
+
+require "File/Spec/$module.pm";
+@ISA = ("File::Spec::$module");
+
+1;
+
+__END__
+
+=head1 NAME
+
+File::Spec - portably perform operations on file names
+
+=head1 SYNOPSIS
+
+ use File::Spec;
+
+ $x=File::Spec->catfile('a', 'b', 'c');
+
+which returns 'a/b/c' under Unix. Or:
+
+ use File::Spec::Functions;
+
+ $x = catfile('a', 'b', 'c');
+
+=head1 DESCRIPTION
+
+This module is designed to support operations commonly performed on file
+specifications (usually called "file names", but not to be confused with the
+contents of a file, or Perl's file handles), such as concatenating several
+directory and file names into a single path, or determining whether a path
+is rooted. It is based on code directly taken from MakeMaker 5.17, code
+written by Andreas KE<ouml>nig, Andy Dougherty, Charles Bailey, Ilya
+Zakharevich, Paul Schinder, and others.
+
+Since these functions are different for most operating systems, each set of
+OS specific routines is available in a separate module, including:
+
+ File::Spec::Unix
+ File::Spec::Mac
+ File::Spec::OS2
+ File::Spec::Win32
+ File::Spec::VMS
+
+The module appropriate for the current OS is automatically loaded by
+File::Spec. Since some modules (like VMS) make use of facilities available
+only under that OS, it may not be possible to load all modules under all
+operating systems.
+
+Since File::Spec is object oriented, subroutines should not be called directly,
+as in:
+
+ File::Spec::catfile('a','b');
+
+but rather as class methods:
+
+ File::Spec->catfile('a','b');
+
+For simple uses, L<File::Spec::Functions> provides convenient functional
+forms of these methods.
+
+=head1 METHODS
+
+=over 2
+
+=item canonpath
+
+No physical check on the filesystem, but a logical cleanup of a
+path.
+
+ $cpath = File::Spec->canonpath( $path ) ;
+
+Note that this does *not* collapse F<x/../y> sections into F<y>. This
+is by design. If F</foo> on your system is a symlink to F</bar/baz>,
+then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive
+F<../>-removal would give you. If you want to do this kind of
+processing, you probably want C<Cwd>'s C<realpath()> function to
+actually traverse the filesystem cleaning up paths like this.
+
+=item catdir
+
+Concatenate two or more directory names to form a complete path ending
+with a directory. But remove the trailing slash from the resulting
+string, because it doesn't look good, isn't necessary and confuses
+OS/2. Of course, if this is the root directory, don't cut off the
+trailing slash :-)
+
+ $path = File::Spec->catdir( @directories );
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+ $path = File::Spec->catfile( @directories, $filename );
+
+=item curdir
+
+Returns a string representation of the current directory.
+
+ $curdir = File::Spec->curdir();
+
+=item devnull
+
+Returns a string representation of the null device.
+
+ $devnull = File::Spec->devnull();
+
+=item rootdir
+
+Returns a string representation of the root directory.
+
+ $rootdir = File::Spec->rootdir();
+
+=item tmpdir
+
+Returns a string representation of the first writable directory from a
+list of possible temporary directories. Returns the current directory
+if no writable temporary directories are found. The list of directories
+checked depends on the platform; e.g. File::Spec::Unix checks C<$ENV{TMPDIR}>
+(unless taint is on) and F</tmp>.
+
+ $tmpdir = File::Spec->tmpdir();
+
+=item updir
+
+Returns a string representation of the parent directory.
+
+ $updir = File::Spec->updir();
+
+=item no_upwards
+
+Given a list of file names, strip out those that refer to a parent
+directory. (Does not strip symlinks, only '.', '..', and equivalents.)
+
+ @paths = File::Spec->no_upwards( @paths );
+
+=item case_tolerant
+
+Returns a true or false value indicating, respectively, that alphabetic
+case is not or is significant when comparing file specifications.
+
+ $is_case_tolerant = File::Spec->case_tolerant();
+
+=item file_name_is_absolute
+
+Takes as its argument a path, and returns true if it is an absolute path.
+
+ $is_absolute = File::Spec->file_name_is_absolute( $path );
+
+This does not consult the local filesystem on Unix, Win32, OS/2, or
+Mac OS (Classic). It does consult the working environment for VMS
+(see L<File::Spec::VMS/file_name_is_absolute>).
+
+=item path
+
+Takes no argument. Returns the environment variable C<PATH> (or the local
+platform's equivalent) as a list.
+
+ @PATH = File::Spec->path();
+
+=item join
+
+join is the same as catfile.
+
+=item splitpath
+
+Splits a path in to volume, directory, and filename portions. On systems
+with no concept of volume, returns '' for volume.
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+For systems with no syntax differentiating filenames from directories,
+assumes that the last file is a path unless C<$no_file> is true or a
+trailing separator or F</.> or F</..> is present. On Unix, this means that C<$no_file>
+true makes this return ( '', $path, '' ).
+
+The directory portion may or may not be returned with a trailing '/'.
+
+The results can be passed to L</catpath()> to get back a path equivalent to
+(usually identical to) the original path.
+
+=item splitdir
+
+The opposite of L</catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+C<$directories> must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, empty
+directory names (C<''>) can be returned, because these are significant
+on some OSes.
+
+=item catpath()
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, C<$volume> is ignored, and directory and file are concatenated. A '/' is
+inserted if need be. On other OSes, C<$volume> is significant.
+
+ $full_path = File::Spec->catpath( $volume, $directory, $file );
+
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+ $rel_path = File::Spec->abs2rel( $path ) ;
+ $rel_path = File::Spec->abs2rel( $path, $base ) ;
+
+If C<$base> is not present or '', then L<cwd()|Cwd> is used. If C<$base> is
+relative, then it is converted to absolute form using
+L</rel2abs()>. This means that it is taken to be relative to
+L<cwd()|Cwd>.
+
+On systems with the concept of volume, if C<$path> and C<$base> appear to be
+on two different volumes, we will not attempt to resolve the two
+paths, and we will instead simply return C<$path>. Note that previous
+versions of this module ignored the volume of C<$base>, which resulted in
+garbage results part of the time.
+
+On systems that have a grammar that indicates filenames, this ignores the
+C<$base> filename as well. Otherwise all path components are assumed to be
+directories.
+
+If C<$path> is relative, it is converted to absolute form using L</rel2abs()>.
+This means that it is taken to be relative to L<cwd()|Cwd>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=item rel2abs()
+
+Converts a relative path to an absolute path.
+
+ $abs_path = File::Spec->rel2abs( $path ) ;
+ $abs_path = File::Spec->rel2abs( $path, $base ) ;
+
+If C<$base> is not present or '', then L<cwd()|Cwd> is used. If C<$base> is relative,
+then it is converted to absolute form using L</rel2abs()>. This means that it
+is taken to be relative to L<cwd()|Cwd>.
+
+On systems with the concept of volume, if C<$path> and C<$base> appear to be
+on two different volumes, we will not attempt to resolve the two
+paths, and we will instead simply return C<$path>. Note that previous
+versions of this module ignored the volume of C<$base>, which resulted in
+garbage results part of the time.
+
+On systems that have a grammar that indicates filenames, this ignores the
+C<$base> filename as well. Otherwise all path components are assumed to be
+directories.
+
+If C<$path> is absolute, it is cleaned up and returned using L</canonpath()>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=back
+
+For further information, please see L<File::Spec::Unix>,
+L<File::Spec::Mac>, L<File::Spec::OS2>, L<File::Spec::Win32>, or
+L<File::Spec::VMS>.
+
+=head1 SEE ALSO
+
+L<File::Spec::Unix>, L<File::Spec::Mac>, L<File::Spec::OS2>,
+L<File::Spec::Win32>, L<File::Spec::VMS>, L<File::Spec::Functions>,
+L<ExtUtils::MakeMaker>
+
+=head1 AUTHOR
+
+Currently maintained by Ken Williams C<< <KWILLIAMS@cpan.org> >>.
+
+The vast majority of the code was written by
+Kenneth Albanowski C<< <kjahds@kjahds.com> >>,
+Andy Dougherty C<< <doughera@lafayette.edu> >>,
+Andreas KE<ouml>nig C<< <A.Koenig@franz.ww.TU-Berlin.DE> >>,
+Tim Bunce C<< <Tim.Bunce@ig.co.uk> >>.
+VMS support by Charles Bailey C<< <bailey@newman.upenn.edu> >>.
+OS/2 support by Ilya Zakharevich C<< <ilya@math.ohio-state.edu> >>.
+Mac support by Paul Schinder C<< <schinder@pobox.com> >>, and
+Thomas Wegner C<< <wegner_thomas@yahoo.com> >>.
+abs2rel() and rel2abs() written by Shigio Yamaguchi C<< <shigio@tamacom.com> >>,
+modified by Barrie Slaymaker C<< <barries@slaysys.com> >>.
+splitpath(), splitdir(), catpath() and catdir() by Barrie Slaymaker.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm b/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm
new file mode 100644
index 00000000000..19a2937c6b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm
@@ -0,0 +1,93 @@
+package File::Spec::Cygwin;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.1';
+
+@ISA = qw(File::Spec::Unix);
+
+=head1 NAME
+
+File::Spec::Cygwin - methods for Cygwin file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::Cygwin; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+This module is still in beta. Cygwin-knowledgeable folks are invited
+to offer patches and suggestions.
+
+=cut
+
+=pod
+
+=over 4
+
+=item canonpath
+
+Any C<\> (backslashes) are converted to C</> (forward slashes),
+and then File::Spec::Unix canonpath() is called on the result.
+
+=cut
+
+sub canonpath {
+ my($self,$path) = @_;
+ $path =~ s|\\|/|g;
+ return $self->SUPER::canonpath($path);
+}
+
+=pod
+
+=item file_name_is_absolute
+
+True is returned if the file name begins with C<drive_letter:>,
+and if not, File::Spec::Unix file_name_is_absolute() is called.
+
+=cut
+
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return 1 if $file =~ m{^([a-z]:)?[\\/]}is; # C:/test
+ return $self->SUPER::file_name_is_absolute($file);
+}
+
+=item tmpdir (override)
+
+Returns a string representation of the first existing directory
+from the following list:
+
+ $ENV{TMPDIR}
+ /tmp
+ C:/temp
+
+Since Perl 5.8.0, if running under taint mode, and if the environment
+variables are tainted, they are not used.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp", 'C:/temp' );
+}
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm b/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm
new file mode 100644
index 00000000000..a7168f9e494
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm
@@ -0,0 +1,77 @@
+package File::Spec::Epoc;
+
+use strict;
+use vars qw($VERSION @ISA);
+
+$VERSION = '1.1';
+
+require File::Spec::Unix;
+@ISA = qw(File::Spec::Unix);
+
+=head1 NAME
+
+File::Spec::Epoc - methods for Epoc file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::Epoc; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Unix for a documentation of the methods provided
+there. This package overrides the implementation of these methods, not
+the semantics.
+
+This package is still work in progress ;-)
+
+=cut
+
+sub case_tolerant {
+ return 1;
+}
+
+=pod
+
+=over 4
+
+=item canonpath()
+
+No physical check on the filesystem, but a logical cleanup of a
+path. On UNIX eliminated successive slashes and successive "/.".
+
+=back
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+
+ $path =~ s|/+|/|g; # xx////xx -> xx/xx
+ $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
+ $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
+ $path =~ s|^/(\.\./)+|/|s; # /../../xx -> xx
+ $path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx
+ return $path;
+}
+
+=pod
+
+=head1 AUTHOR
+
+o.flebbe@gmx.de
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm b/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm
new file mode 100644
index 00000000000..38c898c5d8f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm
@@ -0,0 +1,109 @@
+package File::Spec::Functions;
+
+use File::Spec;
+use strict;
+
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
+
+$VERSION = '1.3';
+
+require Exporter;
+
+@ISA = qw(Exporter);
+
+@EXPORT = qw(
+ canonpath
+ catdir
+ catfile
+ curdir
+ rootdir
+ updir
+ no_upwards
+ file_name_is_absolute
+ path
+);
+
+@EXPORT_OK = qw(
+ devnull
+ tmpdir
+ splitpath
+ splitdir
+ catpath
+ abs2rel
+ rel2abs
+ case_tolerant
+);
+
+%EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] );
+
+foreach my $meth (@EXPORT, @EXPORT_OK) {
+ my $sub = File::Spec->can($meth);
+ no strict 'refs';
+ *{$meth} = sub {&$sub('File::Spec', @_)};
+}
+
+
+1;
+__END__
+
+=head1 NAME
+
+File::Spec::Functions - portably perform operations on file names
+
+=head1 SYNOPSIS
+
+ use File::Spec::Functions;
+ $x = catfile('a','b');
+
+=head1 DESCRIPTION
+
+This module exports convenience functions for all of the class methods
+provided by File::Spec.
+
+For a reference of available functions, please consult L<File::Spec::Unix>,
+which contains the entire set, and which is inherited by the modules for
+other platforms. For further information, please see L<File::Spec::Mac>,
+L<File::Spec::OS2>, L<File::Spec::Win32>, or L<File::Spec::VMS>.
+
+=head2 Exports
+
+The following functions are exported by default.
+
+ canonpath
+ catdir
+ catfile
+ curdir
+ rootdir
+ updir
+ no_upwards
+ file_name_is_absolute
+ path
+
+
+The following functions are exported only by request.
+
+ devnull
+ tmpdir
+ splitpath
+ splitdir
+ catpath
+ abs2rel
+ rel2abs
+ case_tolerant
+
+All the functions may be imported using the C<:ALL> tag.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+File::Spec, File::Spec::Unix, File::Spec::Mac, File::Spec::OS2,
+File::Spec::Win32, File::Spec::VMS, ExtUtils::MakeMaker
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm b/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm
new file mode 100644
index 00000000000..8b51bd6c249
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm
@@ -0,0 +1,780 @@
+package File::Spec::Mac;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.4';
+
+@ISA = qw(File::Spec::Unix);
+
+my $macfiles;
+if ($^O eq 'MacOS') {
+ $macfiles = eval { require Mac::Files };
+}
+
+sub case_tolerant { 1 }
+
+
+=head1 NAME
+
+File::Spec::Mac - File::Spec for Mac OS (Classic)
+
+=head1 SYNOPSIS
+
+ require File::Spec::Mac; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+Methods for manipulating file specifications.
+
+=head1 METHODS
+
+=over 2
+
+=item canonpath
+
+On Mac OS, there's nothing to be done. Returns what it's given.
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+ return $path;
+}
+
+=item catdir()
+
+Concatenate two or more directory names to form a path separated by colons
+(":") ending with a directory. Resulting paths are B<relative> by default,
+but can be forced to be absolute (but avoid this, see below). Automatically
+puts a trailing ":" on the end of the complete path, because that's what's
+done in MacPerl's environment and helps to distinguish a file path from a
+directory path.
+
+B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the resulting
+path is relative by default and I<not> absolute. This decision was made due
+to portability reasons. Since C<File::Spec-E<gt>catdir()> returns relative paths
+on all other operating systems, it will now also follow this convention on Mac
+OS. Note that this may break some existing scripts.
+
+The intended purpose of this routine is to concatenate I<directory names>.
+But because of the nature of Macintosh paths, some additional possibilities
+are allowed to make using this routine give reasonable results for some
+common situations. In other words, you are also allowed to concatenate
+I<paths> instead of directory names (strictly speaking, a string like ":a"
+is a path, but not a name, since it contains a punctuation character ":").
+
+So, beside calls like
+
+ catdir("a") = ":a:"
+ catdir("a","b") = ":a:b:"
+ catdir() = "" (special case)
+
+calls like the following
+
+ catdir(":a:") = ":a:"
+ catdir(":a","b") = ":a:b:"
+ catdir(":a:","b") = ":a:b:"
+ catdir(":a:",":b:") = ":a:b:"
+ catdir(":") = ":"
+
+are allowed.
+
+Here are the rules that are used in C<catdir()>; note that we try to be as
+compatible as possible to Unix:
+
+=over 2
+
+=item 1.
+
+The resulting path is relative by default, i.e. the resulting path will have a
+leading colon.
+
+=item 2.
+
+A trailing colon is added automatically to the resulting path, to denote a
+directory.
+
+=item 3.
+
+Generally, each argument has one leading ":" and one trailing ":"
+removed (if any). They are then joined together by a ":". Special
+treatment applies for arguments denoting updir paths like "::lib:",
+see (4), or arguments consisting solely of colons ("colon paths"),
+see (5).
+
+=item 4.
+
+When an updir path like ":::lib::" is passed as argument, the number
+of directories to climb up is handled correctly, not removing leading
+or trailing colons when necessary. E.g.
+
+ catdir(":::a","::b","c") = ":::a::b:c:"
+ catdir(":::a::","::b","c") = ":::a:::b:c:"
+
+=item 5.
+
+Adding a colon ":" or empty string "" to a path at I<any> position
+doesn't alter the path, i.e. these arguments are ignored. (When a ""
+is passed as the first argument, it has a special meaning, see
+(6)). This way, a colon ":" is handled like a "." (curdir) on Unix,
+while an empty string "" is generally ignored (see
+C<Unix-E<gt>canonpath()> ). Likewise, a "::" is handled like a ".."
+(updir), and a ":::" is handled like a "../.." etc. E.g.
+
+ catdir("a",":",":","b") = ":a:b:"
+ catdir("a",":","::",":b") = ":a::b:"
+
+=item 6.
+
+If the first argument is an empty string "" or is a volume name, i.e. matches
+the pattern /^[^:]+:/, the resulting path is B<absolute>.
+
+=item 7.
+
+Passing an empty string "" as the first argument to C<catdir()> is
+like passingC<File::Spec-E<gt>rootdir()> as the first argument, i.e.
+
+ catdir("","a","b") is the same as
+
+ catdir(rootdir(),"a","b").
+
+This is true on Unix, where C<catdir("","a","b")> yields "/a/b" and
+C<rootdir()> is "/". Note that C<rootdir()> on Mac OS is the startup
+volume, which is the closest in concept to Unix' "/". This should help
+to run existing scripts originally written for Unix.
+
+=item 8.
+
+For absolute paths, some cleanup is done, to ensure that the volume
+name isn't immediately followed by updirs. This is invalid, because
+this would go beyond "root". Generally, these cases are handled like
+their Unix counterparts:
+
+ Unix:
+ Unix->catdir("","") = "/"
+ Unix->catdir("",".") = "/"
+ Unix->catdir("","..") = "/" # can't go beyond root
+ Unix->catdir("",".","..","..","a") = "/a"
+ Mac:
+ Mac->catdir("","") = rootdir() # (e.g. "HD:")
+ Mac->catdir("",":") = rootdir()
+ Mac->catdir("","::") = rootdir() # can't go beyond root
+ Mac->catdir("",":","::","::","a") = rootdir() . "a:" # (e.g. "HD:a:")
+
+However, this approach is limited to the first arguments following
+"root" (again, see C<Unix-E<gt>canonpath()> ). If there are more
+arguments that move up the directory tree, an invalid path going
+beyond root can be created.
+
+=back
+
+As you've seen, you can force C<catdir()> to create an absolute path
+by passing either an empty string or a path that begins with a volume
+name as the first argument. However, you are strongly encouraged not
+to do so, since this is done only for backward compatibility. Newer
+versions of File::Spec come with a method called C<catpath()> (see
+below), that is designed to offer a portable solution for the creation
+of absolute paths. It takes volume, directory and file portions and
+returns an entire path. While C<catdir()> is still suitable for the
+concatenation of I<directory names>, you are encouraged to use
+C<catpath()> to concatenate I<volume names> and I<directory
+paths>. E.g.
+
+ $dir = File::Spec->catdir("tmp","sources");
+ $abs_path = File::Spec->catpath("MacintoshHD:", $dir,"");
+
+yields
+
+ "MacintoshHD:tmp:sources:" .
+
+=cut
+
+sub catdir {
+ my $self = shift;
+ return '' unless @_;
+ my @args = @_;
+ my $first_arg;
+ my $relative;
+
+ # take care of the first argument
+
+ if ($args[0] eq '') { # absolute path, rootdir
+ shift @args;
+ $relative = 0;
+ $first_arg = $self->rootdir;
+
+ } elsif ($args[0] =~ /^[^:]+:/) { # absolute path, volume name
+ $relative = 0;
+ $first_arg = shift @args;
+ # add a trailing ':' if need be (may be it's a path like HD:dir)
+ $first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
+
+ } else { # relative path
+ $relative = 1;
+ if ( $args[0] =~ /^::+\Z(?!\n)/ ) {
+ # updir colon path ('::', ':::' etc.), don't shift
+ $first_arg = ':';
+ } elsif ($args[0] eq ':') {
+ $first_arg = shift @args;
+ } else {
+ # add a trailing ':' if need be
+ $first_arg = shift @args;
+ $first_arg = "$first_arg:" unless ($first_arg =~ /:\Z(?!\n)/);
+ }
+ }
+
+ # For all other arguments,
+ # (a) ignore arguments that equal ':' or '',
+ # (b) handle updir paths specially:
+ # '::' -> concatenate '::'
+ # '::' . '::' -> concatenate ':::' etc.
+ # (c) add a trailing ':' if need be
+
+ my $result = $first_arg;
+ while (@args) {
+ my $arg = shift @args;
+ unless (($arg eq '') || ($arg eq ':')) {
+ if ($arg =~ /^::+\Z(?!\n)/ ) { # updir colon path like ':::'
+ my $updir_count = length($arg) - 1;
+ while ((@args) && ($args[0] =~ /^::+\Z(?!\n)/) ) { # while updir colon path
+ $arg = shift @args;
+ $updir_count += (length($arg) - 1);
+ }
+ $arg = (':' x $updir_count);
+ } else {
+ $arg =~ s/^://s; # remove a leading ':' if any
+ $arg = "$arg:" unless ($arg =~ /:\Z(?!\n)/); # ensure trailing ':'
+ }
+ $result .= $arg;
+ }#unless
+ }
+
+ if ( ($relative) && ($result !~ /^:/) ) {
+ # add a leading colon if need be
+ $result = ":$result";
+ }
+
+ unless ($relative) {
+ # remove updirs immediately following the volume name
+ $result =~ s/([^:]+:)(:*)(.*)\Z(?!\n)/$1$3/;
+ }
+
+ return $result;
+}
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename. Resulting paths are B<relative>
+by default, but can be forced to be absolute (but avoid this).
+
+B<IMPORTANT NOTE:> Beginning with version 1.3 of this module, the
+resulting path is relative by default and I<not> absolute. This
+decision was made due to portability reasons. Since
+C<File::Spec-E<gt>catfile()> returns relative paths on all other
+operating systems, it will now also follow this convention on Mac OS.
+Note that this may break some existing scripts.
+
+The last argument is always considered to be the file portion. Since
+C<catfile()> uses C<catdir()> (see above) for the concatenation of the
+directory portions (if any), the following with regard to relative and
+absolute paths is true:
+
+ catfile("") = ""
+ catfile("file") = "file"
+
+but
+
+ catfile("","") = rootdir() # (e.g. "HD:")
+ catfile("","file") = rootdir() . file # (e.g. "HD:file")
+ catfile("HD:","file") = "HD:file"
+
+This means that C<catdir()> is called only when there are two or more
+arguments, as one might expect.
+
+Note that the leading ":" is removed from the filename, so that
+
+ catfile("a","b","file") = ":a:b:file" and
+
+ catfile("a","b",":file") = ":a:b:file"
+
+give the same answer.
+
+To concatenate I<volume names>, I<directory paths> and I<filenames>,
+you are encouraged to use C<catpath()> (see below).
+
+=cut
+
+sub catfile {
+ my $self = shift;
+ return '' unless @_;
+ my $file = pop @_;
+ return $file unless @_;
+ my $dir = $self->catdir(@_);
+ $file =~ s/^://s;
+ return $dir.$file;
+}
+
+=item curdir
+
+Returns a string representing the current directory. On Mac OS, this is ":".
+
+=cut
+
+sub curdir {
+ return ":";
+}
+
+=item devnull
+
+Returns a string representing the null device. On Mac OS, this is "Dev:Null".
+
+=cut
+
+sub devnull {
+ return "Dev:Null";
+}
+
+=item rootdir
+
+Returns a string representing the root directory. Under MacPerl,
+returns the name of the startup volume, since that's the closest in
+concept, although other volumes aren't rooted there. The name has a
+trailing ":", because that's the correct specification for a volume
+name on Mac OS.
+
+If Mac::Files could not be loaded, the empty string is returned.
+
+=cut
+
+sub rootdir {
+#
+# There's no real root directory on Mac OS. The name of the startup
+# volume is returned, since that's the closest in concept.
+#
+ return '' unless $macfiles;
+ my $system = Mac::Files::FindFolder(&Mac::Files::kOnSystemDisk,
+ &Mac::Files::kSystemFolderType);
+ $system =~ s/:.*\Z(?!\n)/:/s;
+ return $system;
+}
+
+=item tmpdir
+
+Returns the contents of $ENV{TMPDIR}, if that directory exits or the
+current working directory otherwise. Under MacPerl, $ENV{TMPDIR} will
+contain a path like "MacintoshHD:Temporary Items:", which is a hidden
+directory on your startup volume.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR} );
+}
+
+=item updir
+
+Returns a string representing the parent directory. On Mac OS, this is "::".
+
+=cut
+
+sub updir {
+ return "::";
+}
+
+=item file_name_is_absolute
+
+Takes as argument a path and returns true, if it is an absolute path.
+If the path has a leading ":", it's a relative path. Otherwise, it's an
+absolute path, unless the path doesn't contain any colons, i.e. it's a name
+like "a". In this particular case, the path is considered to be relative
+(i.e. it is considered to be a filename). Use ":" in the appropriate place
+in the path if you want to distinguish unambiguously. As a special case,
+the filename '' is always considered to be absolute. Note that with version
+1.2 of File::Spec::Mac, this does no longer consult the local filesystem.
+
+E.g.
+
+ File::Spec->file_name_is_absolute("a"); # false (relative)
+ File::Spec->file_name_is_absolute(":a:b:"); # false (relative)
+ File::Spec->file_name_is_absolute("MacintoshHD:"); # true (absolute)
+ File::Spec->file_name_is_absolute(""); # true (absolute)
+
+
+=cut
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ if ($file =~ /:/) {
+ return (! ($file =~ m/^:/s) );
+ } elsif ( $file eq '' ) {
+ return 1 ;
+ } else {
+ return 0; # i.e. a file like "a"
+ }
+}
+
+=item path
+
+Returns the null list for the MacPerl application, since the concept is
+usually meaningless under Mac OS. But if you're using the MacPerl tool under
+MPW, it gives back $ENV{Commands} suitably split, as is done in
+:lib:ExtUtils:MM_Mac.pm.
+
+=cut
+
+sub path {
+#
+# The concept is meaningless under the MacPerl application.
+# Under MPW, it has a meaning.
+#
+ return unless exists $ENV{Commands};
+ return split(/,/, $ENV{Commands});
+}
+
+=item splitpath
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path into volume, directory, and filename portions.
+
+On Mac OS, assumes that the last part of the path is a filename unless
+$no_file is true or a trailing separator ":" is present.
+
+The volume portion is always returned with a trailing ":". The directory portion
+is always returned with a leading (to denote a relative path) and a trailing ":"
+(to denote a directory). The file portion is always returned I<without> a leading ":".
+Empty portions are returned as empty string ''.
+
+The results can be passed to C<catpath()> to get back a path equivalent to
+(usually identical to) the original path.
+
+
+=cut
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+ my ($volume,$directory,$file);
+
+ if ( $nofile ) {
+ ( $volume, $directory ) = $path =~ m|^((?:[^:]+:)?)(.*)|s;
+ }
+ else {
+ $path =~
+ m|^( (?: [^:]+: )? )
+ ( (?: .*: )? )
+ ( .* )
+ |xs;
+ $volume = $1;
+ $directory = $2;
+ $file = $3;
+ }
+
+ $volume = '' unless defined($volume);
+ $directory = ":$directory" if ( $volume && $directory ); # take care of "HD::dir"
+ if ($directory) {
+ # Make sure non-empty directories begin and end in ':'
+ $directory .= ':' unless (substr($directory,-1) eq ':');
+ $directory = ":$directory" unless (substr($directory,0,1) eq ':');
+ } else {
+ $directory = '';
+ }
+ $file = '' unless defined($file);
+
+ return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of C<catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories should be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories. Consider using C<splitpath()> otherwise.
+
+Unlike just splitting the directories on the separator, empty directory names
+(C<"">) can be returned. Since C<catdir()> on Mac OS always appends a trailing
+colon to distinguish a directory path from a file path, a single trailing colon
+will be ignored, i.e. there's no empty directory name after it.
+
+Hence, on Mac OS, both
+
+ File::Spec->splitdir( ":a:b::c:" ); and
+ File::Spec->splitdir( ":a:b::c" );
+
+yield:
+
+ ( "a", "b", "::", "c")
+
+while
+
+ File::Spec->splitdir( ":a:b::c::" );
+
+yields:
+
+ ( "a", "b", "::", "c", "::")
+
+
+=cut
+
+sub splitdir {
+ my ($self, $path) = @_;
+ my @result = ();
+ my ($head, $sep, $tail, $volume, $directories);
+
+ return ('') if ( (!defined($path)) || ($path eq '') );
+ return (':') if ($path eq ':');
+
+ ( $volume, $sep, $directories ) = $path =~ m|^((?:[^:]+:)?)(:*)(.*)|s;
+
+ # deprecated, but handle it correctly
+ if ($volume) {
+ push (@result, $volume);
+ $sep .= ':';
+ }
+
+ while ($sep || $directories) {
+ if (length($sep) > 1) {
+ my $updir_count = length($sep) - 1;
+ for (my $i=0; $i<$updir_count; $i++) {
+ # push '::' updir_count times;
+ # simulate Unix '..' updirs
+ push (@result, '::');
+ }
+ }
+ $sep = '';
+ if ($directories) {
+ ( $head, $sep, $tail ) = $directories =~ m|^((?:[^:]+)?)(:*)(.*)|s;
+ push (@result, $head);
+ $directories = $tail;
+ }
+ }
+ return @result;
+}
+
+
+=item catpath
+
+ $path = File::Spec->catpath($volume,$directory,$file);
+
+Takes volume, directory and file portions and returns an entire path. On Mac OS,
+$volume, $directory and $file are concatenated. A ':' is inserted if need be. You
+may pass an empty string for each portion. If all portions are empty, the empty
+string is returned. If $volume is empty, the result will be a relative path,
+beginning with a ':'. If $volume and $directory are empty, a leading ":" (if any)
+is removed form $file and the remainder is returned. If $file is empty, the
+resulting path will have a trailing ':'.
+
+
+=cut
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ if ( (! $volume) && (! $directory) ) {
+ $file =~ s/^:// if $file;
+ return $file ;
+ }
+
+ # We look for a volume in $volume, then in $directory, but not both
+
+ my ($dir_volume, $dir_dirs) = $self->splitpath($directory, 1);
+
+ $volume = $dir_volume unless length $volume;
+ my $path = $volume; # may be ''
+ $path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
+
+ if ($directory) {
+ $directory = $dir_dirs if $volume;
+ $directory =~ s/^://; # remove leading ':' if any
+ $path .= $directory;
+ $path .= ':' unless (substr($path, -1) eq ':'); # ensure trailing ':'
+ }
+
+ if ($file) {
+ $file =~ s/^://; # remove leading ':' if any
+ $path .= $file;
+ }
+
+ return $path;
+}
+
+=item abs2rel
+
+Takes a destination path and an optional base path and returns a relative path
+from the base path to the destination path:
+
+ $rel_path = File::Spec->abs2rel( $path ) ;
+ $rel_path = File::Spec->abs2rel( $path, $base ) ;
+
+Note that both paths are assumed to have a notation that distinguishes a
+directory path (with trailing ':') from a file path (without trailing ':').
+
+If $base is not present or '', then the current working directory is used.
+If $base is relative, then it is converted to absolute form using C<rel2abs()>.
+This means that it is taken to be relative to the current working directory.
+
+If $path and $base appear to be on two different volumes, we will not
+attempt to resolve the two paths, and we will instead simply return
+$path. Note that previous versions of this module ignored the volume
+of $base, which resulted in garbage results part of the time.
+
+If $base doesn't have a trailing colon, the last element of $base is
+assumed to be a filename. This filename is ignored. Otherwise all path
+components are assumed to be directories.
+
+If $path is relative, it is converted to absolute form using C<rel2abs()>.
+This means that it is taken to be relative to the current working directory.
+
+Based on code written by Shigio Yamaguchi.
+
+
+=cut
+
+# maybe this should be done in canonpath() ?
+sub _resolve_updirs {
+ my $path = shift @_;
+ my $proceed;
+
+ # resolve any updirs, e.g. "HD:tmp::file" -> "HD:file"
+ do {
+ $proceed = ($path =~ s/^(.*):[^:]+::(.*?)\z/$1:$2/);
+ } while ($proceed);
+
+ return $path;
+}
+
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ $path = $self->rel2abs( $path ) ;
+ }
+
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ $base = _resolve_updirs( $base ); # resolve updirs in $base
+ }
+ else {
+ $base = _resolve_updirs( $base );
+ }
+
+ # Split up paths - ignore $base's file
+ my ( $path_vol, $path_dirs, $path_file ) = $self->splitpath( $path );
+ my ( $base_vol, $base_dirs ) = $self->splitpath( $base );
+
+ return $path unless lc( $path_vol ) eq lc( $base_vol );
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path_dirs );
+ my @basechunks = $self->splitdir( $base_dirs );
+
+ while ( @pathchunks &&
+ @basechunks &&
+ lc( $pathchunks[0] ) eq lc( $basechunks[0] ) ) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ # @pathchunks now has the directories to descend in to.
+ # ensure relative path, even if @pathchunks is empty
+ $path_dirs = $self->catdir( ':', @pathchunks );
+
+ # @basechunks now contains the number of directories to climb out of.
+ $base_dirs = (':' x @basechunks) . ':' ;
+
+ return $self->catpath( '', $self->catdir( $base_dirs, $path_dirs ), $path_file ) ;
+}
+
+=item rel2abs
+
+Converts a relative path to an absolute path:
+
+ $abs_path = File::Spec->rel2abs( $path ) ;
+ $abs_path = File::Spec->rel2abs( $path, $base ) ;
+
+Note that both paths are assumed to have a notation that distinguishes a
+directory path (with trailing ':') from a file path (without trailing ':').
+
+If $base is not present or '', then $base is set to the current working
+directory. If $base is relative, then it is converted to absolute form
+using C<rel2abs()>. This means that it is taken to be relative to the
+current working directory.
+
+If $base doesn't have a trailing colon, the last element of $base is
+assumed to be a filename. This filename is ignored. Otherwise all path
+components are assumed to be directories.
+
+If $path is already absolute, it is returned and $base is ignored.
+
+Based on code written by Shigio Yamaguchi.
+
+=cut
+
+sub rel2abs {
+ my ($self,$path,$base) = @_;
+
+ if ( ! $self->file_name_is_absolute($path) ) {
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ }
+ elsif ( ! $self->file_name_is_absolute($base) ) {
+ $base = $self->rel2abs($base) ;
+ }
+
+ # Split up paths
+
+ # igonore $path's volume
+ my ( $path_dirs, $path_file ) = ($self->splitpath($path))[1,2] ;
+
+ # ignore $base's file part
+ my ( $base_vol, $base_dirs ) = $self->splitpath($base) ;
+
+ # Glom them together
+ $path_dirs = ':' if ($path_dirs eq '');
+ $base_dirs =~ s/:$//; # remove trailing ':', if any
+ $base_dirs = $base_dirs . $path_dirs;
+
+ $path = $self->catpath( $base_vol, $base_dirs, $path_file );
+ }
+ return $path;
+}
+
+
+=back
+
+=head1 AUTHORS
+
+See the authors list in I<File::Spec>. Mac OS support by Paul Schinder
+<schinder@pobox.com> and Thomas Wegner <wegner_thomas@yahoo.com>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm b/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm
new file mode 100644
index 00000000000..ec308f3b6f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm
@@ -0,0 +1,272 @@
+package File::Spec::OS2;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.2';
+
+@ISA = qw(File::Spec::Unix);
+
+sub devnull {
+ return "/dev/nul";
+}
+
+sub case_tolerant {
+ return 1;
+}
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return scalar($file =~ m{^([a-z]:)?[\\/]}is);
+}
+
+sub path {
+ my $path = $ENV{PATH};
+ $path =~ s:\\:/:g;
+ my @path = split(';',$path);
+ foreach (@path) { $_ = '.' if $_ eq '' }
+ return @path;
+}
+
+sub _cwd {
+ # In OS/2 the "require Cwd" is unnecessary bloat.
+ return Cwd::sys_cwd();
+}
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( @ENV{qw(TMPDIR TEMP TMP)},
+ '/tmp',
+ '/' );
+}
+
+sub catdir {
+ my $self = shift;
+ my @args = @_;
+ foreach (@args) {
+ tr[\\][/];
+ # append a backslash to each argument unless it has one there
+ $_ .= "/" unless m{/$};
+ }
+ return $self->canonpath(join('', @args));
+}
+
+sub canonpath {
+ my ($self,$path) = @_;
+ $path =~ s/^([a-z]:)/\l$1/s;
+ $path =~ s|\\|/|g;
+ $path =~ s|([^/])/+|$1/|g; # xx////xx -> xx/xx
+ $path =~ s|(/\.)+/|/|g; # xx/././xx -> xx/xx
+ $path =~ s|^(\./)+(?=[^/])||s; # ./xx -> xx
+ $path =~ s|/\Z(?!\n)||
+ unless $path =~ m#^([a-z]:)?/\Z(?!\n)#si;# xx/ -> xx
+ $path =~ s{^/\.\.$}{/}; # /.. -> /
+ 1 while $path =~ s{^/\.\.}{}; # /../xx -> /xx
+ return $path;
+}
+
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+ my ($volume,$directory,$file) = ('','','');
+ if ( $nofile ) {
+ $path =~
+ m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ }
+ else {
+ $path =~
+ m{^ ( (?: [a-zA-Z]: |
+ (?:\\\\|//)[^\\/]+[\\/][^\\/]+
+ )?
+ )
+ ( (?:.*[\\\\/](?:\.\.?\Z(?!\n))?)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ $file = $3;
+ }
+
+ return ($volume,$directory,$file);
+}
+
+
+sub splitdir {
+ my ($self,$directories) = @_ ;
+ split m|[\\/]|, $directories, -1;
+}
+
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ # If it's UNC, make sure the glue separator is there, reusing
+ # whatever separator is first in the $volume
+ $volume .= $1
+ if ( $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s &&
+ $directory =~ m@^[^\\/]@s
+ ) ;
+
+ $volume .= $directory ;
+
+ # If the volume is not just A:, make sure the glue separator is
+ # there, reusing whatever separator is first in the $volume if possible.
+ if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
+ $volume =~ m@[^\\/]\Z(?!\n)@ &&
+ $file =~ m@[^\\/]@
+ ) {
+ $volume =~ m@([\\/])@ ;
+ my $sep = $1 ? $1 : '/' ;
+ $volume .= $sep ;
+ }
+
+ $volume .= $file ;
+
+ return $volume ;
+}
+
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ $path = $self->rel2abs( $path ) ;
+ } else {
+ $path = $self->canonpath( $path ) ;
+ }
+
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ } elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ } else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Split up paths
+ my ( $path_volume, $path_directories, $path_file ) = $self->splitpath( $path, 1 ) ;
+ my ( $base_volume, $base_directories ) = $self->splitpath( $base, 1 ) ;
+ return $path unless $path_volume eq $base_volume;
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path_directories );
+ my @basechunks = $self->splitdir( $base_directories );
+
+ while ( @pathchunks &&
+ @basechunks &&
+ lc( $pathchunks[0] ) eq lc( $basechunks[0] )
+ ) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ # No need to catdir, we know these are well formed.
+ $path_directories = CORE::join( '/', @pathchunks );
+ $base_directories = CORE::join( '/', @basechunks );
+
+ # $base_directories now contains the directories the resulting relative
+ # path must ascend out of before it can descend to $path_directory. So,
+ # replace all names with $parentDir
+
+ #FA Need to replace between backslashes...
+ $base_directories =~ s|[^\\/]+|..|g ;
+
+ # Glue the two together, using a separator if necessary, and preventing an
+ # empty result.
+
+ #FA Must check that new directories are not empty.
+ if ( $path_directories ne '' && $base_directories ne '' ) {
+ $path_directories = "$base_directories/$path_directories" ;
+ } else {
+ $path_directories = "$base_directories$path_directories" ;
+ }
+
+ return $self->canonpath(
+ $self->catpath( "", $path_directories, $path_file )
+ ) ;
+}
+
+
+sub rel2abs {
+ my ($self,$path,$base ) = @_;
+
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ my ( $path_directories, $path_file ) =
+ ($self->splitpath( $path, 1 ))[1,2] ;
+
+ my ( $base_volume, $base_directories ) =
+ $self->splitpath( $base, 1 ) ;
+
+ $path = $self->catpath(
+ $base_volume,
+ $self->catdir( $base_directories, $path_directories ),
+ $path_file
+ ) ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+File::Spec::OS2 - methods for OS/2 file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::OS2; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+Amongst the changes made for OS/2 are...
+
+=over 4
+
+=item tmpdir
+
+Modifies the list of places temp directory information is looked for.
+
+ $ENV{TMPDIR}
+ $ENV{TEMP}
+ $ENV{TMP}
+ /tmp
+ /
+
+=item splitpath
+
+Volumes can be drive letters or UNC sharenames (\\server\share).
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm b/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm
new file mode 100644
index 00000000000..4a25fe632f2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm
@@ -0,0 +1,510 @@
+package File::Spec::Unix;
+
+use strict;
+use vars qw($VERSION);
+
+$VERSION = '1.5';
+
+=head1 NAME
+
+File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules
+
+=head1 SYNOPSIS
+
+ require File::Spec::Unix; # Done automatically by File::Spec
+
+=head1 DESCRIPTION
+
+Methods for manipulating file specifications. Other File::Spec
+modules, such as File::Spec::Mac, inherit from File::Spec::Unix and
+override specific methods.
+
+=head1 METHODS
+
+=over 2
+
+=item canonpath()
+
+No physical check on the filesystem, but a logical cleanup of a
+path. On UNIX eliminates successive slashes and successive "/.".
+
+ $cpath = File::Spec->canonpath( $path ) ;
+
+Note that this does *not* collapse F<x/../y> sections into F<y>. This
+is by design. If F</foo> on your system is a symlink to F</bar/baz>,
+then F</foo/../quux> is actually F</bar/quux>, not F</quux> as a naive
+F<../>-removal would give you. If you want to do this kind of
+processing, you probably want C<Cwd>'s C<realpath()> function to
+actually traverse the filesystem cleaning up paths like this.
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+
+ # Handle POSIX-style node names beginning with double slash (qnx, nto)
+ # Handle network path names beginning with double slash (cygwin)
+ # (POSIX says: "a pathname that begins with two successive slashes
+ # may be interpreted in an implementation-defined manner, although
+ # more than two leading slashes shall be treated as a single slash.")
+ my $node = '';
+ if ( $^O =~ m/^(?:qnx|nto|cygwin)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+ $node = $1;
+ }
+ # This used to be
+ # $path =~ s|/+|/|g unless($^O eq 'cygwin');
+ # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
+ # (Mainly because trailing "" directories didn't get stripped).
+ # Why would cygwin avoid collapsing multiple slashes into one? --jhi
+ $path =~ s|/+|/|g; # xx////xx -> xx/xx
+ $path =~ s@(/\.)+(/|\Z(?!\n))@/@g; # xx/././xx -> xx/xx
+ $path =~ s|^(\./)+||s unless $path eq "./"; # ./xx -> xx
+ $path =~ s|^/(\.\./)+|/|; # /../../xx -> xx
+ $path =~ s|^/\.\.$|/|; # /.. -> /
+ $path =~ s|/\Z(?!\n)|| unless $path eq "/"; # xx/ -> xx
+ return "$node$path";
+}
+
+=item catdir()
+
+Concatenate two or more directory names to form a complete path ending
+with a directory. But remove the trailing slash from the resulting
+string, because it doesn't look good, isn't necessary and confuses
+OS2. Of course, if this is the root directory, don't cut off the
+trailing slash :-)
+
+=cut
+
+sub catdir {
+ my $self = shift;
+
+ $self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
+}
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+=cut
+
+sub catfile {
+ my $self = shift;
+ my $file = $self->canonpath(pop @_);
+ return $file unless @_;
+ my $dir = $self->catdir(@_);
+ $dir .= "/" unless substr($dir,-1) eq "/";
+ return $dir.$file;
+}
+
+=item curdir
+
+Returns a string representation of the current directory. "." on UNIX.
+
+=cut
+
+sub curdir () { '.' }
+
+=item devnull
+
+Returns a string representation of the null device. "/dev/null" on UNIX.
+
+=cut
+
+sub devnull () { '/dev/null' }
+
+=item rootdir
+
+Returns a string representation of the root directory. "/" on UNIX.
+
+=cut
+
+sub rootdir () { '/' }
+
+=item tmpdir
+
+Returns a string representation of the first writable directory from
+the following list or the current directory if none from the list are
+writable:
+
+ $ENV{TMPDIR}
+ /tmp
+
+Since perl 5.8.0, if running under taint mode, and if $ENV{TMPDIR}
+is tainted, it is not used.
+
+=cut
+
+my $tmpdir;
+sub _tmpdir {
+ return $tmpdir if defined $tmpdir;
+ my $self = shift;
+ my @dirlist = @_;
+ {
+ no strict 'refs';
+ if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0
+ require Scalar::Util;
+ @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
+ }
+ }
+ foreach (@dirlist) {
+ next unless defined && -d && -w _;
+ $tmpdir = $_;
+ last;
+ }
+ $tmpdir = $self->curdir unless defined $tmpdir;
+ $tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
+ return $tmpdir;
+}
+
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" );
+}
+
+=item updir
+
+Returns a string representation of the parent directory. ".." on UNIX.
+
+=cut
+
+sub updir () { '..' }
+
+=item no_upwards
+
+Given a list of file names, strip out those that refer to a parent
+directory. (Does not strip symlinks, only '.', '..', and equivalents.)
+
+=cut
+
+sub no_upwards {
+ my $self = shift;
+ return grep(!/^\.{1,2}\Z(?!\n)/s, @_);
+}
+
+=item case_tolerant
+
+Returns a true or false value indicating, respectively, that alphabetic
+is not or is significant when comparing file specifications.
+
+=cut
+
+sub case_tolerant () { 0 }
+
+=item file_name_is_absolute
+
+Takes as argument a path and returns true if it is an absolute path.
+
+This does not consult the local filesystem on Unix, Win32, OS/2 or Mac
+OS (Classic). It does consult the working environment for VMS (see
+L<File::Spec::VMS/file_name_is_absolute>).
+
+=cut
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return scalar($file =~ m:^/:s);
+}
+
+=item path
+
+Takes no argument, returns the environment variable PATH as an array.
+
+=cut
+
+sub path {
+ return () unless exists $ENV{PATH};
+ my @path = split(':', $ENV{PATH});
+ foreach (@path) { $_ = '.' if $_ eq '' }
+ return @path;
+}
+
+=item join
+
+join is the same as catfile.
+
+=cut
+
+sub join {
+ my $self = shift;
+ return $self->catfile(@_);
+}
+
+=item splitpath
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path into volume, directory, and filename portions. On systems
+with no concept of volume, returns '' for volume.
+
+For systems with no syntax differentiating filenames from directories,
+assumes that the last file is a path unless $no_file is true or a
+trailing separator or /. or /.. is present. On Unix this means that $no_file
+true makes this return ( '', $path, '' ).
+
+The directory portion may or may not be returned with a trailing '/'.
+
+The results can be passed to L</catpath()> to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+
+ my ($volume,$directory,$file) = ('','','');
+
+ if ( $nofile ) {
+ $directory = $path;
+ }
+ else {
+ $path =~ m|^ ( (?: .* / (?: \.\.?\Z(?!\n) )? )? ) ([^/]*) |xs;
+ $directory = $1;
+ $file = $2;
+ }
+
+ return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L</catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, empty
+directory names (C<''>) can be returned, because these are significant
+on some OSs.
+
+On Unix,
+
+ File::Spec->splitdir( "/a/b//c/" );
+
+Yields:
+
+ ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+ return split m|/|, $_[1], -1; # Preserve trailing fields
+}
+
+
+=item catpath()
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and directory and file are concatenated. A '/' is
+inserted if needed (though if the directory portion doesn't start with
+'/' it is not added). On other OSs, $volume is significant.
+
+=cut
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ if ( $directory ne '' &&
+ $file ne '' &&
+ substr( $directory, -1 ) ne '/' &&
+ substr( $file, 0, 1 ) ne '/'
+ ) {
+ $directory .= "/$file" ;
+ }
+ else {
+ $directory .= $file ;
+ }
+
+ return $directory ;
+}
+
+=item abs2rel
+
+Takes a destination path and an optional base path returns a relative path
+from the base path to the destination path:
+
+ $rel_path = File::Spec->abs2rel( $path ) ;
+ $rel_path = File::Spec->abs2rel( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
+relative, then it is converted to absolute form using
+L</rel2abs()>. This means that it is taken to be relative to
+L<cwd()|Cwd>.
+
+On systems that have a grammar that indicates filenames, this ignores the
+$base filename. Otherwise all path components are assumed to be
+directories.
+
+If $path is relative, it is converted to absolute form using L</rel2abs()>.
+This means that it is taken to be relative to L<cwd()|Cwd>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=cut
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ $path = $self->rel2abs( $path ) ;
+ }
+ else {
+ $path = $self->canonpath( $path ) ;
+ }
+
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path);
+ my @basechunks = $self->splitdir( $base);
+
+ while (@pathchunks && @basechunks && $pathchunks[0] eq $basechunks[0]) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ $path = CORE::join( '/', @pathchunks );
+ $base = CORE::join( '/', @basechunks );
+
+ # $base now contains the directories the resulting relative path
+ # must ascend out of before it can descend to $path_directory. So,
+ # replace all names with $parentDir
+ $base =~ s|[^/]+|..|g ;
+
+ # Glue the two together, using a separator if necessary, and preventing an
+ # empty result.
+ if ( $path ne '' && $base ne '' ) {
+ $path = "$base/$path" ;
+ } else {
+ $path = "$base$path" ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+=item rel2abs()
+
+Converts a relative path to an absolute path.
+
+ $abs_path = File::Spec->rel2abs( $path ) ;
+ $abs_path = File::Spec->rel2abs( $path, $base ) ;
+
+If $base is not present or '', then L<cwd()|Cwd> is used. If $base is
+relative, then it is converted to absolute form using
+L</rel2abs()>. This means that it is taken to be relative to
+L<cwd()|Cwd>.
+
+On systems that have a grammar that indicates filenames, this ignores
+the $base filename. Otherwise all path components are assumed to be
+directories.
+
+If $path is absolute, it is cleaned up and returned using L</canonpath()>.
+
+No checks against the filesystem are made. On VMS, there is
+interaction with the working environment, as logicals and
+macros are expanded.
+
+Based on code written by Shigio Yamaguchi.
+
+=cut
+
+sub rel2abs {
+ my ($self,$path,$base ) = @_;
+
+ # Clean up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd();
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Glom them together
+ $path = $self->catdir( $base, $path ) ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<File::Spec>
+
+=cut
+
+# Internal routine to File::Spec, no point in making this public since
+# it is the standard Cwd interface. Most of the platform-specific
+# File::Spec subclasses use this.
+sub _cwd {
+ require Cwd;
+ Cwd::cwd();
+}
+
+
+# Internal method to reduce xx\..\yy -> yy
+sub _collapse {
+ my($fs, $path) = @_;
+
+ my $updir = $fs->updir;
+ my $curdir = $fs->curdir;
+
+ my($vol, $dirs, $file) = $fs->splitpath($path);
+ my @dirs = $fs->splitdir($dirs);
+
+ my @collapsed;
+ foreach my $dir (@dirs) {
+ if( $dir eq $updir and # if we have an updir
+ @collapsed and # and something to collapse
+ length $collapsed[-1] and # and its not the rootdir
+ $collapsed[-1] ne $updir and # nor another updir
+ $collapsed[-1] ne $curdir # nor the curdir
+ )
+ { # then
+ pop @collapsed; # collapse
+ }
+ else { # else
+ push @collapsed, $dir; # just hang onto it
+ }
+ }
+
+ return $fs->catpath($vol,
+ $fs->catdir(@collapsed),
+ $file
+ );
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm b/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm
new file mode 100644
index 00000000000..f8923f25fb2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm
@@ -0,0 +1,521 @@
+package File::Spec::VMS;
+
+use strict;
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.4';
+
+@ISA = qw(File::Spec::Unix);
+
+use File::Basename;
+use VMS::Filespec;
+
+=head1 NAME
+
+File::Spec::VMS - methods for VMS file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::VMS; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Unix for a documentation of the methods provided
+there. This package overrides the implementation of these methods, not
+the semantics.
+
+=over 4
+
+=item canonpath (override)
+
+Removes redundant portions of file specifications according to VMS syntax.
+
+=cut
+
+sub canonpath {
+ my($self,$path) = @_;
+
+ if ($path =~ m|/|) { # Fake Unix
+ my $pathify = $path =~ m|/\Z(?!\n)|;
+ $path = $self->SUPER::canonpath($path);
+ if ($pathify) { return vmspath($path); }
+ else { return vmsify($path); }
+ }
+ else {
+ $path =~ tr/<>/[]/; # < and > ==> [ and ]
+ $path =~ s/\]\[\./\.\]\[/g; # ][. ==> .][
+ $path =~ s/\[000000\.\]\[/\[/g; # [000000.][ ==> [
+ $path =~ s/\[000000\./\[/g; # [000000. ==> [
+ $path =~ s/\.\]\[000000\]/\]/g; # .][000000] ==> ]
+ $path =~ s/\.\]\[/\./g; # foo.][bar ==> foo.bar
+ 1 while ($path =~ s/([\[\.])(-+)\.(-+)([\.\]])/$1$2$3$4/);
+ # That loop does the following
+ # with any amount of dashes:
+ # .-.-. ==> .--.
+ # [-.-. ==> [--.
+ # .-.-] ==> .--]
+ # [-.-] ==> [--]
+ 1 while ($path =~ s/([\[\.])[^\]\.]+\.-(-+)([\]\.])/$1$2$3/);
+ # That loop does the following
+ # with any amount (minimum 2)
+ # of dashes:
+ # .foo.--. ==> .-.
+ # .foo.--] ==> .-]
+ # [foo.--. ==> [-.
+ # [foo.--] ==> [-]
+ #
+ # And then, the remaining cases
+ $path =~ s/\[\.-/[-/; # [.- ==> [-
+ $path =~ s/\.[^\]\.]+\.-\./\./g; # .foo.-. ==> .
+ $path =~ s/\[[^\]\.]+\.-\./\[/g; # [foo.-. ==> [
+ $path =~ s/\.[^\]\.]+\.-\]/\]/g; # .foo.-] ==> ]
+ $path =~ s/\[[^\]\.]+\.-\]/\[000000\]/g;# [foo.-] ==> [000000]
+ $path =~ s/\[\]//; # [] ==>
+ return $path;
+ }
+}
+
+=item catdir (override)
+
+Concatenates a list of file specifications, and returns the result as a
+VMS-syntax directory specification. No check is made for "impossible"
+cases (e.g. elements other than the first being absolute filespecs).
+
+=cut
+
+sub catdir {
+ my ($self,@dirs) = @_;
+ my $dir = pop @dirs;
+ @dirs = grep($_,@dirs);
+ my $rslt;
+ if (@dirs) {
+ my $path = (@dirs == 1 ? $dirs[0] : $self->catdir(@dirs));
+ my ($spath,$sdir) = ($path,$dir);
+ $spath =~ s/\.dir\Z(?!\n)//; $sdir =~ s/\.dir\Z(?!\n)//;
+ $sdir = $self->eliminate_macros($sdir) unless $sdir =~ /^[\w\-]+\Z(?!\n)/s;
+ $rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1);
+
+ # Special case for VMS absolute directory specs: these will have had device
+ # prepended during trip through Unix syntax in eliminate_macros(), since
+ # Unix syntax has no way to express "absolute from the top of this device's
+ # directory tree".
+ if ($spath =~ /^[\[<][^.\-]/s) { $rslt =~ s/^[^\[<]+//s; }
+ }
+ else {
+ if (not defined $dir or not length $dir) { $rslt = ''; }
+ elsif ($dir =~ /^\$\([^\)]+\)\Z(?!\n)/s) { $rslt = $dir; }
+ else { $rslt = vmspath($dir); }
+ }
+ return $self->canonpath($rslt);
+}
+
+=item catfile (override)
+
+Concatenates a list of file specifications, and returns the result as a
+VMS-syntax file specification.
+
+=cut
+
+sub catfile {
+ my ($self,@files) = @_;
+ my $file = $self->canonpath(pop @files);
+ @files = grep($_,@files);
+ my $rslt;
+ if (@files) {
+ my $path = (@files == 1 ? $files[0] : $self->catdir(@files));
+ my $spath = $path;
+ $spath =~ s/\.dir\Z(?!\n)//;
+ if ($spath =~ /^[^\)\]\/:>]+\)\Z(?!\n)/s && basename($file) eq $file) {
+ $rslt = "$spath$file";
+ }
+ else {
+ $rslt = $self->eliminate_macros($spath);
+ $rslt = vmsify($rslt.($rslt ? '/' : '').unixify($file));
+ }
+ }
+ else { $rslt = (defined($file) && length($file)) ? vmsify($file) : ''; }
+ return $self->canonpath($rslt);
+}
+
+
+=item curdir (override)
+
+Returns a string representation of the current directory: '[]'
+
+=cut
+
+sub curdir {
+ return '[]';
+}
+
+=item devnull (override)
+
+Returns a string representation of the null device: '_NLA0:'
+
+=cut
+
+sub devnull {
+ return "_NLA0:";
+}
+
+=item rootdir (override)
+
+Returns a string representation of the root directory: 'SYS$DISK:[000000]'
+
+=cut
+
+sub rootdir {
+ return 'SYS$DISK:[000000]';
+}
+
+=item tmpdir (override)
+
+Returns a string representation of the first writable directory
+from the following list or '' if none are writable:
+
+ sys$scratch:
+ $ENV{TMPDIR}
+
+Since perl 5.8.0, if running under taint mode, and if $ENV{TMPDIR}
+is tainted, it is not used.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( 'sys$scratch:', $ENV{TMPDIR} );
+}
+
+=item updir (override)
+
+Returns a string representation of the parent directory: '[-]'
+
+=cut
+
+sub updir {
+ return '[-]';
+}
+
+=item case_tolerant (override)
+
+VMS file specification syntax is case-tolerant.
+
+=cut
+
+sub case_tolerant {
+ return 1;
+}
+
+=item path (override)
+
+Translate logical name DCL$PATH as a searchlist, rather than trying
+to C<split> string value of C<$ENV{'PATH'}>.
+
+=cut
+
+sub path {
+ my (@dirs,$dir,$i);
+ while ($dir = $ENV{'DCL$PATH;' . $i++}) { push(@dirs,$dir); }
+ return @dirs;
+}
+
+=item file_name_is_absolute (override)
+
+Checks for VMS directory spec as well as Unix separators.
+
+=cut
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ # If it's a logical name, expand it.
+ $file = $ENV{$file} while $file =~ /^[\w\$\-]+\Z(?!\n)/s && $ENV{$file};
+ return scalar($file =~ m!^/!s ||
+ $file =~ m![<\[][^.\-\]>]! ||
+ $file =~ /:[^<\[]/);
+}
+
+=item splitpath (override)
+
+Splits using VMS syntax.
+
+=cut
+
+sub splitpath {
+ my($self,$path) = @_;
+ my($dev,$dir,$file) = ('','','');
+
+ vmsify($path) =~ /(.+:)?([\[<].*[\]>])?(.*)/s;
+ return ($1 || '',$2 || '',$3);
+}
+
+=item splitdir (override)
+
+Split dirspec using VMS syntax.
+
+=cut
+
+sub splitdir {
+ my($self,$dirspec) = @_;
+ $dirspec =~ tr/<>/[]/; # < and > ==> [ and ]
+ $dirspec =~ s/\]\[\./\.\]\[/g; # ][. ==> .][
+ $dirspec =~ s/\[000000\.\]\[/\[/g; # [000000.][ ==> [
+ $dirspec =~ s/\[000000\./\[/g; # [000000. ==> [
+ $dirspec =~ s/\.\]\[000000\]/\]/g; # .][000000] ==> ]
+ $dirspec =~ s/\.\]\[/\./g; # foo.][bar ==> foo.bar
+ while ($dirspec =~ s/(^|[\[\<\.])\-(\-+)($|[\]\>\.])/$1-.$2$3/g) {}
+ # That loop does the following
+ # with any amount of dashes:
+ # .--. ==> .-.-.
+ # [--. ==> [-.-.
+ # .--] ==> .-.-]
+ # [--] ==> [-.-]
+ $dirspec = "[$dirspec]" unless $dirspec =~ /[\[<]/; # make legal
+ my(@dirs) = split('\.', vmspath($dirspec));
+ $dirs[0] =~ s/^[\[<]//s; $dirs[-1] =~ s/[\]>]\Z(?!\n)//s;
+ @dirs;
+}
+
+
+=item catpath (override)
+
+Construct a complete filespec using VMS syntax
+
+=cut
+
+sub catpath {
+ my($self,$dev,$dir,$file) = @_;
+
+ # We look for a volume in $dev, then in $dir, but not both
+ my ($dir_volume, $dir_dir, $dir_file) = $self->splitpath($dir);
+ $dev = $dir_volume unless length $dev;
+ $dir = length $dir_file ? $self->catfile($dir_dir, $dir_file) : $dir_dir;
+
+ if ($dev =~ m|^/+([^/]+)|) { $dev = "$1:"; }
+ else { $dev .= ':' unless $dev eq '' or $dev =~ /:\Z(?!\n)/; }
+ if (length($dev) or length($dir)) {
+ $dir = "[$dir]" unless $dir =~ /[\[<\/]/;
+ $dir = vmspath($dir);
+ }
+ "$dev$dir$file";
+}
+
+=item abs2rel (override)
+
+Use VMS syntax when converting filespecs.
+
+=cut
+
+sub abs2rel {
+ my $self = shift;
+ return vmspath(File::Spec::Unix::abs2rel( $self, @_ ))
+ if grep m{/}, @_;
+
+ my($path,$base) = @_;
+ $base = $self->_cwd() unless defined $base and length $base;
+
+ for ($path, $base) { $_ = $self->canonpath($_) }
+
+ # Are we even starting $path on the same (node::)device as $base? Note that
+ # logical paths or nodename differences may be on the "same device"
+ # but the comparison that ignores device differences so as to concatenate
+ # [---] up directory specs is not even a good idea in cases where there is
+ # a logical path difference between $path and $base nodename and/or device.
+ # Hence we fall back to returning the absolute $path spec
+ # if there is a case blind device (or node) difference of any sort
+ # and we do not even try to call $parse() or consult %ENV for $trnlnm()
+ # (this module needs to run on non VMS platforms after all).
+
+ my ($path_volume, $path_directories, $path_file) = $self->splitpath($path);
+ my ($base_volume, $base_directories, $base_file) = $self->splitpath($base);
+ return $path unless lc($path_volume) eq lc($base_volume);
+
+ for ($path, $base) { $_ = $self->rel2abs($_) }
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path_directories );
+ unshift(@pathchunks,'000000') unless $pathchunks[0] eq '000000';
+ my @basechunks = $self->splitdir( $base_directories );
+ unshift(@basechunks,'000000') unless $basechunks[0] eq '000000';
+
+ while ( @pathchunks &&
+ @basechunks &&
+ lc( $pathchunks[0] ) eq lc( $basechunks[0] )
+ ) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ # @basechunks now contains the directories to climb out of,
+ # @pathchunks now has the directories to descend in to.
+ $path_directories = join '.', ('-' x @basechunks, @pathchunks) ;
+ return $self->canonpath( $self->catpath( '', $path_directories, $path_file ) ) ;
+}
+
+
+=item rel2abs (override)
+
+Use VMS syntax when converting filespecs.
+
+=cut
+
+sub rel2abs {
+ my $self = shift ;
+ my ($path,$base ) = @_;
+ return undef unless defined $path;
+ if ($path =~ m/\//) {
+ $path = ( -d $path || $path =~ m/\/\z/ # educated guessing about
+ ? vmspath($path) # whether it's a directory
+ : vmsify($path) );
+ }
+ $base = vmspath($base) if defined $base && $base =~ m/\//;
+ # Clean up and split up $path
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+ # Figure out the effective $base and clean it up.
+ if ( !defined( $base ) || $base eq '' ) {
+ $base = $self->_cwd;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ # Split up paths
+ my ( $path_directories, $path_file ) =
+ ($self->splitpath( $path ))[1,2] ;
+
+ my ( $base_volume, $base_directories ) =
+ $self->splitpath( $base ) ;
+
+ $path_directories = '' if $path_directories eq '[]' ||
+ $path_directories eq '<>';
+ my $sep = '' ;
+ $sep = '.'
+ if ( $base_directories =~ m{[^.\]>]\Z(?!\n)} &&
+ $path_directories =~ m{^[^.\[<]}s
+ ) ;
+ $base_directories = "$base_directories$sep$path_directories";
+ $base_directories =~ s{\.?[\]>][\[<]\.?}{.};
+
+ $path = $self->catpath( $base_volume, $base_directories, $path_file );
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+
+# eliminate_macros() and fixpath() are MakeMaker-specific methods
+# which are used inside catfile() and catdir(). MakeMaker has its own
+# copies as of 6.06_03 which are the canonical ones. We leave these
+# here, in peace, so that File::Spec continues to work with MakeMakers
+# prior to 6.06_03.
+#
+# Please consider these two methods deprecated. Do not patch them,
+# patch the ones in ExtUtils::MM_VMS instead.
+sub eliminate_macros {
+ my($self,$path) = @_;
+ return '' unless $path;
+ $self = {} unless ref $self;
+
+ if ($path =~ /\s/) {
+ return join ' ', map { $self->eliminate_macros($_) } split /\s+/, $path;
+ }
+
+ my($npath) = unixify($path);
+ my($complex) = 0;
+ my($head,$macro,$tail);
+
+ # perform m##g in scalar context so it acts as an iterator
+ while ($npath =~ m#(.*?)\$\((\S+?)\)(.*)#gs) {
+ if ($self->{$2}) {
+ ($head,$macro,$tail) = ($1,$2,$3);
+ if (ref $self->{$macro}) {
+ if (ref $self->{$macro} eq 'ARRAY') {
+ $macro = join ' ', @{$self->{$macro}};
+ }
+ else {
+ print "Note: can't expand macro \$($macro) containing ",ref($self->{$macro}),
+ "\n\t(using MMK-specific deferred substitutuon; MMS will break)\n";
+ $macro = "\cB$macro\cB";
+ $complex = 1;
+ }
+ }
+ else { ($macro = unixify($self->{$macro})) =~ s#/\Z(?!\n)##; }
+ $npath = "$head$macro$tail";
+ }
+ }
+ if ($complex) { $npath =~ s#\cB(.*?)\cB#\${$1}#gs; }
+ $npath;
+}
+
+# Deprecated. See the note above for eliminate_macros().
+sub fixpath {
+ my($self,$path,$force_path) = @_;
+ return '' unless $path;
+ $self = bless {} unless ref $self;
+ my($fixedpath,$prefix,$name);
+
+ if ($path =~ /\s/) {
+ return join ' ',
+ map { $self->fixpath($_,$force_path) }
+ split /\s+/, $path;
+ }
+
+ if ($path =~ m#^\$\([^\)]+\)\Z(?!\n)#s || $path =~ m#[/:>\]]#) {
+ if ($force_path or $path =~ /(?:DIR\)|\])\Z(?!\n)/) {
+ $fixedpath = vmspath($self->eliminate_macros($path));
+ }
+ else {
+ $fixedpath = vmsify($self->eliminate_macros($path));
+ }
+ }
+ elsif ((($prefix,$name) = ($path =~ m#^\$\(([^\)]+)\)(.+)#s)) && $self->{$prefix}) {
+ my($vmspre) = $self->eliminate_macros("\$($prefix)");
+ # is it a dir or just a name?
+ $vmspre = ($vmspre =~ m|/| or $prefix =~ /DIR\Z(?!\n)/) ? vmspath($vmspre) : '';
+ $fixedpath = ($vmspre ? $vmspre : $self->{$prefix}) . $name;
+ $fixedpath = vmspath($fixedpath) if $force_path;
+ }
+ else {
+ $fixedpath = $path;
+ $fixedpath = vmspath($fixedpath) if $force_path;
+ }
+ # No hints, so we try to guess
+ if (!defined($force_path) and $fixedpath !~ /[:>(.\]]/) {
+ $fixedpath = vmspath($fixedpath) if -d $fixedpath;
+ }
+
+ # Trim off root dirname if it's had other dirs inserted in front of it.
+ $fixedpath =~ s/\.000000([\]>])/$1/;
+ # Special case for VMS absolute directory specs: these will have had device
+ # prepended during trip through Unix syntax in eliminate_macros(), since
+ # Unix syntax has no way to express "absolute from the top of this device's
+ # directory tree".
+ if ($path =~ /^[\[>][^.\-]/) { $fixedpath =~ s/^[^\[<]+//; }
+ $fixedpath;
+}
+
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+An explanation of VMS file specs can be found at
+L<"http://h71000.www7.hp.com/doc/731FINAL/4506/4506pro_014.html#apps_locating_naming_files">.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm b/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm
new file mode 100644
index 00000000000..a324306a74b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm
@@ -0,0 +1,369 @@
+package File::Spec::Win32;
+
+use strict;
+
+use vars qw(@ISA $VERSION);
+require File::Spec::Unix;
+
+$VERSION = '1.6';
+
+@ISA = qw(File::Spec::Unix);
+
+=head1 NAME
+
+File::Spec::Win32 - methods for Win32 file specs
+
+=head1 SYNOPSIS
+
+ require File::Spec::Win32; # Done internally by File::Spec if needed
+
+=head1 DESCRIPTION
+
+See File::Spec::Unix for a documentation of the methods provided
+there. This package overrides the implementation of these methods, not
+the semantics.
+
+=over 4
+
+=item devnull
+
+Returns a string representation of the null device.
+
+=cut
+
+sub devnull {
+ return "nul";
+}
+
+sub rootdir () { '\\' }
+
+
+=item tmpdir
+
+Returns a string representation of the first existing directory
+from the following list:
+
+ $ENV{TMPDIR}
+ $ENV{TEMP}
+ $ENV{TMP}
+ SYS:/temp
+ C:\system\temp
+ C:/temp
+ /tmp
+ /
+
+The SYS:/temp is preferred in Novell NetWare and the C:\system\temp
+for Symbian (the File::Spec::Win32 is used also for those platforms).
+
+Since Perl 5.8.0, if running under taint mode, and if the environment
+variables are tainted, they are not used.
+
+=cut
+
+my $tmpdir;
+sub tmpdir {
+ return $tmpdir if defined $tmpdir;
+ $tmpdir = $_[0]->_tmpdir( @ENV{qw(TMPDIR TEMP TMP)},
+ 'SYS:/temp',
+ 'C:\system\temp',
+ 'C:/temp',
+ '/tmp',
+ '/' );
+}
+
+sub case_tolerant {
+ return 1;
+}
+
+sub file_name_is_absolute {
+ my ($self,$file) = @_;
+ return scalar($file =~ m{^([a-z]:)?[\\/]}is);
+}
+
+=item catfile
+
+Concatenate one or more directory names and a filename to form a
+complete path ending with a filename
+
+=cut
+
+sub catfile {
+ my $self = shift;
+ my $file = $self->canonpath(pop @_);
+ return $file unless @_;
+ my $dir = $self->catdir(@_);
+ $dir .= "\\" unless substr($dir,-1) eq "\\";
+ return $dir.$file;
+}
+
+sub catdir {
+ my $self = shift;
+ my @args = @_;
+ foreach (@args) {
+ tr[/][\\];
+ # append a backslash to each argument unless it has one there
+ $_ .= "\\" unless m{\\$};
+ }
+ return $self->canonpath(join('', @args));
+}
+
+sub path {
+ my @path = split(';', $ENV{PATH});
+ s/"//g for @path;
+ @path = grep length, @path;
+ unshift(@path, ".");
+ return @path;
+}
+
+=item canonpath
+
+No physical check on the filesystem, but a logical cleanup of a
+path. On UNIX eliminated successive slashes and successive "/.".
+On Win32 makes
+
+ dir1\dir2\dir3\..\..\dir4 -> \dir\dir4 and even
+ dir1\dir2\dir3\...\dir4 -> \dir\dir4
+
+=cut
+
+sub canonpath {
+ my ($self,$path) = @_;
+
+ $path =~ s/^([a-z]:)/\u$1/s;
+ $path =~ s|/|\\|g;
+ $path =~ s|([^\\])\\+|$1\\|g; # xx\\\\xx -> xx\xx
+ $path =~ s|(\\\.)+\\|\\|g; # xx\.\.\xx -> xx\xx
+ $path =~ s|^(\.\\)+||s unless $path eq ".\\"; # .\xx -> xx
+ $path =~ s|\\\Z(?!\n)||
+ unless $path =~ m{^([A-Z]:)?\\\Z(?!\n)}s; # xx\ -> xx
+ # xx1/xx2/xx3/../../xx -> xx1/xx
+ $path =~ s|\\\.\.\.\\|\\\.\.\\\.\.\\|g; # \...\ is 2 levels up
+ $path =~ s|^\.\.\.\\|\.\.\\\.\.\\|g; # ...\ is 2 levels up
+ return $path if $path =~ m|^\.\.|; # skip relative paths
+ return $path unless $path =~ /\.\./; # too few .'s to cleanup
+ return $path if $path =~ /\.\.\.\./; # too many .'s to cleanup
+ $path =~ s{^\\\.\.$}{\\}; # \.. -> \
+ 1 while $path =~ s{^\\\.\.}{}; # \..\xx -> \xx
+
+ return $self->_collapse($path);
+}
+
+=item splitpath
+
+ ($volume,$directories,$file) = File::Spec->splitpath( $path );
+ ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );
+
+Splits a path into volume, directory, and filename portions. Assumes that
+the last file is a path unless the path ends in '\\', '\\.', '\\..'
+or $no_file is true. On Win32 this means that $no_file true makes this return
+( $volume, $path, '' ).
+
+Separators accepted are \ and /.
+
+Volumes can be drive letters or UNC sharenames (\\server\share).
+
+The results can be passed to L</catpath> to get back a path equivalent to
+(usually identical to) the original path.
+
+=cut
+
+sub splitpath {
+ my ($self,$path, $nofile) = @_;
+ my ($volume,$directory,$file) = ('','','');
+ if ( $nofile ) {
+ $path =~
+ m{^( (?:[a-zA-Z]:|(?:\\\\|//)[^\\/]+[\\/][^\\/]+)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ }
+ else {
+ $path =~
+ m{^ ( (?: [a-zA-Z]: |
+ (?:\\\\|//)[^\\/]+[\\/][^\\/]+
+ )?
+ )
+ ( (?:.*[\\/](?:\.\.?\Z(?!\n))?)? )
+ (.*)
+ }xs;
+ $volume = $1;
+ $directory = $2;
+ $file = $3;
+ }
+
+ return ($volume,$directory,$file);
+}
+
+
+=item splitdir
+
+The opposite of L<catdir()|File::Spec/catdir()>.
+
+ @dirs = File::Spec->splitdir( $directories );
+
+$directories must be only the directory portion of the path on systems
+that have the concept of a volume or that have path syntax that differentiates
+files from directories.
+
+Unlike just splitting the directories on the separator, leading empty and
+trailing directory entries can be returned, because these are significant
+on some OSs. So,
+
+ File::Spec->splitdir( "/a/b/c" );
+
+Yields:
+
+ ( '', 'a', 'b', '', 'c', '' )
+
+=cut
+
+sub splitdir {
+ my ($self,$directories) = @_ ;
+ #
+ # split() likes to forget about trailing null fields, so here we
+ # check to be sure that there will not be any before handling the
+ # simple case.
+ #
+ if ( $directories !~ m|[\\/]\Z(?!\n)| ) {
+ return split( m|[\\/]|, $directories );
+ }
+ else {
+ #
+ # since there was a trailing separator, add a file name to the end,
+ # then do the split, then replace it with ''.
+ #
+ my( @directories )= split( m|[\\/]|, "${directories}dummy" ) ;
+ $directories[ $#directories ]= '' ;
+ return @directories ;
+ }
+}
+
+
+=item catpath
+
+Takes volume, directory and file portions and returns an entire path. Under
+Unix, $volume is ignored, and this is just like catfile(). On other OSs,
+the $volume become significant.
+
+=cut
+
+sub catpath {
+ my ($self,$volume,$directory,$file) = @_;
+
+ # If it's UNC, make sure the glue separator is there, reusing
+ # whatever separator is first in the $volume
+ my $v;
+ $volume .= $v
+ if ( (($v) = $volume =~ m@^([\\/])[\\/][^\\/]+[\\/][^\\/]+\Z(?!\n)@s) &&
+ $directory =~ m@^[^\\/]@s
+ ) ;
+
+ $volume .= $directory ;
+
+ # If the volume is not just A:, make sure the glue separator is
+ # there, reusing whatever separator is first in the $volume if possible.
+ if ( $volume !~ m@^[a-zA-Z]:\Z(?!\n)@s &&
+ $volume =~ m@[^\\/]\Z(?!\n)@ &&
+ $file =~ m@[^\\/]@
+ ) {
+ $volume =~ m@([\\/])@ ;
+ my $sep = $1 ? $1 : '\\' ;
+ $volume .= $sep ;
+ }
+
+ $volume .= $file ;
+
+ return $volume ;
+}
+
+
+sub abs2rel {
+ my($self,$path,$base) = @_;
+ $base = $self->_cwd() unless defined $base and length $base;
+
+ for ($path, $base) { $_ = $self->canonpath($_) }
+
+ my ($path_volume) = $self->splitpath($path, 1);
+ my ($base_volume) = $self->splitpath($base, 1);
+
+ # Can't relativize across volumes
+ return $path unless $path_volume eq $base_volume;
+
+ for ($path, $base) { $_ = $self->rel2abs($_) }
+
+ my $path_directories = ($self->splitpath($path, 1))[1];
+ my $base_directories = ($self->splitpath($base, 1))[1];
+
+ # Now, remove all leading components that are the same
+ my @pathchunks = $self->splitdir( $path_directories );
+ my @basechunks = $self->splitdir( $base_directories );
+
+ while ( @pathchunks &&
+ @basechunks &&
+ lc( $pathchunks[0] ) eq lc( $basechunks[0] )
+ ) {
+ shift @pathchunks ;
+ shift @basechunks ;
+ }
+
+ my $result_dirs = $self->catdir( ($self->updir) x @basechunks, @pathchunks );
+
+ return $self->canonpath( $self->catpath('', $result_dirs, '') );
+}
+
+
+sub rel2abs {
+ my ($self,$path,$base ) = @_;
+
+ if ( ! $self->file_name_is_absolute( $path ) ) {
+
+ if ( !defined( $base ) || $base eq '' ) {
+ require Cwd ;
+ $base = Cwd::getdcwd( ($self->splitpath( $path ))[0] ) if defined &Cwd::getdcwd ;
+ $base = $self->_cwd() unless defined $base ;
+ }
+ elsif ( ! $self->file_name_is_absolute( $base ) ) {
+ $base = $self->rel2abs( $base ) ;
+ }
+ else {
+ $base = $self->canonpath( $base ) ;
+ }
+
+ my ( $path_directories, $path_file ) =
+ ($self->splitpath( $path, 1 ))[1,2] ;
+
+ my ( $base_volume, $base_directories ) =
+ $self->splitpath( $base, 1 ) ;
+
+ $path = $self->catpath(
+ $base_volume,
+ $self->catdir( $base_directories, $path_directories ),
+ $path_file
+ ) ;
+ }
+
+ return $self->canonpath( $path ) ;
+}
+
+=back
+
+=head2 Note For File::Spec::Win32 Maintainers
+
+Novell NetWare inherits its File::Spec behaviour from File::Spec::Win32.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+See L<File::Spec> and L<File::Spec::Unix>. This package overrides the
+implementation of these methods, not the semantics.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/Temp.pm b/Master/tlpkg/tlperl/lib/File/Temp.pm
new file mode 100644
index 00000000000..6ddcb3619a7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/Temp.pm
@@ -0,0 +1,2244 @@
+package File::Temp;
+
+=head1 NAME
+
+File::Temp - return name and handle of a temporary file safely
+
+=begin __INTERNALS
+
+=head1 PORTABILITY
+
+This section is at the top in order to provide easier access to
+porters. It is not expected to be rendered by a standard pod
+formatting tool. Please skip straight to the SYNOPSIS section if you
+are not trying to port this module to a new platform.
+
+This module is designed to be portable across operating systems and it
+currently supports Unix, VMS, DOS, OS/2, Windows and Mac OS
+(Classic). When porting to a new OS there are generally three main
+issues that have to be solved:
+
+=over 4
+
+=item *
+
+Can the OS unlink an open file? If it can not then the
+C<_can_unlink_opened_file> method should be modified.
+
+=item *
+
+Are the return values from C<stat> reliable? By default all the
+return values from C<stat> are compared when unlinking a temporary
+file using the filename and the handle. Operating systems other than
+unix do not always have valid entries in all fields. If C<unlink0> fails
+then the C<stat> comparison should be modified accordingly.
+
+=item *
+
+Security. Systems that can not support a test for the sticky bit
+on a directory can not use the MEDIUM and HIGH security tests.
+The C<_can_do_level> method should be modified accordingly.
+
+=back
+
+=end __INTERNALS
+
+=head1 SYNOPSIS
+
+ use File::Temp qw/ tempfile tempdir /;
+
+ $fh = tempfile();
+ ($fh, $filename) = tempfile();
+
+ ($fh, $filename) = tempfile( $template, DIR => $dir);
+ ($fh, $filename) = tempfile( $template, SUFFIX => '.dat');
+
+
+ $dir = tempdir( CLEANUP => 1 );
+ ($fh, $filename) = tempfile( DIR => $dir );
+
+Object interface:
+
+ require File::Temp;
+ use File::Temp ();
+
+ $fh = new File::Temp($template);
+ $fname = $fh->filename;
+
+ $tmp = new File::Temp( UNLINK => 0, SUFFIX => '.dat' );
+ print $tmp "Some data\n";
+ print "Filename is $tmp\n";
+
+The following interfaces are provided for compatibility with
+existing APIs. They should not be used in new code.
+
+MkTemp family:
+
+ use File::Temp qw/ :mktemp /;
+
+ ($fh, $file) = mkstemp( "tmpfileXXXXX" );
+ ($fh, $file) = mkstemps( "tmpfileXXXXXX", $suffix);
+
+ $tmpdir = mkdtemp( $template );
+
+ $unopened_file = mktemp( $template );
+
+POSIX functions:
+
+ use File::Temp qw/ :POSIX /;
+
+ $file = tmpnam();
+ $fh = tmpfile();
+
+ ($fh, $file) = tmpnam();
+
+Compatibility functions:
+
+ $unopened_file = File::Temp::tempnam( $dir, $pfx );
+
+=head1 DESCRIPTION
+
+C<File::Temp> can be used to create and open temporary files in a safe
+way. There is both a function interface and an object-oriented
+interface. The File::Temp constructor or the tempfile() function can
+be used to return the name and the open filehandle of a temporary
+file. The tempdir() function can be used to create a temporary
+directory.
+
+The security aspect of temporary file creation is emphasized such that
+a filehandle and filename are returned together. This helps guarantee
+that a race condition can not occur where the temporary file is
+created by another process between checking for the existence of the
+file and its opening. Additional security levels are provided to
+check, for example, that the sticky bit is set on world writable
+directories. See L<"safe_level"> for more information.
+
+For compatibility with popular C library functions, Perl implementations of
+the mkstemp() family of functions are provided. These are, mkstemp(),
+mkstemps(), mkdtemp() and mktemp().
+
+Additionally, implementations of the standard L<POSIX|POSIX>
+tmpnam() and tmpfile() functions are provided if required.
+
+Implementations of mktemp(), tmpnam(), and tempnam() are provided,
+but should be used with caution since they return only a filename
+that was valid when function was called, so cannot guarantee
+that the file will not exist by the time the caller opens the filename.
+
+=cut
+
+# 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls
+# People would like a version on 5.005 so give them what they want :-)
+use 5.005;
+use strict;
+use Carp;
+use File::Spec 0.8;
+use File::Path qw/ rmtree /;
+use Fcntl 1.03;
+use Errno;
+require VMS::Stdio if $^O eq 'VMS';
+
+# Need the Symbol package if we are running older perl
+require Symbol if $] < 5.006;
+
+### For the OO interface
+use base qw/ IO::Handle /;
+use overload '""' => "STRINGIFY";
+
+
+# use 'our' on v5.6.0
+use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG $KEEP_ALL);
+
+$DEBUG = 0;
+$KEEP_ALL = 0;
+
+# We are exporting functions
+
+use base qw/Exporter/;
+
+# Export list - to allow fine tuning of export table
+
+@EXPORT_OK = qw{
+ tempfile
+ tempdir
+ tmpnam
+ tmpfile
+ mktemp
+ mkstemp
+ mkstemps
+ mkdtemp
+ unlink0
+ cleanup
+ };
+
+# Groups of functions for export
+
+%EXPORT_TAGS = (
+ 'POSIX' => [qw/ tmpnam tmpfile /],
+ 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/],
+ );
+
+# add contents of these tags to @EXPORT
+Exporter::export_tags('POSIX','mktemp');
+
+# Version number
+
+$VERSION = '0.16';
+
+# This is a list of characters that can be used in random filenames
+
+my @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
+ a b c d e f g h i j k l m n o p q r s t u v w x y z
+ 0 1 2 3 4 5 6 7 8 9 _
+ /);
+
+# Maximum number of tries to make a temp file before failing
+
+use constant MAX_TRIES => 1000;
+
+# Minimum number of X characters that should be in a template
+use constant MINX => 4;
+
+# Default template when no template supplied
+
+use constant TEMPXXX => 'X' x 10;
+
+# Constants for the security level
+
+use constant STANDARD => 0;
+use constant MEDIUM => 1;
+use constant HIGH => 2;
+
+# OPENFLAGS. If we defined the flag to use with Sysopen here this gives
+# us an optimisation when many temporary files are requested
+
+my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
+
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE EXLOCK NOINHERIT /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ no strict 'refs';
+ $OPENFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # eg CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+}
+
+# On some systems the O_TEMPORARY flag can be used to tell the OS
+# to automatically remove the file when it is closed. This is fine
+# in most cases but not if tempfile is called with UNLINK=>0 and
+# the filename is requested -- in the case where the filename is to
+# be passed to another routine. This happens on windows. We overcome
+# this by using a second open flags variable
+
+my $OPENTEMPFLAGS = $OPENFLAGS;
+unless ($^O eq 'MacOS') {
+ for my $oflag (qw/ TEMPORARY /) {
+ my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+ no strict 'refs';
+ $OPENTEMPFLAGS |= $bit if eval {
+ # Make sure that redefined die handlers do not cause problems
+ # eg CGI::Carp
+ local $SIG{__DIE__} = sub {};
+ local $SIG{__WARN__} = sub {};
+ $bit = &$func();
+ 1;
+ };
+ }
+}
+
+# INTERNAL ROUTINES - not to be used outside of package
+
+# Generic routine for getting a temporary filename
+# modelled on OpenBSD _gettemp() in mktemp.c
+
+# The template must contain X's that are to be replaced
+# with the random values
+
+# Arguments:
+
+# TEMPLATE - string containing the XXXXX's that is converted
+# to a random filename and opened if required
+
+# Optionally, a hash can also be supplied containing specific options
+# "open" => if true open the temp file, else just return the name
+# default is 0
+# "mkdir"=> if true, we are creating a temp directory rather than tempfile
+# default is 0
+# "suffixlen" => number of characters at end of PATH to be ignored.
+# default is 0.
+# "unlink_on_close" => indicates that, if possible, the OS should remove
+# the file as soon as it is closed. Usually indicates
+# use of the O_TEMPORARY flag to sysopen.
+# Usually irrelevant on unix
+
+# Optionally a reference to a scalar can be passed into the function
+# On error this will be used to store the reason for the error
+# "ErrStr" => \$errstr
+
+# "open" and "mkdir" can not both be true
+# "unlink_on_close" is not used when "mkdir" is true.
+
+# The default options are equivalent to mktemp().
+
+# Returns:
+# filehandle - open file handle (if called with doopen=1, else undef)
+# temp name - name of the temp file or directory
+
+# For example:
+# ($fh, $name) = _gettemp($template, "open" => 1);
+
+# for the current version, failures are associated with
+# stored in an error string and returned to give the reason whilst debugging
+# This routine is not called by any external function
+sub _gettemp {
+
+ croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);'
+ unless scalar(@_) >= 1;
+
+ # the internal error string - expect it to be overridden
+ # Need this in case the caller decides not to supply us a value
+ # need an anonymous scalar
+ my $tempErrStr;
+
+ # Default options
+ my %options = (
+ "open" => 0,
+ "mkdir" => 0,
+ "suffixlen" => 0,
+ "unlink_on_close" => 0,
+ "ErrStr" => \$tempErrStr,
+ );
+
+ # Read the template
+ my $template = shift;
+ if (ref($template)) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: template must not be a reference";
+ return ();
+ }
+
+ # Check that the number of entries on stack are even
+ if (scalar(@_) % 2 != 0) {
+ # Use a warning here since we have not yet merged ErrStr
+ carp "File::Temp::_gettemp: Must have even number of options";
+ return ();
+ }
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # Make sure the error string is set to undef
+ ${$options{ErrStr}} = undef;
+
+ # Can not open the file and make a directory in a single call
+ if ($options{"open"} && $options{"mkdir"}) {
+ ${$options{ErrStr}} = "doopen and domkdir can not both be true\n";
+ return ();
+ }
+
+ # Find the start of the end of the Xs (position of last X)
+ # Substr starts from 0
+ my $start = length($template) - 1 - $options{"suffixlen"};
+
+ # Check that we have at least MINX x X (eg 'XXXX") at the end of the string
+ # (taking suffixlen into account). Any fewer is insecure.
+
+ # Do it using substr - no reason to use a pattern match since
+ # we know where we are looking and what we are looking for
+
+ if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) {
+ ${$options{ErrStr}} = "The template must end with at least ".
+ MINX . " 'X' characters\n";
+ return ();
+ }
+
+ # Replace all the X at the end of the substring with a
+ # random character or just all the XX at the end of a full string.
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # and generate a full path from the template
+
+ my $path = _replace_XX($template, $options{"suffixlen"});
+
+
+ # Split the path into constituent parts - eventually we need to check
+ # whether the directory exists
+ # We need to know whether we are making a temp directory
+ # or a tempfile
+
+ my ($volume, $directories, $file);
+ my $parent; # parent directory
+ if ($options{"mkdir"}) {
+ # There is no filename at the end
+ ($volume, $directories, $file) = File::Spec->splitpath( $path, 1);
+
+ # The parent is then $directories without the last directory
+ # Split the directory and put it back together again
+ my @dirs = File::Spec->splitdir($directories);
+
+ # If @dirs only has one entry (i.e. the directory template) that means
+ # we are in the current directory
+ if ($#dirs == 0) {
+ $parent = File::Spec->curdir;
+ } else {
+
+ if ($^O eq 'VMS') { # need volume to avoid relative dir spec
+ $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]);
+ $parent = 'sys$disk:[]' if $parent eq '';
+ } else {
+
+ # Put it back together without the last one
+ $parent = File::Spec->catdir(@dirs[0..$#dirs-1]);
+
+ # ...and attach the volume (no filename)
+ $parent = File::Spec->catpath($volume, $parent, '');
+ }
+
+ }
+
+ } else {
+
+ # Get rid of the last filename (use File::Basename for this?)
+ ($volume, $directories, $file) = File::Spec->splitpath( $path );
+
+ # Join up without the file part
+ $parent = File::Spec->catpath($volume,$directories,'');
+
+ # If $parent is empty replace with curdir
+ $parent = File::Spec->curdir
+ unless $directories ne '';
+
+ }
+
+ # Check that the parent directories exist
+ # Do this even for the case where we are simply returning a name
+ # not a file -- no point returning a name that includes a directory
+ # that does not exist or is not writable
+
+ unless (-d $parent) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not a directory";
+ return ();
+ }
+ unless (-w $parent) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not writable\n";
+ return ();
+ }
+
+
+ # Check the stickiness of the directory and chown giveaway if required
+ # If the directory is world writable the sticky bit
+ # must be set
+
+ if (File::Temp->safe_level == MEDIUM) {
+ my $safeerr;
+ unless (_is_safe($parent,\$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ } elsif (File::Temp->safe_level == HIGH) {
+ my $safeerr;
+ unless (_is_verysafe($parent, \$safeerr)) {
+ ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)";
+ return ();
+ }
+ }
+
+
+ # Now try MAX_TRIES time to open the file
+ for (my $i = 0; $i < MAX_TRIES; $i++) {
+
+ # Try to open the file if requested
+ if ($options{"open"}) {
+ my $fh;
+
+ # If we are running before perl5.6.0 we can not auto-vivify
+ if ($] < 5.006) {
+ $fh = &Symbol::gensym;
+ }
+
+ # Try to make sure this will be marked close-on-exec
+ # XXX: Win32 doesn't respect this, nor the proper fcntl,
+ # but may have O_NOINHERIT. This may or may not be in Fcntl.
+ local $^F = 2;
+
+ # Store callers umask
+ my $umask = umask();
+
+ # Set a known umask
+ umask(066);
+
+ # Attempt to open the file
+ my $open_success = undef;
+ if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) {
+ # make it auto delete on close by setting FAB$V_DLT bit
+ $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
+ $open_success = $fh;
+ } else {
+ my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ?
+ $OPENTEMPFLAGS :
+ $OPENFLAGS );
+ $open_success = sysopen($fh, $path, $flags, 0600);
+ }
+ if ( $open_success ) {
+
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Opened successfully - return file handle and name
+ return ($fh, $path);
+
+ } else {
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Error opening file - abort with error
+ # if the reason was anything but EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create temp file $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+ } elsif ($options{"mkdir"}) {
+
+ # Store callers umask
+ my $umask = umask();
+
+ # Set a known umask
+ umask(066);
+
+ # Open the temp directory
+ if (mkdir( $path, 0700)) {
+ # created okay
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ return undef, $path;
+ } else {
+
+ # Reset umask
+ umask($umask) if defined $umask;
+
+ # Abort with error if the reason for failure was anything
+ # except EEXIST
+ unless ($!{EEXIST}) {
+ ${$options{ErrStr}} = "Could not create directory $path: $!";
+ return ();
+ }
+
+ # Loop round for another try
+
+ }
+
+ } else {
+
+ # Return true if the file can not be found
+ # Directory has been checked previously
+
+ return (undef, $path) unless -e $path;
+
+ # Try again until MAX_TRIES
+
+ }
+
+ # Did not successfully open the tempfile/dir
+ # so try again with a different set of random letters
+ # No point in trying to increment unless we have only
+ # 1 X say and the randomness could come up with the same
+ # file MAX_TRIES in a row.
+
+ # Store current attempt - in principal this implies that the
+ # 3rd time around the open attempt that the first temp file
+ # name could be generated again. Probably should store each
+ # attempt and make sure that none are repeated
+
+ my $original = $path;
+ my $counter = 0; # Stop infinite loop
+ my $MAX_GUESS = 50;
+
+ do {
+
+ # Generate new name from original template
+ $path = _replace_XX($template, $options{"suffixlen"});
+
+ $counter++;
+
+ } until ($path ne $original || $counter > $MAX_GUESS);
+
+ # Check for out of control looping
+ if ($counter > $MAX_GUESS) {
+ ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)";
+ return ();
+ }
+
+ }
+
+ # If we get here, we have run out of tries
+ ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts ("
+ . MAX_TRIES . ") to open temp file/dir";
+
+ return ();
+
+}
+
+# Internal routine to return a random character from the
+# character list. Does not do an srand() since rand()
+# will do one automatically
+
+# No arguments. Return value is the random character
+
+# No longer called since _replace_XX runs a few percent faster if
+# I inline the code. This is important if we are creating thousands of
+# temporary files.
+
+sub _randchar {
+
+ $CHARS[ int( rand( $#CHARS ) ) ];
+
+}
+
+# Internal routine to replace the XXXX... with random characters
+# This has to be done by _gettemp() every time it fails to
+# open a temp file/dir
+
+# Arguments: $template (the template with XXX),
+# $ignore (number of characters at end to ignore)
+
+# Returns: modified template
+
+sub _replace_XX {
+
+ croak 'Usage: _replace_XX($template, $ignore)'
+ unless scalar(@_) == 2;
+
+ my ($path, $ignore) = @_;
+
+ # Do it as an if, since the suffix adjusts which section to replace
+ # and suffixlen=0 returns nothing if used in the substr directly
+ # Alternatively, could simply set $ignore to length($path)-1
+ # Don't want to always use substr when not required though.
+
+ if ($ignore) {
+ substr($path, 0, - $ignore) =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
+ } else {
+ $path =~ s/X(?=X*\z)/$CHARS[ int( rand( $#CHARS ) ) ]/ge;
+ }
+ return $path;
+}
+
+# Internal routine to force a temp file to be writable after
+# it is created so that we can unlink it. Windows seems to occassionally
+# force a file to be readonly when written to certain temp locations
+sub _force_writable {
+ my $file = shift;
+ my $umask = umask();
+ umask(066);
+ chmod 0600, $file;
+ umask($umask) if defined $umask;
+}
+
+
+# internal routine to check to see if the directory is safe
+# First checks to see if the directory is not owned by the
+# current user or root. Then checks to see if anyone else
+# can write to the directory and if so, checks to see if
+# it has the sticky bit set
+
+# Will not work on systems that do not support sticky bit
+
+#Args: directory path to check
+# Optionally: reference to scalar to contain error message
+# Returns true if the path is safe and false otherwise.
+# Returns undef if can not even run stat() on the path
+
+# This routine based on version written by Tom Christiansen
+
+# Presumably, by the time we actually attempt to create the
+# file or directory in this directory, it may not be safe
+# anymore... Have to run _is_safe directly after the open.
+
+sub _is_safe {
+
+ my $path = shift;
+ my $err_ref = shift;
+
+ # Stat path
+ my @info = stat($path);
+ unless (scalar(@info)) {
+ $$err_ref = "stat(path) returned no values";
+ return 0;
+ };
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ # Check to see whether owner is neither superuser (or a system uid) nor me
+ # Use the real uid from the $< variable
+ # UID is in [4]
+ if ($info[4] > File::Temp->top_system_uid() && $info[4] != $<) {
+
+ Carp::cluck(sprintf "uid=$info[4] topuid=%s \$<=$< path='$path'",
+ File::Temp->top_system_uid());
+
+ $$err_ref = "Directory owned neither by root nor the current user"
+ if ref($err_ref);
+ return 0;
+ }
+
+ # check whether group or other can write file
+ # use 066 to detect either reading or writing
+ # use 022 to check writability
+ # Do it with S_IWOTH and S_IWGRP for portability (maybe)
+ # mode is in info[2]
+ if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable?
+ ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable?
+ # Must be a directory
+ unless (-d $path) {
+ $$err_ref = "Path ($path) is not a directory"
+ if ref($err_ref);
+ return 0;
+ }
+ # Must have sticky bit set
+ unless (-k $path) {
+ $$err_ref = "Sticky bit not set on $path when dir is group|world writable"
+ if ref($err_ref);
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+# Internal routine to check whether a directory is safe
+# for temp files. Safer than _is_safe since it checks for
+# the possibility of chown giveaway and if that is a possibility
+# checks each directory in the path to see if it is safe (with _is_safe)
+
+# If _PC_CHOWN_RESTRICTED is not set, does the full test of each
+# directory anyway.
+
+# Takes optional second arg as scalar ref to error reason
+
+sub _is_verysafe {
+
+ # Need POSIX - but only want to bother if really necessary due to overhead
+ require POSIX;
+
+ my $path = shift;
+ print "_is_verysafe testing $path\n" if $DEBUG;
+ return 1 if $^O eq 'VMS'; # owner delete control at file level
+
+ my $err_ref = shift;
+
+ # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined
+ # and If it is not there do the extensive test
+ my $chown_restricted;
+ $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED()
+ if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1};
+
+ # If chown_resticted is set to some value we should test it
+ if (defined $chown_restricted) {
+
+ # Return if the current directory is safe
+ return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted );
+
+ }
+
+ # To reach this point either, the _PC_CHOWN_RESTRICTED symbol
+ # was not avialable or the symbol was there but chown giveaway
+ # is allowed. Either way, we now have to test the entire tree for
+ # safety.
+
+ # Convert path to an absolute directory if required
+ unless (File::Spec->file_name_is_absolute($path)) {
+ $path = File::Spec->rel2abs($path);
+ }
+
+ # Split directory into components - assume no file
+ my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1);
+
+ # Slightly less efficient than having a function in File::Spec
+ # to chop off the end of a directory or even a function that
+ # can handle ../ in a directory tree
+ # Sometimes splitdir() returns a blank at the end
+ # so we will probably check the bottom directory twice in some cases
+ my @dirs = File::Spec->splitdir($directories);
+
+ # Concatenate one less directory each time around
+ foreach my $pos (0.. $#dirs) {
+ # Get a directory name
+ my $dir = File::Spec->catpath($volume,
+ File::Spec->catdir(@dirs[0.. $#dirs - $pos]),
+ ''
+ );
+
+ print "TESTING DIR $dir\n" if $DEBUG;
+
+ # Check the directory
+ return 0 unless _is_safe($dir,$err_ref);
+
+ }
+
+ return 1;
+}
+
+
+
+# internal routine to determine whether unlink works on this
+# platform for files that are currently open.
+# Returns true if we can, false otherwise.
+
+# Currently WinNT, OS/2 and VMS can not unlink an opened file
+# On VMS this is because the O_EXCL flag is used to open the
+# temporary file. Currently I do not know enough about the issues
+# on VMS to decide whether O_EXCL is a requirement.
+
+sub _can_unlink_opened_file {
+
+ if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos' || $^O eq 'MacOS') {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# internal routine to decide which security levels are allowed
+# see safe_level() for more information on this
+
+# Controls whether the supplied security level is allowed
+
+# $cando = _can_do_level( $level )
+
+sub _can_do_level {
+
+ # Get security level
+ my $level = shift;
+
+ # Always have to be able to do STANDARD
+ return 1 if $level == STANDARD;
+
+ # Currently, the systems that can do HIGH or MEDIUM are identical
+ if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') {
+ return 0;
+ } else {
+ return 1;
+ }
+
+}
+
+# This routine sets up a deferred unlinking of a specified
+# filename and filehandle. It is used in the following cases:
+# - Called by unlink0 if an opened file can not be unlinked
+# - Called by tempfile() if files are to be removed on shutdown
+# - Called by tempdir() if directories are to be removed on shutdown
+
+# Arguments:
+# _deferred_unlink( $fh, $fname, $isdir );
+#
+# - filehandle (so that it can be expclicitly closed if open
+# - filename (the thing we want to remove)
+# - isdir (flag to indicate that we are being given a directory)
+# [and hence no filehandle]
+
+# Status is not referred to since all the magic is done with an END block
+
+{
+ # Will set up two lexical variables to contain all the files to be
+ # removed. One array for files, another for directories They will
+ # only exist in this block.
+
+ # This means we only have to set up a single END block to remove
+ # all files.
+
+ # in order to prevent child processes inadvertently deleting the parent
+ # temp files we use a hash to store the temp files and directories
+ # created by a particular process id.
+
+ # %files_to_unlink contains values that are references to an array of
+ # array references containing the filehandle and filename associated with
+ # the temp file.
+ my (%files_to_unlink, %dirs_to_unlink);
+
+ # Set up an end block to use these arrays
+ END {
+ cleanup();
+ }
+
+ # Cleanup function. Always triggered on END but can be invoked
+ # manually.
+ sub cleanup {
+ if (!$KEEP_ALL) {
+ # Files
+ my @files = (exists $files_to_unlink{$$} ?
+ @{ $files_to_unlink{$$} } : () );
+ foreach my $file (@files) {
+ # close the filehandle without checking its state
+ # in order to make real sure that this is closed
+ # if its already closed then I dont care about the answer
+ # probably a better way to do this
+ close($file->[0]); # file handle is [0]
+
+ if (-f $file->[1]) { # file name is [1]
+ _force_writable( $file->[1] ); # for windows
+ unlink $file->[1] or warn "Error removing ".$file->[1];
+ }
+ }
+ # Dirs
+ my @dirs = (exists $dirs_to_unlink{$$} ?
+ @{ $dirs_to_unlink{$$} } : () );
+ foreach my $dir (@dirs) {
+ if (-d $dir) {
+ rmtree($dir, $DEBUG, 0);
+ }
+ }
+
+ # clear the arrays
+ @{ $files_to_unlink{$$} } = ()
+ if exists $files_to_unlink{$$};
+ @{ $dirs_to_unlink{$$} } = ()
+ if exists $dirs_to_unlink{$$};
+ }
+ }
+
+
+ # This is the sub called to register a file for deferred unlinking
+ # This could simply store the input parameters and defer everything
+ # until the END block. For now we do a bit of checking at this
+ # point in order to make sure that (1) we have a file/dir to delete
+ # and (2) we have been called with the correct arguments.
+ sub _deferred_unlink {
+
+ croak 'Usage: _deferred_unlink($fh, $fname, $isdir)'
+ unless scalar(@_) == 3;
+
+ my ($fh, $fname, $isdir) = @_;
+
+ warn "Setting up deferred removal of $fname\n"
+ if $DEBUG;
+
+ # If we have a directory, check that it is a directory
+ if ($isdir) {
+
+ if (-d $fname) {
+
+ # Directory exists so store it
+ # first on VMS turn []foo into [.foo] for rmtree
+ $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
+ $dirs_to_unlink{$$} = []
+ unless exists $dirs_to_unlink{$$};
+ push (@{ $dirs_to_unlink{$$} }, $fname);
+
+ } else {
+ carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W;
+ }
+
+ } else {
+
+ if (-f $fname) {
+
+ # file exists so store handle and name for later removal
+ $files_to_unlink{$$} = []
+ unless exists $files_to_unlink{$$};
+ push(@{ $files_to_unlink{$$} }, [$fh, $fname]);
+
+ } else {
+ carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W;
+ }
+
+ }
+
+ }
+
+
+}
+
+=head1 OBJECT-ORIENTED INTERFACE
+
+This is the primary interface for interacting with
+C<File::Temp>. Using the OO interface a temporary file can be created
+when the object is constructed and the file can be removed when the
+object is no longer required.
+
+Note that there is no method to obtain the filehandle from the
+C<File::Temp> object. The object itself acts as a filehandle. Also,
+the object is configured such that it stringifies to the name of the
+temporary file.
+
+=over 4
+
+=item B<new>
+
+Create a temporary file object.
+
+ my $tmp = new File::Temp();
+
+by default the object is constructed as if C<tempfile>
+was called without options, but with the additional behaviour
+that the temporary file is removed by the object destructor
+if UNLINK is set to true (the default).
+
+Supported arguments are the same as for C<tempfile>: UNLINK
+(defaulting to true), DIR and SUFFIX. Additionally, the filename
+template is specified using the TEMPLATE option. The OPEN option
+is not supported (the file is always opened).
+
+ $tmp = new File::Temp( TEMPLATE => 'tempXXXXX',
+ DIR => 'mydir',
+ SUFFIX => '.dat');
+
+Arguments are case insensitive.
+
+=cut
+
+sub new {
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+
+ # read arguments and convert keys to upper case
+ my %args = @_;
+ %args = map { uc($_), $args{$_} } keys %args;
+
+ # see if they are unlinking (defaulting to yes)
+ my $unlink = (exists $args{UNLINK} ? $args{UNLINK} : 1 );
+ delete $args{UNLINK};
+
+ # template (store it in an error so that it will
+ # disappear from the arg list of tempfile
+ my @template = ( exists $args{TEMPLATE} ? $args{TEMPLATE} : () );
+ delete $args{TEMPLATE};
+
+ # Protect OPEN
+ delete $args{OPEN};
+
+ # Open the file and retain file handle and file name
+ my ($fh, $path) = tempfile( @template, %args );
+
+ print "Tmp: $fh - $path\n" if $DEBUG;
+
+ # Store the filename in the scalar slot
+ ${*$fh} = $path;
+
+ # Store unlink information in hash slot (plus other constructor info)
+ %{*$fh} = %args;
+
+ # create the object
+ bless $fh, $class;
+
+ # final method-based configuration
+ $fh->unlink_on_destroy( $unlink );
+
+ return $fh;
+}
+
+=item B<filename>
+
+Return the name of the temporary file associated with this object.
+
+ $filename = $tmp->filename;
+
+This method is called automatically when the object is used as
+a string.
+
+=cut
+
+sub filename {
+ my $self = shift;
+ return ${*$self};
+}
+
+sub STRINGIFY {
+ my $self = shift;
+ return $self->filename;
+}
+
+=item B<unlink_on_destroy>
+
+Control whether the file is unlinked when the object goes out of scope.
+The file is removed if this value is true and $KEEP_ALL is not.
+
+ $fh->unlink_on_destroy( 1 );
+
+Default is for the file to be removed.
+
+=cut
+
+sub unlink_on_destroy {
+ my $self = shift;
+ if (@_) {
+ ${*$self}{UNLINK} = shift;
+ }
+ return ${*$self}{UNLINK};
+}
+
+=item B<DESTROY>
+
+When the object goes out of scope, the destructor is called. This
+destructor will attempt to unlink the file (using C<unlink1>)
+if the constructor was called with UNLINK set to 1 (the default state
+if UNLINK is not specified).
+
+No error is given if the unlink fails.
+
+If the global variable $KEEP_ALL is true, the file will not be removed.
+
+=cut
+
+sub DESTROY {
+ my $self = shift;
+ if (${*$self}{UNLINK} && !$KEEP_ALL) {
+ print "# ---------> Unlinking $self\n" if $DEBUG;
+
+ # The unlink1 may fail if the file has been closed
+ # by the caller. This leaves us with the decision
+ # of whether to refuse to remove the file or simply
+ # do an unlink without test. Seems to be silly
+ # to do this when we are trying to be careful
+ # about security
+ _force_writable( $self->filename ); # for windows
+ unlink1( $self, $self->filename )
+ or unlink($self->filename);
+ }
+}
+
+=back
+
+=head1 FUNCTIONS
+
+This section describes the recommended interface for generating
+temporary files and directories.
+
+=over 4
+
+=item B<tempfile>
+
+This is the basic function to generate temporary files.
+The behaviour of the file can be changed using various options:
+
+ $fh = tempfile();
+ ($fh, $filename) = tempfile();
+
+Create a temporary file in the directory specified for temporary
+files, as specified by the tmpdir() function in L<File::Spec>.
+
+ ($fh, $filename) = tempfile($template);
+
+Create a temporary file in the current directory using the supplied
+template. Trailing `X' characters are replaced with random letters to
+generate the filename. At least four `X' characters must be present
+at the end of the template.
+
+ ($fh, $filename) = tempfile($template, SUFFIX => $suffix)
+
+Same as previously, except that a suffix is added to the template
+after the `X' translation. Useful for ensuring that a temporary
+filename has a particular extension when needed by other applications.
+But see the WARNING at the end.
+
+ ($fh, $filename) = tempfile($template, DIR => $dir);
+
+Translates the template as before except that a directory name
+is specified.
+
+ ($fh, $filename) = tempfile($template, UNLINK => 1);
+
+Return the filename and filehandle as before except that the file is
+automatically removed when the program exits (dependent on
+$KEEP_ALL). Default is for the file to be removed if a file handle is
+requested and to be kept if the filename is requested. In a scalar
+context (where no filename is returned) the file is always deleted
+either (depending on the operating system) on exit or when it is
+closed (unless $KEEP_ALL is true when the temp file is created).
+
+Use the object-oriented interface if fine-grained control of when
+a file is removed is required.
+
+If the template is not specified, a template is always
+automatically generated. This temporary file is placed in tmpdir()
+(L<File::Spec>) unless a directory is specified explicitly with the
+DIR option.
+
+ $fh = tempfile( $template, DIR => $dir );
+
+If called in scalar context, only the filehandle is returned and the
+file will automatically be deleted when closed on operating systems
+that support this (see the description of tmpfile() elsewhere in this
+document). This is the preferred mode of operation, as if you only
+have a filehandle, you can never create a race condition by fumbling
+with the filename. On systems that can not unlink an open file or can
+not mark a file as temporary when it is opened (for example, Windows
+NT uses the C<O_TEMPORARY> flag) the file is marked for deletion when
+the program ends (equivalent to setting UNLINK to 1). The C<UNLINK>
+flag is ignored if present.
+
+ (undef, $filename) = tempfile($template, OPEN => 0);
+
+This will return the filename based on the template but
+will not open this file. Cannot be used in conjunction with
+UNLINK set to true. Default is to always open the file
+to protect from possible race conditions. A warning is issued
+if warnings are turned on. Consider using the tmpnam()
+and mktemp() functions described elsewhere in this document
+if opening the file is not required.
+
+Options can be combined as required.
+
+=cut
+
+sub tempfile {
+
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "DIR" => undef, # Directory prefix
+ "SUFFIX" => '', # Template suffix
+ "UNLINK" => 0, # Do not unlink file on exit
+ "OPEN" => 1, # Open file
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef);
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # First decision is whether or not to open the file
+ if (! $options{"OPEN"}) {
+
+ warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n"
+ if $^W;
+
+ }
+
+ if ($options{"DIR"} and $^O eq 'VMS') {
+
+ # on VMS turn []foo into [.foo] for concatenation
+ $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"});
+ }
+
+ # Construct the template
+
+ # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc
+ # functions or simply constructing a template and using _gettemp()
+ # explicitly. Go for the latter
+
+ # First generate a template if not defined and prefix the directory
+ # If no template must prefix the temp directory
+ if (defined $template) {
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, $template);
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catfile($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Now add a suffix
+ $template .= $options{"SUFFIX"};
+
+ # Determine whether we should tell _gettemp to unlink the file
+ # On unix this is irrelevant and can be worked out after the file is
+ # opened (simply by unlinking the open filehandle). On Windows or VMS
+ # we have to indicate temporary-ness when we open the file. In general
+ # we only want a true temporary file if we are returning just the
+ # filehandle - if the user wants the filename they probably do not
+ # want the file to disappear as soon as they close it (which may be
+ # important if they want a child process to use the file)
+ # For this reason, tie unlink_on_close to the return context regardless
+ # of OS.
+ my $unlink_on_close = ( wantarray ? 0 : 1);
+
+ # Create the file
+ my ($fh, $path, $errstr);
+ croak "Error in tempfile() using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => $options{'OPEN'},
+ "mkdir"=> 0 ,
+ "unlink_on_close" => $unlink_on_close,
+ "suffixlen" => length($options{'SUFFIX'}),
+ "ErrStr" => \$errstr,
+ ) );
+
+ # Set up an exit handler that can do whatever is right for the
+ # system. This removes files at exit when requested explicitly or when
+ # system is asked to unlink_on_close but is unable to do so because
+ # of OS limitations.
+ # The latter should be achieved by using a tied filehandle.
+ # Do not check return status since this is all done with END blocks.
+ _deferred_unlink($fh, $path, 0) if $options{"UNLINK"};
+
+ # Return
+ if (wantarray()) {
+
+ if ($options{'OPEN'}) {
+ return ($fh, $path);
+ } else {
+ return (undef, $path);
+ }
+
+ } else {
+
+ # Unlink the file. It is up to unlink0 to decide what to do with
+ # this (whether to unlink now or to defer until later)
+ unlink0($fh, $path) or croak "Error unlinking file $path using unlink0";
+
+ # Return just the filehandle.
+ return $fh;
+ }
+
+
+}
+
+=item B<tempdir>
+
+This is the recommended interface for creation of temporary directories.
+The behaviour of the function depends on the arguments:
+
+ $tempdir = tempdir();
+
+Create a directory in tmpdir() (see L<File::Spec|File::Spec>).
+
+ $tempdir = tempdir( $template );
+
+Create a directory from the supplied template. This template is
+similar to that described for tempfile(). `X' characters at the end
+of the template are replaced with random letters to construct the
+directory name. At least four `X' characters must be in the template.
+
+ $tempdir = tempdir ( DIR => $dir );
+
+Specifies the directory to use for the temporary directory.
+The temporary directory name is derived from an internal template.
+
+ $tempdir = tempdir ( $template, DIR => $dir );
+
+Prepend the supplied directory name to the template. The template
+should not include parent directory specifications itself. Any parent
+directory specifications are removed from the template before
+prepending the supplied directory.
+
+ $tempdir = tempdir ( $template, TMPDIR => 1 );
+
+Using the supplied template, create the temporary directory in
+a standard location for temporary files. Equivalent to doing
+
+ $tempdir = tempdir ( $template, DIR => File::Spec->tmpdir);
+
+but shorter. Parent directory specifications are stripped from the
+template itself. The C<TMPDIR> option is ignored if C<DIR> is set
+explicitly. Additionally, C<TMPDIR> is implied if neither a template
+nor a directory are supplied.
+
+ $tempdir = tempdir( $template, CLEANUP => 1);
+
+Create a temporary directory using the supplied template, but
+attempt to remove it (and all files inside it) when the program
+exits. Note that an attempt will be made to remove all files from
+the directory even if they were not created by this module (otherwise
+why ask to clean it up?). The directory removal is made with
+the rmtree() function from the L<File::Path|File::Path> module.
+Of course, if the template is not specified, the temporary directory
+will be created in tmpdir() and will also be removed at program exit.
+
+=cut
+
+# '
+
+sub tempdir {
+
+ # Can not check for argument count since we can have any
+ # number of args
+
+ # Default options
+ my %options = (
+ "CLEANUP" => 0, # Remove directory on exit
+ "DIR" => '', # Root directory
+ "TMPDIR" => 0, # Use tempdir with template
+ );
+
+ # Check to see whether we have an odd or even number of arguments
+ my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef );
+
+ # Read the options and merge with defaults
+ %options = (%options, @_) if @_;
+
+ # Modify or generate the template
+
+ # Deal with the DIR and TMPDIR options
+ if (defined $template) {
+
+ # Need to strip directory path if using DIR or TMPDIR
+ if ($options{'TMPDIR'} || $options{'DIR'}) {
+
+ # Strip parent directory from the filename
+ #
+ # There is no filename at the end
+ $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
+ my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
+
+ # Last directory is then our template
+ $template = (File::Spec->splitdir($directories))[-1];
+
+ # Prepend the supplied directory or temp dir
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, $template);
+
+ } elsif ($options{TMPDIR}) {
+
+ # Prepend tmpdir
+ $template = File::Spec->catdir(File::Spec->tmpdir, $template);
+
+ }
+
+ }
+
+ } else {
+
+ if ($options{"DIR"}) {
+
+ $template = File::Spec->catdir($options{"DIR"}, TEMPXXX);
+
+ } else {
+
+ $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX);
+
+ }
+
+ }
+
+ # Create the directory
+ my $tempdir;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+
+ my $errstr;
+ croak "Error in tempdir() using $template: $errstr"
+ unless ((undef, $tempdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ # Install exit handler; must be dynamic to get lexical
+ if ( $options{'CLEANUP'} && -d $tempdir) {
+ _deferred_unlink(undef, $tempdir, 1);
+ }
+
+ # Return the dir name
+ return $tempdir;
+
+}
+
+=back
+
+=head1 MKTEMP FUNCTIONS
+
+The following functions are Perl implementations of the
+mktemp() family of temp file generation system calls.
+
+=over 4
+
+=item B<mkstemp>
+
+Given a template, returns a filehandle to the temporary file and the name
+of the file.
+
+ ($fh, $name) = mkstemp( $template );
+
+In scalar context, just the filehandle is returned.
+
+The template may be any filename with some number of X's appended
+to it, for example F</tmp/temp.XXXX>. The trailing X's are replaced
+with unique alphanumeric combinations.
+
+=cut
+
+
+
+sub mkstemp {
+
+ croak "Usage: mkstemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemp using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+
+=item B<mkstemps>
+
+Similar to mkstemp(), except that an extra argument can be supplied
+with a suffix to be appended to the template.
+
+ ($fh, $name) = mkstemps( $template, $suffix );
+
+For example a template of C<testXXXXXX> and suffix of C<.dat>
+would generate a file similar to F<testhGji_w.dat>.
+
+Returns just the filehandle alone when called in scalar context.
+
+=cut
+
+sub mkstemps {
+
+ croak "Usage: mkstemps(template, suffix)"
+ if scalar(@_) != 2;
+
+
+ my $template = shift;
+ my $suffix = shift;
+
+ $template .= $suffix;
+
+ my ($fh, $path, $errstr);
+ croak "Error in mkstemps using $template: $errstr"
+ unless (($fh, $path) = _gettemp($template,
+ "open" => 1,
+ "mkdir"=> 0 ,
+ "suffixlen" => length($suffix),
+ "ErrStr" => \$errstr,
+ ) );
+
+ if (wantarray()) {
+ return ($fh, $path);
+ } else {
+ return $fh;
+ }
+
+}
+
+=item B<mkdtemp>
+
+Create a directory from a template. The template must end in
+X's that are replaced by the routine.
+
+ $tmpdir_name = mkdtemp($template);
+
+Returns the name of the temporary directory created.
+Returns undef on failure.
+
+Directory must be removed by the caller.
+
+=cut
+
+#' # for emacs
+
+sub mkdtemp {
+
+ croak "Usage: mkdtemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+ my $suffixlen = 0;
+ if ($^O eq 'VMS') { # dir names can end in delimiters
+ $template =~ m/([\.\]:>]+)$/;
+ $suffixlen = length($1);
+ }
+ if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) {
+ # dir name has a trailing ':'
+ ++$suffixlen;
+ }
+ my ($junk, $tmpdir, $errstr);
+ croak "Error creating temp directory from template $template\: $errstr"
+ unless (($junk, $tmpdir) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 1 ,
+ "suffixlen" => $suffixlen,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpdir;
+
+}
+
+=item B<mktemp>
+
+Returns a valid temporary filename but does not guarantee
+that the file will not be opened by someone else.
+
+ $unopened_file = mktemp($template);
+
+Template is the same as that required by mkstemp().
+
+=cut
+
+sub mktemp {
+
+ croak "Usage: mktemp(template)"
+ if scalar(@_) != 1;
+
+ my $template = shift;
+
+ my ($tmpname, $junk, $errstr);
+ croak "Error getting name to temp file from template $template: $errstr"
+ unless (($junk, $tmpname) = _gettemp($template,
+ "open" => 0,
+ "mkdir"=> 0 ,
+ "suffixlen" => 0,
+ "ErrStr" => \$errstr,
+ ) );
+
+ return $tmpname;
+}
+
+=back
+
+=head1 POSIX FUNCTIONS
+
+This section describes the re-implementation of the tmpnam()
+and tmpfile() functions described in L<POSIX>
+using the mkstemp() from this module.
+
+Unlike the L<POSIX|POSIX> implementations, the directory used
+for the temporary file is not specified in a system include
+file (C<P_tmpdir>) but simply depends on the choice of tmpdir()
+returned by L<File::Spec|File::Spec>. On some implementations this
+location can be set using the C<TMPDIR> environment variable, which
+may not be secure.
+If this is a problem, simply use mkstemp() and specify a template.
+
+=over 4
+
+=item B<tmpnam>
+
+When called in scalar context, returns the full name (including path)
+of a temporary file (uses mktemp()). The only check is that the file does
+not already exist, but there is no guarantee that that condition will
+continue to apply.
+
+ $file = tmpnam();
+
+When called in list context, a filehandle to the open file and
+a filename are returned. This is achieved by calling mkstemp()
+after constructing a suitable template.
+
+ ($fh, $file) = tmpnam();
+
+If possible, this form should be used to prevent possible
+race conditions.
+
+See L<File::Spec/tmpdir> for information on the choice of temporary
+directory for a particular operating system.
+
+=cut
+
+sub tmpnam {
+
+ # Retrieve the temporary directory name
+ my $tmpdir = File::Spec->tmpdir;
+
+ croak "Error temporary directory is not writable"
+ if $tmpdir eq '';
+
+ # Use a ten character template and append to tmpdir
+ my $template = File::Spec->catfile($tmpdir, TEMPXXX);
+
+ if (wantarray() ) {
+ return mkstemp($template);
+ } else {
+ return mktemp($template);
+ }
+
+}
+
+=item B<tmpfile>
+
+Returns the filehandle of a temporary file.
+
+ $fh = tmpfile();
+
+The file is removed when the filehandle is closed or when the program
+exits. No access to the filename is provided.
+
+If the temporary file can not be created undef is returned.
+Currently this command will probably not work when the temporary
+directory is on an NFS file system.
+
+=cut
+
+sub tmpfile {
+
+ # Simply call tmpnam() in a list context
+ my ($fh, $file) = tmpnam();
+
+ # Make sure file is removed when filehandle is closed
+ # This will fail on NFS
+ unlink0($fh, $file)
+ or return undef;
+
+ return $fh;
+
+}
+
+=back
+
+=head1 ADDITIONAL FUNCTIONS
+
+These functions are provided for backwards compatibility
+with common tempfile generation C library functions.
+
+They are not exported and must be addressed using the full package
+name.
+
+=over 4
+
+=item B<tempnam>
+
+Return the name of a temporary file in the specified directory
+using a prefix. The file is guaranteed not to exist at the time
+the function was called, but such guarantees are good for one
+clock tick only. Always use the proper form of C<sysopen>
+with C<O_CREAT | O_EXCL> if you must open such a filename.
+
+ $filename = File::Temp::tempnam( $dir, $prefix );
+
+Equivalent to running mktemp() with $dir/$prefixXXXXXXXX
+(using unix file convention as an example)
+
+Because this function uses mktemp(), it can suffer from race conditions.
+
+=cut
+
+sub tempnam {
+
+ croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2;
+
+ my ($dir, $prefix) = @_;
+
+ # Add a string to the prefix
+ $prefix .= 'XXXXXXXX';
+
+ # Concatenate the directory to the file
+ my $template = File::Spec->catfile($dir, $prefix);
+
+ return mktemp($template);
+
+}
+
+=back
+
+=head1 UTILITY FUNCTIONS
+
+Useful functions for dealing with the filehandle and filename.
+
+=over 4
+
+=item B<unlink0>
+
+Given an open filehandle and the associated filename, make a safe
+unlink. This is achieved by first checking that the filename and
+filehandle initially point to the same file and that the number of
+links to the file is 1 (all fields returned by stat() are compared).
+Then the filename is unlinked and the filehandle checked once again to
+verify that the number of links on that file is now 0. This is the
+closest you can come to making sure that the filename unlinked was the
+same as the file whose descriptor you hold.
+
+ unlink0($fh, $path)
+ or die "Error unlinking file $path safely";
+
+Returns false on error. The filehandle is not closed since on some
+occasions this is not required.
+
+On some platforms, for example Windows NT, it is not possible to
+unlink an open file (the file must be closed first). On those
+platforms, the actual unlinking is deferred until the program ends and
+good status is returned. A check is still performed to make sure that
+the filehandle and filename are pointing to the same thing (but not at
+the time the end block is executed since the deferred removal may not
+have access to the filehandle).
+
+Additionally, on Windows NT not all the fields returned by stat() can
+be compared. For example, the C<dev> and C<rdev> fields seem to be
+different. Also, it seems that the size of the file returned by stat()
+does not always agree, with C<stat(FH)> being more accurate than
+C<stat(filename)>, presumably because of caching issues even when
+using autoflush (this is usually overcome by waiting a while after
+writing to the tempfile before attempting to C<unlink0> it).
+
+Finally, on NFS file systems the link count of the file handle does
+not always go to zero immediately after unlinking. Currently, this
+command is expected to fail on NFS disks.
+
+This function is disabled if the global variable $KEEP_ALL is true
+and an unlink on open file is supported. If the unlink is to be deferred
+to the END block, the file is still registered for removal.
+
+=cut
+
+sub unlink0 {
+
+ croak 'Usage: unlink0(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ cmpstat($fh, $path) or return 0;
+
+ # attempt remove the file (does not work on some platforms)
+ if (_can_unlink_opened_file()) {
+
+ # return early (Without unlink) if we have been instructed to retain files.
+ return 1 if $KEEP_ALL;
+
+ # XXX: do *not* call this on a directory; possible race
+ # resulting in recursive removal
+ croak "unlink0: $path has become a directory!" if -d $path;
+ unlink($path) or return 0;
+
+ # Stat the filehandle
+ my @fh = stat $fh;
+
+ print "Link count = $fh[3] \n" if $DEBUG;
+
+ # Make sure that the link count is zero
+ # - Cygwin provides deferred unlinking, however,
+ # on Win9x the link count remains 1
+ # On NFS the link count may still be 1 but we cant know that
+ # we are on NFS
+ return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0);
+
+ } else {
+ _deferred_unlink($fh, $path, 0);
+ return 1;
+ }
+
+}
+
+=item B<cmpstat>
+
+Compare C<stat> of filehandle with C<stat> of provided filename. This
+can be used to check that the filename and filehandle initially point
+to the same file and that the number of links to the file is 1 (all
+fields returned by stat() are compared).
+
+ cmpstat($fh, $path)
+ or die "Error comparing handle with file";
+
+Returns false if the stat information differs or if the link count is
+greater than 1.
+
+On certain platofms, eg Windows, not all the fields returned by stat()
+can be compared. For example, the C<dev> and C<rdev> fields seem to be
+different in Windows. Also, it seems that the size of the file
+returned by stat() does not always agree, with C<stat(FH)> being more
+accurate than C<stat(filename)>, presumably because of caching issues
+even when using autoflush (this is usually overcome by waiting a while
+after writing to the tempfile before attempting to C<unlink0> it).
+
+Not exported by default.
+
+=cut
+
+sub cmpstat {
+
+ croak 'Usage: cmpstat(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ warn "Comparing stat\n"
+ if $DEBUG;
+
+ # Stat the filehandle - which may be closed if someone has manually
+ # closed the file. Can not turn off warnings without using $^W
+ # unless we upgrade to 5.006 minimum requirement
+ my @fh;
+ {
+ local ($^W) = 0;
+ @fh = stat $fh;
+ }
+ return unless @fh;
+
+ if ($fh[3] > 1 && $^W) {
+ carp "unlink0: fstat found too many links; SB=@fh" if $^W;
+ }
+
+ # Stat the path
+ my @path = stat $path;
+
+ unless (@path) {
+ carp "unlink0: $path is gone already" if $^W;
+ return;
+ }
+
+ # this is no longer a file, but may be a directory, or worse
+ unless (-f $path) {
+ confess "panic: $path is no longer a file: SB=@fh";
+ }
+
+ # Do comparison of each member of the array
+ # On WinNT dev and rdev seem to be different
+ # depending on whether it is a file or a handle.
+ # Cannot simply compare all members of the stat return
+ # Select the ones we can use
+ my @okstat = (0..$#fh); # Use all by default
+ if ($^O eq 'MSWin32') {
+ @okstat = (1,2,3,4,5,7,8,9,10);
+ } elsif ($^O eq 'os2') {
+ @okstat = (0, 2..$#fh);
+ } elsif ($^O eq 'VMS') { # device and file ID are sufficient
+ @okstat = (0, 1);
+ } elsif ($^O eq 'dos') {
+ @okstat = (0,2..7,11..$#fh);
+ } elsif ($^O eq 'mpeix') {
+ @okstat = (0..4,8..10);
+ }
+
+ # Now compare each entry explicitly by number
+ for (@okstat) {
+ print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG;
+ # Use eq rather than == since rdev, blksize, and blocks (6, 11,
+ # and 12) will be '' on platforms that do not support them. This
+ # is fine since we are only comparing integers.
+ unless ($fh[$_] eq $path[$_]) {
+ warn "Did not match $_ element of stat\n" if $DEBUG;
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+=item B<unlink1>
+
+Similar to C<unlink0> except after file comparison using cmpstat, the
+filehandle is closed prior to attempting to unlink the file. This
+allows the file to be removed without using an END block, but does
+mean that the post-unlink comparison of the filehandle state provided
+by C<unlink0> is not available.
+
+ unlink1($fh, $path)
+ or die "Error closing and unlinking file";
+
+Usually called from the object destructor when using the OO interface.
+
+Not exported by default.
+
+This function is disabled if the global variable $KEEP_ALL is true.
+
+=cut
+
+sub unlink1 {
+ croak 'Usage: unlink1(filehandle, filename)'
+ unless scalar(@_) == 2;
+
+ # Read args
+ my ($fh, $path) = @_;
+
+ cmpstat($fh, $path) or return 0;
+
+ # Close the file
+ close( $fh ) or return 0;
+
+ # Make sure the file is writable (for windows)
+ _force_writable( $path );
+
+ # return early (without unlink) if we have been instructed to retain files.
+ return 1 if $KEEP_ALL;
+
+ # remove the file
+ return unlink($path);
+}
+
+=item B<cleanup>
+
+Calling this function will cause any temp files or temp directories
+that are registered for removal to be removed. This happens automatically
+when the process exits but can be triggered manually if the caller is sure
+that none of the temp files are required. This method can be registered as
+an Apache callback.
+
+On OSes where temp files are automatically removed when the temp file
+is closed, calling this function will have no effect other than to remove
+temporary directories (which may include temporary files).
+
+ File::Temp::cleanup();
+
+Not exported by default.
+
+=back
+
+=head1 PACKAGE VARIABLES
+
+These functions control the global state of the package.
+
+=over 4
+
+=item B<safe_level>
+
+Controls the lengths to which the module will go to check the safety of the
+temporary file or directory before proceeding.
+Options are:
+
+=over 8
+
+=item STANDARD
+
+Do the basic security measures to ensure the directory exists and
+is writable, that the umask() is fixed before opening of the file,
+that temporary files are opened only if they do not already exist, and
+that possible race conditions are avoided. Finally the L<unlink0|"unlink0">
+function is used to remove files safely.
+
+=item MEDIUM
+
+In addition to the STANDARD security, the output directory is checked
+to make sure that it is owned either by root or the user running the
+program. If the directory is writable by group or by other, it is then
+checked to make sure that the sticky bit is set.
+
+Will not work on platforms that do not support the C<-k> test
+for sticky bit.
+
+=item HIGH
+
+In addition to the MEDIUM security checks, also check for the
+possibility of ``chown() giveaway'' using the L<POSIX|POSIX>
+sysconf() function. If this is a possibility, each directory in the
+path is checked in turn for safeness, recursively walking back to the
+root directory.
+
+For platforms that do not support the L<POSIX|POSIX>
+C<_PC_CHOWN_RESTRICTED> symbol (for example, Windows NT) it is
+assumed that ``chown() giveaway'' is possible and the recursive test
+is performed.
+
+=back
+
+The level can be changed as follows:
+
+ File::Temp->safe_level( File::Temp::HIGH );
+
+The level constants are not exported by the module.
+
+Currently, you must be running at least perl v5.6.0 in order to
+run with MEDIUM or HIGH security. This is simply because the
+safety tests use functions from L<Fcntl|Fcntl> that are not
+available in older versions of perl. The problem is that the version
+number for Fcntl is the same in perl 5.6.0 and in 5.005_03 even though
+they are different versions.
+
+On systems that do not support the HIGH or MEDIUM safety levels
+(for example Win NT or OS/2) any attempt to change the level will
+be ignored. The decision to ignore rather than raise an exception
+allows portable programs to be written with high security in mind
+for the systems that can support this without those programs failing
+on systems where the extra tests are irrelevant.
+
+If you really need to see whether the change has been accepted
+simply examine the return value of C<safe_level>.
+
+ $newlevel = File::Temp->safe_level( File::Temp::HIGH );
+ die "Could not change to high security"
+ if $newlevel != File::Temp::HIGH;
+
+=cut
+
+{
+ # protect from using the variable itself
+ my $LEVEL = STANDARD;
+ sub safe_level {
+ my $self = shift;
+ if (@_) {
+ my $level = shift;
+ if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) {
+ carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W;
+ } else {
+ # Dont allow this on perl 5.005 or earlier
+ if ($] < 5.006 && $level != STANDARD) {
+ # Cant do MEDIUM or HIGH checks
+ croak "Currently requires perl 5.006 or newer to do the safe checks";
+ }
+ # Check that we are allowed to change level
+ # Silently ignore if we can not.
+ $LEVEL = $level if _can_do_level($level);
+ }
+ }
+ return $LEVEL;
+ }
+}
+
+=item TopSystemUID
+
+This is the highest UID on the current system that refers to a root
+UID. This is used to make sure that the temporary directory is
+owned by a system UID (C<root>, C<bin>, C<sys> etc) rather than
+simply by root.
+
+This is required since on many unix systems C</tmp> is not owned
+by root.
+
+Default is to assume that any UID less than or equal to 10 is a root
+UID.
+
+ File::Temp->top_system_uid(10);
+ my $topid = File::Temp->top_system_uid;
+
+This value can be adjusted to reduce security checking if required.
+The value is only relevant when C<safe_level> is set to MEDIUM or higher.
+
+=cut
+
+{
+ my $TopSystemUID = 10;
+ sub top_system_uid {
+ my $self = shift;
+ if (@_) {
+ my $newuid = shift;
+ croak "top_system_uid: UIDs should be numeric"
+ unless $newuid =~ /^\d+$/s;
+ $TopSystemUID = $newuid;
+ }
+ return $TopSystemUID;
+ }
+}
+
+=item B<$KEEP_ALL>
+
+Controls whether temporary files and directories should be retained
+regardless of any instructions in the program to remove them
+automatically. This is useful for debugging but should not be used in
+production code.
+
+ $File::Temp::KEEP_ALL = 1;
+
+Default is for files to be removed as requested by the caller.
+
+In some cases, files will only be retained if this variable is true
+when the file is created. This means that you can not create a temporary
+file, set this variable and expect the temp file to still be around
+when the program exits.
+
+=item B<$DEBUG>
+
+Controls whether debugging messages should be enabled.
+
+ $File::Temp::DEBUG = 1;
+
+Default is for debugging mode to be disabled.
+
+=back
+
+=head1 WARNING
+
+For maximum security, endeavour always to avoid ever looking at,
+touching, or even imputing the existence of the filename. You do not
+know that that filename is connected to the same file as the handle
+you have, and attempts to check this can only trigger more race
+conditions. It's far more secure to use the filehandle alone and
+dispense with the filename altogether.
+
+If you need to pass the handle to something that expects a filename
+then, on a unix system, use C<"/dev/fd/" . fileno($fh)> for arbitrary
+programs, or more generally C<< "+<=&" . fileno($fh) >> for Perl
+programs. You will have to clear the close-on-exec bit on that file
+descriptor before passing it to another process.
+
+ use Fcntl qw/F_SETFD F_GETFD/;
+ fcntl($tmpfh, F_SETFD, 0)
+ or die "Can't clear close-on-exec flag on temp fh: $!\n";
+
+=head2 Temporary files and NFS
+
+Some problems are associated with using temporary files that reside
+on NFS file systems and it is recommended that a local filesystem
+is used whenever possible. Some of the security tests will most probably
+fail when the temp file is not local. Additionally, be aware that
+the performance of I/O operations over NFS will not be as good as for
+a local disk.
+
+=head2 Forking
+
+In some cases files created by File::Temp are removed from within an
+END block. Since END blocks are triggered when a child process exits
+(unless C<POSIX::_exit()> is used by the child) File::Temp takes care
+to only remove those temp files created by a particular process ID. This
+means that a child will not attempt to remove temp files created by the
+parent process.
+
+=head2 BINMODE
+
+The file returned by File::Temp will have been opened in binary mode
+if such a mode is available. If that is not correct, use the binmode()
+function to change the mode of the filehandle.
+
+=head1 HISTORY
+
+Originally began life in May 1999 as an XS interface to the system
+mkstemp() function. In March 2000, the OpenBSD mkstemp() code was
+translated to Perl for total control of the code's
+security checking, to ensure the presence of the function regardless of
+operating system and to help with portability. The module was shipped
+as a standard part of perl from v5.6.1.
+
+=head1 SEE ALSO
+
+L<POSIX/tmpnam>, L<POSIX/tmpfile>, L<File::Spec>, L<File::Path>
+
+See L<IO::File> and L<File::MkTemp>, L<Apachae::TempFile> for
+different implementations of temporary file handling.
+
+=head1 AUTHOR
+
+Tim Jenness E<lt>tjenness@cpan.orgE<gt>
+
+Copyright (C) 1999-2005 Tim Jenness and the UK Particle Physics and
+Astronomy Research Council. All Rights Reserved. This program is free
+software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+Original Perl implementation loosely based on the OpenBSD C code for
+mkstemp(). Thanks to Tom Christiansen for suggesting that this module
+should be written and providing ideas for code improvements and
+security enhancements.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/File/stat.pm b/Master/tlpkg/tlperl/lib/File/stat.pm
new file mode 100644
index 00000000000..132cbee27ad
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/File/stat.pm
@@ -0,0 +1,139 @@
+package File::stat;
+use 5.006;
+
+use strict;
+use warnings;
+
+our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+
+our $VERSION = '1.00';
+
+BEGIN {
+ use Exporter ();
+ @EXPORT = qw(stat lstat);
+ @EXPORT_OK = qw( $st_dev $st_ino $st_mode
+ $st_nlink $st_uid $st_gid
+ $st_rdev $st_size
+ $st_atime $st_mtime $st_ctime
+ $st_blksize $st_blocks
+ );
+ %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
+}
+use vars @EXPORT_OK;
+
+# Class::Struct forbids use of @ISA
+sub import { goto &Exporter::import }
+
+use Class::Struct qw(struct);
+struct 'File::stat' => [
+ map { $_ => '$' } qw{
+ dev ino mode nlink uid gid rdev size
+ atime mtime ctime blksize blocks
+ }
+];
+
+sub populate (@) {
+ return unless @_;
+ my $stob = new();
+ @$stob = (
+ $st_dev, $st_ino, $st_mode, $st_nlink, $st_uid, $st_gid, $st_rdev,
+ $st_size, $st_atime, $st_mtime, $st_ctime, $st_blksize, $st_blocks )
+ = @_;
+ return $stob;
+}
+
+sub lstat ($) { populate(CORE::lstat(shift)) }
+
+sub stat ($) {
+ my $arg = shift;
+ my $st = populate(CORE::stat $arg);
+ return $st if $st;
+ my $fh;
+ {
+ local $!;
+ no strict 'refs';
+ require Symbol;
+ $fh = \*{ Symbol::qualify( $arg, caller() )};
+ return unless defined fileno $fh;
+ }
+ return populate(CORE::stat $fh);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+File::stat - by-name interface to Perl's built-in stat() functions
+
+=head1 SYNOPSIS
+
+ use File::stat;
+ $st = stat($file) or die "No $file: $!";
+ if ( ($st->mode & 0111) && $st->nlink > 1) ) {
+ print "$file is executable with lotsa links\n";
+ }
+
+ use File::stat qw(:FIELDS);
+ stat($file) or die "No $file: $!";
+ if ( ($st_mode & 0111) && $st_nlink > 1) ) {
+ print "$file is executable with lotsa links\n";
+ }
+
+=head1 DESCRIPTION
+
+This module's default exports override the core stat()
+and lstat() functions, replacing them with versions that return
+"File::stat" objects. This object has methods that
+return the similarly named structure field name from the
+stat(2) function; namely,
+dev,
+ino,
+mode,
+nlink,
+uid,
+gid,
+rdev,
+size,
+atime,
+mtime,
+ctime,
+blksize,
+and
+blocks.
+
+You may also import all the structure fields directly into your namespace
+as regular variables using the :FIELDS import tag. (Note that this still
+overrides your stat() and lstat() functions.) Access these fields as
+variables named with a preceding C<st_> in front their method names.
+Thus, C<$stat_obj-E<gt>dev()> corresponds to $st_dev if you import
+the fields.
+
+To access this functionality without the core overrides,
+pass the C<use> an empty import list, and then access
+function functions with their full qualified names.
+On the other hand, the built-ins are still available
+via the C<CORE::> pseudo-package.
+
+=head1 BUGS
+
+As of Perl 5.8.0 after using this module you cannot use the implicit
+C<$_> or the special filehandle C<_> with stat() or lstat(), trying
+to do so leads into strange errors. The workaround is for C<$_> to
+be explicit
+
+ my $stat_obj = stat $_;
+
+and for C<_> to explicitly populate the object using the unexported
+and undocumented populate() function with CORE::stat():
+
+ my $stat_obj = File::stat::populate(CORE::stat(_));
+
+=head1 NOTE
+
+While this class is currently implemented using the Class::Struct
+module to build a struct-like class, you shouldn't rely upon this.
+
+=head1 AUTHOR
+
+Tom Christiansen
diff --git a/Master/tlpkg/tlperl/lib/FileHandle.pm b/Master/tlpkg/tlperl/lib/FileHandle.pm
new file mode 100644
index 00000000000..6be22429440
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/FileHandle.pm
@@ -0,0 +1,262 @@
+package FileHandle;
+
+use 5.006;
+use strict;
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
+
+$VERSION = "2.01";
+
+require IO::File;
+@ISA = qw(IO::File);
+
+@EXPORT = qw(_IOFBF _IOLBF _IONBF);
+
+@EXPORT_OK = qw(
+ pipe
+
+ autoflush
+ output_field_separator
+ output_record_separator
+ input_record_separator
+ input_line_number
+ format_page_number
+ format_lines_per_page
+ format_lines_left
+ format_name
+ format_top_name
+ format_line_break_characters
+ format_formfeed
+
+ print
+ printf
+ getline
+ getlines
+);
+
+#
+# Everything we're willing to export, we must first import.
+#
+import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK;
+
+#
+# Some people call "FileHandle::function", so all the functions
+# that were in the old FileHandle class must be imported, too.
+#
+{
+ no strict 'refs';
+
+ my %import = (
+ 'IO::Handle' =>
+ [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
+ eof flush error clearerr setbuf setvbuf _open_mode_string)],
+ 'IO::Seekable' =>
+ [qw(seek tell getpos setpos)],
+ 'IO::File' =>
+ [qw(new new_tmpfile open)]
+ );
+ for my $pkg (keys %import) {
+ for my $func (@{$import{$pkg}}) {
+ my $c = *{"${pkg}::$func"}{CODE}
+ or die "${pkg}::$func missing";
+ *$func = $c;
+ }
+ }
+}
+
+#
+# Specialized importer for Fcntl magic.
+#
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller;
+ require Exporter;
+ Exporter::export($pkg, $callpkg, @_);
+
+ #
+ # If the Fcntl extension is available,
+ # export its constants.
+ #
+ eval {
+ require Fcntl;
+ Exporter::export('Fcntl', $callpkg);
+ };
+}
+
+################################################
+# This is the only exported function we define;
+# the rest come from other classes.
+#
+
+sub pipe {
+ my $r = new IO::Handle;
+ my $w = new IO::Handle;
+ CORE::pipe($r, $w) or return undef;
+ ($r, $w);
+}
+
+# Rebless standard file handles
+bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
+bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
+bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
+
+1;
+
+__END__
+
+=head1 NAME
+
+FileHandle - supply object methods for filehandles
+
+=head1 SYNOPSIS
+
+ use FileHandle;
+
+ $fh = new FileHandle;
+ if ($fh->open("< file")) {
+ print <$fh>;
+ $fh->close;
+ }
+
+ $fh = new FileHandle "> FOO";
+ if (defined $fh) {
+ print $fh "bar\n";
+ $fh->close;
+ }
+
+ $fh = new FileHandle "file", "r";
+ if (defined $fh) {
+ print <$fh>;
+ undef $fh; # automatically closes the file
+ }
+
+ $fh = new FileHandle "file", O_WRONLY|O_APPEND;
+ if (defined $fh) {
+ print $fh "corge\n";
+ undef $fh; # automatically closes the file
+ }
+
+ $pos = $fh->getpos;
+ $fh->setpos($pos);
+
+ $fh->setvbuf($buffer_var, _IOLBF, 1024);
+
+ ($readfh, $writefh) = FileHandle::pipe;
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+NOTE: This class is now a front-end to the IO::* classes.
+
+C<FileHandle::new> creates a C<FileHandle>, which is a reference to a
+newly created symbol (see the C<Symbol> package). If it receives any
+parameters, they are passed to C<FileHandle::open>; if the open fails,
+the C<FileHandle> object is destroyed. Otherwise, it is returned to
+the caller.
+
+C<FileHandle::new_from_fd> creates a C<FileHandle> like C<new> does.
+It requires two parameters, which are passed to C<FileHandle::fdopen>;
+if the fdopen fails, the C<FileHandle> object is destroyed.
+Otherwise, it is returned to the caller.
+
+C<FileHandle::open> accepts one parameter or two. With one parameter,
+it is just a front end for the built-in C<open> function. With two
+parameters, the first parameter is a filename that may include
+whitespace or other special characters, and the second parameter is
+the open mode, optionally followed by a file permission value.
+
+If C<FileHandle::open> receives a Perl mode string (">", "+<", etc.)
+or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic
+Perl C<open> operator.
+
+If C<FileHandle::open> is given a numeric mode, it passes that mode
+and the optional permissions value to the Perl C<sysopen> operator.
+For convenience, C<FileHandle::import> tries to import the O_XXX
+constants from the Fcntl module. If dynamic loading is not available,
+this may fail, but the rest of FileHandle will still work.
+
+C<FileHandle::fdopen> is like C<open> except that its first parameter
+is not a filename but rather a file handle name, a FileHandle object,
+or a file descriptor number.
+
+If the C functions fgetpos() and fsetpos() are available, then
+C<FileHandle::getpos> returns an opaque value that represents the
+current position of the FileHandle, and C<FileHandle::setpos> uses
+that value to return to a previously visited position.
+
+If the C function setvbuf() is available, then C<FileHandle::setvbuf>
+sets the buffering policy for the FileHandle. The calling sequence
+for the Perl function is the same as its C counterpart, including the
+macros C<_IOFBF>, C<_IOLBF>, and C<_IONBF>, except that the buffer
+parameter specifies a scalar variable to use as a buffer. WARNING: A
+variable used as a buffer by C<FileHandle::setvbuf> must not be
+modified in any way until the FileHandle is closed or until
+C<FileHandle::setvbuf> is called again, or memory corruption may
+result!
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<FileHandle> methods, which are just front ends for the
+corresponding built-in functions:
+
+ close
+ fileno
+ getc
+ gets
+ eof
+ clearerr
+ seek
+ tell
+
+See L<perlvar> for complete descriptions of each of the following
+supported C<FileHandle> methods:
+
+ autoflush
+ output_field_separator
+ output_record_separator
+ input_record_separator
+ input_line_number
+ format_page_number
+ format_lines_per_page
+ format_lines_left
+ format_name
+ format_top_name
+ format_line_break_characters
+ format_formfeed
+
+Furthermore, for doing normal I/O you might need these:
+
+=over 4
+
+=item $fh->print
+
+See L<perlfunc/print>.
+
+=item $fh->printf
+
+See L<perlfunc/printf>.
+
+=item $fh->getline
+
+This works like <$fh> described in L<perlop/"I/O Operators">
+except that it's more readable and can be safely called in a
+list context but still returns just one line.
+
+=item $fh->getlines
+
+This works like <$fh> when called in a list context to
+read all the remaining lines in a file, except that it's more readable.
+It will also croak() if accidentally called in a scalar context.
+
+=back
+
+There are many other functions available since FileHandle is descended
+from IO::File, IO::Seekable, and IO::Handle. Please see those
+respective pages for documentation on more functions.
+
+=head1 SEE ALSO
+
+The B<IO> extension,
+L<perlfunc>,
+L<perlop/"I/O Operators">.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Getopt/Long.pm b/Master/tlpkg/tlperl/lib/Getopt/Long.pm
new file mode 100644
index 00000000000..04038db58e3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Getopt/Long.pm
@@ -0,0 +1,2504 @@
+# Getopt::Long.pm -- Universal options parsing
+
+package Getopt::Long;
+
+# RCS Status : $Id: GetoptLong.pm,v 2.72 2005-04-28 21:18:33+02 jv Exp $
+# Author : Johan Vromans
+# Created On : Tue Sep 11 15:00:12 1990
+# Last Modified By: Johan Vromans
+# Last Modified On: Wed Dec 14 21:17:21 2005
+# Update Count : 1458
+# Status : Released
+
+################ Copyright ################
+
+# This program is Copyright 1990,2005 by Johan Vromans.
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Perl Artistic License or the
+# GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# If you do not have a copy of the GNU General Public License write to
+# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+# MA 02139, USA.
+
+################ Module Preamble ################
+
+use 5.004;
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = 2.35;
+# For testing versions only.
+#use vars qw($VERSION_STRING);
+#$VERSION_STRING = "2.35";
+
+use Exporter;
+use vars qw(@ISA @EXPORT @EXPORT_OK);
+@ISA = qw(Exporter);
+
+# Exported subroutines.
+sub GetOptions(@); # always
+sub Configure(@); # on demand
+sub HelpMessage(@); # on demand
+sub VersionMessage(@); # in demand
+
+BEGIN {
+ # Init immediately so their contents can be used in the 'use vars' below.
+ @EXPORT = qw(&GetOptions $REQUIRE_ORDER $PERMUTE $RETURN_IN_ORDER);
+ @EXPORT_OK = qw(&HelpMessage &VersionMessage &Configure);
+}
+
+# User visible variables.
+use vars @EXPORT, @EXPORT_OK;
+use vars qw($error $debug $major_version $minor_version);
+# Deprecated visible variables.
+use vars qw($autoabbrev $getopt_compat $ignorecase $bundling $order
+ $passthrough);
+# Official invisible variables.
+use vars qw($genprefix $caller $gnu_compat $auto_help $auto_version $longprefix);
+
+# Public subroutines.
+sub config(@); # deprecated name
+
+# Private subroutines.
+sub ConfigDefaults();
+sub ParseOptionSpec($$);
+sub OptCtl($);
+sub FindOption($$$$);
+sub ValidValue ($$$$$);
+
+################ Local Variables ################
+
+# $requested_version holds the version that was mentioned in the 'use'
+# or 'require', if any. It can be used to enable or disable specific
+# features.
+my $requested_version = 0;
+
+################ Resident subroutines ################
+
+sub ConfigDefaults() {
+ # Handle POSIX compliancy.
+ if ( defined $ENV{"POSIXLY_CORRECT"} ) {
+ $genprefix = "(--|-)";
+ $autoabbrev = 0; # no automatic abbrev of options
+ $bundling = 0; # no bundling of single letter switches
+ $getopt_compat = 0; # disallow '+' to start options
+ $order = $REQUIRE_ORDER;
+ }
+ else {
+ $genprefix = "(--|-|\\+)";
+ $autoabbrev = 1; # automatic abbrev of options
+ $bundling = 0; # bundling off by default
+ $getopt_compat = 1; # allow '+' to start options
+ $order = $PERMUTE;
+ }
+ # Other configurable settings.
+ $debug = 0; # for debugging
+ $error = 0; # error tally
+ $ignorecase = 1; # ignore case when matching options
+ $passthrough = 0; # leave unrecognized options alone
+ $gnu_compat = 0; # require --opt=val if value is optional
+ $longprefix = "(--)"; # what does a long prefix look like
+}
+
+# Override import.
+sub import {
+ my $pkg = shift; # package
+ my @syms = (); # symbols to import
+ my @config = (); # configuration
+ my $dest = \@syms; # symbols first
+ for ( @_ ) {
+ if ( $_ eq ':config' ) {
+ $dest = \@config; # config next
+ next;
+ }
+ push(@$dest, $_); # push
+ }
+ # Hide one level and call super.
+ local $Exporter::ExportLevel = 1;
+ push(@syms, qw(&GetOptions)) if @syms; # always export GetOptions
+ $pkg->SUPER::import(@syms);
+ # And configure.
+ Configure(@config) if @config;
+}
+
+################ Initialization ################
+
+# Values for $order. See GNU getopt.c for details.
+($REQUIRE_ORDER, $PERMUTE, $RETURN_IN_ORDER) = (0..2);
+# Version major/minor numbers.
+($major_version, $minor_version) = $VERSION =~ /^(\d+)\.(\d+)/;
+
+ConfigDefaults();
+
+################ OO Interface ################
+
+package Getopt::Long::Parser;
+
+# Store a copy of the default configuration. Since ConfigDefaults has
+# just been called, what we get from Configure is the default.
+my $default_config = do {
+ Getopt::Long::Configure ()
+};
+
+sub new {
+ my $that = shift;
+ my $class = ref($that) || $that;
+ my %atts = @_;
+
+ # Register the callers package.
+ my $self = { caller_pkg => (caller)[0] };
+
+ bless ($self, $class);
+
+ # Process config attributes.
+ if ( defined $atts{config} ) {
+ my $save = Getopt::Long::Configure ($default_config, @{$atts{config}});
+ $self->{settings} = Getopt::Long::Configure ($save);
+ delete ($atts{config});
+ }
+ # Else use default config.
+ else {
+ $self->{settings} = $default_config;
+ }
+
+ if ( %atts ) { # Oops
+ die(__PACKAGE__.": unhandled attributes: ".
+ join(" ", sort(keys(%atts)))."\n");
+ }
+
+ $self;
+}
+
+sub configure {
+ my ($self) = shift;
+
+ # Restore settings, merge new settings in.
+ my $save = Getopt::Long::Configure ($self->{settings}, @_);
+
+ # Restore orig config and save the new config.
+ $self->{settings} = Getopt::Long::Configure ($save);
+}
+
+sub getoptions {
+ my ($self) = shift;
+
+ # Restore config settings.
+ my $save = Getopt::Long::Configure ($self->{settings});
+
+ # Call main routine.
+ my $ret = 0;
+ $Getopt::Long::caller = $self->{caller_pkg};
+
+ eval {
+ # Locally set exception handler to default, otherwise it will
+ # be called implicitly here, and again explicitly when we try
+ # to deliver the messages.
+ local ($SIG{__DIE__}) = '__DEFAULT__';
+ $ret = Getopt::Long::GetOptions (@_);
+ };
+
+ # Restore saved settings.
+ Getopt::Long::Configure ($save);
+
+ # Handle errors and return value.
+ die ($@) if $@;
+ return $ret;
+}
+
+package Getopt::Long;
+
+################ Back to Normal ################
+
+# Indices in option control info.
+# Note that ParseOptions uses the fields directly. Search for 'hard-wired'.
+use constant CTL_TYPE => 0;
+#use constant CTL_TYPE_FLAG => '';
+#use constant CTL_TYPE_NEG => '!';
+#use constant CTL_TYPE_INCR => '+';
+#use constant CTL_TYPE_INT => 'i';
+#use constant CTL_TYPE_INTINC => 'I';
+#use constant CTL_TYPE_XINT => 'o';
+#use constant CTL_TYPE_FLOAT => 'f';
+#use constant CTL_TYPE_STRING => 's';
+
+use constant CTL_CNAME => 1;
+
+use constant CTL_DEFAULT => 2;
+
+use constant CTL_DEST => 3;
+ use constant CTL_DEST_SCALAR => 0;
+ use constant CTL_DEST_ARRAY => 1;
+ use constant CTL_DEST_HASH => 2;
+ use constant CTL_DEST_CODE => 3;
+
+use constant CTL_AMIN => 4;
+use constant CTL_AMAX => 5;
+
+# FFU.
+#use constant CTL_RANGE => ;
+#use constant CTL_REPEAT => ;
+
+sub GetOptions(@) {
+
+ my @optionlist = @_; # local copy of the option descriptions
+ my $argend = '--'; # option list terminator
+ my %opctl = (); # table of option specs
+ my $pkg = $caller || (caller)[0]; # current context
+ # Needed if linkage is omitted.
+ my @ret = (); # accum for non-options
+ my %linkage; # linkage
+ my $userlinkage; # user supplied HASH
+ my $opt; # current option
+ my $prefix = $genprefix; # current prefix
+
+ $error = '';
+
+ if ( $debug ) {
+ # Avoid some warnings if debugging.
+ local ($^W) = 0;
+ print STDERR
+ ("Getopt::Long $Getopt::Long::VERSION (",
+ '$Revision: 2.72 $', ") ",
+ "called from package \"$pkg\".",
+ "\n ",
+ "ARGV: (@ARGV)",
+ "\n ",
+ "autoabbrev=$autoabbrev,".
+ "bundling=$bundling,",
+ "getopt_compat=$getopt_compat,",
+ "gnu_compat=$gnu_compat,",
+ "order=$order,",
+ "\n ",
+ "ignorecase=$ignorecase,",
+ "requested_version=$requested_version,",
+ "passthrough=$passthrough,",
+ "genprefix=\"$genprefix\",",
+ "longprefix=\"$longprefix\".",
+ "\n");
+ }
+
+ # Check for ref HASH as first argument.
+ # First argument may be an object. It's OK to use this as long
+ # as it is really a hash underneath.
+ $userlinkage = undef;
+ if ( @optionlist && ref($optionlist[0]) and
+ UNIVERSAL::isa($optionlist[0],'HASH') ) {
+ $userlinkage = shift (@optionlist);
+ print STDERR ("=> user linkage: $userlinkage\n") if $debug;
+ }
+
+ # See if the first element of the optionlist contains option
+ # starter characters.
+ # Be careful not to interpret '<>' as option starters.
+ if ( @optionlist && $optionlist[0] =~ /^\W+$/
+ && !($optionlist[0] eq '<>'
+ && @optionlist > 0
+ && ref($optionlist[1])) ) {
+ $prefix = shift (@optionlist);
+ # Turn into regexp. Needs to be parenthesized!
+ $prefix =~ s/(\W)/\\$1/g;
+ $prefix = "([" . $prefix . "])";
+ print STDERR ("=> prefix=\"$prefix\"\n") if $debug;
+ }
+
+ # Verify correctness of optionlist.
+ %opctl = ();
+ while ( @optionlist ) {
+ my $opt = shift (@optionlist);
+
+ unless ( defined($opt) ) {
+ $error .= "Undefined argument in option spec\n";
+ next;
+ }
+
+ # Strip leading prefix so people can specify "--foo=i" if they like.
+ $opt = $+ if $opt =~ /^$prefix+(.*)$/s;
+
+ if ( $opt eq '<>' ) {
+ if ( (defined $userlinkage)
+ && !(@optionlist > 0 && ref($optionlist[0]))
+ && (exists $userlinkage->{$opt})
+ && ref($userlinkage->{$opt}) ) {
+ unshift (@optionlist, $userlinkage->{$opt});
+ }
+ unless ( @optionlist > 0
+ && ref($optionlist[0]) && ref($optionlist[0]) eq 'CODE' ) {
+ $error .= "Option spec <> requires a reference to a subroutine\n";
+ # Kill the linkage (to avoid another error).
+ shift (@optionlist)
+ if @optionlist && ref($optionlist[0]);
+ next;
+ }
+ $linkage{'<>'} = shift (@optionlist);
+ next;
+ }
+
+ # Parse option spec.
+ my ($name, $orig) = ParseOptionSpec ($opt, \%opctl);
+ unless ( defined $name ) {
+ # Failed. $orig contains the error message. Sorry for the abuse.
+ $error .= $orig;
+ # Kill the linkage (to avoid another error).
+ shift (@optionlist)
+ if @optionlist && ref($optionlist[0]);
+ next;
+ }
+
+ # If no linkage is supplied in the @optionlist, copy it from
+ # the userlinkage if available.
+ if ( defined $userlinkage ) {
+ unless ( @optionlist > 0 && ref($optionlist[0]) ) {
+ if ( exists $userlinkage->{$orig} &&
+ ref($userlinkage->{$orig}) ) {
+ print STDERR ("=> found userlinkage for \"$orig\": ",
+ "$userlinkage->{$orig}\n")
+ if $debug;
+ unshift (@optionlist, $userlinkage->{$orig});
+ }
+ else {
+ # Do nothing. Being undefined will be handled later.
+ next;
+ }
+ }
+ }
+
+ # Copy the linkage. If omitted, link to global variable.
+ if ( @optionlist > 0 && ref($optionlist[0]) ) {
+ print STDERR ("=> link \"$orig\" to $optionlist[0]\n")
+ if $debug;
+ my $rl = ref($linkage{$orig} = shift (@optionlist));
+
+ if ( $rl eq "ARRAY" ) {
+ $opctl{$name}[CTL_DEST] = CTL_DEST_ARRAY;
+ }
+ elsif ( $rl eq "HASH" ) {
+ $opctl{$name}[CTL_DEST] = CTL_DEST_HASH;
+ }
+ elsif ( $rl eq "SCALAR" ) {
+# if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
+# my $t = $linkage{$orig};
+# $$t = $linkage{$orig} = [];
+# }
+# elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
+# }
+# else {
+ # Ok.
+# }
+ }
+ elsif ( $rl eq "CODE" ) {
+ # Ok.
+ }
+ else {
+ $error .= "Invalid option linkage for \"$opt\"\n";
+ }
+ }
+ else {
+ # Link to global $opt_XXX variable.
+ # Make sure a valid perl identifier results.
+ my $ov = $orig;
+ $ov =~ s/\W/_/g;
+ if ( $opctl{$name}[CTL_DEST] == CTL_DEST_ARRAY ) {
+ print STDERR ("=> link \"$orig\" to \@$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\@".$pkg."::opt_$ov;");
+ }
+ elsif ( $opctl{$name}[CTL_DEST] == CTL_DEST_HASH ) {
+ print STDERR ("=> link \"$orig\" to \%$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\%".$pkg."::opt_$ov;");
+ }
+ else {
+ print STDERR ("=> link \"$orig\" to \$$pkg","::opt_$ov\n")
+ if $debug;
+ eval ("\$linkage{\$orig} = \\\$".$pkg."::opt_$ov;");
+ }
+ }
+ }
+
+ # Bail out if errors found.
+ die ($error) if $error;
+ $error = 0;
+
+ # Supply --version and --help support, if needed and allowed.
+ if ( defined($auto_version) ? $auto_version : ($requested_version >= 2.3203) ) {
+ if ( !defined($opctl{version}) ) {
+ $opctl{version} = ['','version',0,CTL_DEST_CODE,undef];
+ $linkage{version} = \&VersionMessage;
+ }
+ $auto_version = 1;
+ }
+ if ( defined($auto_help) ? $auto_help : ($requested_version >= 2.3203) ) {
+ if ( !defined($opctl{help}) && !defined($opctl{'?'}) ) {
+ $opctl{help} = $opctl{'?'} = ['','help',0,CTL_DEST_CODE,undef];
+ $linkage{help} = \&HelpMessage;
+ }
+ $auto_help = 1;
+ }
+
+ # Show the options tables if debugging.
+ if ( $debug ) {
+ my ($arrow, $k, $v);
+ $arrow = "=> ";
+ while ( ($k,$v) = each(%opctl) ) {
+ print STDERR ($arrow, "\$opctl{$k} = $v ", OptCtl($v), "\n");
+ $arrow = " ";
+ }
+ }
+
+ # Process argument list
+ my $goon = 1;
+ while ( $goon && @ARGV > 0 ) {
+
+ # Get next argument.
+ $opt = shift (@ARGV);
+ print STDERR ("=> arg \"", $opt, "\"\n") if $debug;
+
+ # Double dash is option list terminator.
+ if ( $opt eq $argend ) {
+ push (@ret, $argend) if $passthrough;
+ last;
+ }
+
+ # Look it up.
+ my $tryopt = $opt;
+ my $found; # success status
+ my $key; # key (if hash type)
+ my $arg; # option argument
+ my $ctl; # the opctl entry
+
+ ($found, $opt, $ctl, $arg, $key) =
+ FindOption ($prefix, $argend, $opt, \%opctl);
+
+ if ( $found ) {
+
+ # FindOption undefines $opt in case of errors.
+ next unless defined $opt;
+
+ my $argcnt = 0;
+ while ( defined $arg ) {
+
+ # Get the canonical name.
+ print STDERR ("=> cname for \"$opt\" is ") if $debug;
+ $opt = $ctl->[CTL_CNAME];
+ print STDERR ("\"$ctl->[CTL_CNAME]\"\n") if $debug;
+
+ if ( defined $linkage{$opt} ) {
+ print STDERR ("=> ref(\$L{$opt}) -> ",
+ ref($linkage{$opt}), "\n") if $debug;
+
+ if ( ref($linkage{$opt}) eq 'SCALAR' ) {
+ if ( $ctl->[CTL_TYPE] eq '+' ) {
+ print STDERR ("=> \$\$L{$opt} += \"$arg\"\n")
+ if $debug;
+ if ( defined ${$linkage{$opt}} ) {
+ ${$linkage{$opt}} += $arg;
+ }
+ else {
+ ${$linkage{$opt}} = $arg;
+ }
+ }
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
+ print STDERR ("=> ref(\$L{$opt}) auto-vivified",
+ " to ARRAY\n")
+ if $debug;
+ my $t = $linkage{$opt};
+ $$t = $linkage{$opt} = [];
+ print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
+ if $debug;
+ push (@{$linkage{$opt}}, $arg);
+ }
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
+ print STDERR ("=> ref(\$L{$opt}) auto-vivified",
+ " to HASH\n")
+ if $debug;
+ my $t = $linkage{$opt};
+ $$t = $linkage{$opt} = {};
+ print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
+ if $debug;
+ $linkage{$opt}->{$key} = $arg;
+ }
+ else {
+ print STDERR ("=> \$\$L{$opt} = \"$arg\"\n")
+ if $debug;
+ ${$linkage{$opt}} = $arg;
+ }
+ }
+ elsif ( ref($linkage{$opt}) eq 'ARRAY' ) {
+ print STDERR ("=> push(\@{\$L{$opt}, \"$arg\")\n")
+ if $debug;
+ push (@{$linkage{$opt}}, $arg);
+ }
+ elsif ( ref($linkage{$opt}) eq 'HASH' ) {
+ print STDERR ("=> \$\$L{$opt}->{$key} = \"$arg\"\n")
+ if $debug;
+ $linkage{$opt}->{$key} = $arg;
+ }
+ elsif ( ref($linkage{$opt}) eq 'CODE' ) {
+ print STDERR ("=> &L{$opt}(\"$opt\"",
+ $ctl->[CTL_DEST] == CTL_DEST_HASH ? ", \"$key\"" : "",
+ ", \"$arg\")\n")
+ if $debug;
+ my $eval_error = do {
+ local $@;
+ local $SIG{__DIE__} = '__DEFAULT__';
+ eval {
+ &{$linkage{$opt}}($opt,
+ $ctl->[CTL_DEST] == CTL_DEST_HASH ? ($key) : (),
+ $arg);
+ };
+ $@;
+ };
+ print STDERR ("=> die($eval_error)\n")
+ if $debug && $eval_error ne '';
+ if ( $eval_error =~ /^!/ ) {
+ if ( $eval_error =~ /^!FINISH\b/ ) {
+ $goon = 0;
+ }
+ }
+ elsif ( $eval_error ne '' ) {
+ warn ($eval_error);
+ $error++;
+ }
+ }
+ else {
+ print STDERR ("Invalid REF type \"", ref($linkage{$opt}),
+ "\" in linkage\n");
+ die("Getopt::Long -- internal error!\n");
+ }
+ }
+ # No entry in linkage means entry in userlinkage.
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_ARRAY ) {
+ if ( defined $userlinkage->{$opt} ) {
+ print STDERR ("=> push(\@{\$L{$opt}}, \"$arg\")\n")
+ if $debug;
+ push (@{$userlinkage->{$opt}}, $arg);
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = [\"$arg\"]\n")
+ if $debug;
+ $userlinkage->{$opt} = [$arg];
+ }
+ }
+ elsif ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
+ if ( defined $userlinkage->{$opt} ) {
+ print STDERR ("=> \$L{$opt}->{$key} = \"$arg\"\n")
+ if $debug;
+ $userlinkage->{$opt}->{$key} = $arg;
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = {$key => \"$arg\"}\n")
+ if $debug;
+ $userlinkage->{$opt} = {$key => $arg};
+ }
+ }
+ else {
+ if ( $ctl->[CTL_TYPE] eq '+' ) {
+ print STDERR ("=> \$L{$opt} += \"$arg\"\n")
+ if $debug;
+ if ( defined $userlinkage->{$opt} ) {
+ $userlinkage->{$opt} += $arg;
+ }
+ else {
+ $userlinkage->{$opt} = $arg;
+ }
+ }
+ else {
+ print STDERR ("=>\$L{$opt} = \"$arg\"\n") if $debug;
+ $userlinkage->{$opt} = $arg;
+ }
+ }
+
+ $argcnt++;
+ last if $argcnt >= $ctl->[CTL_AMAX] && $ctl->[CTL_AMAX] != -1;
+ undef($arg);
+
+ # Need more args?
+ if ( $argcnt < $ctl->[CTL_AMIN] ) {
+ if ( @ARGV ) {
+ if ( ValidValue($ctl, $ARGV[0], 1, $argend, $prefix) ) {
+ $arg = shift(@ARGV);
+ ($key,$arg) = $arg =~ /^([^=]+)=(.*)/
+ if $ctl->[CTL_DEST] == CTL_DEST_HASH;
+ next;
+ }
+ warn("Value \"$ARGV[0]\" invalid for option $opt\n");
+ $error++;
+ }
+ else {
+ warn("Insufficient arguments for option $opt\n");
+ $error++;
+ }
+ }
+
+ # Any more args?
+ if ( @ARGV && ValidValue($ctl, $ARGV[0], 0, $argend, $prefix) ) {
+ $arg = shift(@ARGV);
+ ($key,$arg) = $arg =~ /^([^=]+)=(.*)/
+ if $ctl->[CTL_DEST] == CTL_DEST_HASH;
+ next;
+ }
+ }
+ }
+
+ # Not an option. Save it if we $PERMUTE and don't have a <>.
+ elsif ( $order == $PERMUTE ) {
+ # Try non-options call-back.
+ my $cb;
+ if ( (defined ($cb = $linkage{'<>'})) ) {
+ print STDERR ("=> &L{$tryopt}(\"$tryopt\")\n")
+ if $debug;
+ my $eval_error = do {
+ local $@;
+ local $SIG{__DIE__} = '__DEFAULT__';
+ eval { &$cb ($tryopt) };
+ $@;
+ };
+ print STDERR ("=> die($eval_error)\n")
+ if $debug && $eval_error ne '';
+ if ( $eval_error =~ /^!/ ) {
+ if ( $eval_error =~ /^!FINISH\b/ ) {
+ $goon = 0;
+ }
+ }
+ elsif ( $eval_error ne '' ) {
+ warn ($eval_error);
+ $error++;
+ }
+ }
+ else {
+ print STDERR ("=> saving \"$tryopt\" ",
+ "(not an option, may permute)\n") if $debug;
+ push (@ret, $tryopt);
+ }
+ next;
+ }
+
+ # ...otherwise, terminate.
+ else {
+ # Push this one back and exit.
+ unshift (@ARGV, $tryopt);
+ return ($error == 0);
+ }
+
+ }
+
+ # Finish.
+ if ( @ret && $order == $PERMUTE ) {
+ # Push back accumulated arguments
+ print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
+ if $debug;
+ unshift (@ARGV, @ret);
+ }
+
+ return ($error == 0);
+}
+
+# A readable representation of what's in an optbl.
+sub OptCtl ($) {
+ my ($v) = @_;
+ my @v = map { defined($_) ? ($_) : ("<undef>") } @$v;
+ "[".
+ join(",",
+ "\"$v[CTL_TYPE]\"",
+ "\"$v[CTL_CNAME]\"",
+ "\"$v[CTL_DEFAULT]\"",
+ ("\$","\@","\%","\&")[$v[CTL_DEST] || 0],
+ $v[CTL_AMIN] || '',
+ $v[CTL_AMAX] || '',
+# $v[CTL_RANGE] || '',
+# $v[CTL_REPEAT] || '',
+ ). "]";
+}
+
+# Parse an option specification and fill the tables.
+sub ParseOptionSpec ($$) {
+ my ($opt, $opctl) = @_;
+
+ # Match option spec.
+ if ( $opt !~ m;^
+ (
+ # Option name
+ (?: \w+[-\w]* )
+ # Alias names, or "?"
+ (?: \| (?: \? | \w[-\w]* )? )*
+ )?
+ (
+ # Either modifiers ...
+ [!+]
+ |
+ # ... or a value/dest/repeat specification
+ [=:] [ionfs] [@%]? (?: \{\d*,?\d*\} )?
+ |
+ # ... or an optional-with-default spec
+ : (?: -?\d+ | \+ ) [@%]?
+ )?
+ $;x ) {
+ return (undef, "Error in option spec: \"$opt\"\n");
+ }
+
+ my ($names, $spec) = ($1, $2);
+ $spec = '' unless defined $spec;
+
+ # $orig keeps track of the primary name the user specified.
+ # This name will be used for the internal or external linkage.
+ # In other words, if the user specifies "FoO|BaR", it will
+ # match any case combinations of 'foo' and 'bar', but if a global
+ # variable needs to be set, it will be $opt_FoO in the exact case
+ # as specified.
+ my $orig;
+
+ my @names;
+ if ( defined $names ) {
+ @names = split (/\|/, $names);
+ $orig = $names[0];
+ }
+ else {
+ @names = ('');
+ $orig = '';
+ }
+
+ # Construct the opctl entries.
+ my $entry;
+ if ( $spec eq '' || $spec eq '+' || $spec eq '!' ) {
+ # Fields are hard-wired here.
+ $entry = [$spec,$orig,undef,CTL_DEST_SCALAR,0,0];
+ }
+ elsif ( $spec =~ /^:(-?\d+|\+)([@%])?$/ ) {
+ my $def = $1;
+ my $dest = $2;
+ my $type = $def eq '+' ? 'I' : 'i';
+ $dest ||= '$';
+ $dest = $dest eq '@' ? CTL_DEST_ARRAY
+ : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
+ # Fields are hard-wired here.
+ $entry = [$type,$orig,$def eq '+' ? undef : $def,
+ $dest,0,1];
+ }
+ else {
+ my ($mand, $type, $dest) =
+ $spec =~ /^([=:])([ionfs])([@%])?(\{(\d+)?(,)?(\d+)?\})?$/;
+ return (undef, "Cannot repeat while bundling: \"$opt\"\n")
+ if $bundling && defined($4);
+ my ($mi, $cm, $ma) = ($5, $6, $7);
+ return (undef, "{0} is useless in option spec: \"$opt\"\n")
+ if defined($mi) && !$mi && !defined($ma) && !defined($cm);
+
+ $type = 'i' if $type eq 'n';
+ $dest ||= '$';
+ $dest = $dest eq '@' ? CTL_DEST_ARRAY
+ : $dest eq '%' ? CTL_DEST_HASH : CTL_DEST_SCALAR;
+ # Default minargs to 1/0 depending on mand status.
+ $mi = $mand eq '=' ? 1 : 0 unless defined $mi;
+ # Adjust mand status according to minargs.
+ $mand = $mi ? '=' : ':';
+ # Adjust maxargs.
+ $ma = $mi ? $mi : 1 unless defined $ma || defined $cm;
+ return (undef, "Max must be greater than zero in option spec: \"$opt\"\n")
+ if defined($ma) && !$ma;
+ return (undef, "Max less than min in option spec: \"$opt\"\n")
+ if defined($ma) && $ma < $mi;
+
+ # Fields are hard-wired here.
+ $entry = [$type,$orig,undef,$dest,$mi,$ma||-1];
+ }
+
+ # Process all names. First is canonical, the rest are aliases.
+ my $dups = '';
+ foreach ( @names ) {
+
+ $_ = lc ($_)
+ if $ignorecase > (($bundling && length($_) == 1) ? 1 : 0);
+
+ if ( exists $opctl->{$_} ) {
+ $dups .= "Duplicate specification \"$opt\" for option \"$_\"\n";
+ }
+
+ if ( $spec eq '!' ) {
+ $opctl->{"no$_"} = $entry;
+ $opctl->{"no-$_"} = $entry;
+ $opctl->{$_} = [@$entry];
+ $opctl->{$_}->[CTL_TYPE] = '';
+ }
+ else {
+ $opctl->{$_} = $entry;
+ }
+ }
+
+ if ( $dups && $^W ) {
+ foreach ( split(/\n+/, $dups) ) {
+ warn($_."\n");
+ }
+ }
+ ($names[0], $orig);
+}
+
+# Option lookup.
+sub FindOption ($$$$) {
+
+ # returns (1, $opt, $ctl, $arg, $key) if okay,
+ # returns (1, undef) if option in error,
+ # returns (0) otherwise.
+
+ my ($prefix, $argend, $opt, $opctl) = @_;
+
+ print STDERR ("=> find \"$opt\"\n") if $debug;
+
+ return (0) unless $opt =~ /^$prefix(.*)$/s;
+ return (0) if $opt eq "-" && !defined $opctl->{''};
+
+ $opt = $+;
+ my $starter = $1;
+
+ print STDERR ("=> split \"$starter\"+\"$opt\"\n") if $debug;
+
+ my $optarg; # value supplied with --opt=value
+ my $rest; # remainder from unbundling
+
+ # If it is a long option, it may include the value.
+ # With getopt_compat, only if not bundling.
+ if ( ($starter=~/^$longprefix$/
+ || ($getopt_compat && ($bundling == 0 || $bundling == 2)))
+ && $opt =~ /^([^=]+)=(.*)$/s ) {
+ $opt = $1;
+ $optarg = $2;
+ print STDERR ("=> option \"", $opt,
+ "\", optarg = \"$optarg\"\n") if $debug;
+ }
+
+ #### Look it up ###
+
+ my $tryopt = $opt; # option to try
+
+ if ( $bundling && $starter eq '-' ) {
+
+ # To try overrides, obey case ignore.
+ $tryopt = $ignorecase ? lc($opt) : $opt;
+
+ # If bundling == 2, long options can override bundles.
+ if ( $bundling == 2 && length($tryopt) > 1
+ && defined ($opctl->{$tryopt}) ) {
+ print STDERR ("=> $starter$tryopt overrides unbundling\n")
+ if $debug;
+ }
+ else {
+ $tryopt = $opt;
+ # Unbundle single letter option.
+ $rest = length ($tryopt) > 0 ? substr ($tryopt, 1) : '';
+ $tryopt = substr ($tryopt, 0, 1);
+ $tryopt = lc ($tryopt) if $ignorecase > 1;
+ print STDERR ("=> $starter$tryopt unbundled from ",
+ "$starter$tryopt$rest\n") if $debug;
+ $rest = undef unless $rest ne '';
+ }
+ }
+
+ # Try auto-abbreviation.
+ elsif ( $autoabbrev ) {
+ # Sort the possible long option names.
+ my @names = sort(keys (%$opctl));
+ # Downcase if allowed.
+ $opt = lc ($opt) if $ignorecase;
+ $tryopt = $opt;
+ # Turn option name into pattern.
+ my $pat = quotemeta ($opt);
+ # Look up in option names.
+ my @hits = grep (/^$pat/, @names);
+ print STDERR ("=> ", scalar(@hits), " hits (@hits) with \"$pat\" ",
+ "out of ", scalar(@names), "\n") if $debug;
+
+ # Check for ambiguous results.
+ unless ( (@hits <= 1) || (grep ($_ eq $opt, @hits) == 1) ) {
+ # See if all matches are for the same option.
+ my %hit;
+ foreach ( @hits ) {
+ my $hit = $_;
+ $hit = $opctl->{$hit}->[CTL_CNAME]
+ if defined $opctl->{$hit}->[CTL_CNAME];
+ $hit{$hit} = 1;
+ }
+ # Remove auto-supplied options (version, help).
+ if ( keys(%hit) == 2 ) {
+ if ( $auto_version && exists($hit{version}) ) {
+ delete $hit{version};
+ }
+ elsif ( $auto_help && exists($hit{help}) ) {
+ delete $hit{help};
+ }
+ }
+ # Now see if it really is ambiguous.
+ unless ( keys(%hit) == 1 ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " is ambiguous (",
+ join(", ", @hits), ")\n");
+ $error++;
+ return (1, undef);
+ }
+ @hits = keys(%hit);
+ }
+
+ # Complete the option name, if appropriate.
+ if ( @hits == 1 && $hits[0] ne $opt ) {
+ $tryopt = $hits[0];
+ $tryopt = lc ($tryopt) if $ignorecase;
+ print STDERR ("=> option \"$opt\" -> \"$tryopt\"\n")
+ if $debug;
+ }
+ }
+
+ # Map to all lowercase if ignoring case.
+ elsif ( $ignorecase ) {
+ $tryopt = lc ($opt);
+ }
+
+ # Check validity by fetching the info.
+ my $ctl = $opctl->{$tryopt};
+ unless ( defined $ctl ) {
+ return (0) if $passthrough;
+ # Pretend one char when bundling.
+ if ( $bundling == 1 && length($starter) == 1 ) {
+ $opt = substr($opt,0,1);
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ }
+ warn ("Unknown option: ", $opt, "\n");
+ $error++;
+ return (1, undef);
+ }
+ # Apparently valid.
+ $opt = $tryopt;
+ print STDERR ("=> found ", OptCtl($ctl),
+ " for \"", $opt, "\"\n") if $debug;
+
+ #### Determine argument status ####
+
+ # If it is an option w/o argument, we're almost finished with it.
+ my $type = $ctl->[CTL_TYPE];
+ my $arg;
+
+ if ( $type eq '' || $type eq '!' || $type eq '+' ) {
+ if ( defined $optarg ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " does not take an argument\n");
+ $error++;
+ undef $opt;
+ }
+ elsif ( $type eq '' || $type eq '+' ) {
+ # Supply explicit value.
+ $arg = 1;
+ }
+ else {
+ $opt =~ s/^no-?//i; # strip NO prefix
+ $arg = 0; # supply explicit value
+ }
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, $opt, $ctl, $arg);
+ }
+
+ # Get mandatory status and type info.
+ my $mand = $ctl->[CTL_AMIN];
+
+ # Check if there is an option argument available.
+ if ( $gnu_compat && defined $optarg && $optarg eq '' ) {
+ return (1, $opt, $ctl, $type eq 's' ? '' : 0) unless $mand;
+ $optarg = 0 unless $type eq 's';
+ }
+
+ # Check if there is an option argument available.
+ if ( defined $optarg
+ ? ($optarg eq '')
+ : !(defined $rest || @ARGV > 0) ) {
+ # Complain if this option needs an argument.
+ if ( $mand ) {
+ return (0) if $passthrough;
+ warn ("Option ", $opt, " requires an argument\n");
+ $error++;
+ return (1, undef);
+ }
+ if ( $type eq 'I' ) {
+ # Fake incremental type.
+ my @c = @$ctl;
+ $c[CTL_TYPE] = '+';
+ return (1, $opt, \@c, 1);
+ }
+ return (1, $opt, $ctl,
+ defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
+ $type eq 's' ? '' : 0);
+ }
+
+ # Get (possibly optional) argument.
+ $arg = (defined $rest ? $rest
+ : (defined $optarg ? $optarg : shift (@ARGV)));
+
+ # Get key if this is a "name=value" pair for a hash option.
+ my $key;
+ if ($ctl->[CTL_DEST] == CTL_DEST_HASH && defined $arg) {
+ ($key, $arg) = ($arg =~ /^([^=]*)=(.*)$/s) ? ($1, $2)
+ : ($arg, defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] :
+ ($mand ? undef : ($type eq 's' ? "" : 1)));
+ if (! defined $arg) {
+ warn ("Option $opt, key \"$key\", requires a value\n");
+ $error++;
+ # Push back.
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, undef);
+ }
+ }
+
+ #### Check if the argument is valid for this option ####
+
+ my $key_valid = $ctl->[CTL_DEST] == CTL_DEST_HASH ? "[^=]+=" : "";
+
+ if ( $type eq 's' ) { # string
+ # A mandatory string takes anything.
+ return (1, $opt, $ctl, $arg, $key) if $mand;
+
+ # An optional string takes almost anything.
+ return (1, $opt, $ctl, $arg, $key)
+ if defined $optarg || defined $rest;
+ return (1, $opt, $ctl, $arg, $key) if $arg eq "-"; # ??
+
+ # Check for option or option list terminator.
+ if ($arg eq $argend ||
+ $arg =~ /^$prefix.+/) {
+ # Push back.
+ unshift (@ARGV, $arg);
+ # Supply empty value.
+ $arg = '';
+ }
+ }
+
+ elsif ( $type eq 'i' # numeric/integer
+ || $type eq 'I' # numeric/integer w/ incr default
+ || $type eq 'o' ) { # dec/oct/hex/bin value
+
+ my $o_valid =
+ $type eq 'o' ? "[-+]?[1-9][0-9]*|0x[0-9a-f]+|0b[01]+|0[0-7]*"
+ : "[-+]?[0-9]+";
+
+ if ( $bundling && defined $rest
+ && $rest =~ /^($key_valid)($o_valid)(.*)$/si ) {
+ ($key, $arg, $rest) = ($1, $2, $+);
+ chop($key) if $key;
+ $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
+ unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
+ }
+ elsif ( $arg =~ /^($o_valid)$/si ) {
+ $arg = ($type eq 'o' && $arg =~ /^0/) ? oct($arg) : 0+$arg;
+ }
+ else {
+ if ( defined $optarg || $mand ) {
+ if ( $passthrough ) {
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
+ unless defined $optarg;
+ return (0);
+ }
+ warn ("Value \"", $arg, "\" invalid for option ",
+ $opt, " (",
+ $type eq 'o' ? "extended " : '',
+ "number expected)\n");
+ $error++;
+ # Push back.
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, undef);
+ }
+ else {
+ # Push back.
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
+ if ( $type eq 'I' ) {
+ # Fake incremental type.
+ my @c = @$ctl;
+ $c[CTL_TYPE] = '+';
+ return (1, $opt, \@c, 1);
+ }
+ # Supply default value.
+ $arg = defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT] : 0;
+ }
+ }
+ }
+
+ elsif ( $type eq 'f' ) { # real number, int is also ok
+ # We require at least one digit before a point or 'e',
+ # and at least one digit following the point and 'e'.
+ # [-]NN[.NN][eNN]
+ if ( $bundling && defined $rest &&
+ $rest =~ /^($key_valid)([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)(.*)$/s ) {
+ ($key, $arg, $rest) = ($1, $2, $+);
+ chop($key) if $key;
+ unshift (@ARGV, $starter.$rest) if defined $rest && $rest ne '';
+ }
+ elsif ( $arg !~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ ) {
+ if ( defined $optarg || $mand ) {
+ if ( $passthrough ) {
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg)
+ unless defined $optarg;
+ return (0);
+ }
+ warn ("Value \"", $arg, "\" invalid for option ",
+ $opt, " (real number expected)\n");
+ $error++;
+ # Push back.
+ unshift (@ARGV, $starter.$rest) if defined $rest;
+ return (1, undef);
+ }
+ else {
+ # Push back.
+ unshift (@ARGV, defined $rest ? $starter.$rest : $arg);
+ # Supply default value.
+ $arg = 0.0;
+ }
+ }
+ }
+ else {
+ die("Getopt::Long internal error (Can't happen)\n");
+ }
+ return (1, $opt, $ctl, $arg, $key);
+}
+
+sub ValidValue ($$$$$) {
+ my ($ctl, $arg, $mand, $argend, $prefix) = @_;
+
+ if ( $ctl->[CTL_DEST] == CTL_DEST_HASH ) {
+ return 0 unless $arg =~ /[^=]+=(.*)/;
+ $arg = $1;
+ }
+
+ my $type = $ctl->[CTL_TYPE];
+
+ if ( $type eq 's' ) { # string
+ # A mandatory string takes anything.
+ return (1) if $mand;
+
+ return (1) if $arg eq "-";
+
+ # Check for option or option list terminator.
+ return 0 if $arg eq $argend || $arg =~ /^$prefix.+/;
+ return 1;
+ }
+
+ elsif ( $type eq 'i' # numeric/integer
+ || $type eq 'I' # numeric/integer w/ incr default
+ || $type eq 'o' ) { # dec/oct/hex/bin value
+
+ my $o_valid =
+ $type eq 'o' ? "[-+]?[1-9][0-9]*|0x[0-9a-f]+|0b[01]+|0[0-7]*"
+ : "[-+]?[0-9]+";
+
+ return $arg =~ /^$o_valid$/si;
+ }
+
+ elsif ( $type eq 'f' ) { # real number, int is also ok
+ # We require at least one digit before a point or 'e',
+ # and at least one digit following the point and 'e'.
+ # [-]NN[.NN][eNN]
+ return $arg =~ /^[-+]?[0-9.]+(\.[0-9]+)?([eE][-+]?[0-9]+)?$/;
+ }
+ die("ValidValue: Cannot happen\n");
+}
+
+# Getopt::Long Configuration.
+sub Configure (@) {
+ my (@options) = @_;
+
+ my $prevconfig =
+ [ $error, $debug, $major_version, $minor_version,
+ $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
+ $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
+ $longprefix ];
+
+ if ( ref($options[0]) eq 'ARRAY' ) {
+ ( $error, $debug, $major_version, $minor_version,
+ $autoabbrev, $getopt_compat, $ignorecase, $bundling, $order,
+ $gnu_compat, $passthrough, $genprefix, $auto_version, $auto_help,
+ $longprefix ) = @{shift(@options)};
+ }
+
+ my $opt;
+ foreach $opt ( @options ) {
+ my $try = lc ($opt);
+ my $action = 1;
+ if ( $try =~ /^no_?(.*)$/s ) {
+ $action = 0;
+ $try = $+;
+ }
+ if ( ($try eq 'default' or $try eq 'defaults') && $action ) {
+ ConfigDefaults ();
+ }
+ elsif ( ($try eq 'posix_default' or $try eq 'posix_defaults') ) {
+ local $ENV{POSIXLY_CORRECT};
+ $ENV{POSIXLY_CORRECT} = 1 if $action;
+ ConfigDefaults ();
+ }
+ elsif ( $try eq 'auto_abbrev' or $try eq 'autoabbrev' ) {
+ $autoabbrev = $action;
+ }
+ elsif ( $try eq 'getopt_compat' ) {
+ $getopt_compat = $action;
+ }
+ elsif ( $try eq 'gnu_getopt' ) {
+ if ( $action ) {
+ $gnu_compat = 1;
+ $bundling = 1;
+ $getopt_compat = 0;
+ $order = $PERMUTE;
+ }
+ }
+ elsif ( $try eq 'gnu_compat' ) {
+ $gnu_compat = $action;
+ }
+ elsif ( $try =~ /^(auto_?)?version$/ ) {
+ $auto_version = $action;
+ }
+ elsif ( $try =~ /^(auto_?)?help$/ ) {
+ $auto_help = $action;
+ }
+ elsif ( $try eq 'ignorecase' or $try eq 'ignore_case' ) {
+ $ignorecase = $action;
+ }
+ elsif ( $try eq 'ignore_case_always' ) {
+ $ignorecase = $action ? 2 : 0;
+ }
+ elsif ( $try eq 'bundling' ) {
+ $bundling = $action;
+ }
+ elsif ( $try eq 'bundling_override' ) {
+ $bundling = $action ? 2 : 0;
+ }
+ elsif ( $try eq 'require_order' ) {
+ $order = $action ? $REQUIRE_ORDER : $PERMUTE;
+ }
+ elsif ( $try eq 'permute' ) {
+ $order = $action ? $PERMUTE : $REQUIRE_ORDER;
+ }
+ elsif ( $try eq 'pass_through' or $try eq 'passthrough' ) {
+ $passthrough = $action;
+ }
+ elsif ( $try =~ /^prefix=(.+)$/ && $action ) {
+ $genprefix = $1;
+ # Turn into regexp. Needs to be parenthesized!
+ $genprefix = "(" . quotemeta($genprefix) . ")";
+ eval { '' =~ /$genprefix/; };
+ die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
+ }
+ elsif ( $try =~ /^prefix_pattern=(.+)$/ && $action ) {
+ $genprefix = $1;
+ # Parenthesize if needed.
+ $genprefix = "(" . $genprefix . ")"
+ unless $genprefix =~ /^\(.*\)$/;
+ eval { '' =~ m"$genprefix"; };
+ die("Getopt::Long: invalid pattern \"$genprefix\"") if $@;
+ }
+ elsif ( $try =~ /^long_prefix_pattern=(.+)$/ && $action ) {
+ $longprefix = $1;
+ # Parenthesize if needed.
+ $longprefix = "(" . $longprefix . ")"
+ unless $longprefix =~ /^\(.*\)$/;
+ eval { '' =~ m"$longprefix"; };
+ die("Getopt::Long: invalid long prefix pattern \"$longprefix\"") if $@;
+ }
+ elsif ( $try eq 'debug' ) {
+ $debug = $action;
+ }
+ else {
+ die("Getopt::Long: unknown config parameter \"$opt\"")
+ }
+ }
+ $prevconfig;
+}
+
+# Deprecated name.
+sub config (@) {
+ Configure (@_);
+}
+
+# Issue a standard message for --version.
+#
+# The arguments are mostly the same as for Pod::Usage::pod2usage:
+#
+# - a number (exit value)
+# - a string (lead in message)
+# - a hash with options. See Pod::Usage for details.
+#
+sub VersionMessage(@) {
+ # Massage args.
+ my $pa = setup_pa_args("version", @_);
+
+ my $v = $main::VERSION;
+ my $fh = $pa->{-output} ||
+ ($pa->{-exitval} eq "NOEXIT" || $pa->{-exitval} < 2) ? \*STDOUT : \*STDERR;
+
+ print $fh (defined($pa->{-message}) ? $pa->{-message} : (),
+ $0, defined $v ? " version $v" : (),
+ "\n",
+ "(", __PACKAGE__, "::", "GetOptions",
+ " version ",
+ defined($Getopt::Long::VERSION_STRING)
+ ? $Getopt::Long::VERSION_STRING : $VERSION, ";",
+ " Perl version ",
+ $] >= 5.006 ? sprintf("%vd", $^V) : $],
+ ")\n");
+ exit($pa->{-exitval}) unless $pa->{-exitval} eq "NOEXIT";
+}
+
+# Issue a standard message for --help.
+#
+# The arguments are the same as for Pod::Usage::pod2usage:
+#
+# - a number (exit value)
+# - a string (lead in message)
+# - a hash with options. See Pod::Usage for details.
+#
+sub HelpMessage(@) {
+ eval {
+ require Pod::Usage;
+ import Pod::Usage;
+ 1;
+ } || die("Cannot provide help: cannot load Pod::Usage\n");
+
+ # Note that pod2usage will issue a warning if -exitval => NOEXIT.
+ pod2usage(setup_pa_args("help", @_));
+
+}
+
+# Helper routine to set up a normalized hash ref to be used as
+# argument to pod2usage.
+sub setup_pa_args($@) {
+ my $tag = shift; # who's calling
+
+ # If called by direct binding to an option, it will get the option
+ # name and value as arguments. Remove these, if so.
+ @_ = () if @_ == 2 && $_[0] eq $tag;
+
+ my $pa;
+ if ( @_ > 1 ) {
+ $pa = { @_ };
+ }
+ else {
+ $pa = shift || {};
+ }
+
+ # At this point, $pa can be a number (exit value), string
+ # (message) or hash with options.
+
+ if ( UNIVERSAL::isa($pa, 'HASH') ) {
+ # Get rid of -msg vs. -message ambiguity.
+ $pa->{-message} = $pa->{-msg};
+ delete($pa->{-msg});
+ }
+ elsif ( $pa =~ /^-?\d+$/ ) {
+ $pa = { -exitval => $pa };
+ }
+ else {
+ $pa = { -message => $pa };
+ }
+
+ # These are _our_ defaults.
+ $pa->{-verbose} = 0 unless exists($pa->{-verbose});
+ $pa->{-exitval} = 0 unless exists($pa->{-exitval});
+ $pa;
+}
+
+# Sneak way to know what version the user requested.
+sub VERSION {
+ $requested_version = $_[1];
+ shift->SUPER::VERSION(@_);
+}
+
+1;
+
+################ Documentation ################
+
+=head1 NAME
+
+Getopt::Long - Extended processing of command line options
+
+=head1 SYNOPSIS
+
+ use Getopt::Long;
+ my $data = "file.dat";
+ my $length = 24;
+ my $verbose;
+ $result = GetOptions ("length=i" => \$length, # numeric
+ "file=s" => \$data, # string
+ "verbose" => \$verbose); # flag
+
+=head1 DESCRIPTION
+
+The Getopt::Long module implements an extended getopt function called
+GetOptions(). This function adheres to the POSIX syntax for command
+line options, with GNU extensions. In general, this means that options
+have long names instead of single letters, and are introduced with a
+double dash "--". Support for bundling of command line options, as was
+the case with the more traditional single-letter approach, is provided
+but not enabled by default.
+
+=head1 Command Line Options, an Introduction
+
+Command line operated programs traditionally take their arguments from
+the command line, for example filenames or other information that the
+program needs to know. Besides arguments, these programs often take
+command line I<options> as well. Options are not necessary for the
+program to work, hence the name 'option', but are used to modify its
+default behaviour. For example, a program could do its job quietly,
+but with a suitable option it could provide verbose information about
+what it did.
+
+Command line options come in several flavours. Historically, they are
+preceded by a single dash C<->, and consist of a single letter.
+
+ -l -a -c
+
+Usually, these single-character options can be bundled:
+
+ -lac
+
+Options can have values, the value is placed after the option
+character. Sometimes with whitespace in between, sometimes not:
+
+ -s 24 -s24
+
+Due to the very cryptic nature of these options, another style was
+developed that used long names. So instead of a cryptic C<-l> one
+could use the more descriptive C<--long>. To distinguish between a
+bundle of single-character options and a long one, two dashes are used
+to precede the option name. Early implementations of long options used
+a plus C<+> instead. Also, option values could be specified either
+like
+
+ --size=24
+
+or
+
+ --size 24
+
+The C<+> form is now obsolete and strongly deprecated.
+
+=head1 Getting Started with Getopt::Long
+
+Getopt::Long is the Perl5 successor of C<newgetopt.pl>. This was the
+first Perl module that provided support for handling the new style of
+command line options, hence the name Getopt::Long. This module also
+supports single-character options and bundling. Single character
+options may be any alphabetic character, a question mark, and a dash.
+Long options may consist of a series of letters, digits, and dashes.
+Although this is currently not enforced by Getopt::Long, multiple
+consecutive dashes are not allowed, and the option name must not end
+with a dash.
+
+To use Getopt::Long from a Perl program, you must include the
+following line in your Perl program:
+
+ use Getopt::Long;
+
+This will load the core of the Getopt::Long module and prepare your
+program for using it. Most of the actual Getopt::Long code is not
+loaded until you really call one of its functions.
+
+In the default configuration, options names may be abbreviated to
+uniqueness, case does not matter, and a single dash is sufficient,
+even for long option names. Also, options may be placed between
+non-option arguments. See L<Configuring Getopt::Long> for more
+details on how to configure Getopt::Long.
+
+=head2 Simple options
+
+The most simple options are the ones that take no values. Their mere
+presence on the command line enables the option. Popular examples are:
+
+ --all --verbose --quiet --debug
+
+Handling simple options is straightforward:
+
+ my $verbose = ''; # option variable with default value (false)
+ my $all = ''; # option variable with default value (false)
+ GetOptions ('verbose' => \$verbose, 'all' => \$all);
+
+The call to GetOptions() parses the command line arguments that are
+present in C<@ARGV> and sets the option variable to the value C<1> if
+the option did occur on the command line. Otherwise, the option
+variable is not touched. Setting the option value to true is often
+called I<enabling> the option.
+
+The option name as specified to the GetOptions() function is called
+the option I<specification>. Later we'll see that this specification
+can contain more than just the option name. The reference to the
+variable is called the option I<destination>.
+
+GetOptions() will return a true value if the command line could be
+processed successfully. Otherwise, it will write error messages to
+STDERR, and return a false result.
+
+=head2 A little bit less simple options
+
+Getopt::Long supports two useful variants of simple options:
+I<negatable> options and I<incremental> options.
+
+A negatable option is specified with an exclamation mark C<!> after the
+option name:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose!' => \$verbose);
+
+Now, using C<--verbose> on the command line will enable C<$verbose>,
+as expected. But it is also allowed to use C<--noverbose>, which will
+disable C<$verbose> by setting its value to C<0>. Using a suitable
+default value, the program can find out whether C<$verbose> is false
+by default, or disabled by using C<--noverbose>.
+
+An incremental option is specified with a plus C<+> after the
+option name:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose+' => \$verbose);
+
+Using C<--verbose> on the command line will increment the value of
+C<$verbose>. This way the program can keep track of how many times the
+option occurred on the command line. For example, each occurrence of
+C<--verbose> could increase the verbosity level of the program.
+
+=head2 Mixing command line option with other arguments
+
+Usually programs take command line options as well as other arguments,
+for example, file names. It is good practice to always specify the
+options first, and the other arguments last. Getopt::Long will,
+however, allow the options and arguments to be mixed and 'filter out'
+all the options before passing the rest of the arguments to the
+program. To stop Getopt::Long from processing further arguments,
+insert a double dash C<--> on the command line:
+
+ --size 24 -- --all
+
+In this example, C<--all> will I<not> be treated as an option, but
+passed to the program unharmed, in C<@ARGV>.
+
+=head2 Options with values
+
+For options that take values it must be specified whether the option
+value is required or not, and what kind of value the option expects.
+
+Three kinds of values are supported: integer numbers, floating point
+numbers, and strings.
+
+If the option value is required, Getopt::Long will take the
+command line argument that follows the option and assign this to the
+option variable. If, however, the option value is specified as
+optional, this will only be done if that value does not look like a
+valid command line option itself.
+
+ my $tag = ''; # option variable with default value
+ GetOptions ('tag=s' => \$tag);
+
+In the option specification, the option name is followed by an equals
+sign C<=> and the letter C<s>. The equals sign indicates that this
+option requires a value. The letter C<s> indicates that this value is
+an arbitrary string. Other possible value types are C<i> for integer
+values, and C<f> for floating point values. Using a colon C<:> instead
+of the equals sign indicates that the option value is optional. In
+this case, if no suitable value is supplied, string valued options get
+an empty string C<''> assigned, while numeric options are set to C<0>.
+
+=head2 Options with multiple values
+
+Options sometimes take several values. For example, a program could
+use multiple directories to search for library files:
+
+ --library lib/stdlib --library lib/extlib
+
+To accomplish this behaviour, simply specify an array reference as the
+destination for the option:
+
+ GetOptions ("library=s" => \@libfiles);
+
+Alternatively, you can specify that the option can have multiple
+values by adding a "@", and pass a scalar reference as the
+destination:
+
+ GetOptions ("library=s@" => \$libfiles);
+
+Used with the example above, C<@libfiles> (or C<@$libfiles>) would
+contain two strings upon completion: C<"lib/srdlib"> and
+C<"lib/extlib">, in that order. It is also possible to specify that
+only integer or floating point numbers are acceptable values.
+
+Often it is useful to allow comma-separated lists of values as well as
+multiple occurrences of the options. This is easy using Perl's split()
+and join() operators:
+
+ GetOptions ("library=s" => \@libfiles);
+ @libfiles = split(/,/,join(',',@libfiles));
+
+Of course, it is important to choose the right separator string for
+each purpose.
+
+Warning: What follows is an experimental feature.
+
+Options can take multiple values at once, for example
+
+ --coordinates 52.2 16.4 --rgbcolor 255 255 149
+
+This can be accomplished by adding a repeat specifier to the option
+specification. Repeat specifiers are very similar to the C<{...}>
+repeat specifiers that can be used with regular expression patterns.
+For example, the above command line would be handled as follows:
+
+ GetOptions('coordinates=f{2}' => \@coor, 'rgbcolor=i{3}' => \@color);
+
+The destination for the option must be an array or array reference.
+
+It is also possible to specify the minimal and maximal number of
+arguments an option takes. C<foo=s{2,4}> indicates an option that
+takes at least two and at most 4 arguments. C<foo=s{,}> indicates one
+or more values; C<foo:s{,}> indicates zero or more option values.
+
+=head2 Options with hash values
+
+If the option destination is a reference to a hash, the option will
+take, as value, strings of the form I<key>C<=>I<value>. The value will
+be stored with the specified key in the hash.
+
+ GetOptions ("define=s" => \%defines);
+
+Alternatively you can use:
+
+ GetOptions ("define=s%" => \$defines);
+
+When used with command line options:
+
+ --define os=linux --define vendor=redhat
+
+the hash C<%defines> (or C<%$defines>) will contain two keys, C<"os">
+with value C<"linux> and C<"vendor"> with value C<"redhat">. It is
+also possible to specify that only integer or floating point numbers
+are acceptable values. The keys are always taken to be strings.
+
+=head2 User-defined subroutines to handle options
+
+Ultimate control over what should be done when (actually: each time)
+an option is encountered on the command line can be achieved by
+designating a reference to a subroutine (or an anonymous subroutine)
+as the option destination. When GetOptions() encounters the option, it
+will call the subroutine with two or three arguments. The first
+argument is the name of the option. For a scalar or array destination,
+the second argument is the value to be stored. For a hash destination,
+the second arguments is the key to the hash, and the third argument
+the value to be stored. It is up to the subroutine to store the value,
+or do whatever it thinks is appropriate.
+
+A trivial application of this mechanism is to implement options that
+are related to each other. For example:
+
+ my $verbose = ''; # option variable with default value (false)
+ GetOptions ('verbose' => \$verbose,
+ 'quiet' => sub { $verbose = 0 });
+
+Here C<--verbose> and C<--quiet> control the same variable
+C<$verbose>, but with opposite values.
+
+If the subroutine needs to signal an error, it should call die() with
+the desired error message as its argument. GetOptions() will catch the
+die(), issue the error message, and record that an error result must
+be returned upon completion.
+
+If the text of the error message starts with an exclamation mark C<!>
+it is interpreted specially by GetOptions(). There is currently one
+special command implemented: C<die("!FINISH")> will cause GetOptions()
+to stop processing options, as if it encountered a double dash C<-->.
+
+=head2 Options with multiple names
+
+Often it is user friendly to supply alternate mnemonic names for
+options. For example C<--height> could be an alternate name for
+C<--length>. Alternate names can be included in the option
+specification, separated by vertical bar C<|> characters. To implement
+the above example:
+
+ GetOptions ('length|height=f' => \$length);
+
+The first name is called the I<primary> name, the other names are
+called I<aliases>. When using a hash to store options, the key will
+always be the primary name.
+
+Multiple alternate names are possible.
+
+=head2 Case and abbreviations
+
+Without additional configuration, GetOptions() will ignore the case of
+option names, and allow the options to be abbreviated to uniqueness.
+
+ GetOptions ('length|height=f' => \$length, "head" => \$head);
+
+This call will allow C<--l> and C<--L> for the length option, but
+requires a least C<--hea> and C<--hei> for the head and height options.
+
+=head2 Summary of Option Specifications
+
+Each option specifier consists of two parts: the name specification
+and the argument specification.
+
+The name specification contains the name of the option, optionally
+followed by a list of alternative names separated by vertical bar
+characters.
+
+ length option name is "length"
+ length|size|l name is "length", aliases are "size" and "l"
+
+The argument specification is optional. If omitted, the option is
+considered boolean, a value of 1 will be assigned when the option is
+used on the command line.
+
+The argument specification can be
+
+=over 4
+
+=item !
+
+The option does not take an argument and may be negated by prefixing
+it with "no" or "no-". E.g. C<"foo!"> will allow C<--foo> (a value of
+1 will be assigned) as well as C<--nofoo> and C<--no-foo> (a value of
+0 will be assigned). If the option has aliases, this applies to the
+aliases as well.
+
+Using negation on a single letter option when bundling is in effect is
+pointless and will result in a warning.
+
+=item +
+
+The option does not take an argument and will be incremented by 1
+every time it appears on the command line. E.g. C<"more+">, when used
+with C<--more --more --more>, will increment the value three times,
+resulting in a value of 3 (provided it was 0 or undefined at first).
+
+The C<+> specifier is ignored if the option destination is not a scalar.
+
+=item = I<type> [ I<desttype> ] [ I<repeat> ]
+
+The option requires an argument of the given type. Supported types
+are:
+
+=over 4
+
+=item s
+
+String. An arbitrary sequence of characters. It is valid for the
+argument to start with C<-> or C<-->.
+
+=item i
+
+Integer. An optional leading plus or minus sign, followed by a
+sequence of digits.
+
+=item o
+
+Extended integer, Perl style. This can be either an optional leading
+plus or minus sign, followed by a sequence of digits, or an octal
+string (a zero, optionally followed by '0', '1', .. '7'), or a
+hexadecimal string (C<0x> followed by '0' .. '9', 'a' .. 'f', case
+insensitive), or a binary string (C<0b> followed by a series of '0'
+and '1').
+
+=item f
+
+Real number. For example C<3.14>, C<-6.23E24> and so on.
+
+=back
+
+The I<desttype> can be C<@> or C<%> to specify that the option is
+list or a hash valued. This is only needed when the destination for
+the option value is not otherwise specified. It should be omitted when
+not needed.
+
+The I<repeat> specifies the number of values this option takes per
+occurrence on the command line. It has the format C<{> [ I<min> ] [ C<,> [ I<max> ] ] C<}>.
+
+I<min> denotes the minimal number of arguments. It defaults to 1 for
+options with C<=> and to 0 for options with C<:>, see below. Note that
+I<min> overrules the C<=> / C<:> semantics.
+
+I<max> denotes the maximum number of arguments. It must be at least
+I<min>. If I<max> is omitted, I<but the comma is not>, there is no
+upper bound to the number of argument values taken.
+
+=item : I<type> [ I<desttype> ]
+
+Like C<=>, but designates the argument as optional.
+If omitted, an empty string will be assigned to string values options,
+and the value zero to numeric options.
+
+Note that if a string argument starts with C<-> or C<-->, it will be
+considered an option on itself.
+
+=item : I<number> [ I<desttype> ]
+
+Like C<:i>, but if the value is omitted, the I<number> will be assigned.
+
+=item : + [ I<desttype> ]
+
+Like C<:i>, but if the value is omitted, the current value for the
+option will be incremented.
+
+=back
+
+=head1 Advanced Possibilities
+
+=head2 Object oriented interface
+
+Getopt::Long can be used in an object oriented way as well:
+
+ use Getopt::Long;
+ $p = new Getopt::Long::Parser;
+ $p->configure(...configuration options...);
+ if ($p->getoptions(...options descriptions...)) ...
+
+Configuration options can be passed to the constructor:
+
+ $p = new Getopt::Long::Parser
+ config => [...configuration options...];
+
+=head2 Thread Safety
+
+Getopt::Long is thread safe when using ithreads as of Perl 5.8. It is
+I<not> thread safe when using the older (experimental and now
+obsolete) threads implementation that was added to Perl 5.005.
+
+=head2 Documentation and help texts
+
+Getopt::Long encourages the use of Pod::Usage to produce help
+messages. For example:
+
+ use Getopt::Long;
+ use Pod::Usage;
+
+ my $man = 0;
+ my $help = 0;
+
+ GetOptions('help|?' => \$help, man => \$man) or pod2usage(2);
+ pod2usage(1) if $help;
+ pod2usage(-exitstatus => 0, -verbose => 2) if $man;
+
+ __END__
+
+ =head1 NAME
+
+ sample - Using Getopt::Long and Pod::Usage
+
+ =head1 SYNOPSIS
+
+ sample [options] [file ...]
+
+ Options:
+ -help brief help message
+ -man full documentation
+
+ =head1 OPTIONS
+
+ =over 8
+
+ =item B<-help>
+
+ Print a brief help message and exits.
+
+ =item B<-man>
+
+ Prints the manual page and exits.
+
+ =back
+
+ =head1 DESCRIPTION
+
+ B<This program> will read the given input file(s) and do something
+ useful with the contents thereof.
+
+ =cut
+
+See L<Pod::Usage> for details.
+
+=head2 Storing option values in a hash
+
+Sometimes, for example when there are a lot of options, having a
+separate variable for each of them can be cumbersome. GetOptions()
+supports, as an alternative mechanism, storing options in a hash.
+
+To obtain this, a reference to a hash must be passed I<as the first
+argument> to GetOptions(). For each option that is specified on the
+command line, the option value will be stored in the hash with the
+option name as key. Options that are not actually used on the command
+line will not be put in the hash, on other words,
+C<exists($h{option})> (or defined()) can be used to test if an option
+was used. The drawback is that warnings will be issued if the program
+runs under C<use strict> and uses C<$h{option}> without testing with
+exists() or defined() first.
+
+ my %h = ();
+ GetOptions (\%h, 'length=i'); # will store in $h{length}
+
+For options that take list or hash values, it is necessary to indicate
+this by appending an C<@> or C<%> sign after the type:
+
+ GetOptions (\%h, 'colours=s@'); # will push to @{$h{colours}}
+
+To make things more complicated, the hash may contain references to
+the actual destinations, for example:
+
+ my $len = 0;
+ my %h = ('length' => \$len);
+ GetOptions (\%h, 'length=i'); # will store in $len
+
+This example is fully equivalent with:
+
+ my $len = 0;
+ GetOptions ('length=i' => \$len); # will store in $len
+
+Any mixture is possible. For example, the most frequently used options
+could be stored in variables while all other options get stored in the
+hash:
+
+ my $verbose = 0; # frequently referred
+ my $debug = 0; # frequently referred
+ my %h = ('verbose' => \$verbose, 'debug' => \$debug);
+ GetOptions (\%h, 'verbose', 'debug', 'filter', 'size=i');
+ if ( $verbose ) { ... }
+ if ( exists $h{filter} ) { ... option 'filter' was specified ... }
+
+=head2 Bundling
+
+With bundling it is possible to set several single-character options
+at once. For example if C<a>, C<v> and C<x> are all valid options,
+
+ -vax
+
+would set all three.
+
+Getopt::Long supports two levels of bundling. To enable bundling, a
+call to Getopt::Long::Configure is required.
+
+The first level of bundling can be enabled with:
+
+ Getopt::Long::Configure ("bundling");
+
+Configured this way, single-character options can be bundled but long
+options B<must> always start with a double dash C<--> to avoid
+ambiguity. For example, when C<vax>, C<a>, C<v> and C<x> are all valid
+options,
+
+ -vax
+
+would set C<a>, C<v> and C<x>, but
+
+ --vax
+
+would set C<vax>.
+
+The second level of bundling lifts this restriction. It can be enabled
+with:
+
+ Getopt::Long::Configure ("bundling_override");
+
+Now, C<-vax> would set the option C<vax>.
+
+When any level of bundling is enabled, option values may be inserted
+in the bundle. For example:
+
+ -h24w80
+
+is equivalent to
+
+ -h 24 -w 80
+
+When configured for bundling, single-character options are matched
+case sensitive while long options are matched case insensitive. To
+have the single-character options matched case insensitive as well,
+use:
+
+ Getopt::Long::Configure ("bundling", "ignorecase_always");
+
+It goes without saying that bundling can be quite confusing.
+
+=head2 The lonesome dash
+
+Normally, a lone dash C<-> on the command line will not be considered
+an option. Option processing will terminate (unless "permute" is
+configured) and the dash will be left in C<@ARGV>.
+
+It is possible to get special treatment for a lone dash. This can be
+achieved by adding an option specification with an empty name, for
+example:
+
+ GetOptions ('' => \$stdio);
+
+A lone dash on the command line will now be a legal option, and using
+it will set variable C<$stdio>.
+
+=head2 Argument callback
+
+A special option 'name' C<< <> >> can be used to designate a subroutine
+to handle non-option arguments. When GetOptions() encounters an
+argument that does not look like an option, it will immediately call this
+subroutine and passes it one parameter: the argument name.
+
+For example:
+
+ my $width = 80;
+ sub process { ... }
+ GetOptions ('width=i' => \$width, '<>' => \&process);
+
+When applied to the following command line:
+
+ arg1 --width=72 arg2 --width=60 arg3
+
+This will call
+C<process("arg1")> while C<$width> is C<80>,
+C<process("arg2")> while C<$width> is C<72>, and
+C<process("arg3")> while C<$width> is C<60>.
+
+This feature requires configuration option B<permute>, see section
+L<Configuring Getopt::Long>.
+
+=head1 Configuring Getopt::Long
+
+Getopt::Long can be configured by calling subroutine
+Getopt::Long::Configure(). This subroutine takes a list of quoted
+strings, each specifying a configuration option to be enabled, e.g.
+C<ignore_case>, or disabled, e.g. C<no_ignore_case>. Case does not
+matter. Multiple calls to Configure() are possible.
+
+Alternatively, as of version 2.24, the configuration options may be
+passed together with the C<use> statement:
+
+ use Getopt::Long qw(:config no_ignore_case bundling);
+
+The following options are available:
+
+=over 12
+
+=item default
+
+This option causes all configuration options to be reset to their
+default values.
+
+=item posix_default
+
+This option causes all configuration options to be reset to their
+default values as if the environment variable POSIXLY_CORRECT had
+been set.
+
+=item auto_abbrev
+
+Allow option names to be abbreviated to uniqueness.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<auto_abbrev> is disabled.
+
+=item getopt_compat
+
+Allow C<+> to start options.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<getopt_compat> is disabled.
+
+=item gnu_compat
+
+C<gnu_compat> controls whether C<--opt=> is allowed, and what it should
+do. Without C<gnu_compat>, C<--opt=> gives an error. With C<gnu_compat>,
+C<--opt=> will give option C<opt> and empty value.
+This is the way GNU getopt_long() does it.
+
+=item gnu_getopt
+
+This is a short way of setting C<gnu_compat> C<bundling> C<permute>
+C<no_getopt_compat>. With C<gnu_getopt>, command line handling should be
+fully compatible with GNU getopt_long().
+
+=item require_order
+
+Whether command line arguments are allowed to be mixed with options.
+Default is disabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<require_order> is enabled.
+
+See also C<permute>, which is the opposite of C<require_order>.
+
+=item permute
+
+Whether command line arguments are allowed to be mixed with options.
+Default is enabled unless environment variable
+POSIXLY_CORRECT has been set, in which case C<permute> is disabled.
+Note that C<permute> is the opposite of C<require_order>.
+
+If C<permute> is enabled, this means that
+
+ --foo arg1 --bar arg2 arg3
+
+is equivalent to
+
+ --foo --bar arg1 arg2 arg3
+
+If an argument callback routine is specified, C<@ARGV> will always be
+empty upon successful return of GetOptions() since all options have been
+processed. The only exception is when C<--> is used:
+
+ --foo arg1 --bar arg2 -- arg3
+
+This will call the callback routine for arg1 and arg2, and then
+terminate GetOptions() leaving C<"arg2"> in C<@ARGV>.
+
+If C<require_order> is enabled, options processing
+terminates when the first non-option is encountered.
+
+ --foo arg1 --bar arg2 arg3
+
+is equivalent to
+
+ --foo -- arg1 --bar arg2 arg3
+
+If C<pass_through> is also enabled, options processing will terminate
+at the first unrecognized option, or non-option, whichever comes
+first.
+
+=item bundling (default: disabled)
+
+Enabling this option will allow single-character options to be
+bundled. To distinguish bundles from long option names, long options
+I<must> be introduced with C<--> and bundles with C<->.
+
+Note that, if you have options C<a>, C<l> and C<all>, and
+auto_abbrev enabled, possible arguments and option settings are:
+
+ using argument sets option(s)
+ ------------------------------------------
+ -a, --a a
+ -l, --l l
+ -al, -la, -ala, -all,... a, l
+ --al, --all all
+
+The surprising part is that C<--a> sets option C<a> (due to auto
+completion), not C<all>.
+
+Note: disabling C<bundling> also disables C<bundling_override>.
+
+=item bundling_override (default: disabled)
+
+If C<bundling_override> is enabled, bundling is enabled as with
+C<bundling> but now long option names override option bundles.
+
+Note: disabling C<bundling_override> also disables C<bundling>.
+
+B<Note:> Using option bundling can easily lead to unexpected results,
+especially when mixing long options and bundles. Caveat emptor.
+
+=item ignore_case (default: enabled)
+
+If enabled, case is ignored when matching long option names. If,
+however, bundling is enabled as well, single character options will be
+treated case-sensitive.
+
+With C<ignore_case>, option specifications for options that only
+differ in case, e.g., C<"foo"> and C<"Foo">, will be flagged as
+duplicates.
+
+Note: disabling C<ignore_case> also disables C<ignore_case_always>.
+
+=item ignore_case_always (default: disabled)
+
+When bundling is in effect, case is ignored on single-character
+options also.
+
+Note: disabling C<ignore_case_always> also disables C<ignore_case>.
+
+=item auto_version (default:disabled)
+
+Automatically provide support for the B<--version> option if
+the application did not specify a handler for this option itself.
+
+Getopt::Long will provide a standard version message that includes the
+program name, its version (if $main::VERSION is defined), and the
+versions of Getopt::Long and Perl. The message will be written to
+standard output and processing will terminate.
+
+C<auto_version> will be enabled if the calling program explicitly
+specified a version number higher than 2.32 in the C<use> or
+C<require> statement.
+
+=item auto_help (default:disabled)
+
+Automatically provide support for the B<--help> and B<-?> options if
+the application did not specify a handler for this option itself.
+
+Getopt::Long will provide a help message using module L<Pod::Usage>. The
+message, derived from the SYNOPSIS POD section, will be written to
+standard output and processing will terminate.
+
+C<auto_help> will be enabled if the calling program explicitly
+specified a version number higher than 2.32 in the C<use> or
+C<require> statement.
+
+=item pass_through (default: disabled)
+
+Options that are unknown, ambiguous or supplied with an invalid option
+value are passed through in C<@ARGV> instead of being flagged as
+errors. This makes it possible to write wrapper scripts that process
+only part of the user supplied command line arguments, and pass the
+remaining options to some other program.
+
+If C<require_order> is enabled, options processing will terminate at
+the first unrecognized option, or non-option, whichever comes first.
+However, if C<permute> is enabled instead, results can become confusing.
+
+Note that the options terminator (default C<-->), if present, will
+also be passed through in C<@ARGV>.
+
+=item prefix
+
+The string that starts options. If a constant string is not
+sufficient, see C<prefix_pattern>.
+
+=item prefix_pattern
+
+A Perl pattern that identifies the strings that introduce options.
+Default is C<--|-|\+> unless environment variable
+POSIXLY_CORRECT has been set, in which case it is C<--|->.
+
+=item long_prefix_pattern
+
+A Perl pattern that allows the disambiguation of long and short
+prefixes. Default is C<-->.
+
+Typically you only need to set this if you are using nonstandard
+prefixes and want some or all of them to have the same semantics as
+'--' does under normal circumstances.
+
+For example, setting prefix_pattern to C<--|-|\+|\/> and
+long_prefix_pattern to C<--|\/> would add Win32 style argument
+handling.
+
+=item debug (default: disabled)
+
+Enable debugging output.
+
+=back
+
+=head1 Exportable Methods
+
+=over
+
+=item VersionMessage
+
+This subroutine provides a standard version message. Its argument can be:
+
+=over 4
+
+=item *
+
+A string containing the text of a message to print I<before> printing
+the standard message.
+
+=item *
+
+A numeric value corresponding to the desired exit status.
+
+=item *
+
+A reference to a hash.
+
+=back
+
+If more than one argument is given then the entire argument list is
+assumed to be a hash. If a hash is supplied (either as a reference or
+as a list) it should contain one or more elements with the following
+keys:
+
+=over 4
+
+=item C<-message>
+
+=item C<-msg>
+
+The text of a message to print immediately prior to printing the
+program's usage message.
+
+=item C<-exitval>
+
+The desired exit status to pass to the B<exit()> function.
+This should be an integer, or else the string "NOEXIT" to
+indicate that control should simply be returned without
+terminating the invoking process.
+
+=item C<-output>
+
+A reference to a filehandle, or the pathname of a file to which the
+usage message should be written. The default is C<\*STDERR> unless the
+exit value is less than 2 (in which case the default is C<\*STDOUT>).
+
+=back
+
+You cannot tie this routine directly to an option, e.g.:
+
+ GetOptions("version" => \&VersionMessage);
+
+Use this instead:
+
+ GetOptions("version" => sub { VersionMessage() });
+
+=item HelpMessage
+
+This subroutine produces a standard help message, derived from the
+program's POD section SYNOPSIS using L<Pod::Usage>. It takes the same
+arguments as VersionMessage(). In particular, you cannot tie it
+directly to an option, e.g.:
+
+ GetOptions("help" => \&HelpMessage);
+
+Use this instead:
+
+ GetOptions("help" => sub { HelpMessage() });
+
+=back
+
+=head1 Return values and Errors
+
+Configuration errors and errors in the option definitions are
+signalled using die() and will terminate the calling program unless
+the call to Getopt::Long::GetOptions() was embedded in C<eval { ...
+}>, or die() was trapped using C<$SIG{__DIE__}>.
+
+GetOptions returns true to indicate success.
+It returns false when the function detected one or more errors during
+option parsing. These errors are signalled using warn() and can be
+trapped with C<$SIG{__WARN__}>.
+
+=head1 Legacy
+
+The earliest development of C<newgetopt.pl> started in 1990, with Perl
+version 4. As a result, its development, and the development of
+Getopt::Long, has gone through several stages. Since backward
+compatibility has always been extremely important, the current version
+of Getopt::Long still supports a lot of constructs that nowadays are
+no longer necessary or otherwise unwanted. This section describes
+briefly some of these 'features'.
+
+=head2 Default destinations
+
+When no destination is specified for an option, GetOptions will store
+the resultant value in a global variable named C<opt_>I<XXX>, where
+I<XXX> is the primary name of this option. When a progam executes
+under C<use strict> (recommended), these variables must be
+pre-declared with our() or C<use vars>.
+
+ our $opt_length = 0;
+ GetOptions ('length=i'); # will store in $opt_length
+
+To yield a usable Perl variable, characters that are not part of the
+syntax for variables are translated to underscores. For example,
+C<--fpp-struct-return> will set the variable
+C<$opt_fpp_struct_return>. Note that this variable resides in the
+namespace of the calling program, not necessarily C<main>. For
+example:
+
+ GetOptions ("size=i", "sizes=i@");
+
+with command line "-size 10 -sizes 24 -sizes 48" will perform the
+equivalent of the assignments
+
+ $opt_size = 10;
+ @opt_sizes = (24, 48);
+
+=head2 Alternative option starters
+
+A string of alternative option starter characters may be passed as the
+first argument (or the first argument after a leading hash reference
+argument).
+
+ my $len = 0;
+ GetOptions ('/', 'length=i' => $len);
+
+Now the command line may look like:
+
+ /length 24 -- arg
+
+Note that to terminate options processing still requires a double dash
+C<-->.
+
+GetOptions() will not interpret a leading C<< "<>" >> as option starters
+if the next argument is a reference. To force C<< "<" >> and C<< ">" >> as
+option starters, use C<< "><" >>. Confusing? Well, B<using a starter
+argument is strongly deprecated> anyway.
+
+=head2 Configuration variables
+
+Previous versions of Getopt::Long used variables for the purpose of
+configuring. Although manipulating these variables still work, it is
+strongly encouraged to use the C<Configure> routine that was introduced
+in version 2.17. Besides, it is much easier.
+
+=head1 Trouble Shooting
+
+=head2 GetOptions does not return a false result when an option is not supplied
+
+That's why they're called 'options'.
+
+=head2 GetOptions does not split the command line correctly
+
+The command line is not split by GetOptions, but by the command line
+interpreter (CLI). On Unix, this is the shell. On Windows, it is
+COMMAND.COM or CMD.EXE. Other operating systems have other CLIs.
+
+It is important to know that these CLIs may behave different when the
+command line contains special characters, in particular quotes or
+backslashes. For example, with Unix shells you can use single quotes
+(C<'>) and double quotes (C<">) to group words together. The following
+alternatives are equivalent on Unix:
+
+ "two words"
+ 'two words'
+ two\ words
+
+In case of doubt, insert the following statement in front of your Perl
+program:
+
+ print STDERR (join("|",@ARGV),"\n");
+
+to verify how your CLI passes the arguments to the program.
+
+=head2 Undefined subroutine &main::GetOptions called
+
+Are you running Windows, and did you write
+
+ use GetOpt::Long;
+
+(note the capital 'O')?
+
+=head2 How do I put a "-?" option into a Getopt::Long?
+
+You can only obtain this using an alias, and Getopt::Long of at least
+version 2.13.
+
+ use Getopt::Long;
+ GetOptions ("help|?"); # -help and -? will both set $opt_help
+
+=head1 AUTHOR
+
+Johan Vromans <jvromans@squirrel.nl>
+
+=head1 COPYRIGHT AND DISCLAIMER
+
+This program is Copyright 1990,2005 by Johan Vromans.
+This program is free software; you can redistribute it and/or
+modify it under the terms of the Perl Artistic License or the
+GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+If you do not have a copy of the GNU General Public License write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
+MA 02139, USA.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Getopt/Std.pm b/Master/tlpkg/tlperl/lib/Getopt/Std.pm
new file mode 100644
index 00000000000..99f93590622
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Getopt/Std.pm
@@ -0,0 +1,294 @@
+package Getopt::Std;
+require 5.000;
+require Exporter;
+
+=head1 NAME
+
+getopt, getopts - Process single-character switches with switch clustering
+
+=head1 SYNOPSIS
+
+ use Getopt::Std;
+
+ getopt('oDI'); # -o, -D & -I take arg. Sets $opt_* as a side effect.
+ getopt('oDI', \%opts); # -o, -D & -I take arg. Values in %opts
+ getopts('oif:'); # -o & -i are boolean flags, -f takes an argument
+ # Sets $opt_* as a side effect.
+ getopts('oif:', \%opts); # options as above. Values in %opts
+
+=head1 DESCRIPTION
+
+The getopt() function processes single-character switches with switch
+clustering. Pass one argument which is a string containing all switches
+that take an argument. For each switch found, sets $opt_x (where x is the
+switch name) to the value of the argument if an argument is expected,
+or 1 otherwise. Switches which take an argument don't care whether
+there is a space between the switch and the argument.
+
+The getopts() function is similar, but you should pass to it the list of all
+switches to be recognized. If unspecified switches are found on the
+command-line, the user will be warned that an unknown option was given.
+
+Note that, if your code is running under the recommended C<use strict
+'vars'> pragma, you will need to declare these package variables
+with "our":
+
+ our($opt_x, $opt_y);
+
+For those of you who don't like additional global variables being created, getopt()
+and getopts() will also accept a hash reference as an optional second argument.
+Hash keys will be x (where x is the switch name) with key values the value of
+the argument or 1 if no argument is specified.
+
+To allow programs to process arguments that look like switches, but aren't,
+both functions will stop processing switches when they see the argument
+C<-->. The C<--> will be removed from @ARGV.
+
+=head1 C<--help> and C<--version>
+
+If C<-> is not a recognized switch letter, getopts() supports arguments
+C<--help> and C<--version>. If C<main::HELP_MESSAGE()> and/or
+C<main::VERSION_MESSAGE()> are defined, they are called; the arguments are
+the output file handle, the name of option-processing package, its version,
+and the switches string. If the subroutines are not defined, an attempt is
+made to generate intelligent messages; for best results, define $main::VERSION.
+
+If embedded documentation (in pod format, see L<perlpod>) is detected
+in the script, C<--help> will also show how to access the documentation.
+
+Note that due to excessive paranoia, if $Getopt::Std::STANDARD_HELP_VERSION
+isn't true (the default is false), then the messages are printed on STDERR,
+and the processing continues after the messages are printed. This being
+the opposite of the standard-conforming behaviour, it is strongly recommended
+to set $Getopt::Std::STANDARD_HELP_VERSION to true.
+
+One can change the output file handle of the messages by setting
+$Getopt::Std::OUTPUT_HELP_VERSION. One can print the messages of C<--help>
+(without the C<Usage:> line) and C<--version> by calling functions help_mess()
+and version_mess() with the switches string as an argument.
+
+=cut
+
+@ISA = qw(Exporter);
+@EXPORT = qw(getopt getopts);
+$VERSION = '1.05';
+# uncomment the next line to disable 1.03-backward compatibility paranoia
+# $STANDARD_HELP_VERSION = 1;
+
+# Process single-character switches with switch clustering. Pass one argument
+# which is a string containing all switches that take an argument. For each
+# switch found, sets $opt_x (where x is the switch name) to the value of the
+# argument, or 1 if no argument. Switches which take an argument don't care
+# whether there is a space between the switch and the argument.
+
+# Usage:
+# getopt('oDI'); # -o, -D & -I take arg. Sets opt_* as a side effect.
+
+sub getopt (;$$) {
+ my ($argumentative, $hash) = @_;
+ $argumentative = '' if !defined $argumentative;
+ my ($first,$rest);
+ local $_;
+ local @EXPORT;
+
+ while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
+ ($first,$rest) = ($1,$2);
+ if (/^--$/) { # early exit if --
+ shift @ARGV;
+ last;
+ }
+ if (index($argumentative,$first) >= 0) {
+ if ($rest ne '') {
+ shift(@ARGV);
+ }
+ else {
+ shift(@ARGV);
+ $rest = shift(@ARGV);
+ }
+ if (ref $hash) {
+ $$hash{$first} = $rest;
+ }
+ else {
+ ${"opt_$first"} = $rest;
+ push( @EXPORT, "\$opt_$first" );
+ }
+ }
+ else {
+ if (ref $hash) {
+ $$hash{$first} = 1;
+ }
+ else {
+ ${"opt_$first"} = 1;
+ push( @EXPORT, "\$opt_$first" );
+ }
+ if ($rest ne '') {
+ $ARGV[0] = "-$rest";
+ }
+ else {
+ shift(@ARGV);
+ }
+ }
+ }
+ unless (ref $hash) {
+ local $Exporter::ExportLevel = 1;
+ import Getopt::Std;
+ }
+}
+
+sub output_h () {
+ return $OUTPUT_HELP_VERSION if defined $OUTPUT_HELP_VERSION;
+ return \*STDOUT if $STANDARD_HELP_VERSION;
+ return \*STDERR;
+}
+
+sub try_exit () {
+ exit 0 if $STANDARD_HELP_VERSION;
+ my $p = __PACKAGE__;
+ print {output_h()} <<EOM;
+ [Now continuing due to backward compatibility and excessive paranoia.
+ See ``perldoc $p'' about \$$p\::STANDARD_HELP_VERSION.]
+EOM
+}
+
+sub version_mess ($;$) {
+ my $args = shift;
+ my $h = output_h;
+ if (@_ and defined &main::VERSION_MESSAGE) {
+ main::VERSION_MESSAGE($h, __PACKAGE__, $VERSION, $args);
+ } else {
+ my $v = $main::VERSION;
+ $v = '[unknown]' unless defined $v;
+ my $myv = $VERSION;
+ $myv .= ' [paranoid]' unless $STANDARD_HELP_VERSION;
+ my $perlv = $];
+ $perlv = sprintf "%vd", $^V if $] >= 5.006;
+ print $h <<EOH;
+$0 version $v calling Getopt::Std::getopts (version $myv),
+running under Perl version $perlv.
+EOH
+ }
+}
+
+sub help_mess ($;$) {
+ my $args = shift;
+ my $h = output_h;
+ if (@_ and defined &main::HELP_MESSAGE) {
+ main::HELP_MESSAGE($h, __PACKAGE__, $VERSION, $args);
+ } else {
+ my (@witharg) = ($args =~ /(\S)\s*:/g);
+ my (@rest) = ($args =~ /([^\s:])(?!\s*:)/g);
+ my ($help, $arg) = ('', '');
+ if (@witharg) {
+ $help .= "\n\tWith arguments: -" . join " -", @witharg;
+ $arg = "\nSpace is not required between options and their arguments.";
+ }
+ if (@rest) {
+ $help .= "\n\tBoolean (without arguments): -" . join " -", @rest;
+ }
+ my ($scr) = ($0 =~ m,([^/\\]+)$,);
+ print $h <<EOH if @_; # Let the script override this
+
+Usage: $scr [-OPTIONS [-MORE_OPTIONS]] [--] [PROGRAM_ARG1 ...]
+EOH
+ print $h <<EOH;
+
+The following single-character options are accepted:$help
+
+Options may be merged together. -- stops processing of options.$arg
+EOH
+ my $has_pod;
+ if ( defined $0 and $0 ne '-e' and -f $0 and -r $0
+ and open my $script, '<', $0 ) {
+ while (<$script>) {
+ $has_pod = 1, last if /^=(pod|head1)/;
+ }
+ }
+ print $h <<EOH if $has_pod;
+
+For more details run
+ perldoc -F $0
+EOH
+ }
+}
+
+# Usage:
+# getopts('a:bc'); # -a takes arg. -b & -c not. Sets opt_* as a
+# # side effect.
+
+sub getopts ($;$) {
+ my ($argumentative, $hash) = @_;
+ my (@args,$first,$rest,$exit);
+ my $errs = 0;
+ local $_;
+ local @EXPORT;
+
+ @args = split( / */, $argumentative );
+ while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/s) {
+ ($first,$rest) = ($1,$2);
+ if (/^--$/) { # early exit if --
+ shift @ARGV;
+ last;
+ }
+ my $pos = index($argumentative,$first);
+ if ($pos >= 0) {
+ if (defined($args[$pos+1]) and ($args[$pos+1] eq ':')) {
+ shift(@ARGV);
+ if ($rest eq '') {
+ ++$errs unless @ARGV;
+ $rest = shift(@ARGV);
+ }
+ if (ref $hash) {
+ $$hash{$first} = $rest;
+ }
+ else {
+ ${"opt_$first"} = $rest;
+ push( @EXPORT, "\$opt_$first" );
+ }
+ }
+ else {
+ if (ref $hash) {
+ $$hash{$first} = 1;
+ }
+ else {
+ ${"opt_$first"} = 1;
+ push( @EXPORT, "\$opt_$first" );
+ }
+ if ($rest eq '') {
+ shift(@ARGV);
+ }
+ else {
+ $ARGV[0] = "-$rest";
+ }
+ }
+ }
+ else {
+ if ($first eq '-' and $rest eq 'help') {
+ version_mess($argumentative, 'main');
+ help_mess($argumentative, 'main');
+ try_exit();
+ shift(@ARGV);
+ next;
+ } elsif ($first eq '-' and $rest eq 'version') {
+ version_mess($argumentative, 'main');
+ try_exit();
+ shift(@ARGV);
+ next;
+ }
+ warn "Unknown option: $first\n";
+ ++$errs;
+ if ($rest ne '') {
+ $ARGV[0] = "-$rest";
+ }
+ else {
+ shift(@ARGV);
+ }
+ }
+ }
+ unless (ref $hash) {
+ local $Exporter::ExportLevel = 1;
+ import Getopt::Std;
+ }
+ $errs == 0;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/IO.pm b/Master/tlpkg/tlperl/lib/IO.pm
new file mode 100644
index 00000000000..9fccc3a7356
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO.pm
@@ -0,0 +1,68 @@
+#
+
+package IO;
+
+use XSLoader ();
+use Carp;
+use strict;
+use warnings;
+
+our $VERSION = "1.22";
+XSLoader::load 'IO', $VERSION;
+
+sub import {
+ shift;
+
+ warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated})
+ if @_ == 0 ;
+
+ my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
+
+ eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
+ or croak $@;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO - load various IO modules
+
+=head1 SYNOPSIS
+
+ use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File
+ use IO; # DEPRECATED
+
+=head1 DESCRIPTION
+
+C<IO> provides a simple mechanism to load several of the IO modules
+in one go. The IO modules belonging to the core are:
+
+ IO::Handle
+ IO::Seekable
+ IO::File
+ IO::Pipe
+ IO::Socket
+ IO::Dir
+ IO::Select
+ IO::Poll
+
+Some other IO modules don't belong to the perl core but can be loaded
+as well if they have been installed from CPAN. You can discover which
+ones exist by searching for "^IO::" on http://search.cpan.org.
+
+For more information on any of these modules, please see its respective
+documentation.
+
+=head1 DEPRECATED
+
+ use IO; # loads all the modules listed below
+
+The loaded modules are IO::Handle, IO::Seekable, IO::File, IO::Pipe,
+IO::Socket, IO::Dir. You should instead explicitly import the IO
+modules you want.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/IO/Dir.pm b/Master/tlpkg/tlperl/lib/IO/Dir.pm
new file mode 100644
index 00000000000..fccd02c088a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Dir.pm
@@ -0,0 +1,246 @@
+# IO::Dir.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Dir;
+
+use 5.006;
+
+use strict;
+use Carp;
+use Symbol;
+use Exporter;
+use IO::File;
+our(@ISA, $VERSION, @EXPORT_OK);
+use Tie::Hash;
+use File::stat;
+use File::Spec;
+
+@ISA = qw(Tie::Hash Exporter);
+$VERSION = "1.05";
+$VERSION = eval $VERSION;
+@EXPORT_OK = qw(DIR_UNLINK);
+
+sub DIR_UNLINK () { 1 }
+
+sub new {
+ @_ >= 1 && @_ <= 2 or croak 'usage: new IO::Dir [DIRNAME]';
+ my $class = shift;
+ my $dh = gensym;
+ if (@_) {
+ IO::Dir::open($dh, $_[0])
+ or return undef;
+ }
+ bless $dh, $class;
+}
+
+sub DESTROY {
+ my ($dh) = @_;
+ closedir($dh);
+}
+
+sub open {
+ @_ == 2 or croak 'usage: $dh->open(DIRNAME)';
+ my ($dh, $dirname) = @_;
+ return undef
+ unless opendir($dh, $dirname);
+ # a dir name should always have a ":" in it; assume dirname is
+ # in current directory
+ $dirname = ':' . $dirname if ( ($^O eq 'MacOS') && ($dirname !~ /:/) );
+ ${*$dh}{io_dir_path} = $dirname;
+ 1;
+}
+
+sub close {
+ @_ == 1 or croak 'usage: $dh->close()';
+ my ($dh) = @_;
+ closedir($dh);
+}
+
+sub read {
+ @_ == 1 or croak 'usage: $dh->read()';
+ my ($dh) = @_;
+ readdir($dh);
+}
+
+sub seek {
+ @_ == 2 or croak 'usage: $dh->seek(POS)';
+ my ($dh,$pos) = @_;
+ seekdir($dh,$pos);
+}
+
+sub tell {
+ @_ == 1 or croak 'usage: $dh->tell()';
+ my ($dh) = @_;
+ telldir($dh);
+}
+
+sub rewind {
+ @_ == 1 or croak 'usage: $dh->rewind()';
+ my ($dh) = @_;
+ rewinddir($dh);
+}
+
+sub TIEHASH {
+ my($class,$dir,$options) = @_;
+
+ my $dh = $class->new($dir)
+ or return undef;
+
+ $options ||= 0;
+
+ ${*$dh}{io_dir_unlink} = $options & DIR_UNLINK;
+ $dh;
+}
+
+sub FIRSTKEY {
+ my($dh) = @_;
+ $dh->rewind;
+ scalar $dh->read;
+}
+
+sub NEXTKEY {
+ my($dh) = @_;
+ scalar $dh->read;
+}
+
+sub EXISTS {
+ my($dh,$key) = @_;
+ -e File::Spec->catfile(${*$dh}{io_dir_path}, $key);
+}
+
+sub FETCH {
+ my($dh,$key) = @_;
+ &lstat(File::Spec->catfile(${*$dh}{io_dir_path}, $key));
+}
+
+sub STORE {
+ my($dh,$key,$data) = @_;
+ my($atime,$mtime) = ref($data) ? @$data : ($data,$data);
+ my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key);
+ unless(-e $file) {
+ my $io = IO::File->new($file,O_CREAT | O_RDWR);
+ $io->close if $io;
+ }
+ utime($atime,$mtime, $file);
+}
+
+sub DELETE {
+ my($dh,$key) = @_;
+
+ # Only unlink if unlink-ing is enabled
+ return 0
+ unless ${*$dh}{io_dir_unlink};
+
+ my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key);
+
+ -d $file
+ ? rmdir($file)
+ : unlink($file);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO::Dir - supply object methods for directory handles
+
+=head1 SYNOPSIS
+
+ use IO::Dir;
+ $d = IO::Dir->new(".");
+ if (defined $d) {
+ while (defined($_ = $d->read)) { something($_); }
+ $d->rewind;
+ while (defined($_ = $d->read)) { something_else($_); }
+ undef $d;
+ }
+
+ tie %dir, 'IO::Dir', ".";
+ foreach (keys %dir) {
+ print $_, " " , $dir{$_}->size,"\n";
+ }
+
+=head1 DESCRIPTION
+
+The C<IO::Dir> package provides two interfaces to perl's directory reading
+routines.
+
+The first interface is an object approach. C<IO::Dir> provides an object
+constructor and methods, which are just wrappers around perl's built in
+directory reading routines.
+
+=over 4
+
+=item new ( [ DIRNAME ] )
+
+C<new> is the constructor for C<IO::Dir> objects. It accepts one optional
+argument which, if given, C<new> will pass to C<open>
+
+=back
+
+The following methods are wrappers for the directory related functions built
+into perl (the trailing `dir' has been removed from the names). See L<perlfunc>
+for details of these functions.
+
+=over 4
+
+=item open ( DIRNAME )
+
+=item read ()
+
+=item seek ( POS )
+
+=item tell ()
+
+=item rewind ()
+
+=item close ()
+
+=back
+
+C<IO::Dir> also provides an interface to reading directories via a tied
+hash. The tied hash extends the interface beyond just the directory
+reading routines by the use of C<lstat>, from the C<File::stat> package,
+C<unlink>, C<rmdir> and C<utime>.
+
+=over 4
+
+=item tie %hash, 'IO::Dir', DIRNAME [, OPTIONS ]
+
+=back
+
+The keys of the hash will be the names of the entries in the directory.
+Reading a value from the hash will be the result of calling
+C<File::stat::lstat>. Deleting an element from the hash will
+delete the corresponding file or subdirectory,
+provided that C<DIR_UNLINK> is included in the C<OPTIONS>.
+
+Assigning to an entry in the hash will cause the time stamps of the file
+to be modified. If the file does not exist then it will be created. Assigning
+a single integer to a hash element will cause both the access and
+modification times to be changed to that value. Alternatively a reference to
+an array of two values can be passed. The first array element will be used to
+set the access time and the second element will be used to set the modification
+time.
+
+=head1 SEE ALSO
+
+L<File::stat>
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-2003 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/IO/File.pm b/Master/tlpkg/tlperl/lib/IO/File.pm
new file mode 100644
index 00000000000..e7cdbbed6d7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/File.pm
@@ -0,0 +1,208 @@
+#
+
+package IO::File;
+
+=head1 NAME
+
+IO::File - supply object methods for filehandles
+
+=head1 SYNOPSIS
+
+ use IO::File;
+
+ $fh = new IO::File;
+ if ($fh->open("< file")) {
+ print <$fh>;
+ $fh->close;
+ }
+
+ $fh = new IO::File "> file";
+ if (defined $fh) {
+ print $fh "bar\n";
+ $fh->close;
+ }
+
+ $fh = new IO::File "file", "r";
+ if (defined $fh) {
+ print <$fh>;
+ undef $fh; # automatically closes the file
+ }
+
+ $fh = new IO::File "file", O_WRONLY|O_APPEND;
+ if (defined $fh) {
+ print $fh "corge\n";
+
+ $pos = $fh->getpos;
+ $fh->setpos($pos);
+
+ undef $fh; # automatically closes the file
+ }
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
+these classes with methods that are specific to file handles.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( FILENAME [,MODE [,PERMS]] )
+
+Creates an C<IO::File>. If it receives any parameters, they are passed to
+the method C<open>; if the open fails, the object is destroyed. Otherwise,
+it is returned to the caller.
+
+=item new_tmpfile
+
+Creates an C<IO::File> opened for read/write on a newly created temporary
+file. On systems where this is possible, the temporary file is anonymous
+(i.e. it is unlinked after creation, but held open). If the temporary
+file cannot be created or opened, the C<IO::File> object is destroyed.
+Otherwise, it is returned to the caller.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item open( FILENAME [,MODE [,PERMS]] )
+
+=item open( FILENAME, IOLAYERS )
+
+C<open> accepts one, two or three parameters. With one parameter,
+it is just a front end for the built-in C<open> function. With two or three
+parameters, the first parameter is a filename that may include
+whitespace or other special characters, and the second parameter is
+the open mode, optionally followed by a file permission value.
+
+If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
+or an ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
+Perl C<open> operator (but protects any special characters).
+
+If C<IO::File::open> is given a numeric mode, it passes that mode
+and the optional permissions value to the Perl C<sysopen> operator.
+The permissions default to 0666.
+
+If C<IO::File::open> is given a mode that includes the C<:> character,
+it passes all the three arguments to the three-argument C<open> operator.
+
+For convenience, C<IO::File> exports the O_XXX constants from the
+Fcntl module, if this module is available.
+
+=item binmode( [LAYER] )
+
+C<binmode> sets C<binmode> on the underlying C<IO> object, as documented
+in C<perldoc -f binmode>.
+
+C<binmode> accepts one optional parameter, which is the layer to be
+passed on to the C<binmode> call.
+
+=back
+
+=head1 NOTE
+
+Some operating systems may perform C<IO::File::new()> or C<IO::File::open()>
+on a directory without errors. This behavior is not portable and not
+suggested for use. Using C<opendir()> and C<readdir()> or C<IO::Dir> are
+suggested instead.
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::Handle>,
+L<IO::Seekable>,
+L<IO::Dir>
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
+
+=cut
+
+use 5.006_001;
+use strict;
+our($VERSION, @EXPORT, @EXPORT_OK, @ISA);
+use Carp;
+use Symbol;
+use SelectSaver;
+use IO::Seekable;
+use File::Spec;
+
+require Exporter;
+
+@ISA = qw(IO::Handle IO::Seekable Exporter);
+
+$VERSION = "1.13";
+
+@EXPORT = @IO::Seekable::EXPORT;
+
+eval {
+ # Make all Fcntl O_XXX constants available for importing
+ require Fcntl;
+ my @O = grep /^O_/, @Fcntl::EXPORT;
+ Fcntl->import(@O); # first we import what we want to export
+ push(@EXPORT, @O);
+};
+
+################################################
+## Constructor
+##
+
+sub new {
+ my $type = shift;
+ my $class = ref($type) || $type || "IO::File";
+ @_ >= 0 && @_ <= 3
+ or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
+ my $fh = $class->SUPER::new();
+ if (@_) {
+ $fh->open(@_)
+ or return undef;
+ }
+ $fh;
+}
+
+################################################
+## Open
+##
+
+sub open {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
+ my ($fh, $file) = @_;
+ if (@_ > 2) {
+ my ($mode, $perms) = @_[2, 3];
+ if ($mode =~ /^\d+$/) {
+ defined $perms or $perms = 0666;
+ return sysopen($fh, $file, $mode, $perms);
+ } elsif ($mode =~ /:/) {
+ return open($fh, $mode, $file) if @_ == 3;
+ croak 'usage: $fh->open(FILENAME, IOLAYERS)';
+ }
+ if (defined($file) && length($file)
+ && ! File::Spec->file_name_is_absolute($file))
+ {
+ $file = File::Spec->rel2abs($file);
+ }
+ $file = IO::Handle::_open_mode_string($mode) . " $file\0";
+ }
+ open($fh, $file);
+}
+
+################################################
+## Binmode
+##
+
+sub binmode {
+ ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])';
+
+ my($fh, $layer) = @_;
+
+ return binmode $$fh unless $layer;
+ return binmode $$fh, $layer;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/IO/Handle.pm b/Master/tlpkg/tlperl/lib/IO/Handle.pm
new file mode 100644
index 00000000000..329d26ad198
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Handle.pm
@@ -0,0 +1,625 @@
+package IO::Handle;
+
+=head1 NAME
+
+IO::Handle - supply object methods for I/O handles
+
+=head1 SYNOPSIS
+
+ use IO::Handle;
+
+ $io = new IO::Handle;
+ if ($io->fdopen(fileno(STDIN),"r")) {
+ print $io->getline;
+ $io->close;
+ }
+
+ $io = new IO::Handle;
+ if ($io->fdopen(fileno(STDOUT),"w")) {
+ $io->print("Some text\n");
+ }
+
+ # setvbuf is not available by default on Perls 5.8.0 and later.
+ use IO::Handle '_IOLBF';
+ $io->setvbuf($buffer_var, _IOLBF, 1024);
+
+ undef $io; # automatically closes the file if it's open
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<IO::Handle> is the base class for all other IO handle classes. It is
+not intended that objects of C<IO::Handle> would be created directly,
+but instead C<IO::Handle> is inherited from by several other classes
+in the IO hierarchy.
+
+If you are reading this documentation, looking for a replacement for
+the C<FileHandle> package, then I suggest you read the documentation
+for C<IO::File> too.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ()
+
+Creates a new C<IO::Handle> object.
+
+=item new_from_fd ( FD, MODE )
+
+Creates an C<IO::Handle> like C<new> does.
+It requires two parameters, which are passed to the method C<fdopen>;
+if the fdopen fails, the object is destroyed. Otherwise, it is returned
+to the caller.
+
+=back
+
+=head1 METHODS
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<IO::Handle> methods, which are just front ends for the
+corresponding built-in functions:
+
+ $io->close
+ $io->eof
+ $io->fileno
+ $io->format_write( [FORMAT_NAME] )
+ $io->getc
+ $io->read ( BUF, LEN, [OFFSET] )
+ $io->print ( ARGS )
+ $io->printf ( FMT, [ARGS] )
+ $io->stat
+ $io->sysread ( BUF, LEN, [OFFSET] )
+ $io->syswrite ( BUF, [LEN, [OFFSET]] )
+ $io->truncate ( LEN )
+
+See L<perlvar> for complete descriptions of each of the following
+supported C<IO::Handle> methods. All of them return the previous
+value of the attribute and takes an optional single argument that when
+given will set the value. If no argument is given the previous value
+is unchanged (except for $io->autoflush will actually turn ON
+autoflush by default).
+
+ $io->autoflush ( [BOOL] ) $|
+ $io->format_page_number( [NUM] ) $%
+ $io->format_lines_per_page( [NUM] ) $=
+ $io->format_lines_left( [NUM] ) $-
+ $io->format_name( [STR] ) $~
+ $io->format_top_name( [STR] ) $^
+ $io->input_line_number( [NUM]) $.
+
+The following methods are not supported on a per-filehandle basis.
+
+ IO::Handle->format_line_break_characters( [STR] ) $:
+ IO::Handle->format_formfeed( [STR]) $^L
+ IO::Handle->output_field_separator( [STR] ) $,
+ IO::Handle->output_record_separator( [STR] ) $\
+
+ IO::Handle->input_record_separator( [STR] ) $/
+
+Furthermore, for doing normal I/O you might need these:
+
+=over 4
+
+=item $io->fdopen ( FD, MODE )
+
+C<fdopen> is like an ordinary C<open> except that its first parameter
+is not a filename but rather a file handle name, an IO::Handle object,
+or a file descriptor number.
+
+=item $io->opened
+
+Returns true if the object is currently a valid file descriptor, false
+otherwise.
+
+=item $io->getline
+
+This works like <$io> described in L<perlop/"I/O Operators">
+except that it's more readable and can be safely called in a
+list context but still returns just one line. If used as the conditional
++within a C<while> or C-style C<for> loop, however, you will need to
++emulate the functionality of <$io> with C<< defined($_ = $io->getline) >>.
+
+=item $io->getlines
+
+This works like <$io> when called in a list context to read all
+the remaining lines in a file, except that it's more readable.
+It will also croak() if accidentally called in a scalar context.
+
+=item $io->ungetc ( ORD )
+
+Pushes a character with the given ordinal value back onto the given
+handle's input stream. Only one character of pushback per handle is
+guaranteed.
+
+=item $io->write ( BUF, LEN [, OFFSET ] )
+
+This C<write> is like C<write> found in C, that is it is the
+opposite of read. The wrapper for the perl C<write> function is
+called C<format_write>.
+
+=item $io->error
+
+Returns a true value if the given handle has experienced any errors
+since it was opened or since the last call to C<clearerr>, or if the
+handle is invalid. It only returns false for a valid handle with no
+outstanding errors.
+
+=item $io->clearerr
+
+Clear the given handle's error indicator. Returns -1 if the handle is
+invalid, 0 otherwise.
+
+=item $io->sync
+
+C<sync> synchronizes a file's in-memory state with that on the
+physical medium. C<sync> does not operate at the perlio api level, but
+operates on the file descriptor (similar to sysread, sysseek and
+systell). This means that any data held at the perlio api level will not
+be synchronized. To synchronize data that is buffered at the perlio api
+level you must use the flush method. C<sync> is not implemented on all
+platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
+for an invalid handle. See L<fsync(3c)>.
+
+=item $io->flush
+
+C<flush> causes perl to flush any buffered data at the perlio api level.
+Any unread data in the buffer will be discarded, and any unwritten data
+will be written to the underlying file descriptor. Returns "0 but true"
+on success, C<undef> on error.
+
+=item $io->printflush ( ARGS )
+
+Turns on autoflush, print ARGS and then restores the autoflush status of the
+C<IO::Handle> object. Returns the return value from print.
+
+=item $io->blocking ( [ BOOL ] )
+
+If called with an argument C<blocking> will turn on non-blocking IO if
+C<BOOL> is false, and turn it off if C<BOOL> is true.
+
+C<blocking> will return the value of the previous setting, or the
+current setting if C<BOOL> is not given.
+
+If an error occurs C<blocking> will return undef and C<$!> will be set.
+
+=back
+
+
+If the C functions setbuf() and/or setvbuf() are available, then
+C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
+policy for an IO::Handle. The calling sequences for the Perl functions
+are the same as their C counterparts--including the constants C<_IOFBF>,
+C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
+specifies a scalar variable to use as a buffer. You should only
+change the buffer before any I/O, or immediately after calling flush.
+
+WARNING: The IO::Handle::setvbuf() is not available by default on
+Perls 5.8.0 and later because setvbuf() is rather specific to using
+the stdio library, while Perl prefers the new perlio subsystem instead.
+
+WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
+be modified> in any way until the IO::Handle is closed or C<setbuf> or
+C<setvbuf> is called again, or memory corruption may result! Remember that
+the order of global destruction is undefined, so even if your buffer
+variable remains in scope until program termination, it may be undefined
+before the file IO::Handle is closed. Note that you need to import the
+constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
+returns nothing. setvbuf returns "0 but true", on success, C<undef> on
+failure.
+
+Lastly, there is a special method for working under B<-T> and setuid/gid
+scripts:
+
+=over 4
+
+=item $io->untaint
+
+Marks the object as taint-clean, and as such data read from it will also
+be considered taint-clean. Note that this is a very trusting action to
+take, and appropriate consideration for the data source and potential
+vulnerability should be kept in mind. Returns 0 on success, -1 if setting
+the taint-clean flag failed. (eg invalid handle)
+
+=back
+
+=head1 NOTE
+
+An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
+the C<Symbol> package). Some modules that
+inherit from C<IO::Handle> may want to keep object related variables
+in the hash table part of the GLOB. In an attempt to prevent modules
+trampling on each other I propose the that any such module should prefix
+its variables with its own name separated by _'s. For example the IO::Socket
+module keeps a C<timeout> variable in 'io_socket_timeout'.
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::File>
+
+=head1 BUGS
+
+Due to backwards compatibility, all filehandles resemble objects
+of class C<IO::Handle>, or actually classes derived from that class.
+They actually aren't. Which means you can't derive your own
+class from C<IO::Handle> and inherit those methods.
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+
+=cut
+
+use 5.006_001;
+use strict;
+our($VERSION, @EXPORT_OK, @ISA);
+use Carp;
+use Symbol;
+use SelectSaver;
+use IO (); # Load the XS module
+
+require Exporter;
+@ISA = qw(Exporter);
+
+$VERSION = "1.25";
+$VERSION = eval $VERSION;
+
+@EXPORT_OK = qw(
+ autoflush
+ output_field_separator
+ output_record_separator
+ input_record_separator
+ input_line_number
+ format_page_number
+ format_lines_per_page
+ format_lines_left
+ format_name
+ format_top_name
+ format_line_break_characters
+ format_formfeed
+ format_write
+
+ print
+ printf
+ getline
+ getlines
+
+ printflush
+ flush
+
+ SEEK_SET
+ SEEK_CUR
+ SEEK_END
+ _IOFBF
+ _IOLBF
+ _IONBF
+);
+
+################################################
+## Constructors, destructors.
+##
+
+sub new {
+ my $class = ref($_[0]) || $_[0] || "IO::Handle";
+ @_ == 1 or croak "usage: new $class";
+ my $io = gensym;
+ bless $io, $class;
+}
+
+sub new_from_fd {
+ my $class = ref($_[0]) || $_[0] || "IO::Handle";
+ @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
+ my $io = gensym;
+ shift;
+ IO::Handle::fdopen($io, @_)
+ or return undef;
+ bless $io, $class;
+}
+
+#
+# There is no need for DESTROY to do anything, because when the
+# last reference to an IO object is gone, Perl automatically
+# closes its associated files (if any). However, to avoid any
+# attempts to autoload DESTROY, we here define it to do nothing.
+#
+sub DESTROY {}
+
+
+################################################
+## Open and close.
+##
+
+sub _open_mode_string {
+ my ($mode) = @_;
+ $mode =~ /^\+?(<|>>?)$/
+ or $mode =~ s/^r(\+?)$/$1</
+ or $mode =~ s/^w(\+?)$/$1>/
+ or $mode =~ s/^a(\+?)$/$1>>/
+ or croak "IO::Handle: bad open mode: $mode";
+ $mode;
+}
+
+sub fdopen {
+ @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
+ my ($io, $fd, $mode) = @_;
+ local(*GLOB);
+
+ if (ref($fd) && "".$fd =~ /GLOB\(/o) {
+ # It's a glob reference; Alias it as we cannot get name of anon GLOBs
+ my $n = qualify(*GLOB);
+ *GLOB = *{*$fd};
+ $fd = $n;
+ } elsif ($fd =~ m#^\d+$#) {
+ # It's an FD number; prefix with "=".
+ $fd = "=$fd";
+ }
+
+ open($io, _open_mode_string($mode) . '&' . $fd)
+ ? $io : undef;
+}
+
+sub close {
+ @_ == 1 or croak 'usage: $io->close()';
+ my($io) = @_;
+
+ close($io);
+}
+
+################################################
+## Normal I/O functions.
+##
+
+# flock
+# select
+
+sub opened {
+ @_ == 1 or croak 'usage: $io->opened()';
+ defined fileno($_[0]);
+}
+
+sub fileno {
+ @_ == 1 or croak 'usage: $io->fileno()';
+ fileno($_[0]);
+}
+
+sub getc {
+ @_ == 1 or croak 'usage: $io->getc()';
+ getc($_[0]);
+}
+
+sub eof {
+ @_ == 1 or croak 'usage: $io->eof()';
+ eof($_[0]);
+}
+
+sub print {
+ @_ or croak 'usage: $io->print(ARGS)';
+ my $this = shift;
+ print $this @_;
+}
+
+sub printf {
+ @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
+ my $this = shift;
+ printf $this @_;
+}
+
+sub getline {
+ @_ == 1 or croak 'usage: $io->getline()';
+ my $this = shift;
+ return scalar <$this>;
+}
+
+*gets = \&getline; # deprecated
+
+sub getlines {
+ @_ == 1 or croak 'usage: $io->getlines()';
+ wantarray or
+ croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
+ my $this = shift;
+ return <$this>;
+}
+
+sub truncate {
+ @_ == 2 or croak 'usage: $io->truncate(LEN)';
+ truncate($_[0], $_[1]);
+}
+
+sub read {
+ @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
+ read($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub sysread {
+ @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
+ sysread($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub write {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
+ local($\) = "";
+ $_[2] = length($_[1]) unless defined $_[2];
+ print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
+}
+
+sub syswrite {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
+ if (defined($_[2])) {
+ syswrite($_[0], $_[1], $_[2], $_[3] || 0);
+ } else {
+ syswrite($_[0], $_[1]);
+ }
+}
+
+sub stat {
+ @_ == 1 or croak 'usage: $io->stat()';
+ stat($_[0]);
+}
+
+################################################
+## State modification functions.
+##
+
+sub autoflush {
+ my $old = new SelectSaver qualify($_[0], caller);
+ my $prev = $|;
+ $| = @_ > 1 ? $_[1] : 1;
+ $prev;
+}
+
+sub output_field_separator {
+ carp "output_field_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $,;
+ $, = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub output_record_separator {
+ carp "output_record_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $\;
+ $\ = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub input_record_separator {
+ carp "input_record_separator is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $/;
+ $/ = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub input_line_number {
+ local $.;
+ () = tell qualify($_[0], caller) if ref($_[0]);
+ my $prev = $.;
+ $. = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_page_number {
+ my $old;
+ $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $%;
+ $% = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_lines_per_page {
+ my $old;
+ $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $=;
+ $= = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_lines_left {
+ my $old;
+ $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $-;
+ $- = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_name {
+ my $old;
+ $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $~;
+ $~ = qualify($_[1], caller) if @_ > 1;
+ $prev;
+}
+
+sub format_top_name {
+ my $old;
+ $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+ my $prev = $^;
+ $^ = qualify($_[1], caller) if @_ > 1;
+ $prev;
+}
+
+sub format_line_break_characters {
+ carp "format_line_break_characters is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $:;
+ $: = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub format_formfeed {
+ carp "format_formfeed is not supported on a per-handle basis"
+ if ref($_[0]);
+ my $prev = $^L;
+ $^L = $_[1] if @_ > 1;
+ $prev;
+}
+
+sub formline {
+ my $io = shift;
+ my $picture = shift;
+ local($^A) = $^A;
+ local($\) = "";
+ formline($picture, @_);
+ print $io $^A;
+}
+
+sub format_write {
+ @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
+ if (@_ == 2) {
+ my ($io, $fmt) = @_;
+ my $oldfmt = $io->format_name($fmt);
+ CORE::write($io);
+ $io->format_name($oldfmt);
+ } else {
+ CORE::write($_[0]);
+ }
+}
+
+# XXX undocumented
+sub fcntl {
+ @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
+ my ($io, $op) = @_;
+ return fcntl($io, $op, $_[2]);
+}
+
+# XXX undocumented
+sub ioctl {
+ @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
+ my ($io, $op) = @_;
+ return ioctl($io, $op, $_[2]);
+}
+
+# this sub is for compatability with older releases of IO that used
+# a sub called constant to detemine if a constant existed -- GMB
+#
+# The SEEK_* and _IO?BF constants were the only constants at that time
+# any new code should just chech defined(&CONSTANT_NAME)
+
+sub constant {
+ no strict 'refs';
+ my $name = shift;
+ (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
+ ? &{$name}() : undef;
+}
+
+
+# so that flush.pl can be deprecated
+
+sub printflush {
+ my $io = shift;
+ my $old;
+ $old = new SelectSaver qualify($io, caller) if ref($io);
+ local $| = 1;
+ if(ref($io)) {
+ print $io @_;
+ }
+ else {
+ print @_;
+ }
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/IO/Pipe.pm b/Master/tlpkg/tlperl/lib/IO/Pipe.pm
new file mode 100644
index 00000000000..827cc48bfcd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Pipe.pm
@@ -0,0 +1,257 @@
+# IO::Pipe.pm
+#
+# Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Pipe;
+
+use 5.006_001;
+
+use IO::Handle;
+use strict;
+our($VERSION);
+use Carp;
+use Symbol;
+
+$VERSION = "1.13";
+
+sub new {
+ my $type = shift;
+ my $class = ref($type) || $type || "IO::Pipe";
+ @_ == 0 || @_ == 2 or croak "usage: new $class [READFH, WRITEFH]";
+
+ my $me = bless gensym(), $class;
+
+ my($readfh,$writefh) = @_ ? @_ : $me->handles;
+
+ pipe($readfh, $writefh)
+ or return undef;
+
+ @{*$me} = ($readfh, $writefh);
+
+ $me;
+}
+
+sub handles {
+ @_ == 1 or croak 'usage: $pipe->handles()';
+ (IO::Pipe::End->new(), IO::Pipe::End->new());
+}
+
+my $do_spawn = $^O eq 'os2' || $^O eq 'MSWin32';
+
+sub _doit {
+ my $me = shift;
+ my $rw = shift;
+
+ my $pid = $do_spawn ? 0 : fork();
+
+ if($pid) { # Parent
+ return $pid;
+ }
+ elsif(defined $pid) { # Child or spawn
+ my $fh;
+ my $io = $rw ? \*STDIN : \*STDOUT;
+ my ($mode, $save) = $rw ? "r" : "w";
+ if ($do_spawn) {
+ require Fcntl;
+ $save = IO::Handle->new_from_fd($io, $mode);
+ my $handle = shift;
+ # Close in child:
+ unless ($^O eq 'MSWin32') {
+ fcntl($handle, Fcntl::F_SETFD(), 1) or croak "fcntl: $!";
+ }
+ $fh = $rw ? ${*$me}[0] : ${*$me}[1];
+ } else {
+ shift;
+ $fh = $rw ? $me->reader() : $me->writer(); # close the other end
+ }
+ bless $io, "IO::Handle";
+ $io->fdopen($fh, $mode);
+ $fh->close;
+
+ if ($do_spawn) {
+ $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
+ my $err = $!;
+
+ $io->fdopen($save, $mode);
+ $save->close or croak "Cannot close $!";
+ croak "IO::Pipe: Cannot spawn-NOWAIT: $err" if not $pid or $pid < 0;
+ return $pid;
+ } else {
+ exec @_ or
+ croak "IO::Pipe: Cannot exec: $!";
+ }
+ }
+ else {
+ croak "IO::Pipe: Cannot fork: $!";
+ }
+
+ # NOT Reached
+}
+
+sub reader {
+ @_ >= 1 or croak 'usage: $pipe->reader( [SUB_COMMAND_ARGS] )';
+ my $me = shift;
+
+ return undef
+ unless(ref($me) || ref($me = $me->new));
+
+ my $fh = ${*$me}[0];
+ my $pid;
+ $pid = $me->_doit(0, $fh, @_)
+ if(@_);
+
+ close ${*$me}[1];
+ bless $me, ref($fh);
+ *$me = *$fh; # Alias self to handle
+ $me->fdopen($fh->fileno,"r")
+ unless defined($me->fileno);
+ bless $fh; # Really wan't un-bless here
+ ${*$me}{'io_pipe_pid'} = $pid
+ if defined $pid;
+
+ $me;
+}
+
+sub writer {
+ @_ >= 1 or croak 'usage: $pipe->writer( [SUB_COMMAND_ARGS] )';
+ my $me = shift;
+
+ return undef
+ unless(ref($me) || ref($me = $me->new));
+
+ my $fh = ${*$me}[1];
+ my $pid;
+ $pid = $me->_doit(1, $fh, @_)
+ if(@_);
+
+ close ${*$me}[0];
+ bless $me, ref($fh);
+ *$me = *$fh; # Alias self to handle
+ $me->fdopen($fh->fileno,"w")
+ unless defined($me->fileno);
+ bless $fh; # Really wan't un-bless here
+ ${*$me}{'io_pipe_pid'} = $pid
+ if defined $pid;
+
+ $me;
+}
+
+package IO::Pipe::End;
+
+our(@ISA);
+
+@ISA = qw(IO::Handle);
+
+sub close {
+ my $fh = shift;
+ my $r = $fh->SUPER::close(@_);
+
+ waitpid(${*$fh}{'io_pipe_pid'},0)
+ if(defined ${*$fh}{'io_pipe_pid'});
+
+ $r;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO::Pipe - supply object methods for pipes
+
+=head1 SYNOPSIS
+
+ use IO::Pipe;
+
+ $pipe = new IO::Pipe;
+
+ if($pid = fork()) { # Parent
+ $pipe->reader();
+
+ while(<$pipe>) {
+ ...
+ }
+
+ }
+ elsif(defined $pid) { # Child
+ $pipe->writer();
+
+ print $pipe ...
+ }
+
+ or
+
+ $pipe = new IO::Pipe;
+
+ $pipe->reader(qw(ls -l));
+
+ while(<$pipe>) {
+ ...
+ }
+
+=head1 DESCRIPTION
+
+C<IO::Pipe> provides an interface to creating pipes between
+processes.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [READER, WRITER] )
+
+Creates an C<IO::Pipe>, which is a reference to a newly created symbol
+(see the C<Symbol> package). C<IO::Pipe::new> optionally takes two
+arguments, which should be objects blessed into C<IO::Handle>, or a
+subclass thereof. These two objects will be used for the system call
+to C<pipe>. If no arguments are given then method C<handles> is called
+on the new C<IO::Pipe> object.
+
+These two handles are held in the array part of the GLOB until either
+C<reader> or C<writer> is called.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item reader ([ARGS])
+
+The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
+handle at the reading end of the pipe. If C<ARGS> are given then C<fork>
+is called and C<ARGS> are passed to exec.
+
+=item writer ([ARGS])
+
+The object is re-blessed into a sub-class of C<IO::Handle>, and becomes a
+handle at the writing end of the pipe. If C<ARGS> are given then C<fork>
+is called and C<ARGS> are passed to exec.
+
+=item handles ()
+
+This method is called during construction by C<IO::Pipe::new>
+on the newly created C<IO::Pipe> object. It returns an array of two objects
+blessed into C<IO::Pipe::End>, or a subclass thereof.
+
+=back
+
+=head1 SEE ALSO
+
+L<IO::Handle>
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/IO/Poll.pm b/Master/tlpkg/tlperl/lib/IO/Poll.pm
new file mode 100644
index 00000000000..e7fb0135069
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Poll.pm
@@ -0,0 +1,209 @@
+
+# IO::Poll.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Poll;
+
+use strict;
+use IO::Handle;
+use Exporter ();
+our(@ISA, @EXPORT_OK, @EXPORT, $VERSION);
+
+@ISA = qw(Exporter);
+$VERSION = "0.07";
+
+@EXPORT = qw( POLLIN
+ POLLOUT
+ POLLERR
+ POLLHUP
+ POLLNVAL
+ );
+
+@EXPORT_OK = qw(
+ POLLPRI
+ POLLRDNORM
+ POLLWRNORM
+ POLLRDBAND
+ POLLWRBAND
+ POLLNORM
+ );
+
+# [0] maps fd's to requested masks
+# [1] maps fd's to returned masks
+# [2] maps fd's to handles
+sub new {
+ my $class = shift;
+
+ my $self = bless [{},{},{}], $class;
+
+ $self;
+}
+
+sub mask {
+ my $self = shift;
+ my $io = shift;
+ my $fd = fileno($io);
+ return unless defined $fd;
+ if (@_) {
+ my $mask = shift;
+ if($mask) {
+ $self->[0]{$fd}{$io} = $mask; # the error events are always returned
+ $self->[1]{$fd} = 0; # output mask
+ $self->[2]{$io} = $io; # remember handle
+ } else {
+ delete $self->[0]{$fd}{$io};
+ unless(%{$self->[0]{$fd}}) {
+ # We no longer have any handles for this FD
+ delete $self->[1]{$fd};
+ delete $self->[0]{$fd};
+ }
+ delete $self->[2]{$io};
+ }
+ }
+
+ return unless exists $self->[0]{$fd} and exists $self->[0]{$fd}{$io};
+ return $self->[0]{$fd}{$io};
+}
+
+
+sub poll {
+ my($self,$timeout) = @_;
+
+ $self->[1] = {};
+
+ my($fd,$mask,$iom);
+ my @poll = ();
+
+ while(($fd,$iom) = each %{$self->[0]}) {
+ $mask = 0;
+ $mask |= $_ for values(%$iom);
+ push(@poll,$fd => $mask);
+ }
+
+ my $ret = @poll ? _poll(defined($timeout) ? $timeout * 1000 : -1,@poll) : 0;
+
+ return $ret
+ unless $ret > 0;
+
+ while(@poll) {
+ my($fd,$got) = splice(@poll,0,2);
+ $self->[1]{$fd} = $got if $got;
+ }
+
+ return $ret;
+}
+
+sub events {
+ my $self = shift;
+ my $io = shift;
+ my $fd = fileno($io);
+ exists $self->[1]{$fd} and exists $self->[0]{$fd}{$io}
+ ? $self->[1]{$fd} & ($self->[0]{$fd}{$io}|POLLHUP|POLLERR|POLLNVAL)
+ : 0;
+}
+
+sub remove {
+ my $self = shift;
+ my $io = shift;
+ $self->mask($io,0);
+}
+
+sub handles {
+ my $self = shift;
+ return values %{$self->[2]} unless @_;
+
+ my $events = shift || 0;
+ my($fd,$ev,$io,$mask);
+ my @handles = ();
+
+ while(($fd,$ev) = each %{$self->[1]}) {
+ while (($io,$mask) = each %{$self->[0]{$fd}}) {
+ $mask |= POLLHUP|POLLERR|POLLNVAL; # must allow these
+ push @handles,$self->[2]{$io} if ($ev & $mask) & $events;
+ }
+ }
+ return @handles;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO::Poll - Object interface to system poll call
+
+=head1 SYNOPSIS
+
+ use IO::Poll qw(POLLRDNORM POLLWRNORM POLLIN POLLHUP);
+
+ $poll = new IO::Poll;
+
+ $poll->mask($input_handle => POLLIN);
+ $poll->mask($output_handle => POLLOUT);
+
+ $poll->poll($timeout);
+
+ $ev = $poll->events($input);
+
+=head1 DESCRIPTION
+
+C<IO::Poll> is a simple interface to the system level poll routine.
+
+=head1 METHODS
+
+=over 4
+
+=item mask ( IO [, EVENT_MASK ] )
+
+If EVENT_MASK is given, then, if EVENT_MASK is non-zero, IO is added to the
+list of file descriptors and the next call to poll will check for
+any event specified in EVENT_MASK. If EVENT_MASK is zero then IO will be
+removed from the list of file descriptors.
+
+If EVENT_MASK is not given then the return value will be the current
+event mask value for IO.
+
+=item poll ( [ TIMEOUT ] )
+
+Call the system level poll routine. If TIMEOUT is not specified then the
+call will block. Returns the number of handles which had events
+happen, or -1 on error.
+
+=item events ( IO )
+
+Returns the event mask which represents the events that happened on IO
+during the last call to C<poll>.
+
+=item remove ( IO )
+
+Remove IO from the list of file descriptors for the next poll.
+
+=item handles( [ EVENT_MASK ] )
+
+Returns a list of handles. If EVENT_MASK is not given then a list of all
+handles known will be returned. If EVENT_MASK is given then a list
+of handles will be returned which had one of the events specified by
+EVENT_MASK happen during the last call ti C<poll>
+
+=back
+
+=head1 SEE ALSO
+
+L<poll(2)>, L<IO::Handle>, L<IO::Select>
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/IO/Seekable.pm b/Master/tlpkg/tlperl/lib/IO/Seekable.pm
new file mode 100644
index 00000000000..db1effda287
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Seekable.pm
@@ -0,0 +1,128 @@
+#
+
+package IO::Seekable;
+
+=head1 NAME
+
+IO::Seekable - supply seek based methods for I/O objects
+
+=head1 SYNOPSIS
+
+ use IO::Seekable;
+ package IO::Something;
+ @ISA = qw(IO::Seekable);
+
+=head1 DESCRIPTION
+
+C<IO::Seekable> does not have a constructor of its own as it is intended to
+be inherited by other C<IO::Handle> based objects. It provides methods
+which allow seeking of the file descriptors.
+
+=over 4
+
+=item $io->getpos
+
+Returns an opaque value that represents the current position of the
+IO::File, or C<undef> if this is not possible (eg an unseekable stream such
+as a terminal, pipe or socket). If the fgetpos() function is available in
+your C library it is used to implements getpos, else perl emulates getpos
+using C's ftell() function.
+
+=item $io->setpos
+
+Uses the value of a previous getpos call to return to a previously visited
+position. Returns "0 but true" on success, C<undef> on failure.
+
+=back
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<IO::Seekable> methods, which are just front ends for the
+corresponding built-in functions:
+
+=over 4
+
+=item $io->seek ( POS, WHENCE )
+
+Seek the IO::File to position POS, relative to WHENCE:
+
+=over 8
+
+=item WHENCE=0 (SEEK_SET)
+
+POS is absolute position. (Seek relative to the start of the file)
+
+=item WHENCE=1 (SEEK_CUR)
+
+POS is an offset from the current position. (Seek relative to current)
+
+=item WHENCE=2 (SEEK_END)
+
+POS is an offset from the end of the file. (Seek relative to end)
+
+=back
+
+The SEEK_* constants can be imported from the C<Fcntl> module if you
+don't wish to use the numbers C<0> C<1> or C<2> in your code.
+
+Returns C<1> upon success, C<0> otherwise.
+
+=item $io->sysseek( POS, WHENCE )
+
+Similar to $io->seek, but sets the IO::File's position using the system
+call lseek(2) directly, so will confuse most perl IO operators except
+sysread and syswrite (see L<perlfunc> for full details)
+
+Returns the new position, or C<undef> on failure. A position
+of zero is returned as the string C<"0 but true">
+
+=item $io->tell
+
+Returns the IO::File's current position, or -1 on error.
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::Handle>
+L<IO::File>
+
+=head1 HISTORY
+
+Derived from FileHandle.pm by Graham Barr E<lt>gbarr@pobox.comE<gt>
+
+=cut
+
+use 5.006_001;
+use Carp;
+use strict;
+our($VERSION, @EXPORT, @ISA);
+use IO::Handle ();
+# XXX we can't get these from IO::Handle or we'll get prototype
+# mismatch warnings on C<use POSIX; use IO::File;> :-(
+use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END);
+require Exporter;
+
+@EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
+@ISA = qw(Exporter);
+
+$VERSION = "1.10";
+$VERSION = eval $VERSION;
+
+sub seek {
+ @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
+ seek($_[0], $_[1], $_[2]);
+}
+
+sub sysseek {
+ @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)';
+ sysseek($_[0], $_[1], $_[2]);
+}
+
+sub tell {
+ @_ == 1 or croak 'usage: $io->tell()';
+ tell($_[0]);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/IO/Select.pm b/Master/tlpkg/tlperl/lib/IO/Select.pm
new file mode 100644
index 00000000000..fc05fe70e9c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Select.pm
@@ -0,0 +1,381 @@
+# IO::Select.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Select;
+
+use strict;
+use warnings::register;
+use vars qw($VERSION @ISA);
+require Exporter;
+
+$VERSION = "1.17";
+
+@ISA = qw(Exporter); # This is only so we can do version checking
+
+sub VEC_BITS () {0}
+sub FD_COUNT () {1}
+sub FIRST_FD () {2}
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+
+ my $vec = bless [undef,0], $type;
+
+ $vec->add(@_)
+ if @_;
+
+ $vec;
+}
+
+sub add
+{
+ shift->_update('add', @_);
+}
+
+
+sub remove
+{
+ shift->_update('remove', @_);
+}
+
+
+sub exists
+{
+ my $vec = shift;
+ my $fno = $vec->_fileno(shift);
+ return undef unless defined $fno;
+ $vec->[$fno + FIRST_FD];
+}
+
+
+sub _fileno
+{
+ my($self, $f) = @_;
+ return unless defined $f;
+ $f = $f->[0] if ref($f) eq 'ARRAY';
+ ($f =~ /^\d+$/) ? $f : fileno($f);
+}
+
+sub _update
+{
+ my $vec = shift;
+ my $add = shift eq 'add';
+
+ my $bits = $vec->[VEC_BITS];
+ $bits = '' unless defined $bits;
+
+ my $count = 0;
+ my $f;
+ foreach $f (@_)
+ {
+ my $fn = $vec->_fileno($f);
+ next unless defined $fn;
+ my $i = $fn + FIRST_FD;
+ if ($add) {
+ if (defined $vec->[$i]) {
+ $vec->[$i] = $f; # if array rest might be different, so we update
+ next;
+ }
+ $vec->[FD_COUNT]++;
+ vec($bits, $fn, 1) = 1;
+ $vec->[$i] = $f;
+ } else { # remove
+ next unless defined $vec->[$i];
+ $vec->[FD_COUNT]--;
+ vec($bits, $fn, 1) = 0;
+ $vec->[$i] = undef;
+ }
+ $count++;
+ }
+ $vec->[VEC_BITS] = $vec->[FD_COUNT] ? $bits : undef;
+ $count;
+}
+
+sub can_read
+{
+ my $vec = shift;
+ my $timeout = shift;
+ my $r = $vec->[VEC_BITS];
+
+ defined($r) && (select($r,undef,undef,$timeout) > 0)
+ ? handles($vec, $r)
+ : ();
+}
+
+sub can_write
+{
+ my $vec = shift;
+ my $timeout = shift;
+ my $w = $vec->[VEC_BITS];
+
+ defined($w) && (select(undef,$w,undef,$timeout) > 0)
+ ? handles($vec, $w)
+ : ();
+}
+
+sub has_exception
+{
+ my $vec = shift;
+ my $timeout = shift;
+ my $e = $vec->[VEC_BITS];
+
+ defined($e) && (select(undef,undef,$e,$timeout) > 0)
+ ? handles($vec, $e)
+ : ();
+}
+
+sub has_error
+{
+ warnings::warn("Call to deprecated method 'has_error', use 'has_exception'")
+ if warnings::enabled();
+ goto &has_exception;
+}
+
+sub count
+{
+ my $vec = shift;
+ $vec->[FD_COUNT];
+}
+
+sub bits
+{
+ my $vec = shift;
+ $vec->[VEC_BITS];
+}
+
+sub as_string # for debugging
+{
+ my $vec = shift;
+ my $str = ref($vec) . ": ";
+ my $bits = $vec->bits;
+ my $count = $vec->count;
+ $str .= defined($bits) ? unpack("b*", $bits) : "undef";
+ $str .= " $count";
+ my @handles = @$vec;
+ splice(@handles, 0, FIRST_FD);
+ for (@handles) {
+ $str .= " " . (defined($_) ? "$_" : "-");
+ }
+ $str;
+}
+
+sub _max
+{
+ my($a,$b,$c) = @_;
+ $a > $b
+ ? $a > $c
+ ? $a
+ : $c
+ : $b > $c
+ ? $b
+ : $c;
+}
+
+sub select
+{
+ shift
+ if defined $_[0] && !ref($_[0]);
+
+ my($r,$w,$e,$t) = @_;
+ my @result = ();
+
+ my $rb = defined $r ? $r->[VEC_BITS] : undef;
+ my $wb = defined $w ? $w->[VEC_BITS] : undef;
+ my $eb = defined $e ? $e->[VEC_BITS] : undef;
+
+ if(select($rb,$wb,$eb,$t) > 0)
+ {
+ my @r = ();
+ my @w = ();
+ my @e = ();
+ my $i = _max(defined $r ? scalar(@$r)-1 : 0,
+ defined $w ? scalar(@$w)-1 : 0,
+ defined $e ? scalar(@$e)-1 : 0);
+
+ for( ; $i >= FIRST_FD ; $i--)
+ {
+ my $j = $i - FIRST_FD;
+ push(@r, $r->[$i])
+ if defined $rb && defined $r->[$i] && vec($rb, $j, 1);
+ push(@w, $w->[$i])
+ if defined $wb && defined $w->[$i] && vec($wb, $j, 1);
+ push(@e, $e->[$i])
+ if defined $eb && defined $e->[$i] && vec($eb, $j, 1);
+ }
+
+ @result = (\@r, \@w, \@e);
+ }
+ @result;
+}
+
+
+sub handles
+{
+ my $vec = shift;
+ my $bits = shift;
+ my @h = ();
+ my $i;
+ my $max = scalar(@$vec) - 1;
+
+ for ($i = FIRST_FD; $i <= $max; $i++)
+ {
+ next unless defined $vec->[$i];
+ push(@h, $vec->[$i])
+ if !defined($bits) || vec($bits, $i - FIRST_FD, 1);
+ }
+
+ @h;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+IO::Select - OO interface to the select system call
+
+=head1 SYNOPSIS
+
+ use IO::Select;
+
+ $s = IO::Select->new();
+
+ $s->add(\*STDIN);
+ $s->add($some_handle);
+
+ @ready = $s->can_read($timeout);
+
+ @ready = IO::Select->new(@handles)->can_read(0);
+
+=head1 DESCRIPTION
+
+The C<IO::Select> package implements an object approach to the system C<select>
+function call. It allows the user to see what IO handles, see L<IO::Handle>,
+are ready for reading, writing or have an exception pending.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ HANDLES ] )
+
+The constructor creates a new object and optionally initialises it with a set
+of handles.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item add ( HANDLES )
+
+Add the list of handles to the C<IO::Select> object. It is these values that
+will be returned when an event occurs. C<IO::Select> keeps these values in a
+cache which is indexed by the C<fileno> of the handle, so if more than one
+handle with the same C<fileno> is specified then only the last one is cached.
+
+Each handle can be an C<IO::Handle> object, an integer or an array
+reference where the first element is an C<IO::Handle> or an integer.
+
+=item remove ( HANDLES )
+
+Remove all the given handles from the object. This method also works
+by the C<fileno> of the handles. So the exact handles that were added
+need not be passed, just handles that have an equivalent C<fileno>
+
+=item exists ( HANDLE )
+
+Returns a true value (actually the handle itself) if it is present.
+Returns undef otherwise.
+
+=item handles
+
+Return an array of all registered handles.
+
+=item can_read ( [ TIMEOUT ] )
+
+Return an array of handles that are ready for reading. C<TIMEOUT> is
+the maximum amount of time to wait before returning an empty list, in
+seconds, possibly fractional. If C<TIMEOUT> is not given and any
+handles are registered then the call will block.
+
+=item can_write ( [ TIMEOUT ] )
+
+Same as C<can_read> except check for handles that can be written to.
+
+=item has_exception ( [ TIMEOUT ] )
+
+Same as C<can_read> except check for handles that have an exception
+condition, for example pending out-of-band data.
+
+=item count ()
+
+Returns the number of handles that the object will check for when
+one of the C<can_> methods is called or the object is passed to
+the C<select> static method.
+
+=item bits()
+
+Return the bit string suitable as argument to the core select() call.
+
+=item select ( READ, WRITE, EXCEPTION [, TIMEOUT ] )
+
+C<select> is a static method, that is you call it with the package name
+like C<new>. C<READ>, C<WRITE> and C<EXCEPTION> are either C<undef> or
+C<IO::Select> objects. C<TIMEOUT> is optional and has the same effect as
+for the core select call.
+
+The result will be an array of 3 elements, each a reference to an array
+which will hold the handles that are ready for reading, writing and have
+exceptions respectively. Upon error an empty list is returned.
+
+=back
+
+=head1 EXAMPLE
+
+Here is a short example which shows how C<IO::Select> could be used
+to write a server which communicates with several sockets while also
+listening for more connections on a listen socket
+
+ use IO::Select;
+ use IO::Socket;
+
+ $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
+ $sel = new IO::Select( $lsn );
+
+ while(@ready = $sel->can_read) {
+ foreach $fh (@ready) {
+ if($fh == $lsn) {
+ # Create a new socket
+ $new = $lsn->accept;
+ $sel->add($new);
+ }
+ else {
+ # Process socket
+
+ # Maybe we have finished with the socket
+ $sel->remove($fh);
+ $fh->close;
+ }
+ }
+ }
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/IO/Socket.pm b/Master/tlpkg/tlperl/lib/IO/Socket.pm
new file mode 100644
index 00000000000..4429f2bb3e6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Socket.pm
@@ -0,0 +1,476 @@
+# IO::Socket.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket;
+
+require 5.006;
+
+use IO::Handle;
+use Socket 1.3;
+use Carp;
+use strict;
+our(@ISA, $VERSION, @EXPORT_OK);
+use Exporter;
+use Errno;
+
+# legacy
+
+require IO::Socket::INET;
+require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
+
+@ISA = qw(IO::Handle);
+
+$VERSION = "1.29";
+
+@EXPORT_OK = qw(sockatmark);
+
+sub import {
+ my $pkg = shift;
+ if (@_ && $_[0] eq 'sockatmark') { # not very extensible but for now, fast
+ Exporter::export_to_level('IO::Socket', 1, $pkg, 'sockatmark');
+ } else {
+ my $callpkg = caller;
+ Exporter::export 'Socket', $callpkg, @_;
+ }
+}
+
+sub new {
+ my($class,%arg) = @_;
+ my $sock = $class->SUPER::new();
+
+ $sock->autoflush(1);
+
+ ${*$sock}{'io_socket_timeout'} = delete $arg{Timeout};
+
+ return scalar(%arg) ? $sock->configure(\%arg)
+ : $sock;
+}
+
+my @domain2pkg;
+
+sub register_domain {
+ my($p,$d) = @_;
+ $domain2pkg[$d] = $p;
+}
+
+sub configure {
+ my($sock,$arg) = @_;
+ my $domain = delete $arg->{Domain};
+
+ croak 'IO::Socket: Cannot configure a generic socket'
+ unless defined $domain;
+
+ croak "IO::Socket: Unsupported socket domain"
+ unless defined $domain2pkg[$domain];
+
+ croak "IO::Socket: Cannot configure socket in domain '$domain'"
+ unless ref($sock) eq "IO::Socket";
+
+ bless($sock, $domain2pkg[$domain]);
+ $sock->configure($arg);
+}
+
+sub socket {
+ @_ == 4 or croak 'usage: $sock->socket(DOMAIN, TYPE, PROTOCOL)';
+ my($sock,$domain,$type,$protocol) = @_;
+
+ socket($sock,$domain,$type,$protocol) or
+ return undef;
+
+ ${*$sock}{'io_socket_domain'} = $domain;
+ ${*$sock}{'io_socket_type'} = $type;
+ ${*$sock}{'io_socket_proto'} = $protocol;
+
+ $sock;
+}
+
+sub socketpair {
+ @_ == 4 || croak 'usage: IO::Socket->socketpair(DOMAIN, TYPE, PROTOCOL)';
+ my($class,$domain,$type,$protocol) = @_;
+ my $sock1 = $class->new();
+ my $sock2 = $class->new();
+
+ socketpair($sock1,$sock2,$domain,$type,$protocol) or
+ return ();
+
+ ${*$sock1}{'io_socket_type'} = ${*$sock2}{'io_socket_type'} = $type;
+ ${*$sock1}{'io_socket_proto'} = ${*$sock2}{'io_socket_proto'} = $protocol;
+
+ ($sock1,$sock2);
+}
+
+sub connect {
+ @_ == 2 or croak 'usage: $sock->connect(NAME)';
+ my $sock = shift;
+ my $addr = shift;
+ my $timeout = ${*$sock}{'io_socket_timeout'};
+ my $err;
+ my $blocking;
+
+ $blocking = $sock->blocking(0) if $timeout;
+ if (!connect($sock, $addr)) {
+ if (defined $timeout && $!{EINPROGRESS}) {
+ require IO::Select;
+
+ my $sel = new IO::Select $sock;
+
+ if (!$sel->can_write($timeout)) {
+ $err = $! || (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
+ $@ = "connect: timeout";
+ }
+ elsif (!connect($sock,$addr) && not $!{EISCONN}) {
+ # Some systems refuse to re-connect() to
+ # an already open socket and set errno to EISCONN.
+ $err = $!;
+ $@ = "connect: $!";
+ }
+ }
+ elsif ($blocking || !$!{EINPROGRESS}) {
+ $err = $!;
+ $@ = "connect: $!";
+ }
+ }
+
+ $sock->blocking(1) if $blocking;
+
+ $! = $err if $err;
+
+ $err ? undef : $sock;
+}
+
+sub bind {
+ @_ == 2 or croak 'usage: $sock->bind(NAME)';
+ my $sock = shift;
+ my $addr = shift;
+
+ return bind($sock, $addr) ? $sock
+ : undef;
+}
+
+sub listen {
+ @_ >= 1 && @_ <= 2 or croak 'usage: $sock->listen([QUEUE])';
+ my($sock,$queue) = @_;
+ $queue = 5
+ unless $queue && $queue > 0;
+
+ return listen($sock, $queue) ? $sock
+ : undef;
+}
+
+sub accept {
+ @_ == 1 || @_ == 2 or croak 'usage $sock->accept([PKG])';
+ my $sock = shift;
+ my $pkg = shift || $sock;
+ my $timeout = ${*$sock}{'io_socket_timeout'};
+ my $new = $pkg->new(Timeout => $timeout);
+ my $peer = undef;
+
+ if(defined $timeout) {
+ require IO::Select;
+
+ my $sel = new IO::Select $sock;
+
+ unless ($sel->can_read($timeout)) {
+ $@ = 'accept: timeout';
+ $! = (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
+ return;
+ }
+ }
+
+ $peer = accept($new,$sock)
+ or return;
+
+ return wantarray ? ($new, $peer)
+ : $new;
+}
+
+sub sockname {
+ @_ == 1 or croak 'usage: $sock->sockname()';
+ getsockname($_[0]);
+}
+
+sub peername {
+ @_ == 1 or croak 'usage: $sock->peername()';
+ my($sock) = @_;
+ getpeername($sock)
+ || ${*$sock}{'io_socket_peername'}
+ || undef;
+}
+
+sub connected {
+ @_ == 1 or croak 'usage: $sock->connected()';
+ my($sock) = @_;
+ getpeername($sock);
+}
+
+sub send {
+ @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
+ my $sock = $_[0];
+ my $flags = $_[2] || 0;
+ my $peer = $_[3] || $sock->peername;
+
+ croak 'send: Cannot determine peer address'
+ unless($peer);
+
+ my $r = defined(getpeername($sock))
+ ? send($sock, $_[1], $flags)
+ : send($sock, $_[1], $flags, $peer);
+
+ # remember who we send to, if it was successful
+ ${*$sock}{'io_socket_peername'} = $peer
+ if(@_ == 4 && defined $r);
+
+ $r;
+}
+
+sub recv {
+ @_ == 3 || @_ == 4 or croak 'usage: $sock->recv(BUF, LEN [, FLAGS])';
+ my $sock = $_[0];
+ my $len = $_[2];
+ my $flags = $_[3] || 0;
+
+ # remember who we recv'd from
+ ${*$sock}{'io_socket_peername'} = recv($sock, $_[1]='', $len, $flags);
+}
+
+sub shutdown {
+ @_ == 2 or croak 'usage: $sock->shutdown(HOW)';
+ my($sock, $how) = @_;
+ shutdown($sock, $how);
+}
+
+sub setsockopt {
+ @_ == 4 or croak '$sock->setsockopt(LEVEL, OPTNAME)';
+ setsockopt($_[0],$_[1],$_[2],$_[3]);
+}
+
+my $intsize = length(pack("i",0));
+
+sub getsockopt {
+ @_ == 3 or croak '$sock->getsockopt(LEVEL, OPTNAME)';
+ my $r = getsockopt($_[0],$_[1],$_[2]);
+ # Just a guess
+ $r = unpack("i", $r)
+ if(defined $r && length($r) == $intsize);
+ $r;
+}
+
+sub sockopt {
+ my $sock = shift;
+ @_ == 1 ? $sock->getsockopt(SOL_SOCKET,@_)
+ : $sock->setsockopt(SOL_SOCKET,@_);
+}
+
+sub atmark {
+ @_ == 1 or croak 'usage: $sock->atmark()';
+ my($sock) = @_;
+ sockatmark($sock);
+}
+
+sub timeout {
+ @_ == 1 || @_ == 2 or croak 'usage: $sock->timeout([VALUE])';
+ my($sock,$val) = @_;
+ my $r = ${*$sock}{'io_socket_timeout'};
+
+ ${*$sock}{'io_socket_timeout'} = defined $val ? 0 + $val : $val
+ if(@_ == 2);
+
+ $r;
+}
+
+sub sockdomain {
+ @_ == 1 or croak 'usage: $sock->sockdomain()';
+ my $sock = shift;
+ ${*$sock}{'io_socket_domain'};
+}
+
+sub socktype {
+ @_ == 1 or croak 'usage: $sock->socktype()';
+ my $sock = shift;
+ ${*$sock}{'io_socket_type'}
+}
+
+sub protocol {
+ @_ == 1 or croak 'usage: $sock->protocol()';
+ my($sock) = @_;
+ ${*$sock}{'io_socket_proto'};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO::Socket - Object interface to socket communications
+
+=head1 SYNOPSIS
+
+ use IO::Socket;
+
+=head1 DESCRIPTION
+
+C<IO::Socket> provides an object interface to creating and using sockets. It
+is built upon the L<IO::Handle> interface and inherits all the methods defined
+by L<IO::Handle>.
+
+C<IO::Socket> only defines methods for those operations which are common to all
+types of socket. Operations which are specified to a socket in a particular
+domain have methods defined in sub classes of C<IO::Socket>
+
+C<IO::Socket> will export all functions (and constants) defined by L<Socket>.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ARGS] )
+
+Creates an C<IO::Socket>, which is a reference to a
+newly created symbol (see the C<Symbol> package). C<new>
+optionally takes arguments, these arguments are in key-value pairs.
+C<new> only looks for one key C<Domain> which tells new which domain
+the socket will be in. All other arguments will be passed to the
+configuration method of the package for that domain, See below.
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+As of VERSION 1.18 all IO::Socket objects have autoflush turned on
+by default. This was not the case with earlier releases.
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+=back
+
+=head1 METHODS
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<IO::Socket> methods, which are just front ends for the
+corresponding built-in functions:
+
+ socket
+ socketpair
+ bind
+ listen
+ accept
+ send
+ recv
+ peername (getpeername)
+ sockname (getsockname)
+ shutdown
+
+Some methods take slightly different arguments to those defined in L<perlfunc>
+in attempt to make the interface more flexible. These are
+
+=over 4
+
+=item accept([PKG])
+
+perform the system call C<accept> on the socket and return a new
+object. The new object will be created in the same class as the listen
+socket, unless C<PKG> is specified. This object can be used to
+communicate with the client that was trying to connect.
+
+In a scalar context the new socket is returned, or undef upon
+failure. In a list context a two-element array is returned containing
+the new socket and the peer address; the list will be empty upon
+failure.
+
+The timeout in the [PKG] can be specified as zero to effect a "poll",
+but you shouldn't do that because a new IO::Select object will be
+created behind the scenes just to do the single poll. This is
+horrendously inefficient. Use rather true select() with a zero
+timeout on the handle, or non-blocking IO.
+
+=item socketpair(DOMAIN, TYPE, PROTOCOL)
+
+Call C<socketpair> and return a list of two sockets created, or an
+empty list on failure.
+
+=back
+
+Additional methods that are provided are:
+
+=over 4
+
+=item atmark
+
+True if the socket is currently positioned at the urgent data mark,
+false otherwise.
+
+ use IO::Socket;
+
+ my $sock = IO::Socket::INET->new('some_server');
+ $sock->read($data, 1024) until $sock->atmark;
+
+Note: this is a reasonably new addition to the family of socket
+functions, so all systems may not support this yet. If it is
+unsupported by the system, an attempt to use this method will
+abort the program.
+
+The atmark() functionality is also exportable as sockatmark() function:
+
+ use IO::Socket 'sockatmark';
+
+This allows for a more traditional use of sockatmark() as a procedural
+socket function. If your system does not support sockatmark(), the
+C<use> declaration will fail at compile time.
+
+=item connected
+
+If the socket is in a connected state the peer address is returned.
+If the socket is not in a connected state then undef will be returned.
+
+=item protocol
+
+Returns the numerical number for the protocol being used on the socket, if
+known. If the protocol is unknown, as with an AF_UNIX socket, zero
+is returned.
+
+=item sockdomain
+
+Returns the numerical number for the socket domain type. For example, for
+an AF_INET socket the value of &AF_INET will be returned.
+
+=item sockopt(OPT [, VAL])
+
+Unified method to both set and get options in the SOL_SOCKET level. If called
+with one argument then getsockopt is called, otherwise setsockopt is called.
+
+=item socktype
+
+Returns the numerical number for the socket type. For example, for
+a SOCK_STREAM socket the value of &SOCK_STREAM will be returned.
+
+=item timeout([VAL])
+
+Set or get the timeout value associated with this socket. If called without
+any arguments then the current setting is returned. If called with an argument
+the current setting is changed and the previous value returned.
+
+=back
+
+=head1 SEE ALSO
+
+L<Socket>, L<IO::Handle>, L<IO::Socket::INET>, L<IO::Socket::UNIX>
+
+=head1 AUTHOR
+
+Graham Barr. atmark() by Lincoln Stein. Currently maintained by the
+Perl Porters. Please report all bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+The atmark() implementation: Copyright 2001, Lincoln Stein <lstein@cshl.org>.
+This module is distributed under the same terms as Perl itself.
+Feel free to use, modify and redistribute it as long as you retain
+the correct attribution.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/IO/Socket/INET.pm b/Master/tlpkg/tlperl/lib/IO/Socket/INET.pm
new file mode 100644
index 00000000000..96b49911d81
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Socket/INET.pm
@@ -0,0 +1,431 @@
+# IO::Socket::INET.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket::INET;
+
+use strict;
+our(@ISA, $VERSION);
+use IO::Socket;
+use Socket;
+use Carp;
+use Exporter;
+use Errno;
+
+@ISA = qw(IO::Socket);
+$VERSION = "1.29";
+
+my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
+
+IO::Socket::INET->register_domain( AF_INET );
+
+my %socket_type = ( tcp => SOCK_STREAM,
+ udp => SOCK_DGRAM,
+ icmp => SOCK_RAW
+ );
+
+sub new {
+ my $class = shift;
+ unshift(@_, "PeerAddr") if @_ == 1;
+ return $class->SUPER::new(@_);
+}
+
+sub _sock_info {
+ my($addr,$port,$proto) = @_;
+ my $origport = $port;
+ my @proto = ();
+ my @serv = ();
+
+ $port = $1
+ if(defined $addr && $addr =~ s,:([\w\(\)/]+)$,,);
+
+ if(defined $proto && $proto =~ /\D/) {
+ if(@proto = getprotobyname($proto)) {
+ $proto = $proto[2] || undef;
+ }
+ else {
+ $@ = "Bad protocol '$proto'";
+ return;
+ }
+ }
+
+ if(defined $port) {
+ my $defport = ($port =~ s,\((\d+)\)$,,) ? $1 : undef;
+ my $pnum = ($port =~ m,^(\d+)$,)[0];
+
+ @serv = getservbyname($port, $proto[0] || "")
+ if ($port =~ m,\D,);
+
+ $port = $serv[2] || $defport || $pnum;
+ unless (defined $port) {
+ $@ = "Bad service '$origport'";
+ return;
+ }
+
+ $proto = (getprotobyname($serv[3]))[2] || undef
+ if @serv && !$proto;
+ }
+
+ return ($addr || undef,
+ $port || undef,
+ $proto || undef
+ );
+}
+
+sub _error {
+ my $sock = shift;
+ my $err = shift;
+ {
+ local($!);
+ my $title = ref($sock).": ";
+ $@ = join("", $_[0] =~ /^$title/ ? "" : $title, @_);
+ close($sock)
+ if(defined fileno($sock));
+ }
+ $! = $err;
+ return undef;
+}
+
+sub _get_addr {
+ my($sock,$addr_str, $multi) = @_;
+ my @addr;
+ if ($multi && $addr_str !~ /^\d+(?:\.\d+){3}$/) {
+ (undef, undef, undef, undef, @addr) = gethostbyname($addr_str);
+ } else {
+ my $h = inet_aton($addr_str);
+ push(@addr, $h) if defined $h;
+ }
+ @addr;
+}
+
+sub configure {
+ my($sock,$arg) = @_;
+ my($lport,$rport,$laddr,$raddr,$proto,$type);
+
+
+ $arg->{LocalAddr} = $arg->{LocalHost}
+ if exists $arg->{LocalHost} && !exists $arg->{LocalAddr};
+
+ ($laddr,$lport,$proto) = _sock_info($arg->{LocalAddr},
+ $arg->{LocalPort},
+ $arg->{Proto})
+ or return _error($sock, $!, $@);
+
+ $laddr = defined $laddr ? inet_aton($laddr)
+ : INADDR_ANY;
+
+ return _error($sock, $EINVAL, "Bad hostname '",$arg->{LocalAddr},"'")
+ unless(defined $laddr);
+
+ $arg->{PeerAddr} = $arg->{PeerHost}
+ if exists $arg->{PeerHost} && !exists $arg->{PeerAddr};
+
+ unless(exists $arg->{Listen}) {
+ ($raddr,$rport,$proto) = _sock_info($arg->{PeerAddr},
+ $arg->{PeerPort},
+ $proto)
+ or return _error($sock, $!, $@);
+ }
+
+ $proto ||= (getprotobyname('tcp'))[2];
+
+ my $pname = (getprotobynumber($proto))[0];
+ $type = $arg->{Type} || $socket_type{lc $pname};
+
+ my @raddr = ();
+
+ if(defined $raddr) {
+ @raddr = $sock->_get_addr($raddr, $arg->{MultiHomed});
+ return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
+ unless @raddr;
+ }
+
+ while(1) {
+
+ $sock->socket(AF_INET, $type, $proto) or
+ return _error($sock, $!, "$!");
+
+ if (defined $arg->{Blocking}) {
+ defined $sock->blocking($arg->{Blocking})
+ or return _error($sock, $!, "$!");
+ }
+
+ if ($arg->{Reuse} || $arg->{ReuseAddr}) {
+ $sock->sockopt(SO_REUSEADDR,1) or
+ return _error($sock, $!, "$!");
+ }
+
+ if ($arg->{ReusePort}) {
+ $sock->sockopt(SO_REUSEPORT,1) or
+ return _error($sock, $!, "$!");
+ }
+
+ if ($arg->{Broadcast}) {
+ $sock->sockopt(SO_BROADCAST,1) or
+ return _error($sock, $!, "$!");
+ }
+
+ if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) {
+ $sock->bind($lport || 0, $laddr) or
+ return _error($sock, $!, "$!");
+ }
+
+ if(exists $arg->{Listen}) {
+ $sock->listen($arg->{Listen} || 5) or
+ return _error($sock, $!, "$!");
+ last;
+ }
+
+ # don't try to connect unless we're given a PeerAddr
+ last unless exists($arg->{PeerAddr});
+
+ $raddr = shift @raddr;
+
+ return _error($sock, $EINVAL, 'Cannot determine remote port')
+ unless($rport || $type == SOCK_DGRAM || $type == SOCK_RAW);
+
+ last
+ unless($type == SOCK_STREAM || defined $raddr);
+
+ return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
+ unless defined $raddr;
+
+# my $timeout = ${*$sock}{'io_socket_timeout'};
+# my $before = time() if $timeout;
+
+ undef $@;
+ if ($sock->connect(pack_sockaddr_in($rport, $raddr))) {
+# ${*$sock}{'io_socket_timeout'} = $timeout;
+ return $sock;
+ }
+
+ return _error($sock, $!, $@ || "Timeout")
+ unless @raddr;
+
+# if ($timeout) {
+# my $new_timeout = $timeout - (time() - $before);
+# return _error($sock,
+# (exists(&Errno::ETIMEDOUT) ? Errno::ETIMEDOUT() : $EINVAL),
+# "Timeout") if $new_timeout <= 0;
+# ${*$sock}{'io_socket_timeout'} = $new_timeout;
+# }
+
+ }
+
+ $sock;
+}
+
+sub connect {
+ @_ == 2 || @_ == 3 or
+ croak 'usage: $sock->connect(NAME) or $sock->connect(PORT, ADDR)';
+ my $sock = shift;
+ return $sock->SUPER::connect(@_ == 1 ? shift : pack_sockaddr_in(@_));
+}
+
+sub bind {
+ @_ == 2 || @_ == 3 or
+ croak 'usage: $sock->bind(NAME) or $sock->bind(PORT, ADDR)';
+ my $sock = shift;
+ return $sock->SUPER::bind(@_ == 1 ? shift : pack_sockaddr_in(@_))
+}
+
+sub sockaddr {
+ @_ == 1 or croak 'usage: $sock->sockaddr()';
+ my($sock) = @_;
+ my $name = $sock->sockname;
+ $name ? (sockaddr_in($name))[1] : undef;
+}
+
+sub sockport {
+ @_ == 1 or croak 'usage: $sock->sockport()';
+ my($sock) = @_;
+ my $name = $sock->sockname;
+ $name ? (sockaddr_in($name))[0] : undef;
+}
+
+sub sockhost {
+ @_ == 1 or croak 'usage: $sock->sockhost()';
+ my($sock) = @_;
+ my $addr = $sock->sockaddr;
+ $addr ? inet_ntoa($addr) : undef;
+}
+
+sub peeraddr {
+ @_ == 1 or croak 'usage: $sock->peeraddr()';
+ my($sock) = @_;
+ my $name = $sock->peername;
+ $name ? (sockaddr_in($name))[1] : undef;
+}
+
+sub peerport {
+ @_ == 1 or croak 'usage: $sock->peerport()';
+ my($sock) = @_;
+ my $name = $sock->peername;
+ $name ? (sockaddr_in($name))[0] : undef;
+}
+
+sub peerhost {
+ @_ == 1 or croak 'usage: $sock->peerhost()';
+ my($sock) = @_;
+ my $addr = $sock->peeraddr;
+ $addr ? inet_ntoa($addr) : undef;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IO::Socket::INET - Object interface for AF_INET domain sockets
+
+=head1 SYNOPSIS
+
+ use IO::Socket::INET;
+
+=head1 DESCRIPTION
+
+C<IO::Socket::INET> provides an object interface to creating and using sockets
+in the AF_INET domain. It is built upon the L<IO::Socket> interface and
+inherits all the methods defined by L<IO::Socket>.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ARGS] )
+
+Creates an C<IO::Socket::INET> object, which is a reference to a
+newly created symbol (see the C<Symbol> package). C<new>
+optionally takes arguments, these arguments are in key-value pairs.
+
+In addition to the key-value pairs accepted by L<IO::Socket>,
+C<IO::Socket::INET> provides.
+
+
+ PeerAddr Remote host address <hostname>[:<port>]
+ PeerHost Synonym for PeerAddr
+ PeerPort Remote port or service <service>[(<no>)] | <no>
+ LocalAddr Local host bind address hostname[:port]
+ LocalHost Synonym for LocalAddr
+ LocalPort Local host bind port <service>[(<no>)] | <no>
+ Proto Protocol name (or number) "tcp" | "udp" | ...
+ Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
+ Listen Queue size for listen
+ ReuseAddr Set SO_REUSEADDR before binding
+ Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
+ ReusePort Set SO_REUSEPORT before binding
+ Broadcast Set SO_BROADCAST before binding
+ Timeout Timeout value for various operations
+ MultiHomed Try all addresses for multi-homed hosts
+ Blocking Determine if connection will be blocking mode
+
+If C<Listen> is defined then a listen socket is created, else if the
+socket type, which is derived from the protocol, is SOCK_STREAM then
+connect() is called.
+
+Although it is not illegal, the use of C<MultiHomed> on a socket
+which is in non-blocking mode is of little use. This is because the
+first connect will never fail with a timeout as the connect call
+will not block.
+
+The C<PeerAddr> can be a hostname or the IP-address on the
+"xx.xx.xx.xx" form. The C<PeerPort> can be a number or a symbolic
+service name. The service name might be followed by a number in
+parenthesis which is used if the service is not known by the system.
+The C<PeerPort> specification can also be embedded in the C<PeerAddr>
+by preceding it with a ":".
+
+If C<Proto> is not given and you specify a symbolic C<PeerPort> port,
+then the constructor will try to derive C<Proto> from the service
+name. As a last resort C<Proto> "tcp" is assumed. The C<Type>
+parameter will be deduced from C<Proto> if not specified.
+
+If the constructor is only passed a single argument, it is assumed to
+be a C<PeerAddr> specification.
+
+If C<Blocking> is set to 0, the connection will be in nonblocking mode.
+If not specified it defaults to 1 (blocking mode).
+
+Examples:
+
+ $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org',
+ PeerPort => 'http(80)',
+ Proto => 'tcp');
+
+ $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)');
+
+ $sock = IO::Socket::INET->new(Listen => 5,
+ LocalAddr => 'localhost',
+ LocalPort => 9000,
+ Proto => 'tcp');
+
+ $sock = IO::Socket::INET->new('127.0.0.1:25');
+
+ $sock = IO::Socket::INET->new(PeerPort => 9999,
+ PeerAddr => inet_ntoa(INADDR_BROADCAST),
+ Proto => udp,
+ LocalAddr => 'localhost',
+ Broadcast => 1 )
+ or die "Can't bind : $@\n";
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+As of VERSION 1.18 all IO::Socket objects have autoflush turned on
+by default. This was not the case with earlier releases.
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+=back
+
+=head2 METHODS
+
+=over 4
+
+=item sockaddr ()
+
+Return the address part of the sockaddr structure for the socket
+
+=item sockport ()
+
+Return the port number that the socket is using on the local host
+
+=item sockhost ()
+
+Return the address part of the sockaddr structure for the socket in a
+text form xx.xx.xx.xx
+
+=item peeraddr ()
+
+Return the address part of the sockaddr structure for the socket on
+the peer host
+
+=item peerport ()
+
+Return the port number for the socket on the peer host.
+
+=item peerhost ()
+
+Return the address part of the sockaddr structure for the socket on the
+peer host in a text form xx.xx.xx.xx
+
+=back
+
+=head1 SEE ALSO
+
+L<Socket>, L<IO::Socket>
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm b/Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm
new file mode 100644
index 00000000000..952a0f41f0c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm
@@ -0,0 +1,144 @@
+# IO::Socket::UNIX.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket::UNIX;
+
+use strict;
+our(@ISA, $VERSION);
+use IO::Socket;
+use Socket;
+use Carp;
+
+@ISA = qw(IO::Socket);
+$VERSION = "1.22";
+$VERSION = eval $VERSION;
+
+IO::Socket::UNIX->register_domain( AF_UNIX );
+
+sub new {
+ my $class = shift;
+ unshift(@_, "Peer") if @_ == 1;
+ return $class->SUPER::new(@_);
+}
+
+sub configure {
+ my($sock,$arg) = @_;
+ my($bport,$cport);
+
+ my $type = $arg->{Type} || SOCK_STREAM;
+
+ $sock->socket(AF_UNIX, $type, 0) or
+ return undef;
+
+ if(exists $arg->{Local}) {
+ my $addr = sockaddr_un($arg->{Local});
+ $sock->bind($addr) or
+ return undef;
+ }
+ if(exists $arg->{Listen} && $type != SOCK_DGRAM) {
+ $sock->listen($arg->{Listen} || 5) or
+ return undef;
+ }
+ elsif(exists $arg->{Peer}) {
+ my $addr = sockaddr_un($arg->{Peer});
+ $sock->connect($addr) or
+ return undef;
+ }
+
+ $sock;
+}
+
+sub hostpath {
+ @_ == 1 or croak 'usage: $sock->hostpath()';
+ my $n = $_[0]->sockname || return undef;
+ (sockaddr_un($n))[0];
+}
+
+sub peerpath {
+ @_ == 1 or croak 'usage: $sock->peerpath()';
+ my $n = $_[0]->peername || return undef;
+ (sockaddr_un($n))[0];
+}
+
+1; # Keep require happy
+
+__END__
+
+=head1 NAME
+
+IO::Socket::UNIX - Object interface for AF_UNIX domain sockets
+
+=head1 SYNOPSIS
+
+ use IO::Socket::UNIX;
+
+=head1 DESCRIPTION
+
+C<IO::Socket::UNIX> provides an object interface to creating and using sockets
+in the AF_UNIX domain. It is built upon the L<IO::Socket> interface and
+inherits all the methods defined by L<IO::Socket>.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ARGS] )
+
+Creates an C<IO::Socket::UNIX> object, which is a reference to a
+newly created symbol (see the C<Symbol> package). C<new>
+optionally takes arguments, these arguments are in key-value pairs.
+
+In addition to the key-value pairs accepted by L<IO::Socket>,
+C<IO::Socket::UNIX> provides.
+
+ Type Type of socket (eg SOCK_STREAM or SOCK_DGRAM)
+ Local Path to local fifo
+ Peer Path to peer fifo
+ Listen Create a listen socket
+
+If the constructor is only passed a single argument, it is assumed to
+be a C<Peer> specification.
+
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+As of VERSION 1.18 all IO::Socket objects have autoflush turned on
+by default. This was not the case with earlier releases.
+
+ NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item hostpath()
+
+Returns the pathname to the fifo at the local end
+
+=item peerpath()
+
+Returns the pathanme to the fifo at the peer end
+
+=back
+
+=head1 SEE ALSO
+
+L<Socket>, L<IO::Socket>
+
+=head1 AUTHOR
+
+Graham Barr. Currently maintained by the Perl Porters. Please report all
+bugs to <perl5-porters@perl.org>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/List/Util.pm b/Master/tlpkg/tlperl/lib/List/Util.pm
new file mode 100644
index 00000000000..cfe31f70123
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/List/Util.pm
@@ -0,0 +1,277 @@
+# List::Util.pm
+#
+# Copyright (c) 1997-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package List::Util;
+
+use strict;
+use vars qw(@ISA @EXPORT_OK $VERSION $XS_VERSION $TESTING_PERL_ONLY);
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(first min max minstr maxstr reduce sum shuffle);
+$VERSION = "1.18";
+$XS_VERSION = $VERSION;
+$VERSION = eval $VERSION;
+
+eval {
+ # PERL_DL_NONLAZY must be false, or any errors in loading will just
+ # cause the perl code to be tested
+ local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY};
+ eval {
+ require XSLoader;
+ XSLoader::load('List::Util', $XS_VERSION);
+ 1;
+ } or do {
+ require DynaLoader;
+ local @ISA = qw(DynaLoader);
+ bootstrap List::Util $XS_VERSION;
+ };
+} unless $TESTING_PERL_ONLY;
+
+
+# This code is only compiled if the XS did not load
+# of for perl < 5.6.0
+
+if (!defined &reduce) {
+eval <<'ESQ'
+
+sub reduce (&@) {
+ my $code = shift;
+ no strict 'refs';
+
+ return shift unless @_ > 1;
+
+ use vars qw($a $b);
+
+ my $caller = caller;
+ local(*{$caller."::a"}) = \my $a;
+ local(*{$caller."::b"}) = \my $b;
+
+ $a = shift;
+ foreach (@_) {
+ $b = $_;
+ $a = &{$code}();
+ }
+
+ $a;
+}
+
+sub first (&@) {
+ my $code = shift;
+
+ foreach (@_) {
+ return $_ if &{$code}();
+ }
+
+ undef;
+}
+
+ESQ
+}
+
+# This code is only compiled if the XS did not load
+eval <<'ESQ' if !defined &sum;
+
+use vars qw($a $b);
+
+sub sum (@) { reduce { $a + $b } @_ }
+
+sub min (@) { reduce { $a < $b ? $a : $b } @_ }
+
+sub max (@) { reduce { $a > $b ? $a : $b } @_ }
+
+sub minstr (@) { reduce { $a lt $b ? $a : $b } @_ }
+
+sub maxstr (@) { reduce { $a gt $b ? $a : $b } @_ }
+
+sub shuffle (@) {
+ my @a=\(@_);
+ my $n;
+ my $i=@_;
+ map {
+ $n = rand($i--);
+ (${$a[$n]}, $a[$n] = $a[$i])[0];
+ } @_;
+}
+
+ESQ
+
+1;
+
+__END__
+
+=head1 NAME
+
+List::Util - A selection of general-utility list subroutines
+
+=head1 SYNOPSIS
+
+ use List::Util qw(first max maxstr min minstr reduce shuffle sum);
+
+=head1 DESCRIPTION
+
+C<List::Util> contains a selection of subroutines that people have
+expressed would be nice to have in the perl core, but the usage would
+not really be high enough to warrant the use of a keyword, and the size
+so small such that being individual extensions would be wasteful.
+
+By default C<List::Util> does not export any subroutines. The
+subroutines defined are
+
+=over 4
+
+=item first BLOCK LIST
+
+Similar to C<grep> in that it evaluates BLOCK setting C<$_> to each element
+of LIST in turn. C<first> returns the first element where the result from
+BLOCK is a true value. If BLOCK never returns true or LIST was empty then
+C<undef> is returned.
+
+ $foo = first { defined($_) } @list # first defined value in @list
+ $foo = first { $_ > $value } @list # first value in @list which
+ # is greater than $value
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { defined($a) ? $a : wanted($b) ? $b : undef } undef, @list
+
+for example wanted() could be defined() which would return the first
+defined value in @list
+
+=item max LIST
+
+Returns the entry in the list with the highest numerical value. If the
+list is empty then C<undef> is returned.
+
+ $foo = max 1..10 # 10
+ $foo = max 3,9,12 # 12
+ $foo = max @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a > $b ? $a : $b } 1..10
+
+=item maxstr LIST
+
+Similar to C<max>, but treats all the entries in the list as strings
+and returns the highest string as defined by the C<gt> operator.
+If the list is empty then C<undef> is returned.
+
+ $foo = maxstr 'A'..'Z' # 'Z'
+ $foo = maxstr "hello","world" # "world"
+ $foo = maxstr @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a gt $b ? $a : $b } 'A'..'Z'
+
+=item min LIST
+
+Similar to C<max> but returns the entry in the list with the lowest
+numerical value. If the list is empty then C<undef> is returned.
+
+ $foo = min 1..10 # 1
+ $foo = min 3,9,12 # 3
+ $foo = min @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a < $b ? $a : $b } 1..10
+
+=item minstr LIST
+
+Similar to C<min>, but treats all the entries in the list as strings
+and returns the lowest string as defined by the C<lt> operator.
+If the list is empty then C<undef> is returned.
+
+ $foo = minstr 'A'..'Z' # 'A'
+ $foo = minstr "hello","world" # "hello"
+ $foo = minstr @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a lt $b ? $a : $b } 'A'..'Z'
+
+=item reduce BLOCK LIST
+
+Reduces LIST by calling BLOCK multiple times, setting C<$a> and C<$b>
+each time. The first call will be with C<$a> and C<$b> set to the first
+two elements of the list, subsequent calls will be done by
+setting C<$a> to the result of the previous call and C<$b> to the next
+element in the list.
+
+Returns the result of the last call to BLOCK. If LIST is empty then
+C<undef> is returned. If LIST only contains one element then that
+element is returned and BLOCK is not executed.
+
+ $foo = reduce { $a < $b ? $a : $b } 1..10 # min
+ $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr
+ $foo = reduce { $a + $b } 1 .. 10 # sum
+ $foo = reduce { $a . $b } @bar # concat
+
+=item shuffle LIST
+
+Returns the elements of LIST in a random order
+
+ @cards = shuffle 0..51 # 0..51 in a random order
+
+=item sum LIST
+
+Returns the sum of all the elements in LIST. If LIST is empty then
+C<undef> is returned.
+
+ $foo = sum 1..10 # 55
+ $foo = sum 3,9,12 # 24
+ $foo = sum @bar, @baz # whatever
+
+This function could be implemented using C<reduce> like this
+
+ $foo = reduce { $a + $b } 1..10
+
+=back
+
+=head1 KNOWN BUGS
+
+With perl versions prior to 5.005 there are some cases where reduce
+will return an incorrect result. This will show up as test 7 of
+reduce.t failing.
+
+=head1 SUGGESTED ADDITIONS
+
+The following are additions that have been requested, but I have been reluctant
+to add due to them being very simple to implement in perl
+
+ # One argument is true
+
+ sub any { $_ && return 1 for @_; 0 }
+
+ # All arguments are true
+
+ sub all { $_ || return 0 for @_; 1 }
+
+ # All arguments are false
+
+ sub none { $_ && return 0 for @_; 1 }
+
+ # One argument is false
+
+ sub notall { $_ || return 1 for @_; 0 }
+
+ # How many elements are true
+
+ sub true { scalar grep { $_ } @_ }
+
+ # How many elements are false
+
+ sub false { scalar grep { !$_ } @_ }
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/SelectSaver.pm b/Master/tlpkg/tlperl/lib/SelectSaver.pm
new file mode 100644
index 00000000000..1207b88a4a2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/SelectSaver.pm
@@ -0,0 +1,54 @@
+package SelectSaver;
+
+our $VERSION = '1.01';
+
+=head1 NAME
+
+SelectSaver - save and restore selected file handle
+
+=head1 SYNOPSIS
+
+ use SelectSaver;
+
+ {
+ my $saver = new SelectSaver(FILEHANDLE);
+ # FILEHANDLE is selected
+ }
+ # previous handle is selected
+
+ {
+ my $saver = new SelectSaver;
+ # new handle may be selected, or not
+ }
+ # previous handle is selected
+
+=head1 DESCRIPTION
+
+A C<SelectSaver> object contains a reference to the file handle that
+was selected when it was created. If its C<new> method gets an extra
+parameter, then that parameter is selected; otherwise, the selected
+file handle remains unchanged.
+
+When a C<SelectSaver> is destroyed, it re-selects the file handle
+that was selected when it was created.
+
+=cut
+
+require 5.000;
+use Carp;
+use Symbol;
+
+sub new {
+ @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]';
+ my $fh = select;
+ my $self = bless \$fh, $_[0];
+ select qualify($_[1], caller) if @_ > 1;
+ $self;
+}
+
+sub DESTROY {
+ my $self = $_[0];
+ select $$self;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Symbol.pm b/Master/tlpkg/tlperl/lib/Symbol.pm
new file mode 100644
index 00000000000..3bb5d9240c1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Symbol.pm
@@ -0,0 +1,170 @@
+package Symbol;
+
+=head1 NAME
+
+Symbol - manipulate Perl symbols and their names
+
+=head1 SYNOPSIS
+
+ use Symbol;
+
+ $sym = gensym;
+ open($sym, "filename");
+ $_ = <$sym>;
+ # etc.
+
+ ungensym $sym; # no effect
+
+ # replace *FOO{IO} handle but not $FOO, %FOO, etc.
+ *FOO = geniosym;
+
+ print qualify("x"), "\n"; # "Test::x"
+ print qualify("x", "FOO"), "\n" # "FOO::x"
+ print qualify("BAR::x"), "\n"; # "BAR::x"
+ print qualify("BAR::x", "FOO"), "\n"; # "BAR::x"
+ print qualify("STDOUT", "FOO"), "\n"; # "main::STDOUT" (global)
+ print qualify(\*x), "\n"; # returns \*x
+ print qualify(\*x, "FOO"), "\n"; # returns \*x
+
+ use strict refs;
+ print { qualify_to_ref $fh } "foo!\n";
+ $ref = qualify_to_ref $name, $pkg;
+
+ use Symbol qw(delete_package);
+ delete_package('Foo::Bar');
+ print "deleted\n" unless exists $Foo::{'Bar::'};
+
+=head1 DESCRIPTION
+
+C<Symbol::gensym> creates an anonymous glob and returns a reference
+to it. Such a glob reference can be used as a file or directory
+handle.
+
+For backward compatibility with older implementations that didn't
+support anonymous globs, C<Symbol::ungensym> is also provided.
+But it doesn't do anything.
+
+C<Symbol::geniosym> creates an anonymous IO handle. This can be
+assigned into an existing glob without affecting the non-IO portions
+of the glob.
+
+C<Symbol::qualify> turns unqualified symbol names into qualified
+variable names (e.g. "myvar" -E<gt> "MyPackage::myvar"). If it is given a
+second parameter, C<qualify> uses it as the default package;
+otherwise, it uses the package of its caller. Regardless, global
+variable names (e.g. "STDOUT", "ENV", "SIG") are always qualified with
+"main::".
+
+Qualification applies only to symbol names (strings). References are
+left unchanged under the assumption that they are glob references,
+which are qualified by their nature.
+
+C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
+returns a glob ref rather than a symbol name, so you can use the result
+even if C<use strict 'refs'> is in effect.
+
+C<Symbol::delete_package> wipes out a whole package namespace. Note
+this routine is not exported by default--you may want to import it
+explicitly.
+
+=head1 BUGS
+
+C<Symbol::delete_package> is a bit too powerful. It undefines every symbol that
+lives in the specified package. Since perl, for performance reasons, does not
+perform a symbol table lookup each time a function is called or a global
+variable is accessed, some code that has already been loaded and that makes use
+of symbols in package C<Foo> may stop working after you delete C<Foo>, even if
+you reload the C<Foo> module afterwards.
+
+=cut
+
+BEGIN { require 5.005; }
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
+@EXPORT_OK = qw(delete_package geniosym);
+
+$VERSION = '1.06';
+
+my $genpkg = "Symbol::";
+my $genseq = 0;
+
+my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);
+
+#
+# Note that we never _copy_ the glob; we just make a ref to it.
+# If we did copy it, then SVf_FAKE would be set on the copy, and
+# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
+#
+sub gensym () {
+ my $name = "GEN" . $genseq++;
+ my $ref = \*{$genpkg . $name};
+ delete $$genpkg{$name};
+ $ref;
+}
+
+sub geniosym () {
+ my $sym = gensym();
+ # force the IO slot to be filled
+ select(select $sym);
+ *$sym{IO};
+}
+
+sub ungensym ($) {}
+
+sub qualify ($;$) {
+ my ($name) = @_;
+ if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
+ my $pkg;
+ # Global names: special character, "^xyz", or other.
+ if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) {
+ # RGS 2001-11-05 : translate leading ^X to control-char
+ $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei;
+ $pkg = "main";
+ }
+ else {
+ $pkg = (@_ > 1) ? $_[1] : caller;
+ }
+ $name = $pkg . "::" . $name;
+ }
+ $name;
+}
+
+sub qualify_to_ref ($;$) {
+ return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
+}
+
+#
+# of Safe.pm lineage
+#
+sub delete_package ($) {
+ my $pkg = shift;
+
+ # expand to full symbol table name if needed
+
+ unless ($pkg =~ /^main::.*::$/) {
+ $pkg = "main$pkg" if $pkg =~ /^::/;
+ $pkg = "main::$pkg" unless $pkg =~ /^main::/;
+ $pkg .= '::' unless $pkg =~ /::$/;
+ }
+
+ my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
+ my $stem_symtab = *{$stem}{HASH};
+ return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
+
+
+ # free all the symbols in the package
+
+ my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
+ foreach my $name (keys %$leaf_symtab) {
+ undef *{$pkg . $name};
+ }
+
+ # delete the symbol table
+
+ %$leaf_symtab = ();
+ delete $stem_symtab->{$leaf};
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm b/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm
new file mode 100644
index 00000000000..9320fa06b23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Term/ANSIColor.pm
@@ -0,0 +1,472 @@
+# Term::ANSIColor -- Color screen output using ANSI escape sequences.
+# $Id: ANSIColor.pm,v 1.10 2005/08/21 18:31:58 eagle Exp $
+#
+# Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005
+# by Russ Allbery <rra@stanford.edu> and Zenin
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# Ah, September, when the sysadmins turn colors and fall off the trees....
+# -- Dave Van Domelen
+
+##############################################################################
+# Modules and declarations
+##############################################################################
+
+package Term::ANSIColor;
+require 5.001;
+
+use strict;
+use vars qw($AUTOLOAD $AUTORESET $EACHLINE @ISA @EXPORT @EXPORT_OK
+ %EXPORT_TAGS $VERSION %attributes %attributes_r);
+
+use Exporter ();
+@ISA = qw(Exporter);
+@EXPORT = qw(color colored);
+@EXPORT_OK = qw(uncolor);
+%EXPORT_TAGS = (constants => [qw(CLEAR RESET BOLD DARK UNDERLINE UNDERSCORE
+ BLINK REVERSE CONCEALED BLACK RED GREEN
+ YELLOW BLUE MAGENTA CYAN WHITE ON_BLACK
+ ON_RED ON_GREEN ON_YELLOW ON_BLUE ON_MAGENTA
+ ON_CYAN ON_WHITE)]);
+Exporter::export_ok_tags ('constants');
+
+# Don't use the CVS revision as the version, since this module is also in Perl
+# core and too many things could munge CVS magic revision strings.
+$VERSION = '1.10';
+
+##############################################################################
+# Internal data structures
+##############################################################################
+
+%attributes = ('clear' => 0,
+ 'reset' => 0,
+ 'bold' => 1,
+ 'dark' => 2,
+ 'underline' => 4,
+ 'underscore' => 4,
+ 'blink' => 5,
+ 'reverse' => 7,
+ 'concealed' => 8,
+
+ 'black' => 30, 'on_black' => 40,
+ 'red' => 31, 'on_red' => 41,
+ 'green' => 32, 'on_green' => 42,
+ 'yellow' => 33, 'on_yellow' => 43,
+ 'blue' => 34, 'on_blue' => 44,
+ 'magenta' => 35, 'on_magenta' => 45,
+ 'cyan' => 36, 'on_cyan' => 46,
+ 'white' => 37, 'on_white' => 47);
+
+# Reverse lookup. Alphabetically first name for a sequence is preferred.
+for (reverse sort keys %attributes) {
+ $attributes_r{$attributes{$_}} = $_;
+}
+
+##############################################################################
+# Implementation (constant form)
+##############################################################################
+
+# Time to have fun! We now want to define the constant subs, which are named
+# the same as the attributes above but in all caps. Each constant sub needs
+# to act differently depending on whether $AUTORESET is set. Without
+# autoreset:
+#
+# BLUE "text\n" ==> "\e[34mtext\n"
+#
+# If $AUTORESET is set, we should instead get:
+#
+# BLUE "text\n" ==> "\e[34mtext\n\e[0m"
+#
+# The sub also needs to handle the case where it has no arguments correctly.
+# Maintaining all of this as separate subs would be a major nightmare, as well
+# as duplicate the %attributes hash, so instead we define an AUTOLOAD sub to
+# define the constant subs on demand. To do that, we check the name of the
+# called sub against the list of attributes, and if it's an all-caps version
+# of one of them, we define the sub on the fly and then run it.
+#
+# If the environment variable ANSI_COLORS_DISABLED is set, turn all of the
+# generated subs into pass-through functions that don't add any escape
+# sequences. This is to make it easier to write scripts that also work on
+# systems without any ANSI support, like Windows consoles.
+sub AUTOLOAD {
+ my $enable_colors = !defined $ENV{ANSI_COLORS_DISABLED};
+ my $sub;
+ ($sub = $AUTOLOAD) =~ s/^.*:://;
+ my $attr = $attributes{lc $sub};
+ if ($sub =~ /^[A-Z_]+$/ && defined $attr) {
+ $attr = $enable_colors ? "\e[" . $attr . 'm' : '';
+ eval qq {
+ sub $AUTOLOAD {
+ if (\$AUTORESET && \@_) {
+ '$attr' . "\@_" . "\e[0m";
+ } else {
+ ('$attr' . "\@_");
+ }
+ }
+ };
+ goto &$AUTOLOAD;
+ } else {
+ require Carp;
+ Carp::croak ("undefined subroutine &$AUTOLOAD called");
+ }
+}
+
+##############################################################################
+# Implementation (attribute string form)
+##############################################################################
+
+# Return the escape code for a given set of color attributes.
+sub color {
+ return '' if defined $ENV{ANSI_COLORS_DISABLED};
+ my @codes = map { split } @_;
+ my $attribute = '';
+ foreach (@codes) {
+ $_ = lc $_;
+ unless (defined $attributes{$_}) {
+ require Carp;
+ Carp::croak ("Invalid attribute name $_");
+ }
+ $attribute .= $attributes{$_} . ';';
+ }
+ chop $attribute;
+ ($attribute ne '') ? "\e[${attribute}m" : undef;
+}
+
+# Return a list of named color attributes for a given set of escape codes.
+# Escape sequences can be given with or without enclosing "\e[" and "m". The
+# empty escape sequence '' or "\e[m" gives an empty list of attrs.
+sub uncolor {
+ my (@nums, @result);
+ for (@_) {
+ my $escape = $_;
+ $escape =~ s/^\e\[//;
+ $escape =~ s/m$//;
+ unless ($escape =~ /^((?:\d+;)*\d*)$/) {
+ require Carp;
+ Carp::croak ("Bad escape sequence $_");
+ }
+ push (@nums, split (/;/, $1));
+ }
+ for (@nums) {
+ $_ += 0; # Strip leading zeroes
+ my $name = $attributes_r{$_};
+ if (!defined $name) {
+ require Carp;
+ Carp::croak ("No name for escape sequence $_" );
+ }
+ push (@result, $name);
+ }
+ @result;
+}
+
+# Given a string and a set of attributes, returns the string surrounded by
+# escape codes to set those attributes and then clear them at the end of the
+# string. The attributes can be given either as an array ref as the first
+# argument or as a list as the second and subsequent arguments. If $EACHLINE
+# is set, insert a reset before each occurrence of the string $EACHLINE and
+# the starting attribute code after the string $EACHLINE, so that no attribute
+# crosses line delimiters (this is often desirable if the output is to be
+# piped to a pager or some other program).
+sub colored {
+ my ($string, @codes);
+ if (ref $_[0]) {
+ @codes = @{+shift};
+ $string = join ('', @_);
+ } else {
+ $string = shift;
+ @codes = @_;
+ }
+ return $string if defined $ENV{ANSI_COLORS_DISABLED};
+ if (defined $EACHLINE) {
+ my $attr = color (@codes);
+ join '',
+ map { $_ ne $EACHLINE ? $attr . $_ . "\e[0m" : $_ }
+ grep { length ($_) > 0 }
+ split (/(\Q$EACHLINE\E)/, $string);
+ } else {
+ color (@codes) . $string . "\e[0m";
+ }
+}
+
+##############################################################################
+# Module return value and documentation
+##############################################################################
+
+# Ensure we evaluate to true.
+1;
+__END__
+
+=head1 NAME
+
+Term::ANSIColor - Color screen output using ANSI escape sequences
+
+=head1 SYNOPSIS
+
+ use Term::ANSIColor;
+ print color 'bold blue';
+ print "This text is bold blue.\n";
+ print color 'reset';
+ print "This text is normal.\n";
+ print colored ("Yellow on magenta.\n", 'yellow on_magenta');
+ print "This text is normal.\n";
+ print colored ['yellow on_magenta'], "Yellow on magenta.\n";
+
+ use Term::ANSIColor qw(uncolor);
+ print uncolor '01;31', "\n";
+
+ use Term::ANSIColor qw(:constants);
+ print BOLD, BLUE, "This text is in bold blue.\n", RESET;
+
+ use Term::ANSIColor qw(:constants);
+ $Term::ANSIColor::AUTORESET = 1;
+ print BOLD BLUE "This text is in bold blue.\n";
+ print "This text is normal.\n";
+
+=head1 DESCRIPTION
+
+This module has two interfaces, one through color() and colored() and the
+other through constants. It also offers the utility function uncolor(),
+which has to be explicitly imported to be used (see L<SYNOPSIS>).
+
+color() takes any number of strings as arguments and considers them to be
+space-separated lists of attributes. It then forms and returns the escape
+sequence to set those attributes. It doesn't print it out, just returns it,
+so you'll have to print it yourself if you want to (this is so that you can
+save it as a string, pass it to something else, send it to a file handle, or
+do anything else with it that you might care to).
+
+uncolor() performs the opposite translation, turning escape sequences
+into a list of strings.
+
+The recognized attributes (all of which should be fairly intuitive) are
+clear, reset, dark, bold, underline, underscore, blink, reverse, concealed,
+black, red, green, yellow, blue, magenta, on_black, on_red, on_green,
+on_yellow, on_blue, on_magenta, on_cyan, and on_white. Case is not
+significant. Underline and underscore are equivalent, as are clear and
+reset, so use whichever is the most intuitive to you. The color alone sets
+the foreground color, and on_color sets the background color.
+
+Note that not all attributes are supported by all terminal types, and some
+terminals may not support any of these sequences. Dark, blink, and
+concealed in particular are frequently not implemented.
+
+Attributes, once set, last until they are unset (by sending the attribute
+"reset"). Be careful to do this, or otherwise your attribute will last
+after your script is done running, and people get very annoyed at having
+their prompt and typing changed to weird colors.
+
+As an aid to help with this, colored() takes a scalar as the first argument
+and any number of attribute strings as the second argument and returns the
+scalar wrapped in escape codes so that the attributes will be set as
+requested before the string and reset to normal after the string.
+Alternately, you can pass a reference to an array as the first argument, and
+then the contents of that array will be taken as attributes and color codes
+and the remainder of the arguments as text to colorize.
+
+Normally, colored() just puts attribute codes at the beginning and end of
+the string, but if you set $Term::ANSIColor::EACHLINE to some string, that
+string will be considered the line delimiter and the attribute will be set
+at the beginning of each line of the passed string and reset at the end of
+each line. This is often desirable if the output is being sent to a program
+like a pager that can be confused by attributes that span lines. Normally
+you'll want to set $Term::ANSIColor::EACHLINE to C<"\n"> to use this
+feature.
+
+Alternately, if you import C<:constants>, you can use the constants CLEAR,
+RESET, BOLD, DARK, UNDERLINE, UNDERSCORE, BLINK, REVERSE, CONCEALED, BLACK,
+RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, ON_BLACK, ON_RED, ON_GREEN,
+ON_YELLOW, ON_BLUE, ON_MAGENTA, ON_CYAN, and ON_WHITE directly. These are
+the same as color('attribute') and can be used if you prefer typing:
+
+ print BOLD BLUE ON_WHITE "Text\n", RESET;
+
+to
+
+ print colored ("Text\n", 'bold blue on_white');
+
+When using the constants, if you don't want to have to remember to add the
+C<, RESET> at the end of each print line, you can set
+$Term::ANSIColor::AUTORESET to a true value. Then, the display mode will
+automatically be reset if there is no comma after the constant. In other
+words, with that variable set:
+
+ print BOLD BLUE "Text\n";
+
+will reset the display mode afterwards, whereas:
+
+ print BOLD, BLUE, "Text\n";
+
+will not.
+
+The subroutine interface has the advantage over the constants interface in
+that only two subroutines are exported into your namespace, versus
+twenty-two in the constants interface. On the flip side, the constants
+interface has the advantage of better compile time error checking, since
+misspelled names of colors or attributes in calls to color() and colored()
+won't be caught until runtime whereas misspelled names of constants will be
+caught at compile time. So, polute your namespace with almost two dozen
+subroutines that you may not even use that often, or risk a silly bug by
+mistyping an attribute. Your choice, TMTOWTDI after all.
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=item Bad escape sequence %s
+
+(F) You passed an invalid ANSI escape sequence to uncolor().
+
+=item Bareword "%s" not allowed while "strict subs" in use
+
+(F) You probably mistyped a constant color name such as:
+
+ $Foobar = FOOBAR . "This line should be blue\n";
+
+or:
+
+ @Foobar = FOOBAR, "This line should be blue\n";
+
+This will only show up under use strict (another good reason to run under
+use strict).
+
+=item Invalid attribute name %s
+
+(F) You passed an invalid attribute name to either color() or colored().
+
+=item Name "%s" used only once: possible typo
+
+(W) You probably mistyped a constant color name such as:
+
+ print FOOBAR "This text is color FOOBAR\n";
+
+It's probably better to always use commas after constant names in order to
+force the next error.
+
+=item No comma allowed after filehandle
+
+(F) You probably mistyped a constant color name such as:
+
+ print FOOBAR, "This text is color FOOBAR\n";
+
+Generating this fatal compile error is one of the main advantages of using
+the constants interface, since you'll immediately know if you mistype a
+color name.
+
+=item No name for escape sequence %s
+
+(F) The ANSI escape sequence passed to uncolor() contains escapes which
+aren't recognized and can't be translated to names.
+
+=back
+
+=head1 ENVIRONMENT
+
+=over 4
+
+=item ANSI_COLORS_DISABLED
+
+If this environment variable is set, all of the functions defined by this
+module (color(), colored(), and all of the constants not previously used in
+the program) will not output any escape sequences and instead will just
+return the empty string or pass through the original text as appropriate.
+This is intended to support easy use of scripts using this module on
+platforms that don't support ANSI escape sequences.
+
+For it to have its proper effect, this environment variable must be set
+before any color constants are used in the program.
+
+=back
+
+=head1 RESTRICTIONS
+
+It would be nice if one could leave off the commas around the constants
+entirely and just say:
+
+ print BOLD BLUE ON_WHITE "Text\n" RESET;
+
+but the syntax of Perl doesn't allow this. You need a comma after the
+string. (Of course, you may consider it a bug that commas between all the
+constants aren't required, in which case you may feel free to insert commas
+unless you're using $Term::ANSIColor::AUTORESET.)
+
+For easier debuging, you may prefer to always use the commas when not
+setting $Term::ANSIColor::AUTORESET so that you'll get a fatal compile error
+rather than a warning.
+
+=head1 NOTES
+
+The codes generated by this module are standard terminal control codes,
+complying with ECMA-48 and ISO 6429 (generally referred to as "ANSI color"
+for the color codes). The non-color control codes (bold, dark, italic,
+underline, and reverse) are part of the earlier ANSI X3.64 standard for
+control sequences for video terminals and peripherals.
+
+Note that not all displays are ISO 6429-compliant, or even X3.64-compliant
+(or are even attempting to be so). This module will not work as expected on
+displays that do not honor these escape sequences, such as cmd.exe, 4nt.exe,
+and command.com under either Windows NT or Windows 2000. They may just be
+ignored, or they may display as an ESC character followed by some apparent
+garbage.
+
+Jean Delvare provided the following table of different common terminal
+emulators and their support for the various attributes and others have helped
+me flesh it out:
+
+ clear bold dark under blink reverse conceal
+ ------------------------------------------------------------------------
+ xterm yes yes no yes bold yes yes
+ linux yes yes yes bold yes yes no
+ rxvt yes yes no yes bold/black yes no
+ dtterm yes yes yes yes reverse yes yes
+ teraterm yes reverse no yes rev/red yes no
+ aixterm kinda normal no yes no yes yes
+ PuTTY yes color no yes no yes no
+ Windows yes no no no no yes no
+ Cygwin SSH yes yes no color color color yes
+ Mac Terminal yes yes no yes yes yes yes
+
+Windows is Windows telnet, Cygwin SSH is the OpenSSH implementation under
+Cygwin on Windows NT, and Mac Terminal is the Terminal application in Mac OS
+X. Where the entry is other than yes or no, that emulator displays the
+given attribute as something else instead. Note that on an aixterm, clear
+doesn't reset colors; you have to explicitly set the colors back to what you
+want. More entries in this table are welcome.
+
+Note that codes 3 (italic), 6 (rapid blink), and 9 (strikethrough) are
+specified in ANSI X3.64 and ECMA-048 but are not commonly supported by most
+displays and emulators and therefore aren't supported by this module at the
+present time. ECMA-048 also specifies a large number of other attributes,
+including a sequence of attributes for font changes, Fraktur characters,
+double-underlining, framing, circling, and overlining. As none of these
+attributes are widely supported or useful, they also aren't currently
+supported by this module.
+
+=head1 SEE ALSO
+
+ECMA-048 is available on-line (at least at the time of this writing) at
+L<http://www.ecma-international.org/publications/standards/ECMA-048.HTM>.
+
+ISO 6429 is available from ISO for a charge; the author of this module does
+not own a copy of it. Since the source material for ISO 6429 was ECMA-048
+and the latter is available for free, there seems little reason to obtain
+the ISO standard.
+
+The current version of this module is always available from its web site at
+L<http://www.eyrie.org/~eagle/software/ansicolor/>. It is also part of the
+Perl core distribution as of 5.6.0.
+
+=head1 AUTHORS
+
+Original idea (using constants) by Zenin, reimplemented using subs by Russ
+Allbery <rra@stanford.edu>, and then combined with the original idea by Russ
+with input from Zenin. Russ Allbery now maintains this module.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 1996, 1997, 1998, 2000, 2001, 2002 Russ Allbery <rra@stanford.edu>
+and Zenin. This program is free software; you may redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Term/Cap.pm b/Master/tlpkg/tlperl/lib/Term/Cap.pm
new file mode 100644
index 00000000000..b71c51ceba4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Term/Cap.pm
@@ -0,0 +1,669 @@
+package Term::Cap;
+
+# Since the debugger uses Term::ReadLine which uses Term::Cap, we want
+# to load as few modules as possible. This includes Carp.pm.
+sub carp {
+ require Carp;
+ goto &Carp::carp;
+}
+
+sub croak {
+ require Carp;
+ goto &Carp::croak;
+}
+
+use strict;
+
+use vars qw($VERSION $VMS_TERMCAP);
+use vars qw($termpat $state $first $entry);
+
+$VERSION = '1.09';
+
+# Version undef: Thu Dec 14 20:02:42 CST 1995 by sanders@bsdi.com
+# Version 1.00: Thu Nov 30 23:34:29 EST 2000 by schwern@pobox.com
+# [PATCH] $VERSION crusade, strict, tests, etc... all over lib/
+# Version 1.01: Wed May 23 00:00:00 CST 2001 by d-lewart@uiuc.edu
+# Avoid warnings in Tgetent and Tputs
+# Version 1.02: Sat Nov 17 13:50:39 GMT 2001 by jns@gellyfish.com
+# Altered layout of the POD
+# Added Test::More to PREREQ_PM in Makefile.PL
+# Fixed no argument Tgetent()
+# Version 1.03: Wed Nov 28 10:09:38 GMT 2001
+# VMS Support from Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
+# Version 1.04: Thu Nov 29 16:22:03 GMT 2001
+# Fixed warnings in test
+# Version 1.05: Mon Dec 3 15:33:49 GMT 2001
+# Don't try to fall back on infocmp if it's not there. From chromatic.
+# Version 1.06: Thu Dec 6 18:43:22 GMT 2001
+# Preload the default VMS termcap from Charles Lane
+# Don't carp at setting OSPEED unless warnings are on.
+# Version 1.07: Wed Jan 2 21:35:09 GMT 2002
+# Sanity check on infocmp output from Norton Allen
+# Repaired INSTALLDIRS thanks to Michael Schwern
+# Version 1.08: Sat Sep 28 11:33:15 BST 2002
+# Late loading of 'Carp' as per Michael Schwern
+# Version 1.09: Tue Apr 20 12:06:51 BST 2004
+# Merged in changes from and to Core
+# Core (Fri Aug 30 14:15:55 CEST 2002):
+# Cope with comments lines from 'infocmp' from Brendan O'Dea
+# Allow for EBCDIC in Tgoto magic test.
+
+# TODO:
+# support Berkeley DB termcaps
+# should probably be a .xs module
+# force $FH into callers package?
+# keep $FH in object at Tgetent time?
+
+=head1 NAME
+
+Term::Cap - Perl termcap interface
+
+=head1 SYNOPSIS
+
+ require Term::Cap;
+ $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
+ $terminal->Trequire(qw/ce ku kd/);
+ $terminal->Tgoto('cm', $col, $row, $FH);
+ $terminal->Tputs('dl', $count, $FH);
+ $terminal->Tpad($string, $count, $FH);
+
+=head1 DESCRIPTION
+
+These are low-level functions to extract and use capabilities from
+a terminal capability (termcap) database.
+
+More information on the terminal capabilities will be found in the
+termcap manpage on most Unix-like systems.
+
+=head2 METHODS
+
+=over 4
+
+The output strings for B<Tputs> are cached for counts of 1 for performance.
+B<Tgoto> and B<Tpad> do not cache. C<$self-E<gt>{_xx}> is the raw termcap
+data and C<$self-E<gt>{xx}> is the cached version.
+
+ print $terminal->Tpad($self->{_xx}, 1);
+
+B<Tgoto>, B<Tputs>, and B<Tpad> return the string and will also
+output the string to $FH if specified.
+
+
+=cut
+
+# Preload the default VMS termcap.
+# If a different termcap is required then the text of one can be supplied
+# in $Term::Cap::VMS_TERMCAP before Tgetent is called.
+
+if ( $^O eq 'VMS') {
+ chomp (my @entry = <DATA>);
+ $VMS_TERMCAP = join '', @entry;
+}
+
+# Returns a list of termcap files to check.
+
+sub termcap_path { ## private
+ my @termcap_path;
+ # $TERMCAP, if it's a filespec
+ push(@termcap_path, $ENV{TERMCAP})
+ if ((exists $ENV{TERMCAP}) &&
+ (($^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'dos')
+ ? $ENV{TERMCAP} =~ /^[a-z]:[\\\/]/is
+ : $ENV{TERMCAP} =~ /^\//s));
+ if ((exists $ENV{TERMPATH}) && ($ENV{TERMPATH})) {
+ # Add the users $TERMPATH
+ push(@termcap_path, split(/(:|\s+)/, $ENV{TERMPATH}))
+ }
+ else {
+ # Defaults
+ push(@termcap_path,
+ $ENV{'HOME'} . '/.termcap',
+ '/etc/termcap',
+ '/usr/share/misc/termcap',
+ );
+ }
+
+ # return the list of those termcaps that exist
+ return grep(-f, @termcap_path);
+}
+
+=item B<Tgetent>
+
+Returns a blessed object reference which the user can
+then use to send the control strings to the terminal using B<Tputs>
+and B<Tgoto>.
+
+The function extracts the entry of the specified terminal
+type I<TERM> (defaults to the environment variable I<TERM>) from the
+database.
+
+It will look in the environment for a I<TERMCAP> variable. If
+found, and the value does not begin with a slash, and the terminal
+type name is the same as the environment string I<TERM>, the
+I<TERMCAP> string is used instead of reading a termcap file. If
+it does begin with a slash, the string is used as a path name of
+the termcap file to search. If I<TERMCAP> does not begin with a
+slash and name is different from I<TERM>, B<Tgetent> searches the
+files F<$HOME/.termcap>, F</etc/termcap>, and F</usr/share/misc/termcap>,
+in that order, unless the environment variable I<TERMPATH> exists,
+in which case it specifies a list of file pathnames (separated by
+spaces or colons) to be searched B<instead>. Whenever multiple
+files are searched and a tc field occurs in the requested entry,
+the entry it names must be found in the same file or one of the
+succeeding files. If there is a C<:tc=...:> in the I<TERMCAP>
+environment variable string it will continue the search in the
+files as above.
+
+The extracted termcap entry is available in the object
+as C<$self-E<gt>{TERMCAP}>.
+
+It takes a hash reference as an argument with two optional keys:
+
+=over 2
+
+=item OSPEED
+
+The terminal output bit rate (often mistakenly called the baud rate)
+for this terminal - if not set a warning will be generated
+and it will be defaulted to 9600. I<OSPEED> can be be specified as
+either a POSIX termios/SYSV termio speeds (where 9600 equals 9600) or
+an old DSD-style speed ( where 13 equals 9600).
+
+
+=item TERM
+
+The terminal type whose termcap entry will be used - if not supplied it will
+default to $ENV{TERM}: if that is not set then B<Tgetent> will croak.
+
+=back
+
+It calls C<croak> on failure.
+
+=cut
+
+sub Tgetent { ## public -- static method
+ my $class = shift;
+ my ($self) = @_;
+
+ $self = {} unless defined $self;
+ bless $self, $class;
+
+ my($term,$cap,$search,$field,$max,$tmp_term,$TERMCAP);
+ local($termpat,$state,$first,$entry); # used inside eval
+ local $_;
+
+ # Compute PADDING factor from OSPEED (to be used by Tpad)
+ if (! $self->{OSPEED}) {
+ if ( $^W ) {
+ carp "OSPEED was not set, defaulting to 9600";
+ }
+ $self->{OSPEED} = 9600;
+ }
+ if ($self->{OSPEED} < 16) {
+ # delays for old style speeds
+ my @pad = (0,200,133.3,90.9,74.3,66.7,50,33.3,16.7,8.3,5.5,4.1,2,1,.5,.2);
+ $self->{PADDING} = $pad[$self->{OSPEED}];
+ }
+ else {
+ $self->{PADDING} = 10000 / $self->{OSPEED};
+ }
+
+ $self->{TERM} = ($self->{TERM} || $ENV{TERM} || croak "TERM not set");
+ $term = $self->{TERM}; # $term is the term type we are looking for
+
+ # $tmp_term is always the next term (possibly :tc=...:) we are looking for
+ $tmp_term = $self->{TERM};
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+
+ my $foo = (exists $ENV{TERMCAP} ? $ENV{TERMCAP} : '');
+
+ # $entry is the extracted termcap entry
+ if (($foo !~ m:^/:s) && ($foo =~ m/(^|\|)${termpat}[:|]/s)) {
+ $entry = $foo;
+ }
+
+ my @termcap_path = termcap_path();
+
+ unless (@termcap_path || $entry)
+ {
+ # last resort--fake up a termcap from terminfo
+ local $ENV{TERM} = $term;
+
+ if ( $^O eq 'VMS' ) {
+ $entry = $VMS_TERMCAP;
+ }
+ else {
+ if ( grep { -x "$_/infocmp" } split /:/, $ENV{PATH} ) {
+ eval
+ {
+ my $tmp = `infocmp -C 2>/dev/null`;
+ $tmp =~ s/^#.*\n//gm; # remove comments
+ if (( $tmp !~ m%^/%s ) && ( $tmp =~ /(^|\|)${termpat}[:|]/s)) {
+ $entry = $tmp;
+ }
+ };
+ }
+ }
+ }
+
+ croak "Can't find a valid termcap file" unless @termcap_path || $entry;
+
+ $state = 1; # 0 == finished
+ # 1 == next file
+ # 2 == search again
+
+ $first = 0; # first entry (keeps term name)
+
+ $max = 32; # max :tc=...:'s
+
+ if ($entry) {
+ # ok, we're starting with $TERMCAP
+ $first++; # we're the first entry
+ # do we need to continue?
+ if ($entry =~ s/:tc=([^:]+):/:/) {
+ $tmp_term = $1;
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+ }
+ else {
+ $state = 0; # we're already finished
+ }
+ }
+
+ # This is eval'ed inside the while loop for each file
+ $search = q{
+ while (<TERMCAP>) {
+ next if /^\\t/ || /^#/;
+ if ($_ =~ m/(^|\\|)${termpat}[:|]/o) {
+ chomp;
+ s/^[^:]*:// if $first++;
+ $state = 0;
+ while ($_ =~ s/\\\\$//) {
+ defined(my $x = <TERMCAP>) or last;
+ $_ .= $x; chomp;
+ }
+ last;
+ }
+ }
+ defined $entry or $entry = '';
+ $entry .= $_ if $_;
+ };
+
+ while ($state != 0) {
+ if ($state == 1) {
+ # get the next TERMCAP
+ $TERMCAP = shift @termcap_path
+ || croak "failed termcap lookup on $tmp_term";
+ }
+ else {
+ # do the same file again
+ # prevent endless recursion
+ $max-- || croak "failed termcap loop at $tmp_term";
+ $state = 1; # ok, maybe do a new file next time
+ }
+
+ open(TERMCAP,"< $TERMCAP\0") || croak "open $TERMCAP: $!";
+ eval $search;
+ die $@ if $@;
+ close TERMCAP;
+
+ # If :tc=...: found then search this file again
+ $entry =~ s/:tc=([^:]+):/:/ && ($tmp_term = $1, $state = 2);
+ # protect any pattern metacharacters in $tmp_term
+ $termpat = $tmp_term; $termpat =~ s/(\W)/\\$1/g;
+ }
+
+ croak "Can't find $term" if $entry eq '';
+ $entry =~ s/:+\s*:+/:/g; # cleanup $entry
+ $entry =~ s/:+/:/g; # cleanup $entry
+ $self->{TERMCAP} = $entry; # save it
+ # print STDERR "DEBUG: $entry = ", $entry, "\n";
+
+ # Precompile $entry into the object
+ $entry =~ s/^[^:]*://;
+ foreach $field (split(/:[\s:\\]*/,$entry)) {
+ if (defined $field && $field =~ /^(\w\w)$/) {
+ $self->{'_' . $field} = 1 unless defined $self->{'_' . $1};
+ # print STDERR "DEBUG: flag $1\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)\@/) {
+ $self->{'_' . $1} = "";
+ # print STDERR "DEBUG: unset $1\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)#(.*)/) {
+ $self->{'_' . $1} = $2 unless defined $self->{'_' . $1};
+ # print STDERR "DEBUG: numeric $1 = $2\n";
+ }
+ elsif (defined $field && $field =~ /^(\w\w)=(.*)/) {
+ # print STDERR "DEBUG: string $1 = $2\n";
+ next if defined $self->{'_' . ($cap = $1)};
+ $_ = $2;
+ s/\\E/\033/g;
+ s/\\(\d\d\d)/pack('c',oct($1) & 0177)/eg;
+ s/\\n/\n/g;
+ s/\\r/\r/g;
+ s/\\t/\t/g;
+ s/\\b/\b/g;
+ s/\\f/\f/g;
+ s/\\\^/\377/g;
+ s/\^\?/\177/g;
+ s/\^(.)/pack('c',ord($1) & 31)/eg;
+ s/\\(.)/$1/g;
+ s/\377/^/g;
+ $self->{'_' . $cap} = $_;
+ }
+ # else { carp "junk in $term ignored: $field"; }
+ }
+ $self->{'_pc'} = "\0" unless defined $self->{'_pc'};
+ $self->{'_bc'} = "\b" unless defined $self->{'_bc'};
+ $self;
+}
+
+# $terminal->Tpad($string, $cnt, $FH);
+
+=item B<Tpad>
+
+Outputs a literal string with appropriate padding for the current terminal.
+
+It takes three arguments:
+
+=over 2
+
+=item B<$string>
+
+The literal string to be output. If it starts with a number and an optional
+'*' then the padding will be increased by an amount relative to this number,
+if the '*' is present then this amount will me multiplied by $cnt. This part
+of $string is removed before output/
+
+=item B<$cnt>
+
+Will be used to modify the padding applied to string as described above.
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) that output will be printed to.
+
+=back
+
+The padded $string is returned.
+
+=cut
+
+sub Tpad { ## public
+ my $self = shift;
+ my($string, $cnt, $FH) = @_;
+ my($decr, $ms);
+
+ if (defined $string && $string =~ /(^[\d.]+)(\*?)(.*)$/) {
+ $ms = $1;
+ $ms *= $cnt if $2;
+ $string = $3;
+ $decr = $self->{PADDING};
+ if ($decr > .1) {
+ $ms += $decr / 2;
+ $string .= $self->{'_pc'} x ($ms / $decr);
+ }
+ }
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Tputs($cap, $cnt, $FH);
+
+=item B<Tputs>
+
+Output the string for the given capability padded as appropriate without
+any parameter substitution.
+
+It takes three arguments:
+
+=over 2
+
+=item B<$cap>
+
+The capability whose string is to be output.
+
+=item B<$cnt>
+
+A count passed to Tpad to modify the padding applied to the output string.
+If $cnt is zero or one then the resulting string will be cached.
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) that output will be printed to.
+
+=back
+
+The appropriate string for the capability will be returned.
+
+=cut
+
+sub Tputs { ## public
+ my $self = shift;
+ my($cap, $cnt, $FH) = @_;
+ my $string;
+
+ $cnt = 0 unless $cnt;
+
+ if ($cnt > 1) {
+ $string = Tpad($self, $self->{'_' . $cap}, $cnt);
+ } else {
+ # cache result because Tpad can be slow
+ unless (exists $self->{$cap}) {
+ $self->{$cap} = exists $self->{"_$cap"} ?
+ Tpad($self, $self->{"_$cap"}, 1) : undef;
+ }
+ $string = $self->{$cap};
+ }
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Tgoto($cap, $col, $row, $FH);
+
+=item B<Tgoto>
+
+B<Tgoto> decodes a cursor addressing string with the given parameters.
+
+There are four arguments:
+
+=over 2
+
+=item B<$cap>
+
+The name of the capability to be output.
+
+=item B<$col>
+
+The first value to be substituted in the output string ( usually the column
+in a cursor addressing capability )
+
+=item B<$row>
+
+The second value to be substituted in the output string (usually the row
+in cursor addressing capabilities)
+
+=item B<$FH>
+
+An optional filehandle (or IO::Handle ) to which the output string will be
+printed.
+
+=back
+
+Substitutions are made with $col and $row in the output string with the
+following sprintf() line formats:
+
+ %% output `%'
+ %d output value as in printf %d
+ %2 output value as in printf %2d
+ %3 output value as in printf %3d
+ %. output value as in printf %c
+ %+x add x to value, then do %.
+
+ %>xy if value > x then add y, no output
+ %r reverse order of two parameters, no output
+ %i increment by one, no output
+ %B BCD (16*(value/10)) + (value%10), no output
+
+ %n exclusive-or all parameters with 0140 (Datamedia 2500)
+ %D Reverse coding (value - 2*(value%16)), no output (Delta Data)
+
+The output string will be returned.
+
+=cut
+
+sub Tgoto { ## public
+ my $self = shift;
+ my($cap, $code, $tmp, $FH) = @_;
+ my $string = $self->{'_' . $cap};
+ my $result = '';
+ my $after = '';
+ my $online = 0;
+ my @tmp = ($tmp,$code);
+ my $cnt = $code;
+
+ while ($string =~ /^([^%]*)%(.)(.*)/) {
+ $result .= $1;
+ $code = $2;
+ $string = $3;
+ if ($code eq 'd') {
+ $result .= sprintf("%d",shift(@tmp));
+ }
+ elsif ($code eq '.') {
+ $tmp = shift(@tmp);
+ if ($tmp == 0 || $tmp == 4 || $tmp == 10) {
+ if ($online) {
+ ++$tmp, $after .= $self->{'_up'} if $self->{'_up'};
+ }
+ else {
+ ++$tmp, $after .= $self->{'_bc'};
+ }
+ }
+ $result .= sprintf("%c",$tmp);
+ $online = !$online;
+ }
+ elsif ($code eq '+') {
+ $result .= sprintf("%c",shift(@tmp)+ord($string));
+ $string = substr($string,1,99);
+ $online = !$online;
+ }
+ elsif ($code eq 'r') {
+ ($code,$tmp) = @tmp;
+ @tmp = ($tmp,$code);
+ $online = !$online;
+ }
+ elsif ($code eq '>') {
+ ($code,$tmp,$string) = unpack("CCa99",$string);
+ if ($tmp[$[] > $code) {
+ $tmp[$[] += $tmp;
+ }
+ }
+ elsif ($code eq '2') {
+ $result .= sprintf("%02d",shift(@tmp));
+ $online = !$online;
+ }
+ elsif ($code eq '3') {
+ $result .= sprintf("%03d",shift(@tmp));
+ $online = !$online;
+ }
+ elsif ($code eq 'i') {
+ ($code,$tmp) = @tmp;
+ @tmp = ($code+1,$tmp+1);
+ }
+ else {
+ return "OOPS";
+ }
+ }
+ $string = Tpad($self, $result . $string . $after, $cnt);
+ print $FH $string if $FH;
+ $string;
+}
+
+# $terminal->Trequire(qw/ce ku kd/);
+
+=item B<Trequire>
+
+Takes a list of capabilities as an argument and will croak if one is not
+found.
+
+=cut
+
+sub Trequire { ## public
+ my $self = shift;
+ my($cap,@undefined);
+ foreach $cap (@_) {
+ push(@undefined, $cap)
+ unless defined $self->{'_' . $cap} && $self->{'_' . $cap};
+ }
+ croak "Terminal does not support: (@undefined)" if @undefined;
+}
+
+=back
+
+=head1 EXAMPLES
+
+ use Term::Cap;
+
+ # Get terminal output speed
+ require POSIX;
+ my $termios = new POSIX::Termios;
+ $termios->getattr;
+ my $ospeed = $termios->getospeed;
+
+ # Old-style ioctl code to get ospeed:
+ # require 'ioctl.pl';
+ # ioctl(TTY,$TIOCGETP,$sgtty);
+ # ($ispeed,$ospeed) = unpack('cc',$sgtty);
+
+ # allocate and initialize a terminal structure
+ $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
+
+ # require certain capabilities to be available
+ $terminal->Trequire(qw/ce ku kd/);
+
+ # Output Routines, if $FH is undefined these just return the string
+
+ # Tgoto does the % expansion stuff with the given args
+ $terminal->Tgoto('cm', $col, $row, $FH);
+
+ # Tputs doesn't do any % expansion.
+ $terminal->Tputs('dl', $count = 1, $FH);
+
+=head1 COPYRIGHT AND LICENSE
+
+Please see the README file in distribution.
+
+=head1 AUTHOR
+
+This module is part of the core Perl distribution and is also maintained
+for CPAN by Jonathan Stowe <jns@gellyfish.com>.
+
+=head1 SEE ALSO
+
+termcap(5)
+
+=cut
+
+# Below is a default entry for systems where there are terminals but no
+# termcap
+1;
+__DATA__
+vt220|vt200|DEC VT220 in vt100 emulation mode:
+am:mi:xn:xo:
+co#80:li#24:
+RA=\E[?7l:SA=\E[?7h:
+ac=kkllmmjjnnwwqquuttvvxx:ae=\E(B:al=\E[L:as=\E(0:
+bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:
+cr=^M:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=\E[B:
+ei=\E[4l:ho=\E[H:im=\E[4h:
+is=\E[1;24r\E[24;1H:
+nd=\E[C:
+kd=\E[B::kl=\E[D:kr=\E[C:ku=\E[A:le=^H:
+mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:
+kb=\0177:
+r2=\E>\E[24;1H\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E=:rc=\E8:
+sc=\E7:se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:
+ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
+
diff --git a/Master/tlpkg/tlperl/lib/Term/Complete.pm b/Master/tlpkg/tlperl/lib/Term/Complete.pm
new file mode 100644
index 00000000000..601e4956430
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Term/Complete.pm
@@ -0,0 +1,188 @@
+package Term::Complete;
+require 5.000;
+require Exporter;
+
+use strict;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(Complete);
+our $VERSION = '1.402';
+
+# @(#)complete.pl,v1.2 (me@anywhere.EBay.Sun.COM) 09/23/91
+
+=head1 NAME
+
+Term::Complete - Perl word completion module
+
+=head1 SYNOPSIS
+
+ $input = Complete('prompt_string', \@completion_list);
+ $input = Complete('prompt_string', @completion_list);
+
+=head1 DESCRIPTION
+
+This routine provides word completion on the list of words in
+the array (or array ref).
+
+The tty driver is put into raw mode and restored using an operating
+system specific command, in UNIX-like environments C<stty>.
+
+The following command characters are defined:
+
+=over 4
+
+=item E<lt>tabE<gt>
+
+Attempts word completion.
+Cannot be changed.
+
+=item ^D
+
+Prints completion list.
+Defined by I<$Term::Complete::complete>.
+
+=item ^U
+
+Erases the current input.
+Defined by I<$Term::Complete::kill>.
+
+=item E<lt>delE<gt>, E<lt>bsE<gt>
+
+Erases one character.
+Defined by I<$Term::Complete::erase1> and I<$Term::Complete::erase2>.
+
+=back
+
+=head1 DIAGNOSTICS
+
+Bell sounds when word completion fails.
+
+=head1 BUGS
+
+The completion character E<lt>tabE<gt> cannot be changed.
+
+=head1 AUTHOR
+
+Wayne Thompson
+
+=cut
+
+our($complete, $kill, $erase1, $erase2, $tty_raw_noecho, $tty_restore, $stty, $tty_safe_restore);
+our($tty_saved_state) = '';
+CONFIG: {
+ $complete = "\004";
+ $kill = "\025";
+ $erase1 = "\177";
+ $erase2 = "\010";
+ foreach my $s (qw(/bin/stty /usr/bin/stty)) {
+ if (-x $s) {
+ $tty_raw_noecho = "$s raw -echo";
+ $tty_restore = "$s -raw echo";
+ $tty_safe_restore = $tty_restore;
+ $stty = $s;
+ last;
+ }
+ }
+}
+
+sub Complete {
+ my($prompt, @cmp_lst, $cmp, $test, $l, @match);
+ my ($return, $r) = ("", 0);
+
+ $return = "";
+ $r = 0;
+
+ $prompt = shift;
+ if (ref $_[0] || $_[0] =~ /^\*/) {
+ @cmp_lst = sort @{$_[0]};
+ }
+ else {
+ @cmp_lst = sort(@_);
+ }
+
+ # Attempt to save the current stty state, to be restored later
+ if (defined $stty && defined $tty_saved_state && $tty_saved_state eq '') {
+ $tty_saved_state = qx($stty -g 2>/dev/null);
+ if ($?) {
+ # stty -g not supported
+ $tty_saved_state = undef;
+ }
+ else {
+ $tty_saved_state =~ s/\s+$//g;
+ $tty_restore = qq($stty "$tty_saved_state" 2>/dev/null);
+ }
+ }
+ system $tty_raw_noecho if defined $tty_raw_noecho;
+ LOOP: {
+ local $_;
+ print($prompt, $return);
+ while (($_ = getc(STDIN)) ne "\r") {
+ CASE: {
+ # (TAB) attempt completion
+ $_ eq "\t" && do {
+ @match = grep(/^\Q$return/, @cmp_lst);
+ unless ($#match < 0) {
+ $l = length($test = shift(@match));
+ foreach $cmp (@match) {
+ until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
+ $l--;
+ }
+ }
+ print("\a");
+ print($test = substr($test, $r, $l - $r));
+ $r = length($return .= $test);
+ }
+ last CASE;
+ };
+
+ # (^D) completion list
+ $_ eq $complete && do {
+ print(join("\r\n", '', grep(/^\Q$return/, @cmp_lst)), "\r\n");
+ redo LOOP;
+ };
+
+ # (^U) kill
+ $_ eq $kill && do {
+ if ($r) {
+ $r = 0;
+ $return = "";
+ print("\r\n");
+ redo LOOP;
+ }
+ last CASE;
+ };
+
+ # (DEL) || (BS) erase
+ ($_ eq $erase1 || $_ eq $erase2) && do {
+ if($r) {
+ print("\b \b");
+ chop($return);
+ $r--;
+ }
+ last CASE;
+ };
+
+ # printable char
+ ord >= 32 && do {
+ $return .= $_;
+ $r++;
+ print;
+ last CASE;
+ };
+ }
+ }
+ }
+
+ # system $tty_restore if defined $tty_restore;
+ if (defined $tty_saved_state && defined $tty_restore && defined $tty_safe_restore)
+ {
+ system $tty_restore;
+ if ($?) {
+ # tty_restore caused error
+ system $tty_safe_restore;
+ }
+ }
+ print("\n");
+ $return;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Term/ReadLine.pm b/Master/tlpkg/tlperl/lib/Term/ReadLine.pm
new file mode 100644
index 00000000000..48eb9911a6f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Term/ReadLine.pm
@@ -0,0 +1,399 @@
+=head1 NAME
+
+Term::ReadLine - Perl interface to various C<readline> packages.
+If no real package is found, substitutes stubs instead of basic functions.
+
+=head1 SYNOPSIS
+
+ use Term::ReadLine;
+ my $term = new Term::ReadLine 'Simple Perl calc';
+ my $prompt = "Enter your arithmetic expression: ";
+ my $OUT = $term->OUT || \*STDOUT;
+ while ( defined ($_ = $term->readline($prompt)) ) {
+ my $res = eval($_);
+ warn $@ if $@;
+ print $OUT $res, "\n" unless $@;
+ $term->addhistory($_) if /\S/;
+ }
+
+=head1 DESCRIPTION
+
+This package is just a front end to some other packages. It's a stub to
+set up a common interface to the various ReadLine implementations found on
+CPAN (under the C<Term::ReadLine::*> namespace).
+
+=head1 Minimal set of supported functions
+
+All the supported functions should be called as methods, i.e., either as
+
+ $term = new Term::ReadLine 'name';
+
+or as
+
+ $term->addhistory('row');
+
+where $term is a return value of Term::ReadLine-E<gt>new().
+
+=over 12
+
+=item C<ReadLine>
+
+returns the actual package that executes the commands. Among possible
+values are C<Term::ReadLine::Gnu>, C<Term::ReadLine::Perl>,
+C<Term::ReadLine::Stub>.
+
+=item C<new>
+
+returns the handle for subsequent calls to following
+functions. Argument is the name of the application. Optionally can be
+followed by two arguments for C<IN> and C<OUT> filehandles. These
+arguments should be globs.
+
+=item C<readline>
+
+gets an input line, I<possibly> with actual C<readline>
+support. Trailing newline is removed. Returns C<undef> on C<EOF>.
+
+=item C<addhistory>
+
+adds the line to the history of input, from where it can be used if
+the actual C<readline> is present.
+
+=item C<IN>, C<OUT>
+
+return the filehandles for input and output or C<undef> if C<readline>
+input and output cannot be used for Perl.
+
+=item C<MinLine>
+
+If argument is specified, it is an advice on minimal size of line to
+be included into history. C<undef> means do not include anything into
+history. Returns the old value.
+
+=item C<findConsole>
+
+returns an array with two strings that give most appropriate names for
+files for input and output using conventions C<"E<lt>$in">, C<"E<gt>out">.
+
+=item Attribs
+
+returns a reference to a hash which describes internal configuration
+of the package. Names of keys in this hash conform to standard
+conventions with the leading C<rl_> stripped.
+
+=item C<Features>
+
+Returns a reference to a hash with keys being features present in
+current implementation. Several optional features are used in the
+minimal interface: C<appname> should be present if the first argument
+to C<new> is recognized, and C<minline> should be present if
+C<MinLine> method is not dummy. C<autohistory> should be present if
+lines are put into history automatically (maybe subject to
+C<MinLine>), and C<addhistory> if C<addhistory> method is not dummy.
+
+If C<Features> method reports a feature C<attribs> as present, the
+method C<Attribs> is not dummy.
+
+=back
+
+=head1 Additional supported functions
+
+Actually C<Term::ReadLine> can use some other package, that will
+support a richer set of commands.
+
+All these commands are callable via method interface and have names
+which conform to standard conventions with the leading C<rl_> stripped.
+
+The stub package included with the perl distribution allows some
+additional methods:
+
+=over 12
+
+=item C<tkRunning>
+
+makes Tk event loop run when waiting for user input (i.e., during
+C<readline> method).
+
+=item C<ornaments>
+
+makes the command line stand out by using termcap data. The argument
+to C<ornaments> should be 0, 1, or a string of a form
+C<"aa,bb,cc,dd">. Four components of this string should be names of
+I<terminal capacities>, first two will be issued to make the prompt
+standout, last two to make the input line standout.
+
+=item C<newTTY>
+
+takes two arguments which are input filehandle and output filehandle.
+Switches to use these filehandles.
+
+=back
+
+One can check whether the currently loaded ReadLine package supports
+these methods by checking for corresponding C<Features>.
+
+=head1 EXPORTS
+
+None
+
+=head1 ENVIRONMENT
+
+The environment variable C<PERL_RL> governs which ReadLine clone is
+loaded. If the value is false, a dummy interface is used. If the value
+is true, it should be tail of the name of the package to use, such as
+C<Perl> or C<Gnu>.
+
+As a special case, if the value of this variable is space-separated,
+the tail might be used to disable the ornaments by setting the tail to
+be C<o=0> or C<ornaments=0>. The head should be as described above, say
+
+If the variable is not set, or if the head of space-separated list is
+empty, the best available package is loaded.
+
+ export "PERL_RL=Perl o=0" # Use Perl ReadLine without ornaments
+ export "PERL_RL= o=0" # Use best available ReadLine without ornaments
+
+(Note that processing of C<PERL_RL> for ornaments is in the discretion of the
+particular used C<Term::ReadLine::*> package).
+
+=head1 CAVEATS
+
+It seems that using Term::ReadLine from Emacs minibuffer doesn't work
+quite right and one will get an error message like
+
+ Cannot open /dev/tty for read at ...
+
+One possible workaround for this is to explicitly open /dev/tty like this
+
+ open (FH, "/dev/tty" )
+ or eval 'sub Term::ReadLine::findConsole { ("&STDIN", "&STDERR") }';
+ die $@ if $@;
+ close (FH);
+
+or you can try using the 4-argument form of Term::ReadLine->new().
+
+=cut
+
+use strict;
+
+package Term::ReadLine::Stub;
+our @ISA = qw'Term::ReadLine::Tk Term::ReadLine::TermCap';
+
+$DB::emacs = $DB::emacs; # To peacify -w
+our @rl_term_set;
+*rl_term_set = \@Term::ReadLine::TermCap::rl_term_set;
+
+sub PERL_UNICODE_STDIN () { 0x0001 }
+
+sub ReadLine {'Term::ReadLine::Stub'}
+sub readline {
+ my $self = shift;
+ my ($in,$out,$str) = @$self;
+ my $prompt = shift;
+ print $out $rl_term_set[0], $prompt, $rl_term_set[1], $rl_term_set[2];
+ $self->register_Tk
+ if not $Term::ReadLine::registered and $Term::ReadLine::toloop
+ and defined &Tk::DoOneEvent;
+ #$str = scalar <$in>;
+ $str = $self->get_line;
+ $str =~ s/^\s*\Q$prompt\E// if ($^O eq 'MacOS');
+ utf8::upgrade($str)
+ if (${^UNICODE} & PERL_UNICODE_STDIN || defined ${^ENCODING}) &&
+ utf8::valid($str);
+ print $out $rl_term_set[3];
+ # bug in 5.000: chomping empty string creats length -1:
+ chomp $str if defined $str;
+ $str;
+}
+sub addhistory {}
+
+sub findConsole {
+ my $console;
+
+ if ($^O eq 'MacOS') {
+ $console = "Dev:Console";
+ } elsif (-e "/dev/tty") {
+ $console = "/dev/tty";
+ } elsif (-e "con" or $^O eq 'MSWin32') {
+ $console = "con";
+ } else {
+ $console = "sys\$command";
+ }
+
+ if (($^O eq 'amigaos') || ($^O eq 'beos') || ($^O eq 'epoc')) {
+ $console = undef;
+ }
+ elsif ($^O eq 'os2') {
+ if ($DB::emacs) {
+ $console = undef;
+ } else {
+ $console = "/dev/con";
+ }
+ }
+
+ my $consoleOUT = $console;
+ $console = "&STDIN" unless defined $console;
+ if (!defined $consoleOUT) {
+ $consoleOUT = defined fileno(STDERR) ? "&STDERR" : "&STDOUT";
+ }
+ ($console,$consoleOUT);
+}
+
+sub new {
+ die "method new called with wrong number of arguments"
+ unless @_==2 or @_==4;
+ #local (*FIN, *FOUT);
+ my ($FIN, $FOUT, $ret);
+ if (@_==2) {
+ my($console, $consoleOUT) = $_[0]->findConsole;
+
+ open(FIN, "<$console");
+ open(FOUT,">$consoleOUT");
+ #OUT->autoflush(1); # Conflicts with debugger?
+ my $sel = select(FOUT);
+ $| = 1; # for DB::OUT
+ select($sel);
+ $ret = bless [\*FIN, \*FOUT];
+ } else { # Filehandles supplied
+ $FIN = $_[2]; $FOUT = $_[3];
+ #OUT->autoflush(1); # Conflicts with debugger?
+ my $sel = select($FOUT);
+ $| = 1; # for DB::OUT
+ select($sel);
+ $ret = bless [$FIN, $FOUT];
+ }
+ if ($ret->Features->{ornaments}
+ and not ($ENV{PERL_RL} and $ENV{PERL_RL} =~ /\bo\w*=0/)) {
+ local $Term::ReadLine::termcap_nowarn = 1;
+ $ret->ornaments(1);
+ }
+ return $ret;
+}
+
+sub newTTY {
+ my ($self, $in, $out) = @_;
+ $self->[0] = $in;
+ $self->[1] = $out;
+ my $sel = select($out);
+ $| = 1; # for DB::OUT
+ select($sel);
+}
+
+sub IN { shift->[0] }
+sub OUT { shift->[1] }
+sub MinLine { undef }
+sub Attribs { {} }
+
+my %features = (tkRunning => 1, ornaments => 1, 'newTTY' => 1);
+sub Features { \%features }
+
+package Term::ReadLine; # So late to allow the above code be defined?
+
+our $VERSION = '1.02';
+
+my ($which) = exists $ENV{PERL_RL} ? split /\s+/, $ENV{PERL_RL} : undef;
+if ($which) {
+ if ($which =~ /\bgnu\b/i){
+ eval "use Term::ReadLine::Gnu;";
+ } elsif ($which =~ /\bperl\b/i) {
+ eval "use Term::ReadLine::Perl;";
+ } else {
+ eval "use Term::ReadLine::$which;";
+ }
+} elsif (defined $which and $which ne '') { # Defined but false
+ # Do nothing fancy
+} else {
+ eval "use Term::ReadLine::Gnu; 1" or eval "use Term::ReadLine::Perl; 1";
+}
+
+#require FileHandle;
+
+# To make possible switch off RL in debugger: (Not needed, work done
+# in debugger).
+our @ISA;
+if (defined &Term::ReadLine::Gnu::readline) {
+ @ISA = qw(Term::ReadLine::Gnu Term::ReadLine::Stub);
+} elsif (defined &Term::ReadLine::Perl::readline) {
+ @ISA = qw(Term::ReadLine::Perl Term::ReadLine::Stub);
+} elsif (defined $which && defined &{"Term::ReadLine::$which\::readline"}) {
+ @ISA = "Term::ReadLine::$which";
+} else {
+ @ISA = qw(Term::ReadLine::Stub);
+}
+
+package Term::ReadLine::TermCap;
+
+# Prompt-start, prompt-end, command-line-start, command-line-end
+# -- zero-width beautifies to emit around prompt and the command line.
+our @rl_term_set = ("","","","");
+# string encoded:
+our $rl_term_set = ',,,';
+
+our $terminal;
+sub LoadTermCap {
+ return if defined $terminal;
+
+ require Term::Cap;
+ $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
+}
+
+sub ornaments {
+ shift;
+ return $rl_term_set unless @_;
+ $rl_term_set = shift;
+ $rl_term_set ||= ',,,';
+ $rl_term_set = 'us,ue,md,me' if $rl_term_set eq '1';
+ my @ts = split /,/, $rl_term_set, 4;
+ eval { LoadTermCap };
+ unless (defined $terminal) {
+ warn("Cannot find termcap: $@\n") unless $Term::ReadLine::termcap_nowarn;
+ $rl_term_set = ',,,';
+ return;
+ }
+ @rl_term_set = map {$_ ? $terminal->Tputs($_,1) || '' : ''} @ts;
+ return $rl_term_set;
+}
+
+
+package Term::ReadLine::Tk;
+
+our($count_handle, $count_DoOne, $count_loop);
+$count_handle = $count_DoOne = $count_loop = 0;
+
+our($giveup);
+sub handle {$giveup = 1; $count_handle++}
+
+sub Tk_loop {
+ # Tk->tkwait('variable',\$giveup); # needs Widget
+ $count_DoOne++, Tk::DoOneEvent(0) until $giveup;
+ $count_loop++;
+ $giveup = 0;
+}
+
+sub register_Tk {
+ my $self = shift;
+ $Term::ReadLine::registered++
+ or Tk->fileevent($self->IN,'readable',\&handle);
+}
+
+sub tkRunning {
+ $Term::ReadLine::toloop = $_[1] if @_ > 1;
+ $Term::ReadLine::toloop;
+}
+
+sub get_c {
+ my $self = shift;
+ $self->Tk_loop if $Term::ReadLine::toloop && defined &Tk::DoOneEvent;
+ return getc $self->IN;
+}
+
+sub get_line {
+ my $self = shift;
+ $self->Tk_loop if $Term::ReadLine::toloop && defined &Tk::DoOneEvent;
+ my $in = $self->IN;
+ local ($/) = "\n";
+ return scalar <$in>;
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Text/Abbrev.pm b/Master/tlpkg/tlperl/lib/Text/Abbrev.pm
new file mode 100644
index 00000000000..c6be63bcc60
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/Abbrev.pm
@@ -0,0 +1,84 @@
+package Text::Abbrev;
+require 5.005; # Probably works on earlier versions too.
+require Exporter;
+
+our $VERSION = '1.01';
+
+=head1 NAME
+
+abbrev - create an abbreviation table from a list
+
+=head1 SYNOPSIS
+
+ use Text::Abbrev;
+ abbrev $hashref, LIST
+
+
+=head1 DESCRIPTION
+
+Stores all unambiguous truncations of each element of LIST
+as keys in the associative array referenced by C<$hashref>.
+The values are the original list elements.
+
+=head1 EXAMPLE
+
+ $hashref = abbrev qw(list edit send abort gripe);
+
+ %hash = abbrev qw(list edit send abort gripe);
+
+ abbrev $hashref, qw(list edit send abort gripe);
+
+ abbrev(*hash, qw(list edit send abort gripe));
+
+=cut
+
+@ISA = qw(Exporter);
+@EXPORT = qw(abbrev);
+
+# Usage:
+# abbrev \%foo, LIST;
+# ...
+# $long = $foo{$short};
+
+sub abbrev {
+ my ($word, $hashref, $glob, %table, $returnvoid);
+
+ @_ or return; # So we don't autovivify onto @_ and trigger warning
+ if (ref($_[0])) { # hash reference preferably
+ $hashref = shift;
+ $returnvoid = 1;
+ } elsif (ref \$_[0] eq 'GLOB') { # is actually a glob (deprecated)
+ $hashref = \%{shift()};
+ $returnvoid = 1;
+ }
+ %{$hashref} = ();
+
+ WORD: foreach $word (@_) {
+ for (my $len = (length $word) - 1; $len > 0; --$len) {
+ my $abbrev = substr($word,0,$len);
+ my $seen = ++$table{$abbrev};
+ if ($seen == 1) { # We're the first word so far to have
+ # this abbreviation.
+ $hashref->{$abbrev} = $word;
+ } elsif ($seen == 2) { # We're the second word to have this
+ # abbreviation, so we can't use it.
+ delete $hashref->{$abbrev};
+ } else { # We're the third word to have this
+ # abbreviation, so skip to the next word.
+ next WORD;
+ }
+ }
+ }
+ # Non-abbreviations always get entered, even if they aren't unique
+ foreach $word (@_) {
+ $hashref->{$word} = $word;
+ }
+ return if $returnvoid;
+ if (wantarray) {
+ %{$hashref};
+ } else {
+ $hashref;
+ }
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Text/Balanced.pm b/Master/tlpkg/tlperl/lib/Text/Balanced.pm
new file mode 100644
index 00000000000..820ae255a71
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/Balanced.pm
@@ -0,0 +1,2302 @@
+# EXTRACT VARIOUSLY DELIMITED TEXT SEQUENCES FROM STRINGS.
+# FOR FULL DOCUMENTATION SEE Balanced.pod
+
+use 5.005;
+use strict;
+
+package Text::Balanced;
+
+use Exporter;
+use SelfLoader;
+use vars qw { $VERSION @ISA %EXPORT_TAGS };
+
+$VERSION = '1.95';
+@ISA = qw ( Exporter );
+
+%EXPORT_TAGS = ( ALL => [ qw(
+ &extract_delimited
+ &extract_bracketed
+ &extract_quotelike
+ &extract_codeblock
+ &extract_variable
+ &extract_tagged
+ &extract_multiple
+
+ &gen_delimited_pat
+ &gen_extract_tagged
+
+ &delimited_pat
+ ) ] );
+
+Exporter::export_ok_tags('ALL');
+
+# PROTOTYPES
+
+sub _match_bracketed($$$$$$);
+sub _match_variable($$);
+sub _match_codeblock($$$$$$$);
+sub _match_quotelike($$$$);
+
+# HANDLE RETURN VALUES IN VARIOUS CONTEXTS
+
+sub _failmsg {
+ my ($message, $pos) = @_;
+ $@ = bless { error=>$message, pos=>$pos }, "Text::Balanced::ErrorMsg";
+}
+
+sub _fail
+{
+ my ($wantarray, $textref, $message, $pos) = @_;
+ _failmsg $message, $pos if $message;
+ return ("",$$textref,"") if $wantarray;
+ return undef;
+}
+
+sub _succeed
+{
+ $@ = undef;
+ my ($wantarray,$textref) = splice @_, 0, 2;
+ my ($extrapos, $extralen) = @_>18 ? splice(@_, -2, 2) : (0,0);
+ my ($startlen) = $_[5];
+ my $remainderpos = $_[2];
+ if ($wantarray)
+ {
+ my @res;
+ while (my ($from, $len) = splice @_, 0, 2)
+ {
+ push @res, substr($$textref,$from,$len);
+ }
+ if ($extralen) { # CORRECT FILLET
+ my $extra = substr($res[0], $extrapos-$startlen, $extralen, "\n");
+ $res[1] = "$extra$res[1]";
+ eval { substr($$textref,$remainderpos,0) = $extra;
+ substr($$textref,$extrapos,$extralen,"\n")} ;
+ #REARRANGE HERE DOC AND FILLET IF POSSIBLE
+ pos($$textref) = $remainderpos-$extralen+1; # RESET \G
+ }
+ else {
+ pos($$textref) = $remainderpos; # RESET \G
+ }
+ return @res;
+ }
+ else
+ {
+ my $match = substr($$textref,$_[0],$_[1]);
+ substr($match,$extrapos-$_[0]-$startlen,$extralen,"") if $extralen;
+ my $extra = $extralen
+ ? substr($$textref, $extrapos, $extralen)."\n" : "";
+ eval {substr($$textref,$_[4],$_[1]+$_[5])=$extra} ; #CHOP OUT PREFIX & MATCH, IF POSSIBLE
+ pos($$textref) = $_[4]; # RESET \G
+ return $match;
+ }
+}
+
+# BUILD A PATTERN MATCHING A SIMPLE DELIMITED STRING
+
+sub gen_delimited_pat($;$) # ($delimiters;$escapes)
+{
+ my ($dels, $escs) = @_;
+ return "" unless $dels =~ /\S/;
+ $escs = '\\' unless $escs;
+ $escs .= substr($escs,-1) x (length($dels)-length($escs));
+ my @pat = ();
+ my $i;
+ for ($i=0; $i<length $dels; $i++)
+ {
+ my $del = quotemeta substr($dels,$i,1);
+ my $esc = quotemeta substr($escs,$i,1);
+ if ($del eq $esc)
+ {
+ push @pat, "$del(?:[^$del]*(?:(?:$del$del)[^$del]*)*)$del";
+ }
+ else
+ {
+ push @pat, "$del(?:[^$esc$del]*(?:$esc.[^$esc$del]*)*)$del";
+ }
+ }
+ my $pat = join '|', @pat;
+ return "(?:$pat)";
+}
+
+*delimited_pat = \&gen_delimited_pat;
+
+
+# THE EXTRACTION FUNCTIONS
+
+sub extract_delimited (;$$$$)
+{
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ my $wantarray = wantarray;
+ my $del = defined $_[1] ? $_[1] : qq{\'\"\`};
+ my $pre = defined $_[2] ? $_[2] : '\s*';
+ my $esc = defined $_[3] ? $_[3] : qq{\\};
+ my $pat = gen_delimited_pat($del, $esc);
+ my $startpos = pos $$textref || 0;
+ return _fail($wantarray, $textref, "Not a delimited pattern", 0)
+ unless $$textref =~ m/\G($pre)($pat)/gc;
+ my $prelen = length($1);
+ my $matchpos = $startpos+$prelen;
+ my $endpos = pos $$textref;
+ return _succeed $wantarray, $textref,
+ $matchpos, $endpos-$matchpos, # MATCH
+ $endpos, length($$textref)-$endpos, # REMAINDER
+ $startpos, $prelen; # PREFIX
+}
+
+sub extract_bracketed (;$$$)
+{
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ my $ldel = defined $_[1] ? $_[1] : '{([<';
+ my $pre = defined $_[2] ? $_[2] : '\s*';
+ my $wantarray = wantarray;
+ my $qdel = "";
+ my $quotelike;
+ $ldel =~ s/'//g and $qdel .= q{'};
+ $ldel =~ s/"//g and $qdel .= q{"};
+ $ldel =~ s/`//g and $qdel .= q{`};
+ $ldel =~ s/q//g and $quotelike = 1;
+ $ldel =~ tr/[](){}<>\0-\377/[[(({{<</ds;
+ my $rdel = $ldel;
+ unless ($rdel =~ tr/[({</])}>/)
+ {
+ return _fail $wantarray, $textref,
+ "Did not find a suitable bracket in delimiter: \"$_[1]\"",
+ 0;
+ }
+ my $posbug = pos;
+ $ldel = join('|', map { quotemeta $_ } split('', $ldel));
+ $rdel = join('|', map { quotemeta $_ } split('', $rdel));
+ pos = $posbug;
+
+ my $startpos = pos $$textref || 0;
+ my @match = _match_bracketed($textref,$pre, $ldel, $qdel, $quotelike, $rdel);
+
+ return _fail ($wantarray, $textref) unless @match;
+
+ return _succeed ( $wantarray, $textref,
+ $match[2], $match[5]+2, # MATCH
+ @match[8,9], # REMAINDER
+ @match[0,1], # PREFIX
+ );
+}
+
+sub _match_bracketed($$$$$$) # $textref, $pre, $ldel, $qdel, $quotelike, $rdel
+{
+ my ($textref, $pre, $ldel, $qdel, $quotelike, $rdel) = @_;
+ my ($startpos, $ldelpos, $endpos) = (pos $$textref = pos $$textref||0);
+ unless ($$textref =~ m/\G$pre/gc)
+ {
+ _failmsg "Did not find prefix: /$pre/", $startpos;
+ return;
+ }
+
+ $ldelpos = pos $$textref;
+
+ unless ($$textref =~ m/\G($ldel)/gc)
+ {
+ _failmsg "Did not find opening bracket after prefix: \"$pre\"",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+
+ my @nesting = ( $1 );
+ my $textlen = length $$textref;
+ while (pos $$textref < $textlen)
+ {
+ next if $$textref =~ m/\G\\./gcs;
+
+ if ($$textref =~ m/\G($ldel)/gc)
+ {
+ push @nesting, $1;
+ }
+ elsif ($$textref =~ m/\G($rdel)/gc)
+ {
+ my ($found, $brackettype) = ($1, $1);
+ if ($#nesting < 0)
+ {
+ _failmsg "Unmatched closing bracket: \"$found\"",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ my $expected = pop(@nesting);
+ $expected =~ tr/({[</)}]>/;
+ if ($expected ne $brackettype)
+ {
+ _failmsg qq{Mismatched closing bracket: expected "$expected" but found "$found"},
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ last if $#nesting < 0;
+ }
+ elsif ($qdel && $$textref =~ m/\G([$qdel])/gc)
+ {
+ $$textref =~ m/\G[^\\$1]*(?:\\.[^\\$1]*)*(\Q$1\E)/gsc and next;
+ _failmsg "Unmatched embedded quote ($1)",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ elsif ($quotelike && _match_quotelike($textref,"",1,0))
+ {
+ next;
+ }
+
+ else { $$textref =~ m/\G(?:[a-zA-Z0-9]+|.)/gcs }
+ }
+ if ($#nesting>=0)
+ {
+ _failmsg "Unmatched opening bracket(s): "
+ . join("..",@nesting)."..",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+
+ $endpos = pos $$textref;
+
+ return (
+ $startpos, $ldelpos-$startpos, # PREFIX
+ $ldelpos, 1, # OPENING BRACKET
+ $ldelpos+1, $endpos-$ldelpos-2, # CONTENTS
+ $endpos-1, 1, # CLOSING BRACKET
+ $endpos, length($$textref)-$endpos, # REMAINDER
+ );
+}
+
+sub revbracket($)
+{
+ my $brack = reverse $_[0];
+ $brack =~ tr/[({</])}>/;
+ return $brack;
+}
+
+my $XMLNAME = q{[a-zA-Z_:][a-zA-Z0-9_:.-]*};
+
+sub extract_tagged (;$$$$$) # ($text, $opentag, $closetag, $pre, \%options)
+{
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ my $ldel = $_[1];
+ my $rdel = $_[2];
+ my $pre = defined $_[3] ? $_[3] : '\s*';
+ my %options = defined $_[4] ? %{$_[4]} : ();
+ my $omode = defined $options{fail} ? $options{fail} : '';
+ my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}})
+ : defined($options{reject}) ? $options{reject}
+ : ''
+ ;
+ my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}})
+ : defined($options{ignore}) ? $options{ignore}
+ : ''
+ ;
+
+ if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; }
+ $@ = undef;
+
+ my @match = _match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore);
+
+ return _fail(wantarray, $textref) unless @match;
+ return _succeed wantarray, $textref,
+ $match[2], $match[3]+$match[5]+$match[7], # MATCH
+ @match[8..9,0..1,2..7]; # REM, PRE, BITS
+}
+
+sub _match_tagged # ($$$$$$$)
+{
+ my ($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore) = @_;
+ my $rdelspec;
+
+ my ($startpos, $opentagpos, $textpos, $parapos, $closetagpos, $endpos) = ( pos($$textref) = pos($$textref)||0 );
+
+ unless ($$textref =~ m/\G($pre)/gc)
+ {
+ _failmsg "Did not find prefix: /$pre/", pos $$textref;
+ goto failed;
+ }
+
+ $opentagpos = pos($$textref);
+
+ unless ($$textref =~ m/\G$ldel/gc)
+ {
+ _failmsg "Did not find opening tag: /$ldel/", pos $$textref;
+ goto failed;
+ }
+
+ $textpos = pos($$textref);
+
+ if (!defined $rdel)
+ {
+ $rdelspec = $&;
+ unless ($rdelspec =~ s/\A([[(<{]+)($XMLNAME).*/ quotemeta "$1\/$2". revbracket($1) /oes)
+ {
+ _failmsg "Unable to construct closing tag to match: $rdel",
+ pos $$textref;
+ goto failed;
+ }
+ }
+ else
+ {
+ $rdelspec = eval "qq{$rdel}" || do {
+ my $del;
+ for (qw,~ ! ^ & * ) _ + - = } ] : " ; ' > . ? / | ',)
+ { next if $rdel =~ /\Q$_/; $del = $_; last }
+ unless ($del) {
+ use Carp;
+ croak "Can't interpolate right delimiter $rdel"
+ }
+ eval "qq$del$rdel$del";
+ };
+ }
+
+ while (pos($$textref) < length($$textref))
+ {
+ next if $$textref =~ m/\G\\./gc;
+
+ if ($$textref =~ m/\G(\n[ \t]*\n)/gc )
+ {
+ $parapos = pos($$textref) - length($1)
+ unless defined $parapos;
+ }
+ elsif ($$textref =~ m/\G($rdelspec)/gc )
+ {
+ $closetagpos = pos($$textref)-length($1);
+ goto matched;
+ }
+ elsif ($ignore && $$textref =~ m/\G(?:$ignore)/gc)
+ {
+ next;
+ }
+ elsif ($bad && $$textref =~ m/\G($bad)/gcs)
+ {
+ pos($$textref) -= length($1); # CUT OFF WHATEVER CAUSED THE SHORTNESS
+ goto short if ($omode eq 'PARA' || $omode eq 'MAX');
+ _failmsg "Found invalid nested tag: $1", pos $$textref;
+ goto failed;
+ }
+ elsif ($$textref =~ m/\G($ldel)/gc)
+ {
+ my $tag = $1;
+ pos($$textref) -= length($tag); # REWIND TO NESTED TAG
+ unless (_match_tagged(@_)) # MATCH NESTED TAG
+ {
+ goto short if $omode eq 'PARA' || $omode eq 'MAX';
+ _failmsg "Found unbalanced nested tag: $tag",
+ pos $$textref;
+ goto failed;
+ }
+ }
+ else { $$textref =~ m/./gcs }
+ }
+
+short:
+ $closetagpos = pos($$textref);
+ goto matched if $omode eq 'MAX';
+ goto failed unless $omode eq 'PARA';
+
+ if (defined $parapos) { pos($$textref) = $parapos }
+ else { $parapos = pos($$textref) }
+
+ return (
+ $startpos, $opentagpos-$startpos, # PREFIX
+ $opentagpos, $textpos-$opentagpos, # OPENING TAG
+ $textpos, $parapos-$textpos, # TEXT
+ $parapos, 0, # NO CLOSING TAG
+ $parapos, length($$textref)-$parapos, # REMAINDER
+ );
+
+matched:
+ $endpos = pos($$textref);
+ return (
+ $startpos, $opentagpos-$startpos, # PREFIX
+ $opentagpos, $textpos-$opentagpos, # OPENING TAG
+ $textpos, $closetagpos-$textpos, # TEXT
+ $closetagpos, $endpos-$closetagpos, # CLOSING TAG
+ $endpos, length($$textref)-$endpos, # REMAINDER
+ );
+
+failed:
+ _failmsg "Did not find closing tag", pos $$textref unless $@;
+ pos($$textref) = $startpos;
+ return;
+}
+
+sub extract_variable (;$$)
+{
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ return ("","","") unless defined $$textref;
+ my $pre = defined $_[1] ? $_[1] : '\s*';
+
+ my @match = _match_variable($textref,$pre);
+
+ return _fail wantarray, $textref unless @match;
+
+ return _succeed wantarray, $textref,
+ @match[2..3,4..5,0..1]; # MATCH, REMAINDER, PREFIX
+}
+
+sub _match_variable($$)
+{
+# $#
+# $^
+# $$
+ my ($textref, $pre) = @_;
+ my $startpos = pos($$textref) = pos($$textref)||0;
+ unless ($$textref =~ m/\G($pre)/gc)
+ {
+ _failmsg "Did not find prefix: /$pre/", pos $$textref;
+ return;
+ }
+ my $varpos = pos($$textref);
+ unless ($$textref =~ m{\G\$\s*(?!::)(\d+|[][&`'+*./|,";%=~:?!\@<>()-]|\^[a-z]?)}gci)
+ {
+ unless ($$textref =~ m/\G((\$#?|[*\@\%]|\\&)+)/gc)
+ {
+ _failmsg "Did not find leading dereferencer", pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ my $deref = $1;
+
+ unless ($$textref =~ m/\G\s*(?:::|')?(?:[_a-z]\w*(?:::|'))*[_a-z]\w*/gci
+ or _match_codeblock($textref, "", '\{', '\}', '\{', '\}', 0)
+ or $deref eq '$#' or $deref eq '$$' )
+ {
+ _failmsg "Bad identifier after dereferencer", pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ }
+
+ while (1)
+ {
+ next if $$textref =~ m/\G\s*(?:->)?\s*[{]\w+[}]/gc;
+ next if _match_codeblock($textref,
+ qr/\s*->\s*(?:[_a-zA-Z]\w+\s*)?/,
+ qr/[({[]/, qr/[)}\]]/,
+ qr/[({[]/, qr/[)}\]]/, 0);
+ next if _match_codeblock($textref,
+ qr/\s*/, qr/[{[]/, qr/[}\]]/,
+ qr/[{[]/, qr/[}\]]/, 0);
+ next if _match_variable($textref,'\s*->\s*');
+ next if $$textref =~ m/\G\s*->\s*\w+(?![{([])/gc;
+ last;
+ }
+
+ my $endpos = pos($$textref);
+ return ($startpos, $varpos-$startpos,
+ $varpos, $endpos-$varpos,
+ $endpos, length($$textref)-$endpos
+ );
+}
+
+sub extract_codeblock (;$$$$$)
+{
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ my $wantarray = wantarray;
+ my $ldel_inner = defined $_[1] ? $_[1] : '{';
+ my $pre = defined $_[2] ? $_[2] : '\s*';
+ my $ldel_outer = defined $_[3] ? $_[3] : $ldel_inner;
+ my $rd = $_[4];
+ my $rdel_inner = $ldel_inner;
+ my $rdel_outer = $ldel_outer;
+ my $posbug = pos;
+ for ($ldel_inner, $ldel_outer) { tr/[]()<>{}\0-\377/[[((<<{{/ds }
+ for ($rdel_inner, $rdel_outer) { tr/[]()<>{}\0-\377/]]))>>}}/ds }
+ for ($ldel_inner, $ldel_outer, $rdel_inner, $rdel_outer)
+ {
+ $_ = '('.join('|',map { quotemeta $_ } split('',$_)).')'
+ }
+ pos = $posbug;
+
+ my @match = _match_codeblock($textref, $pre,
+ $ldel_outer, $rdel_outer,
+ $ldel_inner, $rdel_inner,
+ $rd);
+ return _fail($wantarray, $textref) unless @match;
+ return _succeed($wantarray, $textref,
+ @match[2..3,4..5,0..1] # MATCH, REMAINDER, PREFIX
+ );
+
+}
+
+sub _match_codeblock($$$$$$$)
+{
+ my ($textref, $pre, $ldel_outer, $rdel_outer, $ldel_inner, $rdel_inner, $rd) = @_;
+ my $startpos = pos($$textref) = pos($$textref) || 0;
+ unless ($$textref =~ m/\G($pre)/gc)
+ {
+ _failmsg qq{Did not match prefix /$pre/ at"} .
+ substr($$textref,pos($$textref),20) .
+ q{..."},
+ pos $$textref;
+ return;
+ }
+ my $codepos = pos($$textref);
+ unless ($$textref =~ m/\G($ldel_outer)/gc) # OUTERMOST DELIMITER
+ {
+ _failmsg qq{Did not find expected opening bracket at "} .
+ substr($$textref,pos($$textref),20) .
+ q{..."},
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ my $closing = $1;
+ $closing =~ tr/([<{/)]>}/;
+ my $matched;
+ my $patvalid = 1;
+ while (pos($$textref) < length($$textref))
+ {
+ $matched = '';
+ if ($rd && $$textref =~ m#\G(\Q(?)\E|\Q(s?)\E|\Q(s)\E)#gc)
+ {
+ $patvalid = 0;
+ next;
+ }
+
+ if ($$textref =~ m/\G\s*#.*/gc)
+ {
+ next;
+ }
+
+ if ($$textref =~ m/\G\s*($rdel_outer)/gc)
+ {
+ unless ($matched = ($closing && $1 eq $closing) )
+ {
+ next if $1 eq '>'; # MIGHT BE A "LESS THAN"
+ _failmsg q{Mismatched closing bracket at "} .
+ substr($$textref,pos($$textref),20) .
+ qq{...". Expected '$closing'},
+ pos $$textref;
+ }
+ last;
+ }
+
+ if (_match_variable($textref,'\s*') ||
+ _match_quotelike($textref,'\s*',$patvalid,$patvalid) )
+ {
+ $patvalid = 0;
+ next;
+ }
+
+
+ # NEED TO COVER MANY MORE CASES HERE!!!
+ if ($$textref =~ m#\G\s*(?!$ldel_inner)
+ ( [-+*x/%^&|.]=?
+ | [!=]~
+ | =(?!>)
+ | (\*\*|&&|\|\||<<|>>)=?
+ | split|grep|map|return
+ | [([]
+ )#gcx)
+ {
+ $patvalid = 1;
+ next;
+ }
+
+ if ( _match_codeblock($textref, '\s*', $ldel_inner, $rdel_inner, $ldel_inner, $rdel_inner, $rd) )
+ {
+ $patvalid = 1;
+ next;
+ }
+
+ if ($$textref =~ m/\G\s*$ldel_outer/gc)
+ {
+ _failmsg q{Improperly nested codeblock at "} .
+ substr($$textref,pos($$textref),20) .
+ q{..."},
+ pos $$textref;
+ last;
+ }
+
+ $patvalid = 0;
+ $$textref =~ m/\G\s*(\w+|[-=>]>|.|\Z)/gc;
+ }
+ continue { $@ = undef }
+
+ unless ($matched)
+ {
+ _failmsg 'No match found for opening bracket', pos $$textref
+ unless $@;
+ return;
+ }
+
+ my $endpos = pos($$textref);
+ return ( $startpos, $codepos-$startpos,
+ $codepos, $endpos-$codepos,
+ $endpos, length($$textref)-$endpos,
+ );
+}
+
+
+my %mods = (
+ 'none' => '[cgimsox]*',
+ 'm' => '[cgimsox]*',
+ 's' => '[cegimsox]*',
+ 'tr' => '[cds]*',
+ 'y' => '[cds]*',
+ 'qq' => '',
+ 'qx' => '',
+ 'qw' => '',
+ 'qr' => '[imsx]*',
+ 'q' => '',
+ );
+
+sub extract_quotelike (;$$)
+{
+ my $textref = $_[0] ? \$_[0] : \$_;
+ my $wantarray = wantarray;
+ my $pre = defined $_[1] ? $_[1] : '\s*';
+
+ my @match = _match_quotelike($textref,$pre,1,0);
+ return _fail($wantarray, $textref) unless @match;
+ return _succeed($wantarray, $textref,
+ $match[2], $match[18]-$match[2], # MATCH
+ @match[18,19], # REMAINDER
+ @match[0,1], # PREFIX
+ @match[2..17], # THE BITS
+ @match[20,21], # ANY FILLET?
+ );
+};
+
+sub _match_quotelike($$$$) # ($textref, $prepat, $allow_raw_match)
+{
+ my ($textref, $pre, $rawmatch, $qmark) = @_;
+
+ my ($textlen,$startpos,
+ $oppos,
+ $preld1pos,$ld1pos,$str1pos,$rd1pos,
+ $preld2pos,$ld2pos,$str2pos,$rd2pos,
+ $modpos) = ( length($$textref), pos($$textref) = pos($$textref) || 0 );
+
+ unless ($$textref =~ m/\G($pre)/gc)
+ {
+ _failmsg qq{Did not find prefix /$pre/ at "} .
+ substr($$textref, pos($$textref), 20) .
+ q{..."},
+ pos $$textref;
+ return;
+ }
+ $oppos = pos($$textref);
+
+ my $initial = substr($$textref,$oppos,1);
+
+ if ($initial && $initial =~ m|^[\"\'\`]|
+ || $rawmatch && $initial =~ m|^/|
+ || $qmark && $initial =~ m|^\?|)
+ {
+ unless ($$textref =~ m/ \Q$initial\E [^\\$initial]* (\\.[^\\$initial]*)* \Q$initial\E /gcsx)
+ {
+ _failmsg qq{Did not find closing delimiter to match '$initial' at "} .
+ substr($$textref, $oppos, 20) .
+ q{..."},
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ $modpos= pos($$textref);
+ $rd1pos = $modpos-1;
+
+ if ($initial eq '/' || $initial eq '?')
+ {
+ $$textref =~ m/\G$mods{none}/gc
+ }
+
+ my $endpos = pos($$textref);
+ return (
+ $startpos, $oppos-$startpos, # PREFIX
+ $oppos, 0, # NO OPERATOR
+ $oppos, 1, # LEFT DEL
+ $oppos+1, $rd1pos-$oppos-1, # STR/PAT
+ $rd1pos, 1, # RIGHT DEL
+ $modpos, 0, # NO 2ND LDEL
+ $modpos, 0, # NO 2ND STR
+ $modpos, 0, # NO 2ND RDEL
+ $modpos, $endpos-$modpos, # MODIFIERS
+ $endpos, $textlen-$endpos, # REMAINDER
+ );
+ }
+
+ unless ($$textref =~ m{\G(\b(?:m|s|qq|qx|qw|q|qr|tr|y)\b(?=\s*\S)|<<)}gc)
+ {
+ _failmsg q{No quotelike operator found after prefix at "} .
+ substr($$textref, pos($$textref), 20) .
+ q{..."},
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+
+ my $op = $1;
+ $preld1pos = pos($$textref);
+ if ($op eq '<<') {
+ $ld1pos = pos($$textref);
+ my $label;
+ if ($$textref =~ m{\G([A-Za-z_]\w*)}gc) {
+ $label = $1;
+ }
+ elsif ($$textref =~ m{ \G ' ([^'\\]* (?:\\.[^'\\]*)*) '
+ | \G " ([^"\\]* (?:\\.[^"\\]*)*) "
+ | \G ` ([^`\\]* (?:\\.[^`\\]*)*) `
+ }gcsx) {
+ $label = $+;
+ }
+ else {
+ $label = "";
+ }
+ my $extrapos = pos($$textref);
+ $$textref =~ m{.*\n}gc;
+ $str1pos = pos($$textref);
+ unless ($$textref =~ m{.*?\n(?=$label\n)}gc) {
+ _failmsg qq{Missing here doc terminator ('$label') after "} .
+ substr($$textref, $startpos, 20) .
+ q{..."},
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ $rd1pos = pos($$textref);
+ $$textref =~ m{$label\n}gc;
+ $ld2pos = pos($$textref);
+ return (
+ $startpos, $oppos-$startpos, # PREFIX
+ $oppos, length($op), # OPERATOR
+ $ld1pos, $extrapos-$ld1pos, # LEFT DEL
+ $str1pos, $rd1pos-$str1pos, # STR/PAT
+ $rd1pos, $ld2pos-$rd1pos, # RIGHT DEL
+ $ld2pos, 0, # NO 2ND LDEL
+ $ld2pos, 0, # NO 2ND STR
+ $ld2pos, 0, # NO 2ND RDEL
+ $ld2pos, 0, # NO MODIFIERS
+ $ld2pos, $textlen-$ld2pos, # REMAINDER
+ $extrapos, $str1pos-$extrapos, # FILLETED BIT
+ );
+ }
+
+ $$textref =~ m/\G\s*/gc;
+ $ld1pos = pos($$textref);
+ $str1pos = $ld1pos+1;
+
+ unless ($$textref =~ m/\G(\S)/gc) # SHOULD USE LOOKAHEAD
+ {
+ _failmsg "No block delimiter found after quotelike $op",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ pos($$textref) = $ld1pos; # HAVE TO DO THIS BECAUSE LOOKAHEAD BROKEN
+ my ($ldel1, $rdel1) = ("\Q$1","\Q$1");
+ if ($ldel1 =~ /[[(<{]/)
+ {
+ $rdel1 =~ tr/[({</])}>/;
+ _match_bracketed($textref,"",$ldel1,"","",$rdel1)
+ || do { pos $$textref = $startpos; return };
+ }
+ else
+ {
+ $$textref =~ /$ldel1[^\\$ldel1]*(\\.[^\\$ldel1]*)*$ldel1/gcs
+ || do { pos $$textref = $startpos; return };
+ }
+ $ld2pos = $rd1pos = pos($$textref)-1;
+
+ my $second_arg = $op =~ /s|tr|y/ ? 1 : 0;
+ if ($second_arg)
+ {
+ my ($ldel2, $rdel2);
+ if ($ldel1 =~ /[[(<{]/)
+ {
+ unless ($$textref =~ /\G\s*(\S)/gc) # SHOULD USE LOOKAHEAD
+ {
+ _failmsg "Missing second block for quotelike $op",
+ pos $$textref;
+ pos $$textref = $startpos;
+ return;
+ }
+ $ldel2 = $rdel2 = "\Q$1";
+ $rdel2 =~ tr/[({</])}>/;
+ }
+ else
+ {
+ $ldel2 = $rdel2 = $ldel1;
+ }
+ $str2pos = $ld2pos+1;
+
+ if ($ldel2 =~ /[[(<{]/)
+ {
+ pos($$textref)--; # OVERCOME BROKEN LOOKAHEAD
+ _match_bracketed($textref,"",$ldel2,"","",$rdel2)
+ || do { pos $$textref = $startpos; return };
+ }
+ else
+ {
+ $$textref =~ /[^\\$ldel2]*(\\.[^\\$ldel2]*)*$ldel2/gcs
+ || do { pos $$textref = $startpos; return };
+ }
+ $rd2pos = pos($$textref)-1;
+ }
+ else
+ {
+ $ld2pos = $str2pos = $rd2pos = $rd1pos;
+ }
+
+ $modpos = pos $$textref;
+
+ $$textref =~ m/\G($mods{$op})/gc;
+ my $endpos = pos $$textref;
+
+ return (
+ $startpos, $oppos-$startpos, # PREFIX
+ $oppos, length($op), # OPERATOR
+ $ld1pos, 1, # LEFT DEL
+ $str1pos, $rd1pos-$str1pos, # STR/PAT
+ $rd1pos, 1, # RIGHT DEL
+ $ld2pos, $second_arg, # 2ND LDEL (MAYBE)
+ $str2pos, $rd2pos-$str2pos, # 2ND STR (MAYBE)
+ $rd2pos, $second_arg, # 2ND RDEL (MAYBE)
+ $modpos, $endpos-$modpos, # MODIFIERS
+ $endpos, $textlen-$endpos, # REMAINDER
+ );
+}
+
+my $def_func =
+[
+ sub { extract_variable($_[0], '') },
+ sub { extract_quotelike($_[0],'') },
+ sub { extract_codeblock($_[0],'{}','') },
+];
+
+sub extract_multiple (;$$$$) # ($text, $functions_ref, $max_fields, $ignoreunknown)
+{
+ my $textref = defined($_[0]) ? \$_[0] : \$_;
+ my $posbug = pos;
+ my ($lastpos, $firstpos);
+ my @fields = ();
+
+ #for ($$textref)
+ {
+ my @func = defined $_[1] ? @{$_[1]} : @{$def_func};
+ my $max = defined $_[2] && $_[2]>0 ? $_[2] : 1_000_000_000;
+ my $igunk = $_[3];
+
+ pos $$textref ||= 0;
+
+ unless (wantarray)
+ {
+ use Carp;
+ carp "extract_multiple reset maximal count to 1 in scalar context"
+ if $^W && defined($_[2]) && $max > 1;
+ $max = 1
+ }
+
+ my $unkpos;
+ my $func;
+ my $class;
+
+ my @class;
+ foreach $func ( @func )
+ {
+ if (ref($func) eq 'HASH')
+ {
+ push @class, (keys %$func)[0];
+ $func = (values %$func)[0];
+ }
+ else
+ {
+ push @class, undef;
+ }
+ }
+
+ FIELD: while (pos($$textref) < length($$textref))
+ {
+ my ($field, $rem);
+ my @bits;
+ foreach my $i ( 0..$#func )
+ {
+ my $pref;
+ $func = $func[$i];
+ $class = $class[$i];
+ $lastpos = pos $$textref;
+ if (ref($func) eq 'CODE')
+ { ($field,$rem,$pref) = @bits = $func->($$textref);
+ # print "[$field|$rem]" if $field;
+ }
+ elsif (ref($func) eq 'Text::Balanced::Extractor')
+ { @bits = $field = $func->extract($$textref) }
+ elsif( $$textref =~ m/\G$func/gc )
+ { @bits = $field = defined($1) ? $1 : $& }
+ $pref ||= "";
+ if (defined($field) && length($field))
+ {
+ if (!$igunk) {
+ $unkpos = pos $$textref
+ if length($pref) && !defined($unkpos);
+ if (defined $unkpos)
+ {
+ push @fields, substr($$textref, $unkpos, $lastpos-$unkpos).$pref;
+ $firstpos = $unkpos unless defined $firstpos;
+ undef $unkpos;
+ last FIELD if @fields == $max;
+ }
+ }
+ push @fields, $class
+ ? bless (\$field, $class)
+ : $field;
+ $firstpos = $lastpos unless defined $firstpos;
+ $lastpos = pos $$textref;
+ last FIELD if @fields == $max;
+ next FIELD;
+ }
+ }
+ if ($$textref =~ /\G(.)/gcs)
+ {
+ $unkpos = pos($$textref)-1
+ unless $igunk || defined $unkpos;
+ }
+ }
+
+ if (defined $unkpos)
+ {
+ push @fields, substr($$textref, $unkpos);
+ $firstpos = $unkpos unless defined $firstpos;
+ $lastpos = length $$textref;
+ }
+ last;
+ }
+
+ pos $$textref = $lastpos;
+ return @fields if wantarray;
+
+ $firstpos ||= 0;
+ eval { substr($$textref,$firstpos,$lastpos-$firstpos)="";
+ pos $$textref = $firstpos };
+ return $fields[0];
+}
+
+
+sub gen_extract_tagged # ($opentag, $closetag, $pre, \%options)
+{
+ my $ldel = $_[0];
+ my $rdel = $_[1];
+ my $pre = defined $_[2] ? $_[2] : '\s*';
+ my %options = defined $_[3] ? %{$_[3]} : ();
+ my $omode = defined $options{fail} ? $options{fail} : '';
+ my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}})
+ : defined($options{reject}) ? $options{reject}
+ : ''
+ ;
+ my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}})
+ : defined($options{ignore}) ? $options{ignore}
+ : ''
+ ;
+
+ if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; }
+
+ my $posbug = pos;
+ for ($ldel, $pre, $bad, $ignore) { $_ = qr/$_/ if $_ }
+ pos = $posbug;
+
+ my $closure = sub
+ {
+ my $textref = defined $_[0] ? \$_[0] : \$_;
+ my @match = Text::Balanced::_match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore);
+
+ return _fail(wantarray, $textref) unless @match;
+ return _succeed wantarray, $textref,
+ $match[2], $match[3]+$match[5]+$match[7], # MATCH
+ @match[8..9,0..1,2..7]; # REM, PRE, BITS
+ };
+
+ bless $closure, 'Text::Balanced::Extractor';
+}
+
+package Text::Balanced::Extractor;
+
+sub extract($$) # ($self, $text)
+{
+ &{$_[0]}($_[1]);
+}
+
+package Text::Balanced::ErrorMsg;
+
+use overload '""' => sub { "$_[0]->{error}, detected at offset $_[0]->{pos}" };
+
+1;
+
+__END__
+
+=head1 NAME
+
+Text::Balanced - Extract delimited text sequences from strings.
+
+
+=head1 SYNOPSIS
+
+ use Text::Balanced qw (
+ extract_delimited
+ extract_bracketed
+ extract_quotelike
+ extract_codeblock
+ extract_variable
+ extract_tagged
+ extract_multiple
+
+ gen_delimited_pat
+ gen_extract_tagged
+ );
+
+ # Extract the initial substring of $text that is delimited by
+ # two (unescaped) instances of the first character in $delim.
+
+ ($extracted, $remainder) = extract_delimited($text,$delim);
+
+
+ # Extract the initial substring of $text that is bracketed
+ # with a delimiter(s) specified by $delim (where the string
+ # in $delim contains one or more of '(){}[]<>').
+
+ ($extracted, $remainder) = extract_bracketed($text,$delim);
+
+
+ # Extract the initial substring of $text that is bounded by
+ # an XML tag.
+
+ ($extracted, $remainder) = extract_tagged($text);
+
+
+ # Extract the initial substring of $text that is bounded by
+ # a C<BEGIN>...C<END> pair. Don't allow nested C<BEGIN> tags
+
+ ($extracted, $remainder) =
+ extract_tagged($text,"BEGIN","END",undef,{bad=>["BEGIN"]});
+
+
+ # Extract the initial substring of $text that represents a
+ # Perl "quote or quote-like operation"
+
+ ($extracted, $remainder) = extract_quotelike($text);
+
+
+ # Extract the initial substring of $text that represents a block
+ # of Perl code, bracketed by any of character(s) specified by $delim
+ # (where the string $delim contains one or more of '(){}[]<>').
+
+ ($extracted, $remainder) = extract_codeblock($text,$delim);
+
+
+ # Extract the initial substrings of $text that would be extracted by
+ # one or more sequential applications of the specified functions
+ # or regular expressions
+
+ @extracted = extract_multiple($text,
+ [ \&extract_bracketed,
+ \&extract_quotelike,
+ \&some_other_extractor_sub,
+ qr/[xyz]*/,
+ 'literal',
+ ]);
+
+# Create a string representing an optimized pattern (a la Friedl)
+# that matches a substring delimited by any of the specified characters
+# (in this case: any type of quote or a slash)
+
+ $patstring = gen_delimited_pat(q{'"`/});
+
+
+# Generate a reference to an anonymous sub that is just like extract_tagged
+# but pre-compiled and optimized for a specific pair of tags, and consequently
+# much faster (i.e. 3 times faster). It uses qr// for better performance on
+# repeated calls, so it only works under Perl 5.005 or later.
+
+ $extract_head = gen_extract_tagged('<HEAD>','</HEAD>');
+
+ ($extracted, $remainder) = $extract_head->($text);
+
+
+=head1 DESCRIPTION
+
+The various C<extract_...> subroutines may be used to
+extract a delimited substring, possibly after skipping a
+specified prefix string. By default, that prefix is
+optional whitespace (C</\s*/>), but you can change it to whatever
+you wish (see below).
+
+The substring to be extracted must appear at the
+current C<pos> location of the string's variable
+(or at index zero, if no C<pos> position is defined).
+In other words, the C<extract_...> subroutines I<don't>
+extract the first occurance of a substring anywhere
+in a string (like an unanchored regex would). Rather,
+they extract an occurance of the substring appearing
+immediately at the current matching position in the
+string (like a C<\G>-anchored regex would).
+
+
+
+=head2 General behaviour in list contexts
+
+In a list context, all the subroutines return a list, the first three
+elements of which are always:
+
+=over 4
+
+=item [0]
+
+The extracted string, including the specified delimiters.
+If the extraction fails an empty string is returned.
+
+=item [1]
+
+The remainder of the input string (i.e. the characters after the
+extracted string). On failure, the entire string is returned.
+
+=item [2]
+
+The skipped prefix (i.e. the characters before the extracted string).
+On failure, the empty string is returned.
+
+=back
+
+Note that in a list context, the contents of the original input text (the first
+argument) are not modified in any way.
+
+However, if the input text was passed in a variable, that variable's
+C<pos> value is updated to point at the first character after the
+extracted text. That means that in a list context the various
+subroutines can be used much like regular expressions. For example:
+
+ while ( $next = (extract_quotelike($text))[0] )
+ {
+ # process next quote-like (in $next)
+ }
+
+
+=head2 General behaviour in scalar and void contexts
+
+In a scalar context, the extracted string is returned, having first been
+removed from the input text. Thus, the following code also processes
+each quote-like operation, but actually removes them from $text:
+
+ while ( $next = extract_quotelike($text) )
+ {
+ # process next quote-like (in $next)
+ }
+
+Note that if the input text is a read-only string (i.e. a literal),
+no attempt is made to remove the extracted text.
+
+In a void context the behaviour of the extraction subroutines is
+exactly the same as in a scalar context, except (of course) that the
+extracted substring is not returned.
+
+=head2 A note about prefixes
+
+Prefix patterns are matched without any trailing modifiers (C</gimsox> etc.)
+This can bite you if you're expecting a prefix specification like
+'.*?(?=<H1>)' to skip everything up to the first <H1> tag. Such a prefix
+pattern will only succeed if the <H1> tag is on the current line, since
+. normally doesn't match newlines.
+
+To overcome this limitation, you need to turn on /s matching within
+the prefix pattern, using the C<(?s)> directive: '(?s).*?(?=<H1>)'
+
+
+=head2 C<extract_delimited>
+
+The C<extract_delimited> function formalizes the common idiom
+of extracting a single-character-delimited substring from the start of
+a string. For example, to extract a single-quote delimited string, the
+following code is typically used:
+
+ ($remainder = $text) =~ s/\A('(\\.|[^'])*')//s;
+ $extracted = $1;
+
+but with C<extract_delimited> it can be simplified to:
+
+ ($extracted,$remainder) = extract_delimited($text, "'");
+
+C<extract_delimited> takes up to four scalars (the input text, the
+delimiters, a prefix pattern to be skipped, and any escape characters)
+and extracts the initial substring of the text that
+is appropriately delimited. If the delimiter string has multiple
+characters, the first one encountered in the text is taken to delimit
+the substring.
+The third argument specifies a prefix pattern that is to be skipped
+(but must be present!) before the substring is extracted.
+The final argument specifies the escape character to be used for each
+delimiter.
+
+All arguments are optional. If the escape characters are not specified,
+every delimiter is escaped with a backslash (C<\>).
+If the prefix is not specified, the
+pattern C<'\s*'> - optional whitespace - is used. If the delimiter set
+is also not specified, the set C</["'`]/> is used. If the text to be processed
+is not specified either, C<$_> is used.
+
+In list context, C<extract_delimited> returns a array of three
+elements, the extracted substring (I<including the surrounding
+delimiters>), the remainder of the text, and the skipped prefix (if
+any). If a suitable delimited substring is not found, the first
+element of the array is the empty string, the second is the complete
+original text, and the prefix returned in the third element is an
+empty string.
+
+In a scalar context, just the extracted substring is returned. In
+a void context, the extracted substring (and any prefix) are simply
+removed from the beginning of the first argument.
+
+Examples:
+
+ # Remove a single-quoted substring from the very beginning of $text:
+
+ $substring = extract_delimited($text, "'", '');
+
+ # Remove a single-quoted Pascalish substring (i.e. one in which
+ # doubling the quote character escapes it) from the very
+ # beginning of $text:
+
+ $substring = extract_delimited($text, "'", '', "'");
+
+ # Extract a single- or double- quoted substring from the
+ # beginning of $text, optionally after some whitespace
+ # (note the list context to protect $text from modification):
+
+ ($substring) = extract_delimited $text, q{"'};
+
+
+ # Delete the substring delimited by the first '/' in $text:
+
+ $text = join '', (extract_delimited($text,'/','[^/]*')[2,1];
+
+Note that this last example is I<not> the same as deleting the first
+quote-like pattern. For instance, if C<$text> contained the string:
+
+ "if ('./cmd' =~ m/$UNIXCMD/s) { $cmd = $1; }"
+
+then after the deletion it would contain:
+
+ "if ('.$UNIXCMD/s) { $cmd = $1; }"
+
+not:
+
+ "if ('./cmd' =~ ms) { $cmd = $1; }"
+
+
+See L<"extract_quotelike"> for a (partial) solution to this problem.
+
+
+=head2 C<extract_bracketed>
+
+Like C<"extract_delimited">, the C<extract_bracketed> function takes
+up to three optional scalar arguments: a string to extract from, a delimiter
+specifier, and a prefix pattern. As before, a missing prefix defaults to
+optional whitespace and a missing text defaults to C<$_>. However, a missing
+delimiter specifier defaults to C<'{}()[]E<lt>E<gt>'> (see below).
+
+C<extract_bracketed> extracts a balanced-bracket-delimited
+substring (using any one (or more) of the user-specified delimiter
+brackets: '(..)', '{..}', '[..]', or '<..>'). Optionally it will also
+respect quoted unbalanced brackets (see below).
+
+A "delimiter bracket" is a bracket in list of delimiters passed as
+C<extract_bracketed>'s second argument. Delimiter brackets are
+specified by giving either the left or right (or both!) versions
+of the required bracket(s). Note that the order in which
+two or more delimiter brackets are specified is not significant.
+
+A "balanced-bracket-delimited substring" is a substring bounded by
+matched brackets, such that any other (left or right) delimiter
+bracket I<within> the substring is also matched by an opposite
+(right or left) delimiter bracket I<at the same level of nesting>. Any
+type of bracket not in the delimiter list is treated as an ordinary
+character.
+
+In other words, each type of bracket specified as a delimiter must be
+balanced and correctly nested within the substring, and any other kind of
+("non-delimiter") bracket in the substring is ignored.
+
+For example, given the string:
+
+ $text = "{ an '[irregularly :-(] {} parenthesized >:-)' string }";
+
+then a call to C<extract_bracketed> in a list context:
+
+ @result = extract_bracketed( $text, '{}' );
+
+would return:
+
+ ( "{ an '[irregularly :-(] {} parenthesized >:-)' string }" , "" , "" )
+
+since both sets of C<'{..}'> brackets are properly nested and evenly balanced.
+(In a scalar context just the first element of the array would be returned. In
+a void context, C<$text> would be replaced by an empty string.)
+
+Likewise the call in:
+
+ @result = extract_bracketed( $text, '{[' );
+
+would return the same result, since all sets of both types of specified
+delimiter brackets are correctly nested and balanced.
+
+However, the call in:
+
+ @result = extract_bracketed( $text, '{([<' );
+
+would fail, returning:
+
+ ( undef , "{ an '[irregularly :-(] {} parenthesized >:-)' string }" );
+
+because the embedded pairs of C<'(..)'>s and C<'[..]'>s are "cross-nested" and
+the embedded C<'E<gt>'> is unbalanced. (In a scalar context, this call would
+return an empty string. In a void context, C<$text> would be unchanged.)
+
+Note that the embedded single-quotes in the string don't help in this
+case, since they have not been specified as acceptable delimiters and are
+therefore treated as non-delimiter characters (and ignored).
+
+However, if a particular species of quote character is included in the
+delimiter specification, then that type of quote will be correctly handled.
+for example, if C<$text> is:
+
+ $text = '<A HREF=">>>>">link</A>';
+
+then
+
+ @result = extract_bracketed( $text, '<">' );
+
+returns:
+
+ ( '<A HREF=">>>>">', 'link</A>', "" )
+
+as expected. Without the specification of C<"> as an embedded quoter:
+
+ @result = extract_bracketed( $text, '<>' );
+
+the result would be:
+
+ ( '<A HREF=">', '>>>">link</A>', "" )
+
+In addition to the quote delimiters C<'>, C<">, and C<`>, full Perl quote-like
+quoting (i.e. q{string}, qq{string}, etc) can be specified by including the
+letter 'q' as a delimiter. Hence:
+
+ @result = extract_bracketed( $text, '<q>' );
+
+would correctly match something like this:
+
+ $text = '<leftop: conj /and/ conj>';
+
+See also: C<"extract_quotelike"> and C<"extract_codeblock">.
+
+
+=head2 C<extract_variable>
+
+C<extract_variable> extracts any valid Perl variable or
+variable-involved expression, including scalars, arrays, hashes, array
+accesses, hash look-ups, method calls through objects, subroutine calles
+through subroutine references, etc.
+
+The subroutine takes up to two optional arguments:
+
+=over 4
+
+=item 1.
+
+A string to be processed (C<$_> if the string is omitted or C<undef>)
+
+=item 2.
+
+A string specifying a pattern to be matched as a prefix (which is to be
+skipped). If omitted, optional whitespace is skipped.
+
+=back
+
+On success in a list context, an array of 3 elements is returned. The
+elements are:
+
+=over 4
+
+=item [0]
+
+the extracted variable, or variablish expression
+
+=item [1]
+
+the remainder of the input text,
+
+=item [2]
+
+the prefix substring (if any),
+
+=back
+
+On failure, all of these values (except the remaining text) are C<undef>.
+
+In a scalar context, C<extract_variable> returns just the complete
+substring that matched a variablish expression. C<undef> is returned on
+failure. In addition, the original input text has the returned substring
+(and any prefix) removed from it.
+
+In a void context, the input text just has the matched substring (and
+any specified prefix) removed.
+
+
+=head2 C<extract_tagged>
+
+C<extract_tagged> extracts and segments text between (balanced)
+specified tags.
+
+The subroutine takes up to five optional arguments:
+
+=over 4
+
+=item 1.
+
+A string to be processed (C<$_> if the string is omitted or C<undef>)
+
+=item 2.
+
+A string specifying a pattern to be matched as the opening tag.
+If the pattern string is omitted (or C<undef>) then a pattern
+that matches any standard XML tag is used.
+
+=item 3.
+
+A string specifying a pattern to be matched at the closing tag.
+If the pattern string is omitted (or C<undef>) then the closing
+tag is constructed by inserting a C</> after any leading bracket
+characters in the actual opening tag that was matched (I<not> the pattern
+that matched the tag). For example, if the opening tag pattern
+is specified as C<'{{\w+}}'> and actually matched the opening tag
+C<"{{DATA}}">, then the constructed closing tag would be C<"{{/DATA}}">.
+
+=item 4.
+
+A string specifying a pattern to be matched as a prefix (which is to be
+skipped). If omitted, optional whitespace is skipped.
+
+=item 5.
+
+A hash reference containing various parsing options (see below)
+
+=back
+
+The various options that can be specified are:
+
+=over 4
+
+=item C<reject =E<gt> $listref>
+
+The list reference contains one or more strings specifying patterns
+that must I<not> appear within the tagged text.
+
+For example, to extract
+an HTML link (which should not contain nested links) use:
+
+ extract_tagged($text, '<A>', '</A>', undef, {reject => ['<A>']} );
+
+=item C<ignore =E<gt> $listref>
+
+The list reference contains one or more strings specifying patterns
+that are I<not> be be treated as nested tags within the tagged text
+(even if they would match the start tag pattern).
+
+For example, to extract an arbitrary XML tag, but ignore "empty" elements:
+
+ extract_tagged($text, undef, undef, undef, {ignore => ['<[^>]*/>']} );
+
+(also see L<"gen_delimited_pat"> below).
+
+
+=item C<fail =E<gt> $str>
+
+The C<fail> option indicates the action to be taken if a matching end
+tag is not encountered (i.e. before the end of the string or some
+C<reject> pattern matches). By default, a failure to match a closing
+tag causes C<extract_tagged> to immediately fail.
+
+However, if the string value associated with <reject> is "MAX", then
+C<extract_tagged> returns the complete text up to the point of failure.
+If the string is "PARA", C<extract_tagged> returns only the first paragraph
+after the tag (up to the first line that is either empty or contains
+only whitespace characters).
+If the string is "", the the default behaviour (i.e. failure) is reinstated.
+
+For example, suppose the start tag "/para" introduces a paragraph, which then
+continues until the next "/endpara" tag or until another "/para" tag is
+encountered:
+
+ $text = "/para line 1\n\nline 3\n/para line 4";
+
+ extract_tagged($text, '/para', '/endpara', undef,
+ {reject => '/para', fail => MAX );
+
+ # EXTRACTED: "/para line 1\n\nline 3\n"
+
+Suppose instead, that if no matching "/endpara" tag is found, the "/para"
+tag refers only to the immediately following paragraph:
+
+ $text = "/para line 1\n\nline 3\n/para line 4";
+
+ extract_tagged($text, '/para', '/endpara', undef,
+ {reject => '/para', fail => MAX );
+
+ # EXTRACTED: "/para line 1\n"
+
+Note that the specified C<fail> behaviour applies to nested tags as well.
+
+=back
+
+On success in a list context, an array of 6 elements is returned. The elements are:
+
+=over 4
+
+=item [0]
+
+the extracted tagged substring (including the outermost tags),
+
+=item [1]
+
+the remainder of the input text,
+
+=item [2]
+
+the prefix substring (if any),
+
+=item [3]
+
+the opening tag
+
+=item [4]
+
+the text between the opening and closing tags
+
+=item [5]
+
+the closing tag (or "" if no closing tag was found)
+
+=back
+
+On failure, all of these values (except the remaining text) are C<undef>.
+
+In a scalar context, C<extract_tagged> returns just the complete
+substring that matched a tagged text (including the start and end
+tags). C<undef> is returned on failure. In addition, the original input
+text has the returned substring (and any prefix) removed from it.
+
+In a void context, the input text just has the matched substring (and
+any specified prefix) removed.
+
+
+=head2 C<gen_extract_tagged>
+
+(Note: This subroutine is only available under Perl5.005)
+
+C<gen_extract_tagged> generates a new anonymous subroutine which
+extracts text between (balanced) specified tags. In other words,
+it generates a function identical in function to C<extract_tagged>.
+
+The difference between C<extract_tagged> and the anonymous
+subroutines generated by
+C<gen_extract_tagged>, is that those generated subroutines:
+
+=over 4
+
+=item *
+
+do not have to reparse tag specification or parsing options every time
+they are called (whereas C<extract_tagged> has to effectively rebuild
+its tag parser on every call);
+
+=item *
+
+make use of the new qr// construct to pre-compile the regexes they use
+(whereas C<extract_tagged> uses standard string variable interpolation
+to create tag-matching patterns).
+
+=back
+
+The subroutine takes up to four optional arguments (the same set as
+C<extract_tagged> except for the string to be processed). It returns
+a reference to a subroutine which in turn takes a single argument (the text to
+be extracted from).
+
+In other words, the implementation of C<extract_tagged> is exactly
+equivalent to:
+
+ sub extract_tagged
+ {
+ my $text = shift;
+ $extractor = gen_extract_tagged(@_);
+ return $extractor->($text);
+ }
+
+(although C<extract_tagged> is not currently implemented that way, in order
+to preserve pre-5.005 compatibility).
+
+Using C<gen_extract_tagged> to create extraction functions for specific tags
+is a good idea if those functions are going to be called more than once, since
+their performance is typically twice as good as the more general-purpose
+C<extract_tagged>.
+
+
+=head2 C<extract_quotelike>
+
+C<extract_quotelike> attempts to recognize, extract, and segment any
+one of the various Perl quotes and quotelike operators (see
+L<perlop(3)>) Nested backslashed delimiters, embedded balanced bracket
+delimiters (for the quotelike operators), and trailing modifiers are
+all caught. For example, in:
+
+ extract_quotelike 'q # an octothorpe: \# (not the end of the q!) #'
+
+ extract_quotelike ' "You said, \"Use sed\"." '
+
+ extract_quotelike ' s{([A-Z]{1,8}\.[A-Z]{3})} /\L$1\E/; '
+
+ extract_quotelike ' tr/\\\/\\\\/\\\//ds; '
+
+the full Perl quotelike operations are all extracted correctly.
+
+Note too that, when using the /x modifier on a regex, any comment
+containing the current pattern delimiter will cause the regex to be
+immediately terminated. In other words:
+
+ 'm /
+ (?i) # CASE INSENSITIVE
+ [a-z_] # LEADING ALPHABETIC/UNDERSCORE
+ [a-z0-9]* # FOLLOWED BY ANY NUMBER OF ALPHANUMERICS
+ /x'
+
+will be extracted as if it were:
+
+ 'm /
+ (?i) # CASE INSENSITIVE
+ [a-z_] # LEADING ALPHABETIC/'
+
+This behaviour is identical to that of the actual compiler.
+
+C<extract_quotelike> takes two arguments: the text to be processed and
+a prefix to be matched at the very beginning of the text. If no prefix
+is specified, optional whitespace is the default. If no text is given,
+C<$_> is used.
+
+In a list context, an array of 11 elements is returned. The elements are:
+
+=over 4
+
+=item [0]
+
+the extracted quotelike substring (including trailing modifiers),
+
+=item [1]
+
+the remainder of the input text,
+
+=item [2]
+
+the prefix substring (if any),
+
+=item [3]
+
+the name of the quotelike operator (if any),
+
+=item [4]
+
+the left delimiter of the first block of the operation,
+
+=item [5]
+
+the text of the first block of the operation
+(that is, the contents of
+a quote, the regex of a match or substitution or the target list of a
+translation),
+
+=item [6]
+
+the right delimiter of the first block of the operation,
+
+=item [7]
+
+the left delimiter of the second block of the operation
+(that is, if it is a C<s>, C<tr>, or C<y>),
+
+=item [8]
+
+the text of the second block of the operation
+(that is, the replacement of a substitution or the translation list
+of a translation),
+
+=item [9]
+
+the right delimiter of the second block of the operation (if any),
+
+=item [10]
+
+the trailing modifiers on the operation (if any).
+
+=back
+
+For each of the fields marked "(if any)" the default value on success is
+an empty string.
+On failure, all of these values (except the remaining text) are C<undef>.
+
+
+In a scalar context, C<extract_quotelike> returns just the complete substring
+that matched a quotelike operation (or C<undef> on failure). In a scalar or
+void context, the input text has the same substring (and any specified
+prefix) removed.
+
+Examples:
+
+ # Remove the first quotelike literal that appears in text
+
+ $quotelike = extract_quotelike($text,'.*?');
+
+ # Replace one or more leading whitespace-separated quotelike
+ # literals in $_ with "<QLL>"
+
+ do { $_ = join '<QLL>', (extract_quotelike)[2,1] } until $@;
+
+
+ # Isolate the search pattern in a quotelike operation from $text
+
+ ($op,$pat) = (extract_quotelike $text)[3,5];
+ if ($op =~ /[ms]/)
+ {
+ print "search pattern: $pat\n";
+ }
+ else
+ {
+ print "$op is not a pattern matching operation\n";
+ }
+
+
+=head2 C<extract_quotelike> and "here documents"
+
+C<extract_quotelike> can successfully extract "here documents" from an input
+string, but with an important caveat in list contexts.
+
+Unlike other types of quote-like literals, a here document is rarely
+a contiguous substring. For example, a typical piece of code using
+here document might look like this:
+
+ <<'EOMSG' || die;
+ This is the message.
+ EOMSG
+ exit;
+
+Given this as an input string in a scalar context, C<extract_quotelike>
+would correctly return the string "<<'EOMSG'\nThis is the message.\nEOMSG",
+leaving the string " || die;\nexit;" in the original variable. In other words,
+the two separate pieces of the here document are successfully extracted and
+concatenated.
+
+In a list context, C<extract_quotelike> would return the list
+
+=over 4
+
+=item [0]
+
+"<<'EOMSG'\nThis is the message.\nEOMSG\n" (i.e. the full extracted here document,
+including fore and aft delimiters),
+
+=item [1]
+
+" || die;\nexit;" (i.e. the remainder of the input text, concatenated),
+
+=item [2]
+
+"" (i.e. the prefix substring -- trivial in this case),
+
+=item [3]
+
+"<<" (i.e. the "name" of the quotelike operator)
+
+=item [4]
+
+"'EOMSG'" (i.e. the left delimiter of the here document, including any quotes),
+
+=item [5]
+
+"This is the message.\n" (i.e. the text of the here document),
+
+=item [6]
+
+"EOMSG" (i.e. the right delimiter of the here document),
+
+=item [7..10]
+
+"" (a here document has no second left delimiter, second text, second right
+delimiter, or trailing modifiers).
+
+=back
+
+However, the matching position of the input variable would be set to
+"exit;" (i.e. I<after> the closing delimiter of the here document),
+which would cause the earlier " || die;\nexit;" to be skipped in any
+sequence of code fragment extractions.
+
+To avoid this problem, when it encounters a here document whilst
+extracting from a modifiable string, C<extract_quotelike> silently
+rearranges the string to an equivalent piece of Perl:
+
+ <<'EOMSG'
+ This is the message.
+ EOMSG
+ || die;
+ exit;
+
+in which the here document I<is> contiguous. It still leaves the
+matching position after the here document, but now the rest of the line
+on which the here document starts is not skipped.
+
+To prevent <extract_quotelike> from mucking about with the input in this way
+(this is the only case where a list-context C<extract_quotelike> does so),
+you can pass the input variable as an interpolated literal:
+
+ $quotelike = extract_quotelike("$var");
+
+
+=head2 C<extract_codeblock>
+
+C<extract_codeblock> attempts to recognize and extract a balanced
+bracket delimited substring that may contain unbalanced brackets
+inside Perl quotes or quotelike operations. That is, C<extract_codeblock>
+is like a combination of C<"extract_bracketed"> and
+C<"extract_quotelike">.
+
+C<extract_codeblock> takes the same initial three parameters as C<extract_bracketed>:
+a text to process, a set of delimiter brackets to look for, and a prefix to
+match first. It also takes an optional fourth parameter, which allows the
+outermost delimiter brackets to be specified separately (see below).
+
+Omitting the first argument (input text) means process C<$_> instead.
+Omitting the second argument (delimiter brackets) indicates that only C<'{'> is to be used.
+Omitting the third argument (prefix argument) implies optional whitespace at the start.
+Omitting the fourth argument (outermost delimiter brackets) indicates that the
+value of the second argument is to be used for the outermost delimiters.
+
+Once the prefix an dthe outermost opening delimiter bracket have been
+recognized, code blocks are extracted by stepping through the input text and
+trying the following alternatives in sequence:
+
+=over 4
+
+=item 1.
+
+Try and match a closing delimiter bracket. If the bracket was the same
+species as the last opening bracket, return the substring to that
+point. If the bracket was mismatched, return an error.
+
+=item 2.
+
+Try to match a quote or quotelike operator. If found, call
+C<extract_quotelike> to eat it. If C<extract_quotelike> fails, return
+the error it returned. Otherwise go back to step 1.
+
+=item 3.
+
+Try to match an opening delimiter bracket. If found, call
+C<extract_codeblock> recursively to eat the embedded block. If the
+recursive call fails, return an error. Otherwise, go back to step 1.
+
+=item 4.
+
+Unconditionally match a bareword or any other single character, and
+then go back to step 1.
+
+=back
+
+
+Examples:
+
+ # Find a while loop in the text
+
+ if ($text =~ s/.*?while\s*\{/{/)
+ {
+ $loop = "while " . extract_codeblock($text);
+ }
+
+ # Remove the first round-bracketed list (which may include
+ # round- or curly-bracketed code blocks or quotelike operators)
+
+ extract_codeblock $text, "(){}", '[^(]*';
+
+
+The ability to specify a different outermost delimiter bracket is useful
+in some circumstances. For example, in the Parse::RecDescent module,
+parser actions which are to be performed only on a successful parse
+are specified using a C<E<lt>defer:...E<gt>> directive. For example:
+
+ sentence: subject verb object
+ <defer: {$::theVerb = $item{verb}} >
+
+Parse::RecDescent uses C<extract_codeblock($text, '{}E<lt>E<gt>')> to extract the code
+within the C<E<lt>defer:...E<gt>> directive, but there's a problem.
+
+A deferred action like this:
+
+ <defer: {if ($count>10) {$count--}} >
+
+will be incorrectly parsed as:
+
+ <defer: {if ($count>
+
+because the "less than" operator is interpreted as a closing delimiter.
+
+But, by extracting the directive using
+S<C<extract_codeblock($text, '{}', undef, 'E<lt>E<gt>')>>
+the '>' character is only treated as a delimited at the outermost
+level of the code block, so the directive is parsed correctly.
+
+=head2 C<extract_multiple>
+
+The C<extract_multiple> subroutine takes a string to be processed and a
+list of extractors (subroutines or regular expressions) to apply to that string.
+
+In an array context C<extract_multiple> returns an array of substrings
+of the original string, as extracted by the specified extractors.
+In a scalar context, C<extract_multiple> returns the first
+substring successfully extracted from the original string. In both
+scalar and void contexts the original string has the first successfully
+extracted substring removed from it. In all contexts
+C<extract_multiple> starts at the current C<pos> of the string, and
+sets that C<pos> appropriately after it matches.
+
+Hence, the aim of of a call to C<extract_multiple> in a list context
+is to split the processed string into as many non-overlapping fields as
+possible, by repeatedly applying each of the specified extractors
+to the remainder of the string. Thus C<extract_multiple> is
+a generalized form of Perl's C<split> subroutine.
+
+The subroutine takes up to four optional arguments:
+
+=over 4
+
+=item 1.
+
+A string to be processed (C<$_> if the string is omitted or C<undef>)
+
+=item 2.
+
+A reference to a list of subroutine references and/or qr// objects and/or
+literal strings and/or hash references, specifying the extractors
+to be used to split the string. If this argument is omitted (or
+C<undef>) the list:
+
+ [
+ sub { extract_variable($_[0], '') },
+ sub { extract_quotelike($_[0],'') },
+ sub { extract_codeblock($_[0],'{}','') },
+ ]
+
+is used.
+
+
+=item 3.
+
+An number specifying the maximum number of fields to return. If this
+argument is omitted (or C<undef>), split continues as long as possible.
+
+If the third argument is I<N>, then extraction continues until I<N> fields
+have been successfully extracted, or until the string has been completely
+processed.
+
+Note that in scalar and void contexts the value of this argument is
+automatically reset to 1 (under C<-w>, a warning is issued if the argument
+has to be reset).
+
+=item 4.
+
+A value indicating whether unmatched substrings (see below) within the
+text should be skipped or returned as fields. If the value is true,
+such substrings are skipped. Otherwise, they are returned.
+
+=back
+
+The extraction process works by applying each extractor in
+sequence to the text string.
+
+If the extractor is a subroutine it is called in a list context and is
+expected to return a list of a single element, namely the extracted
+text. It may optionally also return two further arguments: a string
+representing the text left after extraction (like $' for a pattern
+match), and a string representing any prefix skipped before the
+extraction (like $` in a pattern match). Note that this is designed
+to facilitate the use of other Text::Balanced subroutines with
+C<extract_multiple>. Note too that the value returned by an extractor
+subroutine need not bear any relationship to the corresponding substring
+of the original text (see examples below).
+
+If the extractor is a precompiled regular expression or a string,
+it is matched against the text in a scalar context with a leading
+'\G' and the gc modifiers enabled. The extracted value is either
+$1 if that variable is defined after the match, or else the
+complete match (i.e. $&).
+
+If the extractor is a hash reference, it must contain exactly one element.
+The value of that element is one of the
+above extractor types (subroutine reference, regular expression, or string).
+The key of that element is the name of a class into which the successful
+return value of the extractor will be blessed.
+
+If an extractor returns a defined value, that value is immediately
+treated as the next extracted field and pushed onto the list of fields.
+If the extractor was specified in a hash reference, the field is also
+blessed into the appropriate class,
+
+If the extractor fails to match (in the case of a regex extractor), or returns an empty list or an undefined value (in the case of a subroutine extractor), it is
+assumed to have failed to extract.
+If none of the extractor subroutines succeeds, then one
+character is extracted from the start of the text and the extraction
+subroutines reapplied. Characters which are thus removed are accumulated and
+eventually become the next field (unless the fourth argument is true, in which
+case they are disgarded).
+
+For example, the following extracts substrings that are valid Perl variables:
+
+ @fields = extract_multiple($text,
+ [ sub { extract_variable($_[0]) } ],
+ undef, 1);
+
+This example separates a text into fields which are quote delimited,
+curly bracketed, and anything else. The delimited and bracketed
+parts are also blessed to identify them (the "anything else" is unblessed):
+
+ @fields = extract_multiple($text,
+ [
+ { Delim => sub { extract_delimited($_[0],q{'"}) } },
+ { Brack => sub { extract_bracketed($_[0],'{}') } },
+ ]);
+
+This call extracts the next single substring that is a valid Perl quotelike
+operator (and removes it from $text):
+
+ $quotelike = extract_multiple($text,
+ [
+ sub { extract_quotelike($_[0]) },
+ ], undef, 1);
+
+Finally, here is yet another way to do comma-separated value parsing:
+
+ @fields = extract_multiple($csv_text,
+ [
+ sub { extract_delimited($_[0],q{'"}) },
+ qr/([^,]+)(.*)/,
+ ],
+ undef,1);
+
+The list in the second argument means:
+I<"Try and extract a ' or " delimited string, otherwise extract anything up to a comma...">.
+The undef third argument means:
+I<"...as many times as possible...">,
+and the true value in the fourth argument means
+I<"...discarding anything else that appears (i.e. the commas)">.
+
+If you wanted the commas preserved as separate fields (i.e. like split
+does if your split pattern has capturing parentheses), you would
+just make the last parameter undefined (or remove it).
+
+
+=head2 C<gen_delimited_pat>
+
+The C<gen_delimited_pat> subroutine takes a single (string) argument and
+ > builds a Friedl-style optimized regex that matches a string delimited
+by any one of the characters in the single argument. For example:
+
+ gen_delimited_pat(q{'"})
+
+returns the regex:
+
+ (?:\"(?:\\\"|(?!\").)*\"|\'(?:\\\'|(?!\').)*\')
+
+Note that the specified delimiters are automatically quotemeta'd.
+
+A typical use of C<gen_delimited_pat> would be to build special purpose tags
+for C<extract_tagged>. For example, to properly ignore "empty" XML elements
+(which might contain quoted strings):
+
+ my $empty_tag = '<(' . gen_delimited_pat(q{'"}) . '|.)+/>';
+
+ extract_tagged($text, undef, undef, undef, {ignore => [$empty_tag]} );
+
+
+C<gen_delimited_pat> may also be called with an optional second argument,
+which specifies the "escape" character(s) to be used for each delimiter.
+For example to match a Pascal-style string (where ' is the delimiter
+and '' is a literal ' within the string):
+
+ gen_delimited_pat(q{'},q{'});
+
+Different escape characters can be specified for different delimiters.
+For example, to specify that '/' is the escape for single quotes
+and '%' is the escape for double quotes:
+
+ gen_delimited_pat(q{'"},q{/%});
+
+If more delimiters than escape chars are specified, the last escape char
+is used for the remaining delimiters.
+If no escape char is specified for a given specified delimiter, '\' is used.
+
+Note that
+C<gen_delimited_pat> was previously called
+C<delimited_pat>. That name may still be used, but is now deprecated.
+
+
+=head1 DIAGNOSTICS
+
+In a list context, all the functions return C<(undef,$original_text)>
+on failure. In a scalar context, failure is indicated by returning C<undef>
+(in this case the input text is not modified in any way).
+
+In addition, on failure in I<any> context, the C<$@> variable is set.
+Accessing C<$@-E<gt>{error}> returns one of the error diagnostics listed
+below.
+Accessing C<$@-E<gt>{pos}> returns the offset into the original string at
+which the error was detected (although not necessarily where it occurred!)
+Printing C<$@> directly produces the error message, with the offset appended.
+On success, the C<$@> variable is guaranteed to be C<undef>.
+
+The available diagnostics are:
+
+=over 4
+
+=item C<Did not find a suitable bracket: "%s">
+
+The delimiter provided to C<extract_bracketed> was not one of
+C<'()[]E<lt>E<gt>{}'>.
+
+=item C<Did not find prefix: /%s/>
+
+A non-optional prefix was specified but wasn't found at the start of the text.
+
+=item C<Did not find opening bracket after prefix: "%s">
+
+C<extract_bracketed> or C<extract_codeblock> was expecting a
+particular kind of bracket at the start of the text, and didn't find it.
+
+=item C<No quotelike operator found after prefix: "%s">
+
+C<extract_quotelike> didn't find one of the quotelike operators C<q>,
+C<qq>, C<qw>, C<qx>, C<s>, C<tr> or C<y> at the start of the substring
+it was extracting.
+
+=item C<Unmatched closing bracket: "%c">
+
+C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> encountered
+a closing bracket where none was expected.
+
+=item C<Unmatched opening bracket(s): "%s">
+
+C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> ran
+out of characters in the text before closing one or more levels of nested
+brackets.
+
+=item C<Unmatched embedded quote (%s)>
+
+C<extract_bracketed> attempted to match an embedded quoted substring, but
+failed to find a closing quote to match it.
+
+=item C<Did not find closing delimiter to match '%s'>
+
+C<extract_quotelike> was unable to find a closing delimiter to match the
+one that opened the quote-like operation.
+
+=item C<Mismatched closing bracket: expected "%c" but found "%s">
+
+C<extract_bracketed>, C<extract_quotelike> or C<extract_codeblock> found
+a valid bracket delimiter, but it was the wrong species. This usually
+indicates a nesting error, but may indicate incorrect quoting or escaping.
+
+=item C<No block delimiter found after quotelike "%s">
+
+C<extract_quotelike> or C<extract_codeblock> found one of the
+quotelike operators C<q>, C<qq>, C<qw>, C<qx>, C<s>, C<tr> or C<y>
+without a suitable block after it.
+
+=item C<Did not find leading dereferencer>
+
+C<extract_variable> was expecting one of '$', '@', or '%' at the start of
+a variable, but didn't find any of them.
+
+=item C<Bad identifier after dereferencer>
+
+C<extract_variable> found a '$', '@', or '%' indicating a variable, but that
+character was not followed by a legal Perl identifier.
+
+=item C<Did not find expected opening bracket at %s>
+
+C<extract_codeblock> failed to find any of the outermost opening brackets
+that were specified.
+
+=item C<Improperly nested codeblock at %s>
+
+A nested code block was found that started with a delimiter that was specified
+as being only to be used as an outermost bracket.
+
+=item C<Missing second block for quotelike "%s">
+
+C<extract_codeblock> or C<extract_quotelike> found one of the
+quotelike operators C<s>, C<tr> or C<y> followed by only one block.
+
+=item C<No match found for opening bracket>
+
+C<extract_codeblock> failed to find a closing bracket to match the outermost
+opening bracket.
+
+=item C<Did not find opening tag: /%s/>
+
+C<extract_tagged> did not find a suitable opening tag (after any specified
+prefix was removed).
+
+=item C<Unable to construct closing tag to match: /%s/>
+
+C<extract_tagged> matched the specified opening tag and tried to
+modify the matched text to produce a matching closing tag (because
+none was specified). It failed to generate the closing tag, almost
+certainly because the opening tag did not start with a
+bracket of some kind.
+
+=item C<Found invalid nested tag: %s>
+
+C<extract_tagged> found a nested tag that appeared in the "reject" list
+(and the failure mode was not "MAX" or "PARA").
+
+=item C<Found unbalanced nested tag: %s>
+
+C<extract_tagged> found a nested opening tag that was not matched by a
+corresponding nested closing tag (and the failure mode was not "MAX" or "PARA").
+
+=item C<Did not find closing tag>
+
+C<extract_tagged> reached the end of the text without finding a closing tag
+to match the original opening tag (and the failure mode was not
+"MAX" or "PARA").
+
+
+
+
+=back
+
+
+=head1 AUTHOR
+
+Damian Conway (damian@conway.org)
+
+
+=head1 BUGS AND IRRITATIONS
+
+There are undoubtedly serious bugs lurking somewhere in this code, if
+only because parts of it give the impression of understanding a great deal
+more about Perl than they really do.
+
+Bug reports and other feedback are most welcome.
+
+
+=head1 COPYRIGHT
+
+ Copyright (c) 1997-2001, Damian Conway. All Rights Reserved.
+ This module is free software. It may be used, redistributed
+ and/or modified under the same terms as Perl itself.
diff --git a/Master/tlpkg/tlperl/lib/Text/ParseWords.pm b/Master/tlpkg/tlperl/lib/Text/ParseWords.pm
new file mode 100644
index 00000000000..2f6812ade80
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/ParseWords.pm
@@ -0,0 +1,263 @@
+package Text::ParseWords;
+
+use vars qw($VERSION @ISA @EXPORT $PERL_SINGLE_QUOTE);
+$VERSION = "3.24";
+
+require 5.000;
+
+use Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(shellwords quotewords nested_quotewords parse_line);
+@EXPORT_OK = qw(old_shellwords);
+
+
+sub shellwords {
+ my(@lines) = @_;
+ $lines[$#lines] =~ s/\s+$//;
+ return(quotewords('\s+', 0, @lines));
+}
+
+
+
+sub quotewords {
+ my($delim, $keep, @lines) = @_;
+ my($line, @words, @allwords);
+
+ foreach $line (@lines) {
+ @words = parse_line($delim, $keep, $line);
+ return() unless (@words || !length($line));
+ push(@allwords, @words);
+ }
+ return(@allwords);
+}
+
+
+
+sub nested_quotewords {
+ my($delim, $keep, @lines) = @_;
+ my($i, @allwords);
+
+ for ($i = 0; $i < @lines; $i++) {
+ @{$allwords[$i]} = parse_line($delim, $keep, $lines[$i]);
+ return() unless (@{$allwords[$i]} || !length($lines[$i]));
+ }
+ return(@allwords);
+}
+
+
+
+sub parse_line {
+ my($delimiter, $keep, $line) = @_;
+ my($word, @pieces);
+
+ no warnings 'uninitialized'; # we will be testing undef strings
+
+ while (length($line)) {
+ $line =~ s/^(["']) # a $quote
+ ((?:\\.|(?!\1)[^\\])*) # and $quoted text
+ \1 # followed by the same quote
+ | # --OR--
+ ^((?:\\.|[^\\"'])*?) # an $unquoted text
+ (\Z(?!\n)|(?-x:$delimiter)|(?!^)(?=["']))
+ # plus EOL, delimiter, or quote
+ //xs or return; # extended layout
+ my($quote, $quoted, $unquoted, $delim) = ($1, $2, $3, $4);
+ return() unless( defined($quote) || length($unquoted) || length($delim));
+
+ if ($keep) {
+ $quoted = "$quote$quoted$quote";
+ }
+ else {
+ $unquoted =~ s/\\(.)/$1/sg;
+ if (defined $quote) {
+ $quoted =~ s/\\(.)/$1/sg if ($quote eq '"');
+ $quoted =~ s/\\([\\'])/$1/g if ( $PERL_SINGLE_QUOTE && $quote eq "'");
+ }
+ }
+ $word .= substr($line, 0, 0); # leave results tainted
+ $word .= defined $quote ? $quoted : $unquoted;
+
+ if (length($delim)) {
+ push(@pieces, $word);
+ push(@pieces, $delim) if ($keep eq 'delimiters');
+ undef $word;
+ }
+ if (!length($line)) {
+ push(@pieces, $word);
+ }
+ }
+ return(@pieces);
+}
+
+
+
+sub old_shellwords {
+
+ # Usage:
+ # use ParseWords;
+ # @words = old_shellwords($line);
+ # or
+ # @words = old_shellwords(@lines);
+ # or
+ # @words = old_shellwords(); # defaults to $_ (and clobbers it)
+
+ no warnings 'uninitialized'; # we will be testing undef strings
+ local *_ = \join('', @_) if @_;
+ my (@words, $snippet);
+
+ s/\A\s+//;
+ while ($_ ne '') {
+ my $field = substr($_, 0, 0); # leave results tainted
+ for (;;) {
+ if (s/\A"(([^"\\]|\\.)*)"//s) {
+ ($snippet = $1) =~ s#\\(.)#$1#sg;
+ }
+ elsif (/\A"/) {
+ require Carp;
+ Carp::carp("Unmatched double quote: $_");
+ return();
+ }
+ elsif (s/\A'(([^'\\]|\\.)*)'//s) {
+ ($snippet = $1) =~ s#\\(.)#$1#sg;
+ }
+ elsif (/\A'/) {
+ require Carp;
+ Carp::carp("Unmatched single quote: $_");
+ return();
+ }
+ elsif (s/\A\\(.)//s) {
+ $snippet = $1;
+ }
+ elsif (s/\A([^\s\\'"]+)//) {
+ $snippet = $1;
+ }
+ else {
+ s/\A\s+//;
+ last;
+ }
+ $field .= $snippet;
+ }
+ push(@words, $field);
+ }
+ return @words;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Text::ParseWords - parse text into an array of tokens or array of arrays
+
+=head1 SYNOPSIS
+
+ use Text::ParseWords;
+ @lists = &nested_quotewords($delim, $keep, @lines);
+ @words = &quotewords($delim, $keep, @lines);
+ @words = &shellwords(@lines);
+ @words = &parse_line($delim, $keep, $line);
+ @words = &old_shellwords(@lines); # DEPRECATED!
+
+=head1 DESCRIPTION
+
+The &nested_quotewords() and &quotewords() functions accept a delimiter
+(which can be a regular expression)
+and a list of lines and then breaks those lines up into a list of
+words ignoring delimiters that appear inside quotes. &quotewords()
+returns all of the tokens in a single long list, while &nested_quotewords()
+returns a list of token lists corresponding to the elements of @lines.
+&parse_line() does tokenizing on a single string. The &*quotewords()
+functions simply call &parse_line(), so if you're only splitting
+one line you can call &parse_line() directly and save a function
+call.
+
+The $keep argument is a boolean flag. If true, then the tokens are
+split on the specified delimiter, but all other characters (quotes,
+backslashes, etc.) are kept in the tokens. If $keep is false then the
+&*quotewords() functions remove all quotes and backslashes that are
+not themselves backslash-escaped or inside of single quotes (i.e.,
+&quotewords() tries to interpret these characters just like the Bourne
+shell). NB: these semantics are significantly different from the
+original version of this module shipped with Perl 5.000 through 5.004.
+As an additional feature, $keep may be the keyword "delimiters" which
+causes the functions to preserve the delimiters in each string as
+tokens in the token lists, in addition to preserving quote and
+backslash characters.
+
+&shellwords() is written as a special case of &quotewords(), and it
+does token parsing with whitespace as a delimiter-- similar to most
+Unix shells.
+
+=head1 EXAMPLES
+
+The sample program:
+
+ use Text::ParseWords;
+ @words = &quotewords('\s+', 0, q{this is "a test" of\ quotewords \"for you});
+ $i = 0;
+ foreach (@words) {
+ print "$i: <$_>\n";
+ $i++;
+ }
+
+produces:
+
+ 0: <this>
+ 1: <is>
+ 2: <a test>
+ 3: <of quotewords>
+ 4: <"for>
+ 5: <you>
+
+demonstrating:
+
+=over 4
+
+=item 0
+
+a simple word
+
+=item 1
+
+multiple spaces are skipped because of our $delim
+
+=item 2
+
+use of quotes to include a space in a word
+
+=item 3
+
+use of a backslash to include a space in a word
+
+=item 4
+
+use of a backslash to remove the special meaning of a double-quote
+
+=item 5
+
+another simple word (note the lack of effect of the
+backslashed double-quote)
+
+=back
+
+Replacing C<&quotewords('\s+', 0, q{this is...})>
+with C<&shellwords(q{this is...})>
+is a simpler way to accomplish the same thing.
+
+=head1 AUTHORS
+
+Maintainer is Hal Pomeranz <pomeranz@netcom.com>, 1994-1997 (Original
+author unknown). Much of the code for &parse_line() (including the
+primary regexp) from Joerk Behrends <jbehrends@multimediaproduzenten.de>.
+
+Examples section another documentation provided by John Heidemann
+<johnh@ISI.EDU>
+
+Bug reports, patches, and nagging provided by lots of folks-- thanks
+everybody! Special thanks to Michael Schwern <schwern@envirolink.org>
+for assuring me that a &nested_quotewords() would be useful, and to
+Jeff Friedl <jfriedl@yahoo-inc.com> for telling me not to worry about
+error-checking (sort of-- you had to be there).
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Text/Soundex.pm b/Master/tlpkg/tlperl/lib/Text/Soundex.pm
new file mode 100644
index 00000000000..64a9e6507d5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/Soundex.pm
@@ -0,0 +1,150 @@
+package Text::Soundex;
+require 5.000;
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(&soundex $soundex_nocode);
+
+$VERSION = '1.01';
+
+# $Id: soundex.pl,v 1.2 1994/03/24 00:30:27 mike Exp $
+#
+# Implementation of soundex algorithm as described by Knuth in volume
+# 3 of The Art of Computer Programming, with ideas stolen from Ian
+# Phillipps <ian@pipex.net>.
+#
+# Mike Stok <Mike.Stok@meiko.concord.ma.us>, 2 March 1994.
+#
+# Knuth's test cases are:
+#
+# Euler, Ellery -> E460
+# Gauss, Ghosh -> G200
+# Hilbert, Heilbronn -> H416
+# Knuth, Kant -> K530
+# Lloyd, Ladd -> L300
+# Lukasiewicz, Lissajous -> L222
+#
+# $Log: soundex.pl,v $
+# Revision 1.2 1994/03/24 00:30:27 mike
+# Subtle bug (any excuse :-) spotted by Rich Pinder <rpinder@hsc.usc.edu>
+# in the way I handles leasing characters which were different but had
+# the same soundex code. This showed up comparing it with Oracle's
+# soundex output.
+#
+# Revision 1.1 1994/03/02 13:01:30 mike
+# Initial revision
+#
+#
+##############################################################################
+
+# $soundex_nocode is used to indicate a string doesn't have a soundex
+# code, I like undef other people may want to set it to 'Z000'.
+
+$soundex_nocode = undef;
+
+sub soundex
+{
+ local (@s, $f, $fc, $_) = @_;
+
+ push @s, '' unless @s; # handle no args as a single empty string
+
+ foreach (@s)
+ {
+ $_ = uc $_;
+ tr/A-Z//cd;
+
+ if ($_ eq '')
+ {
+ $_ = $soundex_nocode;
+ }
+ else
+ {
+ ($f) = /^(.)/;
+ tr/AEHIOUWYBFPVCGJKQSXZDTLMNR/00000000111122222222334556/;
+ ($fc) = /^(.)/;
+ s/^$fc+//;
+ tr///cs;
+ tr/0//d;
+ $_ = $f . $_ . '000';
+ s/^(.{4}).*/$1/;
+ }
+ }
+
+ wantarray ? @s : shift @s;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Text::Soundex - Implementation of the Soundex Algorithm as Described by Knuth
+
+=head1 SYNOPSIS
+
+ use Text::Soundex;
+
+ $code = soundex $string; # get soundex code for a string
+ @codes = soundex @list; # get list of codes for list of strings
+
+ # set value to be returned for strings without soundex code
+
+ $soundex_nocode = 'Z000';
+
+=head1 DESCRIPTION
+
+This module implements the soundex algorithm as described by Donald Knuth
+in Volume 3 of B<The Art of Computer Programming>. The algorithm is
+intended to hash words (in particular surnames) into a small space using a
+simple model which approximates the sound of the word when spoken by an English
+speaker. Each word is reduced to a four character string, the first
+character being an upper case letter and the remaining three being digits.
+
+If there is no soundex code representation for a string then the value of
+C<$soundex_nocode> is returned. This is initially set to C<undef>, but
+many people seem to prefer an I<unlikely> value like C<Z000>
+(how unlikely this is depends on the data set being dealt with.) Any value
+can be assigned to C<$soundex_nocode>.
+
+In scalar context C<soundex> returns the soundex code of its first
+argument, and in list context a list is returned in which each element is the
+soundex code for the corresponding argument passed to C<soundex> e.g.
+
+ @codes = soundex qw(Mike Stok);
+
+leaves C<@codes> containing C<('M200', 'S320')>.
+
+=head1 EXAMPLES
+
+Knuth's examples of various names and the soundex codes they map to
+are listed below:
+
+ Euler, Ellery -> E460
+ Gauss, Ghosh -> G200
+ Hilbert, Heilbronn -> H416
+ Knuth, Kant -> K530
+ Lloyd, Ladd -> L300
+ Lukasiewicz, Lissajous -> L222
+
+so:
+
+ $code = soundex 'Knuth'; # $code contains 'K530'
+ @list = soundex qw(Lloyd Gauss); # @list contains 'L300', 'G200'
+
+=head1 LIMITATIONS
+
+As the soundex algorithm was originally used a B<long> time ago in the US
+it considers only the English alphabet and pronunciation.
+
+As it is mapping a large space (arbitrary length strings) onto a small
+space (single letter plus 3 digits) no inference can be made about the
+similarity of two strings which end up with the same soundex code. For
+example, both C<Hilbert> and C<Heilbronn> end up with a soundex code
+of C<H416>.
+
+=head1 AUTHOR
+
+This code was implemented by Mike Stok (C<stok@cybercom.net>) from the
+description given by Knuth. Ian Phillipps (C<ian@pipex.net>) and Rich Pinder
+(C<rpinder@hsc.usc.edu>) supplied ideas and spotted mistakes.
diff --git a/Master/tlpkg/tlperl/lib/Text/Tabs.pm b/Master/tlpkg/tlperl/lib/Text/Tabs.pm
new file mode 100644
index 00000000000..36107fcfe3e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/Tabs.pm
@@ -0,0 +1,121 @@
+
+package Text::Tabs;
+
+require Exporter;
+
+@ISA = (Exporter);
+@EXPORT = qw(expand unexpand $tabstop);
+
+use vars qw($VERSION $tabstop $debug);
+$VERSION = 2005.0824;
+
+use strict;
+
+BEGIN {
+ $tabstop = 8;
+ $debug = 0;
+}
+
+sub expand {
+ my @l;
+ my $pad;
+ for ( @_ ) {
+ my $s = '';
+ for (split(/^/m, $_, -1)) {
+ my $offs = 0;
+ s{\t}{
+ $pad = $tabstop - (pos() + $offs) % $tabstop;
+ $offs += $pad - 1;
+ " " x $pad;
+ }eg;
+ $s .= $_;
+ }
+ push(@l, $s);
+ }
+ return @l if wantarray;
+ return $l[0];
+}
+
+sub unexpand
+{
+ my (@l) = @_;
+ my @e;
+ my $x;
+ my $line;
+ my @lines;
+ my $lastbit;
+ for $x (@l) {
+ @lines = split("\n", $x, -1);
+ for $line (@lines) {
+ $line = expand($line);
+ @e = split(/(.{$tabstop})/,$line,-1);
+ $lastbit = pop(@e);
+ $lastbit = '' unless defined $lastbit;
+ $lastbit = "\t"
+ if $lastbit eq " "x$tabstop;
+ for $_ (@e) {
+ if ($debug) {
+ my $x = $_;
+ $x =~ s/\t/^I\t/gs;
+ print "sub on '$x'\n";
+ }
+ s/ +$/\t/;
+ }
+ $line = join('',@e, $lastbit);
+ }
+ $x = join("\n", @lines);
+ }
+ return @l if wantarray;
+ return $l[0];
+}
+
+1;
+__END__
+
+sub expand
+{
+ my (@l) = @_;
+ for $_ (@l) {
+ 1 while s/(^|\n)([^\t\n]*)(\t+)/
+ $1. $2 . (" " x
+ ($tabstop * length($3)
+ - (length($2) % $tabstop)))
+ /sex;
+ }
+ return @l if wantarray;
+ return $l[0];
+}
+
+
+=head1 NAME
+
+Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1)
+
+=head1 SYNOPSIS
+
+ use Text::Tabs;
+
+ $tabstop = 4;
+ @lines_without_tabs = expand(@lines_with_tabs);
+ @lines_with_tabs = unexpand(@lines_without_tabs);
+
+=head1 DESCRIPTION
+
+Text::Tabs does about what the unix utilities expand(1) and unexpand(1)
+do. Given a line with tabs in it, expand will replace the tabs with
+the appropriate number of spaces. Given a line with or without tabs in
+it, unexpand will add tabs when it can save bytes by doing so. Invisible
+compression with plain ascii!
+
+=head1 BUGS
+
+expand doesn't handle newlines very quickly -- do not feed it an
+entire document in one string. Instead feed it an array of lines.
+
+=head1 LICENSE
+
+Copyright (C) 1996-2002,2005 David Muir Sharnoff.
+Copyright (C) 2005 Aristotle Pagaltzis
+This module may be modified, used, copied, and redistributed at your own risk.
+Publicly redistributed modified versions must use a different name.
+
diff --git a/Master/tlpkg/tlperl/lib/Text/Wrap.pm b/Master/tlpkg/tlperl/lib/Text/Wrap.pm
new file mode 100644
index 00000000000..d364cfc1195
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Text/Wrap.pm
@@ -0,0 +1,223 @@
+package Text::Wrap;
+
+require Exporter;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(wrap fill);
+@EXPORT_OK = qw($columns $break $huge);
+
+$VERSION = 2005.0824_01;
+
+use vars qw($VERSION $columns $debug $break $huge $unexpand $tabstop
+ $separator $separator2);
+use strict;
+
+BEGIN {
+ $columns = 76; # <= screen width
+ $debug = 0;
+ $break = '\s';
+ $huge = 'wrap'; # alternatively: 'die' or 'overflow'
+ $unexpand = 1;
+ $tabstop = 8;
+ $separator = "\n";
+ $separator2 = undef;
+}
+
+use Text::Tabs qw(expand unexpand);
+
+sub wrap
+{
+ my ($ip, $xp, @t) = @_;
+
+ local($Text::Tabs::tabstop) = $tabstop;
+ my $r = "";
+ my $tail = pop(@t);
+ my $t = expand(join("", (map { /\s+\z/ ? ( $_ ) : ($_, ' ') } @t), $tail));
+ my $lead = $ip;
+ my $ll = $columns - length(expand($ip)) - 1;
+ $ll = 0 if $ll < 0;
+ my $nll = $columns - length(expand($xp)) - 1;
+ my $nl = "";
+ my $remainder = "";
+
+ use re 'taint';
+
+ pos($t) = 0;
+ while ($t !~ /\G\s*\Z/gc) {
+ if ($t =~ /\G([^\n]{0,$ll})($break|\n*\z)/xmgc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = $2;
+ } elsif ($huge eq 'wrap' && $t =~ /\G([^\n]{$ll})/gc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = defined($separator2) ? $separator2 : $separator;
+ } elsif ($huge eq 'overflow' && $t =~ /\G([^\n]*?)($break|\z)/xmgc) {
+ $r .= $unexpand
+ ? unexpand($nl . $lead . $1)
+ : $nl . $lead . $1;
+ $remainder = $2;
+ } elsif ($huge eq 'die') {
+ die "couldn't wrap '$t'";
+ } else {
+ die "This shouldn't happen";
+ }
+
+ $lead = $xp;
+ $ll = $nll;
+ $nl = defined($separator2)
+ ? ($remainder eq "\n"
+ ? "\n"
+ : $separator2)
+ : $separator;
+ }
+ $r .= $remainder;
+
+ print "-----------$r---------\n" if $debug;
+
+ print "Finish up with '$lead'\n" if $debug;
+
+ $r .= $lead . substr($t, pos($t), length($t)-pos($t))
+ if pos($t) ne length($t);
+
+ print "-----------$r---------\n" if $debug;;
+
+ return $r;
+}
+
+sub fill
+{
+ my ($ip, $xp, @raw) = @_;
+ my @para;
+ my $pp;
+
+ for $pp (split(/\n\s+/, join("\n",@raw))) {
+ $pp =~ s/\s+/ /g;
+ my $x = wrap($ip, $xp, $pp);
+ push(@para, $x);
+ }
+
+ # if paragraph_indent is the same as line_indent,
+ # separate paragraphs with blank lines
+
+ my $ps = ($ip eq $xp) ? "\n\n" : "\n";
+ return join ($ps, @para);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Text::Wrap - line wrapping to form simple paragraphs
+
+=head1 SYNOPSIS
+
+B<Example 1>
+
+ use Text::Wrap
+
+ $initial_tab = "\t"; # Tab before first line
+ $subsequent_tab = ""; # All other lines flush left
+
+ print wrap($initial_tab, $subsequent_tab, @text);
+ print fill($initial_tab, $subsequent_tab, @text);
+
+ $lines = wrap($initial_tab, $subsequent_tab, @text);
+
+ @paragraphs = fill($initial_tab, $subsequent_tab, @text);
+
+B<Example 2>
+
+ use Text::Wrap qw(wrap $columns $huge);
+
+ $columns = 132; # Wrap at 132 characters
+ $huge = 'die';
+ $huge = 'wrap';
+ $huge = 'overflow';
+
+B<Example 3>
+
+ use Text::Wrap
+
+ $Text::Wrap::columns = 72;
+ print wrap('', '', @text);
+
+=head1 DESCRIPTION
+
+C<Text::Wrap::wrap()> is a very simple paragraph formatter. It formats a
+single paragraph at a time by breaking lines at word boundries.
+Indentation is controlled for the first line (C<$initial_tab>) and
+all subsequent lines (C<$subsequent_tab>) independently. Please note:
+C<$initial_tab> and C<$subsequent_tab> are the literal strings that will
+be used: it is unlikley you would want to pass in a number.
+
+Text::Wrap::fill() is a simple multi-paragraph formatter. It formats
+each paragraph separately and then joins them together when it's done. It
+will destroy any whitespace in the original text. It breaks text into
+paragraphs by looking for whitespace after a newline. In other respects
+it acts like wrap().
+
+=head1 OVERRIDES
+
+C<Text::Wrap::wrap()> has a number of variables that control its behavior.
+Because other modules might be using C<Text::Wrap::wrap()> it is suggested
+that you leave these variables alone! If you can't do that, then
+use C<local($Text::Wrap::VARIABLE) = YOURVALUE> when you change the
+values so that the original value is restored. This C<local()> trick
+will not work if you import the variable into your own namespace.
+
+Lines are wrapped at C<$Text::Wrap::columns> columns. C<$Text::Wrap::columns>
+should be set to the full width of your output device. In fact,
+every resulting line will have length of no more than C<$columns - 1>.
+
+It is possible to control which characters terminate words by
+modifying C<$Text::Wrap::break>. Set this to a string such as
+C<'[\s:]'> (to break before spaces or colons) or a pre-compiled regexp
+such as C<qr/[\s']/> (to break before spaces or apostrophes). The
+default is simply C<'\s'>; that is, words are terminated by spaces.
+(This means, among other things, that trailing punctuation such as
+full stops or commas stay with the word they are "attached" to.)
+
+Beginner note: In example 2, above C<$columns> is imported into
+the local namespace, and set locally. In example 3,
+C<$Text::Wrap::columns> is set in its own namespace without importing it.
+
+C<Text::Wrap::wrap()> starts its work by expanding all the tabs in its
+input into spaces. The last thing it does it to turn spaces back
+into tabs. If you do not want tabs in your results, set
+C<$Text::Wrap::unexpand> to a false value. Likewise if you do not
+want to use 8-character tabstops, set C<$Text::Wrap::tabstop> to
+the number of characters you do want for your tabstops.
+
+If you want to separate your lines with something other than C<\n>
+then set C<$Text::Wrap::separator> to your preference. This replaces
+all newlines with C<$Text::Wrap::separator>. If you just to preserve
+existing newlines but add new breaks with something else, set
+C<$Text::Wrap::separator2> instead.
+
+When words that are longer than C<$columns> are encountered, they
+are broken up. C<wrap()> adds a C<"\n"> at column C<$columns>.
+This behavior can be overridden by setting C<$huge> to
+'die' or to 'overflow'. When set to 'die', large words will cause
+C<die()> to be called. When set to 'overflow', large words will be
+left intact.
+
+Historical notes: 'die' used to be the default value of
+C<$huge>. Now, 'wrap' is the default value.
+
+=head1 EXAMPLE
+
+ print wrap("\t","","This is a bit of text that forms
+ a normal book-style paragraph");
+
+=head1 LICENSE
+
+David Muir Sharnoff <muir@idiom.com> with help from Tim Pierce and
+many many others. Copyright (C) 1996-2002 David Muir Sharnoff.
+This module may be modified, used, copied, and redistributed at
+your own risk. Publicly redistributed modified versions must use
+a different name.
+
diff --git a/Master/tlpkg/tlperl/lib/Tie/Array.pm b/Master/tlpkg/tlperl/lib/Tie/Array.pm
new file mode 100644
index 00000000000..af8f51e9f51
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/Array.pm
@@ -0,0 +1,287 @@
+package Tie::Array;
+
+use 5.006_001;
+use strict;
+use Carp;
+our $VERSION = '1.03';
+
+# Pod documentation after __END__ below.
+
+sub DESTROY { }
+sub EXTEND { }
+sub UNSHIFT { scalar shift->SPLICE(0,0,@_) }
+sub SHIFT { shift->SPLICE(0,1) }
+sub CLEAR { shift->STORESIZE(0) }
+
+sub PUSH
+{
+ my $obj = shift;
+ my $i = $obj->FETCHSIZE;
+ $obj->STORE($i++, shift) while (@_);
+}
+
+sub POP
+{
+ my $obj = shift;
+ my $newsize = $obj->FETCHSIZE - 1;
+ my $val;
+ if ($newsize >= 0)
+ {
+ $val = $obj->FETCH($newsize);
+ $obj->STORESIZE($newsize);
+ }
+ $val;
+}
+
+sub SPLICE {
+ my $obj = shift;
+ my $sz = $obj->FETCHSIZE;
+ my $off = (@_) ? shift : 0;
+ $off += $sz if ($off < 0);
+ my $len = (@_) ? shift : $sz - $off;
+ $len += $sz - $off if $len < 0;
+ my @result;
+ for (my $i = 0; $i < $len; $i++) {
+ push(@result,$obj->FETCH($off+$i));
+ }
+ $off = $sz if $off > $sz;
+ $len -= $off + $len - $sz if $off + $len > $sz;
+ if (@_ > $len) {
+ # Move items up to make room
+ my $d = @_ - $len;
+ my $e = $off+$len;
+ $obj->EXTEND($sz+$d);
+ for (my $i=$sz-1; $i >= $e; $i--) {
+ my $val = $obj->FETCH($i);
+ $obj->STORE($i+$d,$val);
+ }
+ }
+ elsif (@_ < $len) {
+ # Move items down to close the gap
+ my $d = $len - @_;
+ my $e = $off+$len;
+ for (my $i=$off+$len; $i < $sz; $i++) {
+ my $val = $obj->FETCH($i);
+ $obj->STORE($i-$d,$val);
+ }
+ $obj->STORESIZE($sz-$d);
+ }
+ for (my $i=0; $i < @_; $i++) {
+ $obj->STORE($off+$i,$_[$i]);
+ }
+ return wantarray ? @result : pop @result;
+}
+
+sub EXISTS {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define an EXISTS method";
+}
+
+sub DELETE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a DELETE method";
+}
+
+package Tie::StdArray;
+use vars qw(@ISA);
+@ISA = 'Tie::Array';
+
+sub TIEARRAY { bless [], $_[0] }
+sub FETCHSIZE { scalar @{$_[0]} }
+sub STORESIZE { $#{$_[0]} = $_[1]-1 }
+sub STORE { $_[0]->[$_[1]] = $_[2] }
+sub FETCH { $_[0]->[$_[1]] }
+sub CLEAR { @{$_[0]} = () }
+sub POP { pop(@{$_[0]}) }
+sub PUSH { my $o = shift; push(@$o,@_) }
+sub SHIFT { shift(@{$_[0]}) }
+sub UNSHIFT { my $o = shift; unshift(@$o,@_) }
+sub EXISTS { exists $_[0]->[$_[1]] }
+sub DELETE { delete $_[0]->[$_[1]] }
+
+sub SPLICE
+{
+ my $ob = shift;
+ my $sz = $ob->FETCHSIZE;
+ my $off = @_ ? shift : 0;
+ $off += $sz if $off < 0;
+ my $len = @_ ? shift : $sz-$off;
+ return splice(@$ob,$off,$len,@_);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Tie::Array - base class for tied arrays
+
+=head1 SYNOPSIS
+
+ package Tie::NewArray;
+ use Tie::Array;
+ @ISA = ('Tie::Array');
+
+ # mandatory methods
+ sub TIEARRAY { ... }
+ sub FETCH { ... }
+ sub FETCHSIZE { ... }
+
+ sub STORE { ... } # mandatory if elements writeable
+ sub STORESIZE { ... } # mandatory if elements can be added/deleted
+ sub EXISTS { ... } # mandatory if exists() expected to work
+ sub DELETE { ... } # mandatory if delete() expected to work
+
+ # optional methods - for efficiency
+ sub CLEAR { ... }
+ sub PUSH { ... }
+ sub POP { ... }
+ sub SHIFT { ... }
+ sub UNSHIFT { ... }
+ sub SPLICE { ... }
+ sub EXTEND { ... }
+ sub DESTROY { ... }
+
+ package Tie::NewStdArray;
+ use Tie::Array;
+
+ @ISA = ('Tie::StdArray');
+
+ # all methods provided by default
+
+ package main;
+
+ $object = tie @somearray,Tie::NewArray;
+ $object = tie @somearray,Tie::StdArray;
+ $object = tie @somearray,Tie::NewStdArray;
+
+
+
+=head1 DESCRIPTION
+
+This module provides methods for array-tying classes. See
+L<perltie> for a list of the functions required in order to tie an array
+to a package. The basic B<Tie::Array> package provides stub C<DESTROY>,
+and C<EXTEND> methods that do nothing, stub C<DELETE> and C<EXISTS>
+methods that croak() if the delete() or exists() builtins are ever called
+on the tied array, and implementations of C<PUSH>, C<POP>, C<SHIFT>,
+C<UNSHIFT>, C<SPLICE> and C<CLEAR> in terms of basic C<FETCH>, C<STORE>,
+C<FETCHSIZE>, C<STORESIZE>.
+
+The B<Tie::StdArray> package provides efficient methods required for tied arrays
+which are implemented as blessed references to an "inner" perl array.
+It inherits from B<Tie::Array>, and should cause tied arrays to behave exactly
+like standard arrays, allowing for selective overloading of methods.
+
+For developers wishing to write their own tied arrays, the required methods
+are briefly defined below. See the L<perltie> section for more detailed
+descriptive, as well as example code:
+
+=over 4
+
+=item TIEARRAY classname, LIST
+
+The class method is invoked by the command C<tie @array, classname>. Associates
+an array instance with the specified class. C<LIST> would represent
+additional arguments (along the lines of L<AnyDBM_File> and compatriots) needed
+to complete the association. The method should return an object of a class which
+provides the methods below.
+
+=item STORE this, index, value
+
+Store datum I<value> into I<index> for the tied array associated with
+object I<this>. If this makes the array larger then
+class's mapping of C<undef> should be returned for new positions.
+
+=item FETCH this, index
+
+Retrieve the datum in I<index> for the tied array associated with
+object I<this>.
+
+=item FETCHSIZE this
+
+Returns the total number of items in the tied array associated with
+object I<this>. (Equivalent to C<scalar(@array)>).
+
+=item STORESIZE this, count
+
+Sets the total number of items in the tied array associated with
+object I<this> to be I<count>. If this makes the array larger then
+class's mapping of C<undef> should be returned for new positions.
+If the array becomes smaller then entries beyond count should be
+deleted.
+
+=item EXTEND this, count
+
+Informative call that array is likely to grow to have I<count> entries.
+Can be used to optimize allocation. This method need do nothing.
+
+=item EXISTS this, key
+
+Verify that the element at index I<key> exists in the tied array I<this>.
+
+The B<Tie::Array> implementation is a stub that simply croaks.
+
+=item DELETE this, key
+
+Delete the element at index I<key> from the tied array I<this>.
+
+The B<Tie::Array> implementation is a stub that simply croaks.
+
+=item CLEAR this
+
+Clear (remove, delete, ...) all values from the tied array associated with
+object I<this>.
+
+=item DESTROY this
+
+Normal object destructor method.
+
+=item PUSH this, LIST
+
+Append elements of LIST to the array.
+
+=item POP this
+
+Remove last element of the array and return it.
+
+=item SHIFT this
+
+Remove the first element of the array (shifting other elements down)
+and return it.
+
+=item UNSHIFT this, LIST
+
+Insert LIST elements at the beginning of the array, moving existing elements
+up to make room.
+
+=item SPLICE this, offset, length, LIST
+
+Perform the equivalent of C<splice> on the array.
+
+I<offset> is optional and defaults to zero, negative values count back
+from the end of the array.
+
+I<length> is optional and defaults to rest of the array.
+
+I<LIST> may be empty.
+
+Returns a list of the original I<length> elements at I<offset>.
+
+=back
+
+=head1 CAVEATS
+
+There is no support at present for tied @ISA. There is a potential conflict
+between magic entries needed to notice setting of @ISA, and those needed to
+implement 'tie'.
+
+Very little consideration has been given to the behaviour of tied arrays
+when C<$[> is not default value of zero.
+
+=head1 AUTHOR
+
+Nick Ing-Simmons E<lt>nik@tiuk.ti.comE<gt>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tie/File.pm b/Master/tlpkg/tlperl/lib/Tie/File.pm
new file mode 100644
index 00000000000..a1f40afe199
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/File.pm
@@ -0,0 +1,2632 @@
+
+package Tie::File;
+require 5.005;
+use Carp ':DEFAULT', 'confess';
+use POSIX 'SEEK_SET';
+use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
+sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
+
+
+$VERSION = "0.97";
+my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes
+my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records
+my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful
+
+my %good_opt = map {$_ => 1, "-$_" => 1}
+ qw(memory dw_size mode recsep discipline
+ autodefer autochomp autodefer_threshhold concurrent);
+
+sub TIEARRAY {
+ if (@_ % 2 != 0) {
+ croak "usage: tie \@array, $_[0], filename, [option => value]...";
+ }
+ my ($pack, $file, %opts) = @_;
+
+ # transform '-foo' keys into 'foo' keys
+ for my $key (keys %opts) {
+ unless ($good_opt{$key}) {
+ croak("$pack: Unrecognized option '$key'\n");
+ }
+ my $okey = $key;
+ if ($key =~ s/^-+//) {
+ $opts{$key} = delete $opts{$okey};
+ }
+ }
+
+ if ($opts{concurrent}) {
+ croak("$pack: concurrent access not supported yet\n");
+ }
+
+ unless (defined $opts{memory}) {
+ # default is the larger of the default cache size and the
+ # deferred-write buffer size (if specified)
+ $opts{memory} = $DEFAULT_MEMORY_SIZE;
+ $opts{memory} = $opts{dw_size}
+ if defined $opts{dw_size} && $opts{dw_size} > $DEFAULT_MEMORY_SIZE;
+ # Dora Winifred Read
+ }
+ $opts{dw_size} = $opts{memory} unless defined $opts{dw_size};
+ if ($opts{dw_size} > $opts{memory}) {
+ croak("$pack: dw_size may not be larger than total memory allocation\n");
+ }
+ # are we in deferred-write mode?
+ $opts{defer} = 0 unless defined $opts{defer};
+ $opts{deferred} = {}; # no records are presently deferred
+ $opts{deferred_s} = 0; # count of total bytes in ->{deferred}
+ $opts{deferred_max} = -1; # empty
+
+ # What's a good way to arrange that this class can be overridden?
+ $opts{cache} = Tie::File::Cache->new($opts{memory});
+
+ # autodeferment is enabled by default
+ $opts{autodefer} = 1 unless defined $opts{autodefer};
+ $opts{autodeferring} = 0; # but is not initially active
+ $opts{ad_history} = [];
+ $opts{autodefer_threshhold} = $DEFAULT_AUTODEFER_THRESHHOLD
+ unless defined $opts{autodefer_threshhold};
+ $opts{autodefer_filelen_threshhold} = $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD
+ unless defined $opts{autodefer_filelen_threshhold};
+
+ $opts{offsets} = [0];
+ $opts{filename} = $file;
+ unless (defined $opts{recsep}) {
+ $opts{recsep} = _default_recsep();
+ }
+ $opts{recseplen} = length($opts{recsep});
+ if ($opts{recseplen} == 0) {
+ croak "Empty record separator not supported by $pack";
+ }
+
+ $opts{autochomp} = 1 unless defined $opts{autochomp};
+
+ $opts{mode} = O_CREAT|O_RDWR unless defined $opts{mode};
+ $opts{rdonly} = (($opts{mode} & O_ACCMODE) == O_RDONLY);
+ $opts{sawlastrec} = undef;
+
+ my $fh;
+
+ if (UNIVERSAL::isa($file, 'GLOB')) {
+ # We use 1 here on the theory that some systems
+ # may not indicate failure if we use 0.
+ # MSWin32 does not indicate failure with 0, but I don't know if
+ # it will indicate failure with 1 or not.
+ unless (seek $file, 1, SEEK_SET) {
+ croak "$pack: your filehandle does not appear to be seekable";
+ }
+ seek $file, 0, SEEK_SET # put it back
+ $fh = $file; # setting binmode is the user's problem
+ } elsif (ref $file) {
+ croak "usage: tie \@array, $pack, filename, [option => value]...";
+ } else {
+ # $fh = \do { local *FH }; # XXX this is buggy
+ if ($] < 5.006) {
+ # perl 5.005 and earlier don't autovivify filehandles
+ require Symbol;
+ $fh = Symbol::gensym();
+ }
+ sysopen $fh, $file, $opts{mode}, 0666 or return;
+ binmode $fh;
+ ++$opts{ourfh};
+ }
+ { my $ofh = select $fh; $| = 1; select $ofh } # autoflush on write
+ if (defined $opts{discipline} && $] >= 5.006) {
+ # This avoids a compile-time warning under 5.005
+ eval 'binmode($fh, $opts{discipline})';
+ croak $@ if $@ =~ /unknown discipline/i;
+ die if $@;
+ }
+ $opts{fh} = $fh;
+
+ bless \%opts => $pack;
+}
+
+sub FETCH {
+ my ($self, $n) = @_;
+ my $rec;
+
+ # check the defer buffer
+ $rec = $self->{deferred}{$n} if exists $self->{deferred}{$n};
+ $rec = $self->_fetch($n) unless defined $rec;
+
+ # inlined _chomp1
+ substr($rec, - $self->{recseplen}) = ""
+ if defined $rec && $self->{autochomp};
+ $rec;
+}
+
+# Chomp many records in-place; return nothing useful
+sub _chomp {
+ my $self = shift;
+ return unless $self->{autochomp};
+ if ($self->{autochomp}) {
+ for (@_) {
+ next unless defined;
+ substr($_, - $self->{recseplen}) = "";
+ }
+ }
+}
+
+# Chomp one record in-place; return modified record
+sub _chomp1 {
+ my ($self, $rec) = @_;
+ return $rec unless $self->{autochomp};
+ return unless defined $rec;
+ substr($rec, - $self->{recseplen}) = "";
+ $rec;
+}
+
+sub _fetch {
+ my ($self, $n) = @_;
+
+ # check the record cache
+ { my $cached = $self->{cache}->lookup($n);
+ return $cached if defined $cached;
+ }
+
+ if ($#{$self->{offsets}} < $n) {
+ return if $self->{eof}; # request for record beyond end of file
+ my $o = $self->_fill_offsets_to($n);
+ # If it's still undefined, there is no such record, so return 'undef'
+ return unless defined $o;
+ }
+
+ my $fh = $self->{FH};
+ $self->_seek($n); # we can do this now that offsets is populated
+ my $rec = $self->_read_record;
+
+# If we happen to have just read the first record, check to see if
+# the length of the record matches what 'tell' says. If not, Tie::File
+# won't work, and should drop dead.
+#
+# if ($n == 0 && defined($rec) && tell($self->{fh}) != length($rec)) {
+# if (defined $self->{discipline}) {
+# croak "I/O discipline $self->{discipline} not supported";
+# } else {
+# croak "File encoding not supported";
+# }
+# }
+
+ $self->{cache}->insert($n, $rec) if defined $rec && not $self->{flushing};
+ $rec;
+}
+
+sub STORE {
+ my ($self, $n, $rec) = @_;
+ die "STORE called from _check_integrity!" if $DIAGNOSTIC;
+
+ $self->_fixrecs($rec);
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history($n);
+ }
+
+ return $self->_store_deferred($n, $rec) if $self->_is_deferring;
+
+
+ # We need this to decide whether the new record will fit
+ # It incidentally populates the offsets table
+ # Note we have to do this before we alter the cache
+ # 20020324 Wait, but this DOES alter the cache. TODO BUG?
+ my $oldrec = $self->_fetch($n);
+
+ if (not defined $oldrec) {
+ # We're storing a record beyond the end of the file
+ $self->_extend_file_to($n+1);
+ $oldrec = $self->{recsep};
+ }
+# return if $oldrec eq $rec; # don't bother
+ my $len_diff = length($rec) - length($oldrec);
+
+ # length($oldrec) here is not consistent with text mode TODO XXX BUG
+ $self->_mtwrite($rec, $self->{offsets}[$n], length($oldrec));
+ $self->_oadjust([$n, 1, $rec]);
+ $self->{cache}->update($n, $rec);
+}
+
+sub _store_deferred {
+ my ($self, $n, $rec) = @_;
+ $self->{cache}->remove($n);
+ my $old_deferred = $self->{deferred}{$n};
+
+ if (defined $self->{deferred_max} && $n > $self->{deferred_max}) {
+ $self->{deferred_max} = $n;
+ }
+ $self->{deferred}{$n} = $rec;
+
+ my $len_diff = length($rec);
+ $len_diff -= length($old_deferred) if defined $old_deferred;
+ $self->{deferred_s} += $len_diff;
+ $self->{cache}->adj_limit(-$len_diff);
+ if ($self->{deferred_s} > $self->{dw_size}) {
+ $self->_flush;
+ } elsif ($self->_cache_too_full) {
+ $self->_cache_flush;
+ }
+}
+
+# Remove a single record from the deferred-write buffer without writing it
+# The record need not be present
+sub _delete_deferred {
+ my ($self, $n) = @_;
+ my $rec = delete $self->{deferred}{$n};
+ return unless defined $rec;
+
+ if (defined $self->{deferred_max}
+ && $n == $self->{deferred_max}) {
+ undef $self->{deferred_max};
+ }
+
+ $self->{deferred_s} -= length $rec;
+ $self->{cache}->adj_limit(length $rec);
+}
+
+sub FETCHSIZE {
+ my $self = shift;
+ my $n = $self->{eof} ? $#{$self->{offsets}} : $self->_fill_offsets;
+
+ my $top_deferred = $self->_defer_max;
+ $n = $top_deferred+1 if defined $top_deferred && $n < $top_deferred+1;
+ $n;
+}
+
+sub STORESIZE {
+ my ($self, $len) = @_;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('STORESIZE');
+ }
+
+ my $olen = $self->FETCHSIZE;
+ return if $len == $olen; # Woo-hoo!
+
+ # file gets longer
+ if ($len > $olen) {
+ if ($self->_is_deferring) {
+ for ($olen .. $len-1) {
+ $self->_store_deferred($_, $self->{recsep});
+ }
+ } else {
+ $self->_extend_file_to($len);
+ }
+ return;
+ }
+
+ # file gets shorter
+ if ($self->_is_deferring) {
+ # TODO maybe replace this with map-plus-assignment?
+ for (grep $_ >= $len, keys %{$self->{deferred}}) {
+ $self->_delete_deferred($_);
+ }
+ $self->{deferred_max} = $len-1;
+ }
+
+ $self->_seek($len);
+ $self->_chop_file;
+ $#{$self->{offsets}} = $len;
+# $self->{offsets}[0] = 0; # in case we just chopped this
+
+ $self->{cache}->remove(grep $_ >= $len, $self->{cache}->ckeys);
+}
+
+### OPTIMIZE ME
+### It should not be necessary to do FETCHSIZE
+### Just seek to the end of the file.
+sub PUSH {
+ my $self = shift;
+ $self->SPLICE($self->FETCHSIZE, scalar(@_), @_);
+
+ # No need to return:
+ # $self->FETCHSIZE; # because av.c takes care of this for me
+}
+
+sub POP {
+ my $self = shift;
+ my $size = $self->FETCHSIZE;
+ return if $size == 0;
+# print STDERR "# POPPITY POP POP POP\n";
+ scalar $self->SPLICE($size-1, 1);
+}
+
+sub SHIFT {
+ my $self = shift;
+ scalar $self->SPLICE(0, 1);
+}
+
+sub UNSHIFT {
+ my $self = shift;
+ $self->SPLICE(0, 0, @_);
+ # $self->FETCHSIZE; # av.c takes care of this for me
+}
+
+sub CLEAR {
+ my $self = shift;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('CLEAR');
+ }
+
+ $self->_seekb(0);
+ $self->_chop_file;
+ $self->{cache}->set_limit($self->{memory});
+ $self->{cache}->empty;
+ @{$self->{offsets}} = (0);
+ %{$self->{deferred}}= ();
+ $self->{deferred_s} = 0;
+ $self->{deferred_max} = -1;
+}
+
+sub EXTEND {
+ my ($self, $n) = @_;
+
+ # No need to pre-extend anything in this case
+ return if $self->_is_deferring;
+
+ $self->_fill_offsets_to($n);
+ $self->_extend_file_to($n);
+}
+
+sub DELETE {
+ my ($self, $n) = @_;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('DELETE');
+ }
+
+ my $lastrec = $self->FETCHSIZE-1;
+ my $rec = $self->FETCH($n);
+ $self->_delete_deferred($n) if $self->_is_deferring;
+ if ($n == $lastrec) {
+ $self->_seek($n);
+ $self->_chop_file;
+ $#{$self->{offsets}}--;
+ $self->{cache}->remove($n);
+ # perhaps in this case I should also remove trailing null records?
+ # 20020316
+ # Note that delete @a[-3..-1] deletes the records in the wrong order,
+ # so we only chop the very last one out of the file. We could repair this
+ # by tracking deleted records inside the object.
+ } elsif ($n < $lastrec) {
+ $self->STORE($n, "");
+ }
+ $rec;
+}
+
+sub EXISTS {
+ my ($self, $n) = @_;
+ return 1 if exists $self->{deferred}{$n};
+ $n < $self->FETCHSIZE;
+}
+
+sub SPLICE {
+ my $self = shift;
+
+ if ($self->{autodefer}) {
+ $self->_annotate_ad_history('SPLICE');
+ }
+
+ $self->_flush if $self->_is_deferring; # move this up?
+ if (wantarray) {
+ $self->_chomp(my @a = $self->_splice(@_));
+ @a;
+ } else {
+ $self->_chomp1(scalar $self->_splice(@_));
+ }
+}
+
+sub DESTROY {
+ my $self = shift;
+ $self->flush if $self->_is_deferring;
+ $self->{cache}->delink if defined $self->{cache}; # break circular link
+ if ($self->{fh} and $self->{ourfh}) {
+ delete $self->{ourfh};
+ close delete $self->{fh};
+ }
+}
+
+sub _splice {
+ my ($self, $pos, $nrecs, @data) = @_;
+ my @result;
+
+ $pos = 0 unless defined $pos;
+
+ # Deal with negative and other out-of-range positions
+ # Also set default for $nrecs
+ {
+ my $oldsize = $self->FETCHSIZE;
+ $nrecs = $oldsize unless defined $nrecs;
+ my $oldpos = $pos;
+
+ if ($pos < 0) {
+ $pos += $oldsize;
+ if ($pos < 0) {
+ croak "Modification of non-creatable array value attempted, subscript $oldpos";
+ }
+ }
+
+ if ($pos > $oldsize) {
+ return unless @data;
+ $pos = $oldsize; # This is what perl does for normal arrays
+ }
+
+ # The manual is very unclear here
+ if ($nrecs < 0) {
+ $nrecs = $oldsize - $pos + $nrecs;
+ $nrecs = 0 if $nrecs < 0;
+ }
+
+ # nrecs is too big---it really means "until the end"
+ # 20030507
+ if ($nrecs + $pos > $oldsize) {
+ $nrecs = $oldsize - $pos;
+ }
+ }
+
+ $self->_fixrecs(@data);
+ my $data = join '', @data;
+ my $datalen = length $data;
+ my $oldlen = 0;
+
+ # compute length of data being removed
+ for ($pos .. $pos+$nrecs-1) {
+ last unless defined $self->_fill_offsets_to($_);
+ my $rec = $self->_fetch($_);
+ last unless defined $rec;
+ push @result, $rec;
+
+ # Why don't we just use length($rec) here?
+ # Because that record might have come from the cache. _splice
+ # might have been called to flush out the deferred-write records,
+ # and in this case length($rec) is the length of the record to be
+ # *written*, not the length of the actual record in the file. But
+ # the offsets are still true. 20020322
+ $oldlen += $self->{offsets}[$_+1] - $self->{offsets}[$_]
+ if defined $self->{offsets}[$_+1];
+ }
+ $self->_fill_offsets_to($pos+$nrecs);
+
+ # Modify the file
+ $self->_mtwrite($data, $self->{offsets}[$pos], $oldlen);
+ # Adjust the offsets table
+ $self->_oadjust([$pos, $nrecs, @data]);
+
+ { # Take this read cache stuff out into a separate function
+ # You made a half-attempt to put it into _oadjust.
+ # Finish something like that up eventually.
+ # STORE also needs to do something similarish
+
+ # update the read cache, part 1
+ # modified records
+ for ($pos .. $pos+$nrecs-1) {
+ my $new = $data[$_-$pos];
+ if (defined $new) {
+ $self->{cache}->update($_, $new);
+ } else {
+ $self->{cache}->remove($_);
+ }
+ }
+
+ # update the read cache, part 2
+ # moved records - records past the site of the change
+ # need to be renumbered
+ # Maybe merge this with the previous block?
+ {
+ my @oldkeys = grep $_ >= $pos + $nrecs, $self->{cache}->ckeys;
+ my @newkeys = map $_-$nrecs+@data, @oldkeys;
+ $self->{cache}->rekey(\@oldkeys, \@newkeys);
+ }
+
+ # Now there might be too much data in the cache, if we spliced out
+ # some short records and spliced in some long ones. If so, flush
+ # the cache.
+ $self->_cache_flush;
+ }
+
+ # Yes, the return value of 'splice' *is* actually this complicated
+ wantarray ? @result : @result ? $result[-1] : undef;
+}
+
+
+# write data into the file
+# $data is the data to be written.
+# it should be written at position $pos, and should overwrite
+# exactly $len of the following bytes.
+# Note that if length($data) > $len, the subsequent bytes will have to
+# be moved up, and if length($data) < $len, they will have to
+# be moved down
+sub _twrite {
+ my ($self, $data, $pos, $len) = @_;
+
+ unless (defined $pos) {
+ die "\$pos was undefined in _twrite";
+ }
+
+ my $len_diff = length($data) - $len;
+
+ if ($len_diff == 0) { # Woo-hoo!
+ my $fh = $self->{fh};
+ $self->_seekb($pos);
+ $self->_write_record($data);
+ return; # well, that was easy.
+ }
+
+ # the two records are of different lengths
+ # our strategy here: rewrite the tail of the file,
+ # reading ahead one buffer at a time
+ # $bufsize is required to be at least as large as the data we're overwriting
+ my $bufsize = _bufsize($len_diff);
+ my ($writepos, $readpos) = ($pos, $pos+$len);
+ my $next_block;
+ my $more_data;
+
+ # Seems like there ought to be a way to avoid the repeated code
+ # and the special case here. The read(1) is also a little weird.
+ # Think about this.
+ do {
+ $self->_seekb($readpos);
+ my $br = read $self->{fh}, $next_block, $bufsize;
+ $more_data = read $self->{fh}, my($dummy), 1;
+ $self->_seekb($writepos);
+ $self->_write_record($data);
+ $readpos += $br;
+ $writepos += length $data;
+ $data = $next_block;
+ } while $more_data;
+ $self->_seekb($writepos);
+ $self->_write_record($next_block);
+
+ # There might be leftover data at the end of the file
+ $self->_chop_file if $len_diff < 0;
+}
+
+# _iwrite(D, S, E)
+# Insert text D at position S.
+# Let C = E-S-|D|. If C < 0; die.
+# Data in [S,S+C) is copied to [S+D,S+D+C) = [S+D,E).
+# Data in [S+C = E-D, E) is returned. Data in [E, oo) is untouched.
+#
+# In a later version, don't read the entire intervening area into
+# memory at once; do the copying block by block.
+sub _iwrite {
+ my $self = shift;
+ my ($D, $s, $e) = @_;
+ my $d = length $D;
+ my $c = $e-$s-$d;
+ local *FH = $self->{fh};
+ confess "Not enough space to insert $d bytes between $s and $e"
+ if $c < 0;
+ confess "[$s,$e) is an invalid insertion range" if $e < $s;
+
+ $self->_seekb($s);
+ read FH, my $buf, $e-$s;
+
+ $D .= substr($buf, 0, $c, "");
+
+ $self->_seekb($s);
+ $self->_write_record($D);
+
+ return $buf;
+}
+
+# Like _twrite, but the data-pos-len triple may be repeated; you may
+# write several chunks. All the writing will be done in
+# one pass. Chunks SHALL be in ascending order and SHALL NOT overlap.
+sub _mtwrite {
+ my $self = shift;
+ my $unwritten = "";
+ my $delta = 0;
+
+ @_ % 3 == 0
+ or die "Arguments to _mtwrite did not come in groups of three";
+
+ while (@_) {
+ my ($data, $pos, $len) = splice @_, 0, 3;
+ my $end = $pos + $len; # The OLD end of the segment to be replaced
+ $data = $unwritten . $data;
+ $delta -= length($unwritten);
+ $unwritten = "";
+ $pos += $delta; # This is where the data goes now
+ my $dlen = length $data;
+ $self->_seekb($pos);
+ if ($len >= $dlen) { # the data will fit
+ $self->_write_record($data);
+ $delta += ($dlen - $len); # everything following moves down by this much
+ $data = ""; # All the data in the buffer has been written
+ } else { # won't fit
+ my $writable = substr($data, 0, $len - $delta, "");
+ $self->_write_record($writable);
+ $delta += ($dlen - $len); # everything following moves down by this much
+ }
+
+ # At this point we've written some but maybe not all of the data.
+ # There might be a gap to close up, or $data might still contain a
+ # bunch of unwritten data that didn't fit.
+ my $ndlen = length $data;
+ if ($delta == 0) {
+ $self->_write_record($data);
+ } elsif ($delta < 0) {
+ # upcopy (close up gap)
+ if (@_) {
+ $self->_upcopy($end, $end + $delta, $_[1] - $end);
+ } else {
+ $self->_upcopy($end, $end + $delta);
+ }
+ } else {
+ # downcopy (insert data that didn't fit; replace this data in memory
+ # with _later_ data that doesn't fit)
+ if (@_) {
+ $unwritten = $self->_downcopy($data, $end, $_[1] - $end);
+ } else {
+ # Make the file longer to accomodate the last segment that doesn'
+ $unwritten = $self->_downcopy($data, $end);
+ }
+ }
+ }
+}
+
+# Copy block of data of length $len from position $spos to position $dpos
+# $dpos must be <= $spos
+#
+# If $len is undefined, go all the way to the end of the file
+# and then truncate it ($spos - $dpos bytes will be removed)
+sub _upcopy {
+ my $blocksize = 8192;
+ my ($self, $spos, $dpos, $len) = @_;
+ if ($dpos > $spos) {
+ die "source ($spos) was upstream of destination ($dpos) in _upcopy";
+ } elsif ($dpos == $spos) {
+ return;
+ }
+
+ while (! defined ($len) || $len > 0) {
+ my $readsize = ! defined($len) ? $blocksize
+ : $len > $blocksize ? $blocksize
+ : $len;
+
+ my $fh = $self->{fh};
+ $self->_seekb($spos);
+ my $bytes_read = read $fh, my($data), $readsize;
+ $self->_seekb($dpos);
+ if ($data eq "") {
+ $self->_chop_file;
+ last;
+ }
+ $self->_write_record($data);
+ $spos += $bytes_read;
+ $dpos += $bytes_read;
+ $len -= $bytes_read if defined $len;
+ }
+}
+
+# Write $data into a block of length $len at position $pos,
+# moving everything in the block forwards to make room.
+# Instead of writing the last length($data) bytes from the block
+# (because there isn't room for them any longer) return them.
+#
+# Undefined $len means 'until the end of the file'
+sub _downcopy {
+ my $blocksize = 8192;
+ my ($self, $data, $pos, $len) = @_;
+ my $fh = $self->{fh};
+
+ while (! defined $len || $len > 0) {
+ my $readsize = ! defined($len) ? $blocksize
+ : $len > $blocksize? $blocksize : $len;
+ $self->_seekb($pos);
+ read $fh, my($old), $readsize;
+ my $last_read_was_short = length($old) < $readsize;
+ $data .= $old;
+ my $writable;
+ if ($last_read_was_short) {
+ # If last read was short, then $data now contains the entire rest
+ # of the file, so there's no need to write only one block of it
+ $writable = $data;
+ $data = "";
+ } else {
+ $writable = substr($data, 0, $readsize, "");
+ }
+ last if $writable eq "";
+ $self->_seekb($pos);
+ $self->_write_record($writable);
+ last if $last_read_was_short && $data eq "";
+ $len -= $readsize if defined $len;
+ $pos += $readsize;
+ }
+ return $data;
+}
+
+# Adjust the object data structures following an '_mtwrite'
+# Arguments are
+# [$pos, $nrecs, @length] items
+# indicating that $nrecs records were removed at $recpos (a record offset)
+# and replaced with records of length @length...
+# Arguments guarantee that $recpos is strictly increasing.
+# No return value
+sub _oadjust {
+ my $self = shift;
+ my $delta = 0;
+ my $delta_recs = 0;
+ my $prev_end = -1;
+ my %newkeys;
+
+ for (@_) {
+ my ($pos, $nrecs, @data) = @$_;
+ $pos += $delta_recs;
+
+ # Adjust the offsets of the records after the previous batch up
+ # to the first new one of this batch
+ for my $i ($prev_end+2 .. $pos - 1) {
+ $self->{offsets}[$i] += $delta;
+ $newkey{$i} = $i + $delta_recs;
+ }
+
+ $prev_end = $pos + @data - 1; # last record moved on this pass
+
+ # Remove the offsets for the removed records;
+ # replace with the offsets for the inserted records
+ my @newoff = ($self->{offsets}[$pos] + $delta);
+ for my $i (0 .. $#data) {
+ my $newlen = length $data[$i];
+ push @newoff, $newoff[$i] + $newlen;
+ $delta += $newlen;
+ }
+
+ for my $i ($pos .. $pos+$nrecs-1) {
+ last if $i+1 > $#{$self->{offsets}};
+ my $oldlen = $self->{offsets}[$i+1] - $self->{offsets}[$i];
+ $delta -= $oldlen;
+ }
+
+# # also this data has changed, so update it in the cache
+# for (0 .. $#data) {
+# $self->{cache}->update($pos + $_, $data[$_]);
+# }
+# if ($delta_recs) {
+# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys;
+# my @newkeys = map $_ + $delta_recs, @oldkeys;
+# $self->{cache}->rekey(\@oldkeys, \@newkeys);
+# }
+
+ # replace old offsets with new
+ splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff;
+ # What if we just spliced out the end of the offsets table?
+ # shouldn't we clear $self->{eof}? Test for this XXX BUG TODO
+
+ $delta_recs += @data - $nrecs; # net change in total number of records
+ }
+
+ # The trailing records at the very end of the file
+ if ($delta) {
+ for my $i ($prev_end+2 .. $#{$self->{offsets}}) {
+ $self->{offsets}[$i] += $delta;
+ }
+ }
+
+ # If we scrubbed out all known offsets, regenerate the trivial table
+ # that knows that the file does indeed start at 0.
+ $self->{offsets}[0] = 0 unless @{$self->{offsets}};
+ # If the file got longer, the offsets table is no longer complete
+ # $self->{eof} = 0 if $delta_recs > 0;
+
+ # Now there might be too much data in the cache, if we spliced out
+ # some short records and spliced in some long ones. If so, flush
+ # the cache.
+ $self->_cache_flush;
+}
+
+# If a record does not already end with the appropriate terminator
+# string, append one.
+sub _fixrecs {
+ my $self = shift;
+ for (@_) {
+ $_ = "" unless defined $_;
+ $_ .= $self->{recsep}
+ unless substr($_, - $self->{recseplen}) eq $self->{recsep};
+ }
+}
+
+
+################################################################
+#
+# Basic read, write, and seek
+#
+
+# seek to the beginning of record #$n
+# Assumes that the offsets table is already correctly populated
+#
+# Note that $n=-1 has a special meaning here: It means the start of
+# the last known record; this may or may not be the very last record
+# in the file, depending on whether the offsets table is fully populated.
+#
+sub _seek {
+ my ($self, $n) = @_;
+ my $o = $self->{offsets}[$n];
+ defined($o)
+ or confess("logic error: undefined offset for record $n");
+ seek $self->{fh}, $o, SEEK_SET
+ or confess "Couldn't seek filehandle: $!"; # "Should never happen."
+}
+
+# seek to byte $b in the file
+sub _seekb {
+ my ($self, $b) = @_;
+ seek $self->{fh}, $b, SEEK_SET
+ or die "Couldn't seek filehandle: $!"; # "Should never happen."
+}
+
+# populate the offsets table up to the beginning of record $n
+# return the offset of record $n
+sub _fill_offsets_to {
+ my ($self, $n) = @_;
+
+ return $self->{offsets}[$n] if $self->{eof};
+
+ my $fh = $self->{fh};
+ local *OFF = $self->{offsets};
+ my $rec;
+
+ until ($#OFF >= $n) {
+ $self->_seek(-1); # tricky -- see comment at _seek
+ $rec = $self->_read_record;
+ if (defined $rec) {
+ push @OFF, int(tell $fh); # Tels says that int() saves memory here
+ } else {
+ $self->{eof} = 1;
+ return; # It turns out there is no such record
+ }
+ }
+
+ # we have now read all the records up to record n-1,
+ # so we can return the offset of record n
+ $OFF[$n];
+}
+
+sub _fill_offsets {
+ my ($self) = @_;
+
+ my $fh = $self->{fh};
+ local *OFF = $self->{offsets};
+
+ $self->_seek(-1); # tricky -- see comment at _seek
+
+ # Tels says that inlining read_record() would make this loop
+ # five times faster. 20030508
+ while ( defined $self->_read_record()) {
+ # int() saves us memory here
+ push @OFF, int(tell $fh);
+ }
+
+ $self->{eof} = 1;
+ $#OFF;
+}
+
+# assumes that $rec is already suitably terminated
+sub _write_record {
+ my ($self, $rec) = @_;
+ my $fh = $self->{fh};
+ local $\ = "";
+ print $fh $rec
+ or die "Couldn't write record: $!"; # "Should never happen."
+# $self->{_written} += length($rec);
+}
+
+sub _read_record {
+ my $self = shift;
+ my $rec;
+ { local $/ = $self->{recsep};
+ my $fh = $self->{fh};
+ $rec = <$fh>;
+ }
+ return unless defined $rec;
+ if (substr($rec, -$self->{recseplen}) ne $self->{recsep}) {
+ # improperly terminated final record --- quietly fix it.
+# my $ac = substr($rec, -$self->{recseplen});
+# $ac =~ s/\n/\\n/g;
+ $self->{sawlastrec} = 1;
+ unless ($self->{rdonly}) {
+ local $\ = "";
+ my $fh = $self->{fh};
+ print $fh $self->{recsep};
+ }
+ $rec .= $self->{recsep};
+ }
+# $self->{_read} += length($rec) if defined $rec;
+ $rec;
+}
+
+sub _rw_stats {
+ my $self = shift;
+ @{$self}{'_read', '_written'};
+}
+
+################################################################
+#
+# Read cache management
+
+sub _cache_flush {
+ my ($self) = @_;
+ $self->{cache}->reduce_size_to($self->{memory} - $self->{deferred_s});
+}
+
+sub _cache_too_full {
+ my $self = shift;
+ $self->{cache}->bytes + $self->{deferred_s} >= $self->{memory};
+}
+
+################################################################
+#
+# File custodial services
+#
+
+
+# We have read to the end of the file and have the offsets table
+# entirely populated. Now we need to write a new record beyond
+# the end of the file. We prepare for this by writing
+# empty records into the file up to the position we want
+#
+# assumes that the offsets table already contains the offset of record $n,
+# if it exists, and extends to the end of the file if not.
+sub _extend_file_to {
+ my ($self, $n) = @_;
+ $self->_seek(-1); # position after the end of the last record
+ my $pos = $self->{offsets}[-1];
+
+ # the offsets table has one entry more than the total number of records
+ my $extras = $n - $#{$self->{offsets}};
+
+ # Todo : just use $self->{recsep} x $extras here?
+ while ($extras-- > 0) {
+ $self->_write_record($self->{recsep});
+ push @{$self->{offsets}}, int(tell $self->{fh});
+ }
+}
+
+# Truncate the file at the current position
+sub _chop_file {
+ my $self = shift;
+ truncate $self->{fh}, tell($self->{fh});
+}
+
+
+# compute the size of a buffer suitable for moving
+# all the data in a file forward $n bytes
+# ($n may be negative)
+# The result should be at least $n.
+sub _bufsize {
+ my $n = shift;
+ return 8192 if $n <= 0;
+ my $b = $n & ~8191;
+ $b += 8192 if $n & 8191;
+ $b;
+}
+
+################################################################
+#
+# Miscellaneous public methods
+#
+
+# Lock the file
+sub flock {
+ my ($self, $op) = @_;
+ unless (@_ <= 3) {
+ my $pack = ref $self;
+ croak "Usage: $pack\->flock([OPERATION])";
+ }
+ my $fh = $self->{fh};
+ $op = LOCK_EX unless defined $op;
+ my $locked = flock $fh, $op;
+
+ if ($locked && ($op & (LOCK_EX | LOCK_SH))) {
+ # If you're locking the file, then presumably it's because
+ # there might have been a write access by another process.
+ # In that case, the read cache contents and the offsets table
+ # might be invalid, so discard them. 20030508
+ $self->{offsets} = [0];
+ $self->{cache}->empty;
+ }
+
+ $locked;
+}
+
+# Get/set autochomp option
+sub autochomp {
+ my $self = shift;
+ if (@_) {
+ my $old = $self->{autochomp};
+ $self->{autochomp} = shift;
+ $old;
+ } else {
+ $self->{autochomp};
+ }
+}
+
+# Get offset table entries; returns offset of nth record
+sub offset {
+ my ($self, $n) = @_;
+
+ if ($#{$self->{offsets}} < $n) {
+ return if $self->{eof}; # request for record beyond the end of file
+ my $o = $self->_fill_offsets_to($n);
+ # If it's still undefined, there is no such record, so return 'undef'
+ return unless defined $o;
+ }
+
+ $self->{offsets}[$n];
+}
+
+sub discard_offsets {
+ my $self = shift;
+ $self->{offsets} = [0];
+}
+
+################################################################
+#
+# Matters related to deferred writing
+#
+
+# Defer writes
+sub defer {
+ my $self = shift;
+ $self->_stop_autodeferring;
+ @{$self->{ad_history}} = ();
+ $self->{defer} = 1;
+}
+
+# Flush deferred writes
+#
+# This could be better optimized to write the file in one pass, instead
+# of one pass per block of records. But that will require modifications
+# to _twrite, so I should have a good _twrite test suite first.
+sub flush {
+ my $self = shift;
+
+ $self->_flush;
+ $self->{defer} = 0;
+}
+
+sub _old_flush {
+ my $self = shift;
+ my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
+
+ while (@writable) {
+ # gather all consecutive records from the front of @writable
+ my $first_rec = shift @writable;
+ my $last_rec = $first_rec+1;
+ ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
+ --$last_rec;
+ $self->_fill_offsets_to($last_rec);
+ $self->_extend_file_to($last_rec);
+ $self->_splice($first_rec, $last_rec-$first_rec+1,
+ @{$self->{deferred}}{$first_rec .. $last_rec});
+ }
+
+ $self->_discard; # clear out defered-write-cache
+}
+
+sub _flush {
+ my $self = shift;
+ my @writable = sort {$a<=>$b} (keys %{$self->{deferred}});
+ my @args;
+ my @adjust;
+
+ while (@writable) {
+ # gather all consecutive records from the front of @writable
+ my $first_rec = shift @writable;
+ my $last_rec = $first_rec+1;
+ ++$last_rec, shift @writable while @writable && $last_rec == $writable[0];
+ --$last_rec;
+ my $end = $self->_fill_offsets_to($last_rec+1);
+ if (not defined $end) {
+ $self->_extend_file_to($last_rec);
+ $end = $self->{offsets}[$last_rec];
+ }
+ my ($start) = $self->{offsets}[$first_rec];
+ push @args,
+ join("", @{$self->{deferred}}{$first_rec .. $last_rec}), # data
+ $start, # position
+ $end-$start; # length
+ push @adjust, [$first_rec, # starting at this position...
+ $last_rec-$first_rec+1, # this many records...
+ # are replaced with these...
+ @{$self->{deferred}}{$first_rec .. $last_rec},
+ ];
+ }
+
+ $self->_mtwrite(@args); # write multiple record groups
+ $self->_discard; # clear out defered-write-cache
+ $self->_oadjust(@adjust);
+}
+
+# Discard deferred writes and disable future deferred writes
+sub discard {
+ my $self = shift;
+ $self->_discard;
+ $self->{defer} = 0;
+}
+
+# Discard deferred writes, but retain old deferred writing mode
+sub _discard {
+ my $self = shift;
+ %{$self->{deferred}} = ();
+ $self->{deferred_s} = 0;
+ $self->{deferred_max} = -1;
+ $self->{cache}->set_limit($self->{memory});
+}
+
+# Deferred writing is enabled, either explicitly ($self->{defer})
+# or automatically ($self->{autodeferring})
+sub _is_deferring {
+ my $self = shift;
+ $self->{defer} || $self->{autodeferring};
+}
+
+# The largest record number of any deferred record
+sub _defer_max {
+ my $self = shift;
+ return $self->{deferred_max} if defined $self->{deferred_max};
+ my $max = -1;
+ for my $key (keys %{$self->{deferred}}) {
+ $max = $key if $key > $max;
+ }
+ $self->{deferred_max} = $max;
+ $max;
+}
+
+################################################################
+#
+# Matters related to autodeferment
+#
+
+# Get/set autodefer option
+sub autodefer {
+ my $self = shift;
+ if (@_) {
+ my $old = $self->{autodefer};
+ $self->{autodefer} = shift;
+ if ($old) {
+ $self->_stop_autodeferring;
+ @{$self->{ad_history}} = ();
+ }
+ $old;
+ } else {
+ $self->{autodefer};
+ }
+}
+
+# The user is trying to store record #$n Record that in the history,
+# and then enable (or disable) autodeferment if that seems useful.
+# Note that it's OK for $n to be a non-number, as long as the function
+# is prepared to deal with that. Nobody else looks at the ad_history.
+#
+# Now, what does the ad_history mean, and what is this function doing?
+# Essentially, the idea is to enable autodeferring when we see that the
+# user has made three consecutive STORE calls to three consecutive records.
+# ("Three" is actually ->{autodefer_threshhold}.)
+# A STORE call for record #$n inserts $n into the autodefer history,
+# and if the history contains three consecutive records, we enable
+# autodeferment. An ad_history of [X, Y] means that the most recent
+# STOREs were for records X, X+1, ..., Y, in that order.
+#
+# Inserting a nonconsecutive number erases the history and starts over.
+#
+# Performing a special operation like SPLICE erases the history.
+#
+# There's one special case: CLEAR means that CLEAR was just called.
+# In this case, we prime the history with [-2, -1] so that if the next
+# write is for record 0, autodeferring goes on immediately. This is for
+# the common special case of "@a = (...)".
+#
+sub _annotate_ad_history {
+ my ($self, $n) = @_;
+ return unless $self->{autodefer}; # feature is disabled
+ return if $self->{defer}; # already in explicit defer mode
+ return unless $self->{offsets}[-1] >= $self->{autodefer_filelen_threshhold};
+
+ local *H = $self->{ad_history};
+ if ($n eq 'CLEAR') {
+ @H = (-2, -1); # prime the history with fake records
+ $self->_stop_autodeferring;
+ } elsif ($n =~ /^\d+$/) {
+ if (@H == 0) {
+ @H = ($n, $n);
+ } else { # @H == 2
+ if ($H[1] == $n-1) { # another consecutive record
+ $H[1]++;
+ if ($H[1] - $H[0] + 1 >= $self->{autodefer_threshhold}) {
+ $self->{autodeferring} = 1;
+ }
+ } else { # nonconsecutive- erase and start over
+ @H = ($n, $n);
+ $self->_stop_autodeferring;
+ }
+ }
+ } else { # SPLICE or STORESIZE or some such
+ @H = ();
+ $self->_stop_autodeferring;
+ }
+}
+
+# If autodeferring was enabled, cut it out and discard the history
+sub _stop_autodeferring {
+ my $self = shift;
+ if ($self->{autodeferring}) {
+ $self->_flush;
+ }
+ $self->{autodeferring} = 0;
+}
+
+################################################################
+
+
+# This is NOT a method. It is here for two reasons:
+# 1. To factor a fairly complicated block out of the constructor
+# 2. To provide access for the test suite, which need to be sure
+# files are being written properly.
+sub _default_recsep {
+ my $recsep = $/;
+ if ($^O eq 'MSWin32') { # Dos too?
+ # Windows users expect files to be terminated with \r\n
+ # But $/ is set to \n instead
+ # Note that this also transforms \n\n into \r\n\r\n.
+ # That is a feature.
+ $recsep =~ s/\n/\r\n/g;
+ }
+ $recsep;
+}
+
+# Utility function for _check_integrity
+sub _ci_warn {
+ my $msg = shift;
+ $msg =~ s/\n/\\n/g;
+ $msg =~ s/\r/\\r/g;
+ print "# $msg\n";
+}
+
+# Given a file, make sure the cache is consistent with the
+# file contents and the internal data structures are consistent with
+# each other. Returns true if everything checks out, false if not
+#
+# The $file argument is no longer used. It is retained for compatibility
+# with the existing test suite.
+sub _check_integrity {
+ my ($self, $file, $warn) = @_;
+ my $rsl = $self->{recseplen};
+ my $rs = $self->{recsep};
+ my $good = 1;
+ local *_; # local $_ does not work here
+ local $DIAGNOSTIC = 1;
+
+ if (not defined $rs) {
+ _ci_warn("recsep is undef!");
+ $good = 0;
+ } elsif ($rs eq "") {
+ _ci_warn("recsep is empty!");
+ $good = 0;
+ } elsif ($rsl != length $rs) {
+ my $ln = length $rs;
+ _ci_warn("recsep <$rs> has length $ln, should be $rsl");
+ $good = 0;
+ }
+
+ if (not defined $self->{offsets}[0]) {
+ _ci_warn("offset 0 is missing!");
+ $good = 0;
+
+ } elsif ($self->{offsets}[0] != 0) {
+ _ci_warn("rec 0: offset <$self->{offsets}[0]> s/b 0!");
+ $good = 0;
+ }
+
+ my $cached = 0;
+ {
+ local *F = $self->{fh};
+ seek F, 0, SEEK_SET;
+ local $. = 0;
+ local $/ = $rs;
+
+ while (<F>) {
+ my $n = $. - 1;
+ my $cached = $self->{cache}->_produce($n);
+ my $offset = $self->{offsets}[$.];
+ my $ao = tell F;
+ if (defined $offset && $offset != $ao) {
+ _ci_warn("rec $n: offset <$offset> actual <$ao>");
+ $good = 0;
+ }
+ if (defined $cached && $_ ne $cached && ! $self->{deferred}{$n}) {
+ $good = 0;
+ _ci_warn("rec $n: cached <$cached> actual <$_>");
+ }
+ if (defined $cached && substr($cached, -$rsl) ne $rs) {
+ $good = 0;
+ _ci_warn("rec $n in the cache is missing the record separator");
+ }
+ if (! defined $offset && $self->{eof}) {
+ $good = 0;
+ _ci_warn("The offset table was marked complete, but it is missing element $.");
+ }
+ }
+ if (@{$self->{offsets}} > $.+1) {
+ $good = 0;
+ my $n = @{$self->{offsets}};
+ _ci_warn("The offset table has $n items, but the file has only $.");
+ }
+
+ my $deferring = $self->_is_deferring;
+ for my $n ($self->{cache}->ckeys) {
+ my $r = $self->{cache}->_produce($n);
+ $cached += length($r);
+ next if $n+1 <= $.; # checked this already
+ _ci_warn("spurious caching of record $n");
+ $good = 0;
+ }
+ my $b = $self->{cache}->bytes;
+ if ($cached != $b) {
+ _ci_warn("cache size is $b, should be $cached");
+ $good = 0;
+ }
+ }
+
+ # That cache has its own set of tests
+ $good = 0 unless $self->{cache}->_check_integrity;
+
+ # Now let's check the deferbuffer
+ # Unless deferred writing is enabled, it should be empty
+ if (! $self->_is_deferring && %{$self->{deferred}}) {
+ _ci_warn("deferred writing disabled, but deferbuffer nonempty");
+ $good = 0;
+ }
+
+ # Any record in the deferbuffer should *not* be present in the readcache
+ my $deferred_s = 0;
+ while (my ($n, $r) = each %{$self->{deferred}}) {
+ $deferred_s += length($r);
+ if (defined $self->{cache}->_produce($n)) {
+ _ci_warn("record $n is in the deferbuffer *and* the readcache");
+ $good = 0;
+ }
+ if (substr($r, -$rsl) ne $rs) {
+ _ci_warn("rec $n in the deferbuffer is missing the record separator");
+ $good = 0;
+ }
+ }
+
+ # Total size of deferbuffer should match internal total
+ if ($deferred_s != $self->{deferred_s}) {
+ _ci_warn("buffer size is $self->{deferred_s}, should be $deferred_s");
+ $good = 0;
+ }
+
+ # Total size of deferbuffer should not exceed the specified limit
+ if ($deferred_s > $self->{dw_size}) {
+ _ci_warn("buffer size is $self->{deferred_s} which exceeds the limit of $self->{dw_size}");
+ $good = 0;
+ }
+
+ # Total size of cached data should not exceed the specified limit
+ if ($deferred_s + $cached > $self->{memory}) {
+ my $total = $deferred_s + $cached;
+ _ci_warn("total stored data size is $total which exceeds the limit of $self->{memory}");
+ $good = 0;
+ }
+
+ # Stuff related to autodeferment
+ if (!$self->{autodefer} && @{$self->{ad_history}}) {
+ _ci_warn("autodefer is disabled, but ad_history is nonempty");
+ $good = 0;
+ }
+ if ($self->{autodeferring} && $self->{defer}) {
+ _ci_warn("both autodeferring and explicit deferring are active");
+ $good = 0;
+ }
+ if (@{$self->{ad_history}} == 0) {
+ # That's OK, no additional tests required
+ } elsif (@{$self->{ad_history}} == 2) {
+ my @non_number = grep !/^-?\d+$/, @{$self->{ad_history}};
+ if (@non_number) {
+ my $msg;
+ { local $" = ')(';
+ $msg = "ad_history contains non-numbers (@{$self->{ad_history}})";
+ }
+ _ci_warn($msg);
+ $good = 0;
+ } elsif ($self->{ad_history}[1] < $self->{ad_history}[0]) {
+ _ci_warn("ad_history has nonsensical values @{$self->{ad_history}}");
+ $good = 0;
+ }
+ } else {
+ _ci_warn("ad_history has bad length <@{$self->{ad_history}}>");
+ $good = 0;
+ }
+
+ $good;
+}
+
+################################################################
+#
+# Tie::File::Cache
+#
+# Read cache
+
+package Tie::File::Cache;
+$Tie::File::Cache::VERSION = $Tie::File::VERSION;
+use Carp ':DEFAULT', 'confess';
+
+sub HEAP () { 0 }
+sub HASH () { 1 }
+sub MAX () { 2 }
+sub BYTES() { 3 }
+#sub STAT () { 4 } # Array with request statistics for each record
+#sub MISS () { 5 } # Total number of cache misses
+#sub REQ () { 6 } # Total number of cache requests
+use strict 'vars';
+
+sub new {
+ my ($pack, $max) = @_;
+ local *_;
+ croak "missing argument to ->new" unless defined $max;
+ my $self = [];
+ bless $self => $pack;
+ @$self = (Tie::File::Heap->new($self), {}, $max, 0);
+ $self;
+}
+
+sub adj_limit {
+ my ($self, $n) = @_;
+ $self->[MAX] += $n;
+}
+
+sub set_limit {
+ my ($self, $n) = @_;
+ $self->[MAX] = $n;
+}
+
+# For internal use only
+# Will be called by the heap structure to notify us that a certain
+# piece of data has moved from one heap element to another.
+# $k is the hash key of the item
+# $n is the new index into the heap at which it is stored
+# If $n is undefined, the item has been removed from the heap.
+sub _heap_move {
+ my ($self, $k, $n) = @_;
+ if (defined $n) {
+ $self->[HASH]{$k} = $n;
+ } else {
+ delete $self->[HASH]{$k};
+ }
+}
+
+sub insert {
+ my ($self, $key, $val) = @_;
+ local *_;
+ croak "missing argument to ->insert" unless defined $key;
+ unless (defined $self->[MAX]) {
+ confess "undefined max" ;
+ }
+ confess "undefined val" unless defined $val;
+ return if length($val) > $self->[MAX];
+
+# if ($self->[STAT]) {
+# $self->[STAT][$key] = 1;
+# return;
+# }
+
+ my $oldnode = $self->[HASH]{$key};
+ if (defined $oldnode) {
+ my $oldval = $self->[HEAP]->set_val($oldnode, $val);
+ $self->[BYTES] -= length($oldval);
+ } else {
+ $self->[HEAP]->insert($key, $val);
+ }
+ $self->[BYTES] += length($val);
+ $self->flush if $self->[BYTES] > $self->[MAX];
+}
+
+sub expire {
+ my $self = shift;
+ my $old_data = $self->[HEAP]->popheap;
+ return unless defined $old_data;
+ $self->[BYTES] -= length $old_data;
+ $old_data;
+}
+
+sub remove {
+ my ($self, @keys) = @_;
+ my @result;
+
+# if ($self->[STAT]) {
+# for my $key (@keys) {
+# $self->[STAT][$key] = 0;
+# }
+# return;
+# }
+
+ for my $key (@keys) {
+ next unless exists $self->[HASH]{$key};
+ my $old_data = $self->[HEAP]->remove($self->[HASH]{$key});
+ $self->[BYTES] -= length $old_data;
+ push @result, $old_data;
+ }
+ @result;
+}
+
+sub lookup {
+ my ($self, $key) = @_;
+ local *_;
+ croak "missing argument to ->lookup" unless defined $key;
+
+# if ($self->[STAT]) {
+# $self->[MISS]++ if $self->[STAT][$key]++ == 0;
+# $self->[REQ]++;
+# my $hit_rate = 1 - $self->[MISS] / $self->[REQ];
+# # Do some testing to determine this threshhold
+# $#$self = STAT - 1 if $hit_rate > 0.20;
+# }
+
+ if (exists $self->[HASH]{$key}) {
+ $self->[HEAP]->lookup($self->[HASH]{$key});
+ } else {
+ return;
+ }
+}
+
+# For internal use only
+sub _produce {
+ my ($self, $key) = @_;
+ my $loc = $self->[HASH]{$key};
+ return unless defined $loc;
+ $self->[HEAP][$loc][2];
+}
+
+# For internal use only
+sub _promote {
+ my ($self, $key) = @_;
+ $self->[HEAP]->promote($self->[HASH]{$key});
+}
+
+sub empty {
+ my ($self) = @_;
+ %{$self->[HASH]} = ();
+ $self->[BYTES] = 0;
+ $self->[HEAP]->empty;
+# @{$self->[STAT]} = ();
+# $self->[MISS] = 0;
+# $self->[REQ] = 0;
+}
+
+sub is_empty {
+ my ($self) = @_;
+ keys %{$self->[HASH]} == 0;
+}
+
+sub update {
+ my ($self, $key, $val) = @_;
+ local *_;
+ croak "missing argument to ->update" unless defined $key;
+ if (length($val) > $self->[MAX]) {
+ my ($oldval) = $self->remove($key);
+ $self->[BYTES] -= length($oldval) if defined $oldval;
+ } elsif (exists $self->[HASH]{$key}) {
+ my $oldval = $self->[HEAP]->set_val($self->[HASH]{$key}, $val);
+ $self->[BYTES] += length($val);
+ $self->[BYTES] -= length($oldval) if defined $oldval;
+ } else {
+ $self->[HEAP]->insert($key, $val);
+ $self->[BYTES] += length($val);
+ }
+ $self->flush;
+}
+
+sub rekey {
+ my ($self, $okeys, $nkeys) = @_;
+ local *_;
+ my %map;
+ @map{@$okeys} = @$nkeys;
+ croak "missing argument to ->rekey" unless defined $nkeys;
+ croak "length mismatch in ->rekey arguments" unless @$nkeys == @$okeys;
+ my %adjusted; # map new keys to heap indices
+ # You should be able to cut this to one loop TODO XXX
+ for (0 .. $#$okeys) {
+ $adjusted{$nkeys->[$_]} = delete $self->[HASH]{$okeys->[$_]};
+ }
+ while (my ($nk, $ix) = each %adjusted) {
+ # @{$self->[HASH]}{keys %adjusted} = values %adjusted;
+ $self->[HEAP]->rekey($ix, $nk);
+ $self->[HASH]{$nk} = $ix;
+ }
+}
+
+sub ckeys {
+ my $self = shift;
+ my @a = keys %{$self->[HASH]};
+ @a;
+}
+
+# Return total amount of cached data
+sub bytes {
+ my $self = shift;
+ $self->[BYTES];
+}
+
+# Expire oldest item from cache until cache size is smaller than $max
+sub reduce_size_to {
+ my ($self, $max) = @_;
+ until ($self->[BYTES] <= $max) {
+ # Note that Tie::File::Cache::expire has been inlined here
+ my $old_data = $self->[HEAP]->popheap;
+ return unless defined $old_data;
+ $self->[BYTES] -= length $old_data;
+ }
+}
+
+# Why not just $self->reduce_size_to($self->[MAX])?
+# Try this when things stabilize TODO XXX
+# If the cache is too full, expire the oldest records
+sub flush {
+ my $self = shift;
+ $self->reduce_size_to($self->[MAX]) if $self->[BYTES] > $self->[MAX];
+}
+
+# For internal use only
+sub _produce_lru {
+ my $self = shift;
+ $self->[HEAP]->expire_order;
+}
+
+BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
+
+sub _check_integrity { # For CACHE
+ my $self = shift;
+ my $good = 1;
+
+ # Test HEAP
+ $self->[HEAP]->_check_integrity or $good = 0;
+
+ # Test HASH
+ my $bytes = 0;
+ for my $k (keys %{$self->[HASH]}) {
+ if ($k ne '0' && $k !~ /^[1-9][0-9]*$/) {
+ $good = 0;
+ _ci_warn "Cache hash key <$k> is non-numeric";
+ }
+
+ my $h = $self->[HASH]{$k};
+ if (! defined $h) {
+ $good = 0;
+ _ci_warn "Heap index number for key $k is undefined";
+ } elsif ($h == 0) {
+ $good = 0;
+ _ci_warn "Heap index number for key $k is zero";
+ } else {
+ my $j = $self->[HEAP][$h];
+ if (! defined $j) {
+ $good = 0;
+ _ci_warn "Heap contents key $k (=> $h) are undefined";
+ } else {
+ $bytes += length($j->[2]);
+ if ($k ne $j->[1]) {
+ $good = 0;
+ _ci_warn "Heap contents key $k (=> $h) is $j->[1], should be $k";
+ }
+ }
+ }
+ }
+
+ # Test BYTES
+ if ($bytes != $self->[BYTES]) {
+ $good = 0;
+ _ci_warn "Total data in cache is $bytes, expected $self->[BYTES]";
+ }
+
+ # Test MAX
+ if ($bytes > $self->[MAX]) {
+ $good = 0;
+ _ci_warn "Total data in cache is $bytes, exceeds maximum $self->[MAX]";
+ }
+
+ return $good;
+}
+
+sub delink {
+ my $self = shift;
+ $self->[HEAP] = undef; # Bye bye heap
+}
+
+################################################################
+#
+# Tie::File::Heap
+#
+# Heap data structure for use by cache LRU routines
+
+package Tie::File::Heap;
+use Carp ':DEFAULT', 'confess';
+$Tie::File::Heap::VERSION = $Tie::File::Cache::VERSION;
+sub SEQ () { 0 };
+sub KEY () { 1 };
+sub DAT () { 2 };
+
+sub new {
+ my ($pack, $cache) = @_;
+ die "$pack: Parent cache object $cache does not support _heap_move method"
+ unless eval { $cache->can('_heap_move') };
+ my $self = [[0,$cache,0]];
+ bless $self => $pack;
+}
+
+# Allocate a new sequence number, larger than all previously allocated numbers
+sub _nseq {
+ my $self = shift;
+ $self->[0][0]++;
+}
+
+sub _cache {
+ my $self = shift;
+ $self->[0][1];
+}
+
+sub _nelts {
+ my $self = shift;
+ $self->[0][2];
+}
+
+sub _nelts_inc {
+ my $self = shift;
+ ++$self->[0][2];
+}
+
+sub _nelts_dec {
+ my $self = shift;
+ --$self->[0][2];
+}
+
+sub is_empty {
+ my $self = shift;
+ $self->_nelts == 0;
+}
+
+sub empty {
+ my $self = shift;
+ $#$self = 0;
+ $self->[0][2] = 0;
+ $self->[0][0] = 0; # might as well reset the sequence numbers
+}
+
+# notify the parent cache object that we moved something
+sub _heap_move {
+ my $self = shift;
+ $self->_cache->_heap_move(@_);
+}
+
+# Insert a piece of data into the heap with the indicated sequence number.
+# The item with the smallest sequence number is always at the top.
+# If no sequence number is specified, allocate a new one and insert the
+# item at the bottom.
+sub insert {
+ my ($self, $key, $data, $seq) = @_;
+ $seq = $self->_nseq unless defined $seq;
+ $self->_insert_new([$seq, $key, $data]);
+}
+
+# Insert a new, fresh item at the bottom of the heap
+sub _insert_new {
+ my ($self, $item) = @_;
+ my $i = @$self;
+ $i = int($i/2) until defined $self->[$i/2];
+ $self->[$i] = $item;
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $self->_nelts_inc;
+}
+
+# Insert [$data, $seq] pair at or below item $i in the heap.
+# If $i is omitted, default to 1 (the top element.)
+sub _insert {
+ my ($self, $item, $i) = @_;
+# $self->_check_loc($i) if defined $i;
+ $i = 1 unless defined $i;
+ until (! defined $self->[$i]) {
+ if ($self->[$i][SEQ] > $item->[SEQ]) { # inserted item is older
+ ($self->[$i], $item) = ($item, $self->[$i]);
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ }
+ # If either is undefined, go that way. Otherwise, choose at random
+ my $dir;
+ $dir = 0 if !defined $self->[2*$i];
+ $dir = 1 if !defined $self->[2*$i+1];
+ $dir = int(rand(2)) unless defined $dir;
+ $i = 2*$i + $dir;
+ }
+ $self->[$i] = $item;
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $self->_nelts_inc;
+}
+
+# Remove the item at node $i from the heap, moving child items upwards.
+# The item with the smallest sequence number is always at the top.
+# Moving items upwards maintains this condition.
+# Return the removed item. Return undef if there was no item at node $i.
+sub remove {
+ my ($self, $i) = @_;
+ $i = 1 unless defined $i;
+ my $top = $self->[$i];
+ return unless defined $top;
+ while (1) {
+ my $ii;
+ my ($L, $R) = (2*$i, 2*$i+1);
+
+ # If either is undefined, go the other way.
+ # Otherwise, go towards the smallest.
+ last unless defined $self->[$L] || defined $self->[$R];
+ $ii = $R if not defined $self->[$L];
+ $ii = $L if not defined $self->[$R];
+ unless (defined $ii) {
+ $ii = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
+ }
+
+ $self->[$i] = $self->[$ii]; # Promote child to fill vacated spot
+ $self->[0][1]->_heap_move($self->[$i][KEY], $i);
+ $i = $ii; # Fill new vacated spot
+ }
+ $self->[0][1]->_heap_move($top->[KEY], undef);
+ undef $self->[$i];
+ $self->_nelts_dec;
+ return $top->[DAT];
+}
+
+sub popheap {
+ my $self = shift;
+ $self->remove(1);
+}
+
+# set the sequence number of the indicated item to a higher number
+# than any other item in the heap, and bubble the item down to the
+# bottom.
+sub promote {
+ my ($self, $n) = @_;
+# $self->_check_loc($n);
+ $self->[$n][SEQ] = $self->_nseq;
+ my $i = $n;
+ while (1) {
+ my ($L, $R) = (2*$i, 2*$i+1);
+ my $dir;
+ last unless defined $self->[$L] || defined $self->[$R];
+ $dir = $R unless defined $self->[$L];
+ $dir = $L unless defined $self->[$R];
+ unless (defined $dir) {
+ $dir = $self->[$L][SEQ] < $self->[$R][SEQ] ? $L : $R;
+ }
+ @{$self}[$i, $dir] = @{$self}[$dir, $i];
+ for ($i, $dir) {
+ $self->[0][1]->_heap_move($self->[$_][KEY], $_) if defined $self->[$_];
+ }
+ $i = $dir;
+ }
+}
+
+# Return item $n from the heap, promoting its LRU status
+sub lookup {
+ my ($self, $n) = @_;
+# $self->_check_loc($n);
+ my $val = $self->[$n];
+ $self->promote($n);
+ $val->[DAT];
+}
+
+
+# Assign a new value for node $n, promoting it to the bottom of the heap
+sub set_val {
+ my ($self, $n, $val) = @_;
+# $self->_check_loc($n);
+ my $oval = $self->[$n][DAT];
+ $self->[$n][DAT] = $val;
+ $self->promote($n);
+ return $oval;
+}
+
+# The hask key has changed for an item;
+# alter the heap's record of the hash key
+sub rekey {
+ my ($self, $n, $new_key) = @_;
+# $self->_check_loc($n);
+ $self->[$n][KEY] = $new_key;
+}
+
+sub _check_loc {
+ my ($self, $n) = @_;
+ unless (1 || defined $self->[$n]) {
+ confess "_check_loc($n) failed";
+ }
+}
+
+BEGIN { *_ci_warn = \&Tie::File::_ci_warn }
+
+sub _check_integrity {
+ my $self = shift;
+ my $good = 1;
+ my %seq;
+
+ unless (eval {$self->[0][1]->isa("Tie::File::Cache")}) {
+ _ci_warn "Element 0 of heap corrupt";
+ $good = 0;
+ }
+ $good = 0 unless $self->_satisfies_heap_condition(1);
+ for my $i (2 .. $#{$self}) {
+ my $p = int($i/2); # index of parent node
+ if (defined $self->[$i] && ! defined $self->[$p]) {
+ _ci_warn "Element $i of heap defined, but parent $p isn't";
+ $good = 0;
+ }
+
+ if (defined $self->[$i]) {
+ if ($seq{$self->[$i][SEQ]}) {
+ my $seq = $self->[$i][SEQ];
+ _ci_warn "Nodes $i and $seq{$seq} both have SEQ=$seq";
+ $good = 0;
+ } else {
+ $seq{$self->[$i][SEQ]} = $i;
+ }
+ }
+ }
+
+ return $good;
+}
+
+sub _satisfies_heap_condition {
+ my $self = shift;
+ my $n = shift || 1;
+ my $good = 1;
+ for (0, 1) {
+ my $c = $n*2 + $_;
+ next unless defined $self->[$c];
+ if ($self->[$n][SEQ] >= $self->[$c]) {
+ _ci_warn "Node $n of heap does not predate node $c";
+ $good = 0 ;
+ }
+ $good = 0 unless $self->_satisfies_heap_condition($c);
+ }
+ return $good;
+}
+
+# Return a list of all the values, sorted by expiration order
+sub expire_order {
+ my $self = shift;
+ my @nodes = sort {$a->[SEQ] <=> $b->[SEQ]} $self->_nodes;
+ map { $_->[KEY] } @nodes;
+}
+
+sub _nodes {
+ my $self = shift;
+ my $i = shift || 1;
+ return unless defined $self->[$i];
+ ($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1));
+}
+
+"Cogito, ergo sum."; # don't forget to return a true value from the file
+
+__END__
+
+=head1 NAME
+
+Tie::File - Access the lines of a disk file via a Perl array
+
+=head1 SYNOPSIS
+
+ # This file documents Tie::File version 0.97
+ use Tie::File;
+
+ tie @array, 'Tie::File', filename or die ...;
+
+ $array[13] = 'blah'; # line 13 of the file is now 'blah'
+ print $array[42]; # display line 42 of the file
+
+ $n_recs = @array; # how many records are in the file?
+ $#array -= 2; # chop two records off the end
+
+
+ for (@array) {
+ s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file
+ }
+
+ # These are just like regular push, pop, unshift, shift, and splice
+ # Except that they modify the file in the way you would expect
+
+ push @array, new recs...;
+ my $r1 = pop @array;
+ unshift @array, new recs...;
+ my $r2 = shift @array;
+ @old_recs = splice @array, 3, 7, new recs...;
+
+ untie @array; # all finished
+
+
+=head1 DESCRIPTION
+
+C<Tie::File> represents a regular text file as a Perl array. Each
+element in the array corresponds to a record in the file. The first
+line of the file is element 0 of the array; the second line is element
+1, and so on.
+
+The file is I<not> loaded into memory, so this will work even for
+gigantic files.
+
+Changes to the array are reflected in the file immediately.
+
+Lazy people and beginners may now stop reading the manual.
+
+=head2 C<recsep>
+
+What is a 'record'? By default, the meaning is the same as for the
+C<E<lt>...E<gt>> operator: It's a string terminated by C<$/>, which is
+probably C<"\n">. (Minor exception: on DOS and Win32 systems, a
+'record' is a string terminated by C<"\r\n">.) You may change the
+definition of "record" by supplying the C<recsep> option in the C<tie>
+call:
+
+ tie @array, 'Tie::File', $file, recsep => 'es';
+
+This says that records are delimited by the string C<es>. If the file
+contained the following data:
+
+ Curse these pesky flies!\n
+
+then the C<@array> would appear to have four elements:
+
+ "Curse th"
+ "e p"
+ "ky fli"
+ "!\n"
+
+An undefined value is not permitted as a record separator. Perl's
+special "paragraph mode" semantics (E<agrave> la C<$/ = "">) are not
+emulated.
+
+Records read from the tied array do not have the record separator
+string on the end; this is to allow
+
+ $array[17] .= "extra";
+
+to work as expected.
+
+(See L<"autochomp">, below.) Records stored into the array will have
+the record separator string appended before they are written to the
+file, if they don't have one already. For example, if the record
+separator string is C<"\n">, then the following two lines do exactly
+the same thing:
+
+ $array[17] = "Cherry pie";
+ $array[17] = "Cherry pie\n";
+
+The result is that the contents of line 17 of the file will be
+replaced with "Cherry pie"; a newline character will separate line 17
+from line 18. This means that this code will do nothing:
+
+ chomp $array[17];
+
+Because the C<chomp>ed value will have the separator reattached when
+it is written back to the file. There is no way to create a file
+whose trailing record separator string is missing.
+
+Inserting records that I<contain> the record separator string is not
+supported by this module. It will probably produce a reasonable
+result, but what this result will be may change in a future version.
+Use 'splice' to insert records or to replace one record with several.
+
+=head2 C<autochomp>
+
+Normally, array elements have the record separator removed, so that if
+the file contains the text
+
+ Gold
+ Frankincense
+ Myrrh
+
+the tied array will appear to contain C<("Gold", "Frankincense",
+"Myrrh")>. If you set C<autochomp> to a false value, the record
+separator will not be removed. If the file above was tied with
+
+ tie @gifts, "Tie::File", $gifts, autochomp => 0;
+
+then the array C<@gifts> would appear to contain C<("Gold\n",
+"Frankincense\n", "Myrrh\n")>, or (on Win32 systems) C<("Gold\r\n",
+"Frankincense\r\n", "Myrrh\r\n")>.
+
+=head2 C<mode>
+
+Normally, the specified file will be opened for read and write access,
+and will be created if it does not exist. (That is, the flags
+C<O_RDWR | O_CREAT> are supplied in the C<open> call.) If you want to
+change this, you may supply alternative flags in the C<mode> option.
+See L<Fcntl> for a listing of available flags.
+For example:
+
+ # open the file if it exists, but fail if it does not exist
+ use Fcntl 'O_RDWR';
+ tie @array, 'Tie::File', $file, mode => O_RDWR;
+
+ # create the file if it does not exist
+ use Fcntl 'O_RDWR', 'O_CREAT';
+ tie @array, 'Tie::File', $file, mode => O_RDWR | O_CREAT;
+
+ # open an existing file in read-only mode
+ use Fcntl 'O_RDONLY';
+ tie @array, 'Tie::File', $file, mode => O_RDONLY;
+
+Opening the data file in write-only or append mode is not supported.
+
+=head2 C<memory>
+
+This is an upper limit on the amount of memory that C<Tie::File> will
+consume at any time while managing the file. This is used for two
+things: managing the I<read cache> and managing the I<deferred write
+buffer>.
+
+Records read in from the file are cached, to avoid having to re-read
+them repeatedly. If you read the same record twice, the first time it
+will be stored in memory, and the second time it will be fetched from
+the I<read cache>. The amount of data in the read cache will not
+exceed the value you specified for C<memory>. If C<Tie::File> wants
+to cache a new record, but the read cache is full, it will make room
+by expiring the least-recently visited records from the read cache.
+
+The default memory limit is 2Mib. You can adjust the maximum read
+cache size by supplying the C<memory> option. The argument is the
+desired cache size, in bytes.
+
+ # I have a lot of memory, so use a large cache to speed up access
+ tie @array, 'Tie::File', $file, memory => 20_000_000;
+
+Setting the memory limit to 0 will inhibit caching; records will be
+fetched from disk every time you examine them.
+
+The C<memory> value is not an absolute or exact limit on the memory
+used. C<Tie::File> objects contains some structures besides the read
+cache and the deferred write buffer, whose sizes are not charged
+against C<memory>.
+
+The cache itself consumes about 310 bytes per cached record, so if
+your file has many short records, you may want to decrease the cache
+memory limit, or else the cache overhead may exceed the size of the
+cached data.
+
+
+=head2 C<dw_size>
+
+(This is an advanced feature. Skip this section on first reading.)
+
+If you use deferred writing (See L<"Deferred Writing">, below) then
+data you write into the array will not be written directly to the
+file; instead, it will be saved in the I<deferred write buffer> to be
+written out later. Data in the deferred write buffer is also charged
+against the memory limit you set with the C<memory> option.
+
+You may set the C<dw_size> option to limit the amount of data that can
+be saved in the deferred write buffer. This limit may not exceed the
+total memory limit. For example, if you set C<dw_size> to 1000 and
+C<memory> to 2500, that means that no more than 1000 bytes of deferred
+writes will be saved up. The space available for the read cache will
+vary, but it will always be at least 1500 bytes (if the deferred write
+buffer is full) and it could grow as large as 2500 bytes (if the
+deferred write buffer is empty.)
+
+If you don't specify a C<dw_size>, it defaults to the entire memory
+limit.
+
+=head2 Option Format
+
+C<-mode> is a synonym for C<mode>. C<-recsep> is a synonym for
+C<recsep>. C<-memory> is a synonym for C<memory>. You get the
+idea.
+
+=head1 Public Methods
+
+The C<tie> call returns an object, say C<$o>. You may call
+
+ $rec = $o->FETCH($n);
+ $o->STORE($n, $rec);
+
+to fetch or store the record at line C<$n>, respectively; similarly
+the other tied array methods. (See L<perltie> for details.) You may
+also call the following methods on this object:
+
+=head2 C<flock>
+
+ $o->flock(MODE)
+
+will lock the tied file. C<MODE> has the same meaning as the second
+argument to the Perl built-in C<flock> function; for example
+C<LOCK_SH> or C<LOCK_EX | LOCK_NB>. (These constants are provided by
+the C<use Fcntl ':flock'> declaration.)
+
+C<MODE> is optional; the default is C<LOCK_EX>.
+
+C<Tie::File> maintains an internal table of the byte offset of each
+record it has seen in the file.
+
+When you use C<flock> to lock the file, C<Tie::File> assumes that the
+read cache is no longer trustworthy, because another process might
+have modified the file since the last time it was read. Therefore, a
+successful call to C<flock> discards the contents of the read cache
+and the internal record offset table.
+
+C<Tie::File> promises that the following sequence of operations will
+be safe:
+
+ my $o = tie @array, "Tie::File", $filename;
+ $o->flock;
+
+In particular, C<Tie::File> will I<not> read or write the file during
+the C<tie> call. (Exception: Using C<mode =E<gt> O_TRUNC> will, of
+course, erase the file during the C<tie> call. If you want to do this
+safely, then open the file without C<O_TRUNC>, lock the file, and use
+C<@array = ()>.)
+
+The best way to unlock a file is to discard the object and untie the
+array. It is probably unsafe to unlock the file without also untying
+it, because if you do, changes may remain unwritten inside the object.
+That is why there is no shortcut for unlocking. If you really want to
+unlock the file prematurely, you know what to do; if you don't know
+what to do, then don't do it.
+
+All the usual warnings about file locking apply here. In particular,
+note that file locking in Perl is B<advisory>, which means that
+holding a lock will not prevent anyone else from reading, writing, or
+erasing the file; it only prevents them from getting another lock at
+the same time. Locks are analogous to green traffic lights: If you
+have a green light, that does not prevent the idiot coming the other
+way from plowing into you sideways; it merely guarantees to you that
+the idiot does not also have a green light at the same time.
+
+=head2 C<autochomp>
+
+ my $old_value = $o->autochomp(0); # disable autochomp option
+ my $old_value = $o->autochomp(1); # enable autochomp option
+
+ my $ac = $o->autochomp(); # recover current value
+
+See L<"autochomp">, above.
+
+=head2 C<defer>, C<flush>, C<discard>, and C<autodefer>
+
+See L<"Deferred Writing">, below.
+
+=head2 C<offset>
+
+ $off = $o->offset($n);
+
+This method returns the byte offset of the start of the C<$n>th record
+in the file. If there is no such record, it returns an undefined
+value.
+
+=head1 Tying to an already-opened filehandle
+
+If C<$fh> is a filehandle, such as is returned by C<IO::File> or one
+of the other C<IO> modules, you may use:
+
+ tie @array, 'Tie::File', $fh, ...;
+
+Similarly if you opened that handle C<FH> with regular C<open> or
+C<sysopen>, you may use:
+
+ tie @array, 'Tie::File', \*FH, ...;
+
+Handles that were opened write-only won't work. Handles that were
+opened read-only will work as long as you don't try to modify the
+array. Handles must be attached to seekable sources of data---that
+means no pipes or sockets. If C<Tie::File> can detect that you
+supplied a non-seekable handle, the C<tie> call will throw an
+exception. (On Unix systems, it can detect this.)
+
+Note that Tie::File will only close any filehandles that it opened
+internally. If you passed it a filehandle as above, you "own" the
+filehandle, and are responsible for closing it after you have untied
+the @array.
+
+=head1 Deferred Writing
+
+(This is an advanced feature. Skip this section on first reading.)
+
+Normally, modifying a C<Tie::File> array writes to the underlying file
+immediately. Every assignment like C<$a[3] = ...> rewrites as much of
+the file as is necessary; typically, everything from line 3 through
+the end will need to be rewritten. This is the simplest and most
+transparent behavior. Performance even for large files is reasonably
+good.
+
+However, under some circumstances, this behavior may be excessively
+slow. For example, suppose you have a million-record file, and you
+want to do:
+
+ for (@FILE) {
+ $_ = "> $_";
+ }
+
+The first time through the loop, you will rewrite the entire file,
+from line 0 through the end. The second time through the loop, you
+will rewrite the entire file from line 1 through the end. The third
+time through the loop, you will rewrite the entire file from line 2 to
+the end. And so on.
+
+If the performance in such cases is unacceptable, you may defer the
+actual writing, and then have it done all at once. The following loop
+will perform much better for large files:
+
+ (tied @a)->defer;
+ for (@a) {
+ $_ = "> $_";
+ }
+ (tied @a)->flush;
+
+If C<Tie::File>'s memory limit is large enough, all the writing will
+done in memory. Then, when you call C<-E<gt>flush>, the entire file
+will be rewritten in a single pass.
+
+(Actually, the preceding discussion is something of a fib. You don't
+need to enable deferred writing to get good performance for this
+common case, because C<Tie::File> will do it for you automatically
+unless you specifically tell it not to. See L<"autodeferring">,
+below.)
+
+Calling C<-E<gt>flush> returns the array to immediate-write mode. If
+you wish to discard the deferred writes, you may call C<-E<gt>discard>
+instead of C<-E<gt>flush>. Note that in some cases, some of the data
+will have been written already, and it will be too late for
+C<-E<gt>discard> to discard all the changes. Support for
+C<-E<gt>discard> may be withdrawn in a future version of C<Tie::File>.
+
+Deferred writes are cached in memory up to the limit specified by the
+C<dw_size> option (see above). If the deferred-write buffer is full
+and you try to write still more deferred data, the buffer will be
+flushed. All buffered data will be written immediately, the buffer
+will be emptied, and the now-empty space will be used for future
+deferred writes.
+
+If the deferred-write buffer isn't yet full, but the total size of the
+buffer and the read cache would exceed the C<memory> limit, the oldest
+records will be expired from the read cache until the total size is
+under the limit.
+
+C<push>, C<pop>, C<shift>, C<unshift>, and C<splice> cannot be
+deferred. When you perform one of these operations, any deferred data
+is written to the file and the operation is performed immediately.
+This may change in a future version.
+
+If you resize the array with deferred writing enabled, the file will
+be resized immediately, but deferred records will not be written.
+This has a surprising consequence: C<@a = (...)> erases the file
+immediately, but the writing of the actual data is deferred. This
+might be a bug. If it is a bug, it will be fixed in a future version.
+
+=head2 Autodeferring
+
+C<Tie::File> tries to guess when deferred writing might be helpful,
+and to turn it on and off automatically.
+
+ for (@a) {
+ $_ = "> $_";
+ }
+
+In this example, only the first two assignments will be done
+immediately; after this, all the changes to the file will be deferred
+up to the user-specified memory limit.
+
+You should usually be able to ignore this and just use the module
+without thinking about deferring. However, special applications may
+require fine control over which writes are deferred, or may require
+that all writes be immediate. To disable the autodeferment feature,
+use
+
+ (tied @o)->autodefer(0);
+
+or
+
+ tie @array, 'Tie::File', $file, autodefer => 0;
+
+
+Similarly, C<-E<gt>autodefer(1)> re-enables autodeferment, and
+C<-E<gt>autodefer()> recovers the current value of the autodefer setting.
+
+
+=head1 CONCURRENT ACCESS TO FILES
+
+Caching and deferred writing are inappropriate if you want the same
+file to be accessed simultaneously from more than one process. Other
+optimizations performed internally by this module are also
+incompatible with concurrent access. A future version of this module will
+support a C<concurrent =E<gt> 1> option that enables safe concurrent access.
+
+Previous versions of this documentation suggested using C<memory
+=E<gt> 0> for safe concurrent access. This was mistaken. Tie::File
+will not support safe concurrent access before version 0.98.
+
+=head1 CAVEATS
+
+(That's Latin for 'warnings'.)
+
+=over 4
+
+=item *
+
+Reasonable effort was made to make this module efficient. Nevertheless,
+changing the size of a record in the middle of a large file will
+always be fairly slow, because everything after the new record must be
+moved.
+
+=item *
+
+The behavior of tied arrays is not precisely the same as for regular
+arrays. For example:
+
+ # This DOES print "How unusual!"
+ undef $a[10]; print "How unusual!\n" if defined $a[10];
+
+C<undef>-ing a C<Tie::File> array element just blanks out the
+corresponding record in the file. When you read it back again, you'll
+get the empty string, so the supposedly-C<undef>'ed value will be
+defined. Similarly, if you have C<autochomp> disabled, then
+
+ # This DOES print "How unusual!" if 'autochomp' is disabled
+ undef $a[10];
+ print "How unusual!\n" if $a[10];
+
+Because when C<autochomp> is disabled, C<$a[10]> will read back as
+C<"\n"> (or whatever the record separator string is.)
+
+There are other minor differences, particularly regarding C<exists>
+and C<delete>, but in general, the correspondence is extremely close.
+
+=item *
+
+I have supposed that since this module is concerned with file I/O,
+almost all normal use of it will be heavily I/O bound. This means
+that the time to maintain complicated data structures inside the
+module will be dominated by the time to actually perform the I/O.
+When there was an opportunity to spend CPU time to avoid doing I/O, I
+usually tried to take it.
+
+=item *
+
+You might be tempted to think that deferred writing is like
+transactions, with C<flush> as C<commit> and C<discard> as
+C<rollback>, but it isn't, so don't.
+
+=item *
+
+There is a large memory overhead for each record offset and for each
+cache entry: about 310 bytes per cached data record, and about 21 bytes per offset table entry.
+
+The per-record overhead will limit the maximum number of records you
+can access per file. Note that I<accessing> the length of the array
+via C<$x = scalar @tied_file> accesses B<all> records and stores their
+offsets. The same for C<foreach (@tied_file)>, even if you exit the
+loop early.
+
+=back
+
+=head1 SUBCLASSING
+
+This version promises absolutely nothing about the internals, which
+may change without notice. A future version of the module will have a
+well-defined and stable subclassing API.
+
+=head1 WHAT ABOUT C<DB_File>?
+
+People sometimes point out that L<DB_File> will do something similar,
+and ask why C<Tie::File> module is necessary.
+
+There are a number of reasons that you might prefer C<Tie::File>.
+A list is available at C<http://perl.plover.com/TieFile/why-not-DB_File>.
+
+=head1 AUTHOR
+
+Mark Jason Dominus
+
+To contact the author, send email to: C<mjd-perl-tiefile+@plover.com>
+
+To receive an announcement whenever a new version of this module is
+released, send a blank email message to
+C<mjd-perl-tiefile-subscribe@plover.com>.
+
+The most recent version of this module, including documentation and
+any news of importance, will be available at
+
+ http://perl.plover.com/TieFile/
+
+
+=head1 LICENSE
+
+C<Tie::File> version 0.97 is copyright (C) 2003 Mark Jason Dominus.
+
+This library is free software; you may redistribute it and/or modify
+it under the same terms as Perl itself.
+
+These terms are your choice of any of (1) the Perl Artistic Licence,
+or (2) version 2 of the GNU General Public License as published by the
+Free Software Foundation, or (3) any later version of the GNU General
+Public License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this library program; it should be in the file C<COPYING>.
+If not, write to the Free Software Foundation, Inc., 59 Temple Place,
+Suite 330, Boston, MA 02111 USA
+
+For licensing inquiries, contact the author at:
+
+ Mark Jason Dominus
+ 255 S. Warnock St.
+ Philadelphia, PA 19107
+
+=head1 WARRANTY
+
+C<Tie::File> version 0.97 comes with ABSOLUTELY NO WARRANTY.
+For details, see the license.
+
+=head1 THANKS
+
+Gigantic thanks to Jarkko Hietaniemi, for agreeing to put this in the
+core when I hadn't written it yet, and for generally being helpful,
+supportive, and competent. (Usually the rule is "choose any one.")
+Also big thanks to Abhijit Menon-Sen for all of the same things.
+
+Special thanks to Craig Berry and Peter Prymmer (for VMS portability
+help), Randy Kobes (for Win32 portability help), Clinton Pierce and
+Autrijus Tang (for heroic eleventh-hour Win32 testing above and beyond
+the call of duty), Michael G Schwern (for testing advice), and the
+rest of the CPAN testers (for testing generally).
+
+Special thanks to Tels for suggesting several speed and memory
+optimizations.
+
+Additional thanks to:
+Edward Avis /
+Mattia Barbon /
+Tom Christiansen /
+Gerrit Haase /
+Gurusamy Sarathy /
+Jarkko Hietaniemi (again) /
+Nikola Knezevic /
+John Kominetz /
+Nick Ing-Simmons /
+Tassilo von Parseval /
+H. Dieter Pearcey /
+Slaven Rezic /
+Eric Roode /
+Peter Scott /
+Peter Somu /
+Autrijus Tang (again) /
+Tels (again) /
+Juerd Waalboer
+
+=head1 TODO
+
+More tests. (Stuff I didn't think of yet.)
+
+Paragraph mode?
+
+Fixed-length mode. Leave-blanks mode.
+
+Maybe an autolocking mode?
+
+For many common uses of the module, the read cache is a liability.
+For example, a program that inserts a single record, or that scans the
+file once, will have a cache hit rate of zero. This suggests a major
+optimization: The cache should be initially disabled. Here's a hybrid
+approach: Initially, the cache is disabled, but the cache code
+maintains statistics about how high the hit rate would be *if* it were
+enabled. When it sees the hit rate get high enough, it enables
+itself. The STAT comments in this code are the beginning of an
+implementation of this.
+
+Record locking with fcntl()? Then the module might support an undo
+log and get real transactions. What a tour de force that would be.
+
+Keeping track of the highest cached record. This would allow reads-in-a-row
+to skip the cache lookup faster (if reading from 1..N with empty cache at
+start, the last cached value will be always N-1).
+
+More tests.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tie/Handle.pm b/Master/tlpkg/tlperl/lib/Tie/Handle.pm
new file mode 100644
index 00000000000..d8747f12af1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/Handle.pm
@@ -0,0 +1,234 @@
+package Tie::Handle;
+
+use 5.006_001;
+our $VERSION = '4.1';
+
+=head1 NAME
+
+Tie::Handle, Tie::StdHandle - base class definitions for tied handles
+
+=head1 SYNOPSIS
+
+ package NewHandle;
+ require Tie::Handle;
+
+ @ISA = qw(Tie::Handle);
+
+ sub READ { ... } # Provide a needed method
+ sub TIEHANDLE { ... } # Overrides inherited method
+
+
+ package main;
+
+ tie *FH, 'NewHandle';
+
+=head1 DESCRIPTION
+
+This module provides some skeletal methods for handle-tying classes. See
+L<perltie> for a list of the functions required in tying a handle to a package.
+The basic B<Tie::Handle> package provides a C<new> method, as well as methods
+C<TIEHANDLE>, C<PRINT>, C<PRINTF> and C<GETC>.
+
+For developers wishing to write their own tied-handle classes, the methods
+are summarized below. The L<perltie> section not only documents these, but
+has sample code as well:
+
+=over 4
+
+=item TIEHANDLE classname, LIST
+
+The method invoked by the command C<tie *glob, classname>. Associates a new
+glob instance with the specified class. C<LIST> would represent additional
+arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
+complete the association.
+
+=item WRITE this, scalar, length, offset
+
+Write I<length> bytes of data from I<scalar> starting at I<offset>.
+
+=item PRINT this, LIST
+
+Print the values in I<LIST>
+
+=item PRINTF this, format, LIST
+
+Print the values in I<LIST> using I<format>
+
+=item READ this, scalar, length, offset
+
+Read I<length> bytes of data into I<scalar> starting at I<offset>.
+
+=item READLINE this
+
+Read a single line
+
+=item GETC this
+
+Get a single character
+
+=item CLOSE this
+
+Close the handle
+
+=item OPEN this, filename
+
+(Re-)open the handle
+
+=item BINMODE this
+
+Specify content is binary
+
+=item EOF this
+
+Test for end of file.
+
+=item TELL this
+
+Return position in the file.
+
+=item SEEK this, offset, whence
+
+Position the file.
+
+Test for end of file.
+
+=item DESTROY this
+
+Free the storage associated with the tied handle referenced by I<this>.
+This is rarely needed, as Perl manages its memory quite well. But the
+option exists, should a class wish to perform specific actions upon the
+destruction of an instance.
+
+=back
+
+=head1 MORE INFORMATION
+
+The L<perltie> section contains an example of tying handles.
+
+=head1 COMPATIBILITY
+
+This version of Tie::Handle is neither related to nor compatible with
+the Tie::Handle (3.0) module available on CPAN. It was due to an
+accident that two modules with the same name appeared. The namespace
+clash has been cleared in favor of this module that comes with the
+perl core in September 2000 and accordingly the version number has
+been bumped up to 4.0.
+
+=cut
+
+use Carp;
+use warnings::register;
+
+sub new {
+ my $pkg = shift;
+ $pkg->TIEHANDLE(@_);
+}
+
+# "Grandfather" the new, a la Tie::Hash
+
+sub TIEHANDLE {
+ my $pkg = shift;
+ if (defined &{"{$pkg}::new"}) {
+ warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHANDLE is missing");
+ $pkg->new(@_);
+ }
+ else {
+ croak "$pkg doesn't define a TIEHANDLE method";
+ }
+}
+
+sub PRINT {
+ my $self = shift;
+ if($self->can('WRITE') != \&WRITE) {
+ my $buf = join(defined $, ? $, : "",@_);
+ $buf .= $\ if defined $\;
+ $self->WRITE($buf,length($buf),0);
+ }
+ else {
+ croak ref($self)," doesn't define a PRINT method";
+ }
+}
+
+sub PRINTF {
+ my $self = shift;
+
+ if($self->can('WRITE') != \&WRITE) {
+ my $buf = sprintf(shift,@_);
+ $self->WRITE($buf,length($buf),0);
+ }
+ else {
+ croak ref($self)," doesn't define a PRINTF method";
+ }
+}
+
+sub READLINE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a READLINE method";
+}
+
+sub GETC {
+ my $self = shift;
+
+ if($self->can('READ') != \&READ) {
+ my $buf;
+ $self->READ($buf,1);
+ return $buf;
+ }
+ else {
+ croak ref($self)," doesn't define a GETC method";
+ }
+}
+
+sub READ {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a READ method";
+}
+
+sub WRITE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a WRITE method";
+}
+
+sub CLOSE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a CLOSE method";
+}
+
+package Tie::StdHandle;
+our @ISA = 'Tie::Handle';
+use Carp;
+
+sub TIEHANDLE
+{
+ my $class = shift;
+ my $fh = \do { local *HANDLE};
+ bless $fh,$class;
+ $fh->OPEN(@_) if (@_);
+ return $fh;
+}
+
+sub EOF { eof($_[0]) }
+sub TELL { tell($_[0]) }
+sub FILENO { fileno($_[0]) }
+sub SEEK { seek($_[0],$_[1],$_[2]) }
+sub CLOSE { close($_[0]) }
+sub BINMODE { binmode($_[0]) }
+
+sub OPEN
+{
+ $_[0]->CLOSE if defined($_[0]->FILENO);
+ @_ == 2 ? open($_[0], $_[1]) : open($_[0], $_[1], $_[2]);
+}
+
+sub READ { read($_[0],$_[1],$_[2]) }
+sub READLINE { my $fh = $_[0]; <$fh> }
+sub GETC { getc($_[0]) }
+
+sub WRITE
+{
+ my $fh = $_[0];
+ print $fh substr($_[1],0,$_[2])
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tie/Hash.pm b/Master/tlpkg/tlperl/lib/Tie/Hash.pm
new file mode 100644
index 00000000000..a838915482b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/Hash.pm
@@ -0,0 +1,257 @@
+package Tie::Hash;
+
+our $VERSION = '1.02';
+
+=head1 NAME
+
+Tie::Hash, Tie::StdHash, Tie::ExtraHash - base class definitions for tied hashes
+
+=head1 SYNOPSIS
+
+ package NewHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::Hash);
+
+ sub DELETE { ... } # Provides needed method
+ sub CLEAR { ... } # Overrides inherited method
+
+
+ package NewStdHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::StdHash);
+
+ # All methods provided by default, define only those needing overrides
+ # Accessors access the storage in %{$_[0]};
+ # TIEHASH should return a reference to the actual storage
+ sub DELETE { ... }
+
+ package NewExtraHash;
+ require Tie::Hash;
+
+ @ISA = (Tie::ExtraHash);
+
+ # All methods provided by default, define only those needing overrides
+ # Accessors access the storage in %{$_[0][0]};
+ # TIEHASH should return an array reference with the first element being
+ # the reference to the actual storage
+ sub DELETE {
+ $_[0][1]->('del', $_[0][0], $_[1]); # Call the report writer
+ delete $_[0][0]->{$_[1]}; # $_[0]->SUPER::DELETE($_[1])
+ }
+
+
+ package main;
+
+ tie %new_hash, 'NewHash';
+ tie %new_std_hash, 'NewStdHash';
+ tie %new_extra_hash, 'NewExtraHash',
+ sub {warn "Doing \U$_[1]\E of $_[2].\n"};
+
+=head1 DESCRIPTION
+
+This module provides some skeletal methods for hash-tying classes. See
+L<perltie> for a list of the functions required in order to tie a hash
+to a package. The basic B<Tie::Hash> package provides a C<new> method, as well
+as methods C<TIEHASH>, C<EXISTS> and C<CLEAR>. The B<Tie::StdHash> and
+B<Tie::ExtraHash> packages
+provide most methods for hashes described in L<perltie> (the exceptions
+are C<UNTIE> and C<DESTROY>). They cause tied hashes to behave exactly like standard hashes,
+and allow for selective overwriting of methods. B<Tie::Hash> grandfathers the
+C<new> method: it is used if C<TIEHASH> is not defined
+in the case a class forgets to include a C<TIEHASH> method.
+
+For developers wishing to write their own tied hashes, the required methods
+are briefly defined below. See the L<perltie> section for more detailed
+descriptive, as well as example code:
+
+=over 4
+
+=item TIEHASH classname, LIST
+
+The method invoked by the command C<tie %hash, classname>. Associates a new
+hash instance with the specified class. C<LIST> would represent additional
+arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
+complete the association.
+
+=item STORE this, key, value
+
+Store datum I<value> into I<key> for the tied hash I<this>.
+
+=item FETCH this, key
+
+Retrieve the datum in I<key> for the tied hash I<this>.
+
+=item FIRSTKEY this
+
+Return the first key in the hash.
+
+=item NEXTKEY this, lastkey
+
+Return the next key in the hash.
+
+=item EXISTS this, key
+
+Verify that I<key> exists with the tied hash I<this>.
+
+The B<Tie::Hash> implementation is a stub that simply croaks.
+
+=item DELETE this, key
+
+Delete the key I<key> from the tied hash I<this>.
+
+=item CLEAR this
+
+Clear all values from the tied hash I<this>.
+
+=item SCALAR this
+
+Returns what evaluating the hash in scalar context yields.
+
+B<Tie::Hash> does not implement this method (but B<Tie::StdHash>
+and B<Tie::ExtraHash> do).
+
+=back
+
+=head1 Inheriting from B<Tie::StdHash>
+
+The accessor methods assume that the actual storage for the data in the tied
+hash is in the hash referenced by C<tied(%tiedhash)>. Thus overwritten
+C<TIEHASH> method should return a hash reference, and the remaining methods
+should operate on the hash referenced by the first argument:
+
+ package ReportHash;
+ our @ISA = 'Tie::StdHash';
+
+ sub TIEHASH {
+ my $storage = bless {}, shift;
+ warn "New ReportHash created, stored in $storage.\n";
+ $storage
+ }
+ sub STORE {
+ warn "Storing data with key $_[1] at $_[0].\n";
+ $_[0]{$_[1]} = $_[2]
+ }
+
+
+=head1 Inheriting from B<Tie::ExtraHash>
+
+The accessor methods assume that the actual storage for the data in the tied
+hash is in the hash referenced by C<(tied(%tiedhash))-E<gt>[0]>. Thus overwritten
+C<TIEHASH> method should return an array reference with the first
+element being a hash reference, and the remaining methods should operate on the
+hash C<< %{ $_[0]->[0] } >>:
+
+ package ReportHash;
+ our @ISA = 'Tie::ExtraHash';
+
+ sub TIEHASH {
+ my $class = shift;
+ my $storage = bless [{}, @_], $class;
+ warn "New ReportHash created, stored in $storage.\n";
+ $storage;
+ }
+ sub STORE {
+ warn "Storing data with key $_[1] at $_[0].\n";
+ $_[0][0]{$_[1]} = $_[2]
+ }
+
+The default C<TIEHASH> method stores "extra" arguments to tie() starting
+from offset 1 in the array referenced by C<tied(%tiedhash)>; this is the
+same storage algorithm as in TIEHASH subroutine above. Hence, a typical
+package inheriting from B<Tie::ExtraHash> does not need to overwrite this
+method.
+
+=head1 C<SCALAR>, C<UNTIE> and C<DESTROY>
+
+The methods C<UNTIE> and C<DESTROY> are not defined in B<Tie::Hash>,
+B<Tie::StdHash>, or B<Tie::ExtraHash>. Tied hashes do not require
+presence of these methods, but if defined, the methods will be called in
+proper time, see L<perltie>.
+
+C<SCALAR> is only defined in B<Tie::StdHash> and B<Tie::ExtraHash>.
+
+If needed, these methods should be defined by the package inheriting from
+B<Tie::Hash>, B<Tie::StdHash>, or B<Tie::ExtraHash>. See L<pertie/"SCALAR">
+to find out what happens when C<SCALAR> does not exist.
+
+=head1 MORE INFORMATION
+
+The packages relating to various DBM-related implementations (F<DB_File>,
+F<NDBM_File>, etc.) show examples of general tied hashes, as does the
+L<Config> module. While these do not utilize B<Tie::Hash>, they serve as
+good working examples.
+
+=cut
+
+use Carp;
+use warnings::register;
+
+sub new {
+ my $pkg = shift;
+ $pkg->TIEHASH(@_);
+}
+
+# Grandfather "new"
+
+sub TIEHASH {
+ my $pkg = shift;
+ if (defined &{"${pkg}::new"}) {
+ warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHASH is missing");
+ $pkg->new(@_);
+ }
+ else {
+ croak "$pkg doesn't define a TIEHASH method";
+ }
+}
+
+sub EXISTS {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define an EXISTS method";
+}
+
+sub CLEAR {
+ my $self = shift;
+ my $key = $self->FIRSTKEY(@_);
+ my @keys;
+
+ while (defined $key) {
+ push @keys, $key;
+ $key = $self->NEXTKEY(@_, $key);
+ }
+ foreach $key (@keys) {
+ $self->DELETE(@_, $key);
+ }
+}
+
+# The Tie::StdHash package implements standard perl hash behaviour.
+# It exists to act as a base class for classes which only wish to
+# alter some parts of their behaviour.
+
+package Tie::StdHash;
+# @ISA = qw(Tie::Hash); # would inherit new() only
+
+sub TIEHASH { bless {}, $_[0] }
+sub STORE { $_[0]->{$_[1]} = $_[2] }
+sub FETCH { $_[0]->{$_[1]} }
+sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
+sub NEXTKEY { each %{$_[0]} }
+sub EXISTS { exists $_[0]->{$_[1]} }
+sub DELETE { delete $_[0]->{$_[1]} }
+sub CLEAR { %{$_[0]} = () }
+sub SCALAR { scalar %{$_[0]} }
+
+package Tie::ExtraHash;
+
+sub TIEHASH { my $p = shift; bless [{}, @_], $p }
+sub STORE { $_[0][0]{$_[1]} = $_[2] }
+sub FETCH { $_[0][0]{$_[1]} }
+sub FIRSTKEY { my $a = scalar keys %{$_[0][0]}; each %{$_[0][0]} }
+sub NEXTKEY { each %{$_[0][0]} }
+sub EXISTS { exists $_[0][0]->{$_[1]} }
+sub DELETE { delete $_[0][0]->{$_[1]} }
+sub CLEAR { %{$_[0][0]} = () }
+sub SCALAR { scalar %{$_[0][0]} }
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tie/Memoize.pm b/Master/tlpkg/tlperl/lib/Tie/Memoize.pm
new file mode 100644
index 00000000000..2793a04590d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/Memoize.pm
@@ -0,0 +1,128 @@
+use strict;
+package Tie::Memoize;
+use Tie::Hash;
+our @ISA = 'Tie::ExtraHash';
+our $VERSION = '1.0';
+
+our $exists_token = \undef;
+
+sub croak {require Carp; goto &Carp::croak}
+
+# Format: [0: STORAGE, 1: EXISTS-CACHE, 2: FETCH_function;
+# 3: EXISTS_function, 4: DATA, 5: EXISTS_different ]
+
+sub FETCH {
+ my ($h,$key) = ($_[0][0], $_[1]);
+ my $res = $h->{$key};
+ return $res if defined $res; # Shortcut if accessible
+ return $res if exists $h->{$key}; # Accessible, but undef
+ my $cache = $_[0][1]{$key};
+ return if defined $cache and not $cache; # Known to not exist
+ my @res = $_[0][2]->($key, $_[0][4]); # Autoload
+ $_[0][1]{$key} = 0, return unless @res; # Cache non-existence
+ delete $_[0][1]{$key}; # Clear existence cache, not needed any more
+ $_[0][0]{$key} = $res[0]; # Store data and return
+}
+
+sub EXISTS {
+ my ($a,$key) = (shift, shift);
+ return 1 if exists $a->[0]{$key}; # Have data
+ my $cache = $a->[1]{$key};
+ return $cache if defined $cache; # Existence cache
+ my @res = $a->[3]($key,$a->[4]);
+ $_[0][1]{$key} = 0, return unless @res; # Cache non-existence
+ # Now we know it exists
+ return ($_[0][1]{$key} = 1) if $a->[5]; # Only existence reported
+ # Now know the value
+ $_[0][0]{$key} = $res[0]; # Store data
+ return 1
+}
+
+sub TIEHASH {
+ croak 'syntax: tie %hash, \'Tie::AutoLoad\', \&fetch_subr' if @_ < 2;
+ croak 'syntax: tie %hash, \'Tie::AutoLoad\', \&fetch_subr, $data, \&exists_subr, \%data_cache, \%existence_cache' if @_ > 6;
+ push @_, undef if @_ < 3; # Data
+ push @_, $_[1] if @_ < 4; # exists
+ push @_, {} while @_ < 6; # initial value and caches
+ bless [ @_[4,5,1,3,2], $_[1] ne $_[3]], $_[0]
+}
+
+1;
+
+=head1 NAME
+
+Tie::Memoize - add data to hash when needed
+
+=head1 SYNOPSIS
+
+ require Tie::Memoize;
+ tie %hash, 'Tie::Memoize',
+ \&fetch, # The rest is optional
+ $DATA, \&exists,
+ {%ini_value}, {%ini_existence};
+
+=head1 DESCRIPTION
+
+This package allows a tied hash to autoload its values on the first access,
+and to use the cached value on the following accesses.
+
+Only read-accesses (via fetching the value or C<exists>) result in calls to
+the functions; the modify-accesses are performed as on a normal hash.
+
+The required arguments during C<tie> are the hash, the package, and
+the reference to the C<FETCH>ing function. The optional arguments are
+an arbitrary scalar $data, the reference to the C<EXISTS> function,
+and initial values of the hash and of the existence cache.
+
+Both the C<FETCH>ing function and the C<EXISTS> functions have the
+same signature: the arguments are C<$key, $data>; $data is the same
+value as given as argument during tie()ing. Both functions should
+return an empty list if the value does not exist. If C<EXISTS>
+function is different from the C<FETCH>ing function, it should return
+a TRUE value on success. The C<FETCH>ing function should return the
+intended value if the key is valid.
+
+=head1 Inheriting from B<Tie::Memoize>
+
+The structure of the tied() data is an array reference with elements
+
+ 0: cache of known values
+ 1: cache of known existence of keys
+ 2: FETCH function
+ 3: EXISTS function
+ 4: $data
+
+The rest is for internal usage of this package. In particular, if
+TIEHASH is overwritten, it should call SUPER::TIEHASH.
+
+=head1 EXAMPLE
+
+ sub slurp {
+ my ($key, $dir) = shift;
+ open my $h, '<', "$dir/$key" or return;
+ local $/; <$h> # slurp it all
+ }
+ sub exists { my ($key, $dir) = shift; return -f "$dir/$key" }
+
+ tie %hash, 'Tie::Memoize', \&slurp, $directory, \&exists,
+ { fake_file1 => $content1, fake_file2 => $content2 },
+ { pretend_does_not_exists => 0, known_to_exist => 1 };
+
+This example treats the slightly modified contents of $directory as a
+hash. The modifications are that the keys F<fake_file1> and
+F<fake_file2> fetch values $content1 and $content2, and
+F<pretend_does_not_exists> will never be accessed. Additionally, the
+existence of F<known_to_exist> is never checked (so if it does not
+exists when its content is needed, the user of %hash may be confused).
+
+=head1 BUGS
+
+FIRSTKEY and NEXTKEY methods go through the keys which were already read,
+not all the possible keys of the hash.
+
+=head1 AUTHOR
+
+Ilya Zakharevich L<mailto:perl-module-hash-memoize@ilyaz.org>.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tie/RefHash.pm b/Master/tlpkg/tlperl/lib/Tie/RefHash.pm
new file mode 100644
index 00000000000..cfcdd5b5a10
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/RefHash.pm
@@ -0,0 +1,170 @@
+package Tie::RefHash;
+
+our $VERSION = 1.32;
+
+=head1 NAME
+
+Tie::RefHash - use references as hash keys
+
+=head1 SYNOPSIS
+
+ require 5.004;
+ use Tie::RefHash;
+ tie HASHVARIABLE, 'Tie::RefHash', LIST;
+ tie HASHVARIABLE, 'Tie::RefHash::Nestable', LIST;
+
+ untie HASHVARIABLE;
+
+=head1 DESCRIPTION
+
+This module provides the ability to use references as hash keys if you
+first C<tie> the hash variable to this module. Normally, only the
+keys of the tied hash itself are preserved as references; to use
+references as keys in hashes-of-hashes, use Tie::RefHash::Nestable,
+included as part of Tie::RefHash.
+
+It is implemented using the standard perl TIEHASH interface. Please
+see the C<tie> entry in perlfunc(1) and perltie(1) for more information.
+
+The Nestable version works by looking for hash references being stored
+and converting them to tied hashes so that they too can have
+references as keys. This will happen without warning whenever you
+store a reference to one of your own hashes in the tied hash.
+
+=head1 EXAMPLE
+
+ use Tie::RefHash;
+ tie %h, 'Tie::RefHash';
+ $a = [];
+ $b = {};
+ $c = \*main;
+ $d = \"gunk";
+ $e = sub { 'foo' };
+ %h = ($a => 1, $b => 2, $c => 3, $d => 4, $e => 5);
+ $a->[0] = 'foo';
+ $b->{foo} = 'bar';
+ for (keys %h) {
+ print ref($_), "\n";
+ }
+
+ tie %h, 'Tie::RefHash::Nestable';
+ $h{$a}->{$b} = 1;
+ for (keys %h, keys %{$h{$a}}) {
+ print ref($_), "\n";
+ }
+
+=head1 AUTHOR
+
+Gurusamy Sarathy gsar@activestate.com
+
+'Nestable' by Ed Avis ed@membled.com
+
+=head1 VERSION
+
+Version 1.32
+
+=head1 SEE ALSO
+
+perl(1), perlfunc(1), perltie(1)
+
+=cut
+
+use Tie::Hash;
+use vars '@ISA';
+@ISA = qw(Tie::Hash);
+use strict;
+
+require overload; # to support objects with overloaded ""
+
+sub TIEHASH {
+ my $c = shift;
+ my $s = [];
+ bless $s, $c;
+ while (@_) {
+ $s->STORE(shift, shift);
+ }
+ return $s;
+}
+
+sub FETCH {
+ my($s, $k) = @_;
+ if (ref $k) {
+ my $kstr = overload::StrVal($k);
+ if (defined $s->[0]{$kstr}) {
+ $s->[0]{$kstr}[1];
+ }
+ else {
+ undef;
+ }
+ }
+ else {
+ $s->[1]{$k};
+ }
+}
+
+sub STORE {
+ my($s, $k, $v) = @_;
+ if (ref $k) {
+ $s->[0]{overload::StrVal($k)} = [$k, $v];
+ }
+ else {
+ $s->[1]{$k} = $v;
+ }
+ $v;
+}
+
+sub DELETE {
+ my($s, $k) = @_;
+ (ref $k)
+ ? (delete($s->[0]{overload::StrVal($k)}) || [])->[1]
+ : delete($s->[1]{$k});
+}
+
+sub EXISTS {
+ my($s, $k) = @_;
+ (ref $k) ? exists($s->[0]{overload::StrVal($k)}) : exists($s->[1]{$k});
+}
+
+sub FIRSTKEY {
+ my $s = shift;
+ keys %{$s->[0]}; # reset iterator
+ keys %{$s->[1]}; # reset iterator
+ $s->[2] = 0; # flag for iteration, see NEXTKEY
+ $s->NEXTKEY;
+}
+
+sub NEXTKEY {
+ my $s = shift;
+ my ($k, $v);
+ if (!$s->[2]) {
+ if (($k, $v) = each %{$s->[0]}) {
+ return $v->[0];
+ }
+ else {
+ $s->[2] = 1;
+ }
+ }
+ return each %{$s->[1]};
+}
+
+sub CLEAR {
+ my $s = shift;
+ $s->[2] = 0;
+ %{$s->[0]} = ();
+ %{$s->[1]} = ();
+}
+
+package Tie::RefHash::Nestable;
+use vars '@ISA';
+@ISA = 'Tie::RefHash';
+
+sub STORE {
+ my($s, $k, $v) = @_;
+ if (ref($v) eq 'HASH' and not tied %$v) {
+ my @elems = %$v;
+ tie %$v, ref($s), @elems;
+ }
+ $s->SUPER::STORE($k, $v);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tie/Scalar.pm b/Master/tlpkg/tlperl/lib/Tie/Scalar.pm
new file mode 100644
index 00000000000..c23c12187a8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/Scalar.pm
@@ -0,0 +1,140 @@
+package Tie::Scalar;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+Tie::Scalar, Tie::StdScalar - base class definitions for tied scalars
+
+=head1 SYNOPSIS
+
+ package NewScalar;
+ require Tie::Scalar;
+
+ @ISA = (Tie::Scalar);
+
+ sub FETCH { ... } # Provide a needed method
+ sub TIESCALAR { ... } # Overrides inherited method
+
+
+ package NewStdScalar;
+ require Tie::Scalar;
+
+ @ISA = (Tie::StdScalar);
+
+ # All methods provided by default, so define only what needs be overridden
+ sub FETCH { ... }
+
+
+ package main;
+
+ tie $new_scalar, 'NewScalar';
+ tie $new_std_scalar, 'NewStdScalar';
+
+=head1 DESCRIPTION
+
+This module provides some skeletal methods for scalar-tying classes. See
+L<perltie> for a list of the functions required in tying a scalar to a
+package. The basic B<Tie::Scalar> package provides a C<new> method, as well
+as methods C<TIESCALAR>, C<FETCH> and C<STORE>. The B<Tie::StdScalar>
+package provides all the methods specified in L<perltie>. It inherits from
+B<Tie::Scalar> and causes scalars tied to it to behave exactly like the
+built-in scalars, allowing for selective overloading of methods. The C<new>
+method is provided as a means of grandfathering, for classes that forget to
+provide their own C<TIESCALAR> method.
+
+For developers wishing to write their own tied-scalar classes, the methods
+are summarized below. The L<perltie> section not only documents these, but
+has sample code as well:
+
+=over 4
+
+=item TIESCALAR classname, LIST
+
+The method invoked by the command C<tie $scalar, classname>. Associates a new
+scalar instance with the specified class. C<LIST> would represent additional
+arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
+complete the association.
+
+=item FETCH this
+
+Retrieve the value of the tied scalar referenced by I<this>.
+
+=item STORE this, value
+
+Store data I<value> in the tied scalar referenced by I<this>.
+
+=item DESTROY this
+
+Free the storage associated with the tied scalar referenced by I<this>.
+This is rarely needed, as Perl manages its memory quite well. But the
+option exists, should a class wish to perform specific actions upon the
+destruction of an instance.
+
+=back
+
+=head1 MORE INFORMATION
+
+The L<perltie> section uses a good example of tying scalars by associating
+process IDs with priority.
+
+=cut
+
+use Carp;
+use warnings::register;
+
+sub new {
+ my $pkg = shift;
+ $pkg->TIESCALAR(@_);
+}
+
+# "Grandfather" the new, a la Tie::Hash
+
+sub TIESCALAR {
+ my $pkg = shift;
+ if ($pkg->can('new') and $pkg ne __PACKAGE__) {
+ warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIESCALAR is missing");
+ $pkg->new(@_);
+ }
+ else {
+ croak "$pkg doesn't define a TIESCALAR method";
+ }
+}
+
+sub FETCH {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a FETCH method";
+}
+
+sub STORE {
+ my $pkg = ref $_[0];
+ croak "$pkg doesn't define a STORE method";
+}
+
+#
+# The Tie::StdScalar package provides scalars that behave exactly like
+# Perl's built-in scalars. Good base to inherit from, if you're only going to
+# tweak a small bit.
+#
+package Tie::StdScalar;
+@ISA = (Tie::Scalar);
+
+sub TIESCALAR {
+ my $class = shift;
+ my $instance = shift || undef;
+ return bless \$instance => $class;
+}
+
+sub FETCH {
+ return ${$_[0]};
+}
+
+sub STORE {
+ ${$_[0]} = $_[1];
+}
+
+sub DESTROY {
+ undef ${$_[0]};
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tie/SubstrHash.pm b/Master/tlpkg/tlperl/lib/Tie/SubstrHash.pm
new file mode 100644
index 00000000000..476dd686787
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tie/SubstrHash.pm
@@ -0,0 +1,215 @@
+package Tie::SubstrHash;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+Tie::SubstrHash - Fixed-table-size, fixed-key-length hashing
+
+=head1 SYNOPSIS
+
+ require Tie::SubstrHash;
+
+ tie %myhash, 'Tie::SubstrHash', $key_len, $value_len, $table_size;
+
+=head1 DESCRIPTION
+
+The B<Tie::SubstrHash> package provides a hash-table-like interface to
+an array of determinate size, with constant key size and record size.
+
+Upon tying a new hash to this package, the developer must specify the
+size of the keys that will be used, the size of the value fields that the
+keys will index, and the size of the overall table (in terms of key-value
+pairs, not size in hard memory). I<These values will not change for the
+duration of the tied hash>. The newly-allocated hash table may now have
+data stored and retrieved. Efforts to store more than C<$table_size>
+elements will result in a fatal error, as will efforts to store a value
+not exactly C<$value_len> characters in length, or reference through a
+key not exactly C<$key_len> characters in length. While these constraints
+may seem excessive, the result is a hash table using much less internal
+memory than an equivalent freely-allocated hash table.
+
+=head1 CAVEATS
+
+Because the current implementation uses the table and key sizes for the
+hashing algorithm, there is no means by which to dynamically change the
+value of any of the initialization parameters.
+
+The hash does not support exists().
+
+=cut
+
+use Carp;
+
+sub TIEHASH {
+ my $pack = shift;
+ my ($klen, $vlen, $tsize) = @_;
+ my $rlen = 1 + $klen + $vlen;
+ $tsize = [$tsize,
+ findgteprime($tsize * 1.1)]; # Allow 10% empty.
+ local $self = bless ["\0", $klen, $vlen, $tsize, $rlen, 0, -1];
+ $$self[0] x= $rlen * $tsize->[1];
+ $self;
+}
+
+sub CLEAR {
+ local($self) = @_;
+ $$self[0] = "\0" x ($$self[4] * $$self[3]->[1]);
+ $$self[5] = 0;
+ $$self[6] = -1;
+}
+
+sub FETCH {
+ local($self,$key) = @_;
+ local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
+ &hashkey;
+ for (;;) {
+ $offset = $hash * $rlen;
+ $record = substr($$self[0], $offset, $rlen);
+ if (ord($record) == 0) {
+ return undef;
+ }
+ elsif (ord($record) == 1) {
+ }
+ elsif (substr($record, 1, $klen) eq $key) {
+ return substr($record, 1+$klen, $vlen);
+ }
+ &rehash;
+ }
+}
+
+sub STORE {
+ local($self,$key,$val) = @_;
+ local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
+ croak("Table is full ($tsize->[0] elements)") if $$self[5] > $tsize->[0];
+ croak(qq/Value "$val" is not $vlen characters long/)
+ if length($val) != $vlen;
+ my $writeoffset;
+
+ &hashkey;
+ for (;;) {
+ $offset = $hash * $rlen;
+ $record = substr($$self[0], $offset, $rlen);
+ if (ord($record) == 0) {
+ $record = "\2". $key . $val;
+ die "panic" unless length($record) == $rlen;
+ $writeoffset = $offset unless defined $writeoffset;
+ substr($$self[0], $writeoffset, $rlen) = $record;
+ ++$$self[5];
+ return;
+ }
+ elsif (ord($record) == 1) {
+ $writeoffset = $offset unless defined $writeoffset;
+ }
+ elsif (substr($record, 1, $klen) eq $key) {
+ $record = "\2". $key . $val;
+ die "panic" unless length($record) == $rlen;
+ substr($$self[0], $offset, $rlen) = $record;
+ return;
+ }
+ &rehash;
+ }
+}
+
+sub DELETE {
+ local($self,$key) = @_;
+ local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
+ &hashkey;
+ for (;;) {
+ $offset = $hash * $rlen;
+ $record = substr($$self[0], $offset, $rlen);
+ if (ord($record) == 0) {
+ return undef;
+ }
+ elsif (ord($record) == 1) {
+ }
+ elsif (substr($record, 1, $klen) eq $key) {
+ substr($$self[0], $offset, 1) = "\1";
+ return substr($record, 1+$klen, $vlen);
+ --$$self[5];
+ }
+ &rehash;
+ }
+}
+
+sub FIRSTKEY {
+ local($self) = @_;
+ $$self[6] = -1;
+ &NEXTKEY;
+}
+
+sub NEXTKEY {
+ local($self) = @_;
+ local($klen, $vlen, $tsize, $rlen, $entries, $iterix) = @$self[1..6];
+ for (++$iterix; $iterix < $tsize->[1]; ++$iterix) {
+ next unless substr($$self[0], $iterix * $rlen, 1) eq "\2";
+ $$self[6] = $iterix;
+ return substr($$self[0], $iterix * $rlen + 1, $klen);
+ }
+ $$self[6] = -1;
+ undef;
+}
+
+sub EXISTS {
+ croak "Tie::SubstrHash does not support exists()";
+}
+
+sub hashkey {
+ croak(qq/Key "$key" is not $klen characters long/)
+ if length($key) != $klen;
+ $hash = 2;
+ for (unpack('C*', $key)) {
+ $hash = $hash * 33 + $_;
+ &_hashwrap if $hash >= 1e13;
+ }
+ &_hashwrap if $hash >= $tsize->[1];
+ $hash = 1 unless $hash;
+ $hashbase = $hash;
+}
+
+sub _hashwrap {
+ $hash -= int($hash / $tsize->[1]) * $tsize->[1];
+}
+
+sub rehash {
+ $hash += $hashbase;
+ $hash -= $tsize->[1] if $hash >= $tsize->[1];
+}
+
+# using POSIX::ceil() would be too heavy, and not all platforms have it.
+sub ceil {
+ my $num = shift;
+ $num = int($num + 1) unless $num == int $num;
+ return $num;
+}
+
+# See:
+#
+# http://www-groups.dcs.st-andrews.ac.uk/~history/HistTopics/Prime_numbers.html
+#
+
+sub findgteprime { # find the smallest prime integer greater than or equal to
+ use integer;
+
+ my $num = ceil(shift);
+ return 2 if $num <= 2;
+
+ $num++ unless $num % 2;
+ my $i;
+ my $sqrtnum = int sqrt $num;
+ my $sqrtnumsquared = $sqrtnum * $sqrtnum;
+
+ NUM:
+ for (;; $num += 2) {
+ if ($sqrtnumsquared < $num) {
+ $sqrtnum++;
+ $sqrtnumsquared = $sqrtnum * $sqrtnum;
+ }
+ for ($i = 3; $i <= $sqrtnum; $i += 2) {
+ next NUM unless $num % $i;
+ }
+ return $num;
+ }
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Time/HiRes.pm b/Master/tlpkg/tlperl/lib/Time/HiRes.pm
new file mode 100644
index 00000000000..964e4385dfc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Time/HiRes.pm
@@ -0,0 +1,500 @@
+package Time::HiRes;
+
+use strict;
+use vars qw($VERSION $XS_VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader);
+
+@EXPORT = qw( );
+@EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
+ getitimer setitimer nanosleep clock_gettime clock_getres
+ clock clock_nanosleep
+ CLOCK_HIGHRES CLOCK_MONOTONIC CLOCK_PROCESS_CPUTIME_ID
+ CLOCK_REALTIME CLOCK_SOFTTIME CLOCK_THREAD_CPUTIME_ID
+ CLOCK_TIMEOFDAY CLOCKS_PER_SEC
+ ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF
+ TIMER_ABSTIME
+ d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
+ d_nanosleep d_clock_gettime d_clock_getres
+ d_clock d_clock_nanosleep);
+
+$VERSION = '1.86';
+$XS_VERSION = $VERSION;
+$VERSION = eval $VERSION;
+
+sub AUTOLOAD {
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ # print "AUTOLOAD: constname = $constname ($AUTOLOAD)\n";
+ die "&Time::HiRes::constant not defined" if $constname eq 'constant';
+ my ($error, $val) = constant($constname);
+ # print "AUTOLOAD: error = $error, val = $val\n";
+ if ($error) {
+ my (undef,$file,$line) = caller;
+ die "$error at $file line $line.\n";
+ }
+ {
+ no strict 'refs';
+ *$AUTOLOAD = sub { $val };
+ }
+ goto &$AUTOLOAD;
+}
+
+sub import {
+ my $this = shift;
+ for my $i (@_) {
+ if (($i eq 'clock_getres' && !&d_clock_getres) ||
+ ($i eq 'clock_gettime' && !&d_clock_gettime) ||
+ ($i eq 'clock_nanosleep' && !&d_clock_nanosleep) ||
+ ($i eq 'clock' && !&d_clock) ||
+ ($i eq 'nanosleep' && !&d_nanosleep) ||
+ ($i eq 'usleep' && !&d_usleep) ||
+ ($i eq 'ualarm' && !&d_ualarm)) {
+ require Carp;
+ Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
+ }
+ }
+ Time::HiRes->export_to_level(1, $this, @_);
+}
+
+bootstrap Time::HiRes;
+
+# Preloaded methods go here.
+
+sub tv_interval {
+ # probably could have been done in C
+ my ($a, $b) = @_;
+ $b = [gettimeofday()] unless defined($b);
+ (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000);
+}
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
+
+=head1 SYNOPSIS
+
+ use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
+ clock_gettime clock_getres clock_nanosleep clock );
+
+ usleep ($microseconds);
+ nanosleep ($nanoseconds);
+
+ ualarm ($microseconds);
+ ualarm ($microseconds, $interval_microseconds);
+
+ $t0 = [gettimeofday];
+ ($seconds, $microseconds) = gettimeofday;
+
+ $elapsed = tv_interval ( $t0, [$seconds, $microseconds]);
+ $elapsed = tv_interval ( $t0, [gettimeofday]);
+ $elapsed = tv_interval ( $t0 );
+
+ use Time::HiRes qw ( time alarm sleep );
+
+ $now_fractions = time;
+ sleep ($floating_seconds);
+ alarm ($floating_seconds);
+ alarm ($floating_seconds, $floating_interval);
+
+ use Time::HiRes qw( setitimer getitimer
+ ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF );
+
+ setitimer ($which, $floating_seconds, $floating_interval );
+ getitimer ($which);
+
+ $realtime = clock_gettime(CLOCK_REALTIME);
+ $resolution = clock_getres(CLOCK_REALTIME);
+
+ clock_nanosleep(CLOCK_REALTIME, 1.5);
+ clock_nanosleep(CLOCK_REALTIME, time() + 10, TIMER_ABSTIME);
+
+ my $ticktock = clock();
+
+=head1 DESCRIPTION
+
+The C<Time::HiRes> module implements a Perl interface to the
+C<usleep>, C<nanosleep>, C<ualarm>, C<gettimeofday>, and
+C<setitimer>/C<getitimer> system calls, in other words, high
+resolution time and timers. See the L</EXAMPLES> section below and the
+test scripts for usage; see your system documentation for the
+description of the underlying C<nanosleep> or C<usleep>, C<ualarm>,
+C<gettimeofday>, and C<setitimer>/C<getitimer> calls.
+
+If your system lacks C<gettimeofday()> or an emulation of it you don't
+get C<gettimeofday()> or the one-argument form of C<tv_interval()>.
+If your system lacks all of C<nanosleep()>, C<usleep()>,
+C<select()>, and C<poll>, you don't get C<Time::HiRes::usleep()>,
+C<Time::HiRes::nanosleep()>, or C<Time::HiRes::sleep()>.
+If your system lacks both C<ualarm()> and C<setitimer()> you don't get
+C<Time::HiRes::ualarm()> or C<Time::HiRes::alarm()>.
+
+If you try to import an unimplemented function in the C<use> statement
+it will fail at compile time.
+
+If your subsecond sleeping is implemented with C<nanosleep()> instead
+of C<usleep()>, you can mix subsecond sleeping with signals since
+C<nanosleep()> does not use signals. This, however, is not portable,
+and you should first check for the truth value of
+C<&Time::HiRes::d_nanosleep> to see whether you have nanosleep, and
+then carefully read your C<nanosleep()> C API documentation for any
+peculiarities.
+
+If you are using C<nanosleep> for something else than mixing sleeping
+with signals, give some thought to whether Perl is the tool you should
+be using for work requiring nanosecond accuracies.
+
+The following functions can be imported from this module.
+No functions are exported by default.
+
+=over 4
+
+=item gettimeofday ()
+
+In array context returns a two-element array with the seconds and
+microseconds since the epoch. In scalar context returns floating
+seconds like C<Time::HiRes::time()> (see below).
+
+=item usleep ( $useconds )
+
+Sleeps for the number of microseconds (millionths of a second)
+specified. Returns the number of microseconds actually slept. Can
+sleep for more than one second, unlike the C<usleep> system call. Can
+also sleep for zero seconds, which often works like a I<thread yield>.
+See also C<Time::HiRes::usleep()>, C<Time::HiRes::sleep()>, and
+C<Time::HiRes::clock_nanosleep()>.
+
+Do not expect usleep() to be exact down to one microsecond.
+
+=item nanosleep ( $nanoseconds )
+
+Sleeps for the number of nanoseconds (1e9ths of a second) specified.
+Returns the number of nanoseconds actually slept (accurate only to
+microseconds, the nearest thousand of them). Can sleep for more than
+one second. Can also sleep for zero seconds, which often works like a
+I<thread yield>. See also C<Time::HiRes::sleep()>,
+C<Time::HiRes::usleep()>, and C<Time::HiRes::clock_nanosleep()>.
+
+Do not expect nanosleep() to be exact down to one nanosecond.
+Getting even accuracy of one thousand nanoseconds is good.
+
+=item ualarm ( $useconds [, $interval_useconds ] )
+
+Issues a C<ualarm> call; the C<$interval_useconds> is optional and
+will be zero if unspecified, resulting in C<alarm>-like behaviour.
+
+Note that the interaction between alarms and sleeps is unspecified.
+
+=item tv_interval
+
+tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )
+
+Returns the floating seconds between the two times, which should have
+been returned by C<gettimeofday()>. If the second argument is omitted,
+then the current time is used.
+
+=item time ()
+
+Returns a floating seconds since the epoch. This function can be
+imported, resulting in a nice drop-in replacement for the C<time>
+provided with core Perl; see the L</EXAMPLES> below.
+
+B<NOTE 1>: This higher resolution timer can return values either less
+or more than the core C<time()>, depending on whether your platform
+rounds the higher resolution timer values up, down, or to the nearest second
+to get the core C<time()>, but naturally the difference should be never
+more than half a second. See also L</clock_getres>, if available
+in your system.
+
+B<NOTE 2>: Since Sunday, September 9th, 2001 at 01:46:40 AM GMT, when
+the C<time()> seconds since epoch rolled over to 1_000_000_000, the
+default floating point format of Perl and the seconds since epoch have
+conspired to produce an apparent bug: if you print the value of
+C<Time::HiRes::time()> you seem to be getting only five decimals, not
+six as promised (microseconds). Not to worry, the microseconds are
+there (assuming your platform supports such granularity in the first
+place). What is going on is that the default floating point format of
+Perl only outputs 15 digits. In this case that means ten digits
+before the decimal separator and five after. To see the microseconds
+you can use either C<printf>/C<sprintf> with C<"%.6f">, or the
+C<gettimeofday()> function in list context, which will give you the
+seconds and microseconds as two separate values.
+
+=item sleep ( $floating_seconds )
+
+Sleeps for the specified amount of seconds. Returns the number of
+seconds actually slept (a floating point value). This function can
+be imported, resulting in a nice drop-in replacement for the C<sleep>
+provided with perl, see the L</EXAMPLES> below.
+
+Note that the interaction between alarms and sleeps is unspecified.
+
+=item alarm ( $floating_seconds [, $interval_floating_seconds ] )
+
+The C<SIGALRM> signal is sent after the specified number of seconds.
+Implemented using C<ualarm()>. The C<$interval_floating_seconds> argument
+is optional and will be zero if unspecified, resulting in C<alarm()>-like
+behaviour. This function can be imported, resulting in a nice drop-in
+replacement for the C<alarm> provided with perl, see the L</EXAMPLES> below.
+
+B<NOTE 1>: With some combinations of operating systems and Perl
+releases C<SIGALRM> restarts C<select()>, instead of interrupting it.
+This means that an C<alarm()> followed by a C<select()> may together
+take the sum of the times specified for the the C<alarm()> and the
+C<select()>, not just the time of the C<alarm()>.
+
+Note that the interaction between alarms and sleeps is unspecified.
+
+=item setitimer ( $which, $floating_seconds [, $interval_floating_seconds ] )
+
+Start up an interval timer: after a certain time, a signal arrives,
+and more signals may keep arriving at certain intervals. To disable
+an "itimer", use C<$floating_seconds> of zero. If the
+C<$interval_floating_seconds> is set to zero (or unspecified), the
+timer is disabled B<after> the next delivered signal.
+
+Use of interval timers may interfere with C<alarm()>, C<sleep()>,
+and C<usleep()>. In standard-speak the "interaction is unspecified",
+which means that I<anything> may happen: it may work, it may not.
+
+In scalar context, the remaining time in the timer is returned.
+
+In list context, both the remaining time and the interval are returned.
+
+There are usually three or four interval timers available: the
+C<$which> can be C<ITIMER_REAL>, C<ITIMER_VIRTUAL>, C<ITIMER_PROF>, or
+C<ITIMER_REALPROF>. Note that which ones are available depends: true
+UNIX platforms usually have the first three, but (for example) Win32
+and Cygwin have only C<ITIMER_REAL>, and only Solaris seems to have
+C<ITIMER_REALPROF> (which is used to profile multithreaded programs).
+
+C<ITIMER_REAL> results in C<alarm()>-like behaviour. Time is counted in
+I<real time>; that is, wallclock time. C<SIGALRM> is delivered when
+the timer expires.
+
+C<ITIMER_VIRTUAL> counts time in (process) I<virtual time>; that is,
+only when the process is running. In multiprocessor/user/CPU systems
+this may be more or less than real or wallclock time. (This time is
+also known as the I<user time>.) C<SIGVTALRM> is delivered when the
+timer expires.
+
+C<ITIMER_PROF> counts time when either the process virtual time or when
+the operating system is running on behalf of the process (such as I/O).
+(This time is also known as the I<system time>.) (The sum of user
+time and system time is known as the I<CPU time>.) C<SIGPROF> is
+delivered when the timer expires. C<SIGPROF> can interrupt system calls.
+
+The semantics of interval timers for multithreaded programs are
+system-specific, and some systems may support additional interval
+timers. See your C<setitimer()> documentation.
+
+=item getitimer ( $which )
+
+Return the remaining time in the interval timer specified by C<$which>.
+
+In scalar context, the remaining time is returned.
+
+In list context, both the remaining time and the interval are returned.
+The interval is always what you put in using C<setitimer()>.
+
+=item clock_gettime ( $which )
+
+Return as seconds the current value of the POSIX high resolution timer
+specified by C<$which>. All implementations that support POSIX high
+resolution timers are supposed to support at least the C<$which> value
+of C<CLOCK_REALTIME>, which is supposed to return results close to the
+results of C<gettimeofday>, or the number of seconds since 00:00:00:00
+January 1, 1970 Greenwich Mean Time (GMT). Do not assume that
+CLOCK_REALTIME is zero, it might be one, or something else.
+Another potentially useful (but not available everywhere) value is
+C<CLOCK_MONOTONIC>, which guarantees a monotonically increasing time
+value (unlike time(), which can be adjusted). See your system
+documentation for other possibly supported values.
+
+=item clock_getres ( $which )
+
+Return as seconds the resolution of the POSIX high resolution timer
+specified by C<$which>. All implementations that support POSIX high
+resolution timers are supposed to support at least the C<$which> value
+of C<CLOCK_REALTIME>, see L</clock_gettime>.
+
+=item clock_nanosleep ( $which, $seconds, $flags = 0)
+
+Sleeps for the number of seconds (1e9ths of a second) specified.
+Returns the number of seconds actually slept. The $which is the
+"clock id", as with clock_gettime() and clock_getres(). The flags
+default to zero but C<TIMER_ABSTIME> can specified (must be exported
+explicitly) which means that C<$nanoseconds> is not a time interval
+(as is the default) but instead an absolute time. Can sleep for more
+than one second. Can also sleep for zero seconds, which often works
+like a I<thread yield>. See also C<Time::HiRes::sleep()>,
+C<Time::HiRes::usleep()>, and C<Time::HiRes::nanosleep()>.
+
+Do not expect clock_nanosleep() to be exact down to one nanosecond.
+Getting even accuracy of one thousand nanoseconds is good.
+
+=item clock()
+
+Return as seconds the I<process time> (user + system time) spent by
+the process since the first call to clock() (the definition is B<not>
+"since the start of the process", though if you are lucky these times
+may be quite close to each other, depending on the system). What this
+means is that you probably need to store the result of your first call
+to clock(), and subtract that value from the following results of clock().
+
+The time returned also includes the process times of the terminated
+child processes for which wait() has been executed. This value is
+somewhat like the second value returned by the times() of core Perl,
+but not necessarily identical. Note that due to backward
+compatibility limitations the returned value may wrap around at about
+2147 seconds or at about 36 minutes.
+
+=back
+
+=head1 EXAMPLES
+
+ use Time::HiRes qw(usleep ualarm gettimeofday tv_interval);
+
+ $microseconds = 750_000;
+ usleep($microseconds);
+
+ # signal alarm in 2.5s & every .1s thereafter
+ ualarm(2_500_000, 100_000);
+
+ # get seconds and microseconds since the epoch
+ ($s, $usec) = gettimeofday();
+
+ # measure elapsed time
+ # (could also do by subtracting 2 gettimeofday return values)
+ $t0 = [gettimeofday];
+ # do bunch of stuff here
+ $t1 = [gettimeofday];
+ # do more stuff here
+ $t0_t1 = tv_interval $t0, $t1;
+
+ $elapsed = tv_interval ($t0, [gettimeofday]);
+ $elapsed = tv_interval ($t0); # equivalent code
+
+ #
+ # replacements for time, alarm and sleep that know about
+ # floating seconds
+ #
+ use Time::HiRes;
+ $now_fractions = Time::HiRes::time;
+ Time::HiRes::sleep (2.5);
+ Time::HiRes::alarm (10.6666666);
+
+ use Time::HiRes qw ( time alarm sleep );
+ $now_fractions = time;
+ sleep (2.5);
+ alarm (10.6666666);
+
+ # Arm an interval timer to go off first at 10 seconds and
+ # after that every 2.5 seconds, in process virtual time
+
+ use Time::HiRes qw ( setitimer ITIMER_VIRTUAL time );
+
+ $SIG{VTALRM} = sub { print time, "\n" };
+ setitimer(ITIMER_VIRTUAL, 10, 2.5);
+
+ use Time::HiRes qw( clock_gettime clock_getres CLOCK_REALTIME );
+ # Read the POSIX high resolution timer.
+ my $high = clock_getres(CLOCK_REALTIME);
+ # But how accurate we can be, really?
+ my $reso = clock_getres(CLOCK_REALTIME);
+
+ use Time::HiRes qw( clock_nanosleep TIMER_ABSTIME );
+ clock_nanosleep(CLOCK_REALTIME, 1e6);
+ clock_nanosleep(CLOCK_REALTIME, 2e9, TIMER_ABSTIME);
+
+ use Time::HiRes qw( clock );
+ my $clock0 = clock();
+ ... # Do something.
+ my $clock1 = clock();
+ my $clockd = $clock1 - $clock0;
+
+=head1 C API
+
+In addition to the perl API described above, a C API is available for
+extension writers. The following C functions are available in the
+modglobal hash:
+
+ name C prototype
+ --------------- ----------------------
+ Time::NVtime double (*)()
+ Time::U2time void (*)(pTHX_ UV ret[2])
+
+Both functions return equivalent information (like C<gettimeofday>)
+but with different representations. The names C<NVtime> and C<U2time>
+were selected mainly because they are operating system independent.
+(C<gettimeofday> is Unix-centric, though some platforms like Win32 and
+VMS have emulations for it.)
+
+Here is an example of using C<NVtime> from C:
+
+ double (*myNVtime)(); /* Returns -1 on failure. */
+ SV **svp = hv_fetch(PL_modglobal, "Time::NVtime", 12, 0);
+ if (!svp) croak("Time::HiRes is required");
+ if (!SvIOK(*svp)) croak("Time::NVtime isn't a function pointer");
+ myNVtime = INT2PTR(double(*)(), SvIV(*svp));
+ printf("The current time is: %f\n", (*myNVtime)());
+
+=head1 DIAGNOSTICS
+
+=head2 negative time not invented yet
+
+You tried to use a negative time argument.
+
+=head2 internal error: useconds < 0 (unsigned ... signed ...)
+
+Something went horribly wrong-- the number of microseconds that cannot
+become negative just became negative. Maybe your compiler is broken?
+
+=head1 CAVEATS
+
+Notice that the core C<time()> maybe rounding rather than truncating.
+What this means is that the core C<time()> may be reporting the time
+as one second later than C<gettimeofday()> and C<Time::HiRes::time()>.
+
+Adjusting the system clock (either manually or by services like ntp)
+may cause problems, especially for long running programs that assume
+a monotonously increasing time (note that all platforms do not adjust
+time as gracefully as UNIX ntp does). For example in Win32 (and derived
+platforms like Cygwin and MinGW) the Time::HiRes::time() may temporarily
+drift off from the system clock (and the original time()) by up to 0.5
+seconds. Time::HiRes will notice this eventually and recalibrate.
+Note that since Time::HiRes 1.77 the clock_gettime(CLOCK_MONOTONIC)
+might help in this (in case your system supports CLOCK_MONOTONIC).
+
+=head1 SEE ALSO
+
+Perl modules L<BSD::Resource>, L<Time::TAI64>.
+
+Your system documentation for C<clock_gettime>, C<clock_settime>,
+C<gettimeofday>, C<getitimer>, C<setitimer>, C<ualarm>.
+
+=head1 AUTHORS
+
+D. Wegscheid <wegscd@whirlpool.com>
+R. Schertler <roderick@argon.org>
+J. Hietaniemi <jhi@iki.fi>
+G. Aas <gisle@aas.no>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 1996-2002 Douglas E. Wegscheid. All rights reserved.
+
+Copyright (c) 2002, 2003, 2004, 2005 Jarkko Hietaniemi. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Time/Local.pm b/Master/tlpkg/tlperl/lib/Time/Local.pm
new file mode 100644
index 00000000000..912f17d0310
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Time/Local.pm
@@ -0,0 +1,366 @@
+package Time::Local;
+
+require Exporter;
+use Carp;
+use Config;
+use strict;
+use integer;
+
+use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK );
+$VERSION = '1.11';
+$VERSION = eval $VERSION;
+@ISA = qw( Exporter );
+@EXPORT = qw( timegm timelocal );
+@EXPORT_OK = qw( timegm_nocheck timelocal_nocheck );
+
+my @MonthDays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+
+# Determine breakpoint for rolling century
+my $ThisYear = (localtime())[5];
+my $Breakpoint = ($ThisYear + 50) % 100;
+my $NextCentury = $ThisYear - $ThisYear % 100;
+ $NextCentury += 100 if $Breakpoint < 50;
+my $Century = $NextCentury - 100;
+my $SecOff = 0;
+
+my (%Options, %Cheat, %Min, %Max);
+my ($MinInt, $MaxInt);
+
+if ($^O eq 'MacOS') {
+ # time_t is unsigned...
+ $MaxInt = (1 << (8 * $Config{intsize})) - 1;
+ $MinInt = 0;
+} else {
+ $MaxInt = ((1 << (8 * $Config{intsize} - 2))-1)*2 + 1;
+ $MinInt = -$MaxInt - 1;
+
+ # On Win32 (and others?) time_t appears to be signed, but negative
+ # epochs still don't work. - XXX - this is experimental
+ $MinInt = 0
+ unless defined ((localtime(-1))[0]);
+}
+
+$Max{Day} = ($MaxInt >> 1) / 43200;
+$Min{Day} = $MinInt ? -($Max{Day} + 1) : 0;
+
+$Max{Sec} = $MaxInt - 86400 * $Max{Day};
+$Min{Sec} = $MinInt - 86400 * $Min{Day};
+
+# Determine the EPOC day for this machine
+my $Epoc = 0;
+if ($^O eq 'vos') {
+# work around posix-977 -- VOS doesn't handle dates in
+# the range 1970-1980.
+ $Epoc = _daygm((0, 0, 0, 1, 0, 70, 4, 0));
+}
+elsif ($^O eq 'MacOS') {
+ no integer;
+
+ # MacOS time() is seconds since 1 Jan 1904, localtime
+ # so we need to calculate an offset to apply later
+ $Epoc = 693901;
+ $SecOff = timelocal(localtime(0)) - timelocal(gmtime(0));
+ $Epoc += _daygm(gmtime(0));
+}
+else {
+ $Epoc = _daygm(gmtime(0));
+}
+
+%Cheat=(); # clear the cache as epoc has changed
+
+sub _daygm {
+ $_[3] + ($Cheat{pack("ss",@_[4,5])} ||= do {
+ my $month = ($_[4] + 10) % 12;
+ my $year = $_[5] + 1900 - $month/10;
+ 365*$year + $year/4 - $year/100 + $year/400 + ($month*306 + 5)/10 - $Epoc
+ });
+}
+
+
+sub _timegm {
+ my $sec = $SecOff + $_[0] + 60 * $_[1] + 3600 * $_[2];
+
+ no integer;
+
+ $sec + 86400 * &_daygm;
+}
+
+
+sub _zoneadjust {
+ my ($day, $sec, $time) = @_;
+
+ $sec = $sec + _timegm(localtime($time)) - $time;
+ if ($sec >= 86400) { $day++; $sec -= 86400; }
+ if ($sec < 0) { $day--; $sec += 86400; }
+
+ ($day, $sec);
+}
+
+
+sub timegm {
+ my ($sec,$min,$hour,$mday,$month,$year) = @_;
+
+ if ($year >= 1000) {
+ $year -= 1900;
+ }
+ elsif ($year < 100 and $year >= 0) {
+ $year += ($year > $Breakpoint) ? $Century : $NextCentury;
+ }
+
+ unless ($Options{no_range_check}) {
+ if (abs($year) >= 0x7fff) {
+ $year += 1900;
+ croak "Cannot handle date ($sec, $min, $hour, $mday, $month, *$year*)";
+ }
+
+ croak "Month '$month' out of range 0..11" if $month > 11 or $month < 0;
+
+ my $md = $MonthDays[$month];
+# ++$md if $month == 1 and $year % 4 == 0 and
+# ($year % 100 != 0 or ($year + 1900) % 400 == 0);
+ ++$md unless $month != 1 or $year % 4 or !($year % 400);
+
+ croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1;
+ croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0;
+ croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0;
+ croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0;
+ }
+
+ my $days = _daygm(undef, undef, undef, $mday, $month, $year);
+ my $xsec = $sec + $SecOff + 60*$min + 3600*$hour;
+
+ unless ($Options{no_range_check}
+ or ($days > $Min{Day} or $days == $Min{Day} and $xsec >= $Min{Sec})
+ and ($days < $Max{Day} or $days == $Max{Day} and $xsec <= $Max{Sec}))
+ {
+ warn "Day too small - $days > $Min{Day}\n" if $days < $Min{Day};
+ warn "Day too big - $days > $Max{Day}\n" if $days > $Max{Day};
+ warn "Sec too small - $days < $Min{Sec}\n" if $days < $Min{Sec};
+ warn "Sec too big - $days > $Max{Sec}\n" if $days > $Max{Sec};
+ $year += 1900;
+ croak "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
+ }
+
+ no integer;
+
+ $xsec + 86400 * $days;
+}
+
+
+sub timegm_nocheck {
+ local $Options{no_range_check} = 1;
+ &timegm;
+}
+
+
+sub timelocal {
+ # Adjust Max/Min allowed times to fit local time zone and call timegm
+ local ($Max{Day}, $Max{Sec}) = _zoneadjust($Max{Day}, $Max{Sec}, $MaxInt);
+ local ($Min{Day}, $Min{Sec}) = _zoneadjust($Min{Day}, $Min{Sec}, $MinInt);
+ my $ref_t = &timegm;
+
+ # Calculate first guess with a one-day delta to avoid localtime overflow
+ my $delta = ($_[5] < 100)? 86400 : -86400;
+ my $loc_t = _timegm(localtime( $ref_t + $delta )) - $delta;
+
+ # Is there a timezone offset from GMT or are we done
+ my $zone_off = $ref_t - $loc_t
+ or return $loc_t;
+
+ # This hack is needed to always pick the first matching time
+ # during a DST change when time would otherwise be ambiguous
+ $zone_off -= 3600 if ($delta > 0 && $ref_t >= 3600);
+
+ # Adjust for timezone
+ $loc_t = $ref_t + $zone_off;
+
+ # Are we close to a DST change or are we done
+ my $dst_off = $ref_t - _timegm(localtime($loc_t))
+ or return $loc_t;
+
+ # Adjust for DST change
+ $loc_t += $dst_off;
+
+ return $loc_t if $dst_off >= 0;
+
+ # for a negative offset from GMT, and if the original date
+ # was a non-extent gap in a forward DST jump, we should
+ # now have the wrong answer - undo the DST adjust;
+
+ my ($s,$m,$h) = localtime($loc_t);
+ $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2];
+
+ $loc_t;
+}
+
+
+sub timelocal_nocheck {
+ local $Options{no_range_check} = 1;
+ &timelocal;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Time::Local - efficiently compute time from local and GMT time
+
+=head1 SYNOPSIS
+
+ $time = timelocal($sec,$min,$hour,$mday,$mon,$year);
+ $time = timegm($sec,$min,$hour,$mday,$mon,$year);
+
+=head1 DESCRIPTION
+
+These routines are the inverse of built-in perl functions localtime()
+and gmtime(). They accept a date as a six-element array, and return
+the corresponding time(2) value in seconds since the system epoch
+(Midnight, January 1, 1970 GMT on Unix, for example). This value can
+be positive or negative, though POSIX only requires support for
+positive values, so dates before the system's epoch may not work on
+all operating systems.
+
+It is worth drawing particular attention to the expected ranges for
+the values provided. The value for the day of the month is the actual day
+(ie 1..31), while the month is the number of months since January (0..11).
+This is consistent with the values returned from localtime() and gmtime().
+
+The timelocal() and timegm() functions perform range checking on the
+input $sec, $min, $hour, $mday, and $mon values by default. If you'd
+rather they didn't, you can explicitly import the timelocal_nocheck()
+and timegm_nocheck() functions.
+
+ use Time::Local 'timelocal_nocheck';
+
+ {
+ # The 365th day of 1999
+ print scalar localtime timelocal_nocheck 0,0,0,365,0,99;
+
+ # The twenty thousandth day since 1970
+ print scalar localtime timelocal_nocheck 0,0,0,20000,0,70;
+
+ # And even the 10,000,000th second since 1999!
+ print scalar localtime timelocal_nocheck 10000000,0,0,1,0,99;
+ }
+
+Your mileage may vary when trying these with minutes and hours,
+and it doesn't work at all for months.
+
+Strictly speaking, the year should also be specified in a form consistent
+with localtime(), i.e. the offset from 1900.
+In order to make the interpretation of the year easier for humans,
+however, who are more accustomed to seeing years as two-digit or four-digit
+values, the following conventions are followed:
+
+=over 4
+
+=item *
+
+Years greater than 999 are interpreted as being the actual year,
+rather than the offset from 1900. Thus, 1964 would indicate the year
+Martin Luther King won the Nobel prize, not the year 3864.
+
+=item *
+
+Years in the range 100..999 are interpreted as offset from 1900,
+so that 112 indicates 2012. This rule also applies to years less than zero
+(but see note below regarding date range).
+
+=item *
+
+Years in the range 0..99 are interpreted as shorthand for years in the
+rolling "current century," defined as 50 years on either side of the current
+year. Thus, today, in 1999, 0 would refer to 2000, and 45 to 2045,
+but 55 would refer to 1955. Twenty years from now, 55 would instead refer
+to 2055. This is messy, but matches the way people currently think about
+two digit dates. Whenever possible, use an absolute four digit year instead.
+
+=back
+
+The scheme above allows interpretation of a wide range of dates, particularly
+if 4-digit years are used.
+
+Please note, however, that the range of dates that can be actually be handled
+depends on the size of an integer (time_t) on a given platform.
+Currently, this is 32 bits for most systems, yielding an approximate range
+from Dec 1901 to Jan 2038.
+
+Both timelocal() and timegm() croak if given dates outside the supported
+range.
+
+=head2 Ambiguous Local Times (DST)
+
+Because of DST changes, there are many time zones where the same local
+time occurs for two different GMT times on the same day. For example,
+in the "Europe/Paris" time zone, the local time of 2001-10-28 02:30:00
+can represent either 2001-10-28 00:30:00 GMT, B<or> 2001-10-28
+01:30:00 GMT.
+
+When given an ambiguous local time, the timelocal() function should
+always return the epoch for the I<earlier> of the two possible GMT
+times.
+
+=head2 Non-Existent Local Times (DST)
+
+When a DST change causes a locale clock to skip one hour forward,
+there will be an hour's worth of local times that don't exist. Again,
+for the "Europe/Paris" time zone, the local clock jumped from
+2001-03-25 01:59:59 to 2001-03-25 03:00:00.
+
+If the timelocal() function is given a non-existent local time, it
+will simply return an epoch value for the time one hour later.
+
+=head2 Negative Epoch Values
+
+Negative epoch (time_t) values are not officially supported by the
+POSIX standards, so this module's tests do not test them. On some
+systems, they are known not to work. These include MacOS (pre-OSX)
+and Win32.
+
+On systems which do support negative epoch values, this module should
+be able to cope with dates before the start of the epoch, down the
+minimum value of time_t for the system.
+
+=head1 IMPLEMENTATION
+
+These routines are quite efficient and yet are always guaranteed to agree
+with localtime() and gmtime(). We manage this by caching the start times
+of any months we've seen before. If we know the start time of the month,
+we can always calculate any time within the month. The start times
+are calculated using a mathematical formula. Unlike other algorithms
+that do multiple calls to gmtime().
+
+timelocal() is implemented using the same cache. We just assume that we're
+translating a GMT time, and then fudge it when we're done for the timezone
+and daylight savings arguments. Note that the timezone is evaluated for
+each date because countries occasionally change their official timezones.
+Assuming that localtime() corrects for these changes, this routine will
+also be correct.
+
+=head1 BUGS
+
+The whole scheme for interpreting two-digit years can be considered a bug.
+
+=head1 SUPPORT
+
+Support for this module is provided via the datetime@perl.org
+email list. See http://lists.perl.org/ for more details.
+
+Please submit bugs using the RT system at rt.cpan.org, or as a last
+resort, to the datetime@perl.org list.
+
+=head1 AUTHOR
+
+This module is based on a Perl 4 library, timelocal.pl, that was
+included with Perl 4.036, and was most likely written by Tom
+Christiansen.
+
+The current version was written by Graham Barr.
+
+It is now being maintained separately from the Perl core by Dave
+Rolsky, <autarch@urth.org>.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Time/gmtime.pm b/Master/tlpkg/tlperl/lib/Time/gmtime.pm
new file mode 100644
index 00000000000..4e1359b36d9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Time/gmtime.pm
@@ -0,0 +1,90 @@
+package Time::gmtime;
+use strict;
+use 5.006_001;
+
+use Time::tm;
+
+our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
+BEGIN {
+ use Exporter ();
+ @ISA = qw(Exporter Time::tm);
+ @EXPORT = qw(gmtime gmctime);
+ @EXPORT_OK = qw(
+ $tm_sec $tm_min $tm_hour $tm_mday
+ $tm_mon $tm_year $tm_wday $tm_yday
+ $tm_isdst
+ );
+ %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
+ $VERSION = 1.02;
+}
+use vars @EXPORT_OK;
+
+sub populate (@) {
+ return unless @_;
+ my $tmob = Time::tm->new();
+ @$tmob = (
+ $tm_sec, $tm_min, $tm_hour, $tm_mday,
+ $tm_mon, $tm_year, $tm_wday, $tm_yday,
+ $tm_isdst )
+ = @_;
+ return $tmob;
+}
+
+sub gmtime (;$) { populate CORE::gmtime(@_ ? shift : time)}
+sub gmctime (;$) { scalar CORE::gmtime(@_ ? shift : time)}
+
+1;
+__END__
+
+=head1 NAME
+
+Time::gmtime - by-name interface to Perl's built-in gmtime() function
+
+=head1 SYNOPSIS
+
+ use Time::gmtime;
+ $gm = gmtime();
+ printf "The day in Greenwich is %s\n",
+ (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ gm->wday() ];
+
+ use Time::gmtime w(:FIELDS;
+ printf "The day in Greenwich is %s\n",
+ (qw(Sun Mon Tue Wed Thu Fri Sat Sun))[ gm_wday() ];
+
+ $now = gmctime();
+
+ use Time::gmtime;
+ use File::stat;
+ $date_string = gmctime(stat($file)->mtime);
+
+=head1 DESCRIPTION
+
+This module's default exports override the core gmtime() function,
+replacing it with a version that returns "Time::tm" objects.
+This object has methods that return the similarly named structure field
+name from the C's tm structure from F<time.h>; namely sec, min, hour,
+mday, mon, year, wday, yday, and isdst.
+
+You may also import all the structure fields directly into your namespace
+as regular variables using the :FIELDS import tag. (Note that this
+still overrides your core functions.) Access these fields as variables
+named with a preceding C<tm_> in front their method names. Thus,
+C<$tm_obj-E<gt>mday()> corresponds to $tm_mday if you import the fields.
+
+The gmctime() function provides a way of getting at the
+scalar sense of the original CORE::gmtime() function.
+
+To access this functionality without the core overrides,
+pass the C<use> an empty import list, and then access
+function functions with their full qualified names.
+On the other hand, the built-ins are still available
+via the C<CORE::> pseudo-package.
+
+=head1 NOTE
+
+While this class is currently implemented using the Class::Struct
+module to build a struct-like class, you shouldn't rely upon this.
+
+=head1 AUTHOR
+
+Tom Christiansen
diff --git a/Master/tlpkg/tlperl/lib/Time/localtime.pm b/Master/tlpkg/tlperl/lib/Time/localtime.pm
new file mode 100644
index 00000000000..c3d9fb36085
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Time/localtime.pm
@@ -0,0 +1,86 @@
+package Time::localtime;
+use strict;
+use 5.006_001;
+
+use Time::tm;
+
+our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
+BEGIN {
+ use Exporter ();
+ @ISA = qw(Exporter Time::tm);
+ @EXPORT = qw(localtime ctime);
+ @EXPORT_OK = qw(
+ $tm_sec $tm_min $tm_hour $tm_mday
+ $tm_mon $tm_year $tm_wday $tm_yday
+ $tm_isdst
+ );
+ %EXPORT_TAGS = ( FIELDS => [ @EXPORT_OK, @EXPORT ] );
+ $VERSION = 1.02;
+}
+use vars @EXPORT_OK;
+
+sub populate (@) {
+ return unless @_;
+ my $tmob = Time::tm->new();
+ @$tmob = (
+ $tm_sec, $tm_min, $tm_hour, $tm_mday,
+ $tm_mon, $tm_year, $tm_wday, $tm_yday,
+ $tm_isdst )
+ = @_;
+ return $tmob;
+}
+
+sub localtime (;$) { populate CORE::localtime(@_ ? shift : time)}
+sub ctime (;$) { scalar CORE::localtime(@_ ? shift : time) }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Time::localtime - by-name interface to Perl's built-in localtime() function
+
+=head1 SYNOPSIS
+
+ use Time::localtime;
+ printf "Year is %d\n", localtime->year() + 1900;
+
+ $now = ctime();
+
+ use Time::localtime;
+ use File::stat;
+ $date_string = ctime(stat($file)->mtime);
+
+=head1 DESCRIPTION
+
+This module's default exports override the core localtime() function,
+replacing it with a version that returns "Time::tm" objects.
+This object has methods that return the similarly named structure field
+name from the C's tm structure from F<time.h>; namely sec, min, hour,
+mday, mon, year, wday, yday, and isdst.
+
+You may also import all the structure fields directly into your namespace
+as regular variables using the :FIELDS import tag. (Note that this still
+overrides your core functions.) Access these fields as
+variables named with a preceding C<tm_> in front their method names.
+Thus, C<$tm_obj-E<gt>mday()> corresponds to $tm_mday if you import
+the fields.
+
+The ctime() function provides a way of getting at the
+scalar sense of the original CORE::localtime() function.
+
+To access this functionality without the core overrides,
+pass the C<use> an empty import list, and then access
+function functions with their full qualified names.
+On the other hand, the built-ins are still available
+via the C<CORE::> pseudo-package.
+
+=head1 NOTE
+
+While this class is currently implemented using the Class::Struct
+module to build a struct-like class, you shouldn't rely upon this.
+
+=head1 AUTHOR
+
+Tom Christiansen
diff --git a/Master/tlpkg/tlperl/lib/Time/tm.pm b/Master/tlpkg/tlperl/lib/Time/tm.pm
new file mode 100644
index 00000000000..2c308ebb411
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Time/tm.pm
@@ -0,0 +1,33 @@
+package Time::tm;
+use strict;
+
+our $VERSION = '1.00';
+
+use Class::Struct qw(struct);
+struct('Time::tm' => [
+ map { $_ => '$' } qw{ sec min hour mday mon year wday yday isdst }
+]);
+
+1;
+__END__
+
+=head1 NAME
+
+Time::tm - internal object used by Time::gmtime and Time::localtime
+
+=head1 SYNOPSIS
+
+Don't use this module directly.
+
+=head1 DESCRIPTION
+
+This module is used internally as a base class by Time::localtime And
+Time::gmtime functions. It creates a Time::tm struct object which is
+addressable just like's C's tm structure from F<time.h>; namely with sec,
+min, hour, mday, mon, year, wday, yday, and isdst.
+
+This class is an internal interface only.
+
+=head1 AUTHOR
+
+Tom Christiansen
diff --git a/Master/tlpkg/tlperl/lib/Tk.pm b/Master/tlpkg/tlperl/lib/Tk.pm
new file mode 100644
index 00000000000..deb453172eb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk.pm
@@ -0,0 +1,821 @@
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in Tk/license.terms due to partial
+# derivation from Tk8.0 sources.
+#
+package Tk;
+require 5.007;
+use Tk::Event ();
+use AutoLoader qw(AUTOLOAD);
+use DynaLoader;
+use Cwd();
+use base qw(Exporter DynaLoader);
+
+*fileevent = \&Tk::Event::IO::fileevent;
+
+use Encode;
+$Tk::encodeStopOnError = Encode::FB_QUIET();
+$Tk::encodeFallback = Encode::FB_PERLQQ(); # Encode::FB_DEFAULT();
+
+our %font_encoding = ('jis0208' => 'jis0208-raw',
+ 'jis0212' => 'jis0212-raw',
+ 'ksc5601' => 'ksc5601-raw',
+ 'gb2312' => 'gb2312-raw',
+ 'unicode' => 'ucs-2le',
+ );
+
+BEGIN {
+ if($^O eq 'cygwin')
+ {
+ require Tk::Config;
+ $Tk::platform = $Tk::Config::win_arch;
+ $Tk::platform = 'unix' if $Tk::platform eq 'x';
+ }
+ else
+ {
+ $Tk::platform = ($^O eq 'MSWin32') ? $^O : 'unix';
+ }
+};
+
+$Tk::tearoff = 1 if ($Tk::platform eq 'unix');
+
+
+@EXPORT = qw(Exists Ev exit MainLoop DoOneEvent tkinit);
+@EXPORT_OK = qw(NoOp after *widget *event lsearch catch $XS_VERSION
+ DONT_WAIT WINDOW_EVENTS FILE_EVENTS TIMER_EVENTS
+ IDLE_EVENTS ALL_EVENTS
+ NORMAL_BG ACTIVE_BG SELECT_BG
+ SELECT_FG TROUGH INDICATOR DISABLED BLACK WHITE);
+%EXPORT_TAGS = (eventtypes => [qw(DONT_WAIT WINDOW_EVENTS FILE_EVENTS
+ TIMER_EVENTS IDLE_EVENTS ALL_EVENTS)],
+ variables => [qw(*widget *event)],
+ colors => [qw(NORMAL_BG ACTIVE_BG SELECT_BG SELECT_FG
+ TROUGH INDICATOR DISABLED BLACK WHITE)],
+ );
+
+use strict;
+use Carp;
+
+# Record author's perforce depot record
+$Tk::CHANGE = q$Change: 3279 $;
+
+# $tk_version and $tk_patchLevel are reset by pTk when a mainwindow
+# is created, $VERSION is checked by bootstrap
+$Tk::version = '8.4';
+$Tk::patchLevel = '8.4';
+$Tk::VERSION = '804.027';
+$Tk::XS_VERSION = $Tk::VERSION;
+$Tk::strictMotif = 0;
+
+
+{($Tk::library) = __FILE__ =~ /^(.*)\.pm$/;}
+$Tk::library = Tk->findINC('.') unless (defined($Tk::library) && -d $Tk::library);
+
+$Tk::widget = undef;
+$Tk::event = undef;
+
+use vars qw($inMainLoop);
+
+bootstrap Tk;
+
+my $boot_time = timeofday();
+
+# This is a workround for Solaris X11 locale handling
+Preload(DynaLoader::dl_findfile('-L/usr/openwin/lib','-lX11'))
+ if (NeedPreload() && -d '/usr/openwin/lib');
+
+use Tk::Submethods ('option' => [qw(add get clear readfile)],
+ 'clipboard' => [qw(clear append)]
+ );
+
+#
+# Next few routines are here as perl code as doing caller()
+# in XS code is very complicated - so instead C code calls BackTrace
+#
+sub _backTrace
+{
+ my $w = shift;
+ my $i = 1;
+ my ($pack,$file,$line,$sub) = caller($i++);
+ while (1)
+ {
+ my $loc = "at $file line $line";
+ ($pack,$file,$line,$sub) = caller($i++);
+ last unless defined($sub);
+ return 1 if $sub eq '(eval)';
+ $w->AddErrorInfo("$sub $loc");
+ }
+ return 0;
+}
+
+sub BackTrace
+{
+ my $w = shift;
+ return unless (@_ || $@);
+ my $mess = (@_) ? shift : "$@";
+ die "$mess\n" if $w->_backTrace;
+ # if we get here we are not in an eval so report now
+ $w->Fail($mess);
+ $w->idletasks;
+ die "$mess\n";
+}
+
+#
+# This is a $SIG{__DIE__} handler which does not change the $@
+# string in the way 'croak' does, but rather add to Tk's ErrorInfo.
+# It stops at 1st enclosing eval on assumption that the eval
+# is part of Tk call process and will add its own context to ErrorInfo
+# and then pass on the error.
+#
+sub __DIE__
+{
+ my $mess = shift;
+ my $w = $Tk::widget;
+ # Note that if a __DIE__ handler returns it re-dies up the chain.
+ return unless defined($w) && Exists($w);
+ # This special message is for exit() as an exception see pTkCallback.c
+ return if $mess =~/^_TK_EXIT_\(\d+\)/;
+ return if $w->_backTrace;
+ # Not in an eval - should not happen
+}
+
+sub XEvent::xy { shift->Info('xy') }
+
+sub XEvent::AUTOLOAD
+{
+ my ($meth) = $XEvent::AUTOLOAD =~ /(\w)$/;
+ no strict 'refs';
+ *{$XEvent::AUTOLOAD} = sub { shift->Info($meth) };
+ goto &$XEvent::AUTOLOAD;
+}
+
+sub NoOp { }
+
+sub Ev
+{
+ if (@_ == 1)
+ {
+ my $arg = $_[0];
+ return bless (((ref $arg) ? $arg : \$arg), 'Tk::Ev');
+ }
+ else
+ {
+ return bless [@_],'Tk::Ev';
+ }
+}
+
+sub InitClass
+{
+ my ($package,$parent) = @_;
+ croak "Unexpected type of parent $parent" unless(ref $parent);
+ croak "$parent is not a widget" unless($parent->IsWidget);
+ my $mw = $parent->MainWindow;
+ my $hash = $mw->TkHash('_ClassInit_');
+ unless (exists $hash->{$package})
+ {
+ $package->Install($mw);
+ $hash->{$package} = $package->ClassInit($mw);
+ }
+}
+
+require Tk::Widget;
+require Tk::Image;
+require Tk::MainWindow;
+
+sub Exists
+{my $w = shift;
+ return defined($w) && ref($w) && $w->IsWidget && $w->exists;
+}
+
+sub Time_So_Far
+{
+ return timeofday() - $boot_time;
+}
+
+# Selection* are not autoloaded as names are too long.
+
+sub SelectionOwn
+{my $widget = shift;
+ selection('own',(@_,$widget));
+}
+
+sub SelectionOwner
+{
+ selection('own','-displayof',@_);
+}
+
+sub SelectionClear
+{
+ selection('clear','-displayof',@_);
+}
+
+sub SelectionExists
+{
+ selection('exists','-displayof',@_);
+}
+
+sub SelectionHandle
+{my $widget = shift;
+ my $command = pop;
+ selection('handle',@_,$widget,$command);
+}
+
+sub SplitString
+{
+ local $_ = shift;
+ my (@arr, $tmp);
+ while (/\{([^{}]*)\}|((?:[^\s\\]|\\.)+)/gs) {
+ if (defined $1) { push @arr, $1 }
+ else { $tmp = $2 ; $tmp =~ s/\\([\s\\])/$1/g; push @arr, $tmp }
+ }
+ # carp '('.join(',',@arr).")";
+ return @arr;
+}
+
+sub Methods
+{
+ my ($package) = caller;
+ no strict 'refs';
+ foreach my $meth (@_)
+ {
+ my $name = $meth;
+ *{$package."::$meth"} = sub { shift->WidgetMethod($name,@_) };
+ }
+}
+
+my %dialog = ( tk_chooseColor => 'ColorDialog',
+ tk_messageBox => 'MessageBox',
+ tk_getOpenFile => 'FDialog',
+ tk_getSaveFile => 'FDialog',
+ tk_chooseDirectory => 'FDialog'
+# Slaven claims NI-S's version above does not work
+# and provides this
+# tk_chooseDirectory => 'DirDialog'
+ );
+
+foreach my $dialog (keys %dialog)
+ {
+ no strict 'refs';
+ unless (defined &$dialog)
+ {
+ my $kind = $dialog;
+ my $code = \&{"Tk::$dialog{$dialog}"};
+ *$dialog = sub { &$code($kind,@_) };
+ }
+ }
+
+sub MessageBox {
+ my ($kind,%args) = @_;
+ require Tk::Dialog;
+ my $parent = delete $args{'-parent'};
+ my $args = \%args;
+
+ $args->{-bitmap} = delete $args->{-icon} if defined $args->{-icon};
+ $args->{-text} = delete $args->{-message} if defined $args->{-message};
+ $args->{-type} = 'OK' unless defined $args->{-type};
+
+ my $type;
+ if (defined($type = delete $args->{-type})) {
+ delete $args->{-type};
+ my @buttons = grep($_,map(ucfirst($_),
+ split(/(abort|retry|ignore|yes|no|cancel|ok)/,
+ lc($type))));
+ $args->{-buttons} = [@buttons];
+ $args->{-default_button} = ucfirst(delete $args->{-default}) if
+ defined $args->{-default};
+ if (not defined $args->{-default_button} and scalar(@buttons) == 1) {
+ $args->{-default_button} = $buttons[0];
+ }
+ my $md = $parent->Dialog(%$args);
+ my $an = $md->Show;
+ $md->destroy;
+ return $an;
+ }
+} # end messageBox
+
+sub messageBox
+{
+ my ($widget,%args) = @_;
+ # remove in a later version:
+ if (exists $args{'-text'})
+ {
+ warn "The -text option is deprecated. Please use -message instead";
+ if (!exists $args{'-message'})
+ {
+ $args{'-message'} = delete $args{'-text'};
+ }
+ }
+ $args{'-type'} = (exists $args{'-type'}) ? lc($args{'-type'}) : 'ok';
+ $args{'-default'} = lc($args{'-default'}) if (exists $args{'-default'});
+ ucfirst tk_messageBox(-parent => $widget, %args);
+}
+
+sub getOpenFile
+{
+ tk_getOpenFile(-parent => shift,@_);
+}
+
+sub getSaveFile
+{
+ tk_getSaveFile(-parent => shift,@_);
+}
+
+sub chooseColor
+{
+ tk_chooseColor(-parent => shift,@_);
+}
+
+sub chooseDirectory
+{
+ tk_chooseDirectory(-parent => shift,@_);
+}
+
+sub DialogWrapper
+{
+ my ($method,$kind,%args) = @_;
+ my $created = 0;
+ my $w = delete $args{'-parent'};
+ if (defined $w)
+ {
+ $args{'-popover'} = $w;
+ }
+ else
+ {
+ $w = MainWindow->new;
+ $w->withdraw;
+ $created = 1;
+ }
+ my $mw = $w->toplevel;
+ my $fs = $mw->{$kind};
+ unless (defined $fs)
+ {
+ $mw->{$kind} = $fs = $mw->$method(%args);
+ }
+ else
+ {
+ $fs->configure(%args);
+ }
+ my $val = $fs->Show;
+ $w->destroy if $created;
+ return $val;
+}
+
+sub ColorDialog
+{
+ require Tk::ColorEditor;
+ DialogWrapper('ColorDialog',@_);
+}
+
+sub FDialog
+{
+ require Tk::FBox;
+ my $cmd = shift;
+ if ($cmd =~ /Save/)
+ {
+ push @_, -type => 'save';
+ }
+ elsif ($cmd =~ /Directory/)
+ {
+ push @_, -type => 'dir';
+ }
+ DialogWrapper('FBox', $cmd, @_);
+}
+
+sub DirDialog
+{
+ require Tk::DirTree;
+ DialogWrapper('DirTreeDialog',@_);
+}
+
+*MotifFDialog = \&FDialog;
+
+*CORE::GLOBAL::exit = \&exit;
+
+sub MainLoop
+{
+ unless ($inMainLoop)
+ {
+ local $inMainLoop = 1;
+ while (Tk::MainWindow->Count)
+ {
+ DoOneEvent(0);
+ }
+ }
+}
+
+sub tkinit { return MainWindow->new(@_) }
+
+# a wrapper on eval which turns off user $SIG{__DIE__}
+sub catch (&)
+{
+ my $sub = shift;
+ eval {local $SIG{'__DIE__'}; &$sub };
+}
+
+my $Home;
+
+sub TranslateFileName
+{
+ local $_ = shift;
+ unless (defined $Home)
+ {
+ $Home = $ENV{'HOME'} || (defined $ENV{'HOMEDRIVE'} && defined $ENV{'HOMEPATH'} ? $ENV{'HOMEDRIVE'}.$ENV{'HOMEPATH'} : "");
+ $Home =~ s#\\#/#g;
+ $Home .= '/' unless $Home =~ m#/$#;
+ }
+ s#~/#$Home#g;
+ # warn $_;
+ return $_;
+}
+
+sub findINC
+{
+ my $file = join('/',@_);
+ my $dir;
+ $file =~ s,::,/,g;
+ foreach $dir (@INC)
+ {
+ my $path;
+ return $path if (-e ($path = "$dir/$file"));
+ }
+ return undef;
+}
+
+sub idletasks
+{
+ shift->update('idletasks');
+}
+
+sub backtrace
+{
+ my ($self,$msg,$i) = @_;
+ $i = 1 if @_ < 3;
+ while (1)
+ {
+ my ($pack,$file,$line,$sub) = caller($i++);
+ last unless defined($sub);
+ $msg .= "\n $sub at $file line $line";
+ }
+ return "$msg\n";
+}
+
+sub die_with_trace
+{
+ my ($self,$msg) = @_;
+ die $self->backtrace($msg,1);
+}
+
+
+
+1;
+
+__END__
+
+sub Error
+{my $w = shift;
+ my $error = shift;
+ if (Exists($w))
+ {
+ my $grab = $w->grab('current');
+ $grab->Unbusy if (defined $grab);
+ }
+ chomp($error);
+ warn "Tk::Error: $error\n " . join("\n ",@_)."\n";
+}
+
+sub CancelRepeat
+{
+ my $w = shift->MainWindow;
+ my $id = delete $w->{_afterId_};
+ $w->after('cancel',$id) if (defined $id);
+}
+
+sub RepeatId
+{
+ my ($w,$id) = @_;
+ $w = $w->MainWindow;
+ $w->CancelRepeat;
+ $w->{_afterId_} = $id;
+}
+
+
+
+#----------------------------------------------------------------------------
+# focus.tcl --
+#
+# This file defines several procedures for managing the input
+# focus.
+#
+# @(#) focus.tcl 1.6 94/12/19 17:06:46
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+sub FocusChildren { shift->children }
+
+#
+# focusNext --
+# This procedure is invoked to move the input focus to the next window
+# after a given one. "Next" is defined in terms of the window
+# stacking order, with all the windows underneath a given top-level
+# (no matter how deeply nested in the hierarchy) considered except
+# for frames and toplevels.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the next window after this one in the traversal
+# order.
+sub focusNext
+{
+ my $w = shift;
+ my $cur = $w;
+ while (1)
+ {
+ # Descend to just before the first child of the current widget.
+ my $parent = $cur;
+ my @children = $cur->FocusChildren();
+ my $i = -1;
+ # Look for the next sibling that isn't a top-level.
+ while (1)
+ {
+ $i += 1;
+ if ($i < @children)
+ {
+ $cur = $children[$i];
+ next if ($cur->toplevel == $cur);
+ last
+ }
+ # No more siblings, so go to the current widget's parent.
+ # If it's a top-level, break out of the loop, otherwise
+ # look for its next sibling.
+ $cur = $parent;
+ last if ($cur->toplevel() == $cur);
+ $parent = $parent->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+}
+# focusPrev --
+# This procedure is invoked to move the input focus to the previous
+# window before a given one. "Previous" is defined in terms of the
+# window stacking order, with all the windows underneath a given
+# top-level (no matter how deeply nested in the hierarchy) considered.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the previous window before this one in the traversal
+# order.
+sub focusPrev
+{
+ my $w = shift;
+ my $cur = $w;
+ my @children;
+ my $i;
+ my $parent;
+ while (1)
+ {
+ # Collect information about the current window's position
+ # among its siblings. Also, if the window is a top-level,
+ # then reposition to just after the last child of the window.
+ if ($cur->toplevel() == $cur)
+ {
+ $parent = $cur;
+ @children = $cur->FocusChildren();
+ $i = @children;
+ }
+ else
+ {
+ $parent = $cur->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ # Go to the previous sibling, then descend to its last descendant
+ # (highest in stacking order. While doing this, ignore top-levels
+ # and their descendants. When we run out of descendants, go up
+ # one level to the parent.
+ while ($i > 0)
+ {
+ $i--;
+ $cur = $children[$i];
+ next if ($cur->toplevel() == $cur);
+ $parent = $cur;
+ @children = $parent->FocusChildren();
+ $i = @children;
+ }
+ $cur = $parent;
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+
+}
+
+sub FocusOK
+{
+ my $w = shift;
+ my $value;
+ catch { $value = $w->cget('-takefocus') };
+ if (!$@ && defined($value))
+ {
+ return 0 if ($value eq '0');
+ return $w->viewable if ($value eq '1');
+ if ($value)
+ {
+ $value = $w->$value();
+ return $value if (defined $value);
+ }
+ }
+ if (!$w->viewable)
+ {
+ return 0;
+ }
+ catch { $value = $w->cget('-state') } ;
+ if (!$@ && defined($value) && $value eq 'disabled')
+ {
+ return 0;
+ }
+ $value = grep(/Key|Focus/,$w->Tk::bind(),$w->Tk::bind(ref($w)));
+ return $value;
+}
+
+
+# focusFollowsMouse
+#
+# If this procedure is invoked, Tk will enter "focus-follows-mouse"
+# mode, where the focus is always on whatever window contains the
+# mouse. If this procedure isn't invoked, then the user typically
+# has to click on a window to give it the focus.
+#
+# Arguments:
+# None.
+
+sub EnterFocus
+{
+ my $w = shift;
+ return unless $w;
+ my $Ev = $w->XEvent;
+ my $d = $Ev->d;
+ $w->Tk::focus() if ($d eq 'NotifyAncestor' || $d eq 'NotifyNonlinear' || $d eq 'NotifyInferior');
+}
+
+sub tabFocus
+{
+ shift->Tk::focus;
+}
+
+sub focusFollowsMouse
+{
+ my $widget = shift;
+ $widget->bind('all','<Enter>','EnterFocus');
+}
+
+# tkTraverseToMenu --
+# This procedure implements keyboard traversal of menus. Given an
+# ASCII character "char", it looks for a menubutton with that character
+# underlined. If one is found, it posts the menubutton's menu
+#
+# Arguments:
+# w - Window in which the key was typed (selects
+# a toplevel window).
+# char - Character that selects a menu. The case
+# is ignored. If an empty string, nothing
+# happens.
+sub TraverseToMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless(defined $char && $char ne '');
+ $w = $w->toplevel->FindMenu($char);
+}
+# tkFirstMenu --
+# This procedure traverses to the first menubutton in the toplevel
+# for a given window, and posts that menubutton's menu.
+#
+# Arguments:
+# w - Name of a window. Selects which toplevel
+# to search for menubuttons.
+sub FirstMenu
+{
+ my $w = shift;
+ $w = $w->toplevel->FindMenu('');
+}
+
+# These wrappers don't use method syntax so need to live
+# in same package as raw Tk routines are newXS'ed into.
+
+sub Selection
+{my $widget = shift;
+ my $cmd = shift;
+ croak 'Use SelectionOwn/SelectionOwner' if ($cmd eq 'own');
+ croak "Use Selection\u$cmd()";
+}
+
+# If we have sub Clipboard in Tk then use base qw(Tk::Clipboard ....)
+# calls it when it does its eval "require $base"
+#sub Clipboard
+#{my $w = shift;
+# my $cmd = shift;
+# croak "Use clipboard\u$cmd()";
+#}
+
+sub Receive
+{
+ my $w = shift;
+ warn 'Receive(' . join(',',@_) .')';
+ die 'Tk rejects send(' . join(',',@_) .")\n";
+}
+
+sub break
+{
+ die "_TK_BREAK_\n";
+}
+
+sub updateWidgets
+{
+ my ($w) = @_;
+ while ($w->DoOneEvent(DONT_WAIT|IDLE_EVENTS|WINDOW_EVENTS))
+ {
+ }
+ $w;
+}
+
+sub ImageNames
+{
+ image('names');
+}
+
+sub ImageTypes
+{
+ image('types');
+}
+
+sub interps
+{
+ my $w = shift;
+ return $w->winfo('interps','-displayof');
+}
+
+sub lsearch
+{my $ar = shift;
+ my $x = shift;
+ my $i;
+ for ($i = 0; $i < scalar @$ar; $i++)
+ {
+ return $i if ($$ar[$i] eq $x);
+ }
+ return -1;
+}
+
+
+sub getEncoding
+{
+ my ($class,$name) = @_;
+ eval { require Encode };
+ if ($@)
+ {
+ require Tk::DummyEncode;
+ return Tk::DummyEncode->getEncoding($name);
+ }
+ $name = $Tk::font_encoding{$name} if exists $Tk::font_encoding{$name};
+ my $enc = Encode::find_encoding($name);
+
+ unless ($enc)
+ {
+ $enc = Encode::find_encoding($name) if ($name =~ s/[-_]\d+$//)
+ }
+# if ($enc)
+# {
+# print STDERR "Lookup '$name' => ".$enc->name."\n";
+# }
+# else
+# {
+# print STDERR "Failed '$name'\n";
+# }
+ unless ($enc)
+ {
+ if ($name eq 'X11ControlChars')
+ {
+ require Tk::DummyEncode;
+ $Encode::encoding{$name} = $enc = Tk::DummyEncode->getEncoding($name);
+ }
+ }
+ return $enc;
+}
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm b/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm
new file mode 100644
index 00000000000..382ec6db6f9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Adjuster.pm
@@ -0,0 +1,436 @@
+package Tk::Adjuster;
+
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/Adjuster.pm#7 $
+
+use base qw(Tk::Frame);
+
+# We cannot do this :
+
+# Construct Tk::Widget 'packAdjust';
+
+# because if managed object is Derived (e.g. a Scrolled) then our 'new'
+# will be delegated and hierachy gets turned inside-out
+# So packAdjust is autoloaded in Widget.pm
+
+
+Construct Tk::Widget qw(Adjuster);
+
+{package Tk::Adjuster::Item;
+
+use strict;
+use base qw(Tk::Frame);
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<1>',['BDown', 1]);
+ $mw->bind($class,'<Shift-1>',['BDown', 0]);
+ $mw->bind($class,'<B1-Motion>',['Motion',1]);
+ $mw->bind($class,'<Shift-B1-Motion>',['Motion',0]);
+ $mw->bind($class,'<ButtonRelease-1>',['Motion',0]);
+ return $class;
+}
+
+sub BDown
+{
+ my($w, $delay_mask) = @_;
+ $w->{'start_x'} = $w->XEvent->x;
+ $w->{'start_y'} = $w->XEvent->y;
+ my $adj = $w->Parent;
+ delete $adj->{'lin_info'};
+ my $delay = $delay_mask && $adj->cget('-delay');
+ if ($delay)
+ {
+ $adj->vert ? $adj->delta_width_bar(0) : $adj->delta_height_bar(0);
+ }
+}
+
+sub Motion
+{
+ my($w, $delay_mask) = @_;
+ my $ev = $w->XEvent;
+ my $adj = $w->Parent;
+
+ my $delay = $delay_mask && $adj->cget('-delay');
+ if ($adj->vert)
+ {
+ my $dx = $ev->x - $w->{'start_x'};
+ $delay ? $adj->delta_width_bar($dx) : $adj->delta_width($dx);
+ }
+ else
+ {
+ my $dy = $ev->y - $w->{'start_y'};
+ $delay ? $adj->delta_height_bar($dy) : $adj->delta_height($dy);
+ }
+}
+
+}
+
+
+
+sub packAfter
+{
+ my ($w,$s,%args) = @_;
+ my $side = $args{'-side'} ? $args{'-side'} : 'top';
+ $w->configure(-side => $side, -widget => $s);
+ $w->packed($s, %args);
+}
+
+sub packForget
+{
+ my ($w,$forget_slave) = @_;
+ $w->Tk::Widget::packForget;
+ $w->slave->packForget if $forget_slave;
+}
+
+# Called by Tk::Widget::packAdjust. It was here before packAfter was added
+sub packed
+{
+ my ($w,$s,%args) = @_;
+ delete $args{'-before'};
+ delete $args{'-in'};
+ $args{'-expand'} = 0;
+ $args{'-after'} = $s;
+ $args{'-fill'} = (($w->vert) ? 'y' : 'x');
+ $w->pack(%args);
+}
+
+sub gridded
+{
+ my ($w,$s,%args) = @_;
+ # delete $args{'-before'};
+ # $args{'-expand'} = 0;
+ # $args{'-after'} = $s;
+ # $args{'-fill'} = (($w->vert) ? 'y' : 'x');
+ $w->grid(%args);
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Configure>','SizeChange');
+ $mw->bind($class,'<Unmap>','Restore');
+ $mw->bind($class,'<Map>','Mapped');
+ return $class;
+}
+
+sub SizeChange
+{
+ my $w = shift;
+ # reqwidth/height of Adjuster is stored here. If it is partially pushed out
+ # of the window, then $w->width/height returns that of the visible part.
+ if ($w->vert)
+ {
+ my $sx = ($w->Width - $w->{'sep'}->Width)/2;
+ $w->{'but'}->place('-x' => 0, '-y' => $w->Height-18);
+ $w->{'sep'}->place('-x' => $sx, '-y' => 0, -relheight => 1);
+ $w->configure(-width => $w->{'but'}->ReqWidth);
+ $w->{'reqwidth'} = $w->reqwidth;
+ }
+ else
+ {
+ my $sy = ($w->Height - $w->{'sep'}->Height)/2;
+ $w->{'but'}->place('-x' => $w->Width-18, '-y' => 0);
+ $w->{'sep'}->place('-x' => 0, '-y' => $sy, -relwidth => 1);
+ $w->configure(-height => $w->{'but'}->ReqHeight);
+ $w->{'reqheight'} = $w->reqheight;
+ }
+ # Turn off geometry propagation in the slave. Do only if necessary, as this
+ # causes repacking.
+ my $s = $w->slave;
+ $s->packPropagate('0') if $s->packSlaves && $s->packPropagate();
+ $s->gridPropagate('0') if $s->gridSlaves && $s->gridPropagate();
+}
+
+sub Mapped
+{
+ my $w = shift;
+ $w->idletasks;
+ my $m = $w->manager;
+ if ($m =~ /^(?:pack|grid)$/)
+ {
+ my %info = $w->$m('info');
+ my $master = $info{'-in'};
+ $master->$m('propagate',0);
+ $w->{'master'} = $master;
+ }
+ $w->slave_expand_off;
+}
+
+sub Populate
+{
+ my ($w,$args) = @_;
+ $w->SUPER::Populate($args);
+ $w->{'sep'} = Tk::Adjuster::Item->new($w,-bd => 1, -relief => 'sunken');
+ $w->{'but'} = Tk::Adjuster::Item->new($w,-bd => 1, -width => 8, -height => 8, -relief => 'raised');
+
+ # Need to explicitly set frame width to 0 for Win32
+ my $l = $w->{'lin'} = $w->toplevel->Frame(-bd => 0);
+
+ my $cs = $w->ConfigSpecs(-widget => ['PASSIVE','widget','Widget',$w->Parent],
+ -side => ['METHOD','side','Side','top'],
+ -delay => ['PASSIVE','delay','Delay', 1],
+ -background => [['SELF',$w->{'sep'},$w->{'but'}],'background','Background',undef],
+ -foreground => [Tk::Configure->new($w->{'lin'},'-background'),'foreground','Foreground','black'],
+ -restore => ['PASSIVE','restore', 'Restore', 1],
+ );
+ $w->_OnDestroy(qw(sep but lin master));
+}
+
+sub side
+{
+ my ($w,$val) = @_;
+ if (@_ > 1)
+ {
+ $w->{'side'} = $val;
+ my $cursor;
+ if ($w->vert)
+ {
+ $cursor = 'sb_h_double_arrow';
+ $w->{'sep'}->configure(-width => 2, -height => 10000);
+ }
+ else
+ {
+ $cursor = 'sb_v_double_arrow';
+ $w->{'sep'}->configure(-height => 2, -width => 10000);
+ }
+ my $x;
+ foreach $x ($w->{'sep'},$w->{'but'})
+ {
+ $x->configure(-cursor => $cursor);
+ }
+ }
+ return $w->{'side'};
+}
+
+sub slave
+{
+ my $w = shift;
+ my $s = $w->cget('-widget');
+ return $s;
+}
+
+sub vert
+{
+ my $w = shift;
+ my $side = $w->cget('-side');
+ return 1 if $side eq 'left';
+ return -1 if $side eq 'right';
+ return 0;
+}
+
+# If the Adjuster gets unmapped, it attempts to restore itself. If its
+# slave is mapped, then it reduces the size of the slave so that there is
+# then room in the master for the Adjuster widget.
+sub Restore
+{
+ my $w = shift;
+ return if ! $w->toplevel->IsMapped ||
+ ! $w->slave->IsMapped ||
+ ! $w->cget('-restore');
+ $w->vert ? $w->delta_width(0) : $w->delta_height(0);
+}
+
+sub delta_width_bar
+{
+ my ($w,$dx) = @_;
+ my $l = $w->{'lin'};
+ my $r = $w->{'sep'};
+ my $t = $w->toplevel;
+ my $m = $w->{'master'};
+ my $s = $w->slave;
+ my ($min_rootx, $max_rootx, $t_border);
+ if (! $w->{'lin_info'})
+ {
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ $t_border = $t->cget('-bd') + $t->cget('-highlightthickness');
+ if ($w->cget('-side') eq 'right')
+ {
+ $min_rootx = $m->rootx + $m_border;
+ $max_rootx = $s->rootx + $s->width - 1;
+ }
+ else
+ {
+ $min_rootx = $s->rootx;
+ $max_rootx = $m->rootx + $m->width - $m_border - 1;
+ }
+ $w->{'lin_info'} = [$min_rootx, $max_rootx, $t_border];
+ }
+ else
+ {
+ ($min_rootx, $max_rootx, $t_border) = @{$w->{'lin_info'}};
+ }
+ $l->configure(-width => 1, -height => $w->height) unless $l->IsMapped;
+
+ my $new_rootx = $w->rootx + $w->{'reqwidth'}/2 + $dx;
+ $new_rootx = $min_rootx if $new_rootx < $min_rootx;
+ $new_rootx = $max_rootx if $new_rootx > $max_rootx;
+ my $placex = $new_rootx - $t->rootx - $t_border;
+ my $placey = $w->rooty - $t->rooty - $t_border;
+ $l->place(-in => $t, -anchor => 'n', '-x' => $placex, '-y' => $placey);
+ my $this = $w->containing($new_rootx, $w->rooty + 1);
+ $l->raise($this) if $this && $this ne $t;
+}
+
+sub delta_width
+{
+ my ($w,$dx) = @_;
+ my $l = $w->{'lin'};
+ $l->placeForget;
+ my $s = $w->slave;
+ if ($s)
+ {
+ my $m = $w->{'master'};
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ my $w_width = $w->{'reqwidth'};
+ my $m_width = $m->width;
+ my $s_width = $s->width;
+ my $max_width = $m_width - $w_width;
+ my $max_s_width;
+ if ($w->cget('-side') eq 'right')
+ {
+ $dx = -$dx;
+ $max_s_width = $max_width -
+ ($m->rootx + $m_width - ($s->rootx+$s_width)) - $m_border;
+ }
+ else
+ {
+ $max_s_width = $max_width - ($s->rootx - $m->rootx) - $m_border;
+ }
+ my $new_width = $s_width+$dx;
+ $new_width = $max_s_width if $new_width > $max_s_width;
+ $new_width = 0 if $new_width < 0;
+ $s->GeometryRequest($new_width, $s->height);
+ }
+}
+
+sub delta_height_bar
+{
+ my ($w,$dy) = @_;
+ my $l = $w->{'lin'};
+ my $r = $w->{'sep'};
+ my $t = $w->toplevel;
+ my $m = $w->{'master'};
+ my $s = $w->slave;
+ my ($min_rooty, $max_rooty, $t_border);
+ if (! $w->{'lin_info'})
+ {
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ $t_border = $t->cget('-bd') + $t->cget('-highlightthickness');
+ if ($w->cget('-side') eq 'bottom')
+ {
+ $min_rooty = $m->rooty + $m_border;
+ $max_rooty = $s->rooty + $s->height - 1;
+ }
+ else
+ {
+ $min_rooty = $s->rooty;
+ $max_rooty = $m->rooty + $m->height - $m_border - 1;
+ }
+ $w->{'lin_info'} = [$min_rooty, $max_rooty, $t_border];
+ }
+ else
+ {
+ ($min_rooty, $max_rooty, $t_border) = @{$w->{'lin_info'}};
+ }
+ $l->configure(-height => 1, -width => $w->width) unless $l->IsMapped;
+
+ my $new_rooty = $w->rooty + $w->{'reqheight'}/2 + $dy;
+ $new_rooty = $min_rooty if $new_rooty < $min_rooty;
+ $new_rooty = $max_rooty if $new_rooty > $max_rooty;
+ my $placey = $new_rooty - $t->rooty - $t_border;
+ my $placex = $w->rootx - $t->rootx - $t_border;
+ $l->place(-in => $t, -anchor => 'w', '-x' => $placex, '-y' => $placey);
+ my $this = $w->containing($w->rootx + 1, $new_rooty);
+ $l->raise($this) if $this && $this ne $t;
+}
+
+sub delta_height
+{
+ my ($w,$dy) = @_;
+ my $l = $w->{'lin'};
+ $l->placeForget;
+ my $s = $w->slave;
+ if ($s)
+ {
+ my $m = $w->{'master'};
+ my $m_border = $m->cget('-bd') + $m->cget('-highlightthickness');
+ my $w_height = $w->{'reqheight'};
+ my $m_height = $m->height;
+ my $s_height = $s->height;
+ my $max_height = $m_height - $w_height;
+ my $max_s_height;
+ if ($w->cget('-side') eq 'bottom')
+ {
+ $dy = -$dy;
+ $max_s_height = $max_height -
+ ($m->rooty + $m_height - ($s->rooty+$s_height)) - $m_border;
+ }
+ else
+ {
+ $max_s_height = $max_height - ($s->rooty - $m->rooty) - $m_border;
+ }
+ my $new_height = $s_height+$dy;
+
+ $new_height = $max_s_height if $new_height > $max_s_height;
+ $new_height = 0 if $new_height < 0;
+ $s->GeometryRequest($s->width, $new_height);
+ }
+}
+
+# Turn off expansion in the slave.
+# This is done only if necessary, as calls to pack/gridConfigure cause
+# repacking.
+# Before call to pack/gridConfigure, the reqwidth/reqheight is set to the
+# current width/height. This is because the geometry managers use
+# the requested values, not the actual, to calculate the new geometry.
+sub slave_expand_off
+{
+ my $w = shift;
+ my $s = $w->slave;
+ return if ! $s;
+
+ my $manager = $s->manager;
+ if ($manager eq 'pack')
+ {
+ my %info = $s->packInfo;
+ my $expand = $info{'-expand'};
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $s->packConfigure(-expand => 0);
+ }
+ }
+ elsif ($manager eq 'grid')
+ {
+ my %info = $s->gridInfo;
+ my $master = $info{'-in'};
+ if ($w->vert)
+ {
+ my $col = $info{'-column'};
+ my $expand = $master->gridColumnconfigure($col, '-weight');
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $master->gridColumnconfigure($col, -weight => 0);
+ }
+ }
+ else
+ {
+ my $row = $info{'-row'};
+ my $expand = $master->gridRowconfigure($row, '-weight');
+ if ($expand)
+ {
+ $s->GeometryRequest($s->width, $s->height);
+ $master->gridRowconfigure($row, -weight => 0);
+ }
+ }
+ }
+}
+
+1;
+
+__END__
+
+=cut #' emacs hilighting...
diff --git a/Master/tlpkg/tlperl/lib/Tk/After.pm b/Master/tlpkg/tlperl/lib/Tk/After.pm
new file mode 100644
index 00000000000..85a0e406ee5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/After.pm
@@ -0,0 +1,104 @@
+# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::After;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/After.pm#11 $
+
+sub _cancelAll
+{
+ my $w = shift;
+ my $h = delete $w->{_After_};
+ foreach my $obj (values %$h)
+ {
+ # carp "Auto cancel ".$obj->[1]." for ".$obj->[0]->PathName;
+ $obj->cancel;
+ bless $obj,"Tk::After::Cancelled";
+ }
+}
+
+sub Tk::After::Cancelled::once { }
+sub Tk::After::Cancelled::repeat { }
+
+sub submit
+{
+ my $obj = shift;
+ my $w = $obj->[0];
+ my $id = $obj->[1];
+ my $t = $obj->[2];
+ my $method = $obj->[3];
+ delete($w->{_After_}{$id}) if (defined $id);
+ $id = $w->Tk::after($t,[$method => $obj]);
+ unless (exists $w->{_After_})
+ {
+ $w->{_After_} = {};
+ $w->OnDestroy([\&_cancelAll, $w]);
+ }
+ $w->{_After_}{$id} = $obj;
+ $obj->[1] = $id;
+ return $obj;
+}
+
+sub DESTROY
+{
+ my $obj = shift;
+ $obj->cancel;
+ undef $obj->[0];
+ undef $obj->[4];
+}
+
+sub new
+{
+ my ($class,$w,$t,$method,@cb) = @_;
+ my $cb = (@cb == 1) ? shift(@cb) : [@cb];
+ my $obj = bless [$w,undef,$t,$method,Tk::Callback->new($cb)],$class;
+ return $obj->submit;
+}
+
+sub cancel
+{
+ my $obj = shift;
+ my $id = $obj->[1];
+ my $w = $obj->[0];
+ if ($id)
+ {
+ $w->Tk::after('cancel'=> $id) if Tk::Exists($w);
+ delete $w->{_After_}{$id} if exists $w->{_After_};
+ $obj->[1] = undef;
+ }
+ return $obj;
+}
+
+sub repeat
+{
+ my $obj = shift;
+ $obj->submit;
+ local $Tk::widget = $obj->[0];
+ $obj->[4]->Call;
+}
+
+sub once
+{
+ my $obj = shift;
+ my $w = $obj->[0];
+ my $id = $obj->[1];
+ delete $w->{_After_}{$id};
+ local $Tk::widget = $w;
+ $obj->[4]->Call;
+}
+
+sub time {
+ my $obj = shift;
+ my $delay = shift;
+ if (defined $delay) {
+ $obj->cancel if $delay == 0;
+ $obj->[2] = $delay;
+ }
+ $obj->[2];
+}
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Animation.pm b/Master/tlpkg/tlperl/lib/Tk/Animation.pm
new file mode 100644
index 00000000000..428f3f1f48f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Animation.pm
@@ -0,0 +1,178 @@
+package Tk::Animation;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Animation.pm#8 $
+
+use Tk::Photo;
+use base qw(Tk::Photo);
+
+Construct Tk::Widget 'Animation';
+
+sub MainWindow
+{
+ return shift->{'_MainWIndow_'};
+}
+
+sub add_frame
+{
+ my $obj = shift;
+ $obj->{'_frames_'} = [] unless exists $obj->{'_frames_'};
+ push(@{$obj->{'_frames_'}},@_);
+}
+
+sub new
+{
+ my ($class,$widget,%args) = @_;
+ my $obj = $class->SUPER::new($widget,%args);
+ $obj->{'_MainWIndow_'} = $widget->MainWindow;
+ if ($args{'-format'} eq 'gif')
+ {
+ my @images;
+ local $@;
+ while (1)
+ {
+ my $index = @images;
+ $args{'-format'} = "gif -index $index";
+ my $img;
+ eval {local $SIG{'__DIE__'}; $img = $class->SUPER::new($widget,%args) };
+ last if $@;
+ push(@images,$img);
+ }
+ if (@images > 1)
+ {
+ $obj->add_frame(@images);
+ $obj->{'_frame_index_'} = 0;
+ }
+ }
+ $obj->set_image( 0 );
+ $obj->{_delta_} = 1;
+ $obj->{_blank_} = 0;
+ return $obj;
+}
+
+sub fast_forward {
+
+ my( $self, $delta) = @_;
+
+ $self->{_delta_} = $delta;
+ if( not exists $self->{_playing_} ) {
+ my $playing = exists $self->{'_NextId_'};
+ $self->{_playing_} = $playing;
+ $self->resume_animation if not $playing;
+ } else {
+ my $playing = delete $self->{_playing_};
+ $self->pause_animation if not $playing;
+ }
+
+} # end fast_forward
+
+*fast_reverse = \&fast_forward;
+
+sub frame_count {
+ my $frames = shift->{'_frames_'};
+ return -1 unless $frames;
+ return @$frames;
+}
+
+sub blank {
+ my( $self, $blank ) = @_;
+ $blank = 1 if not defined $blank;
+ $self->{_blank_} = $blank;
+ $blank;
+}
+
+sub set_image
+{
+ my ($obj,$index) = @_;
+ my $frames = $obj->{'_frames_'};
+ return unless $frames && @$frames;
+ $index = 0 unless $index < @$frames;
+ $obj->blank if $obj->{_blank_}; # helps some make others worse
+ $obj->copy($frames->[$index]);
+ $obj->{'_frame_index_'} = $index;
+}
+
+sub next_image
+{
+ my ($obj, $delta) = @_;
+ $delta = $obj->{_delta_} unless $delta;
+ my $frames = $obj->{'_frames_'};
+ return unless $frames && @$frames;
+ $obj->set_image((($obj->{'_frame_index_'} || 0) + $delta) % @$frames);
+}
+
+sub prev_image { shift->next_image( -1 ) }
+
+sub pause_animation {
+ my $self = shift;
+ my $id = delete $self->{'_NextId_'};
+ Tk::catch { $id->cancel } if $id;
+}
+
+sub resume_animation {
+ my( $self, $period ) = @_;
+ if( not defined $self->{'_period_'} ) {
+ $self->{'_period_'} = defined( $period ) ? $period : 100;
+ }
+ $period = $self->{'_period_'};
+ my $w = $self->MainWindow;
+ $self->{'_NextId_'} = $w->repeat( $period => [ $self => 'next_image' ] );
+}
+
+sub start_animation
+{
+ my ($obj,$period) = @_;
+ $period ||= 100;
+ my $frames = $obj->{'_frames_'};
+ return unless $frames && @$frames;
+ my $w = $obj->MainWindow;
+ $obj->stop_animation;
+ $obj->{'_period_'} = $period;
+ $obj->{'_NextId_'} = $w->repeat($period,[$obj,'next_image']);
+}
+
+sub stop_animation
+{
+ my ($obj) = @_;
+ my $id = delete $obj->{'_NextId_'};
+ Tk::catch { $id->cancel } if $id;
+ $obj->set_image(0);
+}
+
+1;
+__END__
+
+=cut
+
+#
+# This almost works for changing the animation on the fly
+# but does not resize things correctly
+#
+
+sub gif_sequence
+{
+ my ($obj,%args) = @_;
+ my $widget = $obj->MainWindow;
+ my @images;
+ local $@;
+ while (1)
+ {
+ my $index = @images;
+ $args{'-format'} = "gif -index $index";
+ my $img;
+ eval
+ {local $SIG{'__DIE__'};
+ my $img = $widget->Photo(%args);
+ push(@images,$img);
+ };
+ last if $@;
+ }
+ if (@images)
+ {
+ delete $obj->{'_frames_'};
+ $obj->add_frame(@images);
+ $obj->configure(-width => 0, -height => 0);
+ $obj->set_frame(0);
+ }
+}
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Balloon.pm b/Master/tlpkg/tlperl/lib/Tk/Balloon.pm
new file mode 100644
index 00000000000..2ee0f6c3bce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Balloon.pm
@@ -0,0 +1,621 @@
+#
+# The help widget that provides both "balloon" and "status bar"
+# types of help messages.
+#
+# This is a patched version of Balloon 3.037 - it adds support
+# for different orientations of the balloon widget, depending
+# on wether there's enough space for it. The little arrow now
+# should always point directly to the client.
+# Added by Gerhard Petrowitsch (gerhard.petrowitsch@philips.com)
+#
+# Nov 1, 2003 - Jack Dunnigan
+# Added support for more than one screen in single logical
+# screen mode (i.e. xinerama, dual monitors)
+
+package Tk::Balloon;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev Exists);
+use Carp;
+require Tk::Toplevel;
+
+Tk::Widget->Construct('Balloon');
+use base qw(Tk::Toplevel);
+
+# use UNIVERSAL; avoid the UNIVERSAL.pm file subs are XS in perl core
+
+use strict;
+
+my @balloons;
+my $button_up = 0;
+my %arrows = ( TL => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAINjA0HAEdwLCwMKIQfBQA7',
+ TR => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIRBGMDwAEQkgAIAAoCABEEuwAAOw==',
+ BR => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIPDOHHhYVRAIgIAEISQLELADs=',
+ BL => 'R0lGODlhBgAGAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAGAAYAAAIPhB1xAUFALCIMKAaAWQAVADs=',
+ NO => 'R0lGODlhAQABAJEAANnZ2f///////////yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='
+ );
+
+
+sub ClassInit {
+ my ($class, $mw) = @_;
+ $mw->bind('all', '<Motion>', ['Tk::Balloon::Motion', Ev('X'), Ev('Y'), Ev('s')]);
+ $mw->bind('all', '<Leave>', ['Tk::Balloon::Motion', Ev('X'), Ev('Y'), Ev('s')]);
+ $mw->bind('all', '<Button>', 'Tk::Balloon::ButtonDown');
+ $mw->bind('all', '<ButtonRelease>', 'Tk::Balloon::ButtonUp');
+ return $class;
+}
+
+sub Populate {
+ my ($w, $args) = @_;
+
+ $w->SUPER::Populate($args);
+
+ $w->overrideredirect(1);
+ $w->withdraw;
+ # Only the container frame's background should be black... makes it
+ # look better.
+ $w->configure(-background => 'black');
+
+ # the balloon arrows
+ $w->{img_tl} = $w->Photo(-data => $arrows{TL}, -format => 'gif');
+ $w->{img_tr} = $w->Photo(-data => $arrows{TR}, -format => 'gif');
+ $w->{img_bl} = $w->Photo(-data => $arrows{BL}, -format => 'gif');
+ $w->{img_br} = $w->Photo(-data => $arrows{BR}, -format => 'gif');
+ $w->{img_no} = $w->Photo(-data => $arrows{NO}, -format => 'gif');
+ $w->OnDestroy([$w, '_destroyed']);
+
+ $w->{'pointer'} = $w->Label(-bd=>0, -relief=>'flat',-image=>$w->{img_no});
+
+ # the balloon message
+ # We give the Label a big borderwidth
+ # ..enough to slide a 6x6 gif image along the border including some space
+
+ my $ml = $w->Label(-bd => 0,
+ -padx => 10,
+ -pady => 3,
+ -justify => 'left',
+ -relief=>'flat');
+ $w->Advertise('message' => $ml);
+
+ $ml->pack(
+ -side => 'top',
+ -anchor => 'nw',
+ -expand => 1,
+ -fill => 'both',
+ -padx => 0,
+ -pady => 0);
+
+ # append to global list of balloons
+ push(@balloons, $w);
+ $w->{'popped'} = 0;
+ $w->{'buttonDown'} = 0;
+ $w->{'menu_index'} = 'none';
+ $w->{'menu_index_over'} = 'none';
+ $w->{'canvas_tag'} = '';
+ $w->{'canvas_tag_over'} = '';
+ $w->{'current_screen'} = 0;
+
+ $w->ConfigSpecs(-installcolormap => ['PASSIVE', 'installColormap', 'InstallColormap', 0],
+ -initwait => ['PASSIVE', 'initWait', 'InitWait', 350],
+ -state => ['PASSIVE', 'state', 'State', 'both'],
+ -statusbar => ['PASSIVE', 'statusBar', 'StatusBar', undef],
+ -statusmsg => ['PASSIVE', 'statusMsg', 'StatusMsg', ''],
+ -balloonmsg => ['PASSIVE', 'balloonMsg', 'BalloonMsg', ''],
+ -balloonposition => ['PASSIVE', 'balloonPosition', 'BalloonPosition', 'widget'],
+ -postcommand => ['CALLBACK', 'postCommand', 'PostCommand', undef],
+ -cancelcommand => ['CALLBACK', 'cancelCommand', 'CancelCommand', undef],
+ -motioncommand => ['CALLBACK', 'motionCommand', 'MotionCommand', undef],
+ -background => ['DESCENDANTS', 'background', 'Background', '#C0C080'],
+ -foreground => ['DESCENDANTS', 'foreground', 'Foreground', undef],
+ -font => [$ml, 'font', 'Font', '-*-helvetica-medium-r-normal--*-120-*-*-*-*-*-*'],
+ -borderwidth => ['SELF', 'borderWidth', 'BorderWidth', 1],
+ -numscreens=>['PASSIVE', 'numScreens','NumScreens',1],
+ );
+}
+
+# attach a client to the balloon
+sub attach {
+ my ($w, $client, %args) = @_;
+ foreach my $key (grep(/command$/,keys %args))
+ {
+ $args{$key} = Tk::Callback->new($args{$key});
+ }
+ my $msg = delete $args{-msg};
+ $args{-balloonmsg} = $msg unless exists $args{-balloonmsg};
+ $args{-statusmsg} = $msg unless exists $args{-statusmsg};
+ $w->{'clients'}{$client} = \%args;
+ $client->OnDestroy([$w, 'detach', $client]);
+}
+
+# detach a client from the balloon.
+sub detach {
+ my ($w, $client) = @_;
+ if (Exists($w))
+ {
+ $w->Deactivate if ($client->IS($w->{'client'}));
+ }
+ delete $w->{'clients'}{$client};
+}
+
+sub GetOption
+{
+ my ($w,$opt,$client) = @_;
+ $client = $w->{'client'} unless defined $client;
+ if (defined $client)
+ {
+ my $info = $w->{'clients'}{$client};
+ return $info->{$opt} if exists $info->{$opt};
+ }
+ return $w->cget($opt);
+}
+
+sub Motion {
+ my ($ewin, $x, $y, $s) = @_;
+
+ return if not defined $ewin;
+
+ # Find which window we are over
+ my $over = $ewin->Containing($x, $y);
+
+ return if &grabBad($ewin, $over);
+
+ foreach my $w (@balloons) {
+ # if cursor has moved over the balloon -- ignore
+ next if defined $over and $over->toplevel eq $w;
+
+ # find the client window that matches
+ my $client = $over;
+ while (defined $client) {
+ last if (exists $w->{'clients'}{$client});
+ $client = $client->Parent;
+ }
+ if (defined $client) {
+ # popping up disabled -- ignore
+ my $state = $w->GetOption(-state => $client);
+ next if $state eq 'none';
+ # Check if a button was recently released:
+ my $deactivate = 0;
+ if ($button_up) {
+ $deactivate = 1;
+ $button_up = 0;
+ }
+ # Deactivate it if the motioncommand says to:
+ my $command = $w->GetOption(-motioncommand => $client);
+ $deactivate = $command->Call($client, $x, $y) if defined $command;
+ if ($deactivate)
+ {
+ $w->Deactivate;
+ }
+ else
+ {
+ # warn "deact: $client $w->{'client'}";
+ $w->Deactivate unless $client->IS($w->{'client'});
+ my $msg = $client->BalloonInfo($w,$x,$y,'-statusmsg','-balloonmsg');
+ if (defined($msg))
+ {
+ my $delay = delete $w->{'delay'};
+ $delay->cancel if defined $delay;
+ my $initwait = $w->GetOption(-initwait => $client);
+ $w->{'delay'} = $client->after($initwait, sub {$w->SwitchToClient($client);});
+ $w->{'client'} = $client;
+ }
+ }
+ } else {
+ # cursor is at a position covered by a non client
+ # pop down the balloon if it is up or scheduled.
+ $w->Deactivate;
+ }
+ }
+}
+
+sub ButtonDown {
+ my ($ewin) = @_;
+
+ foreach my $w (@balloons) {
+ $w->Deactivate;
+ }
+}
+
+sub ButtonUp {
+ $button_up = 1;
+}
+
+# switch the balloon to a new client
+sub SwitchToClient {
+ my ($w, $client) = @_;
+ return unless Exists($w);
+ return unless Exists($client);
+ return unless $client->IS($w->{'client'});
+ return if &grabBad($w, $client);
+ my $command = $w->GetOption(-postcommand => $client);
+ if (defined $command) {
+ # Execute the user's command and return if it returns false:
+ my $pos = $command->Call($client);
+ return if not $pos;
+ if ($pos =~ /^(\d+),(\d+)$/) {
+ # Save the returned position so the Popup method can use it:
+ $w->{'clients'}{$client}{'postposition'} = [$1, $2];
+ }
+ }
+ my $state = $w->GetOption(-state => $client);
+ $w->Popup if ($state =~ /both|balloon/);
+ $w->SetStatus if ($state =~ /both|status/);
+ $w->{'popped'} = 1;
+ $w->{'delay'} = $w->repeat(200, ['Verify', $w, $client]);
+}
+
+sub grabBad {
+
+ my ($w, $client) = @_;
+
+ return 0 unless Exists($client);
+ my $g = $w->grabCurrent;
+ return 0 unless defined $g;
+ return 0 if $g->isa('Tk::Menu');
+ return 0 if $g eq $client;
+
+ # The grab is OK if $client is a decendant of $g. Use the internal Tcl/Tk
+ # pathname (yes, it's cheating, but it's legal).
+
+ return 0 if $g == $w->MainWindow;
+ my $wp = $w->PathName;
+ my $gp = $g->PathName;
+ return 0 if $wp =~ /^$gp/;
+ return 1; # bad grab
+
+} # end grabBad
+
+
+sub Subclient
+{
+ my ($w,$data) = @_;
+ if (defined($w->{'subclient'}) && (!defined($data) || $w->{'subclient'} ne $data))
+ {
+ $w->Deactivate;
+ }
+ $w->{'subclient'} = $data;
+}
+
+sub Verify {
+ my $w = shift;
+ my $client = shift;
+ my ($X,$Y) = (@_) ? @_ : ($w->pointerxy);
+ my $over = $w->Containing($X,$Y);
+ return if not defined $over or ($over->toplevel eq $w);
+ my $deactivate = # DELETE? or move it to the isa-Menu section?:
+ # ($over ne $client) or
+ not $client->IS($w->{'client'})
+# or (!$client->isa('Tk::Menu') && $w->grabCurrent);
+# or $w->grabbad($client);
+ or &grabBad($w, $client);
+ if ($deactivate)
+ {
+ $w->Deactivate;
+ }
+ else
+ {
+ $client->BalloonInfo($w,$X,$Y,'-statusmsg','-balloonmsg');
+ }
+}
+
+sub Deactivate {
+ my ($w) = @_;
+ my $delay = delete $w->{'delay'};
+ $delay->cancel if defined $delay;
+ if ($w->{'popped'}) {
+ my $client = $w->{'client'};
+ my $command = $w->GetOption(-cancelcommand => $client);
+ if (defined $command) {
+ # Execute the user's command and return if it returns false:
+ return if not $command->Call($client);
+ }
+ $w->withdraw;
+ $w->ClearStatus;
+ $w->{'popped'} = 0;
+ $w->{'menu_index'} = 'none';
+ $w->{'canvas_tag'} = '';
+ }
+ $w->{'client'} = undef;
+ $w->{'subclient'} = undef;
+ $w->{'location'} = undef;
+}
+
+sub Popup {
+ my ($w) = @_;
+ if ($w->cget(-installcolormap)) {
+ $w->colormapwindows($w->winfo('toplevel'))
+ }
+ my $client = $w->{'client'};
+ return if not defined $client or not exists $w->{'clients'}{$client};
+ my $msg = $client->BalloonInfo($w, $w->pointerxy,'-balloonmsg');
+ # Dereference it if it looks like a scalar reference:
+ $msg = $$msg if UNIVERSAL::isa($msg, 'SCALAR');
+
+ $w->Subwidget('message')->configure(-text => $msg);
+ $w->idletasks;
+
+ return unless Exists($w);
+ return unless Exists($client);
+ return if $msg eq ''; # Don't popup empty balloons.
+
+ my ($x, $y);
+ my $pos = $w->GetOption(-balloonposition => $client);
+ my $postpos = delete $w->{'clients'}{$client}{'postposition'};
+ if (defined $postpos) {
+ # The postcommand must have returned a position for the balloon - I will use that:
+ ($x,$y) = @{$postpos};
+ } elsif ($pos eq 'mouse') {
+ ($x,$y)=$client->pointerxy; # We adjust the position later
+ } elsif ($pos eq 'widget') {
+ $x = int($client->rootx + $client->width/2);
+ $y = int($client->rooty + int ($client->height/1.3));
+ } else {
+ croak "'$pos' is not a valid position for the balloon - it must be one of: 'widget', 'mouse'.";
+ }
+
+ $w->idletasks;
+
+ # Explanation of following code. [JD]
+ # PREMISE: We want to ensure that the balloon is always "on screen".
+ # To do this we use calculate the size of the
+ # toplevel before it is mapped. Then we adjust it's position with respect to the
+ # mouse cursor or widget. Balloons are usually shown below and to the right of the target.
+ # From extensive KDE experience using Xinerama, and from using dual monitors on WinXP..
+ # the balloon will extend across two monitors in single logical screen mode (SLS).
+ # This is an undesirable characteristic indeed. Trying to read a disjointed balloon
+ # across monitors is not fun.
+ #
+ # The intent of the following code is to fix this problem. We do this by avoiding
+ # placement of any part of the balloon over,say, the "half screenwidth" mark (for two
+ # monitors in SLS mode) or "thirds of screenwidth" mark (for 3 monitors) and so on...
+ # i.e. In SLS mode these *WILL BE* separate screens and as such, should be considered hard
+ # boundaries to be avoided.
+ #
+ # The only drawback of this code, is I know of no way to actually determine this on a
+ # user by user basis. This means that the developer or administrator will have to know
+ # the hardware (monitor) setup for which the application is designed.
+ #
+ # This code uses Gerhard's GIF images but changes *how* the image gets shown. Instead
+ # of creating four separate labels, we configure only ONE label with the proper image.
+ # Then using the place geometry manager, this image/label can be "slid" along the
+ # appropriate side of the toplevel so that it always points directly at the target widget.
+ #
+ # Here we go..
+
+ my ($width, $height) = ($w->reqwidth, $w->reqheight);
+ my ($sw, $sh) = ($w->screenwidth, $w->screenheight);
+ my $numscreen = $w->cget(-numscreens);
+ my $deltax = $sw/$numscreen;
+ my $leftedge;
+ my $rightedge;
+ my $count = 0;
+ for (my $i=0; $i<$sw; $i+=$deltax){
+ $leftedge = $i;
+ $rightedge = $i + $deltax;
+ if ($x >= $leftedge && $x < $rightedge ){
+ last;
+ }
+ $count++;
+ }
+
+ # Force another look at balloon location because mouse has switched
+ # virtual screens.
+ $w->{'location'} = undef unless ( $count == $w->{'current_screen'} );
+ $w->{'current_screen'} = $count;
+
+ my $xx=undef;
+ my $yy=undef; # to hold final toplevel placement
+ my $slideOffsetX = 0;
+ my $slideOffsetY = 0;
+ my $cornerOffset = 5; #default - keep corner away from pointer
+ my $testtop = $y - $height - $cornerOffset;
+ my $testbottom = $y + $height + (2*$cornerOffset);
+ my $testright = $x + $width + (2*$cornerOffset);
+ my $testleft = $x - $width - $cornerOffset;
+ my $vert='bottom'; #default
+ my $horiz='right'; #default
+
+
+ if ( defined $w->{'location'} ){
+ # Once balloon is activated, **don't** change the location of the balloon.
+ # It is annoying to have it jump from one location to another.
+ ( $w->{'location'}=~/top/ ) ? ( $vert = 'top' ) : ( $vert = 'bottom' );
+ ( $w->{'location'}=~/left/ ) ? ( $horiz = 'left' ) : ( $horiz = 'right' );
+
+ if ($vert eq 'top' && $testtop < 0) {
+ $yy = 0;
+ $slideOffsetY = $testtop;
+ }
+ elsif ($vert eq 'bottom' && $testbottom > $sh) {
+ $slideOffsetY = $testbottom - $sh;
+ }
+
+ if ($horiz eq 'left' && $testleft < $leftedge) {
+ $xx = $leftedge;
+ }
+ elsif ($horiz eq 'right' && $testright > $rightedge) {
+ $slideOffsetX = $testright - $rightedge;
+ }
+ }
+ else {
+ #Test balloon positions in the vertical
+ if ($testbottom > $sh) {
+ #Then offscreen to bottom, check top
+ if ($testtop >= 0) {
+ $vert = 'top';
+ }
+ elsif ($y > $sh/2) {
+ #still offscreen to top but there is more room above then below
+ $vert = 'top';
+ $yy=0;
+ $slideOffsetY = $testtop;
+ }
+ if ($vert eq 'bottom'){
+ #Calculate Yoffset to fit entire balloon onto screen
+ $slideOffsetY = $testbottom - $sh;
+ }
+ }
+ #Test balloon positions in the horizontal
+
+ if ($testright > $rightedge) {
+ #The offscreen, check left
+ if ($testleft >= $leftedge) {
+ $horiz = 'left';
+ }
+ elsif ($x > ($leftedge+$deltax) ) {
+ #still offscreen to left but there is more room to left than right
+ $horiz = 'left';
+ $xx=0;
+ $slideOffsetX = $testleft;
+ }
+ if ($horiz eq 'right'){
+ #Calculate Xoffset to fit entire balloon onto screen
+ $slideOffsetX = $testright - $rightedge;
+ }
+ }
+ }
+
+ $w->{'location'} = $vert.$horiz unless (defined $w->{'location'});
+
+ if ($w->{'location'} eq 'bottomright') {
+ if ( $slideOffsetX or $slideOffsetY ) {
+ $w->{'pointer'}->configure(-image => $w->{img_no});
+ }
+ else {
+ $w->{'pointer'}->configure(-image => $w->{img_tl});
+ }
+
+ $w->{'pointer'}->place(
+ -in=>$w,
+# -relx=>0, -x=>$slideOffsetX + 2,
+# -rely=>0, -y=>$slideOffsetY + 2,
+ -relx=>0, -x=>2,
+ -rely=>0, -y=>2,
+ -bordermode=>'outside',
+ -anchor=>'nw');
+
+ $xx=$x-$slideOffsetX+(2*$cornerOffset) unless (defined $xx);
+ $yy=$y-$slideOffsetY+(2*$cornerOffset) unless (defined $yy);
+
+ }
+ elsif ($w->{'location'} eq 'bottomleft') {
+ if ( $slideOffsetX or $slideOffsetY ) {
+ $w->{'pointer'}->configure(-image => $w->{img_no});
+ }
+ else {
+ $w->{'pointer'}->configure(-image => $w->{img_tr});
+ }
+
+ $w->{'pointer'}->place(-in=>$w,
+# -relx=>1, -x=>$slideOffsetX - 2,
+# -rely=>0, -y=>$slideOffsetY + 2,
+ -relx=>1, -x=>-2,
+ -rely=>0, -y=>2,
+ -bordermode=>'outside',
+ -anchor=>'ne');
+
+ $xx=$x-$width-$slideOffsetX-$cornerOffset unless (defined $xx);
+ $yy=$y-$slideOffsetY+(2*$cornerOffset) unless (defined $yy);
+
+ }
+ elsif ($w->{'location'} eq 'topright') {
+ if ( $slideOffsetX or $slideOffsetY ) {
+ $w->{'pointer'}->configure(-image => $w->{img_no});
+ }
+ else {
+ $w->{'pointer'}->configure(-image => $w->{img_bl});
+ }
+
+ $w->{'pointer'}->place(-in=>$w,
+# -relx=>0, -x=>$slideOffsetX + 2,
+# -rely=>1, -y=>$slideOffsetY - 2,
+ -relx=>0, -x=>2,
+ -rely=>1, -y=>-2,
+ -bordermode=>'outside',
+ -anchor=>'sw');
+
+ $xx=$x-$slideOffsetX+$cornerOffset unless (defined $xx);
+ $yy=$y-$height-$slideOffsetY-$cornerOffset unless (defined $yy);
+ }
+ elsif ($w->{'location'} eq 'topleft') {
+ if ( $slideOffsetX or $slideOffsetY ) {
+ $w->{'pointer'}->configure(-image => $w->{img_no});
+ }
+ else {
+ $w->{'pointer'}->configure(-image => $w->{img_br});
+ }
+
+ $w->{'pointer'}->place(-in=>$w,
+# -relx=>1, -x=>$slideOffsetX - 2,
+# -rely=>1, -y=>$slideOffsetY - 2,
+ -relx=>1, -x=>-2,
+ -rely=>1, -y=>-2,
+ -bordermode=>'outside',
+ -anchor=>'se');
+
+ $xx=$x-$width-$slideOffsetX-$cornerOffset unless (defined $xx);
+ $yy=$y-$height-$slideOffsetY-$cornerOffset unless (defined $yy);
+ }
+
+ $w->{'pointer'}->raise;
+ $xx = int($xx);
+ $yy = int($yy);
+ $w->geometry("+$xx+$yy");
+ $w->deiconify();
+ $w->raise;
+}
+
+sub SetStatus {
+ my ($w) = @_;
+ my $client = $w->{'client'};
+ my $s = $w->GetOption(-statusbar => $client);
+ if (defined $s and $s->winfo('exists')) {
+ my $vref = $s->cget(-textvariable);
+ return if not defined $client or not exists $w->{'clients'}{$client};
+ my $msg = $client->BalloonInfo($w, $w->pointerxy,'-statusmsg');
+ # Dereference it if it looks like a scalar reference:
+ $msg = $$msg if UNIVERSAL::isa($msg, 'SCALAR');
+ if (not defined $vref) {
+ eval { $s->configure(-text => $msg); };
+ } else {
+ $$vref = $msg;
+ }
+ }
+}
+
+sub ClearStatus {
+ my ($w) = @_;
+ my $client = $w->{'client'};
+ my $s = $w->GetOption(-statusbar => $client);
+ if (defined $s and $s->winfo('exists')) {
+ my $vref = $s->cget(-textvariable);
+ if (defined $vref) {
+ $$vref = '';
+ } else {
+ eval { $s->configure(-text => ''); }
+ }
+ }
+}
+
+sub _destroyed {
+ my ($w) = @_;
+ # This is called when widget is destroyed (no matter how!)
+ # via the ->OnDestroy hook set in Populate.
+ # remove ourselves from the list of baloons.
+ @balloons = grep($w != $_, @balloons);
+
+ # FIXME: If @balloons is now empty perhaps remove the 'all' bindings
+ # to reduce overhead until another balloon is created?
+
+ # Delete the images
+ for (qw(no tl tr bl br)) {
+ my $img = delete $w->{"img_$_"};
+ $img->delete if defined $img;
+ }
+}
+
+1;
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Bitmap.pm b/Master/tlpkg/tlperl/lib/Tk/Bitmap.pm
new file mode 100644
index 00000000000..d081a393804
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Bitmap.pm
@@ -0,0 +1,10 @@
+package Tk::Bitmap;
+require Tk;
+require Tk::Image;
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Bitmap.pm#4 $
+use base qw(Tk::Image);
+Construct Tk::Image 'Bitmap';
+sub Tk_image { 'bitmap' }
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm b/Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm
new file mode 100644
index 00000000000..5c4b6b782c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/BrowseEntry.pm
@@ -0,0 +1,510 @@
+#
+# BrowseEntry is a stripped down version of ComboBox.tcl from Tix4.0
+#
+# Some additions by Slaven Rezic <slaven@rezic.de> to make the widget
+# look like the Windows' Combobox. There are also additional options.
+#
+
+package Tk::BrowseEntry;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #13 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev);
+use Carp;
+use strict;
+
+use base qw(Tk::Frame);
+Construct Tk::Widget 'BrowseEntry';
+
+require Tk::LabEntry;
+
+sub LabEntryWidget { "LabEntry" }
+sub ButtonWidget { "Button" }
+sub ListboxWidget { "Listbox" }
+
+sub Populate {
+ my ($w, $args) = @_;
+
+ $w->Tk::Frame::Populate($args);
+
+ # entry widget and arrow button
+ my $lpack = delete $args->{-labelPack};
+ if (not defined $lpack) {
+ $lpack = [-side => 'left', -anchor => 'e'];
+ }
+ $w->{_BE_Style} = delete $args->{-style} || $Tk::platform;
+ my $LabEntry = $w->LabEntryWidget;
+ my $Listbox = $w->ListboxWidget;
+ my $Button = $w->ButtonWidget;
+ # XXX should this be retained?
+# if (defined $args->{-state} and $args->{-state} eq 'readonly') { # XXX works only at construction time
+# $LabEntry = "NoSelLabEntry";
+# require Tk::NoSelLabEntry;
+# }
+ my $e;
+ my $var = "";
+ my @LabEntry_args = (-textvariable => \$var);
+ if (exists $args->{-label}) {
+ $e = $w->$LabEntry(-labelPack => $lpack,
+ -label => delete $args->{-label},
+ @LabEntry_args,
+ );
+ } else {
+ $e = $w->$LabEntry(@LabEntry_args);
+ }
+ my $b = $w->$Button(-bitmap => '@' . Tk->findINC($w->{_BE_Style} eq 'MSWin32' ? 'arrowdownwin.xbm' : 'cbxarrow.xbm'));
+ $w->Advertise('entry' => $e);
+ $w->Advertise('arrow' => $b);
+
+ # Pack the button to align vertically with the entry widget
+ my @anch;
+ my $edge = {@$lpack}->{-side};
+ push(@anch,-anchor => 's') if ($edge && $edge eq 'top');
+ push(@anch,-anchor => 'n') if ($edge && $edge eq 'bottom');
+ $b->pack(-side => 'right', -padx => 1, @anch);
+
+ $e->pack(-side => 'right', -fill => 'x', -expand => 1); #XXX, -padx => 1);
+
+ # popup shell for listbox with values.
+ my $c = $w->Toplevel(-bd => 2,
+ -relief => ($w->{_BE_Style} eq 'MSWin32'
+ ? "solid" : "raised"));
+ $c->overrideredirect(1);
+ $c->withdraw;
+ my $sl = $c->Scrolled( $Listbox, qw/-selectmode browse -scrollbars oe/ );
+ if ($w->{_BE_Style} eq 'MSWin32' and $Tk::platform eq 'MSWin32') {
+ $sl->configure(-bg => 'SystemWindow', -relief => "flat");
+ }
+ $w->Advertise('choices' => $c);
+ $w->Advertise('slistbox' => $sl);
+ $sl->pack(-expand => 1, -fill => 'both');
+
+ $sl->Subwidget("scrolled")->bind("<Motion>",sub {
+ return unless ($w->{_BE_Style} eq 'MSWin32');
+ my $e = $_[0]->XEvent;
+ my $y = $e->y;
+ my $inx = $sl->nearest($y);
+ if (defined $inx) {
+ $sl->selectionClear(0, "end");
+ $sl->selectionSet($inx);
+ }
+ });
+
+ # other initializations
+ $w->SetBindings;
+ $w->{'_BE_popped'} = 0;
+ $w->Delegates(get => $sl, DEFAULT => $e);
+ $w->ConfigSpecs(
+ -font => [qw/DESCENDANTS font Font/],
+ -listwidth => [qw/PASSIVE listWidth ListWidth/, undef],
+ -listheight => [{-height => $sl}, qw/listHeight ListHeight/, undef],
+ -listcmd => [qw/CALLBACK listCmd ListCmd/, undef],
+ -autolistwidth => [qw/PASSIVE autoListWidth AutoListWidth/, undef],
+ -autolimitheight => [qw/PASSIVE autoLimitHeight AutoLimitHeight 0/],
+ -browsecmd => [qw/CALLBACK browseCmd BrowseCmd/, undef],
+ -browse2cmd => [qw/CALLBACK browse2Cmd Browse2Cmd/, undef],
+ -choices => [qw/METHOD choices Choices/, undef],
+ -state => [qw/METHOD state State normal/],
+ -arrowimage => [ {-image => $b}, qw/arrowImage ArrowImage/, undef],
+ -variable => [ {'-textvariable' => $e} ],
+ -colorstate => [qw/PASSIVE colorState ColorState/, undef],
+ -command => '-browsecmd',
+ -options => '-choices',
+ -label => [qw/PASSIVE label Label/, undef],
+ -labelPack => [qw/PASSIVE labelPack LabelPack/, undef],
+ #-background => [$e, qw/background Background/, undef],
+ #-foreground => [$e, qw/foreground Foreground/, undef],
+ -buttontakefocus => [{-takefocus => $b}, 'buttonTakefocus',
+ 'ButtonTakefocus', 1],
+ DEFAULT => [$e] );
+}
+
+sub SetBindings {
+ my ($w) = @_;
+
+ my $e = $w->Subwidget('entry');
+ my $b = $w->Subwidget('arrow');
+
+ # set bind tags
+ $w->bindtags([$w, 'Tk::BrowseEntry', $w->toplevel, 'all']);
+ # as we don't bind $e here leave its tags alone ...
+ # $e->bindtags([$e, ref($e), $e->toplevel, 'all']);
+
+ # bindings for the button and entry
+ $b->bind('<1>',[$w,'BtnDown']);
+ $b->toplevel->bind('<ButtonRelease-1>',[$w,'ButtonHack']);
+ $b->bind('<space>',[$w,'space']);
+
+ # bindings for listbox
+ my $sl = $w->Subwidget('slistbox');
+ my $l = $sl->Subwidget('listbox');
+ $l->bind('<ButtonRelease-1>',[$w,'ListboxRelease',Ev('x'),Ev('y')]);
+ $l->bind('<Escape>' => [$w,'LbClose']);
+ $l->bind('<Return>' => [$w,'Return',$l]);
+
+ # allow click outside the popped up listbox to pop it down.
+ $w->bind('<1>','BtnDown');
+}
+
+sub space
+{
+ my $w = shift;
+ $w->BtnDown;
+ $w->{'_BE_savefocus'} = $w->focusCurrent;
+ $w->Subwidget('slistbox')->focus;
+}
+
+
+sub ListboxRelease
+{
+ my ($w,$x,$y) = @_;
+ $w->ButtonHack;
+ $w->LbChoose($x, $y);
+}
+
+sub Return
+{
+ my ($w,$l) = @_;
+ my($x, $y) = $l->bbox($l->curselection);
+ $w->LbChoose($x, $y)
+}
+
+
+sub BtnDown {
+ my ($w) = @_;
+ return if $w->cget( '-state' ) eq 'disabled';
+
+ if ($w->{'_BE_popped'}) {
+ $w->Popdown;
+ $w->{'_BE_buttonHack'} = 0;
+ } else {
+ $w->PopupChoices;
+ $w->{'_BE_buttonHack'} = 1;
+ }
+}
+
+sub PopupChoices {
+ my ($w) = @_;
+
+ if (!$w->{'_BE_popped'}) {
+ $w->Callback(-listcmd => $w);
+ my $e = $w->Subwidget('entry');
+ my $c = $w->Subwidget('choices');
+ my $s = $w->Subwidget('slistbox');
+ my $a = $w->Subwidget('arrow');
+ my $y1 = ($w->{_BE_Style} eq 'MSWin32'
+ ? $a->rooty + $a->height
+ : $e->rooty + $e->height + 3
+ );
+ my $bd = $c->cget(-bd) + $c->cget(-highlightthickness);
+ # using the real listbox reqheight rather than the
+ # container frame one, which does not change after resizing the
+ # listbox
+ my $ht = $s->Subwidget("scrolled")->reqheight + 2 * $bd;
+ my $x1 = ($w->{_BE_Style} eq 'MSWin32'
+ ? $e->Subwidget("entry")->rootx
+ : $e->rootx
+ );
+ my ($width, $x2);
+ if (defined $w->cget(-listwidth)) {
+ $width = $w->cget(-listwidth);
+ $x2 = $x1 + $width;
+ } else {
+ $x2 = $a->rootx + $a->width;
+ $width = $x2 - $x1;
+ }
+ my $rw = $c->reqwidth;
+ if ($rw < $width) {
+ $rw = $width
+ } else {
+ if ($rw > $width * 3) {
+ $rw = $width * 3;
+ }
+ if ($rw > $w->vrootwidth) {
+ $rw = $w->vrootwidth;
+ }
+ }
+ $width = $rw;
+
+ # if listbox is too far right, pull it back to the left
+ #
+ if ($x2 > $w->vrootwidth) {
+ $x1 = $w->vrootwidth - $width;
+ }
+
+ # if listbox is too far left, pull it back to the right
+ #
+ if ($x1 < 0) {
+ $x1 = 0;
+ }
+
+ # if listbox is below bottom of screen, pull it up.
+ # check the Win32 taskbar, if possible
+ my $rootheight;
+ if ($Tk::platform eq 'MSWin32' and $^O eq 'MSWin32') {
+ eval {
+ require Win32Util; # XXX should not use a non-CPAN widget
+ $rootheight = (Win32Util::screen_region($w))[3];
+ };
+ }
+ if (!defined $rootheight) {
+ $rootheight = $w->vrootheight;
+ }
+
+ my $y2 = $y1 + $ht;
+ if ($y2 > $rootheight) {
+ $y1 = $y1 - $ht - ($e->height - 5);
+ }
+ $c->geometry(sprintf('%dx%d+%d+%d', $rw, $ht, $x1, $y1));
+ $c->deiconify;
+ $c->raise;
+ $e->focus;
+ $w->{'_BE_popped'} = 1;
+
+ # highlight current selection
+ my $current_sel = $e->get;
+ if (defined $current_sel) {
+ my $i = 0;
+ foreach my $str ($s->get(0, "end")) {
+ if ($str eq $current_sel) {
+ $s->selectionClear(0, "end");
+ $s->selectionSet($i);
+ last;
+ }
+ $i++;
+ }
+ }
+
+ $c->configure(-cursor => 'arrow');
+ $w->{'_BE_grabinfo'} = $w->grabSave;
+ $w->grabGlobal;
+ }
+}
+
+# choose value from listbox if appropriate
+sub LbChoose {
+ my ($w, $x, $y) = @_;
+ my $l = $w->Subwidget('slistbox')->Subwidget('listbox');
+ if ((($x < 0) || ($x > $l->Width)) ||
+ (($y < 0) || ($y > $l->Height))) {
+ # mouse was clicked outside the listbox... close the listbox
+ $w->LbClose;
+ } else {
+ # select appropriate entry and close the listbox
+ $w->LbCopySelection;
+ $w->Callback(-browsecmd, $w, $w->Subwidget('entry')->get());
+ $w->Callback(-browse2cmd => $w, $w->LbIndex);
+ }
+}
+
+# close the listbox after clearing selection
+sub LbClose {
+ my ($w) = @_;
+ my $l = $w->Subwidget('slistbox')->Subwidget('listbox');
+ $l->selection('clear', 0, 'end');
+ $w->Popdown;
+}
+
+# copy the selection to the entry and close listbox
+sub LbCopySelection {
+ my ($w) = @_;
+ my $index = $w->LbIndex;
+ if (defined $index) {
+ $w->{'_BE_curIndex'} = $index;
+ my $l = $w->Subwidget('slistbox')->Subwidget('listbox');
+ my $var_ref = $w->cget( '-textvariable' );
+ $$var_ref = $l->get($index);
+ if ($w->{'_BE_popped'}) {
+ $w->Popdown;
+ }
+ }
+ $w->Popdown;
+}
+
+sub LbIndex {
+ my ($w, $flag) = @_;
+ my ($sel) = $w->Subwidget('slistbox')->Subwidget('listbox')->curselection;
+ if (defined $sel) {
+ return int($sel);
+ } else {
+ if (defined $flag && ($flag eq 'emptyOK')) {
+ return undef;
+ } else {
+ return 0;
+ }
+ }
+}
+
+# pop down the listbox
+sub Popdown {
+ my ($w) = @_;
+ if ($w->{'_BE_savefocus'} && Tk::Exists($w->{'_BE_savefocus'})) {
+ $w->{'_BE_savefocus'}->focus;
+ delete $w->{'_BE_savefocus'};
+ }
+ if ($w->{'_BE_popped'}) {
+ my $c = $w->Subwidget('choices');
+ $c->withdraw;
+ $w->grabRelease;
+ if (ref $w->{'_BE_grabinfo'} eq 'CODE') {
+ $w->{'_BE_grabinfo'}->();
+ delete $w->{'_BE_grabinfo'};
+ }
+ $w->{'_BE_popped'} = 0;
+ }
+}
+
+# This hack is to prevent the ugliness of the arrow being depressed.
+#
+sub ButtonHack {
+ my ($w) = @_;
+ my $b = $w->Subwidget('arrow');
+ if ($w->{'_BE_buttonHack'}) {
+ $b->butUp;
+ }
+}
+
+sub choices
+{
+ my ($w,$choices) = @_;
+ if (@_ > 1)
+ {
+ $w->delete( qw/0 end/ );
+ my %hash;
+ my $var = $w->cget('-textvariable');
+ my $old = $$var;
+ foreach my $val (@$choices)
+ {
+ $w->insert( 'end', $val);
+ $hash{$val} = 1;
+ }
+ $old = $choices->[0]
+ if defined $old && not exists $hash{$old} && defined $choices->[0];
+ $$var = $old;
+ }
+ else
+ {
+ return( $w->get( qw/0 end/ ) );
+ }
+}
+
+sub _set_edit_state {
+ my( $w, $state ) = @_;
+
+ my $entry = $w->Subwidget( 'entry' );
+ my $button = $w->Subwidget( 'arrow' );
+
+ if ($w->cget( '-colorstate' )) {
+ my $color;
+ if( $state eq 'normal' ) { # Editable
+ $color = 'gray95';
+ } else { # Not Editable
+ $color = $w->cget( -background ) || 'lightgray';
+ }
+ $entry->Subwidget( 'entry' )->configure( -background => $color );
+ }
+
+ if( $state eq 'readonly' ) {
+ $entry->configure( -state => 'disabled' );
+ $button->configure( -state => 'normal' );
+ if ($w->{_BE_Style} eq 'MSWin32') {
+ $entry->bind('<1>',[$w,'BtnDown']);
+ $w->{_BE_OriginalCursor} = $entry->cget( -cursor );
+ $entry->configure( -cursor => 'left_ptr' );
+ }
+ } else {
+ $entry->configure( -state => $state );
+ if (exists $w->{_BE_OriginalCursor}) {
+ $entry->configure(-cursor => delete $w->{_BE_OriginalCursor});
+ }
+ $button->configure( -state => $state );
+ if ($w->{_BE_Style} eq 'MSWin32') {
+ $entry->bind('<1>',['Button1',Tk::Ev('x')]);
+ }
+ }
+}
+
+sub state {
+ my $w = shift;
+ unless( @_ ) {
+ return( $w->{Configure}{-state} );
+ } else {
+ my $state = shift;
+ $w->{Configure}{-state} = $state;
+ $w->_set_edit_state( $state );
+ }
+}
+
+sub _max {
+ my $max = shift;
+ foreach my $val (@_) {
+ $max = $val if $max < $val;
+ }
+ return( $max );
+}
+
+sub shrinkwrap {
+ my( $w, $size ) = @_;
+
+ unless( defined $size ) {
+ $size = _max( map( length, $w->get( qw/0 end/ ) ) ) || 0;;
+ }
+
+ my $lb = $w->Subwidget( 'slistbox' )->Subwidget( 'listbox' );
+ $w->configure( -width => $size );
+ $lb->configure( -width => $size );
+}
+
+sub limitheight {
+ my $w = shift;
+ my $choices_number = shift || $w->Subwidget('slistbox')->index("end");
+ $choices_number = 10 if $choices_number > 10;
+ $w->configure(-listheight => $choices_number) if ($choices_number > 0);
+}
+
+sub insert {
+ my $w = shift;
+ $w->Subwidget("slistbox")->insert(@_);
+ if ($w->cget(-autolimitheight)) {
+ $w->limitheight;
+ }
+ if ($w->cget(-autolistwidth)) {
+ $w->updateListWidth(@_[1..$#_]);
+ }
+}
+
+sub delete {
+ my $w = shift;
+ $w->Subwidget("slistbox")->delete(@_);
+ if ($w->cget(-autolimitheight)) {
+ $w->limitheight;
+ }
+ if ($w->cget(-autolistwidth)) {
+ $w->updateListWidth();
+ }
+}
+
+sub updateListWidth {
+ my $w = shift;
+ my @ins = @_;
+ if (!@ins) {
+ @ins = $w->get(0, "end");
+ }
+
+ my $max_width = 0;
+ foreach my $ins (@ins) {
+ my $new_width = $w->fontMeasure($w->cget(-font), $ins);
+ if ($new_width > $max_width) {
+ $max_width = $new_width;
+ }
+ }
+ if ($max_width > 20) { # be sane
+ $w->configure(-listwidth => $max_width + 32); # XXX for scrollbar
+ }
+}
+
+1;
+
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Button.pm b/Master/tlpkg/tlperl/lib/Tk/Button.pm
new file mode 100644
index 00000000000..efa597dee14
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Button.pm
@@ -0,0 +1,148 @@
+package Tk::Button;
+# Conversion from Tk4.0 button.tcl competed.
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+use vars qw($VERSION);
+$VERSION = '4.008'; # $Id: //depot/Tkutf8/Tk/Button.pm#8 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+use strict;
+
+require Tk::Widget;
+use base qw(Tk::Widget);
+
+use vars qw($buttonWindow $relief);
+
+Tk::Methods('deselect','flash','invoke','select','toggle');
+
+sub Tk_cmd { \&Tk::button }
+
+Construct Tk::Widget 'Button';
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'butDown');
+ $mw->bind($class,'<ButtonRelease-1>', 'butUp');
+ $mw->bind($class,'<space>', 'Invoke');
+ $mw->bind($class,'<Return>', 'Invoke');
+ return $class;
+}
+
+# tkButtonEnter --
+# The procedure below is invoked when the mouse pointer enters a
+# button widget. It records the button we're in and changes the
+# state of the button to active unless the button is disabled.
+#
+# Arguments:
+# w - The name of the widget.
+
+sub Enter
+{
+ my $w = shift;
+ my $E = shift;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $w->configure('-state' => 'active');
+ $w->configure('-state' => 'active', '-relief' => 'sunken') if (defined($buttonWindow) && $w == $buttonWindow)
+ }
+ $Tk::window = $w;
+}
+
+# tkButtonLeave --
+# The procedure below is invoked when the mouse pointer leaves a
+# button widget. It changes the state of the button back to
+# inactive. If we're leaving the button window with a mouse button
+# pressed (tkPriv(buttonWindow) == $w), restore the relief of the
+# button too.
+#
+# Arguments:
+# w - The name of the widget.
+sub Leave
+{
+ my $w = shift;
+ $w->configure('-state'=>'normal') if ($w->cget('-state') ne 'disabled');
+ $w->configure('-relief' => $relief) if (defined($buttonWindow) && $w == $buttonWindow);
+ undef $Tk::window;
+}
+
+# tkButtonDown --
+# The procedure below is invoked when the mouse button is pressed in
+# a button widget. It records the fact that the mouse is in the button,
+# saves the button's relief so it can be restored later, and changes
+# the relief to sunken.
+#
+# Arguments:
+# w - The name of the widget.
+sub butDown
+{
+ my $w = shift;
+ $relief = $w->cget('-relief');
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $buttonWindow = $w;
+ $w->configure('-relief' => 'sunken')
+ }
+}
+
+# tkButtonUp --
+# The procedure below is invoked when the mouse button is released
+# in a button widget. It restores the button's relief and invokes
+# the command as long as the mouse hasn't left the button.
+#
+# Arguments:
+# w - The name of the widget.
+sub butUp
+{
+ my $w = shift;
+ if (defined($buttonWindow) && $buttonWindow == $w)
+ {
+ undef $buttonWindow;
+ $w->configure('-relief' => $relief);
+ if ($w->IS($Tk::window) && $w->cget('-state') ne 'disabled')
+ {
+ $w->invoke;
+ }
+ }
+}
+
+# tkButtonInvoke --
+# The procedure below is called when a button is invoked through
+# the keyboard. It simulate a press of the button via the mouse.
+#
+# Arguments:
+# w - The name of the widget.
+sub Invoke
+{
+ my $w = shift;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ my $oldRelief = $w->cget('-relief');
+ my $oldState = $w->cget('-state');
+ $w->configure('-state' => 'active', '-relief' => 'sunken');
+ $w->idletasks;
+ $w->after(100);
+ $w->configure('-state' => $oldState, '-relief' => $oldRelief);
+ $w->invoke;
+ }
+}
+
+
+
+1;
+
+__END__
+
+
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Camel.xpm b/Master/tlpkg/tlperl/lib/Tk/Camel.xpm
new file mode 100644
index 00000000000..ba33c0149ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Camel.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *Camel[] = {
+/* width height num_colors chars_per_pixel */
+" 32 32 2 1",
+/* colors */
+". c #ffffff",
+"# c #7f7f00",
+/* pixels */
+"................................",
+"................................",
+"...................###..........",
+".......####......######.........",
+"....####.##.....########........",
+"....########....#########.......",
+"......######..###########.......",
+"......#####..#############......",
+".....######.##############......",
+".....######.###############.....",
+".....######################.....",
+".....#######################....",
+".....#######################....",
+"......#######################...",
+".......####################.#...",
+"........###################.#...",
+"........###############.###.#...",
+"............#######.###.###.#...",
+"............###.###.##...##.....",
+"............###.###..#...##.....",
+"............##.####..#....#.....",
+"............##.###...#....#.....",
+"............##.##...#.....#.....",
+"............#...#...#.....#.....",
+"............#....#..#.....#.....",
+"............#.....#.#.....#.....",
+"............#.....###.....#.....",
+"...........##....##.#....#......",
+"...........#..............#.....",
+".........###.............#......"
+"................................",
+"................................",
+};
diff --git a/Master/tlpkg/tlperl/lib/Tk/Canvas.pm b/Master/tlpkg/tlperl/lib/Tk/Canvas.pm
new file mode 100644
index 00000000000..210bc30bfc2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Canvas.pm
@@ -0,0 +1,1436 @@
+package Tk::Canvas;
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #12 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw($XS_VERSION);
+
+use base qw(Tk::Widget);
+Construct Tk::Widget 'Canvas';
+
+bootstrap Tk::Canvas;
+
+sub Tk_cmd { \&Tk::canvas }
+
+Tk::Methods('addtag','bbox','bind','canvasx','canvasy','coords','create',
+ 'dchars','delete','dtag','find','focus','gettags','icursor',
+ 'index','insert','itemcget','itemconfigure','lower','move',
+ 'postscript','raise','scale','scan','select','type','xview','yview');
+
+use Tk::Submethods ( 'create' => [qw(arc bitmap grid group image line oval
+ polygon rectangle text window)],
+ 'scan' => [qw(mark dragto)],
+ 'select' => [qw(from clear item to)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ );
+
+*CanvasBind = \&Tk::bind;
+*CanvasFocus = \&Tk::focus;
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->XYscrollBind($class);
+ return $class;
+}
+
+sub BalloonInfo
+{
+ my ($canvas,$balloon,$X,$Y,@opt) = @_;
+ my @tags = ($canvas->find('withtag', 'current'),$canvas->gettags('current'));
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$canvas);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'HASH'))
+ {
+ $balloon->Subclient($tags[0]);
+ foreach my $tag (@tags)
+ {
+ return $info->{$tag} if exists $info->{$tag};
+ }
+ return '';
+ }
+ return $info;
+ }
+}
+
+sub get_corners
+{
+ my $c = shift;
+ my(@xview) = $c->xview;
+ my(@yview) = $c->yview;
+ my(@scrollregion) = @{$c->cget(-scrollregion)};
+ return (
+ $xview[0] * ($scrollregion[2]-$scrollregion[0]) + $scrollregion[0],
+ $yview[0] * ($scrollregion[3]-$scrollregion[1]) + $scrollregion[1],
+ $xview[1] * ($scrollregion[2]-$scrollregion[0]) + $scrollregion[0],
+ $yview[1] * ($scrollregion[3]-$scrollregion[1]) + $scrollregion[1],
+ );
+}
+
+# List of adobe glyph names. Converted from glyphlist.txt, downloaded
+# from Adobe
+
+$Tk::psglyphs = {qw(
+ 0020 space
+ 0021 exclam
+ 0022 quotedbl
+ 0023 numbersign
+ 0024 dollar
+ 0025 percent
+ 0026 ampersand
+ 0027 quotesingle
+ 0028 parenleft
+ 0029 parenright
+ 002A asterisk
+ 002B plus
+ 002C comma
+ 002D hyphen
+ 002E period
+ 002F slash
+ 0030 zero
+ 0031 one
+ 0032 two
+ 0033 three
+ 0034 four
+ 0035 five
+ 0036 six
+ 0037 seven
+ 0038 eight
+ 0039 nine
+ 003A colon
+ 003B semicolon
+ 003C less
+ 003D equal
+ 003E greater
+ 003F question
+ 0040 at
+ 0041 A
+ 0042 B
+ 0043 C
+ 0044 D
+ 0045 E
+ 0046 F
+ 0047 G
+ 0048 H
+ 0049 I
+ 004A J
+ 004B K
+ 004C L
+ 004D M
+ 004E N
+ 004F O
+ 0050 P
+ 0051 Q
+ 0052 R
+ 0053 S
+ 0054 T
+ 0055 U
+ 0056 V
+ 0057 W
+ 0058 X
+ 0059 Y
+ 005A Z
+ 005B bracketleft
+ 005C backslash
+ 005D bracketright
+ 005E asciicircum
+ 005F underscore
+ 0060 grave
+ 0061 a
+ 0062 b
+ 0063 c
+ 0064 d
+ 0065 e
+ 0066 f
+ 0067 g
+ 0068 h
+ 0069 i
+ 006A j
+ 006B k
+ 006C l
+ 006D m
+ 006E n
+ 006F o
+ 0070 p
+ 0071 q
+ 0072 r
+ 0073 s
+ 0074 t
+ 0075 u
+ 0076 v
+ 0077 w
+ 0078 x
+ 0079 y
+ 007A z
+ 007B braceleft
+ 007C bar
+ 007D braceright
+ 007E asciitilde
+ 00A0 space
+ 00A1 exclamdown
+ 00A2 cent
+ 00A3 sterling
+ 00A4 currency
+ 00A5 yen
+ 00A6 brokenbar
+ 00A7 section
+ 00A8 dieresis
+ 00A9 copyright
+ 00AA ordfeminine
+ 00AB guillemotleft
+ 00AC logicalnot
+ 00AD hyphen
+ 00AE registered
+ 00AF macron
+ 00B0 degree
+ 00B1 plusminus
+ 00B2 twosuperior
+ 00B3 threesuperior
+ 00B4 acute
+ 00B5 mu
+ 00B6 paragraph
+ 00B7 periodcentered
+ 00B8 cedilla
+ 00B9 onesuperior
+ 00BA ordmasculine
+ 00BB guillemotright
+ 00BC onequarter
+ 00BD onehalf
+ 00BE threequarters
+ 00BF questiondown
+ 00C0 Agrave
+ 00C1 Aacute
+ 00C2 Acircumflex
+ 00C3 Atilde
+ 00C4 Adieresis
+ 00C5 Aring
+ 00C6 AE
+ 00C7 Ccedilla
+ 00C8 Egrave
+ 00C9 Eacute
+ 00CA Ecircumflex
+ 00CB Edieresis
+ 00CC Igrave
+ 00CD Iacute
+ 00CE Icircumflex
+ 00CF Idieresis
+ 00D0 Eth
+ 00D1 Ntilde
+ 00D2 Ograve
+ 00D3 Oacute
+ 00D4 Ocircumflex
+ 00D5 Otilde
+ 00D6 Odieresis
+ 00D7 multiply
+ 00D8 Oslash
+ 00D9 Ugrave
+ 00DA Uacute
+ 00DB Ucircumflex
+ 00DC Udieresis
+ 00DD Yacute
+ 00DE Thorn
+ 00DF germandbls
+ 00E0 agrave
+ 00E1 aacute
+ 00E2 acircumflex
+ 00E3 atilde
+ 00E4 adieresis
+ 00E5 aring
+ 00E6 ae
+ 00E7 ccedilla
+ 00E8 egrave
+ 00E9 eacute
+ 00EA ecircumflex
+ 00EB edieresis
+ 00EC igrave
+ 00ED iacute
+ 00EE icircumflex
+ 00EF idieresis
+ 00F0 eth
+ 00F1 ntilde
+ 00F2 ograve
+ 00F3 oacute
+ 00F4 ocircumflex
+ 00F5 otilde
+ 00F6 odieresis
+ 00F7 divide
+ 00F8 oslash
+ 00F9 ugrave
+ 00FA uacute
+ 00FB ucircumflex
+ 00FC udieresis
+ 00FD yacute
+ 00FE thorn
+ 00FF ydieresis
+ 0100 Amacron
+ 0101 amacron
+ 0102 Abreve
+ 0103 abreve
+ 0104 Aogonek
+ 0105 aogonek
+ 0106 Cacute
+ 0107 cacute
+ 0108 Ccircumflex
+ 0109 ccircumflex
+ 010A Cdotaccent
+ 010B cdotaccent
+ 010C Ccaron
+ 010D ccaron
+ 010E Dcaron
+ 010F dcaron
+ 0110 Dcroat
+ 0111 dcroat
+ 0112 Emacron
+ 0113 emacron
+ 0114 Ebreve
+ 0115 ebreve
+ 0116 Edotaccent
+ 0117 edotaccent
+ 0118 Eogonek
+ 0119 eogonek
+ 011A Ecaron
+ 011B ecaron
+ 011C Gcircumflex
+ 011D gcircumflex
+ 011E Gbreve
+ 011F gbreve
+ 0120 Gdotaccent
+ 0121 gdotaccent
+ 0122 Gcommaaccent
+ 0123 gcommaaccent
+ 0124 Hcircumflex
+ 0125 hcircumflex
+ 0126 Hbar
+ 0127 hbar
+ 0128 Itilde
+ 0129 itilde
+ 012A Imacron
+ 012B imacron
+ 012C Ibreve
+ 012D ibreve
+ 012E Iogonek
+ 012F iogonek
+ 0130 Idotaccent
+ 0131 dotlessi
+ 0132 IJ
+ 0133 ij
+ 0134 Jcircumflex
+ 0135 jcircumflex
+ 0136 Kcommaaccent
+ 0137 kcommaaccent
+ 0138 kgreenlandic
+ 0139 Lacute
+ 013A lacute
+ 013B Lcommaaccent
+ 013C lcommaaccent
+ 013D Lcaron
+ 013E lcaron
+ 013F Ldot
+ 0140 ldot
+ 0141 Lslash
+ 0142 lslash
+ 0143 Nacute
+ 0144 nacute
+ 0145 Ncommaaccent
+ 0146 ncommaaccent
+ 0147 Ncaron
+ 0148 ncaron
+ 0149 napostrophe
+ 014A Eng
+ 014B eng
+ 014C Omacron
+ 014D omacron
+ 014E Obreve
+ 014F obreve
+ 0150 Ohungarumlaut
+ 0151 ohungarumlaut
+ 0152 OE
+ 0153 oe
+ 0154 Racute
+ 0155 racute
+ 0156 Rcommaaccent
+ 0157 rcommaaccent
+ 0158 Rcaron
+ 0159 rcaron
+ 015A Sacute
+ 015B sacute
+ 015C Scircumflex
+ 015D scircumflex
+ 015E Scedilla
+ 015F scedilla
+ 0160 Scaron
+ 0161 scaron
+ 0162 Tcommaaccent
+ 0163 tcommaaccent
+ 0164 Tcaron
+ 0165 tcaron
+ 0166 Tbar
+ 0167 tbar
+ 0168 Utilde
+ 0169 utilde
+ 016A Umacron
+ 016B umacron
+ 016C Ubreve
+ 016D ubreve
+ 016E Uring
+ 016F uring
+ 0170 Uhungarumlaut
+ 0171 uhungarumlaut
+ 0172 Uogonek
+ 0173 uogonek
+ 0174 Wcircumflex
+ 0175 wcircumflex
+ 0176 Ycircumflex
+ 0177 ycircumflex
+ 0178 Ydieresis
+ 0179 Zacute
+ 017A zacute
+ 017B Zdotaccent
+ 017C zdotaccent
+ 017D Zcaron
+ 017E zcaron
+ 017F longs
+ 0192 florin
+ 01A0 Ohorn
+ 01A1 ohorn
+ 01AF Uhorn
+ 01B0 uhorn
+ 01E6 Gcaron
+ 01E7 gcaron
+ 01FA Aringacute
+ 01FB aringacute
+ 01FC AEacute
+ 01FD aeacute
+ 01FE Oslashacute
+ 01FF oslashacute
+ 0218 Scommaaccent
+ 0219 scommaaccent
+ 021A Tcommaaccent
+ 021B tcommaaccent
+ 02BC afii57929
+ 02BD afii64937
+ 02C6 circumflex
+ 02C7 caron
+ 02C9 macron
+ 02D8 breve
+ 02D9 dotaccent
+ 02DA ring
+ 02DB ogonek
+ 02DC tilde
+ 02DD hungarumlaut
+ 0300 gravecomb
+ 0301 acutecomb
+ 0303 tildecomb
+ 0309 hookabovecomb
+ 0323 dotbelowcomb
+ 0384 tonos
+ 0385 dieresistonos
+ 0386 Alphatonos
+ 0387 anoteleia
+ 0388 Epsilontonos
+ 0389 Etatonos
+ 038A Iotatonos
+ 038C Omicrontonos
+ 038E Upsilontonos
+ 038F Omegatonos
+ 0390 iotadieresistonos
+ 0391 Alpha
+ 0392 Beta
+ 0393 Gamma
+ 0394 Delta
+ 0395 Epsilon
+ 0396 Zeta
+ 0397 Eta
+ 0398 Theta
+ 0399 Iota
+ 039A Kappa
+ 039B Lambda
+ 039C Mu
+ 039D Nu
+ 039E Xi
+ 039F Omicron
+ 03A0 Pi
+ 03A1 Rho
+ 03A3 Sigma
+ 03A4 Tau
+ 03A5 Upsilon
+ 03A6 Phi
+ 03A7 Chi
+ 03A8 Psi
+ 03A9 Omega
+ 03AA Iotadieresis
+ 03AB Upsilondieresis
+ 03AC alphatonos
+ 03AD epsilontonos
+ 03AE etatonos
+ 03AF iotatonos
+ 03B0 upsilondieresistonos
+ 03B1 alpha
+ 03B2 beta
+ 03B3 gamma
+ 03B4 delta
+ 03B5 epsilon
+ 03B6 zeta
+ 03B7 eta
+ 03B8 theta
+ 03B9 iota
+ 03BA kappa
+ 03BB lambda
+ 03BC mu
+ 03BD nu
+ 03BE xi
+ 03BF omicron
+ 03C0 pi
+ 03C1 rho
+ 03C2 sigma1
+ 03C3 sigma
+ 03C4 tau
+ 03C5 upsilon
+ 03C6 phi
+ 03C7 chi
+ 03C8 psi
+ 03C9 omega
+ 03CA iotadieresis
+ 03CB upsilondieresis
+ 03CC omicrontonos
+ 03CD upsilontonos
+ 03CE omegatonos
+ 03D1 theta1
+ 03D2 Upsilon1
+ 03D5 phi1
+ 03D6 omega1
+ 0401 afii10023
+ 0402 afii10051
+ 0403 afii10052
+ 0404 afii10053
+ 0405 afii10054
+ 0406 afii10055
+ 0407 afii10056
+ 0408 afii10057
+ 0409 afii10058
+ 040A afii10059
+ 040B afii10060
+ 040C afii10061
+ 040E afii10062
+ 040F afii10145
+ 0410 afii10017
+ 0411 afii10018
+ 0412 afii10019
+ 0413 afii10020
+ 0414 afii10021
+ 0415 afii10022
+ 0416 afii10024
+ 0417 afii10025
+ 0418 afii10026
+ 0419 afii10027
+ 041A afii10028
+ 041B afii10029
+ 041C afii10030
+ 041D afii10031
+ 041E afii10032
+ 041F afii10033
+ 0420 afii10034
+ 0421 afii10035
+ 0422 afii10036
+ 0423 afii10037
+ 0424 afii10038
+ 0425 afii10039
+ 0426 afii10040
+ 0427 afii10041
+ 0428 afii10042
+ 0429 afii10043
+ 042A afii10044
+ 042B afii10045
+ 042C afii10046
+ 042D afii10047
+ 042E afii10048
+ 042F afii10049
+ 0430 afii10065
+ 0431 afii10066
+ 0432 afii10067
+ 0433 afii10068
+ 0434 afii10069
+ 0435 afii10070
+ 0436 afii10072
+ 0437 afii10073
+ 0438 afii10074
+ 0439 afii10075
+ 043A afii10076
+ 043B afii10077
+ 043C afii10078
+ 043D afii10079
+ 043E afii10080
+ 043F afii10081
+ 0440 afii10082
+ 0441 afii10083
+ 0442 afii10084
+ 0443 afii10085
+ 0444 afii10086
+ 0445 afii10087
+ 0446 afii10088
+ 0447 afii10089
+ 0448 afii10090
+ 0449 afii10091
+ 044A afii10092
+ 044B afii10093
+ 044C afii10094
+ 044D afii10095
+ 044E afii10096
+ 044F afii10097
+ 0451 afii10071
+ 0452 afii10099
+ 0453 afii10100
+ 0454 afii10101
+ 0455 afii10102
+ 0456 afii10103
+ 0457 afii10104
+ 0458 afii10105
+ 0459 afii10106
+ 045A afii10107
+ 045B afii10108
+ 045C afii10109
+ 045E afii10110
+ 045F afii10193
+ 0462 afii10146
+ 0463 afii10194
+ 0472 afii10147
+ 0473 afii10195
+ 0474 afii10148
+ 0475 afii10196
+ 0490 afii10050
+ 0491 afii10098
+ 04D9 afii10846
+ 05B0 afii57799
+ 05B1 afii57801
+ 05B2 afii57800
+ 05B3 afii57802
+ 05B4 afii57793
+ 05B5 afii57794
+ 05B6 afii57795
+ 05B7 afii57798
+ 05B8 afii57797
+ 05B9 afii57806
+ 05BB afii57796
+ 05BC afii57807
+ 05BD afii57839
+ 05BE afii57645
+ 05BF afii57841
+ 05C0 afii57842
+ 05C1 afii57804
+ 05C2 afii57803
+ 05C3 afii57658
+ 05D0 afii57664
+ 05D1 afii57665
+ 05D2 afii57666
+ 05D3 afii57667
+ 05D4 afii57668
+ 05D5 afii57669
+ 05D6 afii57670
+ 05D7 afii57671
+ 05D8 afii57672
+ 05D9 afii57673
+ 05DA afii57674
+ 05DB afii57675
+ 05DC afii57676
+ 05DD afii57677
+ 05DE afii57678
+ 05DF afii57679
+ 05E0 afii57680
+ 05E1 afii57681
+ 05E2 afii57682
+ 05E3 afii57683
+ 05E4 afii57684
+ 05E5 afii57685
+ 05E6 afii57686
+ 05E7 afii57687
+ 05E8 afii57688
+ 05E9 afii57689
+ 05EA afii57690
+ 05F0 afii57716
+ 05F1 afii57717
+ 05F2 afii57718
+ 060C afii57388
+ 061B afii57403
+ 061F afii57407
+ 0621 afii57409
+ 0622 afii57410
+ 0623 afii57411
+ 0624 afii57412
+ 0625 afii57413
+ 0626 afii57414
+ 0627 afii57415
+ 0628 afii57416
+ 0629 afii57417
+ 062A afii57418
+ 062B afii57419
+ 062C afii57420
+ 062D afii57421
+ 062E afii57422
+ 062F afii57423
+ 0630 afii57424
+ 0631 afii57425
+ 0632 afii57426
+ 0633 afii57427
+ 0634 afii57428
+ 0635 afii57429
+ 0636 afii57430
+ 0637 afii57431
+ 0638 afii57432
+ 0639 afii57433
+ 063A afii57434
+ 0640 afii57440
+ 0641 afii57441
+ 0642 afii57442
+ 0643 afii57443
+ 0644 afii57444
+ 0645 afii57445
+ 0646 afii57446
+ 0647 afii57470
+ 0648 afii57448
+ 0649 afii57449
+ 064A afii57450
+ 064B afii57451
+ 064C afii57452
+ 064D afii57453
+ 064E afii57454
+ 064F afii57455
+ 0650 afii57456
+ 0651 afii57457
+ 0652 afii57458
+ 0660 afii57392
+ 0661 afii57393
+ 0662 afii57394
+ 0663 afii57395
+ 0664 afii57396
+ 0665 afii57397
+ 0666 afii57398
+ 0667 afii57399
+ 0668 afii57400
+ 0669 afii57401
+ 066A afii57381
+ 066D afii63167
+ 0679 afii57511
+ 067E afii57506
+ 0686 afii57507
+ 0688 afii57512
+ 0691 afii57513
+ 0698 afii57508
+ 06A4 afii57505
+ 06AF afii57509
+ 06BA afii57514
+ 06D2 afii57519
+ 06D5 afii57534
+ 1E80 Wgrave
+ 1E81 wgrave
+ 1E82 Wacute
+ 1E83 wacute
+ 1E84 Wdieresis
+ 1E85 wdieresis
+ 1EF2 Ygrave
+ 1EF3 ygrave
+ 200C afii61664
+ 200D afii301
+ 200E afii299
+ 200F afii300
+ 2012 figuredash
+ 2013 endash
+ 2014 emdash
+ 2015 afii00208
+ 2017 underscoredbl
+ 2018 quoteleft
+ 2019 quoteright
+ 201A quotesinglbase
+ 201B quotereversed
+ 201C quotedblleft
+ 201D quotedblright
+ 201E quotedblbase
+ 2020 dagger
+ 2021 daggerdbl
+ 2022 bullet
+ 2024 onedotenleader
+ 2025 twodotenleader
+ 2026 ellipsis
+ 202C afii61573
+ 202D afii61574
+ 202E afii61575
+ 2030 perthousand
+ 2032 minute
+ 2033 second
+ 2039 guilsinglleft
+ 203A guilsinglright
+ 203C exclamdbl
+ 2044 fraction
+ 2070 zerosuperior
+ 2074 foursuperior
+ 2075 fivesuperior
+ 2076 sixsuperior
+ 2077 sevensuperior
+ 2078 eightsuperior
+ 2079 ninesuperior
+ 207D parenleftsuperior
+ 207E parenrightsuperior
+ 207F nsuperior
+ 2080 zeroinferior
+ 2081 oneinferior
+ 2082 twoinferior
+ 2083 threeinferior
+ 2084 fourinferior
+ 2085 fiveinferior
+ 2086 sixinferior
+ 2087 seveninferior
+ 2088 eightinferior
+ 2089 nineinferior
+ 208D parenleftinferior
+ 208E parenrightinferior
+ 20A1 colonmonetary
+ 20A3 franc
+ 20A4 lira
+ 20A7 peseta
+ 20AA afii57636
+ 20AB dong
+ 20AC Euro
+ 2105 afii61248
+ 2111 Ifraktur
+ 2113 afii61289
+ 2116 afii61352
+ 2118 weierstrass
+ 211C Rfraktur
+ 211E prescription
+ 2122 trademark
+ 2126 Omega
+ 212E estimated
+ 2135 aleph
+ 2153 onethird
+ 2154 twothirds
+ 215B oneeighth
+ 215C threeeighths
+ 215D fiveeighths
+ 215E seveneighths
+ 2190 arrowleft
+ 2191 arrowup
+ 2192 arrowright
+ 2193 arrowdown
+ 2194 arrowboth
+ 2195 arrowupdn
+ 21A8 arrowupdnbse
+ 21B5 carriagereturn
+ 21D0 arrowdblleft
+ 21D1 arrowdblup
+ 21D2 arrowdblright
+ 21D3 arrowdbldown
+ 21D4 arrowdblboth
+ 2200 universal
+ 2202 partialdiff
+ 2203 existential
+ 2205 emptyset
+ 2206 Delta
+ 2207 gradient
+ 2208 element
+ 2209 notelement
+ 220B suchthat
+ 220F product
+ 2211 summation
+ 2212 minus
+ 2215 fraction
+ 2217 asteriskmath
+ 2219 periodcentered
+ 221A radical
+ 221D proportional
+ 221E infinity
+ 221F orthogonal
+ 2220 angle
+ 2227 logicaland
+ 2228 logicalor
+ 2229 intersection
+ 222A union
+ 222B integral
+ 2234 therefore
+ 223C similar
+ 2245 congruent
+ 2248 approxequal
+ 2260 notequal
+ 2261 equivalence
+ 2264 lessequal
+ 2265 greaterequal
+ 2282 propersubset
+ 2283 propersuperset
+ 2284 notsubset
+ 2286 reflexsubset
+ 2287 reflexsuperset
+ 2295 circleplus
+ 2297 circlemultiply
+ 22A5 perpendicular
+ 22C5 dotmath
+ 2302 house
+ 2310 revlogicalnot
+ 2320 integraltp
+ 2321 integralbt
+ 2329 angleleft
+ 232A angleright
+ 2500 SF100000
+ 2502 SF110000
+ 250C SF010000
+ 2510 SF030000
+ 2514 SF020000
+ 2518 SF040000
+ 251C SF080000
+ 2524 SF090000
+ 252C SF060000
+ 2534 SF070000
+ 253C SF050000
+ 2550 SF430000
+ 2551 SF240000
+ 2552 SF510000
+ 2553 SF520000
+ 2554 SF390000
+ 2555 SF220000
+ 2556 SF210000
+ 2557 SF250000
+ 2558 SF500000
+ 2559 SF490000
+ 255A SF380000
+ 255B SF280000
+ 255C SF270000
+ 255D SF260000
+ 255E SF360000
+ 255F SF370000
+ 2560 SF420000
+ 2561 SF190000
+ 2562 SF200000
+ 2563 SF230000
+ 2564 SF470000
+ 2565 SF480000
+ 2566 SF410000
+ 2567 SF450000
+ 2568 SF460000
+ 2569 SF400000
+ 256A SF540000
+ 256B SF530000
+ 256C SF440000
+ 2580 upblock
+ 2584 dnblock
+ 2588 block
+ 258C lfblock
+ 2590 rtblock
+ 2591 ltshade
+ 2592 shade
+ 2593 dkshade
+ 25A0 filledbox
+ 25A1 H22073
+ 25AA H18543
+ 25AB H18551
+ 25AC filledrect
+ 25B2 triagup
+ 25BA triagrt
+ 25BC triagdn
+ 25C4 triaglf
+ 25CA lozenge
+ 25CB circle
+ 25CF H18533
+ 25D8 invbullet
+ 25D9 invcircle
+ 25E6 openbullet
+ 263A smileface
+ 263B invsmileface
+ 263C sun
+ 2640 female
+ 2642 male
+ 2660 spade
+ 2663 club
+ 2665 heart
+ 2666 diamond
+ 266A musicalnote
+ 266B musicalnotedbl
+ F6BE dotlessj
+ F6BF LL
+ F6C0 ll
+ F6C1 Scedilla
+ F6C2 scedilla
+ F6C3 commaaccent
+ F6C4 afii10063
+ F6C5 afii10064
+ F6C6 afii10192
+ F6C7 afii10831
+ F6C8 afii10832
+ F6C9 Acute
+ F6CA Caron
+ F6CB Dieresis
+ F6CC DieresisAcute
+ F6CD DieresisGrave
+ F6CE Grave
+ F6CF Hungarumlaut
+ F6D0 Macron
+ F6D1 cyrBreve
+ F6D2 cyrFlex
+ F6D3 dblGrave
+ F6D4 cyrbreve
+ F6D5 cyrflex
+ F6D6 dblgrave
+ F6D7 dieresisacute
+ F6D8 dieresisgrave
+ F6D9 copyrightserif
+ F6DA registerserif
+ F6DB trademarkserif
+ F6DC onefitted
+ F6DD rupiah
+ F6DE threequartersemdash
+ F6DF centinferior
+ F6E0 centsuperior
+ F6E1 commainferior
+ F6E2 commasuperior
+ F6E3 dollarinferior
+ F6E4 dollarsuperior
+ F6E5 hypheninferior
+ F6E6 hyphensuperior
+ F6E7 periodinferior
+ F6E8 periodsuperior
+ F6E9 asuperior
+ F6EA bsuperior
+ F6EB dsuperior
+ F6EC esuperior
+ F6ED isuperior
+ F6EE lsuperior
+ F6EF msuperior
+ F6F0 osuperior
+ F6F1 rsuperior
+ F6F2 ssuperior
+ F6F3 tsuperior
+ F6F4 Brevesmall
+ F6F5 Caronsmall
+ F6F6 Circumflexsmall
+ F6F7 Dotaccentsmall
+ F6F8 Hungarumlautsmall
+ F6F9 Lslashsmall
+ F6FA OEsmall
+ F6FB Ogoneksmall
+ F6FC Ringsmall
+ F6FD Scaronsmall
+ F6FE Tildesmall
+ F6FF Zcaronsmall
+ F721 exclamsmall
+ F724 dollaroldstyle
+ F726 ampersandsmall
+ F730 zerooldstyle
+ F731 oneoldstyle
+ F732 twooldstyle
+ F733 threeoldstyle
+ F734 fouroldstyle
+ F735 fiveoldstyle
+ F736 sixoldstyle
+ F737 sevenoldstyle
+ F738 eightoldstyle
+ F739 nineoldstyle
+ F73F questionsmall
+ F760 Gravesmall
+ F761 Asmall
+ F762 Bsmall
+ F763 Csmall
+ F764 Dsmall
+ F765 Esmall
+ F766 Fsmall
+ F767 Gsmall
+ F768 Hsmall
+ F769 Ismall
+ F76A Jsmall
+ F76B Ksmall
+ F76C Lsmall
+ F76D Msmall
+ F76E Nsmall
+ F76F Osmall
+ F770 Psmall
+ F771 Qsmall
+ F772 Rsmall
+ F773 Ssmall
+ F774 Tsmall
+ F775 Usmall
+ F776 Vsmall
+ F777 Wsmall
+ F778 Xsmall
+ F779 Ysmall
+ F77A Zsmall
+ F7A1 exclamdownsmall
+ F7A2 centoldstyle
+ F7A8 Dieresissmall
+ F7AF Macronsmall
+ F7B4 Acutesmall
+ F7B8 Cedillasmall
+ F7BF questiondownsmall
+ F7E0 Agravesmall
+ F7E1 Aacutesmall
+ F7E2 Acircumflexsmall
+ F7E3 Atildesmall
+ F7E4 Adieresissmall
+ F7E5 Aringsmall
+ F7E6 AEsmall
+ F7E7 Ccedillasmall
+ F7E8 Egravesmall
+ F7E9 Eacutesmall
+ F7EA Ecircumflexsmall
+ F7EB Edieresissmall
+ F7EC Igravesmall
+ F7ED Iacutesmall
+ F7EE Icircumflexsmall
+ F7EF Idieresissmall
+ F7F0 Ethsmall
+ F7F1 Ntildesmall
+ F7F2 Ogravesmall
+ F7F3 Oacutesmall
+ F7F4 Ocircumflexsmall
+ F7F5 Otildesmall
+ F7F6 Odieresissmall
+ F7F8 Oslashsmall
+ F7F9 Ugravesmall
+ F7FA Uacutesmall
+ F7FB Ucircumflexsmall
+ F7FC Udieresissmall
+ F7FD Yacutesmall
+ F7FE Thornsmall
+ F7FF Ydieresissmall
+ F8E5 radicalex
+ F8E6 arrowvertex
+ F8E7 arrowhorizex
+ F8E8 registersans
+ F8E9 copyrightsans
+ F8EA trademarksans
+ F8EB parenlefttp
+ F8EC parenleftex
+ F8ED parenleftbt
+ F8EE bracketlefttp
+ F8EF bracketleftex
+ F8F0 bracketleftbt
+ F8F1 bracelefttp
+ F8F2 braceleftmid
+ F8F3 braceleftbt
+ F8F4 braceex
+ F8F5 integralex
+ F8F6 parenrighttp
+ F8F7 parenrightex
+ F8F8 parenrightbt
+ F8F9 bracketrighttp
+ F8FA bracketrightex
+ F8FB bracketrightbt
+ F8FC bracerighttp
+ F8FD bracerightmid
+ F8FE bracerightbt
+ FB00 ff
+ FB01 fi
+ FB02 fl
+ FB03 ffi
+ FB04 ffl
+ FB1F afii57705
+ FB2A afii57694
+ FB2B afii57695
+ FB35 afii57723
+ FB4B afii57700
+)};
+
+
+sub CreatePostscriptEncoding
+{
+ my ($encoding) = @_;
+ my $result = "/CurrentEncoding \[\n";
+ for (my $i = 0; $i < 256; $i += 8)
+ {
+ for (my $j = 0; $j < 8; $j++)
+ {
+ my $ch;
+ Tk::catch { $ch = $encoding->decode(chr($i+$j),1) };
+ if ($@)
+ {
+ $result .= '/space';
+ }
+ else
+ {
+ my $hexcode = sprintf("%04X",ord($ch));
+ $result .= '/'.((exists $Tk::psglyphs->{$hexcode}) ? $Tk::psglyphs->{$hexcode} : 'space');
+ }
+ }
+ $result .= "\n";
+ }
+ $result .= "\] def\n";
+ return $result;
+}
+
+# precalculate entire prolog when this file is loaded
+# (to speed things up)
+$Tk::ps_preamable = "%%BeginProlog\n".
+ CreatePostscriptEncoding(Tk::SystemEncoding()). <<'END';
+50 dict begin
+% This is a standard prolog for Postscript generated by Tk's canvas
+% widget.
+% RCS: @(#) $Id: //depot/Tkutf8/Canvas/Canvas.pm#12 $
+
+% The definitions below just define all of the variables used in
+% any of the procedures here. This is needed for obscure reasons
+% explained on p. 716 of the Postscript manual (Section H.2.7,
+% "Initializing Variables," in the section on Encapsulated Postscript).
+
+/baseline 0 def
+/stipimage 0 def
+/height 0 def
+/justify 0 def
+/lineLength 0 def
+/spacing 0 def
+/stipple 0 def
+/strings 0 def
+/xoffset 0 def
+/yoffset 0 def
+/tmpstip null def
+
+
+/cstringshow {
+ {
+ dup type /stringtype eq
+ { show } { glyphshow }
+ ifelse
+ }
+ forall
+} bind def
+
+
+
+/cstringwidth {
+ 0 exch 0 exch
+ {
+ dup type /stringtype eq
+ { stringwidth } {
+ currentfont /Encoding get exch 1 exch put (\001) stringwidth
+ }
+ ifelse
+ exch 3 1 roll add 3 1 roll add exch
+ }
+ forall
+} bind def
+
+% font ISOEncode font
+% This procedure changes the encoding of a font from the default
+% Postscript encoding to current system encoding. It's typically invoked just
+% before invoking "setfont". The body of this procedure comes from
+% Section 5.6.1 of the Postscript book.
+
+/ISOEncode {
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding CurrentEncoding def
+ currentdict
+ end
+
+ % I'm not sure why it's necessary to use "definefont" on this new
+ % font, but it seems to be important; just use the name "Temporary"
+ % for the font.
+
+ /Temporary exch definefont
+} bind def
+
+% StrokeClip
+%
+% This procedure converts the current path into a clip area under
+% the assumption of stroking. It's a bit tricky because some Postscript
+% interpreters get errors during strokepath for dashed lines. If
+% this happens then turn off dashes and try again.
+
+/StrokeClip {
+ {strokepath} stopped {
+ (This Postscript printer gets limitcheck overflows when) =
+ (stippling dashed lines; lines will be printed solid instead.) =
+ [] 0 setdash strokepath} if
+ clip
+} bind def
+
+% desiredSize EvenPixels closestSize
+%
+% The procedure below is used for stippling. Given the optimal size
+% of a dot in a stipple pattern in the current user coordinate system,
+% compute the closest size that is an exact multiple of the device's
+% pixel size. This allows stipple patterns to be displayed without
+% aliasing effects.
+
+/EvenPixels {
+ % Compute exact number of device pixels per stipple dot.
+ dup 0 matrix currentmatrix dtransform
+ dup mul exch dup mul add sqrt
+
+ % Round to an integer, make sure the number is at least 1, and compute
+ % user coord distance corresponding to this.
+ dup round dup 1 lt {pop 1} if
+ exch div mul
+} bind def
+
+% width height string StippleFill --
+%
+% Given a path already set up and a clipping region generated from
+% it, this procedure will fill the clipping region with a stipple
+% pattern. "String" contains a proper image description of the
+% stipple pattern and "width" and "height" give its dimensions. Each
+% stipple dot is assumed to be about one unit across in the current
+% user coordinate system. This procedure trashes the graphics state.
+
+/StippleFill {
+ % The following code is needed to work around a NeWSprint bug.
+
+ /tmpstip 1 index def
+
+ % Change the scaling so that one user unit in user coordinates
+ % corresponds to the size of one stipple dot.
+ 1 EvenPixels dup scale
+
+ % Compute the bounding box occupied by the path (which is now
+ % the clipping region), and round the lower coordinates down
+ % to the nearest starting point for the stipple pattern. Be
+ % careful about negative numbers, since the rounding works
+ % differently on them.
+
+ pathbbox
+ 4 2 roll
+ 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
+ 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
+
+ % Stack now: width height string y1 y2 x1 x2
+ % Below is a doubly-nested for loop to iterate across this area
+ % in units of the stipple pattern size, going up columns then
+ % across rows, blasting out a stipple-pattern-sized rectangle at
+ % each position
+
+ 6 index exch {
+ 2 index 5 index 3 index {
+ % Stack now: width height string y1 y2 x y
+
+ gsave
+ 1 index exch translate
+ 5 index 5 index true matrix tmpstip imagemask
+ grestore
+ } for
+ pop
+ } for
+ pop pop pop pop pop
+} bind def
+
+% -- AdjustColor --
+% Given a color value already set for output by the caller, adjusts
+% that value to a grayscale or mono value if requested by the CL
+% variable.
+
+/AdjustColor {
+ CL 2 lt {
+ currentgray
+ CL 0 eq {
+ .5 lt {0} {1} ifelse
+ } if
+ setgray
+ } if
+} bind def
+
+% x y strings spacing xoffset yoffset justify stipple DrawText --
+% This procedure does all of the real work of drawing text. The
+% color and font must already have been set by the caller, and the
+% following arguments must be on the stack:
+%
+% x, y - Coordinates at which to draw text.
+% strings - An array of strings, one for each line of the text item,
+% in order from top to bottom.
+% spacing - Spacing between lines.
+% xoffset - Horizontal offset for text bbox relative to x and y: 0 for
+% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
+% yoffset - Vertical offset for text bbox relative to x and y: 0 for
+% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
+% justify - 0 for left justification, 0.5 for center, 1 for right justify.
+% stipple - Boolean value indicating whether or not text is to be
+% drawn in stippled fashion. If text is stippled,
+% procedure StippleText must have been defined to call
+% StippleFill in the right way.
+%
+% Also, when this procedure is invoked, the color and font must already
+% have been set for the text.
+
+/DrawText {
+ /stipple exch def
+ /justify exch def
+ /yoffset exch def
+ /xoffset exch def
+ /spacing exch def
+ /strings exch def
+
+ % First scan through all of the text to find the widest line.
+
+ /lineLength 0 def
+ strings {
+ cstringwidth pop
+ dup lineLength gt {/lineLength exch def} {pop} ifelse
+ newpath
+ } forall
+
+ % Compute the baseline offset and the actual font height.
+
+ 0 0 moveto (TXygqPZ) false charpath
+ pathbbox dup /baseline exch def
+ exch pop exch sub /height exch def pop
+ newpath
+
+ % Translate coordinates first so that the origin is at the upper-left
+ % corner of the text's bounding box. Remember that x and y for
+ % positioning are still on the stack.
+
+ translate
+ lineLength xoffset mul
+ strings length 1 sub spacing mul height add yoffset mul translate
+
+ % Now use the baseline and justification information to translate so
+ % that the origin is at the baseline and positioning point for the
+ % first line of text.
+
+ justify lineLength mul baseline neg translate
+
+ % Iterate over each of the lines to output it. For each line,
+ % compute its width again so it can be properly justified, then
+ % display it.
+
+ strings {
+ dup cstringwidth pop
+ justify neg mul 0 moveto
+ stipple {
+
+
+ % The text is stippled, so turn it into a path and print
+ % by calling StippledText, which in turn calls StippleFill.
+ % Unfortunately, many Postscript interpreters will get
+ % overflow errors if we try to do the whole string at
+ % once, so do it a character at a time.
+
+ gsave
+ /char (X) def
+ {
+ dup type /stringtype eq {
+ % This segment is a string.
+ {
+ char 0 3 -1 roll put
+ currentpoint
+ gsave
+ char true charpath clip StippleText
+ grestore
+ char stringwidth translate
+ moveto
+ } forall
+ } {
+ % This segment is glyph name
+ % Temporary override
+ currentfont /Encoding get exch 1 exch put
+ currentpoint
+ gsave (\001) true charpath clip StippleText
+ grestore
+ (\001) stringwidth translate
+ moveto
+ } ifelse
+ } forall
+ grestore
+ } {cstringshow} ifelse
+ 0 spacing neg translate
+ } forall
+} bind def
+
+%%EndProlog
+END
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm b/Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm
new file mode 100644
index 00000000000..491d8cd2444
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Checkbutton.pm
@@ -0,0 +1,42 @@
+package Tk::Checkbutton;
+# Conversion from Tk4.0 button.tcl competed.
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Checkbutton.pm#6 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+require Tk::Widget;
+require Tk::Button;
+
+use base qw(Tk::Button);
+
+Construct Tk::Widget 'Checkbutton';
+
+sub Tk_cmd { \&Tk::checkbutton }
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'Invoke');
+ $mw->bind($class,'<space>', 'Invoke');
+ return $class;
+}
+
+sub Invoke
+{
+ my $w = shift;
+ $w->invoke() unless($w->cget('-state') eq 'disabled');
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Clipboard.pm b/Master/tlpkg/tlperl/lib/Tk/Clipboard.pm
new file mode 100644
index 00000000000..b0eb0ea2b07
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Clipboard.pm
@@ -0,0 +1,122 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Clipboard;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
+
+use AutoLoader qw(AUTOLOAD);
+use Tk qw(catch);
+
+sub clipEvents
+{
+ return qw[Copy Cut Paste];
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ foreach my $op ($class->clipEvents)
+ {
+ $mw->Tk::bind($class,"<<$op>>","clipboard$op");
+ }
+ return $class;
+}
+
+sub clipboardSet
+{
+ my $w = shift;
+ $w->clipboardClear;
+ $w->clipboardAppend(@_);
+}
+
+sub clipboardCopy
+{
+ my $w = shift;
+ my $val = $w->getSelected;
+ if (defined $val)
+ {
+ $w->clipboardSet('--',$val);
+ }
+ return $val;
+}
+
+sub clipboardCut
+{
+ my $w = shift;
+ my $val = $w->clipboardCopy;
+ if (defined $val)
+ {
+ $w->deleteSelected;
+ }
+ return $val;
+}
+
+sub clipboardGet
+{
+ my $w = shift;
+ $w->SelectionGet('-selection','CLIPBOARD',@_);
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ local $@;
+ catch
+ {
+## Different from Tcl/Tk version:
+# if ($w->windowingsystem eq 'x11')
+# {
+# catch
+# {
+# $w->deleteSelected;
+# };
+# }
+ $w->insert("insert", $w->clipboardGet);
+ $w->SeeInsert if $w->can('SeeInsert');
+ };
+}
+
+sub clipboardOperations
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ while (@_)
+ {
+ my $op = shift;
+ $mw->Tk::bind(@class,"<<$op>>","clipboard$op");
+ }
+}
+
+# These methods work for Entry and Text
+# and can be overridden where they don't work
+
+sub deleteSelected
+{
+ my $w = shift;
+ catch { $w->delete('sel.first','sel.last') };
+}
+
+
+1;
+__END__
+
+sub getSelected
+{
+ my $w = shift;
+ my $val = Tk::catch { $w->get('sel.first','sel.last') };
+ return $val;
+}
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/CmdLine.pm b/Master/tlpkg/tlperl/lib/Tk/CmdLine.pm
new file mode 100644
index 00000000000..2e821e826ae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/CmdLine.pm
@@ -0,0 +1,954 @@
+package Tk::CmdLine; # -*-Perl-*-
+
+#/----------------------------------------------------------------------------//
+#/ Module: Tk/CmdLine.pm
+#/
+#/ Purpose:
+#/
+#/ Process standard X11 command line options and set initial resources.
+#/
+#/ Author: ???? Date: ????
+#/
+#/ History: SEE POD
+#/----------------------------------------------------------------------------//
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/CmdLine.pm#6 $
+
+use 5.004;
+
+use strict;
+
+use Config;
+
+my $OBJECT = undef; # define the current object
+
+#/----------------------------------------------------------------------------//
+#/ Constructor
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub new # Tk::CmdLine::new()
+{
+ my $this = shift(@_);
+ my $class = ref($this) || $this;
+
+ my $name = 'pTk';
+ $name = $1 if (($0 =~ m/(?:^|[\/\\])([\w-]+)(?:\.\w+)?$/) && ($1 ne '-e'));
+
+ my $self = {
+ name => $name,
+ config => { -name => $name },
+ options => {},
+ methods => {},
+ command => [],
+ synchronous => 0,
+ iconic => 0,
+ motif => ($Tk::strictMotif || 0),
+ resources => {} };
+
+ return bless($self, $class);
+}
+
+#/----------------------------------------------------------------------------//
+#/ Process the arguments in a given array or in @ARGV.
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub Argument_ # Tk::CmdLine::Argument_($flag) # private method
+{
+ my $self = shift(@_);
+ my $flag = shift(@_);
+ unless ($self->{offset} < @{$self->{argv}})
+ {
+ die 'Usage: ', $self->{name}, ' ... ', $flag, " <argument> ...\n";
+ }
+ return splice(@{$self->{argv}}, $self->{offset}, 1);
+}
+
+sub Config_ # Tk::CmdLine::Config_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{config}->{"-$name"} = $val;
+}
+
+sub Flag_ # Tk::CmdLine::Flag_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ push(@{$self->{command}}, $flag);
+ $self->{$name} = 1;
+}
+
+sub Option_ # Tk::CmdLine::Option_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{options}->{"*$name"} = $val;
+}
+
+sub Method_ # Tk::CmdLine::Method_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ push(@{$self->{command}}, $flag, $val);
+ $self->{methods}->{$name} = $val;
+}
+
+sub Resource_ # Tk::CmdLine::Resource_($flag, $name) # private method
+{
+ my $self = shift(@_);
+ my ($flag, $name) = @_;
+ my $val = $self->Argument_($flag);
+ if ($val =~ /^([^!:\s]+)*\s*:\s*(.*)$/)
+ {
+ push(@{$self->{command}}, $flag, $val);
+ $self->{options}->{$1} = $2;
+ }
+}
+
+my %Method = (
+ background => 'Option_',
+ bg => 'background', # alias
+ class => 'Config_',
+ display => 'screen', # alias
+ fg => 'foreground', # alias
+ fn => 'font', # alias
+ font => 'Option_',
+ foreground => 'Option_',
+ geometry => 'Method_',
+ iconic => 'Flag_',
+ iconposition => 'Method_',
+ motif => 'Flag_',
+ name => 'Config_',
+ screen => 'Config_',
+ synchronous => 'Flag_',
+ title => 'Config_',
+ xrm => 'Resource_'
+);
+
+sub SetArguments # Tk::CmdLine::SetArguments([@argument])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+ $self->{argv} = (@_ ? [ @_ ] : \@ARGV);
+ $self->{offset} = 0; # its existence will denote that this method has been called
+
+ my @option = ();
+
+ while ($self->{offset} < @{$self->{argv}})
+ {
+ last if ($self->{argv}->[$self->{offset}] eq '--');
+ unless (
+ (($self->{argv}->[$self->{offset}] =~ /^-{1,2}(\w+)$/) && (@option = $1)) ||
+ (($self->{argv}->[$self->{offset}] =~ /^--(\w+)=(.*)$/) && (@option = ($1, $2))))
+ {
+ ++$self->{offset};
+ next;
+ }
+
+ next if (!exists($Method{$option[0]}) && ++$self->{offset});
+
+ $option[0] = $Method{$option[0]} if exists($Method{$Method{$option[0]}});
+
+ my $method = $Method{$option[0]};
+
+ if (@option > 1) # replace --<option>=<value> with <value>
+ {
+ $self->{argv}->[$self->{offset}] = $option[1];
+ }
+ else # remove the argument
+ {
+ splice(@{$self->{argv}}, $self->{offset}, 1);
+ }
+
+ $self->$method(('-' . $option[0]), $option[0]);
+ }
+
+ $self->{config}->{-class} ||= ucfirst($self->{config}->{-name});
+
+ delete($self->{argv}); # no longer needed
+
+ return $self;
+}
+
+use vars qw(&process); *process = \&SetArguments; # alias to keep old code happy
+
+#/----------------------------------------------------------------------------//
+#/ Get a list of the arguments that have been processed by SetArguments().
+#/ Returns an array.
+#/----------------------------------------------------------------------------//
+
+sub GetArguments # Tk::CmdLine::GetArguments()
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return @{$self->{command}};
+}
+
+#/----------------------------------------------------------------------------//
+#/ Get the value of a configuration option (default: -class).
+#/ Returns the option value.
+#/----------------------------------------------------------------------------//
+
+sub cget # Tk::CmdLine::cget([$option])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+ my $option = shift(@_) || '-class';
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return (exists($self->{config}->{$option}) ? $self->{config}->{$option} : undef);
+}
+
+#/----------------------------------------------------------------------------//
+
+sub CreateArgs # Tk::CmdLine::CreateArgs()
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ return $self->{config};
+}
+
+#/----------------------------------------------------------------------------//
+
+sub Tk::MainWindow::apply_command_line
+{
+ my $mw = shift(@_);
+
+ my $self = ($OBJECT ||= __PACKAGE__->new());
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ foreach my $priority (keys(%{$self->{resources}}))
+ {
+ foreach my $resource (@{$self->{resources}->{$priority}})
+ {
+ $mw->optionAdd(@{$resource}, $priority);
+ }
+ }
+
+ foreach my $key (keys(%{$self->{options}}))
+ {
+ $mw->optionAdd($key => $self->{options}->{$key}, 'interactive');
+ }
+
+ foreach my $key (keys(%{$self->{methods}}))
+ {
+ $mw->$key($self->{methods}->{$key});
+ }
+
+ if ($self->{methods}->{geometry})
+ {
+ if ($self->{methods}->{geometry} =~ /[+-]\d+[+-]\d+/)
+ {
+ $mw->positionfrom('user');
+ }
+ if ($self->{methods}->{geometry} =~ /\d+x\d+/)
+ {
+ $mw->sizefrom('user');
+ }
+ delete $self->{methods}->{geometry}; # XXX needed?
+ }
+
+ $mw->Synchronize() if $self->{synchronous};
+
+ if ($self->{iconic})
+ {
+ $mw->iconify();
+ $self->{iconic} = 0;
+ }
+
+ $Tk::strictMotif = ($self->{motif} || 0);
+
+ # Both these are needed to reliably save state
+ # but 'hostname' is tricky to do portably.
+ # $mw->client(hostname());
+ $mw->protocol('WM_SAVE_YOURSELF' => ['WMSaveYourself',$mw]);
+ $mw->command([ $self->{name}, @{$self->{command}} ]);
+}
+
+#/----------------------------------------------------------------------------//
+#/ Set the initial resources.
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub SetResources # Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+ return $self unless @_;
+
+ my $data = shift(@_);
+ my $priority = shift(@_) || 'userDefault';
+
+ $self->{resources}->{$priority} = [] unless exists($self->{resources}->{$priority});
+
+ foreach my $resource ((ref($data) eq 'ARRAY') ? @{$data} : $data)
+ {
+ if (ref($resource) eq 'ARRAY') # resources in [ <pattern>, <value> ] format
+ {
+ push(@{$self->{resources}->{$priority}}, [ @{$resource} ])
+ if (@{$resource} == 2);
+ }
+ else # resources in resource file format
+ {
+ push(@{$self->{resources}->{$priority}}, [ $1, $2 ])
+ if ($resource =~ /^([^!:\s]+)*\s*:\s*(.*)$/);
+ }
+ }
+
+ return $self;
+}
+
+#/----------------------------------------------------------------------------//
+#/ Load initial resources from one or more files (default: $XFILESEARCHPATH with
+#/ priority 'startupFile' and $XUSERFILESEARCHPATH with priority 'userDefault').
+#/ Returns the object reference.
+#/----------------------------------------------------------------------------//
+
+sub LoadResources # Tk::CmdLine::LoadResources([%options])
+{
+ my $self = (@_ # define the object as necessary
+ ? ((ref($_[0]) eq __PACKAGE__)
+ ? shift(@_)
+ : (($_[0] eq __PACKAGE__) ? shift(@_) : 1) && ($OBJECT ||= __PACKAGE__->new()))
+ : ($OBJECT ||= __PACKAGE__->new()));
+ $OBJECT = $self; # update the current object
+
+ $self->SetArguments() unless exists($self->{offset}); # set arguments if not yet done
+
+ my %options = @_;
+
+ my @file = ();
+ my $echo = (exists($options{-echo})
+ ? (defined($options{-echo}) ? $options{-echo} : \*STDOUT) : undef);
+
+ unless (%options && (exists($options{-file}) || exists($options{-symbol})))
+ {
+ @file = (
+ { -symbol => 'XFILESEARCHPATH', -priority => 'startupFile' },
+ { -symbol => 'XUSERFILESEARCHPATH', -priority => 'userDefault' } );
+ }
+ else
+ {
+ @file = { %options };
+ }
+
+ my $delimiter = (($^O eq 'MSWin32') ? ';' : ':');
+
+ foreach my $file (@file)
+ {
+ my $fileSpec = $file->{-spec} = undef;
+ if (exists($file->{-symbol}))
+ {
+ my $xpath = undef;
+ if ($file->{-symbol} eq 'XUSERFILESEARCHPATH')
+ {
+ $file->{-priority} ||= 'userDefault';
+ foreach my $symbol (qw(XUSERFILESEARCHPATH XAPPLRESDIR HOME))
+ {
+ last if (exists($ENV{$symbol}) && ($xpath = $ENV{$symbol}));
+ }
+ next unless defined($xpath);
+ }
+ else
+ {
+ $file->{-priority} ||= (($file->{-symbol} eq 'XFILESEARCHPATH')
+ ? 'startupFile' : 'userDefault');
+ next unless (
+ exists($ENV{$file->{-symbol}}) && ($xpath = $ENV{$file->{-symbol}}));
+ }
+
+ unless (exists($self->{translation}))
+ {
+ $self->{translation} = {
+ '%l' => '', # ignored
+ '%C' => '', # ignored
+ '%S' => '', # ignored
+ '%L' => ($ENV{LANG} || 'C'), # language
+ '%T' => 'app-defaults', # type
+ '%N' => $self->{config}->{-class} # filename
+ };
+ }
+
+ my @postfix = map({ $_ . '/' . $self->{config}->{-class} }
+ ('/' . $self->{translation}->{'%L'}), '');
+
+ ITEM: foreach $fileSpec (split($Config{path_sep}, $xpath))
+ {
+ if ($fileSpec =~ s/(%[A-Za-z])/$self->{translation}->{$1}/g) # File Pattern
+ {
+ if (defined($echo) && ($file->{-symbol} ne 'XFILESEARCHPATH'))
+ {
+ print $echo 'Checking ', $fileSpec, "\n";
+ }
+ next unless ((-f $fileSpec) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec;
+ last;
+ }
+ else # Directory - Check for <Directory>/$LANG/<Class>, <Directory>/<CLASS>
+ {
+ foreach my $postfix (@postfix)
+ {
+ my $fileSpec2 = $fileSpec . $postfix;
+ if (defined($echo) && ($file->{-symbol} ne 'XFILESEARCHPATH'))
+ {
+ print $echo 'Checking ', $fileSpec2, "\n";
+ }
+ next unless ((-f $fileSpec2) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec2;
+ last ITEM;
+ }
+ }
+ }
+ }
+ elsif (exists($file->{-file}) && ($fileSpec = $file->{-file}))
+ {
+ print $echo 'Checking ', $fileSpec, "\n" if defined($echo);
+ next unless ((-f $fileSpec) && (-r _) && (-s _));
+ $file->{-spec} = $fileSpec;
+ }
+ }
+
+ foreach my $file (@file)
+ {
+ next unless defined($file->{-spec});
+ local *SPEC;
+ next unless open(SPEC,$file->{-spec});
+ print $echo ' Loading ', $file->{-spec}, "\n" if defined($echo);
+
+ my $resource = undef;
+ my @resource = ();
+ my $continuation = 0;
+
+ while (defined(my $line = <SPEC>))
+ {
+ chomp($line);
+ next if ($line =~ /^\s*$/); # skip blank lines
+ next if ($line =~ /^\s*!/); # skip comments
+ $continuation = ($line =~ s/\s*\\$/ /); # search for trailing backslash
+ unless (defined($resource)) # it is the first line
+ {
+ $resource = $line;
+ }
+ else # it is a continuation line
+ {
+ $line =~ s/^\s*//; # remove leading whitespace
+ $resource .= $line;
+ }
+ next if $continuation;
+ push(@resource, [ $1, $2 ]) if ($resource =~ /^([^:\s]+)*\s*:\s*(.*)$/);
+ $resource = undef;
+ }
+
+ close(SPEC);
+
+ if (defined($resource)) # special case - EOF after line with trailing backslash
+ {
+ push(@resource, [ $1, $2 ]) if ($resource =~ /^([^:\s]+)*\s*:\s*(.*)$/);
+ }
+
+ $self->SetResources(\@resource, $file->{-priority}) if @resource;
+ }
+
+ return $self;
+}
+
+#/----------------------------------------------------------------------------//
+
+1;
+
+__END__
+
+=cut
+
+=head1 NAME
+
+Tk::CmdLine - Process standard X11 command line options and set initial resources
+
+=for pm Tk/CmdLine.pm
+
+=for category Creating and Configuring Widgets
+
+=head1 SYNOPSIS
+
+ Tk::CmdLine::SetArguments([@argument]);
+
+ my $value = Tk::CmdLine::cget([$option]);
+
+ Tk::CmdLine::SetResources((\@resource | $resource) [, $priority]);
+
+ Tk::CmdLine::LoadResources(
+ [ -symbol => $symbol ]
+ [ -file => $fileSpec ]
+ [ -priority => $priority ]
+ [ -echo => $fileHandle ] );
+
+=head1 DESCRIPTION
+
+Process standard X11 command line options and set initial resources.
+
+The X11R5 man page for X11 says: "Most X programs attempt to use the same names
+for command line options and arguments. All applications written with the
+X Toolkit Intrinsics automatically accept the following options: ...".
+This module processes these command line options for perl/Tk applications
+using the C<SetArguments>() function.
+
+This module can optionally be used to load initial resources explicitly via
+function C<SetResources>(), or from specified files (default: the standard X11
+application-specific resource files) via function C<LoadResources>().
+
+=head2 Command Line Options
+
+=over 4
+
+=item B<-background> I<Color> | B<-bg> I<Color>
+
+Specifies the color to be used for the window background.
+
+=item B<-class> I<Class>
+
+Specifies the class under which resources for the application should be found.
+This option is useful in shell aliases to distinguish between invocations
+of an application, without resorting to creating links to alter the executable
+file name.
+
+=item B<-display> I<Display> | B<-screen> I<Display>
+
+Specifies the name of the X server to be used.
+
+=item B<-font> I<Font> | B<-fn> I<Font>
+
+Specifies the font to be used for displaying text.
+
+=item B<-foreground> I<Color> | B<-fg> I<Color>
+
+Specifies the color to be used for text or graphics.
+
+=item B<-geometry> I<Geometry>
+
+Specifies the initial size and location of the I<first>
+L<MainWindow|Tk::MainWindow>.
+
+=item B<-iconic>
+
+Indicates that the user would prefer that the application's windows initially
+not be visible as if the windows had been immediately iconified by the user.
+Window managers may choose not to honor the application's request.
+
+=item B<-motif>
+
+Specifies that the application should adhere as closely as possible to Motif
+look-and-feel standards. For example, active elements such as buttons and
+scrollbar sliders will not change color when the pointer passes over them.
+
+=item B<-name> I<Name>
+
+Specifies the name under which resources for the application should be found.
+This option is useful in shell aliases to distinguish between invocations
+of an application, without resorting to creating links to alter the executable
+file name.
+
+=item B<-synchronous>
+
+Indicates that requests to the X server should be sent synchronously, instead of
+asynchronously. Since Xlib normally buffers requests to the server, errors do
+do not necessarily get reported immediately after they occur. This option turns
+off the buffering so that the application can be debugged. It should never
+be used with a working program.
+
+=item B<-title> I<TitleString>
+
+This option specifies the title to be used for this window. This information is
+sometimes used by a window manager to provide some sort of header identifying
+the window.
+
+=item B<-xrm> I<ResourceString>
+
+Specifies a resource pattern and value to override any defaults. It is also
+very useful for setting resources that do not have explicit command line
+arguments.
+
+The I<ResourceString> is of the form E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>,
+that is (the first) ':' is used to determine which part is pattern and which
+part is value. The (E<lt>I<pattern>E<gt>, E<lt>I<value>E<gt>) pair is entered
+into the options database with B<optionAdd> (for each
+L<MainWindow|Tk::MainWindow> configured), with I<interactive> priority.
+
+=back
+
+=head2 Initial Resources
+
+There are several mechanism for initializing the resource database to be used
+by an X11 application. Resources may be defined in a $C<HOME>/.Xdefaults file,
+a system application defaults file (e.g.
+/usr/lib/X11/app-defaults/E<lt>B<CLASS>E<gt>),
+or a user application defaults file (e.g. $C<HOME>/E<lt>B<CLASS>E<gt>).
+The Tk::CmdLine functionality for setting initial resources concerns itself
+with the latter two.
+
+Resource files contain data lines of the form
+E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>.
+They may also contain blank lines and comment lines (denoted
+by a ! character as the first non-blank character). Refer to L<option|Tk::option>
+for a description of E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>.
+
+=over 4
+
+=item System Application Defaults Files
+
+System application defaults files may be specified via environment variable
+$C<XFILESEARCHPATH> which, if set, contains a list of file patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>).
+
+=item User Application Defaults Files
+
+User application defaults files may be specified via environment variables
+$C<XUSERFILESEARCHPATH>, $C<XAPPLRESDIR> or $C<HOME>.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item B<SetArguments> - Tk::CmdLine::SetArguments([@argument])
+
+Extract the X11 options contained in a specified array (@ARGV by default).
+
+ Tk::CmdLine::SetArguments([@argument])
+
+The X11 options may be specified using a single dash I<-> as per the X11
+convention, or using two dashes I<--> as per the POSIX standard (e.g.
+B<-geometry> I<100x100>, B<-geometry> I<100x100> or B<-geometry=>I<100x100>).
+The options may be interspersed with other options or arguments.
+A I<--> by itself terminates option processing.
+
+By default, command line options are extracted from @ARGV the first time
+a MainWindow is created. The Tk::MainWindow constructor indirectly invokes
+C<SetArguments>() to do this.
+
+=item B<GetArguments> - Tk::CmdLine::GetArguments()
+
+Get a list of the X11 options that have been processed by C<SetArguments>().
+(C<GetArguments>() first invokes C<SetArguments>() if it has not already been invoked.)
+
+=item B<cget> - Tk::CmdLine::cget([$option])
+
+Get the value of a configuration option specified via C<SetArguments>().
+(C<cget>() first invokes C<SetArguments>() if it has not already been invoked.)
+
+ Tk::CmdLine::cget([$option])
+
+The valid options are: B<-class>, B<-name>, B<-screen> and B<-title>.
+If no option is specified, B<-class> is implied.
+
+A typical use of C<cget>() might be to obtain the application class in order
+to define the name of a resource file to be loaded in via C<LoadResources>().
+
+ my $class = Tk::CmdLine::cget(); # process command line and return class
+
+=item B<SetResources> - Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+
+Set the initial resources.
+
+ Tk::CmdLine::SetResources((\@resource | $resource) [, $priority])
+
+A single resource may be specified using a string of the form
+'E<lt>I<pattern>E<gt>:E<lt>I<value>E<gt>'. Multiple resources may be specified
+by passing an array reference whose elements are either strings of the above
+form, and/or anonymous arrays of the form [ E<lt>I<pattern>E<gt>,
+E<lt>I<value>E<gt> ]. The optional second argument specifies the priority,
+as defined in L<option|Tk::option>, to be associated with the resources
+(default: I<userDefault>).
+
+Note that C<SetResources>() first invokes C<SetArguments>() if it has not already
+been invoked.
+
+=item B<LoadResources> - Tk::CmdLine::LoadResources([%options])
+
+Load initial resources from one or more files.
+
+ Tk::CmdLine::LoadResources(
+ [ -symbol => $symbol ]
+ [ -file => $fileSpec ]
+ [ -priority => $priority ]
+ [ -echo => $fileHandle ] );
+
+[ B<-symbol> =E<gt> $symbol ] specifies the name of an environment variable
+that, if set, defines a list of one or more directories and/or file patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>).
+$C<XUSERFILESEARCHPATH> is a special case.
+If $C<XUSERFILESEARCHPATH> is not set, $C<XAPPLRESDIR> is checked instead.
+If $C<XAPPLRESDIR> is not set, $C<HOME> is checked instead.
+
+An item is identified as a file pattern if it contains one or more /%[A-Za-z]/
+patterns. Only patterns B<%L>, B<%T> and B<%N> are currently recognized. All
+others are replaced with the null string. Pattern B<%L> is translated into
+$C<LANG>. Pattern B<%T> is translated into I<app-defaults>. Pattern B<%N> is
+translated into the application class name.
+
+Each file pattern, after substitutions are applied, is assumed to define a
+FileSpec to be examined.
+
+When a directory is specified, FileSpecs
+E<lt>B<DIRECTORY>E<gt>/E<lt>B<LANG>E<gt>/E<lt>B<CLASS>E<gt>
+and E<lt>B<DIRECTORY>E<gt>/E<lt>B<CLASS>E<gt> are defined, in that order.
+
+[ B<-file> =E<gt> $fileSpec ] specifies a resource file to be loaded in.
+The file is silently skipped if if does not exist, or if it is not readable.
+
+[ B<-priority> =E<gt> $priority ] specifies the priority, as defined in
+L<option|Tk::option>, to be associated with the resources
+(default: I<userDefault>).
+
+[ B<-echo> =E<gt> $fileHandle ] may be used to specify that a line should be
+printed to the corresponding FileHandle (default: \*STDOUT) everytime a file
+is examined / loaded.
+
+If no B<-symbol> or B<-file> options are specified, C<LoadResources>()
+processes symbol $C<XFILESEARCHPATH> with priority I<startupFile> and
+$C<XUSERFILESEARCHPATH> with priority I<userDefault>.
+(Note that $C<XFILESEARCHPATH> and $C<XUSERFILESEARCHPATH> are supposed to
+contain only patterns. $C<XAPPLRESDIR> and $C<HOME> are supposed to be a single
+directory. C<LoadResources>() does not check/care whether this is the case.)
+
+For each set of FileSpecs, C<LoadResources>() examines each FileSpec to
+determine if the file exists and is readable. The first file that meets this
+criteria is read in and C<SetResources>() is invoked.
+
+Note that C<LoadResources>() first invokes C<SetArguments>() if it has not already
+been invoked.
+
+=back
+
+=head1 NOTES
+
+This module is an object-oriented module whose methods can be invoked as object
+methods, class methods or regular functions. This is accomplished via an
+internally-maintained object reference which is created as necessary, and which
+always points to the last object used. C<SetArguments>(), C<SetResources>() and
+C<LoadResources>() return the object reference.
+
+=head1 EXAMPLES
+
+=over
+
+=item 1
+
+@ARGV is processed by Tk::CmdLine at MainWindow creation.
+
+ use Tk;
+
+ # <Process @ARGV - ignoring all X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 2
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+An @ARGV of (--geometry=100x100 -opt1 a b c -bg red)
+is equal to (-opt1 a b c) after C<SetArguments>() is invoked.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments(); # Tk::CmdLine->SetArguments() works too
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 3
+
+Just like 2) except that default arguments are loaded first.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments(qw(-name test -iconic));
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 4
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources();
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 5
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation
+using non-default priorities.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources(-echo => \*STDOUT,
+ -priority => 65, -symbol => 'XFILESEARCHPATH' );
+ Tk::CmdLine::LoadResources(-echo => \*STDOUT,
+ -priority => 75, -symbol => 'XUSERFILESEARCHPATH' );
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=item 6
+
+@ARGV is processed by Tk::CmdLine before MainWindow creation.
+Standard resource files are loaded in before MainWindow creation.
+Individual resources are also loaded in before MainWindow creation.
+
+ use Tk;
+
+ Tk::CmdLine::SetArguments();
+
+ # <Process @ARGV - not worrying about X11-specific options>
+
+ Tk::CmdLine::LoadResources();
+
+ Tk::CmdLine::SetResources( # set a single resource
+ '*Button*background: red',
+ 'widgetDefault' );
+
+ Tk::CmdLine::SetResources( # set multiple resources
+ [ '*Button*background: red', '*Button*foreground: blue' ],
+ 'widgetDefault' );
+
+ my $mw = MainWindow->new();
+
+ MainLoop();
+
+=back
+
+=head1 ENVIRONMENT
+
+=over 4
+
+=item B<HOME> (optional)
+
+Home directory which may contain user application defaults files as
+$C<HOME>/$C<LANG>/E<lt>B<CLASS>E<gt> or $C<HOME>/E<lt>B<CLASS>E<gt>.
+
+=item B<LANG> (optional)
+
+The current language (default: I<C>).
+
+=item B<XFILESEARCHPATH> (optional)
+
+List of FileSpec patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>)
+used in defining system application defaults files.
+
+=item B<XUSERFILESEARCHPATH> (optional)
+
+List of FileSpec patterns
+(joined using the OS-dependent path delimiter, e.g. colon on B<UNIX>)
+used in defining user application defaults files.
+
+=item B<XAPPLRESDIR> (optional)
+
+Directory containing user application defaults files as
+$C<XAPPLRESDIR>/$C<LANG>/E<lt>B<CLASS>E<gt> or
+$C<XAPPLRESDIR>/E<lt>B<CLASS>E<gt>.
+
+=back
+
+=head1 SEE ALSO
+
+L<MainWindow|Tk::MainWindow>
+L<option|Tk::option>
+
+=head1 HISTORY
+
+=over 4
+
+=item *
+
+1999.03.04 Ben Pavon E<lt>ben.pavon@hsc.hac.comE<gt>
+
+Rewritten as an object-oriented module.
+
+Allow one to process command line options in a specified array (@ARGV by default).
+Eliminate restrictions on the format and location of the options within the array
+(previously the X11 options could not be specified in POSIX format and had to be
+at the beginning of the array).
+
+Added the C<SetResources>() and C<LoadResources>() functions to allow the definition
+of resources prior to MainWindow creation.
+
+=item *
+
+2000.08.31 Ben Pavon E<lt>ben.pavon@hsc.hac.comE<gt>
+
+Added the C<GetArguments>() method which returns the list of arguments that
+have been processed by C<SetArguments>().
+
+Modified C<LoadResources>() to split the symbols using the OS-dependent
+path delimiter defined in the B<Config> module.
+
+Modified C<LoadResources>() to eliminate a warning message when processing
+patterns B<%l>, B<%C>, B<%S>.
+
+=back
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm b/Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm
new file mode 100644
index 00000000000..ef3474cd869
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ColorEdit.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * ColorEditor_xpm[] = {
+"48 48 6 1",
+" c #0000FFFF0000",
+". c #FFFFFFFF0000",
+"X c #FFFF00000000",
+"o c #000000000000",
+"O c #0000FFFFFFFF",
+"+ c #00000000FFFF",
+" . . ......X..XXXXXXXXXXXXXXXX",
+" . .X.X. X...XX.XXXXXXXXXXX",
+" . . . ... ...XXXXXXXXXXXXXX",
+" . . .. .....XX.XXXXXXXXXXXX",
+" . .X.X...XXX..XXXXXXXXXXXX",
+" .. . ....X...X.XXXXXXXXX",
+" .. ..X.. . ..X..XXXXXXXX",
+" .... ..X.X..X.XXXXXXX",
+" ... .X. X...X...XX.XXX",
+" . .. ... XX...XXXX..XXXX",
+" ooo o ooo. . .. .X...X..X.XXXXX",
+" oo oo oo. . . . .......X.X.XX",
+" oo o oo . . .. ........XX.XXXX",
+" oo ooo oo ooo Xooo.oo..... X XX.X",
+" oo o oo oo o oo ooo o.. . X...X X",
+" oo oo oo oo oo oo .oo . X.X.....XX ",
+"O oo o oo oo oo oo oo oo. ... X..... .",
+"O O oo oo oo o oo ooo o. oo . ... .X..X",
+"O OOOooooO ooo ooo ooo oo ... ....... X ",
+" O OOO . . .. ... ..",
+"OOO OOOO OO O . .... . . .. .",
+" + O O O O .. .. . .",
+" O OOO OO . .. .... ",
+"OOOOO O OO . .. . ... ",
+"+OOOO OOOO OO O ... .. ..",
+" O+OO OO O . ",
+"OOOOOOOOoooooooOOOO ooo oo .... ",
+"OO++ OOO ooO OoOO oo oo oo .. ",
+"+OOOOOOOOooOOOo O O oo oo .",
+"++OOO +oo+oOO O oo oo ooo ooooo ooo ooo oo. ",
+"+OO O OOoooooO O o ooo oo oo o oo ooo o ",
+"++++ O OooOOoO Ooo Ooo oo oo oo oo oo ",
+"+++OOOO ooOOOoOOooOOooO oo oo oo oo oo ",
+"++++++ Ooo OOoOOooOooo ooo ooo o oo o oo ",
+"+++O+++oooooooOOOooOoooOooo ooo Oooo oo ",
+"++++++++O++OOOO O OOOOOOO ",
+"++O++++O+O+OOOOOOO O O OOOOOO O ",
+"+++O+++OOO+OO OOOO O OO O O O ",
+"++++++++O++O OO OO OO OOO OO O O ",
+"+++++++++++++ OOOOOO OOOO OO OO ",
+"+++++++++++++O+ +O OOOO OOO OOO OOO ",
+"++++++++++++++ OOOOO O OOOOOOOOOO ",
+"+++++++++++++ ++ OO +O OOOOO O O O ",
+"+++++++++++++++O+++O+O+O OOOOOOOOOO O ",
+"+++++++++++++O++++O++ O OOO O OOO OO ",
+"++++++++++++++++O+++O+O+OOOO OOOO O OO ",
+"+++++++++++++++++++O+++ +++O OOOOOO OO O ",
+"++++++++++++++++++++++ +++ O OOOOOOOOO "};
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm b/Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm
new file mode 100644
index 00000000000..e84b0077410
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ColorEditor.pm
@@ -0,0 +1,761 @@
+package Tk::ColorSelect;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev);
+
+require Tk::Frame;
+
+use base qw(Tk::Frame);
+Construct Tk::Widget 'ColorSelect';
+
+sub Populate
+{
+ my ($middle,$args) = @_;
+ my($i, @a);
+ require Tk::Config;
+ my(@xlibpath) = map { s/^-L//; "$_/X11/rgb.txt" }
+ split /\s+/, $Tk::Config::xlib;
+ foreach $i (@xlibpath,
+ '/usr/local/lib/X11/rgb.txt', '/usr/lib/X11/rgb.txt',
+ '/usr/X11R6/lib/X11/rgb.txt',
+ '/usr/local/X11R5/lib/X11/rgb.txt', '/X11/R5/lib/X11/rgb.txt',
+ '/X11/R4/lib/rgb/rgb.txt', '/usr/openwin/lib/X11/rgb.txt') {
+ local *FOO;
+ next if ! open FOO, $i;
+ my $middle_left = $middle->Frame;
+ $middle_left->pack(
+ -side => 'left',
+ -padx => '0.25c',
+ -pady => '0.25c',
+ );
+ my $names = $middle->Listbox(
+ -width => 20,
+ -height => 12,
+ -relief => 'sunken',
+ -borderwidth => 2,
+ -exportselection => 0,
+ );
+
+ $names->bind('<Double-1>' => [$middle,'color',Ev(['getSelected'])]);
+
+ my $scroll = $middle->Scrollbar(
+ -orient => 'vertical',
+ -command => ['yview', $names],
+ -relief => 'sunken',
+ -borderwidth => 2,
+ );
+ $names->configure(-yscrollcommand => ['set',$scroll]);
+ $names->pack(-in => $middle_left, -side => 'left');
+ $scroll->pack(-in => $middle_left, -side => 'right', -fill => 'y');
+
+ while(<FOO>) {
+ chomp;
+ next if /^!/;
+ my @a = split;
+ my $color = join(' ', @a[3 .. $#a]);
+ my $hex;
+ eval { $hex = $middle->Hex($color); };
+ if ($@) {
+ #print STDERR "unknown color: '$color'\n";
+ if ($@ =~ /unknown color name "/) {
+ next;
+ } else {
+ chomp $@;
+ die $@;
+ }
+ }
+ if (!exists($Tk::ColorEditor::names{$hex}) ||
+ length($Tk::ColorEditor::names{$hex}) > length($color)) {
+ $Tk::ColorEditor::names{$hex} = $color;
+ $names->insert('end', $color);
+ }
+ }
+ close FOO;
+ last;
+ }
+
+ # Create the three scales for editing the color, and the entry for typing
+ # in a color value.
+
+ my $middle_middle = $middle->Frame;
+ $middle_middle->pack(-side => 'left', -expand => 1, -fill => 'y');
+ my $mcm1 = $middle_middle->Optionmenu(-variable => \$middle->{'color_space'},
+ -command => [ $middle, 'color_space'],
+ -relief => 'raised',
+ -options => [ ['HSB color space' => 'hsb'],
+ ['RGB color space' => 'rgb'],
+ ['CMY color space' => 'cmy']]);
+ $mcm1->pack(-side => 'top', -fill => 'x');
+
+ my(@middle_middle, @label, @scale);
+ $middle_middle[0] = $middle_middle->Frame;
+ $middle_middle[1] = $middle_middle->Frame;
+ $middle_middle[2] = $middle_middle->Frame;
+ $middle_middle[3] = $middle_middle->Frame;
+ $middle_middle[0]->pack(-side => 'top', -expand => 1);
+ $middle_middle[1]->pack(-side => 'top', -expand => 1);
+ $middle_middle[2]->pack(-side => 'top', -expand => 1);
+ $middle_middle[3]->pack(-side => 'top', -expand => 1, -fill => 'x');
+ $middle->{'Labels'} = ['zero','one','two'];
+ foreach $i (0..2) {
+ $label[$i] = $middle->Label(-textvariable => \$middle->{'Labels'}[$i]);
+ $scale[$i] = $middle->Scale(
+ -from => 0,
+ -to => 1000,
+ '-length' => '6c',
+ -orient => 'horizontal',
+ -command => [\&scale_changed, $middle],
+ );
+ $scale[$i]->pack(
+ -in => $middle_middle[$i],
+ -side => 'top',
+ -anchor => 'w',
+ );
+ $label[$i]->pack(
+ -in => $middle_middle[$i],
+ -side => 'top',
+ -anchor => 'w',
+ );
+ }
+ my $nameLabel = $middle->Label(-text => 'Name:');
+ $middle->{'Entry'} = '';
+ my $name = $middle->Entry(
+ -relief => 'sunken',
+ -borderwidth => 2,
+ -textvariable => \$middle->{'Entry'},
+ -width => 10,
+# For some reason giving this font causes problems at end of t/create.t
+# -font => '-*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*'
+ );
+
+ $nameLabel->pack(-in => $middle_middle[3], -side => 'left');
+ $name->pack(
+ -in => $middle_middle[3],
+ -side => 'right',
+ -expand => 1,
+ -fill => 'x',
+ );
+ $name->bind('<Return>' => [ $middle, 'color', Ev(['get'])]);
+
+ # Create the color display swatch on the right side of the window.
+
+ my $middle_right = $middle->Frame;
+ $middle_right->pack(
+ -side => 'left',
+ -pady => '.25c',
+ -padx => '.25c',
+ -anchor => 's',
+ );
+ my $swatch = $middle->Canvas(
+ -width => '2.5c',
+ -height => '5c',
+ );
+ my $swatch_item = $swatch->create('oval', '.5c', '.3c', '2.26c', '4.76c');
+
+ my $value = $middle->Label(
+ -textvariable => \$middle->{'color'},
+ -width => 13,
+ -font => '-*-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*'
+ );
+
+ $swatch->pack(
+ -in => $middle_right,
+ -side => 'top',
+ -expand => 1,
+ -fill => 'both',
+ );
+ $value->pack(-in => $middle_right, -side => 'bottom', -pady => '.25c');
+
+ $middle->ConfigSpecs(
+ '-color_space' => ['METHOD', undef, undef, 'hsb'],
+ '-initialcolor' => '-color',
+ '-color' => ['METHOD', 'background', 'Background',
+ $middle->cget('-background')]
+ );
+
+ $middle->{'swatch'} = $swatch;
+ $middle->{'swatch_item'} = $swatch_item;
+ $middle->{'scale'} = [@scale];
+ $middle->{'red'} = 0;
+ $middle->{'blue'} = 0;
+ $middle->{'green'} = 0;
+
+}
+
+sub Hex
+{
+ my $w = shift;
+ my @rgb = (@_ == 3) ? @_ : $w->rgb(@_);
+ sprintf('#%04x%04x%04x',@rgb)
+}
+
+sub color_space {
+
+ my($objref, $space) = @_;
+
+ if (@_ > 1)
+ {
+ my %Labels = ( 'rgb' => [qw(Red Green Blue)],
+ 'cmy' => [qw(Cyan Magenta Yellow)],
+ 'hsb' => [qw(Hue Saturation Brightness)] );
+
+ # The procedure below is invoked when a new color space is selected. It
+ # changes the labels on the scales and re-loads the scales with the
+ # appropriate values for the current color in the new color space
+
+ $space = 'hsb' unless (exists $Labels{$space});
+ my $i;
+ for $i (0..2)
+ {
+ $objref->{'Labels'}[$i] = $Labels{$space}->[$i];
+ }
+ $objref->{'color_space'} = $space;
+ $objref->afterIdle(['set_scales',$objref]) unless ($objref->{'pending'}++);
+ }
+ return $objref->{'color_space'};
+} # color_space
+
+sub hsvToRgb {
+
+ # The procedure below converts an HSB value to RGB. It takes hue,
+ # saturation, and value components (floating-point, 0-1.0) as arguments,
+ # and returns a list containing RGB components (integers, 0-65535) as
+ # result. The code here is a copy of the code on page 616 of
+ # "Fundamentals of Interactive Computer Graphics" by Foley and Van Dam.
+
+ my($hue, $sat, $value) = @_;
+ my($v, $i, $f, $p, $q, $t);
+
+ $v = int(65535 * $value);
+ return ($v, $v, $v) if $sat == 0;
+ $hue *= 6;
+ $hue = 0 if $hue >= 6;
+ $i = int($hue);
+ $f = $hue - $i;
+ $p = int(65535 * $value * (1 - $sat));
+ $q = int(65535 * $value * (1 - ($sat * $f)));
+ $t = int(65535 * $value * (1 - ($sat * (1 - $f))));
+ return ($v, $t, $p) if $i == 0;
+ return ($q, $v, $p) if $i == 1;
+ return ($p, $v, $t) if $i == 2;
+ return ($p, $q, $v) if $i == 3;
+ return ($t, $p, $v) if $i == 4;
+ return ($v, $p, $q) if $i == 5;
+
+} # end hsvToRgb
+
+sub color
+{
+ my ($objref,$name) = @_;
+ if (@_ > 1 && defined($name) && length($name))
+ {
+ if ($name eq 'cancel') {
+ $objref->{color} = undef;
+ return;
+ }
+ my ($format, $shift);
+ my ($red, $green, $blue);
+
+ if ($name !~ /^#/)
+ {
+ ($red, $green, $blue) = $objref->{'swatch'}->rgb($name);
+ }
+ else
+ {
+ my $len = length $name;
+ if($len == 4) { $format = '#(.)(.)(.)'; $shift = 12; }
+ elsif($len == 7) { $format = '#(..)(..)(..)'; $shift = 8; }
+ elsif($len == 10) { $format = '#(...)(...)(...)'; $shift = 4; }
+ elsif($len == 13) { $format = '#(....)(....)(....)'; $shift = 0; }
+ else {
+ $objref->BackTrace(
+ "ColorEditor error: syntax error in color name \"$name\"");
+ return;
+ }
+ ($red,$green,$blue) = $name =~ /$format/;
+ # Looks like a call for 'pack' or similar rather than eval
+ eval "\$red = 0x$red; \$green = 0x$green; \$blue = 0x$blue;";
+ $red = $red << $shift;
+ $green = $green << $shift;
+ $blue = $blue << $shift;
+ }
+ $objref->{'red'} = $red;
+ $objref->{'blue'} = $blue;
+ $objref->{'green'} = $green;
+ my $hex = sprintf('#%04x%04x%04x', $red, $green, $blue);
+ $objref->{'color'} = $hex;
+ $objref->{'Entry'} = $name;
+ $objref->afterIdle(['set_scales',$objref]) unless ($objref->{'pending'}++);
+ $objref->{'swatch'}->itemconfigure($objref->{'swatch_item'},
+ -fill => $objref->{'color'});
+ }
+ return $objref->{'color'};
+}
+
+sub rgbToHsv {
+
+ # The procedure below converts an RGB value to HSB. It takes red, green,
+ # and blue components (0-65535) as arguments, and returns a list
+ # containing HSB components (floating-point, 0-1) as result. The code
+ # here is a copy of the code on page 615 of "Fundamentals of Interactive
+ # Computer Graphics" by Foley and Van Dam.
+
+ my($red, $green, $blue) = @_;
+ my($max, $min, $sat, $range, $hue, $rc, $gc, $bc);
+
+ $max = ($red > $green) ? (($blue > $red) ? $blue : $red) :
+ (($blue > $green) ? $blue : $green);
+ $min = ($red < $green) ? (($blue < $red) ? $blue : $red) :
+ (($blue < $green) ? $blue : $green);
+ $range = $max - $min;
+ if ($max == 0) {
+ $sat = 0;
+ } else {
+ $sat = $range / $max;
+ }
+ if ($sat == 0) {
+ $hue = 0;
+ } else {
+ $rc = ($max - $red) / $range;
+ $gc = ($max - $green) / $range;
+ $bc = ($max - $blue) / $range;
+ $hue = ($max == $red)?(0.166667*($bc - $gc)):
+ (($max == $green)?(0.166667*(2 + $rc - $bc)):
+ (0.166667*(4 + $gc - $rc)));
+ }
+ $hue += 1 if $hue < 0;
+ return ($hue, $sat, $max/65535);
+
+} # end rgbToHsv
+
+sub scale_changed {
+
+ # The procedure below is invoked when one of the scales is adjusted. It
+ # propagates color information from the current scale readings to
+ # everywhere else that it is used.
+
+ my($objref) = @_;
+
+ return if $objref->{'updating'};
+ my ($red, $green, $blue);
+
+ if($objref->{'color_space'} eq 'rgb') {
+ $red = int($objref->{'scale'}->[0]->get * 65.535 + 0.5);
+ $green = int($objref->{'scale'}->[1]->get * 65.535 + 0.5);
+ $blue = int($objref->{'scale'}->[2]->get * 65.535 + 0.5);
+ } elsif($objref->{'color_space'} eq 'cmy') {
+ $red = int(65535 - $objref->{'scale'}->[0]->get * 65.535 + 0.5);
+ $green = int(65535 - $objref->{'scale'}->[1]->get * 65.535 + 0.5);
+ $blue = int(65535 - $objref->{'scale'}->[2]->get * 65.535 + 0.5);
+ } else {
+ ($red, $green, $blue) = hsvToRgb($objref->{'scale'}->[0]->get/1000.0,
+ $objref->{'scale'}->[1]->get/1000.0,
+ $objref->{'scale'}->[2]->get/1000.0);
+ }
+ $objref->{'red'} = $red;
+ $objref->{'blue'} = $blue;
+ $objref->{'green'} = $green;
+ $objref->color(sprintf('#%04x%04x%04x', $red, $green, $blue));
+ $objref->idletasks;
+
+} # end scale_changed
+
+sub set_scales {
+
+ my($objref) = @_;
+ $objref->{'pending'} = 0;
+ $objref->{'updating'} = 1;
+
+ # The procedure below is invoked to update the scales from the current red,
+ # green, and blue intensities. It's invoked after a change in the color
+ # space and after a named color value has been loaded.
+
+ my($red, $blue, $green) = ($objref->{'red'}, $objref->{'blue'},
+ $objref->{'green'});
+
+ if($objref->{'color_space'} eq 'rgb') {
+ $objref->{'scale'}->[0]->set(int($red / 65.535 + 0.5));
+ $objref->{'scale'}->[1]->set(int($green / 65.535 + 0.5));
+ $objref->{'scale'}->[2]->set(int($blue / 65.535 + 0.5));
+ } elsif($objref->{'color_space'} eq 'cmy') {
+ $objref->{'scale'}->[0]->set(int((65535 - $red) / 65.535 + 0.5));
+ $objref->{'scale'}->[1]->set(int((65535 - $green) / 65.535 + 0.5));
+ $objref->{'scale'}->[2]->set(int((65535 - $blue) / 65.535 + 0.5));
+ } else {
+ my ($s1, $s2, $s3) = rgbToHsv($red, $green, $blue);
+ $objref->{'scale'}->[0]->set(int($s1 * 1000.0 + 0.5));
+ $objref->{'scale'}->[1]->set(int($s2 * 1000.0 + 0.5));
+ $objref->{'scale'}->[2]->set(int($s3 * 1000.0 + 0.5));
+ }
+ $objref->{'updating'} = 0;
+
+} # end set_scales
+
+package Tk::ColorDialog;
+require Tk::Toplevel;
+use base qw(Tk::Toplevel);
+
+Construct Tk::Widget 'ColorDialog';
+
+sub Accept
+{
+ my $cw = shift;
+ $cw->withdraw;
+ $cw->{'done'} = 1;
+}
+
+sub Cancel
+{
+ my $cw = shift;
+# $cw->configure(-color => undef);
+ $cw->configure(-color => 'cancel');
+ $cw->Accept;
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->SUPER::Populate($args);
+ $cw->protocol('WM_DELETE_WINDOW' => [ 'Cancel' => $cw ]);
+ $cw->transient($cw->Parent->toplevel);
+ $cw->withdraw;
+ my $sel = $cw->ColorSelect;
+ my $accept = $cw->Button(-text => 'Accept', -command => ['Accept', $cw]);
+ my $cancel = $cw->Button(-text => 'Cancel', -command => ['Cancel', $cw]);
+ Tk::grid($sel);
+ Tk::grid($accept,$cancel);
+ $cw->ConfigSpecs(DEFAULT => [$sel]);
+}
+
+sub Show
+{
+ my $cw = shift;
+ $cw->configure(@_) if @_;
+ $cw->Popup();
+ $cw->waitVariable(\$cw->{'done'});
+ $cw->withdraw;
+ return $cw->cget('-color');
+}
+
+package Tk::ColorEditor;
+
+use vars qw($VERSION $SET_PALETTE);
+$VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(lsearch Ev);
+use Tk::Toplevel;
+use base qw(Tk::Toplevel);
+use Tk::widgets qw(Pixmap);
+Construct Tk::Widget 'ColorEditor';
+
+%Tk::ColorEditor::names = ();
+
+
+use Tk::Dialog;
+use Tk::Pretty;
+
+BEGIN { $SET_PALETTE = 'Set Palette' };
+
+use subs qw(color_space hsvToRgb rgbToHsv);
+
+# ColorEditor public methods.
+
+sub add_menu_item
+{
+ my $objref = shift;
+ my $value;
+ foreach $value (@_)
+ {
+ if ($value eq 'SEP')
+ {
+ $objref->{'mcm2'}->separator;
+ }
+ else
+ {
+ $objref->{'mcm2'}->command( -label => $value,
+ -command => [ 'configure', $objref, '-highlight' => $value ] );
+ push @{$objref->{'highlight_list'}}, $value;
+ }
+ }
+}
+
+sub set_title
+{
+ my ($w) = @_;
+ my $t = $w->{Configure}{'-title'} || '' ;
+ my $h = $w->{Configure}{'-highlight'} || '';
+ $w->SUPER::title("$t $h Color Editor");
+}
+
+sub highlight
+{
+ my ($w,$h) = @_;
+ if (@_ > 1)
+ {
+ $w->{'update'}->configure( -text => "Apply $h Color" );
+ my $state = ($h eq 'background') ? 'normal' : 'disabled';
+ $w->{'palette'}->entryconfigure( $SET_PALETTE, -state => $state);
+ $w->{'highlight'} = $h;
+ $w->configure(-color => $w->Palette->{$h});
+ $w->set_title;
+ }
+ return $w->{'highlight'};
+}
+
+sub title
+{
+ my ($w,$val) = @_;
+ $w->set_title if (@_ > 1);
+ return $w->{Configure}{'-title'};
+}
+
+sub delete_menu_item
+{
+ my $objref = shift;
+ my $value;
+ foreach $value (@_)
+ {
+ $objref->{'mcm2'}->delete($value);
+ my $list_ord = $value =~ /\d+/ ? $value : lsearch($objref->{'highlight_list'}, $value);
+ splice(@{$objref->{'highlight_list'}}, $list_ord, 1) if $list_ord != -1;
+ }
+}
+
+sub delete_widgets {
+
+ # Remove widgets from consideration by the color configurator.
+ # $widgets_ref points to widgets previously added via `configure'.
+
+ my($objref, $widgets_ref) = @_;
+
+ my($i, $found, $r1, $r2, @wl) = (0, 0, 0, 0, @{$objref->cget(-widgets)});
+ foreach $r1 (@{$widgets_ref}) {
+ $i = -1;
+ $found = 0;
+ foreach $r2 (@wl) {
+ $i++;
+ next if $r1 != $r2;
+ $found = 1;
+ last;
+ }
+ splice(@wl, $i, 1) if $found;
+ }
+ $objref->configure(-widgets => [@wl]);
+
+} # end delete_widgets
+
+sub ApplyDefault
+{
+ my($objref) = @_;
+ my $cb = $objref->cget('-command');
+ my $h;
+ foreach $h (@{$objref->{'highlight_list'}})
+ {
+ next if $h =~ /TEAR_SEP|SEP/;
+ $cb->Call($h);
+ die unless (defined $cb);
+ }
+}
+
+sub Populate
+{
+
+ # ColorEditor constructor.
+
+ my($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+ $cw->withdraw;
+
+ my $color_space = 'hsb'; # rgb, cmy, hsb
+ my(@highlight_list) = qw(
+ TEAR_SEP
+ foreground background SEP
+ activeForeground activeBackground SEP
+ highlightColor highlightBackground SEP
+ selectForeground selectBackground SEP
+ disabledForeground insertBackground selectColor troughColor
+ );
+
+ # Create the Usage Dialog;
+
+ my $usage = $cw->Dialog( '-title' => 'ColorEditor Usage',
+ -justify => 'left',
+ -wraplength => '6i',
+ -text => "The Colors menu allows you to:\n\nSelect a color attribute such as \"background\" that you wish to colorize. Click on \"Apply\" to update that single color attribute.\n\nSelect one of three color spaces. All color spaces display a color value as a hexadecimal number under the oval color swatch that can be directly supplied on widget commands.\n\nApply Tk's default color scheme to the application. Useful if you've made a mess of things and want to start over!\n\nChange the application's color palette. Make sure \"background\" is selected as the color attribute, find a pleasing background color to apply to all current and future application widgets, then select \"Set Palette\".",
+ );
+
+ # Create the menu bar at the top of the window for the File, Colors
+ # and Help menubuttons.
+
+ my $m0 = $cw->Frame(-relief => 'raised', -borderwidth => 2);
+ $m0->pack(-side => 'top', -fill => 'x');
+ my $mf = $m0->Menubutton(
+ -text => 'File',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mf->pack(-side => 'left');
+ my $close_command = [sub {shift->withdraw}, $cw];
+ $mf->command(
+ -label => 'Close',
+ -underline => 0,
+ -command => $close_command,
+ -accelerator => 'Ctrl-w',
+ );
+ $cw->bind('<Control-Key-w>' => $close_command);
+ $cw->protocol(WM_DELETE_WINDOW => $close_command);
+
+ my $mc = $m0->Menubutton(
+ -text => 'Colors',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mc->pack(-side => 'left');
+ my $color_attributes = 'Color Attributes';
+ $mc->cascade(-label => $color_attributes, -underline => 6);
+ $mc->separator;
+
+ $mc->command(
+ -label => 'Apply Default Colors',
+ -underline => 6,
+ -command => ['ApplyDefault',$cw]
+ );
+ $mc->separator;
+ $mc->command(
+ -label => $SET_PALETTE,
+ -underline => 0,
+ -command => sub { $cw->setPalette($cw->cget('-color'))}
+ );
+
+ my $m1 = $mc->cget(-menu);
+
+ my $mcm2 = $m1->Menu;
+ $m1->entryconfigure($color_attributes, -menu => $mcm2);
+ my $mh = $m0->Menubutton(
+ -text => 'Help',
+ -underline => 0,
+ -bd => 1,
+ -relief => 'raised',
+ );
+ $mh->pack(-side => 'right');
+ $mh->command(
+ -label => 'Usage',
+ -underline => 0,
+ -command => [sub {shift->Show}, $usage],
+ );
+
+ # Create the Apply button.
+
+ my $bot = $cw->Frame(-relief => 'raised', -bd => 2);
+ $bot->pack(-side => 'bottom', -fill =>'x');
+ my $update = $bot->Button(
+ -command => [
+ sub {
+ my ($objref) = @_;
+ $objref->Callback(-command => ($objref->{'highlight'}, $objref->cget('-color')));
+ $cw->{'done'} = 1;
+ }, $cw,
+ ],
+ );
+ $update->pack(-pady => 1, -padx => '0.25c');
+
+ # Create the listbox that holds all of the color names in rgb.txt, if an
+ # rgb.txt file can be found.
+
+ my $middle = $cw->ColorSelect(-relief => 'raised', -borderwidth => 2);
+ $middle->pack(-side => 'top', -fill => 'both');
+ # Create the status window.
+
+ my $status = $cw->Toplevel;
+ $status->withdraw;
+ $status->geometry('+0+0');
+ my $status_l = $status->Label(-width => 50, -anchor => 'w');
+ $status_l->pack(-side => 'top');
+
+ $cw->{'highlight_list'} = [@highlight_list];
+ $cw->{'mcm2'} = $mcm2;
+
+ foreach (@highlight_list)
+ {
+ next if /^TEAR_SEP$/;
+ $cw->add_menu_item($_);
+ }
+
+ $cw->{'updating'} = 0;
+ $cw->{'pending'} = 0;
+ $cw->{'Status'} = $status;
+ $cw->{'Status_l'} = $status_l;
+ $cw->{'update'} = $update;
+ $cw->{'gwt_depth'} = 0;
+ $cw->{'palette'} = $mc;
+
+ my $pixmap = $cw->Pixmap('-file' => Tk->findINC('ColorEdit.xpm'));
+ $cw->Icon(-image => $pixmap);
+
+ $cw->ConfigSpecs(
+ DEFAULT => [$middle],
+ -widgets => ['PASSIVE', undef, undef,
+ [$cw->parent->Descendants]],
+ -display_status => ['PASSIVE', undef, undef, 0],
+ '-title' => ['METHOD', undef, undef, ''],
+ -command => ['CALLBACK', undef, undef, ['set_colors',$cw]],
+ '-highlight' => ['METHOD', undef, undef, 'background'],
+ -cursor => ['DESCENDANTS', 'cursor', 'Cursor', 'left_ptr'],
+ );
+
+} # end Populate, ColorEditor constructor
+
+sub Show {
+
+ my($objref, @args) = @_;
+
+ Tk::ColorDialog::Show(@_);
+
+} # end show
+
+# ColorEditor default configurator procedure - can be redefined by the
+# application.
+
+sub set_colors {
+
+ # Configure all the widgets in $widgets for attribute $type and color
+ # $color. If $color is undef then reset all colors
+ # to the Tk defaults.
+
+ my($objref, $type, $color) = @_;
+ my $display = $objref->cget('-display_status');
+
+ $objref->{'Status'}->title("Configure $type");
+ $objref->{'Status'}->deiconify if $display;
+ my $widget;
+ my $reset = !defined($color);
+
+ foreach $widget (@{$objref->cget('-widgets')}) {
+ if ($display) {
+ $objref->{'Status_l'}->configure(
+ -text => 'WIDGET: ' . $widget->PathName
+ );
+ $objref->update;
+ }
+ eval {local $SIG{'__DIE__'}; $color = ($widget->configure("-\L${type}"))[3]} if $reset;
+ eval {local $SIG{'__DIE__'}; $widget->configure("-\L${type}" => $color)};
+ }
+
+ $objref->{'Status'}->withdraw if $display;
+
+} # end set_colors
+
+# ColorEditor private methods.
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Compound.pm b/Master/tlpkg/tlperl/lib/Tk/Compound.pm
new file mode 100644
index 00000000000..9f1ccd64487
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Compound.pm
@@ -0,0 +1,40 @@
+package Tk::Compound;
+require Tk;
+import Tk qw($XS_VERSION);
+require Tk::Image;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Compound/Compound.pm#4 $
+
+use base qw(Tk::Image);
+
+Construct Tk::Image 'Compound';
+
+bootstrap Tk::Compound;
+
+sub Tk_image { 'compound' }
+
+Tk::Methods('add');
+
+sub new
+{
+ my $package = shift;
+ my $widget = shift;
+ my $leaf = $package->Tk_image;
+ $package->InitClass($widget);
+ my $obj = $widget->image(create => $leaf,@_,-window => $widget);
+ return bless($obj,$package);
+}
+
+BEGIN
+ {
+ foreach my $type (qw(line text image bitmap space))
+ {
+ my $meth = ucfirst($type);
+ no strict qw 'refs';
+ *{$meth} = sub { shift->add($type,@_) };
+ }
+ }
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Config.pm b/Master/tlpkg/tlperl/lib/Tk/Config.pm
new file mode 100644
index 00000000000..8346d9ede9a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Config.pm
@@ -0,0 +1,12 @@
+package Tk::Config;
+require Exporter;
+use base qw(Exporter);
+$VERSION = '804.027';
+$inc = '-I$(TKDIR)/pTk/mTk/xlib';
+$define = '';
+$xlib = '';
+$xinc = '';
+$gccopt = ' -Wall -Wno-implicit-int -Wno-comment -Wno-unused -D__USE_FIXED_PROTOTYPES__';
+$win_arch = 'MSWin32';
+@EXPORT = qw($VERSION $inc $define $xlib $xinc $gccopt $win_arch);
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Configure.pm b/Master/tlpkg/tlperl/lib/Tk/Configure.pm
new file mode 100644
index 00000000000..26252ae4958
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Configure.pm
@@ -0,0 +1,69 @@
+package Tk::Configure;
+use vars qw($VERSION);
+$VERSION = '4.008'; # $Id: //depot/Tkutf8/Tk/Configure.pm#8 $
+
+use Carp;
+use Tk::Pretty;
+
+
+# Class that handles cget/configure for options that
+# need translating from public form
+# e.g. $cw->configure(-label => 'fred')
+# into $cw->subwiget('label')->configure(-text => 'fred')
+# Should probably do something clever with regexp's here
+
+
+sub new
+{
+ my ($class,@args) = @_;
+ unshift(@args,'configure','cget') if (@args < 3);
+ return bless \@args,$class;
+}
+
+sub cget
+{
+ croak('Wrong number of args to cget') unless (@_ == 2);
+ my ($alias,$key) = @_;
+ my ($set,$get,$widget,@args) = @$alias;
+ $widget->$get(@args);
+}
+
+sub configure
+{
+ my $alias = shift;
+ shift if (@_);
+ my ($set,$get,$widget,@args) = @$alias;
+ if (wantarray)
+ {
+ my @results;
+ eval { @results = $widget->$set(@args,@_) };
+ croak($@) if $@;
+ return @results;
+ }
+ else
+ {
+ my $results;
+ eval { $results = $widget->$set(@args,@_) };
+ croak($@) if $@;
+ return $results;
+ }
+}
+
+*TIESCALAR = \&new;
+*TIEHASH = \&new;
+
+sub FETCH
+{
+ my $alias = shift;
+ my ($set,$get,$widget,@args) = @$alias;
+ return $widget->$get(@args,@_);
+}
+
+sub STORE
+{
+ my $alias = shift;
+ my ($set,$get,$widget,@args) = @$alias;
+ $widget->$set(@args,@_);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Credits b/Master/tlpkg/tlperl/lib/Tk/Credits
new file mode 100644
index 00000000000..3ea9be43b7d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Credits
@@ -0,0 +1,7 @@
+The two Camel/X 'logo' GIFs were produced by :
+
+Grafix, Sussex, UK, +44-1293-886725
+
+For a very reasonable fee. We have rights to distribute them.
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Derived.pm b/Master/tlpkg/tlperl/lib/Tk/Derived.pm
new file mode 100644
index 00000000000..c31c205d2fb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Derived.pm
@@ -0,0 +1,512 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Derived;
+require Tk::Widget;
+require Tk::Configure;
+use strict;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/;
+
+$Tk::Derived::Debug = 0;
+
+my $ENHANCED_CONFIGSPECS = 0; # disable for now
+
+use Tk qw(NORMAL_BG BLACK);
+
+sub Subwidget
+{
+ my $cw = shift;
+ my @result = ();
+ if (exists $cw->{SubWidget})
+ {
+ if (@_)
+ {
+ foreach my $name (@_)
+ {
+ push(@result,$cw->{SubWidget}{$name}) if (exists $cw->{SubWidget}{$name});
+ }
+ }
+ else
+ {
+ @result = values %{$cw->{SubWidget}};
+ }
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+sub _makelist
+{
+ my $widget = shift;
+ my (@specs) = (ref $widget && ref $widget eq 'ARRAY') ? (@$widget) : ($widget);
+ return @specs;
+}
+
+sub Subconfigure
+{
+ # This finds the widget or widgets to to which to apply a particular
+ # configure option
+ my ($cw,$opt) = @_;
+ my $config = $cw->ConfigSpecs;
+ my $widget;
+ my @subwidget = ();
+ my @arg = ();
+ if (defined $opt)
+ {
+ $widget = $config->{$opt};
+ unless (defined $widget)
+ {
+ $widget = ($opt =~ /^-(.*)$/) ? $config->{$1} : $config->{-$opt};
+ }
+ # Handle alias entries
+ if (defined($widget) && !ref($widget))
+ {
+ $opt = $widget;
+ $widget = $config->{$widget};
+ }
+ push(@arg,$opt) unless ($opt eq 'DEFAULT');
+ }
+ $widget = $config->{DEFAULT} unless (defined $widget);
+ if (defined $widget)
+ {
+ $cw->BackTrace("Invalid ConfigSpecs $widget") unless (ref($widget) && (ref $widget eq 'ARRAY'));
+ $widget = $widget->[0];
+ }
+ else
+ {
+ $widget = 'SELF';
+ }
+ foreach $widget (_makelist($widget))
+ {
+ $widget = 'SELF' if (ref($widget) && $widget == $cw);
+ if (ref $widget)
+ {
+ my $ref = ref $widget;
+ if ($ref eq 'ARRAY')
+ {
+ $widget = Tk::Configure->new(@$widget);
+ push(@subwidget,$widget)
+ }
+ elsif ($ref eq 'HASH')
+ {
+ foreach my $key (%$widget)
+ {
+ foreach my $sw (_makelist($widget->{$key}))
+ {
+ push(@subwidget,Tk::Configure->new($sw,$key));
+ }
+ }
+ }
+ else
+ {
+ push(@subwidget,$widget)
+ }
+ }
+ elsif ($widget eq 'ADVERTISED')
+ {
+ push(@subwidget,$cw->Subwidget)
+ }
+ elsif ($widget eq 'DESCENDANTS')
+ {
+ push(@subwidget,$cw->Descendants)
+ }
+ elsif ($widget eq 'CHILDREN')
+ {
+ push(@subwidget,$cw->children)
+ }
+ elsif ($widget eq 'METHOD')
+ {
+ my ($method) = ($opt =~ /^-?(.*)$/);
+ push(@subwidget,Tk::Configure->new($method,$method,$cw))
+ }
+ elsif ($widget eq 'SETMETHOD')
+ {
+ my ($method) = ($opt =~ /^-?(.*)$/);
+ push(@subwidget,Tk::Configure->new($method,'_cget',$cw,@arg))
+ }
+ elsif ($widget eq 'SELF')
+ {
+ push(@subwidget,Tk::Configure->new('Tk::configure', 'Tk::cget', $cw,@arg))
+ }
+ elsif ($widget eq 'PASSIVE')
+ {
+ push(@subwidget,Tk::Configure->new('_configure','_cget',$cw,@arg))
+ }
+ elsif ($widget eq 'CALLBACK')
+ {
+ push(@subwidget,Tk::Configure->new('_callback','_cget',$cw,@arg))
+ }
+ else
+ {
+ push(@subwidget,$cw->Subwidget($widget));
+ }
+ }
+ $cw->BackTrace("No delegate subwidget '$widget' for $opt") unless (@subwidget);
+ return (wantarray) ? @subwidget : $subwidget[0];
+}
+
+sub _cget
+{
+ my ($cw,$opt) = @_;
+ $cw->BackTrace('Wrong number of args to cget') unless (@_ == 2);
+ return $cw->{Configure}{$opt}
+}
+
+sub _configure
+{
+ my ($cw,$opt,$val) = @_;
+ $cw->BackTrace('Wrong number of args to configure') unless (@_ == 3);
+ $cw->{Configure}{$opt} = $val;
+}
+
+sub _callback
+{
+ my ($cw,$opt,$val) = @_;
+ $cw->BackTrace('Wrong number of args to configure') unless (@_ == 3);
+ $val = Tk::Callback->new($val) if defined($val) && ref($val);
+ $cw->{Configure}{$opt} = $val;
+}
+
+sub cget
+{my ($cw,$opt) = @_;
+ my @result;
+ local $SIG{'__DIE__'};
+ foreach my $sw ($cw->Subconfigure($opt))
+ {
+ if (wantarray)
+ {
+ eval { @result = $sw->cget($opt) };
+ }
+ else
+ {
+ eval { $result[0] = $sw->cget($opt) };
+ }
+ last unless $@;
+ }
+ return wantarray ? @result : $result[0];
+}
+
+sub Configured
+{
+ # Called whenever a derived widget is re-configured
+ my ($cw,$args,$changed) = @_;
+ if (@_ > 1)
+ {
+ $cw->afterIdle(['ConfigChanged',$cw,$changed]) if (%$changed);
+ }
+ return exists $cw->{'Configure'};
+}
+
+sub configure
+{
+ # The default composite widget configuration method uses hash stored
+ # in the widget's hash to map configuration options
+ # onto subwidgets.
+ #
+ my @results = ();
+ my $cw = shift;
+ if (@_ <= 1)
+ {
+ # Enquiry cases
+ my $spec = $cw->ConfigSpecs;
+ if (@_)
+ {
+ # Return info on the nominated option
+ my $opt = $_[0];
+ my $info = $spec->{$opt};
+ unless (defined $info)
+ {
+ $info = ($opt =~ /^-(.*)$/) ? $spec->{$1} : $spec->{-$opt};
+ }
+ if (defined $info)
+ {
+ if (ref $info)
+ {
+ # If the default slot is undef then ask subwidgets in turn
+ # for their default value until one accepts it.
+ if ($ENHANCED_CONFIGSPECS && !defined($info->[3]))
+ {local $SIG{'__DIE__'};
+ my @def;
+ foreach my $sw ($cw->Subconfigure($opt))
+ {
+ eval { @def = $sw->configure($opt) };
+ last unless $@;
+ }
+ $info->[3] = $def[3];
+ $info->[1] = $def[1] unless defined $info->[1];
+ $info->[2] = $def[2] unless defined $info->[2];
+ }
+ push(@results,$opt,$info->[1],$info->[2],$info->[3],$cw->cget($opt));
+ }
+ else
+ {
+ # Real (core) Tk widgets return db name rather than option name
+ # for aliases so recurse to get that ...
+ my @real = $cw->configure($info);
+ push(@results,$opt,$real[1]);
+ }
+ }
+ else
+ {
+ push(@results,$cw->Subconfigure($opt)->configure($opt));
+ }
+ }
+ else
+ {
+ my $opt;
+ my %results;
+ if (exists $spec->{'DEFAULT'})
+ {
+ foreach $opt ($cw->Subconfigure('DEFAULT')->configure)
+ {
+ $results{$opt->[0]} = $opt;
+ }
+ }
+ foreach $opt (keys %$spec)
+ {
+ $results{$opt} = [$cw->configure($opt)] if ($opt ne 'DEFAULT');
+ }
+ foreach $opt (sort keys %results)
+ {
+ push(@results,$results{$opt});
+ }
+ }
+ }
+ else
+ {
+ my (%args) = @_;
+ my %changed = ();
+ my ($opt,$val);
+ my $config = $cw->TkHash('Configure');
+
+ while (($opt,$val) = each %args)
+ {
+ my $var = \$config->{$opt};
+ my $old = $$var;
+ $$var = $val;
+ my $accepted = 0;
+ my $error = "No widget handles $opt";
+ foreach my $subwidget ($cw->Subconfigure($opt))
+ {
+ next unless (defined $subwidget);
+ eval {local $SIG{'__DIE__'}; $subwidget->configure($opt => $val) };
+ if ($@)
+ {
+ my $val2 = (defined $val) ? $val : 'undef';
+ $error = "Can't set $opt to `$val2' for $cw: " . $@;
+ undef $@;
+ }
+ else
+ {
+ $accepted = 1;
+ }
+ }
+ $cw->BackTrace($error) unless ($accepted);
+ $val = $$var;
+ $changed{$opt} = $val if (!defined $old || !defined $val || "$old" ne "$val");
+ }
+ $cw->Configured(\%args,\%changed);
+ }
+ return (wantarray) ? @results : \@results;
+}
+
+sub ConfigDefault
+{
+ my ($cw,$args) = @_;
+
+ $cw->BackTrace('Bad args') unless (defined $args && ref $args eq 'HASH');
+
+ my $specs = $cw->ConfigSpecs;
+ # Should we enforce a Delagates(DEFAULT => ) as well ?
+ $specs->{'DEFAULT'} = ['SELF'] unless (exists $specs->{'DEFAULT'});
+
+ #
+ # This is a pain with Text or Entry as core widget, they don't
+ # inherit SELF's cursor. So comment it out for Tk402.001
+ #
+ # $specs->{'-cursor'} = ['SELF',undef,undef,undef] unless (exists $specs->{'-cursor'});
+
+ # Now some hacks that cause colours to propogate down a composite widget
+ # tree - really needs more thought, other options adding such as active
+ # colours too and maybe fonts
+
+ my $child = ($cw->children)[0]; # 1st child window (if any)
+
+ unless (exists($specs->{'-background'}))
+ {
+ Tk::catch { $cw->Tk::cget('-background') };
+ my (@bg) = $@ ? ('PASSIVE') : ('SELF');
+ push(@bg,'CHILDREN') if $child;
+ $specs->{'-background'} = [\@bg,'background','Background',NORMAL_BG];
+ }
+ unless (exists($specs->{'-foreground'}))
+ {
+ Tk::catch { $cw->Tk::cget('-foreground') };
+ my (@fg) = $@ ? ('PASSIVE') : ('SELF');
+ push(@fg,'CHILDREN') if $child;
+ $specs->{'-foreground'} = [\@fg,'foreground','Foreground',BLACK];
+ }
+ $cw->ConfigAlias(-fg => '-foreground', -bg => '-background');
+
+ # Pre-scan args for aliases - this avoids defaulting
+ # options specified via alias
+ foreach my $opt (keys %$args)
+ {
+ my $info = $specs->{$opt};
+ if (defined($info) && !ref($info))
+ {
+ $args->{$info} = delete $args->{$opt};
+ }
+ }
+
+ # Now walk %$specs supplying defaults for all the options
+ # which have a defined default value, potentially looking up .Xdefaults database
+ # options for the name/class of the 'frame'
+
+ foreach my $opt (keys %$specs)
+ {
+ if ($opt ne 'DEFAULT')
+ {
+ unless (exists $args->{$opt})
+ {
+ my $info = $specs->{$opt};
+ if (ref $info)
+ {
+ # Not an alias
+ if ($ENHANCED_CONFIGSPECS && !defined $info->[3])
+ {
+ # configure inquire to fill in default slot from subwidget
+ $cw->configure($opt);
+ }
+ if (defined $info->[3])
+ {
+ if (defined $info->[1] && defined $info->[2])
+ {
+ # Should we do this on the Subconfigure widget instead?
+ # to match *Entry.Background
+ my $db = $cw->optionGet($info->[1],$info->[2]);
+ $info->[3] = $db if (defined $db);
+ }
+ $args->{$opt} = $info->[3];
+ }
+ }
+ }
+ }
+ }
+}
+
+sub ConfigSpecs
+{
+ my $cw = shift;
+ my $specs = $cw->TkHash('ConfigSpecs');
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ $specs->{$key} = $val;
+ }
+ return $specs;
+}
+
+sub _alias
+{
+ my ($specs,$opt,$main) = @_;
+ if (exists($specs->{$opt}))
+ {
+ unless (exists $specs->{$main})
+ {
+ my $targ = $specs->{$opt};
+ if (ref($targ))
+ {
+ # opt is a real option
+ $specs->{$main} = $opt
+ }
+ else
+ {
+ # opt is itself an alias
+ # make main point to same place
+ $specs->{$main} = $targ unless $targ eq $main;
+ }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+sub ConfigAlias
+{
+ my $cw = shift;
+ my $specs = $cw->ConfigSpecs;
+ while (@_ >= 2)
+ {
+ my $opt = shift;
+ my $main = shift;
+ unless (_alias($specs,$opt,$main) || _alias($specs,$main,$opt))
+ {
+ $cw->BackTrace("Neither $opt nor $main exist");
+ }
+ }
+ $cw->BackTrace('Odd number of args to ConfigAlias') if (@_);
+}
+
+sub Delegate
+{
+ my ($cw,$method,@args) = @_;
+ my $widget = $cw->DelegateFor($method);
+ if ($widget == $cw)
+ {
+ $method = "Tk::Widget::$method"
+ }
+ my @result;
+ if (wantarray)
+ {
+ @result = $widget->$method(@args);
+ }
+ else
+ {
+ $result[0] = $widget->$method(@args);
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+sub InitObject
+{
+ my ($cw,$args) = @_;
+ $cw->Populate($args);
+ $cw->ConfigDefault($args);
+}
+
+sub ConfigChanged
+{
+ my ($cw,$args) = @_;
+}
+
+sub Advertise
+{
+ my ($cw,$name,$widget) = @_;
+ confess 'No name' unless (defined $name);
+ croak 'No widget' unless (defined $widget);
+ my $hash = $cw->TkHash('SubWidget');
+ $hash->{$name} = $widget; # advertise it
+ return $widget;
+}
+
+sub Component
+{
+ my ($cw,$kind,$name,%args) = @_;
+ $args{'Name'} = "\l$name" if (defined $name && !exists $args{'Name'});
+ # my $pack = delete $args{'-pack'};
+ my $delegate = delete $args{'-delegate'};
+ my $w = $cw->$kind(%args); # Create it
+ # $w->pack(@$pack) if (defined $pack);
+ $cw->Advertise($name,$w) if (defined $name);
+ $cw->Delegates(map(($_ => $w),@$delegate)) if (defined $delegate);
+ return $w; # and return it
+}
+
+1;
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Dialog.pm b/Master/tlpkg/tlperl/lib/Tk/Dialog.pm
new file mode 100644
index 00000000000..8173f4a5acc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Dialog.pm
@@ -0,0 +1,70 @@
+package Tk::Dialog;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Dialog.pm#4 $
+
+# Dialog - a translation of `tk_dialog' from Tcl/Tk to TkPerl (based on
+# John Stoffel's idea).
+#
+# Stephen O. Lidie, Lehigh University Computing Center. 94/12/27
+# lusol@Lehigh.EDU
+
+# Documentation after __END__
+
+use Carp;
+use strict;
+use base qw(Tk::DialogBox);
+
+Construct Tk::Widget 'Dialog';
+
+sub Populate
+{
+
+ # Dialog object constructor. Uses `new' method from base class
+ # to create object container then creates the dialog toplevel.
+
+ my($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+
+ my ($w_bitmap,$w_but,$pad1,$pad2);
+
+ # Create the Toplevel window and divide it into top and bottom parts.
+
+ my (@pl) = (-side => 'top', -fill => 'both');
+
+ ($pad1, $pad2) =
+ ([-padx => '3m', -pady => '3m'], [-padx => '3m', -pady => '2m']);
+
+
+ $cw->iconname('Dialog');
+
+ my $w_top = $cw->Subwidget('top');
+
+ # Fill the top part with the bitmap and message.
+
+ @pl = (-side => 'left');
+
+ $w_bitmap = $w_top->Label(Name => 'bitmap');
+ $w_bitmap->pack(@pl, @$pad1);
+
+ my $w_msg = $w_top->Label( -wraplength => '3i', -justify => 'left' );
+
+ $w_msg->pack(-side => 'right', -expand => 1, -fill => 'both', @$pad1);
+
+ $cw->Advertise(message => $w_msg);
+ $cw->Advertise(bitmap => $w_bitmap );
+
+ $cw->ConfigSpecs( -image => ['bitmap',undef,undef,undef],
+ -bitmap => ['bitmap',undef,undef,undef],
+ -font => ['message','font','Font', '-*-Times-Medium-R-Normal--*-180-*-*-*-*-*-*'],
+ DEFAULT => ['message',undef,undef,undef]
+ );
+}
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/DialogBox.pm b/Master/tlpkg/tlperl/lib/Tk/DialogBox.pm
new file mode 100644
index 00000000000..13335404e15
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DialogBox.pm
@@ -0,0 +1,135 @@
+#
+# DialogBox is similar to Dialog except that it allows any widget
+# in the top frame. Widgets can be added with the add method. Currently
+# there exists no way of deleting a widget once it has been added.
+
+package Tk::DialogBox;
+
+use strict;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #13 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::Toplevel);
+
+Tk::Widget->Construct('DialogBox');
+
+sub Populate {
+ my ($cw, $args) = @_;
+
+ $cw->SUPER::Populate($args);
+ my $buttons = delete $args->{'-buttons'};
+ $buttons = ['OK'] unless defined $buttons;
+ my $default_button = delete $args->{'-default_button'};
+ $default_button = $buttons->[0] unless defined $default_button;
+
+ $cw->{'selected_button'} = '';
+ $cw->transient($cw->Parent->toplevel);
+ $cw->withdraw;
+ if (@$buttons == 1) {
+ $cw->protocol('WM_DELETE_WINDOW' => sub { $cw->{'default_button'}->invoke });
+ } else {
+ $cw->protocol('WM_DELETE_WINDOW' => sub {});
+ }
+
+ # create the two frames
+ my $top = $cw->Component('Frame', 'top');
+ $top->configure(-relief => 'raised', -bd => 1) unless $Tk::platform eq 'MSWin32';
+ my $bot = $cw->Component('Frame', 'bottom');
+ $bot->configure(-relief => 'raised', -bd => 1) unless $Tk::platform eq 'MSWin32';
+ $bot->pack(qw/-side bottom -fill both -ipady 3 -ipadx 3/);
+ $top->pack(qw/-side top -fill both -ipady 3 -ipadx 3 -expand 1/);
+
+ # create a row of buttons in the bottom.
+ my $bl; # foreach my $var: perl > 5.003_08
+ foreach $bl (@$buttons)
+ {
+ my $b = $bot->Button(-text => $bl, -command => sub { $cw->{'selected_button'} = "$bl" } );
+ $b->bind('<Return>' => [ $b, 'Invoke']);
+ $cw->Advertise("B_$bl" => $b);
+ if ($Tk::platform eq 'MSWin32')
+ {
+ $b->configure(-width => 10, -pady => 0);
+ }
+ if ($bl eq $default_button) {
+ if ($Tk::platform eq 'MSWin32') {
+ $b->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ } else {
+ my $db = $bot->Frame(-relief => 'sunken', -bd => 1);
+ $b->raise($db);
+ $b->pack(-in => $db, -padx => '2', -pady => '2');
+ $db->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ }
+ $cw->{'default_button'} = $b;
+ $cw->bind('<Return>' => [ $b, 'Invoke']);
+ } else {
+ $b->pack(-side => 'left', -expand => 1, -padx => 1, -pady => 1);
+ }
+ }
+ $cw->ConfigSpecs(-command => ['CALLBACK', undef, undef, undef ],
+ -foreground => ['DESCENDANTS', 'foreground','Foreground', 'black'],
+ -background => ['DESCENDANTS', 'background','Background', undef],
+ -focus => ['PASSIVE', undef, undef, undef],
+ -showcommand => ['CALLBACK', undef, undef, undef],
+ );
+ $cw->Delegates('Construct',$top);
+}
+
+sub add {
+ my ($cw, $wnam, @args) = @_;
+ my $w = $cw->Subwidget('top')->$wnam(@args);
+ $cw->Advertise("\L$wnam" => $w);
+ return $w;
+}
+
+sub Wait
+{
+ my $cw = shift;
+ $cw->Callback(-showcommand => $cw);
+ $cw->waitVariable(\$cw->{'selected_button'});
+ $cw->grabRelease;
+ $cw->withdraw;
+ $cw->Callback(-command => $cw->{'selected_button'});
+}
+
+sub Show {
+
+ croak 'DialogBox: "Show" method requires at least 1 argument'
+ if scalar @_ < 1;
+ my $cw = shift;
+ my ($grab) = @_;
+ my $old_focus = $cw->focusSave;
+ my $old_grab = $cw->grabSave;
+
+ shift if defined $grab && length $grab && ($grab =~ /global/);
+ $cw->Popup(@_);
+
+ Tk::catch {
+ if (defined $grab && length $grab && ($grab =~ /global/)) {
+ $cw->grabGlobal;
+ } else {
+ $cw->grab;
+ }
+ };
+ if (my $focusw = $cw->cget(-focus)) {
+ $focusw->focus;
+ } elsif (defined $cw->{'default_button'}) {
+ $cw->{'default_button'}->focus;
+ } else {
+ $cw->focus;
+ }
+ $cw->Wait;
+ &$old_focus;
+ &$old_grab;
+ return $cw->{'selected_button'};
+}
+
+sub Exit
+{
+ my $cw = shift;
+ #kill the dialogbox, by faking a 'DONE'
+ $cw->{'selected_button'} = $cw->{'default_button'}->cget(-text);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DirTree.pm b/Master/tlpkg/tlperl/lib/Tk/DirTree.pm
new file mode 100644
index 00000000000..b2d996a94d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DirTree.pm
@@ -0,0 +1,252 @@
+package Tk::DirTree;
+# DirTree -- TixDirTree widget
+#
+# Derived from DirTree.tcl in Tix 4.1
+#
+# Chris Dean <ctdean@cogit.com>
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #14 $ =~ /\D(\d+)\s*$/;
+
+use Tk;
+use Tk::Derived;
+use Tk::Tree;
+use Cwd;
+use DirHandle;
+
+use base qw(Tk::Derived Tk::Tree);
+use strict;
+
+Construct Tk::Widget 'DirTree';
+
+
+sub Populate {
+ my( $cw, $args ) = @_;
+
+ $cw->SUPER::Populate( $args );
+
+ $cw->ConfigSpecs(
+ -dircmd => [qw/CALLBACK dirCmd DirCmd DirCmd/],
+ -showhidden => [qw/PASSIVE showHidden ShowHidden 0/],
+ -image => [qw/PASSIVE image Image folder/],
+ -directory => [qw/SETMETHOD directory Directory ./],
+ -value => '-directory' );
+
+ $cw->configure( -separator => '/', -itemtype => 'imagetext' );
+}
+
+sub DirCmd {
+ my( $w, $dir, $showhidden ) = @_;
+ $dir .= "/" if $dir =~ /^[a-z]:$/i and $^O eq 'MSWin32';
+ my $h = DirHandle->new( $dir ) or return();
+ my @names = grep( $_ ne '.' && $_ ne '..', $h->read );
+ @names = grep( ! /^[.]/, @names ) unless $showhidden;
+ return( @names );
+}
+
+*dircmd = \&DirCmd;
+
+sub fullpath
+{
+ my ($path) = @_;
+ my $cwd = getcwd();
+ if (CORE::chdir($path))
+ {
+ $path = getcwd();
+ CORE::chdir($cwd) || die "Cannot cd back to $cwd:$!";
+ }
+ else
+ {
+ warn "Cannot cd to $path:$!"
+ }
+ return $path;
+}
+
+sub directory
+{
+ my ($w,$key,$val) = @_;
+ # We need a value for -image, so its being undefined
+ # is probably caused by order of handling config defaults
+ # so defer it.
+ $w->afterIdle([$w, 'set_dir' => $val]);
+}
+
+sub set_dir {
+ my( $w, $val ) = @_;
+ my $fulldir = fullpath( $val );
+
+ my $parent = '/';
+ if ($^O eq 'MSWin32')
+ {
+ if ($fulldir =~ s/^([a-z]:)//i)
+ {
+ $parent = $1;
+ }
+ }
+ $w->add_to_tree( $parent, $parent) unless $w->infoExists($parent);
+
+ my @dirs = ($parent);
+ foreach my $name (split( /[\/\\]/, $fulldir )) {
+ next unless length $name;
+ push @dirs, $name;
+ my $dir = join( '/', @dirs );
+ $dir =~ s|^//|/|;
+ $w->add_to_tree( $dir, $name, $parent )
+ unless $w->infoExists( $dir );
+ $parent = $dir;
+ }
+
+ $w->OpenCmd( $parent );
+ $w->setmode( $parent, 'close' );
+}
+*chdir = \&set_dir;
+
+
+sub OpenCmd {
+ my( $w, $dir ) = @_;
+
+ my $parent = $dir;
+ $dir = '' if $dir eq '/';
+ foreach my $name ($w->dirnames( $parent )) {
+ next if ($name eq '.' || $name eq '..');
+ my $subdir = "$dir/$name";
+ next unless -d $subdir;
+ if( $w->infoExists( $subdir ) ) {
+ $w->show( -entry => $subdir );
+ } else {
+ $w->add_to_tree( $subdir, $name, $parent );
+ }
+ }
+}
+
+*opencmd = \&OpenCmd;
+
+sub add_to_tree {
+ my( $w, $dir, $name, $parent ) = @_;
+
+ my $image = $w->cget('-image');
+ if ( !UNIVERSAL::isa($image, 'Tk::Image') ) {
+ $image = $w->Getimage( $image );
+ }
+ my $mode = 'none';
+ $mode = 'open' if $w->has_subdir( $dir );
+
+ my @args = (-image => $image, -text => $name);
+ if( $parent ) { # Add in alphabetical order.
+ foreach my $sib ($w->infoChildren( $parent )) {
+ if( $sib gt $dir ) {
+ push @args, (-before => $sib);
+ last;
+ }
+ }
+ }
+
+ $w->add( $dir, @args );
+ $w->setmode( $dir, $mode );
+}
+
+sub has_subdir {
+ my( $w, $dir ) = @_;
+ foreach my $name ($w->dirnames( $dir )) {
+ next if ($name eq '.' || $name eq '..');
+ next if ($name =~ /^\.+$/);
+ return( 1 ) if -d "$dir/$name";
+ }
+ return( 0 );
+}
+
+sub dirnames {
+ my( $w, $dir ) = @_;
+ my @names = $w->Callback( '-dircmd', $dir, $w->cget( '-showhidden' ) );
+ return( @names );
+}
+
+{
+ package Tk::DirTreeDialog;
+ use base qw(Tk::Toplevel);
+ Construct Tk::Widget 'DirTreeDialog';
+
+ sub Populate {
+ my($w, $args) = @_;
+ $w->{curr_dir} = $args->{-initialdir};
+ if (!defined $w->{curr_dir}) {
+ require Cwd;
+ $w->{curr_dir} = Cwd::cwd();
+ }
+ if (defined $args->{-mustexist}) {
+ die "-mustexist is not yet implemented";
+ }
+ my $title = $args->{-title} || "Choose directory:";
+ delete $args->{-popover};
+
+ $w->title($title);
+ $w->{ok} = 0; # flag: "1" means OK, "-1" means cancelled
+
+ # Create Frame widget before the DirTree widget, so it's always visible
+ # if the window gets resized.
+ my $f = $w->Frame->pack(-fill => "x", -side => "bottom");
+
+ my $d;
+ $d = $f->Scrolled('DirTree',
+ -scrollbars => 'osoe',
+ -width => 35,
+ -height => 20,
+ -selectmode => 'browse',
+ -exportselection => 1,
+ -browsecmd => sub {
+ $w->{curr_dir} = shift;
+ if ($^O ne 'MSWin32') {
+ $w->{curr_dir} =~ s|^//|/|; # bugfix
+ }
+ },
+
+ # With this version of -command a double-click will
+ # select the directory
+ -command => sub { $w->{ok} = 1 },
+
+ # With this version of -command a double-click will
+ # open a directory. Selection is only possible with
+ # the Ok button.
+ #-command => sub { $d->opencmd($_[0]) },
+ )->pack(-fill => "both", -expand => 1);
+ # Set the initial directory
+ exists &Tk::DirTree::chdir ? $d->chdir($w->{curr_dir}) : $d->set_dir($w->{curr_dir});
+
+ $f->Button(-text => 'Ok',
+ -command => sub { $w->{ok} = 1 })->pack(-side => 'left');
+ $f->Button(-text => 'Cancel',
+ -command => sub { $w->{ok} = -1 })->pack(-side => 'left');
+ $w->OnDestroy(sub { $w->{ok} = -1 });
+ }
+
+ sub Show {
+ my $w = shift;
+ my $old_focus = $w->focusSave;
+ my $old_grab = $w->grabSave;
+ Tk::catch {
+ $w->grab;
+ };
+ $w->waitVariable(\$w->{ok});
+ my $ret = $w->{ok} == 1 ? $w->{curr_dir} : undef;
+ $w->grabRelease if Tk::Exists($w);
+ &$old_focus;
+ &$old_grab;
+ $w->destroy if Tk::Exists($w);
+ $ret;
+ }
+}
+
+1;
+
+__END__
+
+# Copyright (c) 1996, Expert Interface Technologies
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# The file man.macros and some of the macros used by this file are
+# copyrighted: (c) 1990 The Regents of the University of California.
+# (c) 1994-1995 Sun Microsystems, Inc.
+# The license terms of the Tcl/Tk distrobution are in the file
+# license.tcl.
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Dirlist.pm b/Master/tlpkg/tlperl/lib/Tk/Dirlist.pm
new file mode 100644
index 00000000000..f16ce021f41
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Dirlist.pm
@@ -0,0 +1,113 @@
+package Tk::Dirlist;
+require Tk::Derived;
+require Tk::HList;
+require DirHandle;
+use Cwd;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Dirlist.pm#5 $
+
+use base qw(Tk::Derived Tk::HList);
+use strict;
+Construct Tk::Widget 'Dirlist';
+
+sub getimage
+{
+ my ($w,$key) = @_;
+ unless (exists $w->{$key})
+ {
+ $w->{$key} = $w->Pixmap(-id => $key);
+ unless ($w->{$key})
+ {
+ $w->{$key} = $w->Bitmap($key);
+ }
+ }
+ return $w->{$key};
+}
+
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->configure(-separator => '/', -itemtype => 'imagetext');
+ $cw->ConfigSpecs(-directory => ['SETMETHOD','directory','Directory','.']);
+}
+
+sub fullpath
+{
+ my ($path) = @_;
+ my $cwd = getcwd;
+ if (chdir($path))
+ {
+ $path = getcwd;
+ chdir($cwd);
+ }
+ else
+ {
+ warn "Cannot cd to $path:$!"
+ }
+# print "$path\n";
+ return $path;
+}
+
+sub AddDir
+{
+ my ($w,$dir) = @_;
+ my $path = '';
+ my $prefix = '';
+ my $first = 0;
+ my $name;
+ foreach $name (split m#/#,$dir)
+ {
+ $first++;
+ if ($name eq '')
+ {
+ next unless ($first == 1);
+ $path = '/';
+ $name = '/';
+ }
+ else
+ {
+ $path .= $prefix;
+ $path .= $name;
+ $prefix = '/';
+ }
+ unless ($w->info('exists' => $path))
+ {
+# print "Add $path\n";
+ $w->add($path,-image => $w->getimage('folder'), -text => $name);
+ }
+ }
+}
+
+sub choose_image
+{
+ my ($w,$path) = @_;
+ return 'folder' if (-d $path);
+ return 'srcfile' if ($path =~ /\.[ch]$/);
+ return 'textfile' if (-T $path);
+ return 'file';
+}
+
+
+sub directory
+{
+ my ($w,$key,$val) = @_;
+ my $h = DirHandle->new($val);
+ $w->AddDir($val = fullpath($val));
+ my $f;
+ $w->entryconfigure($val,-image => $w->getimage('act_fold'));
+ foreach $f (sort $h->read)
+ {
+ next if ($f =~ /^\.+$/);
+ my $path = "$val/$f";
+ unless ($w->info('exists' => $path))
+ {
+ my $image = $w->getimage($w->choose_image($path));
+ $w->add($path,-image => $image, -text => $f);
+ }
+ }
+ $h->close;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop.pm
new file mode 100644
index 00000000000..bdc54f74367
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop.pm
@@ -0,0 +1,332 @@
+package Tk::DragDrop;
+require Tk::DragDrop::Common;
+require Tk::Toplevel;
+require Tk::Label;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #14 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::DragDrop::Common Tk::Toplevel);
+
+# This is a little tricky, ISA says 'Toplevel' but we
+# define a Tk_cmd to actually build a 'Label', then
+# use wmRelease in Populate to make it a toplevel.
+
+my $useWmRelease = Tk::Wm->can('release'); # ($^O ne 'MSWin32');
+
+sub Tk_cmd { ($useWmRelease) ? \&Tk::label : \&Tk::toplevel }
+
+Construct Tk::Widget 'DragDrop';
+
+use strict;
+use vars qw(%type @types);
+use Carp;
+
+
+# There is a snag with having a token window and moving to
+# exactly where cursor is - the cursor is "inside" the token
+# window - hence it is not "inside" the dropsite window
+# so we offset X,Y by OFFSET pixels.
+sub OFFSET () {3}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Map>','Mapped');
+ $mw->bind($class,'<Any-KeyPress>','Done');
+ $mw->bind($class,'<Any-ButtonRelease>','Drop');
+ $mw->bind($class,'<Any-Motion>','Drag');
+ return $class;
+}
+
+sub Populate
+{
+ my ($token,$args) = @_;
+ my $parent = $token->parent;
+ if ($useWmRelease)
+ {
+ $token->wmRelease;
+ $token->ConfigSpecs(-text => ['SELF','text','Text',$parent->class]);
+ }
+ else
+ {
+ my $lab = $token->Label->pack(-expand => 1, -fill => 'both');
+ bless $lab,ref($token);
+ $lab->bindtags([ref($token), $lab, $token, 'all']);
+ $token->ConfigSpecs(-text => [$lab,'text','Text',$parent->class],
+ DEFAULT => [$lab]);
+ }
+ $token->withdraw;
+ $token->overrideredirect(1);
+ $token->ConfigSpecs(-sitetypes => ['METHOD','siteTypes','SiteTypes',undef],
+ -startcommand => ['CALLBACK',undef,undef,undef],
+ -endcommand => ['CALLBACK',undef,undef,undef],
+ -predropcommand => ['CALLBACK',undef,undef,undef],
+ -postdropcommand => ['CALLBACK',undef,undef,undef],
+ -delta => ['PASSIVE','delta','Delta',10],
+ -cursor => ['SELF','cursor','Cursor','hand2'],
+ -handlers => ['SETMETHOD','handlers','Handlers',[[[$token,'SendText']]]],
+ -selection => ['SETMETHOD','selection','Selection','XdndSelection'],
+ -event => ['SETMETHOD','event','Event','<B1-Motion>']
+ );
+ $token->{InstallHandlers} = 0;
+ $args->{-borderwidth} = 3;
+ $args->{-relief} = 'flat';
+ $args->{-takefocus} = 1;
+}
+
+sub sitetypes
+{
+ my ($w,$val) = @_;
+ confess "Not a widget $w" unless (ref $w);
+ my $var = \$w->{Configure}{'-sitetypes'};
+ if (@_ > 1)
+ {
+ if (defined $val)
+ {
+ $val = [$val] unless (ref $val);
+ my $type;
+ foreach $type (@$val)
+ {
+ Tk::DragDrop->import($type);
+ }
+ }
+ $$var = $val;
+ }
+ return (defined $$var) ? $$var : \@types;
+}
+
+sub SendText
+{
+ my ($w,$offset,$max) = @_;
+ my $s = substr($w->cget('-text'),$offset);
+ $s = substr($s,0,$max) if (length($s) > $max);
+ return $s;
+}
+
+sub handlers
+{
+ my ($token,$opt,$value) = @_;
+ $token->{InstallHandlers} = (defined($value) && @$value);
+ $token->{'handlers'} = $value;
+}
+
+sub selection
+{
+ my ($token,$opt,$value) = @_;
+ my $handlers = $token->{'handlers'};
+ $token->{InstallHandlers} = (defined($handlers) && @$handlers);
+}
+
+sub event
+{
+ my ($w,$opt,$value) = @_;
+ # delete old bindings
+ $w->parent->Tk::bind($value,[$w,'StartDrag']);
+}
+
+#
+
+sub FindSite
+{
+ my ($token,$X,$Y,$e) = @_;
+ my $site;
+ my $types = $token->sitetypes;
+ if (defined $types && @$types)
+ {
+ foreach my $type (@$types)
+ {
+ my $class = $type{$type};
+ last if (defined($class) && ($site = $class->FindSite($token,$X,$Y)));
+ }
+ }
+ else
+ {
+ warn 'No sitetypes';
+ }
+ my $new = $site || 'undef';
+ my $over = $token->{'Over'};
+ if ($over)
+ {
+ if (!$over->Match($site))
+ {
+ $over->Leave($token,$e);
+ delete $token->{'Over'};
+ }
+ }
+ if ($site)
+ {
+ unless ($token->{'Over'})
+ {
+ $site->Enter($token,$e);
+ $token->{'Over'} = $site;
+ }
+ $site->Motion($token,$e) if (defined $site)
+ }
+ return $site;
+}
+
+sub Mapped
+{
+ my ($token) = @_;
+ my $e = $token->parent->XEvent;
+ $token = $token->toplevel;
+ $token->grabGlobal;
+ $token->focus;
+ if (defined $e)
+ {
+ my $X = $e->X;
+ my $Y = $e->Y;
+ $token->MoveToplevelWindow($X+OFFSET,$Y+OFFSET);
+ $token->NewDrag;
+ $token->FindSite($X,$Y,$e);
+ }
+}
+
+sub NewDrag
+{
+ my ($token) = @_;
+ my $types = $token->sitetypes;
+ if (defined $types && @$types)
+ {
+ my $type;
+ foreach $type (@$types)
+ {
+ my $class = $type{$type};
+ if (defined $class)
+ {
+ $class->NewDrag($token);
+ }
+ }
+ }
+}
+
+sub Drag
+{
+ my $token = shift;
+ my $e = $token->XEvent;
+ my $X = $e->X;
+ my $Y = $e->Y;
+ $token = $token->toplevel;
+ $token->MoveToplevelWindow($X+OFFSET,$Y+OFFSET);
+ $token->FindSite($X,$Y,$e);
+}
+
+sub Done
+{
+ my $token = shift;
+ my $e = $token->XEvent;
+ $token = $token->toplevel;
+ my $over = delete $token->{'Over'};
+ $over->Leave($token,$e) if (defined $over);
+ my $w = $token->parent;
+ eval {local $SIG{__DIE__}; $token->grabRelease };
+ $token->withdraw;
+ delete $w->{'Dragging'};
+ $w->update;
+}
+
+sub AcceptDrop
+{
+ my ($token) = @_;
+ $token->configure(-relief => 'sunken');
+ $token->{'Accepted'} = 1;
+}
+
+sub RejectDrop
+{
+ my ($token) = @_;
+ $token->configure(-relief => 'flat');
+ $token->{'Accepted'} = 0;
+}
+
+sub HandleLoose
+{
+ my ($w,$seln) = @_;
+ return '';
+}
+
+sub InstallHandlers
+{
+ my ($token,$seln) = @_;
+ my $w = $token->parent;
+ $token->configure('-selection' => $seln) if $seln;
+ $seln = $token->cget('-selection');
+ if ($token->{InstallHandlers})
+ {
+ foreach my $h (@{$token->cget('-handlers')})
+ {
+ $w->SelectionHandle('-selection' => $seln,@$h);
+ }
+ $token->{InstallHandlers} = 0;
+ }
+ if (!$w->IS($w->SelectionOwner('-selection'=>$seln)))
+ {
+ $w->SelectionOwn('-selection' => $seln, -command => [\&HandleLoose,$w,$seln]);
+ }
+}
+
+sub Drop
+{
+ my $ewin = shift;
+ my $e = $ewin->XEvent;
+ my $token = $ewin->toplevel;
+ my $site = $token->FindSite($e->X,$e->Y,$e);
+ Tk::catch { $token->grabRelease };
+ if (defined $site)
+ {
+ my $seln = $token->cget('-selection');
+ unless ($token->Callback(-predropcommand => $seln, $site))
+ {
+# XXX This is ugly if the user restarts a drag within the 2000 ms:
+# my $id = $token->after(2000,[$token,'Done']);
+ my $w = $token->parent;
+ $token->InstallHandlers;
+ $site->Drop($token,$seln,$e);
+ $token->Callback(-postdropcommand => $seln);
+ $token->Done;
+ }
+ }
+ else
+ {
+ $token->Done;
+ }
+ $token->Callback('-endcommand');
+}
+
+sub StartDrag
+{
+ my $token = shift;
+ my $w = $token->parent;
+ unless ($w->{'Dragging'})
+ {
+ my $e = $w->XEvent;
+ my $X = $e->X;
+ my $Y = $e->Y;
+ my $was = $token->{'XY'};
+ if ($was)
+ {
+ my $dx = $was->[0] - $X;
+ my $dy = $was->[1] - $Y;
+ if (sqrt($dx*$dx+$dy*$dy) > $token->cget('-delta'))
+ {
+ unless ($token->Callback('-startcommand',$token,$e))
+ {
+ delete $token->{'XY'};
+ $w->{'Dragging'} = $token;
+ $token->MoveToplevelWindow($X+OFFSET,$Y+OFFSET);
+ $token->raise;
+ $token->deiconify;
+ $token->FindSite($X,$Y,$e);
+ }
+ }
+ }
+ else
+ {
+ $token->{'XY'} = [$X,$Y];
+ }
+ }
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm
new file mode 100644
index 00000000000..2f7a33d4fb4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Common.pm
@@ -0,0 +1,59 @@
+package Tk::DragDrop::Common;
+
+use strict;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/DragDrop/DragDrop/Common.pm#4 $
+
+sub Type
+{
+ my ($base,$name,$class) = @_;
+ no strict 'refs';
+ my $hash = \%{"${base}::type"};
+ my $array = \@{"${base}::types"};
+ unless (exists $hash->{$name})
+ {
+ push(@$array,$name);
+ $class = (caller(0))[0] unless (@_ > 2);
+ $hash->{$name} = $class;
+ # confess "Strange class $class for $base/$name" unless ($class =~ /^Tk/);
+ # print "$base $name is ",$class,"\n";
+ }
+}
+
+sub import
+{
+ my $class = shift;
+ no strict 'refs';
+ my $types = \%{"${class}::type"};
+ while (@_)
+ {
+ my $type = shift;
+ unless (exists $types->{$type})
+ {
+ if ($type eq 'Local')
+ {
+ $class->Type($type,$class);
+ }
+ else
+ {
+ my ($kind) = $class =~ /([A-Z][a-z]+)$/;
+ my $file = Tk->findINC("DragDrop/${type}${kind}.pm");
+ if (defined $file)
+ {
+ # print "Loading $file\n";
+ require $file;
+ }
+ else
+ {
+ croak "Cannot find ${type}${kind}";
+ }
+ }
+ }
+ }
+}
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm
new file mode 100644
index 00000000000..0f5028ae64c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/LocalDrop.pm
@@ -0,0 +1,61 @@
+package Tk::DragDrop::Local;
+use strict;
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/DragDrop/DragDrop/LocalDrop.pm#4 $
+
+use base qw(Tk::DragDrop::Rect);
+require Tk::DragDrop;
+
+my @toplevels;
+
+Tk::DragDrop->Type('Local');
+
+sub XY
+{
+ my ($site,$event) = @_;
+ return ($event->X - $site->X,$event->Y - $site->Y);
+}
+
+sub Apply
+{
+ my $site = shift;
+ my $name = shift;
+ my $cb = $site->{$name};
+ if ($cb)
+ {
+ my $event = shift;
+ $cb->Call(@_,$site->XY($event));
+ }
+}
+
+sub Drop
+{
+ my ($site,$token,$seln,$event) = @_;
+ $site->Apply(-dropcommand => $event, $seln);
+ $site->Apply(-entercommand => $event, 0);
+ $token->Done;
+}
+
+sub Enter
+{
+ my ($site,$token,$event) = @_;
+ $token->AcceptDrop;
+ $site->Apply(-entercommand => $event, 1);
+}
+
+sub Leave
+{
+ my ($site,$token,$event) = @_;
+ $token->RejectDrop;
+ $site->Apply(-entercommand => $event, 0);
+}
+
+sub Motion
+{
+ my ($site,$token,$event) = @_;
+ $site->Apply(-motioncommand => $event);
+}
+
+1;
+
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm
new file mode 100644
index 00000000000..04cfa8772f2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Rect.pm
@@ -0,0 +1,110 @@
+package Tk::DragDrop::Rect;
+use strict;
+use Carp;
+
+# Proxy class which represents sites to the dropping side
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #11 $ =~ /\D(\d+)\s*$/;
+
+# Some default methods when called site side
+# XIDs and viewable-ness from widget
+
+# XID of ancestor
+sub ancestor { ${shift->widget->toplevel->WindowId} }
+
+# XID of site window
+sub win { ${shift->widget->WindowId} }
+
+# Is site window mapped
+sub viewable { shift->widget->viewable }
+
+sub Over
+{
+ my ($site,$X,$Y) = @_;
+
+ my $x = $site->X;
+ my $y = $site->Y;
+ my $w = $site->width;
+ my $h = $site->height;
+ my $val = ($X >= $x && $X < ($x + $w) && $Y >= $y && $Y < ($y + $h));
+
+ return 0 unless $val;
+
+ my $widget = $site->widget;
+
+ # Now XTranslateCoords from root window to site window's
+ # ancestor. Ancestors final descendant should be the site window.
+ # Like $win->containing but avoids a problem that dropper's "token"
+ # window may be the toplevel (child of root) that contains X,Y
+ # so if that is in another application ->containing does not
+ # give us a window.
+ my $id = $site->ancestor;
+ while (1)
+ {
+ my $cid = $widget->PointToWindow($X,$Y,$id);
+ last unless $cid;
+ $id = $cid;
+ }
+ return ($id == $site->win);
+}
+
+sub FindSite
+{
+ my ($class,$widget,$X,$Y) = @_;
+ foreach my $site ($class->SiteList($widget))
+ {
+ return $site if ($site->viewable && $site->Over($X,$Y));
+ }
+ return undef;
+}
+
+sub NewDrag
+{
+ my ($class,$widget) = @_;
+}
+
+sub Match
+{
+ my ($site,$other) = @_;
+ return 0 unless (defined $other);
+ return 1 if ($site == $other);
+ return 0 unless (ref($site) eq ref($other));
+ for ("$site")
+ {
+ if (/ARRAY/)
+ {
+ my $i;
+ return 0 unless (@$site == @$other);
+ for ($i = 0; $i < @$site; $i++)
+ {
+ return 0 unless ($site->[$i] == $other->[$i]);
+ }
+ return 1;
+ }
+ elsif (/SCALAR/)
+ {
+ return $site == $other;
+ }
+ elsif (/HASH/)
+ {
+ my $key;
+ foreach $key (keys %$site)
+ {
+ return 0 unless exists $other->{$key};
+ return 0 unless ($other->{$key} eq $site->{$key});
+ }
+ foreach $key (keys %$other)
+ {
+ return 0 unless exists $site->{$key};
+ return 0 unless ($other->{$key} eq $site->{$key});
+ }
+ return 1;
+ }
+ return 0;
+ }
+ return 0;
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm
new file mode 100644
index 00000000000..66325466e68
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunConst.pm
@@ -0,0 +1,34 @@
+package Tk::DragDrop::SunConst;
+require Exporter;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/DragDrop/DragDrop/SunConst.pm#4 $
+
+use base qw(Exporter);
+
+@EXPORT = qw(_enter _leave _motion
+ ENTERLEAVE MOTION DEFAULT_SITE
+ MOVE_FLAG ACK_FLAG TRANSIENT_FLAG FORWARDED_FLAG
+ );
+
+# Event types
+sub _enter () {7};
+sub _leave () {8};
+sub _motion () {6};
+
+# Site flags
+
+sub ENTERLEAVE () {1<<0}
+sub MOTION () {1<<1}
+sub DEFAULT_SITE () {1<<2}
+
+# Trigger flags
+sub MOVE_FLAG () {1<<0}
+sub ACK_FLAG () {1<<1}
+sub TRANSIENT_FLAG () {1<<2}
+sub FORWARDED_FLAG () {1<<3}
+
+1;
+
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm
new file mode 100644
index 00000000000..422a08196ea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunDrop.pm
@@ -0,0 +1,200 @@
+package Tk::DragDrop::SunDrop;
+require Tk::DragDrop::Rect;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #5 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::DragDrop::Rect);
+use strict;
+use Tk::DragDrop::SunConst;
+
+Tk::DragDrop->Type('Sun');
+
+BEGIN
+ {
+ # Define the Rect API as members of the array
+ my @fields = qw(name win X Y width height flags ancestor widget);
+ my $i = 0;
+ no strict 'refs';
+ for ($i=0; $i < @fields; $i++)
+ {
+ my $j = $i;
+ *{"$fields[$i]"} = sub { shift->[$j] };
+ }
+ }
+
+
+sub Preview
+{
+ my ($site,$token,$e,$kind,$flags) = (@_);
+ $token->BackTrace('No flags') unless defined $flags;
+ my $sflags = $site->flags;
+ return if ($kind == _motion && !($sflags & MOTION));
+ return if ($kind != _motion && !($sflags & ENTERLEAVE));
+ my $data = pack('LLSSLL',$kind,$e->t,$e->X,$e->Y,$site->name,$flags);
+ $token->SendClientMessage('_SUN_DRAGDROP_PREVIEW',$site->win,32,$data);
+}
+
+sub Enter
+{
+ my ($site,$token,$e) = @_;
+ $token->AcceptDrop;
+ $site->Preview($token,$e,_enter,0);
+}
+
+sub Leave
+{
+ my ($site,$token,$e) = @_;
+ $token->RejectDrop;
+ $site->Preview($token,$e,_leave,0);
+}
+
+sub Motion
+{
+ my ($site,$token,$e) = @_;
+ $site->Preview($token,$e,_motion,0);
+}
+
+sub HandleDone
+{
+ my ($token,$seln,$offset,$max) = @_;
+ $token->Done;
+ return '';
+}
+
+sub HandleAck
+{
+ my ($w,$seln,$offset,$max) = @_;
+ return '';
+}
+
+sub HandleItem
+{
+ my ($w,$seln,$offset,$max) = @_;
+ return undef;
+}
+
+sub HandleCount
+{
+ my ($w,$seln,$offset,$max) = @_;
+ return 1;
+}
+
+sub Drop
+{
+ my ($site,$token,$seln,$e) = @_;
+ my $w = $token->parent;
+ $w->SelectionHandle('-selection'=>$seln,'-type'=>'_SUN_DRAGDROP_ACK',[\&HandleAck,$token,$seln]);
+ $w->SelectionHandle('-selection'=>$seln,'-type'=>'_SUN_DRAGDROP_DONE',[\&HandleDone,$token,$seln]);
+ my $atom = $w->InternAtom($seln);
+ my $flags = ACK_FLAG | TRANSIENT_FLAG;
+ my $data = pack('LLSSLL',$atom,$e->t,$e->X,$e->Y,$site->name,$flags);
+ $w->SendClientMessage('_SUN_DRAGDROP_TRIGGER',$site->win,32,$data);
+}
+
+sub FindSite
+{
+ my ($class,$token,$X,$Y) = @_;
+ $token->{'SunDD'} = [] unless exists $token->{'SunDD'};
+ my $site = $class->SUPER::FindSite($token,$X,$Y);
+ if (!defined $site)
+ {
+ my $id = $token->PointToWindow($X,$Y);
+ while ($id)
+ {
+ my @prop;
+ Tk::catch { @prop = $token->property('get','_SUN_DRAGDROP_INTEREST', $id) };
+ if (!$@ && shift(@prop) eq '_SUN_DRAGDROP_INTEREST' && shift(@prop) == 0)
+ {
+ # This is a "toplevel" which has some sites associated with it.
+ my ($bx,$by) = $token->WindowXY($id);
+ $token->{'SunDDSeen'} = {} unless exists $token->{'SunDDSeen'};
+ return $site if $token->{'SunDDSeen'}{$id};
+ $token->{'SunDDSeen'}{$id} = 1;
+ my $sites = $token->{'SunDD'};
+ my $count = shift(@prop);
+ while (@prop && $count-- > 0)
+ {
+ my ($xid,$sn,$flags,$kind,$n) = splice(@prop,0,5);
+ if ($kind != 0)
+ {
+ warn "Don't understand site type $kind";
+ last;
+ }
+ while (@prop >= 4 && $n-- > 0)
+ {
+ my ($x,$y,$w,$h) = splice(@prop,0,4);
+ push(@$sites,bless [$sn,$xid,$x+$bx,$y+$by,$w,$h,$flags,$id,$token],$class);
+ }
+ }
+ return $class->SUPER::FindSite($token,$X,$Y);
+ }
+ $id = $token->PointToWindow($X,$Y,$id)
+ }
+ }
+ return $site;
+}
+
+my $busy = 0;
+
+sub NewDrag
+{
+ my ($class,$token) = @_;
+ delete $token->{'SunDD'} unless $busy;
+ delete $token->{'SunDDSeen'};
+}
+
+sub SiteList
+{
+ my ($class,$token) = @_;
+ return @{$token->{'SunDD'}};
+}
+
+1;
+__END__
+
+# this code is obsolete now that we look at properties ourselves
+# which means we don't need dropsite manager running
+# On Sun's running OpenLook the window manager or dropsite mananger
+# watches for and caches site info in a special selection
+# This code got sites from that
+#
+
+sub SiteList
+{
+ my ($class,$token) = @_;
+ unless (1 || $busy || exists $token->{'SunDD'})
+ {
+ Carp::confess('Already doing it!') if ($busy++);
+ my @data = ();
+ my @sites = ();
+ my $mw = $token->MainWindow;
+ $token->{'SunDD'} = \@sites;
+ Tk::catch {
+ @data = $mw->SelectionGet( '-selection'=>'_SUN_DRAGDROP_DSDM', '_SUN_DRAGDROP_SITE_RECTS');
+ };
+ if ($@)
+ {
+ $token->configure('-cursor'=>'hand2');
+ $token->grab(-global);
+ }
+ else
+ {
+ while (@data)
+ {
+ my $version = shift(@data);
+ if ($version != 0)
+ {
+ warn "Unexpected site version $version";
+ last;
+ }
+ push(@sites,bless [splice(@data,0,7)],$class);
+ }
+ }
+ $busy--;
+ }
+ return @{$token->{'SunDD'}};
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm
new file mode 100644
index 00000000000..ab3f4f9793b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/SunSite.pm
@@ -0,0 +1,107 @@
+package Tk::DragDrop::SunSite;
+require Tk::DropSite;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #6 $ =~ /\D(\d+)\s*$/;
+
+use Tk::DragDrop::SunConst;
+use base qw(Tk::DropSite);
+use strict;
+
+Tk::DropSite->Type('Sun');
+
+sub SunDrop
+{
+ my ($w,$site) = @_;
+ my $e = $w->XEvent;
+ my ($seln,$t,$x,$y,$id,$flags) = unpack('LLSSLL',$e->A);
+ $w->MakeAtom($seln);
+ if ($flags & &ACK_FLAG)
+ {
+ Tk::catch { $w->SelectionGet('-selection'=>$seln,'_SUN_DRAGDROP_ACK') };
+ }
+ my @targ = $w->SelectionGet(-selection => $seln,'TARGETS');
+ $site->Apply(-dropcommand => $x, $y, $seln, SunDrop => \@targ);
+ if ($flags & &TRANSIENT_FLAG)
+ {
+ Tk::catch { $w->SelectionGet('-selection'=>$seln,'_SUN_DRAGDROP_DONE') };
+ }
+ $w->configure('-relief' => $w->{'_DND_RELIEF_'}) if (defined $w->{'_DND_RELIEF_'});
+ $site->Apply(-entercommand => $x, $y, 0);
+}
+
+sub SunPreview
+{
+ my ($w,$site) = @_;
+ my $event = $w->XEvent;
+ my ($kind,$t,$x,$y,$id,$flags) = unpack('LLSSLL',$event->A);
+ $x -= $site->X;
+ $y -= $site->Y;
+ if ($kind == _enter)
+ {
+ $site->Callback(-entercommand => 1, $x, $y);
+ }
+ elsif ($kind == _leave)
+ {
+ $site->Callback(-entercommand => 0, $x, $y);
+ }
+ elsif ($kind == _motion)
+ {
+ $site->Callback(-motioncommand => $x, $y);
+ }
+}
+
+sub InitSite
+{
+ my ($class,$site) = @_;
+ my $w = $site->widget;
+ $w->BindClientMessage('_SUN_DRAGDROP_TRIGGER',[\&SunDrop,$site]);
+ $w->BindClientMessage('_SUN_DRAGDROP_PREVIEW',[\&SunPreview,$site]);
+}
+
+sub NoteSites
+{
+ my ($class,$t,$sites) = @_;
+ my $count = @$sites;
+ my @data = (0,0);
+ my ($wrapper,$offset) = $t->wrapper;
+ if ($t->viewable)
+ {
+ my $s;
+ my $i = 0;
+ my @win;
+ my $bx = $t->rootx;
+ my $by = $t->rooty - $offset;
+ $t->MakeWindowExist;
+ foreach $s (@$sites)
+ {
+ my $w = $s->widget;
+ if ($w->viewable)
+ {
+ $w->MakeWindowExist;
+ $data[1]++;
+ push(@data,${$w->WindowId}); # XID
+ push(@data,$i++); # Our 'tag'
+ push(@data,ENTERLEAVE|MOTION); # Flags
+ push(@data,0); # Kind is 'rect'
+ push(@data,1); # Number of rects
+ push(@data,$s->X-$bx,$s->Y-$by,$s->width,$s->height); # The rect
+ }
+ }
+ }
+ if ($data[1])
+ {
+ $t->property('set',
+ '_SUN_DRAGDROP_INTEREST', # name
+ '_SUN_DRAGDROP_INTEREST', # type
+ 32, # format
+ \@data,$wrapper); # the data
+ }
+ else
+ {
+ $t->property('delete','_SUN_DRAGDROP_INTEREST',$wrapper);
+ }
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm
new file mode 100644
index 00000000000..08a4656ecce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Drop.pm
@@ -0,0 +1,8 @@
+package Tk::DragDrop::Win32Drop;
+# Dummy placeholder for symetry
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/DragDrop/Win32Site/Win32Drop.pm#4 $
+
+use Tk ();
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm
new file mode 100644
index 00000000000..f45d06bc92b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/Win32Site.pm
@@ -0,0 +1,50 @@
+package Tk::DragDrop::Win32Site;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw($XS_VERSION);
+require DynaLoader;
+require Tk::DropSite;
+
+use base qw(Tk::DropSite DynaLoader);
+
+bootstrap Tk::DragDrop::Win32Site;
+
+use strict;
+
+Tk::DropSite->Type('Win32');
+
+sub WM_DROPFILES () {563}
+
+sub InitSite
+{
+ my ($class,$site) = @_;
+ my $w = $site->widget;
+ $w->BindClientMessage(WM_DROPFILES,[\&Win32Drop,$site]);
+ DragAcceptFiles($w,1);
+}
+
+sub Win32Drop
+{
+ # print join(',',@_),"\n";
+ my ($w,$site,$msg,$wParam,$lParam) = @_;
+ my ($x,$y,@files) = DropInfo($wParam);
+ my $cb = $site->{'-dropcommand'};
+ $site->Apply(-entercommand => $x, $y, 1);
+ if ($cb)
+ {
+ foreach my $file (@files)
+ {
+ # print "$file @ $x,$y\n";
+ $w->clipboardClear;
+ $w->clipboardAppend('--',$file);
+ $cb->Call('CLIPBOARD',Win32Drop => ['STRING'],$x,$y);
+ }
+ }
+ $site->Apply(-entercommand => $x, $y, 0);
+ return 0;
+}
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm
new file mode 100644
index 00000000000..7376c8d69c5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDDrop.pm
@@ -0,0 +1,145 @@
+package Tk::DragDrop::XDNDDrop;
+use strict;
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #6 $ =~ /\D(\d+)\s*$/;
+use base qw(Tk::DragDrop::Rect);
+
+sub XDND_PROTOCOL_VERSION () { 4 }
+
+Tk::DragDrop->Type('XDND');
+
+sub NewDrag
+{
+ my ($class,$token) = @_;
+ $token->{$class} = {};
+}
+
+sub new
+{
+ my ($class,$token,$id,@prop) = @_;
+ my $ver = $token->InternAtom(shift(@prop));
+ # warn "XDND version $ver ".join(' ',@prop)."\n";
+ $ver = XDND_PROTOCOL_VERSION if $ver > XDND_PROTOCOL_VERSION;
+ my $site = bless { id => $id, token => $token, ver => $ver, state => 0, accept => \@prop}, $class;
+ my $w = $token->parent;
+ $w->BindClientMessage('XdndStatus',[$site => 'XdndStatus']);
+ $w->BindClientMessage('XdndFinished',[$site => 'XdndFinished']);
+ return $site;
+}
+
+sub Drop
+{
+ my ($site,$token,$seln,$e) = @_;
+ my $w = $token->parent;
+ my $data = pack('LLLLL',oct($w->id),0,$e->t,0,0);
+ $w->SendClientMessage('XdndDrop',$site->{id},32,$data);
+}
+
+sub FindSite
+{
+ my ($class,$token,$X,$Y) = @_;
+ my $id = $token->PointToWindow($X,$Y);
+ while ($id)
+ {
+ my @prop;
+ Tk::catch { @prop = $token->property('get','XdndAware', $id) };
+ if (!$@ && shift(@prop) eq 'ATOM')
+ {
+ my $hash = $token->{$class};
+ my $site = $hash->{$id};
+ if (!defined $site)
+ {
+ $site = $class->new($token,$id,@prop);
+ $hash->{$id} = $site;
+ }
+ return $site;
+ }
+ $id = $token->PointToWindow($X,$Y,$id)
+ }
+ return undef;
+}
+
+sub Enter
+{
+ my ($site,$token,$e) = @_;
+ my $w = $token->parent;
+ $token->InstallHandlers('XdndSelection');
+ my $seln = $token->cget('-selection');
+ my @targets = grep(!/^(TARGETS|MULTIPLE|TIMESTAMP)$/,reverse($token->SelectionGet('-selection'=> 'XdndSelection','TARGETS')));
+ # print join(' ',@targets),"\n";
+ my $flags = ($site->{ver} << 24);
+ my @atarg = map($token->InternAtom($_),@targets);
+ my $ntarg = @atarg;
+ if ($ntarg > 3)
+ {
+ $flags |= 1;
+ $w->property('set','XdndTypeList','ATOM',32,\@atarg);
+ splice(@atarg,3);
+ }
+ else
+ {
+ splice(@atarg,$ntarg,(0 x 3 - $ntarg));
+ }
+ unshift(@atarg,oct($w->id),$flags);
+ # print join(' ',map(sprintf("%08X",$_),@atarg)),"\n";
+ my $data = pack('LLLLL',@atarg);
+ $w->SendClientMessage('XdndEnter',$site->{id},32,$data);
+}
+
+sub Leave
+{
+ my ($site,$token,$e) = @_;
+ my $w = $token->parent;
+ my $data = pack('LLLLL',oct($w->id), 0, 0, 0, 0);
+ $w->SendClientMessage('XdndLeave',$site->{id},32,$data);
+}
+
+sub Motion
+{
+ my ($site,$token,$e) = @_;
+ my $X = $e->X;
+ my $Y = $e->Y;
+ my $w = $token->parent;
+ my $action = $token->InternAtom($site->{'action'} || 'XdndActionCopy');
+ my @atarg = (oct($w->id),0,($X << 16) | $Y, $e->t, $action);
+ # print join(' ',map(sprintf("%08X",$_),@atarg)),"\n";
+ my $data = pack('LLLLL',@atarg);
+ $w->SendClientMessage('XdndPosition',$site->{id},32,$data);
+}
+
+sub XdndFinished
+{
+ my ($site) = @_;
+ my $token = $site->{token};
+ # printf "XdndFinished $site\n",
+ $token->Done;
+}
+
+sub XdndStatus
+{
+ my ($site) = @_;
+ my $token = $site->{token};
+ my $w = $token->parent;
+ my $event = $w->XEvent;
+ my ($tid,$flags,$xy,$wh,$action) = unpack('LLLLL',$event->A);
+ $action = $w->GetAtomName($action) if $action;
+ $site->{flags} = $flags;
+ $site->{'X'} = $xy >> 16;
+ $site->{'Y'} = $xy & 0xFFFF;
+ $site->{'width'} = $wh >> 16;
+ $site->{'height'} = $wh & 0xFFFF;
+ #printf "XdndStatus $site targ=%x flags=%08X x=%d y=%d w=%d h=%d a=%s\n",
+ # $tid,$flags,$xy >> 16, $xy & 0xFFFF, $wh >> 16, $wh & 0xFFFF,$action;
+ if ($flags & 1)
+ {
+ $token->AcceptDrop;
+ }
+ else
+ {
+ $token->RejectDrop;
+ }
+}
+
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm b/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm
new file mode 100644
index 00000000000..4ac75d63c40
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DragDrop/XDNDSite.pm
@@ -0,0 +1,159 @@
+package Tk::DragDrop::XDNDSite;
+use strict;
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #6 $ =~ /\D(\d+)\s*$/;
+use base qw(Tk::DropSite);
+
+sub XDND_PROTOCOL_VERSION () { 4 }
+
+Tk::DropSite->Type('XDND');
+
+sub InitSite
+{my ($class,$site) = @_;
+ my $w = $site->widget;
+}
+
+sub XdndEnter
+{
+ my ($t,$sites) = @_;
+ my $event = $t->XEvent;
+ my ($src,$flags,@types) = unpack('LLLLL',$event->A);
+ my $ver = ($flags >> 24) & 0xFF;
+ if ($flags & 1)
+ {
+ my @prop;
+ Tk::catch { @prop = $t->property('get','XdndTypeList',$src) };
+ @types = @prop if (!$@ && shift(@prop) eq 'ATOM');
+ }
+ else
+ {
+ $t->MakeAtom(@types);
+ }
+ # print "XdndEnter $src $ver @types\n";
+ $t->{"XDND$src"} = { ver => $ver, types => \@types };
+}
+
+sub XdndLeave
+{
+ my ($t,$sites) = @_;
+ my $event = $t->XEvent;
+ my ($src,$flags,@types) = unpack('LLLLL',$event->A);
+ # print "XdndLeave $src\n";
+ my $info = $t->{"XDND$src"};
+ if ($info)
+ {
+ my $over = $info->{site};
+ if ($over)
+ {
+ my $X = $info->{X};
+ my $Y = $info->{Y};
+ $over->Apply(-entercommand => $X, $Y, 0)
+ }
+ }
+ delete $t->{"XDND$src"};
+}
+
+sub XdndPosition
+{
+ my ($t,$sites) = @_;
+ my $event = $t->XEvent;
+ my ($src,$flags,$xy,$time,$action) = unpack('LLLLL',$event->A);
+ $t->MakeAtom($action);
+ my $X = $xy >> 16;
+ my $Y = $xy & 0xFFFF;
+ my $info = $t->{"XDND$src"};
+ $info->{X} = $X;
+ $info->{Y} = $Y;
+ $info->{action} = $action;
+ $info->{t} = $time;
+ my ($id) = $t->wrapper;
+ my $sxy = 0;
+ my $swh = 0;
+ my $sflags = 0;
+ my $saction = 0;
+ my $over = $info->{site};
+ foreach my $site (@$sites)
+ {
+ if ($site->Over($X,$Y))
+ {
+ $sxy = ($site->X << 16) | $site->Y;
+ $swh = ($site->width << 16) | $site->height;
+ $saction = $action;
+ $sflags |= 1;
+ if ($over)
+ {
+ if ($over == $site)
+ {
+ $site->Apply(-motioncommand => $X, $Y);
+ }
+ else
+ {
+ $over->Apply(-entercommand => $X, $Y, 0);
+ $site->Apply(-entercommand => $X, $Y, 1);
+ }
+ }
+ else
+ {
+ $site->Apply(-entercommand => $X, $Y, 1);
+ }
+ $info->{site} = $site;
+ last;
+ }
+ }
+ unless ($sflags & 1)
+ {
+ if ($over)
+ {
+ $over->Apply(-entercommand => $X, $Y, 0)
+ }
+ delete $info->{site};
+ }
+ my $data = pack('LLLLL',$id,$sflags,$sxy,$swh,$action);
+ $t->SendClientMessage('XdndStatus',$src,32,$data);
+}
+
+sub XdndDrop
+{
+ my ($t,$sites) = @_;
+ my $event = $t->XEvent;
+ my ($src,$flags,$time,$res1,$res2) = unpack('LLLLL',$event->A);
+ my $info = $t->{"XDND$src"};
+ my $sflags = 0;
+ my $action = 0;
+ if ($info)
+ {
+ $info->{t} = $time;
+ my $site = $info->{'site'};
+ if ($site)
+ {
+ my $X = $info->{'X'};
+ my $Y = $info->{'Y'};
+ $action = $info->{action};
+ $site->Apply(-dropcommand => $X, $Y, 'XdndSelection',$action,$info->{types});
+ $site->Apply(-entercommand => $X, $Y, 0);
+ }
+ }
+ my ($id) = $t->wrapper;
+ my $data = pack('LLLLL',$id,$sflags,$action,0,0);
+ $t->SendClientMessage('XdndFinished',$src,32,$data);
+}
+
+sub NoteSites
+{my ($class,$t,$sites) = @_;
+ my ($wrapper) = $t->wrapper;
+ if (@$sites)
+ {
+ $t->BindClientMessage('XdndLeave',[\&XdndLeave,$sites]);
+ $t->BindClientMessage('XdndEnter',[\&XdndEnter,$sites]);
+ $t->BindClientMessage('XdndPosition',[\&XdndPosition,$sites]);
+ $t->BindClientMessage('XdndDrop',[\&XdndDrop,$sites]);
+ $t->property('set','XdndAware','ATOM',32,[XDND_PROTOCOL_VERSION],$wrapper);
+ }
+ else
+ {
+ $t->property('delete','XdndAware',$wrapper);
+ }
+}
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/DropSite.pm b/Master/tlpkg/tlperl/lib/Tk/DropSite.pm
new file mode 100644
index 00000000000..3519c108384
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DropSite.pm
@@ -0,0 +1,257 @@
+package Tk::DropSite;
+require Tk::DragDrop::Common;
+require Tk::DragDrop::Rect;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #7 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::DragDrop::Common Tk::DragDrop::Rect);
+
+Construct Tk::Widget 'DropSite';
+
+use strict;
+use vars qw(%type @types);
+
+Tk::DragDrop->Tk::DragDrop::Common::Type('Local');
+
+my @toplevels;
+
+BEGIN
+{
+ # Are these really methods of Tk::DragDrop::Rect ?
+ no strict 'refs';
+ foreach my $name (qw(x y X Y width height widget))
+ {
+ my $key = $name;
+ *{"$key"} = sub { shift->{$key} };
+ }
+}
+
+# Dropping side API - really only here for Local drops
+# inheritance is a mess right now.
+
+sub NewDrag
+{
+ my ($class,$token) = @_;
+ # No need to clear cached sites we see live data
+}
+
+sub SiteList
+{
+ # this should be inheritable - so that receive side of XDND can re-use it.
+ my ($class,$widget) = @_;
+ my $t;
+ my @list;
+ foreach $t (@toplevels)
+ {
+ my $sites = $t->{'DropSites'};
+ if ($sites)
+ {
+ $sites = $sites->{'Local'};
+ push(@list,@{$sites}) if ($sites);
+ }
+ }
+ return @list;
+}
+
+sub Apply
+{
+ my $site = shift;
+ my $name = shift;
+ my $cb = $site->{$name};
+ if ($cb)
+ {
+ my $X = shift;
+ my $Y = shift;
+ $cb->Call(@_,$X - $site->X, $Y - $site->Y);
+ }
+}
+
+sub Drop
+{
+ my ($site,$token,$seln,$event) = @_;
+ my $X = $event->X;
+ my $Y = $event->Y;
+ my @targ = $token->SelectionGet(-selection => $seln,'TARGETS');
+ $site->Apply(-dropcommand => $X, $Y, $seln,'LocalDrop',\@targ);
+ $site->Apply(-entercommand => $X, $Y, 0);
+ $token->Done;
+}
+
+sub Enter
+{
+ my ($site,$token,$event) = @_;
+ $token->AcceptDrop;
+ $site->Apply(-entercommand => $event->X, $event->Y, 1);
+}
+
+sub Leave
+{
+ my ($site,$token,$event) = @_;
+ $token->RejectDrop;
+ $site->Apply(-entercommand => $event->X, $event->Y, 0);
+}
+
+sub Motion
+{
+ my ($site,$token,$event) = @_;
+ $site->Apply(-motioncommand => $event->X, $event->Y);
+}
+
+# This is receive side API.
+
+sub NoteSites
+{
+ my ($class,$t,$sites) = @_;
+ unless (grep($_ == $t,@toplevels))
+ {
+ $Tk::DragDrop::types{'Local'} = $class if (@$sites);
+ push(@toplevels,$t);
+ $t->OnDestroy(sub { @toplevels = grep($_ != $t,@toplevels) });
+ }
+}
+
+sub UpdateDropSites
+{
+ my ($t) = @_;
+ $t->{'DropUpdate'} = 0;
+ foreach my $type (@types)
+ {
+ my $sites = $t->{'DropSites'}->{$type};
+ if ($sites && @$sites)
+ {
+ my $class = $type{$type};
+ $class->NoteSites($t,$sites);
+ }
+ }
+}
+
+sub QueueDropSiteUpdate
+{
+ my $obj = shift;
+ my $class = ref($obj);
+ my $t = $obj->widget->toplevel;
+ unless ($t->{'DropUpdate'})
+ {
+ $t->{'DropUpdate'} = 1;
+ $t->afterIdle(sub { UpdateDropSites($t) });
+ }
+}
+
+sub delete
+{
+ my ($obj) = @_;
+ my $w = $obj->widget;
+ $w->bindtags([grep($_ ne $obj,$w->bindtags)]);
+ my $t = $w->toplevel;
+ foreach my $type (@{$obj->{'-droptypes'}})
+ {
+ my $a = $t->{'DropSites'}->{$type};
+ @$a = grep($_ ne $obj,@$a);
+ }
+ $obj->QueueDropSiteUpdate;
+}
+
+sub DropSiteUpdate
+{
+ # Note size of widget and arrange to update properties etc.
+ my $obj = shift;
+ my $w = $obj->widget;
+ $obj->{'x'} = $w->X;
+ $obj->{'y'} = $w->Y;
+ $obj->{'X'} = $w->rootx;
+ $obj->{'Y'} = $w->rooty;
+ $obj->{'width'} = $w->Width;
+ $obj->{'height'} = $w->Height;
+ $obj->QueueDropSiteUpdate;
+}
+
+sub TopSiteUpdate
+{
+ my ($t) = @_;
+ foreach my $type (@types)
+ {
+ my $sites = $t->{'DropSites'}->{$type};
+ if ($sites && @$sites)
+ {
+ my $site;
+ foreach $site (@$sites)
+ {
+ $site->DropSiteUpdate;
+ }
+ }
+ }
+}
+
+sub Callback
+{
+ my $obj = shift;
+ my $key = shift;
+ my $cb = $obj->{$key};
+ $cb->Call(@_) if (defined $cb);
+}
+
+sub InitSite
+{
+ my ($class,$site) = @_;
+ # Tk::DragDrop->Type('Local');
+}
+
+sub new
+{
+ my ($class,$w,%args) = @_;
+ my $t = $w->toplevel;
+ $args{'widget'} = $w;
+ if (exists $args{'-droptypes'})
+ {
+ # Convert single type to array-of-one
+ $args{'-droptypes'} = [$args{'-droptypes'}] unless (ref $args{'-droptypes'});
+ }
+ else
+ {
+ # Default to all known types.
+ $args{'-droptypes'} = \@types;
+ }
+ my ($key,$val);
+ while (($key,$val) = each %args)
+ {
+ if ($key =~ /command$/)
+ {
+ $val = Tk::Callback->new($val);
+ $args{$key} = $val;
+ }
+ }
+ my $obj = bless \%args,$class;
+ unless (exists $t->{'DropSites'})
+ {
+ $t->{'DropSites'} = {};
+ $t->{'DropUpdate'} = 0;
+ }
+ my $type;
+ foreach $type (@{$args{'-droptypes'}})
+ {
+ Tk::DropSite->import($type) unless (exists $type{$type});
+ my $class = $type{$type};
+ $class->InitSite($obj);
+ # Should this be indexed by type or class ?
+ unless (exists $t->{'DropSites'}->{$type})
+ {
+ $t->{'DropSites'}->{$type} = [];
+ }
+ push(@{$t->{'DropSites'}->{$type}},$obj);
+ }
+ $w->OnDestroy([$obj,'delete']);
+ $obj->DropSiteUpdate;
+ $w->bindtags([$w->bindtags,$obj]);
+ $w->Tk::bind($obj,'<Map>',[$obj,'DropSiteUpdate']);
+ $w->Tk::bind($obj,'<Unmap>',[$obj,'DropSiteUpdate']);
+ $w->Tk::bind($obj,'<Configure>',[$obj,'DropSiteUpdate']);
+ $t->Tk::bind($class,'<Configure>',[\&TopSiteUpdate,$t]);
+ unless (grep($_ eq $class,$t->bindtags))
+ {
+ $t->bindtags([$t->bindtags,$class]);
+ }
+ return $obj;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm b/Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm
new file mode 100644
index 00000000000..5ead808405d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/DummyEncode.pm
@@ -0,0 +1,46 @@
+package Tk::DummyEncode;
+
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/DummyEncode.pm#7 $
+
+sub getEncoding
+{
+ my ($class,$name) = @_;
+ return undef unless ($name =~ /(iso8859-1|X11ControlChars)/);
+ my $pkg = $name;
+ $pkg =~ s/\W+/_/g;
+ return bless {Name => $name},$class.'::'.$pkg;
+}
+
+package Tk::DummyEncode::iso8859_1;
+sub encode
+{
+ my ($obj,$uni,$chk) = @_;
+ $_[1] = '' if $chk;
+ return $uni;
+}
+
+sub decode
+{
+ my ($obj,$byt,$chk) = @_;
+ $_[1]
+= '' if $chk;
+ return $byt;
+}
+
+package Tk::DummyEncode::X11ControlChars;
+sub encode
+{
+ my ($obj,$uni,$chk) = @_;
+ my $str = '';
+ foreach my $ch (split(//,$uni))
+ {
+ $str .= sprintf("\\x{%x}",ord($ch));
+ }
+ $_[1] = '' if $chk;
+ return $str;
+}
+
+1;
+
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/English.pm b/Master/tlpkg/tlperl/lib/Tk/English.pm
new file mode 100644
index 00000000000..de640376580
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/English.pm
@@ -0,0 +1,307 @@
+package Tk::English;
+
+require Exporter;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/English.pm#6 $
+
+use base qw(Exporter);
+
+# This file is generated automatically by pTk/makeenglish from Tk distribution.
+
+
+@EXPORT = qw(
+ &ABOVE &ACTIVATE &ACTIVE &ADD &ADDTAG &ADJUST &AFTER &ALL &ANCHOR &APPEND
+ &APPLY &ARROW1 &ARROW2 &ASCII &ASPECT &AUTO &BASELINE &BBOX &BEFORE &BELOW
+ &BEVEL &BIND &BITMAP &BLANK &BOTH &BOTTOM &BUTT &CANVASX &CANVASY &CAPTURE
+ &CASCADE &CENTER &CGET &CHAR &CHARS &CHECKBUTTON &CHILDREN &CLEAR &CLIENT
+ &CLONE &CLOSEST &COLOR &COLORMAPWINDOWS &COLUMN &COLUMNCONFIGURE &COMMAND
+ &COMPARE &CONFIGURE &COORDS &COPY &CREATE &CURRENT &CURSELECTION &DATA
+ &DCHARS &DEACTIVATE &DEBUG &DECORATIONS &DECREASING &DEFAULT &DEICONIFY
+ &DELETE &DELTA &DESELECT &DLINEINFO &DOWN &DRAGSITE &DRAGTO &DROPSITE &DTAG
+ &DUMP &ENCLOSED &END &ENTRY &ENTRYCGET &ENTRYCONFIGURE &EVAL &EXISTS &EXPAND
+ &FILL &FILLX &FILLY &FIND &FIRST &FLASH &FLAT &FOCUS &FOCUSMODEL &FOCUSNEXT
+ &FOCUSPREV &FORGET &FRACTION &FRAME &FROM &GENERATE &GEOMETRY &GEOMETRYINFO
+ &GET &GETTAGS &GRAVITY &GRAY &GRID &GROOVE &GROUP &HANDLE &HEAD &HEIGHT
+ &HIDDEN &HIDE &HORIZONTAL &ICONBITMAP &ICONIFY &ICONMASK &ICONNAME
+ &ICONPOSITION &ICONWINDOW &ICURSOR &IDENTIFY &IDLETASKS &IGNORE &IMAGE
+ &INCLUDES &INCREASING &INDEX &INFO &INSERT &INSIDE &INTEGER &INTERACTIVE
+ &INVOKE &ISMWMRUNNING &ITEM &ITEMCGET &ITEMCONFIGURE &LAST &LEFT &LINE
+ &LINECONFIGURE &LINEEND &LINES &LINESTART &LIST &LOCATION &LOWER &MARK &MAX
+ &MAXSIZE &MENUBAR &MINSIZE &MITER &MONOCHROME &MOVE &MOVETO &NAMES &NEAREST
+ &NEW &NEXT &NEXTRANGE &NONE &NORMAL &NOW &OFFSPRINGS &OUTSIDE &OVERLAPPING
+ &OVERRIDEREDIRECT &OWN &PADX &PADY &PAGECGET &PAGECONFIGURE &PAGES &PARENT
+ &PASSIVE &POSITION &POSITIONFROM &POST &POSTCASCADE &POSTSCRIPT &PRESENT
+ &PREV &PREVIOUS &PREVRANGE &PROGRAM &PROJECTING &PROPAGATE &PROTOCOL &PUT
+ &RADIOBUTTON &RAISE &RAISED &RANGE &RANGES &READ &READFILE &REAL &RECORD
+ &REDITHER &REFCOUNT &RELEASE &REMOVE &RESIZABLE &RIDGE &RIGHT &ROOT &ROUND
+ &ROW &ROWCONFIGURE &ROWS &SAVEUNDER &SCALE &SCAN &SCROLL &SEARCH &SEE
+ &SELECT &SELECTION &SEPARATOR &SET &SHOW &SIBLINGS &SIZE &SIZEFROM &SLAVES
+ &SLIDER &SOLID &SPACE &STATE &STATUS &SUNKEN &TAG &TAIL &TEAROFF &TEXT
+ &TITLE &TO &TOGGLE &TOP &TRACING &TRANSIENT &TRANSIENTFOR &TYPE &TYPES
+ &UNITS &UNPACK &UNPOST &UNSET &UP &USER &VARIABLE &VERTICAL &VISIBILITY
+ &WIDTH &WINDOW &WITHDRAW &WITHTAG &WORDEND &WORDSTART &WRITE &XVIEW
+ &YPOSITION &YVIEW
+);
+sub ABOVE () { 'above' }
+sub ACTIVATE () { 'activate' }
+sub ACTIVE () { 'active' }
+sub ADD () { 'add' }
+sub ADDTAG () { 'addtag' }
+sub ADJUST () { 'adjust' }
+sub AFTER () { 'after' }
+sub ALL () { 'all' }
+sub ANCHOR () { 'anchor' }
+sub APPEND () { 'append' }
+sub APPLY () { 'apply' }
+sub ARROW1 () { 'arrow1' }
+sub ARROW2 () { 'arrow2' }
+sub ASCII () { 'ascii' }
+sub ASPECT () { 'aspect' }
+sub AUTO () { 'auto' }
+sub BASELINE () { 'baseline' }
+sub BBOX () { 'bbox' }
+sub BEFORE () { 'before' }
+sub BELOW () { 'below' }
+sub BEVEL () { 'bevel' }
+sub BIND () { 'bind' }
+sub BITMAP () { 'bitmap' }
+sub BLANK () { 'blank' }
+sub BOTH () { 'both' }
+sub BOTTOM () { 'bottom' }
+sub BUTT () { 'butt' }
+sub CANVASX () { 'canvasx' }
+sub CANVASY () { 'canvasy' }
+sub CAPTURE () { 'capture' }
+sub CASCADE () { 'cascade' }
+sub CENTER () { 'center' }
+sub CGET () { 'cget' }
+sub CHAR () { 'char' }
+sub CHARS () { 'chars' }
+sub CHECKBUTTON () { 'checkbutton' }
+sub CHILDREN () { 'children' }
+sub CLEAR () { 'clear' }
+sub CLIENT () { 'client' }
+sub CLONE () { 'clone' }
+sub CLOSEST () { 'closest' }
+sub COLOR () { 'color' }
+sub COLORMAPWINDOWS () { 'colormapwindows' }
+sub COLUMN () { 'column' }
+sub COLUMNCONFIGURE () { 'columnconfigure' }
+sub COMMAND () { 'command' }
+sub COMPARE () { 'compare' }
+sub CONFIGURE () { 'configure' }
+sub COORDS () { 'coords' }
+sub COPY () { 'copy' }
+sub CREATE () { 'create' }
+sub CURRENT () { 'current' }
+sub CURSELECTION () { 'curselection' }
+sub DATA () { 'data' }
+sub DCHARS () { 'dchars' }
+sub DEACTIVATE () { 'deactivate' }
+sub DEBUG () { 'debug' }
+sub DECORATIONS () { 'decorations' }
+sub DECREASING () { 'decreasing' }
+sub DEFAULT () { 'default' }
+sub DEICONIFY () { 'deiconify' }
+sub DELETE () { 'delete' }
+sub DELTA () { 'delta' }
+sub DESELECT () { 'deselect' }
+sub DLINEINFO () { 'dlineinfo' }
+sub DOWN () { 'down' }
+sub DRAGSITE () { 'dragsite' }
+sub DRAGTO () { 'dragto' }
+sub DROPSITE () { 'dropsite' }
+sub DTAG () { 'dtag' }
+sub DUMP () { 'dump' }
+sub ENCLOSED () { 'enclosed' }
+sub END () { 'end' }
+sub ENTRY () { 'entry' }
+sub ENTRYCGET () { 'entrycget' }
+sub ENTRYCONFIGURE () { 'entryconfigure' }
+sub EVAL () { 'eval' }
+sub EXISTS () { 'exists' }
+sub EXPAND () { 'expand' }
+sub FILL () { 'fill' }
+sub FILLX () { 'fillx' }
+sub FILLY () { 'filly' }
+sub FIND () { 'find' }
+sub FIRST () { 'first' }
+sub FLASH () { 'flash' }
+sub FLAT () { 'flat' }
+sub FOCUS () { 'focus' }
+sub FOCUSMODEL () { 'focusmodel' }
+sub FOCUSNEXT () { 'focusnext' }
+sub FOCUSPREV () { 'focusprev' }
+sub FORGET () { 'forget' }
+sub FRACTION () { 'fraction' }
+sub FRAME () { 'frame' }
+sub FROM () { 'from' }
+sub GENERATE () { 'generate' }
+sub GEOMETRY () { 'geometry' }
+sub GEOMETRYINFO () { 'geometryinfo' }
+sub GET () { 'get' }
+sub GETTAGS () { 'gettags' }
+sub GRAVITY () { 'gravity' }
+sub GRAY () { 'gray' }
+sub GRID () { 'grid' }
+sub GROOVE () { 'groove' }
+sub GROUP () { 'group' }
+sub HANDLE () { 'handle' }
+sub HEAD () { 'head' }
+sub HEIGHT () { 'height' }
+sub HIDDEN () { 'hidden' }
+sub HIDE () { 'hide' }
+sub HORIZONTAL () { 'horizontal' }
+sub ICONBITMAP () { 'iconbitmap' }
+sub ICONIFY () { 'iconify' }
+sub ICONMASK () { 'iconmask' }
+sub ICONNAME () { 'iconname' }
+sub ICONPOSITION () { 'iconposition' }
+sub ICONWINDOW () { 'iconwindow' }
+sub ICURSOR () { 'icursor' }
+sub IDENTIFY () { 'identify' }
+sub IDLETASKS () { 'idletasks' }
+sub IGNORE () { 'ignore' }
+sub IMAGE () { 'image' }
+sub INCLUDES () { 'includes' }
+sub INCREASING () { 'increasing' }
+sub INDEX () { 'index' }
+sub INFO () { 'info' }
+sub INSERT () { 'insert' }
+sub INSIDE () { 'inside' }
+sub INTEGER () { 'integer' }
+sub INTERACTIVE () { 'interactive' }
+sub INVOKE () { 'invoke' }
+sub ISMWMRUNNING () { 'ismwmrunning' }
+sub ITEM () { 'item' }
+sub ITEMCGET () { 'itemcget' }
+sub ITEMCONFIGURE () { 'itemconfigure' }
+sub LAST () { 'last' }
+sub LEFT () { 'left' }
+sub LINE () { 'line' }
+sub LINECONFIGURE () { 'lineconfigure' }
+sub LINEEND () { 'lineend' }
+sub LINES () { 'lines' }
+sub LINESTART () { 'linestart' }
+sub LIST () { 'list' }
+sub LOCATION () { 'location' }
+sub LOWER () { 'lower' }
+sub MARK () { 'mark' }
+sub MAX () { 'max' }
+sub MAXSIZE () { 'maxsize' }
+sub MENUBAR () { 'menubar' }
+sub MINSIZE () { 'minsize' }
+sub MITER () { 'miter' }
+sub MONOCHROME () { 'monochrome' }
+sub MOVE () { 'move' }
+sub MOVETO () { 'moveto' }
+sub NAMES () { 'names' }
+sub NEAREST () { 'nearest' }
+sub NEW () { 'new' }
+sub NEXT () { 'next' }
+sub NEXTRANGE () { 'nextrange' }
+sub NONE () { 'none' }
+sub NORMAL () { 'normal' }
+sub NOW () { 'now' }
+sub OFFSPRINGS () { 'offsprings' }
+sub OUTSIDE () { 'outside' }
+sub OVERLAPPING () { 'overlapping' }
+sub OVERRIDEREDIRECT () { 'overrideredirect' }
+sub OWN () { 'own' }
+sub PADX () { 'padx' }
+sub PADY () { 'pady' }
+sub PAGECGET () { 'pagecget' }
+sub PAGECONFIGURE () { 'pageconfigure' }
+sub PAGES () { 'pages' }
+sub PARENT () { 'parent' }
+sub PASSIVE () { 'passive' }
+sub POSITION () { 'position' }
+sub POSITIONFROM () { 'positionfrom' }
+sub POST () { 'post' }
+sub POSTCASCADE () { 'postcascade' }
+sub POSTSCRIPT () { 'postscript' }
+sub PRESENT () { 'present' }
+sub PREV () { 'prev' }
+sub PREVIOUS () { 'previous' }
+sub PREVRANGE () { 'prevrange' }
+sub PROGRAM () { 'program' }
+sub PROJECTING () { 'projecting' }
+sub PROPAGATE () { 'propagate' }
+sub PROTOCOL () { 'protocol' }
+sub PUT () { 'put' }
+sub RADIOBUTTON () { 'radiobutton' }
+sub RAISE () { 'raise' }
+sub RAISED () { 'raised' }
+sub RANGE () { 'range' }
+sub RANGES () { 'ranges' }
+sub READ () { 'read' }
+sub READFILE () { 'readfile' }
+sub REAL () { 'real' }
+sub RECORD () { 'record' }
+sub REDITHER () { 'redither' }
+sub REFCOUNT () { 'refcount' }
+sub RELEASE () { 'release' }
+sub REMOVE () { 'remove' }
+sub RESIZABLE () { 'resizable' }
+sub RIDGE () { 'ridge' }
+sub RIGHT () { 'right' }
+sub ROOT () { 'root' }
+sub ROUND () { 'round' }
+sub ROW () { 'row' }
+sub ROWCONFIGURE () { 'rowconfigure' }
+sub ROWS () { 'rows' }
+sub SCALE () { 'scale' }
+sub SCAN () { 'scan' }
+sub SCROLL () { 'scroll' }
+sub SEARCH () { 'search' }
+sub SEE () { 'see' }
+sub SELECT () { 'select' }
+sub SELECTION () { 'selection' }
+sub SEPARATOR () { 'separator' }
+sub SET () { 'set' }
+sub SHOW () { 'show' }
+sub SIBLINGS () { 'siblings' }
+sub SIZE () { 'size' }
+sub SIZEFROM () { 'sizefrom' }
+sub SLAVES () { 'slaves' }
+sub SLIDER () { 'slider' }
+sub SOLID () { 'solid' }
+sub SPACE () { 'space' }
+sub STATE () { 'state' }
+sub STATUS () { 'status' }
+sub SUNKEN () { 'sunken' }
+sub TAG () { 'tag' }
+sub TAIL () { 'tail' }
+sub TEAROFF () { 'tearoff' }
+sub TEXT () { 'text' }
+sub TITLE () { 'title' }
+sub TO () { 'to' }
+sub TOGGLE () { 'toggle' }
+sub TOP () { 'top' }
+sub TRACING () { 'tracing' }
+sub TRANSIENT () { 'transient' }
+sub TRANSIENTFOR () { 'transientfor' }
+sub TYPE () { 'type' }
+sub TYPES () { 'types' }
+sub UNITS () { 'units' }
+sub UNPACK () { 'unpack' }
+sub UNPOST () { 'unpost' }
+sub UNSET () { 'unset' }
+sub UP () { 'up' }
+sub USER () { 'user' }
+sub VARIABLE () { 'variable' }
+sub VERTICAL () { 'vertical' }
+sub VISIBILITY () { 'visibility' }
+sub WIDTH () { 'width' }
+sub WINDOW () { 'window' }
+sub WITHDRAW () { 'withdraw' }
+sub WITHTAG () { 'withtag' }
+sub WORDEND () { 'wordend' }
+sub WORDSTART () { 'wordstart' }
+sub WRITE () { 'write' }
+sub XVIEW () { 'xview' }
+sub YPOSITION () { 'yposition' }
+sub YVIEW () { 'yview' }
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Entry.pm b/Master/tlpkg/tlperl/lib/Tk/Entry.pm
new file mode 100644
index 00000000000..51b3f0c6767
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Entry.pm
@@ -0,0 +1,615 @@
+package Tk::Entry;
+
+# Converted from entry.tcl --
+#
+# This file defines the default bindings for Tk entry widgets.
+#
+# @(#) entry.tcl 1.22 94/12/17 16:05:14
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+use vars qw($VERSION);
+use strict;
+$VERSION = sprintf '4.%03d',q$Revision: #17 $ =~ /#(\d+)/;
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+use Tk::Widget ();
+use Tk::Clipboard ();
+use base qw(Tk::Clipboard Tk::Widget);
+
+import Tk qw(Ev $XS_VERSION);
+
+Construct Tk::Widget 'Entry';
+
+bootstrap Tk::Entry;
+
+sub Tk_cmd { \&Tk::entry }
+
+Tk::Methods('bbox','delete','get','icursor','index','insert','scan',
+ 'selection','validate','xview');
+
+use Tk::Submethods ( 'selection' => [qw(clear range adjust present to from)],
+ 'xview' => [qw(moveto scroll)],
+ );
+
+sub wordstart
+{my ($w,$pos) = @_;
+ my $string = $w->get;
+ $pos = $w->index('insert')-1 unless(defined $pos);
+ $string = substr($string,0,$pos);
+ $string =~ s/\S*$//;
+ length $string;
+}
+
+sub wordend
+{my ($w,$pos) = @_;
+ my $string = $w->get;
+ my $anc = length $string;
+ $pos = $w->index('insert') unless(defined $pos);
+ $string = substr($string,$pos);
+ $string =~ s/^(?:((?=\s)\s*|(?=\S)\S*))//x;
+ $anc - length($string);
+}
+
+sub deltainsert
+{
+ my ($w,$d) = @_;
+ return $w->index('insert')+$d;
+}
+
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters an
+# entry widget or an entry widget receives the input focus. It creates
+# all of the class bindings for entries.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $class->SUPER::ClassInit($mw);
+
+ # <<Cut>>, <<Copy>> and <<Paste>> defined in Tk::Clipboard
+ $mw->bind($class,'<<Clear>>' => sub {
+ my $w = shift;
+ $w->delete("sel.first", "sel.last");
+ });
+ $mw->bind($class,'<<PasteSelection>>' => [sub {
+ my($w, $x) = @_;
+ # XXX logic in Tcl/Tk version screwed up?
+ if (!$Tk::strictMotif && !$Tk::mouseMoved) {
+ $w->Paste($x);
+ }
+ }, Ev('x')]);
+
+ # Standard Motif bindings:
+ # The <Escape> binding is different from the Tcl/Tk version:
+ $mw->bind($class,'<Escape>','selectionClear');
+
+ $mw->bind($class,'<1>',['Button1',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<ButtonRelease-1>',['Button1Release',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Motion>',['Motion',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<Double-1>',['MouseSelect',Ev('x'),'word','sel.first']);
+ $mw->bind($class,'<Double-Shift-1>',['MouseSelect',Ev('x'),'word']);
+ $mw->bind($class,'<Triple-1>',['MouseSelect',Ev('x'),'line',0]);
+ $mw->bind($class,'<Triple-Shift-1>',['MouseSelect',Ev('x'),'line']);
+
+ $mw->bind($class,'<Shift-1>','Shift_1');
+
+
+ $mw->bind($class,'<B1-Leave>',['AutoScan',Ev('x')]);
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<Control-1>','Control_1');
+ $mw->bind($class,'<Left>', ['SetCursor',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Right>',['SetCursor',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Shift-Left>',['KeySelect',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Shift-Right>',['KeySelect',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Control-Left>',['SetCursor',Ev(['wordstart'])]);
+ $mw->bind($class,'<Control-Right>',['SetCursor',Ev(['wordend'])]);
+ $mw->bind($class,'<Shift-Control-Left>',['KeySelect',Ev(['wordstart'])]);
+ $mw->bind($class,'<Shift-Control-Right>',['KeySelect',Ev(['wordend'])]);
+ $mw->bind($class,'<Home>',['SetCursor',0]);
+ $mw->bind($class,'<Shift-Home>',['KeySelect',0]);
+ $mw->bind($class,'<End>',['SetCursor','end']);
+ $mw->bind($class,'<Shift-End>',['KeySelect','end']);
+ $mw->bind($class,'<Delete>','Delete');
+
+ $mw->bind($class,'<BackSpace>','Backspace');
+
+ $mw->bind($class,'<Control-space>',['selectionFrom','insert']);
+ $mw->bind($class,'<Select>',['selectionFrom','insert']);
+ $mw->bind($class,'<Control-Shift-space>',['selectionAdjust','insert']);
+ $mw->bind($class,'<Shift-Select>',['selectionAdjust','insert']);
+
+ $mw->bind($class,'<Control-slash>',['selectionRange',0,'end']);
+ $mw->bind($class,'<Control-backslash>','selectionClear');
+
+ # $class->clipboardOperations($mw,qw[Copy Cut Paste]);
+
+ $mw->bind($class,'<KeyPress>', ['Insert',Ev('A')]);
+
+ # Ignore all Alt, Meta, and Control keypresses unless explicitly bound.
+ # Otherwise, if a widget binding for one of these is defined, the
+ # <KeyPress> class binding will also fire and insert the character,
+ # which is wrong. Ditto for Return, and Tab.
+
+ $mw->bind($class,'<Alt-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Meta-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Control-KeyPress>' ,'NoOp');
+ $mw->bind($class,'<Return>' ,'NoOp');
+ $mw->bind($class,'<KP_Enter>' ,'NoOp');
+ $mw->bind($class,'<Tab>' ,'NoOp');
+ if ($mw->windowingsystem =~ /^(?:classic|aqua)$/)
+ {
+ $mw->bind($class,'<Command-KeyPress>', 'NoOp');
+ }
+
+ # On Windows, paste is done using Shift-Insert. Shift-Insert already
+ # generates the <<Paste>> event, so we don't need to do anything here.
+ if ($Tk::platform ne 'MSWin32')
+ {
+ $mw->bind($class,'<Insert>','InsertSelection');
+ }
+
+ if (!$Tk::strictMotif)
+ {
+ # Additional emacs-like bindings:
+ $mw->bind($class,'<Control-a>',['SetCursor',0]);
+ $mw->bind($class,'<Control-b>',['SetCursor',Ev('deltainsert',-1)]);
+ $mw->bind($class,'<Control-d>',['delete','insert']);
+ $mw->bind($class,'<Control-e>',['SetCursor','end']);
+ $mw->bind($class,'<Control-f>',['SetCursor',Ev('deltainsert',1)]);
+ $mw->bind($class,'<Control-h>','Backspace');
+ $mw->bind($class,'<Control-k>',['delete','insert','end']);
+
+ $mw->bind($class,'<Control-t>','Transpose');
+
+ # XXX The original Tcl/Tk bindings use NextWord/PreviousWord instead
+ $mw->bind($class,'<Meta-b>',['SetCursor',Ev(['wordstart'])]);
+ $mw->bind($class,'<Meta-d>',['delete','insert',Ev(['wordend'])]);
+ $mw->bind($class,'<Meta-f>',['SetCursor',Ev(['wordend'])]);
+ $mw->bind($class,'<Meta-BackSpace>',['delete',Ev(['wordstart']),'insert']);
+ $mw->bind($class,'<Meta-Delete>',['delete',Ev(['wordstart']),'insert']);
+
+ # A few additional bindings from John Ousterhout.
+# XXX conflicts with <<Copy>>: $mw->bind($class,'<Control-w>',['delete',Ev(['wordstart']),'insert']);
+ $mw->bind($class,'<2>','Button_2');
+ $mw->bind($class,'<B2-Motion>','B2_Motion');
+# XXX superseded by <<PasteSelection>>: $mw->bind($class,'<ButtonRelease-2>','ButtonRelease_2');
+ }
+ return $class;
+}
+
+
+sub Shift_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::selectMode = 'char';
+ $w->selectionAdjust('@' . $Ev->x)
+}
+
+
+sub Control_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->icursor('@' . $Ev->x)
+}
+
+
+sub Delete
+{
+ my $w = shift;
+ if ($w->selectionPresent)
+ {
+ $w->deleteSelected
+ }
+ else
+ {
+ $w->delete('insert')
+ }
+}
+
+
+sub InsertSelection
+{
+ my $w = shift;
+ eval {local $SIG{__DIE__}; $w->Insert($w->GetSelection)}
+}
+
+
+# Original is ::tk::EntryScanMark
+sub Button_2
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->scan('mark',$Ev->x);
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::mouseMoved = 0
+}
+
+
+# Original is ::tk::EntryScanDrag
+sub B2_Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ # Make sure these exist, as some weird situations can trigger the
+ # motion binding without the initial press. [Tcl/Tk Bug #220269]
+ if (!defined $Tk::x) { $Tk::x = $Ev->x }
+ if (abs(($Ev->x-$Tk::x)) > 2)
+ {
+ $Tk::mouseMoved = 1
+ }
+ $w->scan('dragto',$Ev->x)
+}
+
+
+# XXX Not needed anymore
+sub ButtonRelease_2
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if (!$Tk::mouseMoved)
+ {
+ eval
+ {local $SIG{__DIE__};
+ $w->insert('insert',$w->SelectionGet);
+ $w->SeeInsert;
+ }
+ }
+}
+
+sub Button1Release
+{
+ shift->CancelRepeat;
+}
+
+# ::tk::EntryClosestGap --
+# Given x and y coordinates, this procedure finds the closest boundary
+# between characters to the given coordinates and returns the index
+# of the character just after the boundary.
+#
+# Arguments:
+# w - The entry window.
+# x - X-coordinate within the window.
+sub ClosestGap
+{
+ my($w, $x) = @_;
+ my $pos = $w->index('@'.$x);
+ my @bbox = $w->bbox($pos);
+ if ($x - $bbox[0] < $bbox[2] / 2)
+ {
+ return $pos;
+ }
+ $pos + 1;
+}
+
+# Button1 --
+# This procedure is invoked to handle button-1 presses in entry
+# widgets. It moves the insertion cursor, sets the selection anchor,
+# and claims the input focus.
+#
+# Arguments:
+# w - The entry window in which the button was pressed.
+# x - The x-coordinate of the button press.
+sub Button1
+{
+ my $w = shift;
+ my $x = shift;
+ $Tk::selectMode = 'char';
+ $Tk::mouseMoved = 0;
+ $Tk::pressX = $x;
+ $w->icursor($w->ClosestGap($x));
+ $w->selectionFrom('insert');
+ $w->selectionClear;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $w->focus()
+ }
+}
+
+sub Motion
+{
+ my ($w,$x,$y) = @_;
+ $Tk::x = $x; # XXX ?
+ $w->MouseSelect($x);
+}
+
+# MouseSelect --
+# This procedure is invoked when dragging out a selection with
+# the mouse. Depending on the selection mode (character, word,
+# line) it selects in different-sized units. This procedure
+# ignores mouse motions initially until the mouse has moved from
+# one character to another or until there have been multiple clicks.
+#
+# Arguments:
+# w - The entry window in which the button was pressed.
+# x - The x-coordinate of the mouse.
+sub MouseSelect
+{
+
+ my $w = shift;
+ my $x = shift;
+ return if UNIVERSAL::isa($w, 'Tk::Spinbox') and $w->{_element} ne 'entry';
+ $Tk::selectMode = shift if (@_);
+ my $cur = $w->index($w->ClosestGap($x));
+ return unless defined $cur;
+ my $anchor = $w->index('anchor');
+ return unless defined $anchor;
+ $Tk::pressX ||= $x; # XXX Better use "if !defined $Tk::pressX"?
+ if (($cur != $anchor) || (abs($Tk::pressX - $x) >= 3))
+ {
+ $Tk::mouseMoved = 1
+ }
+ my $mode = $Tk::selectMode;
+ return unless $mode;
+ if ($mode eq 'char')
+ {
+ # The Tcl version uses selectionRange here XXX
+ if ($Tk::mouseMoved)
+ {
+ if ($cur < $anchor)
+ {
+ $w->selectionTo($cur)
+ }
+ else
+ {
+ $w->selectionTo($cur+1)
+ }
+ }
+ }
+ elsif ($mode eq 'word')
+ {
+ # The Tcl version uses tcl_wordBreakBefore/After here XXX
+ if ($cur < $w->index('anchor'))
+ {
+ $w->selectionRange($w->wordstart($cur),$w->wordend($anchor-1))
+ }
+ else
+ {
+ $w->selectionRange($w->wordstart($anchor),$w->wordend($cur))
+ }
+ }
+ elsif ($mode eq 'line')
+ {
+ $w->selectionRange(0,'end')
+ }
+ if (@_)
+ {
+ my $ipos = shift;
+ eval {local $SIG{__DIE__}; $w->icursor($ipos) };
+ }
+ $w->idletasks;
+}
+# ::tk::EntryPaste --
+# This procedure sets the insertion cursor to the current mouse position,
+# pastes the selection there, and sets the focus to the window.
+#
+# Arguments:
+# w - The entry window.
+# x - X position of the mouse.
+sub Paste
+{
+ my($w, $x) = @_;
+ $w->icursor($w->ClosestGap($x));
+ eval { local $SIG{__DIE__};
+ $w->insert("insert", $w->GetSelection);
+ $w->SeeInsert; # Perl/Tk extension
+ };
+ if ($w->cget(-state) ne 'disabled')
+ {
+ $w->focus;
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window left or right,
+# depending on where the mouse is, and reschedules itself as an
+# 'after' command so that the window continues to scroll until the
+# mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ my $x = shift;
+ return if !Tk::Exists($w);
+ if ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->MouseSelect($x);
+ $w->RepeatId($w->after(50,['AutoScan',$w,$x]))
+}
+# KeySelect
+# This procedure is invoked when stroking out selections using the
+# keyboard. It moves the cursor to a new position, then extends
+# the selection to that position.
+#
+# Arguments:
+# w - The entry window.
+# new - A new position for the insertion cursor (the cursor hasn't
+# actually been moved to this position yet).
+sub KeySelect
+{
+ my $w = shift;
+ my $new = shift;
+ if (!$w->selectionPresent)
+ {
+ $w->selectionFrom('insert');
+ $w->selectionTo($new)
+ }
+ else
+ {
+ $w->selectionAdjust($new)
+ }
+ $w->icursor($new);
+ $w->SeeInsert;
+}
+# Insert --
+# Insert a string into an entry at the point of the insertion cursor.
+# If there is a selection in the entry, and it covers the point of the
+# insertion cursor, then delete the selection before inserting.
+#
+# Arguments:
+# w - The entry window in which to insert the string
+# s - The string to insert (usually just a single character)
+sub Insert
+{
+ my $w = shift;
+ my $s = shift;
+ return unless (defined $s && $s ne '');
+ eval
+ {local $SIG{__DIE__};
+ my $insert = $w->index('insert');
+ if ($w->index('sel.first') <= $insert && $w->index('sel.last') >= $insert)
+ {
+ $w->deleteSelected
+ }
+ };
+ $w->insert('insert',$s);
+ $w->SeeInsert
+}
+# Backspace --
+# Backspace over the character just before the insertion cursor.
+#
+# Arguments:
+# w - The entry window in which to backspace.
+sub Backspace
+{
+ my $w = shift;
+ if ($w->selectionPresent)
+ {
+ $w->deleteSelected
+ }
+ else
+ {
+ my $x = $w->index('insert')-1;
+ $w->delete($x) if ($x >= 0);
+ # XXX Missing repositioning part from Tcl/Tk source
+ }
+}
+# SeeInsert
+# Make sure that the insertion cursor is visible in the entry window.
+# If not, adjust the view so that it is.
+#
+# Arguments:
+# w - The entry window.
+sub SeeInsert
+{
+ my $w = shift;
+ my $c = $w->index('insert');
+#
+# Probably a bug in your version of tcl/tk (I've not this problem
+# when I test Entry in the widget demo for tcl/tk)
+# index('\@0') give always 0. Consequence :
+# if you make <Control-E> or <Control-F> view is adapted
+# but with <Control-A> or <Control-B> view is not adapted
+#
+ my $left = $w->index('@0');
+ if ($left > $c)
+ {
+ $w->xview($c);
+ return;
+ }
+ my $x = $w->width;
+ while ($w->index('@' . $x) <= $c && $left < $c)
+ {
+ $left += 1;
+ $w->xview($left)
+ }
+}
+# SetCursor
+# Move the insertion cursor to a given position in an entry. Also
+# clears the selection, if there is one in the entry, and makes sure
+# that the insertion cursor is visible.
+#
+# Arguments:
+# w - The entry window.
+# pos - The desired new position for the cursor in the window.
+sub SetCursor
+{
+ my $w = shift;
+ my $pos = shift;
+ $w->icursor($pos);
+ $w->selectionClear;
+ $w->SeeInsert;
+}
+# Transpose
+# This procedure implements the 'transpose' function for entry widgets.
+# It tranposes the characters on either side of the insertion cursor,
+# unless the cursor is at the end of the line. In this case it
+# transposes the two characters to the left of the cursor. In either
+# case, the cursor ends up to the right of the transposed characters.
+#
+# Arguments:
+# w - The entry window.
+sub Transpose
+{
+ my $w = shift;
+ my $i = $w->index('insert');
+ $i++ if ($i < $w->index('end'));
+ my $first = $i-2;
+ return if ($first < 0);
+ my $str = $w->get;
+ my $new = substr($str,$i-1,1) . substr($str,$first,1);
+ $w->delete($first,$i);
+ $w->insert('insert',$new);
+ $w->SeeInsert;
+}
+
+sub tabFocus
+{
+ my $w = shift;
+ $w->selectionRange(0,'end');
+ $w->icursor('end');
+ $w->SUPER::tabFocus;
+}
+
+# ::tk::EntryGetSelection --
+#
+# Returns the selected text of the entry with respect to the -show option.
+#
+# Arguments:
+# w - The entry window from which the text to get
+sub getSelected
+{
+ my $w = shift;
+ return undef unless $w->selectionPresent;
+ my $str = $w->get;
+ my $show = $w->cget('-show');
+ $str = $show x length($str) if (defined $show);
+ my $s = $w->index('sel.first');
+ my $e = $w->index('sel.last');
+ return substr($str,$s,$e-$s);
+}
+
+
+1;
+
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm b/Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm
new file mode 100644
index 00000000000..19377eaeca4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ErrorDialog.pm
@@ -0,0 +1,125 @@
+package Tk::ErrorDialog;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #7 $ =~ /\D(\d+)\s*$/;
+
+use Tk ();
+require Tk::Dialog;
+use base qw(Tk::Toplevel);
+
+
+# ErrorDialog - a translation of bgerror() from Tcl/Tk to Perl/Tk.
+#
+# Currently TkPerl background errors are sent to stdout/stderr; use this
+# module if you want them in a window. You can also "roll your own" by
+# supplying the routine Tk::Error.
+
+use strict;
+
+Construct Tk::Widget 'ErrorDialog';
+
+my %options = ( -buttons => ['OK', 'Skip Messages', 'Stack trace'],
+ -bitmap => 'error'
+ );
+my $ED_OBJECT;
+
+sub import
+{
+ my $class = shift;
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ $options{$key} = $val;
+ }
+}
+
+sub Populate {
+
+ # ErrorDialog constructor. Uses `new' method from base class
+ # to create object container then creates the dialog toplevel and the
+ # traceback toplevel.
+
+ my($cw, $args) = @_;
+
+ my $dr = $cw->Dialog(
+ -title => 'Error in '.$cw->MainWindow->name,
+ -text => 'on-the-fly-text',
+ -bitmap => $options{'-bitmap'},
+ -buttons => $options{'-buttons'},
+ );
+ $cw->minsize(1, 1);
+ $cw->title('Stack Trace for Error');
+ $cw->iconname('Stack Trace');
+ my $t_ok = $cw->Button(
+ -text => 'OK',
+ -command => [
+ sub {
+ shift->withdraw;
+ }, $cw,
+ ]
+ );
+ my $t_text = $cw->Text(
+ -relief => 'sunken',
+ -bd => 2,
+ -setgrid => 'true',
+ -width => 60,
+ -height => 20,
+ );
+ my $t_scroll = $cw->Scrollbar(
+ -relief => 'sunken',
+ -command => ['yview', $t_text],
+ );
+ $t_text->configure(-yscrollcommand => ['set', $t_scroll]);
+ $t_ok->pack(-side => 'bottom', -padx => '3m', -pady => '2m');
+ $t_scroll->pack(-side => 'right', -fill => 'y');
+ $t_text->pack(-side => 'left', -expand => 'yes', -fill => 'both');
+ $cw->withdraw;
+
+ $cw->Advertise(error_dialog => $dr); # advertise dialog widget
+ $cw->Advertise(text => $t_text); # advertise text widget
+ $cw->ConfigSpecs(-cleanupcode => [PASSIVE => undef, undef, undef],
+ -appendtraceback => [ PASSIVE => undef, undef, 1 ]);
+ $ED_OBJECT = $cw;
+ $cw->protocol('WM_DELETE_WINDOW' => sub {$cw->withdraw});
+ return $cw;
+
+} # end Populate
+
+sub Tk::Error {
+
+ # Post a dialog box with the error message and give the user a chance
+ # to see a more detailed stack trace.
+
+ my($w, $error, @msgs) = @_;
+
+ my $grab = $w->grab('current');
+ $grab->Unbusy if (defined $grab);
+
+ $w->ErrorDialog if not defined $ED_OBJECT;
+
+ my($d, $t) = ($ED_OBJECT->Subwidget('error_dialog'), $ED_OBJECT->Subwidget('text'));
+# chop $error;
+ $d->configure(-text => "Error: $error");
+ $d->bell;
+ my $ans = $d->Show;
+
+ $t->delete('0.0', 'end') if not $ED_OBJECT->{'-appendtraceback'};
+ $t->insert('end', "\n");
+ $t->mark('set', 'ltb', 'end');
+ $t->insert('end', "--- Begin Traceback ---\n$error\n");
+ my $msg;
+ for $msg (@msgs) {
+ $t->insert('end', "$msg\n");
+ }
+ $t->yview('ltb');
+
+ $ED_OBJECT->deiconify if ($ans =~ /trace/i);
+
+ my $c = $ED_OBJECT->{Configure}{'-cleanupcode'};
+ &$c if defined $c; # execute any cleanup code if it was defined
+ $w->break if ($ans =~ /skip/i);
+
+} # end Tk::Error
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Event.pm b/Master/tlpkg/tlperl/lib/Tk/Event.pm
new file mode 100644
index 00000000000..cecd57c54ae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Event.pm
@@ -0,0 +1,13 @@
+package Tk::Event;
+use vars qw($VERSION $XS_VERSION @EXPORT_OK);
+END { CleanupGlue() }
+$VERSION = sprintf '4.%03d', q$Revision: #15 $ =~ /\D(\d+)\s*$/;
+$XS_VERSION = '804.027';
+use base qw(Exporter);
+use XSLoader;
+@EXPORT_OK = qw($XS_VERSION DONT_WAIT WINDOW_EVENTS FILE_EVENTS
+ TIMER_EVENTS IDLE_EVENTS ALL_EVENTS);
+XSLoader::load 'Tk::Event',$XS_VERSION;
+require Tk::Event::IO;
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Event/IO.pm b/Master/tlpkg/tlperl/lib/Tk/Event/IO.pm
new file mode 100644
index 00000000000..10b47e246ff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Event/IO.pm
@@ -0,0 +1,132 @@
+package Tk::Event::IO;
+use strict;
+use Carp;
+
+use vars qw($VERSION @EXPORT_OK);
+$VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Exporter);
+use Symbol ();
+
+@EXPORT_OK = qw(READABLE WRITABLE);
+
+sub PrintArgs
+{
+ my $func = (caller(1))[3];
+ print "$func(",join(',',@_),")\n";
+}
+
+sub PRINT
+{
+ my $obj = shift;
+ $obj->wait(WRITABLE);
+ my $h = $obj->handle;
+ return print $h @_;
+}
+
+sub PRINTF
+{
+ my $obj = shift;
+ $obj->wait(WRITABLE);
+ my $h = $obj->handle;
+ return printf $h @_;
+}
+
+sub WRITE
+{
+ my $obj = $_[0];
+ $obj->wait(WRITABLE);
+ return syswrite($obj->handle,$_[1],$_[2]);
+}
+
+my $depth = 0;
+sub READLINE
+{
+ my $obj = shift;
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ my $w = <$h>;
+ return $w;
+}
+
+sub READ
+{
+ my $obj = $_[0];
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ return sysread($h,$_[1],$_[2],defined $_[3] ? $_[3] : 0);
+}
+
+sub GETC
+{
+ my $obj = $_[0];
+ $obj->wait(READABLE);
+ my $h = $obj->handle;
+ return getc($h);
+}
+
+sub CLOSE
+{
+ my $obj = shift;
+ $obj->unwatch;
+ my $h = $obj->handle;
+ return close($h);
+}
+
+sub EOF
+{
+ my $obj = shift;
+ my $h = $obj->handle;
+ return eof($h);
+}
+
+sub FILENO
+{
+ my $obj = shift;
+ my $h = $obj->handle;
+ return fileno($h);
+}
+
+sub imode
+{
+ my $mode = shift;
+ my $imode = ${{'readable' => READABLE(),
+ 'writable' => WRITABLE()}}{$mode};
+ croak("Invalid handler type '$mode'") unless (defined $imode);
+ return $imode;
+}
+
+sub fileevent
+{
+ my ($widget,$file,$mode,$cb) = @_;
+ my $imode = imode($mode);
+ unless (ref $file)
+ {
+ no strict 'refs';
+ $file = Symbol::qualify($file,(caller)[0]);
+ $file = \*{$file};
+ }
+ my $obj = tied(*$file);
+ unless ($obj && $obj->isa('Tk::Event::IO'))
+ {
+ $obj = tie *$file,'Tk::Event::IO', $file;
+ }
+ if (@_ == 3)
+ {
+ # query return the handler
+ return $obj->handler($imode);
+ }
+ else
+ {
+ # set the handler
+ my $h = $obj->handler($imode,$cb);
+ undef $obj; # Prevent warnings about untie with ref to object
+ unless ($h)
+ {
+ untie *$file;
+ }
+ }
+}
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/FBox.pm b/Master/tlpkg/tlperl/lib/Tk/FBox.pm
new file mode 100644
index 00000000000..fed7501aea4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/FBox.pm
@@ -0,0 +1,1043 @@
+# -*- perl -*-
+#
+# tkfbox.tcl --
+#
+# Implements the "TK" standard file selection dialog box. This
+# dialog box is used on the Unix platforms whenever the tk_strictMotif
+# flag is not set.
+#
+# The "TK" standard file selection dialog box is similar to the
+# file selection dialog box on Win95(TM). The user can navigate
+# the directories by clicking on the folder icons or by
+# selecting the "Directory" option menu. The user can select
+# files by clicking on the file icons or by entering a filename
+# in the "Filename:" entry.
+#
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Translated to perl/Tk by Slaven Rezic <slaven@rezic.de>.
+#
+
+#----------------------------------------------------------------------
+#
+# F I L E D I A L O G
+#
+#----------------------------------------------------------------------
+# tkFDialog --
+#
+# Implements the TK file selection dialog. This dialog is used when
+# the tk_strictMotif flag is set to false. This procedure shouldn't
+# be called directly. Call tk_getOpenFile or tk_getSaveFile instead.
+#
+
+package Tk::FBox;
+require Tk::Toplevel;
+
+use strict;
+use vars qw($VERSION $updirImage $folderImage $fileImage);
+
+$VERSION = sprintf '4.%03d', q$Revision: #18 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::Toplevel);
+
+Construct Tk::Widget 'FBox';
+
+sub import {
+ if (defined $_[1] and $_[1] eq 'as_default') {
+ local $^W = 0;
+ package Tk;
+ if ($Tk::VERSION < 804) {
+ *FDialog = \&Tk::FBox::FDialog;
+ *MotifFDialog = \&Tk::FBox::FDialog;
+ } else {
+ *tk_getOpenFile = sub {
+ Tk::FBox::FDialog("tk_getOpenFile", @_);
+ };
+ *tk_getSaveFile = sub {
+ Tk::FBox::FDialog("tk_getSaveFile", @_);
+ };
+ }
+ }
+}
+
+# Note that -sortcmd is experimental and the interface is likely to change.
+# Using -sortcmd is really strange :-(
+# $top->getOpenFile(-sortcmd => sub { package Tk::FBox; uc $b cmp uc $a});
+# or, un-perlish, but useable (now activated in code):
+# $top->getOpenFile(-sortcmd => sub { uc $_[1] cmp uc $_[0]});
+
+sub Populate {
+ my($w, $args) = @_;
+
+ require Tk::IconList;
+ require File::Basename;
+ require Cwd;
+
+ $w->SUPER::Populate($args);
+
+ # f1: the frame with the directory option menu
+ my $f1 = $w->Frame;
+ my $lab = $f1->Label(-text => 'Directory:', -underline => 0);
+ $w->{'dirMenu'} = my $dirMenu =
+ $f1->Optionmenu(-variable => \$w->{'selectPath'},
+ -textvariable => \$w->{'selectPath'},
+ -command => ['SetPath', $w]);
+ my $upBtn = $f1->Button;
+ if (!defined $updirImage->{$w->MainWindow}) {
+ $updirImage->{$w->MainWindow} = $w->Bitmap(-data => <<EOF);
+#define updir_width 28
+#define updir_height 16
+static char updir_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00,
+ 0x20, 0x40, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x10, 0x00, 0x00, 0x01,
+ 0x10, 0x02, 0x00, 0x01, 0x10, 0x07, 0x00, 0x01, 0x90, 0x0f, 0x00, 0x01,
+ 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01, 0x10, 0x02, 0x00, 0x01,
+ 0x10, 0xfe, 0x07, 0x01, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01,
+ 0xf0, 0xff, 0xff, 0x01};
+EOF
+ }
+ $upBtn->configure(-image => $updirImage->{$w->MainWindow});
+ $dirMenu->configure(-takefocus => 1, -highlightthickness => 2);
+ $upBtn->pack(-side => 'right', -padx => 4, -fill => 'both');
+ $lab->pack(-side => 'left', -padx => 4, -fill => 'both');
+ $dirMenu->pack(-expand => 'yes', -fill => 'both', -padx => 4);
+
+ $w->{'icons'} = my $icons =
+ $w->IconList(-command => ['OkCmd', $w, 'iconlist'],
+ );
+ $icons->bind('<<ListboxSelect>>' => [$w, 'ListBrowse']);
+
+ # f2: the frame with the OK button and the "file name" field
+ my $f2 = $w->Frame(-bd => 0);
+#XXX File name => File names if multiple
+ my $f2_lab = $f2->Label(-text => 'File name:', -anchor => 'e',
+ -width => 14, -underline => 5, -pady => 0);
+ $w->{'ent'} = my $ent = $f2->Entry;
+
+ # The font to use for the icons. The default Canvas font on Unix
+ # is just deviant.
+# $w->{'icons'}{'font'} = $ent->cget(-font);
+ $w->{'icons'}->configure(-font => $ent->cget(-font));
+
+ # f3: the frame with the cancel button and the file types field
+ my $f3 = $w->Frame(-bd => 0);
+
+ # The "File of types:" label needs to be grayed-out when
+ # -filetypes are not specified. The label widget does not support
+ # grayed-out text on monochrome displays. Therefore, we have to
+ # use a button widget to emulate a label widget (by setting its
+ # bindtags)
+ $w->{'typeMenuLab'} = my $typeMenuLab = $f3->Button
+ (-text => 'Files of type:',
+ -anchor => 'e',
+ -width => 14,
+ -underline => 9,
+ -bd => $f2_lab->cget(-bd),
+ -highlightthickness => $f2_lab->cget(-highlightthickness),
+ -relief => $f2_lab->cget(-relief),
+ -padx => $f2_lab->cget(-padx),
+ -pady => $f2_lab->cget(-pady),
+ -takefocus => 0,
+ );
+ $typeMenuLab->bindtags([$typeMenuLab, 'Label',
+ $typeMenuLab->toplevel, 'all']);
+ $w->{'typeMenuBtn'} = my $typeMenuBtn =
+ $f3->Menubutton(-indicatoron => 1, -tearoff => 0);
+ $typeMenuBtn->configure(-takefocus => 1,
+ -highlightthickness => 2,
+ -relief => 'raised',
+ -bd => 2,
+ -anchor => 'w',
+ );
+
+ # the okBtn is created after the typeMenu so that the keyboard traversal
+ # is in the right order
+ $w->{'okBtn'} = my $okBtn = $f2->Button
+ (-text => 'OK',
+ -underline => 0,
+ -width => 6,
+ -default => 'active',
+ -pady => 3,
+ );
+ my $cancelBtn = $f3->Button
+ (-text => 'Cancel',
+ -underline => 0,
+ -width => 6,
+ -default => 'normal',
+ -pady => 3,
+ );
+
+ # pack the widgets in f2 and f3
+ $okBtn->pack(-side => 'right', -padx => 4, -anchor => 'e');
+ $f2_lab->pack(-side => 'left', -padx => 4);
+ $ent->pack(-expand => 'yes', -fill => 'x', -padx => 2, -pady => 0);
+ $cancelBtn->pack(-side => 'right', -padx => 4, -anchor => 'w');
+ $typeMenuLab->pack(-side => 'left', -padx => 4);
+ $typeMenuBtn->pack(-expand => 'yes', -fill => 'x', -side => 'right');
+
+ # Pack all the frames together. We are done with widget construction.
+ $f1->pack(-side => 'top', -fill => 'x', -pady => 4);
+ $f3->pack(-side => 'bottom', -fill => 'x');
+ $f2->pack(-side => 'bottom', -fill => 'x');
+ $icons->pack(-expand => 'yes', -fill => 'both', -padx => 4, -pady => 1);
+
+ # Set up the event handlers
+ $ent->bind('<Return>',[$w,'ActivateEnt']);
+ $upBtn->configure(-command => ['UpDirCmd', $w]);
+ $okBtn->configure(-command => ['OkCmd', $w]);
+ $cancelBtn->configure(-command, ['CancelCmd', $w]);
+
+ $w->bind('<Alt-d>',[$dirMenu,'focus']);
+ $w->bind('<Alt-t>',sub {
+ if ($typeMenuBtn->cget(-state) eq 'normal') {
+ $typeMenuBtn->focus;
+ } });
+ $w->bind('<Alt-n>',[$ent,'focus']);
+ $w->bind('<KeyPress-Escape>',[$cancelBtn,'invoke']);
+ $w->bind('<Alt-c>',[$cancelBtn,'invoke']);
+ $w->bind('<Alt-o>',['InvokeBtn','Open']);
+ $w->bind('<Alt-s>',['InvokeBtn','Save']);
+ $w->protocol('WM_DELETE_WINDOW', ['CancelCmd', $w]);
+ $w->OnDestroy(['CancelCmd', $w]);
+
+ # Build the focus group for all the entries
+ $w->FG_Create;
+ $w->FG_BindIn($ent, ['EntFocusIn', $w]);
+ $w->FG_BindOut($ent, ['EntFocusOut', $w]);
+
+ $w->SetPath(_cwd());
+
+ $w->ConfigSpecs(-defaultextension => ['PASSIVE', undef, undef, undef],
+ -filetypes => ['PASSIVE', undef, undef, undef],
+ -initialdir => ['PASSIVE', undef, undef, undef],
+ -initialfile => ['PASSIVE', undef, undef, undef],
+# -sortcmd => ['PASSIVE', undef, undef, sub { lc($a) cmp lc($b) }],
+ -sortcmd => ['PASSIVE', undef, undef, sub { lc($_[0]) cmp lc($_[1]) }],
+ -title => ['PASSIVE', undef, undef, undef],
+ -type => ['PASSIVE', undef, undef, 'open'],
+ -filter => ['PASSIVE', undef, undef, '*'],
+ -force => ['PASSIVE', undef, undef, 0],
+ -multiple => ['PASSIVE', undef, undef, 0],
+ 'DEFAULT' => [$icons],
+ );
+ # So-far-failed attempt to break reference loops ...
+ $w->_OnDestroy(qw(dirMenu icons typeMenuLab typeMenuBtn okBtn ent updateId));
+ $w;
+}
+
+# -initialdir fix with ResolveFile
+sub Show {
+ my $w = shift;
+
+ $w->configure(@_);
+
+ # Dialog boxes should be transient with respect to their parent,
+ # so that they will always stay on top of their parent window. However,
+ # some window managers will create the window as withdrawn if the parent
+ # window is withdrawn or iconified. Combined with the grab we put on the
+ # window, this can hang the entire application. Therefore we only make
+ # the dialog transient if the parent is viewable.
+
+ if (Tk::Exists($w->Parent) && $w->Parent->viewable) {
+ $w->transient($w->Parent);
+ }
+
+ # set the default directory and selection according to the -initial
+ # settings
+ {
+ my $initialdir = $w->cget(-initialdir);
+ if (defined $initialdir) {
+ my ($flag, $path, $file) = ResolveFile($initialdir, 'junk');
+ if ($flag eq 'OK' or $flag eq 'FILE') {
+ $w->{'selectPath'} = $path;
+ } else {
+ $w->Error("\"$initialdir\" is not a valid directory");
+ }
+ }
+ $w->{'selectFile'} = $w->cget(-initialfile);
+ }
+
+ # Set -multiple to a one or zero value (not other boolean types
+ # like "yes") so we can use it in tests more easily.
+ if ($w->cget('-type') ne 'open') {
+ $w->configure(-multiple => 0);
+ } else {
+ $w->configure(-multiple => !!$w->cget('-multiple'));
+ }
+ $w->{'icons'}->configure(-multiple => $w->cget('-multiple'));
+
+ # Initialize the file types menu
+ my $typeMenuBtn = $w->{'typeMenuBtn'};
+ my $typeMenuLab = $w->{'typeMenuLab'};
+ if (defined $w->cget('-filetypes')) {
+ my(@filetypes) = GetFileTypes($w->cget('-filetypes'));
+ my $typeMenu = $typeMenuBtn->cget(-menu);
+ $typeMenu->delete(0, 'end');
+ foreach my $ft (@filetypes) {
+ my $title = $ft->[0];
+ my $filter = join(' ', @{ $ft->[1] });
+ $typeMenuBtn->command
+ (-label => $title,
+ -command => ['SetFilter', $w, $title, $filter],
+ );
+ }
+ $w->SetFilter($filetypes[0]->[0], join(' ', @{ $filetypes[0]->[1] }));
+ $typeMenuBtn->configure(-state => 'normal');
+ $typeMenuLab->configure(-state => 'normal');
+ } else {
+#XXX $w->configure(-filter => '*');
+ $typeMenuBtn->configure(-state => 'disabled',
+ -takefocus => 0);
+ $typeMenuLab->configure(-state => 'disabled');
+ }
+ $w->UpdateWhenIdle;
+
+ {
+ my $title = $w->cget(-title);
+ if (!defined $title) {
+ my $type = $w->cget(-type);
+ $title = ($type eq 'dir') ? 'Choose Directory'
+ : ($type eq 'save') ? 'Save As' : 'Open';
+ }
+ $w->title($title);
+ }
+
+ # Withdraw the window, then update all the geometry information
+ # so we know how big it wants to be, then center the window in the
+ # display and de-iconify it.
+ $w->withdraw;
+ $w->idletasks;
+ if (0)
+ {
+ #XXX use Tk::Wm::Popup? or Tk::PlaceWindow?
+ my $x = int($w->screenwidth / 2 - $w->reqwidth / 2 - $w->parent->vrootx);
+ my $y = int($w->screenheight / 2 - $w->reqheight / 2 - $w->parent->vrooty);
+ $w->geometry("+$x+$y");
+ $w->deiconify;
+ }
+ else
+ {
+ $w->Popup;
+ }
+
+ # Set a grab and claim the focus too.
+#XXX use Tk::setFocusGrab when it's available
+ my $oldFocus = $w->focusCurrent;
+ my $oldGrab = $w->grabCurrent;
+ my $grabStatus = $oldGrab->grabStatus if ($oldGrab);
+ $w->grab;
+ my $ent = $w->{'ent'};
+ $ent->focus;
+ $ent->delete(0, 'end');
+ if (defined $w->{'selectFile'} && $w->{'selectFile'} ne '') {
+ $ent->insert(0, $w->{'selectFile'});
+ $ent->selectionRange(0,'end');
+ $ent->icursor('end');
+ }
+
+ # 8. Wait for the user to respond, then restore the focus and
+ # return the index of the selected button. Restore the focus
+ # before deleting the window, since otherwise the window manager
+ # may take the focus away so we can't redirect it. Finally,
+ # restore any grab that was in effect.
+ $w->waitVariable(\$w->{'selectFilePath'});
+ eval {
+ $oldFocus->focus if $oldFocus;
+ };
+ if (Tk::Exists($w)) { # widget still exists
+ $w->grabRelease;
+ $w->withdraw;
+ }
+ if (Tk::Exists($oldGrab) && $oldGrab->viewable) {
+ if ($grabStatus eq 'global') {
+ $oldGrab->grabGlobal;
+ } else {
+ $oldGrab->grab;
+ }
+ }
+ return $w->{'selectFilePath'};
+}
+
+# tkFDialog_UpdateWhenIdle --
+#
+# Creates an idle event handler which updates the dialog in idle
+# time. This is important because loading the directory may take a long
+# time and we don't want to load the same directory for multiple times
+# due to multiple concurrent events.
+#
+sub UpdateWhenIdle {
+ my $w = shift;
+ if (exists $w->{'updateId'}) {
+ return;
+ } else {
+ $w->{'updateId'} = $w->after('idle', [$w, 'Update']);
+ }
+}
+
+# tkFDialog_Update --
+#
+# Loads the files and directories into the IconList widget. Also
+# sets up the directory option menu for quick access to parent
+# directories.
+#
+sub Update {
+ my $w = shift;
+ my $dataName = $w->name;
+
+ # This proc may be called within an idle handler. Make sure that the
+ # window has not been destroyed before this proc is called
+ if (!Tk::Exists($w) || $w->class ne 'FBox') {
+ return;
+ } else {
+ delete $w->{'updateId'};
+ }
+ unless (defined $folderImage->{$w->MainWindow}) {
+ require Tk::Pixmap;
+ $folderImage->{$w->MainWindow} = $w->Pixmap(-file => Tk->findINC('folder.xpm'));
+ $fileImage->{$w->MainWindow} = $w->Pixmap(-file => Tk->findINC('file.xpm'));
+ }
+ my $folder = $folderImage->{$w->MainWindow};
+ my $file = $fileImage->{$w->MainWindow};
+ my $appPWD = _cwd();
+ if (!ext_chdir($w->{'selectPath'})) {
+ # We cannot change directory to $data(selectPath). $data(selectPath)
+ # should have been checked before tkFDialog_Update is called, so
+ # we normally won't come to here. Anyways, give an error and abort
+ # action.
+ $w->messageBox(-type => 'OK',
+ -message => 'Cannot change to the directory "' .
+ $w->{'selectPath'} . "\".\nPermission denied.",
+ -icon => 'warning',
+ );
+ ext_chdir($appPWD);
+ return;
+ }
+
+ # Turn on the busy cursor. BUG?? We haven't disabled X events, though,
+ # so the user may still click and cause havoc ...
+ my $ent = $w->{'ent'};
+ my $entCursor = $ent->cget(-cursor);
+ my $dlgCursor = $w->cget(-cursor);
+ $ent->configure(-cursor => 'watch');
+ $w->configure(-cursor => 'watch');
+ $w->idletasks;
+ my $icons = $w->{'icons'};
+ $icons->DeleteAll;
+
+ # Make the dir & file list
+ my $cwd = _cwd();
+ local *FDIR;
+ if (opendir(FDIR, $cwd)) {
+ my @files;
+# my $sortcmd = $w->cget(-sortcmd);
+ my $sortcmd = sub { $w->cget(-sortcmd)->($a,$b) };
+ my $flt = $w->cget(-filter);
+ my $fltcb;
+ if (ref $flt eq 'CODE') {
+ $fltcb = $flt;
+ } else {
+ $flt = _rx_to_glob($flt);
+ }
+ my $type_dir = $w->cget(-type) eq 'dir';
+ foreach my $f (sort $sortcmd readdir(FDIR)) {
+ next if $f eq '.' or $f eq '..';
+ next if $type_dir && ! -d "$cwd/$f"; # XXX use File::Spec?
+ if ($fltcb) {
+ next if !$fltcb->($w, $f, $cwd);
+ } else {
+ next if -f $f && $f !~ m!$flt!;
+ }
+ if (-d $f) {
+ $icons->Add($folder, $f);
+ } else {
+ push @files, $f;
+ }
+ }
+ closedir(FDIR);
+ $icons->Add($file, @files);
+ }
+
+ $icons->Arrange;
+
+ # Update the Directory: option menu
+ my @list;
+ my $dir = '';
+ foreach my $subdir (TclFileSplit($w->{'selectPath'})) {
+ $dir = TclFileJoin($dir, $subdir);
+ push @list, $dir;
+ }
+ my $dirMenu = $w->{'dirMenu'};
+ $dirMenu->configure(-options => \@list);
+
+ # Restore the PWD to the application's PWD
+ ext_chdir($appPWD);
+
+ # Restore the Save label
+ if ($w->cget(-type) eq 'save') {
+ $w->{'okBtn'}->configure(-text => 'Save');
+ }
+
+ # turn off the busy cursor.
+ $ent->configure(-cursor => $entCursor);
+ $w->configure(-cursor => $dlgCursor);
+}
+
+# tkFDialog_SetPathSilently --
+#
+# Sets data(selectPath) without invoking the trace procedure
+#
+sub SetPathSilently {
+ my($w, $path) = @_;
+
+ $w->{'selectPath'} = $path;
+}
+
+# This proc gets called whenever data(selectPath) is set
+#
+sub SetPath {
+ my $w = shift;
+ $w->{'selectPath'} = $_[0] if @_;
+ $w->UpdateWhenIdle;
+}
+
+# This proc gets called whenever data(filter) is set
+#
+#XXX here's much more code in the tcl version ... check it out
+sub SetFilter {
+ my($w, $title, $filter) = @_;
+ $w->configure(-filter => $filter);
+ $w->{'typeMenuBtn'}->configure(-text => $title,
+ -indicatoron => 1);
+ $w->{'icons'}->Subwidget('sbar')->set(0.0, 0.0);
+ $w->UpdateWhenIdle;
+}
+
+# tkFDialogResolveFile --
+#
+# Interpret the user's text input in a file selection dialog.
+# Performs:
+#
+# (1) ~ substitution
+# (2) resolve all instances of . and ..
+# (3) check for non-existent files/directories
+# (4) check for chdir permissions
+#
+# Arguments:
+# context: the current directory you are in
+# text: the text entered by the user
+# defaultext: the default extension to add to files with no extension
+#
+# Return value:
+# [list $flag $directory $file]
+#
+# flag = OK : valid input
+# = PATTERN : valid directory/pattern
+# = PATH : the directory does not exist
+# = FILE : the directory exists but the file doesn't
+# exist
+# = CHDIR : Cannot change to the directory
+# = ERROR : Invalid entry
+#
+# directory : valid only if flag = OK or PATTERN or FILE
+# file : valid only if flag = OK or PATTERN
+#
+# directory may not be the same as context, because text may contain
+# a subdirectory name
+#
+sub ResolveFile {
+ my($context, $text, $defaultext) = @_;
+ my $appPWD = _cwd();
+ my $path = JoinFile($context, $text);
+ # If the file has no extension, append the default. Be careful not
+ # to do this for directories, otherwise typing a dirname in the box
+ # will give back "dirname.extension" instead of trying to change dir.
+ if (!-d $path && $path !~ /\..+$/ && defined $defaultext) {
+ $path = "$path$defaultext";
+ }
+ # Cannot just test for existance here as non-existing files are
+ # not an error for getSaveFile type dialogs.
+ # return ('ERROR', $path, "") if (!-e $path);
+ my($directory, $file, $flag);
+ if (-e $path) {
+ if (-d $path) {
+ if (!ext_chdir($path)) {
+ return ('CHDIR', $path, '');
+ }
+ $directory = _cwd();
+ $file = '';
+ $flag = 'OK';
+ ext_chdir($appPWD);
+ } else {
+ my $dirname = File::Basename::dirname($path);
+ if (!ext_chdir($dirname)) {
+ return ('CHDIR', $dirname, '');
+ }
+ $directory = _cwd();
+ $file = File::Basename::basename($path);
+ $flag = 'OK';
+ ext_chdir($appPWD);
+ }
+ } else {
+ my $dirname = File::Basename::dirname($path);
+ if (-e $dirname) {
+ if (!ext_chdir($dirname)) {
+ return ('CHDIR', $dirname, '');
+ }
+ $directory = _cwd();
+ $file = File::Basename::basename($path);
+ if ($file =~ /[*?]/) {
+ $flag = 'PATTERN';
+ } else {
+ $flag = 'FILE';
+ }
+ ext_chdir($appPWD);
+ } else {
+ $directory = $dirname;
+ $file = File::Basename::basename($path);
+ $flag = 'PATH';
+ }
+ }
+ return ($flag,$directory,$file);
+}
+
+# Gets called when the entry box gets keyboard focus. We clear the selection
+# from the icon list . This way the user can be certain that the input in the
+# entry box is the selection.
+#
+sub EntFocusIn {
+ my $w = shift;
+ my $ent = $w->{'ent'};
+ if ($ent->get ne '') {
+ $ent->selectionRange(0, 'end');
+ $ent->icursor('end');
+ } else {
+ $ent->selectionClear;
+ }
+#XXX is this missing in the tcl version, too??? $w->{'icons'}->Selection('clear');
+ my $okBtn = $w->{'okBtn'};
+ if ($w->cget(-type) ne 'save') {
+ $okBtn->configure(-text => 'Open');
+ } else {
+ $okBtn->configure(-text => 'Save');
+ }
+}
+
+sub EntFocusOut {
+ my $w = shift;
+ $w->{'ent'}->selectionClear;
+}
+
+# Gets called when user presses Return in the "File name" entry.
+#
+sub ActivateEnt {
+ my $w = shift;
+ my $ent = $w->{'ent'};
+ my $text = $ent->get;
+ if ($w->cget(-multiple)) {
+ # For the multiple case we have to be careful to get the file
+ # names as a true list, watching out for a single file with a
+ # space in the name. Thus we query the IconList directly.
+
+ $w->{'selectFile'} = [];
+ for my $item ($w->{'icons'}->Curselection) {
+ $w->VerifyFileName($w->{'icons'}->Get($item));
+ }
+ } else {
+ $w->VerifyFileName($text);
+ }
+}
+
+# Verification procedure
+#
+sub VerifyFileName {
+ my($w, $text) = @_;
+#XXX leave this here?
+# $text =~ s/^\s+//;
+# $text =~ s/\s+$//;
+ my($flag, $path, $file) = ResolveFile($w->{'selectPath'}, $text,
+ $w->cget(-defaultextension));
+ my $ent = $w->{'ent'};
+ if ($flag eq 'OK') {
+ if ($file eq '') {
+ # user has entered an existing (sub)directory
+ $w->SetPath($path);
+ $ent->delete(0, 'end');
+ } else {
+ $w->SetPathSilently($path);
+ if ($w->cget(-multiple)) {
+ push @{ $w->{'selectFile'} }, $file;
+ } else {
+ $w->{'selectFile'} = $file;
+ }
+ $w->Done;
+ }
+ } elsif ($flag eq 'PATTERN') {
+ $w->SetPath($path);
+ $w->configure(-filter => $file);
+ } elsif ($flag eq 'FILE') {
+ if ($w->cget(-type) eq 'open') {
+ $w->messageBox(-icon => 'warning',
+ -type => 'OK',
+ -message => 'File "' . TclFileJoin($path, $file)
+ . '" does not exist.');
+ $ent->selectionRange(0, 'end');
+ $ent->icursor('end');
+ } elsif ($w->cget(-type) eq 'save') {
+ $w->SetPathSilently($path);
+ if ($w->cget(-multiple)) {
+ push @{ $w->{'selectFile'} }, $file;
+ } else {
+ $w->{'selectFile'} = $file;
+ }
+ $w->Done;
+ }
+ } elsif ($flag eq 'PATH') {
+ $w->messageBox(-icon => 'warning',
+ -type => 'OK',
+ -message => "Directory \'$path\' does not exist.");
+ $ent->selectionRange(0, 'end');
+ $ent->icursor('end');
+ } elsif ($flag eq 'CHDIR') {
+ $w->messageBox(-type => 'OK',
+ -message => "Cannot change to the directory \"$path\".\nPermission denied.",
+ -icon => 'warning');
+ $ent->selectionRange(0, 'end');
+ $ent->icursor('end');
+ } elsif ($flag eq 'ERROR') {
+ $w->messageBox(-type => 'OK',
+ -message => "Invalid file name \"$path\".",
+ -icon => 'warning');
+ $ent->selectionRange(0, 'end');
+ $ent->icursor('end');
+ }
+}
+
+# Gets called when user presses the Alt-s or Alt-o keys.
+#
+sub InvokeBtn {
+ my($w, $key) = @_;
+ my $okBtn = $w->{'okBtn'};
+ $okBtn->invoke if ($okBtn->cget(-text) eq $key);
+}
+
+# Gets called when user presses the "parent directory" button
+#
+sub UpDirCmd {
+ my $w = shift;
+ $w->SetPath(File::Basename::dirname($w->{'selectPath'}))
+ unless ($w->{'selectPath'} eq '/');
+}
+
+# Join a file name to a path name. The "file join" command will break
+# if the filename begins with ~
+sub JoinFile {
+ my($path, $file) = @_;
+ if ($file =~ /^~/ && -e "$path/$file") {
+ TclFileJoin($path, "./$file");
+ } else {
+ TclFileJoin($path, $file);
+ }
+}
+
+# XXX replace with File::Spec when perl/Tk depends on 5.005
+sub TclFileJoin {
+ my $path = '';
+ foreach (@_) {
+ if (m|^/|) {
+ $path = $_;
+ }
+ elsif (m|^[a-z]:/|i) { # DOS-ish
+ $path = $_;
+ } elsif ($_ eq '~') {
+ $path = _get_homedir();
+ } elsif (m|^~/(.*)|) {
+ $path = _get_homedir() . "/" . $1;
+ } elsif (m|^~([^/]+)(.*)|) {
+ my($user, $p) = ($1, $2);
+ my $dir = _get_homedir($user);
+ if (!defined $dir) {
+ $path = "~$user$p";
+ } else {
+ $path = $dir . $p;
+ }
+ } elsif ($path eq '/' or $path eq '') {
+ $path .= $_;
+ } else {
+ $path .= "/$_";
+ }
+ }
+ $path;
+}
+
+sub TclFileSplit {
+ my $path = shift;
+ my @comp;
+ $path =~ s|/+|/|g; # strip multiple slashes
+ if ($path =~ m|^/|) {
+ push @comp, '/';
+ $path = substr($path, 1);
+ }
+ push @comp, split /\//, $path;
+ @comp;
+}
+
+# Gets called when user presses the "OK" button
+#
+sub OkCmd {
+ my $w = shift;
+ my $from = shift || "button";
+
+ my $filenames = [];
+ for my $item ($w->{'icons'}->Curselection) {
+ push @$filenames, $w->{'icons'}->Get($item);
+ }
+
+ my $filename = $filenames->[0];
+ if ($w->cget('-type') eq 'dir' && $from ne "iconlist") {
+ my $file = $filename eq '' ? $w->{'selectPath'} : JoinFile($w->{'selectPath'}, $filename);
+ $w->Done($file);
+ } elsif ((@$filenames && !$w->cget('-multiple')) ||
+ ($w->cget('-multiple') && @$filenames == 1)) {
+ my $file = JoinFile($w->{'selectPath'}, $filename);
+ if (-d $file) {
+ $w->ListInvoke($filename);
+ return;
+ }
+ }
+
+ $w->ActivateEnt;
+}
+
+# Gets called when user presses the "Cancel" button
+#
+sub CancelCmd {
+ my $w = shift;
+ undef $w->{'selectFilePath'};
+}
+
+# Gets called when user browses the IconList widget (dragging mouse, arrow
+# keys, etc)
+#
+sub ListBrowse {
+ my($w) = @_;
+
+ my $text = [];
+ for my $item ($w->{'icons'}->Curselection) {
+ push @$text, $w->{'icons'}->Get($item);
+ }
+ return if @$text == 0;
+ my $isDir;
+ if (@$text > 1) {
+ my $newtext = [];
+ for my $file (@$text) {
+ my $fullfile = JoinFile($w->{'selectPath'}, $file);
+ if (!-d $fullfile) {
+ push @$newtext, $file;
+ }
+ }
+ $text = $newtext;
+ $isDir = 0;
+ } else {
+ my $file = JoinFile($w->{'selectPath'}, $text->[0]);
+ $isDir = -d $file;
+ }
+ my $ent = $w->{'ent'};
+ my $okBtn = $w->{'okBtn'};
+ if (!$isDir) {
+ $ent->delete(qw(0 end));
+ $ent->insert(0, "@$text"); # XXX quote!
+
+ if ($w->cget('-type') ne 'save') {
+ $okBtn->configure(-text => 'Open');
+ } else {
+ $okBtn->configure(-text => 'Save');
+ }
+ } else {
+ $okBtn->configure(-text => 'Open');
+ }
+}
+
+# Gets called when user invokes the IconList widget (double-click,
+# Return key, etc)
+#
+sub ListInvoke {
+ my($w, @filenames) = @_;
+ return if !@filenames;
+ my $file = JoinFile($w->{'selectPath'}, $filenames[0]);
+ if (-d $file) {
+ my $appPWD = _cwd();
+ if (!ext_chdir($file)) {
+ $w->messageBox(-type => 'OK',
+ -message => "Cannot change to the directory \"$file\".\nPermission denied.",
+ -icon => 'warning');
+ } else {
+ ext_chdir($appPWD);
+ $w->SetPath($file);
+ }
+ } else {
+ if ($w->cget('-multiple')) {
+ $w->{'selectFile'} = [@filenames];
+ } else {
+ $w->{'selectFile'} = $file;
+ }
+ $w->Done;
+ }
+}
+
+# tkFDialog_Done --
+#
+# Gets called when user has input a valid filename. Pops up a
+# dialog box to confirm selection when necessary. Sets the
+# tkPriv(selectFilePath) variable, which will break the "tkwait"
+# loop in tkFDialog and return the selected filename to the
+# script that calls tk_getOpenFile or tk_getSaveFile
+#
+sub Done {
+ my $w = shift;
+ my $selectFilePath = (@_) ? shift : '';
+ if ($selectFilePath eq '') {
+ if ($w->cget('-multiple')) {
+ $selectFilePath = [];
+ for my $f (@{ $w->{'selectFile'} }) {
+ push @$selectFilePath, JoinFile($w->{'selectPath'}, $f);
+ }
+ } else {
+ $selectFilePath = JoinFile($w->{'selectPath'},
+ $w->{'selectFile'});
+ }
+ if ($w->cget(-type) eq 'save' and
+ -e $selectFilePath and
+ !$w->cget(-force)) {
+ my $reply = $w->messageBox
+ (-icon => 'warning',
+ -type => 'YesNo',
+ -message => "File \"$selectFilePath\" already exists.\nDo you want to overwrite it?");
+ return unless (lc($reply) eq 'yes');
+ }
+ }
+ $w->{'selectFilePath'} = ($selectFilePath ne '' ? $selectFilePath : undef);
+}
+
+sub FDialog {
+ my $cmd = shift;
+ if ($cmd =~ /Save/) {
+ push @_, -type => 'save';
+ } elsif ($cmd =~ /Directory/) {
+ push @_, -type => 'dir';
+ }
+ Tk::DialogWrapper('FBox', $cmd, @_);
+}
+
+# tkFDGetFileTypes --
+#
+# Process the string given by the -filetypes option of the file
+# dialogs. Similar to the C function TkGetFileFilters() on the Mac
+# and Windows platform.
+#
+sub GetFileTypes {
+ my $in = shift;
+ my %fileTypes;
+ foreach my $t (@$in) {
+ if (@$t < 2 || @$t > 3) {
+ require Carp;
+ Carp::croak("bad file type \"$t\", should be \"typeName [extension ?extensions ...?] ?[macType ?macTypes ...?]?\"");
+ }
+ push @{ $fileTypes{$t->[0]} }, (ref $t->[1] eq 'ARRAY'
+ ? @{ $t->[1] }
+ : $t->[1]);
+ }
+
+ my @types;
+ my %hasDoneType;
+ my %hasGotExt;
+ foreach my $t (@$in) {
+ my $label = $t->[0];
+ my @exts;
+
+ next if (exists $hasDoneType{$label});
+
+ my $name = "$label (";
+ my $sep = '';
+ foreach my $ext (@{ $fileTypes{$label} }) {
+ next if ($ext eq '');
+ $ext =~ s/^\./*./;
+ if (!exists $hasGotExt{$label}->{$ext}) {
+ $name .= "$sep$ext";
+ push @exts, $ext;
+ $hasGotExt{$label}->{$ext}++;
+ }
+ $sep = ',';
+ }
+ $name .= ')';
+ push @types, [$name, \@exts];
+
+ $hasDoneType{$label}++;
+ }
+
+ return @types;
+}
+
+# ext_chdir --
+#
+# Change directory with tilde substitution
+#
+sub ext_chdir {
+ my $dir = shift;
+ if ($dir eq '~') {
+ chdir _get_homedir();
+ } elsif ($dir =~ m|^~/(.*)|) {
+ chdir _get_homedir() . "/" . $1;
+ } elsif ($dir =~ m|^~([^/]+(.*))|) {
+ chdir _get_homedir($1) . $2;
+ } else {
+ chdir $dir;
+ }
+}
+
+# _get_homedir --
+#
+# Get home directory of the current user
+#
+sub _get_homedir {
+ my($user) = @_;
+ if (!defined $user) {
+ eval {
+ local $SIG{__DIE__};
+ (getpwuid($<))[7];
+ } || $ENV{HOME} || undef; # chdir undef changes to home directory, too
+ } else {
+ eval {
+ local $SIG{__DIE__};
+ (getpwnam($user))[7];
+ };
+ }
+}
+
+sub _cwd {
+ #Cwd::cwd();
+ Cwd::fastcwd(); # this is taint-safe
+}
+
+sub _untaint {
+ my $s = shift;
+ $s =~ /^(.*)$/;
+ $1;
+}
+
+sub _rx_to_glob {
+ my $arg = shift;
+ $arg = join('|', split(' ', $arg));
+ $arg =~ s!([\.\+])!\\$1!g;
+ $arg =~ s!\*!.*!g;
+ $arg = "^" . $arg . "\$";
+ if ($] >= 5.005) {
+ $arg = qr/$arg/;
+ }
+ $arg;
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/FileSelect.pm b/Master/tlpkg/tlperl/lib/Tk/FileSelect.pm
new file mode 100644
index 00000000000..d2070049d82
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/FileSelect.pm
@@ -0,0 +1,578 @@
+package Tk::FileSelect;
+
+use vars qw($VERSION @EXPORT_OK);
+$VERSION = sprintf '4.%03d', q$Revision: #15 $ =~ /\D(\d+)\s*$/;
+@EXPORT_OK = qw(glob_to_re);
+
+use Tk qw(Ev);
+use strict;
+use Carp;
+use base qw(Tk::Toplevel);
+use Tk::widgets qw(LabEntry Button Frame Listbox Scrollbar);
+use File::Basename;
+
+Construct Tk::Widget 'FileSelect';
+
+use vars qw(%error_text);
+%error_text = (
+ '-r' => 'is not readable by effective uid/gid',
+ '-w' => 'is not writeable by effective uid/gid',
+ '-x' => 'is not executable by effective uid/gid',
+ '-R' => 'is not readable by real uid/gid',
+ '-W' => 'is not writeable by real uid/gid',
+ '-X' => 'is not executable by real uid/gid',
+ '-o' => 'is not owned by effective uid/gid',
+ '-O' => 'is not owned by real uid/gid',
+ '-e' => 'does not exist',
+ '-z' => 'is not of size zero',
+ '-s' => 'does not exists or is of size zero',
+ '-f' => 'is not a file',
+ '-d' => 'is not a directory',
+ '-l' => 'is not a link',
+ '-S' => 'is not a socket',
+ '-p' => 'is not a named pipe',
+ '-b' => 'is not a block special file',
+ '-c' => 'is not a character special file',
+ '-u' => 'is not setuid',
+ '-g' => 'is not setgid',
+ '-k' => 'is not sticky',
+ '-t' => 'is not a terminal file',
+ '-T' => 'is not a text file',
+ '-B' => 'is not a binary file',
+ '-M' => 'has no modification date/time',
+ '-A' => 'has no access date/time',
+ '-C' => 'has no inode change date/time',
+ );
+
+# Documentation after __END__
+
+sub import {
+ if (defined $_[1] and $_[1] eq 'as_default') {
+ local $^W = 0;
+ package Tk;
+ if ($Tk::VERSION < 804) {
+ *FDialog = \&Tk::FileSelect::FDialog;
+ *MotifFDialog = \&Tk::FileSelect::FDialog;
+ } else {
+ *tk_getOpenFile = sub {
+ Tk::FileSelect::FDialog("tk_getOpenFile", @_);
+ };
+ *tk_getSaveFile = sub {
+ Tk::FileSelect::FDialog("tk_getSaveFile", @_);
+ };
+ }
+ }
+}
+
+sub Cancel
+{
+ my ($cw) = @_;
+ $cw->{Selected} = undef;
+ $cw->withdraw unless $cw->cget('-transient');
+}
+
+sub Accept {
+
+ # Accept the file or directory name if possible.
+
+ my ($cw) = @_;
+
+ my($path, $so) = ($cw->cget('-directory'), $cw->SelectionOwner);
+ my $leaf = undef;
+ my $leaves;
+
+ if (defined $so and
+ $so == $cw->Subwidget('dir_list')->Subwidget('listbox')) {
+ $leaves = [$cw->Subwidget('dir_list')->getSelected];
+ $leaves = [$cw->Subwidget('dir_entry')->get] if !scalar(@$leaves);
+ } else {
+ $leaves = [$cw->Subwidget('file_list')->getSelected];
+ $leaves = [$cw->Subwidget('file_entry')->get] if !scalar(@$leaves);
+ }
+
+ foreach $leaf (@$leaves)
+ {
+ if (defined $leaf and $leaf ne '') {
+ if (!$cw->cget('-create') || -e "$path/$leaf")
+ {
+ foreach (@{$cw->cget('-verify')}) {
+ my $r = ref $_;
+ if (defined $r and $r eq 'ARRAY') {
+ #local $_ = $leaf; # use strict var problem here
+ return if not &{$_->[0]}($cw, $path, $leaf, @{$_}[1..$#{$_}]);
+ } else {
+ my $s = eval "$_ '$path/$leaf'";
+ print $@ if $@;
+ if (not $s) {
+ my $err;
+ if (substr($_,0,1) eq '!')
+ {
+ my $t = substr($_,1);
+ if (exists $error_text{$t})
+ {
+ $err = $error_text{$t};
+ $err =~ s/\b(?:no|not) //;
+ }
+ }
+ $err = $error_text{$_} unless defined $err;
+ $err = "failed '$_' test" unless defined $err;
+ $cw->Error("'$leaf' $err.");
+ return;
+ }
+ }
+ } # forend
+ }
+ else
+ {
+ unless (-w $path)
+ {
+ $cw->Error("Cannot write to $path");
+ return;
+ }
+ }
+ $leaf = $path . '/' . $leaf;
+ } else {
+ $leaf = undef;
+ }
+ }
+ if (scalar(@$leaves))
+ {
+ my $sm = $cw->Subwidget('file_list')->cget(-selectmode);
+ $cw->{Selected} = $leaves;
+ my $command = $cw->cget('-command');
+ $command->Call(@{$cw->{Selected}}) if defined $command;
+ }
+
+} # end Accept
+
+sub Accept_dir
+{
+ my ($cw,$new) = @_;
+ my $dir = $cw->cget('-directory');
+ $cw->configure(-directory => "$dir/$new");
+}
+
+sub Populate {
+
+ my ($w, $args) = @_;
+
+ require Tk::Listbox;
+ require Tk::Button;
+ require Tk::Dialog;
+ require Tk::Toplevel;
+ require Tk::LabEntry;
+ require Cwd;
+
+ $w->SUPER::Populate($args);
+ $w->protocol('WM_DELETE_WINDOW' => ['Cancel', $w ]);
+
+ $w->{'reread'} = 0;
+ $w->withdraw;
+
+ # Create directory/filter entry, place at the top.
+ my $e = $w->Component(
+ LabEntry => 'dir_entry',
+ -textvariable => \$w->{DirectoryString},
+ -labelVariable => \$w->{Configure}{-dirlabel},
+ );
+ $e->pack(-side => 'top', -expand => 0, -fill => 'x');
+ $e->bind('<Return>' => [$w => 'validateDir', Ev(['get'])]);
+
+ # Create file entry, place at the bottom.
+ $e = $w->Component(
+ LabEntry => 'file_entry',
+ -textvariable => \$w->{Configure}{-initialfile},
+ -labelVariable => \$w->{Configure}{-filelabel},
+ );
+ $e->pack(-side => 'bottom', -expand => 0, -fill => 'x');
+ $e->bind('<Return>' => [$w => 'validateFile', Ev(['get'])]);
+ $e->bind('<FocusIn>' => [$w => 'SelectionClear']);
+
+ # Create directory scrollbox, place at the left-middle.
+ my $b = $w->Component(
+ ScrlListbox => 'dir_list',
+ -labelVariable => \$w->{Configure}{-dirlistlabel},
+ -scrollbars => 'se',
+ );
+ $b->pack(-side => 'left', -expand => 1, -fill => 'both');
+ $b->bind('<Double-Button-1>' => [$w => 'Accept_dir', Ev(['getSelected'])]);
+
+ # Add a label.
+
+ my $f = $w->Frame();
+ $f->pack(-side => 'right', -fill => 'y', -expand => 0);
+ $b = $f->Button('-textvariable' => \$w->{'Configure'}{'-acceptlabel'},
+ -command => [ 'Accept', $w ],
+ );
+ $b->pack(-side => 'top', -fill => 'x', -expand => 1);
+ $b = $f->Button('-textvariable' => \$w->{'Configure'}{'-cancellabel'},
+ -command => [ 'Cancel', $w ],
+ );
+ $b->pack(-side => 'top', -fill => 'x', -expand => 1);
+ $b = $f->Button('-textvariable' => \$w->{'Configure'}{'-resetlabel'},
+ -command => [$w => 'configure','-directory','.'],
+ );
+ $b->pack(-side => 'top', -fill => 'x', -expand => 1);
+ $b = $f->Button('-textvariable' => \$w->{'Configure'}{'-homelabel'},
+ -command => [$w => 'configure','-directory',$ENV{'HOME'}],
+ );
+ $b->pack(-side => 'top', -fill => 'x', -expand => 1);
+
+ # Create file scrollbox, place at the right-middle.
+
+ $b = $w->Component(
+ ScrlListbox => 'file_list',
+ -labelVariable => \$w->{Configure}{-filelistlabel},
+ -scrollbars => 'se',
+ );
+ $b->pack(-side => 'right', -expand => 1, -fill => 'both');
+ $b->bind('<Double-1>' => [$w => 'Accept']);
+
+ # Create -very dialog.
+
+ my $v = $w->Component(
+ Dialog => 'dialog',
+ -title => 'Verify Error',
+ -bitmap => 'error',
+ -buttons => ['Dismiss'],
+ );
+
+ $w->ConfigSpecs(
+ -width => [ ['file_list','dir_list'], undef, undef, 14 ],
+ -height => [ ['file_list','dir_list'], undef, undef, 14 ],
+ -directory => [ 'METHOD', undef, undef, '.' ],
+ -initialdir => '-directory',
+ -filelabel => [ 'PASSIVE', 'fileLabel', 'FileLabel', 'File' ],
+ -initialfile => [ 'PASSIVE', undef, undef, '' ],
+ -filelistlabel => [ 'PASSIVE', undef, undef, 'Files' ],
+ -filter => [ 'METHOD', undef, undef, undef ],
+ -defaultextension => [ 'METHOD', undef, undef, undef ],
+ -regexp => [ 'METHOD', undef, undef, undef ],
+ -dirlistlabel => [ 'PASSIVE', undef, undef, 'Directories'],
+ -dirlabel => [ 'PASSIVE', undef, undef, 'Directory'],
+ '-accept' => [ 'CALLBACK',undef,undef, undef ],
+ -command => [ 'CALLBACK',undef,undef, undef ],
+ -transient => [ 'PASSIVE', undef, undef, 1 ],
+ -verify => [ 'PASSIVE', undef, undef, ['!-d'] ],
+ -create => [ 'PASSIVE', undef, undef, 0 ],
+ -acceptlabel => [ 'PASSIVE', undef, undef, 'Accept'],
+ -cancellabel => [ 'PASSIVE', undef, undef, 'Cancel'],
+ -resetlabel => [ 'PASSIVE', undef, undef, 'Reset'],
+ -homelabel => [ 'PASSIVE', undef, undef, 'Home'],
+ DEFAULT => [ 'file_list' ],
+ );
+ $w->Delegates(DEFAULT => 'file_list');
+
+ return $w;
+
+} # end Populate
+
+sub translate
+ {
+ my ($bs,$ch) = @_;
+ return "\\$ch" if (length $bs);
+ return '.*' if ($ch eq '*');
+ return '.' if ($ch eq '?');
+ return "\\." if ($ch eq '.');
+ return "\\/" if ($ch eq '/');
+ return "\\\\" if ($ch eq '\\');
+ return $ch;
+}
+
+sub glob_to_re
+{
+ my $regex = shift;
+ $regex =~ s/(\\?)(.)/&translate($1,$2)/ge;
+ return sub { shift =~ /^${regex}$/ };
+}
+
+sub filter
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-filter'};
+ if (@_ > 1 || !defined($$var))
+ {
+ $val = '*' unless defined $val;
+ $$var = $val;
+ $cw->{'match'} = glob_to_re($val) unless defined $cw->{'match'};
+ unless ($cw->{'reread'}++)
+ {
+ $cw->Busy;
+ $cw->afterIdle(['reread',$cw,$cw->cget('-directory')])
+ }
+ }
+ return $$var;
+}
+
+sub regexp
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-regexp'};
+ if (@_ > 1)
+ {
+ $$var = $val;
+ $cw->{'match'} = (defined $val) ? sub { shift =~ m|^${val}$| } : sub { 1 };
+ unless ($cw->{'reread'}++)
+ {
+ $cw->Busy;
+ $cw->afterIdle(['reread',$cw])
+ }
+ }
+ return $$var;
+}
+
+sub defaultextension
+{
+ my ($cw,$val) = @_;
+ if (@_ > 1)
+ {
+ $val = '' unless defined $val;
+ $val = ".$val" if ($val !~ /^\./);
+ $cw->filter("*$val");
+ }
+ else
+ {
+ $val = $cw->filter;
+ my ($ext) = $val =~ /(\.[^\.]*)$/;
+ return $ext;
+ }
+}
+
+sub directory
+{
+ my ($cw,$dir) = @_;
+ my $var = \$cw->{Configure}{'-directory'};
+ if (@_ > 1 && defined $dir)
+ {
+ if (substr($dir,0,1) eq '~')
+ {
+ if (substr($dir,1,1) eq '/')
+ {
+ $dir = (defined $ENV{'HOME'} ? $ENV{'HOME'} : '') . substr($dir,1);
+ }
+ else
+ {my ($uid,$rest) = ($dir =~ m#^~([^/]+)(/.*$)#);
+ $dir = (getpwnam($uid))[7] . $rest;
+ }
+ }
+ my $revert_dir = sub
+ {
+ my $message = shift;
+ $$var = $cw->{OldDirectory};
+ $cw->messageBox(-message => $message, -icon => 'error');
+ if (!defined $$var)
+ {
+ # OldDirectory was never set, so force reread...
+ $$var = $cw->{OldDirectory} = Cwd::getcwd(); # XXX maybe use check like code below...
+ unless ($cw->{'reread'}++)
+ {
+ $cw->Busy;
+ $cw->afterIdle(['reread',$cw])
+ }
+ }
+ $$var;
+ };
+ $dir =~ s#([^/\\])[\\/]+$#$1#;
+ if (-d $dir)
+ {
+ unless (Tk::tainting())
+ {
+ my $pwd = Cwd::getcwd();
+ if (chdir( (defined($dir) ? $dir : '') ) )
+ {
+ my $new = Cwd::getcwd();
+ if ($new)
+ {
+ $dir = $new;
+ }
+ else
+ {
+ return $revert_dir->("Cannot getcwd in '$dir'");
+ }
+ if (!chdir($pwd))
+ {
+ return $revert_dir->("Cannot change directory to $pwd:\n$!");
+ }
+ $$var = $dir;
+ }
+ else
+ {
+ return $revert_dir->("Cannot change directory to $dir:\n$!");
+ }
+ $$var = $cw->{OldDirectory} = $dir;
+ }
+ unless ($cw->{'reread'}++)
+ {
+ $cw->Busy;
+ $cw->afterIdle(['reread',$cw])
+ }
+ }
+ }
+ return $$var;
+}
+
+sub reread
+{
+ my ($w) = @_;
+ my $dir = $w->cget('-directory');
+ if (defined $dir)
+ {
+ if (!defined $w->cget('-filter') or $w->cget('-filter') eq '')
+ {
+ $w->configure('-filter', '*');
+ }
+ my $dl = $w->Subwidget('dir_list');
+ $dl->delete(0, 'end');
+ $dl->selectionClear(0,'end');
+ my $fl = $w->Subwidget('file_list');
+ $fl->delete(0, 'end');
+ local *DIR;
+ if (opendir(DIR, $dir))
+ {
+ my $file = $w->cget('-initialfile');
+ my $seen = 0;
+ my $accept = $w->cget('-accept');
+ foreach my $f (sort(readdir(DIR)))
+ {
+ next if ($f eq '.');
+ my $path = "$dir/$f";
+ if (-d $path)
+ {
+ $dl->insert('end', $f);
+ }
+ else
+ {
+ if (&{$w->{match}}($f))
+ {
+ if (!defined($accept) || $accept->Call($path))
+ {
+ $seen = $fl->index('end') if ($file && $f eq $file);
+ $fl->insert('end', $f)
+ }
+ }
+ }
+ }
+ closedir(DIR);
+ if ($seen)
+ {
+ $fl->selectionSet($seen);
+ $fl->see($seen);
+ }
+ else
+ {
+ $w->configure(-initialfile => undef) unless $w->cget('-create');
+ }
+ }
+ $w->{DirectoryString} = $dir . ($dir ne '/' ? '/' : '') . $w->cget('-filter');
+ }
+ $w->{'reread'} = 0;
+ $w->Unbusy if $w->{'Busy'};
+}
+
+sub validateDir
+{
+ my ($cw,$name) = @_;
+ my ($leaf,$base) = fileparse($name);
+ if ($leaf =~ /[*?]/)
+ {
+ $cw->configure('-directory' => $base,'-filter' => $leaf);
+ }
+ else
+ {
+ $cw->configure('-directory' => $name);
+ }
+}
+
+sub validateFile
+{
+ my ($cw,$name) = @_;
+ my $i = 0;
+ my $n = $cw->index('end');
+ # See if it is an existing file
+ for ($i= 0; $i < $n; $i++)
+ {
+ my $f = $cw->get($i);
+ if ($f eq $name)
+ {
+ $cw->selection('set',$i);
+ $cw->Accept;
+ }
+ }
+ # otherwise allow if -create is set, directory is writable
+ # and it passes filter and accept criteria
+ if ($cw->cget('-create'))
+ {
+ my $path = $cw->cget('-directory');
+ if (-w $path)
+ {
+ if (&{$cw->{match}}($name))
+ {
+ my $accept = $cw->cget('-accept');
+ my $full = "$path/$name";
+ if (!defined($accept) || $accept->Call($full))
+ {
+ $cw->{Selected} = [$full];
+ $cw->Callback(-command => @{$cw->{Selected}});
+ }
+ else
+ {
+ $cw->Error("$name is not 'acceptable'");
+ }
+ }
+ else
+ {
+ $cw->Error("$name does not match '".$cw->cget('-filter').'\'');
+ }
+ }
+ else
+ {
+ $cw->Error("Directory '$path' is not writable");
+ return;
+ }
+ }
+}
+
+sub Error
+{
+ my $cw = shift;
+ my $msg = shift;
+ my $dlg = $cw->Subwidget('dialog');
+ $dlg->configure(-text => $msg);
+ $dlg->Show;
+}
+
+sub Show
+{
+ my ($cw,@args) = @_;
+ if ($cw->cget('-transient')) {
+ $cw->Popup(@args);
+ $cw->focus;
+ $cw->waitVariable(\$cw->{Selected});
+ $cw->withdraw;
+ return defined($cw->{Selected})
+ ? (wantarray) ? @{$cw->{Selected}} : $cw->{Selected}[0]
+ : undef;
+ } else {
+ $cw->Popup(@args);
+ }
+}
+
+sub FDialog
+{
+ my($cmd, %args) = @_;
+ if ($cmd =~ /Save/)
+ {
+ $args{-create} = 1;
+ $args{-verify} = [qw(!-d -w)];
+ }
+ delete $args{-filetypes};
+ delete $args{-force};
+ Tk::DialogWrapper('FileSelect',$cmd, %args);
+}
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm b/Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm
new file mode 100644
index 00000000000..eb6465dbe61
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/FloatEntry.pm
@@ -0,0 +1,109 @@
+# Tranlation of FloatEnt.tcl in Tix4.1
+
+# TODO/IDEA:
+# o extract a widget (SimpleEntry?) without post/unpost methods
+# and derive FloatEntry fron this widget.
+
+package Tk::FloatEntry;
+use strict;
+
+BEGIN
+ {
+ use vars '$DEBUG';
+ $DEBUG = (defined($ENV{USER}) and $ENV{USER} eq 'achx') ? 1 : 0;
+ print STDERR "tixGrid: debug = $DEBUG\n" if $DEBUG;
+ }
+
+require Tk;
+require Tk::Widget;
+require Tk::Derived;
+require Tk::Entry;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/TixGrid/FloatEntry.pm#4 $
+
+use base qw(Tk::Derived Tk::Entry);
+
+Construct Tk::Widget 'FloatEntry';
+
+sub ClassInit
+ {
+ my ($class, $mw) = @_;
+ $class->SUPER::ClassInit($mw);
+ $mw->bind($class, '<Return>', 'invoke');
+ $mw->bind($class, '<FocusIn>', 'FocusIn');
+ $class;
+ }
+
+sub Populate
+ {
+ my ($e, $args) = @_;
+ $e->ConfigSpecs(
+ -value => ['METHOD', 'value', 'Value', undef],
+ -highlightthickness => [$e, 'highlightThickness', 'HighlightThickness', 0 ],
+ -command => ['CALLBACK', 'command', 'Command', undef],
+ );
+ print "FloatEntry Init: $e\n" if $DEBUG;
+ $e;
+ }
+
+## option method
+
+sub value
+ {
+ my $e = shift;
+ unless (@_)
+ {
+ return $e->get
+ }
+ $e->delete(0,'end');
+ $e->insert(0,$_[0]);
+ $e->selection('from', 0);
+ $e->selection('to', 'end');
+
+ }
+
+## public methods
+
+sub invoke
+ {
+ my ($e) = @_;
+ $e->Callback('-command', $e->get);
+ }
+
+sub post
+ {
+ my ($e, $x, $y, $dx, $dy) = @_;
+
+ $dx = $e->reqwidth unless defined $dx;
+ $dy = $e->reqheight unless defined $dy;
+
+ $e->place('-x'=>$x, '-y'=>$y, -width=>$dx, -height=>$dy, -bordermode=>'ignore');
+ $e->raise;
+ $e->focus;
+ }
+
+sub unpost
+ {
+ my ($e) = @_;
+ $e->place('forget');
+ }
+
+## bindings
+
+sub FocusIn
+ {
+ my ($e) = @_;
+
+ # FIX: xxx only if entry has not already focus
+ {
+ $e->focus;
+ $e->selection('from', 0);
+ $e->selection('to', 'end');
+ $e->icursor('end');
+ }
+ }
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Font.pm b/Master/tlpkg/tlperl/lib/Tk/Font.pm
new file mode 100644
index 00000000000..bb1b52cc7c5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Font.pm
@@ -0,0 +1,163 @@
+package Tk::Font;
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Font.pm#4 $
+require Tk::Widget;
+use strict;
+use Carp;
+use overload '""' => 'as_string';
+sub as_string { return ${$_[0]} }
+
+*MainWindow = \&Tk::Widget::MainWindow;
+
+foreach my $key (qw(actual metrics measure configure))
+ {
+ no strict 'refs';
+ *{$key} = sub { shift->Tk::font($key,@_) };
+ }
+
+Construct Tk::Widget 'Font';
+
+my @xfield = qw(foundry family weight slant swidth adstyle pixel
+ point xres yres space avgwidth registry encoding);
+my @tkfield = qw(family size weight slant underline overstrike);
+my %tkfield = map { $_ => "-$_" } @tkfield;
+
+sub _xonly { my $old = '*'; return $old }
+
+sub Pixel
+{
+ my $me = shift;
+ my $old = $me->configure('-size');
+ $old = '*' if ($old > 0);
+ if (@_)
+ {
+ $me->configure(-size => -$_[0]);
+ }
+ return $old;
+}
+
+sub Point
+{
+ my $me = shift;
+ my $old = 10*$me->configure('-size');
+ $old = '*' if ($old < 0);
+ if (@_)
+ {
+ $me->configure(-size => int($_[0]/10));
+ }
+ return $old;
+}
+
+foreach my $f (@tkfield,@xfield)
+ {
+ no strict 'refs';
+ my $sub = "\u$f";
+ unless (defined &{$sub})
+ {
+ my $key = $tkfield{$f};
+ if (defined $key)
+ {
+ *{$sub} = sub { shift->configure($key,@_) };
+ }
+ else
+ {
+ *{$sub} = \&_xonly;
+ }
+ }
+ }
+
+sub new
+{
+ my $pkg = shift;
+ my $w = shift;
+ my $me;
+ if (scalar(@_) == 1)
+ {
+ $me = $w->Tk::font('create',@_);
+ }
+ else
+ {
+ croak 'Odd number of args' if @_ & 1;
+ my %attr;
+ while (@_)
+ {
+ my $k = shift;
+ my $v = shift;
+ my $t = (substr($k,0,1) eq '-') ? $k : $tkfield{$k};
+ if (defined $t)
+ {
+ $attr{$t} = $v;
+ }
+ elsif ($k eq 'point')
+ {
+ $attr{'-size'} = -int($v/10+0.5);
+ }
+ elsif ($k eq 'pixel')
+ {
+ $attr{'-size'} = -$v;
+ }
+ else
+ {
+ carp "$k ignored" if $^W;
+ }
+ }
+ $me = $w->Tk::font('create',%attr);
+ }
+ return bless $me,$pkg;
+}
+
+sub Pattern
+{
+ my $me = shift;
+ my @str;
+ foreach my $f (@xfield)
+ {
+ my $meth = "\u$f";
+ my $str = $me->$meth();
+ if ($f eq 'family')
+ {
+ $str =~ s/(?:Times\s+New\s+Roman|New York)/Times/i;
+ $str =~ s/(?:Courier\s+New|Monaco)/Courier/i;
+ $str =~ s/(?:Arial|Geneva)/Helvetica/i;
+ }
+ elsif ($f eq 'slant')
+ {
+ $str = substr($str,0,1);
+ }
+ elsif ($f eq 'weight')
+ {
+ $str = 'medium' if ($str eq 'normal');
+ }
+ push(@str,$str);
+ }
+ return join('-', '', @str);
+}
+
+sub Name
+{
+ my $me = shift;
+ return $$me if (!wantarray || ($^O eq 'MSWin32'));
+ my $max = shift || 128;
+ my $w = $me->MainWindow;
+ my $d = $w->Display;
+ return $d->XListFonts($me->Pattern,$max);
+}
+
+sub Clone
+{
+ my $me = shift;
+ return ref($me)->new($me,$me->actual,@_);
+}
+
+sub ascent
+{
+ return shift->metrics('-ascent');
+}
+
+sub descent
+{
+ return shift->metrics('-descent');
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Frame.pm b/Master/tlpkg/tlperl/lib/Tk/Frame.pm
new file mode 100644
index 00000000000..a5716cdf9bd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Frame.pm
@@ -0,0 +1,378 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Frame;
+require Tk::Widget;
+require Tk::Derived;
+use AutoLoader;
+use strict qw(vars);
+use Carp;
+
+use base qw(Tk::Derived Tk::Widget);
+
+Construct Tk::Widget 'Frame';
+
+use vars qw($VERSION);
+$VERSION = '4.010'; # $Id: //depot/Tkutf8/Tk/Frame.pm#10 $
+
+sub Tk_cmd { \&Tk::frame }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-colormap','-visual','-container')
+}
+
+sub Default
+{
+ my ($cw,$name,$widget) = @_;
+ confess 'No name' unless (defined $name);
+ croak 'No widget' unless (defined $widget);
+ $cw->Delegates(DEFAULT => $widget);
+ $cw->ConfigSpecs(DEFAULT => [$widget]);
+ $widget->pack('-expand' => 1, -fill => 'both') unless ($widget->manager); # Suspect
+ $cw->Advertise($name,$widget);
+}
+
+sub ConfigDelegate
+{
+ my ($cw,$name,@skip) = @_;
+ my $sw = $cw->Subwidget($name);
+ my $sc;
+ my %skip = ();
+ foreach $sc (@skip)
+ {
+ $skip{$sc} = 1;
+ }
+ foreach $sc ($sw->configure)
+ {
+ my (@info) = @$sc;
+ next if (@info == 2);
+ my $option = $info[0];
+ unless ($skip{$option})
+ {
+ $option =~ s/^-(.*)/-$name\u$1/;
+ $info[0] = Tk::Configure->new($sw,$info[0]);
+ pop(@info);
+ $cw->ConfigSpecs($option => \@info);
+ }
+ }
+}
+
+sub bind
+{my ($cw,@args) = @_;
+ $cw->Delegate('bind',@args);
+}
+
+sub menu
+{my ($cw,@args) = @_;
+ $cw->Delegate('menu',@args);
+}
+
+sub focus
+{my ($cw,@args) = @_;
+ $cw->Delegate('focus',@args);
+}
+
+#sub bindtags
+#{my ($cw,@args) = @_;
+# $cw->Delegate('bindtags',@args);
+#}
+
+sub selection
+{my ($cw,@args) = @_;
+ $cw->Delegate('selection',@args);
+}
+
+sub autoLabel { 1 }
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ if ($cw->autoLabel)
+ {
+ $cw->ConfigSpecs('-labelPack' => [ 'METHOD', undef, undef, undef]);
+ $cw->ConfigSpecs('-labelVariable' => [ 'METHOD', undef, undef, undef]);
+ $cw->ConfigSpecs('-label' => [ 'METHOD', undef, undef, undef]);
+ $cw->labelPack([]) if grep /^-label\w+/, keys %$args;
+ }
+}
+
+sub Menubar
+{
+ my $frame = shift;
+ my $menu = $frame->cget('-menu');
+ if (defined $menu)
+ {
+ $menu->configure(@_) if @_;
+ }
+ else
+ {
+ $menu = $frame->Menu(-type => 'menubar',@_);
+ $frame->configure('-menu' => $menu);
+ }
+ $frame->Advertise('menubar' => $menu);
+ return $menu;
+}
+
+1;
+
+__END__
+
+sub labelPack
+{
+ my ($cw,$val) = @_;
+ my $w = $cw->Subwidget('label');
+ my @result = ();
+ if (@_ > 1)
+ {
+ if (defined($w) && !defined($val))
+ {
+ $w->packForget;
+ }
+ elsif (defined($val) && !defined ($w))
+ {
+ require Tk::Label;
+ $w = Tk::Label->new($cw,-textvariable => $cw->labelVariable);
+ $cw->Advertise('label' => $w);
+ $cw->ConfigDelegate('label',qw(-text -textvariable));
+ }
+ if (defined($val) && defined($w))
+ {
+ my %pack = @$val;
+ unless (exists $pack{-side})
+ {
+ $pack{-side} = 'top' unless (exists $pack{-side});
+ }
+ unless (exists $pack{-fill})
+ {
+ $pack{-fill} = 'x' if ($pack{-side} =~ /(top|bottom)/);
+ $pack{-fill} = 'y' if ($pack{-side} =~ /(left|right)/);
+ }
+ unless (exists($pack{'-before'}) || exists($pack{'-after'}))
+ {
+ my $before = ($cw->packSlaves)[0];
+ $pack{'-before'} = $before if (defined $before);
+ }
+ $w->pack(%pack);
+ }
+ }
+ @result = $w->packInfo if (defined $w);
+ return (wantarray) ? @result : \@result;
+}
+
+sub labelVariable
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-labelVariable'};
+ if (@_ > 1 && defined $val)
+ {
+ $$var = $val;
+ $$val = '' unless (defined $$val);
+ my $w = $cw->Subwidget('label');
+ unless (defined $w)
+ {
+ $cw->labelPack([]);
+ $w = $cw->Subwidget('label');
+ }
+ $w->configure(-textvariable => $val);
+ }
+ return $$var;
+}
+
+sub label
+{
+ my ($cw,$val) = @_;
+ my $var = $cw->cget('-labelVariable');
+ if (@_ > 1 && defined $val)
+ {
+ if (!defined $var)
+ {
+ $var = \$cw->{Configure}{'-label'};
+ $cw->labelVariable($var);
+ }
+ $$var = $val;
+ }
+ return (defined $var) ? $$var : undef;;
+}
+
+sub queuePack
+{
+ my ($cw) = @_;
+ unless ($cw->{'pack_pending'})
+ {
+ $cw->{'pack_pending'} = 1;
+ $cw->afterIdle([$cw,'packscrollbars']);
+ }
+}
+
+sub sbset
+{
+ my ($cw,$sb,$ref,@args) = @_;
+ $sb->set(@args);
+ $cw->queuePack if (@args == 2 && $sb->Needed != $$ref);
+}
+
+sub freeze_on_map
+{
+ my ($w) = @_;
+ unless ($w->Tk::bind('Freeze','<Map>'))
+ {
+ $w->Tk::bind('Freeze','<Map>',['packPropagate' => 0])
+ }
+ $w->AddBindTag('Freeze');
+}
+
+sub AddScrollbars
+{
+ require Tk::Scrollbar;
+ my ($cw,$w) = @_;
+ my $def = '';
+ my ($x,$y) = ('','');
+ my $s = 0;
+ my $c;
+ $cw->freeze_on_map;
+ foreach $c ($w->configure)
+ {
+ my $opt = $c->[0];
+ if ($opt eq '-yscrollcommand')
+ {
+ my $slice = Tk::Frame->new($cw,Name => 'ysbslice');
+ my $ysb = Tk::Scrollbar->new($slice,-orient => 'vertical', -command => [ 'yview', $w ]);
+ my $size = $ysb->cget('-width');
+ my $corner = Tk::Frame->new($slice,Name=>'corner','-relief' => 'raised',
+ '-width' => $size, '-height' => $size);
+ $ysb->pack(-side => 'left', -fill => 'y');
+ $cw->Advertise('yscrollbar' => $ysb);
+ $cw->Advertise('corner' => $corner);
+ $cw->Advertise('ysbslice' => $slice);
+ $corner->{'before'} = $ysb->PathName;
+ $slice->{'before'} = $w->PathName;
+ $y = 'w';
+ $s = 1;
+ }
+ elsif ($opt eq '-xscrollcommand')
+ {
+ my $xsb = Tk::Scrollbar->new($cw,-orient => 'horizontal', -command => [ 'xview', $w ]);
+ $cw->Advertise('xscrollbar' => $xsb);
+ $xsb->{'before'} = $w->PathName;
+ $x = 's';
+ $s = 1;
+ }
+ }
+ if ($s)
+ {
+ $cw->Advertise('scrolled' => $w);
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]);
+ }
+}
+
+sub packscrollbars
+{
+ my ($cw) = @_;
+ my $opt = $cw->cget('-scrollbars');
+ my $slice = $cw->Subwidget('ysbslice');
+ my $xsb = $cw->Subwidget('xscrollbar');
+ my $corner = $cw->Subwidget('corner');
+ my $w = $cw->Subwidget('scrolled');
+ my $xside = (($opt =~ /n/) ? 'top' : 'bottom');
+ my $havex = 0;
+ my $havey = 0;
+ $opt =~ s/r//;
+ $cw->{'pack_pending'} = 0;
+ if (defined $slice)
+ {
+ my $reqy;
+ my $ysb = $cw->Subwidget('yscrollbar');
+ if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed))
+ {
+ my $yside = (($opt =~ /w/) ? 'left' : 'right');
+ $slice->pack(-side => $yside, -fill => 'y',-before => $slice->{'before'});
+ $havey = 1;
+ if ($reqy)
+ {
+ $w->configure(-yscrollcommand => ['set', $ysb]);
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => ['sbset', $cw, $ysb, \$cw->{'packysb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => undef) unless $opt =~ s/[we]//;
+ $slice->packForget;
+ }
+ $cw->{'packysb'} = $havey;
+ }
+ if (defined $xsb)
+ {
+ my $reqx;
+ if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed))
+ {
+ $xsb->pack(-side => $xside, -fill => 'x',-before => $xsb->{'before'});
+ $havex = 1;
+ if ($reqx)
+ {
+ $w->configure(-xscrollcommand => ['set', $xsb]);
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => ['sbset', $cw, $xsb, \$cw->{'packxsb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => undef) unless $opt =~ s/[ns]//;
+ $xsb->packForget;
+ }
+ $cw->{'packxsb'} = $havex;
+ }
+ if (defined $corner)
+ {
+ if ($havex && $havey && defined $corner->{'before'})
+ {
+ my $anchor = $opt;
+ $anchor =~ s/o//g;
+ $corner->configure(-height => $xsb->ReqHeight);
+ $corner->pack(-before => $corner->{'before'}, -side => $xside,
+ -anchor => $anchor, -fill => 'x');
+ }
+ else
+ {
+ $corner->packForget;
+ }
+ }
+}
+
+sub scrollbars
+{
+ my ($cw,$opt) = @_;
+ my $var = \$cw->{'-scrollbars'};
+ if (@_ > 1)
+ {
+ my $old = $$var;
+ if (!defined $old || $old ne $opt)
+ {
+ $$var = $opt;
+ $cw->queuePack;
+ }
+ }
+ return $$var;
+}
+
+sub FindMenu
+{
+ my ($w,$char) = @_;
+ my $child;
+ my $match;
+ foreach $child ($w->children)
+ {
+ next unless (ref $child);
+ $match = $child->FindMenu($char);
+ return $match if (defined $match);
+ }
+ return undef;
+}
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/HList.pm b/Master/tlpkg/tlperl/lib/Tk/HList.pm
new file mode 100644
index 00000000000..02792208243
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/HList.pm
@@ -0,0 +1,680 @@
+package Tk::HList;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #14 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev $XS_VERSION);
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'HList';
+sub Tk::Widget::ScrlHList { shift->Scrolled('HList'=>@_) }
+
+bootstrap Tk::HList;
+
+sub Tk_cmd { \&Tk::hlist }
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ my @result = $package->SUPER::CreateArgs($parent,$args);
+ my $columns = delete $args->{-columns};
+ push(@result, '-columns' => $columns) if (defined $columns);
+ return @result;
+}
+
+Tk::Methods qw(add addchild anchor column
+ delete dragsite dropsite entrycget
+ entryconfigure geometryinfo indicator header hide item info
+ nearest see select selection show xview yview);
+
+use Tk::Submethods ( 'delete' => [qw(all entry offsprings siblings)],
+ 'header' => [qw(configure cget create delete exists size)],
+ 'indicator' => [qw(configure cget create delete exists size)],
+ 'info' => [qw(anchor bbox children data dragsite
+ dropsite exists hidden item next parent prev
+ selection)],
+ 'item' => [qw(configure cget create delete exists)],
+ 'selection' => [qw(clear get includes set)],
+ 'anchor' => [qw(clear set)],
+ 'column' => [qw(width)],
+ 'hide' => [qw(entry)],
+ );
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $mw->bind($class,'<ButtonPress-1>',[ 'Button1' ] );
+ $mw->bind($class,'<Shift-ButtonPress-1>',[ 'ShiftButton1' ] );
+ $mw->bind($class,'<Control-ButtonRelease-1>','Control_ButtonRelease_1');
+ $mw->bind($class,'<ButtonRelease-1>','ButtonRelease_1');
+ $mw->bind($class,'<Double-ButtonRelease-1>','NoOp');
+ $mw->bind($class,'<B1-Motion>',[ 'Button1Motion' ] );
+ $mw->bind($class,'<B1-Leave>',[ 'AutoScan' ] );
+
+ $mw->bind($class,'<Double-ButtonPress-1>',['Double1']);
+
+ $mw->bind($class,'<Control-B1-Motion>','Control_B1_Motion');
+ $mw->bind($class,'<Control-ButtonPress-1>',['CtrlButton1']);
+ $mw->bind($class,'<Control-Double-ButtonPress-1>',['CtrlButton1']);
+
+ $mw->bind($class,'<B1-Enter>','B1_Enter');
+
+ $mw->bind($class,'<Up>',['UpDown', 'prev']);
+ $mw->bind($class,'<Down>',['UpDown', 'next']);
+
+ $mw->bind($class,'<Shift-Up>',['ShiftUpDown', 'prev']);
+ $mw->bind($class,'<Shift-Down>',['ShiftUpDown', 'next']);
+
+ $mw->bind($class,'<Left>', ['LeftRight', 'left']);
+ $mw->bind($class,'<Right>',['LeftRight', 'right']);
+
+ $mw->PriorNextBind($class);
+ $mw->MouseWheelBind($class);
+
+ $mw->bind($class,'<Return>', ['KeyboardActivate']);
+ $mw->bind($class,'<space>', ['KeyboardBrowse']);
+ $mw->bind($class,'<Home>', ['KeyboardHome']);
+ $mw->bind($class,'<End>', ['KeyboardEnd']);
+
+ $mw->YMouseWheelBind($class);
+ $mw->XMouseWheelBind($class);
+
+ return $class;
+}
+
+sub Control_ButtonRelease_1
+{
+}
+
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat
+ if($w->cget('-selectmode') ne 'dragdrop');
+ $w->ButtonRelease1($Ev);
+}
+
+sub Control_B1_Motion
+{
+}
+
+sub B1_Enter
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat
+ if($w->cget('-selectmode') ne 'dragdrop');
+}
+
+sub Button1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+ delete $w->{tixindicator};
+
+ $w->focus() if($w->cget('-takefocus'));
+
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'dragdrop')
+ {
+ # $w->Send_WaitDrag($Ev->y);
+ return;
+ }
+
+ my $ent = $w->GetNearest($Ev->y, 1);
+
+ if (!defined($ent) || !length($ent))
+ {
+ $w->selectionClear;
+ $w->anchorClear;
+ return;
+ }
+
+ my @info = $w->info('item',$Ev->x, $Ev->y);
+ if (@info)
+ {
+ die 'Assert' unless $info[0] eq $ent;
+ }
+ else
+ {
+ @info = $ent;
+ }
+
+ if (defined($info[1]) && $info[1] eq 'indicator')
+ {
+ $w->{tixindicator} = $ent;
+ $w->Callback(-indicatorcmd => $ent, '<Arm>');
+ }
+ else
+ {
+ my $browse = 0;
+
+ if ($mode eq 'single')
+ {
+ $w->anchorSet($ent);
+ }
+ elsif ($mode eq 'browse')
+ {
+ $w->anchorSet($ent);
+ $w->selectionClear;
+ $w->selectionSet($ent);
+ $browse = 1;
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->selectionClear;
+ $w->anchorSet($ent);
+ $w->selectionSet($ent);
+ $browse = 1;
+ }
+ elsif ($mode eq 'extended')
+ {
+ $w->anchorSet($ent);
+ $w->selectionClear;
+ $w->selectionSet($ent);
+ $browse = 1;
+ }
+
+ if ($browse)
+ {
+ $w->Callback(-browsecmd => @info);
+ }
+ }
+}
+
+sub ShiftButton1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ my $to = $w->GetNearest($Ev->y, 1);
+
+ delete $w->{'shiftanchor'};
+ delete $w->{tixindicator};
+
+ return unless (defined($to) and length($to));
+
+ my $mode = $w->cget('-selectmode');
+
+ if($mode eq 'extended' or $mode eq 'multiple')
+ {
+ my $from = $w->info('anchor');
+ if(defined $from)
+ {
+ $w->selectionClear;
+ $w->selectionSet($from, $to);
+ }
+ else
+ {
+ $w->anchorSet($to);
+ $w->selectionClear;
+ $w->selectionSet($to);
+ }
+ }
+}
+
+sub GetNearest
+{
+ my ($w,$y,$undefafterend) = @_;
+ my $ent = $w->nearest($y);
+ if (defined $ent)
+ {
+ if ($undefafterend)
+ {
+ my $borderwidth = $w->cget('-borderwidth');
+ my $highlightthickness = $w->cget('-highlightthickness');
+ my $bottomy = ($w->infoBbox($ent))[3];
+ $bottomy += $borderwidth + $highlightthickness;
+ if ($w->header('exist', 0))
+ {
+ $bottomy += $w->header('height');
+ }
+ if ($y > $bottomy)
+ {
+ #print "$y > $bottomy\n";
+ return undef;
+ }
+ }
+ my $state = $w->entrycget($ent, '-state');
+ return $ent if (!defined($state) || $state ne 'disabled');
+ }
+ return undef;
+}
+
+sub ButtonRelease1
+{
+ my ($w, $Ev) = @_;
+
+ delete $w->{'shiftanchor'};
+
+ my $mode = $w->cget('-selectmode');
+
+ if($mode eq 'dragdrop')
+ {
+# $w->Send_DoneDrag();
+ return;
+ }
+
+ my ($x, $y) = ($Ev->x, $Ev->y);
+ my $ent = $w->GetNearest($y, 1);
+
+ if (!defined($ent) and $mode eq 'single')
+ {
+ my $ent = $w->info('selection');
+ if (defined $ent)
+ {
+ $w->anchorSet($ent);
+ }
+ }
+ return unless (defined($ent) and length($ent));
+
+ if (exists $w->{tixindicator})
+ {
+ return unless delete($w->{tixindicator}) eq $ent;
+ my @info = $w->info('item',$Ev->x, $Ev->y);
+ if(defined($info[1]) && $info[1] eq 'indicator')
+ {
+ $w->Callback(-indicatorcmd => $ent, '<Activate>');
+ }
+ else
+ {
+ $w->Callback(-indicatorcmd => $ent, '<Disarm>');
+ }
+ return;
+ }
+
+ if($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->anchorSet($ent);
+ $w->selectionClear;
+ $w->selectionSet($ent);
+
+ }
+ elsif($mode eq 'multiple')
+ {
+ $w->selectionSet($ent);
+ }
+ elsif($mode eq 'extended')
+ {
+ $w->selectionSet($ent);
+ }
+
+ $w->Callback(-browsecmd =>$ent);
+}
+
+sub Button1Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ return unless defined $Ev;
+
+ delete $w->{'shiftanchor'};
+
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'dragdrop')
+ {
+# $w->Send_StartDrag();
+ return;
+ }
+
+ my $ent;
+ if (defined $w->info('anchor'))
+ {
+ $ent = $w->GetNearest($Ev->y);
+ }
+ else
+ {
+ $ent = $w->GetNearest($Ev->y, 1);
+ }
+ return unless (defined($ent) and length($ent));
+
+ if(exists $w->{tixindicator})
+ {
+ my $event_type = $w->{tixindicator} eq $ent ? '<Arm>' : '<Disarm>';
+ $w->Callback(-indicatorcmd => $w->{tixindicator}, $event_type );
+ return;
+ }
+
+ if ($mode eq 'single')
+ {
+ $w->anchorSet($ent);
+ }
+ elsif ($mode eq 'multiple' || $mode eq 'extended')
+ {
+ my $from = $w->info('anchor');
+ if(defined $from)
+ {
+ $w->selectionClear;
+ $w->selectionSet($from, $ent);
+ }
+ else
+ {
+ $w->anchorSet($ent);
+ $w->selectionClear;
+ $w->selectionSet($ent);
+ }
+ }
+
+ if ($mode ne 'single')
+ {
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub Double1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ my $ent = $w->GetNearest($Ev->y, 1);
+
+ return unless (defined($ent) and length($ent));
+
+ $w->anchorSet($ent)
+ unless(defined $w->info('anchor'));
+
+ $w->selectionSet($ent);
+
+ $w->Callback(-command => $ent);
+}
+
+sub CtrlButton1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ my $ent = $w->GetNearest($Ev->y, 1);
+
+ return unless (defined($ent) and length($ent));
+
+ my $mode = $w->cget('-selectmode');
+
+ if($mode eq 'extended')
+ {
+ $w->anchorSet($ent) unless( defined $w->info('anchor') );
+
+ if($w->select('includes', $ent))
+ {
+ $w->select('clear', $ent);
+ }
+ else
+ {
+ $w->selectionSet($ent);
+ }
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub UpDown
+{
+ my $w = shift;
+ my $spec = shift;
+
+ my $done = 0;
+ my $anchor = $w->info('anchor');
+
+ delete $w->{'shiftanchor'};
+
+ unless( defined $anchor )
+ {
+ $anchor = ($w->info('children'))[0] || '';
+
+ return unless (defined($anchor) and length($anchor));
+
+ if($w->entrycget($anchor, '-state') ne 'disabled')
+ {
+ # That's a good anchor
+ $done = 1;
+ }
+ else
+ {
+ # We search for the first non-disabled entry (downward)
+ $spec = 'next';
+ }
+ }
+
+ my $ent = $anchor;
+
+ # Find the prev/next non-disabled entry
+ #
+ while(!$done)
+ {
+ $ent = $w->info($spec, $ent);
+ last unless( defined $ent );
+ next if( $w->entrycget($ent, '-state') eq 'disabled' );
+ next if( $w->info('hidden', $ent) );
+ last;
+ }
+
+ unless( defined $ent )
+ {
+ $w->yview('scroll', $spec eq 'prev' ? -1 : 1, 'unit');
+ return;
+ }
+
+ $w->anchorSet($ent);
+ $w->see($ent);
+
+ if($w->cget('-selectmode') ne 'single')
+ {
+ $w->selectionClear;
+ $w->selection('set', $ent);
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub ShiftUpDown
+{
+ my $w = shift;
+ my $spec = shift;
+
+ my $mode = $w->cget('-selectmode');
+
+ return $w->UpDown($spec)
+ if($mode eq 'single' || $mode eq 'browse');
+
+ my $anchor = $w->info('anchor');
+
+ return $w->UpDown($spec) unless (defined($anchor) and length($anchor));
+
+ my $done = 0;
+
+ $w->{'shiftanchor'} = $anchor unless( $w->{'shiftanchor'} );
+
+ my $ent = $w->{'shiftanchor'};
+
+ while( !$done )
+ {
+ $ent = $w->info($spec, $ent);
+ last unless( defined $ent );
+ next if( $w->entrycget($ent, '-state') eq 'disabled' );
+ next if( $w->info('hidden', $ent) );
+ last;
+ }
+
+ unless( $ent )
+ {
+ $w->yview('scroll', $spec eq 'prev' ? -1 : 1, 'unit');
+ return;
+ }
+
+ $w->selectionClear;
+ $w->selection('set', $anchor, $ent);
+ $w->see($ent);
+
+ $w->{'shiftanchor'} = $ent;
+
+ $w->Callback(-browsecmd =>$ent);
+}
+
+sub LeftRight
+{
+ my $w = shift;
+ my $spec = shift;
+
+ delete $w->{'shiftanchor'};
+
+ my $anchor = $w->info('anchor');
+
+ unless(defined $anchor)
+ {
+ $anchor = ($w->info('children'))[0] || '';
+ }
+
+ my $done = 0;
+ my $ent = $anchor;
+
+ while(!$done)
+ {
+ my $e = $ent;
+
+ if($spec eq 'left')
+ {
+ $ent = $w->info('parent', $e);
+
+ $ent = $w->info('prev', $e)
+ unless(defined $ent && $w->entrycget($ent, '-state') ne 'disabled')
+ }
+ else
+ {
+ $ent = ($w->info('children', $e))[0];
+
+ $ent = $w->info('next', $e)
+ unless(defined $ent && $w->entrycget($ent, '-state') ne 'disabled')
+ }
+
+ last unless( defined $ent );
+ last if($w->entrycget($ent, '-state') ne 'disabled');
+ }
+
+ unless( defined $ent )
+ {
+ $w->xview('scroll', $spec eq 'left' ? -1 : 1, 'unit');
+ return;
+ }
+
+ $w->anchorSet($ent);
+ $w->see($ent);
+
+ if($w->cget('-selectmode') ne 'single')
+ {
+ $w->selectionClear;
+ $w->selectionSet($ent);
+
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub KeyboardHome
+{
+ my $w = shift;
+ $w->yview('moveto' => 0);
+ $w->xview('moveto' => 0);
+}
+
+sub KeyboardEnd
+{
+ my $w = shift;
+ $w->yview('moveto' => 1);
+ $w->xview('moveto' => 0);
+}
+
+sub KeyboardActivate
+{
+ my $w = shift;
+
+ my $anchor = $w->info('anchor');
+
+ return unless (defined($anchor) and length($anchor));
+
+ if($w->cget('-selectmode'))
+ {
+ $w->selectionClear;
+ $w->selectionSet($anchor);
+ }
+
+ $w->Callback(-command => $anchor);
+}
+
+sub KeyboardBrowse
+{
+ my $w = shift;
+
+ my $anchor = $w->info('anchor');
+
+ return unless (defined($anchor) and length($anchor));
+
+ if ($w->indicatorExists($anchor))
+ {
+ $w->Callback(-indicatorcmd => $anchor);
+ }
+
+ if($w->cget('-selectmode'))
+ {
+ $w->selectionClear;
+ $w->selectionSet($anchor);
+ }
+ $w->Callback(-browsecmd =>$anchor);
+}
+
+sub AutoScan
+{
+ my ($w,$x,$y) = @_;
+
+ return if ($w->cget('-selectmode') eq 'dragdrop');
+ if (@_ < 3)
+ {
+ my $Ev = $w->XEvent;
+ return unless defined $Ev;
+ $y = $Ev->y;
+ $x = $Ev->x;
+ }
+
+ if($y >= $w->height)
+ {
+ $w->yview('scroll', 1, 'units');
+ }
+ elsif($y < 0)
+ {
+ $w->yview('scroll', -1, 'units');
+ }
+ elsif($x >= $w->width)
+ {
+ $w->xview('scroll', 2, 'units');
+ }
+ elsif($x < 0)
+ {
+ $w->xview('scroll', -2, 'units');
+ }
+ else
+ {
+ return;
+ }
+ $w->RepeatId($w->SUPER::after(50,[ AutoScan => $w, $x, $y ]));
+ $w->Button1Motion;
+}
+
+sub children
+{
+ # Tix has core-tk window(s) which are not a widget(s)
+ # the generic code returns these as an "undef"
+ my $w = shift;
+ my @info = grep(defined($_),$w->winfo('children'));
+ @info;
+}
+
+1;
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/IO.pm b/Master/tlpkg/tlperl/lib/Tk/IO.pm
new file mode 100644
index 00000000000..771e9f7103a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/IO.pm
@@ -0,0 +1,182 @@
+package Tk::IO;
+use strict;
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/IO/IO.pm#4 $
+
+require 5.002;
+use Tk::Event qw($XS_VERSION);
+
+use Carp;
+use base qw(DynaLoader IO::Handle);
+
+bootstrap Tk::IO;
+
+my %fh2obj;
+my %obj2fh;
+
+sub new
+{
+ my ($package,%args) = @_;
+ # Do whatever IO::Handle does
+ my $fh = $package->SUPER::new;
+ %{*$fh} = (); # The hash is used for configure options
+ ${*$fh} = ''; # The scalar is used as the 'readable' buffer
+ @{*$fh} = (); # The array
+ $fh->configure(%args);
+ return $fh;
+}
+
+sub pending
+{
+ my $fh = shift;
+ return ${*$fh};
+}
+
+sub cget
+{
+ my ($fh,$key) = @_;
+ return ${*$fh}{$key};
+}
+
+sub configure
+{
+ my ($fh,%args) = @_;
+ my $key;
+ foreach $key (keys %args)
+ {
+ my $val = $args{$key};
+ $val = Tk::Callback->new($val) if ($key =~ /command$/);
+ ${*$fh}{$key} = $val;
+ }
+}
+
+sub killpg
+{
+ my ($fh,$sig) = @_;
+ my $pid = $fh->pid;
+ croak 'No child' unless (defined $pid);
+ kill($sig,-$pid);
+}
+
+sub kill
+{
+ my ($fh,$sig) = @_;
+ my $pid = $fh->pid;
+ croak 'No child' unless (defined $pid);
+ kill($sig,$pid) || croak "Cannot kill($sig,$pid):$!";
+}
+
+sub readable
+{
+ my $fh = shift;
+ my $count = sysread($fh,${*$fh},1,length(${*$fh}));
+ if ($count < 0)
+ {
+ if (exists ${*$fh}{-errorcommand})
+ {
+ ${*$fh}{-errorcommand}->Call($!);
+ }
+ else
+ {
+ warn "Cannot read $fh:$!";
+ $fh->close;
+ }
+ }
+ elsif ($count)
+ {
+ if (exists ${*$fh}{-linecommand})
+ {
+ my $eol = index(${*$fh},"\n");
+ if ($eol >= 0)
+ {
+ my $line = substr(${*$fh},0,++$eol);
+ substr(${*$fh},0,$eol) = '';
+ ${*$fh}{-linecommand}->Call($line);
+ }
+ }
+ }
+ else
+ {
+ $fh->close;
+ }
+}
+
+sub pid
+{
+ my $fh = shift;
+ return ${*$fh}{-pid};
+}
+
+sub command
+{
+ my $fh = shift;
+ my $cmd = ${*$fh}{'-exec'};
+ return (wantarray) ? @$cmd : $cmd;
+}
+
+sub exec
+{
+ my $fh = shift;
+ my $pid = open($fh,'-|');
+ if ($pid)
+ {
+ ${*$fh} = '' unless (defined ${*$fh});
+ ${*$fh}{'-exec'} = [@_];
+ ${*$fh}{'-pid'} = $pid;
+ if (exists ${*$fh}{-linecommand})
+ {
+ my $w = ${*$fh}{-widget};
+ $w = 'Tk' unless (defined $w);
+ $w->fileevent($fh,'readable',[$fh,'readable']);
+ ${*$fh}{_readable} = $w;
+ }
+ else
+ {
+ croak Tk::Pretty::Pretty(\%{*$fh});
+ }
+ return $pid;
+ }
+ else
+ {
+ # make STDERR same as STDOUT here
+ setpgrp;
+ exec(@_) || die 'Cannot exec ',join(' ',@_),":$!";
+ }
+}
+
+sub wait
+{
+ my $fh = shift;
+ my $code;
+ my $ch = delete ${*$fh}{-childcommand};
+ ${*$fh}{-childcommand} = Tk::Callback->new(sub { $code = shift });
+ Tk::Event::DoOneEvent(0) until (defined $code);
+ if (defined $ch)
+ {
+ ${*$fh}{-childcommand} = $ch;
+ $ch->Call($code,$fh)
+ }
+ return $code;
+}
+
+sub close
+{
+ my $fh = shift;
+ my $code;
+ if (defined fileno($fh))
+ {
+ my $w = delete ${*$fh}{_readable};
+ $w->fileevent($fh,'readable','') if (defined $w);
+ $code = close($fh);
+ if (exists ${*$fh}{-childcommand})
+ {
+ ${*$fh}{-childcommand}->Call($?,$fh);
+ }
+ }
+ return $code;
+}
+
+1;
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/IconList.pm b/Master/tlpkg/tlperl/lib/Tk/IconList.pm
new file mode 100644
index 00000000000..1972809ea2a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/IconList.pm
@@ -0,0 +1,712 @@
+# -*- perl -*-
+#
+# tkfbox.tcl --
+#
+# Implements the "TK" standard file selection dialog box. This
+# dialog box is used on the Unix platforms whenever the tk_strictMotif
+# flag is not set.
+#
+# The "TK" standard file selection dialog box is similar to the
+# file selection dialog box on Win95(TM). The user can navigate
+# the directories by clicking on the folder icons or by
+# selectinf the "Directory" option menu. The user can select
+# files by clicking on the file icons or by entering a filename
+# in the "Filename:" entry.
+#
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Translated to perk/Tk and modified by Slaven Rezic <slaven@rezic.de>.
+#
+
+#----------------------------------------------------------------------
+#
+# I C O N L I S T
+#
+# This is a pseudo-widget that implements the icon list inside the
+# tkFDialog dialog box.
+#
+#----------------------------------------------------------------------
+# tkIconList --
+#
+# Creates an IconList widget.
+#
+
+package Tk::IconList;
+require Tk::Frame;
+
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/IconList.pm#7 $
+
+use Tk qw(Ev);
+use strict;
+use Carp;
+
+use base 'Tk::Frame';
+
+Construct Tk::Widget 'IconList';
+
+# tkIconList_Create --
+#
+# Creates an IconList widget by assembling a canvas widget and a
+# scrollbar widget. Sets all the bindings necessary for the IconList's
+# operations.
+#
+sub Populate {
+ my($w, $args) = @_;
+ $w->SUPER::Populate($args);
+
+ my $sbar = $w->Component('Scrollbar' => 'sbar',
+ -orient => 'horizontal',
+ -highlightthickness => 0,
+ -takefocus => 0,
+ );
+ # make sure that the size does not exceed handhelds' dimensions
+ my($sw,$sh) = ($w->screenwidth, $w->screenheight);
+ my $canvas = $w->Component('Canvas' => 'canvas',
+ -bd => 2,
+ -relief => 'sunken',
+ -width => ($sw > 420 ? 400 : $sw-20),
+ -height => ($sh > 160 ? 120 : $sh-40),
+ -takefocus => 1,
+ );
+ $sbar->pack(-side => 'bottom', -fill => 'x', -padx => 2);
+ $canvas->pack(-expand => 'yes', -fill => 'both');
+ $sbar->configure(-command => ['xview', $canvas]);
+ $canvas->configure(-xscrollcommand => ['set', $sbar]);
+
+ # Initializes the max icon/text width and height and other variables
+ $w->{'maxIW'} = 1;
+ $w->{'maxIH'} = 1;
+ $w->{'maxTW'} = 1;
+ $w->{'maxTH'} = 1;
+ $w->{'numItems'} = 0;
+#XXX curItem never used delete $w->{'curItem'};
+ $w->{'noScroll'} = 1;
+ $w->{'selection'} = [];
+ $w->{'index,anchor'} = '';
+
+ # Creates the event bindings.
+ $canvas->Tk::bind('<Configure>', sub { $w->Arrange } );
+ $canvas->Tk::bind('<1>', [$w,'Btn1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<B1-Motion>', [$w,'Motion1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<Control-B1-Motion>', 'NoOp');
+ $canvas->Tk::bind('<Shift-B1-Motion>', 'NoOp');
+ $canvas->Tk::bind('<Control-1>', [$w,'CtrlBtn1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<Shift-1>', [$w,'ShiftBtn1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<Double-ButtonRelease-1>', [$w,'Double1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<Control-Double-ButtonRelease-1>', 'NoOp');
+ $canvas->Tk::bind('<Shift-Double-ButtonRelease-1>', 'NoOp');
+ $canvas->Tk::bind('<ButtonRelease-1>', [$w,'CancelRepeat']);
+ $canvas->Tk::bind('<B1-Leave>', [$w,'Leave1',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<B1-Enter>', [$w,'CancelRepeat']);
+ $canvas->Tk::bind('<Up>', [$w,'UpDown', -1]);
+ $canvas->Tk::bind('<Down>', [$w,'UpDown', 1]);
+ $canvas->Tk::bind('<Left>', [$w,'LeftRight',-1]);
+ $canvas->Tk::bind('<Right>', [$w,'LeftRight', 1]);
+ $canvas->Tk::bind('<Return>', [$w,'ReturnKey']);
+ $canvas->Tk::bind('<KeyPress>', [$w,'KeyPress',Ev('A')]);
+ $canvas->Tk::bind('<Control-KeyPress>', 'NoOp');
+ $canvas->Tk::bind('<Alt-KeyPress>', 'NoOp');
+ $canvas->Tk::bind('<Meta-KeyPress>', 'NoOp');
+#XXX bad....
+# $canvas->Tk::bind('<FocusIn>', sub { $w->FocusIn });
+# $canvas->Tk::bind('<FocusOut>', sub { $w->FocusOut });
+
+ # additional bindings not in tkfbox.tcl
+ $canvas->Tk::bind('<2>',['scan','mark',Ev('x'),Ev('y')]);
+ $canvas->Tk::bind('<B2-Motion>',['scan','dragto',Ev('x'),Ev('y')]);
+ # Remove the standard Canvas bindings
+ $canvas->bindtags([$canvas, $canvas->toplevel, 'all']);
+ # ... and define some again
+ $canvas->Tk::bind('<Home>', ['xview','moveto',0]);
+ $canvas->Tk::bind('<End>', ['xview','moveto',1]);
+
+ $w->ConfigSpecs(-browsecmd =>
+ ['METHOD', 'browseCommand', 'BrowseCommand', undef],
+ -command =>
+ ['CALLBACK', 'command', 'Command', undef],
+ -font =>
+ ['PASSIVE', 'font', 'Font', undef],
+ -foreground =>
+ ['PASSIVE', 'foreground', 'Foreground', undef],
+ -fg => '-foreground',
+ -multiple =>
+ ['PASSIVE', 'multiple', 'Multiple', 0],
+ -selectmode =>
+ ['PASSIVE', 'selectMode', 'SelectMode', 'browse'],
+ -selectbackground =>
+ ['PASSIVE', 'selectBackground', 'Foreground', '#a0a0ff'],
+ );
+
+ $w;
+}
+
+# compatibility for old -browsecmd options
+sub browsecmd {
+ my $w = shift;
+ if (@_) {
+ $w->{Configure}{'-browsecmd'} = $_[0];
+ $w->bind('<<ListboxSelect>>' => $_[0]);
+ }
+ $w->{Configure}{'-browsecmd'};
+}
+
+sub Index {
+ my($w, $i) = @_;
+ if (!$w->{'list'}) { $w->{'list'} = [] }
+ if ($i =~ /^-?[0-9]+$/) {
+ if ($i < 0) {
+ $i = 0;
+ }
+ if ($i > @{ $w->{'list'} }) {
+ $i = @{ $w->{'list'} } - 1;
+ }
+ return $i;
+ } elsif ($i eq 'active') {
+ return $w->{'index,active'};
+ } elsif ($i eq 'anchor') {
+ return $w->{'index,anchor'};
+ } elsif ($i eq 'end') {
+ return @{ $w->{'list'} };
+ } elsif ($i =~ /@(-?[0-9]+),(-?[0-9]+)/) {
+ my($x, $y) = ($1, $2);
+ my $canvas = $w->Subwidget('canvas');
+ my $item = $canvas->find('closest', $x, $y);
+ if (defined $item) {
+ return $canvas->itemcget($item, '-tags')->[1];
+ } else {
+ return "";
+ }
+ } else {
+ croak "Unrecognized Index parameter `$i', use active, anchor, end, \@x,y, or x";
+ }
+}
+
+sub Selection {
+ my($w, $op, @args) = @_;
+ if ($op eq 'anchor') {
+ if (@args == 1) {
+ $w->{'index,anchor'} = $w->Index($args[0]);
+ } else {
+ return $w->{'index,anchor'};
+ }
+ } elsif ($op eq 'clear') {
+ my($first, $last);
+ if (@args == 2) {
+ ($first, $last) = @args;
+ } elsif (@args == 1) {
+ $first = $last = $args[0];
+ } else {
+ croak "wrong # args: should be Selection('clear', first, ?last?)"
+ }
+ $first = $w->Index($first);
+ $last = $w->Index($last);
+ if ($first > $last) {
+ ($first, $last) = ($last, $first);
+ }
+ my $ind = 0;
+ for my $item (@{ $w->{'selection'} }) {
+ if ($item >= $first) {
+ $first = $ind;
+ last;
+ }
+ $ind++; # XXX seems to be missing in the Tcl version
+ }
+ $ind = @{ $w->{'selection'} } - 1;
+ for(; $ind >= 0; $ind--) {
+ my $item = $w->{'selection'}->[$ind];
+ if ($item <= $last) {
+ $last = $ind;
+ last;
+ }
+ }
+ if ($first > $last) {
+ return;
+ }
+ splice @{ $w->{'selection'} }, $first, $last-$first+1;
+ $w->event('generate', '<<ListboxSelect>>');
+ $w->DrawSelection;
+ } elsif ($op eq 'includes') {
+ my $index;
+ for (@{ $w->{'selection'} }) {
+ if ($args[0] eq $_) {
+ return 1;
+ }
+ }
+ return 0;
+ } elsif ($op eq 'set') {
+ my($first, $last);
+ if (@args == 2) {
+ ($first, $last) = @args;
+ } elsif (@args == 1) {
+ $first = $last = $args[0];
+ } else {
+ croak "wrong # args: should be Selection('set', first, ?last?)";
+ }
+
+ $first = $w->Index($first);
+ $last = $w->Index($last);
+ if ($first > $last) {
+ ($first, $last) = ($last, $first);
+ }
+ for(my $i = $first; $i <= $last; $i++) {
+ push @{ $w->{'selection'} }, $i;
+ }
+ # lsort -integer -unique
+ my %sel = map { ($_ => 1) } @{ $w->{'selection'} };
+ @{ $w->{'selection'} } = sort { $a <=> $b } keys %sel;
+ $w->event('generate', '<<ListboxSelect>>');
+ $w->DrawSelection;
+ } else {
+ croak "Unrecognized Selection parameter `$op', use anchor, clear, includes, or set";
+ }
+}
+
+# XXX why lower case 's' here and upper in DrawSelection?
+sub Curselection {
+ my $w = shift;
+ @{ $w->{'selection'} };
+}
+
+sub DrawSelection {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->delete('selection');
+ my $selBg = $w->cget('-selectbackground');
+ for my $item (@{ $w->{'selection'} }) {
+ my $rTag = $w->{'list'}->[$item][2];
+ my($iTag, $tTag, $text, $serial) = @{ $w->{'itemList'}{$rTag} };
+ my @bbox = $canvas->bbox($tTag);
+ # XXX don't hardcode colors
+ $canvas->createRectangle
+ (@bbox, -fill => $selBg, -outline => $selBg, -tags => 'selection');
+ }
+ $canvas->lower('selection');
+}
+
+# Returns the selected item
+#
+sub Get {
+ my($w, $item) = @_;
+ my $rTag = $w->{'list'}->[$item][2];
+ my($iTag, $tTag, $text, $serial) = @{ $w->{'itemList'}{$rTag} };
+ $text;
+}
+
+
+# tkIconList_AutoScan --
+#
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The IconList window.
+#
+sub AutoScan {
+ my $w = shift;
+ return unless ($w->exists);
+ return if ($w->{'noScroll'});
+ my($x, $y);
+ $x = $Tk::x;
+ $y = $Tk::y;
+ my $canvas = $w->Subwidget('canvas');
+ if ($x >= $canvas->width) {
+ $canvas->xview('scroll', 1, 'units');
+ } elsif ($x < 0) {
+ $canvas->xview('scroll', -1, 'units');
+ } elsif ($y >= $canvas->height) {
+ # do nothing
+ } elsif ($y < 0) {
+ # do nothing
+ } else {
+ return;
+ }
+ $w->Motion1($x, $y);
+ $w->RepeatId($w->after(50, ['AutoScan', $w]));
+}
+
+# Deletes all the items inside the canvas subwidget and reset the IconList's
+# state.
+#
+sub DeleteAll {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->delete('all');
+ delete $w->{'selected'};
+ delete $w->{'rect'};
+ delete $w->{'list'};
+ delete $w->{'itemList'};
+ $w->{'maxIW'} = 1;
+ $w->{'maxIH'} = 1;
+ $w->{'maxTW'} = 1;
+ $w->{'maxTH'} = 1;
+ $w->{'numItems'} = 0;
+#XXX curItem never used delete $w->{'curItem'};
+ $w->{'noScroll'} = 1;
+ $w->{'selection'} = [];
+ $w->{'index,anchor'} = '';
+ $w->Subwidget('sbar')->set(0.0, 1.0);
+ $canvas->xview('moveto', 0);
+}
+
+# Adds an icon into the IconList with the designated image and items
+#
+sub Add {
+ my($w, $image, @items) = @_;
+ my $canvas = $w->Subwidget('canvas');
+ my $font = $w->cget(-font);
+ my $fg = $w->cget(-foreground);
+ foreach my $text (@items) {
+ my $iTag = $canvas->createImage
+ (0, 0, -image => $image, -anchor => 'nw',
+ -tags => ['icon', $w->{numItems}, 'item'.$w->{numItems}],
+ );
+ my $tTag = $canvas->createText
+ (0, 0, -text => $text, -anchor => 'nw',
+ (defined $fg ? (-fill => $fg) : ()),
+ (defined $font ? (-font => $font) : ()),
+ -tags => ['text', $w->{numItems}, 'item'.$w->{numItems}],
+ );
+ my $rTag = $canvas->createRectangle
+ (0, 0, 0, 0,
+ -fill => undef,
+ -outline => undef,
+ -tags => ['rect', $w->{numItems}, 'item'.$w->{numItems}],
+ );
+ my(@b) = $canvas->bbox($iTag);
+ my $iW = $b[2] - $b[0];
+ my $iH = $b[3] - $b[1];
+ $w->{'maxIW'} = $iW if ($w->{'maxIW'} < $iW);
+ $w->{'maxIH'} = $iH if ($w->{'maxIH'} < $iH);
+ @b = $canvas->bbox($tTag);
+ my $tW = $b[2] - $b[0];
+ my $tH = $b[3] - $b[1];
+ $w->{'maxTW'} = $tW if ($w->{'maxTW'} < $tW);
+ $w->{'maxTH'} = $tH if ($w->{'maxTH'} < $tH);
+ push @{ $w->{'list'} }, [$iTag, $tTag, $rTag, $iW, $iH, $tW, $tH,
+ $w->{'numItems'}];
+ $w->{'itemList'}{$rTag} = [$iTag, $tTag, $text, $w->{'numItems'}];
+ $w->{'textList'}{$w->{'numItems'}} = lc($text);
+ ++$w->{'numItems'};
+ }
+}
+
+# Places the icons in a column-major arrangement.
+#
+sub Arrange {
+ my $w = shift;
+ my $canvas = $w->Subwidget('canvas');
+ my $sbar = $w->Subwidget('sbar');
+ unless (exists $w->{'list'}) {
+ if (defined $canvas && Tk::Exists($canvas)) {
+ $w->{'noScroll'} = 1;
+ $sbar->configure(-command => sub { });
+ }
+ return;
+ }
+
+ my $W = $canvas->width;
+ my $H = $canvas->height;
+ my $pad = $canvas->cget(-highlightthickness) + $canvas->cget(-bd);
+ $pad = 2 if ($pad < 2);
+ $W -= $pad*2;
+ $H -= $pad*2;
+ my $dx = $w->{'maxIW'} + $w->{'maxTW'} + 8;
+ my $dy;
+ if ($w->{'maxTH'} > $w->{'maxIH'}) {
+ $dy = $w->{'maxTH'};
+ } else {
+ $dy = $w->{'maxIH'};
+ }
+ $dy += 2;
+ my $shift = $w->{'maxIW'} + 4;
+ my $x = $pad * 2;
+ my $y = $pad;
+ my $usedColumn = 0;
+ foreach my $sublist (@{ $w->{'list'} }) {
+ $usedColumn = 1;
+ my($iTag, $tTag, $rTag, $iW, $iH, $tW, $tH) = @$sublist;
+ my $i_dy = ($dy - $iH) / 2;
+ my $t_dy = ($dy - $tH) / 2;
+ $canvas->coords($iTag, $x, $y + $i_dy);
+ $canvas->coords($tTag, $x + $shift, $y + $t_dy);
+ $canvas->coords($rTag, $x, $y, $x + $dx, $y + $dy);
+ $y += $dy;
+ if ($y + $dy > $H) {
+ $y = $pad;
+ $x += $dx;
+ $usedColumn = 0;
+ }
+ }
+ my $sW;
+ if ($usedColumn) {
+ $sW = $x + $dx;
+ } else {
+ $sW = $x;
+ }
+ if ($sW < $W) {
+ $canvas->configure(-scrollregion => [$pad, $pad, $sW, $H]);
+ $sbar->configure(-command => sub { });
+ $canvas->xview(moveto => 0);
+ $w->{'noScroll'} = 1;
+ } else {
+ $canvas->configure(-scrollregion => [$pad, $pad, $sW, $H]);
+ $sbar->configure(-command => ['xview', $canvas]);
+ $w->{'noScroll'} = 0;
+ }
+ $w->{'itemsPerColumn'} = int(($H - $pad) / $dy);
+ $w->{'itemsPerColumn'} = 1 if ($w->{'itemsPerColumn'} < 1);
+#XXX $w->Select($w->{'list'}[$w->{'curItem'}][2], 0)
+# if (exists $w->{'curItem'});
+ $w->DrawSelection; # missing in Tcl XXX
+}
+
+# Gets called when the user invokes the IconList (usually by double-clicking
+# or pressing the Return key).
+#
+sub Invoke {
+ my $w = shift;
+ $w->Callback(-command => $w->{'selected'}) if (@{ $w->{'selection'} });
+}
+
+# tkIconList_See --
+#
+# If the item is not (completely) visible, scroll the canvas so that
+# it becomes visible.
+sub See {
+ my($w, $rTag) = @_;
+ return if ($w->{'noScroll'});
+ return if ($rTag < 0 || $rTag >= @{ $w->{'list'} });
+ my $canvas = $w->Subwidget('canvas');
+ my(@sRegion) = @{ $canvas->cget('-scrollregion') };
+ return unless (@sRegion);
+ my(@bbox) = $canvas->bbox('item'.$rTag);
+ my $pad = $canvas->cget(-highlightthickness) + $canvas->cget(-bd);
+ my $x1 = $bbox[0];
+ my $x2 = $bbox[2];
+ $x1 -= $pad * 2;
+ $x2 -= $pad;
+ my $cW = $canvas->width - $pad * 2;
+ my $scrollW = $sRegion[2] - $sRegion[0] + 1;
+ my $dispX = int(($canvas->xview)[0] * $scrollW);
+ my $oldDispX = $dispX;
+ # check if out of the right edge
+ $dispX = $x2 - $cW if ($x2 - $dispX >= $cW);
+ # check if out of the left edge
+ $dispX = $x1 if ($x1 - $dispX < 0);
+ if ($oldDispX != $dispX) {
+ my $fraction = $dispX / $scrollW;
+ $canvas->xview('moveto', $fraction);
+ }
+}
+
+sub Btn1 {
+ my($w, $x, $y) = @_;
+
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->CanvasFocus;
+ $x = int($canvas->canvasx($x));
+ $y = int($canvas->canvasy($y));
+ my $i = $w->Index('@'.$x.','.$y);
+ return if ($i eq '');
+ $w->Selection('clear', 0, 'end');
+ $w->Selection('set', $i);
+ $w->Selection('anchor', $i);
+}
+
+sub CtrlBtn1 {
+ my($w, $x, $y) = @_;
+
+ if ($w->cget(-multiple)) {
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->CanvasFocus;
+ my $x = int($canvas->canvasx($x));
+ my $y = int($canvas->canvasy($y));
+ my $i = $w->Index('@'.$x.','.$y);
+ return if ($i eq '');
+ if ($w->Selection('includes', $i)) {
+ $w->Selection('clear', $i);
+ } else {
+ $w->Selection('set', $i);
+ $w->Selection('anchor', $i);
+ }
+ }
+}
+
+sub ShiftBtn1 {
+ my($w, $x, $y) = @_;
+
+ if ($w->cget(-multiple)) {
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->CanvasFocus;
+ my $x = int($canvas->canvasx($x));
+ my $y = int($canvas->canvasy($y));
+ my $i = $w->Index('@'.$x.','.$y);
+ return if ($i eq '');
+ my $a = $w->Index('anchor');
+ if ($a eq '') {
+ $a = $i;
+ }
+ $w->Selection('clear', 0, 'end');
+ $w->Selection('set', $a, $i);
+ }
+}
+
+# Gets called on button-1 motions
+#
+sub Motion1 {
+ my($w, $x, $y) = @_;
+ $Tk::x = $x;
+ $Tk::y = $y;
+ my $canvas = $w->Subwidget('canvas');
+ $canvas->CanvasFocus;
+ $x = int($canvas->canvasx($x));
+ $y = int($canvas->canvasy($y));
+ my $i = $w->Index('@'.$x.','.$y);
+ return if ($i eq '');
+ $w->Selection('clear', 0, 'end');
+ $w->Selection('set', $i);
+}
+
+sub Double1 {
+ my($w, $x, $y) = @_;
+ $w->Invoke if (@{ $w->{'selection'} });
+}
+
+sub ReturnKey {
+ my $w = shift;
+ $w->Invoke;
+}
+
+sub Leave1 {
+ my($w, $x, $y) = @_;
+ $Tk::x = $x;
+ $Tk::y = $y;
+ $w->AutoScan;
+}
+
+sub FocusIn {
+ my $w = shift;
+ return unless (exists $w->{'list'});
+ if (@{ $w->{'selection'} }) {
+ $w->DrawSelection;
+ }
+}
+
+sub FocusOut {
+ my $w = shift;
+ $w->Selection('clear', 0, 'end');
+}
+
+# tkIconList_UpDown --
+#
+# Moves the active element up or down by one element
+#
+# Arguments:
+# w - The IconList widget.
+# amount - +1 to move down one item, -1 to move back one item.
+#
+sub UpDown {
+ my($w, $amount) = @_;
+ return unless (exists $w->{'list'});
+ my $i;
+ my(@curr) = $w->Curselection;
+ if (!@curr) {
+ $i = 0;
+ } else {
+ $i = $w->Index('anchor');
+ return if ($i eq '');
+ $i += $amount;
+ }
+ $w->Selection('clear', 0, 'end');
+ $w->Selection('set', $i);
+ $w->Selection('anchor', $i);
+ $w->See($i);
+}
+
+# tkIconList_LeftRight --
+#
+# Moves the active element left or right by one column
+#
+# Arguments:
+# w - The IconList widget.
+# amount - +1 to move right one column, -1 to move left one column.
+#
+sub LeftRight {
+ my($w, $amount) = @_;
+ return unless (exists $w->{'list'});
+ my $i;
+ my(@curr) = $w->Curselection;
+ if (!@curr) {
+ $i = 0;
+ } else {
+ $i = $w->Index('anchor');
+ return if ($i eq '');
+ $i += $amount*$w->{'itemsPerColumn'};
+ }
+ $w->Selection('clear', 0, 'end');
+ $w->Selection('set', $i);
+ $w->Selection('anchor', $i);
+ $w->See($i);
+}
+
+#----------------------------------------------------------------------
+# Accelerator key bindings
+#----------------------------------------------------------------------
+# tkIconList_KeyPress --
+#
+# Gets called when user enters an arbitrary key in the listbox.
+#
+sub KeyPress {
+ my($w, $key) = @_;
+ $w->{'_ILAccel'} .= $key;
+ $w->Goto($w->{'_ILAccel'});
+ eval {
+ $w->afterCancel($w->{'_ILAccel_afterid'});
+ };
+ $w->{'_ILAccel_afterid'} = $w->after(500, ['Reset', $w]);
+}
+
+sub Goto {
+ my($w, $text) = @_;
+ return unless (exists $w->{'list'});
+ return if (not defined $text or $text eq '');
+#XXX curItem never used my $start = (!exists $w->{'curItem'} ? 0 : $w->{'curItem'});
+ my $start = 0;
+ $text = lc($text);
+ my $theIndex = -1;
+ my $less = 0;
+ my $len = length($text);
+ my $i = $start;
+ # Search forward until we find a filename whose prefix is an exact match
+ # with $text
+ while (1) {
+ my $sub = substr($w->{'textList'}{$i}, 0, $len);
+ if ($text eq $sub) {
+ $theIndex = $i;
+ last;
+ }
+ ++$i;
+ $i = 0 if ($i == $w->{'numItems'});
+ last if ($i == $start);
+ }
+ if ($theIndex > -1) {
+ $w->Selection(qw(clear 0 end));
+ $w->Selection('set', $theIndex);
+ $w->Selection('anchor', $theIndex);
+ $w->See($theIndex);
+ }
+}
+
+sub Reset {
+ my $w = shift;
+ undef $w->{'_ILAccel'};
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Image.pm b/Master/tlpkg/tlperl/lib/Tk/Image.pm
new file mode 100644
index 00000000000..0f41c387fc2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Image.pm
@@ -0,0 +1,74 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Image;
+
+# This module does for images what Tk::Widget does for widgets:
+# provides a base class for them to inherit from.
+require DynaLoader;
+
+use base qw(DynaLoader Tk); # but are they ?
+
+use vars qw($VERSION);
+$VERSION = '4.011'; # $Id: //depot/Tkutf8/Tk/Image.pm#11 $
+
+sub new
+{
+ my $package = shift;
+ my $widget = shift;
+ $package->InitClass($widget);
+ my $leaf = $package->Tk_image;
+ my $obj = $widget->Tk::image('create',$leaf,@_);
+ $obj = $widget->_object($obj) unless (ref $obj);
+ return bless $obj,$package;
+}
+
+sub Install
+{
+ # Dynamically loaded image types can install standard images here
+ my ($class,$mw) = @_;
+}
+
+sub ClassInit
+{
+ # Carry out class bindings (or whatever)
+ my ($package,$mw) = @_;
+ return $package;
+}
+
+require Tk::Submethods;
+
+Direct Tk::Submethods ('image' => [qw(delete width height type)]);
+
+sub Tk::Widget::imageNames
+{
+ my $w = shift;
+ $w->image('names',@_);
+}
+
+sub Tk::Widget::imageTypes
+{
+ my $w = shift;
+ map("\u$_",$w->image('types',@_));
+}
+
+sub Construct
+{
+ my ($base,$name) = @_;
+ my $class = (caller(0))[0];
+
+ # Hack for broken ->isa in perl5.6.0
+ delete ${"$class\::"}{'::ISA::CACHE::'} if $] == 5.006;
+
+ *{"Tk::Widget::$name"} = sub { $class->new(@_) };
+}
+
+# This is here to prevent AUTOLOAD trying to find it.
+sub DESTROY
+{
+ my $i = shift;
+ # maybe do image delete ???
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm b/Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm
new file mode 100644
index 00000000000..85c6c11a76c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ItemStyle.pm
@@ -0,0 +1,38 @@
+package Tk::ItemStyle;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/ItemStyle.pm#4 $
+
+require Tk;
+use base qw(Tk);
+require Tk::Widget;
+Construct Tk::Widget 'ItemStyle';
+
+Tk::Methods ('delete');
+
+sub new
+{
+ my $package = shift;
+ my $widget = shift;
+ my $type = shift;
+ my %args = @_;
+ $args{'-refwindow'} = $widget unless exists $args{'-refwindow'};
+ $package->InitClass($widget);
+ my $obj = $widget->itemstyle($type, %args);
+ return bless $obj,$package;
+}
+
+sub Install
+{
+ # Dynamically loaded image types can install standard images here
+ my ($class,$mw) = @_;
+}
+
+sub ClassInit
+{
+ # Carry out class bindings (or whatever)
+ my ($package,$mw) = @_;
+ return $package;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/JPEG.pm b/Master/tlpkg/tlperl/lib/Tk/JPEG.pm
new file mode 100644
index 00000000000..9e0ef771f77
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/JPEG.pm
@@ -0,0 +1,50 @@
+package Tk::JPEG;
+require DynaLoader;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #2$ =~ /\D(\d+)\s*$/;
+use Tk 800.015;
+require Tk::Image;
+require Tk::Photo;
+require DynaLoader;
+
+use vars qw($VERSION $XS_VERSION);
+
+@ISA = qw(DynaLoader);
+
+$XS_VERSION = $Tk::VERSION;
+bootstrap Tk::JPEG;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Tk::JPEG - JPEG loader for Tk::Photo
+
+=head1 SYNOPSIS
+
+ use Tk;
+ use Tk::JPEG;
+
+ my $image = $widget->Photo('-format' => 'jpeg', -file => 'something.jpg');
+
+
+=head1 DESCRIPTION
+
+This is an extension for Tk800.015 and later which supplies
+JPEG format loader for Photo image type.
+
+This version also works with Tk804 series.
+
+JPEG access is via release 5 of the The Independent JPEG Group's (IJG)
+free JPEG software.
+
+=head1 AUTHOR
+
+Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/LabEntry.pm b/Master/tlpkg/tlperl/lib/Tk/LabEntry.pm
new file mode 100644
index 00000000000..64cb392fa8c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/LabEntry.pm
@@ -0,0 +1,31 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Tk::LabEntry;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/LabEntry.pm#6 $
+
+use base qw(Tk::Frame);
+use Tk::widgets qw(Frame Label Entry);
+
+Construct Tk::Widget 'LabEntry';
+
+sub Populate
+{
+ require Tk::Entry;
+ # LabeledEntry constructor.
+ #
+ my($cw, $args) = @_;
+ $cw->SUPER::Populate($args);
+ # Advertised subwidgets: entry.
+ my $e = $cw->Entry();
+ $e->pack('-expand' => 1, '-fill' => 'both');
+ $cw->Advertise('entry' => $e );
+ $cw->ConfigSpecs(DEFAULT => [$e]);
+ $cw->Delegates(DEFAULT => $e);
+ $cw->AddScrollbars($e) if (exists $args->{-scrollbars});
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/LabFrame.pm b/Master/tlpkg/tlperl/lib/Tk/LabFrame.pm
new file mode 100644
index 00000000000..6fcab1acc56
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/LabFrame.pm
@@ -0,0 +1,138 @@
+#
+# Labeled frame. Derives from Tk::Frame, but intercepts the labeling
+# part.
+
+package Tk::LabFrame;
+
+use vars qw($VERSION);
+$VERSION = '4.010'; # $Id: //depot/Tkutf8/Tixish/LabFrame.pm#11 $
+
+use Tk;
+use base qw(Tk::Frame);
+Tk::Widget->Construct('LabFrame');
+
+sub autoLabel { 0 }
+
+sub Populate {
+ my ($cw, $args) = @_;
+
+ $cw->{m_geoMgr} = "";
+
+ my $border = $cw->Component(
+ Frame => 'border',
+ -relief => 'groove',
+ -bd => 2,
+ );
+
+ my $pad = $border->Frame;
+ $cw->Advertise(pad => $pad);
+
+ my $frame = $border->Frame;
+ $cw->Advertise(frame => $frame);
+
+ my $label = $cw->Component(Label => 'label');
+
+ $cw->SUPER::Populate($args);
+
+ $cw->Delegates(DEFAULT => $frame);
+ $cw->ConfigSpecs(
+ -background => [[qw/SELF ADVERTISED/],
+ qw/background Background/],
+ -borderwidth => [$border, qw/borderWidth Border 2/],
+ -font => [$label, qw/font Font/],
+ -foreground => [$label, qw/foreground Foreground black/],
+ -label => [{-text => $label}, qw/label Label/],
+ -labelside => [qw/METHOD labelSide LabelSide acrosstop/],
+ -labelvariable => [{-textvariable => $label}],
+ -relief => [$border, qw/relief Relief groove/],
+ DEFAULT => [$frame]
+ );
+ return $cw;
+}
+
+use Tk::Submethods(
+ form => [qw/check forget grid info slaves/],
+ grid => [qw/bbox columnconfigure configure forget info location
+ propagate rowconfigure remove size slaves/],
+ pack => [qw/forget info propagate slaves/],
+ place => [qw/forget info slaves/]
+);
+
+sub labelside {
+ my ($cw, $side) = @_;
+ return $cw->{Configure}{-labelside} unless $side;
+
+ my $border = $cw->Subwidget('border');
+ my $pad = $cw->Subwidget('pad');
+ my $frame = $cw->Subwidget('frame');
+ my $label = $cw->Subwidget('label');
+
+ ## packForget/formForget as appropriate
+ foreach ($border, $label, $pad, $frame) {
+ $_->formForget if $cw->{m_geoMgr} eq "form";
+ $_->packForget if ($cw->{m_geoMgr} eq "pack" && $_->ismapped);
+ }
+
+ if ($side eq "acrosstop") {
+
+ my $y = $label->reqheight / 2;
+ my $ph = $y - ($border->cget(-bd));
+ $ph = 0 if $ph < 0;
+
+ $label->form(qw/-top 0 -left 4 -padx 6 -pady 2/);
+ $border->form(-top => $y,
+ qw/-bottom -1 -left 0 -right -1 -padx 2 -pady 2/);
+ $pad->form(-bottom => $ph,
+ qw/-top 0 -left 0 -right -1/);
+ $frame->form(-top => $pad,
+ qw/-bottom -1 -left 0 -right -1 -fill both/);
+ $cw->{m_geoMgr} = "form";
+
+ } else {
+
+ $label->pack(-side => $side);
+ $frame->pack(-expand => 1, -fill => 'both');
+ $border->pack(-side => $side, -expand => 1, -fill => 'both');
+ $cw->{m_geoMgr} = "pack";
+ }
+}
+
+sub form {
+ my $cw = shift;
+ $cw = $cw->Subwidget('frame')
+ if (@_ && $_[0] =~ /^(?:slaves)$/);
+ $cw->SUPER::form(@_);
+}
+
+sub grid {
+ my $cw = shift;
+ $cw = $cw->Subwidget('frame') if (@_ && $_[0] =~
+ /^(?:bbox
+ |columnconfigure
+ |location
+ |propagate
+ |rowconfigure
+ |size
+ |slaves)
+ $/x);
+ $cw->SUPER::grid(@_);
+}
+
+
+sub pack {
+ my $cw = shift;
+ $cw = $cw->Subwidget('frame')
+ if (@_ && $_[0] =~ /^(?:propagate|slaves)$/);
+ $cw->SUPER::pack(@_);
+}
+
+sub place {
+ my $cw = shift;
+ $cw = $cw->Subwidget('frame')
+ if (@_ && $_[0] =~ /^(?:slaves)$/);
+ $cw->SUPER::place(@_);
+}
+
+1;
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/LabRadio.pm b/Master/tlpkg/tlperl/lib/Tk/LabRadio.pm
new file mode 100644
index 00000000000..69e07b12f01
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/LabRadio.pm
@@ -0,0 +1,63 @@
+# Class LabeledRadiobutton
+
+package Tk::LabRadiobutton;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/LabRadio.pm#4 $
+
+require Tk::Frame;
+use base qw(Tk::Frame);
+
+Construct Tk::Widget 'LabRadiobutton';
+
+
+# Although there is no fundamental reason why -radiobuttons
+# should be fixed at create time converting to METHOD form
+# is extra work an this can serve as an example of CreateArgs
+# checking.
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ $parent->BackTrace("Must specify -radiobuttons for $package")
+ unless (defined $args->{'-radiobuttons'});
+ return $package->SUPER::CreateArgs($parent,$args);
+}
+
+sub Populate
+{
+ require Tk::Radiobutton;
+
+ my ($cw,$args) = @_;
+ $cw->SUPER::Populate($args);
+
+ # LabeledRadiobutton(s) constructor.
+ #
+ # Advertised subwidgets: the name(s) of your radiobutton(s).
+
+
+
+ my (@widgets) = ();
+
+ my $rl;
+ foreach $rl (@{$args->{'-radiobuttons'}})
+ {
+ my $r = $cw->Component( Radiobutton => $rl,
+ -text => $rl,
+ -value => $rl );
+ $r->pack(-side => 'left', -expand => 1, -fill => 'both');
+ push(@widgets,$r);
+ $cw->{Configure}{-value} = $rl;
+ }
+
+ $cw->BackTrace('No buttons') unless (@widgets);
+
+ $cw->ConfigSpecs('-variable' => [ \@widgets, undef, undef, \$cw->{Configure}{-value} ],
+ '-radiobuttons' => [ 'PASSIVE', undef, undef, undef ],
+ '-value' => [ 'PASSIVE', undef, undef, $cw->{Configure}{-value} ],
+ 'DEFAULT' => [ \@widgets ]
+ );
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Label.pm b/Master/tlpkg/tlperl/lib/Tk/Label.pm
new file mode 100644
index 00000000000..ebea1741c2f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Label.pm
@@ -0,0 +1,21 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Tk::Label;
+require Tk;
+
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Label.pm#6 $
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Label';
+
+sub Tk_cmd { \&Tk::label }
+
+1;
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Labelframe.pm b/Master/tlpkg/tlperl/lib/Tk/Labelframe.pm
new file mode 100644
index 00000000000..14c577b5e35
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Labelframe.pm
@@ -0,0 +1,16 @@
+package Tk::Labelframe;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #2 $ =~ /#(\d+)/;
+
+# New widget which is a kind of Frame with a label ...
+
+use base qw(Tk::Frame);
+
+Construct Tk::Widget 'Labelframe';
+
+sub Tk_cmd { \&Tk::labelframe }
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Listbox.pm b/Master/tlpkg/tlperl/lib/Tk/Listbox.pm
new file mode 100644
index 00000000000..249a8eed7f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Listbox.pm
@@ -0,0 +1,910 @@
+# Converted from listbox.tcl --
+#
+# This file defines the default bindings for Tk listbox widgets.
+#
+# @(#) listbox.tcl 1.7 94/12/17 16:05:18
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+# Modifications from standard Listbox.pm
+# --------------------------------------
+# 27-JAN-2001 Alasdair Allan
+# Modified for local use by adding tied scalar and arrays
+# Implemented TIESCALAR, TIEARRAY, FETCH, FETCHSIZE, STORE, CLEAR & EXTEND
+# 31-JAN-2001 Alasdair Allan
+# Made changes suggested by Tim Jenness
+# 03-FEB-2001 Alasdair Allan
+# Modified STORE for tied scalars to clear and select elements
+# 06-FEB-2001 Alasdair Allan
+# Added POD documentation for tied listbox
+# 13-FEB-2001 Alasdair Allan
+# Implemented EXISTS, DELETE, PUSH, POP, SHIFT & UNSHIFT for tied arrays
+# 14-FEB-2001 Alasdair Allan
+# Implemented SPLICE for tied arrays, all tied functionality in place
+# 16-FEB-2001 Alasdair Allan
+# Tweak to STORE interface for tied scalars
+# 23-FEB-2001 Alasdair Allan
+# Added flag to FETCH for tied scalars, modified to return hashes
+# 24-FEB-2001 Alasdair Allan
+# Updated Pod documentation
+#
+
+package Tk::Listbox;
+
+use vars qw($VERSION @Selection $Prev);
+use strict;
+$VERSION = sprintf '4.%03d', q$Revision: #14 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev $XS_VERSION);
+use Tk::Clipboard ();
+use AutoLoader;
+
+use base qw(Tk::Clipboard Tk::Widget);
+
+Construct Tk::Widget 'Listbox';
+
+bootstrap Tk::Listbox;
+
+sub Tk_cmd { \&Tk::listbox }
+
+Tk::Methods('activate','bbox','curselection','delete','get','index',
+ 'insert','itemcget','itemconfigure','nearest','scan','see',
+ 'selection','size','xview','yview');
+
+use Tk::Submethods ( 'selection' => [qw(anchor clear includes set)],
+ 'scan' => [qw(mark dragto)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ );
+
+*Getselected = \&getSelected;
+
+sub clipEvents
+{
+ return qw[Copy];
+}
+
+sub BalloonInfo
+{
+ my ($listbox,$balloon,$X,$Y,@opt) = @_;
+ my $e = $listbox->XEvent;
+ return if !$e;
+ my $index = $listbox->index('@' . $e->x . ',' . $e->y);
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$listbox);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'ARRAY'))
+ {
+ $balloon->Subclient($index);
+ if (defined $info->[$index])
+ {
+ return $info->[$index];
+ }
+ return '';
+ }
+ return $info;
+ }
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $class->SUPER::ClassInit($mw);
+ # Standard Motif bindings:
+ $mw->bind($class,'<1>',[sub {
+ my $w = shift;
+ if (Tk::Exists($w)) {
+ $w->BeginSelect(@_);
+ }
+ }, Ev('index',Ev('@'))]);
+ $mw->bind($class, '<Double-1>' => \&Tk::NoOp);
+ $mw->bind($class,'<B1-Motion>',['Motion',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<ButtonRelease-1>','ButtonRelease_1');
+ ;
+ $mw->bind($class,'<Shift-1>',['BeginExtend',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<Control-1>',['BeginToggle',Ev('index',Ev('@'))]);
+
+ $mw->bind($class,'<B1-Leave>',['AutoScan',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<Up>',['UpDown',-1]);
+ $mw->bind($class,'<Shift-Up>',['ExtendUpDown',-1]);
+ $mw->bind($class,'<Down>',['UpDown',1]);
+ $mw->bind($class,'<Shift-Down>',['ExtendUpDown',1]);
+
+ $mw->XscrollBind($class);
+ $mw->bind($class,'<Prior>', sub {
+ my $w = shift;
+ $w->yview('scroll',-1,'pages');
+ $w->activate('@0,0');
+ });
+ $mw->bind($class,'<Next>', sub {
+ my $w = shift;
+ $w->yview('scroll',1,'pages');
+ $w->activate('@0,0');
+ });
+ $mw->bind($class,'<Control-Prior>', ['xview', 'scroll', -1, 'pages']);
+ $mw->bind($class,'<Control-Next>', ['xview', 'scroll', 1, 'pages']);
+ # <Home> and <End> defined in XscrollBind
+ $mw->bind($class,'<Control-Home>','Cntrl_Home');
+ ;
+ $mw->bind($class,'<Shift-Control-Home>',['DataExtend',0]);
+ $mw->bind($class,'<Control-End>','Cntrl_End');
+ ;
+ $mw->bind($class,'<Shift-Control-End>',['DataExtend','end']);
+ # XXX What about <<Copy>>? Already handled in Tk::Clipboard?
+ # $class->clipboardOperations($mw,'Copy');
+ $mw->bind($class,'<space>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Select>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Control-Shift-space>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Shift-Select>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Escape>','Cancel');
+ $mw->bind($class,'<Control-slash>','SelectAll');
+ $mw->bind($class,'<Control-backslash>','Cntrl_backslash');
+ ;
+ # Additional Tk bindings that aren't part of the Motif look and feel:
+ $mw->bind($class,'<2>',['scan','mark',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['scan','dragto',Ev('x'),Ev('y')]);
+
+ $mw->MouseWheelBind($class); # XXX Both needed?
+ $mw->YMouseWheelBind($class);
+ return $class;
+}
+
+1;
+__END__
+
+sub TIEARRAY {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+
+
+sub TIESCALAR {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+# FETCH
+# -----
+# Return either the full contents or only the selected items in the
+# box depending on whether we tied it to an array or scalar respectively
+sub FETCH {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # Define the return variable
+ my $result;
+
+ # Check whether we are have a tied array or scalar quantity
+ if ( @_ ) {
+ my $i = shift;
+ # The Tk:: Listbox has been tied to an array, we are returning
+ # an array list of the current items in the Listbox
+ $result = $self->get($i);
+ } else {
+ # The Tk::Listbox has been tied to a scalar, we are returning a
+ # reference to an array or hash containing the currently selected items
+ my ( @array, %hash );
+
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ $result = [$self->curselection];
+ } elsif ( $options{ReturnType} eq "element" ) {
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $selection ( $self->curselection ) {
+ %hash = ( %hash, $selection => $self->get($selection)); }
+ $result = \%hash;
+ }
+ } else {
+ # return elements (default)
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ }
+ }
+ return $result;
+}
+
+# FETCHSIZE
+# ---------
+# Return the number of elements in the Listbox when tied to an array
+sub FETCHSIZE {
+ my $class = shift;
+ return ${$class->{OBJECT}}->size();
+}
+
+# STORE
+# -----
+# If tied to an array we will modify the Listbox contents, while if tied
+# to a scalar we will select and clear elements.
+sub STORE {
+
+ if ( scalar(@_) == 2 ) {
+ # we have a tied scalar
+ my ( $class, $selected ) = @_;
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # clear currently selected elements
+ $self->selectionClear(0,'end');
+
+ # set selected elements
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ for ( my $i=0; $i < scalar(@$selected) ; $i++ ) {
+ for ( my $j=0; $j < $self->size() ; $j++ ) {
+ if( $j == $$selected[$i] ) {
+ $self->selectionSet($j); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "element" ) {
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $key ( keys %$selected ) {
+ $self->selectionSet($key)
+ if $$selected{$key} eq $self->get($key);
+ }
+ }
+ } else {
+ # return elements (default)
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ }
+
+ } else {
+ # we have a tied array
+ my ( $class, $index, $value ) = @_;
+ my $self = ${$class->{OBJECT}};
+
+ # check size of current contents list
+ my $sizeof = $self->size();
+
+ if ( $index <= $sizeof ) {
+ # Change a current listbox entry
+ $self->delete($index);
+ $self->insert($index, $value);
+ } else {
+ # Add a new value
+ if ( defined $index ) {
+ $self->insert($index, $value);
+ } else {
+ $self->insert("end", $value);
+ }
+ }
+ }
+}
+
+# CLEAR
+# -----
+# Empty the Listbox of contents if tied to an array
+sub CLEAR {
+ my $class = shift;
+ ${$class->{OBJECT}}->delete(0, 'end');
+}
+
+# EXTEND
+# ------
+# Do nothing and be happy about it
+sub EXTEND { }
+
+# PUSH
+# ----
+# Append elements onto the Listbox contents
+sub PUSH {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert('end', @list);
+}
+
+# POP
+# ---
+# Remove last element of the array and return it
+sub POP {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get('end');
+ ${$class->{OBJECT}}->delete('end');
+ return $value;
+}
+
+# SHIFT
+# -----
+# Removes the first element and returns it
+sub SHIFT {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get(0);
+ ${$class->{OBJECT}}->delete(0);
+ return $value
+}
+
+# UNSHIFT
+# -------
+# Insert elements at the beginning of the Listbox
+sub UNSHIFT {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert(0, @list);
+}
+
+# DELETE
+# ------
+# Delete element at specified index
+sub DELETE {
+ my ( $class, @list ) = @_;
+
+ my $value = ${$class->{OBJECT}}->get(@list);
+ ${$class->{OBJECT}}->delete(@list);
+ return $value;
+}
+
+# EXISTS
+# ------
+# Returns true if the index exist, and undef if not
+sub EXISTS {
+ my ( $class, $index ) = @_;
+ return undef unless ${$class->{OBJECT}}->get($index);
+}
+
+# SPLICE
+# ------
+# Performs equivalent of splice on the listbox contents
+sub SPLICE {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+
+ # check for arguments
+ my @elements;
+ if ( scalar(@_) == 0 ) {
+ # none
+ @elements = $self->get(0,'end');
+ $self->delete(0,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];;
+
+ } elsif ( scalar(@_) == 1 ) {
+ # $offset
+ my ( $offset ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,'end');
+ $self->delete($start,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,'end');
+ $self->delete($offset,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } elsif ( scalar(@_) == 2 ) {
+ # $offset and $length
+ my ( $offset, $length ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } else {
+ # $offset, $length and @list
+ my ( $offset, $length, @list ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ $self->insert($start,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ $self->insert($offset,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+ }
+}
+
+# ----
+
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters a listbox
+# widget or a listbox widget receives the input focus. It creates
+# all of the class bindings for listboxes.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+
+sub xyIndex
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ return $w->index($Ev->xy);
+}
+
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat;
+ $w->activate($Ev->xy);
+}
+
+
+sub Cntrl_Home
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate(0);
+ $w->see(0);
+ $w->selectionClear(0,'end');
+ $w->selectionSet(0);
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+
+sub Cntrl_End
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate('end');
+ $w->see('end');
+ $w->selectionClear(0,'end');
+ $w->selectionSet('end');
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+
+sub Cntrl_backslash
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if ($w->cget('-selectmode') ne 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+
+# BeginSelect --
+#
+# This procedure is typically invoked on button-1 presses. It begins
+# the process of making a selection in the listbox. Its exact behavior
+# depends on the selection mode currently in effect for the listbox;
+# see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginSelect
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'multiple')
+ {
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+ else
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ @Selection = ();
+ $Prev = $el
+ }
+ $w->focus if ($w->cget('-takefocus'));
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+# Motion --
+#
+# This procedure is called to process mouse motion events while
+# button 1 is down. It may move or extend the selection, depending
+# on the listbox's selection mode.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element under the pointer (must be a number).
+sub Motion
+{
+ my $w = shift;
+ my $el = shift;
+ if (defined($Prev) && $el == $Prev)
+ {
+ return;
+ }
+ my $anchor = $w->index('anchor');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $Prev = $el;
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+ elsif ($mode eq 'extended')
+ {
+ my $i = $Prev;
+ if (!defined $i || $i eq '')
+ {
+ $i = $el;
+ $w->selectionSet($el);
+ }
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionSet('anchor',$el)
+ }
+ else
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionClear('anchor',$el)
+ }
+ if (!@Selection)
+ {
+ @Selection = $w->curselection;
+ }
+ while ($i < $el && $i < $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i++
+ }
+ while ($i > $el && $i > $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i--
+ }
+ $Prev = $el;
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+# BeginExtend --
+#
+# This procedure is typically invoked on shift-button-1 presses. It
+# begins the process of extending a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginExtend
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended' && $w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ else
+ {
+ # No selection yet; simulate the begin-select operation.
+ $w->BeginSelect($el);
+ }
+}
+# BeginToggle --
+#
+# This procedure is typically invoked on control-button-1 presses. It
+# begins the process of toggling a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginToggle
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended')
+ {
+ @Selection = $w->curselection();
+ $Prev = $el;
+ $w->selectionAnchor($el);
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+# y - The y-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ return if !Tk::Exists($w);
+ my $x = shift;
+ my $y = shift;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll',1,'units')
+ }
+ elsif ($y < 0)
+ {
+ $w->yview('scroll',-1,'units')
+ }
+ elsif ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->Motion($w->index("@" . $x . ',' . $y));
+ $w->RepeatId($w->after(50,'AutoScan',$w,$x,$y));
+}
+# UpDown --
+#
+# Moves the location cursor (active element) up or down by one element,
+# and changes the selection if we're in browse or extended selection
+# mode.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub UpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+ elsif ($mode eq 'extended')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->selectionAnchor('active');
+ $Prev = $w->index('active');
+ @Selection = ();
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+# ExtendUpDown --
+#
+# Does nothing unless we're in extended selection mode; in this
+# case it moves the location cursor (active element) up or down by
+# one element, and extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub ExtendUpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ if ($w->cget('-selectmode') ne 'extended')
+ {
+ return;
+ }
+ my $active = $w->index('active');
+ if (!@Selection)
+ {
+ $w->selectionSet($active);
+ @Selection = $w->curselection;
+ }
+ $w->activate($active + $amount);
+ $w->see('active');
+ $w->Motion($w->index('active'))
+}
+# DataExtend
+#
+# This procedure is called for key-presses such as Shift-KEndData.
+# If the selection mode isn't multiple or extend then it does nothing.
+# Otherwise it moves the active element to el and, if we're in
+# extended mode, extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# el - An integer element number.
+sub DataExtend
+{
+ my $w = shift;
+ my $el = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'extended')
+ {
+ $w->activate($el);
+ $w->see($el);
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->activate($el);
+ $w->see($el)
+ }
+}
+# Cancel
+#
+# This procedure is invoked to cancel an extended selection in
+# progress. If there is an extended selection in progress, it
+# restores all of the items between the active one and the anchor
+# to their previous selection state.
+#
+# Arguments:
+# w - The listbox widget.
+sub Cancel
+{
+ my $w = shift;
+ if ($w->cget('-selectmode') ne 'extended' || !defined $Prev)
+ {
+ return;
+ }
+ my $first = $w->index('anchor');
+ my $last = $Prev;
+ if ($first > $last)
+ {
+ ($first, $last) = ($last, $first);
+ }
+ $w->selectionClear($first,$last);
+ while ($first <= $last)
+ {
+ if (Tk::lsearch(\@Selection,$first) >= 0)
+ {
+ $w->selectionSet($first)
+ }
+ $first++
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+# SelectAll
+#
+# This procedure is invoked to handle the "select all" operation.
+# For single and browse mode, it just selects the active element.
+# Otherwise it selects everything in the widget.
+#
+# Arguments:
+# w - The listbox widget.
+sub SelectAll
+{
+ my $w = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ else
+ {
+ $w->selectionSet(0,'end')
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# Perl/Tk extensions:
+sub SetList
+{
+ my $w = shift;
+ $w->delete(0,'end');
+ $w->insert('end',@_);
+}
+
+sub deleteSelected
+{
+ my $w = shift;
+ my $i;
+ foreach $i (reverse $w->curselection)
+ {
+ $w->delete($i);
+ }
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ my $index = $w->index('active') || $w->index($w->XEvent->xy);
+ my $str;
+ eval {local $SIG{__DIE__}; $str = $w->clipboardGet };
+ return if $@;
+ foreach (split("\n",$str))
+ {
+ $w->insert($index++,$_);
+ }
+}
+
+sub getSelected
+{
+ my ($w) = @_;
+ my $i;
+ my (@result) = ();
+ foreach $i ($w->curselection)
+ {
+ push(@result,$w->get($i));
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+
+
+1;
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/MMtry.pm b/Master/tlpkg/tlperl/lib/Tk/MMtry.pm
new file mode 100644
index 00000000000..3ef2f8868ab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/MMtry.pm
@@ -0,0 +1,54 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::MMtry;
+use Config;
+require Exporter;
+
+use vars qw($VERSION @EXPORT);
+$VERSION = sprintf '4.%03d', q$Revision: #9 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Exporter);
+@EXPORT = qw(try_compile try_run);
+use strict;
+use File::Basename;
+use File::Spec;
+
+my $stderr_too = ($^O eq 'MSWin32') ? '' : '2>&1';
+
+sub try_compile
+{
+ my ($file,$inc,$lib) = @_;
+ $inc = [] unless $inc;
+ $lib = [] unless $lib;
+ my $out = basename($file,'.c').$Config{'exe_ext'};
+ warn "Test Compiling $file\n";
+ my $msgs = `$Config{'cc'} -o $out $Config{'ccflags'} @$inc $file @$lib $stderr_too`;
+ my $ok = ($? == 0);
+# warn $msgs if $msgs;
+ unlink($out) if (-f $out);
+ return $ok;
+}
+
+sub try_run
+{
+ my ($file,$inc,$lib) = @_;
+ $inc = [] unless $inc;
+ $lib = [] unless $lib;
+ my $out = basename($file,'.c').$Config{'exe_ext'};
+ warn "Test Compile/Run $file\n";
+ my $msgs = `$Config{'cc'} -o $out $Config{'ccflags'} @$inc $file @$lib $stderr_too`;
+ my $ok = ($? == 0);
+# warn "$Config{'cc'} -o $out $Config{'ccflags'} @$inc $file @$lib:\n$msgs" if $msgs;
+ if ($ok)
+ {
+ my $path = File::Spec->rel2abs($out);
+ $msgs = `$path $stderr_too`;
+ $ok = ($? == 0);
+# warn "$path:$msgs" if $msgs;
+ }
+ unlink($out) if (-f $out);
+ return $ok;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/MMutil.pm b/Master/tlpkg/tlperl/lib/Tk/MMutil.pm
new file mode 100644
index 00000000000..84f3aa862f5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/MMutil.pm
@@ -0,0 +1,600 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::MMutil;
+use ExtUtils::MakeMaker;
+use Cwd;
+use Config;
+use Carp;
+use File::Basename;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #21 $ =~ /\D(\d+)\s*$/;
+
+# warn __FILE__." $VERSION\n";
+
+use Tk::MakeDepend;
+
+use Tk::Config qw(!$VERSION);
+use vars qw($IsWin32);
+
+*IsWin32 = \$main::IsWin32;
+$IsWin32 = ($^O eq 'MSWin32' || $Config{'ccflags'} =~ /-D_?WIN32_?/)
+ unless defined $IsWin32;
+
+@MYEXPORT = qw(pasthru perldepend cflags const_config constants installbin c_o xs_o makefile manifypods);
+
+sub arch_prune
+{
+ my $hash = shift;
+ foreach (keys %$hash)
+ {
+ if ($win_arch eq 'x')
+ {
+ delete $hash->{$_} if /Win[A-Z0-9]/ or /OS2/ or /ImgUtil/ or /^x/;
+ }
+ elsif ($win_arch eq 'open32')
+ {
+ delete $hash->{$_} if /Unix|Mwm/ and not /tclUnix/;
+ delete $hash->{$_} if /winMain|dllMain/;
+ }
+ elsif ($win_arch eq 'pm')
+ {
+ delete $hash->{$_}
+ if /Unix|Mwm/ and not
+ /tclUnix|Unix(3d|Button|Dialog|Color|Embed|Focus|Font|Menu|Scrlbr|Send|Int\.|Scale)/;
+ delete $hash->{$_} if /os2Main|dllMain|tkOS2Dll|^x(colors\.c|gc\.)/;
+ delete $hash->{$_} if /ImgUtil|tkWin[A-Z0-9]/ and not /OS2/;
+ }
+ elsif ($win_arch eq 'MSWin32')
+ {
+ delete $hash->{$_} if /Mwm/ and not /tclUnix/;
+ delete $hash->{$_} if /winMain|dllMain/;
+ # delete $hash->{$_} if /^Xrm/;
+ }
+ }
+}
+
+sub mTk_postamble
+{
+ my ($self) = @_;
+ my $dep = "config :: \$(C_FILES) \$(H_FILES)\n\t$self->{NOECHO}\$(NOOP)\n";
+ my $mTk = $self->{'MTK'};
+ $dep .= "# Begin Munging dependencies\n";
+ foreach my $file (sort keys %$mTk)
+ {
+ $dep .= "$file : ".$mTk->{$file}." \$(TKDIR)/pTk/Tcl-pTk\n";
+ $dep .= "\t\$(PERL) \$(TKDIR)/pTk/Tcl-pTk ".$mTk->{$file}." $file\n";
+ }
+ $dep .= "# End Munging dependencies\n\n";
+ return $dep;
+}
+
+sub mTk_CHO
+{
+ my $self = shift;
+ my $mTk = shift;
+ my $exc = shift;
+ my %c;
+ my %h;
+ foreach (@{$self->{H}}) { $h{$_} = 1 }
+ foreach (@{$self->{C}}) { $c{$_} = 1 }
+ foreach (keys %$mTk)
+ {
+ if (/\.c$/)
+ {
+ $c{$_} = 1;
+ }
+ elsif (/\.h$/)
+ {
+ $h{$_} = 1;
+ }
+ }
+ foreach (keys %$exc)
+ {
+ if (/\.c$/)
+ {
+ delete $c{$_};
+ }
+ elsif (/\.h$/)
+ {
+ delete $h{$_};
+ }
+ }
+ while (@_)
+ {
+ my $name = shift;
+ cluck("No $name") unless (exists $c{$name});
+ delete $c{$name}
+ }
+ arch_prune(\%h);
+ arch_prune(\%c);
+ $self->{'H'} = [sort keys %h];
+ $self->{'C'} = [sort keys %c];
+ my(@o_files) = @{$self->{C}};
+ $self->{O_FILES} = [grep s/\.c(pp|xx|c)?$/$self->{OBJ_EXT}/i, @o_files] ;
+ $self->{'MTK'} = $mTk;
+ my $tk = installed_tk();
+ my $perl = $self->{'PERL'};
+ if ($IsWin32 && !-f $perl && -f "$perl.exe")
+ {
+ print "perl=$perl X=$^X\n";
+ $perl = "$perl.exe";
+ $self->{'PERL'} = $perl;
+ }
+ foreach my $file (sort keys %$mTk)
+ {
+ unless (-f $file && -M $file < -M $mTk->{$file})
+ {
+ warn "Extracting $file\n";
+ system($perl,"$tk/pTk/Tcl-pTk",$mTk->{$file},$file);
+ }
+ }
+}
+
+my %visited;
+
+sub abspath
+{
+ my $dir = shift;
+ my $here = getcwd() || die "Cannot get current directory:$!";
+ if (chdir($dir))
+ {
+ $dir = getcwd();
+ chdir($here) || die "Cannot cd back to $here:$!";
+ }
+ return $dir;
+}
+
+sub relpath
+{
+ my ($path,$dir) = @_;
+ unless (defined $dir)
+ {
+ $dir = (-d $path) ? $path : dirname($path);
+ }
+ if (defined $dir and -d $dir)
+ {
+ if ($path =~ m#^\Q$dir\E([/\\]?.*)$#)
+ {
+ my $base = $1;
+ my $here = getcwd;
+ if ($here =~ m#^\Q$dir\E([/\\]?.*)#)
+ {
+ my $depth = reverse($1);
+ if ($depth)
+ {
+ $depth =~ s,[^/\\]+,..,g;
+ }
+ else
+ {
+ $depth = '.' ;
+ }
+ $depth =~ s,[/\\]+$,,;
+ $base =~ s,^[/\\]+,,;
+ $depth .= "/$base" if ($base);
+ if (-e $depth)
+ {
+ # print "$path is $depth from $here\n";
+ return $depth;
+ }
+ else
+ {
+ warn "Cannot find $depth\n";
+ }
+ }
+ else
+ {
+ unless(exists $visited{$here})
+ {
+ $visited{$here} = 1;
+ warn "$here does not start with $dir\n";
+ warn "i.e. building outside Tk itself\n";
+ }
+ }
+ }
+ else
+ {
+ die "'$path' not under '$dir'\n";
+ }
+ }
+ else
+ {
+ die "Cannot get directory for $path\n";
+ }
+ return $path;
+}
+
+use strict;
+
+sub upgrade_pic
+{
+ my $flags = '';
+ die 'upgrade_pic is obsolete';
+ return $flags;
+}
+
+sub pasthru
+{
+ my $self = shift;
+ my $str = $self->MM::pasthru;
+ if ($str =~ s/^\s+INC=.*\n//m)
+ {
+ $str = "# - Do NOT pasthru INC for Tk - it is computed by subdir\n$str"
+ }
+ if ($str =~ s/\bLIB="\$\(LIB\)"//)
+ {
+ $str = qq[# - Drop LIB="\$(LIB)" - not used\n$str];
+ }
+ $str = "#Tk::MMutil pasthru\n$str";
+ return $str;
+}
+
+sub perldepend
+{
+ my $self = shift;
+ my $str = $self->MM::perldepend;
+ my $name;
+ my %c;
+ foreach my $file (@{$self->{'C'}})
+ {
+ $c{$file} = 1;
+ }
+ foreach my $file (keys %{$self->{'XS'}})
+ {
+ $c{$file} = 1;
+ delete $c{$self->{'XS'}{$file}};
+ }
+ my @files = grep(-f $_,sort(keys %c));
+ if (@files)
+ {
+ my $tk = installed_tk();
+ my @inc = split(/\s+/,$self->{'INC'});
+ my @def = split(/\s+/,$self->{'DEFINE'});
+ push(@def,qw(-DWIN32 -D__WIN32__)) if ($IsWin32);
+ if ($^O eq 'cygwin')
+ {
+ push(@def,qw(-D__CYGWIN__));
+ if ($win_arch eq 'MSWin32')
+ {
+ push(@def,qw(-D__WIN32__)) unless $self->{'DEFINE'} =~ /-D__WIN32__/;
+ push(@def,qw(-DWIN32)) if $self->{'NAME'} eq 'Tk::pTk';
+ }
+ elsif ($win_arch eq 'x')
+ {
+ push(@def,qw(-U_WIN32));
+ }
+ }
+ foreach (@inc)
+ {
+ s/\$\(TKDIR\)/$tk/g;
+ warn "Odd:$_" if /\$\(/;
+ }
+ $str .= Tk::MakeDepend::command_line(@inc,@def,@files) unless ($ENV{'TKNOMAKEDEPEND'});
+ }
+ return $str;
+}
+
+sub const_config
+{
+ my $self = shift;
+ my $name;
+ foreach $name (grep /(%|\.(old|bak|q4|orig|rej))$/,keys %{$self->{PM}})
+ {
+ delete $self->{PM}->{$name};
+ }
+ my $flags = $self->{'CCCDLFLAGS'};
+ $flags =~ s/(-[fK]?\s*)pic\b/${1}PIC/;
+ $self->{'CCCDLFLAGS'} = $flags;
+ if ($^O eq 'MSWin32' && $Config{'ccflags'} =~ /-DPERL_OBJECT/)
+ {
+ $self->{'LDFLAGS'} =~ s/-(debug|pdb:\w+)\s+//g;
+ $self->{'LDDLFLAGS'} =~ s/-(debug|pdb:\w+)\s+//g;
+ }
+ elsif ($^O eq 'darwin' )
+ {
+ $self->{'LDDLFLAGS'} =~ s/-flat_namespace//;
+ $self->{'LDDLFLAGS'} =~ s/-undefined\s+suppress//;
+ if ( -e "$Config{'archlib'}/CORE/$Config{'libperl'}" ) {
+ $self->{'LDDLFLAGS'} .= " -L\${PERL_ARCHLIB}/CORE -lperl ";
+ }
+ elsif ( -e "/System/Library/Perl/darwin/CORE/libperl.dylib" ) {
+ $self->{'LDDLFLAGS'} .= " -L/System/Library/Perl/darwin/CORE -lperl ";
+ }
+ else {
+ warn "Can't find libperl.dylib";
+ }
+ $self->{'LDFLAGS'} =~ s/-flat_namespace//;
+ $self->{'LDFLAGS'} =~ s/-undefined\s+suppress//;
+ } elsif ($^O =~ /(openbsd)/i)
+ {
+ # -Bforcearchive is bad news for Tk - we don't want all of libpTk.a in all .so-s.
+ $self->{'LDDLFLAGS'} =~ s/-Bforcearchive\s*//g;
+ }
+ return $self->MM::const_config;
+}
+
+sub constants
+{
+ my $self = shift;
+ local $_ = $self->MM::constants;
+ s/(\.SUFFIXES)/$1:\n$1/;
+ $_ .= "\nGCCOPT = $Tk::Config::gccopt\n";
+ if ($IsWin32)
+ {
+ }
+ $_;
+}
+
+sub cflags
+{
+ my $self = shift;
+ local $_ = $self->MM::cflags;
+ if (0 && $IsWin32)
+ {
+ if ($Config::Config{cc} =~ /^bcc/i) {
+ # s/(CCFLAGS\s*=)/$1/;
+ }
+ else {
+ s/(CCFLAGS\s*=)/$1 \$(cflags) \$(cvarsdll)/;
+ s/(OPTIMIZE\s*=).*/$1 \$(cdebug)/;
+ }
+ }
+ $_;
+}
+
+sub c_o
+{
+ my $self = shift;
+ local $_ = $self->MM::c_o;
+ s/\$\(DEFINE\)/\$(DEFINE) \$(GCCOPT)/g;
+ $_;
+}
+
+sub xs_o
+{
+ my $self = shift;
+ local $_ = $self->MM::xs_o;
+ s/\$\(DEFINE\)/\$(DEFINE) \$(GCCOPT)/g;
+ $_;
+}
+
+sub manifypods
+{
+ my $self = shift;
+ # Maybe always call UNIX version - we HTMLize them later
+ local $_ = $self->MM::manifypods;
+ if ($] >= 5.00565)
+ {
+ s/(POD2MAN_EXE.*pod2man.*)/$1 --center "perl\/Tk Documentation" --release "Tk\$(VERSION)"/;
+ }
+ elsif ($] >= 5.003)
+ {
+ s/(POD2MAN_EXE.*pod2man.*)/$1 -center "perl\/Tk Documentation" -release "Tk\$(VERSION)"/;
+ }
+ else
+ {
+ s/(POD2MAN_EXE.*pod2man.*)/$1 -center \\"perl\/Tk Documentation\\" -release \\"Tk\$(VERSION)\\"/;
+ }
+ s/\bpod::/Tk::/mg;
+ s/\bpTk:://mg;
+ $_;
+}
+
+sub findINC
+{
+ my $file = shift;
+ my $dir;
+ foreach $dir (@INC)
+ {
+ my $try = "$dir/$file";
+ return $try if (-f $try);
+ }
+ die "Cannot find $file in \@INC\n";
+}
+
+
+sub makefile
+{
+ my $self = shift;
+ my $str = $self->MM::makefile;
+ my $mm = findINC('Tk/MMutil.pm');
+ my $cf = findINC('Tk/Config.pm');
+ $str =~ s/(\$\(CONFIGDEP\))/$1 $cf $mm/;
+ $str =~ s/\$\(OBJECT\)\s*:.*\n//;
+ return $str;
+}
+
+sub installed_tk
+{
+ my $tk;
+ my $dir;
+ foreach $dir (@INC)
+ {
+ if (-f "$dir/tkGlue.h")
+ {
+ $tk = relpath($dir);
+ last;
+ }
+ my $try = "$dir/Tk";
+ if (-f "$try/tkGlue.h")
+ {
+ $tk = relpath($try,$dir);
+ last;
+ }
+ }
+ die "Cannot find perl/Tk include files\n" unless (defined $tk);
+ $tk =~ s,^(\./)+,,;
+ return $tk;
+}
+
+sub installbin
+{
+ my ($self) = @_;
+ my $str = $self->MM::installbin;
+ my $prog = 'perl'; # $self->{'MAP_TARGET'} || 'perl';
+ my $inc = findINC('Tk/MMutil.pm');
+ $inc =~ s,/Tk/MMutil.pm$,,;
+ $inc = relpath($inc);
+ $str =~ s/^\tcp\s/\t\$(PERL) -I$inc -MTk::install -e installbin $prog /mg;
+ return $str;
+}
+
+sub findpTk
+{
+ my $ptk;
+ my $dir;
+ foreach $dir (map(abspath($_),@_),@INC)
+ {
+ my $try = "$dir/pTk";
+ if (-d $try && (-f "$try/Lang.h" || -f "$try/libpTk\$(LIB_EXT)"))
+ {
+ $ptk = relpath($try,$dir);
+ last;
+ }
+ }
+ confess "Cannot locate pTk\n" unless (defined $ptk);
+ return $ptk;
+}
+
+sub find_subdir
+{
+ my %dir;
+ opendir(DIR,'.') || die "Cannot opendir:$!";
+ foreach my $dir (readdir(DIR))
+ {
+ next if $dir =~ /^\.\.?$/;
+ next if -l $dir;
+ next unless -d $dir;
+ if (-f "$dir/Makefile.PL")
+ {
+ my $exc = ($win_arch eq 'x') ? 'Unix' : 'Win';
+ if (-f "$dir/Not${exc}.exc")
+ {
+ warn "Skip $dir on $win_arch\n"
+ }
+ else
+ {
+ $dir{$dir} = 1
+ }
+ }
+ }
+ closedir(DIR);
+ return \%dir;
+}
+
+sub TkExtMakefile
+{
+ my (%att) = @_;
+ if ($Config{'ccflags'} =~ /-DPERL_OBJECT/)
+ {
+ $att{'CAPI'} = 'TRUE' unless exists $att{'CAPI'};
+ }
+ unless (exists $att{'DIR'})
+ {
+ my $dir = find_subdir();
+ $att{'DIR'} = [sort(keys %$dir)];
+ }
+ unless (exists $att{'NAME'})
+ {
+ my $dir = getcwd;
+ my ($pack) = $dir =~ m#/([^/]+)$#;
+ if (defined $pack)
+ {
+ $att{NAME} = 'Tk::'.$pack;
+ }
+ else
+ {
+ warn "No Name and cannot deduce from '$dir'";
+ }
+ }
+ my $tk = installed_tk();
+ $att{'macro'} = {} unless (exists $att{'macro'});
+ $att{'macro'}{'TKDIR'} = $tk;
+ my @opt = ('VERSION' => $Tk::Config::VERSION,
+ 'XS_VERSION' => $Tk::Config::VERSION);
+ push(@opt,'clean' => {} ) unless (exists $att{'clean'});
+ $att{'clean'}->{FILES} = '' unless (exists $att{'clean'}->{FILES});
+ $att{'clean'}->{FILES} .= ' *.bak';
+ unless (exists($att{'linkext'}) && $att{linkext}{LINKTYPE} eq '')
+ {
+ my $ptk = findpTk($tk);
+ my @tm = (findINC('Tk/typemap'));
+ unshift(@tm,@{$att{'TYPEMAPS'}}) if (exists $att{'TYPEMAPS'});
+ $att{'TYPEMAPS'} = \@tm;
+ my $i = delete ($att{'INC'});
+ $i = (defined $i) ? "$i $inc" : $inc;
+ if (delete $att{'dynamic_ptk'})
+ {
+ push(@opt,
+ 'MYEXTLIB' => "$ptk/libpTk\$(LIB_EXT)",
+# 'dynamic_lib' => { INST_DYNAMIC_DEP => "$ptk/libpTk\$(LIB_EXT)" }
+ );
+ }
+ # Several loadable widgets use things from -lm
+ # if platform does not have a shared -lm need to link against it
+ if ($Config{libs} =~/-lm\b/)
+ {
+ my $libs = $att{'LIBS'}->[0];
+ $att{'LIBS'}->[0] = "$libs -lm" unless $libs =~ /-lm\b/;
+ }
+ if ($IsWin32 && $Config{'cc'} =~ /^bcc/)
+ {
+ # Borland compiler is very dumb at finding files
+ $i = "-I$tk $i";
+ $i = "-I$ptk $i";
+ }
+ if ($IsWin32 && $Config{'cc'} =~ /^gcc/i)
+ {
+ my $base = $Config{'libpth'};
+ $base =~ s#lib$#i386-mingw32/lib#;
+ my $extra = "-L$base -lcomdlg32 -lgdi32";
+ my $libs = $att{'LIBS'}->[0];
+ $att{'LIBS'}->[0] = "$extra $libs";
+ }
+ if ($^O eq 'cygwin')
+ {
+ # NOTE: use gcc -shared instead of dllwrap (ld2),
+ # dllwrap tries to resolve all symbols, even those
+ # that are brought in from libraries like libpTk.a
+ push(@opt,'LD' => 'gcc -shared');
+ if ($win_arch eq 'MSWin32')
+ {
+ my $extra = "-L/lib/w32api -lcomdlg32 -lgdi32";
+ my $libs = $att{'LIBS'}->[0];
+ $att{'LIBS'}->[0] = "$extra $libs";
+ $att{'DEFINE'} .= ' -D__WIN32__ -D_WIN32';
+ $att{'DEFINE'} .= ' -DWIN32' if($att{'NAME'} eq 'Tk::pTk');
+ }
+ elsif ($win_arch eq 'x')
+ {
+ $att{'DEFINE'} .= ' -U_WIN32';
+ }
+ }
+ if (delete $att{'ptk_include'})
+ {
+ $i = "-I$ptk $i" unless ($ptk eq '.');
+ }
+ else
+ {
+ $i = "-I$tk $i" unless ($tk eq '.');
+ }
+ push(@opt,'DEFINE' => $define, 'INC' => $i);
+ }
+ WriteMakefile(@opt, %att);
+}
+
+sub import
+{
+ no strict 'refs';
+ my $class = shift;
+ my @list = (@_) ? @_ : @{"${class}::MYEXPORT"};
+ my $name;
+ foreach $name (@list)
+ {
+ *{"MY::$name"} = \&{"$name"};
+ }
+}
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/MainWindow.pm b/Master/tlpkg/tlperl/lib/Tk/MainWindow.pm
new file mode 100644
index 00000000000..5384ccb560b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/MainWindow.pm
@@ -0,0 +1,213 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::MainWindow;
+use base qw(Tk::Toplevel);
+BEGIN { @MainWindow::ISA = 'Tk::MainWindow' }
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #12 $ =~ /\D(\d+)\s*$/;
+
+use Tk::CmdLine;
+use Tk qw(catch);
+require Tk::Toplevel;
+
+use Carp;
+
+$| = 1;
+
+my $pid = $$;
+
+my %Windows = ();
+
+sub CreateArgs
+{
+ my ($class,$args) = @_;
+ my $cmd = Tk::CmdLine->CreateArgs();
+ my $key;
+ foreach $key (keys %$cmd)
+ {
+ $args->{$key} = $cmd->{$key} unless exists $args->{$key};
+ }
+ my %result = $class->SUPER::CreateArgs(undef,$args);
+ my $name = delete($args->{'-name'});
+ unless (Tk::tainting)
+ {
+ $ENV{'DISPLAY'} = ':0' unless (exists $ENV{'DISPLAY'});
+ $result{'-screen'} = $ENV{'DISPLAY'} unless exists $result{'-screen'};
+ }
+ return (-name => "\l$name",%result);
+}
+
+sub new
+{
+ my $package = shift;
+ if (@_ > 0 && $_[0] =~ /:\d+(\.\d+)?$/)
+ {
+ carp "Usage $package->new(-screen => '$_[0]' ...)" if $^W;
+ unshift(@_,'-screen');
+ }
+ croak('Odd number of args'."$package->new(" . join(',',@_) .')') if @_ % 2;
+ my %args = @_;
+
+ my $top = eval { bless Create($package->CreateArgs(\%args)), $package };
+ croak($@ . "$package->new(" . join(',',@_) .')') if ($@);
+ $top->apply_command_line;
+ $top->InitBindings;
+ $top->SetBindtags;
+ $top->InitObject(\%args);
+ eval { $top->configure(%args) };
+ croak "$@" if ($@);
+ if (($top->positionfrom||'') ne 'user' and ($top->sizefrom||'') ne 'user') {
+ my $geometry = $top->optionGet(qw(geometry Geometry));
+ if ($geometry) {
+ $top->geometry($geometry);
+ }
+ }
+ $Windows{$top} = $top;
+ return $top;
+}
+
+sub _Destroyed
+{
+ my $top = shift;
+ $top->SUPER::_Destroyed;
+ delete $Windows{$top};
+}
+
+sub InitBindings
+{
+ my $mw = shift;
+ $mw->bind('all','<Tab>','focusNext');
+ # <<LeftTab>> is named <<PrevWindow>> in Tcl/Tk
+ $mw->eventAdd(qw[<<LeftTab>> <Shift-Tab>]);
+ # This is needed for XFree86 systems
+ catch { $mw->eventAdd(qw[<<LeftTab>> <ISO_Left_Tab>]) };
+ # This seems to be correct on *some* HP systems.
+ catch { $mw->eventAdd(qw[<<LeftTab>> <hpBackTab>]) };
+ $mw->bind('all','<<LeftTab>>','focusPrev');
+ if ($mw->windowingsystem eq 'x11')
+ {
+ $mw->eventAdd(qw[<<Cut>> <Control-Key-x> <Key-F20> <Meta-Key-w>]);
+ $mw->eventAdd(qw[<<Copy>> <Control-Key-c> <Key-F16> <Control-Key-w>]);
+ $mw->eventAdd(qw[<<Paste>> <Control-Key-v> <Key-F18> <Control-Key-y>]);
+ $mw->eventAdd(qw[<<PasteSelection>> <ButtonRelease-2>]);
+ $mw->eventAdd(qw[<<Undo>> <Control-Key-z> <Key-Undo> <Key-F14>
+ <Control-Key-underscore>]);
+ $mw->eventAdd(qw[<<Redo>> <Control-Key-y> <Shift-Key-Undo> <Key-F12> <Shift-Key-F14>]);
+ }
+ elsif ($mw->windowingsystem eq 'win32')
+ {
+ $mw->eventAdd(qw[<<Cut>> <Control-Key-x> <Shift-Key-Delete>]);
+ $mw->eventAdd(qw[<<Copy>> <Control-Key-c> <Control-Key-Insert>]);
+ $mw->eventAdd(qw[<<Paste>> <Control-Key-v> <Shift-Key-Insert>]);
+ $mw->eventAdd(qw[<<Undo>> <Control-Key-z>]);
+ $mw->eventAdd(qw[<<Redo>> <Control-Key-y>]);
+ }
+ elsif ($mw->windowingsystem eq 'aqua')
+ {
+ $mw->eventAdd(qw[<<Cut>> <Command-Key-x> <Key-F2>]);
+ $mw->eventAdd(qw[<<Copy>> <Command-Key-c> <Key-F3>]);
+ $mw->eventAdd(qw[<<Paste>> <Command-Key-v> <Key-F4>]);
+ $mw->eventAdd(qw[<<PasteSelection>> <ButtonRelease-2>]);
+ $mw->eventAdd(qw[<<Clear>> <Clear>]);
+ $mw->eventAdd(qw[<<Undo>> <Command-Key-z>]);
+ $mw->eventAdd(qw[<<Redo>> <Command-Key-y>]);
+ }
+ elsif ($mw->windowingsystem eq 'classic')
+ {
+ $mw->eventAdd(qw[<<Cut>> <Control-Key-x> <Key-F2>]);
+ $mw->eventAdd(qw[<<Copy>> <Control-Key-c> <Key-F3>]);
+ $mw->eventAdd(qw[<<Paste>> <Control-Key-v> <Key-F4>]);
+ $mw->eventAdd(qw[<<PasteSelection>> <ButtonRelease-2>]);
+ $mw->eventAdd(qw[<<Clear>> <Clear>]);
+ $mw->eventAdd(qw[<<Undo>> <Control-Key-z> <Key-F1>]);
+ $mw->eventAdd(qw[<<Redo>> <Control-Key-Z>]);
+ }
+
+ # FIXME - Should these move to Menubutton ?
+ my $c = ($Tk::platform eq 'unix') ? 'all' : 'Tk::Menubutton';
+ $mw->bind($c,'<Alt-KeyPress>',['TraverseToMenu',Tk::Ev('K')]);
+ $mw->bind($c,'<F10>','FirstMenu');
+}
+
+sub Existing
+{
+ my @Windows;
+ foreach my $name (keys %Windows)
+ {
+ my $obj = $Windows{$name};
+ if (Tk::Exists($obj))
+ {
+ push(@Windows,$obj);
+ }
+ else
+ {
+ delete $Windows{$name};
+ }
+ }
+ return @Windows;
+}
+
+END
+{
+ if (Tk::IsParentProcess())
+ {
+ foreach my $top (values %Windows)
+ {
+ if ($top->IsWidget)
+ {
+ # Tk data structuctures are still in place
+ # this can occur if non-callback perl code did a 'die'.
+ # It will also handle some cases of non-Tk 'exit' being called
+ # Destroy this mainwindow and hence is descendants ...
+ $top->destroy;
+ }
+ }
+ }
+}
+
+sub CmdLine { return shift->command }
+
+sub WMSaveYourself
+{
+ my $mw = shift;
+ my @args = @{$mw->command};
+# warn 'preWMSaveYourself:'.join(' ',@args)."\n";
+ @args = ($0) unless (@args);
+ my $i = 1;
+ while ($i < @args)
+ {
+ if ($args[$i] eq '-iconic')
+ {
+ splice(@args,$i,1);
+ }
+ elsif ($args[$i] =~ /^-(geometry|iconposition)$/)
+ {
+ splice(@args,$i,2);
+ }
+ }
+
+ my @ip = $mw->wm('iconposition');
+# print 'ip ',join(',',@ip),"\n";
+ my $icon = $mw->iconwindow;
+ if (defined($icon))
+ {
+ @ip = $icon->geometry =~ /\d+x\d+([+-]\d+)([+-]\d+)/;
+ }
+ splice(@args,1,0,'-iconposition' => join(',',@ip)) if (@ip == 2);
+
+ splice(@args,1,0,'-iconic') if ($mw->state() eq 'iconic');
+
+ splice(@args,1,0,'-geometry' => $mw->geometry);
+# warn 'postWMSaveYourself:'.join(' ',@args)."\n";
+ $mw->command([@args]);
+}
+
+1;
+
+__END__
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm b/Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm
new file mode 100644
index 00000000000..bfb7b43ccbc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/MakeDepend.pm
@@ -0,0 +1,292 @@
+package Tk::MakeDepend;
+use strict;
+use vars qw(%define);
+use Config;
+
+my @include;
+
+use Carp;
+
+$SIG{__DIE__} = \&Carp::confess;
+
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #13 $ =~ /\D(\d+)\s*$/;
+
+sub scan_file;
+
+sub do_include
+{
+ my ($inc,$dep,@include) = @_;
+ foreach my $dir (@include)
+ {
+ my $path = "$dir/$inc";
+ if (-f $path)
+ {
+ scan_file($path,$dep) unless exists $dep->{$path};
+ return;
+ }
+ }
+ warn "Cannot find '$inc' assume made\n";
+ $dep->{$inc} = 1;
+}
+
+sub remove_comment
+{
+ s#^\s*/\*.*?\*/\s*##g;
+}
+
+
+sub term
+{
+ remove_comment();
+ return !term() if s/^\s*!//;
+ return exists($define{$1}) if s/^\s*defined\s*\(([_A-Za-z][_\w]*)\s*\)//;
+ return exists($define{$1}) if s/^\s*defined\s*([_A-Za-z][_\w]*)//;
+ return eval "$1" if s/^\s*(0x[0-9a-f]+)//i;
+ return $1 if s/^\s*(\d+)//;
+ return $define{$1} || 0 if s/^\s*([_A-Za-z][_\w]*)//;
+ if (s/^\s*\(//)
+ {
+ my $val = expression(0);
+ warn "Missing ')'\n" unless s/^\s*\)//;
+ return $val;
+ }
+ warn "Invalid term:$_";
+ return undef;
+}
+
+my %pri = ( '&&' => 4,
+ '||' => 3,
+ '>=' => 2, '<=' => 2, '<' => 2, '>' => 2,
+ '==' => 1, '!=' => 1 );
+
+sub expression
+{
+ my $pri = shift;
+ # printf STDERR "%d# expr . $_\n";
+ my $invert = 0;
+ my $lhs = term() || 0;
+ remove_comment();
+ while (/^\s*(&&|\|\||>=?|<=?|==|!=)/)
+ {
+ my $op = $1;
+ last unless ($pri{$op} >= $pri);
+ s/^\s*\Q$op\E//;
+ # printf STDERR "%d# $lhs $op . $_\n";
+ my $rhs = expression($pri{$op}) || 0;
+ my $e = "$lhs $op $rhs";
+ $lhs = eval "$e" || 0;
+ die "'$e' $@" if $@;
+ remove_comment();
+ }
+ return $lhs;
+}
+
+sub do_if
+{
+ my ($key,$expr) = @_;
+ chomp($expr);
+ if ($key eq 'ifdef' || $key eq 'ifndef')
+ {
+ if ($expr =~ /^\s*(\w+)/)
+ {
+ my $val = exists $define{$1};
+ $val = !$val if ($key eq 'ifndef');
+# printf STDERR "%d from $key $expr\n",$val;
+ return $val;
+ }
+ }
+ else
+ {
+ local $_ = $expr;
+ my $val = expression(0) != 0;
+ warn "trailing: $_" if /\S/;
+ #printf STDERR "%d from $key $expr\n",$val;
+ return $val;
+ }
+}
+
+sub scan_file
+{
+ no strict 'refs';
+ my ($file,$dep) = @_;
+ open($file,"<$file") || die "Cannot open $file:$!";
+ local $_;
+ my ($srcdir) = $file =~ m#^(.*)[\\/][^\\/]*$#;
+ $srcdir = '.' unless defined $srcdir;
+ my $live = 1;
+ $dep->{$file} = 1;
+ my @stack;
+ while (<$file>)
+ {
+ $_ .= <$file> while (s/\\\n/ /);
+ if (/^\s*#\s*(\w+)\s*(.*?)\s*$/)
+ {
+ my $ol = $live;
+ my $key = $1;
+ my $rest = $2;
+ if ($key =~ /^if(.*)$/)
+ {
+ push(@stack,$live);
+ $live &&= do_if($key,$rest);
+ }
+ elsif ($key eq 'elif')
+ {
+ $live = ($live) ? 0 : $stack[-1];
+ $live &&= do_if('if',$rest);
+ }
+ elsif ($key eq 'else')
+ {
+ $live = ($live) ? 0 : $stack[-1];
+ }
+ elsif ($key eq 'endif')
+ {
+ if (@stack)
+ {
+ $live = pop(@stack);
+ }
+ else
+ {
+ die "$file:$.: Mismatched #endif\n";
+ }
+ }
+ elsif ($live)
+ {
+ if ($key eq 'include')
+ {
+ do_include($1,$dep,$srcdir,@include) if $rest =~ /^"(.*)"/;
+ }
+ elsif ($key eq 'define')
+ {
+ if ($rest =~ /^\s*([_A-Za-z][\w_]*)\s*(.*)$/)
+ {
+ my $sym = $1;
+ my $val = $2 || 1;
+ $val =~ s#\s*/\*.*?\*/\s*# #g;
+ $define{$sym} = $val;
+ }
+ else
+ {
+ warn "ignore '$key $rest'\n";
+ }
+ }
+ elsif ($key eq 'undef')
+ {
+ if ($rest =~ /^\s*([_A-Za-z][\w_]*)/)
+ {
+ delete $define{$1};
+ }
+ }
+ elsif ($key =~ /^(line|pragma)$/)
+ {
+
+ }
+ else
+ {
+ warn "ignore '$key $rest'\n";
+ }
+ }
+ # printf STDERR "$file:$.: %d $key $rest\n",$live if ($ol != $live);
+ }
+ else
+ {
+ # print if $live;
+ }
+ }
+ close($file);
+ if (@stack)
+ {
+ warn "$file:$.: unclosed #if\n";
+ }
+}
+
+sub command_line
+{
+ @include = ();
+ local %define = ('__STDC__' => 1 );
+ my $data = '';
+ my @files;
+ while (@_ && $_[-1] !~ /^-/)
+ {
+ unshift(@files,pop(@_));
+ }
+ my $flags = $Config{ccflags};
+ $flags =~ s/^\s+|\s+$//g;
+ my @opt = (@_, split(/\s+/,$flags));
+ while (@opt)
+ {
+ local $_ = shift(@opt);
+ if (/^-I(.*)$/)
+ {
+ push @include,$1;
+ }
+ elsif (/^-D([^=]+)(?:=(.*))?$/)
+ {
+ $define{$1} = $2 || 1;
+ }
+ elsif (/^-U(.*)$/)
+ {
+ delete $define{$1};
+ }
+ elsif (/^(-.*)$/)
+ {
+ # Some option
+ if ($opt[0] !~ /^-/)
+ {
+ # next arg does not start with '-' assume it
+ # belongs to this option and discard it silently
+ shift(@opt);
+ }
+ }
+ else
+ {
+ # We got confused
+ warn "Ignoring $1\n";
+ }
+ }
+ # force /usr/include to be last element of @include
+ push @include, $Config{'usrinc'}
+ if (defined $Config{'usrinc'} and $Config{'usrinc'} ne '');
+ # warn "Include:@include\n";
+ while (@files)
+ {
+ local $_ = shift(@files);
+ unless (/^(.*)\.[^\.]+$/)
+ {
+ warn "Skip $_";
+ next;
+ }
+ local %define = %define;
+ my $base = $1;
+ my $file = $_;
+ my %dep;
+ warn "Finding dependencies for $file\n";
+ scan_file($_,\%dep);
+ my $str = "\n$base\$(OBJ_EXT) : $base.c";
+ delete $dep{$file};
+ my @dep = (sort(keys %dep));
+ while (@dep)
+ {
+ my $dep = shift(@dep);
+ $dep =~ s#^\./##;
+ if (length($str)+length($dep) > 70)
+ {
+ $data .= "$str \\\n";
+ $str = ' ';
+ }
+ else
+ {
+ $str .= ' ';
+ }
+ $str .= $dep;
+ }
+ $data .= "$str\n";
+ }
+ return $data;
+}
+
+1;
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Menu.pm b/Master/tlpkg/tlperl/lib/Tk/Menu.pm
new file mode 100644
index 00000000000..91e9aceed61
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Menu.pm
@@ -0,0 +1,1145 @@
+# Converted from menu.tcl --
+#
+# This file defines the default bindings for Tk menus and menubuttons.
+# It also implements keyboard traversal of menus and implements a few
+# other utility procedures related to menus.
+#
+# @(#) menu.tcl 1.34 94/12/19 17:09:09
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package Tk::Menu;
+require Tk;
+require Tk::Widget;
+require Tk::Wm;
+require Tk::Derived;
+require Tk::Menu::Item;
+
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #21 $ =~ /\D(\d+)\s*$/;
+
+use strict;
+
+use base qw(Tk::Wm Tk::Derived Tk::Widget);
+
+Construct Tk::Widget 'Menu';
+
+sub Tk_cmd { \&Tk::_menu }
+
+Tk::Methods('activate','add','clone','delete','entrycget','entryconfigure',
+ 'index','insert','invoke','post','postcascade','type',
+ 'unpost','yposition');
+
+import Tk qw(Ev);
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ # Remove from hash %$args any configure-like
+ # options which only apply at create time (e.g. -class for Frame)
+ # return these as a list of -key => value pairs
+ my @result = ();
+ my $opt;
+ foreach $opt (qw(-type -screen -visual -colormap))
+ {
+ my $val = delete $args->{$opt};
+ push(@result, $opt => $val) if (defined $val);
+ }
+ return @result;
+}
+
+sub InitObject
+{
+ my ($menu,$args) = @_;
+ my $menuitems = delete $args->{-menuitems};
+ $menu->SUPER::InitObject($args);
+ $menu->ConfigSpecs(-foreground => ['SELF']);
+ if (defined $menuitems)
+ {
+ # If any other args do configure now
+ if (%$args)
+ {
+ $menu->configure(%$args);
+ %$args = ();
+ }
+ $menu->AddItems(@$menuitems)
+ }
+}
+
+sub AddItems
+{
+ my $menu = shift;
+ ITEM:
+ while (@_)
+ {
+ my $item = shift;
+ if (!ref($item))
+ {
+ $menu->separator; # A separator
+ }
+ else
+ {
+ my ($kind,$name,%minfo) = ( @$item );
+ my $invoke = delete $minfo{'-invoke'};
+ if (defined $name)
+ {
+ $minfo{-label} = $name unless defined($minfo{-label});
+ $menu->$kind(%minfo);
+ }
+ else
+ {
+ $menu->BackTrace("Don't recognize " . join(' ',@$item));
+ }
+ } # A non-separator
+ }
+}
+
+#
+#-------------------------------------------------------------------------
+# Elements of tkPriv that are used in this file:
+#
+# cursor - Saves the -cursor option for the posted menubutton.
+# focus - Saves the focus during a menu selection operation.
+# Focus gets restored here when the menu is unposted.
+# inMenubutton - The name of the menubutton widget containing
+# the mouse, or an empty string if the mouse is
+# not over any menubutton.
+# popup - If a menu has been popped up via tk_popup, this
+# gives the name of the menu. Otherwise this
+# value is empty.
+# postedMb - Name of the menubutton whose menu is currently
+# posted, or an empty string if nothing is posted
+# A grab is set on this widget.
+# relief - Used to save the original relief of the current
+# menubutton.
+# window - When the mouse is over a menu, this holds the
+# name of the menu; it's cleared when the mouse
+# leaves the menu.
+#-------------------------------------------------------------------------
+#-------------------------------------------------------------------------
+# Overall note:
+# This file is tricky because there are four different ways that menus
+# can be used:
+#
+# 1. As a pulldown from a menubutton. This is the most common usage.
+# In this style, the variable tkPriv(postedMb) identifies the posted
+# menubutton.
+# 2. As a torn-off menu copied from some other menu. In this style
+# tkPriv(postedMb) is empty, and the top-level menu is no
+# override-redirect.
+# 3. As an option menu, triggered from an option menubutton. In thi
+# style tkPriv(postedMb) identifies the posted menubutton.
+# 4. As a popup menu. In this style tkPriv(postedMb) is empty and
+# the top-level menu is override-redirect.
+#
+# The various binding procedures use the state described above to
+# distinguish the various cases and take different actions in each
+# case.
+#-------------------------------------------------------------------------
+# Bind --
+# This procedure is invoked the first time the mouse enters a menubutton
+# widget or a menubutton widget receives the input focus. It creates
+# all of the class bindings for both menubuttons and menus.
+#
+# Arguments:
+# w - The widget that was just entered or just received
+# the input focus.
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ # Must set focus when mouse enters a menu, in order to allow
+ # mixed-mode processing using both the mouse and the keyboard.
+ $mw->bind($class,'<FocusIn>', 'NoOp');
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', ['Leave',Ev('X'),Ev('Y'),Ev('s')]);
+ $mw->bind($class,'<Motion>', ['Motion',Ev('x'),Ev('y'),Ev('s')]);
+ $mw->bind($class,'<ButtonPress>','ButtonDown');
+ $mw->bind($class,'<ButtonRelease>',['Invoke',1]);
+ $mw->bind($class,'<space>',['Invoke',0]);
+ $mw->bind($class,'<Return>',['Invoke',0]);
+ $mw->bind($class,'<Escape>','Escape');
+ $mw->bind($class,'<Left>','LeftArrow');
+ $mw->bind($class,'<Right>','RightArrow');
+ $mw->bind($class,'<Up>','UpArrow');
+ $mw->bind($class,'<Down>','DownArrow');
+ $mw->bind($class,'<KeyPress>', ['TraverseWithinMenu',Ev('K')]);
+ $mw->bind($class,'<Alt-KeyPress>', ['TraverseWithinMenu',Ev('K')]);
+ return $class;
+}
+
+sub UpArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextMenu('left');
+ }
+ else
+ {
+ $menu->NextEntry(-1);
+ }
+}
+
+sub DownArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextMenu('right');
+ }
+ else
+ {
+ $menu->NextEntry(1);
+ }
+}
+
+sub LeftArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextEntry(-1);
+ }
+ else
+ {
+ $menu->NextMenu('left');
+ }
+}
+
+sub RightArrow
+{
+ my $menu = shift;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ $menu->NextEntry(1);
+ }
+ else
+ {
+ $menu->NextMenu('right');
+ }
+}
+
+
+
+# Unpost --
+# This procedure unposts a given menu, plus all of its ancestors up
+# to (and including) a menubutton, if any. It also restores various
+# values to what they were before the menu was posted, and releases
+# a grab if there's a menubutton involved. Special notes:
+# 1. It's important to unpost all menus before releasing the grab, so
+# that any Enter-Leave events (e.g. from menu back to main
+# application) have mode NotifyGrab.
+# 2. Be sure to enclose various groups of commands in "catch" so that
+# the procedure will complete even if the menubutton or the menu
+# or the grab window has been deleted.
+#
+# Arguments:
+# menu - Name of a menu to unpost. Ignored if there
+# is a posted menubutton.
+sub Unpost
+{
+ my $menu = shift;
+ my $mb = $Tk::postedMb;
+
+ # Restore focus right away (otherwise X will take focus away when
+ # the menu is unmapped and under some window managers (e.g. olvwm)
+ # we'll lose the focus completely).
+
+ eval {local $SIG{__DIE__}; $Tk::focus->focus() } if (defined $Tk::focus);
+ undef $Tk::focus;
+
+ # Unpost menu(s) and restore some stuff that's dependent on
+ # what was posted.
+ eval {local $SIG{__DIE__};
+ if (defined $mb)
+ {
+ $menu = $mb->cget('-menu');
+ $menu->unpost();
+ $Tk::postedMb = undef;
+ $mb->configure('-cursor',$Tk::cursor);
+ $mb->configure('-relief',$Tk::relief)
+ }
+ elsif (defined $Tk::popup)
+ {
+ $Tk::popup->unpost();
+ my $grab = $Tk::popup->grabCurrent;
+ $grab->grabRelease if (defined $grab);
+
+ undef $Tk::popup;
+ }
+ elsif (defined $menu && ref $menu &&
+ $menu->cget('-type') ne 'menubar' &&
+ $menu->cget('-type') ne 'tearoff'
+ )
+ {
+ # We're in a cascaded sub-menu from a torn-off menu or popup.
+ # Unpost all the menus up to the toplevel one (but not
+ # including the top-level torn-off one) and deactivate the
+ # top-level torn off menu if there is one.
+ while (1)
+ {
+ my $parent = $menu->parent;
+ last if (!$parent->IsMenu || !$parent->ismapped);
+ $parent->postcascade('none');
+ $parent->GenerateMenuSelect;
+ $parent->activate('none');
+ my $type = $parent->cget('-type');
+ last if ($type eq 'menubar' || $type eq 'tearoff');
+ $menu = $parent
+ }
+ $menu->unpost() if ($menu->cget('-type') ne 'menubar');
+ }
+ };
+ warn "$@" if ($@);
+ if ($Tk::tearoff || $Tk::menubar)
+ {
+ # Release grab, if any.
+ if (defined $menu && ref $menu)
+ {
+ my $grab = $menu->grabCurrent;
+ $grab->grabRelease if (defined $grab);
+ }
+ RestoreOldGrab();
+ if ($Tk::menubar)
+ {
+ $Tk::menubar->configure(-cursor => $Tk::cursor);
+ undef $Tk::menubar;
+ }
+ if ($Tk::platform ne 'unix')
+ {
+ undef $Tk::tearoff;
+ }
+ }
+}
+
+sub RestoreOldGrab
+{
+ if (defined $Tk::oldGrab)
+ {
+ eval
+ {
+ local $SIG{__DIE__};
+ if ($Tk::grabStatus eq 'global')
+ {
+ $Tk::oldGrab->grabGlobal;
+ }
+ else
+ {
+ $Tk::oldGrab->grab;
+ }
+ };
+ undef $Tk::oldGrab;
+ }
+}
+
+sub typeIS
+{my $w = shift;
+ my $type = $w->type(shift);
+ return defined $type && $type eq shift;
+}
+
+# Motion --
+# This procedure is called to handle mouse motion events for menus.
+# It does two things. First, it resets the active element in the
+# menu, if the mouse is over the menu. Second, if a mouse button
+# is down, it posts and unposts cascade entries to match the mouse
+# position.
+#
+# Arguments:
+# menu - The menu window.
+# y - The y position of the mouse.
+# state - Modifier state (tells whether buttons are down).
+sub Motion
+{
+ my $menu = shift;
+ my $x = shift;
+ my $y = shift;
+ my $state = shift;
+ my $t = $menu->cget('-type');
+
+ if ($menu->IS($Tk::window))
+ {
+ if ($menu->cget('-type') eq 'menubar')
+ {
+# if (defined($Tk::focus) && $Tk::focus != $menu)
+ {
+ $menu->activate("\@$x,$y");
+ $menu->GenerateMenuSelect;
+ }
+ }
+ else
+ {
+ $menu->activate("\@$x,$y");
+ $menu->GenerateMenuSelect;
+ }
+ }
+ if (($state & 0x1f00) != 0)
+ {
+ $menu->postcascade('active')
+ }
+}
+# ButtonDown --
+# Handles button presses in menus. There are a couple of tricky things
+# here:
+# 1. Change the posted cascade entry (if any) to match the mouse position.
+# 2. If there is a posted menubutton, must grab to the menubutton so
+# that it can track mouse motions over other menubuttons and change
+# the posted menu.
+# 3. If there's no posted menubutton (e.g. because we're a torn-off menu
+# or one of its descendants) must grab to the top-level menu so that
+# we can track mouse motions across the entire menu hierarchy.
+
+#
+# Arguments:
+# menu - The menu window.
+sub ButtonDown
+{
+ my $menu = shift;
+ $menu->postcascade('active');
+ if (defined $Tk::postedMb)
+ {
+ $Tk::postedMb->grabGlobal
+ }
+ else
+ {
+ while ($menu->cget('-type') eq 'normal'
+ && $menu->parent->IsMenu
+ && $menu->parent->ismapped
+ )
+ {
+ $menu = $menu->parent;
+ }
+
+ if (!defined $Tk::menuBar)
+ {
+ $Tk::menuBar = $menu;
+ $Tk::cursor = $menu->cget('-cursor');
+ $menu->configure(-cursor => 'arrow');
+ }
+
+ # Don't update grab information if the grab window isn't changing.
+ # Otherwise, we'll get an error when we unpost the menus and
+ # restore the grab, since the old grab window will not be viewable
+ # anymore.
+
+ $menu->SaveGrabInfo unless ($menu->IS($menu->grabCurrent));
+
+ # Must re-grab even if the grab window hasn't changed, in order
+ # to release the implicit grab from the button press.
+
+ $menu->grabGlobal if ($Tk::platform eq 'unix');
+ }
+}
+
+sub Enter
+{
+ my $w = shift;
+ my $ev = $w->XEvent;
+ $Tk::window = $w;
+ if ($w->cget('-type') eq 'tearoff')
+ {
+ if ($ev->m ne 'NotifyUngrab')
+ {
+ $w->SetFocus if ($Tk::platform eq 'unix');
+ }
+ }
+ $w->Motion($ev->x, $ev->y, $ev->s);
+}
+
+# Leave --
+# This procedure is invoked to handle Leave events for a menu. It
+# deactivates everything unless the active element is a cascade element
+# and the mouse is now over the submenu.
+#
+# Arguments:
+# menu - The menu window.
+# rootx, rooty - Root coordinates of mouse.
+# state - Modifier state.
+sub Leave
+{
+ my $menu = shift;
+ my $rootx = shift;
+ my $rooty = shift;
+ my $state = shift;
+ undef $Tk::window;
+ return if ($menu->index('active') eq 'none');
+ if ($menu->typeIS('active','cascade'))
+ {
+ my $c = $menu->Containing($rootx,$rooty);
+ return if (defined $c && $menu->entrycget('active','-menu')->IS($c));
+ }
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+}
+
+# Invoke --
+# This procedure is invoked when button 1 is released over a menu.
+# It invokes the appropriate menu action and unposts the menu if
+# it came from a menubutton.
+#
+# Arguments:
+# w - Name of the menu widget.
+sub Invoke
+{
+ my $w = shift;
+ my $release = shift;
+
+ if ($release && !defined($Tk::window))
+ {
+ # Mouse was pressed over a menu without a menu button, then
+ # dragged off the menu (possibly with a cascade posted) and
+ # released. Unpost everything and quit.
+
+ $w->postcascade('none');
+ $w->activate('none');
+ $w->eventGenerate('<<MenuSelect>>');
+ $w->Unpost;
+ return;
+ }
+
+ my $type = $w->type('active');
+ if ($w->typeIS('active','cascade'))
+ {
+ $w->postcascade('active');
+ my $menu = $w->entrycget('active','-menu');
+ $menu->FirstEntry() if (defined $menu);
+ }
+ elsif ($w->typeIS('active','tearoff'))
+ {
+ $w->Unpost();
+ $w->tearOffMenu();
+ }
+ elsif ($w->typeIS('active','menubar'))
+ {
+ $w->postcascade('none');
+ $w->activate('none');
+ $w->eventGenerate('<<MenuSelect>>');
+ $w->Unpost;
+ }
+ else
+ {
+ $w->Unpost();
+ $w->invoke('active')
+ }
+}
+# Escape --
+# This procedure is invoked for the Cancel (or Escape) key. It unposts
+# the given menu and, if it is the top-level menu for a menu button,
+# unposts the menu button as well.
+#
+# Arguments:
+# menu - Name of the menu window.
+sub Escape
+{
+ my $menu = shift;
+ my $parent = $menu->parent;
+ if (!$parent->IsMenu)
+ {
+ $menu->Unpost()
+ }
+ elsif ($parent->cget('-type') eq 'menubar')
+ {
+ $menu->Unpost;
+ RestoreOldGrab();
+ }
+ else
+ {
+ $menu->NextMenu(-1)
+ }
+}
+# LeftRight --
+# This procedure is invoked to handle "left" and "right" traversal
+# motions in menus. It traverses to the next menu in a menu bar,
+# or into or out of a cascaded menu.
+#
+# Arguments:
+# menu - The menu that received the keyboard
+# event.
+# direction - Direction in which to move: "left" or "right"
+sub NextMenu
+{
+ my $menu = shift;
+ my $direction = shift;
+ # First handle traversals into and out of cascaded menus.
+ my $count;
+ if ($direction eq 'right')
+ {
+ $count = 1;
+ if ($menu->typeIS('active','cascade'))
+ {
+ $menu->postcascade('active');
+ my $m2 = $menu->entrycget('active','-menu');
+ $m2->FirstEntry if (defined $m2);
+ return;
+ }
+ else
+ {
+ my $parent = $menu->parent;
+ while ($parent->PathName ne '.')
+ {
+ if ($parent->IsMenu && $parent->cget('-type') eq 'menubar')
+ {
+ $parent->SetFocus;
+ $parent->NextEntry(1);
+ return;
+ }
+ $parent = $parent->parent;
+ }
+ }
+ }
+ else
+ {
+ $count = -1;
+ my $m2 = $menu->parent;
+ if ($m2->IsMenu)
+ {
+ if ($m2->cget('-type') ne 'menubar')
+ {
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+ $m2->SetFocus;
+ # This code unposts any posted submenu in the parent.
+ my $tmp = $m2->index('active');
+ $m2->activate('none');
+ $m2->activate($tmp);
+ return;
+ }
+ }
+ }
+ # Can't traverse into or out of a cascaded menu. Go to the next
+ # or previous menubutton, if that makes sense.
+
+ my $m2 = $menu->parent;
+ if ($m2->IsMenu)
+ {
+ if ($m2->cget('-type') eq 'menubar')
+ {
+ $m2->SetFocus;
+ $m2->NextEntry(-1);
+ return;
+ }
+ }
+
+ my $w = $Tk::postedMb;
+ return unless defined $w;
+ my @buttons = $w->parent->children;
+ my $length = @buttons;
+ my $i = Tk::lsearch(\@buttons,$w)+$count;
+ my $mb;
+ while (1)
+ {
+ while ($i < 0)
+ {
+ $i += $length
+ }
+ while ($i >= $length)
+ {
+ $i += -$length
+ }
+ $mb = $buttons[$i];
+ last if ($mb->IsMenubutton && $mb->cget('-state') ne 'disabled'
+ && defined($mb->cget('-menu'))
+ && $mb->cget('-menu')->index('last') ne 'none'
+ );
+ return if ($mb == $w);
+ $i += $count
+ }
+ $mb->PostFirst();
+}
+# NextEntry --
+# Activate the next higher or lower entry in the posted menu,
+# wrapping around at the ends. Disabled entries are skipped.
+#
+# Arguments:
+# menu - Menu window that received the keystroke.
+# count - 1 means go to the next lower entry,
+# -1 means go to the next higher entry.
+sub NextEntry
+{
+ my $menu = shift;
+ my $count = shift;
+ if ($menu->index('last') eq 'none')
+ {
+ return;
+ }
+ my $length = $menu->index('last')+1;
+ my $quitAfter = $length;
+ my $active = $menu->index('active');
+ my $i = ($active eq 'none') ? 0 : $active+$count;
+ while (1)
+ {
+ return if ($quitAfter <= 0);
+ while ($i < 0)
+ {
+ $i += $length
+ }
+ while ($i >= $length)
+ {
+ $i += -$length
+ }
+ my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') };
+ last if (defined($state) && $state ne 'disabled');
+ return if ($i == $active);
+ $i += $count;
+ $quitAfter -= 1;
+ }
+ $menu->activate($i);
+ $menu->GenerateMenuSelect;
+ if ($menu->cget('-type') eq 'menubar' && $menu->type($i) eq 'cascade')
+ {
+ my $cascade = $menu->entrycget($i, '-menu');
+ $menu->postcascade($i);
+ $cascade->FirstEntry if (defined $cascade);
+ }
+}
+
+
+# tkTraverseWithinMenu
+# This procedure implements keyboard traversal within a menu. It
+# searches for an entry in the menu that has "char" underlined. If
+# such an entry is found, it is invoked and the menu is unposted.
+#
+# Arguments:
+# w - The name of the menu widget.
+# char - The character to look for; case is
+# ignored. If the string is empty then
+# nothing happens.
+sub TraverseWithinMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless (defined $char);
+ $char = "\L$char";
+ my $last = $w->index('last');
+ return if ($last eq 'none');
+ for (my $i = 0;$i <= $last;$i += 1)
+ {
+ my $label = eval {local $SIG{__DIE__}; $w->entrycget($i,'-label') };
+ next unless defined($label);
+ my $ul = $w->entrycget($i,'-underline');
+ if (defined $ul && $ul >= 0)
+ {
+ $label = substr("\L$label",$ul,1);
+ if (defined($label) && $label eq $char)
+ {
+ if ($w->type($i) eq 'cascade')
+ {
+ $w->postcascade($i);
+ $w->activate($i);
+ my $m2 = $w->entrycget($i,'-menu');
+ $m2->FirstEntry if (defined $m2);
+ }
+ else
+ {
+ $w->Unpost();
+ $w->invoke($i);
+ }
+ return;
+ }
+ }
+ }
+}
+
+sub FindMenu
+{
+ my ($menu,$char) = @_;
+ if ($menu->cget('-type') eq 'menubar')
+ {
+ if (!defined($char) || $char eq '')
+ {
+ $menu->FirstEntry;
+ }
+ else
+ {
+ $menu->TraverseWithinMenu($char);
+ }
+ return $menu;
+ }
+ return undef;
+}
+
+
+# FirstEntry --
+# Given a menu, this procedure finds the first entry that isn't
+# disabled or a tear-off or separator, and activates that entry.
+# However, if there is already an active entry in the menu (e.g.,
+# because of a previous call to tkPostOverPoint) then the active
+# entry isn't changed. This procedure also sets the input focus
+# to the menu.
+#
+# Arguments:
+# menu - Name of the menu window (possibly empty).
+sub FirstEntry
+{
+ my $menu = shift;
+ return if (!defined($menu) || $menu eq '' || !ref($menu));
+ $menu->SetFocus;
+ return if ($menu->index('active') ne 'none');
+ my $last = $menu->index('last');
+ return if ($last eq 'none');
+ for (my $i = 0;$i <= $last;$i += 1)
+ {
+ my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') };
+ if (defined $state && $state ne 'disabled' && !$menu->typeIS($i,'tearoff'))
+ {
+ $menu->activate($i);
+ $menu->GenerateMenuSelect;
+ if ($menu->type($i) eq 'cascade')
+ {
+ my $cascade = $menu->entrycget($i,'-menu');
+ if (defined $cascade)
+ {
+ $menu->postcascade($i);
+ $cascade->FirstEntry;
+ }
+ }
+ return;
+ }
+ }
+}
+
+# FindName --
+# Given a menu and a text string, return the index of the menu entry
+# that displays the string as its label. If there is no such entry,
+# return an empty string. This procedure is tricky because some names
+# like "active" have a special meaning in menu commands, so we can't
+# always use the "index" widget command.
+#
+# Arguments:
+# menu - Name of the menu widget.
+# s - String to look for.
+sub FindName
+{
+ my $menu = shift;
+ my $s = shift;
+ my $i = undef;
+ if ($s !~ /^active$|^last$|^none$|^[0-9]|^@/)
+ {
+ $i = eval {local $SIG{__DIE__}; $menu->index($s) };
+ return $i;
+ }
+ my $last = $menu->index('last');
+ return if ($last eq 'none');
+ for ($i = 0;$i <= $last;$i += 1)
+ {
+ my $label = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-label') };
+ return $i if (defined $label && $label eq $s);
+ }
+ return undef;
+}
+# PostOverPoint --
+# This procedure posts a given menu such that a given entry in the
+# menu is centered over a given point in the root window. It also
+# activates the given entry.
+#
+# Arguments:
+# menu - Menu to post.
+# x, y - Root coordinates of point.
+# entry - Index of entry within menu to center over (x,y).
+# If omitted or specified as {}, then the menu's
+# upper-left corner goes at (x,y).
+sub PostOverPoint
+{
+ my $menu = shift;
+ my $x = shift;
+ my $y = shift;
+ my $entry = shift;
+ if (defined $entry)
+ {
+ if ($entry == $menu->index('last'))
+ {
+ $y -= ($menu->yposition($entry)+$menu->height)/2;
+ }
+ else
+ {
+ $y -= ($menu->yposition($entry)+$menu->yposition($entry+1))/2;
+ }
+ $x -= $menu->reqwidth/2;
+ }
+ $menu->post($x,$y);
+ if (defined($entry) && $menu->entrycget($entry,'-state') ne 'disabled')
+ {
+ $menu->activate($entry);
+ $menu->GenerateMenuSelect;
+ }
+}
+# tk_popup --
+# This procedure pops up a menu and sets things up for traversing
+# the menu and its submenus.
+#
+# Arguments:
+# menu - Name of the menu to be popped up.
+# x, y - Root coordinates at which to pop up the
+# menu.
+# entry - Index of a menu entry to center over (x,y).
+# If omitted or specified as {}, then menu's
+# upper-left corner goes at (x,y).
+sub Post
+{
+ my $menu = shift;
+ return unless (defined $menu);
+ my $x = shift;
+ my $y = shift;
+ my $entry = shift;
+ Unpost(undef) if (defined($Tk::popup) || defined($Tk::postedMb));
+ $menu->PostOverPoint($x,$y,$entry);
+ $menu->grabGlobal;
+ $Tk::popup = $menu;
+ $Tk::focus = $menu->focusCurrent;
+ $menu->focus();
+}
+
+sub SetFocus
+{
+ my $menu = shift;
+ $Tk::focus = $menu->focusCurrent if (!defined($Tk::focus));
+ $menu->focus;
+}
+
+sub GenerateMenuSelect
+{
+ my $menu = shift;
+ $Tk::activeMenu = $menu;
+ $Tk::activeItem = $menu->index('active');
+ $menu->eventGenerate('<<MenuSelect>>'); # FIXME
+}
+
+# Converted from tearoff.tcl --
+#
+# This file contains procedures that implement tear-off menus.
+#
+# @(#) tearoff.tcl 1.3 94/12/17 16:05:25
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# tkTearoffMenu --
+# Given the name of a menu, this procedure creates a torn-off menu
+# that is identical to the given menu (including nested submenus).
+# The new torn-off menu exists as a toplevel window managed by the
+# window manager. The return value is the name of the new menu.
+#
+# Arguments:
+# w - The menu to be torn-off (duplicated).
+sub tearOffMenu
+{
+ my $w = shift;
+ my $x = (@_) ? shift : 0;
+ my $y = (@_) ? shift : 0;
+
+ $x = $w->rootx if $x == 0;
+ $y = $w->rooty if $y == 0;
+
+ # Find a unique name to use for the torn-off menu. Find the first
+ # ancestor of w that is a toplevel but not a menu, and use this as
+ # the parent of the new menu. This guarantees that the torn off
+ # menu will be on the same screen as the original menu. By making
+ # it a child of the ancestor, rather than a child of the menu, it
+ # can continue to live even if the menu is deleted; it will go
+ # away when the toplevel goes away.
+
+ my $parent = $w->parent;
+ while ($parent->toplevel != $parent || $parent->IsMenu)
+ {
+ $parent = $parent->parent;
+ }
+ my $menu = $w->clone($parent->PathName,'tearoff');
+
+ # Pick a title for the new menu by looking at the parent of the
+ # original: if the parent is a menu, then use the text of the active
+ # entry. If it's a menubutton then use its text.
+ my $title = $w->cget('-title');
+ # print ref($w),' ',$w->PathName," $w\n";
+ unless (defined $title && length($title))
+ {
+ $parent = $w->parent;
+ if ($parent)
+ {
+ if ($parent->IsMenubutton)
+ {
+ $title = $parent->cget('-text');
+ }
+ elsif ($parent->IsMenu)
+ {
+ $title = $parent->entrycget('active','-label');
+ }
+ }
+ }
+ $menu->title($title) if (defined $title && length($title));
+ $menu->post($x,$y);
+ # Set tkPriv(focus) on entry: otherwise the focus will get lost
+ # after keyboard invocation of a sub-menu (it will stay on the
+ # submenu).
+
+
+ # This seems to conflict with <Enter> class binding above
+ # if this fires before the class binding the wrong thing
+ # will get saved in $Tk::focus
+ # $menu->bind('<Enter>','EnterFocus');
+ $menu->Callback('-tearoffcommand');
+ return $menu;
+}
+
+# tkMenuDup --
+# Given a menu (hierarchy), create a duplicate menu (hierarchy)
+# in a given window.
+#
+# Arguments:
+# src - Source window. Must be a menu. It and its
+# menu descendants will be duplicated at path.
+# path - Name to use for topmost menu in duplicate
+# hierarchy.
+
+sub tkMenuDup
+{
+ my ($src,$path,$type) = @_;
+ my ($pname,$name) = $path =~ /^(.*)\.([^\.]*)$/;
+ ($name) = $src->PathName =~ /^.*\.([^\.]*)$/ unless $name;
+ my $parent = ($pname) ? $src->Widget($pname) : $src->MainWindow;
+ my %args = (Name => $name, -type => $type);
+ foreach my $option ($src->configure())
+ {
+ next if (@$option == 2);
+ $args{$$option[0]} = $$option[4] unless exists $args{$$option[0]};
+ }
+ my $dst = ref($src)->new($parent,%args);
+ # print "MenuDup $src $path $name $type ->",$dst->PathName,"\n";
+ $_[1] = $dst;
+ if ($type eq 'tearoff')
+ {
+ $dst->transient($parent->toplevel);
+ }
+ my $last = $src->index('last');
+ if ($last ne 'none')
+ {
+ for (my $i = $src->cget('-tearoff'); $i <= $last; $i++)
+ {
+ my $type = $src->type($i);
+ if (defined $type)
+ {
+ my @args = ();
+ foreach my $option ($src->entryconfigure($i))
+ {
+ next if (@$option == 2);
+ push(@args,$$option[0],$$option[4]) if (defined $$option[4]);
+ }
+ $dst->add($type,@args);
+ }
+ }
+ }
+ # Duplicate the binding tags and bindings from the source menu.
+ my @bindtags = $src->bindtags;
+ $path = $src->PathName;
+ foreach (@bindtags)
+ {
+ $_ = $dst if ($_ eq $path);
+ }
+ $dst->bindtags([@bindtags]);
+ foreach my $event ($src->bind)
+ {
+ my $cb = $src->bind($event);
+# print "$event => $cb\n";
+ $dst->bind($event,$cb->Substitute($src,$dst));
+ }
+ return $dst;
+}
+
+
+
+# Some convenience methods
+
+sub separator { require Tk::Menu::Item; shift->Separator(@_); }
+sub cascade { require Tk::Menu::Item; shift->Cascade(@_); }
+sub checkbutton { require Tk::Menu::Item; shift->Checkbutton(@_); }
+sub radiobutton { require Tk::Menu::Item; shift->Radiobutton(@_); }
+
+sub command
+{
+ my ($menu,%args) = @_;
+ require Tk::Menu::Item;
+ if (exists $args{-button})
+ {
+ # Backward compatible stuff from 'Menubar'
+ my $button = delete $args{-button};
+ $button = ['Misc', -underline => 0 ] unless (defined $button);
+ my @bargs = ();
+ ($button,@bargs) = @$button if (ref($button) && ref $button eq 'ARRAY');
+ $menu = $menu->Menubutton(-label => $button, @bargs);
+ }
+ $menu->Command(%args);
+}
+
+sub Menubutton
+{
+ my ($menu,%args) = @_;
+ my $name = delete($args{'-text'}) || $args{'-label'};;
+ $args{'-label'} = $name if (defined $name);
+ my $items = delete $args{'-menuitems'};
+ foreach my $opt (qw(-pack -after -before -side -padx -ipadx -pady -ipady -fill))
+ {
+ delete $args{$opt};
+ }
+ if (defined($name) && !defined($args{-underline}))
+ {
+ my $underline = ($name =~ s/^(.*)~/$1/) ? length($1): undef;
+ if (defined($underline) && ($underline >= 0))
+ {
+ $args{-underline} = $underline;
+ $args{-label} = $name;
+ }
+ }
+ my $hash = $menu->TkHash('MenuButtons');
+ my $mb = $hash->{$name};
+ if (defined $mb)
+ {
+ delete $args{'-tearoff'}; # too late!
+ $mb->configure(%args) if %args;
+ }
+ else
+ {
+ $mb = $menu->cascade(%args);
+ $hash->{$name} = $mb;
+ }
+ $mb->menu->AddItems(@$items) if defined($items) && @$items;
+ return $mb;
+}
+
+sub BalloonInfo
+{
+ my ($menu,$balloon,$X,$Y,@opt) = @_;
+ my $i = $menu->index('active');
+ if ($i eq 'none')
+ {
+ my $y = $Y - $menu->rooty;
+ $i = $menu->index("\@$y");
+ }
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$menu);
+ if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'ARRAY'))
+ {
+ $balloon->Subclient($i);
+ return '' if $i eq 'none';
+ return ${$info}[$i] || '';
+ }
+ return $info;
+ }
+}
+
+1;
+
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm b/Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm
new file mode 100644
index 00000000000..403052ef5bd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Menu/Item.pm
@@ -0,0 +1,180 @@
+package Tk::Menu::Item;
+
+require Tk::Menu;
+
+use Carp;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Menu/Item.pm#4 $
+
+sub PreInit
+{
+ # Dummy (virtual) method
+ my ($class,$menu,$minfo) = @_;
+}
+
+sub new
+{
+ my ($class,$menu,%minfo) = @_;
+ my $kind = $class->kind;
+ my $name = $minfo{'-label'};
+ if (defined $kind)
+ {
+ my $invoke = delete $minfo{'-invoke'};
+ if (defined $name)
+ {
+ # Use ~ in name/label to set -underline
+ if (defined($minfo{-label}) && !defined($minfo{-underline}))
+ {
+ my $cleanlabel = $minfo{-label};
+ my $underline = ($cleanlabel =~ s/^(.*)~/$1/) ? length($1): undef;
+ if (defined($underline) && ($underline >= 0))
+ {
+ $minfo{-underline} = $underline;
+ $name = $cleanlabel if ($minfo{-label} eq $name);
+ $minfo{-label} = $cleanlabel;
+ }
+ }
+ }
+ else
+ {
+ $name = $minfo{'-bitmap'} || $minfo{'-image'};
+ croak('No -label') unless defined($name);
+ $minfo{'-label'} = $name;
+ }
+ $class->PreInit($menu,\%minfo);
+ $menu->add($kind,%minfo);
+ $menu->invoke('last') if ($invoke);
+ }
+ else
+ {
+ $menu->add('separator');
+ }
+ return bless [$menu,$name],$class;
+}
+
+sub configure
+{
+ my $obj = shift;
+ my ($menu,$name) = @$obj;
+ my %args = @_;
+ $obj->[1] = $args{'-label'} if exists $args{'-label'};
+ $menu->entryconfigure($name,@_);
+}
+
+sub cget
+{
+ my $obj = shift;
+ my ($menu,$name) = @$obj;
+ $menu->entrycget($name,@_);
+}
+
+sub parentMenu
+{
+ my $obj = shift;
+ return $obj->[0];
+}
+
+# Default "kind" is a command
+sub kind { return 'command' }
+
+# Now the derived packages
+
+package Tk::Menu::Separator;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Separator';
+sub kind { return undef }
+
+package Tk::Menu::Button;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Button';
+Construct Tk::Menu 'Command';
+
+#package Tk::Menu::Command;
+#use base qw(Tk::Menu::Button);
+#Construct Tk::Menu 'Command';
+
+package Tk::Menu::Cascade;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Cascade';
+sub kind { return 'cascade' }
+use Carp;
+
+sub PreInit
+{
+ my ($class,$menu,$minfo) = @_;
+ my $tearoff = delete $minfo->{-tearoff};
+ my $items = delete $minfo->{-menuitems};
+ my $widgetvar = delete $minfo->{-menuvar};
+ my $command = delete $minfo->{-postcommand};
+ my $name = delete $minfo->{'Name'};
+ $name = $minfo->{'-label'} unless defined $name;
+ my @args = ();
+ push(@args, '-tearoff' => $tearoff) if (defined $tearoff);
+ push(@args, '-menuitems' => $items) if (defined $items);
+ push(@args, '-postcommand' => $command) if (defined $command);
+ my $submenu = $minfo->{'-menu'};
+ unless (defined $submenu)
+ {
+ $minfo->{'-menu'} = $submenu = $menu->Menu(Name => $name, @args);
+ }
+ $$widgetvar = $submenu if (defined($widgetvar) && ref($widgetvar));
+}
+
+sub menu
+{
+ my ($self,%args) = @_;
+ my $w = $self->parentMenu;
+ my $menu = $self->cget('-menu');
+ if (!defined $menu)
+ {
+ require Tk::Menu;
+ $w->ColorOptions(\%args);
+ my $name = $self->cget('-label');
+ warn "Had to (re-)reate menu for $name";
+ $menu = $w->Menu(Name => $name, %args);
+ $self->configure('-menu'=>$menu);
+ }
+ else
+ {
+ $menu->configure(%args) if %args;
+ }
+ return $menu;
+}
+
+# Some convenience methods
+
+sub separator { shift->menu->Separator(@_); }
+sub command { shift->menu->Command(@_); }
+sub cascade { shift->menu->Cascade(@_); }
+sub checkbutton { shift->menu->Checkbutton(@_); }
+sub radiobutton { shift->menu->Radiobutton(@_); }
+
+sub pack
+{
+ my $w = shift;
+ if ($^W)
+ {
+ require Carp;
+ Carp::carp("Cannot 'pack' $w - done automatically")
+ }
+}
+
+package Tk::Menu::Checkbutton;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Checkbutton';
+sub kind { return 'checkbutton' }
+
+package Tk::Menu::Radiobutton;
+use base qw(Tk::Menu::Item);
+Construct Tk::Menu 'Radiobutton';
+sub kind { return 'radiobutton' }
+
+package Tk::Menu::Item;
+
+1;
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Menubar.pm b/Master/tlpkg/tlperl/lib/Tk/Menubar.pm
new file mode 100644
index 00000000000..54b745130bf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Menubar.pm
@@ -0,0 +1,15 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Menubar;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Menubar.pm#6 $
+
+use Tk::Frame;
+use Tk::Menu;
+# use Carp;
+# carp "Tk::Menubar is obsolete" if $^W;
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Menubutton.pm b/Master/tlpkg/tlperl/lib/Tk/Menubutton.pm
new file mode 100644
index 00000000000..59456b2dea2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Menubutton.pm
@@ -0,0 +1,398 @@
+# Converted from menu.tcl --
+#
+# This file defines the default bindings for Tk menus and menubuttons.
+# It also implements keyboard traversal of menus and implements a few
+# other utility procedures related to menus.
+#
+# @(#) menu.tcl 1.34 94/12/19 17:09:09
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+
+package Tk::Menubutton;
+require Tk;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Menubutton/Menubutton.pm#4 $
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Menubutton';
+
+import Tk qw(&Ev $XS_VERSION);
+
+bootstrap Tk::Menubutton;
+
+sub Tk_cmd { \&Tk::menubutton }
+
+sub InitObject
+{
+ my ($mb,$args) = @_;
+ my $menuitems = delete $args->{-menuitems};
+ my $tearoff = delete $args->{-tearoff};
+ $mb->SUPER::InitObject($args);
+ if ((defined($menuitems) || defined($tearoff)) && %$args)
+ {
+ $mb->configure(%$args);
+ %$args = ();
+ }
+ $mb->menu(-tearoff => $tearoff) if (defined $tearoff);
+ $mb->AddItems(@$menuitems) if (defined $menuitems)
+}
+
+
+#
+#-------------------------------------------------------------------------
+# Elements of tkPriv that are used in this file:
+#
+# cursor - Saves the -cursor option for the posted menubutton.
+# focus - Saves the focus during a menu selection operation.
+# Focus gets restored here when the menu is unposted.
+# inMenubutton - The name of the menubutton widget containing
+# the mouse, or an empty string if the mouse is
+# not over any menubutton.
+# popup - If a menu has been popped up via tk_popup, this
+# gives the name of the menu. Otherwise this
+# value is empty.
+# postedMb - Name of the menubutton whose menu is currently
+# posted, or an empty string if nothing is posted
+# A grab is set on this widget.
+# relief - Used to save the original relief of the current
+# menubutton.
+# window - When the mouse is over a menu, this holds the
+# name of the menu; it's cleared when the mouse
+# leaves the menu.
+#-------------------------------------------------------------------------
+#-------------------------------------------------------------------------
+# Overall note:
+# This file is tricky because there are four different ways that menus
+# can be used:
+#
+# 1. As a pulldown from a menubutton. This is the most common usage.
+# In this style, the variable tkPriv(postedMb) identifies the posted
+# menubutton.
+# 2. As a torn-off menu copied from some other menu. In this style
+# tkPriv(postedMb) is empty, and the top-level menu is no
+# override-redirect.
+# 3. As an option menu, triggered from an option menubutton. In thi
+# style tkPriv(postedMb) identifies the posted menubutton.
+# 4. As a popup menu. In this style tkPriv(postedMb) is empty and
+# the top-level menu is override-redirect.
+#
+# The various binding procedures use the state described above to
+# distinguish the various cases and take different actions in each
+# case.
+#-------------------------------------------------------------------------
+# Menu::Bind --
+# This procedure is invoked the first time the mouse enters a menubutton
+# widget or a menubutton widget receives the input focus. It creates
+# all of the class bindings for both menubuttons and menus.
+#
+# Arguments:
+# w - The widget that was just entered or just received
+# the input focus.
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<FocusIn>','NoOp');
+ $mw->bind($class,'<Enter>','Enter');
+ $mw->bind($class,'<Leave>','Leave');
+ $mw->bind($class,'<1>','ButtonDown');
+ $mw->bind($class,'<Motion>',['Motion','up',Ev('X'),Ev('Y')]);
+ $mw->bind($class,'<B1-Motion>',['Motion','down',Ev('X'),Ev('Y')]);
+ $mw->bind($class,'<ButtonRelease-1>','ButtonUp');
+ $mw->bind($class,'<space>','PostFirst');
+ $mw->bind($class,'<Return>','PostFirst');
+ return $class;
+}
+
+sub ButtonDown
+{my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::inMenubutton->Post($Ev->X,$Ev->Y) if (defined $Tk::inMenubutton);
+}
+
+sub PostFirst
+{
+ my $w = shift;
+ my $menu = $w->cget('-menu');
+ $w->Post();
+ $menu->FirstEntry() if (defined $menu);
+}
+
+
+# Enter --
+# This procedure is invoked when the mouse enters a menubutton
+# widget. It activates the widget unless it is disabled. Note:
+# this procedure is only invoked when mouse button 1 is *not* down.
+# The procedure B1Enter is invoked if the button is down.
+#
+# Arguments:
+# w - The name of the widget.
+sub Enter
+{
+ my $w = shift;
+ $Tk::inMenubutton->Leave if (defined $Tk::inMenubutton);
+ $Tk::inMenubutton = $w;
+ if ($w->cget('-state') ne 'disabled')
+ {
+ $w->configure('-state','active')
+ }
+}
+
+sub Leave
+{
+ my $w = shift;
+ $Tk::inMenubutton = undef;
+ return unless Tk::Exists($w);
+ if ($w->cget('-state') eq 'active')
+ {
+ $w->configure('-state','normal')
+ }
+}
+# Post --
+# Given a menubutton, this procedure does all the work of posting
+# its associated menu and unposting any other menu that is currently
+# posted.
+#
+# Arguments:
+# w - The name of the menubutton widget whose menu
+# is to be posted.
+# x, y - Root coordinates of cursor, used for positioning
+# option menus. If not specified, then the center
+# of the menubutton is used for an option menu.
+sub Post
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ return if (defined $Tk::postedMb && $w == $Tk::postedMb);
+ my $menu = $w->cget('-menu');
+ return unless (defined($menu) && $menu->index('last') ne 'none');
+
+ my $tearoff = $Tk::platform eq 'unix' || $menu->cget('-type') eq 'tearoff';
+
+ my $wpath = $w->PathName;
+ my $mpath = $menu->PathName;
+ unless (index($mpath,"$wpath.") == 0)
+ {
+ die "Cannot post $mpath : not a descendant of $wpath";
+ }
+
+ my $cur = $Tk::postedMb;
+ if (defined $cur)
+ {
+ Tk::Menu->Unpost(undef); # fixme
+ }
+ $Tk::cursor = $w->cget('-cursor');
+ $Tk::relief = $w->cget('-relief');
+ $w->configure('-cursor','arrow');
+ $w->configure('-relief','raised');
+ $Tk::postedMb = $w;
+ $Tk::focus = $w->focusCurrent;
+ $menu->activate('none');
+ $menu->GenerateMenuSelect;
+ # If this looks like an option menubutton then post the menu so
+ # that the current entry is on top of the mouse. Otherwise post
+ # the menu just below the menubutton, as for a pull-down.
+
+ eval
+ {local $SIG{'__DIE__'};
+ my $dir = $w->cget('-direction');
+ if ($dir eq 'above')
+ {
+ $menu->post($w->rootx, $w->rooty - $menu->ReqHeight);
+ }
+ elsif ($dir eq 'below')
+ {
+ $menu->post($w->rootx, $w->rooty + $w->Height);
+ }
+ elsif ($dir eq 'left')
+ {
+ my $x = $w->rootx - $menu->ReqWidth;
+ my $y = int((2*$w->rooty + $w->Height) / 2);
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($x,$y);
+ }
+ }
+ elsif ($dir eq 'right')
+ {
+ my $x = $w->rootx + $w->Width;
+ my $y = int((2*$w->rooty + $w->Height) / 2);
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($x,$y);
+ }
+ }
+ else
+ {
+ if ($w->cget('-indicatoron') == 1 && defined($w->cget('-textvariable')))
+ {
+ if (!defined($y))
+ {
+ $x = $w->rootx+$w->width/2;
+ $y = $w->rooty+$w->height/2
+ }
+ $menu->PostOverPoint($x,$y,$menu->FindName($w->cget('-text')))
+ }
+ else
+ {
+ $menu->post($w->rootx,$w->rooty+$w->height);
+ }
+ }
+ };
+ if ($@)
+ {
+ Tk::Menu->Unpost;
+ die $@
+ }
+
+ $Tk::tearoff = $tearoff;
+ if ($tearoff)
+ {
+ $menu->focus;
+ $w->SaveGrabInfo;
+ $w->grabGlobal;
+ }
+}
+# Motion --
+# This procedure handles mouse motion events inside menubuttons, and
+# also outside menubuttons when a menubutton has a grab (e.g. when a
+# menu selection operation is in progress).
+#
+# Arguments:
+# w - The name of the menubutton widget.
+# upDown - "down" means button 1 is pressed, "up" means
+# it isn't.
+# rootx, rooty - Coordinates of mouse, in (virtual?) root window.
+sub Motion
+{
+ my $w = shift;
+ my $upDown = shift;
+ my $rootx = shift;
+ my $rooty = shift;
+ return if (defined($Tk::inMenubutton) && $Tk::inMenubutton == $w);
+ my $new = $w->Containing($rootx,$rooty);
+ if (defined($Tk::inMenubutton))
+ {
+ if (!defined($new) || ($new != $Tk::inMenubutton && $w->toplevel != $new->toplevel))
+ {
+ $Tk::inMenubutton->Leave();
+ }
+ }
+ if (defined($new) && $new->IsMenubutton && $new->cget('-indicatoron') == 0 &&
+ $w->cget('-indicatoron') == 0)
+ {
+ if ($upDown eq 'down')
+ {
+ $new->Post($rootx,$rooty);
+ }
+ else
+ {
+ $new->Enter();
+ }
+ }
+}
+# ButtonUp --
+# This procedure is invoked to handle button 1 releases for menubuttons.
+# If the release happens inside the menubutton then leave its menu
+# posted with element 0 activated. Otherwise, unpost the menu.
+#
+# Arguments:
+# w - The name of the menubutton widget.
+
+sub ButtonUp {
+ my $w = shift;
+
+ my $tearoff = $Tk::platform eq 'unix' || (defined($w->cget('-menu')) &&
+ $w->cget('-menu')->cget('-type') eq 'tearoff');
+ if ($tearoff && (defined($Tk::postedMb) && $Tk::postedMb == $w)
+ && (defined($Tk::inMenubutton) && $Tk::inMenubutton == $w)) {
+ $Tk::postedMb->cget(-menu)->FirstEntry();
+ } else {
+ Tk::Menu->Unpost(undef);
+ }
+} # end ButtonUp
+
+# Some convenience methods
+
+sub menu
+{
+ my ($w,%args) = @_;
+ my $menu = $w->cget('-menu');
+ if (!defined $menu)
+ {
+ require Tk::Menu;
+ $w->ColorOptions(\%args) if ($Tk::platform eq 'unix');
+ $menu = $w->Menu(%args);
+ $w->configure('-menu'=>$menu);
+ }
+ else
+ {
+ $menu->configure(%args);
+ }
+ return $menu;
+}
+
+sub separator { require Tk::Menu::Item; shift->menu->Separator(@_); }
+sub command { require Tk::Menu::Item; shift->menu->Command(@_); }
+sub cascade { require Tk::Menu::Item; shift->menu->Cascade(@_); }
+sub checkbutton { require Tk::Menu::Item; shift->menu->Checkbutton(@_); }
+sub radiobutton { require Tk::Menu::Item; shift->menu->Radiobutton(@_); }
+
+sub AddItems
+{
+ shift->menu->AddItems(@_);
+}
+
+sub entryconfigure
+{
+ shift->menu->entryconfigure(@_);
+}
+
+sub entrycget
+{
+ shift->menu->entrycget(@_);
+}
+
+sub FindMenu
+{
+ my $child = shift;
+ my $char = shift;
+ my $ul = $child->cget('-underline');
+ if (defined $ul && $ul >= 0 && $child->cget('-state') ne 'disabled')
+ {
+ my $char2 = $child->cget('-text');
+ $char2 = substr("\L$char2",$ul,1) if (defined $char2);
+ if (!defined($char) || $char eq '' || (defined($char2) && "\l$char" eq $char2))
+ {
+ $child->PostFirst;
+ return $child;
+ }
+ }
+ return undef;
+}
+
+1;
+
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Message.pm b/Master/tlpkg/tlperl/lib/Tk/Message.pm
new file mode 100644
index 00000000000..63b0f170097
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Message.pm
@@ -0,0 +1,20 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Message;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Message.pm#6 $
+
+require Tk::Widget;
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Message';
+
+sub Tk_cmd { \&Tk::message }
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/NBFrame.pm b/Master/tlpkg/tlperl/lib/Tk/NBFrame.pm
new file mode 100644
index 00000000000..0e45251f852
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/NBFrame.pm
@@ -0,0 +1,20 @@
+package Tk::NBFrame;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/NBFrame/NBFrame.pm#4 $
+
+use Tk qw($XS_VERSION);
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'NBFrame';
+
+bootstrap Tk::NBFrame;
+
+sub Tk_cmd { \&Tk::nbframe }
+
+Tk::Methods qw(activate add delete focus info geometryinfo identify
+ move pagecget pageconfigure);
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/NoteBook.pm b/Master/tlpkg/tlperl/lib/Tk/NoteBook.pm
new file mode 100644
index 00000000000..64db87a80d3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/NoteBook.pm
@@ -0,0 +1,452 @@
+package Tk::NoteBook;
+#
+# Implementation of NoteBook widget.
+# Derived from NoteBook.tcl in Tix 4.0
+
+# Contributed by Rajappa Iyer <rsi@earthling.net>
+# Hacked by Nick for 'menu' traversal.
+# Restructured by Nick
+
+use vars qw($VERSION);
+
+$VERSION = sprintf '4.%03d', q$Revision: #9 $ =~ /\D(\d+)\s*$/;
+require Tk::NBFrame;
+
+use base qw(Tk::Derived Tk::NBFrame);
+Tk::Widget->Construct('NoteBook');
+use strict;
+
+use Tk qw(Ev);
+
+use Carp;
+require Tk::Frame;
+
+sub TraverseToNoteBook;
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ # class binding does not work right due to extra level of
+ # widget hierachy
+ $mw->bind($class,'<ButtonPress-1>', ['MouseDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<ButtonRelease-1>', ['MouseUp',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<B1-Motion>', ['MouseDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<Left>', ['FocusNext','prev']);
+ $mw->bind($class,'<Right>', ['FocusNext','next']);
+
+ $mw->bind($class,'<Return>', 'SetFocusByKey');
+ $mw->bind($class,'<space>', 'SetFocusByKey');
+ return $class;
+}
+
+sub raised
+{
+ return shift->{'topchild'};
+}
+
+sub Populate
+{
+ my ($w, $args) = @_;
+
+ $w->SUPER::Populate($args);
+ $w->{'pad-x1'} = undef;
+ $w->{'pad-x2'} = undef;
+ $w->{'pad-y1'} = undef;
+ $w->{'pad-y2'} = undef;
+
+ $w->{'windows'} = [];
+ $w->{'nWindows'} = 0;
+ $w->{'minH'} = 1;
+ $w->{'minW'} = 1;
+
+ $w->{'counter'} = 0;
+ $w->{'resize'} = 0;
+
+ $w->ConfigSpecs(-ipadx => ['PASSIVE', 'ipadX', 'Pad', 0],
+ -ipady => ['PASSIVE', 'ipadY', 'Pad', 0],
+ -takefocus => ['SELF', 'takeFocus', 'TakeFocus', 0],
+ -dynamicgeometry => ['PASSIVE', 'dynamicGeometry', 'DynamicGeometry', 0]);
+
+ # SetBindings
+ $w->bind('<Configure>','MasterGeomProc');
+
+ $args->{-slave} = 1;
+ $args->{-takefocus} = 1;
+ $args->{-relief} = 'raised';
+
+ $w->QueueResize;
+}
+
+
+#---------------------------
+# Public methods
+#---------------------------
+
+sub page_widget
+{
+ my $w = shift;
+ $w->{'_pages_'} = {} unless exists $w->{'_pages_'};
+ my $h = $w->{'_pages_'};
+ if (@_)
+ {
+ my $name = shift;
+ if (@_)
+ {
+ my $cw = shift;
+ if (defined $cw)
+ {
+ $h->{$name} = $cw;
+ }
+ else
+ {
+ return delete $h->{$name};
+ }
+ }
+ return $h->{$name};
+ }
+ else
+ {
+ return (values %$h);
+ }
+}
+
+sub add
+{
+ my ($w, $child, %args) = @_;
+
+ croak("$child already exists") if defined $w->page_widget($child);
+
+ my $f = Tk::Frame->new($w,Name => $child,-relief => 'raised');
+
+ my $ccmd = delete $args{-createcmd};
+ my $rcmd = delete $args{-raisecmd};
+ $f->{-createcmd} = Tk::Callback->new($ccmd) if (defined $ccmd);
+ $f->{-raisecmd} = Tk::Callback->new($rcmd) if (defined $rcmd);
+
+ # manage our geometry
+ $w->ManageGeometry($f);
+ # create default bindings
+ $f->bind('<Configure>',[$w,'ClientGeomProc','-configure', $f]);
+ $f->bind('<Destroy>', [$w,'delete',$child,1]);
+ $w->page_widget($child,$f);
+ $w->{'nWindows'}++;
+ push(@{$w->{'windows'}}, $child);
+ $w->SUPER::add($child,%args);
+ return $f;
+}
+
+sub raise
+{
+ my ($w, $child) = @_;
+ return unless defined $child;
+ if ($w->pagecget($child, -state) eq 'normal')
+ {
+ $w->activate($child);
+ $w->focus($child);
+ my $childw = $w->page_widget($child);
+ if ($childw)
+ {
+ if (defined $childw->{-createcmd})
+ {
+ $childw->{-createcmd}->Call($childw);
+ delete $childw->{-createcmd};
+ }
+ # hide the original visible window
+ my $oldtop = $w->{'topchild'};
+ if (defined($oldtop) && ($oldtop ne $child))
+ {
+ $w->page_widget($oldtop)->UnmapWindow;
+ }
+ $w->{'topchild'} = $child;
+ my $myW = $w->Width;
+ my $myH = $w->Height;
+
+ if (!defined $w->{'pad-x1'}) {
+ $w->InitTabSize;
+ }
+
+ my $cW = $myW - $w->{'pad-x1'} - $w->{'pad-x2'} - 2 * (defined $w->{-ipadx} ? $w->{-ipadx} : 0);
+ my $cH = $myH - $w->{'pad-y1'} - $w->{'pad-y2'} - 2 * (defined $w->{-ipady} ? $w->{-ipady} : 0);
+ my $cX = $w->{'pad-x1'} + (defined $w->{-ipadx} ? $w->{-ipadx} : 0);
+ my $cY = $w->{'pad-y1'} + (defined $w->{-ipady} ? $w->{-ipady} : 0);
+
+ if ($cW > 0 && $cH > 0)
+ {
+ $childw->MoveResizeWindow($cX, $cY, $cW, $cH);
+ $childw->MapWindow;
+ $childw->raise;
+ }
+ if ((not defined $oldtop) || ($oldtop ne $child))
+ {
+ if (defined $childw->{-raisecmd})
+ {
+ $childw->{-raisecmd}->Call($childw);
+ }
+ }
+ }
+ }
+}
+
+sub pageconfigure
+{
+ my ($w, $child, %args) = @_;
+ my $childw = $w->page_widget($child);
+ if (defined $childw)
+ {
+ my $ccmd = delete $args{-createcmd};
+ my $rcmd = delete $args{-raisecmd};
+ $childw->{-createcmd} = Tk::Callback->new($ccmd) if (defined $ccmd);
+ $childw->{-raisecmd} = Tk::Callback->new($rcmd) if (defined $rcmd);
+ $w->SUPER::pageconfigure($child, %args) if (keys %args);
+ }
+}
+
+sub pages {
+ my ($w) = @_;
+ return @{$w->{'windows'}};
+}
+
+sub pagecget
+{
+ my ($w, $child, $opt) = @_;
+ my $childw = $w->page_widget($child);
+ if (defined $childw)
+ {
+ return $childw->{-createcmd} if ($opt =~ /-createcmd/);
+ return $childw->{-raisecmd} if ($opt =~ /-raisecmd/);
+ return $w->SUPER::pagecget($child, $opt);
+ }
+ else
+ {
+ carp "page $child does not exist";
+ }
+}
+
+sub delete
+{
+ my ($w, $child, $destroy) = @_;
+ my $childw = $w->page_widget($child,undef);
+ if (defined $childw)
+ {
+ $childw->bind('<Destroy>', undef);
+ $childw->destroy;
+ @{$w->{'windows'}} = grep($_ !~ /$child/, @{$w->{'windows'}});
+ $w->{'nWindows'}--;
+ $w->SUPER::delete($child);
+ # see if the child to be deleted was the top child
+ if ((defined $w->{'topchild'}) && ($w->{'topchild'} eq $child))
+ {
+ delete $w->{'topchild'};
+ if ( @{$w->{'windows'}})
+ {
+ $w->raise($w->{'windows'}[0]);
+ }
+ }
+ }
+ else
+ {
+ carp "page $child does not exist" unless $destroy;
+ }
+}
+
+#---------------------------------------
+# Private methods
+#---------------------------------------
+
+sub MouseDown {
+ my ($w, $x, $y) = @_;
+ my $name = $w->identify($x, $y);
+ $w->focus($name);
+ $w->{'down'} = $name;
+}
+
+sub MouseUp {
+ my ($w, $x, $y) = @_;
+ my $name = $w->identify($x, $y);
+ if ((defined $name) && (defined $w->{'down'}) &&
+ ($name eq $w->{'down'}) &&
+ ($w->pagecget($name, -state) eq 'normal')) {
+ $w->raise($name);
+ } else {
+ $w->focus($name);
+ }
+}
+
+sub FocusNext {
+ my ($w, $dir) = @_;
+ my $name;
+
+ if (not defined $w->info('focus')) {
+ $name = $w->info('active');
+ $w->focus($name);
+ } else {
+ $name = $w->info('focus' . $dir);
+ $w->focus($name);
+ }
+}
+
+sub SetFocusByKey {
+ my ($w) = @_;
+
+ my $name = $w->info('focus');
+ if (defined $name) {
+ if ($w->pagecget($name, -state) eq 'normal') {
+ $w->raise($name);
+ $w->activate($name);
+ }
+ }
+}
+
+sub NoteBookFind {
+ my ($w, $char) = @_;
+
+ my $page;
+ foreach $page (@{$w->{'windows'}}) {
+ my $i = $w->pagecget($page, -underline);
+ my $c = substr($page, $i, 1);
+ if ($char =~ /$c/) {
+ if ($w->pagecget($page, -state) ne 'disabled') {
+ return $page;
+ }
+ }
+ }
+ return undef;
+}
+
+# This is called by TraveseToMenu when an <Alt-Keypress> occurs
+# See the code in Tk.pm
+sub FindMenu {
+ my ($w, $char) = @_;
+
+ my $page;
+ foreach $page (@{$w->{'windows'}}) {
+ my $i = $w->pagecget($page, -underline);
+ my $l = $w->pagecget($page, -label);
+ next if (not defined $l);
+ my $c = substr($l, $i, 1);
+ if ($char =~ /$c/i) {
+ if ($w->pagecget($page, -state) ne 'disabled') {
+ $w->raise($page);
+ return $w;
+ }
+ }
+ }
+ return undef;
+}
+
+
+sub MasterGeomProc
+{
+ my ($w) = @_;
+ if (Tk::Exists($w))
+ {
+ $w->{'resize'} = 0 unless (defined $w->{'resize'});
+ $w->QueueResize;
+ }
+}
+
+sub SlaveGeometryRequest
+{
+ my $w = shift;
+ if (Tk::Exists($w))
+ {
+ $w->QueueResize;
+ }
+}
+
+sub LostSlave {
+ my ($w, $s) = @_;
+ $s->UnmapWindow;
+}
+
+sub ClientGeomProc
+{
+ my ($w, $flag, $client) = @_;
+ $w->QueueResize if (Tk::Exists($w));
+ if ($flag =~ /-lostslave/)
+ {
+ carp "Geometry Management Error: Another geometry manager has taken control of $client. This error is usually caused because a widget has been created in the wrong frame: it should have been created inside $client instead of $w";
+ }
+}
+
+sub QueueResize
+{
+ my $w = shift;
+ $w->afterIdle(['Resize', $w]) unless ($w->{'resize'}++);
+}
+
+sub Resize {
+
+ my ($w) = @_;
+
+ return unless Tk::Exists($w) && $w->{'nWindows'} && $w->{'resize'};
+
+ $w->InitTabSize;
+
+ $w->{'resize'} = 0;
+ my $reqW = $w->{-width} || 0;
+ my $reqH = $w->{-height} || 0;
+
+ if ($reqW * $reqH == 0)
+ {
+ if ((not defined $w->{-dynamicgeometry}) ||
+ ($w->{-dynamicgeometry} == 0)) {
+ $reqW = 1;
+ $reqH = 1;
+
+ my $childw;
+ foreach $childw ($w->page_widget)
+ {
+ my $cW = $childw->ReqWidth;
+ my $cH = $childw->ReqHeight;
+ $reqW = $cW if ($reqW < $cW);
+ $reqH = $cH if ($reqH < $cH);
+ }
+ } else {
+ if (defined $w->{'topchild'}) {
+ my $topw = $w->page_widget($w->{'topchild'});
+ $reqW = $topw->ReqWidth;
+ $reqH = $topw->ReqHeight;
+ } else {
+ $reqW = 1;
+ $reqH = 1;
+ }
+ }
+ $reqW += $w->{'pad-x1'} + $w->{'pad-x2'} + 2 * (defined $w->{-ipadx} ? $w->{-ipadx} : 0);
+ $reqH += $w->{'pad-y1'} + $w->{'pad-y2'} + 2 * (defined $w->{-ipady} ? $w->{-ipady} : 0);
+ $reqW = ($reqW > $w->{'minW'}) ? $reqW : $w->{'minW'};
+ $reqH = ($reqH > $w->{'minH'}) ? $reqH : $w->{'minH'};
+ }
+ if (($w->ReqWidth != $reqW) ||
+ ($w->ReqHeight != $reqH)) {
+ $w->{'counter'} = 0 if (not defined $w->{'counter'});
+ if ($w->{'counter'} < 50) {
+ $w->{'counter'}++;
+ $w->GeometryRequest($reqW, $reqH);
+ $w->afterIdle([$w,'Resize']);
+ $w->{'resize'} = 1;
+ return;
+ }
+ }
+ $w->{'counter'} = 0;
+ $w->raise($w->{'topchild'} || ${$w->{'windows'}}[0]);
+ $w->{'resize'} = 0;
+}
+
+sub InitTabSize {
+ my ($w) = @_;
+ my ($tW, $tH) = $w->geometryinfo;
+ $w->{'pad-x1'} = 2;
+ $w->{'pad-x2'} = 2;
+ $w->{'pad-y1'} = $tH + (defined $w->{'-ipadx'} ? $w->{'-ipadx'} : 0) + 1;
+ $w->{'pad-y2'} = 2;
+ $w->{'minW'} = $tW;
+ $w->{'minH'} = $tH;
+}
+
+1;
+
+__END__
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm b/Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm
new file mode 100644
index 00000000000..7c0e81766db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Optionmenu.pm
@@ -0,0 +1,130 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Optionmenu;
+require Tk::Menubutton;
+require Tk::Menu;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '4.013'; # $Id: //depot/Tkutf8/Tk/Optionmenu.pm#13 $
+
+use base qw(Tk::Derived Tk::Menubutton);
+
+use strict;
+
+Construct Tk::Widget 'Optionmenu';
+
+sub Populate
+{
+ my ($w,$args) = @_;
+ $w->SUPER::Populate($args);
+ $args->{-indicatoron} = 1;
+ my $menu = $w->menu(-tearoff => 0);
+
+ # Should we allow -menubackground etc. as in -label* of Frame ?
+
+ $w->ConfigSpecs(-command => ['CALLBACK',undef,undef,undef],
+ -options => ['METHOD', undef, undef, undef],
+ -variable=> ['PASSIVE', undef, undef, undef],
+ -font => [['SELF',$menu], undef, undef, undef],
+ -foreground => [['SELF', 'CHILDREN'], undef, undef, undef],
+
+ -takefocus => [ qw/SELF takefocus Takefocus 1/ ],
+ -highlightthickness => [ qw/SELF highlightThickness HighlightThickness 1/ ],
+ -relief => [ qw/SELF relief Relief raised/ ],
+
+ );
+
+ # configure -variable and -command now so that when -options
+ # is set by main-line configure they are there to be set/called.
+
+ my $tvar = delete $args->{-textvariable};
+ my $vvar = delete $args->{-variable};
+ if (!defined($vvar))
+ {
+ if (defined $tvar)
+ {
+ $vvar = $tvar;
+ }
+ else
+ {
+ my $new;
+ $vvar = \$new;
+ }
+ }
+ $tvar = $vvar if (!defined($tvar));
+ $w->configure(-textvariable => $tvar, -variable => $vvar);
+ $w->configure(-command => $vvar) if ($vvar = delete $args->{-command});
+}
+
+sub setOption
+{
+ my ($w, $label, $val) = @_;
+ my $tvar = $w->cget(-textvariable);
+ my $vvar = $w->cget(-variable);
+ if (@_ == 2)
+ {
+ $val = $label;
+ }
+ $$tvar = $label if $tvar;
+ $$vvar = $val if $vvar;
+ $w->Callback(-command => $val);
+}
+
+sub addOptions
+{
+ my $w = shift;
+ my $menu = $w->menu;
+ my $tvar = $w->cget(-textvariable);
+ my $vvar = $w->cget(-variable);
+ my $oldt = $$tvar;
+ my $width = $w->cget('-width');
+ my %hash;
+ my $first;
+ while (@_)
+ {
+ my $val = shift;
+ my $label = $val;
+ if (ref $val)
+ {
+ if ($vvar == $tvar)
+ {
+ my $new = $label;
+ $w->configure(-textvariable => ($tvar = \$new));
+ }
+ ($label, $val) = @$val;
+ }
+ my $len = length($label);
+ $width = $len if (!defined($width) || $len > $width);
+ $menu->command(-label => $label, -command => [ $w , 'setOption', $label, $val ]);
+ $hash{$label} = $val;
+ $first = $label unless defined $first;
+ }
+ if (!defined($oldt) || !exists($hash{$oldt}))
+ {
+ $w->setOption($first, $hash{$first}) if defined $first;
+ }
+ $w->configure('-width' => $width);
+}
+
+sub options
+{
+ my ($w,$opts) = @_;
+ if (@_ > 1)
+ {
+ $w->menu->delete(0,'end');
+ $w->addOptions(@$opts);
+ }
+ else
+ {
+ return $w->_cget('-options');
+ }
+}
+
+1;
+
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/PNG.pm b/Master/tlpkg/tlperl/lib/Tk/PNG.pm
new file mode 100644
index 00000000000..1ecb4001d17
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/PNG.pm
@@ -0,0 +1,43 @@
+package Tk::PNG;
+require DynaLoader;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #3 $ =~ /\D(\d+)\s*$/;
+
+use Tk 800.005;
+require Tk::Image;
+require Tk::Photo;
+
+use base qw(DynaLoader);
+
+bootstrap Tk::PNG $Tk::VERSION;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Tk::PNG - PNG loader for Tk::Photo
+
+=head1 SYNOPSIS
+
+ use Tk;
+ use Tk::PNG;
+
+ my $image = $widget->Photo('-format' => 'png', -file => 'something.png');
+
+
+=head1 DESCRIPTION
+
+This is an extension for Tk800.* which supplies
+PNG format loader for Photo image type.
+
+
+=head1 AUTHOR
+
+Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Pane.pm b/Master/tlpkg/tlperl/lib/Tk/Pane.pm
new file mode 100644
index 00000000000..36c5203a42d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Pane.pm
@@ -0,0 +1,544 @@
+# Tk::Pane.pm
+#
+# Copyright (c) 1997-1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Tk::Pane;
+
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/Pane.pm#7 $
+
+use Tk;
+use Tk::Widget;
+use Tk::Derived;
+use Tk::Frame;
+
+use strict;
+
+use base qw(Tk::Derived Tk::Frame);
+
+Construct Tk::Widget 'Pane';
+
+use Tk::Submethods(
+ grid => [qw/bbox columnconfigure location propagate rowconfigure size slaves/],
+ pack => [qw/propagate slaves/]
+);
+
+sub ClassInit {
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Configure>',['QueueLayout',4]);
+ $mw->bind($class,'<FocusIn>', 'NoOp');
+ return $class;
+}
+
+sub Populate {
+ my $pan = shift;
+
+ my $frame = $pan->Component(Frame => "frame");
+
+ $pan->afterIdle(['Manage',$pan,$frame]);
+ $pan->afterIdle(['QueueLayout',$pan,1]);
+
+ $pan->Delegates(
+ DEFAULT => $frame,
+ # FIXME
+ # These are a hack to avoid an existing bug in Tk::Widget::DelegateFor
+ # which has been reported and should be fixed in the next Tk release
+ see => $pan,
+ xview => $pan,
+ yview => $pan,
+ );
+
+ $pan->ConfigSpecs(
+ DEFAULT => [$frame],
+ -sticky => [PASSIVE => undef, undef, undef],
+ -gridded => [PASSIVE => undef, undef, undef],
+ -xscrollcommand => [CALLBACK => undef, undef, undef],
+ -yscrollcommand => [CALLBACK => undef, undef, undef],
+ );
+
+
+ $pan;
+}
+
+
+sub grid {
+ my $w = shift;
+ $w = $w->Subwidget('frame')
+ if (@_ && $_[0] =~ /^(?: bbox
+ |columnconfigure
+ |location
+ |propagate
+ |rowconfigure
+ |size
+ |slaves)$/x);
+ $w->SUPER::grid(@_);
+}
+
+sub slave {
+ my $w = shift;
+ $w->Subwidget('frame');
+}
+
+sub pack {
+ my $w = shift;
+ $w = $w->Subwidget('frame')
+ if (@_ && $_[0] =~ /^(?:propagate|slaves)$/x);
+ $w->SUPER::pack(@_);
+}
+
+sub QueueLayout {
+ shift if ref $_[1];
+ my($m,$why) = @_;
+ $m->afterIdle(['Layout',$m]) unless ($m->{LayoutPending});
+ $m->{LayoutPending} |= $why;
+}
+
+sub AdjustXY {
+ my($w,$Wref,$X,$st,$scrl,$getx) = @_;
+ my $W = $$Wref;
+
+ if($w >= $W) {
+ my $v = 0;
+ if($getx) {
+ $v |= 1 if $st =~ /[Ww]/;
+ $v |= 2 if $st =~ /[Ee]/;
+ }
+ else {
+ $v |= 1 if $st =~ /[Nn]/;
+ $v |= 2 if $st =~ /[Ss]/;
+ }
+
+ if($v == 0) {
+ $X = int(($w - $W) / 2);
+ }
+ elsif($v == 1) {
+ $X = 0;
+ }
+ elsif($v == 2) {
+ $X = int($w - $W);
+ }
+ else {
+ $X = 0;
+ $$Wref = $w;
+ }
+ $scrl->Call(0,1)
+ if $scrl;
+ }
+ elsif($scrl) {
+ $X = 0
+ if $X > 0;
+ $X = $w - $W
+ if(($X + $W) < $w);
+ $scrl->Call(-$X / $W,(-$X + $w) / $W);
+ }
+ else {
+ $X = 0;
+ $$Wref = $w;
+ }
+
+ return $X;
+}
+
+sub Layout {
+ my $pan = shift;
+ my $why = $pan->{LayoutPending};
+
+ my $slv = $pan->Subwidget('frame');
+
+ return unless $slv;
+
+ my $H = $slv->ReqHeight;
+ my $W = $slv->ReqWidth;
+ my $X = $slv->x;
+ my $Y = $slv->y;
+ my $w = $pan->width;
+ my $h = $pan->height;
+ my $yscrl = $pan->{Configure}{'-yscrollcommand'};
+ my $xscrl = $pan->{Configure}{'-xscrollcommand'};
+
+ $yscrl = undef
+ if(defined($yscrl) && UNIVERSAL::isa($yscrl, 'SCALAR') && !defined($$yscrl));
+ $xscrl = undef
+ if(defined($xscrl) && UNIVERSAL::isa($xscrl, 'SCALAR') && !defined($$xscrl));
+
+ if($why & 1) {
+ $h = $pan->{Configure}{'-height'} || 0
+ unless($h > 1);
+ $w = $pan->{Configure}{'-width'} || 0
+ unless($w > 1);
+
+ $h = $H
+ unless($h > 1 || defined($yscrl));
+ $w = $W
+ unless($w > 1 || defined($xscrl));
+
+ $w = 100 if $w <= 1;
+ $h = 100 if $h <= 1;
+
+ $pan->GeometryRequest($w,$h);
+ }
+
+ my $st = $pan->{Configure}{'-sticky'} || '';
+
+ $pan->{LayoutPending} = 0;
+
+ $slv->MoveResizeWindow(
+ AdjustXY($w,\$W,$X,$st,$xscrl,1),
+ AdjustXY($h,\$H,$Y,$st,$yscrl,0),
+ $W,$H
+ );
+}
+
+sub SlaveGeometryRequest {
+ my ($m,$s) = @_;
+ $m->QueueLayout(1);
+}
+
+sub LostSlave {
+ my($m,$s) = @_;
+ $m->{Slave} = undef;
+}
+
+sub Manage {
+ my $m = shift;
+ my $s = shift;
+
+ $m->{Slave} = $s;
+ $m->ManageGeometry($s);
+ $s->MapWindow;
+ $m->QueueLayout(2);
+}
+
+sub xview {
+ my $pan = shift;
+
+ unless(@_) {
+ my $scrl = $pan->{Configure}{'-xscrollcommand'};
+ return (0,1) unless $scrl;
+ my $slv = $pan->Subwidget('frame');
+ my $sw = $slv->ReqWidth;
+ my $ldx = $pan->rootx - $slv->rootx;
+ my $rdx = $ldx + $pan->width;
+ $ldx = $ldx <= 0 ? 0 : $ldx / $sw;
+ $rdx = $rdx >= $sw ? 1 : $rdx / $sw;
+ return( $ldx , $rdx);
+ }
+ elsif(@_ == 1) {
+ my $widget = shift;
+ my $slv = $pan->Subwidget('frame');
+ xyview(1,$pan,
+ moveto => ($widget->rootx - $slv->rootx) / $slv->ReqWidth);
+ }
+ else {
+ xyview(1,$pan,@_);
+ }
+}
+
+sub yview {
+ my $pan = shift;
+
+ unless(@_) {
+ my $scrl = $pan->{Configure}{'-yscrollcommand'};
+ return (0,1) unless $scrl;
+ my $slv = $pan->Subwidget('frame');
+ my $sh = $slv->ReqHeight;
+ my $tdy = $pan->rooty - $slv->rooty;
+ my $bdy = $tdy + $pan->height;
+ $tdy = $tdy <= 0 ? 0 : $tdy / $sh;
+ $bdy = $bdy >= $sh ? 1 : $bdy / $sh;
+ return( $tdy, $bdy);
+ }
+ elsif(@_ == 1) {
+ my $widget = shift;
+ my $slv = $pan->Subwidget('frame');
+ xyview(0,$pan,
+ moveto => ($widget->rooty - $slv->rooty) / $slv->ReqHeight);
+ }
+ else {
+ xyview(0,$pan,@_);
+ }
+}
+
+sub xyview {
+ my($horz,$pan,$cmd,$val,$mul) = @_;
+ my $slv = $pan->Subwidget('frame');
+ return unless $slv;
+
+ my($XY,$WH,$wh,$scrl,@a);
+
+ if($horz) {
+ $XY = $slv->x;
+ $WH = $slv->ReqWidth;
+ $wh = $pan->width;
+ $scrl = $pan->{Configure}{'-xscrollcommand'};
+ }
+ else {
+ $XY = $slv->y;
+ $WH = $slv->ReqHeight;
+ $wh = $pan->height;
+ $scrl = $pan->{Configure}{'-yscrollcommand'};
+ }
+
+ $scrl = undef
+ if(UNIVERSAL::isa($scrl, 'SCALAR') && !defined($$scrl));
+
+ if($WH < $wh) {
+ $scrl->Call(0,1);
+ return;
+ }
+
+ if($cmd eq 'scroll') {
+ my $dxy = 0;
+
+ my $gridded = $pan->{Configure}{'-gridded'} || '';
+ my $do_gridded = ($gridded eq 'both'
+ || (!$horz == ($gridded ne 'x'))) ? 1 : 0;
+
+ if($do_gridded && $mul eq 'pages') {
+ my $ch = ($slv->children)[0];
+ if(defined($ch) && $ch->manager eq 'grid') {
+ @a = $horz
+ ? (1-$XY,int($slv->width / 2))
+ : (int($slv->height / 2),1-$XY);
+ my $rc = ($slv->gridLocation(@a))[$horz ? 0 : 1];
+ my $mrc = ($slv->gridSize)[$horz ? 0 : 1];
+ $rc += $val;
+ $rc = 0 if $rc < 0;
+ $rc = $mrc if $rc > $mrc;
+ my $gsl;
+ while($rc >= 0 && $rc < $mrc) {
+ $gsl = ($slv->gridSlaves(-row => $rc))[0];
+ last
+ if defined $gsl;
+ $rc += $val;
+ }
+ if(defined $gsl) {
+ @a = $horz ? ($rc,0) : (0,$rc);
+ $XY = 0 - ($slv->gridBbox(@a))[$horz ? 0 : 1];
+ }
+ else {
+ $XY = $val > 0 ? $wh - $WH : 0;
+ }
+ $dxy = $val; $val = 0;
+ }
+ }
+ $dxy = $mul eq 'pages' ? ($horz ? $pan->width : $pan->height) : 10
+ unless $dxy;
+ $XY -= $dxy * $val;
+ }
+ elsif($cmd eq 'moveto') {
+ $XY = -int($WH * $val);
+ }
+
+ $XY = $wh - $WH
+ if($XY < ($wh - $WH));
+ $XY = 0
+ if $XY > 0;
+
+ @a = $horz
+ ? ( $XY, $slv->y)
+ : ($slv->x, $XY);
+
+ $slv->MoveWindow(@a);
+
+ $scrl->Call(-$XY / $WH,(-$XY + $wh) / $WH);
+}
+
+sub see {
+ my $pan = shift;
+ my $widget = shift;
+ my %opt = @_;
+ my $slv = $pan->Subwidget('frame');
+
+ my $anchor = defined $opt{'-anchor'} ? $opt{'-anchor'} : "";
+
+ if($pan->{Configure}{'-yscrollcommand'}) {
+ my $yanchor = lc(($anchor =~ /([NnSs]?)/)[0] || "");
+ my $pty = $pan->rooty;
+ my $ph = $pan->height;
+ my $pby = $pty + $ph;
+ my $ty = $widget->rooty;
+ my $wh = $widget->height;
+ my $by = $ty + $wh;
+ my $h = $slv->ReqHeight;
+
+ if($yanchor eq 'n' || ($yanchor ne 's' && ($wh >= $h || $ty < $pty))) {
+ my $y = $ty - $slv->rooty;
+ $pan->yview(moveto => $y / $h);
+ }
+ elsif($yanchor eq 's' || $by > $pby) {
+ my $y = $by - $ph - $slv->rooty;
+ $pan->yview(moveto => $y / $h);
+ }
+ }
+
+ if($pan->{Configure}{'-xscrollcommand'}) {
+ my $xanchor = lc(($anchor =~ /([WwEe]?)/)[0] || "");
+ my $ptx = $pan->rootx;
+ my $pw = $pan->width;
+ my $pbx = $ptx + $pw;
+ my $tx = $widget->rootx;
+ my $ww = $widget->width;
+ my $bx = $tx + $ww;
+ my $w = $slv->ReqWidth;
+
+ if($xanchor eq 'w' || ( $xanchor ne 'e' && ($ww >= $w || $tx < $ptx))) {
+ my $x = $tx - $slv->rootx;
+ $pan->xview(moveto => $x / $w);
+ }
+ elsif($xanchor eq 'e' || $bx > $pbx) {
+ my $x = $bx - $pw - $slv->rootx;
+ $pan->xview(moveto => $x / $w);
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Tk::Pane - A window panner
+
+=for category Derived Widgets
+
+=head1 SYNOPSIS
+
+ use Tk::Pane;
+
+ $pane = $mw->Scrolled(Pane, Name => 'fred',
+ -scrollbars => 'soe',
+ -sticky => 'we',
+ -gridded => 'y'
+ );
+
+ $pane->Frame;
+
+ $pane->pack;
+
+=head1 DESCRIPTION
+
+B<Tk::Pane> provides a scrollable frame widget. Once created it can be
+treated as a frame, except it is scrollable.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-gridded> =E<gt> I<direction>
+
+Specifies if the top and left edges of the pane should snap to a
+grid column. This option is only useful if the widgets in the pane
+are managed by the I<grid> geometry manager. Possible values are
+B<x>, B<y> and B<xy>.
+
+=item B<-sticky> =E<gt> I<style>
+
+If Pane is larger than its requested dimensions, this option may be used to
+position (or stretch) the slave within its cavity. I<Style> is a string that
+contains zero or more of the characters n, s, e or w. The string can optionally
+contains spaces or commas, but they are ignored. Each letter refers to a side
+(north, south, east, or west) that the slave will "stick" to. If both n and s
+(or e and w) are specified, the slave will be stretched to fill the entire
+height (or width) of its cavity.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item I<$pane>-E<gt>B<see>(I<$widget> ?,I<options>?)
+
+Adjusts the view so that I<$widget> is visable. Aditional parameters in
+I<options-value> pairs can be passed, each I<option-value> pair must be
+one of the following
+
+=over 8
+
+=item B<-anchor> =E<gt> I<anchor>
+
+Specifies how to make the widget visable. If not given then as much of
+the widget as possible is made visable.
+
+Possible values are B<n>, B<s>, B<w>, B<e>, B<nw>, B<ne>, B<sw> and B<se>.
+This will cause an edge on the widget to be aligned with the corresponding
+edge on the pane. for example B<nw> will cause the top left of the widget
+to be placed at the top left of the pane. B<s> will cause the bottom of the
+widget to be placed at the bottom of the pane, and as much of the widget
+as possible made visable in the x direction.
+
+=back
+
+=item I<$pane>-E<gt>B<xview>
+
+Returns a list containing two elements, both of which are real fractions
+between 0 and 1. The first element gives the position of the left of the
+window, relative to the Pane as a whole (0.5 means it is halfway through the
+Pane, for example). The second element gives the position of the right of the
+window, relative to the Pane as a whole.
+
+=item I<$pane>-E<gt>B<xview>(I<$widget>)
+
+Adjusts the view in the window so that I<widget> is displayed at the left of
+the window.
+
+=item I<$pane>-E<gt>B<xview>(B<moveto> =E<gt> I<fraction>)
+
+Adjusts the view in the window so that I<fraction> of the total width of the
+Pane is off-screen to the left. fraction must be a fraction between 0 and 1.
+
+=item I<$pane>-E<gt>B<xview>(B<scroll> =E<gt> I<number>, I<what>)
+
+This command shifts the view in the window left or right according to I<number>
+and I<what>. I<Number> must be an integer. I<What> must be either B<units> or
+B<pages> or an abbreviation of one of these. If I<what> is B<units>, the view
+adjusts left or right by I<number>*10 screen units on the display; if it is
+B<pages> then the view adjusts by number screenfuls. If number is negative then
+widgets farther to the left become visible; if it is positive then widgets
+farther to the right become visible.
+
+=item I<$pane>-E<gt>B<yview>
+
+Returns a list containing two elements, both of which are real fractions
+between 0 and 1. The first element gives the position of the top of the
+window, relative to the Pane as a whole (0.5 means it is halfway through the
+Pane, for example). The second element gives the position of the bottom of the
+window, relative to the Pane as a whole.
+
+=item I<$pane>-E<gt>B<yview>(I<$widget>)
+
+Adjusts the view in the window so that I<widget> is displayed at the top of the
+window.
+
+=item I<$pane>-E<gt>B<yview>(B<moveto> =E<gt> I<fraction>)
+
+Adjusts the view in the window so that I<fraction> of the total width of the
+Pane is off-screen to the top. fraction must be a fraction between 0 and 1.
+
+=item I<$pane>-E<gt>B<yview>(B<scroll> =E<gt> I<number>, I<what>)
+
+This command shifts the view in the window up or down according to I<number>
+and I<what>. I<Number> must be an integer. I<What> must be either B<units> or
+B<pages> or an abbreviation of one of these. If I<what> is B<units>, the view
+adjusts up or down by I<number>*10 screen units on the display; if it is
+B<pages> then the view adjusts by number screenfuls. If number is negative then
+widgets farther up become visible; if it is positive then widgets farther down
+become visible.
+
+=back
+
+=head1 AUTHOR
+
+Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm b/Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm
new file mode 100644
index 00000000000..d984b648897
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Panedwindow.pm
@@ -0,0 +1,221 @@
+package Tk::Panedwindow;
+use strict;
+
+use vars qw/$VERSION/;
+$VERSION = sprintf '4.%03d', q$Revision: #3 $ =~ /#(\d+)/;
+
+# A Panedwindow widget (similar to Adjuster).
+
+use Tk qw/Ev/;
+use base qw/Tk::Widget/;
+
+Construct Tk::Widget 'Panedwindow';
+
+sub Tk_cmd { \&Tk::panedwindow }
+
+Tk::Methods('add', 'forget', 'identify', 'proxy', 'sash', 'panes');
+
+use Tk::Submethods (
+ 'proxy' => [qw/coord forget place/],
+ 'sash' => [qw/coord mark place/],
+);
+
+sub ClassInit {
+
+ my ($class,$mw) = @_;
+
+ $class->SUPER::ClassInit($mw);
+
+ $mw->bind($class, '<Button-1>' => ['MarkSash' => Ev('x'), Ev('y'), 1]);
+ $mw->bind($class, '<Button-2>' => ['MarkSash' => Ev('x'), Ev('y'), 0]);
+ $mw->bind($class, '<B1-Motion>' => ['DragSash' => Ev('x'), Ev('y'), 1]);
+ $mw->bind($class, '<B2-Motion>' => ['DragSash' => Ev('x'), Ev('y'), 0]);
+ $mw->bind($class, '<ButtonRelease-1>' => ['ReleaseSash' => 1]);
+ $mw->bind($class, '<ButtonRelease-2>' => ['ReleaseSash' => 0]);
+ $mw->bind($class, '<Motion>' => ['Motion' => Ev('x'), Ev('y')]);
+ $mw->bind($class, '<Leave>' => ['Leave']);
+
+ return $class;
+
+} # end ClassInit
+
+sub MarkSash {
+
+ # MarkSash
+ #
+ # Handle marking the correct sash for possible dragging
+ #
+ # Arguments:
+ # w the widget
+ # x widget local x coord
+ # y widget local y coord
+ # proxy whether this should be a proxy sash
+ # Results:
+ # None
+
+ my ($w, $x, $y, $proxy) = @_;
+
+ my @what = $w->identify($x, $y);
+ if ( @what == 2 ) {
+ my ($index, $which) = @what[0 .. 1];
+ if (not $Tk::strictMotif or $which eq 'handle') {
+ $w->sashMark($index, $x, $y) if not $proxy;
+ $w->{_sash} = $index;
+ my ($sx, $sy) = $w->sashCoord($index);
+ $w->{_dx} = $sx - $x;
+ $w->{_dy} = $sy - $y;
+ }
+ }
+
+} # end MarkSash
+
+sub DragSash {
+
+ # DragSash
+ #
+ # Handle dragging of the correct sash
+ #
+ # Arguments:
+ # w the widget
+ # x widget local x coord
+ # y widget local y coord
+ # proxy whether this should be a proxy sash
+ # Results:
+ # Moves sash
+
+ my ($w, $x, $y, $proxy) = @_;
+
+ if ( exists $w->{_sash} ) {
+ if ($proxy) {
+ $w->proxyPlace($x + $w->{_dx}, $y + $w->{_dy});
+ } else {
+ $w->sashPlace($w->{_sash}, $x + $w->{_dx}, $y + $w->{_dy});
+ }
+ }
+
+} # end DragSash
+
+sub ReleaseSash {
+
+ # ReleaseSash
+ #
+ # Handle releasing of the sash
+ #
+ # Arguments:
+ # w the widget
+ # proxy whether this should be a proxy sash
+ # Results:
+ # Returns ...
+
+ my ($w, $proxy) = @_;
+
+ if ( exists $w->{_sash} ) {
+ if ($proxy) {
+ my ($x, $y) = $w->proxyCoord;
+ $w->sashPlace($w->{_sash}, $x, $y);
+ $w->proxyForget;
+ }
+ delete $w->{'_sash', '_dx', '_dy'};
+ }
+
+} # end ReleaseSash
+
+sub Motion {
+
+ # Motion
+ #
+ # Handle motion on the widget. This is used to change the cursor
+ # when the user moves over the sash area.
+ #
+ # Arguments:
+ # w the widget
+ # x widget local x coord
+ # y widget local y coord
+ # Results:
+ # May change the cursor. Sets up a timer to verify that we are still
+ # over the widget.
+
+ my ($w, $x, $y) = @_;
+
+ my @id = $w->identify($x, $y);
+ if ( (@id == 2) and
+ (not $Tk::strictMotif or $id[1] eq 'handle') ) {
+ if ( not exists $w->{_panecursor} ) {
+ $w->{_panecursor} = $w->cget(-cursor);
+ if ( not defined $w->cget(-sashcursor) ) {
+ if ( $w->cget(-orient) eq 'horizontal' ) {
+ $w->configure(-cursor => 'sb_h_double_arrow');
+ } else {
+ $w->configure(-cursor => 'sb_v_double_arrow');
+ }
+ } else {
+ $w->configure(-cursor => $w->cget(-sashcursor));
+ }
+ if ( exists $w->{_pwAfterId} ) {
+ $w->afterCancel($w->{_pwAfterId});
+ }
+ $w->{_pwAfterId} = $w->after(150 => ['Cursor' => $w]);
+ }
+ return
+ }
+ if ( exists $w->{_panecursor} ) {
+ $w->configure(-cursor => $w->{_panecursor});
+ delete $w->{_panecursor};
+ }
+
+} # end Motion
+
+sub Cursor {
+
+ # Cursor
+ #
+ # Handles returning the normal cursor when we are no longer over the
+ # sash area. This needs to be done this way, because the panedwindow
+ # won't see Leave events when the mouse moves from the sash to a
+ # paned child, although the child does receive an Enter event.
+ #
+ # Arguments:
+ # w the widget
+ # Results:
+ # May restore the default cursor, or schedule a timer to do it.
+
+ my ($w) = @_;
+
+ if ( exists $w->{_panecursor} ) {
+ if ( $w->containing($w->pointerx, $w->pointery) == $w ) {
+ $w->{_pwAfterId} = $w->after(150 => ['Cursor' => $w]);
+ } else {
+ $w->configure(-cursor => $w->{_panecursor});
+ delete $w->{_panecursor};
+ if ( exists $w->{_pwAfterId} ) {
+ $w->afterCancel($w->{_pwAfterId});
+ delete $w->{_pwAfterId};
+ }
+ }
+ }
+
+} # end Cursor
+
+sub Leave {
+
+ # Leave
+ #
+ # Return to default cursor when leaving the pw widget.
+ #
+ # Arguments:
+ # w the widget
+ # Results:
+ # Restores the default cursor
+
+ my ($w) = @_;
+
+ if ( exists $w->{_panecursor} ) {
+ $w->configure(-cursor => $w->{_panecursor});
+ delete $w->{_panecursor};
+ }
+
+} # end Leave
+
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Photo.pm b/Master/tlpkg/tlperl/lib/Tk/Photo.pm
new file mode 100644
index 00000000000..a596dc4d78b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Photo.pm
@@ -0,0 +1,22 @@
+package Tk::Photo;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', 4+q$Revision: #4 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw($XS_VERSION);
+
+use base qw(Tk::Image);
+
+Construct Tk::Image 'Photo';
+
+sub Tk_image { 'photo' }
+
+Tk::Methods('blank','copy','data','formats','get','put','read',
+ 'redither','transparency','write');
+
+use Tk::Submethods (
+ 'transparency' => [qw/get set/],
+);
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Pixmap.pm b/Master/tlpkg/tlperl/lib/Tk/Pixmap.pm
new file mode 100644
index 00000000000..3fbc3179b56
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Pixmap.pm
@@ -0,0 +1,19 @@
+package Tk::Pixmap;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/TixPixmap/Pixmap.pm#4 $
+
+use Tk qw($XS_VERSION);
+
+use Tk::Image ();
+
+use base qw(Tk::Image);
+
+Construct Tk::Image 'Pixmap';
+
+bootstrap Tk::Pixmap;
+
+sub Tk_image { 'pixmap' }
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Pretty.pm b/Master/tlpkg/tlperl/lib/Tk/Pretty.pm
new file mode 100644
index 00000000000..7e442a4bcbc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Pretty.pm
@@ -0,0 +1,93 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Pretty;
+require Exporter;
+
+use vars qw($VERSION @EXPORT);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Pretty.pm#6 $
+
+use base qw(Exporter);
+
+@EXPORT = qw(Pretty PrintArgs);
+
+sub pretty_list
+{
+ join(',',map(&Pretty($_),@_));
+}
+
+sub Pretty
+{
+ return pretty_list(@_) if (@_ > 1);
+ my $obj = shift;
+ return 'undef' unless defined($obj);
+ my $type = "$obj";
+ return $type if ($type =~ /=HASH/ && exists($obj->{"_Tcl_CmdInfo_\0"}));
+ my $result = '';
+ if (ref $obj)
+ {
+ my $class;
+ if ($type =~ /^([^=]+)=(.*)$/)
+ {
+ $class = $1;
+ $type = $2;
+ $result .= 'bless(';
+ }
+ if ($type =~ /^ARRAY/)
+ {
+ $result .= '[';
+ $result .= pretty_list(@$obj);
+ $result .= ']';
+ }
+ elsif ($type =~ /^HASH/)
+ {
+ $result .= '{';
+ if (%$obj)
+ {
+ my ($key, $value);
+ while (($key,$value) = each %$obj)
+ {
+ $result .= $key . '=>' . Pretty($value) . ',';
+ }
+ chop($result);
+ }
+ $result .= '}';
+ }
+ elsif ($type =~ /^REF/)
+ {
+ $result .= "\\" . Pretty($$obj);
+ }
+ elsif ($type =~ /^SCALAR/)
+ {
+ $result .= Pretty($$obj);
+ }
+ else
+ {
+ $result .= $type;
+ }
+ $result .= ",$class)" if (defined $class);
+ }
+ else
+ {
+ if ($obj =~ /^-?[0-9]+(.[0-9]*(e[+-][0-9]+)?)?$/ ||
+ $obj =~ /^[A-Z_][A-Za-z_0-9]*$/ ||
+ $obj =~ /^[a-z_][A-Za-z_0-9]*[A-Z_][A-Za-z_0-9]*$/
+ )
+ {
+ $result .= $obj;
+ }
+ else
+ {
+ $result .= "'" . $obj . "'";
+ }
+ }
+ return $result;
+}
+
+sub PrintArgs
+{
+ my $name = (caller(1))[3];
+ print "$name(",Pretty(@_),")\n";
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm b/Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm
new file mode 100644
index 00000000000..206d843ea13
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ProgressBar.pm
@@ -0,0 +1,498 @@
+package Tk::ProgressBar;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/;
+
+use Tk;
+use Tk::Canvas;
+use Tk::Trace;
+use Carp;
+use strict;
+
+use base qw(Tk::Derived Tk::Canvas);
+
+Construct Tk::Widget 'ProgressBar';
+
+sub ClassInit {
+ my ($class,$mw) = @_;
+
+ $class->SUPER::ClassInit($mw);
+
+ $mw->bind($class,'<Configure>', ['_layoutRequest',1]);
+}
+
+
+sub Populate {
+ my($c,$args) = @_;
+
+ $c->ConfigSpecs(
+ -width => [PASSIVE => undef, undef, 0],
+ '-length' => [PASSIVE => undef, undef, 0],
+ -from => [PASSIVE => undef, undef, 0],
+ -to => [PASSIVE => undef, undef, 100],
+ -blocks => [PASSIVE => undef, undef, 10],
+ -padx => [PASSIVE => 'padX', 'Pad', 0],
+ -pady => [PASSIVE => 'padY', 'Pad', 0],
+ -gap => [PASSIVE => undef, undef, 1],
+ -colors => [PASSIVE => undef, undef, undef],
+ -relief => [SELF => 'relief', 'Relief', 'sunken'],
+ -value => [METHOD => undef, undef, undef],
+ -variable => [METHOD => undef, undef, undef],
+ -anchor => [METHOD => 'anchor', 'Anchor', 'w'],
+ -resolution
+ => [PASSIVE => undef, undef, 1.0],
+ -highlightthickness
+ => [SELF => 'highlightThickness','HighlightThickness',0],
+ -troughcolor
+ => [PASSIVE => 'troughColor', 'Background', 'grey55'],
+ );
+ _layoutRequest($c,1);
+ $c->OnDestroy(['Destroyed' => $c]);
+}
+
+sub anchor {
+ my $c = shift;
+ my $var = \$c->{Configure}{'-anchor'};
+ my $old = $$var;
+
+ if(@_) {
+ my $new = shift;
+ croak "bad anchor position \"$new\": must be n, s, w or e"
+ unless $new =~ /^[news]$/;
+ $$var = $new;
+ }
+
+ $old;
+}
+
+sub _layoutRequest {
+ my $c = shift;
+ my $why = shift;
+ $c->afterIdle(['_arrange',$c]) unless $c->{'layout_pending'};
+ $c->{'layout_pending'} |= $why;
+}
+
+sub _arrange {
+ my $c = shift;
+ my $why = $c->{'layout_pending'};
+
+ $c->{'layout_pending'} = 0;
+
+ my $w = $c->Width;
+ my $h = $c->Height;
+ my $bw = $c->cget('-borderwidth') + $c->cget('-highlightthickness');
+ my $x = abs(int($c->{Configure}{'-padx'})) + $bw;
+ my $y = abs(int($c->{Configure}{'-pady'})) + $bw;
+ my $value = $c->value;
+ my $from = $c->{Configure}{'-from'};
+ my $to = $c->{Configure}{'-to'};
+ my $horz = $c->{Configure}{'-anchor'} =~ /[ew]/i ? 1 : 0;
+ my $dir = $c->{Configure}{'-anchor'} =~ /[se]/i ? -1 : 1;
+
+ my($minv,$maxv) = $from < $to ? ($from,$to) : ($to,$from);
+
+ if($w == 1 && $h == 1) {
+ my $bw = $c->cget('-borderwidth');
+ my $defw = 10 + $y*2 + $bw *2;
+ my $defl = ($maxv - $minv) + $x*2 + $bw*2;
+
+ $h = $c->pixels($c->{Configure}{'-length'}) || $defl;
+ $w = $c->pixels($c->{Configure}{'-width'}) || $defw;
+
+ ($w,$h) = ($h,$w) if $horz;
+ $c->GeometryRequest($w,$h);
+ $c->parent->update;
+ $c->update;
+
+ $w = $c->Width;
+ $h = $c->Height;
+ }
+
+ $w -= $x*2;
+ $h -= $y*2;
+
+ my $length = $horz ? $w : $h;
+ my $width = $horz ? $h : $w;
+
+ my $blocks = int($c->{Configure}{'-blocks'});
+ my $gap = int($c->{Configure}{'-gap'});
+
+ $blocks = 1 if $blocks < 1;
+
+ my $gwidth = $gap * ( $blocks - 1);
+ my $bwidth = ($length - $gwidth) / $blocks;
+
+ if($bwidth < 3 || $blocks <= 1 || $gap <= 0) {
+ $blocks = 1;
+ $bwidth = $length;
+ $gap = 0;
+ }
+
+ if($why & 1) {
+ my $colors = $c->{Configure}{'-colors'} || [];
+ my $bdir = $from < $to ? $dir : 0 - $dir;
+
+ $c->delete($c->find('all'));
+
+ $c->createRectangle(0,0,$w+$x*2,$h+$y*2,
+ -fill => $c->{Configure}{'-troughcolor'},
+ -width => 0,
+ -outline => undef);
+
+ $c->{'cover'} = $c->createRectangle($x,$y,$w,$h,
+ -fill => $c->{Configure}{'-troughcolor'},
+ -width => 0,
+ -outline => undef);
+
+ my($x0,$y0,$x1,$y1);
+
+ if($horz) {
+ if($bdir > 0) {
+ ($x0,$y0) = ($x - $gap,$y);
+ }
+ else {
+ ($x0,$y0) = ($length + $x + $gap,$y);
+ }
+ ($x1,$y1) = ($x0,$y0 + $width);
+ }
+ else {
+ if($bdir > 0) {
+ ($x0,$y0) = ($x,$y - $gap);
+ }
+ else {
+ ($x0,$y0) = ($x,$length + $y + $gap);
+ }
+ ($x1,$y1) = ($x0 + $width,$y0);
+ }
+
+ my $blks = $blocks;
+ my $dval = ($maxv - $minv) / $blocks;
+ my $color = $c->cget('-foreground');
+ my $pos = 0;
+ my $val = $minv;
+
+ while($val < $maxv) {
+ my($bw,$nval);
+
+ while(($pos < @$colors) && $colors->[$pos] <= $val) {
+ $color = $colors->[$pos+1];
+ $pos += 2;
+ }
+
+ if($blocks == 1) {
+ $nval = defined($colors->[$pos])
+ ? $colors->[$pos] : $maxv;
+ $bw = (($nval - $val) / ($maxv - $minv)) * $length;
+ }
+ else {
+ $bw = $bwidth;
+ $nval = $val + $dval if($blocks > 1);
+ }
+
+ if($horz) {
+ if($bdir > 0) {
+ $x0 = $x1 + $gap;
+ $x1 = $x0 + $bw;
+ }
+ else {
+ $x1 = $x0 - $gap;
+ $x0 = $x1 - $bw;
+ }
+ }
+ else {
+ if($bdir > 0) {
+ $y0 = $y1 + $gap;
+ $y1 = $y0 + $bw;
+ }
+ else {
+ $y1 = $y0 - $gap;
+ $y0 = $y1 - $bw;
+ }
+ }
+
+ $c->createRectangle($x0,$y0,$x1,$y1,
+ -fill => $color,
+ -width => 0,
+ -outline => undef
+ );
+ $val = $nval;
+ }
+ }
+
+ my $cover = $c->{'cover'};
+ my $ddir = $from > $to ? 1 : -1;
+
+ if(($value <=> $to) == (0-$ddir)) {
+ $c->lower($cover);
+ }
+ elsif(($value <=> $from) == $ddir) {
+ $c->raise($cover);
+ my $x1 = $horz ? $x + $length : $x + $width;
+ my $y1 = $horz ? $y + $width : $y + $length;
+ $c->coords($cover,$x,$y,$x1,$y1);
+ }
+ else {
+ my $step;
+ $value = int($value / $step) * $step
+ if(defined($step = $c->{Configure}{'-resolution'}) && $step > 0);
+
+ $maxv = $minv+1
+ if $minv == $maxv;
+
+ my $range = $maxv - $minv;
+ my $bval = $range / $blocks;
+ my $offset = abs($value - $from);
+ my $ioff = int($offset / $bval);
+ my $start = $ioff * ($bwidth + $gap);
+ $start += ($offset - ($ioff * $bval)) / $bval * $bwidth;
+
+ my($x0,$x1,$y0,$y1);
+
+ if($horz) {
+ $y0 = $y;
+ $y1 = $y + $h;
+ if($dir > 0) {
+ $x0 = $x + $start;
+ $x1 = $x + $w;
+ }
+ else {
+ $x0 = $x;
+ $x1 = $w + $x - $start;
+ }
+ }
+ else {
+ $x0 = $x;
+ $x1 = $x + $w;
+ if($dir > 0) {
+ $y0 = $y + $start;
+ $y1 = $y + $h;
+ }
+ else {
+ $y0 = $y;
+ $y1 = $h + $y - $start;
+ }
+ }
+
+
+ $c->raise($cover);
+ $c->coords($cover,$x0,$y0,$x1,$y1);
+ }
+}
+
+sub value {
+ my $c = shift;
+ my $val = defined($c->{'-variable'})
+ ? $c->{'-variable'}
+ : \$c->{'-value'};
+ my $old = defined($$val) ? $$val : $c->{Configure}{'-from'};
+
+ if(@_) {
+ my $value = shift;
+ $$val = defined($value) ? $value : $c->{Configure}{'-from'};
+ _layoutRequest($c,2);
+ }
+
+ $old;
+}
+
+sub variable {
+ my $c = shift;
+ my $oldvarref = $c->{'-variable'};
+ my $oldval = $$oldvarref if $oldvarref;
+ if(@_) {
+ my $varref = shift;
+ if ($oldvarref)
+ {
+ $c->traceVdelete($oldvarref);
+ }
+ $c->{'-variable'} = $varref;
+ $c->traceVariable($varref, 'w', sub { $c->value($_[1]) });
+ $$varref = $oldval;
+ _layoutRequest($c,2);
+ }
+ $oldval;
+}
+
+sub Destroyed
+{
+ my $c = shift;
+ my $var = delete $c->{'-variable'};
+ $c->traceVdelete($var);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Tk::ProgressBar - A graphical progress bar
+
+=for category Derived Widgets
+
+=head1 SYNOPSIS
+
+ use Tk::ProgressBar;
+
+ $progress = $parent->ProgressBar(
+ -width => 200,
+ -length => 20,
+ -anchor => 's',
+ -from => 0,
+ -to => 100,
+ -blocks => 10,
+ -colors => [0, 'green', 50, 'yellow' , 80, 'red'],
+ -variable => \$percent_done
+ );
+
+ $progress->value($position);
+
+=head1 DESCRIPTION
+
+B<Tk::ProgressBar> provides a widget which will show a graphical representation
+of a value, given maximum and minimum reference values.
+
+=head1 STANDARD OPTIONS
+
+The following standard widget options are supported:
+
+=over 4
+
+=item B<-borderwidth>
+
+=item B<-highlightthickness>
+
+Defaults to 0.
+
+=item B<-padx>
+
+Defaults to 0.
+
+=item B<-pady>
+
+Defaults to 0.
+
+=item B<-relief>
+
+Defaults to C<sunken>
+
+=item B<-troughcolor>
+
+The color to be used for the background (trough) of the progress bar.
+Default is to use grey55.
+
+=back
+
+=head1 WIDGET-SPECIFIC OPTIONS
+
+=over 4
+
+=item B<-anchor>
+
+This can be used to position the start point of the bar. Default
+is 'w' (horizontal bar starting from the left). A vertical bar can be
+configured by using either 's' or 'n'.
+
+=item B<-blocks>
+
+This controls the number of blocks to be used to construct the progress
+bar. The default is to break the bar into 10 blocks.
+
+=item B<-colors>
+
+Controls the colors to be used for different positions of the progress bar.
+The colors should be supplied as a reference to an array containing pairs
+of positions and colors.
+
+ -colors => [ 0, 'green', 50, 'red' ]
+
+means that for the range 0 to 50 the progress bar should be green
+and for higher values it should be red.
+
+
+=item B<-from>
+
+This sets the lower limit of the progress bar. If the bar is set to a
+value below the lower limt no bar will be displayed. Defaults to 0.
+See the C<-to> description for more information.
+
+=item B<-gap>
+
+This is the spacing (in pixels) between each block. Defaults to 1.
+Use 0 to get a continuous bar.
+
+
+=item B<-length>
+
+Specifies the desired long dimension of the ProgressBar in screen
+units (i.e. any of the forms acceptable to Tk_GetPixels). For vertical
+ProgressBars this is the ProgressBars height; for horizontal scales it
+is the ProgressBars width. The default length is calculated from the
+values of C<-padx>, C<-borderwidth>, C<-highlightthickness> and the
+difference between C<-from> and C<-to>.
+
+
+=item B<-resolution>
+
+A real value specifying the resolution for the scale. If this value is greater
+than zero then the scale's value will always be rounded to an even multiple of
+this value, as will tick marks and the endpoints of the scale. If the value is
+less than zero then no rounding occurs. Defaults to 1 (i.e., the value will be
+integral).
+
+=item B<-to>
+
+This sets the upper limit of the progress bar. If a value is specified
+(for example, using the C<value> method) that lies above this value the
+full progress bar will be displayed. Defaults to 100.
+
+
+
+=item B<-variable>
+
+Specifies the reference to a scalar variable to link to the ProgressBar.
+Whenever the value of the variable changes, the ProgressBar will upate
+to reflect this value. (See also the B<value> method below.)
+
+=item B<-value>
+
+The can be used to set the current position of the progress bar
+when used in conjunction with the standard C<configure>. It is
+usually recommended to use the B<value> method instead.
+
+
+=item B<-width>
+
+Specifies the desired narrow dimension of the ProgressBar in screen
+units (i.e. any of the forms acceptable to Tk_GetPixels). For
+vertical ProgressBars this is the ProgressBars width; for horizontal
+bars this is the ProgressBars height. The default width is derived
+from the values of C<-borderwidth> and C<-pady> and C<-highlightthickness>.
+
+=back
+
+=head1 WIDGET METHODS
+
+=over 4
+
+=item I<$ProgressBar>-E<gt>B<value>(?I<value>?)
+
+If I<value> is omitted, returns the current value of the ProgressBar. If
+I<value> is given, the value of the ProgressBar is set. If I<$value> is
+given but undefined the value of the option B<-from> is used.
+
+=back
+
+
+=head1 AUTHOR
+
+Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1997-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/README.Adjust b/Master/tlpkg/tlperl/lib/Tk/README.Adjust
new file mode 100644
index 00000000000..8c3eba45717
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/README.Adjust
@@ -0,0 +1,77 @@
+Subject: Adjuster
+Date: Wed, 16 Dec 1998 22:23:23 +0100
+From: Stephen Kun <stephen.kun@is.gaertner.de>
+To: Nick Ing-Simmons <nick@ni-s.u-net.com>
+
+
+
+
+3. How do I find out whether slave is a pack or grid master or if it is not a
+master (for setting packPropagate(0))
+Currently I set both on the slave.
+
+4. In setting position of drag bar, I do a lot of calcs for each motion event.
+Some could be done one for first, then used again for subsequent calls, eg:
+borderwidth of master, etc.
+I've now partially done this and store them on the widget.
+
+5. Do I need XSync and idletasks calls in Adjuster.pm?
+XSync causes a bug. idletasks doesn't make any difference in practice, from
+what I can see. I've commented both out.
+Bug when using XSync:
+ Run pack_adj_4r
+ Shorten whole window from right so that left window edge crosses leftmost
+ adjuster. Buttons on other adjusters disappear
+
+6. Sometimes the effect given by the Restore method, is undesirable. Eg.
+for multi-columns. Then when you expand say the 1st column, the size of the
+col at the end gets reduced to 0 width when the Adjuster forces itself in.
+Then when you reduce the size of the first column again, the end col is still
+0 width.
+Better would be:
+a) put the restore functionality on a flag OR
+b) when a col is reduced because of a Restore, it saves previous width of
+its slave, and attempts to restore it when the space becomes availabe. (Sounds
+impracticable.)
+I've implemented a) with default ON. In the documentation I'll recommend the
+default for the 1st Adjuster, then OFF for the remaining.
+
+8. What about a packAdjustForget? Given that Adjuster doesn't work well for
+grid anyway, and doesn't consider other managers, that wouldn't be too bad.
+I'm not going to do this, but someone mentioned it a while ago. I can
+see me probably wanting it too at some point.
+Are you for the idea?
+
+10. Grid doesn't work well with Adjuster, didn't before either. I think
+this has to do with grid, rather than adjuster. You get the same effect
+if you grid a row of widgets, then reduce the width of the window.
+Bugs demonstrated by grid_adj_4l:
+a) there's never an Unmap event for the adjuster.
+b) after adjusting, widgets protrude into border on right.
+c) grid('Propagate', 0) on MainWindow has no effect - window shrinks/grows
+ when widgets are adjusted
+d) widgets shuffle to correct position on startup
+I don't recommend use of grid with Adjust!
+
+11. Have taken out __END__ temporarily for testing
+Will put it back before publishing on the mailing list.
+
+12. Why do the adjusters in my testcases come out grey? That's not the
+default background.
+
+13. Could packAdjust return ($adj, $w). Could then do:
+ my $canv = $top->Canvas()->packAdjust();
+OR
+ my ($adj, $canv) = $top->Canvas()->packAdjust();
+Latter is good if you want to configure or unpack adjuster later.
+I realise this is very Kludgy, but there's no other way to get the
+Adjuster from packAdjust.
+I suppose the workaround of creating the Adjuster yourself is OK. When
+you do it by hand though, there's more chance of making mistakes, eg
+forgetting the -side (which defaults then to 'top') which would cause havoc.
+What's your opinion.
+
+14. Run the script adj_button_bug: You can't reduce size of button.
+Button can be expanded, but as soon as focus enters button, it springs back
+to its original size. Why?
+It's not important though.
diff --git a/Master/tlpkg/tlperl/lib/Tk/ROText.pm b/Master/tlpkg/tlperl/lib/Tk/ROText.pm
new file mode 100644
index 00000000000..cc5634f5475
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ROText.pm
@@ -0,0 +1,43 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::ROText;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/;
+
+use Tk::Text;
+use base qw(Tk::Derived Tk::Text);
+
+Construct Tk::Widget 'ROText';
+
+sub clipEvents
+{
+ return qw[Copy];
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ my $val = $class->bindRdOnly($mw);
+ my $cb = $mw->bind($class,'<Next>');
+ $mw->bind($class,'<space>',$cb) if (defined $cb);
+ $cb = $mw->bind($class,'<Prior>');
+ $mw->bind($class,'<BackSpace>',$cb) if (defined $cb);
+ $class->clipboardOperations($mw,'Copy');
+ return $val;
+}
+
+sub Populate {
+ my($self,$args) = @_;
+ $self->SUPER::Populate($args);
+ my $m = $self->menu->entrycget($self->menu->index('Search'), '-menu');
+ $m->delete($m->index('Replace'));
+}
+
+sub Tk::Widget::ScrlROText { shift->Scrolled('ROText' => @_) }
+
+1;
+
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm b/Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm
new file mode 100644
index 00000000000..d09d41b4208
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Radiobutton.pm
@@ -0,0 +1,45 @@
+# Conversion from Tk4.0 button.tcl competed.
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+
+package Tk::Radiobutton;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Radiobutton.pm#6 $
+
+# modify it under the same terms as Perl itself, subject
+# to additional disclaimer in license.terms due to partial
+# derivation from Tk4.0 sources.
+
+require Tk::Button;
+
+
+use base qw(Tk::Button);
+Construct Tk::Widget 'Radiobutton';
+
+sub Tk_cmd { \&Tk::radiobutton }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-variable');
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Enter>', 'Enter');
+ $mw->bind($class,'<Leave>', 'Leave');
+ $mw->bind($class,'<1>', 'Invoke');
+ $mw->bind($class,'<space>', 'Invoke');
+ return $class;
+}
+
+sub Invoke
+{
+ my $w = shift;
+ $w->invoke() unless($w->cget('-state') eq 'disabled');
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Region.pm b/Master/tlpkg/tlperl/lib/Tk/Region.pm
new file mode 100644
index 00000000000..3e02bd2ff49
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Region.pm
@@ -0,0 +1,182 @@
+package Tk::Region;
+
+# Ideas in progress do not document ...
+
+use strict;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Region.pm#6 $
+
+use Tk::Widget ();
+
+Construct Tk::Widget 'Region';
+
+my %index = (-widget => 1, '-x' => 2, '-y' => 3, -width => 4, -height => 5);
+
+sub _attr
+{
+ my ($obj,$key,$val) = @_;
+ if (@_ > 2)
+ {
+ $obj->{$key} = $val;
+ }
+ return $obj->{$key}
+}
+
+foreach my $name (qw(widget x y width height))
+ {
+ my $key = "-$name";
+ no strict 'refs';
+ *{$name} = sub { shift->_attr($key,@_) };
+ }
+
+sub new
+{
+ my $class = shift;
+ my $widget = shift;
+ my $obj = bless [\%index,$widget,0,0,0,0],$class;
+ $obj->configure(@_);
+}
+
+sub cfgDefault
+{
+ my ($class,$key) = @_;
+ return undef;
+}
+
+sub cfgName
+{
+ my ($class,$key) = @_;
+ $key =~ s/^-//;
+ return lcfirst($key);
+}
+
+sub cfgClass
+{
+ return ucfirst(shift->cfgName(@_));
+}
+
+sub configure
+{
+ my $obj = shift;
+ my @results;
+ if (@_ > 1)
+ {
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ if (exists $obj->{$key})
+ {
+ $obj->{$key} = $val;
+ }
+ else
+ {
+ my ($meth) = $key =~ /^-(\w+)$/;
+ croak("Invalid option $key") unless $obj->can($meth);
+ $obj->$meth($val);
+ }
+ }
+ }
+ elsif (@_ == 1)
+ {
+ my $key = shift;
+ my $value = $obj->cget($key);
+ push(@results,$key,$obj->cfgName($key),$obj->cfgClass($key),$obj->cfgDefault($key),$value);
+ }
+ else
+ {
+ foreach my $key (sort keys %$obj)
+ {
+ push(@results,scalar($obj->configure($key)))
+ }
+ }
+ return wantarray ? @results : \@results;
+}
+
+sub cget
+{
+ my $obj = shift;
+ my $key = shift;
+ return $obj->{$key} if exists $obj->{$key};
+ my ($meth) = $key =~ /^-(\w+)$/;
+ croak("Invalid option $key") unless $obj->can($meth);
+ return $obj->$meth();
+}
+
+sub bbox
+{
+ my $obj = shift;
+ my @results;
+ if (@_)
+ {
+ my $ref = (@_ == 1) ? shift : \@_;
+ my ($x1,$y1,$x2,$y2) = (ref $ref) ? @$ref : split(/\s+/,$ref);
+ ($x2,$x1) = ($x1,$x2) if ($x2 < $x1);
+ ($y2,$y1) = ($y1,$y2) if ($y2 < $y1);
+ $obj->width($x2-$x1);
+ $obj->height($y2-$y1);
+ $obj->x($x1);
+ $obj->y($y1);
+ }
+ else
+ {
+ my $x = $obj->x;
+ my $y = $obj->x;
+ push(@results,$x,$y,$x+$obj->width,$y+$obj->height);
+ }
+ return wantarray ? @results : \@results;
+}
+
+sub rootx
+{
+ my $obj = shift;
+ if (@_)
+ {
+ my $x = shift;
+ $obj->x($x-$obj->widget->rootx);
+ }
+ return $obj->widget->rootx + $obj->{'-x'}
+}
+
+sub rooty
+{
+ my $obj = shift;
+ if (@_)
+ {
+ my $y = shift;
+ $obj->y($y-$obj->widget->rootx);
+ }
+ return $obj->widget->rooty + $obj->{'-y'}
+}
+
+sub rootxy
+{
+ my $obj = shift;
+ if (@_)
+ {
+ $obj->rootx(shift);
+ $obj->rooty(shift);
+ }
+ my @results = ($obj->rootx,$obj->rooty);
+ return wantarray ? @results : \@results;
+}
+
+sub rootbbox
+{
+ my $obj = shift;
+ my ($x1,$y1) = $obj->rootxy;
+ my $x2 = $x1+$obj->width;
+ my $y2 = $y1+$obj->height;
+ my @results = ($x1,$y1,$x2,$y2);
+ return wantarray ? @results : \@results;
+}
+
+
+*Width = \&width;
+*Height = \&height;
+*X = \&rootx;
+*Y = \&rooty;
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Reindex.pm b/Master/tlpkg/tlperl/lib/Tk/Reindex.pm
new file mode 100644
index 00000000000..05e8e1fc1fc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Reindex.pm
@@ -0,0 +1,225 @@
+package Tk::Reindex;
+
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/TextList/Reindex.pm#4 $
+
+use Tk;
+use base qw(Tk::Derived);
+
+
+sub Populate
+{
+ my ($w, $args) = @_;
+
+ $w->_callbase('Populate',$args);
+
+ $w->ConfigSpecs(-linestart => ["PASSIVE", "lineStart", "LineStart", 0],
+ -toindexcmd => ["CALLBACK", "toIndexCmd", "ToIndexCmd" , [\&to_index,$w]],
+ -fromindexcmd => ["CALLBACK", "fromIndexCmd","FromIndexCmd", [\&from_index,$w]]);
+}
+
+sub import
+{
+ my($module,$base)=@_;
+ my $pkg=(caller)[0];
+
+ no strict 'refs';
+ *{"${pkg}::_reindexbase"}=sub{$base};
+}
+
+sub _callbase
+{
+ my($w,$sub)=(shift,shift);
+ my $supersub=$w->_reindexbase()."::$sub";
+ $w->$supersub(@_);
+}
+
+BEGIN
+{
+ # list of subroutines and index argument number (-1 as first element means return value)
+ my %subs=('bbox' => [0],
+ 'compare' => [0,2],
+ 'delete' => [0,1],
+ 'dlineinfo' => [0],
+ 'dump' => \&_find_dump_index,
+ 'get' => [0,1],
+ 'index' => [-1,0],
+ 'insert' => [0],
+ 'mark' => \&_find_mark_index,
+ 'search' => \&_find_search_index,
+ 'see' => [0],
+ 'tag' => \&_find_tag_index,
+ 'window' => [1],
+ 'image' => [1],
+ );
+
+ foreach my $sub (keys %subs)
+ {
+ my $args=$subs{$sub};
+ my $argsub=ref $args eq 'CODE'?$args:sub{$args};
+ my $newsub=sub
+ {
+ my($w)=shift;
+ my(@iargs)=grep($_<=$#_,@{$argsub->(@_)});
+ my $iret=shift @iargs if @iargs && $iargs[0]==-1;
+ my(@args)=@_;
+ @args[@iargs]=$w->Callback(-toindexcmd,@args[@iargs]);
+ my(@ret)=$w->_callbase($sub,@args);
+ @ret=$w->Callback(-fromindexcmd,@ret) if $iret;
+ wantarray?@ret:$ret[0];
+ };
+ no strict 'refs';
+ *{$sub}=$newsub;
+ }
+}
+
+sub to_index
+{
+ my $w=shift;
+ my $offset=$w->cget(-linestart)+1;
+ my(@args)=@_;
+ foreach (@args)
+ {
+ s/^\d+(?=\.)/$&+$offset/e;
+ }
+ @args;
+}
+
+sub from_index
+{
+ my $w=shift;
+ my $offset=$w->cget(-linestart)+1;
+ my(@args)=@_;
+ foreach (@args)
+ {
+ s/^\d+(?=\.)/$&-$offset/e
+ }
+ @args;
+}
+
+sub _find_dump_index
+{
+ my $idx=_count_options(@_);
+ [$idx,$idx+1];
+}
+
+sub _find_search_index
+{
+ my $idx=_count_options(@_);
+ [$idx+1,$idx+2];
+}
+
+sub _count_options
+{
+ my $idx=0;
+ while($_[$idx]=~/^-/g)
+ {
+ $idx++;
+ $idx++ if $' eq 'count' or $' eq 'command';
+ last if $' eq '-';
+ }
+ $idx;
+}
+
+sub _find_tag_index
+{
+ return [1] if $_[0] eq 'names';
+ return [2,3] if $_[0]=~/^(add|remove|nextrange|prevrange)$/;
+ return [-1] if $_[0] eq 'ranges';
+ return [];
+}
+
+sub _find_mark_index
+{
+ return [2] if $_[0] eq 'set';
+ return [1] if $_[0] eq 'next' or $_[0] eq 'previous';
+ return [];
+}
+
+1;
+
+=head1 NAME
+
+Tk::Reindex - change the base index of Text-like widgets
+
+=for category Derived Widgets
+
+=head1 SYNOPSIS
+
+ use Tk::ReindexedText;
+ $t1=$w->ReindexedText(-linestart => 2);
+
+ use Tk::ReindexedROText;
+ $t2=$w->ReindexedROText(-linestart => 0);
+
+=head1 DESCRIPTION
+
+Creates a new widget class based on B<Text>-like widgets that can
+redefine the line number base (normally B<Text> widgets start line
+numbers at 1), or possibly other manipulations on indexes.
+
+=head1 STANDARD OPTIONS
+
+The newly-defined widget takes all the same options as the base
+widget, which defaults to B<Text>.
+
+=head1 WIDGET-SPECIFIC OPTIONS
+
+=item Name: B<lineStart>
+
+=item Class: B<LineStart>
+
+=item Switch: B<-linestart>
+
+Sets the line number of the first line in the B<Text> widget. The
+default B<-toindexcmd> and B<-fromindexcmd> use this configuration
+option.
+
+-item Name: B<toIndexCmd> B<fromIndexCmd>
+
+-item Class: B<ToIndexCmd> B<FromIndexCmd>
+
+-item Switch: B<-toindexcmd> B<-fromindexcmd>
+
+These two options specify callbacks that are called with a list of
+indexes and are responsible for translating them to/from indexes that
+the base B<Text> widget can understand. The callback is passed the
+widget followed by a list of indexes, and should return a list of
+translated indexes. B<-toindexcmd> should translate from 'user'
+indexes to 'native' B<Text>-compatible indexes, and B<-fromindexcmd>
+should translate from 'native' indexes to 'user' indexes.
+
+The default callbacks simply add/subtract the offset given by the
+B<-linestart> option for all indexes in 'line.character' format.
+
+It would probably be prudent to make these functions inverses of each
+other.
+
+=head1 CLASS METHODS
+
+=item import
+
+To make new Reindex widgets, this function should be called via B<use>
+with the name of the Text-like base class that you are extending with
+"Reindex" capability. 'use base(Tk::Reindex Tk::nameofbasewidget)'
+should also be specified for that widget.
+
+=head1 BUGS
+
+I've used the word "indexes" instead of "indices" throughout the
+documentation.
+
+All the built-in perl code for widget bindings & methods will use the
+new 'user' indexes. Which means all this index manipulation might
+might break code that is trying to parse/manipulate indexes. Or even
+assume that '1.0' is the beginning index. B<Tk::Text::Contents> comes
+to mind.
+
+=head1 AUTHOR
+
+Andrew Allen <ada@fc.hp.com>
+
+This code may be distributed under the same conditions as Perl.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm b/Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm
new file mode 100644
index 00000000000..8c293f5fa61
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ReindexedROText.pm
@@ -0,0 +1,13 @@
+use strict;
+package Tk::ReindexedROText;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/TextList/ReindexedROText.pm#4 $
+
+use Tk::Reindex qw(Tk::ROText);
+use base qw(Tk::Reindex Tk::ROText);
+Construct Tk::Widget 'ReindexedROText';
+
+1;
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm b/Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm
new file mode 100644
index 00000000000..c16a6fe7fd7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/ReindexedText.pm
@@ -0,0 +1,13 @@
+use strict;
+package Tk::ReindexedText;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/TextList/ReindexedText.pm#4 $
+
+use Tk::Reindex qw(Tk::Text);
+use base qw(Tk::Reindex Tk::Text);
+Construct Tk::Widget 'ReindexedText';
+
+1;
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Scale.pm b/Master/tlpkg/tlperl/lib/Tk/Scale.pm
new file mode 100644
index 00000000000..57c7bb11aa1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Scale.pm
@@ -0,0 +1,278 @@
+# Converted from scale.tcl --
+#
+# This file defines the default bindings for Tk scale widgets.
+#
+# @(#) scale.tcl 1.3 94/12/17 16:05:23
+#
+# Copyright (c) 1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+package Tk::Scale;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Scale/Scale.pm#4 $
+
+use Tk qw($XS_VERSION);
+use AutoLoader;
+
+use base qw(Tk::Widget);
+
+Construct Tk::Widget 'Scale';
+
+bootstrap Tk::Scale;
+
+sub Tk_cmd { \&Tk::scale }
+
+Tk::Methods('coords','get','identify','set');
+
+
+import Tk qw(Ev);
+
+#
+# Bind --
+# This procedure below invoked the first time the mouse enters a
+# scale widget or a scale widget receives the input focus. It creates
+# all of the class bindings for scales.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $mw->bind($class,'<Enter>',['Enter',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<Motion>',['Activate',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<Leave>','Leave');
+
+ $mw->bind($class,'<1>',['ButtonDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Motion>',['Drag',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Leave>','NoOp');
+ $mw->bind($class,'<B1-Enter>','NoOp');
+ $mw->bind($class,'<ButtonRelease-1>',['ButtonUp',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<2>',['ButtonDown',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['Drag',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Leave>','NoOp');
+ $mw->bind($class,'<B2-Enter>','NoOp');
+ $mw->bind($class,'<ButtonRelease-2>',['ButtonUp',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<Control-1>',['ControlPress',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<Up>',['Increment','up','little','noRepeat']);
+ $mw->bind($class,'<Down>',['Increment','down','little','noRepeat']);
+ $mw->bind($class,'<Left>',['Increment','up','little','noRepeat']);
+ $mw->bind($class,'<Right>',['Increment','down','little','noRepeat']);
+
+ $mw->bind($class,'<Control-Up>',['Increment','up','big','noRepeat']);
+ $mw->bind($class,'<Control-Down>',['Increment','down','big','noRepeat']);
+ $mw->bind($class,'<Control-Left>',['Increment','up','big','noRepeat']);
+ $mw->bind($class,'<Control-Right>',['Increment','down','big','noRepeat']);
+
+ $mw->bind($class,'<Home>',['set',Ev('cget','-from')]);
+ $mw->bind($class,'<End>',['set',Ev('cget','-to')]);
+ return $class;
+}
+
+1;
+
+__END__
+
+# Activate --
+# This procedure is invoked to check a given x-y position in the
+# scale and activate the slider if the x-y position falls within
+# the slider.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Activate
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ my $ident = $w->identify($x,$y);
+ if (defined($ident) && $ident eq 'slider')
+ {
+ $w->configure(-state => 'active')
+ }
+ else
+ {
+ $w->configure(-state => 'normal')
+ }
+}
+
+sub Leave
+{
+ my ($w) = @_;
+ $w->configure('-activebackground',$w->{'activeBg'}) if ($Tk::strictMotif);
+ $w->configure('-state','normal') if ($w->cget('-state') eq 'active');
+}
+
+sub Enter
+{
+ my ($w,$x,$y) = @_;
+ if ($Tk::strictMotif)
+ {
+ $w->{'activeBg'} = $w->cget('-activebackground');
+ $w->configure('-activebackground',$w->cget('-background'));
+ }
+ $w->Activate($x,$y);
+}
+
+sub ButtonUp
+{
+ my ($w,$x,$y) = @_;
+ $w->CancelRepeat();
+ $w->EndDrag();
+ $w->Activate($x,$y)
+}
+
+
+# ButtonDown --
+# This procedure is invoked when a button is pressed in a scale. It
+# takes different actions depending on where the button was pressed.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates of button press.
+sub ButtonDown
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ $Tk::dragging = 0;
+ $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->Increment('up','little','initial')
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->Increment('down','little','initial')
+ }
+ elsif ($el eq 'slider')
+ {
+ $Tk::dragging = 1;
+ my @coords = $w->coords();
+ $Tk::deltaX = $x-$coords[0];
+ $Tk::deltaY = $y-$coords[1];
+ }
+}
+# Drag --
+# This procedure is called when the mouse is dragged with
+# mouse button 1 down. If the drag started inside the slider
+# (i.e. the scale is active) then the scale's value is adjusted
+# to reflect the mouse's position.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Drag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $w->set($w->get($x-$Tk::deltaX,$y-$Tk::deltaY))
+}
+# EndDrag --
+# This procedure is called to end an interactive drag of the
+# slider. It just marks the drag as over.
+# Arguments:
+# w - The scale widget.
+sub EndDrag
+{
+ my $w = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $Tk::dragging = 0;
+}
+# Increment --
+# This procedure is invoked to increment the value of a scale and
+# to set up auto-repeating of the action if that is desired. The
+# way the value is incremented depends on the "dir" and "big"
+# arguments.
+#
+# Arguments:
+# w - The scale widget.
+# dir - "up" means move value towards -from, "down" means
+# move towards -to.
+# big - Size of increments: "big" or "little".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+sub Increment
+{
+ my $w = shift;
+ my $dir = shift;
+ my $big = shift;
+ my $repeat = shift;
+ my $inc;
+ if ($big eq 'big')
+ {
+ $inc = $w->cget('-bigincrement');
+ if ($inc == 0)
+ {
+ $inc = abs(($w->cget('-to')-$w->cget('-from')))/10.0
+ }
+ if ($inc < $w->cget('-resolution'))
+ {
+ $inc = $w->cget('-resolution')
+ }
+ }
+ else
+ {
+ $inc = $w->cget('-resolution')
+ }
+ if (($w->cget('-from') > $w->cget('-to')) ^ ($dir eq 'up'))
+ {
+ $inc = -$inc
+ }
+ $w->set($w->get()+$inc);
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),'Increment',$w,$dir,$big,'again'));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),'Increment',$w,$dir,$big,'again'));
+ }
+}
+# ControlPress --
+# This procedure handles button presses that are made with the Control
+# key down. Depending on the mouse position, it adjusts the scale
+# value to one end of the range or the other.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates where the button was pressed.
+sub ControlPress
+{
+ my ($w,$x,$y) = @_;
+ my $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->set($w->cget('-from'))
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->set($w->cget('-to'))
+ }
+}
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm b/Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm
new file mode 100644
index 00000000000..6b416e04b30
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Scrollbar.pm
@@ -0,0 +1,429 @@
+# Conversion from Tk4.0 scrollbar.tcl competed.
+package Tk::Scrollbar;
+
+use vars qw($VERSION);
+$VERSION = '4.010'; # $Id: //depot/Tkutf8/Scrollbar/Scrollbar.pm#10 $
+
+use Tk qw($XS_VERSION Ev);
+use AutoLoader;
+
+use base qw(Tk::Widget);
+
+#use strict;
+#use vars qw($pressX $pressY @initValues $initPos $activeBg);
+
+Construct Tk::Widget 'Scrollbar';
+
+bootstrap Tk::Scrollbar;
+
+sub Tk_cmd { \&Tk::scrollbar }
+
+Tk::Methods('activate','delta','fraction','get','identify','set');
+
+sub Needed
+{
+ my ($sb) = @_;
+ my @val = $sb->get;
+ return 1 unless (@val == 2);
+ return 1 if $val[0] != 0.0;
+ return 1 if $val[1] != 1.0;
+ return 0;
+}
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class, '<Enter>', 'Enter');
+ $mw->bind($class, '<Motion>', 'Motion');
+ $mw->bind($class, '<Leave>', 'Leave');
+
+ $mw->bind($class, '<1>', 'ButtonDown');
+ $mw->bind($class, '<B1-Motion>', ['Drag', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<ButtonRelease-1>', 'ButtonUp');
+ $mw->bind($class, '<B1-Leave>', 'NoOp'); # prevent generic <Leave>
+ $mw->bind($class, '<B1-Enter>', 'NoOp'); # prevent generic <Enter>
+ $mw->bind($class, '<Control-1>', 'ScrlTopBottom');
+
+ $mw->bind($class, '<2>', 'ButtonDown');
+ $mw->bind($class, '<B2-Motion>', ['Drag', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<ButtonRelease-2>', 'ButtonUp');
+ $mw->bind($class, '<B2-Leave>', 'NoOp'); # prevent generic <Leave>
+ $mw->bind($class, '<B2-Enter>', 'NoOp'); # prevent generic <Enter>
+ $mw->bind($class, '<Control-2>', 'ScrlTopBottom');
+
+ $mw->bind($class, '<Up>', ['ScrlByUnits','v',-1]);
+ $mw->bind($class, '<Down>', ['ScrlByUnits','v', 1]);
+ $mw->bind($class, '<Control-Up>', ['ScrlByPages','v',-1]);
+ $mw->bind($class, '<Control-Down>', ['ScrlByPages','v', 1]);
+
+ $mw->bind($class, '<Left>', ['ScrlByUnits','h',-1]);
+ $mw->bind($class, '<Right>', ['ScrlByUnits','h', 1]);
+ $mw->bind($class, '<Control-Left>', ['ScrlByPages','h',-1]);
+ $mw->bind($class, '<Control-Right>', ['ScrlByPages','h', 1]);
+
+ $mw->bind($class, '<Prior>', ['ScrlByPages','hv',-1]);
+ $mw->bind($class, '<Next>', ['ScrlByPages','hv', 1]);
+
+ # X11 mousewheel - honour for horizontal too.
+ $mw->bind($class, '<4>', ['ScrlByUnits','hv',-5]);
+ $mw->bind($class, '<5>', ['ScrlByUnits','hv', 5]);
+
+ $mw->bind($class, '<Home>', ['ScrlToPos', 0]);
+ $mw->bind($class, '<End>', ['ScrlToPos', 1]);
+
+ $mw->bind($class, '<4>', ['ScrlByUnits','v',-3]);
+ $mw->bind($class, '<5>', ['ScrlByUnits','v', 3]);
+
+ return $class;
+
+}
+
+1;
+
+__END__
+
+sub Enter
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ if ($Tk::strictMotif)
+ {
+ my $bg = $w->cget('-background');
+ $activeBg = $w->cget('-activebackground');
+ $w->configure('-activebackground' => $bg);
+ }
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+sub Leave
+{
+ my $w = shift;
+ if ($Tk::strictMotif)
+ {
+ $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ;
+ }
+ $w->activate('');
+}
+
+sub Motion
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# tkScrollButtonDown --
+# This procedure is invoked when a button is pressed in a scrollbar.
+# It changes the way the scrollbar is displayed and takes actions
+# depending on where the mouse is.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonDown
+{my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ $w->configure('-activerelief' => 'sunken');
+ if ($e->b == 1 and
+ (defined($element) && $element eq 'slider'))
+ {
+ $w->StartDrag($e->x,$e->y);
+ }
+ elsif ($e->b == 2 and
+ (defined($element) && $element =~ /^(trough[12]|slider)$/o))
+ {
+ my $pos = $w->fraction($e->x, $e->y);
+ my($head, $tail) = $w->get;
+ my $len = $tail - $head;
+
+ $head = $pos - $len/2;
+ $tail = $pos + $len/2;
+ if ($head < 0) {
+ $head = 0;
+ $tail = $len;
+ }
+ elsif ($tail > 1) {
+ $head = 1 - $len;
+ $tail = 1;
+ }
+ $w->ScrlToPos($head);
+ $w->set($head, $tail);
+
+ $w->StartDrag($e->x,$e->y);
+ }
+ else
+ {
+ $w->Select($element,'initial');
+ }
+}
+
+# tkScrollButtonUp --
+# This procedure is invoked when a button is released in a scrollbar.
+# It cancels scans and auto-repeats that were in progress, and restores
+# the way the active element is displayed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonUp
+{my $w = shift;
+ my $e = $w->XEvent;
+ $w->CancelRepeat;
+ $w->configure('-activerelief' => 'raised');
+ $w->EndDrag($e->x,$e->y);
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# tkScrollSelect --
+# This procedure is invoked when button 1 is pressed over the scrollbar.
+# It invokes one of several scrolling actions depending on where in
+# the scrollbar the button was pressed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# element - The element of the scrollbar that was selected, such
+# as "arrow1" or "trough2". Shouldn't be "slider".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+
+sub Select
+{
+ my $w = shift;
+ my $element = shift;
+ my $repeat = shift;
+ return unless defined ($element);
+ if ($element eq 'arrow1')
+ {
+ $w->ScrlByUnits('hv',-1);
+ }
+ elsif ($element eq 'trough1')
+ {
+ $w->ScrlByPages('hv',-1);
+ }
+ elsif ($element eq 'trough2')
+ {
+ $w->ScrlByPages('hv', 1);
+ }
+ elsif ($element eq 'arrow2')
+ {
+ $w->ScrlByUnits('hv', 1);
+ }
+ else
+ {
+ return;
+ }
+
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again']));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again']));
+ }
+}
+
+# tkScrollStartDrag --
+# This procedure is called to initiate a drag of the slider. It just
+# remembers the starting position of the slider.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the start of the drag operation.
+
+sub StartDrag
+{
+ my($w,$x,$y) = @_;
+ return unless (defined ($w->cget('-command')));
+ $pressX = $x;
+ $pressY = $y;
+ @initValues = $w->get;
+ my $iv0 = $initValues[0];
+ if (@initValues == 2)
+ {
+ $initPos = $iv0;
+ }
+ elsif ($iv0 == 0)
+ {
+ $initPos = 0;
+ }
+ else
+ {
+ $initPos = $initValues[2]/$initValues[0];
+ }
+}
+
+# tkScrollDrag --
+# This procedure is called for each mouse motion even when the slider
+# is being dragged. It notifies the associated widget if we're not
+# jump scrolling, and it just updates the scrollbar if we are jump
+# scrolling.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The current mouse position.
+
+sub Drag
+{
+ my($w,$x,$y) = @_;
+ return if !defined $initPos;
+ my $delta = $w->delta($x-$pressX, $y-$pressY);
+ if ($w->cget('-jump'))
+ {
+ if (@initValues == 2)
+ {
+ $w->set($initValues[0]+$delta, $initValues[1]+$delta);
+ }
+ else
+ {
+ $delta = sprintf "%d", $delta * $initValues[0]; # round()
+ $initValues[2] += $delta;
+ $initValues[3] += $delta;
+ $w->set(@initValues[2,3]);
+ }
+ }
+ else
+ {
+ $w->ScrlToPos($initPos+$delta);
+ }
+}
+
+# tkScrollEndDrag --
+# This procedure is called to end an interactive drag of the slider.
+# It scrolls the window if we're in jump mode, otherwise it does nothing.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the end of the drag operation.
+
+sub EndDrag
+{
+ my($w,$x,$y) = @_;
+ return if (!defined $initPos);
+ if ($w->cget('-jump'))
+ {
+ my $delta = $w->delta($x-$pressX, $y-$pressY);
+ $w->ScrlToPos($initPos+$delta);
+ }
+ undef $initPos;
+}
+
+# tkScrlByUnits --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of units. It notifies the associated widget
+# in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many units to scroll: typically 1 or -1.
+
+sub ScrlByUnits
+{my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'units');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount);
+ }
+}
+
+# tkScrlByPages --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of screenfuls. It notifies the associated
+# widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many screens to scroll: typically 1 or -1.
+
+sub ScrlByPages
+{
+ my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'pages');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount*($info[1]-1));
+ }
+}
+
+# tkScrlToPos --
+# This procedure tells the scrollbar's associated widget to scroll to
+# a particular location, given by a fraction between 0 and 1. It notifies
+# the associated widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# pos - A fraction between 0 and 1 indicating a desired position
+# in the document.
+
+sub ScrlToPos
+{
+ my $w = shift;
+ my $pos = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('moveto',$pos);
+ }
+ else
+ {
+ $cmd->Call(int($info[0]*$pos));
+ }
+}
+
+# tkScrlTopBottom
+# Scroll to the top or bottom of the document, depending on the mouse
+# position.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates within the widget.
+
+sub ScrlTopBottom
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ return unless ($element);
+ if ($element =~ /1$/)
+ {
+ $w->ScrlToPos(0);
+ }
+ elsif ($element =~ /2$/)
+ {
+ $w->ScrlToPos(1);
+ }
+}
+
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Spinbox.pm b/Master/tlpkg/tlperl/lib/Tk/Spinbox.pm
new file mode 100644
index 00000000000..673a1e181ce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Spinbox.pm
@@ -0,0 +1,115 @@
+package Tk::Spinbox;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d',q$Revision: #6 $ =~ /#(\d+)/;
+
+use base 'Tk::Entry';
+
+sub Tk_cmd { \&Tk::spinbox }
+
+# Also inherits Entry's methods
+Tk::Methods( "identify", "invoke", "set" );
+use Tk::Submethods ( 'selection' => ["element"] );
+
+Construct Tk::Widget 'Spinbox';
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $class->SUPER::ClassInit($mw);
+
+ $mw->bind($class, '<Up>', [invoke => 'buttonup']);
+ $mw->bind($class, '<4>', [invoke => 'buttonup']);
+ $mw->bind($class, '<Down>',[invoke => 'buttondown']);
+ $mw->bind($class, '<5>', [invoke => 'buttondown']);
+
+ return $class;
+}
+
+sub Invoke
+{
+ my ($w,$elem) = @_;
+ unless ($w->{_outside})
+ {
+ $w->invoke($elem);
+ $w->{_repeated}++;
+ }
+ my $delay = $w->cget('-repeatinterval');
+ if ($delay > 0)
+ {
+ $w->RepeatId($w->after($delay,[Invoke => $w,$elem]));
+ }
+}
+
+sub Button1
+{
+ my ($w,$x,$y) = @_;
+ my $elem = $w->identify($x,$y);
+ $w->{_element} = $elem || 'entry';
+ if ($w->{_element} eq 'entry')
+ {
+ $w->SUPER::Button1($x,$y);
+ }
+ elsif ($w->cget('-state') ne 'disabled')
+ {
+ $w->selectionElement($elem);
+ $w->{_repeated} = 0;
+ $w->{_outside} = 0;
+ $w->{_relief} = $w->cget("-${elem}relief");
+ $w->CancelRepeat;
+ my $delay = $w->cget('-repeatdelay');
+ $w->RepeatId($w->after($delay,[Invoke => $w,$elem])) if $delay > 0;
+ }
+}
+
+sub Motion
+{
+ my ($w,$x,$y) = @_;
+ my $elem = $w->identify($x,$y);
+ $w->{_element} = $elem || 'entry' unless $w->{_element};
+ if ($w->{_element} eq 'entry')
+ {
+ $w->SUPER::Motion($x,$y);
+ }
+ else
+ {
+ if (!defined($elem) || $elem ne $w->{_element})
+ {
+ # Moved outside the button
+ unless ($w->{_outside})
+ {
+ $w->{_outside} = 1;
+ $w->selectionElement('none');
+ }
+ }
+ elsif ($w->{_outside})
+ {
+ # Moved back over the button
+ $w->selectionElement($elem);
+ $w->{_outside} = 0;
+ }
+ }
+}
+
+sub Button1Release
+{
+ my ($w,$x,$y) = @_;
+ $w->SUPER::Button1Release($x,$y);
+ my $elem = $w->{_element};
+ if (defined($elem) && $elem ne 'entry')
+ {
+ my $repeated = $w->{_repeated};
+ if (defined($repeated) && !$repeated)
+ {
+ $w->invoke($elem);
+ }
+ my $relief = delete $w->{_relief};
+ $w->configure("-${elem}relief",$relief) if $relief
+ }
+ $w->selectionElement('none');
+}
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Stats.pm b/Master/tlpkg/tlperl/lib/Tk/Stats.pm
new file mode 100644
index 00000000000..39bedfb1a47
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Stats.pm
@@ -0,0 +1,26 @@
+package Tk::Stats;
+
+($lu,$ls) = times;
+
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Stats.pm#4 $
+
+sub stats
+ {
+ my ($u,$s) = times;
+ my $du = $u-$lu;
+ my $ds = $s-$ls;
+ $ls = $s;
+ $lu = $u;
+ print sprintf(' dt=%4.2f du=%4.2f ds=%4.2f',$du+$ds,$du,$ds);
+ print sprintf(' t=%4.2f u=%4.2f s=%4.2f',$u+$s,$u,$s);
+ print ' ',shift,"\n";
+ }
+
+sub import
+{
+ stats($_[1]);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Submethods.pm b/Master/tlpkg/tlperl/lib/Tk/Submethods.pm
new file mode 100644
index 00000000000..a2b8e3bd186
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Submethods.pm
@@ -0,0 +1,46 @@
+package Tk::Submethods;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Submethods.pm#4 $
+
+sub import
+{
+ my $class = shift;
+ no strict 'refs';
+ my $package = caller(0);
+ while (@_)
+ {
+ my $fn = shift;
+ my $sm = shift;
+ foreach my $sub (@{$sm})
+ {
+ my ($suffix) = $sub =~ /(\w+)$/;
+ my $pfn = $package.'::'.$fn;
+ *{$pfn."\u$suffix"} = sub { shift->$pfn($sub,@_) };
+ }
+ }
+}
+
+sub Direct
+{
+ my $class = shift;
+ no strict 'refs';
+ my $package = caller(0);
+ while (@_)
+ {
+ my $fn = shift;
+ my $sm = shift;
+ my $sub;
+ foreach $sub (@{$sm})
+ {
+ # eval "sub ${package}::${sub} { shift->$fn('$sub',\@_) }";
+ *{$package.'::'.$sub} = sub { shift->$fn($sub,@_) };
+ }
+ }
+}
+
+1;
+
+__END__
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/TList.pm b/Master/tlpkg/tlperl/lib/Tk/TList.pm
new file mode 100644
index 00000000000..65ce18796bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TList.pm
@@ -0,0 +1,416 @@
+package Tk::TList;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/TList/TList.pm#6 $
+
+use Tk qw(Ev $XS_VERSION);
+
+use base qw(Tk::Widget);
+
+use strict;
+
+Construct Tk::Widget 'TList';
+
+bootstrap Tk::TList;
+
+sub Tk_cmd { \&Tk::tlist }
+
+Tk::Methods qw(insert index anchor delete dragsite dropsite entrycget
+ entryconfigure info nearest see selection xview yview);
+
+use Tk::Submethods ( 'delete' => [qw(all entry offsprings siblings)],
+ 'info' => [qw(anchor dragsite dropsite selection)],
+ 'selection' => [qw(clear get includes set)],
+ 'anchor' => [qw(clear set)],
+ 'dragsite' => [qw(clear set)],
+ 'dropsite' => [qw(clear set)],
+ );
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ $mw->bind($class,'<ButtonPress-1>',[ 'Button1' ] );
+ $mw->bind($class,'<Shift-ButtonPress-1>',[ 'ShiftButton1' ] );
+ $mw->bind($class,'<Control-ButtonRelease-1>','Control_ButtonRelease_1');
+ $mw->bind($class,'<ButtonRelease-1>','ButtonRelease_1');
+ $mw->bind($class,'<B1-Motion>',[ 'Button1Motion' ] );
+ $mw->bind($class,'<B1-Leave>',[ 'AutoScan' ] );
+
+ $mw->bind($class,'<Double-ButtonPress-1>',['Double1']);
+
+ $mw->bind($class,'<Control-B1-Motion>','Control_B1_Motion');
+ $mw->bind($class,'<Control-ButtonPress-1>',['CtrlButton1']);
+ $mw->bind($class,'<Control-Double-ButtonPress-1>',['CtrlButton1']);
+
+ $mw->bind($class,'<B1-Enter>','B1_Enter');
+
+ $mw->bind($class,'<Up>', ['DirKey', 'up']);
+ $mw->bind($class,'<Down>',['DirKey', 'down']);
+
+ $mw->bind($class,'<Left>', ['DirKey', 'left']);
+ $mw->bind($class,'<Right>',['DirKey', 'right']);
+
+ $mw->bind($class,'<Prior>','Prior');
+ $mw->bind($class,'<Next>','Next');
+
+ $mw->bind($class,'<Return>', ['KeyboardActivate']);
+ $mw->bind($class,'<space>', ['KeyboardBrowse']);
+
+ return $class;
+}
+
+sub Control_ButtonRelease_1
+{
+}
+
+
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat
+ if($w->cget('-selectmode') ne 'dragdrop');
+ $w->ButtonRelease1($Ev);
+}
+
+
+sub Control_B1_Motion
+{
+}
+
+
+sub B1_Enter
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat
+ if($w->cget('-selectmode') ne 'dragdrop');
+}
+
+
+sub Prior
+{
+shift->yview('scroll', -1, 'pages')
+}
+
+
+sub Next
+{
+shift->yview('scroll', 1, 'pages')
+}
+
+
+sub Button1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ $w->focus()
+ if($w->cget('-takefocus'));
+
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'dragdrop')
+ {
+ # $w->Send_WaitDrag($Ev->y);
+ return;
+ }
+
+ my $ent = $w->GetNearest($Ev->x, $Ev->y);
+
+ return unless defined $ent;
+
+ my $browse = 0;
+
+ if($mode eq 'single')
+ {
+ $w->anchor('set', $ent);
+ }
+ elsif($mode eq 'browse')
+ {
+ $w->anchor('set', $ent);
+ $w->selection('clear' );
+ $w->selection('set', $ent);
+ $browse = 1;
+ }
+ elsif($mode eq 'multiple')
+ {
+ $w->selection('clear');
+ $w->anchor('set', $ent);
+ $w->selection('set', $ent);
+ $browse = 1;
+ }
+ elsif($mode eq 'extended')
+ {
+ $w->anchor('set', $ent);
+ $w->selection('clear');
+ $w->selection('set', $ent);
+ $browse = 1;
+ }
+
+ $w->Callback(-browsecmd => $ent) if ($browse);
+}
+
+sub ShiftButton1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ my $to = $w->GetNearest($Ev->x,$Ev->y);
+
+ delete $w->{'shiftanchor'};
+
+ return unless defined $to;
+
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'extended')
+ {
+ my $from = $w->info('anchor');
+ if (defined $from)
+ {
+ $w->selection('clear');
+ $w->selection('set', $from, $to);
+ }
+ else
+ {
+ $w->anchor('set', $to);
+ $w->selection('clear');
+ $w->selection('set', $to);
+ }
+ }
+}
+
+sub GetNearest
+{
+ my ($w,$x,$y) = @_;
+ my $ent = $w->nearest($x,$y);
+ if (defined $ent)
+ {
+ my $state = $w->entrycget($ent, '-state');
+ return $ent if (!defined($state) || $state ne 'disabled');
+ }
+ return undef;
+}
+
+sub ButtonRelease1
+{
+ my ($w, $Ev) = @_;
+
+ delete $w->{'shiftanchor'};
+
+ my $mode = $w->cget('-selectmode');
+
+ if($mode eq 'dragdrop')
+ {
+# $w->Send_DoneDrag();
+ return;
+ }
+
+ my ($x, $y) = ($Ev->x, $Ev->y);
+ my $ent = $w->GetNearest($x,$y);
+
+ return unless defined $ent;
+
+ if($x < 0 || $y < 0 || $x > $w->width || $y > $w->height)
+ {
+ $w->selection('clear');
+
+ return if($mode eq 'single' || $mode eq 'browse')
+
+ }
+ else
+ {
+ if($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->anchor('set', $ent);
+ $w->selection('clear');
+ $w->selection('set', $ent);
+
+ }
+ elsif($mode eq 'multiple')
+ {
+ $w->selection('set', $ent);
+ }
+ elsif($mode eq 'extended')
+ {
+ $w->selection('set', $ent);
+ }
+ }
+
+ $w->Callback(-browsecmd =>$ent);
+}
+
+sub Button1Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'dragdrop')
+ {
+# $w->Send_StartDrag();
+ return;
+ }
+
+ my $ent = $w->GetNearest($Ev->x,$Ev->y);
+
+ return unless defined $ent;
+
+ if($mode eq 'single')
+ {
+ $w->anchor('set', $ent);
+ }
+ elsif($mode eq 'multiple' || $mode eq 'extended')
+ {
+ my $from = $w->info('anchor');
+ if (defined $from)
+ {
+ $w->selection('clear');
+ $w->selection('set', $from, $ent);
+ }
+ else
+ {
+ $w->anchor('set', $ent);
+ $w->selection('clear');
+ $w->selection('set', $ent);
+ }
+ }
+
+ if($mode ne 'single')
+ {
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub Double1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ my $ent = $w->GetNearest($Ev->x,$Ev->y);
+
+ return unless defined $ent;
+
+ $w->anchor('set', $ent) unless defined($w->info('anchor'));
+
+ $w->selection('set', $ent);
+ $w->Callback(-command => $ent);
+}
+
+sub CtrlButton1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+
+ delete $w->{'shiftanchor'};
+
+ my $ent = $w->GetNearest($Ev->x,$Ev->y);
+
+ return unless defined $ent;
+
+ my $mode = $w->cget('-selectmode');
+
+ if($mode eq 'extended')
+ {
+ $w->anchor('set', $ent) unless defined( $w->info('anchor') );
+
+ if($w->selection('includes', $ent))
+ {
+ $w->selection('clear', $ent);
+ }
+ else
+ {
+ $w->selection('set', $ent);
+ }
+ $w->Callback(-browsecmd =>$ent);
+ }
+}
+
+sub DirKey
+{
+ my ($w,$dir) = @_;
+ my $anchor = $w->info('anchor');
+
+ my $new = (defined $anchor) ? $w->info($dir,$anchor) : 0;
+
+ $w->anchorSet($new);
+ $w->see($new);
+}
+
+sub KeyboardActivate
+{
+ my $w = shift;
+
+ my $anchor = $w->info('anchor');
+
+ return unless defined $anchor;
+
+ if($w->cget('-selectmode'))
+ {
+ $w->selection('clear');
+ $w->selection('set', $anchor);
+ }
+ $w->Callback(-command => $anchor);
+}
+
+sub KeyboardBrowse
+{
+ my $w = shift;
+
+ my $anchor = $w->info('anchor');
+
+ return unless defined $anchor;
+
+ if($w->cget('-selectmode'))
+ {
+ $w->selection('clear');
+ $w->selection('set', $anchor);
+ }
+ $w->Callback(-browsecmd =>$anchor);
+}
+
+sub AutoScan
+{
+ my $w = shift;
+
+ return if($w->cget('-selectmode') eq 'dragdrop');
+
+ my $Ev = $w->XEvent;
+ my $y = $Ev->y;
+ my $x = $Ev->x;
+
+ if($y >= $w->height)
+ {
+ $w->yview('scroll', 1, 'units');
+ }
+ elsif($y < 0)
+ {
+ $w->yview('scroll', -1, 'units');
+ }
+ elsif($x >= $w->width)
+ {
+ $w->xview('scroll', 2, 'units');
+ }
+ elsif($x < 0)
+ {
+ $w->xview('scroll', -2, 'units');
+ }
+ else
+ {
+ return;
+ }
+ $w->RepeatId($w->after(50,[AutoScan => $w]));
+ $w->Button1Motion;
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Table.pm b/Master/tlpkg/tlperl/lib/Tk/Table.pm
new file mode 100644
index 00000000000..8fa9e5af4a9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Table.pm
@@ -0,0 +1,598 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Table;
+use strict;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #12 $ =~ /\D(\d+)\s*$/;
+
+use Tk::Pretty;
+use AutoLoader;
+use base qw(Tk::Frame);
+
+Construct Tk::Widget 'Table';
+
+# Constants for QueueLayout flags
+sub _SlaveSize () { 1 } # Slave has asked for change of width or height
+sub _SlaveChange () { 2 } # We lost or gained a slave
+sub _ViewChange () { 4 } # xview or yview called
+sub _ConfigEvent () { 8 } # Table has changed size
+sub _ScrollBars () { 32 } # Scrollabrs came or went
+sub _RowColCount () { 16 } # rows or columns configured
+
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Configure>',['QueueLayout',_ConfigEvent]);
+ $mw->bind($class,'<FocusIn>', 'NoOp');
+ $mw->XYscrollBind($class);
+ return $class;
+}
+
+sub _view
+{
+ my ($t,$s,$page,$a,$op,$num,$type) = @_;
+ if ($op eq 'moveto')
+ {
+ $$s = int(@$a*$num);
+ }
+ else
+ {
+ $num *= ($page/2) if ($type eq 'pages');
+ $$s += $num;
+ }
+ $$s = 0 if ($$s < 0);
+ $t->QueueLayout(_ViewChange);
+}
+
+sub xview
+{
+ my $t = shift;
+ $t->_view(\$t->{Left},$t->cget('-columns'),$t->{Width},@_);
+}
+
+sub yview
+{
+ my $t = shift;
+ $t->_view(\$t->{Top},$t->cget('-rows'),$t->{Height},@_);
+}
+
+sub FocusChildren
+{
+ my $t = shift;
+ return () if ($t->cget('-takefocus'));
+ return $t->SUPER::FocusChildren;
+}
+
+sub Populate
+{
+ my ($t,$args) = @_;
+ $t->SUPER::Populate($args);
+ $t->ConfigSpecs('-scrollbars' => [METHOD => 'scrollbars','Scrollbars','nw'],
+ '-takefocus' => [SELF => 'takeFocus','TakeFocus',1],
+ '-rows' => [METHOD => 'rows','Rows',10],
+ '-fixedrows' => [METHOD => 'fixedRows','FixedRows',0],
+ '-columns' => [METHOD => 'columns','Columns',10],
+ '-fixedcolumns' => [METHOD => 'fixedColumn','FixedColumns',0],
+ '-highlightthickness' => [SELF => 'highlightThickness','HighlightThickness',2]
+ );
+ $t->_init;
+}
+
+sub sizeN
+{
+ my ($n,$a) = @_;
+ my $max = 0;
+ my $i = 0;
+ my $sum = 0;
+ while ($i < @$a && $i < $n)
+ {
+ my $n = $a->[$i++];
+ $a->[$i-1] = $n = 0 unless (defined $n);
+ $sum += $n;
+ }
+ $max = $sum if ($sum > $max);
+ while ($i < @$a)
+ {
+ $sum = $sum-$a->[$i-$n]+$a->[$i];
+ $max = $sum if ($sum > $max);
+ $i++;
+ }
+ return $max;
+}
+
+sub total
+{
+ my ($a) = @_;
+ my $total = 0;
+ my $x;
+ foreach $x (@{$a})
+ {
+ $total += $x;
+ }
+ return $total;
+}
+
+sub constrain
+{
+ my ($sb,$a,$pixels,$fixed) = @_;
+ my $n = $$sb+$fixed;
+ my $total = 0;
+ my $i;
+ $n = @$a if ($n > @$a);
+ $n = $fixed if ($n < $fixed);
+ for ($i= 0; $i < $fixed; $i++)
+ {
+ (defined($a->[$i])) && ($total += $a->[$i]);
+ }
+ for ($i=$n; $total < $pixels && $i < @$a; $i++)
+ {
+ $a->[$i] ||= 0;
+ $total += $a->[$i];
+ }
+ while ($n > $fixed)
+ {
+ if (($total += $a->[--$n]) > $pixels)
+ {
+ $n++;
+ last;
+ }
+ }
+ $$sb = $n-$fixed;
+}
+
+sub Layout
+{
+ my ($t) = @_;
+ return unless Tk::Exists($t);
+ my $rows = @{$t->{Row}};
+ my $bw = $t->cget(-highlightthickness);
+ my $frows = $t->cget(-fixedrows);
+ my $fcols = $t->cget(-fixedcolumns);
+ my $sb = $t->cget(-scrollbars);
+ my $H = $t->Height;
+ my $W = $t->Width;
+ my $tadj = $bw;
+ my $badj = $bw;
+ my $ladj = $bw;
+ my $radj = $bw;
+ my @xs = ($W,0,0,0);
+ my @ys = (0,$H,0,0);
+ my $xsb;
+ my $ysb;
+
+ my $why = $t->{LayoutPending};
+ $t->{LayoutPending} = 0;
+
+ if ($sb =~ /[ns]/)
+ {
+ $t->{xsb} = $t->Scrollbar(-orient => 'horizontal', -command => ['xview' => $t]) unless (defined $t->{xsb});
+ $xsb = $t->{xsb};
+ $xs[3] = $xsb->ReqHeight;
+ if ($sb =~ /n/)
+ {
+ $xs[1] = $tadj;
+ $tadj += $xs[3];
+ }
+ else
+ {
+ $badj += $xs[3];
+ $xs[1] = $H-$badj;
+ }
+ }
+ else
+ {
+ $t->{xsb}->UnmapWindow if (defined $t->{xsb});
+ }
+
+ if ($sb =~ /[ew]/)
+ {
+ $t->{ysb} = $t->Scrollbar(-orient => 'vertical', -command => ['yview' => $t]) unless (defined $t->{ysb});
+ $ysb = $t->{ysb};
+ $ys[2] = $ysb->ReqWidth;
+ if ($sb =~ /w/)
+ {
+ $ys[0] = $ladj;
+ $ladj += $ys[2];
+ }
+ else
+ {
+ $radj += $ys[2];
+ $ys[0] = $W-$radj;
+ }
+ }
+ else
+ {
+ $t->{ysb}->UnmapWindow if (defined $t->{ysb});
+ }
+
+ constrain(\$t->{Top}, $t->{Height},$H-($tadj+$badj),$frows);
+ constrain(\$t->{Left},$t->{Width}, $W-($ladj+$radj),$fcols);
+
+ my $top = $t->{Top}+$frows;
+ my $left = $t->{Left}+$fcols;
+
+ if ($why & (_ScrollBars|_RowColCount|_SlaveSize))
+ {
+ # Width and/or Height of element or
+ # number of rows and/or columns or
+ # scrollbar presence has changed
+ my $w = sizeN($t->cget('-columns'),$t->{Width})+$radj+$ladj;
+ my $h = sizeN($t->cget('-rows'),$t->{Height})+$tadj+$badj;
+ $t->GeometryRequest($w,$h);
+ }
+
+ if ($rows)
+ {
+ my $cols = @{$t->{Width}};
+ my $yhwm = $top-$frows;
+ my $xhwm = $left-$fcols;
+ my $y = $tadj;
+ my $r;
+ for ($r = 0; $r < $rows; $r++)
+ {
+ my $h = $t->{Height}[$r];
+ next unless defined $h;
+ if (($r < $top && $r >= $frows) || ($y+$h > $H-$badj))
+ {
+ if (defined $t->{Row}[$r])
+ {
+ my $c;
+ for ($c = 0; $c < @{$t->{Row}[$r]}; $c++)
+ {
+ my $s = $t->{Row}[$r][$c];
+ if (defined $s)
+ {
+ $s->UnmapWindow;
+ if ($why & 1)
+ {
+ my $w = $t->{Width}[$c];
+ $s->ResizeWindow($w,$h);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ my $hwm = $left-$fcols;
+ my $sh = 0;
+ my $x = $ladj;
+ my $c;
+ $ys[1] = $y if ($y < $ys[1] && $r >= $frows);
+ for ($c = 0; $c <$cols; $c++)
+ {
+ my $s = $t->{Row}[$r][$c];
+ my $w = $t->{Width}[$c];
+ if (($c < $left && $c >= $fcols) || ($x+$w > $W-$radj) )
+ {
+ if (defined $s)
+ {
+ $s->UnmapWindow;
+ $s->ResizeWindow($w,$h) if ($why & 1);
+ }
+ }
+ else
+ {
+ $xs[0] = $x if ($x < $xs[0] && $c >= $fcols);
+ if (defined $s)
+ {
+ if ($why & 1)
+ {
+ $s->MoveResizeWindow($x,$y,$w,$h);
+ }
+ else
+ {
+ $s->MoveWindow($x,$y);
+ }
+ $s->MapWindow;
+ }
+ $x += $w;
+ if ($c >= $fcols)
+ {
+ $hwm++;
+ $sh += $w
+ }
+ }
+ }
+ $xhwm = $hwm if ($hwm > $xhwm);
+ $xs[2] = $sh if ($sh > $xs[2]);
+ $y += $h;
+ if ($r >= $frows)
+ {
+ $ys[3] += $h;
+ $yhwm++;
+ }
+ }
+ }
+ $t->{Bottom} = $yhwm;
+ $t->{Right} = $xhwm;
+ if (defined $xsb && $xs[2] > 0)
+ {
+ $xsb->MoveResizeWindow(@xs);
+ $cols -= $fcols;
+ if ($cols > 0)
+ {
+ $xsb->set($t->{Left}/$cols,$t->{Right}/$cols);
+ $xsb->MapWindow;
+ }
+ }
+ if (defined $ysb && $ys[3] > 0)
+ {
+ $ysb->MoveResizeWindow(@ys);
+ $rows -= $frows;
+ if ($rows > 0)
+ {
+ $ysb->set($t->{Top}/$rows,$t->{Bottom}/$rows);
+ $ysb->MapWindow;
+ }
+ }
+ }
+}
+
+sub QueueLayout
+{
+ my ($m,$why) = @_;
+ $m->afterIdle(['Layout',$m]) unless ($m->{LayoutPending});
+ $m->{LayoutPending} |= $why;
+}
+
+sub SlaveGeometryRequest
+{
+ my ($m,$s) = @_;
+ my ($row,$col) = @{$m->{Slave}{$s->PathName}};
+ my $sw = $s->ReqWidth;
+ my $sh = $s->ReqHeight;
+ my $sz = 0;
+ if ($sw > $m->{Width}[$col])
+ {
+ $m->{Width}[$col] = $sw;
+ $m->QueueLayout(_SlaveSize);
+ $sz++;
+ }
+ if ( (not defined ($m->{Height}[$row])) or $sh > $m->{Height}[$row])
+ {
+ $m->{Height}[$row] = $sh;
+ $m->QueueLayout(_SlaveSize);
+ $sz++;
+ }
+ if (!$sz)
+ {
+ $s->ResizeWindow($m->{Width}[$col],$m->{Height}[$row]);
+ }
+}
+
+sub get
+{
+ my ($t,$row,$col) = @_;
+ return $t->{Row}[$row][$col];
+}
+
+sub LostSlave
+{
+ my ($t,$s) = @_;
+ my $info = delete $t->{Slave}{$s->PathName};
+ if (defined $info)
+ {
+ my ($row,$col) = @$info;
+ $t->{Row}[$row][$col] = undef;
+ $s->UnmapWindow;
+ }
+ else
+ {
+ $t->BackTrace('Cannot find' . $s->PathName);
+ }
+ $t->QueueLayout(_SlaveChange);
+}
+
+sub clear {
+ my $self = shift;
+ my $rows = $self->cget(-rows);
+ my $cols = $self->cget(-columns);
+ foreach my $r (1 .. $rows) {
+ foreach my $c (1 .. $cols) {
+ my $old = $self->get( $r, $c );
+ next unless $old;
+ $self->LostSlave($old);
+ $old->destroy;
+ }
+ }
+ $self->_init;
+ $self->QueueLayout(_SlaveSize);
+}
+
+sub _init {
+ my $self = shift;
+ $self->{'Width'} = [];
+ $self->{'Height'} = [];
+ $self->{'Row'} = [];
+ $self->{'Slave'} = {};
+ $self->{'Top'} = 0;
+ $self->{'Left'} = 0;
+ $self->{'Bottom'} = 0;
+ $self->{'Right'} = 0;
+ $self->{LayoutPending} = 0;
+}
+
+sub put
+{
+ my ($t,$row,$col,$w) = @_;
+ $w = $t->Label(-text => $w) unless (ref $w);
+ $t->ManageGeometry($w);
+ unless (defined $t->{Row}[$row])
+ {
+ $t->{Row}[$row] = [];
+ $t->{Height}[$row] = 0;
+ }
+ unless (defined $t->{Width}[$col])
+ {
+ $t->{Width}[$col] = 0;
+ }
+ my $old = $t->{Row}[$row][$col];
+ if (defined $old)
+ {
+ $old->UnmanageGeometry;
+ $t->LostSlave($old);
+ }
+ $t->{Row}[$row][$col] = $w;
+ $t->{Slave}{$w->PathName} = [$row,$col];
+ $t->SlaveGeometryRequest($w);
+ $t->QueueLayout(_SlaveChange);
+ return $old;
+}
+
+#
+# configure methods
+#
+
+sub scrollbars
+{
+ my ($t,$v) = @_;
+ if (@_ > 1)
+ {
+ $t->_configure(-scrollbars => $v);
+ $t->QueueLayout(_ScrollBars);
+ }
+ return $t->_cget('-scrollbars');
+}
+
+sub rows
+{
+ my ($t,$r) = @_;
+ if (@_ > 1)
+ {
+ $t->_configure(-rows => $r);
+ if ($t->{Row} && @{$t->{Row}} > $r)
+ {
+ for my $y ($r .. $#{$t->{Row}})
+ {
+ for my $s (@{$t->{Row}[$y]})
+ {
+ $s->destroy if $s;
+ }
+ }
+ splice @{ $t->{Row} }, $r;
+ }
+ $t->QueueLayout(_RowColCount);
+ }
+ return $t->_cget('-rows');
+}
+
+sub fixedrows
+{
+ my ($t,$r) = @_;
+ if (@_ > 1)
+ {
+ $t->_configure(-fixedrows => $r);
+ $t->QueueLayout(_RowColCount);
+ }
+ return $t->_cget('-fixedrows');
+}
+
+sub columns
+{
+ my ($t,$r) = @_;
+ if (@_ > 1)
+ {
+ $t->_configure(-columns => $r);
+ if ($t->{Row})
+ {
+ for my $row (@{$t->{Row}})
+ {
+ for my $s (@$row[$r .. $#$row])
+ {
+ $s->destroy if $s;
+ }
+ { # FIXME? - Steve was getting warnings :
+ # splice() offset past end of array
+ local $^W = 0;
+ splice @$row, $r;
+ }
+ }
+ }
+ $t->QueueLayout(_RowColCount);
+ }
+ return $t->_cget('-columns');
+}
+
+sub fixedcolumns
+{
+ my ($t,$r) = @_;
+ if (@_ > 1)
+ {
+ $t->_configure(-fixedcolumns => $r);
+ $t->QueueLayout(_RowColCount);
+ }
+ return $t->_cget('-fixedcolumns');
+}
+
+1;
+__END__
+sub Create
+{
+ my $t = shift;
+ my $r = shift;
+ my $c = shift;
+ my $kind = shift;
+ $t->put($r,$c,$t->$kind(@_));
+}
+
+sub totalColumns
+{
+ scalar @{shift->{'Width'}};
+}
+
+sub totalRows
+{
+ scalar @{shift->{'Height'}};
+}
+
+sub Posn
+{
+ my ($t,$s) = @_;
+ my $info = $t->{Slave}{$s->PathName};
+ return (wantarray) ? @$info : $info;
+}
+
+sub see
+{
+ my $t = shift;
+ my ($row,$col) = (@_ == 2) ? @_ : @{$t->{Slave}{$_[0]->PathName}};
+ my $see = 1;
+ if (($row -= $t->cget('-fixedrows')) >= 0)
+ {
+ if ($row < $t->{Top})
+ {
+ $t->{Top} = $row;
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ elsif ($row >= $t->{Bottom})
+ {
+ $t->{Top} += ($row - $t->{Bottom}+1);
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ }
+ if (($col -= $t->cget('-fixedcolumns')) >= 0)
+ {
+ if ($col < $t->{Left})
+ {
+ $t->{Left} = $col;
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ elsif ($col >= $t->{Right})
+ {
+ $t->{Left} += ($col - $t->{Right}+1);
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ }
+ return $see;
+}
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Text.pm b/Master/tlpkg/tlperl/lib/Tk/Text.pm
new file mode 100644
index 00000000000..fe0aa0bf4c1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Text.pm
@@ -0,0 +1,1653 @@
+# text.tcl --
+#
+# This file defines the default bindings for Tk text widgets.
+#
+# @(#) text.tcl 1.18 94/12/17 16:05:26
+#
+# Copyright (c) 1992-1994 The Regents of the University of California.
+# Copyright (c) 1994 Sun Microsystems, Inc.
+# perl/Tk version:
+# Copyright (c) 1995-2004 Nick Ing-Simmons
+# Copyright (c) 1999 Greg London
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+package Tk::Text;
+use AutoLoader;
+use Carp;
+use strict;
+
+use Text::Tabs;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #24 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev $XS_VERSION);
+use base qw(Tk::Clipboard Tk::Widget);
+
+Construct Tk::Widget 'Text';
+
+bootstrap Tk::Text;
+
+sub Tk_cmd { \&Tk::text }
+
+sub Tk::Widget::ScrlText { shift->Scrolled('Text' => @_) }
+
+Tk::Methods('bbox','compare','debug','delete','dlineinfo','dump','edit',
+ 'get','image','index','insert','mark','scan','search',
+ 'see','tag','window','xview','yview');
+
+use Tk::Submethods ( 'mark' => [qw(gravity names next previous set unset)],
+ 'scan' => [qw(mark dragto)],
+ 'tag' => [qw(add bind cget configure delete lower
+ names nextrange prevrange raise ranges remove)],
+ 'window' => [qw(cget configure create names)],
+ 'image' => [qw(cget configure create names)],
+ 'xview' => [qw(moveto scroll)],
+ 'yview' => [qw(moveto scroll)],
+ 'edit' => [qw(modified redo reset separator undo)],
+ );
+
+sub Tag;
+sub Tags;
+
+sub bindRdOnly
+{
+
+ my ($class,$mw) = @_;
+
+ # Standard Motif bindings:
+ $mw->bind($class,'<Meta-B1-Motion>','NoOp');
+ $mw->bind($class,'<Meta-1>','NoOp');
+ $mw->bind($class,'<Alt-KeyPress>','NoOp');
+ $mw->bind($class,'<Escape>','unselectAll');
+
+ $mw->bind($class,'<1>',['Button1',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Motion>','B1_Motion' ) ;
+ $mw->bind($class,'<B1-Leave>','B1_Leave' ) ;
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<ButtonRelease-1>','CancelRepeat');
+ $mw->bind($class,'<Control-1>',['markSet','insert',Ev('@')]);
+
+ $mw->bind($class,'<Double-1>','selectWord' ) ;
+ $mw->bind($class,'<Triple-1>','selectLine' ) ;
+ $mw->bind($class,'<Shift-1>','adjustSelect' ) ;
+ $mw->bind($class,'<Double-Shift-1>',['SelectTo',Ev('@'),'word']);
+ $mw->bind($class,'<Triple-Shift-1>',['SelectTo',Ev('@'),'line']);
+
+ $mw->bind($class,'<Left>',['SetCursor',Ev('index','insert-1c')]);
+ $mw->bind($class,'<Shift-Left>',['KeySelect',Ev('index','insert-1c')]);
+ $mw->bind($class,'<Control-Left>',['SetCursor',Ev('index','insert-1c wordstart')]);
+ $mw->bind($class,'<Shift-Control-Left>',['KeySelect',Ev('index','insert-1c wordstart')]);
+
+ $mw->bind($class,'<Right>',['SetCursor',Ev('index','insert+1c')]);
+ $mw->bind($class,'<Shift-Right>',['KeySelect',Ev('index','insert+1c')]);
+ $mw->bind($class,'<Control-Right>',['SetCursor',Ev('index','insert+1c wordend')]);
+ $mw->bind($class,'<Shift-Control-Right>',['KeySelect',Ev('index','insert wordend')]);
+
+ $mw->bind($class,'<Up>',['SetCursor',Ev('UpDownLine',-1)]);
+ $mw->bind($class,'<Shift-Up>',['KeySelect',Ev('UpDownLine',-1)]);
+ $mw->bind($class,'<Control-Up>',['SetCursor',Ev('PrevPara','insert')]);
+ $mw->bind($class,'<Shift-Control-Up>',['KeySelect',Ev('PrevPara','insert')]);
+
+ $mw->bind($class,'<Down>',['SetCursor',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Shift-Down>',['KeySelect',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Control-Down>',['SetCursor',Ev('NextPara','insert')]);
+ $mw->bind($class,'<Shift-Control-Down>',['KeySelect',Ev('NextPara','insert')]);
+
+ $mw->bind($class,'<Home>',['SetCursor','insert linestart']);
+ $mw->bind($class,'<Shift-Home>',['KeySelect','insert linestart']);
+ $mw->bind($class,'<Control-Home>',['SetCursor','1.0']);
+ $mw->bind($class,'<Control-Shift-Home>',['KeySelect','1.0']);
+
+ $mw->bind($class,'<End>',['SetCursor','insert lineend']);
+ $mw->bind($class,'<Shift-End>',['KeySelect','insert lineend']);
+ $mw->bind($class,'<Control-End>',['SetCursor','end-1char']);
+ $mw->bind($class,'<Control-Shift-End>',['KeySelect','end-1char']);
+
+ $mw->bind($class,'<Prior>',['SetCursor',Ev('ScrollPages',-1)]);
+ $mw->bind($class,'<Shift-Prior>',['KeySelect',Ev('ScrollPages',-1)]);
+ $mw->bind($class,'<Control-Prior>',['xview','scroll',-1,'page']);
+
+ $mw->bind($class,'<Next>',['SetCursor',Ev('ScrollPages',1)]);
+ $mw->bind($class,'<Shift-Next>',['KeySelect',Ev('ScrollPages',1)]);
+ $mw->bind($class,'<Control-Next>',['xview','scroll',1,'page']);
+
+ $mw->bind($class,'<Shift-Tab>', 'NoOp'); # Needed only to keep <Tab> binding from triggering; does not have to actually do anything.
+ $mw->bind($class,'<Control-Tab>','focusNext');
+ $mw->bind($class,'<Control-Shift-Tab>','focusPrev');
+
+ $mw->bind($class,'<Control-space>',['markSet','anchor','insert']);
+ $mw->bind($class,'<Select>',['markSet','anchor','insert']);
+ $mw->bind($class,'<Control-Shift-space>',['SelectTo','insert','char']);
+ $mw->bind($class,'<Shift-Select>',['SelectTo','insert','char']);
+ $mw->bind($class,'<Control-slash>','selectAll');
+ $mw->bind($class,'<Control-backslash>','unselectAll');
+
+ if (!$Tk::strictMotif)
+ {
+ $mw->bind($class,'<Control-a>', ['SetCursor','insert linestart']);
+ $mw->bind($class,'<Control-b>', ['SetCursor','insert-1c']);
+ $mw->bind($class,'<Control-e>', ['SetCursor','insert lineend']);
+ $mw->bind($class,'<Control-f>', ['SetCursor','insert+1c']);
+ $mw->bind($class,'<Meta-b>', ['SetCursor','insert-1c wordstart']);
+ $mw->bind($class,'<Meta-f>', ['SetCursor','insert wordend']);
+ $mw->bind($class,'<Meta-less>', ['SetCursor','1.0']);
+ $mw->bind($class,'<Meta-greater>', ['SetCursor','end-1c']);
+
+ $mw->bind($class,'<Control-n>', ['SetCursor',Ev('UpDownLine',1)]);
+ $mw->bind($class,'<Control-p>', ['SetCursor',Ev('UpDownLine',-1)]);
+
+ $mw->bind($class,'<2>',['Button2',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['Motion2',Ev('x'),Ev('y')]);
+ }
+ $mw->bind($class,'<Destroy>','Destroy');
+ $mw->bind($class, '<3>', ['PostPopupMenu', Ev('X'), Ev('Y')] );
+ $mw->YMouseWheelBind($class);
+ $mw->XMouseWheelBind($class);
+
+ $mw->MouseWheelBind($class);
+
+ return $class;
+}
+
+sub selectAll
+{
+ my ($w) = @_;
+ $w->tagAdd('sel','1.0','end');
+}
+
+sub unselectAll
+{
+ my ($w) = @_;
+ $w->tagRemove('sel','1.0','end');
+}
+
+sub adjustSelect
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->ResetAnchor($Ev->xy);
+ $w->SelectTo($Ev->xy,'char')
+}
+
+sub selectLine
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->SelectTo($Ev->xy,'line');
+ Tk::catch { $w->markSet('insert','sel.first') };
+}
+
+sub selectWord
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $w->SelectTo($Ev->xy,'word');
+ Tk::catch { $w->markSet('insert','sel.first') }
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $class->SUPER::ClassInit($mw);
+
+ $class->bindRdOnly($mw);
+
+ $mw->bind($class,'<Tab>', 'insertTab');
+ $mw->bind($class,'<Control-i>', ['Insert',"\t"]);
+ $mw->bind($class,'<Return>', ['Insert',"\n"]);
+ $mw->bind($class,'<Delete>','Delete');
+ $mw->bind($class,'<BackSpace>','Backspace');
+ $mw->bind($class,'<Insert>', \&ToggleInsertMode ) ;
+ $mw->bind($class,'<KeyPress>',['InsertKeypress',Ev('A')]);
+
+ $mw->bind($class,'<F1>', 'clipboardColumnCopy');
+ $mw->bind($class,'<F2>', 'clipboardColumnCut');
+ $mw->bind($class,'<F3>', 'clipboardColumnPaste');
+
+ # Additional emacs-like bindings:
+
+ if (!$Tk::strictMotif)
+ {
+ $mw->bind($class,'<Control-d>',['delete','insert']);
+ $mw->bind($class,'<Control-k>','deleteToEndofLine') ;
+ $mw->bind($class,'<Control-o>','openLine');
+ $mw->bind($class,'<Control-t>','Transpose');
+ $mw->bind($class,'<Meta-d>',['delete','insert','insert wordend']);
+ $mw->bind($class,'<Meta-BackSpace>',['delete','insert-1c wordstart','insert']);
+
+ # A few additional bindings of my own.
+ $mw->bind($class,'<Control-h>','deleteBefore');
+ $mw->bind($class,'<ButtonRelease-2>','ButtonRelease2');
+ }
+#JD# $Tk::prevPos = undef;
+ return $class;
+}
+
+sub insertTab
+{
+ my ($w) = @_;
+ $w->Insert("\t");
+ $w->focus;
+ $w->break
+}
+
+sub deleteToEndofLine
+{
+ my ($w) = @_;
+ if ($w->compare('insert','==','insert lineend'))
+ {
+ $w->delete('insert')
+ }
+ else
+ {
+ $w->delete('insert','insert lineend')
+ }
+}
+
+sub openLine
+{
+ my ($w) = @_;
+ $w->insert('insert',"\n");
+ $w->markSet('insert','insert-1c')
+}
+
+sub Button2
+{
+ my ($w,$x,$y) = @_;
+ $w->scan('mark',$x,$y);
+ $Tk::x = $x;
+ $Tk::y = $y;
+ $Tk::mouseMoved = 0;
+}
+
+sub Motion2
+{
+ my ($w,$x,$y) = @_;
+ $Tk::mouseMoved = 1 if ($x != $Tk::x || $y != $Tk::y);
+ $w->scan('dragto',$x,$y) if ($Tk::mouseMoved);
+}
+
+sub ButtonRelease2
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ if (!$Tk::mouseMoved)
+ {
+ Tk::catch { $w->insert($Ev->xy,$w->SelectionGet) }
+ }
+}
+
+sub InsertSelection
+{
+ my ($w) = @_;
+ Tk::catch { $w->Insert($w->SelectionGet) }
+}
+
+sub Backspace
+{
+ my ($w) = @_;
+ my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') };
+ if (defined $sel)
+ {
+ $w->delete('sel.first','sel.last');
+ return;
+ }
+ $w->deleteBefore;
+}
+
+sub deleteBefore
+{
+ my ($w) = @_;
+ if ($w->compare('insert','!=','1.0'))
+ {
+ $w->delete('insert-1c');
+ $w->see('insert')
+ }
+}
+
+sub Delete
+{
+ my ($w) = @_;
+ my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') };
+ if (defined $sel)
+ {
+ $w->delete('sel.first','sel.last')
+ }
+ else
+ {
+ $w->delete('insert');
+ $w->see('insert')
+ }
+}
+
+# Button1 --
+# This procedure is invoked to handle button-1 presses in text
+# widgets. It moves the insertion cursor, sets the selection anchor,
+# and claims the input focus.
+#
+# Arguments:
+# w - The text window in which the button was pressed.
+# x - The x-coordinate of the button press.
+# y - The x-coordinate of the button press.
+sub Button1
+{
+ my ($w,$x,$y) = @_;
+ $Tk::selectMode = 'char';
+ $Tk::mouseMoved = 0;
+ $w->SetCursor('@'.$x.','.$y);
+ $w->markSet('anchor','insert');
+ $w->focus() if ($w->cget('-state') eq 'normal');
+}
+
+sub B1_Motion
+{
+ my ($w) = @_;
+ return unless defined $Tk::mouseMoved;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $w->SelectTo($Ev->xy)
+}
+
+sub B1_Leave
+{
+ my ($w) = @_;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $w->AutoScan;
+}
+
+# SelectTo --
+# This procedure is invoked to extend the selection, typically when
+# dragging it with the mouse. Depending on the selection mode (character,
+# word, line) it selects in different-sized units. This procedure
+# ignores mouse motions initially until the mouse has moved from
+# one character to another or until there have been multiple clicks.
+#
+# Arguments:
+# w - The text window in which the button was pressed.
+# index - Index of character at which the mouse button was pressed.
+sub SelectTo
+{
+ my ($w, $index, $mode)= @_;
+ $Tk::selectMode = $mode if defined ($mode);
+ my $cur = $w->index($index);
+ my $anchor = Tk::catch { $w->index('anchor') };
+ if (!defined $anchor)
+ {
+ $w->markSet('anchor',$anchor = $cur);
+ $Tk::mouseMoved = 0;
+ }
+ elsif ($w->compare($cur,'!=',$anchor))
+ {
+ $Tk::mouseMoved = 1;
+ }
+ $Tk::selectMode = 'char' unless (defined $Tk::selectMode);
+ $mode = $Tk::selectMode;
+ my ($first,$last);
+ if ($mode eq 'char')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $cur;
+ $last = 'anchor';
+ }
+ else
+ {
+ $first = 'anchor';
+ $last = $cur
+ }
+ }
+ elsif ($mode eq 'word')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $w->index("$cur wordstart");
+ $last = $w->index('anchor - 1c wordend')
+ }
+ else
+ {
+ $first = $w->index('anchor wordstart');
+ $last = $w->index("$cur wordend")
+ }
+ }
+ elsif ($mode eq 'line')
+ {
+ if ($w->compare($cur,'<','anchor'))
+ {
+ $first = $w->index("$cur linestart");
+ $last = $w->index('anchor - 1c lineend + 1c')
+ }
+ else
+ {
+ $first = $w->index('anchor linestart');
+ $last = $w->index("$cur lineend + 1c")
+ }
+ }
+ if ($Tk::mouseMoved || $Tk::selectMode ne 'char')
+ {
+ $w->tagRemove('sel','1.0',$first);
+ $w->tagAdd('sel',$first,$last);
+ $w->tagRemove('sel',$last,'end');
+ $w->idletasks;
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves a text window
+# with button 1 down. It scrolls the window up, down, left, or right,
+# depending on where the mouse is (this information was saved in
+# tkPriv(x) and tkPriv(y)), and reschedules itself as an 'after'
+# command so that the window continues to scroll until the mouse
+# moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The text window.
+sub AutoScan
+{
+ my ($w) = @_;
+ if ($Tk::y >= $w->height)
+ {
+ $w->yview('scroll',2,'units')
+ }
+ elsif ($Tk::y < 0)
+ {
+ $w->yview('scroll',-2,'units')
+ }
+ elsif ($Tk::x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($Tk::x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->SelectTo('@' . $Tk::x . ','. $Tk::y);
+ $w->RepeatId($w->after(50,['AutoScan',$w]));
+}
+# SetCursor
+# Move the insertion cursor to a given position in a text. Also
+# clears the selection, if there is one in the text, and makes sure
+# that the insertion cursor is visible.
+#
+# Arguments:
+# w - The text window.
+# pos - The desired new position for the cursor in the window.
+sub SetCursor
+{
+ my ($w,$pos) = @_;
+ $pos = 'end - 1 chars' if $w->compare($pos,'==','end');
+ $w->markSet('insert',$pos);
+ $w->unselectAll;
+ $w->see('insert');
+}
+# KeySelect
+# This procedure is invoked when stroking out selections using the
+# keyboard. It moves the cursor to a new position, then extends
+# the selection to that position.
+#
+# Arguments:
+# w - The text window.
+# new - A new position for the insertion cursor (the cursor has not
+# actually been moved to this position yet).
+sub KeySelect
+{
+ my ($w,$new) = @_;
+ my ($first,$last);
+ if (!defined $w->tag('ranges','sel'))
+ {
+ # No selection yet
+ $w->markSet('anchor','insert');
+ if ($w->compare($new,'<','insert'))
+ {
+ $w->tagAdd('sel',$new,'insert')
+ }
+ else
+ {
+ $w->tagAdd('sel','insert',$new)
+ }
+ }
+ else
+ {
+ # Selection exists
+ if ($w->compare($new,'<','anchor'))
+ {
+ $first = $new;
+ $last = 'anchor'
+ }
+ else
+ {
+ $first = 'anchor';
+ $last = $new
+ }
+ $w->tagRemove('sel','1.0',$first);
+ $w->tagAdd('sel',$first,$last);
+ $w->tagRemove('sel',$last,'end')
+ }
+ $w->markSet('insert',$new);
+ $w->see('insert');
+ $w->idletasks;
+}
+# ResetAnchor --
+# Set the selection anchor to whichever end is farthest from the
+# index argument. One special trick: if the selection has two or
+# fewer characters, just leave the anchor where it is. In this
+# case it does not matter which point gets chosen for the anchor,
+# and for the things like Shift-Left and Shift-Right this produces
+# better behavior when the cursor moves back and forth across the
+# anchor.
+#
+# Arguments:
+# w - The text widget.
+# index - Position at which mouse button was pressed, which determines
+# which end of selection should be used as anchor point.
+sub ResetAnchor
+{
+ my ($w,$index) = @_;
+ if (!defined $w->tag('ranges','sel'))
+ {
+ $w->markSet('anchor',$index);
+ return;
+ }
+ my $a = $w->index($index);
+ my $b = $w->index('sel.first');
+ my $c = $w->index('sel.last');
+ if ($w->compare($a,'<',$b))
+ {
+ $w->markSet('anchor','sel.last');
+ return;
+ }
+ if ($w->compare($a,'>',$c))
+ {
+ $w->markSet('anchor','sel.first');
+ return;
+ }
+ my ($lineA,$chA) = split(/\./,$a);
+ my ($lineB,$chB) = split(/\./,$b);
+ my ($lineC,$chC) = split(/\./,$c);
+ if ($lineB < $lineC+2)
+ {
+ my $total = length($w->get($b,$c));
+ if ($total <= 2)
+ {
+ return;
+ }
+ if (length($w->get($b,$a)) < $total/2)
+ {
+ $w->markSet('anchor','sel.last')
+ }
+ else
+ {
+ $w->markSet('anchor','sel.first')
+ }
+ return;
+ }
+ if ($lineA-$lineB < $lineC-$lineA)
+ {
+ $w->markSet('anchor','sel.last')
+ }
+ else
+ {
+ $w->markSet('anchor','sel.first')
+ }
+}
+
+########################################################################
+sub markExists
+{
+ my ($w, $markname)=@_;
+ my $mark_exists=0;
+ my @markNames_list = $w->markNames;
+ foreach my $mark (@markNames_list)
+ { if ($markname eq $mark) {$mark_exists=1;last;} }
+ return $mark_exists;
+}
+
+########################################################################
+sub OverstrikeMode
+{
+ my ($w,$mode) = @_;
+
+ $w->{'OVERSTRIKE_MODE'} =0 unless exists($w->{'OVERSTRIKE_MODE'});
+
+ $w->{'OVERSTRIKE_MODE'}=$mode if (@_ > 1);
+
+ return $w->{'OVERSTRIKE_MODE'};
+}
+
+########################################################################
+# pressed the <Insert> key, just above 'Del' key.
+# this toggles between insert mode and overstrike mode.
+sub ToggleInsertMode
+{
+ my ($w)=@_;
+ $w->OverstrikeMode(!$w->OverstrikeMode);
+}
+
+########################################################################
+sub InsertKeypress
+{
+ my ($w,$char)=@_;
+ return unless length($char);
+ if ($w->OverstrikeMode)
+ {
+ my $current=$w->get('insert');
+ $w->delete('insert') unless($current eq "\n");
+ }
+ $w->Insert($char);
+}
+
+########################################################################
+sub GotoLineNumber
+{
+ my ($w,$line_number) = @_;
+ $line_number=~ s/^\s+|\s+$//g;
+ return if $line_number =~ m/\D/;
+ my ($last_line,$junk) = split(/\./, $w->index('end'));
+ if ($line_number > $last_line) {$line_number = $last_line; }
+ $w->{'LAST_GOTO_LINE'} = $line_number;
+ $w->markSet('insert', $line_number.'.0');
+ $w->see('insert');
+}
+
+########################################################################
+sub GotoLineNumberPopUp
+{
+ my ($w)=@_;
+ my $popup = $w->{'GOTO_LINE_NUMBER_POPUP'};
+
+ unless (defined($w->{'LAST_GOTO_LINE'}))
+ {
+ my ($line,$col) = split(/\./, $w->index('insert'));
+ $w->{'LAST_GOTO_LINE'} = $line;
+ }
+
+ ## if anything is selected when bring up the pop-up, put it in entry window.
+ my $selected;
+ eval { $selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ unless ($@)
+ {
+ if (defined($selected) and length($selected))
+ {
+ unless ($selected =~ /\D/)
+ {
+ $w->{'LAST_GOTO_LINE'} = $selected;
+ }
+ }
+ }
+ unless (defined($popup))
+ {
+ require Tk::DialogBox;
+ $popup = $w->DialogBox(-buttons => [qw[Ok Cancel]],-title => "Goto Line Number", -popover => $w,
+ -command => sub { $w->GotoLineNumber($w->{'LAST_GOTO_LINE'}) if $_[0] eq 'Ok'});
+ $w->{'GOTO_LINE_NUMBER_POPUP'}=$popup;
+ $popup->resizable('no','no');
+ my $frame = $popup->Frame->pack(-fill => 'x');
+ $frame->Label(-text=>'Enter line number: ')->pack(-side => 'left');
+ my $entry = $frame->Entry(-background=>'white', -width=>25,
+ -textvariable => \$w->{'LAST_GOTO_LINE'})->pack(-side =>'left',-fill => 'x');
+ $popup->Advertise(entry => $entry);
+ }
+ $popup->Popup;
+ $popup->Subwidget('entry')->focus;
+ $popup->Wait;
+}
+
+########################################################################
+
+sub getSelected
+{
+ shift->GetTextTaggedWith('sel');
+}
+
+sub deleteSelected
+{
+ shift->DeleteTextTaggedWith('sel');
+}
+
+sub GetTextTaggedWith
+{
+ my ($w,$tag) = @_;
+
+ my @ranges = $w->tagRanges($tag);
+ my $range_total = @ranges;
+ my $return_text='';
+
+ # if nothing selected, then ignore
+ if ($range_total == 0) {return $return_text;}
+
+ # for every range-pair, get selected text
+ while(@ranges)
+ {
+ my $first = shift(@ranges);
+ my $last = shift(@ranges);
+ my $text = $w->get($first , $last);
+ if(defined($text))
+ {$return_text = $return_text . $text;}
+ # if there is more tagged text, separate with an end of line character
+ if(@ranges)
+ {$return_text = $return_text . "\n";}
+ }
+ return $return_text;
+}
+
+########################################################################
+sub DeleteTextTaggedWith
+{
+ my ($w,$tag) = @_;
+ my @ranges = $w->tagRanges($tag);
+ my $range_total = @ranges;
+
+ # if nothing tagged with that tag, then ignore
+ if ($range_total == 0) {return;}
+
+ # insert marks where selections are located
+ # marks will move with text even as text is inserted and deleted
+ # in a previous selection.
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markSet('mark_tag_'.$i => $ranges[$i]); }
+
+ # for every selected mark pair, insert new text and delete old text
+ for (my $i=0; $i<$range_total; $i=$i+2)
+ {
+ my $first = $w->index('mark_tag_'.$i);
+ my $last = $w->index('mark_tag_'.($i+1));
+
+ my $text = $w->delete($first , $last);
+ }
+
+ # delete the marks
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markUnset('mark_tag_'.$i); }
+}
+
+
+########################################################################
+sub FindAll
+{
+ my ($w,$mode, $case, $pattern ) = @_;
+ ### 'sel' tags accumulate, need to remove any previous existing
+ $w->unselectAll;
+
+ my $match_length=0;
+ my $start_index;
+ my $end_index = '1.0';
+
+ while(defined($end_index))
+ {
+ if ($case eq '-nocase')
+ {
+ $start_index = $w->search(
+ $mode,
+ $case,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ $end_index,
+ 'end');
+ }
+ else
+ {
+ $start_index = $w->search(
+ $mode,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ $end_index,
+ 'end');
+ }
+
+ unless(defined($start_index) && $start_index) {last;}
+
+ my ($line,$col) = split(/\./, $start_index);
+ $col = $col + $match_length;
+ $end_index = $line.'.'.$col;
+ $w->tagAdd('sel', $start_index, $end_index);
+ }
+}
+
+########################################################################
+# get current selected text and search for the next occurrence
+sub FindSelectionNext
+{
+ my ($w) = @_;
+ my $selected;
+ eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ return if($@);
+ return unless (defined($selected) and length($selected));
+
+ $w->FindNext('-forward', '-exact', '-case', $selected);
+}
+
+########################################################################
+# get current selected text and search for the previous occurrence
+sub FindSelectionPrevious
+{
+ my ($w) = @_;
+ my $selected;
+ eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); };
+ return if($@);
+ return unless (defined($selected) and length($selected));
+
+ $w->FindNext('-backward', '-exact', '-case', $selected);
+}
+
+
+
+########################################################################
+sub FindNext
+{
+ my ($w,$direction, $mode, $case, $pattern ) = @_;
+
+ ## if searching forward, start search at end of selected block
+ ## if backward, start search from start of selected block.
+ ## dont want search to find currently selected text.
+ ## tag 'sel' may not be defined, use eval loop to trap error
+ eval {
+ if ($direction eq '-forward')
+ {
+ $w->markSet('insert', 'sel.last');
+ $w->markSet('current', 'sel.last');
+ }
+ else
+ {
+ $w->markSet('insert', 'sel.first');
+ $w->markSet('current', 'sel.first');
+ }
+ };
+
+ my $saved_index=$w->index('insert');
+
+ # remove any previous existing tags
+ $w->unselectAll;
+
+ my $match_length=0;
+ my $start_index;
+
+ if ($case eq '-nocase')
+ {
+ $start_index = $w->search(
+ $direction,
+ $mode,
+ $case,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ 'insert');
+ }
+ else
+ {
+ $start_index = $w->search(
+ $direction,
+ $mode,
+ -count => \$match_length,
+ "--",
+ $pattern ,
+ 'insert');
+ }
+
+ unless(defined($start_index)) { return 0; }
+ if(length($start_index) == 0) { return 0; }
+
+ my ($line,$col) = split(/\./, $start_index);
+ $col = $col + $match_length;
+ my $end_index = $line.'.'.$col;
+ $w->tagAdd('sel', $start_index, $end_index);
+
+ $w->see($start_index);
+
+ if ($direction eq '-forward')
+ {
+ $w->markSet('insert', $end_index);
+ $w->markSet('current', $end_index);
+ }
+ else
+ {
+ $w->markSet('insert', $start_index);
+ $w->markSet('current', $start_index);
+ }
+
+ my $compared_index = $w->index('insert');
+
+ my $ret_val;
+ if ($compared_index eq $saved_index)
+ {$ret_val=0;}
+ else
+ {$ret_val=1;}
+ return $ret_val;
+}
+
+########################################################################
+sub FindAndReplaceAll
+{
+ my ($w,$mode, $case, $find, $replace ) = @_;
+ $w->markSet('insert', '1.0');
+ $w->unselectAll;
+ while($w->FindNext('-forward', $mode, $case, $find))
+ {
+ $w->ReplaceSelectionsWith($replace);
+ }
+}
+
+########################################################################
+sub ReplaceSelectionsWith
+{
+ my ($w,$new_text ) = @_;
+
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+
+ # if nothing selected, then ignore
+ if ($range_total == 0) {return};
+
+ # insert marks where selections are located
+ # marks will move with text even as text is inserted and deleted
+ # in a previous selection.
+ for (my $i=0; $i<$range_total; $i++)
+ {$w->markSet('mark_sel_'.$i => $ranges[$i]); }
+
+ # for every selected mark pair, insert new text and delete old text
+ my ($first, $last);
+ for (my $i=0; $i<$range_total; $i=$i+2)
+ {
+ $first = $w->index('mark_sel_'.$i);
+ $last = $w->index('mark_sel_'.($i+1));
+
+ ##########################################################################
+ # eventually, want to be able to get selected text,
+ # support regular expression matching, determine replace_text
+ # $replace_text = $selected_text=~m/$new_text/ (or whatever would work)
+ # will have to pass in mode and case flags.
+ # this would allow a regular expression search and replace to be performed
+ # example, look for "line (\d+):" and replace with "$1 >" or similar
+ ##########################################################################
+
+ $w->insert($last, $new_text);
+ $w->delete($first, $last);
+
+ }
+ ############################################################
+ # set the insert cursor to the end of the last insertion mark
+ $w->markSet('insert',$w->index('mark_sel_'.($range_total-1)));
+
+ # delete the marks
+ for (my $i=0; $i<$range_total; $i++)
+ { $w->markUnset('mark_sel_'.$i); }
+}
+########################################################################
+sub FindAndReplacePopUp
+{
+ my ($w)=@_;
+ $w->findandreplacepopup(0);
+}
+
+########################################################################
+sub FindPopUp
+{
+ my ($w)=@_;
+ $w->findandreplacepopup(1);
+}
+
+########################################################################
+
+sub findandreplacepopup
+{
+ my ($w,$find_only)=@_;
+
+ my $pop = $w->Toplevel;
+ $pop->transient($w->toplevel);
+ if ($find_only)
+ { $pop->title("Find"); }
+ else
+ { $pop->title("Find and/or Replace"); }
+ my $frame = $pop->Frame->pack(-anchor=>'nw');
+
+ $frame->Label(-text=>"Direction:")
+ ->grid(-row=> 1, -column=>1, -padx=> 20, -sticky => 'nw');
+ my $direction = '-forward';
+ $frame->Radiobutton(
+ -variable => \$direction,
+ -text => 'forward',-value => '-forward' )
+ ->grid(-row=> 2, -column=>1, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ -variable => \$direction,
+ -text => 'backward',-value => '-backward' )
+ ->grid(-row=> 3, -column=>1, -padx=> 20, -sticky => 'nw');
+
+ $frame->Label(-text=>"Mode:")
+ ->grid(-row=> 1, -column=>2, -padx=> 20, -sticky => 'nw');
+ my $mode = '-exact';
+ $frame->Radiobutton(
+ -variable => \$mode, -text => 'exact',-value => '-exact' )
+ ->grid(-row=> 2, -column=>2, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ -variable => \$mode, -text => 'regexp',-value => '-regexp' )
+ ->grid(-row=> 3, -column=>2, -padx=> 20, -sticky => 'nw');
+
+ $frame->Label(-text=>"Case:")
+ ->grid(-row=> 1, -column=>3, -padx=> 20, -sticky => 'nw');
+ my $case = '-case';
+ $frame->Radiobutton(
+ -variable => \$case, -text => 'case',-value => '-case' )
+ ->grid(-row=> 2, -column=>3, -padx=> 20, -sticky => 'nw');
+ $frame->Radiobutton(
+ -variable => \$case, -text => 'nocase',-value => '-nocase' )
+ ->grid(-row=> 3, -column=>3, -padx=> 20, -sticky => 'nw');
+
+ ######################################################
+ my $find_entry = $pop->Entry(-width=>25);
+ $find_entry->focus;
+
+ my $donext = sub {$w->FindNext ($direction,$mode,$case,$find_entry->get())};
+
+ $find_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x'); # autosizing
+
+ ###### if any $w text is selected, put it in the find entry
+ ###### could be more than one text block selected, get first selection
+ my @ranges = $w->tagRanges('sel');
+ if (@ranges)
+ {
+ my $first = shift(@ranges);
+ my $last = shift(@ranges);
+
+ # limit to one line
+ my ($first_line, $first_col) = split(/\./,$first);
+ my ($last_line, $last_col) = split(/\./,$last);
+ unless($first_line == $last_line)
+ {$last = $first. ' lineend';}
+
+ $find_entry->insert('insert', $w->get($first , $last));
+ }
+ else
+ {
+ my $selected;
+ eval {$selected=$w->SelectionGet(-selection => "PRIMARY"); };
+ if($@) {}
+ elsif (defined($selected))
+ {$find_entry->insert('insert', $selected);}
+ }
+
+ $find_entry->icursor(0);
+
+ my ($replace_entry,$button_replace,$button_replace_all);
+ unless ($find_only)
+ {
+ $replace_entry = $pop->Entry(-width=>25);
+
+ $replace_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x');
+ }
+
+
+ my $button_find = $pop->Button(-text=>'Find', -command => $donext, -default => 'active')
+ -> pack(-side => 'left');
+
+ my $button_find_all = $pop->Button(-text=>'Find All',
+ -command => sub {$w->FindAll($mode,$case,$find_entry->get());} )
+ ->pack(-side => 'left');
+
+ unless ($find_only)
+ {
+ $button_replace = $pop->Button(-text=>'Replace', -default => 'normal',
+ -command => sub {$w->ReplaceSelectionsWith($replace_entry->get());} )
+ -> pack(-side =>'left');
+ $button_replace_all = $pop->Button(-text=>'Replace All',
+ -command => sub {$w->FindAndReplaceAll
+ ($mode,$case,$find_entry->get(),$replace_entry->get());} )
+ ->pack(-side => 'left');
+ }
+
+
+ my $button_cancel = $pop->Button(-text=>'Cancel',
+ -command => sub {$pop->destroy()} )
+ ->pack(-side => 'left');
+
+ $find_entry->bind("<Return>" => [$button_find, 'invoke']);
+ $find_entry->bind("<Escape>" => [$button_cancel, 'invoke']);
+
+ $find_entry->bind("<Return>" => [$button_find, 'invoke']);
+ $find_entry->bind("<Escape>" => [$button_cancel, 'invoke']);
+
+ $pop->resizable('yes','no');
+ return $pop;
+}
+
+# paste clipboard into current location
+sub clipboardPaste
+{
+ my ($w) = @_;
+ local $@;
+ Tk::catch { $w->Insert($w->clipboardGet) };
+}
+
+########################################################################
+# Insert --
+# Insert a string into a text at the point of the insertion cursor.
+# If there is a selection in the text, and it covers the point of the
+# insertion cursor, then delete the selection before inserting.
+#
+# Arguments:
+# w - The text window in which to insert the string
+# string - The string to insert (usually just a single character)
+sub Insert
+{
+ my ($w,$string) = @_;
+ return unless (defined $string && $string ne '');
+ #figure out if cursor is inside a selection
+ my @ranges = $w->tagRanges('sel');
+ if (@ranges)
+ {
+ while (@ranges)
+ {
+ my ($first,$last) = splice(@ranges,0,2);
+ if ($w->compare($first,'<=','insert') && $w->compare($last,'>=','insert'))
+ {
+ $w->ReplaceSelectionsWith($string);
+ return;
+ }
+ }
+ }
+ # paste it at the current cursor location
+ $w->insert('insert',$string);
+ $w->see('insert');
+}
+
+# UpDownLine --
+# Returns the index of the character one *display* line above or below the
+# insertion cursor. There are two tricky things here. First,
+# we want to maintain the original column across repeated operations,
+# even though some lines that will get passed through do not have
+# enough characters to cover the original column. Second, do not
+# try to scroll past the beginning or end of the text.
+#
+# This may have some weirdness associated with a proportional font. Ie.
+# the insertion cursor will zigzag up or down according to the width of
+# the character at destination.
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# n - The number of lines to move: -1 for up one line,
+# +1 for down one line.
+sub UpDownLine
+{
+my ($w,$n) = @_;
+$w->see('insert');
+my $i = $w->index('insert');
+
+my ($line,$char) = split(/\./,$i);
+
+my $testX; #used to check the "new" position
+my $testY; #used to check the "new" position
+
+(my $bx, my $by, my $bw, my $bh) = $w->bbox($i);
+(my $lx, my $ly, my $lw, my $lh) = $w->dlineinfo($i);
+
+if ( ($n == -1) and ($by <= $bh) )
+ {
+ #On first display line.. so scroll up and recalculate..
+ $w->yview('scroll', -1, 'units');
+ unless (($w->yview)[0]) {
+ #first line of entire text - keep same position.
+ return $i;
+ }
+ ($bx, $by, $bw, $bh) = $w->bbox($i);
+ ($lx, $ly, $lw, $lh) = $w->dlineinfo($i);
+ }
+elsif ( ($n == 1) and
+ ($ly + $lh) > ( $w->height - 2*$w->cget(-bd) - 2*$w->cget(-highlightthickness) ) )
+ {
+ #On last display line.. so scroll down and recalculate..
+ $w->yview('scroll', 1, 'units');
+ ($bx, $by, $bw, $bh) = $w->bbox($i);
+ ($lx, $ly, $lw, $lh) = $w->dlineinfo($i);
+ }
+
+# Calculate the vertical position of the next display line
+my $Yoffset = 0;
+$Yoffset = $by - $ly + 1 if ($n== -1);
+$Yoffset = $ly + $lh + 1 - $by if ($n == 1);
+$Yoffset*=$n;
+$testY = $by + $Yoffset;
+
+# Save the original 'x' position of the insert cursor if:
+# 1. This is the first time through -- or --
+# 2. The insert cursor position has changed from the previous
+# time the up or down key was pressed -- or --
+# 3. The cursor has reached the beginning or end of the widget.
+
+if (not defined $w->{'origx'} or ($w->{'lastindex'} != $i) )
+ {
+ $w->{'origx'} = $bx;
+ }
+
+# Try to keep the same column if possible
+$testX = $w->{'origx'};
+
+# Get the coordinates of the possible new position
+my $testindex = $w->index('@'.$testX.','.$testY );
+$w->see($testindex);
+my ($nx,$ny,$nw,$nh) = $w->bbox($testindex);
+
+# Which side of the character should we position the cursor -
+# mainly for a proportional font
+if ($testX > $nx+$nw/2)
+ {
+ $testX = $nx+$nw+1;
+ }
+
+my $newindex = $w->index('@'.$testX.','.$testY );
+
+if ( $w->compare($newindex,'==','end - 1 char') and ($ny == $ly ) )
+ {
+ # Then we are trying to the 'end' of the text from
+ # the same display line - don't do that
+ return $i;
+ }
+
+$w->{'lastindex'} = $newindex;
+$w->see($newindex);
+return $newindex;
+}
+
+# PrevPara --
+# Returns the index of the beginning of the paragraph just before a given
+# position in the text (the beginning of a paragraph is the first non-blank
+# character after a blank line).
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# pos - Position at which to start search.
+sub PrevPara
+{
+ my ($w,$pos) = @_;
+ $pos = $w->index("$pos linestart");
+ while (1)
+ {
+ if ($w->get("$pos - 1 line") eq "\n" && $w->get($pos) ne "\n" || $pos eq '1.0' )
+ {
+ my $string = $w->get($pos,"$pos lineend");
+ if ($string =~ /^(\s)+/)
+ {
+ my $off = length($1);
+ $pos = $w->index("$pos + $off chars")
+ }
+ if ($w->compare($pos,'!=','insert') || $pos eq '1.0')
+ {
+ return $pos;
+ }
+ }
+ $pos = $w->index("$pos - 1 line")
+ }
+}
+# NextPara --
+# Returns the index of the beginning of the paragraph just after a given
+# position in the text (the beginning of a paragraph is the first non-blank
+# character after a blank line).
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# start - Position at which to start search.
+sub NextPara
+{
+ my ($w,$start) = @_;
+ my $pos = $w->index("$start linestart + 1 line");
+ while ($w->get($pos) ne "\n")
+ {
+ if ($w->compare($pos,'==','end'))
+ {
+ return $w->index('end - 1c');
+ }
+ $pos = $w->index("$pos + 1 line")
+ }
+ while ($w->get($pos) eq "\n" )
+ {
+ $pos = $w->index("$pos + 1 line");
+ if ($w->compare($pos,'==','end'))
+ {
+ return $w->index('end - 1c');
+ }
+ }
+ my $string = $w->get($pos,"$pos lineend");
+ if ($string =~ /^(\s+)/)
+ {
+ my $off = length($1);
+ return $w->index("$pos + $off chars");
+ }
+ return $pos;
+}
+# ScrollPages --
+# This is a utility procedure used in bindings for moving up and down
+# pages and possibly extending the selection along the way. It scrolls
+# the view in the widget by the number of pages, and it returns the
+# index of the character that is at the same position in the new view
+# as the insertion cursor used to be in the old view.
+#
+# Arguments:
+# w - The text window in which the cursor is to move.
+# count - Number of pages forward to scroll; may be negative
+# to scroll backwards.
+sub ScrollPages
+{
+ my ($w,$count) = @_;
+ my @bbox = $w->bbox('insert');
+ $w->yview('scroll',$count,'pages');
+ if (!@bbox)
+ {
+ return $w->index('@' . int($w->height/2) . ',' . 0);
+ }
+ my $x = int($bbox[0]+$bbox[2]/2);
+ my $y = int($bbox[1]+$bbox[3]/2);
+ return $w->index('@' . $x . ',' . $y);
+}
+
+sub Contents
+{
+ my $w = shift;
+ if (@_)
+ {
+ $w->delete('1.0','end');
+ $w->insert('end',shift) while (@_);
+ }
+ else
+ {
+ return $w->get('1.0','end');
+ }
+}
+
+sub Destroy
+{
+ my ($w) = @_;
+ delete $w->{_Tags_};
+}
+
+sub Transpose
+{
+ my ($w) = @_;
+ my $pos = 'insert';
+ $pos = $w->index("$pos + 1 char") if ($w->compare($pos,'!=',"$pos lineend"));
+ return if ($w->compare("$pos - 1 char",'==','1.0'));
+ my $new = $w->get("$pos - 1 char").$w->get("$pos - 2 char");
+ $w->delete("$pos - 2 char",$pos);
+ $w->insert('insert',$new);
+ $w->see('insert');
+}
+
+sub Tag
+{
+ my $w = shift;
+ my $name = shift;
+ Carp::confess('No args') unless (ref $w and defined $name);
+ $w->{_Tags_} = {} unless (exists $w->{_Tags_});
+ unless (exists $w->{_Tags_}{$name})
+ {
+ require Tk::Text::Tag;
+ $w->{_Tags_}{$name} = 'Tk::Text::Tag'->new($w,$name);
+ }
+ $w->{_Tags_}{$name}->configure(@_) if (@_);
+ return $w->{_Tags_}{$name};
+}
+
+sub Tags
+{
+ my ($w,$name) = @_;
+ my @result = ();
+ foreach $name ($w->tagNames(@_))
+ {
+ push(@result,$w->Tag($name));
+ }
+ return @result;
+}
+
+sub TIEHANDLE
+{
+ my ($class,$obj) = @_;
+ return $obj;
+}
+
+sub PRINT
+{
+ my $w = shift;
+ # Find out whether 'end' is displayed at the moment
+ # Retrieve the position of the bottom of the window as
+ # a fraction of the entire contents of the Text widget
+ my $yview = ($w->yview)[1];
+
+ # If $yview is 1.0 this means that 'end' is visible in the window
+ my $update = 0;
+ $update = 1 if $yview == 1.0;
+
+ # Loop over all input strings
+ while (@_)
+ {
+ $w->insert('end',shift);
+ }
+ # Move the window to see the end of the text if required
+ $w->see('end') if $update;
+}
+
+sub PRINTF
+{
+ my $w = shift;
+ $w->PRINT(sprintf(shift,@_));
+}
+
+sub WhatLineNumberPopUp
+{
+ my ($w)=@_;
+ my ($line,$col) = split(/\./,$w->index('insert'));
+ $w->messageBox(-type => 'Ok', -title => "What Line Number",
+ -message => "The cursor is on line $line (column is $col)");
+}
+
+sub MenuLabels
+{
+ return qw[~File ~Edit ~Search ~View];
+}
+
+sub SearchMenuItems
+{
+ my ($w) = @_;
+ return [
+ ['command'=>'~Find', -command => [$w => 'FindPopUp']],
+ ['command'=>'Find ~Next', -command => [$w => 'FindSelectionNext']],
+ ['command'=>'Find ~Previous', -command => [$w => 'FindSelectionPrevious']],
+ ['command'=>'~Replace', -command => [$w => 'FindAndReplacePopUp']]
+ ];
+}
+
+sub EditMenuItems
+{
+ my ($w) = @_;
+ my @items = ();
+ foreach my $op ($w->clipEvents)
+ {
+ push(@items,['command' => "~$op", -command => [ $w => "clipboard$op"]]);
+ }
+ push(@items,
+ '-',
+ ['command'=>'Select All', -command => [$w => 'selectAll']],
+ ['command'=>'Unselect All', -command => [$w => 'unselectAll']],
+ );
+ return \@items;
+}
+
+sub ViewMenuItems
+{
+ my ($w) = @_;
+ my $v;
+ tie $v,'Tk::Configure',$w,'-wrap';
+ return [
+ ['command'=>'Goto ~Line...', -command => [$w => 'GotoLineNumberPopUp']],
+ ['command'=>'~Which Line?', -command => [$w => 'WhatLineNumberPopUp']],
+ ['cascade'=> 'Wrap', -tearoff => 0, -menuitems => [
+ [radiobutton => 'Word', -variable => \$v, -value => 'word'],
+ [radiobutton => 'Character', -variable => \$v, -value => 'char'],
+ [radiobutton => 'None', -variable => \$v, -value => 'none'],
+ ]],
+ ];
+}
+
+########################################################################
+sub clipboardColumnCopy
+{
+ my ($w) = @_;
+ $w->Column_Copy_or_Cut(0);
+}
+
+sub clipboardColumnCut
+{
+ my ($w) = @_;
+ $w->Column_Copy_or_Cut(1);
+}
+
+########################################################################
+sub Column_Copy_or_Cut
+{
+ my ($w, $cut) = @_;
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+ # this only makes sense if there is one selected block
+ unless ($range_total==2)
+ {
+ $w->bell;
+ return;
+ }
+
+ my $selection_start_index = shift(@ranges);
+ my $selection_end_index = shift(@ranges);
+
+ my ($start_line, $start_column) = split(/\./, $selection_start_index);
+ my ($end_line, $end_column) = split(/\./, $selection_end_index);
+
+ # correct indices for tabs
+ my $string;
+ $string = $w->get($start_line.'.0', $start_line.'.0 lineend');
+ $string = substr($string, 0, $start_column);
+ $string = expand($string);
+ my $tab_start_column = length($string);
+
+ $string = $w->get($end_line.'.0', $end_line.'.0 lineend');
+ $string = substr($string, 0, $end_column);
+ $string = expand($string);
+ my $tab_end_column = length($string);
+
+ my $length = $tab_end_column - $tab_start_column;
+
+ $selection_start_index = $start_line . '.' . $tab_start_column;
+ $selection_end_index = $end_line . '.' . $tab_end_column;
+
+ # clear the clipboard
+ $w->clipboardClear;
+ my ($clipstring, $startstring, $endstring);
+ my $padded_string = ' 'x$tab_end_column;
+ for(my $line = $start_line; $line <= $end_line; $line++)
+ {
+ $string = $w->get($line.'.0', $line.'.0 lineend');
+ $string = expand($string) . $padded_string;
+ $clipstring = substr($string, $tab_start_column, $length);
+ #$clipstring = unexpand($clipstring);
+ $w->clipboardAppend($clipstring."\n");
+
+ if ($cut)
+ {
+ $startstring = substr($string, 0, $tab_start_column);
+ $startstring = unexpand($startstring);
+ $start_column = length($startstring);
+
+ $endstring = substr($string, 0, $tab_end_column );
+ $endstring = unexpand($endstring);
+ $end_column = length($endstring);
+
+ $w->delete($line.'.'.$start_column, $line.'.'.$end_column);
+ }
+ }
+}
+
+########################################################################
+
+sub clipboardColumnPaste
+{
+ my ($w) = @_;
+ my @ranges = $w->tagRanges('sel');
+ my $range_total = @ranges;
+ if ($range_total)
+ {
+ warn " there cannot be any selections during clipboardColumnPaste. \n";
+ $w->bell;
+ return;
+ }
+
+ my $clipboard_text;
+ eval
+ {
+ $clipboard_text = $w->SelectionGet(-selection => "CLIPBOARD");
+ };
+
+ return unless (defined($clipboard_text));
+ return unless (length($clipboard_text));
+ my $string;
+
+ my $current_index = $w->index('insert');
+ my ($current_line, $current_column) = split(/\./,$current_index);
+ $string = $w->get($current_line.'.0', $current_line.'.'.$current_column);
+ $string = expand($string);
+ $current_column = length($string);
+
+ my @clipboard_lines = split(/\n/,$clipboard_text);
+ my $length;
+ my $end_index;
+ my ($delete_start_column, $delete_end_column, $insert_column_index);
+ foreach my $line (@clipboard_lines)
+ {
+ if ($w->OverstrikeMode)
+ {
+ #figure out start and end indexes to delete, compensating for tabs.
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column);
+ $string = unexpand($string);
+ $delete_start_column = length($string);
+
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column + length($line));
+ chomp($string); # dont delete a "\n" on end of line.
+ $string = unexpand($string);
+ $delete_end_column = length($string);
+
+
+
+ $w->delete(
+ $current_line.'.'.$delete_start_column ,
+ $current_line.'.'.$delete_end_column
+ );
+ }
+
+ $string = $w->get($current_line.'.0', $current_line.'.0 lineend');
+ $string = expand($string);
+ $string = substr($string, 0, $current_column);
+ $string = unexpand($string);
+ $insert_column_index = length($string);
+
+ $w->insert($current_line.'.'.$insert_column_index, unexpand($line));
+ $current_line++;
+ }
+
+}
+
+# Backward compatibility
+sub GetMenu
+{
+ carp((caller(0))[3]." is deprecated") if $^W;
+ shift->menu
+}
+
+1;
+__END__
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm b/Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm
new file mode 100644
index 00000000000..827278eb88c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Text/Tag.pm
@@ -0,0 +1,46 @@
+package Tk::Text::Tag;
+require Tk::Text;
+
+use overload '""' => \&name;
+
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Text/Text/Tag.pm#4 $
+
+sub _apply
+{
+ my $self = shift;
+ my $meth = shift;
+ $self->widget->tag($meth => $self->name,@_);
+}
+
+sub name
+{
+ return shift->[0];
+}
+
+sub widget
+{
+ return shift->[1];
+}
+
+BEGIN
+{
+ my $meth;
+ foreach $meth (qw(cget configure bind add))
+ {
+ *{$meth} = sub { shift->_apply($meth,@_) }
+ }
+}
+
+sub new
+{
+ my $class = shift;
+ my $widget = shift;
+ my $name = shift;
+ my $obj = bless [$name,$widget],$class;
+ $obj->configure(@_) if (@_);
+ return $obj;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/TextEdit.pm b/Master/tlpkg/tlperl/lib/Tk/TextEdit.pm
new file mode 100644
index 00000000000..e1ff20b6149
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TextEdit.pm
@@ -0,0 +1,509 @@
+# Copyright (c) 1999 Greg Bartels. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+# Special thanks to Nick Ing-Simmons for pushing a lot of
+# my text edit functionality into Text.pm and TextUndo.pm
+# otherwise, this module would have been monstrous.
+
+# Andy Worhal had it wrong, its "fifteen megabytes of fame"
+# -Greg Bartels
+
+package Tk::TextEdit;
+
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/TextEdit.pm#4 $
+
+use Tk qw (Ev);
+use AutoLoader;
+
+use Text::Tabs;
+
+use base qw(Tk::TextUndo);
+
+Construct Tk::Widget 'TextEdit';
+
+#######################################################################
+#######################################################################
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $class->SUPER::ClassInit($mw);
+
+ $mw->bind($class,'<F5>', 'IndentSelectedLines');
+ $mw->bind($class,'<F6>', 'UnindentSelectedLines');
+
+ $mw->bind($class,'<F7>', 'CommentSelectedLines');
+ $mw->bind($class,'<F8>', 'UncommentSelectedLines');
+
+ return $class;
+}
+
+# 8 horizontal pixels in the "space" character in default font.
+my $tab_multiplier = 8;
+
+sub debug_code_f1
+{
+ my $w=shift;
+}
+
+sub debug_code_f2
+{
+ my $w=shift;
+}
+
+#######################################################################
+#######################################################################
+sub InitObject
+{
+ my ($w) = @_;
+ $w->SUPER::InitObject;
+
+ $w->{'INDENT_STRING'} = "\t"; # Greg mode=>"\t", Nick mode=>" "
+ $w->{'LINE_COMMENT_STRING'} = "#"; # assuming perl comments
+
+ my %pair_descriptor_hash =
+ (
+ 'PARENS' => [ 'multiline', '(', ')', "[()]" ],
+ 'CURLIES' => [ 'multiline', '{', '}', "[{}]" ],
+ 'BRACES' => [ 'multiline', '[', ']', "[][]" ],
+ 'DOUBLEQUOTE' => [ 'singleline', "\"","\"" ],
+ 'SINGLEQUOTE' => [ 'singleline', "'","'" ],
+ );
+
+ $w->{'HIGHLIGHT_PAIR_DESCRIPTOR_HASH_REF'}=\%pair_descriptor_hash;
+
+ $w->tagConfigure
+ ('CURSOR_HIGHLIGHT_PARENS', -foreground=>'white', -background=>'violet');
+ $w->tagConfigure
+ ('CURSOR_HIGHLIGHT_CURLIES', -foreground=>'white', -background=>'blue');
+ $w->tagConfigure
+ ('CURSOR_HIGHLIGHT_BRACES', -foreground=>'white', -background=>'purple');
+ $w->tagConfigure
+ ('CURSOR_HIGHLIGHT_DOUBLEQUOTE', -foreground=>'black', -background=>'green');
+ $w->tagConfigure
+ ('CURSOR_HIGHLIGHT_SINGLEQUOTE', -foreground=>'black', -background=>'grey');
+
+ $w->tagConfigure('BLOCK_HIGHLIGHT_PARENS', -background=>'red');
+ $w->tagConfigure('BLOCK_HIGHLIGHT_CURLIES', -background=>'orange');
+ $w->tagConfigure('BLOCK_HIGHLIGHT_BRACES', -background=>'red');
+ $w->tagConfigure('BLOCK_HIGHLIGHT_DOUBLEQUOTE', -background=>'red');
+ $w->tagConfigure('BLOCK_HIGHLIGHT_SINGLEQUOTE', -background=>'red');
+
+ $w->tagRaise('BLOCK_HIGHLIGHT_PARENS','CURSOR_HIGHLIGHT_PARENS');
+ $w->tagRaise('BLOCK_HIGHLIGHT_CURLIES','CURSOR_HIGHLIGHT_CURLIES');
+ $w->tagRaise('BLOCK_HIGHLIGHT_BRACES','CURSOR_HIGHLIGHT_BRACES');
+ $w->tagRaise('BLOCK_HIGHLIGHT_DOUBLEQUOTE','CURSOR_HIGHLIGHT_DOUBLEQUOTE');
+ $w->tagRaise('BLOCK_HIGHLIGHT_SINGLEQUOTE','CURSOR_HIGHLIGHT_SINGLEQUOTE');
+
+ $w->{'UPDATE_WIDGET_PERIOD'}=300; # how much time between each call.
+ $w->{'WINDOW_PLUS_AND_MINUS_VALUE'}=80;
+ $w->SetGUICallbackIndex(0);
+ $w->schedule_next_callback;
+
+}
+
+#######################################################################
+
+sub cancel_current_gui_callback_and_restart_from_beginning
+{
+ my ($w)=@_;
+ if(defined($w->{'UPDATE_WIDGET_AFTER_REFERENCE'}))
+ {$w->{'UPDATE_WIDGET_AFTER_REFERENCE'}->cancel();}
+ $w->SetGUICallbackIndex(0);
+
+ $w->schedule_next_callback;
+}
+
+sub schedule_next_callback
+{
+ my ($w)=@_;
+ return if $w->NoMoreGUICallbacksToCall; #stops infinite recursive call.
+ $w->{'UPDATE_WIDGET_AFTER_REFERENCE'} = $w->after
+ ($w->{'UPDATE_WIDGET_PERIOD'},
+ sub
+ {
+ $w->CallNextGUICallback;
+ $w->schedule_next_callback;
+ }
+ );
+
+}
+
+
+#######################################################################
+# use these methods to pass the TextEdit widget an anonymous array
+# of code references.
+# any time the widget changes that requires the display to be updated,
+# then these code references will be scheduled in sequence for calling.
+# splitting them up allows them to be prioritized by order,
+# and prevents the widget from "freezing" too long if they were
+# one large callback. scheduling them apart allows the widget time
+# to respond to user inputs.
+#######################################################################
+sub SetGUICallbacks
+{
+ my ($w,$callback_array_ref) = @_;
+ $w->{GUI_CALLBACK_ARRAY_REF}=$callback_array_ref;
+ $w->SetGUICallbackIndex(0);
+}
+
+sub GetGUICallbacks
+{
+ return shift->{GUI_CALLBACK_ARRAY_REF};
+}
+
+sub SetGUICallbackIndex
+{
+ my ($w, $val)=@_;
+ $w->{GUI_CALLBACK_ARRAY_INDEX}=$val;
+}
+
+sub GetGUICallbackIndex
+{
+ return shift->{GUI_CALLBACK_ARRAY_INDEX};
+}
+
+sub IncrementGUICallbackIndex
+{
+ shift->{GUI_CALLBACK_ARRAY_INDEX} += 1;
+}
+
+sub NoMoreGUICallbacksToCall
+{
+ my ($w) = @_;
+ return 0 unless defined ($w->{GUI_CALLBACK_ARRAY_REF});
+ return 0 unless defined ($w->{GUI_CALLBACK_ARRAY_INDEX});
+ my $arr_ref = $w->{GUI_CALLBACK_ARRAY_REF};
+ my $arr_ind = $w->{GUI_CALLBACK_ARRAY_INDEX};
+ return $arr_ind >= @$arr_ref;
+}
+
+sub CallNextGUICallback
+{
+ my ($w) = @_;
+ return if $w->NoMoreGUICallbacksToCall;
+ my $arr_ref = $w->{GUI_CALLBACK_ARRAY_REF};
+ my $arr_ind = $w->{GUI_CALLBACK_ARRAY_INDEX};
+ &{$arr_ref->[$arr_ind]};
+ $w->IncrementGUICallbackIndex;
+}
+
+
+#######################################################################
+#######################################################################
+
+sub insert
+{
+ my $w = shift;
+ $w->SUPER::insert(@_);
+ $w->cancel_current_gui_callback_and_restart_from_beginning;
+}
+
+sub delete
+{
+ my $w = shift;
+ $w->SUPER::delete(@_);
+ $w->cancel_current_gui_callback_and_restart_from_beginning;
+}
+
+sub SetCursor
+{
+ my $w = shift;
+ $w->SUPER::SetCursor(@_);
+ $w->cancel_current_gui_callback_and_restart_from_beginning;
+}
+
+sub OverstrikeMode
+{
+ my ($w,$mode) = @_;
+ if (defined($mode))
+ {
+ $w->SUPER::OverstrikeMode($mode);
+ $w->cancel_current_gui_callback_and_restart_from_beginning;
+ }
+ return $w->SUPER::OverstrikeMode;
+}
+
+
+#######################################################################
+# use yview on scrollbar to get fractional coordinates.
+# scale this by the total length of the text to find the
+# approximate start line of widget and end line of widget.
+#######################################################################
+sub GetScreenWindowCoordinates
+{
+ my $w = shift;
+ my ($top_frac, $bot_frac) = $w->yview;
+ my $end_index = $w->index('end');
+ my ($lines,$columns) = split (/\./,$end_index);
+ my $window = $w->{'WINDOW_PLUS_AND_MINUS_VALUE'};
+ my $top_line = int(($top_frac * $lines) - $window);
+ $top_line = 0 if ($top_line < 0);
+ my $bot_line = int(($bot_frac * $lines) + $window);
+ $bot_line = $lines if ($bot_line > $lines);
+ my $top_index = $top_line . '.0';
+ my $bot_index = $bot_line . '.0';
+
+ $_[0] = $top_index;
+ $_[1] = $bot_index;
+}
+
+########################################################################
+# take two indices as inputs.
+# if they are on the same line or same column (accounting for tabs)
+# then return 1
+# else return 0
+# (assume indices passed in are in line.column format)
+########################################################################
+sub IndicesLookGood
+{
+ my ($w, $start, $end, $singleline) = @_;
+
+ return 0 unless ( (defined($start)) and (defined($end)));
+
+ my ($start_line, $start_column) = split (/\./,$start);
+ my ($end_line, $end_column) = split (/\./,$end);
+
+ ##########################
+ # good if on the same line
+ ##########################
+ return 1 if ($start_line == $end_line);
+
+ ##########################
+ # if not on same line and its a singleline, its bad
+ ##########################
+ return 0 if $singleline;
+
+
+ # get both lines, convert the tabs to spaces, and get the new column.
+ # see if they line up or not.
+ my $string;
+ $string = $w->get($start_line.'.0', $start_line.'.0 lineend');
+ $string = substr($string, 0, $start_column+1);
+ $string = expand($string);
+ $start_column = length($string);
+
+ $string = $w->get($end_line.'.0', $end_line.'.0 lineend');
+ $string = substr($string, 0, $end_column +1);
+ $string = expand($string);
+ $end_column = length($string);
+
+ ##########################
+ # good if on the same column (adjusting for tabs)
+ ##########################
+ return 1 if ($start_column == $end_column);
+
+ # otherwise its bad
+ return 0;
+}
+
+########################################################################
+# if searching backward, count paranthesis until find a start parenthesis
+# which does not have a forward match.
+#
+# (<= search backward will return this index
+# ()
+# START X HERE
+# ( ( ) () )
+# )<== search forward will return this index
+#
+# if searching forward, count paranthesis until find a end parenthesis
+# which does not have a rearward match.
+########################################################################
+sub searchForBaseCharacterInPair
+{
+ my
+ (
+ $w, $top_index, $searchfromindex, $bot_index,
+ $direction, $startchar, $endchar, $charpair
+ )=@_;
+ my ($plus_one_char, $search_end_index, $index_offset, $done_index);
+ if ($direction eq '-forward')
+ {
+ $plus_one_char = $endchar;
+ $search_end_index = $bot_index;
+ $index_offset = ' +1c';
+ $done_index = $w->index('end');
+ }
+ else
+ {
+ $plus_one_char = $startchar;
+ $search_end_index = $top_index;
+ $index_offset = '';
+ $done_index = '1.0';
+ }
+
+ my $at_done_index = 0;
+ my $count = 0;
+ my $char;
+ while(1)
+ {
+ $searchfromindex = $w->search
+ ($direction, '-regexp', $charpair, $searchfromindex, $search_end_index );
+
+ last unless(defined($searchfromindex));
+ $char = $w->get($searchfromindex, $w->index($searchfromindex.' +1c'));
+ if ($char eq $plus_one_char)
+ {$count += 1;}
+ else
+ {$count -= 1;}
+ last if ($count==1);
+ # boundary condition exists when first char in widget is the match char
+ # need to be able to determine if search tried to go past index '1.0'
+ # if so, set index to undef and return.
+ if ( $at_done_index )
+ {
+ $searchfromindex = undef;
+ last;
+ }
+ $at_done_index = 1 if ($searchfromindex eq $done_index);
+ $searchfromindex=$w->index($searchfromindex . $index_offset);
+ }
+ return $searchfromindex;
+}
+
+########################################################################
+# highlight a character pair that most closely brackets the cursor.
+# allows you to pick and choose which ones you want to do.
+########################################################################
+
+sub HighlightParenthesisAroundCursor
+{
+ my ($w)=@_;
+ $w->HighlightSinglePairBracketingCursor
+ ( '(', ')', '[()]', 'CURSOR_HIGHLIGHT_PARENS','BLOCK_HIGHLIGHT_PARENS',0);
+}
+
+sub HighlightCurlyBracesAroundCursor
+{
+ my ($w)=@_;
+ $w->HighlightSinglePairBracketingCursor
+ ( '{', '}', '[{}]', 'CURSOR_HIGHLIGHT_CURLIES','BLOCK_HIGHLIGHT_CURLIES',0);
+}
+
+sub HighlightBracesAroundCursor
+{
+ my ($w)=@_;
+ $w->HighlightSinglePairBracketingCursor
+ ( '[', ']','[][]', 'CURSOR_HIGHLIGHT_BRACES','BLOCK_HIGHLIGHT_BRACES',0);
+}
+
+sub HighlightDoubleQuotesAroundCursor
+{
+ my ($w)=@_;
+ $w->HighlightSinglePairBracketingCursor
+ ( "\"", "\"", "\"", 'CURSOR_HIGHLIGHT_DOUBLEQUOTE','BLOCK_HIGHLIGHT_DOUBLEQUOTE',1);
+}
+
+sub HighlightSingleQuotesAroundCursor
+{
+ my ($w)=@_;
+ $w->HighlightSinglePairBracketingCursor
+ ( "'", "'", "'", 'CURSOR_HIGHLIGHT_SINGLEQUOTE','BLOCK_HIGHLIGHT_SINGLEQUOTE',1);
+}
+
+########################################################################
+# highlight all the character pairs that most closely bracket the cursor.
+########################################################################
+sub HighlightAllPairsBracketingCursor
+{
+ my ($w)=@_;
+ $w->HighlightParenthesisAroundCursor;
+ $w->HighlightCurlyBracesAroundCursor;
+ $w->HighlightBracesAroundCursor;
+ $w->HighlightDoubleQuotesAroundCursor;
+ $w->HighlightSingleQuotesAroundCursor;
+}
+
+########################################################################
+# search for a pair of matching characters that bracket the
+# cursor and tag them with the given tagname.
+# startchar might be '['
+# endchar would then be ']'
+# tagname is a name of a tag, which has already been
+# configured to highlight however the user wants them to behave.
+# error tagname is the tag to highlight the chars with if there
+# is a problem of some kind.
+# singleline indicates whether the character pairs must occur
+# on a single line. quotation marks are single line characters usually.
+########################################################################
+sub HighlightSinglePairBracketingCursor
+{
+ my
+ (
+ $w, $startchar, $endchar, $charpair,
+ $good_tagname, $bad_tagname, $single_line
+ ) = @_;
+ $single_line=0 unless defined($single_line);
+ $w->tagRemove($good_tagname, '1.0','end');
+ $w->tagRemove($bad_tagname, '1.0','end');
+ my $top_index; my $bot_index;
+ my $cursor = $w->index('insert');
+ if ($single_line)
+ {
+ $top_index = $w->index($cursor.' linestart');
+ $bot_index = $w->index($cursor.' lineend');
+ }
+ else
+ {
+ $w->GetScreenWindowCoordinates($top_index, $bot_index);
+ }
+
+ # search backward for the startchar
+ # $top_index, $searchfromindex, $bot_index,
+ # $direction, $startchar, $endchar, $charpair
+
+ my $startindex = $w->searchForBaseCharacterInPair
+ (
+ $top_index, $cursor, $bot_index,
+ '-backward', $startchar, $endchar, $charpair
+ );
+
+ # search forward for the endchar
+ my $endindex = $w->searchForBaseCharacterInPair
+ (
+ $top_index, $cursor, $bot_index,
+ '-forward', $startchar, $endchar, $charpair
+ );
+ return unless ((defined $startindex) and (defined $endindex));
+
+ my $final_tag = $bad_tagname;
+ if ($w->IndicesLookGood( $startindex, $endindex, $single_line))
+ {
+ $final_tag = $good_tagname;
+ }
+
+ $w->tagAdd($final_tag, $startindex, $w->index($startindex.'+1c') );
+ $w->tagAdd($final_tag, $endindex, $w->index( $endindex.'+1c') );
+}
+
+####################################################################
+sub IndentSelectedLines
+{
+ my($w)=@_;
+ $w->insertStringAtStartOfSelectedLines($w->{'INDENT_STRING'});
+}
+
+sub UnindentSelectedLines
+{
+ my($w)=@_;
+ $w->deleteStringAtStartOfSelectedLines($w->{'INDENT_STRING'});
+}
+
+sub CommentSelectedLines
+{
+ my($w)=@_;
+ $w->insertStringAtStartOfSelectedLines($w->{'LINE_COMMENT_STRING'});
+}
+
+sub UncommentSelectedLines
+{
+ my($w)=@_;
+ $w->deleteStringAtStartOfSelectedLines($w->{'LINE_COMMENT_STRING'});
+}
+
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/TextList.pm b/Master/tlpkg/tlperl/lib/Tk/TextList.pm
new file mode 100644
index 00000000000..77a48fdf8ce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TextList.pm
@@ -0,0 +1,985 @@
+# Copyright (c) 1999 Greg London. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+# code for bindings taken from Listbox.pm
+
+# comments specifying method functionality taken from
+# "Perl/Tk Pocket Reference" by Stephen Lidie.
+
+#######################################################################
+# this module uses a text module as its base class to create a list box.
+# this will allow list box functionality to also have all the functionality
+# of the Text widget.
+#
+# note that most methods use an element number to indicate which
+# element in the list to work on.
+# the exception to this is the tag and mark methods which
+# are dual natured. These methods may accept either the
+# normal element number, or they will also take a element.char index,
+# which would be useful for applying tags to part of a line in the list.
+#
+#######################################################################
+
+package Tk::TextList;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = '4.005'; # $Id: //depot/Tkutf8/TextList/TextList.pm#5 $
+
+#XXXdel: use Tk::Reindex qw(Tk::ROText); #XXXdel: ReindexedROText);
+
+use base qw(Tk::Derived Tk::ReindexedROText );
+
+use Tk qw (Ev);
+
+#XXX del: use base qw(Tk::ReindexedROText);
+
+Construct Tk::Widget 'TextList';
+
+#######################################################################
+# the following line causes Populate to get called
+# @ISA = qw(Tk::Derived ... );
+#######################################################################
+sub Populate
+{
+ my ($w,$args)=@_;
+ my $option=delete $args->{'-selectmode'};
+ $w->SUPER::Populate($args);
+ $w->ConfigSpecs( -selectmode => ['PASSIVE','selectMode','SelectMode','browse'],
+ -takefocus => ['PASSIVE','takeFocus','TakeFocus',1],
+ -spacing3 => ['SELF', undef, undef, 3],
+ -insertwidth => ['SELF', undef, undef, 0],
+ );
+
+}
+
+#######################################################################
+#######################################################################
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+
+ # Standard Motif bindings:
+ $mw->bind($class,'<1>',['BeginSelect',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<B1-Motion>',['Motion',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<ButtonRelease-1>','ButtonRelease_1');
+
+ $mw->bind($class,'<Shift-1>',['BeginExtend',Ev('index',Ev('@'))]);
+ $mw->bind($class,'<Control-1>',['BeginToggle',Ev('index',Ev('@'))]);
+
+ $mw->bind($class,'<B1-Leave>',['AutoScan',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B1-Enter>','CancelRepeat');
+ $mw->bind($class,'<Up>',['UpDown',-1]);
+ $mw->bind($class,'<Shift-Up>',['ExtendUpDown',-1]);
+ $mw->bind($class,'<Down>',['UpDown',1]);
+ $mw->bind($class,'<Shift-Down>',['ExtendUpDown',1]);
+
+ $mw->XscrollBind($class);
+ $mw->PriorNextBind($class);
+
+ $mw->bind($class,'<Control-Home>','Cntrl_Home');
+
+ $mw->bind($class,'<Shift-Control-Home>',['DataExtend',0]);
+ $mw->bind($class,'<Control-End>','Cntrl_End');
+
+ $mw->bind($class,'<Shift-Control-End>',['DataExtend','end']);
+ $class->clipboardOperations($mw,'Copy');
+ $mw->bind($class,'<space>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Select>',['BeginSelect',Ev('index','active')]);
+ $mw->bind($class,'<Control-Shift-space>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Shift-Select>',['BeginExtend',Ev('index','active')]);
+ $mw->bind($class,'<Escape>','Cancel');
+ $mw->bind($class,'<Control-slash>','SelectAll');
+ $mw->bind($class,'<Control-backslash>','Cntrl_backslash');
+ ;
+ # Additional Tk bindings that aren't part of the Motif look and feel:
+ $mw->bind($class,'<2>',['scan','mark',Ev('x'),Ev('y')]);
+ $mw->bind($class,'<B2-Motion>',['scan','dragto',Ev('x'),Ev('y')]);
+
+ $mw->bind($class,'<FocusIn>' , ['tagConfigure','_ACTIVE_TAG', -underline=>1]);
+ $mw->bind($class,'<FocusOut>', ['tagConfigure','_ACTIVE_TAG', -underline=>0]);
+
+ return $class;
+}
+
+#######################################################################
+# set the active element to index
+# "active" is a text "mark" which underlines the marked text.
+#######################################################################
+sub activate
+{
+ my($w,$element)=@_;
+ $element= $w->index($element).'.0';
+ $w->SUPER::tag('remove', '_ACTIVE_TAG', '1.0','end');
+ $w->SUPER::tag('add', '_ACTIVE_TAG',
+ $element.' linestart', $element.' lineend');
+ $w->SUPER::mark('set', 'active', $element);
+}
+
+
+#######################################################################
+# bbox returns a list (x,y,width,height) giving an approximate
+# bounding box of character given by index
+#######################################################################
+sub bbox
+{
+ my($w,$element)=@_;
+ $element=$w->index($element).'.0' unless ($element=~/./);
+ return $w->SUPER::bbox($element);
+}
+
+#######################################################################
+# returns a list of indices of all elements currently selected
+#######################################################################
+sub curselection
+{
+ my ($w)=@_;
+ my @ranges = $w->SUPER::tag('ranges', 'sel');
+ my @selection_list;
+ while (@ranges)
+ {
+ my ($first,$firstcol) = split(/\./,shift(@ranges));
+ my ($last,$lastcol) = split(/\./,shift(@ranges));
+
+ #########################################################################
+ # if previous selection ended on the same line that this selection starts,
+ # then fiddle the numbers so that this line number isnt included twice.
+ #########################################################################
+ if (defined($selection_list[-1]) and ($first == $selection_list[-1]))
+ {
+ $first++; # count this selection starting from the next line.
+ }
+
+ if ($lastcol==0)
+ {
+ $last-=1;
+ }
+
+ #########################################################################
+ # if incrementing $first causes it to be greater than $last,
+ # then do nothing,
+ # else add (first .. last) to list
+ #########################################################################
+ unless ($first>$last)
+ {
+ push(@selection_list, $first .. $last);
+ }
+ }
+ return @selection_list;
+}
+
+
+#######################################################################
+# deletes range of elements from element1 to element2
+# defaults to element1
+#######################################################################
+sub delete
+{
+ my ($w, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ $w->SUPER::delete($element1.'.0' , $element2.'.0 lineend');
+}
+
+#######################################################################
+# deletes range of characters from index1 to index2
+# defaults to index1+1c
+# index is line.char notation.
+#######################################################################
+sub deleteChar
+{
+ my ($w, $index1, $index2)=@_;
+ $index1=$w->index($index1);
+ $index2=$index1.' +1c' unless(defined($index2));
+ $index2=$w->index($index2);
+ $w->SUPER::delete($index1, $index2);
+}
+
+#######################################################################
+# returns as a list contents of elements from $element1 to $element2
+# defaults to element1.
+#######################################################################
+sub get
+{
+ my ($w, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ my @getlist;
+ for(my $i=$element1; $i<=$element2; $i++)
+ {
+ push(@getlist, $w->SUPER::get($i.'.0 linestart', $i.'.0 lineend'));
+ }
+
+ return @getlist;
+}
+
+#######################################################################
+# return text between index1 and index2 which are line.char notation.
+# return value is a single string. index2 defaults to index1+1c
+# index is line.char notation.
+######################################################################
+sub getChar
+{
+ my $w=shift;
+ return $w->SUPER::get(@_);
+}
+
+#######################################################################
+# returns index in number notation
+# this method returns an element number, ie the 5th element.
+#######################################################################
+sub index
+{
+ my ($w,$element)=@_;
+ return undef unless(defined($element));
+ $element .= '.0' unless $element=~/\D/;
+ $element = $w->SUPER::index($element);
+ my($line,$col)=split(/\./,$element);
+ return $line;
+}
+
+#######################################################################
+# returns index in line.char notation
+# this method returns an index specific to a character within an element
+#######################################################################
+sub indexChar
+{
+ my $w=shift;
+ return $w->SUPER::index(@_);
+}
+
+
+#######################################################################
+# inserts specified elements just before element at index
+#######################################################################
+sub insert
+{
+ my $w=shift;
+ my $element=shift;
+ $element=$w->index($element);
+ my $item;
+ while (@_)
+ {
+ $item = shift(@_);
+ $item .= "\n";
+ $w->SUPER::insert($element++.'.0', $item);
+ }
+}
+
+#######################################################################
+# inserts string just before character at index.
+# index is line.char notation.
+#######################################################################
+sub insertChar
+{
+ my $w=shift;
+ $w->SUPER::insert(@_);
+}
+
+
+
+#######################################################################
+# returns index of element nearest to y-coordinate
+#
+# currently not defined
+#######################################################################
+#sub nearest
+#{
+# return undef;
+#}
+
+#######################################################################
+# Sets the selection anchor to element at index
+#######################################################################
+sub selectionAnchor
+{
+ my ($w, $element)=@_;
+ $element=$w->index($element);
+ $w->SUPER::mark('set', 'anchor', $element.'.0');
+}
+
+#######################################################################
+# deselects elements between index1 and index2, inclusive
+#######################################################################
+sub selectionClear
+{
+ my ($w, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ $w->SUPER::tag('remove', 'sel', $element1.'.0', $element2.'.0 lineend +1c');
+}
+
+#######################################################################
+# returns 1 if element at index is selected, 0 otherwise.
+#######################################################################
+sub selectionIncludes
+{
+ my ($w, $element)=@_;
+ $element=$w->index($element);
+ my @list = $w->curselection;
+ my $line;
+ foreach $line (@list)
+ {
+ if ($line == $element) {return 1;}
+ }
+ return 0;
+}
+
+#######################################################################
+# adds all elements between element1 and element2 inclusive to selection
+#######################################################################
+sub selectionSet
+{
+ my ($w, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ $w->SUPER::tag('add', 'sel', $element1.'.0', $element2.'.0 lineend +1c');
+}
+
+#######################################################################
+# for ->selection(option,args) calling convention
+#######################################################################
+sub selection
+{
+# my ($w,$sub)=(shift,"selection".ucfirst(shift));
+# no strict 'refs';
+# # can't use $w->$sub, since it might call overridden method-- bleh
+# &($sub)($w,@_);
+}
+
+
+#######################################################################
+# adjusts the view in window so element at index is completely visible
+#######################################################################
+sub see
+{
+ my ($w, $element)=@_;
+ $element=$w->index($element);
+ $w->SUPER::see($element.'.0');
+}
+
+#######################################################################
+# returns number of elements in listbox
+#######################################################################
+sub size
+{
+ my ($w)=@_;
+ my $element = $w->index('end');
+ # theres a weird thing with the 'end' mark sometimes being on a line
+ # with text, and sometimes being on a line all by itself
+ my ($text) = $w->get($element);
+ if (length($text) == 0)
+ {$element -= 1;}
+ return $element;
+}
+
+
+
+#######################################################################
+# add a tag based on element numbers
+#######################################################################
+sub tagAdd
+{
+ my ($w, $tagName, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+
+ $element2=$element1.' lineend' unless(defined($element2));
+ $element2=$w->index($element2);
+ $element2.='.0 lineend +1c';
+
+ $w->SUPER::tag('add', $tagName, $element1, $element2);
+}
+
+#######################################################################
+# add a tag based on line.char indexes
+#######################################################################
+sub tagAddChar
+{
+ my $w=shift;
+ $w->SUPER::tag('add',@_);
+}
+
+
+#######################################################################
+# remove a tag based on element numbers
+#######################################################################
+sub tagRemove
+{
+ my ($w, $tagName, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+
+ $element2=$element1.' lineend' unless(defined($element2));
+ $element2=$w->index($element2);
+ $element2.='.0 lineend +1c';
+
+ $w->SUPER::tag('remove', 'sel', $element1, $element2);
+}
+
+#######################################################################
+# remove a tag based on line.char indexes
+#######################################################################
+sub tagRemoveChar
+{
+ my $w=shift;
+ $w->SUPER::tag('remove', @_);
+}
+
+
+
+
+#######################################################################
+# perform tagNextRange based on element numbers
+#######################################################################
+sub tagNextRange
+{
+ my ($w, $tagName, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ $element2.='.0 lineend +1c';
+
+ my $index = $w->SUPER::tag('nextrange', 'sel', $element1, $element2);
+ my ($line,$col)=split(/\./,$index);
+ return $line;
+}
+
+#######################################################################
+# perform tagNextRange based on line.char indexes
+#######################################################################
+sub tagNextRangeChar
+{
+ my $w=shift;
+ $w->SUPER::tag('nextrange', @_);
+}
+
+#######################################################################
+# perform tagPrevRange based on element numbers
+#######################################################################
+sub tagPrevRange
+{
+ my ($w, $tagName, $element1, $element2)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+
+ $element2=$element1 unless(defined($element2));
+ $element2=$w->index($element2);
+ $element2.='.0 lineend +1c';
+
+ my $index = $w->SUPER::tag('prevrange', 'sel', $element1, $element2);
+ my ($line,$col)=split(/\./,$index);
+ return $line;
+}
+
+#######################################################################
+# perform tagPrevRange based on line.char indexes
+#######################################################################
+sub tagPrevRangeChar
+{
+ my $w=shift;
+ $w->SUPER::tag('prevrange', @_);
+}
+
+
+
+#######################################################################
+# perform markSet based on element numbers
+#######################################################################
+sub markSet
+{
+ my ($w,$mark,$element1)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+ $w->SUPER::mark('set', $element1,$mark);
+}
+
+#######################################################################
+# perform markSet based on line.char indexes
+#######################################################################
+sub markSetChar
+{
+ my $w=shift;
+ $w->SUPER::mark('set', @_);
+}
+
+#######################################################################
+# perform markNext based on element numbers
+#######################################################################
+sub markNext
+{
+ my ($w,$element1)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+ return $w->SUPER::mark('next', $element1);
+}
+
+#######################################################################
+# perform markNext based on line.char indexes
+#######################################################################
+sub markNextChar
+{
+ my $w=shift;
+ $w->SUPER::mark('next', @_);
+}
+
+
+#######################################################################
+# perform markPrevious based on element numbers
+#######################################################################
+sub markPrevious
+{
+ my ($w,$element1)=@_;
+ $element1=$w->index($element1);
+ $element1.='.0';
+ return $w->SUPER::mark('previous', $element1);
+}
+
+#######################################################################
+# perform markPrevious based on line.char indexes
+#######################################################################
+sub markPreviousChar
+{
+ my $w=shift;
+ $w->SUPER::mark('previous', @_);
+}
+
+
+
+
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat;
+ $w->activate($Ev->xy);
+}
+
+
+sub Cntrl_Home
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate(0);
+ $w->see(0);
+ $w->selectionClear(0,'end');
+ $w->selectionSet(0)
+}
+
+
+sub Cntrl_End
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate('end');
+ $w->see('end');
+ $w->selectionClear(0,'end');
+ $w->selectionSet('end')
+}
+
+
+sub Cntrl_backslash
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if ($w->cget('-selectmode') ne 'browse')
+ {
+ $w->selectionClear(0,'end');
+ }
+}
+
+# BeginSelect --
+#
+# This procedure is typically invoked on button-1 presses. It begins
+# the process of making a selection in the listbox. Its exact behavior
+# depends on the selection mode currently in effect for the listbox;
+# see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginSelect
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'multiple')
+ {
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+ else
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ my @list = ();
+ $w->{'SELECTION_LIST_REF'} = \@list;
+ $w->{'PREVIOUS_ELEMENT'} = $el
+ }
+ $w->focus if ($w->cget('-takefocus'));
+}
+# Motion --
+#
+# This procedure is called to process mouse motion events while
+# button 1 is down. It may move or extend the selection, depending
+# on the listbox's selection mode.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element under the pointer (must be a number).
+sub Motion
+{
+ my $w = shift;
+ my $el = shift;
+ if (defined($w->{'PREVIOUS_ELEMENT'}) && $el == $w->{'PREVIOUS_ELEMENT'})
+ {
+ return;
+ }
+
+ # if no selections, select current
+ if($w->curselection==0)
+ {
+ $w->activate($el);
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ $w->{'PREVIOUS_ELEMENT'}=$el;
+ return;
+ }
+
+ my $anchor = $w->index('anchor');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->{'PREVIOUS_ELEMENT'} = $el;
+ }
+ elsif ($mode eq 'extended')
+ {
+ my $i = $w->{'PREVIOUS_ELEMENT'};
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionSet('anchor',$el)
+ }
+ else
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionClear('anchor',$el)
+ }
+ while ($i < $el && $i < $anchor)
+ {
+ if (Tk::lsearch($w->{'SELECTION_LIST_REF'},$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += 1
+ }
+ while ($i > $el && $i > $anchor)
+ {
+ if (Tk::lsearch($w->{'SELECTION_LIST_REF'},$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i += -1
+ }
+ $w->{'PREVIOUS_ELEMENT'} = $el
+ }
+}
+# BeginExtend --
+#
+# This procedure is typically invoked on shift-button-1 presses. It
+# begins the process of extending a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginExtend
+{
+ my $w = shift;
+ my $el = shift;
+
+ # if no selections, select current
+ if($w->curselection==0)
+ {
+ $w->activate($el);
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ $w->{'PREVIOUS_ELEMENT'}=$el;
+ return;
+ }
+
+ if ($w->cget('-selectmode') eq 'extended' && $w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+}
+# BeginToggle --
+#
+# This procedure is typically invoked on control-button-1 presses. It
+# begins the process of toggling a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginToggle
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended')
+ {
+ my @list = $w->curselection();
+ $w->{'SELECTION_LIST_REF'} = \@list;
+ $w->{'PREVIOUS_ELEMENT'} = $el;
+ $w->selectionAnchor($el);
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+}
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+# y - The y-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll',1,'units')
+ }
+ elsif ($y < 0)
+ {
+ $w->yview('scroll',-1,'units')
+ }
+ elsif ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->Motion($w->index("@" . $x . ',' . $y));
+ $w->RepeatId($w->after(50,'AutoScan',$w,$x,$y));
+}
+# UpDown --
+#
+# Moves the location cursor (active element) up or down by one element,
+# and changes the selection if we're in browse or extended selection
+# mode.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub UpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ my $selectmode = $w->cget('-selectmode');
+ if ($selectmode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ elsif ($selectmode eq 'extended')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->selectionAnchor('active');
+ $w->{'PREVIOUS_ELEMENT'} = $w->index('active');
+ my @list = ();
+ $w->{'SELECTION_LIST_REF'}=\@list;
+ }
+}
+# ExtendUpDown --
+#
+# Does nothing unless we're in extended selection mode; in this
+# case it moves the location cursor (active element) up or down by
+# one element, and extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub ExtendUpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ if ($w->cget('-selectmode') ne 'extended')
+ {
+ return;
+ }
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ $w->Motion($w->index('active'))
+}
+# DataExtend
+#
+# This procedure is called for key-presses such as Shift-KEndData.
+# If the selection mode isn't multiple or extend then it does nothing.
+# Otherwise it moves the active element to el and, if we're in
+# extended mode, extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# el - An integer element number.
+sub DataExtend
+{
+ my $w = shift;
+ my $el = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'extended')
+ {
+ $w->activate($el);
+ $w->see($el);
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->activate($el);
+ $w->see($el)
+ }
+}
+# Cancel
+#
+# This procedure is invoked to cancel an extended selection in
+# progress. If there is an extended selection in progress, it
+# restores all of the items between the active one and the anchor
+# to their previous selection state.
+#
+# Arguments:
+# w - The listbox widget.
+sub Cancel
+{
+ my $w = shift;
+ if ($w->cget('-selectmode') ne 'extended' || !defined $w->{'PREVIOUS_ELEMENT'})
+ {
+ return;
+ }
+ my $first = $w->index('anchor');
+ my $last = $w->{'PREVIOUS_ELEMENT'};
+ if ($first > $last)
+ {
+ ($first,$last)=($last,$first);
+ }
+ $w->selectionClear($first,$last);
+ while ($first <= $last)
+ {
+ if (Tk::lsearch($w->{'SELECTION_LIST_REF'},$first) >= 0)
+ {
+ $w->selectionSet($first)
+ }
+ $first += 1
+ }
+}
+# SelectAll
+#
+# This procedure is invoked to handle the "select all" operation.
+# For single and browse mode, it just selects the active element.
+# Otherwise it selects everything in the widget.
+#
+# Arguments:
+# w - The listbox widget.
+sub SelectAll
+{
+ my $w = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ else
+ {
+ $w->selectionSet(0,'end')
+ }
+}
+
+sub SetList
+{
+ my $w = shift;
+ $w->delete(0,'end');
+ $w->insert('end',@_);
+}
+
+sub deleteSelected
+{
+ my $w = shift;
+ my $i;
+ foreach $i (reverse $w->curselection)
+ {
+ $w->delete($i);
+ }
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ my $element = $w->index('active') || $w->index($w->XEvent->xy);
+ my $str;
+ eval {local $SIG{__DIE__}; $str = $w->clipboardGet };
+ return if $@;
+ foreach (split("\n",$str))
+ {
+ $w->insert($element++,$_);
+ }
+}
+
+sub getSelected
+{
+ my ($w) = @_;
+ my $i;
+ my (@result) = ();
+ foreach $i ($w->curselection)
+ {
+ push(@result,$w->get($i));
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/TextUndo.pm b/Master/tlpkg/tlperl/lib/Tk/TextUndo.pm
new file mode 100644
index 00000000000..066e4027a3a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TextUndo.pm
@@ -0,0 +1,1022 @@
+# Copyright (c) 1995-2004 Nick Ing-Simmons.
+# Copyright (c) 1999 Greg London.
+# All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::TextUndo;
+
+use vars qw($VERSION $DoDebug);
+$VERSION = '4.013'; # $Id: //depot/Tkutf8/Tk/TextUndo.pm#15 $
+$DoDebug = 0;
+
+use Tk qw (Ev);
+use AutoLoader;
+
+use Tk::Text ();
+use base qw(Tk::Text);
+
+Construct Tk::Widget 'TextUndo';
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<<Undo>>','undo');
+ $mw->bind($class,'<<Redo>>','redo');
+
+ return $class->SUPER::ClassInit($mw);
+}
+
+
+####################################################################
+# methods for manipulating the undo and redo stacks.
+# no one should directly access the stacks except for these methods.
+# everyone else must access the stacks through these methods.
+####################################################################
+sub ResetUndo
+{
+ my ($w) = @_;
+ delete $w->{UNDO};
+ delete $w->{REDO};
+}
+
+sub PushUndo
+{
+ my $w = shift;
+ $w->{UNDO} = [] unless (exists $w->{UNDO});
+ push(@{$w->{UNDO}},@_);
+}
+
+sub PushRedo
+{
+ my $w = shift;
+ $w->{REDO} = [] unless (exists $w->{REDO});
+ push(@{$w->{REDO}},@_);
+}
+
+sub PopUndo
+{
+ my ($w) = @_;
+ return pop(@{$w->{UNDO}}) if defined $w->{UNDO};
+ return undef;
+}
+
+sub PopRedo
+{
+ my ($w) = @_;
+ return pop(@{$w->{REDO}}) if defined $w->{REDO};
+ return undef;
+}
+
+sub ShiftRedo
+{
+ my ($w) = @_;
+ return shift(@{$w->{REDO}}) if defined $w->{REDO};
+ return undef;
+}
+
+sub numberChanges
+{
+ my ($w) = @_;
+ return 0 unless (exists $w->{'UNDO'}) and (defined($w->{'UNDO'}));
+ return scalar(@{$w->{'UNDO'}});
+}
+
+sub SizeRedo
+{
+ my ($w) = @_;
+ return 0 unless exists $w->{'REDO'};
+ return scalar(@{$w->{'REDO'}});
+}
+
+sub getUndoAtIndex
+{
+ my ($w,$index) = @_;
+ return undef unless (exists $w->{UNDO});
+ return $w->{UNDO}[$index];
+}
+
+sub getRedoAtIndex
+{
+ my ($w,$index) = @_;
+ return undef unless (exists $w->{REDO});
+ return $w->{REDO}[$index];
+}
+
+####################################################################
+# type "hello there"
+# hello there_
+# hit UNDO
+# hello_
+# type "out"
+# hello out_
+# pressing REDO should not do anything
+# pressing UNDO should make "out" disappear.
+# pressing UNDO should make "there" reappear.
+# pressing UNDO should make "there" disappear.
+# pressing UNDO should make "hello" disappear.
+#
+# if there is anything in REDO stack and
+# the OperationMode is normal, (i.e. not in the middle of an ->undo or ->redo)
+# then before performing the current operation
+# take the REDO stack, and put it on UNDO stack
+# such that UNDO/REDO keystrokes will still make logical sense.
+#
+# call this method at the beginning of any overloaded method
+# which adds operations to the undo or redo stacks.
+# it will perform all the magic needed to handle the redo stack.
+####################################################################
+sub CheckForRedoShuffle
+{
+ my ($w) = @_;
+ my $size_redo = $w->SizeRedo;
+ return unless $size_redo && ($w->OperationMode eq 'normal');
+ # local $DoDebug = 1;
+
+ # we are about to 'do' something new, but have something in REDO stack.
+ # The REDOs may conflict with new ops, but we want to preserve them.
+ # So convert them to UNDOs - effectively do them and their inverses
+ # so net effect on the widget is no-change.
+
+ $w->dump_array('StartShuffle');
+
+ $w->OperationMode('REDO_MAGIC');
+ $w->MarkSelectionsSavePositions;
+
+ my @pvtundo;
+
+ # go through REDO array from end downto 0, i.e. pseudo pop
+ # then pretend we did 'redo' get inverse, and push into UNDO array
+ # and 'do' the op.
+ for (my $i=$size_redo-1; $i>=0 ; $i--)
+ {
+ my ($op,@args) = @{$w->getRedoAtIndex($i)};
+ my $op_undo = $op .'_UNDO';
+ # save the inverse of the op on the UNDO array
+ # do this before the re-doing the op - after a 'delete' we cannot see
+ # text we deleted!
+ my $undo = $w->$op_undo(@args);
+ $w->PushUndo($undo);
+ # We must 'do' the operation now so if this is an insert
+ # the text and tags are available for inspection in delete_UNDO, and
+ # indices reflect changes.
+ $w->$op(@args);
+ # Save the undo that will reverse what we just did - it is
+ # on the undo stack but will be tricky to find
+ push(@pvtundo,$undo);
+ }
+
+ # Now shift each item off REDO array until empty
+ # push each item onto UNDO array - this reverses the order
+ # and we are not altering buffer so we cannot look in the
+ # buffer to compute inverses - which is why we saved them above
+
+ while ($w->SizeRedo)
+ {
+ my $ref = $w->ShiftRedo;
+ $w->PushUndo($ref);
+ }
+
+ # Finally undo whatever we did to compensate for doing it
+ # and get buffer back to state it was before we started.
+ while (@pvtundo)
+ {
+ my ($op,@args) = @{pop(@pvtundo)};
+ $w->$op(@args);
+ }
+
+ $w->RestoreSelectionsMarkedSaved;
+ $w->OperationMode('normal');
+ $w->dump_array('EndShuffle');
+}
+
+# sets/returns undo/redo/normal operation mode
+sub OperationMode
+{
+ my ($w,$mode) = @_;
+ $w->{'OPERATION_MODE'} = $mode if (@_ > 1);
+ $w->{'OPERATION_MODE'} = 'normal' unless exists($w->{'OPERATION_MODE'});
+ return $w->{'OPERATION_MODE'};
+}
+
+####################################################################
+# dump the undo and redo stacks to the screen.
+# used for debug purposes.
+sub dump_array
+{
+ return unless $DoDebug;
+ my ($w,$why) = @_;
+ print "At $why:\n";
+ foreach my $key ('UNDO','REDO')
+ {
+ if (defined($w->{$key}))
+ {
+ print " $key array is:\n";
+ my $array = $w->{$key};
+ foreach my $ref (@$array)
+ {
+ my @items;
+ foreach my $item (@$ref)
+ {
+ my $loc = $item;
+ $loc =~ tr/\n/\^/;
+ push(@items,$loc);
+ }
+ print " [",join(',',@items),"]\n";
+ }
+ }
+ }
+ print "\n";
+}
+
+
+############################################################
+############################################################
+# these are a group of methods used to indicate the start and end of
+# several operations that are to be undo/redo 'ed in a single step.
+#
+# in other words, "glob" a bunch of operations together.
+#
+# for example, a search and replace should be undone with a single
+# keystroke, rather than one keypress undoes the insert and another
+# undoes the delete.
+# all other methods should access the count via these methods.
+# no other method should directly access the {GLOB_COUNT} value directly
+#############################################################
+#############################################################
+
+sub AddOperation
+{
+ my ($w,@operation) = @_;
+ my $mode = $w->OperationMode;
+
+ if ($mode eq 'normal')
+ {$w->PushUndo([@operation]);}
+ elsif ($mode eq 'undo')
+ {$w->PushRedo([@operation]);}
+ elsif ($mode eq 'redo')
+ {$w->PushUndo([@operation]);}
+ else
+ {die "invalid destination '$mode', must be one of 'normal', 'undo' or 'redo'";}
+}
+
+sub addGlobStart # add it to end of undo list
+{
+ my ($w, $who) = @_;
+ unless (defined($who)) {$who = (caller(1))[3];}
+ $w->CheckForRedoShuffle;
+ $w->dump_array('Start'.$who);
+ $w->AddOperation('GlobStart', $who) ;
+}
+
+sub addGlobEnd # add it to end of undo list
+{
+ my ($w, $who) = @_;
+ unless (defined($who)) {$who = (caller(1))[3];}
+ my $topundo = $w->getUndoAtIndex(-1);
+ if ($topundo->[0] eq 'GlobStart')
+ {
+ $w->PopUndo;
+ }
+ else
+ {
+ my $nxtundo = $w->getUndoAtIndex(-2);
+ if ($nxtundo->[0] eq 'GlobStart')
+ {
+ $w->PopUndo;
+ $w->PopUndo;
+ $w->PushUndo($topundo);
+ }
+ else
+ {
+ $w->AddOperation('GlobEnd', $who);
+ }
+ }
+ $w->dump_array('End'.$who);
+}
+
+sub GlobStart
+{
+ my ($w, $who) = @_;
+ unless (defined($w->{GLOB_COUNT})) {$w->{GLOB_COUNT}=0;}
+ if ($w->OperationMode eq 'normal')
+ {
+ $w->PushUndo($w->GlobStart_UNDO($who));
+ }
+ $w->{GLOB_COUNT} = $w->{GLOB_COUNT} + 1;
+}
+
+sub GlobStart_UNDO
+{
+ my ($w, $who) = @_;
+ $who = 'GlobEnd_UNDO' unless defined($who);
+ return ['GlobEnd',$who];
+}
+
+sub GlobEnd
+{
+ my ($w, $who) = @_;
+ unless (defined($w->{GLOB_COUNT})) {$w->{GLOB_COUNT}=0;}
+ if ($w->OperationMode eq 'normal')
+ {
+ $w->PushUndo($w->GlobStart_UNDO($who));
+ }
+ $w->{GLOB_COUNT} = $w->{GLOB_COUNT} - 1;
+}
+
+sub GlobEnd_UNDO
+{
+ my ($w, $who) = @_;
+ $who = 'GlobStart_UNDO' unless defined($who);
+ return ['GlobStart',$who];
+}
+
+sub GlobCount
+{
+ my ($w,$count) = @_;
+ unless ( exists($w->{'GLOB_COUNT'}) and defined($w->{'GLOB_COUNT'}) )
+ {
+ $w->{'GLOB_COUNT'}=0;
+ }
+ if (defined($count))
+ {
+ $w->{'GLOB_COUNT'}=$count;
+ }
+ return $w->{'GLOB_COUNT'};
+}
+
+####################################################################
+# two methods should be used by applications to access undo and redo
+# capability, namely, $w->undo; and $w->redo; methods.
+# these methods undo and redo the last operation, respectively.
+####################################################################
+sub undo
+{
+ my ($w) = @_;
+ $w->dump_array('Start'.'undo');
+ unless ($w->numberChanges) {$w->bell; return;} # beep and return if empty
+ $w->GlobCount(0); #initialize to zero
+ $w->OperationMode('undo');
+ do
+ {
+ my ($op,@args) = @{$w->PopUndo}; # get undo operation, convert ref to array
+ my $undo_op = $op .'_UNDO';
+ $w->PushRedo($w->$undo_op(@args)); # find out how to undo it
+ $w->$op(@args); # do the operation
+ } while($w->GlobCount and $w->numberChanges);
+ $w->OperationMode('normal');
+ $w->dump_array('End'.'undo');
+}
+
+sub redo
+{
+ my ($w) = @_;
+ unless ($w->SizeRedo) {$w->bell; return;} # beep and return if empty
+ $w->OperationMode('redo');
+ $w->GlobCount(0); #initialize to zero
+ do
+ {
+ my ($op,@args) = @{$w->PopRedo}; # get op from redo stack, convert to list
+ my $undo_op = $op .'_UNDO';
+ $w->PushUndo($w->$undo_op(@args)); # figure out how to undo operation
+ $w->$op(@args); # do the operation
+ } while($w->GlobCount and $w->SizeRedo);
+ $w->OperationMode('normal');
+}
+
+
+############################################################
+# override low level subroutines so that they work with UNDO/REDO capability.
+# every overridden subroutine must also have a corresponding *_UNDO subroutine.
+# the *_UNDO method takes the same parameters in and returns an array reference
+# which is how to undo itself.
+# note that the *_UNDO must receive absolute indexes.
+# ->insert receives 'markname' as the starting index.
+# ->insert must convert 'markname' using $absindex=$w->index('markname')
+# and pass $absindex to ->insert_UNDO.
+############################################################
+
+sub insert
+{
+ my $w = shift;
+ $w->markSet('insert', $w->index(shift) );
+ while(@_)
+ {
+ my $index1 = $w->index('insert');
+ my $string = shift;
+ my $taglist_ref = shift if @_;
+
+ if ($w->OperationMode eq 'normal')
+ {
+ $w->CheckForRedoShuffle;
+ $w->PushUndo($w->insert_UNDO($index1,$string,$taglist_ref));
+ }
+ $w->markSet('notepos' => $index1);
+ $w->SUPER::insert($index1,$string,$taglist_ref);
+ $w->markSet('insert', $w->index('notepos'));
+ }
+}
+
+sub insert_UNDO
+{
+ my $w = shift;
+ my $index = shift;
+ my $string = '';
+ # This possible call: ->insert (index, string, tag, string, tag...);
+ # if more than one string, keep reading strings in (discarding tags)
+ # until all strings are read in and $string contains entire text inserted.
+ while (@_)
+ {
+ $string .= shift;
+ my $tags = shift if (@_);
+ }
+ # calculate index
+ # possible things to insert:
+ # carriage return
+ # single character (not CR)
+ # single line of characters (not ending in CR)
+ # single line of characters ending with a CR
+ # multi-line characters. last line does not end with CR
+ # multi-line characters, last line does end with CR.
+ my ($line,$col) = split(/\./,$index);
+ if ($string =~ /\n(.*)$/)
+ {
+ $line += $string =~ tr/\n/\n/;
+ $col = length($1);
+ }
+ else
+ {
+ $col += length($string);
+ }
+ return ['delete', $index, $line.'.'.$col];
+}
+
+sub delete
+{
+ my ($w, $start, $stop) = @_;
+ unless(defined($stop))
+ { $stop = $start .'+1c'; }
+ my $index1 = $w->index($start);
+ my $index2 = $w->index($stop);
+ if ($w->OperationMode eq 'normal')
+ {
+ $w->CheckForRedoShuffle;
+ $w->PushUndo($w->delete_UNDO($index1,$index2));
+ }
+ $w->SUPER::delete($index1,$index2);
+ # why call SetCursor - it has side effects
+ # which cause a whole slew if save/restore hassles ?
+ $w->SetCursor($index1);
+}
+
+sub delete_UNDO
+{
+ my ($w, $index1, $index2) = @_;
+ my %tags;
+ my @result = ( 'insert' => $index1 );
+ my $str = '';
+
+ ###############################################################
+ # get tags in range and return them in a format that
+ # can be inserted.
+ # $text->insert('1.0', $string1, [tag1,tag2], $string2, [tag2, tag3]);
+ # note, have to break tags up into sequential order
+ # in reference to _all_ tags.
+ ###############################################################
+
+ $w->dump('-text','-tag', -command => sub {
+ my ($kind,$value,$posn) = @_;
+ if ($kind eq 'text')
+ {
+ $str .= $value;
+ }
+ else
+ {
+ push(@result,$str,[keys %tags]) if (length $str);
+ $str = '';
+ if ($kind eq 'tagon')
+ {
+ $tags{$value} = 1;
+ }
+ elsif ($kind eq 'tagoff')
+ {
+ delete $tags{$value};
+ }
+ }
+ }, $index1, $index2);
+ push(@result,$str,[keys %tags]) if (length $str);
+ return \@result;
+}
+
+############################################################
+# override subroutines which are collections of low level
+# routines executed in sequence.
+# wrap a globstart and globend around the SUPER:: version of routine.
+############################################################
+
+sub ReplaceSelectionsWith
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::ReplaceSelectionsWith(@_);
+ $w->addGlobEnd;
+}
+
+sub FindAndReplaceAll
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::FindAndReplaceAll(@_);
+ $w->addGlobEnd;
+}
+
+sub clipboardCut
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::clipboardCut(@_);
+ $w->addGlobEnd;
+}
+
+sub clipboardPaste
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::clipboardPaste(@_);
+ $w->addGlobEnd;
+}
+
+sub clipboardColumnCut
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::clipboardColumnCut(@_);
+ $w->addGlobEnd;
+}
+
+sub clipboardColumnPaste
+{
+ my $w = shift;
+ $w->addGlobStart;
+ $w->SUPER::clipboardColumnPaste(@_);
+ $w->addGlobEnd;
+}
+
+# Greg: this method is more tightly coupled to the base class
+# than I would prefer, but I know of no other way to do it.
+
+sub Insert
+{
+ my ($w,$char)=@_;
+ return if $char eq '';
+ $w->addGlobStart;
+ $w->SUPER::Insert($char);
+ $w->addGlobEnd;
+ $w->see('insert');
+}
+
+
+sub InsertKeypress
+{
+ my ($w,$char)=@_;
+ return if $char eq '';
+ if ($char =~ /^\S$/ and !$w->OverstrikeMode and !$w->tagRanges('sel'))
+ {
+ my $index = $w->index('insert');
+ my $undo_item = $w->getUndoAtIndex(-1);
+ if (defined($undo_item) &&
+ ($undo_item->[0] eq 'delete') &&
+ ($undo_item->[2] == $index)
+ )
+ {
+ $w->SUPER::insert($index,$char);
+ $undo_item->[2] = $w->index('insert');
+ return;
+ }
+ }
+ $w->addGlobStart;
+ $w->SUPER::InsertKeypress($char);
+ $w->addGlobEnd;
+}
+
+############################################################
+sub TextUndoFileProgress
+{
+ my ($w,$action,$filename,$count,$val,$total) = @_;
+ return unless(defined($filename) and defined($count));
+
+ my $popup = $w->{'FILE_PROGRESS_POP_UP'};
+ unless (defined($popup))
+ {
+ $w->update;
+ $popup = $w->Toplevel(-title => "File Progress",-popover => $w);
+ $popup->transient($w->toplevel);
+ $popup->withdraw;
+ $popup->resizable('no','no');
+ $popup->Label(-textvariable => \$popup->{ACTION})->pack;
+ $popup->Label(-textvariable => \$popup->{FILENAME})->pack;
+ $popup->Label(-textvariable => \$popup->{COUNT})->pack;
+ my $f = $popup->Frame(-height => 10, -border => 2, -relief => 'sunken')->pack(-fill => 'x');
+ my $i = $f->Frame(-background => 'blue', -relief => 'raised', -border => 2);
+ $w->{'FILE_PROGRESS_POP_UP'} = $popup;
+ $popup->{PROGBAR} = $i;
+ }
+ $popup->{ACTION} = $action;
+ $popup->{COUNT} = "lines: $count";
+ $popup->{FILENAME} = "Filename: $filename";
+ if (defined($val) && defined($total) && $total != 0)
+ {
+ $popup->{PROGBAR}->place('-x' => 0, '-y' => 0, -relheight => 1, -relwidth => $val/$total);
+ }
+ else
+ {
+ $popup->{PROGBAR}->placeForget;
+ }
+
+ $popup->idletasks;
+ unless ($popup->viewable)
+ {
+ $w->idletasks;
+ $w->toplevel->deiconify unless $w->viewable;
+ $popup->Popup;
+ }
+ $popup->update;
+ return $popup;
+}
+
+sub FileName
+{
+ my ($w,$filename) = @_;
+ if (@_ > 1)
+ {
+ $w->{'FILENAME'}=$filename;
+ }
+ return $w->{'FILENAME'};
+}
+
+sub PerlIO_layers
+{
+ my ($w,$layers) = @_;
+ $w->{PERLIO_LAYERS} = $layers if @_ > 1;
+ return $w->{PERLIO_LAYERS} || '' ;
+}
+
+sub ConfirmDiscard
+{
+ my ($w)=@_;
+ if ($w->numberChanges)
+ {
+ my $ans = $w->messageBox(-icon => 'warning',
+ -type => 'YesNoCancel', -default => 'Yes',
+ -message =>
+"The text has been modified without being saved.
+Save edits?");
+ return 0 if $ans eq 'Cancel';
+ return 0 if ($ans eq 'Yes' && !$w->Save);
+ }
+ return 1;
+}
+
+################################################################################
+# if the file has been modified since being saved, a pop up window will be
+# created, asking the user to confirm whether or not to exit.
+# this allows the user to return to the application and save the file.
+# the code would look something like this:
+#
+# if ($w->user_wants_to_exit)
+# {$w->ConfirmExit;}
+#
+# it is also possible to trap attempts to delete the main window.
+# this allows the ->ConfirmExit method to be called when the main window
+# is attempted to be deleted.
+#
+# $mw->protocol('WM_DELETE_WINDOW'=>
+# sub{$w->ConfirmExit;});
+#
+# finally, it might be desirable to trap Control-C signals at the
+# application level so that ->ConfirmExit is also called.
+#
+# $SIG{INT}= sub{$w->ConfirmExit;};
+#
+################################################################################
+
+sub ConfirmExit
+{
+ my ($w) = @_;
+ $w->toplevel->destroy if $w->ConfirmDiscard;
+}
+
+sub Save
+{
+ my ($w,$filename) = @_;
+ $filename = $w->FileName unless defined $filename;
+ return $w->FileSaveAsPopup unless defined $filename;
+ my $layers = $w->PerlIO_layers;
+ if (open(my $file,">$layers",$filename))
+ {
+ my $status;
+ my $count=0;
+ my $index = '1.0';
+ my $progress;
+ my ($lines) = $w->index('end - 1 chars') =~ /^(\d+)\./;
+ while ($w->compare($index,'<','end'))
+ {
+# my $end = $w->index("$index + 1024 chars");
+ my $end = $w->index("$index lineend +1c");
+ print $file $w->get($index,$end);
+ $index = $end;
+ if (($count++%1000) == 0)
+ {
+ $progress = $w->TextUndoFileProgress (Saving => $filename,$count,$count,$lines);
+ }
+ }
+ $progress->withdraw if defined $progress;
+ if (close($file))
+ {
+ $w->ResetUndo;
+ $w->FileName($filename);
+ return 1;
+ }
+ }
+ else
+ {
+ $w->BackTrace("Cannot open $filename:$!");
+ }
+ return 0;
+}
+
+sub Load
+{
+ my ($w,$filename) = @_;
+ $filename = $w->FileName unless (defined($filename));
+ return 0 unless defined $filename;
+ my $layers = $w->PerlIO_layers;
+ if (open(my $file,"<$layers",$filename))
+ {
+ $w->MainWindow->Busy;
+ $w->EmptyDocument;
+ my $count=1;
+ my $progress;
+ while (<$file>)
+ {
+ $w->SUPER::insert('end',$_);
+ if (($count++%1000) == 0)
+ {
+ $progress = $w->TextUndoFileProgress (Loading => $filename,
+ $count,tell($file),-s $filename);
+ }
+ }
+ close($file);
+ $progress->withdraw if defined $progress;
+ $w->markSet('insert' => '1.0');
+ $w->FileName($filename);
+ $w->MainWindow->Unbusy;
+ }
+ else
+ {
+ $w->BackTrace("Cannot open $filename:$!");
+ }
+}
+
+sub IncludeFile
+{
+ my ($w,$filename) = @_;
+ unless (defined($filename))
+ {$w->BackTrace("filename not specified"); return;}
+ my $layers = $w->PerlIO_layers;
+ if (open(my $file,"<$layers",$filename))
+ {
+ $w->Busy;
+ my $count=1;
+ $w->addGlobStart;
+ my $progress;
+ while (<$file>)
+ {
+ $w->insert('insert',$_);
+ if (($count++%1000) == 0)
+ {
+ $progress = $w->TextUndoFileProgress(Including => $filename,
+ $count,tell($file),-s $filename);
+ }
+ }
+ $progress->withdraw if defined $progress;
+ $w->addGlobEnd;
+ close($file);
+ $w->Unbusy;
+ }
+ else
+ {
+ $w->BackTrace("Cannot open $filename:$!");
+ }
+}
+
+# clear document without pushing it into UNDO array, (use SUPER::delete)
+# (using plain delete(1.0,end) on a really big document fills up the undo array)
+# and then clear the Undo and Redo stacks.
+sub EmptyDocument
+{
+ my ($w) = @_;
+ $w->SUPER::delete('1.0','end');
+ $w->ResetUndo;
+ $w->FileName(undef);
+}
+
+sub ConfirmEmptyDocument
+{
+ my ($w)=@_;
+ $w->EmptyDocument if $w->ConfirmDiscard;
+}
+
+sub FileMenuItems
+{
+ my ($w) = @_;
+ return [
+ ["command"=>'~Open', -command => [$w => 'FileLoadPopup']],
+ ["command"=>'~Save', -command => [$w => 'Save' ]],
+ ["command"=>'Save ~As', -command => [$w => 'FileSaveAsPopup']],
+ ["command"=>'~Include', -command => [$w => 'IncludeFilePopup']],
+ ["command"=>'~Clear', -command => [$w => 'ConfirmEmptyDocument']],
+ "-",@{$w->SUPER::FileMenuItems}
+ ]
+}
+
+sub EditMenuItems
+{
+ my ($w) = @_;
+
+ return [
+ ["command"=>'Undo', -command => [$w => 'undo']],
+ ["command"=>'Redo', -command => [$w => 'redo']],
+ "-",@{$w->SUPER::EditMenuItems}
+ ];
+}
+
+sub CreateFileSelect
+{
+ my $w = shift;
+ my $k = shift;
+ my $name = $w->FileName;
+ my @types = (['All Files', '*']);
+ my $dir = undef;
+ if (defined $name)
+ {
+ require File::Basename;
+ my $sfx;
+ ($name,$dir,$sfx) = File::Basename::fileparse($name,'\..*');
+ #
+ # it should never happen where we have a file suffix and
+ # no file name... but fileparse() screws this up with dotfiles.
+ #
+ if (length($sfx) && !length($name)) { ($name, $sfx) = ($sfx, $name) }
+
+ if (defined($sfx) && length($sfx))
+ {
+ unshift(@types,['Similar Files',[$sfx]]);
+ $name .= $sfx;
+ }
+ }
+ return $w->$k(-initialdir => $dir, -initialfile => $name,
+ -filetypes => \@types, @_);
+}
+
+sub FileLoadPopup
+{
+ my ($w)=@_;
+ my $name = $w->CreateFileSelect('getOpenFile',-title => 'File Load');
+ return $w->Load($name) if defined($name) and length($name);
+ return 0;
+}
+
+sub IncludeFilePopup
+{
+ my ($w)=@_;
+ my $name = $w->CreateFileSelect('getOpenFile',-title => 'File Include');
+ return $w->IncludeFile($name) if defined($name) and length($name);
+ return 0;
+}
+
+sub FileSaveAsPopup
+{
+ my ($w)=@_;
+ my $name = $w->CreateFileSelect('getSaveFile',-title => 'File Save As');
+ return $w->Save($name) if defined($name) and length($name);
+ return 0;
+}
+
+
+sub MarkSelectionsSavePositions
+{
+ my ($w)=@_;
+ $w->markSet('MarkInsertSavePosition','insert');
+ my @ranges = $w->tagRanges('sel');
+ my $i = 0;
+ while (@ranges)
+ {
+ my ($start,$end) = splice(@ranges,0,2);
+ $w->markSet( 'MarkSelectionsSavePositions_'.++$i, $start);
+ $w->markSet( 'MarkSelectionsSavePositions_'.++$i, $end);
+ $w->tagRemove('sel',$start,$end);
+ }
+}
+
+sub RestoreSelectionsMarkedSaved
+{
+ my ($w)=@_;
+ my $i = 1;
+ my %mark_hash;
+ foreach my $mark ($w->markNames)
+ {
+ $mark_hash{$mark}=1;
+ }
+ while(1)
+ {
+ my $markstart = 'MarkSelectionsSavePositions_'.$i++;
+ last unless(exists($mark_hash{$markstart}));
+ my $indexstart = $w->index($markstart);
+ my $markend = 'MarkSelectionsSavePositions_'.$i++;
+ last unless(exists($mark_hash{$markend}));
+ my $indexend = $w->index($markend);
+ $w->tagAdd('sel',$indexstart, $indexend);
+ $w->markUnset($markstart, $markend);
+ }
+ $w->markSet('insert','MarkInsertSavePosition');
+}
+
+####################################################################
+# selected lines may be discontinous sequence.
+sub GetMarkedSelectedLineNumbers
+{
+ my ($w) = @_;
+
+ my $i = 1;
+ my %mark_hash;
+ my @ranges;
+ foreach my $mark ($w->markNames)
+ {
+ $mark_hash{$mark}=1;
+ }
+
+ while(1)
+ {
+ my $markstart = 'MarkSelectionsSavePositions_'.$i++;
+ last unless(exists($mark_hash{$markstart}));
+ my $indexstart = $w->index($markstart);
+ my $markend = 'MarkSelectionsSavePositions_'.$i++;
+ last unless(exists($mark_hash{$markend}));
+ my $indexend = $w->index($markend);
+
+ push(@ranges, $indexstart, $indexend);
+ }
+
+ my @selection_list;
+ while (@ranges)
+ {
+ my ($first) = split(/\./,shift(@ranges));
+ my ($last) = split(/\./,shift(@ranges));
+ # if previous selection ended on the same line that this selection starts,
+ # then fiddle the numbers so that this line number isnt included twice.
+ if (defined($selection_list[-1]) and ($first == $selection_list[-1]))
+ {
+ # if this selection ends on the same line its starts, then skip this sel
+ next if ($first == $last);
+ $first++; # count this selection starting from the next line.
+ }
+ push(@selection_list, $first .. $last);
+ }
+ return @selection_list;
+}
+
+sub insertStringAtStartOfSelectedLines
+{
+ my ($w,$insert_string)=@_;
+ $w->addGlobStart;
+ $w->MarkSelectionsSavePositions;
+ foreach my $line ($w->GetMarkedSelectedLineNumbers)
+ {
+ $w->insert($line.'.0', $insert_string);
+ }
+ $w->RestoreSelectionsMarkedSaved;
+ $w->addGlobEnd;
+}
+
+sub deleteStringAtStartOfSelectedLines
+{
+ my ($w,$insert_string)=@_;
+ $w->addGlobStart;
+ $w->MarkSelectionsSavePositions;
+ my $length = length($insert_string);
+ foreach my $line ($w->GetMarkedSelectedLineNumbers)
+ {
+ my $start = $line.'.0';
+ my $end = $line.'.'.$length;
+ my $current_text = $w->get($start, $end);
+ next unless ($current_text eq $insert_string);
+ $w->delete($start, $end);
+ }
+ $w->RestoreSelectionsMarkedSaved;
+ $w->addGlobEnd;
+}
+
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Tiler.pm b/Master/tlpkg/tlperl/lib/Tk/Tiler.pm
new file mode 100644
index 00000000000..1256612f801
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Tiler.pm
@@ -0,0 +1,203 @@
+# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+# An example of a geometry manager "widget" in perl
+package Tk::Tiler;
+require Tk;
+require Tk::Frame;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #12 $ =~ /\D(\d+)\s*$/;
+
+use base qw(Tk::Frame);
+
+Construct Tk::Widget 'Tiler';
+sub Tk::Widget::ScrlTiler { shift->Scrolled('Tiler' => @_) }
+
+use Tk::Pretty;
+
+sub FocusChildren
+{
+ return (wantarray) ? () : 0;
+}
+
+sub Populate
+{
+ my ($obj,$args) = @_;
+ $obj->SUPER::Populate($args);
+ $obj->{Slaves} = [];
+ $obj->{LayoutPending} = 0;
+ $obj->{Start} = 0;
+ $obj->{Sw} = 0;
+ $obj->{Sh} = 0;
+ $obj->ConfigSpecs('-takefocus' => ['SELF', 'takeFocus','TakeFocus',1],
+ '-highlightthickness' => ['SELF', 'highlightThickness','HighlightThickness',2],
+ '-yscrollcommand' => ['CALLBACK',undef,undef,undef],
+ '-columns' => ['PASSIVE','columns','Columns',5],
+ '-rows' => ['PASSIVE','rows','Rows',10]
+ );
+ return $obj;
+}
+
+sub change_size
+{
+ my ($w) = shift;
+ my $r = $w->cget('-rows');
+ my $c = $w->cget('-columns');
+ my $bw = $w->cget(-highlightthickness);
+ if (defined $r && defined $c)
+ {
+ $w->GeometryRequest($c*$w->{Sw}+2*$bw,$r*$w->{Sh}+2*$bw);
+ }
+}
+
+sub Layout
+{
+ my $m = shift;
+ my $bw = $m->cget(-highlightthickness);
+ my $why = $m->{LayoutPending};
+ $m->{LayoutPending} = 0;
+ my $W = $m->Width;
+ my $H = $m->Height;
+ my $w = $m->{Sw} || 1; # max width of slave
+ my $h = $m->{Sh} || 1; # max height of slave
+ my $x = $bw;
+ my $y = $bw;
+ my $start = 0;
+ # Set size and position of slaves
+ my $rows = $m->{Rows} = int(($H-2*$bw)/$h) || 1;
+ my $cols = $m->{Cols} = int(($W-2*$bw)/$w) || 1;
+ my $need = $m->{Need} = int( (@{$m->{Slaves}}+$cols-1)/$cols );
+ $m->{Start} = ($need - $rows) if ($m->{Start} + $rows > $need);
+
+ $m->{Start} = 0 if ($m->{Start} < 0);
+ my $row = 0;
+ my @posn = ();
+ my $s;
+ foreach $s (@{$m->{Slaves}})
+ {
+ if ($row < $m->{Start})
+ {
+ $s->UnmapWindow;
+ $x += $w;
+ if ($x+$w+$bw > $W)
+ {
+ $x = $bw;
+ $row++;
+ }
+ }
+ elsif ($y+$h+$bw > $H)
+ {
+ $s->UnmapWindow;
+ $s->ResizeWindow($w,$h) if ($why & 1);
+ }
+ else
+ {
+ push(@posn,[$s,$x,$y]);
+ $x += $w;
+ if ($x+$w+$bw > $W)
+ {
+ $x = $bw;
+ $y += $h;
+ $row++;
+ }
+ }
+ $s->ResizeWindow($w,$h) if ($why & 1);
+ }
+ $row++ if ($x > $bw);
+ if (defined $m->{Prev} && $m->{Prev} > $m->{Start})
+ {
+ @posn = reverse(@posn);
+ }
+ while (@posn)
+ {
+ my $posn = shift(@posn);
+ my ($s,$x,$y) = (@$posn);
+ $s->MoveWindow($x,$y);
+ $s->MapWindow;
+ }
+ $m->{Prev} = $m->{Start};
+ $m->Callback(-yscrollcommand => $m->{Start}/$need,$row/$need) if $need;
+}
+
+sub QueueLayout
+{
+ my ($m,$why) = @_;
+ $m->afterIdle(['Layout',$m]) unless ($m->{LayoutPending});
+ $m->{LayoutPending} |= $why;
+}
+
+sub SlaveGeometryRequest
+{
+ my ($m,$s) = @_;
+ my $sw = $s->ReqWidth;
+ my $sh = $s->ReqHeight;
+ my $sz = 0;
+ if ($sw > $m->{Sw})
+ {
+ $m->{Sw} = $sw;
+ $m->QueueLayout(1);
+ $sz++;
+ }
+ if ($sh > $m->{Sh})
+ {
+ $m->{Sh} = $sh;
+ $m->QueueLayout(1);
+ $sz++;
+ }
+ $m->change_size if ($sz);
+}
+
+sub LostSlave
+{
+ my ($m,$s) = @_;
+ @{$m->{Slaves}} = grep($_ != $s,@{$m->{Slaves}});
+ $m->QueueLayout(2);
+}
+
+sub Manage
+{
+ my $m = shift;
+ my $s;
+ foreach $s (@_)
+ {
+ $m->ManageGeometry($s);
+ push(@{$m->{Slaves}},$s);
+ $m->SlaveGeometryRequest($s);
+ }
+ $m->QueueLayout(2 | 1);
+}
+
+sub moveto
+ {
+ my ($m,$frac) = (@_);
+ $m->{Start} = int($m->{Need} * $frac);
+ $m->QueueLayout(4);
+ }
+
+sub scroll
+ {
+ my ($m,$delta,$type) = @_;
+ $delta *= $m->{Rows}/2 if ($type eq 'pages');
+ $m->{Start} += $delta;
+ $m->QueueLayout(4);
+ }
+
+sub yview { my $w = shift; my $c = shift; $w->$c(@_) }
+
+sub FocusIn
+{
+ my ($w) = @_;
+# print 'Focus ',$w->PathName,"\n";
+}
+
+sub ClassInit
+{
+ my ($class,$mw) = @_;
+ $mw->bind($class,'<Configure>',['QueueLayout',8]);
+ $mw->bind($class,'<FocusIn>', 'NoOp');
+ $mw->YscrollBind($class);
+ return $class;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/TixGrid.pm b/Master/tlpkg/tlperl/lib/Tk/TixGrid.pm
new file mode 100644
index 00000000000..2dd238095f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TixGrid.pm
@@ -0,0 +1,1597 @@
+
+# TODO:
+#
+# o How to get into state 's0' 'b0' so cursor keys start
+# working (compare with Tk/Widget XYscrollBind
+# o the options -browsecmd and -command callback are not
+# not implemented (as in Tix)
+# o privateData 'state' used only once (check again Grid.tcl)
+# o FloatEntry 'sometimes not activeted immediately on selection
+# o check also Leave Binding. Looks like entry does get unpost'ed
+
+package Tk::TixGrid;
+
+BEGIN
+ {
+ use vars '$DEBUG';
+ $DEBUG = (defined($ENV{USER}) and $ENV{USER} eq 'ach') ? 1 : 0;
+ print STDERR "tixGrid: debug = $DEBUG\n" if $DEBUG;
+ }
+
+use strict;
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #9 $ =~ /\D(\d+)\s*$/;
+
+use Tk qw(Ev $XS_VERSION);
+use Tk::Widget;
+use Carp;
+
+# carp "\n".__PACKAGE__.' is deprecated' unless defined($Test::ntest);
+
+use base 'Tk::Widget';
+
+Construct Tk::Widget 'TixGrid';
+
+bootstrap Tk::TixGrid;
+
+sub Tk_cmd { \&Tk::tixGrid }
+
+sub Tk::Widget::SrclTixGrid { shift->Scrolled('TixGrid' => @_) }
+
+Tk::Methods qw(anchor bdtype delete entrycget entryconfigure format index
+ move set size unset xview yview
+ dragsite dropsite geometryinfo info
+ nearest see selection sort );
+
+use Tk::Submethods
+ (
+ 'anchor' => [ qw(get set) ],
+ 'delete' => [ qw(column row) ],
+ 'info' => [ qw(bbox exists anchor) ],
+ 'move' => [ qw(column row) ],
+ 'selection' => [ qw(adjust clear includes set) ],
+ 'size' => [ qw(column row) ],
+ 'format' => [ qw(grid border) ],
+ );
+
+# edit subcommand is special. It justs invokes tcl code:
+#
+# edit set x y -> tixGrid:EditCell $w, x, y
+# edit apply -> tixGrid:EditApply
+
+# xxx Create an edit sub?
+# sub edit { .... }
+
+sub editSet
+ {
+ die "wrong args. Should be \$w->editSet(x,y)\n" unless @_ == 3;
+ my ($w, $x, $y) = @_;
+ $w->EditCell($x, $y);
+ }
+
+sub editApply
+ {
+ die "wrong args. Should be \$w->editApply()\n" unless @_ == 1;
+ my ($w) = @_;
+ $w->EditApply()
+ }
+
+
+####################################################
+##
+## For button 2 scrolling. So TixGrid has 'standard'
+## standard scrolling interface
+##
+
+#sub scanMark
+# {
+# die "wrong # args: \$w->scanMark(x,y)\n" unless @_ == 3;
+# my ($w) = @_;
+# $w->{__scanMarkXY__} = [ @_[1,2] ];
+# return "";
+# }
+#
+#sub scanDragto
+# {
+# die "wrong # args: \$w->scanDragto(x,y)\n" unless @_ == 3;
+# my ($w, $x, $y) = @_;
+# my ($ox, $oy) = @{ $w->{__scanMarkXY__} };
+#
+# #...
+#
+# return "";
+# }
+
+### end button 2 scrolling stuff ####################
+
+
+# Grid.tcl --
+#
+# This file defines the default bindings for Tix Grid widgets.
+#
+# Copyright (c) 1996, Expert Interface Technologies
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# Bindings translated to perl/Tk by Achim Bohnet <ach@mpe.mpg.de>
+
+sub ClassInit
+ {
+ my ($class, $mw) = @_;
+ $class->SUPER::ClassInit($mw);
+
+ $mw->XYscrollBind($class);
+
+ ##
+ ## Button bindings
+ ##
+
+ $mw->bind($class, '<ButtonPress-1>', ['Button_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<Shift-ButtonPress-1>', ['Shift_Button_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<Control-ButtonPress-1>',['Control_Button_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<ButtonRelease-1>', ['ButtonRelease_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<Double-ButtonPress-1>', ['Double_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<B1-Motion>','Button_Motion');
+ $mw->bind($class, '<Control-B1-Motion>','Control_Button_Motion');
+ $mw->bind($class, '<B1-Leave>','Button_Leave');
+ $mw->bind($class, '<Double-ButtonPress-1>', ['Double_1', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<B1-Enter>', ['B1_Enter', Ev('x'), Ev('y')]);
+ $mw->bind($class, '<Control-B1-Leave>','Control_Button_Leave');
+ $mw->bind($class, '<Control-B1-Enter>', ['Control_B1_Enter', Ev('x'), Ev('y')]);
+
+ ##
+ ## Keyboard bindings
+ ##
+
+ $mw->bind($class, '<Up>', ['DirKey', 'up' ]);
+ $mw->bind($class, '<Down>', ['DirKey', 'down' ]);
+ $mw->bind($class, '<Left>', ['DirKey', 'left' ]);
+ $mw->bind($class, '<Right>', ['DirKey', 'right' ]);
+
+ $mw->PriorNextBind($class);
+
+ $mw->bind($class, '<Return>', 'Return');
+ $mw->bind($class, '<space>', 'Space' );
+
+ return $class;
+ }
+
+#----------------------------------------------------------------------
+#
+#
+# Mouse bindings
+#
+#
+#----------------------------------------------------------------------
+
+sub Button_1
+ {
+ my $w = shift;
+
+ return if $w->cget('-state') eq 'disabled';
+ $w->SetFocus;
+ $w->ChgState(@_,
+ [
+ '0'=>'1',
+ ]
+ );
+ }
+
+sub Shift_Button_1
+ {
+ my $w = shift;
+
+ return if $w->cget('-state') eq 'disabled';
+ $w->SetFocus;
+
+# $w->ChgState(@_,
+# [
+# ]
+# );
+ }
+
+sub Control_Button_1
+ {
+ my $w = shift;
+
+ return if $w->cget('-state') eq 'disabled';
+ $w->SetFocus;
+
+ $w->ChgState(@_,
+ [
+ 's0' => 's1',
+ 'b0' => 'b1',
+ 'm0' => 'm1',
+ 'e0' => 'e10',
+ ]
+ );
+ }
+
+sub ButtonRelease_1
+ {
+ shift->ChgState(@_,
+ [
+ '2' => '5',
+ '4' => '3',
+ ]
+ );
+ }
+
+sub B1_Motion
+ {
+ shift->ChgState(@_,
+ [
+ '2' => '4',
+ '4' => '4',
+ ]
+ );
+ }
+
+
+sub Control_B1_Motion
+ {
+ shift->ChgState(@_,
+ [
+ 's2' => 's4',
+ 's4' => 's4',
+ 'b2' => 'b4',
+ 'b4' => 'b4',
+ 'm2' => 'm4',
+ 'm5' => 'm4',
+ ]
+ );
+ }
+
+
+sub Double_1
+ {
+ shift->ChgState(@_,
+ [
+ 's0' => 's7',
+ 'b0' => 'b7',
+ ]
+ );
+ }
+
+
+sub B1_Leave
+ {
+ shift->ChgState(@_,
+ [
+ 's2' => 's5',
+ 's4' => 's5',
+ 'b2' => 'b5',
+ 'b4' => 'b5',
+ 'm2' => 'm8',
+ 'm5' => 'm8',
+ 'e2' => 'e8',
+ 'e5' => 'e8',
+ ]
+ );
+ }
+
+
+sub B1_Enter
+ {
+ shift->ChgState(@_,
+ [
+ 's5' => 's4',
+ 's6' => 's4',
+ 'b5' => 'b4',
+ 'b6' => 'b4',
+ 'm8' => 'm4',
+ 'm9' => 'm4',
+ 'e8' => 'e4',
+ 'e9' => 'e4',
+ ]
+ );
+ }
+
+
+sub Control_B1_Leave
+ {
+ shift->ChgState(@_,
+ [
+ 's2' => 's5',
+ 's4' => 's5',
+ 'b2' => 'b5',
+ 'b4' => 'b5',
+ 'm2' => 'm8',
+ 'm5' => 'm8',
+ ]
+ );
+ }
+
+
+sub Control_B1_Enter
+ {
+ shift->ChgState(@_,
+ [
+ 's5' => 's4',
+ 's6' => 's4',
+ 'b5' => 'b4',
+ 'b6' => 'b4',
+ 'm8' => 'm4',
+ 'm9' => 'm4',
+ ]
+ );
+ }
+
+
+sub AutoScan
+ {
+ shift->ChgState(@_,
+ [
+ 's5' => 's9',
+ 's6' => 's9',
+ 'b5' => 'b9',
+ 'b6' => 'b9',
+ 'm8' => 'm9',
+ 'm9' => 'm9',
+ 'e8' => 'm9',
+ 'e9' => 'm9',
+ ]
+ );
+ }
+
+#----------------------------------------------------------------------
+#
+#
+# Key bindings
+#
+#
+#----------------------------------------------------------------------
+
+sub DirKey
+ {
+ my ($w, $key) = @_;
+
+ return if $w->cget('-state') eq 'disabled';
+
+print STDERR "$w->DirKey($key)\n" if $DEBUG;
+ $w->ChgState($key,
+ [
+ 's0' => 's8',
+ 'b0' => 'b8',
+ ]
+ );
+ }
+
+
+sub Return
+ {
+ my ($w) = @_;
+
+ return if $w->cget('-state') eq 'disabled';
+
+ $w->ChgState(
+ [
+ 's0' => 's9',
+ 'b0' => 'b9',
+ ]
+ );
+ }
+
+
+sub Space
+ {
+ my ($w) = @_;
+
+ return if $w->cget('-state') eq 'disabled';
+
+ $w->ChgState(
+ [
+ 's0' => 's10',
+ 'b0' => 'b10',
+ ]
+ );
+ }
+
+
+#----------------------------------------------------------------------
+#
+# STATE MANIPULATION
+#
+#
+#----------------------------------------------------------------------
+
+sub GetState
+ {
+ my ($w) = @_;
+ my $data = $w->privateData();
+ $data->{state} = 0 unless exists $data->{state};
+ return $data->{state};
+}
+
+sub Button_Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::X = $Ev->X;
+ $Tk::Y = $Ev->Y;
+ $w->B1_Motion($Tk::x, $Tk::y);
+}
+
+
+sub Control_Button_Motion
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::X = $Ev->X;
+ $Tk::Y = $Ev->Y;
+ $w->Control_B1_Motion($Tk::x, $Tk::y);
+}
+
+
+sub Button_Leave
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::X = $Ev->X;
+ $Tk::Y = $Ev->Y;
+ $w->B1_Leave();
+}
+
+
+sub Control_Button_Leave
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $Tk::x = $Ev->x;
+ $Tk::y = $Ev->y;
+ $Tk::X = $Ev->X;
+ $Tk::Y = $Ev->Y;
+ $w->Control_B1_Leave();
+}
+
+
+sub SetState
+ {
+ my ($w, $state) = @_;
+ $w->privateData()->{state} = $state;
+ }
+
+sub GoState
+ {
+ my ($w, $state) = (shift, shift);
+ print STDERR 'Gostate: ', $w->GetState, " --> $state, " if $DEBUG;
+ $w->SetState($state);
+ my $method = "GoState_$state";
+
+ print STDERR 'args=(', join(',',@_), ')'.
+ "\t(",$w->cget('-selectmode').
+ ',',$w->cget('-selectunit').")\n" if $DEBUG;
+
+ if (0)
+ {
+ $@ = '';
+ %@ = (); # Workaround to prevent spurious loss of $@
+ eval { $w->$method(@_) };
+ print STDERR "Error Gostate: '$state': ", $@ if $@;
+ return undef;
+ }
+
+ $w->$method(@_);
+ return undef
+ }
+
+##
+## ChgState is a fancy case statement
+##
+
+sub ChgState
+ {
+ my $w = shift;
+ my $map = pop;
+ print STDERR 'ChgState(', join(',',@_,'['), join(',',@$map,),']) ' if $DEBUG;
+ my $state = $w->GetState;
+
+ my ($match, $to);
+ while (@$map)
+ {
+ $match = shift @$map;
+ $to = shift @$map;
+ if ($match eq $state)
+ {
+ print STDERR "$state --> $to \n" if $DEBUG;
+ $w->GoState($to, @_);
+ return;
+ }
+ }
+ print STDERR "*no* chg for $state\n" if $DEBUG;
+ }
+
+
+#----------------------------------------------------------------------
+# SELECTION ROUTINES
+#----------------------------------------------------------------------
+
+#proc tixGrid:SelectSingle {w ent} {
+# $w selection set [lindex $ent 0] [lindex $ent 1]
+# tixGrid:CallBrowseCmd $w $ent
+#}
+
+sub SelectSingle
+ {
+ my ($w, $n1, $n2) = @_;
+ $w->selection('set', $n1, $n2);
+ $w->Callback('-browsecmd' => $n1, $n2);
+ }
+
+#----------------------------------------------------------------------
+# SINGLE SELECTION
+#----------------------------------------------------------------------
+
+sub GoState_0
+ {
+ my ($w) = @_;
+ my $list = $w->privateData()->{list};
+ return unless defined $list;
+
+ foreach my $cmd (@$list)
+ {
+ # XXX should do more something like $w->Callback'('__pending_cmds__');
+ eval $cmd; # XXX why in tcl in global context (binding?)
+ }
+ undef(@$list); # XXX should really delete? Maybe on needed in TCL
+ }
+
+# XXXX how to translate global context
+# what does unset
+#proc tixGrid:GoState-0 {w} {
+# set list $w:_list
+# global $list
+#
+# if [info exists $list] {
+# foreach cmd [set $list] {
+# uplevel #0 $cmd
+# }
+# if [info exists $list] {
+# unset $list
+# }
+# }
+#}
+
+sub GoState_1
+ {
+ my ($w, $x, $y) = @_;
+
+ my @ent = $w->mynearest($x,$y);
+ if (@ent)
+ {
+ $w->SetAnchor(@ent);
+ }
+ $w->CheckEdit;
+ $w->selection('clear', 0, 0, 'max', 'max');
+
+ if ($w->cget('-selectmode') ne 'single')
+ {
+ $w->SelectSingle(@ent);
+ }
+ $w->GoState(2);
+ }
+
+sub GoState_2
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_3
+ {
+ my ($w, $x, $y) = @_;
+
+ my @ent = $w->mynearest($x,$y);
+ if (@ent)
+ {
+ $w->SelectSingle(@ent);
+ }
+ $w->GoState(0);
+
+ }
+
+sub GoState_4
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x,$y);
+ my $mode = $w->cget('-selectmode');
+
+ if ($mode eq 'single')
+ {
+ $w->SetAnchor(@ent);
+ }
+ elsif ($mode eq 'browse')
+ {
+ $w->SetAnchor(@ent);
+ $w->selection('clear', 0, 0, 'max', 'max');
+ $w->SelectSingle(@ent);
+ }
+ elsif ($mode eq 'multiple' ||
+ $mode eq 'extended')
+ {
+ my (@anchor) = $w->anchor('get');
+ $w->selection('adjust', @anchor[0,1], @ent[0,1]);
+ }
+ }
+
+sub GoState_5
+ {
+ my ($w, $x, $y) = @_;
+
+ my @ent = $w->mynearest($x,$y);
+ if (@ent)
+ {
+ $w->SelectSingle(@ent);
+ $w->SetEdit(@ent);
+ }
+ $w->GoState(0);
+
+ }
+
+##############################################
+# BUG xxx
+# return scalar instead of errors
+
+sub mynearest { shift->split_s2a('nearest', @_); }
+sub myanchorGet { shift->split_s2a('anchor', 'get', @_); }
+
+sub split_s2a
+ {
+ my $w = shift;
+ my $method = shift;
+ my @ent = $w->$method(@_);
+ if (@ent == 1)
+ {
+my $tmp = $ent[0];
+ @ent = split(/ /, $ent[0]) if @ent == 1;
+print STDERR join('|',"$method splitted '$tmp' =>",@ent,"\n") if $DEBUG;
+ }
+ else
+ {
+#print STDERR join("|","$method splitted is okay :",@ent,"\n") if $DEBUG;
+ }
+ return @ent;
+ }
+
+##############################################
+
+
+sub GoState_s5
+ {
+ shift->StartScan();
+ }
+
+
+sub GoState_s6
+ {
+ shift->DoScan();
+ }
+
+
+sub GoState_s7
+ {
+ my ($w, $x, $y) = @_;
+
+ my @ent = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-command' => @ent);
+ }
+ $w->GoState('s0');
+ }
+
+
+sub GoState_s8
+ {
+ my ($w, $key) = @_;
+
+ ## BUGS ....
+ ## - anchor is bad, only bbox, exists8
+ ## - looks like anchor is 1-dim: set anchor 0
+ ## - method see unknown (even when defined with Tk::Method)
+
+ my (@anchor) = $w->info('anchor');
+ if (@anchor)
+ {
+ @anchor = ();
+ }
+ else
+ {
+ @anchor = $w->info($key, @anchor);
+ }
+
+ $w->anchor('set', @anchor);
+ $w->see(@anchor);
+
+ $w->GoState('s0');
+ }
+
+#proc tixGrid:GoState-s8 {w key} {
+# set anchor [$w info anchor]
+#
+# if {$anchor == ""} {
+# set anchor 0
+# } else {
+# set anchor [$w info $key $anchor]
+# }
+#
+# $w anchor set $anchor
+# $w see $anchor
+# tixGrid:GoState s0 $w
+#}
+
+
+sub GoState_s9
+ {
+ my ($w, $key) = @_;
+
+#print STDERR "GoState_s9 is not implemented\n";
+
+ my (@anchor) = $w->info('anchor');
+ unless (@anchor)
+ {
+ @anchor = ();
+ $w->anchor('set', @anchor);
+ $w->see(@anchor);
+ }
+
+ unless ($w->info('anchor'))
+ {
+ # ! may not have any elements
+ #
+ $w->Callback('-command' => $w->info('anchor'));
+ $w->selection('clear');
+ $w->selection('set', @anchor);
+ }
+
+ $w->GoState('s0');
+ }
+
+
+sub GoState_s10
+ {
+ my ($w, $key) = @_;
+
+ my (@anchor) = $w->info('anchor');
+ if (@anchor)
+ {
+ @anchor = ();
+ $w->anchor('set', @anchor);
+ $w->see(@anchor);
+ }
+
+ unless ($w->info('anchor'))
+ {
+ # ! may not have any elements
+ #
+ $w->Callback('-browsecmd' => $w->info('anchor'));
+ $w->selection('clear');
+ $w->selection('set', @anchor);
+ }
+
+ $w->GoState('s0');
+ }
+
+
+#----------------------------------------------------------------------
+# BROWSE SELECTION
+#----------------------------------------------------------------------
+
+sub GoState_b0
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_b1
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->anchor('set', @ent);
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+
+ $w->GoState('b2');
+ }
+
+sub GoState_b2
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_b3
+ {
+ my ($w) = @_;
+
+ my (@ent) = $w->info('anchor');
+ if (@ent)
+ {
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+
+ $w->GoState('b0');
+ }
+
+
+sub GoState_b4
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->anchor('set', @ent);
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+ }
+
+
+sub GoState_b5 { shift->StartScan(); }
+
+
+sub GoState_b6 { shift->DoScan(); }
+
+
+sub GoState_b7
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-command' => @ent);
+ }
+ $w->GoState('b0');
+ }
+
+
+sub GoState_b8
+ {
+ my ($w, $key) = @_;
+
+ my (@anchor) = $w->info('anchor');
+ if (@anchor)
+ {
+ @anchor = $w->info('key', @anchor);
+ }
+ else
+ {
+ @anchor = (0,0); # ?????
+ }
+
+ $w->anchor('set', @anchor);
+ $w->selection('clear');
+ $w->selection('set', @anchor);
+ $w->see(@anchor);
+
+ $w->Callback('-browsecmd' => @anchor);
+ $w->GoState('b0');
+ }
+
+
+sub GoState_b9
+ {
+ my ($w) = @_;
+
+ my (@anchor) = $w->info('anchor');
+ unless (@anchor)
+ {
+ @anchor = (0,0);
+ $w->anchor('set', @anchor);
+ $w->see(@anchor);
+ }
+
+ if ($w->info('anchor'))
+ {
+ # ! may not have any elements
+ #
+ $w->Callback('-command' => $w->info('anchor'));
+ $w->selection('clear');
+ $w->selection('set', @anchor);
+ }
+
+ $w->GoState('b0');
+ }
+
+
+sub GoState_b10
+ {
+ my ($w) = @_;
+
+ my (@anchor) = $w->info('anchor');
+ unless (@anchor)
+ {
+ @anchor = (0,0);
+ $w->anchor('set', @anchor);
+ $w->see(@anchor);
+ }
+
+ if ($w->info('anchor'))
+ {
+ # ! may not have any elements
+ #
+ $w->Callback('-browsecmd' => $w->info('anchor'));
+ $w->selection('clear');
+ $w->selection('set', @anchor);
+ }
+
+ $w->GoState('b0');
+ }
+
+#----------------------------------------------------------------------
+# MULTIPLE SELECTION
+#----------------------------------------------------------------------
+
+
+sub GoState_m0
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_m1
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x,$y);
+ if (@ent)
+ {
+ $w->anchor('set', @ent);
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+
+ $w->GoState('m2');
+ }
+
+sub GoState_m2
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_m3
+ {
+ my ($w) = @_;
+
+ my (@ent) = $w->info('anchor');
+ if (@ent)
+ {
+ $w->Callback('-browsecmd' => @ent);
+ }
+
+ $w->GoState('m0');
+ }
+
+
+sub GoState_m4
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@from) = $w->info('anchor');
+ my (@to) = $w->mynearest($x, $y);
+ if (@to)
+ {
+ $w->selection('clear');
+ $w->selection('set', @from, @to);
+ $w->Callback('-browsecmd' => @to);
+ }
+ $w->GoState('m5');
+ }
+
+sub GoState_m5
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_m6
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('m0');
+ }
+
+sub GoState_m7
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@from) = $w->info('anchor');
+ my (@to) = $w->mynearest($x, $y);
+ unless (@from)
+ {
+ @from = @to;
+ $w->anchor('set', @from);
+ }
+ if (@to)
+ {
+ $w->selection('clear');
+ $w->selection('set', @from, @to);
+ $w->Callback('-browsecmd' => @to);
+ }
+ $w->GoState('m5');
+ }
+
+
+sub GoState_m8 { shift->StartScan() }
+
+
+sub GoState_m9 { shift->DoScan() }
+
+
+sub GoState_xm7
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('m0');
+ }
+
+#----------------------------------------------------------------------
+# EXTENDED SELECTION
+#----------------------------------------------------------------------
+
+sub GoState_e0
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_e1
+ {
+ my ($w, $x, $y) = @_;
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->anchor('set', @ent);
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('e2');
+ }
+
+
+sub GoState_e2
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_e3
+ {
+ my ($w) = @_;
+
+ my (@ent) = $w->info('anchor');
+ if (@ent)
+ {
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('e0');
+ }
+
+sub GoState_e4
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@from) = $w->info('anchor');
+ my (@to) = $w->mynearest($x, $y);
+ if (@to)
+ {
+ $w->selection('clear');
+ $w->selection('set', @from, @to);
+ $w->Callback('-browsecmd' => @to);
+ }
+ $w->GoState('e5');
+ }
+
+sub GoState_e5
+ {
+ my ($w) = @_;
+ }
+
+sub GoState_e6
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('e0');
+ }
+
+sub GoState_e7
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@from) = $w->info('anchor');
+ my (@to) = $w->mynearest($x, $y);
+ unless (@from)
+ {
+ @from = @to;
+ $w->anchor('set', @from);
+ }
+ if (@to)
+ {
+ $w->selection('clear');
+ $w->selection('set', @from, @to);
+ $w->Callback('-browsecmd' => @to);
+ }
+ $w->GoState('e5');
+ }
+
+sub GoState_e8 { shift->StartScan(); }
+
+sub GoState_e9 { shift->DoScan(); }
+
+sub GoState_e10
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ if ($w->info('anchor'))
+ {
+ $w->anchor('set', @ent);
+ }
+ if ($w->selection('includes', @ent))
+ {
+ $w->selection('clear', @ent);
+ }
+ else
+ {
+ $w->selection('set', @ent);
+ }
+ $w->Callback('-browsecmd' => @ent);
+ }
+ $w->GoState('e2');
+ }
+
+sub GoState_xe7
+ {
+ my ($w, $x, $y) = @_;
+
+ my (@ent) = $w->mynearest($x, $y);
+ if (@ent)
+ {
+ $w->selection('clear');
+ $w->selection('set', @ent);
+ $w->Callback('-command' => @ent);
+ }
+ $w->GoState('e0');
+ }
+
+
+#----------------------------------------------------------------------
+# HODGE PODGE
+#----------------------------------------------------------------------
+
+sub GoState_12
+ {
+ my ($w, $x, $y) = @_;
+
+ $w->CancelRepeat; # xxx will not work
+ $w->GoState(5, $x, $y);
+ }
+#proc tixGrid:GoState-12 {w x y} {
+# tkCancelRepeat
+# tixGrid:GoState 5 $w $x $y
+#}
+
+sub GoState_13
+ {
+ # FIX: a) $ent or @ent, b) 13 is never called!!? same in Grid.tcl
+ my ($w, @ent, @oldEnt) = @_;
+
+ my $data = $w->MainWindow->privateData('Tix');
+ $data->{indicator} = \@ent;
+ $data->{oldEntry} = \@oldEnt;
+ $w->IndicatorCmd('<Arm>', @ent);
+ }
+# set tkPriv(tix,oldEnt) $oldEnt
+# tixGrid:IndicatorCmd $w <Arm> $ent
+#}
+
+sub GoState_14
+ {
+ my ($w, $x, $y) = @_;
+
+ my $data = $w->MainWindow->privateData('Tix');
+ if ($w->InsideArmedIndicator($x, $y))
+ {
+ $w->anchor('set', @{ $data->{indicator} });
+ $w->selection('clear');
+ $w->selection('set', @{ $data->{indicator} });
+ $w->IndicatorCmd('<Activate>', @{ $data->{indicator} });
+ }
+ else
+ {
+ $w->IndicatorCmd('<Disarm>', @{ $data->{indicator} });
+ }
+ delete($data->{indicator});
+ $w->GoState(0);
+ }
+
+sub GoState_16
+ {
+ my ($w, @ent) = @_;
+
+ return unless (@ent);
+ if ($w->cget('-selectmode') ne 'single')
+ {
+ $w->Select(@ent);
+ $w->Browse(@ent);
+ }
+ }
+
+sub GoState_18
+ {
+ my ($w) = @_;
+
+ $w->CancelRepeat; ## xxx
+ $w->GoState(6, $Tk::x, $Tk::y);
+ }
+
+sub GoState_20
+ {
+ my ($w, $x, $y) = @_;
+
+ my $data = $w->MainWindow->privateData('Tix');
+ if ($w->InsideArmedIndicator($x, $y))
+ {
+ $w->IndicatorCmd('<Arm>', $data->{'indicator'});
+ }
+ else
+ {
+ $w->GoState(21, $x, $y);
+ }
+ }
+
+sub GoState_21
+ {
+ my ($w, $x, $y) = @_;
+
+ my $data = $w->MainWindow->privateData('Tix');
+ unless ($w->InsideArmedIndicator($x, $y))
+ {
+ $w->IndicatorCmd('<Disarm>', $data->{'indicator'});
+ }
+ else
+ {
+ $w->GoState(20, $x, $y);
+ }
+ }
+
+sub GoState_22
+ {
+ my ($w) = @_;
+ my $data = $w->MainWindow->privateData('Tix');
+ if (@{ $data->{oldEntry} })
+ {
+ $w->anchor('set', @{ $data->{oldEntry} });
+ }
+ else
+ {
+ $w->anchor('clear');
+ }
+ $w->GoState(0);
+ }
+
+
+#----------------------------------------------------------------------
+# callback actions
+#----------------------------------------------------------------------
+
+sub SetAnchor
+ {
+ my ($w, @ent) = @_;
+
+ if (@ent)
+ {
+ $w->anchor('set', @ent);
+# $w->see(@ent);
+ }
+ }
+
+# xxx check @ent of @$ent
+sub Select
+ {
+ my ($w, @ent) = @_;
+ $w->selection('clear');
+ $w->selection('set', @ent)
+ }
+
+# xxx check new After handling
+sub StartScan
+ {
+ my ($w) = @_;
+ $Tk::afterId = $w->after(50, [AutoScan, $w]);
+ }
+
+sub DoScan
+ {
+ my ($w) = @_;
+ my $x = $Tk::x;
+ my $y = $Tk::y;
+ my $X = $Tk::X;
+ my $Y = $Tk::Y;
+
+ my $out = 0;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll', 1, 'units');
+ $out = 1;
+ }
+ if ($y < 0)
+ {
+ $w->yview('scroll', -1, 'units');
+ $out = 1;
+ }
+ if ($x >= $w->width)
+ {
+ $w->xview('scroll', 2, 'units');
+ $out = 1;
+ }
+ if ($x < 0)
+ {
+ $w->xview('scroll', -2, 'units');
+ $out = 1;
+ }
+ if ($out)
+ {
+ $Tk::afterId = $w->after(50, ['AutoScan', $w]);
+ }
+ }
+
+
+#proc tixGrid:CallBrowseCmd {w ent} {
+# return
+#
+# set browsecmd [$w cget -browsecmd]
+# if {$browsecmd != ""} {
+# set bind(specs) {%V}
+# set bind(%V) $ent
+#
+# tixEvalCmdBinding $w $browsecmd bind $ent
+# }
+#}
+
+#proc tixGrid:CallCommand {w ent} {
+# set command [$w cget -command]
+# if {$command != ""} {
+# set bind(specs) {%V}
+# set bind(%V) $ent
+#
+# tixEvalCmdBinding $w $command bind $ent
+# }
+#}
+
+# tixGrid:EditCell --
+#
+# This command is called when "$w edit set $x $y" is called. It causes
+# an SetEdit call when the grid's state is 0.
+#
+
+sub EditCell
+ {
+ my ($w, $x, $y) = @_;
+ my $list = $w->privateData()->{'list'};
+ if ($w->GetState == 0)
+ {
+ $w->SetEdit($x, $y); # xxx really correct ? once 2, once 4 args?
+ }
+ else
+ {
+ push(@$list, [ $w, 'SetEdit', $x, $y]);
+ }
+ }
+#proc tixGrid:EditCell {w x y} {
+# set list $w:_list
+# global $list
+#
+# case [tixGrid:GetState $w] {
+# {0} {
+# tixGrid:SetEdit $w [list $x $y]
+# }
+# default {
+# lappend $list [list tixGrid:SetEdit $w [list $x $y]]
+# }
+# }
+#}
+
+
+# tixGrid:EditApply --
+#
+# This command is called when "$w edit apply $x $y" is called. It causes
+# an CheckEdit call when the grid's state is 0.
+#
+
+sub EditApply
+ {
+ my ($w) = @_;
+ my $list = $w->privateData()->{'list'};
+ if ($w->GetState eq 0)
+ {
+ $w->CheckEdit; # xxx really correct ? once 2, once 4 args?
+ }
+ else
+ {
+ push(@$list, $w->CheckEdit);
+ }
+ }
+#proc tixGrid:EditApply {w} {
+# set list $w:_list
+# global $list
+#
+# case [tixGrid:GetState $w] {
+# {0} {
+# tixGrid:CheckEdit $w
+# }
+# default {
+# lappend $list [list tixGrid:CheckEdit $w]
+# }
+# }
+#}
+
+# tixGrid:CheckEdit --
+#
+# This procedure is called when the user sets the focus on a cell.
+# If another cell is being edited, apply the changes of that cell.
+#
+
+sub CheckEdit
+ {
+ my ($w) = @_;
+ my $edit = $w->privateData->{editentry};
+ if (Tk::Exists($edit))
+ {
+ # If it -command is not empty, it is being used for another cell.
+ # Invoke it so that the other cell can be updated.
+ #
+ if (defined $edit->cget('-command'))
+ {
+ $edit->invoke; # xxx no args??
+ }
+ }
+ }
+
+sub SetFocus
+ {
+ my ($w) = @_;
+ if ($w->cget('-takefocus'))
+ {
+$w->focus;
+# # xxx translation of if ![string match $w.* [focus -displayof $w]] {
+# my $hasfocus = $w->focus(-displayof => $w)->pathname;
+# my $pathname = $w->pathname;
+# if ($hasfocus =~ /\Q$pathname\E.*/)
+# {
+# $w->focus
+# }
+ }
+ }
+
+
+# tixGrid:SetEdit --
+#
+# Puts a floatentry on top of an editable entry.
+#
+
+sub SetEdit
+ {
+ my ($w, $px, $py) = @_;
+
+ $w->CheckEdit;
+
+ my $efc = $w->cget('-editnotifycmd');
+ return unless ( defined($efc) && length($efc) );
+
+ unless ($w->Callback('-editnotifycmd' => $px, $py))
+ {
+ print STDERR "editnotifycmd not defined or returned false\n";
+ return;
+ }
+
+ my $oldvalue;
+ if ($w->info('exists', $px, $py))
+ {
+ # if entry doesn't support -text option. Can't edit it.
+ #
+ # If the application wants to force editing of an entry, it could
+ # delete or replace the entry in the editnotifyCmd procedure.
+ #
+ Tk::catch { $oldvalue = $w->entrycget($px, $py, '-text'); };
+ if ($@)
+ {
+ return;
+ }
+ }
+ else
+ {
+ $oldvalue = '';
+ }
+
+ my @bbox = $w->info('bbox', $px, $py);
+
+ my $edit = $w->privateData()->{__EDIT__};
+ unless (Tk::Exists($edit))
+ {
+ require Tk::FloatEntry;
+ $edit = $w->FloatEntry();
+ $w->privateData()->{__EDIT__} = $edit;
+ }
+ $edit->configure(-command=>[\&DoneEdit, $w, $px, $py]);
+ $edit->post(@bbox);
+ $edit->configure(-value=>$oldvalue);
+}
+
+
+sub DoneEdit
+ {
+ my ($w, $x, $y, @args) = @_;
+
+ my $edit = $w->privateData()->{__EDIT__};
+ $edit->configure(-command=>undef);
+ $edit->unpost;
+
+ # FIX xxx
+ # set value [tixEvent value]
+ my $value = $edit->get;
+ if ($w->info('exists', $x, $y))
+ {
+ Tk::catch { $w->entryconfigure($x, $y, -text=>$value) };
+ if ($@)
+ {
+ return
+ }
+ }
+ elsif ( length($value) )
+ {
+ # This needs to be catch'ed because the default itemtype may
+ # not support the -text option
+ #
+ Tk::catch { $w->set($x,$y,-text $value); };
+ if ($@)
+ {
+ return;
+ }
+ }
+ else
+ {
+ return;
+ }
+ $w->Callback('-editdonecmd' => $x, $y);
+ }
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Tk.xbm b/Master/tlpkg/tlperl/lib/Tk/Tk.xbm
new file mode 100644
index 00000000000..136d4793037
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Tk.xbm
@@ -0,0 +1,44 @@
+#define Tk.xbm_width 61
+#define Tk.xbm_height 61
+static unsigned char Tk.xbm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xf8, 0x0e, 0x00, 0x00,
+ 0x00, 0xe0, 0x1e, 0x00, 0xbe, 0x3e, 0x00, 0x00, 0x00, 0xfb, 0x1e, 0x00,
+ 0xfe, 0x7f, 0x00, 0x00, 0x80, 0xdf, 0x0f, 0x00, 0xff, 0xbf, 0x00, 0x00,
+ 0x80, 0xe0, 0x3d, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x47, 0x7f, 0x80,
+ 0xff, 0xfd, 0x01, 0x00, 0x00, 0x7f, 0x3e, 0xc0, 0xff, 0xf1, 0x01, 0x00,
+ 0x00, 0x30, 0x7f, 0xf0, 0xfe, 0xb3, 0x03, 0x00, 0x00, 0xf8, 0x3e, 0x7c,
+ 0xff, 0xcf, 0x07, 0x00, 0x00, 0x78, 0x37, 0xfc, 0x7b, 0xc3, 0x07, 0x00,
+ 0x00, 0xfc, 0x3d, 0xfe, 0x3c, 0x25, 0x0e, 0x00, 0x00, 0xfc, 0x3e, 0x5f,
+ 0x18, 0x41, 0x0b, 0x00, 0x00, 0x5c, 0x3f, 0x5f, 0xf0, 0x59, 0x1b, 0x00,
+ 0x00, 0xdc, 0x9f, 0x3f, 0xe8, 0xbe, 0x17, 0x00, 0x00, 0xbc, 0x9f, 0x2f,
+ 0xa8, 0x5b, 0x15, 0x00, 0x00, 0xdc, 0xdf, 0x25, 0x48, 0x7a, 0x34, 0x00,
+ 0x00, 0x7c, 0xce, 0x1f, 0x20, 0x2c, 0x36, 0x00, 0x00, 0x7c, 0xa7, 0x1f,
+ 0xcc, 0x09, 0xf0, 0x00, 0x00, 0xfc, 0xae, 0x1f, 0x49, 0x05, 0xf6, 0x00,
+ 0x00, 0xfc, 0xac, 0x3f, 0xf8, 0x11, 0xf6, 0x00, 0x00, 0xf8, 0x8d, 0x3f,
+ 0x8e, 0x0e, 0xd6, 0x01, 0x00, 0xf8, 0x9c, 0x7e, 0xd7, 0x5b, 0xff, 0x03,
+ 0x00, 0x70, 0x83, 0x5f, 0xcf, 0xfd, 0xbf, 0x01, 0x00, 0xe0, 0xc3, 0x3b,
+ 0xc7, 0xff, 0x3f, 0x03, 0x00, 0xe0, 0xcf, 0xbf, 0xe3, 0xff, 0x97, 0x03,
+ 0x00, 0x80, 0xfb, 0x7f, 0xfb, 0xff, 0x17, 0x01, 0x00, 0x80, 0xef, 0xff,
+ 0xb3, 0x6f, 0x17, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x3f, 0x17, 0x03,
+ 0x00, 0x00, 0x88, 0xff, 0xbf, 0x3f, 0x1b, 0x03, 0x00, 0x00, 0x00, 0x7b,
+ 0x3d, 0x1f, 0x9f, 0x01, 0x00, 0x00, 0x80, 0x1f, 0x7f, 0x1f, 0x9e, 0x00,
+ 0x00, 0x00, 0x80, 0x1f, 0x3f, 0x0f, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x1f,
+ 0x1f, 0x0f, 0x1e, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x1f, 0x0e, 0x1e, 0x00,
+ 0x00, 0xfe, 0x81, 0x8f, 0x1f, 0x0f, 0x1c, 0x00, 0x00, 0x98, 0x81, 0xc7,
+ 0x1f, 0x0e, 0x18, 0x00, 0x00, 0x98, 0x01, 0xc7, 0x0f, 0x0a, 0x18, 0x00,
+ 0xfc, 0x98, 0x99, 0xc7, 0x07, 0x0e, 0x18, 0x00, 0x8c, 0x99, 0x8d, 0xc7,
+ 0x02, 0x0e, 0x18, 0x00, 0x8c, 0x99, 0x07, 0xc3, 0x03, 0x03, 0x18, 0x00,
+ 0x8c, 0x99, 0x07, 0xc7, 0x01, 0x03, 0x28, 0x00, 0x8c, 0x99, 0x0d, 0x03,
+ 0x03, 0x01, 0x08, 0x00, 0xfc, 0x98, 0x19, 0x03, 0x86, 0x01, 0x18, 0x00,
+ 0x0c, 0x00, 0x00, 0x03, 0xc4, 0x01, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x03,
+ 0x88, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x03, 0x90, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80, 0x01,
+ 0xf0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x80, 0x01, 0xf8, 0x01, 0x18, 0x00,
+ 0x00, 0x00, 0xc0, 0x01, 0x9e, 0x03, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x01,
+ 0xb3, 0x01, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0x18, 0x00,
+ 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xdc, 0x00,
+ 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/Master/tlpkg/tlperl/lib/Tk/Tk.xpm b/Master/tlpkg/tlperl/lib/Tk/Tk.xpm
new file mode 100644
index 00000000000..7880a637f39
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Tk.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char *Tk[] = {
+/* width height num_colors chars_per_pixel */
+" 32 32 2 1",
+/* colors */
+"# c #008080",
+"a c #ff0000",
+/* pixels */
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"##########aaaaaaaa##############",
+"#######aaaaaaaaaaaa#######aa####",
+"#####aaaaaaaaaaaaaa######aaa####",
+"####aaaaaaaaaaaaaaaa####aaaa####",
+"####aaaaaaa######aa####aaaa#####",
+"###aaaa#########aaa###aaaa######",
+"###aaaa#########aa###aaaa#######",
+"######aa#######aa####aaa########",
+"##############aaa###aaaa########",
+"#############aaa###aaaa##aaa####",
+"#############aa####aaa#aaaaa####",
+"############aaa###aaa#aaaaaa####",
+"###########aaa####aa#aa#aaa#####",
+"###########aaa###aa#aa#aaa######",
+"##########aaa####aaaaaaaa#aa####",
+"##########aaa####aaaaaaa##aa####",
+"#########aaaa####aaaaaaaaaa#####",
+"#########aaa#####aa##aaaaa######",
+"#########aaa##########aa########",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################",
+"################################"
+};
diff --git a/Master/tlpkg/tlperl/lib/Tk/TkXSUB.def b/Master/tlpkg/tlperl/lib/Tk/TkXSUB.def
new file mode 100644
index 00000000000..8f60974226e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/TkXSUB.def
@@ -0,0 +1,62 @@
+MkXSUB("Tk::bind", XS_Tk_bind, XStoBind, Tk_BindObjCmd)
+MkXSUB("Tk::pack", XS_Tk_pack, XStoAfterSub, Tk_PackObjCmd)
+MkXSUB("Tk::grid", XS_Tk_grid, XStoGrid, Tk_GridObjCmd)
+MkXSUB("Tk::place", XS_Tk_place, XStoAfterSub, Tk_PlaceObjCmd)
+MkXSUB("Tk::form", XS_Tk_form, XStoAfterSub, Tix_FormCmd)
+MkXSUB("Tk::itemstyle", XS_Tk_itemstyle, XStoTclCmd, Tix_ItemStyleCmd)
+MkXSUB("Tk::winfo", XS_Tk_winfo, XStoSubCmd, Tk_WinfoObjCmd)
+MkXSUB("Tk::font", XS_Tk_font, XStoFont, Tk_FontObjCmd)
+MkXSUB("Tk::wm", XS_Tk_wm, XStoAfterSub, Tk_WmObjCmd)
+MkXSUB("Tk::grab", XS_Tk_grab, XStoSubCmd, Tk_GrabObjCmd)
+MkXSUB("Tk::focus", XS_Tk_focus, XStoSubCmd, Tk_FocusObjCmd)
+MkXSUB("Tk::event", XS_Tk_event, XStoEvent, Tk_EventObjCmd)
+MkXSUB("Tk::property", XS_Tk_property, XStoSubCmd, Tk_PropertyCmd)
+MkXSUB("Tk::clipboard", XS_Tk_clipboard, XStoDisplayof, Tk_ClipboardObjCmd)
+MkXSUB("Tk::bell", XS_Tk_bell, XStoDisplayof, Tk_BellObjCmd)
+MkXSUB("Tk::bindtags", XS_Tk_bindtags, XStoTk, Tk_BindtagsObjCmd)
+MkXSUB("Tk::destroy", XS_Tk_destroy, XStoTk, Tk_DestroyObjCmd)
+MkXSUB("Tk::raise", XS_Tk_raise, XStoTk, Tk_RaiseObjCmd)
+MkXSUB("Tk::lower", XS_Tk_lower, XStoTk, Tk_LowerObjCmd)
+MkXSUB("Tk::option", XS_Tk_option, XStoOption, Tk_OptionObjCmd)
+MkXSUB("Tk::image", XS_Tk_image, XStoImage, Tk_ImageObjCmd)
+MkXSUB("Tk::selection", XS_Tk_selection, XStoTk, Tk_SelectionObjCmd)
+
+#if defined(__WIN32__) || defined(MAC_TCL)
+MkXSUB("Tk::tk_chooseColor", XS_Tk_tk_chooseColor, XStoTk, Tk_ChooseColorObjCmd)
+MkXSUB("Tk::tk_chooseDirectory", XS_Tk_tk_chooseDirectory, XStoTk, Tk_ChooseDirectoryObjCmd)
+MkXSUB("Tk::tk_getOpenFile", XS_Tk_tk_getOpenFile, XStoTk, Tk_GetOpenFileObjCmd)
+MkXSUB("Tk::tk_getSaveFile", XS_Tk_tk_getSaveFile, XStoTk, Tk_GetSaveFileObjCmd)
+#endif
+#if defined(__WIN32__)
+MkXSUB("Tk::tk_messageBox", XS_Tk_tk_messageBox, XStoTk, Tk_MessageBoxObjCmd)
+#endif
+
+MkXSUB("Tk::tk", XS_Tk_tk, XStoTclCmd, Tk_TkObjCmd)
+
+#if 0
+MkXSUB("Tk::exit", XS_Tk_exit, XStoNoWindow, Tcl_ExitCmd)
+MkXSUB("Tk::fileevent", XS_Tk_fileevent, XStoNoWindow, Tcl_FileeventCmd)
+#endif
+MkXSUB("Tk::after", XS_Tk_after, XStoNoWindow, Tcl_AfterObjCmd)
+#ifndef WIN32
+MkXSUB("Tk::send", XS_Tk_send, XStoTclCmd, Tk_SendCmd)
+#endif
+
+MkXSUB("Tk::button", XS_Tk_button, XStoTclCmdNull, Tk_ButtonObjCmd)
+MkXSUB("Tk::checkbutton", XS_Tk_checkbutton, XStoTclCmdNull, Tk_CheckbuttonObjCmd)
+MkXSUB("Tk::label", XS_Tk_label, XStoTclCmdNull, Tk_LabelObjCmd)
+MkXSUB("Tk::radiobutton", XS_Tk_radiobutton, XStoTclCmdNull, Tk_RadiobuttonObjCmd)
+MkXSUB("Tk::_menu", XS_Tk__menu, XStoTclCmdNull, 0)
+
+MkXSUB("Tk::message", XS_Tk_message, XStoTclCmd, Tk_MessageObjCmd)
+MkXSUB("Tk::frame", XS_Tk_frame, XStoTclCmd, Tk_FrameObjCmd)
+MkXSUB("Tk::labelframe", XS_Tk_labelframe, XStoTclCmd, Tk_LabelframeObjCmd)
+MkXSUB("Tk::panedwindow", XS_Tk_panedwindow, XStoTclCmd, Tk_PanedWindowObjCmd)
+MkXSUB("Tk::toplevel", XS_Tk_toplevel, XStoTclCmd, Tk_ToplevelObjCmd)
+MkXSUB("Tk::update", XS_Tk_update, XStoTclCmd, Tk_UpdateObjCmd)
+MkXSUB("Tk::tkwait", XS_Tk_tkwait, XStoTclCmd, Tk_TkwaitObjCmd)
+MkXSUB("Tk::configure", XS_Tk_configure, XStoWidget, newSVpv("configure",0))
+MkXSUB("Tk::cget", XS_Tk_cget, XStoWidget, newSVpv("cget",0))
+
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Toplevel.pm b/Master/tlpkg/tlperl/lib/Tk/Toplevel.pm
new file mode 100644
index 00000000000..7bcd156d475
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Toplevel.pm
@@ -0,0 +1,211 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Toplevel;
+use AutoLoader;
+
+use vars qw($VERSION);
+$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Toplevel.pm#6 $
+
+use base qw(Tk::Wm Tk::Frame);
+
+Construct Tk::Widget 'Toplevel';
+
+sub Tk_cmd { \&Tk::toplevel }
+
+sub CreateOptions
+{
+ return (shift->SUPER::CreateOptions,'-screen','-use')
+}
+
+sub Populate
+{
+ my ($cw,$arg) = @_;
+ $cw->SUPER::Populate($arg);
+ $cw->ConfigSpecs('-title',['METHOD',undef,undef,$cw->class]);
+}
+
+sub Icon
+{
+ my ($top,%args) = @_;
+ my $icon = $top->iconwindow;
+ my $state = $top->state;
+ if ($state ne 'withdrawn')
+ {
+ $top->withdraw;
+ $top->update; # Let attributes propogate
+ }
+ unless (defined $icon)
+ {
+ $icon = Tk::Toplevel->new($top,'-borderwidth' => 0,'-class'=>'Icon');
+ $icon->withdraw;
+ # Fake Populate
+ my $lab = $icon->Component('Label' => 'icon');
+ $lab->pack('-expand'=>1,'-fill' => 'both');
+ $icon->ConfigSpecs(DEFAULT => ['DESCENDANTS']);
+ # Now do tail of InitObject
+ $icon->ConfigDefault(\%args);
+ # And configure that new would have done
+ $top->iconwindow($icon);
+ $top->update;
+ $lab->DisableButtonEvents;
+ $lab->update;
+ }
+ $top->iconimage($args{'-image'}) if (exists $args{'-image'});
+ $icon->configure(%args);
+ $icon->idletasks; # Let size request propogate
+ $icon->geometry($icon->ReqWidth . 'x' . $icon->ReqHeight);
+ $icon->update; # Let attributes propogate
+ $top->deiconify if ($state eq 'normal');
+ $top->iconify if ($state eq 'iconic');
+}
+
+sub menu
+{
+ my $w = shift;
+ my $menu;
+ $menu = $w->cget('-menu');
+ unless (defined $menu)
+ {
+ $w->configure(-menu => ($menu = $w->SUPER::menu))
+ }
+ $menu->configure(@_) if @_;
+ return $menu;
+}
+
+
+1;
+__END__
+
+#----------------------------------------------------------------------
+#
+# Focus Group
+#
+# Focus groups are used to handle the user's focusing actions inside a
+# toplevel.
+#
+# One example of using focus groups is: when the user focuses on an
+# entry, the text in the entry is highlighted and the cursor is put to
+# the end of the text. When the user changes focus to another widget,
+# the text in the previously focused entry is validated.
+#
+
+#----------------------------------------------------------------------
+# tkFocusGroup_Create --
+#
+# Create a focus group. All the widgets in a focus group must be
+# within the same focus toplevel. Each toplevel can have only
+# one focus group, which is identified by the name of the
+# toplevel widget.
+#
+sub FG_Create {
+ my $t = shift;
+ unless (exists $t->{'_fg'}) {
+ $t->{'_fg'} = 1;
+ $t->bind('<FocusIn>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_In($w, $Ev->d);
+ }
+ );
+ $t->bind('<FocusOut>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Out($w, $Ev->d);
+ }
+ );
+ $t->bind('<Destroy>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Destroy($w);
+ }
+ );
+ # <Destroy> is not sufficient to break loops if never mapped.
+ $t->OnDestroy([$t,'FG_Destroy']);
+ }
+}
+
+# tkFocusGroup_BindIn --
+#
+# Add a widget into the "FocusIn" list of the focus group. The $cmd will be
+# called when the widget is focused on by the user.
+#
+sub FG_BindIn {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusIn'}{$w} = Tk::Callback->new($cmd);
+}
+
+# tkFocusGroup_BindOut --
+#
+# Add a widget into the "FocusOut" list of the focus group. The
+# $cmd will be called when the widget loses the focus (User
+# types Tab or click on another widget).
+#
+sub FG_BindOut {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusOut'}{$w} = Tk::Callback->new($cmd);
+}
+
+# tkFocusGroup_Destroy --
+#
+# Cleans up when members of the focus group is deleted, or when the
+# toplevel itself gets deleted.
+#
+sub FG_Destroy {
+ my($t, $w) = @_;
+ if (!defined($w) || $t == $w) {
+ delete $t->{'_fg'};
+ delete $t->{'_focus'};
+ delete $t->{'_FocusOut'};
+ delete $t->{'_FocusIn'};
+ } else {
+ if (exists $t->{'_focus'}) {
+ delete $t->{'_focus'} if ($t->{'_focus'} == $w);
+ }
+ delete $t->{'_FocusIn'}{$w};
+ delete $t->{'_FocusOut'}{$w};
+ }
+}
+
+# tkFocusGroup_In --
+#
+# Handles the <FocusIn> event. Calls the FocusIn command for the newly
+# focused widget in the focus group.
+#
+sub FG_In {
+ my($t, $w, $detail) = @_;
+ if (defined $t->{'_focus'} and $t->{'_focus'} eq $w) {
+ # This is already in focus
+ return;
+ } else {
+ $t->{'_focus'} = $w;
+ $t->{'_FocusIn'}{$w}->Call if exists $t->{'_FocusIn'}{$w};
+ }
+}
+
+# tkFocusGroup_Out --
+#
+# Handles the <FocusOut> event. Checks if this is really a lose
+# focus event, not one generated by the mouse moving out of the
+# toplevel window. Calls the FocusOut command for the widget
+# who loses its focus.
+#
+sub FG_Out {
+ my($t, $w, $detail) = @_;
+ if ($detail ne 'NotifyNonlinear' and $detail ne 'NotifyNonlinearVirtual') {
+ # This is caused by mouse moving out of the window
+ return;
+ }
+ unless (exists $t->{'_FocusOut'}{$w}) {
+ return;
+ } else {
+ $t->{'_FocusOut'}{$w}->Call;
+ delete $t->{'_focus'};
+ }
+}
+
+1;
+
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Tk/Trace.pm b/Master/tlpkg/tlperl/lib/Tk/Trace.pm
new file mode 100644
index 00000000000..1e38e79a065
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Trace.pm
@@ -0,0 +1,405 @@
+package Tk::Trace;
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #7 $ =~ /\D(\d+)\s*$/;
+
+use Carp;
+use Tie::Watch;
+use strict;
+
+# The %TRACE hash is indexed by stringified variable reference. Each hash
+# bucket contains an array reference having two elements:
+#
+# ->[0] = a reference to the variable's Tie::Watch object
+# ->[1] = a hash reference with these keys: -fetch, -store, -destroy
+# ->{key} = [ active flag, [ callback list ] ]
+# where each callback is a normalized callback array reference
+#
+# Thus, each trace type (r w u ) may have multiple traces.
+
+my %TRACE; # watchpoints indexed by stringified ref
+
+my %OP = ( # trace to Tie::Watch operation map
+ r => '-fetch',
+ w => '-store',
+ u => '-destroy',
+);
+
+sub fetch {
+
+ # fetch() wraps the user's callback with necessary tie() bookkeeping
+ # and invokes the callback with the proper arguments. It expects:
+ #
+ # $_[0] = Tie::Watch object
+ # $_[1] = undef for a scalar, an index/key for an array/hash
+ #
+ # The user's callback is passed these arguments:
+ #
+ # $_[0] = undef for a scalar, index/key for array/hash
+ # $_[1] = current value
+ # $_[2] = operation 'r'
+ # $_[3 .. $#_] = optional user callback arguments
+ #
+ # The user callback returns the final value to assign the variable.
+
+ my $self = shift; # Tie::Watch object
+ my $val = $self->Fetch(@_); # get variable's current value
+ my $aref = $self->Args('-fetch'); # argument reference
+ my $call = $TRACE{$aref->[0]}->[1]->{-fetch}; # active flag/callbacks
+ return $val unless $call->[0]; # if fetch inactive
+
+ my $final_val;
+ foreach my $aref (reverse @$call[ 1 .. $#{@$call} ] ) {
+ my ( @args_copy ) = @$aref;
+ my $sub = shift @args_copy; # user's callback
+ unshift @_, undef if scalar @_ == 0; # undef "index" for a scalar
+ my @args = @_; # save for post-callback work
+ $args[1] = &$sub(@_, $val, 'r', @args_copy); # invoke user callback
+ shift @args unless defined $args[0]; # drop scalar "index"
+ $final_val = $self->Store(@args); # update variable's value
+ }
+ $final_val;
+
+} # end fetch
+
+sub store {
+
+ # store() wraps the user's callback with necessary tie() bookkeeping
+ # and invokes the callback with the proper arguments. It expects:
+ #
+ # $_[0] = Tie::Watch object
+ # $_[1] = new value for a scalar, index/key for an array/hash
+ # $_[2] = undef for a scalar, new value for an array/hash
+ #
+ # The user's callback is passed these arguments:
+ #
+ # $_[0] = undef for a scalar, index/key for array/hash
+ # $_[1] = new value
+ # $_[2] = operation 'w'
+ # $_[3 .. $#_] = optional user callback arguments
+ #
+ # The user callback returns the final value to assign the variable.
+
+ my $self = shift; # Tie::Watch object
+ my $val = $self->Store(@_); # store variable's new value
+ my $aref = $self->Args('-store'); # argument reference
+ my $call = $TRACE{$aref->[0]}->[1]->{-store}; # active flag/callbacks
+ return $val unless $call->[0]; # if store inactive
+
+ foreach my $aref ( reverse @$call[ 1 .. $#{@$call} ] ) {
+ my ( @args_copy ) = @$aref;
+ my $sub = shift @args_copy; # user's callback
+ unshift @_, undef if scalar @_ == 1; # undef "index" for a scalar
+ my @args = @_; # save for post-callback work
+ $args[1] = &$sub(@_, 'w', @args_copy); # invoke user callback
+ shift @args unless defined $args[0]; # drop scalar "index"
+ $self->Store(@args); # update variable's value
+ }
+
+} # end store
+
+sub destroy {
+
+ # destroy() wraps the user's callback with necessary tie() bookkeeping
+ # and invokes the callback with the proper arguments. It expects:
+ #
+ # $_[0] = Tie::Watch object
+ #
+ # The user's callback is passed these arguments:
+ #
+ # $_[0] = undef for a scalar, index/key for array/hash
+ # $_[1] = final value
+ # $_[2] = operation 'u'
+ # $_[3 .. $#_] = optional user callback arguments
+
+ my $self = shift; # Tie::Watch object
+ my $val = $self->Fetch(@_); # variable's final value
+ my $aref = $self->Args('-destroy'); # argument reference
+ my $call = $TRACE{$aref->[0]}->[1]->{-destroy}; # active flag/callbacks
+ return $val unless $call->[0]; # if destroy inactive
+
+ foreach my $aref ( reverse @$call[ 1 .. $#{@$call} ] ) {
+ my ( @args_copy ) = @$aref;
+ my $sub = shift @args_copy; # user's callback
+ my $val = $self->Fetch(@_); # get final value
+ &$sub(undef, $val, 'u', @args_copy); # invoke user callback
+ $self->Destroy(@_); # destroy variable
+ }
+
+} # end destroy
+
+sub Tk::Widget::traceVariable {
+
+ my( $parent, $vref, $op, $callback ) = @_;
+
+ {
+ $^W = 0;
+ croak "Illegal parent '$parent', not a widget" unless ref $parent;
+ croak "Illegal variable '$vref', not a reference" unless ref $vref;
+ croak "Illegal trace operation '$op'" unless $op;
+ croak "Illegal trace operation '$op'" if $op =~ /[^rwu]/;
+ croak "Illegal callback ($callback)" unless $callback;
+ }
+
+ # Need to add our internal callback to user's callback arg list
+ # so we can call ours first, followed by the user's callback and
+ # any user arguments. Trace callbacks are activated as requied.
+
+ my $trace = $TRACE{$vref};
+ if ( not defined $trace ) {
+ my $watch = Tie::Watch->new(
+ -variable => $vref,
+ -fetch => [ \&fetch, $vref ],
+ -store => [ \&store, $vref ],
+ -destroy => [ \&destroy, $vref ],
+ );
+ $trace = $TRACE{$vref} =
+ [$watch,
+ {
+ -fetch => [ 0 ],
+ -store => [ 0 ],
+ -destroy => [ 0 ],
+ }
+ ];
+ }
+
+ $callback = [ $callback ] if ref $callback eq 'CODE';
+
+ foreach my $o (split '', $op) {
+ push @{$trace->[1]->{$OP{$o}}}, $callback;
+ $trace->[1]->{$OP{$o}}->[0] = 1; # activate
+ }
+
+ return $trace; # for peeking
+
+} # end traceVariable
+
+sub Tk::Widget::traceVdelete {
+
+ my ( $parent, $vref, $op_not_honored, $callabck_not_honored ) = @_;
+
+ if ( defined $TRACE{$vref}->[0] ) {
+ $$vref = $TRACE{$vref}->[0]->Fetch;
+ $TRACE{$vref}->[0]->Unwatch;
+ delete $TRACE{$vref};
+ }
+
+} # end traceVdelete
+
+sub Tk::Widget::traceVinfo {
+
+ my ( $parent, $vref ) = @_;
+
+ return ( defined $TRACE{$vref}->[0] ) ? $TRACE{$vref}->[0]->Info : undef;
+
+} # end traceVinfo
+
+=head1 NAME
+
+Tk::Trace - emulate Tcl/Tk B<trace> functions.
+
+=head1 SYNOPSIS
+
+ use Tk::Trace
+
+ $mw->traceVariable(\$v, 'wru' => [\&update_meter, $scale]);
+ %vinfo = $mw->traceVinfo(\$v);
+ print "Trace info :\n ", join("\n ", @{$vinfo{-legible}}), "\n";
+ $mw->traceVdelete(\$v);
+
+=head1 DESCRIPTION
+
+This class module emulates the Tcl/Tk B<trace> family of commands by
+binding subroutines of your devising to Perl variables using simple
+B<Tie::Watch> features.
+
+Callback format is patterned after the Perl/Tk scheme: supply either a
+code reference, or, supply an array reference and pass the callback
+code reference in the first element of the array, followed by callback
+arguments.
+
+User callbacks are passed these arguments:
+
+ $_[0] = undef for a scalar, index/key for array/hash
+ $_[1] = variable's current (read), new (write), final (undef) value
+ $_[2] = operation (r, w, or u)
+ $_[3 .. $#_] = optional user callback arguments
+
+As a Trace user, you have an important responsibility when writing your
+callback, since you control the final value assigned to the variable.
+A typical callback might look like:
+
+ sub callback {
+ my($index, $value, $op, @args) = @_;
+ return if $op eq 'u';
+ # .... code which uses $value ...
+ return $value; # variable's final value
+ }
+
+Note that the callback's return value becomes the variable's final value,
+for either read or write traces.
+
+For write operations, the variable is updated with its new value before
+the callback is invoked.
+
+Multiple read, write and undef callbacks can be attached to a variable,
+which are invoked in reverse order of creation.
+
+=head1 METHODS
+
+=over 4
+
+=item $mw->traceVariable(varRef, op => callback);
+
+B<varRef> is a reference to the scalar, array or hash variable you
+wish to trace. B<op> is the trace operation, and can be any combination
+of B<r> for read, B<w> for write, and B<u> for undef. B<callback> is a
+standard Perl/Tk callback, and is invoked, depending upon the value of
+B<op>, whenever the variable is read, written, or destroyed.
+
+=item %vinfo = $mw->traceVinfo(varRef);
+
+Returns a hash detailing the internals of the Trace object, with these
+keys:
+
+ %vinfo = (
+ -variable => varRef
+ -debug => '0'
+ -shadow => '1'
+ -value => 'HELLO SCALAR'
+ -destroy => callback
+ -fetch => callback
+ -store => callback
+ -legible => above data formatted as a list of string, for printing
+ );
+
+For array and hash Trace objects, the B<-value> key is replaced with a
+B<-ptr> key which is a reference to the parallel array or hash.
+Additionally, for an array or hash, there are key/value pairs for
+all the variable specific callbacks.
+
+=item $mw->traceVdelete(\$v);
+
+Stop tracing the variable.
+
+=back
+
+=head1 EXAMPLES
+
+ # Trace a Scale's variable and move a meter in unison.
+
+ use Tk;
+ use Tk::widgets qw/Trace/;
+
+ $pi = 3.1415926;
+ $mw = MainWindow->new;
+ $c = $mw->Canvas( qw/-width 200 -height 110 -bd 2 -relief sunken/ )->grid;
+ $c->createLine( qw/100 100 10 100 -tag meter -arrow last -width 5/ );
+ $s = $mw->Scale( qw/-orient h -from 0 -to 100 -variable/ => \$v )->grid;
+ $mw->Label( -text => 'Slide Me for 5 Seconds' )->grid;
+
+ $mw->traceVariable( \$v, 'w' => [ \&update_meter, $s ] );
+
+ $mw->after( 5000 => sub {
+ print "Untrace time ...\n";
+ %vinfo = $s->traceVinfo( \$v );
+ print "Watch info :\n ", join("\n ", @{$vinfo{-legible}}), "\n";
+ $c->traceVdelete( \$v );
+ });
+
+ MainLoop;
+
+ sub update_meter {
+ my( $index, $value, $op, @args ) = @_;
+ return if $op eq 'u';
+ $min = $s->cget( -from );
+ $max = $s->cget( -to );
+ $pos = $value / abs( $max - $min );
+ $x = 100.0 - 90.0 * ( cos( $pos * $pi ) );
+ $y = 100.0 - 90.0 * ( sin( $pos * $pi ) );
+ $c->coords( qw/meter 100 100/, $x, $y );
+ return $value;
+ }
+
+ # Predictive text entry.
+
+ use Tk;
+ use Tk::widgets qw/ LabEntry Trace /;
+ use strict;
+
+ my @words = qw/radio television telephone turntable microphone/;
+
+ my $mw = MainWindow->new;
+
+ my $e = $mw->LabEntry(
+ qw/ -label Thing -width 40 /,
+ -labelPack => [ qw/ -side left / ],
+ -textvariable => \my $thing,
+ );
+ my $t = $mw->Text( qw/ -height 10 -width 50 / );;
+
+ $t->pack( $e, qw/ -side top / );
+
+ $e->focus;
+ $e->traceVariable( \$thing, 'w', [ \&trace_thing, $e, $t ] );
+
+ foreach my $k ( 1 .. 12 ) {
+ $e->bind( "<F${k}>" => [ \&ins, $t, Ev('K') ] );
+ }
+ $e->bind( '<Return>' =>
+ sub {
+ print "$thing\n";
+ $_[0]->delete( 0, 'end' );
+ }
+ );
+
+ MainLoop;
+
+ sub trace_thing {
+
+ my( $index, $value, $op, $e, $t ) = @_;
+
+ return unless $value;
+
+ $t->delete( qw/ 1.0 end / );
+ foreach my $w ( @words ) {
+ if ( $w =~ /^$value/ ) {
+ $t->insert( 'end', "$w\n" );
+ }
+ }
+
+ return $value;
+
+ } # end trace_thing
+
+ sub ins {
+
+ my( $e, $t, $K ) = @_;
+
+ my( $index ) = $K =~ /^F(\d+)$/;
+
+ $e->delete( 0, 'end' );
+ $e->insert( 'end', $t->get( "$index.0", "$index.0 lineend" ) );
+ $t->delete( qw/ 1.0 end / );
+
+ } # end ins
+
+=head1 HISTORY
+
+ Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 2000/08/01
+ . Version 1.0, for Tk800.022.
+
+ sol0@Lehigh.EDU, Lehigh University Computing Center, 2003/09/22
+ . Version 1.1, for Tk804.025, add support for multiple traces of the same
+ type on the same variable.
+
+=head1 COPYRIGHT
+
+Copyright (C) 2000 - 2003 Stephen O. Lidie. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Tree.pm b/Master/tlpkg/tlperl/lib/Tk/Tree.pm
new file mode 100644
index 00000000000..6d4f76b0c63
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Tree.pm
@@ -0,0 +1,228 @@
+package Tk::Tree;
+# Tree -- TixTree widget
+#
+# Derived from Tree.tcl in Tix 4.1
+#
+# Chris Dean <ctdean@cogit.com>
+
+use vars qw($VERSION);
+$VERSION = '4.005'; # $Id: //depot/Tkutf8/Tixish/Tree.pm#5 $
+
+use Tk ();
+use Tk::Derived;
+use Tk::HList;
+use base qw(Tk::Derived Tk::HList);
+use strict;
+
+Construct Tk::Widget 'Tree';
+
+sub Tk::Widget::ScrlTree { shift->Scrolled('Tree' => @_) }
+
+sub Populate
+{
+ my( $w, $args ) = @_;
+
+ $w->SUPER::Populate( $args );
+
+ $w->ConfigSpecs(
+ -ignoreinvoke => ['PASSIVE', 'ignoreInvoke', 'IgnoreInvoke', 0],
+ -opencmd => ['CALLBACK', 'openCmd', 'OpenCmd', 'OpenCmd' ],
+ -indicatorcmd => ['CALLBACK', 'indicatorCmd', 'IndicatorCmd', 'IndicatorCmd'],
+ -closecmd => ['CALLBACK', 'closeCmd', 'CloseCmd', 'CloseCmd'],
+ -indicator => ['SELF', 'indicator', 'Indicator', 1],
+ -indent => ['SELF', 'indent', 'Indent', 20],
+ -width => ['SELF', 'width', 'Width', 20],
+ -itemtype => ['SELF', 'itemtype', 'Itemtype', 'imagetext'],
+ -foreground => ['SELF'],
+ );
+}
+
+sub autosetmode
+{
+ my( $w ) = @_;
+ $w->setmode();
+}
+
+sub IndicatorCmd
+{
+ my( $w, $ent, $event ) = @_;
+
+ my $mode = $w->getmode( $ent );
+
+ if ( $event eq '<Arm>' )
+ {
+ if ($mode eq 'open' )
+ {
+ $w->_indicator_image( $ent, 'plusarm' );
+ }
+ else
+ {
+ $w->_indicator_image( $ent, 'minusarm' );
+ }
+ }
+ elsif ( $event eq '<Disarm>' )
+ {
+ if ($mode eq 'open' )
+ {
+ $w->_indicator_image( $ent, 'plus' );
+ }
+ else
+ {
+ $w->_indicator_image( $ent, 'minus' );
+ }
+ }
+ elsif( $event eq '<Activate>' )
+ {
+ $w->Activate( $ent, $mode );
+ $w->Callback( -browsecmd => $ent );
+ }
+}
+
+sub close
+{
+ my( $w, $ent ) = @_;
+ my $mode = $w->getmode( $ent );
+ $w->Activate( $ent, $mode ) if( $mode eq 'close' );
+}
+
+sub open
+{
+ my( $w, $ent ) = @_;
+ my $mode = $w->getmode( $ent );
+ $w->Activate( $ent, $mode ) if( $mode eq 'open' );
+}
+
+sub getmode
+{
+ my( $w, $ent ) = @_;
+
+ return( 'none' ) unless $w->indicatorExists( $ent );
+
+ my $img = $w->_indicator_image( $ent );
+ return( 'open' ) if( $img eq 'plus' || $img eq 'plusarm' );
+ return( 'close' );
+}
+
+sub setmode
+{
+ my ($w,$ent,$mode) = @_;
+ unless (defined $mode)
+ {
+ $mode = 'none';
+ my @args;
+ push(@args,$ent) if defined $ent;
+ my @children = $w->infoChildren( @args );
+ if ( @children )
+ {
+ $mode = 'close';
+ foreach my $c (@children)
+ {
+ $mode = 'open' if $w->infoHidden( $c );
+ $w->setmode( $c );
+ }
+ }
+ }
+
+ if (defined $ent)
+ {
+ if ( $mode eq 'open' )
+ {
+ $w->_indicator_image( $ent, 'plus' );
+ }
+ elsif ( $mode eq 'close' )
+ {
+ $w->_indicator_image( $ent, 'minus' );
+ }
+ elsif( $mode eq 'none' )
+ {
+ $w->_indicator_image( $ent, undef );
+ }
+ }
+}
+
+sub Activate
+{
+ my( $w, $ent, $mode ) = @_;
+ if ( $mode eq 'open' )
+ {
+ $w->Callback( -opencmd => $ent );
+ $w->_indicator_image( $ent, 'minus' );
+ }
+ elsif ( $mode eq 'close' )
+ {
+ $w->Callback( -closecmd => $ent );
+ $w->_indicator_image( $ent, 'plus' );
+ }
+ else
+ {
+
+ }
+}
+
+sub OpenCmd
+{
+ my( $w, $ent ) = @_;
+ # The default action
+ foreach my $kid ($w->infoChildren( $ent ))
+ {
+ $w->show( -entry => $kid );
+ }
+}
+
+sub CloseCmd
+{
+ my( $w, $ent ) = @_;
+
+ # The default action
+ foreach my $kid ($w->infoChildren( $ent ))
+ {
+ $w->hide( -entry => $kid );
+ }
+}
+
+sub Command
+{
+ my( $w, $ent ) = @_;
+
+ return if $w->{Configure}{-ignoreInvoke};
+
+ $w->Activate( $ent, $w->getmode( $ent ) ) if $w->indicatorExists( $ent );
+}
+
+sub _indicator_image
+{
+ my( $w, $ent, $image ) = @_;
+ my $data = $w->privateData();
+ if (@_ > 2)
+ {
+ if (defined $image)
+ {
+ $w->indicatorCreate( $ent, -itemtype => 'image' )
+ unless $w->indicatorExists($ent);
+ $data->{$ent} = $image;
+ $w->indicatorConfigure( $ent, -image => $w->Getimage( $image ) );
+ }
+ else
+ {
+ $w->indicatorDelete( $ent ) if $w->indicatorExists( $ent );
+ delete $data->{$ent};
+ }
+ }
+ return $data->{$ent};
+}
+
+1;
+
+__END__
+
+# Copyright (c) 1996, Expert Interface Technologies
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# The file man.macros and some of the macros used by this file are
+# copyrighted: (c) 1990 The Regents of the University of California.
+# (c) 1994-1995 Sun Microsystems, Inc.
+# The license terms of the Tcl/Tk distrobution are in the file
+# license.tcl.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/Widget.pm b/Master/tlpkg/tlperl/lib/Tk/Widget.pm
new file mode 100644
index 00000000000..e94c037e6fe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Widget.pm
@@ -0,0 +1,1510 @@
+# Copyright (c) 1995-2004 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Widget;
+use vars qw($VERSION @DefaultMenuLabels);
+$VERSION = sprintf '4.%03d', q$Revision: #30 $ =~ /\D(\d+)\s*$/;
+
+require Tk;
+use AutoLoader;
+use strict;
+use Carp;
+use base qw(DynaLoader Tk);
+
+# stubs for 'autoloaded' widget classes
+sub Button;
+sub Canvas;
+sub Checkbutton;
+sub Entry;
+sub Frame;
+sub Label;
+sub Labelframe;
+sub Listbox;
+sub Menu;
+sub Menubutton;
+sub Message;
+sub Panedwindow;
+sub Radiobutton;
+sub Scale;
+sub Scrollbar;
+sub Spinbox;
+sub Text;
+sub Toplevel;
+
+sub Pixmap;
+sub Bitmap;
+sub Photo;
+
+sub ScrlListbox;
+sub Optionmenu;
+
+sub import
+{
+ my $package = shift;
+ carp 'use Tk::Widget () to pre-load widgets is deprecated' if (@_);
+ my $need;
+ foreach $need (@_)
+ {
+ unless (defined &{$need})
+ {
+ require "Tk/${need}.pm";
+ }
+ croak "Cannot locate $need" unless (defined &{$need});
+ }
+}
+
+@DefaultMenuLabels = qw[~File ~Help];
+
+# Some tidy-ness functions for winfo stuff
+
+sub True { 1 }
+sub False { 0 }
+
+use Tk::Submethods( 'grab' => [qw(current status release -global)],
+ 'focus' => [qw(-force -lastfor)],
+ 'pack' => [qw(configure forget info propagate slaves)],
+ 'grid' => [qw(bbox columnconfigure configure forget info location propagate rowconfigure size slaves)],
+ 'form' => [qw(check configure forget grid info slaves)],
+ 'event' => [qw(add delete generate info)],
+ 'place' => [qw(configure forget info slaves)],
+ 'wm' => [qw(capture release)],
+ 'font' => [qw(actual configure create delete families measure metrics names subfonts)]
+ );
+
+BEGIN {
+ # FIXME - these don't work in the compiler
+ *IsMenu = \&False;
+ *IsMenubutton = \&False;
+ *configure_self = \&Tk::configure;
+ *cget_self = \&Tk::cget;
+}
+
+
+
+Direct Tk::Submethods (
+ 'winfo' => [qw(cells class colormapfull depth exists
+ geometry height id ismapped manager name parent reqheight
+ reqwidth rootx rooty screen screencells screendepth screenheight
+ screenmmheight screenmmwidth screenvisual screenwidth visual
+ visualsavailable vrootheight viewable vrootwidth vrootx vrooty
+ width x y toplevel children pixels pointerx pointery pointerxy
+ server fpixels rgb )],
+ 'tk' => [qw(appname caret scaling useinputmethods windowingsystem)]);
+
+
+sub DESTROY
+{
+ my $w = shift;
+ $w->destroy if ($w->IsWidget);
+}
+
+sub Install
+{
+ # Dynamically loaded widgets add their core commands
+ # to the Tk base class here
+ my ($package,$mw) = @_;
+}
+
+sub ClassInit
+{
+ # Carry out class bindings (or whatever)
+ my ($package,$mw) = @_;
+ return $package;
+}
+
+sub CreateOptions
+{
+ return ();
+}
+
+sub CreateArgs
+{
+ my ($package,$parent,$args) = @_;
+ # Remove from hash %$args any configure-like
+ # options which only apply at create time (e.g. -colormap for Frame),
+ # or which may as well be applied right away
+ # return these as a list of -key => value pairs
+ # Augment same hash with default values for missing mandatory options,
+ # allthough this can be done later in InitObject.
+
+ # Honour -class => if present, we have hacked Tk_ConfigureWidget to
+ # allow -class to be passed to any widget.
+ my @result = ();
+ my $class = delete $args->{'-class'};
+ ($class) = $package =~ /([A-Z][A-Z0-9_]*)$/i unless (defined $class);
+ @result = (-class => "\u$class") if (defined $class);
+ foreach my $opt ($package->CreateOptions)
+ {
+ push(@result, $opt => delete $args->{$opt}) if exists $args->{$opt};
+ }
+ return @result;
+}
+
+sub InitObject
+{
+ my ($obj,$args) = @_;
+ # per object initialization, for example populating
+ # with sub-widgets, adding a few object bindings to augment
+ # inherited class bindings, changing binding tags.
+ # Also another chance to mess with %$args before configure...
+}
+
+sub SetBindtags
+{
+ my ($obj) = @_;
+ $obj->bindtags([ref($obj),$obj,$obj->toplevel,'all']);
+}
+
+sub new
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $package = shift;
+ my $parent = shift;
+ $package->InitClass($parent);
+ $parent->BackTrace("Odd number of args to $package->new(...)") unless ((@_ % 2) == 0);
+ my %args = @_;
+ my @args = $package->CreateArgs($parent,\%args);
+ my $cmd = $package->Tk_cmd;
+ my $pname = $parent->PathName;
+ $pname = '' if ($pname eq '.');
+ my $leaf = delete $args{'Name'};
+ if (defined $leaf)
+ {
+ $leaf =~ s/[^a-z0-9_#]+/_/ig;
+ $leaf = lcfirst($leaf);
+ }
+ else
+ {
+ ($leaf) = "\L$package" =~ /([a-z][a-z0-9_]*)$/;
+ }
+ my $lname = $pname . '.' . $leaf;
+ # create a hash indexed by leaf name to speed up
+ # creation of a lot of sub-widgets of the same type
+ # e.g. entries in Table
+ my $nhash = $parent->TkHash('_names_');
+ $nhash->{$leaf} = 0 unless (exists $nhash->{$leaf});
+ while (defined ($parent->Widget($lname)))
+ {
+ $lname = $pname . '.' . $leaf . ++$nhash->{$leaf};
+ }
+ my $obj = eval { &$cmd($parent, $lname, @args) };
+ confess $@ if $@;
+ unless (ref $obj)
+ {
+ die "No value from $cmd $lname" unless defined $obj;
+ warn "$cmd '$lname' returned '$obj'" unless $obj eq $lname;
+ $obj = $parent->Widget($lname = $obj);
+ die "$obj from $lname" unless ref $obj;
+ }
+ bless $obj,$package;
+ $obj->SetBindtags;
+ my $notice = $parent->can('NoticeChild');
+ $parent->$notice($obj,\%args) if $notice;
+ $obj->InitObject(\%args);
+# ASkludge(\%args,1);
+ $obj->configure(%args) if (%args);
+# ASkludge(\%args,0);
+ return $obj;
+}
+
+sub DelegateFor
+{
+ my ($w,$method) = @_;
+ while(exists $w->{'Delegates'})
+ {
+ my $delegate = $w->{'Delegates'};
+ my $widget = $delegate->{$method};
+ $widget = $delegate->{DEFAULT} unless (defined $widget);
+ $widget = $w->Subwidget($widget) if (defined $widget && !ref $widget);
+ last unless (defined $widget);
+ last if $widget == $w;
+ $w = $widget;
+ }
+ return $w;
+}
+
+sub Delegates
+{
+ my $cw = shift;
+ my $specs = $cw->TkHash('Delegates');
+ while (@_)
+ {
+ my $key = shift;
+ my $val = shift;
+ $specs->{$key} = $val;
+ }
+ return $specs;
+}
+
+sub Construct
+{
+ my ($base,$name) = @_;
+ my $class = (caller(0))[0];
+ no strict 'refs';
+
+ # Hack for broken ->isa in perl5.6.0
+ delete ${"$class\::"}{'::ISA::CACHE::'} if $] == 5.006;
+
+ # Pre ->isa scheme
+ *{$base.'::Is'.$name} = \&False;
+ *{$class.'::Is'.$name} = \&True;
+
+ # DelegateFor trickyness is to allow Frames and other derived things
+ # to force creation in a delegate e.g. a ScrlText with embeded windows
+ # need those windows to be children of the Text to get clipping right
+ # and not of the Frame which contains the Text and the scrollbars.
+ *{$base.'::'."$name"} = sub { $class->new(shift->DelegateFor('Construct'),@_) };
+}
+
+sub IS
+{
+ return (defined $_[1]) && $_[0] == $_[1];
+}
+
+sub _AutoloadTkWidget
+{
+ my ($self,$method) = @_;
+ my $what = "Tk::Widget::$method";
+ unless (defined &$what)
+ {
+ require "Tk/$method.pm";
+ }
+ return $what;
+}
+
+# require UNIVERSAL; don't load .pm use XS code from perl core though
+
+sub AUTOLOAD
+{
+ # Take a copy into a 'my' variable so we can recurse
+ my $what = $Tk::Widget::AUTOLOAD;
+ my $save = $@;
+ my $name;
+ # warn "AUTOLOAD $what ".(ref($_[0]) || $_[0])."\n";
+ # Braces used to preserve $1 et al.
+ {
+ my ($pkg,$func) = $what =~ /(.*)::([^:]+)$/;
+ confess("Attempt to load '$what'") unless defined($pkg) && $func =~ /^[\w:]+$/;
+ $pkg =~ s#::#/#g;
+ if (defined($name=$INC{"$pkg.pm"}))
+ {
+ $name =~ s#^(.*)$pkg\.pm$#$1auto/$pkg/$func.al#;
+ }
+ else
+ {
+ $name = "auto/$what.al";
+ $name =~ s#::#/#g;
+ }
+ }
+ # This may fail, catch error and prevent user's __DIE__ handler
+ # from triggering as well...
+ eval {local $SIG{'__DIE__'}; require $name};
+ if ($@)
+ {
+ croak $@ unless ($@ =~ /Can't locate\s+(?:file\s+)?'?\Q$name\E'?/);
+ my($package,$method) = ($what =~ /^(.*)::([^:]*)$/);
+ if (ref $_[0] && !$_[0]->can($method)
+ && $_[0]->can('Delegate')
+ && $method !~ /^(ConfigSpecs|Delegates)/ )
+ {
+ my $delegate = $_[0]->Delegates;
+ if (%$delegate || tied %$delegate)
+ {
+ my $widget = $delegate->{$method};
+ $widget = $delegate->{DEFAULT} unless (defined $widget);
+ if (defined $widget)
+ {
+ my $subwidget = (ref $widget) ? $widget : $_[0]->Subwidget($widget);
+ if (defined $subwidget)
+ {
+ no strict 'refs';
+ # print "AUTOLOAD: $what\n";
+ *{$what} = sub { shift->Delegate($method,@_) };
+ }
+ else
+ {
+ croak "No delegate subwidget '$widget' for $what";
+ }
+ }
+ }
+ }
+ if (!defined(&$what) && ref($_[0]) && $method =~ /^[A-Z]\w+$/)
+ {
+ # Use ->can as ->isa is broken in perl5.6.0
+ my $sub = UNIVERSAL::can($_[0],'_AutoloadTkWidget');
+ if ($sub)
+ {
+ carp "Assuming 'require Tk::$method;'" unless $_[0]->can($method);
+ $what = $_[0]->$sub($method)
+ }
+ }
+ }
+ $@ = $save;
+ $DB::sub = $what; # Tell debugger what is going on...
+ unless (defined &$what)
+ {
+ no strict 'refs';
+ *{$what} = sub { croak("Failed to AUTOLOAD '$what'") };
+ }
+ goto &$what;
+}
+
+sub _Destroyed
+{
+ my $w = shift;
+ my $a = delete $w->{'_Destroy_'};
+ if (ref($a))
+ {
+ while (@$a)
+ {
+ my $ent = pop(@$a);
+ if (ref $ent)
+ {
+ eval {local $SIG{'__DIE__'}; $ent->Call };
+ }
+ else
+ {
+ delete $w->{$ent};
+ }
+ }
+ }
+}
+
+sub _OnDestroy
+{
+ my $w = shift;
+ $w->{'_Destroy_'} = [] unless (exists $w->{'_Destroy_'});
+ push(@{$w->{'_Destroy_'}},@_);
+}
+
+sub OnDestroy
+{
+ my $w = shift;
+ $w->_OnDestroy(Tk::Callback->new(@_));
+}
+
+sub TkHash
+{
+ my ($w,$key) = @_;
+ return $w->{$key} if exists $w->{$key};
+ my $hash = $w->{$key} = {};
+ $w->_OnDestroy($key);
+ return $hash;
+}
+
+sub privateData
+{
+ my $w = shift;
+ my $p = shift || caller;
+ $w->{$p} ||= {};
+}
+
+my @image_types;
+my %image_method;
+
+sub ImageMethod
+{
+ shift if (@_ & 1);
+ while (@_)
+ {
+ my ($name,$method) = splice(@_,0,2);
+ push(@image_types,$name);
+ $image_method{$name} = $method;
+ }
+}
+
+sub Getimage
+{
+ my ($w, $name) = @_;
+ my $mw = $w->MainWindow;
+ croak "Usage \$widget->Getimage('name')" unless defined($name);
+ my $images = ($mw->{'__Images__'} ||= {});
+
+ return $images->{$name} if $images->{$name};
+
+ ImageMethod(xpm => 'Pixmap',
+ gif => 'Photo',
+ ppm => 'Photo',
+ xbm => 'Bitmap' ) unless @image_types;
+
+ foreach my $type (@image_types)
+ {
+ my $method = $image_method{$type};
+ my $file = Tk->findINC( "$name.$type" );
+ next unless( $file && $method );
+ my $sub = $w->can($method);
+ unless (defined &$sub)
+ {
+ require Tk::widgets;
+ Tk::widgets->import($method);
+ }
+ $images->{$name} = $w->$method( -file => $file );
+ return $images->{$name};
+ }
+
+ # Try built-in bitmaps
+ $images->{$name} = $w->Pixmap( -id => $name );
+ return $images->{$name};
+}
+
+sub SaveGrabInfo
+{
+ my $w = shift;
+ $Tk::oldGrab = $w->grabCurrent;
+ if (defined $Tk::oldGrab)
+ {
+ $Tk::grabStatus = $Tk::oldGrab->grabStatus;
+ }
+}
+
+sub grabSave
+{
+ my ($w) = @_;
+ my $grab = $w->grabCurrent;
+ return sub {} if (!defined $grab);
+ my $method = ($grab->grabStatus eq 'global') ? 'grabGlobal' : 'grab';
+ return sub { eval {local $SIG{'__DIE__'}; $grab->$method() } };
+}
+
+sub focusCurrent
+{
+ my ($w) = @_;
+ $w->Tk::focus('-displayof');
+}
+
+sub focusSave
+{
+ my ($w) = @_;
+ my $focus = $w->focusCurrent;
+ return sub {} if (!defined $focus);
+ return sub { eval {local $SIG{'__DIE__'}; $focus->focus } };
+}
+
+# This is supposed to replicate Tk::after behaviour,
+# but does auto-cancel when widget is deleted.
+require Tk::After;
+
+sub afterCancel
+{
+ my ($w,$what) = @_;
+ if (defined $what)
+ {
+ return $what->cancel if ref($what);
+ carp "dubious cancel of $what" if 0 && $^W;
+ $w->Tk::after('cancel' => $what);
+ }
+}
+
+sub afterIdle
+{
+ my $w = shift;
+ return Tk::After->new($w,'idle','once',@_);
+}
+
+sub afterInfo {
+ my ($w, $id) = @_;
+ if (defined $id) {
+ return ($id->[4], $id->[2], $id->[3]);
+ } else {
+ return sort( keys %{$w->{_After_}} );
+ }
+}
+
+sub after
+{
+ my $w = shift;
+ my $t = shift;
+ if (@_)
+ {
+ if ($t ne 'cancel')
+ {
+ require Tk::After;
+ return Tk::After->new($w,$t,'once',@_)
+ }
+ while (@_)
+ {
+ my $what = shift;
+ $w->afterCancel($what);
+ }
+ }
+ else
+ {
+ $w->Tk::after($t);
+ }
+}
+
+sub repeat
+{
+ require Tk::After;
+ my $w = shift;
+ my $t = shift;
+ return Tk::After->new($w,$t,'repeat',@_);
+}
+
+sub FindMenu
+{
+ # default FindMenu is that there is no menu.
+ return undef;
+}
+
+sub XEvent { shift->{'_XEvent_'} }
+
+sub propertyRoot
+{
+ my $w = shift;
+ return $w->property(@_,'root');
+}
+
+# atom, atomname, containing, interps, pathname
+# don't work this way - there is no window arg
+# So we pretend there was an call the C versions from Tk.xs
+
+sub atom { shift->InternAtom(@_) }
+sub atomname { shift->GetAtomName(@_) }
+sub containing { shift->Containing(@_) }
+
+# interps not done yet
+# pathname not done yet
+
+# walk and descendants adapted from Stephen's composite
+# versions as they only use core features they can go here.
+# hierachy is reversed in that descendants calls walk rather
+# than vice versa as this avoids building a list.
+# Walk should possibly be enhanced so allow early termination
+# like '-prune' of find.
+
+sub Walk
+{
+ # Traverse a widget hierarchy while executing a subroutine.
+ my($cw, $proc, @args) = @_;
+ my $subwidget;
+ foreach $subwidget ($cw->children)
+ {
+ $subwidget->Walk($proc,@args);
+ &$proc($subwidget, @args);
+ }
+} # end walk
+
+sub Descendants
+{
+ # Return a list of widgets derived from a parent widget and all its
+ # descendants of a particular class.
+ # If class is not passed returns the entire widget hierarchy.
+
+ my($widget, $class) = @_;
+ my(@widget_tree) = ();
+
+ $widget->Walk(
+ sub { my ($widget,$list,$class) = @_;
+ push(@$list, $widget) if (!defined($class) or $class eq $widget->class);
+ },
+ \@widget_tree, $class
+ );
+ return @widget_tree;
+}
+
+sub Palette
+{
+ my $w = shift->MainWindow;
+ unless (exists $w->{_Palette_})
+ {
+ my %Palette = ();
+ my $c = $w->Checkbutton();
+ my $e = $w->Entry();
+ my $s = $w->Scrollbar();
+ $Palette{'activeBackground'} = ($c->configure('-activebackground'))[3] ;
+ $Palette{'activeForeground'} = ($c->configure('-activeforeground'))[3];
+ $Palette{'background'} = ($c->configure('-background'))[3];
+ $Palette{'disabledForeground'} = ($c->configure('-disabledforeground'))[3];
+ $Palette{'foreground'} = ($c->configure('-foreground'))[3];
+ $Palette{'highlightBackground'} = ($c->configure('-highlightbackground'))[3];
+ $Palette{'highlightColor'} = ($c->configure('-highlightcolor'))[3];
+ $Palette{'insertBackground'} = ($e->configure('-insertbackground'))[3];
+ $Palette{'selectColor'} = ($c->configure('-selectcolor'))[3];
+ $Palette{'selectBackground'} = ($e->configure('-selectbackground'))[3];
+ $Palette{'selectForeground'} = ($e->configure('-selectforeground'))[3];
+ $Palette{'troughColor'} = ($s->configure('-troughcolor'))[3];
+ $c->destroy;
+ $e->destroy;
+ $s->destroy;
+ $w->{_Palette_} = \%Palette;
+ }
+ return $w->{_Palette_};
+}
+
+# tk_setPalette --
+# Changes the default color scheme for a Tk application by setting
+# default colors in the option database and by modifying all of the
+# color options for existing widgets that have the default value.
+#
+# Arguments:
+# The arguments consist of either a single color name, which
+# will be used as the new background color (all other colors will
+# be computed from this) or an even number of values consisting of
+# option names and values. The name for an option is the one used
+# for the option database, such as activeForeground, not -activeforeground.
+sub setPalette
+{
+ my $w = shift->MainWindow;
+ my %new = (@_ == 1) ? (background => $_[0]) : @_;
+ my $priority = delete($new{'priority'}) || 'widgetDefault';
+
+ # Create an array that has the complete new palette. If some colors
+ # aren't specified, compute them from other colors that are specified.
+
+ die 'must specify a background color' if (!exists $new{background});
+ $new{'foreground'} = 'black' unless (exists $new{foreground});
+ my @bg = $w->rgb($new{'background'});
+ my @fg = $w->rgb($new{'foreground'});
+ my $darkerBg = sprintf('#%02x%02x%02x',9*$bg[0]/2560,9*$bg[1]/2560,9*$bg[2]/2560);
+ foreach my $i ('activeForeground','insertBackground','selectForeground','highlightColor')
+ {
+ $new{$i} = $new{'foreground'} unless (exists $new{$i});
+ }
+ unless (exists $new{'disabledForeground'})
+ {
+ $new{'disabledForeground'} = sprintf('#%02x%02x%02x',(3*$bg[0]+$fg[0])/1024,(3*$bg[1]+$fg[1])/1024,(3*$bg[2]+$fg[2])/1024);
+ }
+ $new{'highlightBackground'} = $new{'background'} unless (exists $new{'highlightBackground'});
+
+ unless (exists $new{'activeBackground'})
+ {
+ my @light;
+ # Pick a default active background that is lighter than the
+ # normal background. To do this, round each color component
+ # up by 15% or 1/3 of the way to full white, whichever is
+ # greater.
+ foreach my $i (0, 1, 2)
+ {
+ $light[$i] = $bg[$i]/256;
+ my $inc1 = $light[$i]*15/100;
+ my $inc2 = (255-$light[$i])/3;
+ if ($inc1 > $inc2)
+ {
+ $light[$i] += $inc1
+ }
+ else
+ {
+ $light[$i] += $inc2
+ }
+ $light[$i] = 255 if ($light[$i] > 255);
+ }
+ $new{'activeBackground'} = sprintf('#%02x%02x%02x',@light);
+ }
+ $new{'selectBackground'} = $darkerBg unless (exists $new{'selectBackground'});
+ $new{'troughColor'} = $darkerBg unless (exists $new{'troughColor'});
+ $new{'selectColor'} = '#b03060' unless (exists $new{'selectColor'});
+
+ # Before doing this, make sure that the Tk::Palette variable holds
+ # the default values of all options, so that tkRecolorTree can
+ # be sure to only change options that have their default values.
+ # If the variable exists, then it is already correct (it was created
+ # the last time this procedure was invoked). If the variable
+ # doesn't exist, fill it in using the defaults from a few widgets.
+ my $Palette = $w->Palette;
+
+ # Walk the widget hierarchy, recoloring all existing windows.
+ $w->RecolorTree(\%new);
+ # Change the option database so that future windows will get the
+ # same colors.
+ foreach my $option (keys %new)
+ {
+ $w->option('add',"*$option",$new{$option},$priority);
+ # Save the options in the global variable Tk::Palette, for use the
+ # next time we change the options.
+ $Palette->{$option} = $new{$option};
+ }
+}
+
+# tkRecolorTree --
+# This procedure changes the colors in a window and all of its
+# descendants, according to information provided by the colors
+# argument. It only modifies colors that have their default values
+# as specified by the Tk::Palette variable.
+#
+# Arguments:
+# w - The name of a window. This window and all its
+# descendants are recolored.
+# colors - The name of an array variable in the caller,
+# which contains color information. Each element
+# is named after a widget configuration option, and
+# each value is the value for that option.
+sub RecolorTree
+{
+ my ($w,$colors) = @_;
+ local ($@);
+ my $Palette = $w->Palette;
+ foreach my $dbOption (keys %$colors)
+ {
+ my $option = "-\L$dbOption";
+ my $value;
+ eval {local $SIG{'__DIE__'}; $value = $w->cget($option) };
+ if (defined $value)
+ {
+ if ($value eq $Palette->{$dbOption})
+ {
+ $w->configure($option,$colors->{$dbOption});
+ }
+ }
+ }
+ foreach my $child ($w->children)
+ {
+ $child->RecolorTree($colors);
+ }
+}
+# tkDarken --
+# Given a color name, computes a new color value that darkens (or
+# brightens) the given color by a given percent.
+#
+# Arguments:
+# color - Name of starting color.
+# perecent - Integer telling how much to brighten or darken as a
+# percent: 50 means darken by 50%, 110 means brighten
+# by 10%.
+sub Darken
+{
+ my ($w,$color,$percent) = @_;
+ my @l = $w->rgb($color);
+ my $red = $l[0]/256;
+ my $green = $l[1]/256;
+ my $blue = $l[2]/256;
+ $red = int($red*$percent/100);
+ $red = 255 if ($red > 255);
+ $green = int($green*$percent/100);
+ $green = 255 if ($green > 255);
+ $blue = int($blue*$percent/100);
+ $blue = 255 if ($blue > 255);
+ sprintf('#%02x%02x%02x',$red,$green,$blue)
+}
+# tk_bisque --
+# Reset the Tk color palette to the old "bisque" colors.
+#
+# Arguments:
+# None.
+sub bisque
+{
+ shift->setPalette('activeBackground' => '#e6ceb1',
+ 'activeForeground' => 'black',
+ 'background' => '#ffe4c4',
+ 'disabledForeground' => '#b0b0b0',
+ 'foreground' => 'black',
+ 'highlightBackground' => '#ffe4c4',
+ 'highlightColor' => 'black',
+ 'insertBackground' => 'black',
+ 'selectColor' => '#b03060',
+ 'selectBackground' => '#e6ceb1',
+ 'selectForeground' => 'black',
+ 'troughColor' => '#cdb79e'
+ );
+}
+
+sub PrintConfig
+{
+ require Tk::Pretty;
+ my ($w) = (@_);
+ my $c;
+ foreach $c ($w->configure)
+ {
+ print Tk::Pretty::Pretty(@$c),"\n";
+ }
+}
+
+sub BusyRecurse
+{
+ my ($restore,$w,$cursor,$recurse,$top) = @_;
+ my $c = $w->cget('-cursor');
+ my @tags = $w->bindtags;
+ if ($top || defined($c))
+ {
+ push(@$restore, sub { return unless Tk::Exists($w); $w->configure(-cursor => $c); $w->bindtags(\@tags) });
+ $w->configure(-cursor => $cursor);
+ }
+ else
+ {
+ push(@$restore, sub { return unless Tk::Exists($w); $w->bindtags(\@tags) });
+ }
+ $w->bindtags(['Busy',@tags]);
+ if ($recurse)
+ {
+ foreach my $child ($w->children)
+ {
+ BusyRecurse($restore,$child,$cursor,1,0);
+ }
+ }
+ return $restore;
+}
+
+sub Busy
+{
+ my ($w,@args) = @_;
+ return unless $w->viewable;
+ my($sub, %args);
+ for(my $i=0; $i<=$#args; $i++)
+ {
+ if (ref $args[$i] eq 'CODE')
+ {
+ if (defined $sub)
+ {
+ croak "Multiple code definitions not allowed in Tk::Widget::Busy";
+ }
+ $sub = $args[$i];
+ }
+ else
+ {
+ $args{$args[$i]} = $args[$i+1]; $i++;
+ }
+ }
+ my $cursor = delete $args{'-cursor'};
+ my $recurse = delete $args{'-recurse'};
+ $cursor = 'watch' unless defined $cursor;
+ unless (exists $w->{'Busy'})
+ {
+ my @old = ($w->grabSave);
+ my $key;
+ my @config;
+ foreach $key (keys %args)
+ {
+ push(@config,$key => $w->Tk::cget($key));
+ }
+ if (@config)
+ {
+ push(@old, sub { $w->Tk::configure(@config) });
+ $w->Tk::configure(%args);
+ }
+ unless ($w->Tk::bind('Busy'))
+ {
+ $w->Tk::bind('Busy','<Any-KeyPress>',[_busy => 1]);
+ $w->Tk::bind('Busy','<Any-KeyRelease>',[_busy => 0]);
+ $w->Tk::bind('Busy','<Any-ButtonPress>',[_busy => 1]);
+ $w->Tk::bind('Busy','<Any-ButtonRelease>',[_busy => 0]);
+ $w->Tk::bind('Busy','<Any-Motion>',[_busy => 0]);
+ }
+ $w->{'Busy'} = BusyRecurse(\@old,$w,$cursor,$recurse,1);
+ }
+ my $g = $w->grabCurrent;
+ if (defined $g)
+ {
+ # warn "$g has the grab";
+ $g->grabRelease;
+ }
+ $w->update;
+ eval {local $SIG{'__DIE__'}; $w->grab };
+ $w->update;
+ if ($sub)
+ {
+ eval { $sub->() };
+ my $err = $@;
+ $w->Unbusy(-recurse => $recurse);
+ die $err if $err;
+ }
+}
+
+sub _busy
+{
+ my ($w,$f) = @_;
+ $w->bell if $f;
+ $w->break;
+}
+
+sub Unbusy
+{
+ my ($w) = @_;
+ $w->update;
+ $w->grabRelease if Tk::Exists($w);
+ my $old = delete $w->{'Busy'};
+ if (defined $old)
+ {
+ local $SIG{'__DIE__'};
+ eval { &{pop(@$old)} } while (@$old);
+ }
+ $w->update if Tk::Exists($w);
+}
+
+sub waitVisibility
+{
+ my ($w) = shift;
+ $w->tkwait('visibility',$w);
+}
+
+sub waitVariable
+{
+ my ($w) = shift;
+ $w->tkwait('variable',@_);
+}
+
+sub waitWindow
+{
+ my ($w) = shift;
+ $w->tkwait('window',$w);
+}
+
+sub EventWidget
+{
+ my ($w) = @_;
+ return $w->{'_EventWidget_'};
+}
+
+sub Popwidget
+{
+ my ($ew,$method,$w,@args) = @_;
+ $w->{'_EventWidget_'} = $ew;
+ $w->$method(@args);
+}
+
+sub ColorOptions
+{
+ my ($w,$args) = @_;
+ my $opt;
+ $args = {} unless (defined $args);
+ foreach $opt (qw(-foreground -background -disabledforeground
+ -activebackground -activeforeground
+ ))
+ {
+ $args->{$opt} = $w->cget($opt) unless (exists $args->{$opt})
+ }
+ return (wantarray) ? %$args : $args;
+}
+
+sub XscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->bind($class,'<Left>', ['xview','scroll',-1,'units']);
+ $mw->bind($class,'<Control-Left>', ['xview','scroll',-1,'pages']);
+ $mw->bind($class,'<Control-Prior>',['xview','scroll',-1,'pages']);
+ $mw->bind($class,'<Right>', ['xview','scroll',1,'units']);
+ $mw->bind($class,'<Control-Right>',['xview','scroll',1,'pages']);
+ $mw->bind($class,'<Control-Next>', ['xview','scroll',1,'pages']);
+
+ $mw->bind($class,'<Home>', ['xview','moveto',0]);
+ $mw->bind($class,'<End>', ['xview','moveto',1]);
+ $mw->XMouseWheelBind($class);
+}
+
+sub PriorNextBind
+{
+ my ($mw,$class) = @_;
+ $mw->bind($class,'<Next>', ['yview','scroll',1,'pages']);
+ $mw->bind($class,'<Prior>', ['yview','scroll',-1,'pages']);
+}
+
+sub XMouseWheelBind
+{
+ my ($mw,$class) = @_;
+ # <4> and <5> are how mousewheel looks on X
+ # <4> and <5> are how mousewheel looks on X
+ $mw->bind($class,'<Shift-4>', ['xview','scroll',-1,'units']);
+ $mw->bind($class,'<Shift-5>', ['xview','scroll',1,'units']);
+ $mw->bind($class,'<Button-6>', ['xview','scroll',-1,'units']);
+ $mw->bind($class,'<Button-7>', ['xview','scroll',1,'units']);
+}
+
+sub YMouseWheelBind
+{
+ my ($mw,$class) = @_;
+ # <4> and <5> are how mousewheel looks on X
+ $mw->bind($class,'<4>', ['yview','scroll',-1,'units']);
+ $mw->bind($class,'<5>', ['yview','scroll',1,'units']);
+}
+
+sub YscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->PriorNextBind($class);
+ $mw->bind($class,'<Up>', ['yview','scroll',-1,'units']);
+ $mw->bind($class,'<Down>', ['yview','scroll',1,'units']);
+ $mw->YMouseWheelBind($class);
+}
+
+sub XYscrollBind
+{
+ my ($mw,$class) = @_;
+ $mw->YscrollBind($class);
+ $mw->XscrollBind($class);
+ # <4> and <5> are how mousewheel looks on X
+}
+
+sub MouseWheelBind
+{
+ my($mw,$class) = @_;
+
+ # The MouseWheel will typically only fire on Windows. However, one
+ # could use the "event generate" command to produce MouseWheel
+ # events on other platforms.
+
+ $mw->Tk::bind($class, '<MouseWheel>',
+ [ sub { $_[0]->yview('scroll',-($_[1]/120)*3,'units') }, Tk::Ev("D")]);
+
+ if ($Tk::platform eq 'unix')
+ {
+ # Support for mousewheels on Linux/Unix commonly comes through mapping
+ # the wheel to the extended buttons. If you have a mousewheel, find
+ # Linux configuration info at:
+ # http://www.inria.fr/koala/colas/mouse-wheel-scroll/
+ $mw->Tk::bind($class, '<4>',
+ sub { $_[0]->yview('scroll', -3, 'units')
+ unless $Tk::strictMotif;
+ });
+ $mw->Tk::bind($class, '<5>',
+ sub { $_[0]->yview('scroll', 3, 'units')
+ unless $Tk::strictMotif;
+ });
+ }
+}
+
+sub ScrlListbox
+{
+ my $parent = shift;
+ return $parent->Scrolled('Listbox',-scrollbars => 'w', @_);
+}
+
+sub AddBindTag
+{
+ my ($w,$tag) = @_;
+ my $t;
+ my @tags = $w->bindtags;
+ foreach $t (@tags)
+ {
+ return if $t eq $tag;
+ }
+ $w->bindtags([@tags,$tag]);
+}
+
+sub Callback
+{
+ my $w = shift;
+ my $name = shift;
+ my $cb = $w->cget($name);
+ if (defined $cb)
+ {
+ return $cb->Call(@_) if (ref $cb);
+ return $w->$cb(@_);
+ }
+ return (wantarray) ? () : undef;
+}
+
+sub packAdjust
+{
+# print 'packAdjust(',join(',',@_),")\n";
+ require Tk::Adjuster;
+ my ($w,%args) = @_;
+ my $delay = delete($args{'-delay'});
+ $delay = 1 unless (defined $delay);
+ $w->pack(%args);
+ %args = $w->packInfo;
+ my $adj = Tk::Adjuster->new($args{'-in'},
+ -widget => $w, -delay => $delay, -side => $args{'-side'});
+ $adj->packed($w,%args);
+ return $w;
+}
+
+sub gridAdjust
+{
+ require Tk::Adjuster;
+ my ($w,%args) = @_;
+ my $delay = delete($args{'-delay'});
+ $delay = 1 unless (defined $delay);
+ $w->grid(%args);
+ %args = $w->gridInfo;
+ my $adj = Tk::Adjuster->new($args{'-in'},-widget => $w, -delay => $delay);
+ $adj->gridded($w,%args);
+ return $w;
+}
+
+sub place
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|forget|info|slaves)$/x)
+ {
+ $w->Tk::place(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::place('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub pack
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|forget|info|propagate|slaves)$/x)
+ {
+ # maybe array/scalar context issue with slaves
+ $w->Tk::pack(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::pack('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub grid
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:bbox|columnconfigure|configure|forget|info|location|propagate|rowconfigure|size|slaves)$/x)
+ {
+ my $opt = shift;
+ Tk::grid($opt,$w,@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ Tk::grid('configure',$w,@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub form
+{
+ local $SIG{'__DIE__'} = \&Carp::croak;
+ my $w = shift;
+ if (@_ && $_[0] =~ /^(?:configure|check|forget|grid|info|slaves)$/x)
+ {
+ $w->Tk::form(@_);
+ }
+ else
+ {
+ # Two things going on here:
+ # 1. Add configure on the front so that we can drop leading '-'
+ $w->Tk::form('configure',@_);
+ # 2. Return the widget rather than nothing
+ return $w;
+ }
+}
+
+sub Scrolled
+{
+ my ($parent,$kind,%args) = @_;
+ $kind = 'Pane' if $kind eq 'Frame';
+ # Find args that are Frame create time args
+ my @args = Tk::Frame->CreateArgs($parent,\%args);
+ my $name = delete $args{'Name'};
+ push(@args,'Name' => $name) if (defined $name);
+ my $cw = $parent->Frame(@args);
+ @args = ();
+ # Now remove any args that Frame can handle
+ foreach my $k ('-scrollbars',map($_->[0],$cw->configure))
+ {
+ push(@args,$k,delete($args{$k})) if (exists $args{$k})
+ }
+ # Anything else must be for target widget - pass at widget create time
+ my $w = $cw->$kind(%args);
+ # Now re-set %args to be ones Frame can handle
+ %args = @args;
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars','se'],
+ '-background' => [$w,'background','Background'],
+ '-foreground' => [$w,'foreground','Foreground'],
+ );
+ $cw->AddScrollbars($w);
+ $cw->Default("\L$kind" => $w);
+ $cw->Delegates('bind' => $w, 'bindtags' => $w, 'menu' => $w);
+ $cw->ConfigDefault(\%args);
+ $cw->configure(%args);
+ return $cw;
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+}
+
+sub ForwardEvent
+{
+ my $self = shift;
+ my $to = shift;
+ $to->PassEvent($self->XEvent);
+}
+
+# Save / Return abstract event type as in Tix.
+sub EventType
+{
+ my $w = shift;
+ $w->{'_EventType_'} = $_[0] if @_;
+ return $w->{'_EventType_'};
+}
+
+sub PostPopupMenu
+{
+ my ($w, $X, $Y) = @_;
+ if (@_ < 3)
+ {
+ my $e = $w->XEvent;
+ $X = $e->X;
+ $Y = $e->Y;
+ }
+ my $menu = $w->menu;
+ $menu->Post($X,$Y) if defined $menu;
+}
+
+sub FillMenu
+{
+ my ($w,$menu,@labels) = @_;
+ foreach my $lab (@labels)
+ {
+ my $method = $lab.'MenuItems';
+ $method =~ s/~//g;
+ $method =~ s/[\s-]+/_/g;
+ if ($w->can($method))
+ {
+ $menu->Menubutton(-label => $lab, -tearoff => 0, -menuitems => $w->$method());
+ }
+ }
+ return $menu;
+}
+
+sub menu
+{
+ my ($w,$menu) = @_;
+ if (@_ > 1)
+ {
+ $w->_OnDestroy('_MENU_') unless exists $w->{'_MENU_'};
+ $w->{'_MENU_'} = $menu;
+ }
+ return unless defined wantarray;
+ unless (exists $w->{'_MENU_'})
+ {
+ $w->_OnDestroy('_MENU_');
+ $w->{'_MENU_'} = $menu = $w->Menu(-tearoff => 0);
+ $w->FillMenu($menu,$w->MenuLabels);
+ }
+ return $w->{'_MENU_'};
+}
+
+sub MenuLabels
+{
+ return @DefaultMenuLabels;
+}
+
+sub FileMenuItems
+{
+ my ($w) = @_;
+ return [ ["command"=>'E~xit', -command => [ $w, 'WmDeleteWindow']]];
+}
+
+sub WmDeleteWindow
+{
+ shift->toplevel->WmDeleteWindow
+}
+
+sub BalloonInfo
+{
+ my ($widget,$balloon,$X,$Y,@opt) = @_;
+ foreach my $opt (@opt)
+ {
+ my $info = $balloon->GetOption($opt,$widget);
+ return $info if defined $info;
+ }
+}
+
+sub ConfigSpecs {
+
+ my $w = shift;
+
+ return map { ( $_->[0], [ $w, @$_[ 1 .. 4 ] ] ) } $w->configure;
+
+}
+
+*GetSelection =
+ ($Tk::platform eq 'unix'
+ ? sub
+ {
+ my $w = shift;
+ my $sel = @_ ? shift : "PRIMARY";
+ my $txt = eval { local $SIG{__DIE__};
+ $w->SelectionGet(-selection => $sel, -type => "UTF8_STRING")
+ };
+ if ($@)
+ {
+ $txt = eval { local $SIG{__DIE__};
+ $w->SelectionGet(-selection => $sel)
+ };
+ if ($@)
+ {
+ die "could not find default selection";
+ }
+ }
+ $txt;
+ }
+ : sub
+ {
+ my $w = shift;
+ my $sel = @_ ? shift : "PRIMARY";
+ my $txt = eval { local $SIG{__DIE__};
+ $w->SelectionGet(-selection => $sel)
+ };
+ if ($@)
+ {
+ die "could not find default selection";
+ }
+ $txt;
+ }
+ );
+
+1;
+__END__
+
+sub bindDump {
+
+ # Dump lots of good binding information. This pretty-print subroutine
+ # is, essentially, the following code in disguise:
+ #
+ # print "Binding information for $w\n";
+ # foreach my $tag ($w->bindtags) {
+ # printf "\n Binding tag '$tag' has these bindings:\n";
+ # foreach my $binding ($w->bind($tag)) {
+ # printf " $binding\n";
+ # }
+ # }
+
+ my ($w) = @_;
+
+ my (@bindtags) = $w->bindtags;
+ my $digits = length( scalar @bindtags );
+ my ($spc1, $spc2) = ($digits + 33, $digits + 35);
+ my $format1 = "%${digits}d.";
+ my $format2 = ' ' x ($digits + 2);
+ my $n = 0;
+
+ my @out;
+ push @out, sprintf( "\n## Binding information for '%s', %s ##", $w->PathName, $w );
+
+ foreach my $tag (@bindtags) {
+ my (@bindings) = $w->bind($tag);
+ $n++; # count this bindtag
+
+ if ($#bindings == -1) {
+ push @out, sprintf( "\n$format1 Binding tag '$tag' has no bindings.\n", $n );
+ } else {
+ push @out, sprintf( "\n$format1 Binding tag '$tag' has these bindings:\n", $n );
+
+ foreach my $binding ( @bindings ) {
+ my $callback = $w->bind($tag, $binding);
+ push @out, sprintf( "$format2%27s : %-40s\n", $binding, $callback );
+
+ if ($callback =~ /SCALAR/) {
+ if (ref $$callback) {
+ push @out, sprintf( "%s %s\n", ' ' x $spc1, $$callback );
+ } else {
+ push @out, sprintf( "%s '%s'\n", ' ' x $spc1, $$callback );
+ }
+ } elsif ($callback =~ /ARRAY/) {
+ if (ref $callback->[0]) {
+ push @out, sprintf( "%s %s\n", ' ' x $spc1, $callback->[0], "\n" );
+ } else {
+ push @out, sprintf( "%s '%s'\n", ' ' x $spc1, $callback->[0], "\n" );
+ }
+ foreach my $arg (@$callback[1 .. $#{@$callback}]) {
+ if (ref $arg) {
+ push @out, sprintf( "%s %-40s", ' ' x $spc2, $arg );
+ } else {
+ push @out, sprintf( "%s '%s'", ' ' x $spc2, $arg );
+ }
+
+ if (ref $arg eq 'Tk::Ev') {
+ if ($arg =~ /SCALAR/) {
+ push @out, sprintf( ": '$$arg'" );
+ } else {
+ push @out, sprintf( ": '%s'", join("' '", @$arg) );
+ }
+ }
+
+ push @out, sprintf( "\n" );
+ } # forend callback arguments
+ } # ifend callback
+
+ } # forend all bindings for one tag
+
+ } # ifend have bindings
+
+ } # forend all tags
+ push @out, sprintf( "\n" );
+ return @out;
+
+} # end bindDump
+
+
+sub ASkludge
+{
+ my ($hash,$sense) = @_;
+ foreach my $key (%$hash)
+ {
+ if ($key =~ /-.*variable/ && ref($hash->{$key}) eq 'SCALAR')
+ {
+ if ($sense)
+ {
+ my $val = ${$hash->{$key}};
+ require Tie::Scalar;
+ tie ${$hash->{$key}},'Tie::StdScalar';
+ ${$hash->{$key}} = $val;
+ }
+ else
+ {
+ untie ${$hash->{$key}};
+ }
+ }
+ }
+}
+
+
+
+# clipboardKeysyms --
+# This procedure is invoked to identify the keys that correspond to
+# the "copy", "cut", and "paste" functions for the clipboard.
+#
+# Arguments:
+# copy - Name of the key (keysym name plus modifiers, if any,
+# such as "Meta-y") used for the copy operation.
+# cut - Name of the key used for the cut operation.
+# paste - Name of the key used for the paste operation.
+#
+# This method is obsolete use clipboardOperations and abstract
+# event types instead. See Clipboard.pm and Mainwindow.pm
+
+sub clipboardKeysyms
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ if (@_)
+ {
+ my $copy = shift;
+ $mw->Tk::bind(@class,"<$copy>",'clipboardCopy') if (defined $copy);
+ }
+ if (@_)
+ {
+ my $cut = shift;
+ $mw->Tk::bind(@class,"<$cut>",'clipboardCut') if (defined $cut);
+ }
+ if (@_)
+ {
+ my $paste = shift;
+ $mw->Tk::bind(@class,"<$paste>",'clipboardPaste') if (defined $paste);
+ }
+}
+
+sub pathname
+{
+ my ($w,$id) = @_;
+ my $x = $w->winfo('pathname',-displayof => oct($id));
+ return $x->PathName;
+}
diff --git a/Master/tlpkg/tlperl/lib/Tk/Wm.pm b/Master/tlpkg/tlperl/lib/Tk/Wm.pm
new file mode 100644
index 00000000000..ffbe4877857
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Wm.pm
@@ -0,0 +1,174 @@
+# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+package Tk::Wm;
+use AutoLoader;
+
+require Tk::Widget;
+*AUTOLOAD = \&Tk::Widget::AUTOLOAD;
+
+use strict qw(vars);
+
+# There are issues with this stuff now we have Tix's wm release/capture
+# as toplevel-ness is now dynamic.
+
+
+use vars qw($VERSION);
+$VERSION = sprintf '4.%03d', q$Revision: #14 $ =~ /\D(\d+)\s*$/;
+
+use Tk::Submethods;
+
+*{Tk::Wm::wmGrid} = sub { shift->wm("grid", @_) };
+*{Tk::Wm::wmTracing} = sub { shift->wm("tracing", @_) };
+
+Direct Tk::Submethods ('wm' => [qw(aspect attributes client colormapwindows command
+ deiconify focusmodel frame geometry group
+ iconbitmap iconify iconimage iconmask iconname
+ iconwindow maxsize minsize overrideredirect positionfrom
+ protocol resizable sizefrom state title transient
+ withdraw wrapper)]);
+
+sub SetBindtags
+{
+ my ($obj) = @_;
+ $obj->bindtags([ref($obj),$obj,'all']);
+}
+
+sub Populate
+{
+ my ($cw,$args) = @_;
+ $cw->ConfigSpecs('-overanchor' => ['PASSIVE',undef,undef,undef],
+ '-popanchor' => ['PASSIVE',undef,undef,undef],
+ '-popover' => ['PASSIVE',undef,undef,undef]
+ );
+}
+
+sub MoveResizeWindow
+{
+ my ($w,$x,$y,$width,$height) = @_;
+ $w->withdraw;
+ $w->geometry($width.'x'.$height);
+ $w->MoveToplevelWindow($x,$y);
+ $w->deiconify;
+}
+
+sub WmDeleteWindow
+{
+ my ($w) = @_;
+ my $cb = $w->protocol('WM_DELETE_WINDOW');
+ if (defined $cb)
+ {
+ $cb->Call;
+ }
+ else
+ {
+ $w->destroy;
+ }
+}
+
+
+1;
+
+__END__
+
+
+sub Post
+{
+ my ($w,$X,$Y) = @_;
+ $X = int($X);
+ $Y = int($Y);
+ $w->positionfrom('user');
+ $w->geometry("+$X+$Y");
+ # $w->MoveToplevelWindow($X,$Y);
+ $w->deiconify;
+ $w->raise;
+}
+
+sub AnchorAdjust
+{
+ my ($anchor,$X,$Y,$w,$h) = @_;
+ $anchor = 'c' unless (defined $anchor);
+ $Y += ($anchor =~ /s/) ? $h : ($anchor =~ /n/) ? 0 : $h/2;
+ $X += ($anchor =~ /e/) ? $w : ($anchor =~ /w/) ? 0 : $w/2;
+ return ($X,$Y);
+}
+
+sub Popup
+{
+ my $w = shift;
+ $w->configure(@_) if @_;
+ $w->idletasks;
+ my ($mw,$mh) = ($w->reqwidth,$w->reqheight);
+ my ($rx,$ry,$rw,$rh) = (0,0,0,0);
+ my $base = $w->cget('-popover');
+ my $outside = 0;
+ if (defined $base)
+ {
+ if ($base eq 'cursor')
+ {
+ ($rx,$ry) = $w->pointerxy;
+ }
+ else
+ {
+ $rx = $base->rootx;
+ $ry = $base->rooty;
+ $rw = $base->Width;
+ $rh = $base->Height;
+ }
+ }
+ else
+ {
+ my $sc = ($w->parent) ? $w->parent->toplevel : $w;
+ $rx = -$sc->vrootx;
+ $ry = -$sc->vrooty;
+ $rw = $w->screenwidth;
+ $rh = $w->screenheight;
+ }
+ my ($X,$Y) = AnchorAdjust($w->cget('-overanchor'),$rx,$ry,$rw,$rh);
+ ($X,$Y) = AnchorAdjust($w->cget('-popanchor'),$X,$Y,-$mw,-$mh);
+ # adjust to not cross screen borders
+ if ($X < 0) { $X = 0 }
+ if ($Y < 0) { $Y = 0 }
+ if ($mw > $w->screenwidth) { $X = 0 }
+ if ($mh > $w->screenheight) { $Y = 0 }
+ $w->Post($X,$Y);
+ $w->waitVisibility;
+}
+
+sub FullScreen
+{
+ my $w = shift;
+ my $over = (@_) ? shift : 0;
+ my $width = $w->screenwidth;
+ my $height = $w->screenheight;
+ $w->GeometryRequest($width,$height);
+ $w->overrideredirect($over & 1);
+ $w->Post(0,0);
+ $w->update;
+ if ($over & 2)
+ {
+ my $x = $w->rootx;
+ my $y = $w->rooty;
+ $width -= 2*$x;
+ $height -= $x + $y;
+ $w->GeometryRequest($width,$height);
+ $w->update;
+ }
+}
+
+sub iconposition
+{
+ my $w = shift;
+ if (@_ == 1)
+ {
+ return $w->wm('iconposition',$1,$2) if $_[0] =~ /^(\d+),(\d+)$/;
+ if ($_[0] =~ /^([+-])(\d+)([+-])(\d+)$/)
+ {
+ my $x = ($1 eq '-') ? $w->screenwidth-$2 : $2;
+ my $y = ($3 eq '-') ? $w->screenheight-$4 : $4;
+ return $w->wm('iconposition',$x,$y);
+ }
+ }
+ $w->wm('iconposition',@_);
+}
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/X.pm b/Master/tlpkg/tlperl/lib/Tk/X.pm
new file mode 100644
index 00000000000..06eefbf6bd9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X.pm
@@ -0,0 +1,398 @@
+package Tk::X;
+
+use strict;
+use Carp;
+use vars qw($VERSION @EXPORT $AUTOLOAD);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Xlib/X/X.pm#4 $
+use Tk qw($XS_VERSION);
+
+require Exporter;
+require DynaLoader;
+require AutoLoader;
+
+
+use base qw(Exporter DynaLoader);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ Above
+ AllTemporary
+ AllocAll
+ AllocNone
+ AllowExposures
+ AlreadyGrabbed
+ Always
+ AnyButton
+ AnyKey
+ AnyModifier
+ AnyPropertyType
+ ArcChord
+ ArcPieSlice
+ AsyncBoth
+ AsyncKeyboard
+ AsyncPointer
+ AutoRepeatModeDefault
+ AutoRepeatModeOff
+ AutoRepeatModeOn
+ BadAccess
+ BadAlloc
+ BadAtom
+ BadColor
+ BadCursor
+ BadDrawable
+ BadFont
+ BadGC
+ BadIDChoice
+ BadImplementation
+ BadLength
+ BadMatch
+ BadName
+ BadPixmap
+ BadRequest
+ BadValue
+ BadWindow
+ Below
+ BottomIf
+ Button1
+ Button1Mask
+ Button1MotionMask
+ Button2
+ Button2Mask
+ Button2MotionMask
+ Button3
+ Button3Mask
+ Button3MotionMask
+ Button4
+ Button4Mask
+ Button4MotionMask
+ Button5
+ Button5Mask
+ Button5MotionMask
+ ButtonMotionMask
+ ButtonPress
+ ButtonPressMask
+ ButtonRelease
+ ButtonReleaseMask
+ CWBackPixel
+ CWBackPixmap
+ CWBackingPixel
+ CWBackingPlanes
+ CWBackingStore
+ CWBitGravity
+ CWBorderPixel
+ CWBorderPixmap
+ CWBorderWidth
+ CWColormap
+ CWCursor
+ CWDontPropagate
+ CWEventMask
+ CWHeight
+ CWOverrideRedirect
+ CWSaveUnder
+ CWSibling
+ CWStackMode
+ CWWidth
+ CWWinGravity
+ CWX
+ CWY
+ CapButt
+ CapNotLast
+ CapProjecting
+ CapRound
+ CenterGravity
+ CirculateNotify
+ CirculateRequest
+ ClientMessage
+ ClipByChildren
+ ColormapChangeMask
+ ColormapInstalled
+ ColormapNotify
+ ColormapUninstalled
+ Complex
+ ConfigureNotify
+ ConfigureRequest
+ ControlMapIndex
+ ControlMask
+ Convex
+ CoordModeOrigin
+ CoordModePrevious
+ CopyFromParent
+ CreateNotify
+ CurrentTime
+ CursorShape
+ DefaultBlanking
+ DefaultExposures
+ DestroyAll
+ DestroyNotify
+ DirectColor
+ DisableAccess
+ DisableScreenInterval
+ DisableScreenSaver
+ DoBlue
+ DoGreen
+ DoRed
+ DontAllowExposures
+ DontPreferBlanking
+ EastGravity
+ EnableAccess
+ EnterNotify
+ EnterWindowMask
+ EvenOddRule
+ Expose
+ ExposureMask
+ FamilyChaos
+ FamilyDECnet
+ FamilyInternet
+ FillOpaqueStippled
+ FillSolid
+ FillStippled
+ FillTiled
+ FirstExtensionError
+ FocusChangeMask
+ FocusIn
+ FocusOut
+ FontChange
+ FontLeftToRight
+ FontRightToLeft
+ ForgetGravity
+ GCArcMode
+ GCBackground
+ GCCapStyle
+ GCClipMask
+ GCClipXOrigin
+ GCClipYOrigin
+ GCDashList
+ GCDashOffset
+ GCFillRule
+ GCFillStyle
+ GCFont
+ GCForeground
+ GCFunction
+ GCGraphicsExposures
+ GCJoinStyle
+ GCLastBit
+ GCLineStyle
+ GCLineWidth
+ GCPlaneMask
+ GCStipple
+ GCSubwindowMode
+ GCTile
+ GCTileStipXOrigin
+ GCTileStipYOrigin
+ GXand
+ GXandInverted
+ GXandReverse
+ GXclear
+ GXcopy
+ GXcopyInverted
+ GXequiv
+ GXinvert
+ GXnand
+ GXnoop
+ GXnor
+ GXor
+ GXorInverted
+ GXorReverse
+ GXset
+ GXxor
+ GrabFrozen
+ GrabInvalidTime
+ GrabModeAsync
+ GrabModeSync
+ GrabNotViewable
+ GrabSuccess
+ GraphicsExpose
+ GravityNotify
+ GrayScale
+ HostDelete
+ HostInsert
+ IncludeInferiors
+ InputFocus
+ InputOnly
+ InputOutput
+ IsUnmapped
+ IsUnviewable
+ IsViewable
+ JoinBevel
+ JoinMiter
+ JoinRound
+ KBAutoRepeatMode
+ KBBellDuration
+ KBBellPercent
+ KBBellPitch
+ KBKey
+ KBKeyClickPercent
+ KBLed
+ KBLedMode
+ KeyPress
+ KeyPressMask
+ KeyRelease
+ KeyReleaseMask
+ KeymapNotify
+ KeymapStateMask
+ LASTEvent
+ LSBFirst
+ LastExtensionError
+ LeaveNotify
+ LeaveWindowMask
+ LedModeOff
+ LedModeOn
+ LineDoubleDash
+ LineOnOffDash
+ LineSolid
+ LockMapIndex
+ LockMask
+ LowerHighest
+ MSBFirst
+ MapNotify
+ MapRequest
+ MappingBusy
+ MappingFailed
+ MappingKeyboard
+ MappingModifier
+ MappingNotify
+ MappingPointer
+ MappingSuccess
+ Mod1MapIndex
+ Mod1Mask
+ Mod2MapIndex
+ Mod2Mask
+ Mod3MapIndex
+ Mod3Mask
+ Mod4MapIndex
+ Mod4Mask
+ Mod5MapIndex
+ Mod5Mask
+ MotionNotify
+ NoEventMask
+ NoExpose
+ NoSymbol
+ Nonconvex
+ None
+ NorthEastGravity
+ NorthGravity
+ NorthWestGravity
+ NotUseful
+ NotifyAncestor
+ NotifyDetailNone
+ NotifyGrab
+ NotifyHint
+ NotifyInferior
+ NotifyNonlinear
+ NotifyNonlinearVirtual
+ NotifyNormal
+ NotifyPointer
+ NotifyPointerRoot
+ NotifyUngrab
+ NotifyVirtual
+ NotifyWhileGrabbed
+ Opposite
+ OwnerGrabButtonMask
+ ParentRelative
+ PlaceOnBottom
+ PlaceOnTop
+ PointerMotionHintMask
+ PointerMotionMask
+ PointerRoot
+ PointerWindow
+ PreferBlanking
+ PropModeAppend
+ PropModePrepend
+ PropModeReplace
+ PropertyChangeMask
+ PropertyDelete
+ PropertyNewValue
+ PropertyNotify
+ PseudoColor
+ RaiseLowest
+ ReparentNotify
+ ReplayKeyboard
+ ReplayPointer
+ ResizeRedirectMask
+ ResizeRequest
+ RetainPermanent
+ RetainTemporary
+ RevertToNone
+ RevertToParent
+ RevertToPointerRoot
+ ScreenSaverActive
+ ScreenSaverReset
+ SelectionClear
+ SelectionNotify
+ SelectionRequest
+ SetModeDelete
+ SetModeInsert
+ ShiftMapIndex
+ ShiftMask
+ SouthEastGravity
+ SouthGravity
+ SouthWestGravity
+ StaticColor
+ StaticGravity
+ StaticGray
+ StippleShape
+ StructureNotifyMask
+ SubstructureNotifyMask
+ SubstructureRedirectMask
+ Success
+ SyncBoth
+ SyncKeyboard
+ SyncPointer
+ TileShape
+ TopIf
+ TrueColor
+ UnmapGravity
+ UnmapNotify
+ Unsorted
+ VisibilityChangeMask
+ VisibilityFullyObscured
+ VisibilityNotify
+ VisibilityPartiallyObscured
+ VisibilityUnobscured
+ WestGravity
+ WhenMapped
+ WindingRule
+ XYBitmap
+ XYPixmap
+ X_H
+ X_PROTOCOL
+ X_PROTOCOL_REVISION
+ YSorted
+ YXBanded
+ YXSorted
+ ZPixmap
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ croak "Your vendor has not defined X macro $constname";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Tk::X;
+
+# Preloaded methods go here.
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+# Below is the stub of documentation for your module. You better edit it!
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/X.h b/Master/tlpkg/tlperl/lib/Tk/X11/X.h
new file mode 100644
index 00000000000..95db07f903f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/X.h
@@ -0,0 +1,677 @@
+/*
+ * $XConsortium: X.h,v 1.66 88/09/06 15:55:56 jim Exp $
+ */
+
+/* Definitions for the X window system likely to be used by applications */
+
+#ifndef X_H
+#define X_H
+
+/***********************************************************
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Digital or MIT not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+#define X_PROTOCOL 11 /* current protocol version */
+#define X_PROTOCOL_REVISION 0 /* current minor version */
+
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+# define Cursor XCursor
+# define Region XRegion
+#endif
+
+/* Resources */
+
+#ifdef _WIN64
+typedef __int64 XID;
+#else
+typedef unsigned long XID;
+#endif
+
+typedef XID Window;
+typedef XID Drawable;
+typedef XID Font;
+typedef XID Pixmap;
+typedef XID Cursor;
+typedef XID Colormap;
+typedef XID GContext;
+typedef XID KeySym;
+
+typedef unsigned long Mask;
+
+typedef unsigned long Atom;
+
+typedef unsigned long VisualID;
+
+typedef unsigned long Time;
+
+typedef unsigned long KeyCode; /* In order to use IME, the Macintosh needs
+ * to pack 3 bytes into the keyCode field in
+ * the XEvent. In the real X.h, a KeyCode is
+ * defined as a short, which wouldn't be big
+ * enough. */
+
+/*****************************************************************
+ * RESERVED RESOURCE AND CONSTANT DEFINITIONS
+ *****************************************************************/
+
+#define None 0L /* universal null resource or null atom */
+
+#define ParentRelative 1L /* background pixmap in CreateWindow
+ and ChangeWindowAttributes */
+
+#define CopyFromParent 0L /* border pixmap in CreateWindow
+ and ChangeWindowAttributes
+ special VisualID and special window
+ class passed to CreateWindow */
+
+#define PointerWindow 0L /* destination window in SendEvent */
+#define InputFocus 1L /* destination window in SendEvent */
+
+#define PointerRoot 1L /* focus window in SetInputFocus */
+
+#define AnyPropertyType 0L /* special Atom, passed to GetProperty */
+
+#define AnyKey 0L /* special Key Code, passed to GrabKey */
+
+#define AnyButton 0L /* special Button Code, passed to GrabButton */
+
+#define AllTemporary 0L /* special Resource ID passed to KillClient */
+
+#define CurrentTime 0L /* special Time */
+
+#define NoSymbol 0L /* special KeySym */
+
+/*****************************************************************
+ * EVENT DEFINITIONS
+ *****************************************************************/
+
+/* Input Event Masks. Used as event-mask window attribute and as arguments
+ to Grab requests. Not to be confused with event names. */
+
+#define NoEventMask 0L
+#define KeyPressMask (1L<<0)
+#define KeyReleaseMask (1L<<1)
+#define ButtonPressMask (1L<<2)
+#define ButtonReleaseMask (1L<<3)
+#define EnterWindowMask (1L<<4)
+#define LeaveWindowMask (1L<<5)
+#define PointerMotionMask (1L<<6)
+#define PointerMotionHintMask (1L<<7)
+#define Button1MotionMask (1L<<8)
+#define Button2MotionMask (1L<<9)
+#define Button3MotionMask (1L<<10)
+#define Button4MotionMask (1L<<11)
+#define Button5MotionMask (1L<<12)
+#define ButtonMotionMask (1L<<13)
+#define KeymapStateMask (1L<<14)
+#define ExposureMask (1L<<15)
+#define VisibilityChangeMask (1L<<16)
+#define StructureNotifyMask (1L<<17)
+#define ResizeRedirectMask (1L<<18)
+#define SubstructureNotifyMask (1L<<19)
+#define SubstructureRedirectMask (1L<<20)
+#define FocusChangeMask (1L<<21)
+#define PropertyChangeMask (1L<<22)
+#define ColormapChangeMask (1L<<23)
+#define OwnerGrabButtonMask (1L<<24)
+
+/* Event names. Used in "type" field in XEvent structures. Not to be
+confused with event masks above. They start from 2 because 0 and 1
+are reserved in the protocol for errors and replies. */
+
+#define KeyPress 2
+#define KeyRelease 3
+#define ButtonPress 4
+#define ButtonRelease 5
+#define MotionNotify 6
+#define EnterNotify 7
+#define LeaveNotify 8
+#define FocusIn 9
+#define FocusOut 10
+#define KeymapNotify 11
+#define Expose 12
+#define GraphicsExpose 13
+#define NoExpose 14
+#define VisibilityNotify 15
+#define CreateNotify 16
+#define DestroyNotify 17
+#define UnmapNotify 18
+#define MapNotify 19
+#define MapRequest 20
+#define ReparentNotify 21
+#define ConfigureNotify 22
+#define ConfigureRequest 23
+#define GravityNotify 24
+#define ResizeRequest 25
+#define CirculateNotify 26
+#define CirculateRequest 27
+#define PropertyNotify 28
+#define SelectionClear 29
+#define SelectionRequest 30
+#define SelectionNotify 31
+#define ColormapNotify 32
+#define ClientMessage 33
+#define MappingNotify 34
+#define LASTEvent 35 /* must be bigger than any event # */
+
+
+/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
+ state in various key-, mouse-, and button-related events. */
+
+#define ShiftMask (1<<0)
+#define LockMask (1<<1)
+#define ControlMask (1<<2)
+#define Mod1Mask (1<<3)
+#define Mod2Mask (1<<4)
+#define Mod3Mask (1<<5)
+#define Mod4Mask (1<<6)
+#define Mod5Mask (1<<7)
+
+/* modifier names. Used to build a SetModifierMapping request or
+ to read a GetModifierMapping request. These correspond to the
+ masks defined above. */
+#define ShiftMapIndex 0
+#define LockMapIndex 1
+#define ControlMapIndex 2
+#define Mod1MapIndex 3
+#define Mod2MapIndex 4
+#define Mod3MapIndex 5
+#define Mod4MapIndex 6
+#define Mod5MapIndex 7
+
+
+/* button masks. Used in same manner as Key masks above. Not to be confused
+ with button names below. */
+
+#define Button1Mask (1<<8)
+#define Button2Mask (1<<9)
+#define Button3Mask (1<<10)
+#define Button4Mask (1<<11)
+#define Button5Mask (1<<12)
+
+#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */
+
+
+/* button names. Used as arguments to GrabButton and as detail in ButtonPress
+ and ButtonRelease events. Not to be confused with button masks above.
+ Note that 0 is already defined above as "AnyButton". */
+
+#define Button1 1
+#define Button2 2
+#define Button3 3
+#define Button4 4
+#define Button5 5
+
+/* Notify modes */
+
+#define NotifyNormal 0
+#define NotifyGrab 1
+#define NotifyUngrab 2
+#define NotifyWhileGrabbed 3
+
+#define NotifyHint 1 /* for MotionNotify events */
+
+/* Notify detail */
+
+#define NotifyAncestor 0
+#define NotifyVirtual 1
+#define NotifyInferior 2
+#define NotifyNonlinear 3
+#define NotifyNonlinearVirtual 4
+#define NotifyPointer 5
+#define NotifyPointerRoot 6
+#define NotifyDetailNone 7
+
+/* Visibility notify */
+
+#define VisibilityUnobscured 0
+#define VisibilityPartiallyObscured 1
+#define VisibilityFullyObscured 2
+
+/* Circulation request */
+
+#define PlaceOnTop 0
+#define PlaceOnBottom 1
+
+/* protocol families */
+
+#define FamilyInternet 0
+#define FamilyDECnet 1
+#define FamilyChaos 2
+
+/* Property notification */
+
+#define PropertyNewValue 0
+#define PropertyDelete 1
+
+/* Color Map notification */
+
+#define ColormapUninstalled 0
+#define ColormapInstalled 1
+
+/* GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes */
+
+#define GrabModeSync 0
+#define GrabModeAsync 1
+
+/* GrabPointer, GrabKeyboard reply status */
+
+#define GrabSuccess 0
+#define AlreadyGrabbed 1
+#define GrabInvalidTime 2
+#define GrabNotViewable 3
+#define GrabFrozen 4
+
+/* AllowEvents modes */
+
+#define AsyncPointer 0
+#define SyncPointer 1
+#define ReplayPointer 2
+#define AsyncKeyboard 3
+#define SyncKeyboard 4
+#define ReplayKeyboard 5
+#define AsyncBoth 6
+#define SyncBoth 7
+
+/* Used in SetInputFocus, GetInputFocus */
+
+#define RevertToNone (int)None
+#define RevertToPointerRoot (int)PointerRoot
+#define RevertToParent 2
+
+/*****************************************************************
+ * ERROR CODES
+ *****************************************************************/
+
+#define Success 0 /* everything's okay */
+#define BadRequest 1 /* bad request code */
+#define BadValue 2 /* int parameter out of range */
+#define BadWindow 3 /* parameter not a Window */
+#define BadPixmap 4 /* parameter not a Pixmap */
+#define BadAtom 5 /* parameter not an Atom */
+#define BadCursor 6 /* parameter not a Cursor */
+#define BadFont 7 /* parameter not a Font */
+#define BadMatch 8 /* parameter mismatch */
+#define BadDrawable 9 /* parameter not a Pixmap or Window */
+#define BadAccess 10 /* depending on context:
+ - key/button already grabbed
+ - attempt to free an illegal
+ cmap entry
+ - attempt to store into a read-only
+ color map entry.
+ - attempt to modify the access control
+ list from other than the local host.
+ */
+#define BadAlloc 11 /* insufficient resources */
+#define BadColor 12 /* no such colormap */
+#define BadGC 13 /* parameter not a GC */
+#define BadIDChoice 14 /* choice not in range or already used */
+#define BadName 15 /* font or color name doesn't exist */
+#define BadLength 16 /* Request length incorrect */
+#define BadImplementation 17 /* server is defective */
+
+#define FirstExtensionError 128
+#define LastExtensionError 255
+
+/*****************************************************************
+ * WINDOW DEFINITIONS
+ *****************************************************************/
+
+/* Window classes used by CreateWindow */
+/* Note that CopyFromParent is already defined as 0 above */
+
+#define InputOutput 1
+#define InputOnly 2
+
+/* Window attributes for CreateWindow and ChangeWindowAttributes */
+
+#define CWBackPixmap (1L<<0)
+#define CWBackPixel (1L<<1)
+#define CWBorderPixmap (1L<<2)
+#define CWBorderPixel (1L<<3)
+#define CWBitGravity (1L<<4)
+#define CWWinGravity (1L<<5)
+#define CWBackingStore (1L<<6)
+#define CWBackingPlanes (1L<<7)
+#define CWBackingPixel (1L<<8)
+#define CWOverrideRedirect (1L<<9)
+#define CWSaveUnder (1L<<10)
+#define CWEventMask (1L<<11)
+#define CWDontPropagate (1L<<12)
+#define CWColormap (1L<<13)
+#define CWCursor (1L<<14)
+
+/* ConfigureWindow structure */
+
+#define CWX (1<<0)
+#define CWY (1<<1)
+#define CWWidth (1<<2)
+#define CWHeight (1<<3)
+#define CWBorderWidth (1<<4)
+#define CWSibling (1<<5)
+#define CWStackMode (1<<6)
+
+
+/* Bit Gravity */
+
+#define ForgetGravity 0
+#define NorthWestGravity 1
+#define NorthGravity 2
+#define NorthEastGravity 3
+#define WestGravity 4
+#define CenterGravity 5
+#define EastGravity 6
+#define SouthWestGravity 7
+#define SouthGravity 8
+#define SouthEastGravity 9
+#define StaticGravity 10
+
+/* Window gravity + bit gravity above */
+
+#define UnmapGravity 0
+
+/* Used in CreateWindow for backing-store hint */
+
+#define NotUseful 0
+#define WhenMapped 1
+#define Always 2
+
+/* Used in GetWindowAttributes reply */
+
+#define IsUnmapped 0
+#define IsUnviewable 1
+#define IsViewable 2
+
+/* Used in ChangeSaveSet */
+
+#define SetModeInsert 0
+#define SetModeDelete 1
+
+/* Used in ChangeCloseDownMode */
+
+#define DestroyAll 0
+#define RetainPermanent 1
+#define RetainTemporary 2
+
+/* Window stacking method (in configureWindow) */
+
+#define Above 0
+#define Below 1
+#define TopIf 2
+#define BottomIf 3
+#define Opposite 4
+
+/* Circulation direction */
+
+#define RaiseLowest 0
+#define LowerHighest 1
+
+/* Property modes */
+
+#define PropModeReplace 0
+#define PropModePrepend 1
+#define PropModeAppend 2
+
+/*****************************************************************
+ * GRAPHICS DEFINITIONS
+ *****************************************************************/
+
+/* graphics functions, as in GC.alu */
+
+#define GXclear 0x0 /* 0 */
+#define GXand 0x1 /* src AND dst */
+#define GXandReverse 0x2 /* src AND NOT dst */
+#define GXcopy 0x3 /* src */
+#define GXandInverted 0x4 /* NOT src AND dst */
+#define GXnoop 0x5 /* dst */
+#define GXxor 0x6 /* src XOR dst */
+#define GXor 0x7 /* src OR dst */
+#define GXnor 0x8 /* NOT src AND NOT dst */
+#define GXequiv 0x9 /* NOT src XOR dst */
+#define GXinvert 0xa /* NOT dst */
+#define GXorReverse 0xb /* src OR NOT dst */
+#define GXcopyInverted 0xc /* NOT src */
+#define GXorInverted 0xd /* NOT src OR dst */
+#define GXnand 0xe /* NOT src OR NOT dst */
+#define GXset 0xf /* 1 */
+
+/* LineStyle */
+
+#define LineSolid 0
+#define LineOnOffDash 1
+#define LineDoubleDash 2
+
+/* capStyle */
+
+#define CapNotLast 0
+#define CapButt 1
+#define CapRound 2
+#define CapProjecting 3
+
+/* joinStyle */
+
+#define JoinMiter 0
+#define JoinRound 1
+#define JoinBevel 2
+
+/* fillStyle */
+
+#define FillSolid 0
+#define FillTiled 1
+#define FillStippled 2
+#define FillOpaqueStippled 3
+
+/* fillRule */
+
+#define EvenOddRule 0
+#define WindingRule 1
+
+/* subwindow mode */
+
+#define ClipByChildren 0
+#define IncludeInferiors 1
+
+/* SetClipRectangles ordering */
+
+#define Unsorted 0
+#define YSorted 1
+#define YXSorted 2
+#define YXBanded 3
+
+/* CoordinateMode for drawing routines */
+
+#define CoordModeOrigin 0 /* relative to the origin */
+#define CoordModePrevious 1 /* relative to previous point */
+
+/* Polygon shapes */
+
+#define Complex 0 /* paths may intersect */
+#define Nonconvex 1 /* no paths intersect, but not convex */
+#define Convex 2 /* wholly convex */
+
+/* Arc modes for PolyFillArc */
+
+#define ArcChord 0 /* join endpoints of arc */
+#define ArcPieSlice 1 /* join endpoints to center of arc */
+
+/* GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into
+ GC.stateChanges */
+
+#define GCFunction (1L<<0)
+#define GCPlaneMask (1L<<1)
+#define GCForeground (1L<<2)
+#define GCBackground (1L<<3)
+#define GCLineWidth (1L<<4)
+#define GCLineStyle (1L<<5)
+#define GCCapStyle (1L<<6)
+#define GCJoinStyle (1L<<7)
+#define GCFillStyle (1L<<8)
+#define GCFillRule (1L<<9)
+#define GCTile (1L<<10)
+#define GCStipple (1L<<11)
+#define GCTileStipXOrigin (1L<<12)
+#define GCTileStipYOrigin (1L<<13)
+#define GCFont (1L<<14)
+#define GCSubwindowMode (1L<<15)
+#define GCGraphicsExposures (1L<<16)
+#define GCClipXOrigin (1L<<17)
+#define GCClipYOrigin (1L<<18)
+#define GCClipMask (1L<<19)
+#define GCDashOffset (1L<<20)
+#define GCDashList (1L<<21)
+#define GCArcMode (1L<<22)
+
+#define GCLastBit 22
+/*****************************************************************
+ * FONTS
+ *****************************************************************/
+
+/* used in QueryFont -- draw direction */
+
+#define FontLeftToRight 0
+#define FontRightToLeft 1
+
+#define FontChange 255
+
+/*****************************************************************
+ * IMAGING
+ *****************************************************************/
+
+/* ImageFormat -- PutImage, GetImage */
+
+#define XYBitmap 0 /* depth 1, XYFormat */
+#define XYPixmap 1 /* depth == drawable depth */
+#define ZPixmap 2 /* depth == drawable depth */
+
+/*****************************************************************
+ * COLOR MAP STUFF
+ *****************************************************************/
+
+/* For CreateColormap */
+
+#define AllocNone 0 /* create map with no entries */
+#define AllocAll 1 /* allocate entire map writeable */
+
+
+/* Flags used in StoreNamedColor, StoreColors */
+
+#define DoRed (1<<0)
+#define DoGreen (1<<1)
+#define DoBlue (1<<2)
+
+/*****************************************************************
+ * CURSOR STUFF
+ *****************************************************************/
+
+/* QueryBestSize Class */
+
+#define CursorShape 0 /* largest size that can be displayed */
+#define TileShape 1 /* size tiled fastest */
+#define StippleShape 2 /* size stippled fastest */
+
+/*****************************************************************
+ * KEYBOARD/POINTER STUFF
+ *****************************************************************/
+
+#define AutoRepeatModeOff 0
+#define AutoRepeatModeOn 1
+#define AutoRepeatModeDefault 2
+
+#define LedModeOff 0
+#define LedModeOn 1
+
+/* masks for ChangeKeyboardControl */
+
+#define KBKeyClickPercent (1L<<0)
+#define KBBellPercent (1L<<1)
+#define KBBellPitch (1L<<2)
+#define KBBellDuration (1L<<3)
+#define KBLed (1L<<4)
+#define KBLedMode (1L<<5)
+#define KBKey (1L<<6)
+#define KBAutoRepeatMode (1L<<7)
+
+#define MappingSuccess 0
+#define MappingBusy 1
+#define MappingFailed 2
+
+#define MappingModifier 0
+#define MappingKeyboard 1
+#define MappingPointer 2
+
+/*****************************************************************
+ * SCREEN SAVER STUFF
+ *****************************************************************/
+
+#define DontPreferBlanking 0
+#define PreferBlanking 1
+#define DefaultBlanking 2
+
+#define DisableScreenSaver 0
+#define DisableScreenInterval 0
+
+#define DontAllowExposures 0
+#define AllowExposures 1
+#define DefaultExposures 2
+
+/* for ForceScreenSaver */
+
+#define ScreenSaverReset 0
+#define ScreenSaverActive 1
+
+/*****************************************************************
+ * HOSTS AND CONNECTIONS
+ *****************************************************************/
+
+/* for ChangeHosts */
+
+#define HostInsert 0
+#define HostDelete 1
+
+/* for ChangeAccessControl */
+
+#define EnableAccess 1
+#define DisableAccess 0
+
+/* Display classes used in opening the connection
+ * Note that the statically allocated ones are even numbered and the
+ * dynamically changeable ones are odd numbered */
+
+#define StaticGray 0
+#define GrayScale 1
+#define StaticColor 2
+#define PseudoColor 3
+#define TrueColor 4
+#define DirectColor 5
+
+
+/* Byte order used in imageByteOrder and bitmapBitOrder */
+
+#define LSBFirst 0
+#define MSBFirst 1
+
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+# undef Cursor
+# undef Region
+#endif
+
+#endif /* X_H */
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h b/Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h
new file mode 100644
index 00000000000..485a4236db8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/Xatom.h
@@ -0,0 +1,79 @@
+#ifndef XATOM_H
+#define XATOM_H 1
+
+/* THIS IS A GENERATED FILE
+ *
+ * Do not change! Changing this file implies a protocol change!
+ */
+
+#define XA_PRIMARY ((Atom) 1)
+#define XA_SECONDARY ((Atom) 2)
+#define XA_ARC ((Atom) 3)
+#define XA_ATOM ((Atom) 4)
+#define XA_BITMAP ((Atom) 5)
+#define XA_CARDINAL ((Atom) 6)
+#define XA_COLORMAP ((Atom) 7)
+#define XA_CURSOR ((Atom) 8)
+#define XA_CUT_BUFFER0 ((Atom) 9)
+#define XA_CUT_BUFFER1 ((Atom) 10)
+#define XA_CUT_BUFFER2 ((Atom) 11)
+#define XA_CUT_BUFFER3 ((Atom) 12)
+#define XA_CUT_BUFFER4 ((Atom) 13)
+#define XA_CUT_BUFFER5 ((Atom) 14)
+#define XA_CUT_BUFFER6 ((Atom) 15)
+#define XA_CUT_BUFFER7 ((Atom) 16)
+#define XA_DRAWABLE ((Atom) 17)
+#define XA_FONT ((Atom) 18)
+#define XA_INTEGER ((Atom) 19)
+#define XA_PIXMAP ((Atom) 20)
+#define XA_POINT ((Atom) 21)
+#define XA_RECTANGLE ((Atom) 22)
+#define XA_RESOURCE_MANAGER ((Atom) 23)
+#define XA_RGB_COLOR_MAP ((Atom) 24)
+#define XA_RGB_BEST_MAP ((Atom) 25)
+#define XA_RGB_BLUE_MAP ((Atom) 26)
+#define XA_RGB_DEFAULT_MAP ((Atom) 27)
+#define XA_RGB_GRAY_MAP ((Atom) 28)
+#define XA_RGB_GREEN_MAP ((Atom) 29)
+#define XA_RGB_RED_MAP ((Atom) 30)
+#define XA_STRING ((Atom) 31)
+#define XA_VISUALID ((Atom) 32)
+#define XA_WINDOW ((Atom) 33)
+#define XA_WM_COMMAND ((Atom) 34)
+#define XA_WM_HINTS ((Atom) 35)
+#define XA_WM_CLIENT_MACHINE ((Atom) 36)
+#define XA_WM_ICON_NAME ((Atom) 37)
+#define XA_WM_ICON_SIZE ((Atom) 38)
+#define XA_WM_NAME ((Atom) 39)
+#define XA_WM_NORMAL_HINTS ((Atom) 40)
+#define XA_WM_SIZE_HINTS ((Atom) 41)
+#define XA_WM_ZOOM_HINTS ((Atom) 42)
+#define XA_MIN_SPACE ((Atom) 43)
+#define XA_NORM_SPACE ((Atom) 44)
+#define XA_MAX_SPACE ((Atom) 45)
+#define XA_END_SPACE ((Atom) 46)
+#define XA_SUPERSCRIPT_X ((Atom) 47)
+#define XA_SUPERSCRIPT_Y ((Atom) 48)
+#define XA_SUBSCRIPT_X ((Atom) 49)
+#define XA_SUBSCRIPT_Y ((Atom) 50)
+#define XA_UNDERLINE_POSITION ((Atom) 51)
+#define XA_UNDERLINE_THICKNESS ((Atom) 52)
+#define XA_STRIKEOUT_ASCENT ((Atom) 53)
+#define XA_STRIKEOUT_DESCENT ((Atom) 54)
+#define XA_ITALIC_ANGLE ((Atom) 55)
+#define XA_X_HEIGHT ((Atom) 56)
+#define XA_QUAD_WIDTH ((Atom) 57)
+#define XA_WEIGHT ((Atom) 58)
+#define XA_POINT_SIZE ((Atom) 59)
+#define XA_RESOLUTION ((Atom) 60)
+#define XA_COPYRIGHT ((Atom) 61)
+#define XA_NOTICE ((Atom) 62)
+#define XA_FONT_NAME ((Atom) 63)
+#define XA_FAMILY_NAME ((Atom) 64)
+#define XA_FULL_NAME ((Atom) 65)
+#define XA_CAP_HEIGHT ((Atom) 66)
+#define XA_WM_CLASS ((Atom) 67)
+#define XA_WM_TRANSIENT_FOR ((Atom) 68)
+
+#define XA_LAST_PREDEFINED ((Atom) 68)
+#endif /* XATOM_H */
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h b/Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h
new file mode 100644
index 00000000000..a59379b3b65
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/Xfuncproto.h
@@ -0,0 +1,60 @@
+/* $XConsortium: Xfuncproto.h,v 1.7 91/05/13 20:49:21 rws Exp $ */
+/*
+ * Copyright 1989, 1991 by the Massachusetts Institute of Technology
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. M.I.T. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ */
+
+/* Definitions to make function prototypes manageable */
+
+#ifndef _XFUNCPROTO_H_
+#define _XFUNCPROTO_H_
+
+#ifndef NeedFunctionPrototypes
+#define NeedFunctionPrototypes 1
+#endif /* NeedFunctionPrototypes */
+
+#ifndef NeedVarargsPrototypes
+#define NeedVarargsPrototypes 0
+#endif /* NeedVarargsPrototypes */
+
+#if NeedFunctionPrototypes
+
+#ifndef NeedNestedPrototypes
+#define NeedNestedPrototypes 1
+#endif /* NeedNestedPrototypes */
+
+#ifndef _Xconst
+#define _Xconst const
+#endif /* _Xconst */
+
+#ifndef NeedWidePrototypes
+#ifdef NARROWPROTO
+#define NeedWidePrototypes 0
+#else
+#define NeedWidePrototypes 1 /* default to make interropt. easier */
+#endif
+#endif /* NeedWidePrototypes */
+
+#endif /* NeedFunctionPrototypes */
+
+#ifdef __cplusplus
+#define _XFUNCPROTOBEGIN extern "C" {
+#define _XFUNCPROTOEND }
+#endif
+
+#ifndef _XFUNCPROTOBEGIN
+#define _XFUNCPROTOBEGIN
+#define _XFUNCPROTOEND
+#endif /* _XFUNCPROTOBEGIN */
+
+#endif /* _XFUNCPROTO_H_ */
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h b/Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h
new file mode 100644
index 00000000000..0a9e3ddd45d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/Xlib.h
@@ -0,0 +1,1214 @@
+/* $XConsortium: Xlib.h,v 11.221 93/07/02 14:13:28 gildea Exp $ */
+/*
+ * Copyright 1985, 1986, 1987, 1991 by the Massachusetts Institute of Technology
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission. M.I.T. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * X Window System is a Trademark of MIT.
+ *
+ */
+
+
+/*
+ * Xlib.h - Header definition and support file for the C subroutine
+ * interface library (Xlib) to the X Window System Protocol (V11).
+ * Structures and symbols starting with "_" are private to the library.
+ */
+#ifndef _XLIB_H_
+#define _XLIB_H_
+
+#define XlibSpecificationRelease 5
+
+#if !defined(MAC_TCL) && !defined(MAC_OSX_TK)
+# include <X11/X.h>
+#endif
+#ifdef MAC_TCL
+# include <X.h>
+# define Cursor XCursor
+# define Region XRegion
+#endif
+#ifdef MAC_OSX_TK
+# include <X11/X.h>
+# define Cursor XCursor
+# define Region XRegion
+#endif
+
+/* applications should not depend on these two headers being included! */
+#ifdef MAC_TCL
+#include <Xfuncproto.h>
+#else
+#include <X11/Xfuncproto.h>
+#endif
+
+#ifndef X_WCHAR
+#ifdef X_NOT_STDC_ENV
+#define X_WCHAR
+#endif
+#endif
+
+#ifndef X_WCHAR
+#include <stddef.h>
+#else
+/* replace this with #include or typedef appropriate for your system */
+typedef unsigned long wchar_t;
+#endif
+
+typedef char *XPointer;
+
+#define Bool int
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+/* Use define rather than typedef, since may need to undefine this later */
+#define Status int
+#else
+typedef int Status;
+#endif
+#define True 1
+#define False 0
+
+#define QueuedAlready 0
+#define QueuedAfterReading 1
+#define QueuedAfterFlush 2
+
+#define ConnectionNumber(dpy) ((dpy)->fd)
+#define RootWindow(dpy, scr) (((dpy)->screens[(scr)]).root)
+#define DefaultScreen(dpy) ((dpy)->default_screen)
+#define DefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root)
+#define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual)
+#define DefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc)
+#define BlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel)
+#define WhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel)
+#define AllPlanes ((unsigned long)~0L)
+#define QLength(dpy) ((dpy)->qlen)
+#define DisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width)
+#define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height)
+#define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth)
+#define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight)
+#define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define DisplayCells(dpy, scr) (DefaultVisual((dpy), (scr))->map_entries)
+#define ScreenCount(dpy) ((dpy)->nscreens)
+#define ServerVendor(dpy) ((dpy)->vendor)
+#define ProtocolVersion(dpy) ((dpy)->proto_major_version)
+#define ProtocolRevision(dpy) ((dpy)->proto_minor_version)
+#define VendorRelease(dpy) ((dpy)->release)
+#define DisplayString(dpy) ((dpy)->display_name)
+#define DefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap)
+#define BitmapUnit(dpy) ((dpy)->bitmap_unit)
+#define BitmapBitOrder(dpy) ((dpy)->bitmap_bit_order)
+#define BitmapPad(dpy) ((dpy)->bitmap_pad)
+#define ImageByteOrder(dpy) ((dpy)->byte_order)
+#define NextRequest(dpy) ((dpy)->request + 1)
+#define LastKnownRequestProcessed(dpy) ((dpy)->last_request_read)
+
+/* macros for screen oriented applications (toolkit) */
+#define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)]))
+#define DefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen]))
+#define DisplayOfScreen(s) ((s)->display)
+#define RootWindowOfScreen(s) ((s)->root)
+#define BlackPixelOfScreen(s) ((s)->black_pixel)
+#define WhitePixelOfScreen(s) ((s)->white_pixel)
+#define DefaultColormapOfScreen(s)((s)->cmap)
+#define DefaultDepthOfScreen(s) ((s)->root_depth)
+#define DefaultGCOfScreen(s) ((s)->default_gc)
+#define DefaultVisualOfScreen(s)((s)->root_visual)
+#define WidthOfScreen(s) ((s)->width)
+#define HeightOfScreen(s) ((s)->height)
+#define WidthMMOfScreen(s) ((s)->mwidth)
+#define HeightMMOfScreen(s) ((s)->mheight)
+#define PlanesOfScreen(s) ((s)->root_depth)
+#define CellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries)
+#define MinCmapsOfScreen(s) ((s)->min_maps)
+#define MaxCmapsOfScreen(s) ((s)->max_maps)
+#define DoesSaveUnders(s) ((s)->save_unders)
+#define DoesBackingStore(s) ((s)->backing_store)
+#define EventMaskOfScreen(s) ((s)->root_input_mask)
+
+/*
+ * Extensions need a way to hang private data on some structures.
+ */
+typedef struct _XExtData {
+ int number; /* number returned by XRegisterExtension */
+ struct _XExtData *next; /* next item on list of data for structure */
+ int (*free_private)(); /* called to free private storage */
+ XPointer private_data; /* data private to this extension. */
+} XExtData;
+
+/*
+ * This file contains structures used by the extension mechanism.
+ */
+typedef struct { /* public to extension, cannot be changed */
+ int extension; /* extension number */
+ int major_opcode; /* major op-code assigned by server */
+ int first_event; /* first event number for the extension */
+ int first_error; /* first error number for the extension */
+} XExtCodes;
+
+/*
+ * Data structure for retrieving info about pixmap formats.
+ */
+
+typedef struct {
+ int depth;
+ int bits_per_pixel;
+ int scanline_pad;
+} XPixmapFormatValues;
+
+
+/*
+ * Data structure for setting graphics context.
+ */
+typedef struct {
+ int function; /* logical operation */
+ unsigned long plane_mask;/* plane mask */
+ unsigned long foreground;/* foreground pixel */
+ unsigned long background;/* background pixel */
+ int line_width; /* line width */
+ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */
+ int cap_style; /* CapNotLast, CapButt,
+ CapRound, CapProjecting */
+ int join_style; /* JoinMiter, JoinRound, JoinBevel */
+ int fill_style; /* FillSolid, FillTiled,
+ FillStippled, FillOpaeueStippled */
+ int fill_rule; /* EvenOddRule, WindingRule */
+ int arc_mode; /* ArcChord, ArcPieSlice */
+ Pixmap tile; /* tile pixmap for tiling operations */
+ Pixmap stipple; /* stipple 1 plane pixmap for stipping */
+ int ts_x_origin; /* offset for tile or stipple operations */
+ int ts_y_origin;
+ Font font; /* default text font for text operations */
+ int subwindow_mode; /* ClipByChildren, IncludeInferiors */
+ Bool graphics_exposures;/* boolean, should exposures be generated */
+ int clip_x_origin; /* origin for clipping */
+ int clip_y_origin;
+ Pixmap clip_mask; /* bitmap clipping; other calls for rects */
+ int dash_offset; /* patterned/dashed line information */
+ char dashes;
+} XGCValues;
+
+/*
+ * Graphics context. The contents of this structure are implementation
+ * dependent. A GC should be treated as opaque by application code.
+ */
+
+typedef XGCValues *GC;
+
+/*
+ * Visual structure; contains information about colormapping possible.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ VisualID visualid; /* visual id of this visual */
+#if defined(__cplusplus) || defined(c_plusplus)
+ int c_class; /* C++ class of screen (monochrome, etc.) */
+#else
+ int class; /* class of screen (monochrome, etc.) */
+#endif
+ unsigned long red_mask, green_mask, blue_mask; /* mask values */
+ int bits_per_rgb; /* log base 2 of distinct color values */
+ int map_entries; /* color map entries */
+} Visual;
+
+/*
+ * Depth structure; contains information for each possible depth.
+ */
+typedef struct {
+ int depth; /* this depth (Z) of the depth */
+ int nvisuals; /* number of Visual types at this depth */
+ Visual *visuals; /* list of visuals possible at this depth */
+} Depth;
+
+/*
+ * Information about the screen. The contents of this structure are
+ * implementation dependent. A Screen should be treated as opaque
+ * by application code.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ struct _XDisplay *display;/* back pointer to display structure */
+ Window root; /* Root window id. */
+ int width, height; /* width and height of screen */
+ int mwidth, mheight; /* width and height of in millimeters */
+ int ndepths; /* number of depths possible */
+ Depth *depths; /* list of allowable depths on the screen */
+ int root_depth; /* bits per pixel */
+ Visual *root_visual; /* root visual */
+ GC default_gc; /* GC for the root root visual */
+ Colormap cmap; /* default color map */
+ unsigned long white_pixel;
+ unsigned long black_pixel; /* White and Black pixel values */
+ int max_maps, min_maps; /* max and min color maps */
+ int backing_store; /* Never, WhenMapped, Always */
+ Bool save_unders;
+ long root_input_mask; /* initial root input mask */
+} Screen;
+
+/*
+ * Format structure; describes ZFormat data the screen will understand.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ int depth; /* depth of this image format */
+ int bits_per_pixel; /* bits/pixel at this depth */
+ int scanline_pad; /* scanline must padded to this multiple */
+} ScreenFormat;
+
+/*
+ * Data structure for setting window attributes.
+ */
+typedef struct {
+ Pixmap background_pixmap; /* background or None or ParentRelative */
+ unsigned long background_pixel; /* background pixel */
+ Pixmap border_pixmap; /* border of the window */
+ unsigned long border_pixel; /* border pixel value */
+ int bit_gravity; /* one of bit gravity values */
+ int win_gravity; /* one of the window gravity values */
+ int backing_store; /* NotUseful, WhenMapped, Always */
+ unsigned long backing_planes;/* planes to be preseved if possible */
+ unsigned long backing_pixel;/* value to use in restoring planes */
+ Bool save_under; /* should bits under be saved? (popups) */
+ long event_mask; /* set of events that should be saved */
+ long do_not_propagate_mask; /* set of events that should not propagate */
+ Bool override_redirect; /* boolean value for override-redirect */
+ Colormap colormap; /* color map to be associated with window */
+ Cursor cursor; /* cursor to be displayed (or None) */
+} XSetWindowAttributes;
+
+typedef struct {
+ int x, y; /* location of window */
+ int width, height; /* width and height of window */
+ int border_width; /* border width of window */
+ int depth; /* depth of window */
+ Visual *visual; /* the associated visual structure */
+ Window root; /* root of screen containing window */
+#if defined(__cplusplus) || defined(c_plusplus)
+ int c_class; /* C++ InputOutput, InputOnly*/
+#else
+ int class; /* InputOutput, InputOnly*/
+#endif
+ int bit_gravity; /* one of bit gravity values */
+ int win_gravity; /* one of the window gravity values */
+ int backing_store; /* NotUseful, WhenMapped, Always */
+ unsigned long backing_planes;/* planes to be preserved if possible */
+ unsigned long backing_pixel;/* value to be used when restoring planes */
+ Bool save_under; /* boolean, should bits under be saved? */
+ Colormap colormap; /* color map to be associated with window */
+ Bool map_installed; /* boolean, is color map currently installed*/
+ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */
+ long all_event_masks; /* set of events all people have interest in*/
+ long your_event_mask; /* my event mask */
+ long do_not_propagate_mask; /* set of events that should not propagate */
+ Bool override_redirect; /* boolean value for override-redirect */
+ Screen *screen; /* back pointer to correct screen */
+} XWindowAttributes;
+
+/*
+ * Data structure for host setting; getting routines.
+ *
+ */
+
+typedef struct {
+ int family; /* for example FamilyInternet */
+ int length; /* length of address, in bytes */
+ char *address; /* pointer to where to find the bytes */
+} XHostAddress;
+
+/*
+ * Data structure for "image" data, used by image manipulation routines.
+ */
+typedef struct _XImage {
+ int width, height; /* size of image */
+ int xoffset; /* number of pixels offset in X direction */
+ int format; /* XYBitmap, XYPixmap, ZPixmap */
+ char *data; /* pointer to image data */
+ int byte_order; /* data byte order, LSBFirst, MSBFirst */
+ int bitmap_unit; /* quant. of scanline 8, 16, 32 */
+ int bitmap_bit_order; /* LSBFirst, MSBFirst */
+ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */
+ int depth; /* depth of image */
+ int bytes_per_line; /* accelarator to next line */
+ int bits_per_pixel; /* bits per pixel (ZPixmap) */
+ unsigned long red_mask; /* bits in z arrangment */
+ unsigned long green_mask;
+ unsigned long blue_mask;
+ XPointer obdata; /* hook for the object routines to hang on */
+ struct funcs { /* image manipulation routines */
+ struct _XImage *(*create_image)();
+#if NeedFunctionPrototypes
+ int (*destroy_image) (struct _XImage *);
+ unsigned long (*get_pixel) (struct _XImage *, int, int);
+ int (*put_pixel) (struct _XImage *, int, int, unsigned long);
+ struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int);
+ int (*add_pixel) (struct _XImage *, long);
+#else
+ int (*destroy_image)();
+ unsigned long (*get_pixel)();
+ int (*put_pixel)();
+ struct _XImage *(*sub_image)();
+ int (*add_pixel)();
+#endif
+ } f;
+} XImage;
+
+/*
+ * Data structure for XReconfigureWindow
+ */
+typedef struct {
+ int x, y;
+ int width, height;
+ int border_width;
+ Window sibling;
+ int stack_mode;
+} XWindowChanges;
+
+/*
+ * Data structure used by color operations
+ */
+typedef struct {
+ unsigned long pixel;
+ unsigned short red, green, blue;
+ char flags; /* do_red, do_green, do_blue */
+ char pad;
+} XColor;
+
+/*
+ * Data structures for graphics operations. On most machines, these are
+ * congruent with the wire protocol structures, so reformatting the data
+ * can be avoided on these architectures.
+ */
+typedef struct {
+ short x1, y1, x2, y2;
+} XSegment;
+
+typedef struct {
+ short x, y;
+} XPoint;
+
+typedef struct {
+ short x, y;
+ unsigned short width, height;
+} XRectangle;
+
+typedef struct {
+ short x, y;
+ unsigned short width, height;
+ short angle1, angle2;
+} XArc;
+
+
+/* Data structure for XChangeKeyboardControl */
+
+typedef struct {
+ int key_click_percent;
+ int bell_percent;
+ int bell_pitch;
+ int bell_duration;
+ int led;
+ int led_mode;
+ int key;
+ int auto_repeat_mode; /* On, Off, Default */
+} XKeyboardControl;
+
+/* Data structure for XGetKeyboardControl */
+
+typedef struct {
+ int key_click_percent;
+ int bell_percent;
+ unsigned int bell_pitch, bell_duration;
+ unsigned long led_mask;
+ int global_auto_repeat;
+ char auto_repeats[32];
+} XKeyboardState;
+
+/* Data structure for XGetMotionEvents. */
+
+typedef struct {
+ Time time;
+ short x, y;
+} XTimeCoord;
+
+/* Data structure for X{Set,Get}ModifierMapping */
+
+typedef struct {
+ int max_keypermod; /* The server's max # of keys per modifier */
+ KeyCode *modifiermap; /* An 8 by max_keypermod array of modifiers */
+} XModifierKeymap;
+
+
+/*
+ * Display datatype maintaining display specific data.
+ * The contents of this structure are implementation dependent.
+ * A Display should be treated as opaque by application code.
+ */
+typedef struct _XDisplay {
+ XExtData *ext_data; /* hook for extension to hang data */
+ struct _XFreeFuncs *free_funcs; /* internal free functions */
+ int fd; /* Network socket. */
+ int conn_checker; /* ugly thing used by _XEventsQueued */
+ int proto_major_version;/* maj. version of server's X protocol */
+ int proto_minor_version;/* minor version of servers X protocol */
+ char *vendor; /* vendor of the server hardware */
+ XID resource_base; /* resource ID base */
+ XID resource_mask; /* resource ID mask bits */
+ XID resource_id; /* allocator current ID */
+ int resource_shift; /* allocator shift to correct bits */
+ XID (*resource_alloc)(); /* allocator function */
+ int byte_order; /* screen byte order, LSBFirst, MSBFirst */
+ int bitmap_unit; /* padding and data requirements */
+ int bitmap_pad; /* padding requirements on bitmaps */
+ int bitmap_bit_order; /* LeastSignificant or MostSignificant */
+ int nformats; /* number of pixmap formats in list */
+ ScreenFormat *pixmap_format; /* pixmap format list */
+ int vnumber; /* Xlib's X protocol version number. */
+ int release; /* release of the server */
+ struct _XSQEvent *head, *tail; /* Input event queue. */
+ int qlen; /* Length of input event queue */
+ unsigned long last_request_read; /* seq number of last event read */
+ unsigned long request; /* sequence number of last request. */
+ char *last_req; /* beginning of last request, or dummy */
+ char *buffer; /* Output buffer starting address. */
+ char *bufptr; /* Output buffer index pointer. */
+ char *bufmax; /* Output buffer maximum+1 address. */
+ unsigned max_request_size; /* maximum number 32 bit words in request*/
+ struct _XrmHashBucketRec *db;
+ int (*synchandler)(); /* Synchronization handler */
+ char *display_name; /* "host:display" string used on this connect*/
+ int default_screen; /* default screen for operations */
+ int nscreens; /* number of screens on this server*/
+ Screen *screens; /* pointer to list of screens */
+ unsigned long motion_buffer; /* size of motion buffer */
+ unsigned long flags; /* internal connection flags */
+ int min_keycode; /* minimum defined keycode */
+ int max_keycode; /* maximum defined keycode */
+ KeySym *keysyms; /* This server's keysyms */
+ XModifierKeymap *modifiermap; /* This server's modifier keymap */
+ int keysyms_per_keycode;/* number of rows */
+ char *xdefaults; /* contents of defaults from server */
+ char *scratch_buffer; /* place to hang scratch buffer */
+ unsigned long scratch_length; /* length of scratch buffer */
+ int ext_number; /* extension number on this display */
+ struct _XExten *ext_procs; /* extensions initialized on this display */
+ /*
+ * the following can be fixed size, as the protocol defines how
+ * much address space is available.
+ * While this could be done using the extension vector, there
+ * may be MANY events processed, so a search through the extension
+ * list to find the right procedure for each event might be
+ * expensive if many extensions are being used.
+ */
+ Bool (*event_vec[128])(); /* vector for wire to event */
+ int (*wire_vec[128])(); /* vector for event to wire */
+ KeySym lock_meaning; /* for XLookupString */
+ struct _XLockInfo *lock; /* multi-thread state, display lock */
+ struct _XInternalAsync *async_handlers; /* for internal async */
+ unsigned long bigreq_size; /* max size of big requests */
+ struct _XLockPtrs *lock_fns; /* pointers to threads functions */
+ /* things above this line should not move, for binary compatibility */
+ struct _XKeytrans *key_bindings; /* for XLookupString */
+ Font cursor_font; /* for XCreateFontCursor */
+ struct _XDisplayAtoms *atoms; /* for XInternAtom */
+ unsigned int mode_switch; /* keyboard group modifiers */
+ struct _XContextDB *context_db; /* context database */
+ Bool (**error_vec)(); /* vector for wire to error */
+ /*
+ * Xcms information
+ */
+ struct {
+ XPointer defaultCCCs; /* pointer to an array of default XcmsCCC */
+ XPointer clientCmaps; /* pointer to linked list of XcmsCmapRec */
+ XPointer perVisualIntensityMaps;
+ /* linked list of XcmsIntensityMap */
+ } cms;
+ struct _XIMFilter *im_filters;
+ struct _XSQEvent *qfree; /* unallocated event queue elements */
+ unsigned long next_event_serial_num; /* inserted into next queue elt */
+ int (*savedsynchandler)(); /* user synchandler when Xlib usurps */
+} Display;
+
+#if NeedFunctionPrototypes /* prototypes require event type definitions */
+#undef _XEVENT_
+#endif
+#ifndef _XEVENT_
+
+#define XMaxTransChars 4
+
+/*
+ * Definitions of specific events.
+ */
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window it is reported relative to */
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* pointer x, y coordinates in event window */
+ int x_root, y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int keycode; /* detail */
+ Bool same_screen; /* same screen flag */
+ char trans_chars[XMaxTransChars];
+ /* translated characters */
+ int nbytes;
+} XKeyEvent;
+typedef XKeyEvent XKeyPressedEvent;
+typedef XKeyEvent XKeyReleasedEvent;
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window it is reported relative to */
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* pointer x, y coordinates in event window */
+ int x_root, y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int button; /* detail */
+ Bool same_screen; /* same screen flag */
+} XButtonEvent;
+typedef XButtonEvent XButtonPressedEvent;
+typedef XButtonEvent XButtonReleasedEvent;
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* pointer x, y coordinates in event window */
+ int x_root, y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ char is_hint; /* detail */
+ Bool same_screen; /* same screen flag */
+} XMotionEvent;
+typedef XMotionEvent XPointerMovedEvent;
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* pointer x, y coordinates in event window */
+ int x_root, y_root; /* coordinates relative to root */
+ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
+ int detail;
+ /*
+ * NotifyAncestor, NotifyVirtual, NotifyInferior,
+ * NotifyNonlinear,NotifyNonlinearVirtual
+ */
+ Bool same_screen; /* same screen flag */
+ Bool focus; /* boolean focus */
+ unsigned int state; /* key or button mask */
+} XCrossingEvent;
+typedef XCrossingEvent XEnterWindowEvent;
+typedef XCrossingEvent XLeaveWindowEvent;
+
+typedef struct {
+ int type; /* FocusIn or FocusOut */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* window of event */
+ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
+ int detail;
+ /*
+ * NotifyAncestor, NotifyVirtual, NotifyInferior,
+ * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer,
+ * NotifyPointerRoot, NotifyDetailNone
+ */
+} XFocusChangeEvent;
+typedef XFocusChangeEvent XFocusInEvent;
+typedef XFocusChangeEvent XFocusOutEvent;
+
+/* generated on EnterWindow and FocusIn when KeyMapState selected */
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ char key_vector[32];
+} XKeymapEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ int x, y;
+ int width, height;
+ int count; /* if non-zero, at least this many more */
+} XExposeEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Drawable drawable;
+ int x, y;
+ int width, height;
+ int count; /* if non-zero, at least this many more */
+ int major_code; /* core is CopyArea or CopyPlane */
+ int minor_code; /* not defined in the core */
+} XGraphicsExposeEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Drawable drawable;
+ int major_code; /* core is CopyArea or CopyPlane */
+ int minor_code; /* not defined in the core */
+} XNoExposeEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ int state; /* Visibility state */
+} XVisibilityEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window parent; /* parent of the window */
+ Window window; /* window id of window created */
+ int x, y; /* window location */
+ int width, height; /* size of window */
+ int border_width; /* border width */
+ Bool override_redirect; /* creation should be overridden */
+} XCreateWindowEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+} XDestroyWindowEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ Bool from_configure;
+} XUnmapEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ Bool override_redirect; /* boolean, is override set... */
+} XMapEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window parent;
+ Window window;
+} XMapRequestEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ Window parent;
+ int x, y;
+ Bool override_redirect;
+} XReparentEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ int x, y;
+ int width, height;
+ int border_width;
+ Window above;
+ Bool override_redirect;
+} XConfigureEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ int x, y;
+} XGravityEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ int width, height;
+} XResizeRequestEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window parent;
+ Window window;
+ int x, y;
+ int width, height;
+ int border_width;
+ Window above;
+ int detail; /* Above, Below, TopIf, BottomIf, Opposite */
+ unsigned long value_mask;
+} XConfigureRequestEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window event;
+ Window window;
+ int place; /* PlaceOnTop, PlaceOnBottom */
+} XCirculateEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window parent;
+ Window window;
+ int place; /* PlaceOnTop, PlaceOnBottom */
+} XCirculateRequestEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ Atom atom;
+ Time time;
+ int state; /* NewValue, Deleted */
+} XPropertyEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ Atom selection;
+ Time time;
+} XSelectionClearEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window owner;
+ Window requestor;
+ Atom selection;
+ Atom target;
+ Atom property;
+ Time time;
+} XSelectionRequestEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window requestor;
+ Atom selection;
+ Atom target;
+ Atom property; /* ATOM or None */
+ Time time;
+} XSelectionEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ Colormap colormap; /* COLORMAP or None */
+#if defined(__cplusplus) || defined(c_plusplus)
+ Bool c_new; /* C++ */
+#else
+ Bool new;
+#endif
+ int state; /* ColormapInstalled, ColormapUninstalled */
+} XColormapEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window;
+ Atom message_type;
+ int format;
+ union {
+ char b[20];
+ short s[10];
+ long l[5];
+ } data;
+} XClientMessageEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* unused */
+ int request; /* one of MappingModifier, MappingKeyboard,
+ MappingPointer */
+ int first_keycode; /* first keycode */
+ int count; /* defines range of change w. first_keycode*/
+} XMappingEvent;
+
+typedef struct {
+ int type;
+ Display *display; /* Display the event was read from */
+ XID resourceid; /* resource id */
+ unsigned long serial; /* serial number of failed request */
+ unsigned char error_code; /* error code of failed request */
+ unsigned char request_code; /* Major op-code of failed request */
+ unsigned char minor_code; /* Minor op-code of failed request */
+} XErrorEvent;
+
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display;/* Display the event was read from */
+ Window window; /* window on which event was requested in event mask */
+} XAnyEvent;
+
+/*
+ * this union is defined so Xlib can always use the same sized
+ * event structure internally, to avoid memory fragmentation.
+ */
+typedef union _XEvent {
+ int type; /* must not be changed; first element */
+ XAnyEvent xany;
+ XKeyEvent xkey;
+ XButtonEvent xbutton;
+ XMotionEvent xmotion;
+ XCrossingEvent xcrossing;
+ XFocusChangeEvent xfocus;
+ XExposeEvent xexpose;
+ XGraphicsExposeEvent xgraphicsexpose;
+ XNoExposeEvent xnoexpose;
+ XVisibilityEvent xvisibility;
+ XCreateWindowEvent xcreatewindow;
+ XDestroyWindowEvent xdestroywindow;
+ XUnmapEvent xunmap;
+ XMapEvent xmap;
+ XMapRequestEvent xmaprequest;
+ XReparentEvent xreparent;
+ XConfigureEvent xconfigure;
+ XGravityEvent xgravity;
+ XResizeRequestEvent xresizerequest;
+ XConfigureRequestEvent xconfigurerequest;
+ XCirculateEvent xcirculate;
+ XCirculateRequestEvent xcirculaterequest;
+ XPropertyEvent xproperty;
+ XSelectionClearEvent xselectionclear;
+ XSelectionRequestEvent xselectionrequest;
+ XSelectionEvent xselection;
+ XColormapEvent xcolormap;
+ XClientMessageEvent xclient;
+ XMappingEvent xmapping;
+ XErrorEvent xerror;
+ XKeymapEvent xkeymap;
+ long pad[24];
+} XEvent;
+#endif
+
+#define XAllocID(dpy) ((*(dpy)->resource_alloc)((dpy)))
+
+/*
+ * per character font metric information.
+ */
+typedef struct {
+ short lbearing; /* origin to left edge of raster */
+ short rbearing; /* origin to right edge of raster */
+ short width; /* advance to next char's origin */
+ short ascent; /* baseline to top edge of raster */
+ short descent; /* baseline to bottom edge of raster */
+ unsigned short attributes; /* per char flags (not predefined) */
+} XCharStruct;
+
+/*
+ * To allow arbitrary information with fonts, there are additional properties
+ * returned.
+ */
+typedef struct {
+ Atom name;
+ unsigned long card32;
+} XFontProp;
+
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ Font fid; /* Font id for this font */
+ unsigned direction; /* hint about direction the font is painted */
+ unsigned min_char_or_byte2;/* first character */
+ unsigned max_char_or_byte2;/* last character */
+ unsigned min_byte1; /* first row that exists */
+ unsigned max_byte1; /* last row that exists */
+ Bool all_chars_exist;/* flag if all characters have non-zero size*/
+ unsigned default_char; /* char to print for undefined character */
+ int n_properties; /* how many properties there are */
+ XFontProp *properties; /* pointer to array of additional properties*/
+ XCharStruct min_bounds; /* minimum bounds over all existing char*/
+ XCharStruct max_bounds; /* maximum bounds over all existing char*/
+ XCharStruct *per_char; /* first_char to last_char information */
+ int ascent; /* log. extent above baseline for spacing */
+ int descent; /* log. descent below baseline for spacing */
+} XFontStruct;
+
+/*
+ * PolyText routines take these as arguments.
+ */
+typedef struct {
+ char *chars; /* pointer to string */
+ int nchars; /* number of characters */
+ int delta; /* delta between strings */
+ Font font; /* font to print it in, None don't change */
+} XTextItem;
+
+typedef struct { /* normal 16 bit characters are two bytes */
+ unsigned char byte1;
+ unsigned char byte2;
+} XChar2b;
+
+typedef struct {
+ XChar2b *chars; /* two byte characters */
+ int nchars; /* number of characters */
+ int delta; /* delta between strings */
+ Font font; /* font to print it in, None don't change */
+} XTextItem16;
+
+
+typedef union { Display *display;
+ GC gc;
+ Visual *visual;
+ Screen *screen;
+ ScreenFormat *pixmap_format;
+ XFontStruct *font; } XEDataObject;
+
+typedef struct {
+ XRectangle max_ink_extent;
+ XRectangle max_logical_extent;
+} XFontSetExtents;
+
+typedef struct _XFontSet *XFontSet;
+
+typedef struct {
+ char *chars;
+ int nchars;
+ int delta;
+ XFontSet font_set;
+} XmbTextItem;
+
+typedef struct {
+ wchar_t *chars;
+ int nchars;
+ int delta;
+ XFontSet font_set;
+} XwcTextItem;
+
+typedef void (*XIMProc)();
+
+typedef struct _XIM *XIM;
+typedef struct _XIC *XIC;
+
+typedef unsigned long XIMStyle;
+
+typedef struct {
+ unsigned short count_styles;
+ XIMStyle *supported_styles;
+} XIMStyles;
+
+#define XIMPreeditArea 0x0001L
+#define XIMPreeditCallbacks 0x0002L
+#define XIMPreeditPosition 0x0004L
+#define XIMPreeditNothing 0x0008L
+#define XIMPreeditNone 0x0010L
+#define XIMStatusArea 0x0100L
+#define XIMStatusCallbacks 0x0200L
+#define XIMStatusNothing 0x0400L
+#define XIMStatusNone 0x0800L
+
+#define XNVaNestedList "XNVaNestedList"
+#define XNClientWindow "clientWindow"
+#define XNInputStyle "inputStyle"
+#define XNFocusWindow "focusWindow"
+#define XNResourceName "resourceName"
+#define XNResourceClass "resourceClass"
+#define XNGeometryCallback "geometryCallback"
+#define XNFilterEvents "filterEvents"
+#define XNPreeditStartCallback "preeditStartCallback"
+#define XNPreeditDoneCallback "preeditDoneCallback"
+#define XNPreeditDrawCallback "preeditDrawCallback"
+#define XNPreeditCaretCallback "preeditCaretCallback"
+#define XNPreeditAttributes "preeditAttributes"
+#define XNStatusStartCallback "statusStartCallback"
+#define XNStatusDoneCallback "statusDoneCallback"
+#define XNStatusDrawCallback "statusDrawCallback"
+#define XNStatusAttributes "statusAttributes"
+#define XNArea "area"
+#define XNAreaNeeded "areaNeeded"
+#define XNSpotLocation "spotLocation"
+#define XNColormap "colorMap"
+#define XNStdColormap "stdColorMap"
+#define XNForeground "foreground"
+#define XNBackground "background"
+#define XNBackgroundPixmap "backgroundPixmap"
+#define XNFontSet "fontSet"
+#define XNLineSpace "lineSpace"
+#define XNCursor "cursor"
+
+#define XBufferOverflow -1
+#define XLookupNone 1
+#define XLookupChars 2
+#define XLookupKeySym 3
+#define XLookupBoth 4
+
+#if NeedFunctionPrototypes
+typedef void *XVaNestedList;
+#else
+typedef XPointer XVaNestedList;
+#endif
+
+typedef struct {
+ XPointer client_data;
+ XIMProc callback;
+} XIMCallback;
+
+typedef unsigned long XIMFeedback;
+
+#define XIMReverse 1
+#define XIMUnderline (1<<1)
+#define XIMHighlight (1<<2)
+#define XIMPrimary (1<<5)
+#define XIMSecondary (1<<6)
+#define XIMTertiary (1<<7)
+
+typedef struct _XIMText {
+ unsigned short length;
+ XIMFeedback *feedback;
+ Bool encoding_is_wchar;
+ union {
+ char *multi_byte;
+ wchar_t *wide_char;
+ } string;
+} XIMText;
+
+typedef struct _XIMPreeditDrawCallbackStruct {
+ int caret; /* Cursor offset within pre-edit string */
+ int chg_first; /* Starting change position */
+ int chg_length; /* Length of the change in character count */
+ XIMText *text;
+} XIMPreeditDrawCallbackStruct;
+
+typedef enum {
+ XIMForwardChar, XIMBackwardChar,
+ XIMForwardWord, XIMBackwardWord,
+ XIMCaretUp, XIMCaretDown,
+ XIMNextLine, XIMPreviousLine,
+ XIMLineStart, XIMLineEnd,
+ XIMAbsolutePosition,
+ XIMDontChange
+} XIMCaretDirection;
+
+typedef enum {
+ XIMIsInvisible, /* Disable caret feedback */
+ XIMIsPrimary, /* UI defined caret feedback */
+ XIMIsSecondary /* UI defined caret feedback */
+} XIMCaretStyle;
+
+typedef struct _XIMPreeditCaretCallbackStruct {
+ int position; /* Caret offset within pre-edit string */
+ XIMCaretDirection direction; /* Caret moves direction */
+ XIMCaretStyle style; /* Feedback of the caret */
+} XIMPreeditCaretCallbackStruct;
+
+typedef enum {
+ XIMTextType,
+ XIMBitmapType
+} XIMStatusDataType;
+
+typedef struct _XIMStatusDrawCallbackStruct {
+ XIMStatusDataType type;
+ union {
+ XIMText *text;
+ Pixmap bitmap;
+ } data;
+} XIMStatusDrawCallbackStruct;
+
+typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XErrorEvent* /* error_event */
+#endif
+);
+
+_XFUNCPROTOBEGIN
+
+
+
+#include "../../../pTk/tkIntXlibDecls.h"
+
+_XFUNCPROTOEND
+
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+# undef Cursor
+#endif
+
+#endif /* _XLIB_H_ */
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h b/Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h
new file mode 100644
index 00000000000..af44e0e9c2e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/Xutil.h
@@ -0,0 +1,855 @@
+/* $XConsortium: Xutil.h,v 11.73 91/07/30 16:21:37 rws Exp $ */
+
+/***********************************************************
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Digital or MIT not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+#ifndef _XUTIL_H_
+#define _XUTIL_H_
+
+/* You must include <X11/Xlib.h> before including this file */
+
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+# define Region XRegion
+#endif
+
+/*
+ * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
+ * value (x, y, width, height) was found in the parsed string.
+ */
+#define NoValue 0x0000
+#define XValue 0x0001
+#define YValue 0x0002
+#define WidthValue 0x0004
+#define HeightValue 0x0008
+#define AllValues 0x000F
+#define XNegative 0x0010
+#define YNegative 0x0020
+
+/*
+ * new version containing base_width, base_height, and win_gravity fields;
+ * used with WM_NORMAL_HINTS.
+ */
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ int x, y; /* obsolete for new window mgrs, but clients */
+ int width, height; /* should set so old wm's don't mess up */
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+ struct {
+ int x; /* numerator */
+ int y; /* denominator */
+ } min_aspect, max_aspect;
+ int base_width, base_height; /* added by ICCCM version 1 */
+ int win_gravity; /* added by ICCCM version 1 */
+} XSizeHints;
+
+/*
+ * The next block of definitions are for window manager properties that
+ * clients and applications use for communication.
+ */
+
+/* flags argument in size hints */
+#define USPosition (1L << 0) /* user specified x, y */
+#define USSize (1L << 1) /* user specified width, height */
+
+#define PPosition (1L << 2) /* program specified position */
+#define PSize (1L << 3) /* program specified size */
+#define PMinSize (1L << 4) /* program specified minimum size */
+#define PMaxSize (1L << 5) /* program specified maximum size */
+#define PResizeInc (1L << 6) /* program specified resize increments */
+#define PAspect (1L << 7) /* program specified min and max aspect ratios */
+#define PBaseSize (1L << 8) /* program specified base for incrementing */
+#define PWinGravity (1L << 9) /* program specified window gravity */
+
+/* obsolete */
+#define PAllHints (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect)
+
+
+
+typedef struct {
+ long flags; /* marks which fields in this structure are defined */
+ Bool input; /* does this application rely on the window manager to
+ get keyboard input? */
+ int initial_state; /* see below */
+ Pixmap icon_pixmap; /* pixmap to be used as icon */
+ Window icon_window; /* window to be used as icon */
+ int icon_x, icon_y; /* initial position of icon */
+ Pixmap icon_mask; /* icon mask bitmap */
+ XID window_group; /* id of related window group */
+ /* this structure may be extended in the future */
+} XWMHints;
+
+/* definition for flags of XWMHints */
+
+#define InputHint (1L << 0)
+#define StateHint (1L << 1)
+#define IconPixmapHint (1L << 2)
+#define IconWindowHint (1L << 3)
+#define IconPositionHint (1L << 4)
+#define IconMaskHint (1L << 5)
+#define WindowGroupHint (1L << 6)
+#define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \
+IconPositionHint|IconMaskHint|WindowGroupHint)
+
+/* definitions for initial window state */
+#define WithdrawnState 0 /* for windows that are not mapped */
+#define NormalState 1 /* most applications want to start this way */
+#define IconicState 3 /* application wants to start as an icon */
+
+/*
+ * Obsolete states no longer defined by ICCCM
+ */
+#define DontCareState 0 /* don't know or care */
+#define ZoomState 2 /* application wants to start zoomed */
+#define InactiveState 4 /* application believes it is seldom used; */
+ /* some wm's may put it on inactive menu */
+
+
+/*
+ * new structure for manipulating TEXT properties; used with WM_NAME,
+ * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND.
+ */
+typedef struct {
+ unsigned char *value; /* same as Property routines */
+ Atom encoding; /* prop type */
+ int format; /* prop data format: 8, 16, or 32 */
+ unsigned long nitems; /* number of data items in value */
+} XTextProperty;
+
+#define XNoMemory -1
+#define XLocaleNotSupported -2
+#define XConverterNotFound -3
+
+typedef enum {
+ XStringStyle, /* STRING */
+ XCompoundTextStyle, /* COMPOUND_TEXT */
+ XTextStyle, /* text in owner's encoding (current locale)*/
+ XStdICCTextStyle /* STRING, else COMPOUND_TEXT */
+} XICCEncodingStyle;
+
+typedef struct {
+ int min_width, min_height;
+ int max_width, max_height;
+ int width_inc, height_inc;
+} XIconSize;
+
+typedef struct {
+ char *res_name;
+ char *res_class;
+} XClassHint;
+
+/*
+ * These macros are used to give some sugar to the image routines so that
+ * naive people are more comfortable with them.
+ */
+#define XDestroyImage(ximage) \
+ ((*((ximage)->f.destroy_image))((ximage)))
+#define XGetPixel(ximage, x, y) \
+ ((*((ximage)->f.get_pixel))((ximage), (x), (y)))
+#define XPutPixel(ximage, x, y, pixel) \
+ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel)))
+#define XSubImage(ximage, x, y, width, height) \
+ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height)))
+#define XAddPixel(ximage, value) \
+ ((*((ximage)->f.add_pixel))((ximage), (value)))
+
+/*
+ * Compose sequence status structure, used in calling XLookupString.
+ */
+typedef struct _XComposeStatus {
+ XPointer compose_ptr; /* state table pointer */
+ int chars_matched; /* match state */
+} XComposeStatus;
+
+/*
+ * Keysym macros, used on Keysyms to test for classes of symbols
+ */
+#define IsKeypadKey(keysym) \
+ (((unsigned)(keysym) >= XK_KP_Space) && ((unsigned)(keysym) <= XK_KP_Equal))
+
+#define IsCursorKey(keysym) \
+ (((unsigned)(keysym) >= XK_Home) && ((unsigned)(keysym) < XK_Select))
+
+#define IsPFKey(keysym) \
+ (((unsigned)(keysym) >= XK_KP_F1) && ((unsigned)(keysym) <= XK_KP_F4))
+
+#define IsFunctionKey(keysym) \
+ (((unsigned)(keysym) >= XK_F1) && ((unsigned)(keysym) <= XK_F35))
+
+#define IsMiscFunctionKey(keysym) \
+ (((unsigned)(keysym) >= XK_Select) && ((unsigned)(keysym) <= XK_Break))
+
+#define IsModifierKey(keysym) \
+ ((((unsigned)(keysym) >= XK_Shift_L) && ((unsigned)(keysym) <= XK_Hyper_R)) \
+ || ((unsigned)(keysym) == XK_Mode_switch) \
+ || ((unsigned)(keysym) == XK_Num_Lock))
+/*
+ * opaque reference to Region data type
+ */
+typedef struct _XRegion *Region;
+
+/* Return values from XRectInRegion() */
+
+#define RectangleOut 0
+#define RectangleIn 1
+#define RectanglePart 2
+
+
+/*
+ * Information used by the visual utility routines to find desired visual
+ * type from the many visuals a display may support.
+ */
+
+typedef struct {
+ Visual *visual;
+ VisualID visualid;
+ int screen;
+ int depth;
+#if defined(__cplusplus) || defined(c_plusplus)
+ int c_class; /* C++ */
+#else
+ int class;
+#endif
+ unsigned long red_mask;
+ unsigned long green_mask;
+ unsigned long blue_mask;
+ int colormap_size;
+ int bits_per_rgb;
+} XVisualInfo;
+
+#define VisualNoMask 0x0
+#define VisualIDMask 0x1
+#define VisualScreenMask 0x2
+#define VisualDepthMask 0x4
+#define VisualClassMask 0x8
+#define VisualRedMaskMask 0x10
+#define VisualGreenMaskMask 0x20
+#define VisualBlueMaskMask 0x40
+#define VisualColormapSizeMask 0x80
+#define VisualBitsPerRGBMask 0x100
+#define VisualAllMask 0x1FF
+
+/*
+ * This defines a window manager property that clients may use to
+ * share standard color maps of type RGB_COLOR_MAP:
+ */
+typedef struct {
+ Colormap colormap;
+ unsigned long red_max;
+ unsigned long red_mult;
+ unsigned long green_max;
+ unsigned long green_mult;
+ unsigned long blue_max;
+ unsigned long blue_mult;
+ unsigned long base_pixel;
+ VisualID visualid; /* added by ICCCM version 1 */
+ XID killid; /* added by ICCCM version 1 */
+} XStandardColormap;
+
+#define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */
+
+
+/*
+ * return codes for XReadBitmapFile and XWriteBitmapFile
+ */
+#define BitmapSuccess 0
+#define BitmapOpenFailed 1
+#define BitmapFileInvalid 2
+#define BitmapNoMemory 3
+
+/****************************************************************
+ *
+ * Context Management
+ *
+ ****************************************************************/
+
+
+/* Associative lookup table return codes */
+
+#define XCSUCCESS 0 /* No error. */
+#define XCNOMEM 1 /* Out of memory */
+#define XCNOENT 2 /* No entry in table */
+
+typedef int XContext;
+
+#define XUniqueContext() ((XContext) XrmUniqueQuark())
+#define XStringToContext(string) ((XContext) XrmStringToQuark(string))
+
+_XFUNCPROTOBEGIN
+
+/* The following declarations are alphabetized. */
+
+extern XClassHint *XAllocClassHint (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XIconSize *XAllocIconSize (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XSizeHints *XAllocSizeHints (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XStandardColormap *XAllocStandardColormap (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern XWMHints *XAllocWMHints (
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern void XClipBox(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ XRectangle* /* rect_return */
+#endif
+);
+
+extern Region XCreateRegion(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern char *XDefaultString(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+
+extern int XDeleteContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */
+#endif
+);
+
+extern void XDestroyRegion(
+#if NeedFunctionPrototypes
+ Region /* r */
+#endif
+);
+
+extern void XEmptyRegion(
+#if NeedFunctionPrototypes
+ Region /* r */
+#endif
+);
+
+extern void XEqualRegion(
+#if NeedFunctionPrototypes
+ Region /* r1 */,
+ Region /* r2 */
+#endif
+);
+
+extern int XFindContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */,
+ XPointer* /* data_return */
+#endif
+);
+
+extern int XGetClassHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XClassHint* /* class_hints_return */
+#endif
+);
+
+extern int XGetIconSizes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XIconSize** /* size_list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern int XGetNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */
+#endif
+);
+
+extern int XGetRGBColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap** /* stdcmap_return */,
+ int* /* count_return */,
+ Atom /* property */
+#endif
+);
+
+extern int XGetSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ Atom /* property */
+#endif
+);
+
+extern int XGetStandardColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* colormap_return */,
+ Atom /* property */
+#endif
+);
+
+extern int XGetTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* window */,
+ XTextProperty* /* text_prop_return */,
+ Atom /* property */
+#endif
+);
+
+
+extern int XGetWMClientMachine(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern XWMHints *XGetWMHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+
+extern int XGetWMIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern int XGetWMName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern int XGetWMNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ long* /* supplied_return */
+#endif
+);
+
+extern int XGetWMSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints_return */,
+ long* /* supplied_return */,
+ Atom /* property */
+#endif
+);
+
+extern int XGetZoomHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* zhints_return */
+#endif
+);
+
+extern void XIntersectRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern int XLookupString(
+#if NeedFunctionPrototypes
+ XKeyEvent* /* event_struct */,
+ char* /* buffer_return */,
+ int /* bytes_buffer */,
+ KeySym* /* keysym_return */,
+ XComposeStatus* /* status_in_out */
+#endif
+);
+
+extern int XMatchVisualInfo(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen */,
+ int /* depth */,
+ int /* class */,
+ XVisualInfo* /* vinfo_return */
+#endif
+);
+
+extern void XOffsetRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* dx */,
+ int /* dy */
+#endif
+);
+
+extern Bool XPointInRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* x */,
+ int /* y */
+#endif
+);
+
+extern Region XPolygonRegion(
+#if NeedFunctionPrototypes
+ XPoint* /* points */,
+ int /* n */,
+ int /* fill_rule */
+#endif
+);
+
+extern int XRectInRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+
+extern int XSaveContext(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* rid */,
+ XContext /* context */,
+ _Xconst char* /* data */
+#endif
+);
+
+extern void XSetClassHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void XSetIconSizes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XIconSize* /* size_list */,
+ int /* count */
+#endif
+);
+
+extern void XSetNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetRGBColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* stdcmaps */,
+ int /* count */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetStandardProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */,
+ _Xconst char* /* icon_name */,
+ Pixmap /* icon_pixmap */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetWMHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XWMHints* /* wm_hints */
+#endif
+);
+
+extern void XSetWMIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */
+#endif
+);
+
+extern void XSetWMName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* text_prop */
+#endif
+);
+
+extern void XSetWMNormalHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */
+#endif
+);
+
+extern void XSetWMProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XTextProperty* /* window_name */,
+ XTextProperty* /* icon_name */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* normal_hints */,
+ XWMHints* /* wm_hints */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void XmbSetWMProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ _Xconst char* /* window_name */,
+ _Xconst char* /* icon_name */,
+ char** /* argv */,
+ int /* argc */,
+ XSizeHints* /* normal_hints */,
+ XWMHints* /* wm_hints */,
+ XClassHint* /* class_hints */
+#endif
+);
+
+extern void XSetWMSizeHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* hints */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetRegion(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Region /* r */
+#endif
+);
+
+extern void XSetStandardColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XStandardColormap* /* colormap */,
+ Atom /* property */
+#endif
+);
+
+extern void XSetZoomHints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XSizeHints* /* zhints */
+#endif
+);
+
+extern void XShrinkRegion(
+#if NeedFunctionPrototypes
+ Region /* r */,
+ int /* dx */,
+ int /* dy */
+#endif
+);
+
+extern void XSubtractRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern int XmbTextListToTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char** /* list */,
+ int /* count */,
+ XICCEncodingStyle /* style */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern int XwcTextListToTextProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ wchar_t** /* list */,
+ int /* count */,
+ XICCEncodingStyle /* style */,
+ XTextProperty* /* text_prop_return */
+#endif
+);
+
+extern void XwcFreeStringList(
+#if NeedFunctionPrototypes
+ wchar_t** /* list */
+#endif
+);
+
+extern int XTextPropertyToStringList(
+#if NeedFunctionPrototypes
+ XTextProperty* /* text_prop */,
+ char*** /* list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern int XmbTextPropertyToTextList(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XTextProperty* /* text_prop */,
+ char*** /* list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern int XwcTextPropertyToTextList(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XTextProperty* /* text_prop */,
+ wchar_t*** /* list_return */,
+ int* /* count_return */
+#endif
+);
+
+extern void XUnionRectWithRegion(
+#if NeedFunctionPrototypes
+ XRectangle* /* rectangle */,
+ Region /* src_region */,
+ Region /* dest_region_return */
+#endif
+);
+
+extern void XUnionRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+extern int XWMGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */,
+ _Xconst char* /* user_geometry */,
+ _Xconst char* /* default_geometry */,
+ unsigned int /* border_width */,
+ XSizeHints* /* hints */,
+ int* /* x_return */,
+ int* /* y_return */,
+ int* /* width_return */,
+ int* /* height_return */,
+ int* /* gravity_return */
+#endif
+);
+
+extern void XXorRegion(
+#if NeedFunctionPrototypes
+ Region /* sra */,
+ Region /* srb */,
+ Region /* dr_return */
+#endif
+);
+
+_XFUNCPROTOEND
+
+#if defined(MAC_TCL) || defined(MAC_OSX_TK)
+# undef Region
+#endif
+
+#endif /* _XUTIL_H_ */
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h b/Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h
new file mode 100644
index 00000000000..617274fa806
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/cursorfont.h
@@ -0,0 +1,79 @@
+/* $XConsortium: cursorfont.h,v 1.2 88/09/06 16:44:27 jim Exp $ */
+#define XC_num_glyphs 154
+#define XC_X_cursor 0
+#define XC_arrow 2
+#define XC_based_arrow_down 4
+#define XC_based_arrow_up 6
+#define XC_boat 8
+#define XC_bogosity 10
+#define XC_bottom_left_corner 12
+#define XC_bottom_right_corner 14
+#define XC_bottom_side 16
+#define XC_bottom_tee 18
+#define XC_box_spiral 20
+#define XC_center_ptr 22
+#define XC_circle 24
+#define XC_clock 26
+#define XC_coffee_mug 28
+#define XC_cross 30
+#define XC_cross_reverse 32
+#define XC_crosshair 34
+#define XC_diamond_cross 36
+#define XC_dot 38
+#define XC_dotbox 40
+#define XC_double_arrow 42
+#define XC_draft_large 44
+#define XC_draft_small 46
+#define XC_draped_box 48
+#define XC_exchange 50
+#define XC_fleur 52
+#define XC_gobbler 54
+#define XC_gumby 56
+#define XC_hand1 58
+#define XC_hand2 60
+#define XC_heart 62
+#define XC_icon 64
+#define XC_iron_cross 66
+#define XC_left_ptr 68
+#define XC_left_side 70
+#define XC_left_tee 72
+#define XC_leftbutton 74
+#define XC_ll_angle 76
+#define XC_lr_angle 78
+#define XC_man 80
+#define XC_middlebutton 82
+#define XC_mouse 84
+#define XC_pencil 86
+#define XC_pirate 88
+#define XC_plus 90
+#define XC_question_arrow 92
+#define XC_right_ptr 94
+#define XC_right_side 96
+#define XC_right_tee 98
+#define XC_rightbutton 100
+#define XC_rtl_logo 102
+#define XC_sailboat 104
+#define XC_sb_down_arrow 106
+#define XC_sb_h_double_arrow 108
+#define XC_sb_left_arrow 110
+#define XC_sb_right_arrow 112
+#define XC_sb_up_arrow 114
+#define XC_sb_v_double_arrow 116
+#define XC_shuttle 118
+#define XC_sizing 120
+#define XC_spider 122
+#define XC_spraycan 124
+#define XC_star 126
+#define XC_target 128
+#define XC_tcross 130
+#define XC_top_left_arrow 132
+#define XC_top_left_corner 134
+#define XC_top_right_corner 136
+#define XC_top_side 138
+#define XC_top_tee 140
+#define XC_trek 142
+#define XC_ul_angle 144
+#define XC_umbrella 146
+#define XC_ur_angle 148
+#define XC_watch 150
+#define XC_xterm 152
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/keysym.h b/Master/tlpkg/tlperl/lib/Tk/X11/keysym.h
new file mode 100644
index 00000000000..027afe08d5f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/keysym.h
@@ -0,0 +1,39 @@
+/* $XConsortium: keysym.h,v 1.13 91/03/13 20:09:49 rws Exp $ */
+
+/***********************************************************
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Digital or MIT not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+/* default keysyms */
+#define XK_MISCELLANY
+#define XK_LATIN1
+#define XK_LATIN2
+#define XK_LATIN3
+#define XK_LATIN4
+#define XK_GREEK
+
+#ifdef MAC_TCL
+#include <keysymdef.h>
+#else
+#include <X11/keysymdef.h>
+#endif
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h b/Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h
new file mode 100644
index 00000000000..b22d41b3385
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/keysymdef.h
@@ -0,0 +1,1169 @@
+/* $XConsortium: keysymdef.h,v 1.15 93/04/02 10:57:36 rws Exp $ */
+
+/***********************************************************
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Digital or MIT not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+#define XK_VoidSymbol 0xFFFFFF /* void symbol */
+
+#ifdef XK_MISCELLANY
+/*
+ * TTY Functions, cleverly chosen to map to ascii, for convenience of
+ * programming, but could have been arbitrary (at the cost of lookup
+ * tables in client code.
+ */
+
+#define XK_BackSpace 0xFF08 /* back space, back char */
+#define XK_Tab 0xFF09
+#define XK_Linefeed 0xFF0A /* Linefeed, LF */
+#define XK_Clear 0xFF0B
+#define XK_Return 0xFF0D /* Return, enter */
+#define XK_Pause 0xFF13 /* Pause, hold */
+#define XK_Scroll_Lock 0xFF14
+#define XK_Sys_Req 0xFF15
+#define XK_Escape 0xFF1B
+#define XK_Delete 0xFFFF /* Delete, rubout */
+
+
+
+/* International & multi-key character composition */
+
+#define XK_Multi_key 0xFF20 /* Multi-key character compose */
+
+/* Japanese keyboard support */
+
+#define XK_Kanji 0xFF21 /* Kanji, Kanji convert */
+#define XK_Muhenkan 0xFF22 /* Cancel Conversion */
+#define XK_Henkan_Mode 0xFF23 /* Start/Stop Conversion */
+#define XK_Henkan 0xFF23 /* Alias for Henkan_Mode */
+#define XK_Romaji 0xFF24 /* to Romaji */
+#define XK_Hiragana 0xFF25 /* to Hiragana */
+#define XK_Katakana 0xFF26 /* to Katakana */
+#define XK_Hiragana_Katakana 0xFF27 /* Hiragana/Katakana toggle */
+#define XK_Zenkaku 0xFF28 /* to Zenkaku */
+#define XK_Hankaku 0xFF29 /* to Hankaku */
+#define XK_Zenkaku_Hankaku 0xFF2A /* Zenkaku/Hankaku toggle */
+#define XK_Touroku 0xFF2B /* Add to Dictionary */
+#define XK_Massyo 0xFF2C /* Delete from Dictionary */
+#define XK_Kana_Lock 0xFF2D /* Kana Lock */
+#define XK_Kana_Shift 0xFF2E /* Kana Shift */
+#define XK_Eisu_Shift 0xFF2F /* Alphanumeric Shift */
+#define XK_Eisu_toggle 0xFF30 /* Alphanumeric toggle */
+
+/* Cursor control & motion */
+
+#define XK_Home 0xFF50
+#define XK_Left 0xFF51 /* Move left, left arrow */
+#define XK_Up 0xFF52 /* Move up, up arrow */
+#define XK_Right 0xFF53 /* Move right, right arrow */
+#define XK_Down 0xFF54 /* Move down, down arrow */
+#define XK_Prior 0xFF55 /* Prior, previous */
+#define XK_Page_Up 0xFF55
+#define XK_Next 0xFF56 /* Next */
+#define XK_Page_Down 0xFF56
+#define XK_End 0xFF57 /* EOL */
+#define XK_Begin 0xFF58 /* BOL */
+
+/* Special Windows keyboard keys */
+
+#define XK_Win_L 0xFF5B /* Left-hand Windows */
+#define XK_Win_R 0xFF5C /* Right-hand Windows */
+#define XK_App 0xFF5D /* Menu key */
+
+/* Misc Functions */
+
+#define XK_Select 0xFF60 /* Select, mark */
+#define XK_Print 0xFF61
+#define XK_Execute 0xFF62 /* Execute, run, do */
+#define XK_Insert 0xFF63 /* Insert, insert here */
+#define XK_Undo 0xFF65 /* Undo, oops */
+#define XK_Redo 0xFF66 /* redo, again */
+#define XK_Menu 0xFF67
+#define XK_Find 0xFF68 /* Find, search */
+#define XK_Cancel 0xFF69 /* Cancel, stop, abort, exit */
+#define XK_Help 0xFF6A /* Help, ? */
+#define XK_Break 0xFF6B
+#define XK_Mode_switch 0xFF7E /* Character set switch */
+#define XK_script_switch 0xFF7E /* Alias for mode_switch */
+#define XK_Num_Lock 0xFF7F
+
+/* Keypad Functions, keypad numbers cleverly chosen to map to ascii */
+
+#define XK_KP_Space 0xFF80 /* space */
+#define XK_KP_Tab 0xFF89
+#define XK_KP_Enter 0xFF8D /* enter */
+#define XK_KP_F1 0xFF91 /* PF1, KP_A, ... */
+#define XK_KP_F2 0xFF92
+#define XK_KP_F3 0xFF93
+#define XK_KP_F4 0xFF94
+#define XK_KP_Home 0xFF95
+#define XK_KP_Left 0xFF96
+#define XK_KP_Up 0xFF97
+#define XK_KP_Right 0xFF98
+#define XK_KP_Down 0xFF99
+#define XK_KP_Prior 0xFF9A
+#define XK_KP_Page_Up 0xFF9A
+#define XK_KP_Next 0xFF9B
+#define XK_KP_Page_Down 0xFF9B
+#define XK_KP_End 0xFF9C
+#define XK_KP_Begin 0xFF9D
+#define XK_KP_Insert 0xFF9E
+#define XK_KP_Delete 0xFF9F
+#define XK_KP_Equal 0xFFBD /* equals */
+#define XK_KP_Multiply 0xFFAA
+#define XK_KP_Add 0xFFAB
+#define XK_KP_Separator 0xFFAC /* separator, often comma */
+#define XK_KP_Subtract 0xFFAD
+#define XK_KP_Decimal 0xFFAE
+#define XK_KP_Divide 0xFFAF
+
+#define XK_KP_0 0xFFB0
+#define XK_KP_1 0xFFB1
+#define XK_KP_2 0xFFB2
+#define XK_KP_3 0xFFB3
+#define XK_KP_4 0xFFB4
+#define XK_KP_5 0xFFB5
+#define XK_KP_6 0xFFB6
+#define XK_KP_7 0xFFB7
+#define XK_KP_8 0xFFB8
+#define XK_KP_9 0xFFB9
+
+
+
+/*
+ * Auxilliary Functions; note the duplicate definitions for left and right
+ * function keys; Sun keyboards and a few other manufactures have such
+ * function key groups on the left and/or right sides of the keyboard.
+ * We've not found a keyboard with more than 35 function keys total.
+ */
+
+#define XK_F1 0xFFBE
+#define XK_F2 0xFFBF
+#define XK_F3 0xFFC0
+#define XK_F4 0xFFC1
+#define XK_F5 0xFFC2
+#define XK_F6 0xFFC3
+#define XK_F7 0xFFC4
+#define XK_F8 0xFFC5
+#define XK_F9 0xFFC6
+#define XK_F10 0xFFC7
+#define XK_F11 0xFFC8
+#define XK_L1 0xFFC8
+#define XK_F12 0xFFC9
+#define XK_L2 0xFFC9
+#define XK_F13 0xFFCA
+#define XK_L3 0xFFCA
+#define XK_F14 0xFFCB
+#define XK_L4 0xFFCB
+#define XK_F15 0xFFCC
+#define XK_L5 0xFFCC
+#define XK_F16 0xFFCD
+#define XK_L6 0xFFCD
+#define XK_F17 0xFFCE
+#define XK_L7 0xFFCE
+#define XK_F18 0xFFCF
+#define XK_L8 0xFFCF
+#define XK_F19 0xFFD0
+#define XK_L9 0xFFD0
+#define XK_F20 0xFFD1
+#define XK_L10 0xFFD1
+#define XK_F21 0xFFD2
+#define XK_R1 0xFFD2
+#define XK_F22 0xFFD3
+#define XK_R2 0xFFD3
+#define XK_F23 0xFFD4
+#define XK_R3 0xFFD4
+#define XK_F24 0xFFD5
+#define XK_R4 0xFFD5
+#define XK_F25 0xFFD6
+#define XK_R5 0xFFD6
+#define XK_F26 0xFFD7
+#define XK_R6 0xFFD7
+#define XK_F27 0xFFD8
+#define XK_R7 0xFFD8
+#define XK_F28 0xFFD9
+#define XK_R8 0xFFD9
+#define XK_F29 0xFFDA
+#define XK_R9 0xFFDA
+#define XK_F30 0xFFDB
+#define XK_R10 0xFFDB
+#define XK_F31 0xFFDC
+#define XK_R11 0xFFDC
+#define XK_F32 0xFFDD
+#define XK_R12 0xFFDD
+#define XK_F33 0xFFDE
+#define XK_R13 0xFFDE
+#define XK_F34 0xFFDF
+#define XK_R14 0xFFDF
+#define XK_F35 0xFFE0
+#define XK_R15 0xFFE0
+
+/* Modifiers */
+
+#define XK_Shift_L 0xFFE1 /* Left shift */
+#define XK_Shift_R 0xFFE2 /* Right shift */
+#define XK_Control_L 0xFFE3 /* Left control */
+#define XK_Control_R 0xFFE4 /* Right control */
+#define XK_Caps_Lock 0xFFE5 /* Caps lock */
+#define XK_Shift_Lock 0xFFE6 /* Shift lock */
+
+#define XK_Meta_L 0xFFE7 /* Left meta */
+#define XK_Meta_R 0xFFE8 /* Right meta */
+#define XK_Alt_L 0xFFE9 /* Left alt */
+#define XK_Alt_R 0xFFEA /* Right alt */
+#define XK_Super_L 0xFFEB /* Left super */
+#define XK_Super_R 0xFFEC /* Right super */
+#define XK_Hyper_L 0xFFED /* Left hyper */
+#define XK_Hyper_R 0xFFEE /* Right hyper */
+#endif /* XK_MISCELLANY */
+
+/*
+ * Latin 1
+ * Byte 3 = 0
+ */
+#ifdef XK_LATIN1
+#define XK_space 0x020
+#define XK_exclam 0x021
+#define XK_quotedbl 0x022
+#define XK_numbersign 0x023
+#define XK_dollar 0x024
+#define XK_percent 0x025
+#define XK_ampersand 0x026
+#define XK_apostrophe 0x027
+#define XK_quoteright 0x027 /* deprecated */
+#define XK_parenleft 0x028
+#define XK_parenright 0x029
+#define XK_asterisk 0x02a
+#define XK_plus 0x02b
+#define XK_comma 0x02c
+#define XK_minus 0x02d
+#define XK_period 0x02e
+#define XK_slash 0x02f
+#define XK_0 0x030
+#define XK_1 0x031
+#define XK_2 0x032
+#define XK_3 0x033
+#define XK_4 0x034
+#define XK_5 0x035
+#define XK_6 0x036
+#define XK_7 0x037
+#define XK_8 0x038
+#define XK_9 0x039
+#define XK_colon 0x03a
+#define XK_semicolon 0x03b
+#define XK_less 0x03c
+#define XK_equal 0x03d
+#define XK_greater 0x03e
+#define XK_question 0x03f
+#define XK_at 0x040
+#define XK_A 0x041
+#define XK_B 0x042
+#define XK_C 0x043
+#define XK_D 0x044
+#define XK_E 0x045
+#define XK_F 0x046
+#define XK_G 0x047
+#define XK_H 0x048
+#define XK_I 0x049
+#define XK_J 0x04a
+#define XK_K 0x04b
+#define XK_L 0x04c
+#define XK_M 0x04d
+#define XK_N 0x04e
+#define XK_O 0x04f
+#define XK_P 0x050
+#define XK_Q 0x051
+#define XK_R 0x052
+#define XK_S 0x053
+#define XK_T 0x054
+#define XK_U 0x055
+#define XK_V 0x056
+#define XK_W 0x057
+#define XK_X 0x058
+#define XK_Y 0x059
+#define XK_Z 0x05a
+#define XK_bracketleft 0x05b
+#define XK_backslash 0x05c
+#define XK_bracketright 0x05d
+#define XK_asciicircum 0x05e
+#define XK_underscore 0x05f
+#define XK_grave 0x060
+#define XK_quoteleft 0x060 /* deprecated */
+#define XK_a 0x061
+#define XK_b 0x062
+#define XK_c 0x063
+#define XK_d 0x064
+#define XK_e 0x065
+#define XK_f 0x066
+#define XK_g 0x067
+#define XK_h 0x068
+#define XK_i 0x069
+#define XK_j 0x06a
+#define XK_k 0x06b
+#define XK_l 0x06c
+#define XK_m 0x06d
+#define XK_n 0x06e
+#define XK_o 0x06f
+#define XK_p 0x070
+#define XK_q 0x071
+#define XK_r 0x072
+#define XK_s 0x073
+#define XK_t 0x074
+#define XK_u 0x075
+#define XK_v 0x076
+#define XK_w 0x077
+#define XK_x 0x078
+#define XK_y 0x079
+#define XK_z 0x07a
+#define XK_braceleft 0x07b
+#define XK_bar 0x07c
+#define XK_braceright 0x07d
+#define XK_asciitilde 0x07e
+
+#define XK_nobreakspace 0x0a0
+#define XK_exclamdown 0x0a1
+#define XK_cent 0x0a2
+#define XK_sterling 0x0a3
+#define XK_currency 0x0a4
+#define XK_yen 0x0a5
+#define XK_brokenbar 0x0a6
+#define XK_section 0x0a7
+#define XK_diaeresis 0x0a8
+#define XK_copyright 0x0a9
+#define XK_ordfeminine 0x0aa
+#define XK_guillemotleft 0x0ab /* left angle quotation mark */
+#define XK_notsign 0x0ac
+#define XK_hyphen 0x0ad
+#define XK_registered 0x0ae
+#define XK_macron 0x0af
+#define XK_degree 0x0b0
+#define XK_plusminus 0x0b1
+#define XK_twosuperior 0x0b2
+#define XK_threesuperior 0x0b3
+#define XK_acute 0x0b4
+#define XK_mu 0x0b5
+#define XK_paragraph 0x0b6
+#define XK_periodcentered 0x0b7
+#define XK_cedilla 0x0b8
+#define XK_onesuperior 0x0b9
+#define XK_masculine 0x0ba
+#define XK_guillemotright 0x0bb /* right angle quotation mark */
+#define XK_onequarter 0x0bc
+#define XK_onehalf 0x0bd
+#define XK_threequarters 0x0be
+#define XK_questiondown 0x0bf
+#define XK_Agrave 0x0c0
+#define XK_Aacute 0x0c1
+#define XK_Acircumflex 0x0c2
+#define XK_Atilde 0x0c3
+#define XK_Adiaeresis 0x0c4
+#define XK_Aring 0x0c5
+#define XK_AE 0x0c6
+#define XK_Ccedilla 0x0c7
+#define XK_Egrave 0x0c8
+#define XK_Eacute 0x0c9
+#define XK_Ecircumflex 0x0ca
+#define XK_Ediaeresis 0x0cb
+#define XK_Igrave 0x0cc
+#define XK_Iacute 0x0cd
+#define XK_Icircumflex 0x0ce
+#define XK_Idiaeresis 0x0cf
+#define XK_ETH 0x0d0
+#define XK_Eth 0x0d0 /* deprecated */
+#define XK_Ntilde 0x0d1
+#define XK_Ograve 0x0d2
+#define XK_Oacute 0x0d3
+#define XK_Ocircumflex 0x0d4
+#define XK_Otilde 0x0d5
+#define XK_Odiaeresis 0x0d6
+#define XK_multiply 0x0d7
+#define XK_Ooblique 0x0d8
+#define XK_Ugrave 0x0d9
+#define XK_Uacute 0x0da
+#define XK_Ucircumflex 0x0db
+#define XK_Udiaeresis 0x0dc
+#define XK_Yacute 0x0dd
+#define XK_THORN 0x0de
+#define XK_Thorn 0x0de /* deprecated */
+#define XK_ssharp 0x0df
+#define XK_agrave 0x0e0
+#define XK_aacute 0x0e1
+#define XK_acircumflex 0x0e2
+#define XK_atilde 0x0e3
+#define XK_adiaeresis 0x0e4
+#define XK_aring 0x0e5
+#define XK_ae 0x0e6
+#define XK_ccedilla 0x0e7
+#define XK_egrave 0x0e8
+#define XK_eacute 0x0e9
+#define XK_ecircumflex 0x0ea
+#define XK_ediaeresis 0x0eb
+#define XK_igrave 0x0ec
+#define XK_iacute 0x0ed
+#define XK_icircumflex 0x0ee
+#define XK_idiaeresis 0x0ef
+#define XK_eth 0x0f0
+#define XK_ntilde 0x0f1
+#define XK_ograve 0x0f2
+#define XK_oacute 0x0f3
+#define XK_ocircumflex 0x0f4
+#define XK_otilde 0x0f5
+#define XK_odiaeresis 0x0f6
+#define XK_division 0x0f7
+#define XK_oslash 0x0f8
+#define XK_ugrave 0x0f9
+#define XK_uacute 0x0fa
+#define XK_ucircumflex 0x0fb
+#define XK_udiaeresis 0x0fc
+#define XK_yacute 0x0fd
+#define XK_thorn 0x0fe
+#define XK_ydiaeresis 0x0ff
+#endif /* XK_LATIN1 */
+
+/*
+ * Latin 2
+ * Byte 3 = 1
+ */
+
+#ifdef XK_LATIN2
+#define XK_Aogonek 0x1a1
+#define XK_breve 0x1a2
+#define XK_Lstroke 0x1a3
+#define XK_Lcaron 0x1a5
+#define XK_Sacute 0x1a6
+#define XK_Scaron 0x1a9
+#define XK_Scedilla 0x1aa
+#define XK_Tcaron 0x1ab
+#define XK_Zacute 0x1ac
+#define XK_Zcaron 0x1ae
+#define XK_Zabovedot 0x1af
+#define XK_aogonek 0x1b1
+#define XK_ogonek 0x1b2
+#define XK_lstroke 0x1b3
+#define XK_lcaron 0x1b5
+#define XK_sacute 0x1b6
+#define XK_caron 0x1b7
+#define XK_scaron 0x1b9
+#define XK_scedilla 0x1ba
+#define XK_tcaron 0x1bb
+#define XK_zacute 0x1bc
+#define XK_doubleacute 0x1bd
+#define XK_zcaron 0x1be
+#define XK_zabovedot 0x1bf
+#define XK_Racute 0x1c0
+#define XK_Abreve 0x1c3
+#define XK_Lacute 0x1c5
+#define XK_Cacute 0x1c6
+#define XK_Ccaron 0x1c8
+#define XK_Eogonek 0x1ca
+#define XK_Ecaron 0x1cc
+#define XK_Dcaron 0x1cf
+#define XK_Dstroke 0x1d0
+#define XK_Nacute 0x1d1
+#define XK_Ncaron 0x1d2
+#define XK_Odoubleacute 0x1d5
+#define XK_Rcaron 0x1d8
+#define XK_Uring 0x1d9
+#define XK_Udoubleacute 0x1db
+#define XK_Tcedilla 0x1de
+#define XK_racute 0x1e0
+#define XK_abreve 0x1e3
+#define XK_lacute 0x1e5
+#define XK_cacute 0x1e6
+#define XK_ccaron 0x1e8
+#define XK_eogonek 0x1ea
+#define XK_ecaron 0x1ec
+#define XK_dcaron 0x1ef
+#define XK_dstroke 0x1f0
+#define XK_nacute 0x1f1
+#define XK_ncaron 0x1f2
+#define XK_odoubleacute 0x1f5
+#define XK_udoubleacute 0x1fb
+#define XK_rcaron 0x1f8
+#define XK_uring 0x1f9
+#define XK_tcedilla 0x1fe
+#define XK_abovedot 0x1ff
+#endif /* XK_LATIN2 */
+
+/*
+ * Latin 3
+ * Byte 3 = 2
+ */
+
+#ifdef XK_LATIN3
+#define XK_Hstroke 0x2a1
+#define XK_Hcircumflex 0x2a6
+#define XK_Iabovedot 0x2a9
+#define XK_Gbreve 0x2ab
+#define XK_Jcircumflex 0x2ac
+#define XK_hstroke 0x2b1
+#define XK_hcircumflex 0x2b6
+#define XK_idotless 0x2b9
+#define XK_gbreve 0x2bb
+#define XK_jcircumflex 0x2bc
+#define XK_Cabovedot 0x2c5
+#define XK_Ccircumflex 0x2c6
+#define XK_Gabovedot 0x2d5
+#define XK_Gcircumflex 0x2d8
+#define XK_Ubreve 0x2dd
+#define XK_Scircumflex 0x2de
+#define XK_cabovedot 0x2e5
+#define XK_ccircumflex 0x2e6
+#define XK_gabovedot 0x2f5
+#define XK_gcircumflex 0x2f8
+#define XK_ubreve 0x2fd
+#define XK_scircumflex 0x2fe
+#endif /* XK_LATIN3 */
+
+
+/*
+ * Latin 4
+ * Byte 3 = 3
+ */
+
+#ifdef XK_LATIN4
+#define XK_kra 0x3a2
+#define XK_kappa 0x3a2 /* deprecated */
+#define XK_Rcedilla 0x3a3
+#define XK_Itilde 0x3a5
+#define XK_Lcedilla 0x3a6
+#define XK_Emacron 0x3aa
+#define XK_Gcedilla 0x3ab
+#define XK_Tslash 0x3ac
+#define XK_rcedilla 0x3b3
+#define XK_itilde 0x3b5
+#define XK_lcedilla 0x3b6
+#define XK_emacron 0x3ba
+#define XK_gcedilla 0x3bb
+#define XK_tslash 0x3bc
+#define XK_ENG 0x3bd
+#define XK_eng 0x3bf
+#define XK_Amacron 0x3c0
+#define XK_Iogonek 0x3c7
+#define XK_Eabovedot 0x3cc
+#define XK_Imacron 0x3cf
+#define XK_Ncedilla 0x3d1
+#define XK_Omacron 0x3d2
+#define XK_Kcedilla 0x3d3
+#define XK_Uogonek 0x3d9
+#define XK_Utilde 0x3dd
+#define XK_Umacron 0x3de
+#define XK_amacron 0x3e0
+#define XK_iogonek 0x3e7
+#define XK_eabovedot 0x3ec
+#define XK_imacron 0x3ef
+#define XK_ncedilla 0x3f1
+#define XK_omacron 0x3f2
+#define XK_kcedilla 0x3f3
+#define XK_uogonek 0x3f9
+#define XK_utilde 0x3fd
+#define XK_umacron 0x3fe
+#endif /* XK_LATIN4 */
+
+/*
+ * Katakana
+ * Byte 3 = 4
+ */
+
+#ifdef XK_KATAKANA
+#define XK_overline 0x47e
+#define XK_kana_fullstop 0x4a1
+#define XK_kana_openingbracket 0x4a2
+#define XK_kana_closingbracket 0x4a3
+#define XK_kana_comma 0x4a4
+#define XK_kana_conjunctive 0x4a5
+#define XK_kana_middledot 0x4a5 /* deprecated */
+#define XK_kana_WO 0x4a6
+#define XK_kana_a 0x4a7
+#define XK_kana_i 0x4a8
+#define XK_kana_u 0x4a9
+#define XK_kana_e 0x4aa
+#define XK_kana_o 0x4ab
+#define XK_kana_ya 0x4ac
+#define XK_kana_yu 0x4ad
+#define XK_kana_yo 0x4ae
+#define XK_kana_tsu 0x4af
+#define XK_kana_tu 0x4af /* deprecated */
+#define XK_prolongedsound 0x4b0
+#define XK_kana_A 0x4b1
+#define XK_kana_I 0x4b2
+#define XK_kana_U 0x4b3
+#define XK_kana_E 0x4b4
+#define XK_kana_O 0x4b5
+#define XK_kana_KA 0x4b6
+#define XK_kana_KI 0x4b7
+#define XK_kana_KU 0x4b8
+#define XK_kana_KE 0x4b9
+#define XK_kana_KO 0x4ba
+#define XK_kana_SA 0x4bb
+#define XK_kana_SHI 0x4bc
+#define XK_kana_SU 0x4bd
+#define XK_kana_SE 0x4be
+#define XK_kana_SO 0x4bf
+#define XK_kana_TA 0x4c0
+#define XK_kana_CHI 0x4c1
+#define XK_kana_TI 0x4c1 /* deprecated */
+#define XK_kana_TSU 0x4c2
+#define XK_kana_TU 0x4c2 /* deprecated */
+#define XK_kana_TE 0x4c3
+#define XK_kana_TO 0x4c4
+#define XK_kana_NA 0x4c5
+#define XK_kana_NI 0x4c6
+#define XK_kana_NU 0x4c7
+#define XK_kana_NE 0x4c8
+#define XK_kana_NO 0x4c9
+#define XK_kana_HA 0x4ca
+#define XK_kana_HI 0x4cb
+#define XK_kana_FU 0x4cc
+#define XK_kana_HU 0x4cc /* deprecated */
+#define XK_kana_HE 0x4cd
+#define XK_kana_HO 0x4ce
+#define XK_kana_MA 0x4cf
+#define XK_kana_MI 0x4d0
+#define XK_kana_MU 0x4d1
+#define XK_kana_ME 0x4d2
+#define XK_kana_MO 0x4d3
+#define XK_kana_YA 0x4d4
+#define XK_kana_YU 0x4d5
+#define XK_kana_YO 0x4d6
+#define XK_kana_RA 0x4d7
+#define XK_kana_RI 0x4d8
+#define XK_kana_RU 0x4d9
+#define XK_kana_RE 0x4da
+#define XK_kana_RO 0x4db
+#define XK_kana_WA 0x4dc
+#define XK_kana_N 0x4dd
+#define XK_voicedsound 0x4de
+#define XK_semivoicedsound 0x4df
+#define XK_kana_switch 0xFF7E /* Alias for mode_switch */
+#endif /* XK_KATAKANA */
+
+/*
+ * Arabic
+ * Byte 3 = 5
+ */
+
+#ifdef XK_ARABIC
+#define XK_Arabic_comma 0x5ac
+#define XK_Arabic_semicolon 0x5bb
+#define XK_Arabic_question_mark 0x5bf
+#define XK_Arabic_hamza 0x5c1
+#define XK_Arabic_maddaonalef 0x5c2
+#define XK_Arabic_hamzaonalef 0x5c3
+#define XK_Arabic_hamzaonwaw 0x5c4
+#define XK_Arabic_hamzaunderalef 0x5c5
+#define XK_Arabic_hamzaonyeh 0x5c6
+#define XK_Arabic_alef 0x5c7
+#define XK_Arabic_beh 0x5c8
+#define XK_Arabic_tehmarbuta 0x5c9
+#define XK_Arabic_teh 0x5ca
+#define XK_Arabic_theh 0x5cb
+#define XK_Arabic_jeem 0x5cc
+#define XK_Arabic_hah 0x5cd
+#define XK_Arabic_khah 0x5ce
+#define XK_Arabic_dal 0x5cf
+#define XK_Arabic_thal 0x5d0
+#define XK_Arabic_ra 0x5d1
+#define XK_Arabic_zain 0x5d2
+#define XK_Arabic_seen 0x5d3
+#define XK_Arabic_sheen 0x5d4
+#define XK_Arabic_sad 0x5d5
+#define XK_Arabic_dad 0x5d6
+#define XK_Arabic_tah 0x5d7
+#define XK_Arabic_zah 0x5d8
+#define XK_Arabic_ain 0x5d9
+#define XK_Arabic_ghain 0x5da
+#define XK_Arabic_tatweel 0x5e0
+#define XK_Arabic_feh 0x5e1
+#define XK_Arabic_qaf 0x5e2
+#define XK_Arabic_kaf 0x5e3
+#define XK_Arabic_lam 0x5e4
+#define XK_Arabic_meem 0x5e5
+#define XK_Arabic_noon 0x5e6
+#define XK_Arabic_ha 0x5e7
+#define XK_Arabic_heh 0x5e7 /* deprecated */
+#define XK_Arabic_waw 0x5e8
+#define XK_Arabic_alefmaksura 0x5e9
+#define XK_Arabic_yeh 0x5ea
+#define XK_Arabic_fathatan 0x5eb
+#define XK_Arabic_dammatan 0x5ec
+#define XK_Arabic_kasratan 0x5ed
+#define XK_Arabic_fatha 0x5ee
+#define XK_Arabic_damma 0x5ef
+#define XK_Arabic_kasra 0x5f0
+#define XK_Arabic_shadda 0x5f1
+#define XK_Arabic_sukun 0x5f2
+#define XK_Arabic_switch 0xFF7E /* Alias for mode_switch */
+#endif /* XK_ARABIC */
+
+/*
+ * Cyrillic
+ * Byte 3 = 6
+ */
+#ifdef XK_CYRILLIC
+#define XK_Serbian_dje 0x6a1
+#define XK_Macedonia_gje 0x6a2
+#define XK_Cyrillic_io 0x6a3
+#define XK_Ukrainian_ie 0x6a4
+#define XK_Ukranian_je 0x6a4 /* deprecated */
+#define XK_Macedonia_dse 0x6a5
+#define XK_Ukrainian_i 0x6a6
+#define XK_Ukranian_i 0x6a6 /* deprecated */
+#define XK_Ukrainian_yi 0x6a7
+#define XK_Ukranian_yi 0x6a7 /* deprecated */
+#define XK_Cyrillic_je 0x6a8
+#define XK_Serbian_je 0x6a8 /* deprecated */
+#define XK_Cyrillic_lje 0x6a9
+#define XK_Serbian_lje 0x6a9 /* deprecated */
+#define XK_Cyrillic_nje 0x6aa
+#define XK_Serbian_nje 0x6aa /* deprecated */
+#define XK_Serbian_tshe 0x6ab
+#define XK_Macedonia_kje 0x6ac
+#define XK_Byelorussian_shortu 0x6ae
+#define XK_Cyrillic_dzhe 0x6af
+#define XK_Serbian_dze 0x6af /* deprecated */
+#define XK_numerosign 0x6b0
+#define XK_Serbian_DJE 0x6b1
+#define XK_Macedonia_GJE 0x6b2
+#define XK_Cyrillic_IO 0x6b3
+#define XK_Ukrainian_IE 0x6b4
+#define XK_Ukranian_JE 0x6b4 /* deprecated */
+#define XK_Macedonia_DSE 0x6b5
+#define XK_Ukrainian_I 0x6b6
+#define XK_Ukranian_I 0x6b6 /* deprecated */
+#define XK_Ukrainian_YI 0x6b7
+#define XK_Ukranian_YI 0x6b7 /* deprecated */
+#define XK_Cyrillic_JE 0x6b8
+#define XK_Serbian_JE 0x6b8 /* deprecated */
+#define XK_Cyrillic_LJE 0x6b9
+#define XK_Serbian_LJE 0x6b9 /* deprecated */
+#define XK_Cyrillic_NJE 0x6ba
+#define XK_Serbian_NJE 0x6ba /* deprecated */
+#define XK_Serbian_TSHE 0x6bb
+#define XK_Macedonia_KJE 0x6bc
+#define XK_Byelorussian_SHORTU 0x6be
+#define XK_Cyrillic_DZHE 0x6bf
+#define XK_Serbian_DZE 0x6bf /* deprecated */
+#define XK_Cyrillic_yu 0x6c0
+#define XK_Cyrillic_a 0x6c1
+#define XK_Cyrillic_be 0x6c2
+#define XK_Cyrillic_tse 0x6c3
+#define XK_Cyrillic_de 0x6c4
+#define XK_Cyrillic_ie 0x6c5
+#define XK_Cyrillic_ef 0x6c6
+#define XK_Cyrillic_ghe 0x6c7
+#define XK_Cyrillic_ha 0x6c8
+#define XK_Cyrillic_i 0x6c9
+#define XK_Cyrillic_shorti 0x6ca
+#define XK_Cyrillic_ka 0x6cb
+#define XK_Cyrillic_el 0x6cc
+#define XK_Cyrillic_em 0x6cd
+#define XK_Cyrillic_en 0x6ce
+#define XK_Cyrillic_o 0x6cf
+#define XK_Cyrillic_pe 0x6d0
+#define XK_Cyrillic_ya 0x6d1
+#define XK_Cyrillic_er 0x6d2
+#define XK_Cyrillic_es 0x6d3
+#define XK_Cyrillic_te 0x6d4
+#define XK_Cyrillic_u 0x6d5
+#define XK_Cyrillic_zhe 0x6d6
+#define XK_Cyrillic_ve 0x6d7
+#define XK_Cyrillic_softsign 0x6d8
+#define XK_Cyrillic_yeru 0x6d9
+#define XK_Cyrillic_ze 0x6da
+#define XK_Cyrillic_sha 0x6db
+#define XK_Cyrillic_e 0x6dc
+#define XK_Cyrillic_shcha 0x6dd
+#define XK_Cyrillic_che 0x6de
+#define XK_Cyrillic_hardsign 0x6df
+#define XK_Cyrillic_YU 0x6e0
+#define XK_Cyrillic_A 0x6e1
+#define XK_Cyrillic_BE 0x6e2
+#define XK_Cyrillic_TSE 0x6e3
+#define XK_Cyrillic_DE 0x6e4
+#define XK_Cyrillic_IE 0x6e5
+#define XK_Cyrillic_EF 0x6e6
+#define XK_Cyrillic_GHE 0x6e7
+#define XK_Cyrillic_HA 0x6e8
+#define XK_Cyrillic_I 0x6e9
+#define XK_Cyrillic_SHORTI 0x6ea
+#define XK_Cyrillic_KA 0x6eb
+#define XK_Cyrillic_EL 0x6ec
+#define XK_Cyrillic_EM 0x6ed
+#define XK_Cyrillic_EN 0x6ee
+#define XK_Cyrillic_O 0x6ef
+#define XK_Cyrillic_PE 0x6f0
+#define XK_Cyrillic_YA 0x6f1
+#define XK_Cyrillic_ER 0x6f2
+#define XK_Cyrillic_ES 0x6f3
+#define XK_Cyrillic_TE 0x6f4
+#define XK_Cyrillic_U 0x6f5
+#define XK_Cyrillic_ZHE 0x6f6
+#define XK_Cyrillic_VE 0x6f7
+#define XK_Cyrillic_SOFTSIGN 0x6f8
+#define XK_Cyrillic_YERU 0x6f9
+#define XK_Cyrillic_ZE 0x6fa
+#define XK_Cyrillic_SHA 0x6fb
+#define XK_Cyrillic_E 0x6fc
+#define XK_Cyrillic_SHCHA 0x6fd
+#define XK_Cyrillic_CHE 0x6fe
+#define XK_Cyrillic_HARDSIGN 0x6ff
+#endif /* XK_CYRILLIC */
+
+/*
+ * Greek
+ * Byte 3 = 7
+ */
+
+#ifdef XK_GREEK
+#define XK_Greek_ALPHAaccent 0x7a1
+#define XK_Greek_EPSILONaccent 0x7a2
+#define XK_Greek_ETAaccent 0x7a3
+#define XK_Greek_IOTAaccent 0x7a4
+#define XK_Greek_IOTAdiaeresis 0x7a5
+#define XK_Greek_OMICRONaccent 0x7a7
+#define XK_Greek_UPSILONaccent 0x7a8
+#define XK_Greek_UPSILONdieresis 0x7a9
+#define XK_Greek_OMEGAaccent 0x7ab
+#define XK_Greek_accentdieresis 0x7ae
+#define XK_Greek_horizbar 0x7af
+#define XK_Greek_alphaaccent 0x7b1
+#define XK_Greek_epsilonaccent 0x7b2
+#define XK_Greek_etaaccent 0x7b3
+#define XK_Greek_iotaaccent 0x7b4
+#define XK_Greek_iotadieresis 0x7b5
+#define XK_Greek_iotaaccentdieresis 0x7b6
+#define XK_Greek_omicronaccent 0x7b7
+#define XK_Greek_upsilonaccent 0x7b8
+#define XK_Greek_upsilondieresis 0x7b9
+#define XK_Greek_upsilonaccentdieresis 0x7ba
+#define XK_Greek_omegaaccent 0x7bb
+#define XK_Greek_ALPHA 0x7c1
+#define XK_Greek_BETA 0x7c2
+#define XK_Greek_GAMMA 0x7c3
+#define XK_Greek_DELTA 0x7c4
+#define XK_Greek_EPSILON 0x7c5
+#define XK_Greek_ZETA 0x7c6
+#define XK_Greek_ETA 0x7c7
+#define XK_Greek_THETA 0x7c8
+#define XK_Greek_IOTA 0x7c9
+#define XK_Greek_KAPPA 0x7ca
+#define XK_Greek_LAMDA 0x7cb
+#define XK_Greek_LAMBDA 0x7cb
+#define XK_Greek_MU 0x7cc
+#define XK_Greek_NU 0x7cd
+#define XK_Greek_XI 0x7ce
+#define XK_Greek_OMICRON 0x7cf
+#define XK_Greek_PI 0x7d0
+#define XK_Greek_RHO 0x7d1
+#define XK_Greek_SIGMA 0x7d2
+#define XK_Greek_TAU 0x7d4
+#define XK_Greek_UPSILON 0x7d5
+#define XK_Greek_PHI 0x7d6
+#define XK_Greek_CHI 0x7d7
+#define XK_Greek_PSI 0x7d8
+#define XK_Greek_OMEGA 0x7d9
+#define XK_Greek_alpha 0x7e1
+#define XK_Greek_beta 0x7e2
+#define XK_Greek_gamma 0x7e3
+#define XK_Greek_delta 0x7e4
+#define XK_Greek_epsilon 0x7e5
+#define XK_Greek_zeta 0x7e6
+#define XK_Greek_eta 0x7e7
+#define XK_Greek_theta 0x7e8
+#define XK_Greek_iota 0x7e9
+#define XK_Greek_kappa 0x7ea
+#define XK_Greek_lamda 0x7eb
+#define XK_Greek_lambda 0x7eb
+#define XK_Greek_mu 0x7ec
+#define XK_Greek_nu 0x7ed
+#define XK_Greek_xi 0x7ee
+#define XK_Greek_omicron 0x7ef
+#define XK_Greek_pi 0x7f0
+#define XK_Greek_rho 0x7f1
+#define XK_Greek_sigma 0x7f2
+#define XK_Greek_finalsmallsigma 0x7f3
+#define XK_Greek_tau 0x7f4
+#define XK_Greek_upsilon 0x7f5
+#define XK_Greek_phi 0x7f6
+#define XK_Greek_chi 0x7f7
+#define XK_Greek_psi 0x7f8
+#define XK_Greek_omega 0x7f9
+#define XK_Greek_switch 0xFF7E /* Alias for mode_switch */
+#endif /* XK_GREEK */
+
+/*
+ * Technical
+ * Byte 3 = 8
+ */
+
+#ifdef XK_TECHNICAL
+#define XK_leftradical 0x8a1
+#define XK_topleftradical 0x8a2
+#define XK_horizconnector 0x8a3
+#define XK_topintegral 0x8a4
+#define XK_botintegral 0x8a5
+#define XK_vertconnector 0x8a6
+#define XK_topleftsqbracket 0x8a7
+#define XK_botleftsqbracket 0x8a8
+#define XK_toprightsqbracket 0x8a9
+#define XK_botrightsqbracket 0x8aa
+#define XK_topleftparens 0x8ab
+#define XK_botleftparens 0x8ac
+#define XK_toprightparens 0x8ad
+#define XK_botrightparens 0x8ae
+#define XK_leftmiddlecurlybrace 0x8af
+#define XK_rightmiddlecurlybrace 0x8b0
+#define XK_topleftsummation 0x8b1
+#define XK_botleftsummation 0x8b2
+#define XK_topvertsummationconnector 0x8b3
+#define XK_botvertsummationconnector 0x8b4
+#define XK_toprightsummation 0x8b5
+#define XK_botrightsummation 0x8b6
+#define XK_rightmiddlesummation 0x8b7
+#define XK_lessthanequal 0x8bc
+#define XK_notequal 0x8bd
+#define XK_greaterthanequal 0x8be
+#define XK_integral 0x8bf
+#define XK_therefore 0x8c0
+#define XK_variation 0x8c1
+#define XK_infinity 0x8c2
+#define XK_nabla 0x8c5
+#define XK_approximate 0x8c8
+#define XK_similarequal 0x8c9
+#define XK_ifonlyif 0x8cd
+#define XK_implies 0x8ce
+#define XK_identical 0x8cf
+#define XK_radical 0x8d6
+#define XK_includedin 0x8da
+#define XK_includes 0x8db
+#define XK_intersection 0x8dc
+#define XK_union 0x8dd
+#define XK_logicaland 0x8de
+#define XK_logicalor 0x8df
+#define XK_partialderivative 0x8ef
+#define XK_function 0x8f6
+#define XK_leftarrow 0x8fb
+#define XK_uparrow 0x8fc
+#define XK_rightarrow 0x8fd
+#define XK_downarrow 0x8fe
+#endif /* XK_TECHNICAL */
+
+/*
+ * Special
+ * Byte 3 = 9
+ */
+
+#ifdef XK_SPECIAL
+#define XK_blank 0x9df
+#define XK_soliddiamond 0x9e0
+#define XK_checkerboard 0x9e1
+#define XK_ht 0x9e2
+#define XK_ff 0x9e3
+#define XK_cr 0x9e4
+#define XK_lf 0x9e5
+#define XK_nl 0x9e8
+#define XK_vt 0x9e9
+#define XK_lowrightcorner 0x9ea
+#define XK_uprightcorner 0x9eb
+#define XK_upleftcorner 0x9ec
+#define XK_lowleftcorner 0x9ed
+#define XK_crossinglines 0x9ee
+#define XK_horizlinescan1 0x9ef
+#define XK_horizlinescan3 0x9f0
+#define XK_horizlinescan5 0x9f1
+#define XK_horizlinescan7 0x9f2
+#define XK_horizlinescan9 0x9f3
+#define XK_leftt 0x9f4
+#define XK_rightt 0x9f5
+#define XK_bott 0x9f6
+#define XK_topt 0x9f7
+#define XK_vertbar 0x9f8
+#endif /* XK_SPECIAL */
+
+/*
+ * Publishing
+ * Byte 3 = a
+ */
+
+#ifdef XK_PUBLISHING
+#define XK_emspace 0xaa1
+#define XK_enspace 0xaa2
+#define XK_em3space 0xaa3
+#define XK_em4space 0xaa4
+#define XK_digitspace 0xaa5
+#define XK_punctspace 0xaa6
+#define XK_thinspace 0xaa7
+#define XK_hairspace 0xaa8
+#define XK_emdash 0xaa9
+#define XK_endash 0xaaa
+#define XK_signifblank 0xaac
+#define XK_ellipsis 0xaae
+#define XK_doubbaselinedot 0xaaf
+#define XK_onethird 0xab0
+#define XK_twothirds 0xab1
+#define XK_onefifth 0xab2
+#define XK_twofifths 0xab3
+#define XK_threefifths 0xab4
+#define XK_fourfifths 0xab5
+#define XK_onesixth 0xab6
+#define XK_fivesixths 0xab7
+#define XK_careof 0xab8
+#define XK_figdash 0xabb
+#define XK_leftanglebracket 0xabc
+#define XK_decimalpoint 0xabd
+#define XK_rightanglebracket 0xabe
+#define XK_marker 0xabf
+#define XK_oneeighth 0xac3
+#define XK_threeeighths 0xac4
+#define XK_fiveeighths 0xac5
+#define XK_seveneighths 0xac6
+#define XK_trademark 0xac9
+#define XK_signaturemark 0xaca
+#define XK_trademarkincircle 0xacb
+#define XK_leftopentriangle 0xacc
+#define XK_rightopentriangle 0xacd
+#define XK_emopencircle 0xace
+#define XK_emopenrectangle 0xacf
+#define XK_leftsinglequotemark 0xad0
+#define XK_rightsinglequotemark 0xad1
+#define XK_leftdoublequotemark 0xad2
+#define XK_rightdoublequotemark 0xad3
+#define XK_prescription 0xad4
+#define XK_minutes 0xad6
+#define XK_seconds 0xad7
+#define XK_latincross 0xad9
+#define XK_hexagram 0xada
+#define XK_filledrectbullet 0xadb
+#define XK_filledlefttribullet 0xadc
+#define XK_filledrighttribullet 0xadd
+#define XK_emfilledcircle 0xade
+#define XK_emfilledrect 0xadf
+#define XK_enopencircbullet 0xae0
+#define XK_enopensquarebullet 0xae1
+#define XK_openrectbullet 0xae2
+#define XK_opentribulletup 0xae3
+#define XK_opentribulletdown 0xae4
+#define XK_openstar 0xae5
+#define XK_enfilledcircbullet 0xae6
+#define XK_enfilledsqbullet 0xae7
+#define XK_filledtribulletup 0xae8
+#define XK_filledtribulletdown 0xae9
+#define XK_leftpointer 0xaea
+#define XK_rightpointer 0xaeb
+#define XK_club 0xaec
+#define XK_diamond 0xaed
+#define XK_heart 0xaee
+#define XK_maltesecross 0xaf0
+#define XK_dagger 0xaf1
+#define XK_doubledagger 0xaf2
+#define XK_checkmark 0xaf3
+#define XK_ballotcross 0xaf4
+#define XK_musicalsharp 0xaf5
+#define XK_musicalflat 0xaf6
+#define XK_malesymbol 0xaf7
+#define XK_femalesymbol 0xaf8
+#define XK_telephone 0xaf9
+#define XK_telephonerecorder 0xafa
+#define XK_phonographcopyright 0xafb
+#define XK_caret 0xafc
+#define XK_singlelowquotemark 0xafd
+#define XK_doublelowquotemark 0xafe
+#define XK_cursor 0xaff
+#endif /* XK_PUBLISHING */
+
+/*
+ * APL
+ * Byte 3 = b
+ */
+
+#ifdef XK_APL
+#define XK_leftcaret 0xba3
+#define XK_rightcaret 0xba6
+#define XK_downcaret 0xba8
+#define XK_upcaret 0xba9
+#define XK_overbar 0xbc0
+#define XK_downtack 0xbc2
+#define XK_upshoe 0xbc3
+#define XK_downstile 0xbc4
+#define XK_underbar 0xbc6
+#define XK_jot 0xbca
+#define XK_quad 0xbcc
+#define XK_uptack 0xbce
+#define XK_circle 0xbcf
+#define XK_upstile 0xbd3
+#define XK_downshoe 0xbd6
+#define XK_rightshoe 0xbd8
+#define XK_leftshoe 0xbda
+#define XK_lefttack 0xbdc
+#define XK_righttack 0xbfc
+#endif /* XK_APL */
+
+/*
+ * Hebrew
+ * Byte 3 = c
+ */
+
+#ifdef XK_HEBREW
+#define XK_hebrew_doublelowline 0xcdf
+#define XK_hebrew_aleph 0xce0
+#define XK_hebrew_bet 0xce1
+#define XK_hebrew_beth 0xce1 /* deprecated */
+#define XK_hebrew_gimel 0xce2
+#define XK_hebrew_gimmel 0xce2 /* deprecated */
+#define XK_hebrew_dalet 0xce3
+#define XK_hebrew_daleth 0xce3 /* deprecated */
+#define XK_hebrew_he 0xce4
+#define XK_hebrew_waw 0xce5
+#define XK_hebrew_zain 0xce6
+#define XK_hebrew_zayin 0xce6 /* deprecated */
+#define XK_hebrew_chet 0xce7
+#define XK_hebrew_het 0xce7 /* deprecated */
+#define XK_hebrew_tet 0xce8
+#define XK_hebrew_teth 0xce8 /* deprecated */
+#define XK_hebrew_yod 0xce9
+#define XK_hebrew_finalkaph 0xcea
+#define XK_hebrew_kaph 0xceb
+#define XK_hebrew_lamed 0xcec
+#define XK_hebrew_finalmem 0xced
+#define XK_hebrew_mem 0xcee
+#define XK_hebrew_finalnun 0xcef
+#define XK_hebrew_nun 0xcf0
+#define XK_hebrew_samech 0xcf1
+#define XK_hebrew_samekh 0xcf1 /* deprecated */
+#define XK_hebrew_ayin 0xcf2
+#define XK_hebrew_finalpe 0xcf3
+#define XK_hebrew_pe 0xcf4
+#define XK_hebrew_finalzade 0xcf5
+#define XK_hebrew_finalzadi 0xcf5 /* deprecated */
+#define XK_hebrew_zade 0xcf6
+#define XK_hebrew_zadi 0xcf6 /* deprecated */
+#define XK_hebrew_qoph 0xcf7
+#define XK_hebrew_kuf 0xcf7 /* deprecated */
+#define XK_hebrew_resh 0xcf8
+#define XK_hebrew_shin 0xcf9
+#define XK_hebrew_taw 0xcfa
+#define XK_hebrew_taf 0xcfa /* deprecated */
+#define XK_Hebrew_switch 0xFF7E /* Alias for mode_switch */
+#endif /* XK_HEBREW */
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11/license.terms b/Master/tlpkg/tlperl/lib/Tk/X11/license.terms
new file mode 100644
index 00000000000..03ca6fcb319
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11/license.terms
@@ -0,0 +1,39 @@
+This software is copyrighted by the Regents of the University of
+California, Sun Microsystems, Inc., and other parties. The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+GOVERNMENT USE: If you are acquiring this software on behalf of the
+U.S. government, the Government shall have only "Restricted Rights"
+in the software and related documentation as defined in the Federal
+Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
+are acquiring the software on behalf of the Department of Defense, the
+software shall be classified as "Commercial Computer Software" and the
+Government shall have only "Restricted Rights" as defined in Clause
+252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
+authors grant the U.S. Government and others acting in its behalf
+permission to use and distribute the software in accordance with the
+terms specified in this license.
diff --git a/Master/tlpkg/tlperl/lib/Tk/X11Font.pm b/Master/tlpkg/tlperl/lib/Tk/X11Font.pm
new file mode 100644
index 00000000000..870dfd4b7dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/X11Font.pm
@@ -0,0 +1,184 @@
+package Tk::X11Font;
+use vars qw($VERSION);
+$VERSION = '4.007'; # $Id: //depot/Tkutf8/Tk/X11Font.pm#7 $
+
+require Tk::Widget;
+require Tk::Xlib;
+use strict;
+
+Construct Tk::Widget 'X11Font';
+
+my @field = qw(foundry family weight slant swidth adstyle pixel
+ point xres yres space avgwidth registry encoding);
+
+map { eval "sub \u$_ { shift->elem('$_', \@_) }" } @field;
+
+use overload '""' => 'as_string';
+
+sub new
+{
+ my $pkg = shift;
+ my $w = shift;
+
+ my %me = ();
+ my $d = $w->Display;
+
+ local $_;
+
+ if(scalar(@_) == 1)
+ {
+ my $pattern = shift;
+
+ if($pattern =~ /\A(-[^-]*){14}\Z/)
+ {
+ @me{@field} = split(/-/, substr($pattern,1));
+ }
+ else
+ {
+ $me{Name} = $pattern;
+
+ if($pattern =~ /^[^-]?-([^-]*-){2,}/)
+ {
+ my $f = $d->XListFonts($pattern,1);
+
+ if($f && $f =~ /\A(-[^-]*){14}/)
+ {
+ my @f = split(/-/, substr($f,1));
+ my @n = split(/-/, $pattern);
+ my %f = ();
+ my $i = 0;
+
+ shift @n if($pattern =~ /\A-/);
+
+ while(@n && @f)
+ {
+ if($n[0] eq '*')
+ {
+ shift @n;
+ }
+ elsif($n[0] eq $f[0])
+ {
+ $f{$field[$i]} = shift @n;
+ }
+ $i++;
+ shift @f;
+ }
+
+ %me = %f
+ unless(@n);
+ }
+ }
+ }
+ }
+ else
+ {
+ %me = @_;
+ }
+
+ map { $me{$_} ||= '*' } @field;
+
+ $me{Display} = $d;
+ $me{MainWin} = $w->MainWindow;
+
+ bless \%me, $pkg;
+}
+
+sub Pattern
+{
+ my $me = shift;
+ return join('-', '',@{$me}{@field});
+}
+
+sub Name
+{
+ my $me = shift;
+ my $max = wantarray ? shift || 128 : 1;
+
+ if ($^O eq 'MSWin32' or ($^O eq 'cygwin' and $Tk::platform eq 'MSWin32'))
+ {
+ my $name = $me->{Name};
+ if (!defined $name)
+ {
+ my $fm = $me->{'family'} || 'system';
+ my $sz = -int($me->{'point'}/10) || -($me->{'pixel'}) || 12;
+ my @opt = (-family => $fm, -size => $sz );
+ my $wt = $me->{'weight'};
+ if (defined $wt)
+ {
+ $wt = 'normal' unless $wt =~ /bold/i;
+ push(@opt,-weight => lc($wt));
+ }
+ my $sl = $me->{'slant'};
+ if (defined $sl)
+ {
+ $sl = ($sl =~ /^[io]/) ? 'italic' : 'roman';
+ push(@opt,-slant => $sl);
+ }
+ $name = join(' ',@opt);
+ }
+ return $name;
+ }
+ else
+ {
+ my $name = $me->{Name} ||
+ join('-', '',@{$me}{@field});
+ return $me->{Display}->XListFonts($name,$max);
+ }
+}
+
+sub as_string
+{
+ return shift->Name;
+}
+
+sub elem
+{
+ my $me = shift;
+ my $elem = shift;
+
+ return undef
+ if(exists $me->{'Name'});
+
+ my $old = $me->{$elem};
+
+ $me->{$elem} = shift
+ if(@_);
+
+ $old;
+}
+
+sub Clone
+{
+ my $me = shift;
+
+ $me = bless { %$me }, ref($me);
+
+ unless(exists $me->{'Name'})
+ {
+ while(@_)
+ {
+ my $k = shift;
+ my $v = shift || $me->{MainWin}->BackTrace('Tk::Font->Clone( key => value, ... )');
+ $me->{$k} = $v;
+ }
+ }
+
+ $me;
+}
+
+sub ascent
+{
+ my $me = shift;
+ my $name = $me->Name;
+ $me->{MainWin}->fontMetrics($name, '-ascent');
+}
+
+sub descent
+{
+ my $me = shift;
+ my $name = $me->Name;
+ $me->{MainWin}->fontMetrics($name, '-descent');
+}
+
+1;
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/Xcamel.gif b/Master/tlpkg/tlperl/lib/Tk/Xcamel.gif
new file mode 100644
index 00000000000..cb88bc0afd8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Xcamel.gif
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/Tk/Xlib.pm b/Master/tlpkg/tlperl/lib/Tk/Xlib.pm
new file mode 100644
index 00000000000..1432361dc18
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Xlib.pm
@@ -0,0 +1,15 @@
+package Tk::Xlib;
+require DynaLoader;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Xlib/Xlib.pm#4 $
+
+use Tk qw($XS_VERSION);
+use Exporter;
+
+use base qw(DynaLoader Exporter);
+@EXPORT_OK = qw(XDrawString XLoadFont XDrawRectangle);
+
+bootstrap Tk::Xlib;
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/Xrm.pm b/Master/tlpkg/tlperl/lib/Tk/Xrm.pm
new file mode 100644
index 00000000000..271ad59a237
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/Xrm.pm
@@ -0,0 +1,11 @@
+package Tk::Xrm;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Xrm.pm#4 $
+
+use Tk ();
+1;
+__END__
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/act_folder.xbm b/Master/tlpkg/tlperl/lib/Tk/act_folder.xbm
new file mode 100644
index 00000000000..fc82949945b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/act_folder.xbm
@@ -0,0 +1,5 @@
+#define act_folder_width 16
+#define act_folder_height 10
+static unsigned char act_folder_bits[] = {
+ 0xfc, 0x00, 0xaa, 0x0f, 0x55, 0x15, 0xeb, 0xff, 0x15, 0x80, 0x0b, 0x40,
+ 0x05, 0x20, 0x03, 0x10, 0x01, 0x08, 0xff, 0x07};
diff --git a/Master/tlpkg/tlperl/lib/Tk/act_folder.xpm b/Master/tlpkg/tlperl/lib/Tk/act_folder.xpm
new file mode 100644
index 00000000000..0e7d682713a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/act_folder.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * act_folder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 4 1",
+/* colors */
+" s None c None",
+". c black",
+"X c yellow",
+"o c #5B5B57574646",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".oXoXoXoXoXo. ",
+".XoX............",
+".oX.XXXXXXXXXXX.",
+".Xo.XXXXXXXXXX. ",
+".o.XXXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+"..XXXXXXXXXX.. ",
+"............. "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/anim.gif b/Master/tlpkg/tlperl/lib/Tk/anim.gif
new file mode 100644
index 00000000000..96a50b701be
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/anim.gif
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm b/Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm
new file mode 100644
index 00000000000..ea43fc75e7a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/arrowdownwin.xbm
@@ -0,0 +1,5 @@
+#define arrowdownwin2_width 9
+#define arrowdownwin2_height 13
+static char arrowdownwin2_bits[] = {
+ 0x00,0xfe,0x00,0xfe,0x00,0xfe,0x00,0xfe,0x00,0xfe,0x7c,0xfe,0x38,0xfe,0x10,
+ 0xfe,0x00,0xfe,0x00,0xfe,0x00,0xfe,0x00,0xfe,0x00,0xfe};
diff --git a/Master/tlpkg/tlperl/lib/Tk/balArrow.xbm b/Master/tlpkg/tlperl/lib/Tk/balArrow.xbm
new file mode 100644
index 00000000000..ee0664a4727
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/balArrow.xbm
@@ -0,0 +1,4 @@
+#define balArrow_width 6
+#define balArrow_height 6
+static char balArrow_bits[] = {
+ 0x1f, 0x07, 0x07, 0x09, 0x11, 0x20};
diff --git a/Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm b/Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm
new file mode 100644
index 00000000000..ae4054488b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/cbxarrow.xbm
@@ -0,0 +1,6 @@
+#define cbxarrow_width 11
+#define cbxarrow_height 14
+static char cbxarrow_bits[] = {
+ 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00,
+ 0xfe, 0x03, 0xfc, 0x01, 0xf8, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0xfe, 0x03, 0xfe, 0x03};
diff --git a/Master/tlpkg/tlperl/lib/Tk/file.xbm b/Master/tlpkg/tlperl/lib/Tk/file.xbm
new file mode 100644
index 00000000000..7bf12bb4c9f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/file.xbm
@@ -0,0 +1,5 @@
+#define file_width 12
+#define file_height 12
+static unsigned char file_bits[] = {
+ 0xfe, 0x00, 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xfe, 0x03};
diff --git a/Master/tlpkg/tlperl/lib/Tk/file.xpm b/Master/tlpkg/tlperl/lib/Tk/file.xpm
new file mode 100644
index 00000000000..10cc24f9a1e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/file.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * file_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c white",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/folder.xbm b/Master/tlpkg/tlperl/lib/Tk/folder.xbm
new file mode 100644
index 00000000000..0398f0de777
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/folder.xbm
@@ -0,0 +1,5 @@
+#define folder_width 16
+#define folder_height 10
+static unsigned char folder_bits[] = {
+ 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08,
+ 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0xff, 0x07};
diff --git a/Master/tlpkg/tlperl/lib/Tk/folder.xpm b/Master/tlpkg/tlperl/lib/Tk/folder.xpm
new file mode 100644
index 00000000000..fda7c15a549
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/folder.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * folder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 3 1",
+/* colors */
+" s None c None",
+". c black",
+"X c #f0ff80",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+".XXXXXXXXXXX. ",
+"............. "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/icon.gif b/Master/tlpkg/tlperl/lib/Tk/icon.gif
new file mode 100644
index 00000000000..dfe6b6621f2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/icon.gif
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/Tk/install.pm b/Master/tlpkg/tlperl/lib/Tk/install.pm
new file mode 100644
index 00000000000..2392dc84fca
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/install.pm
@@ -0,0 +1,37 @@
+package Tk::install;
+require Exporter;
+
+use vars qw($VERSION @EXPORT);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/install.pm#4 $
+
+use base qw(Exporter);
+@EXPORT = qw(installbin);
+
+use Config;
+
+sub installbin
+{
+ my $prog = shift(@ARGV);
+ my $start = $Config{'startperl'};
+ my $perl = $Config{'perl'} || 'perl';
+ $start =~ s/$perl$/$prog/;
+ while (($src,$dst) = splice(@ARGV,0,2))
+ {
+ open(SRC,"<$src") || die "Cannot open $src:$!";
+ my $line = <SRC>;
+ $line =~ s/^#!\s*\S+/$start/;
+ warn $line;
+ chmod(0755,$dst) if (-f $dst);
+ open(DST,">$dst") || die "Cannot open $dst:$!";
+ print "installbin $src => $dst\n";
+ do
+ {
+ print DST $line;
+ } while (defined($line = <SRC>));
+ close(SRC);
+ close(DST);
+ chmod(0555,$dst);
+ }
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Tk/license.terms b/Master/tlpkg/tlperl/lib/Tk/license.terms
new file mode 100644
index 00000000000..6a5d3728366
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/license.terms
@@ -0,0 +1,35 @@
+This software is copyrighted by the Regents of the University of
+California, Sun Microsystems, Inc., and other parties. The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+RESTRICTED RIGHTS: Use, duplication or disclosure by the government
+is subject to the restrictions as set forth in subparagraph (c) (1) (ii)
+of the Rights in Technical Data and Computer Software Clause as DFARS
+252.227-7013 and FAR 52.227-19.
+0 in license.terms
+0 in license.terms
+0 in license.terms
diff --git a/Master/tlpkg/tlperl/lib/Tk/openfile.xbm b/Master/tlpkg/tlperl/lib/Tk/openfile.xbm
new file mode 100644
index 00000000000..859e2e57608
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/openfile.xbm
@@ -0,0 +1,5 @@
+#define openfile_width 16
+#define openfile_height 12
+static unsigned char openfile_bits[] = {
+ 0x00, 0x00, 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0xc1, 0xff, 0xa1, 0xaa,
+ 0x51, 0x55, 0xa9, 0x2a, 0x55, 0x15, 0xab, 0x0a, 0xff, 0x07, 0x00, 0x00};
diff --git a/Master/tlpkg/tlperl/lib/Tk/openfolder.xbm b/Master/tlpkg/tlperl/lib/Tk/openfolder.xbm
new file mode 100644
index 00000000000..59ee624efd0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/openfolder.xbm
@@ -0,0 +1,5 @@
+#define openfolder_width 16
+#define openfolder_height 10
+static unsigned char openfolder_bits[] = {
+ 0xfc, 0x00, 0x02, 0x07, 0x01, 0x08, 0xc1, 0xff, 0x21, 0x80, 0x11, 0x40,
+ 0x09, 0x20, 0x05, 0x10, 0x03, 0x08, 0xff, 0x07};
diff --git a/Master/tlpkg/tlperl/lib/Tk/openfolder.xpm b/Master/tlpkg/tlperl/lib/Tk/openfolder.xpm
new file mode 100644
index 00000000000..191fe1e72bc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/openfolder.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * openfolder_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"16 12 3 1",
+/* colors */
+" s None c None",
+". c black",
+"X c #f0ff80",
+/* pixels */
+" .... ",
+" .XXXX. ",
+" .XXXXXX. ",
+"............. ",
+".XXXXXXXXXXX. ",
+".XXX............",
+".XX.XXXXXXXXXXX.",
+".XX.XXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+".X.XXXXXXXXXXX. ",
+"..XXXXXXXXXX.. ",
+"............. "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/prolog.ps b/Master/tlpkg/tlperl/lib/Tk/prolog.ps
new file mode 100644
index 00000000000..409e06a65a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/prolog.ps
@@ -0,0 +1,284 @@
+%%BeginProlog
+50 dict begin
+
+% This is a standard prolog for Postscript generated by Tk's canvas
+% widget.
+% SCCS: @(#) prolog.ps 1.5 96/02/17 17:45:11
+
+% The definitions below just define all of the variables used in
+% any of the procedures here. This is needed for obscure reasons
+% explained on p. 716 of the Postscript manual (Section H.2.7,
+% "Initializing Variables," in the section on Encapsulated Postscript).
+
+/baseline 0 def
+/stipimage 0 def
+/height 0 def
+/justify 0 def
+/lineLength 0 def
+/spacing 0 def
+/stipple 0 def
+/strings 0 def
+/xoffset 0 def
+/yoffset 0 def
+/tmpstip null def
+
+% Define the array ISOLatin1Encoding (which specifies how characters are
+% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
+% level 2 is supposed to define it, but level 1 doesn't).
+
+systemdict /ISOLatin1Encoding known not {
+ /ISOLatin1Encoding [
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
+ /quoteright
+ /parenleft /parenright /asterisk /plus /comma /minus /period /slash
+ /zero /one /two /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less /equal /greater /question
+ /at /A /B /C /D /E /F /G
+ /H /I /J /K /L /M /N /O
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+ /quoteleft /a /b /c /d /e /f /g
+ /h /i /j /k /l /m /n /o
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /space
+ /space /space /space /space /space /space /space /space
+ /space /space /space /space /space /space /space /space
+ /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron
+ /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
+ /registered /macron
+ /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph
+ /periodcentered
+ /cedillar /onesuperior /ordmasculine /guillemotright /onequarter
+ /onehalf /threequarters /questiondown
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex
+ /Idieresis
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn
+ /germandbls
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex
+ /idieresis
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn
+ /ydieresis
+ ] def
+} if
+
+% font ISOEncode font
+% This procedure changes the encoding of a font from the default
+% Postscript encoding to ISOLatin1. It's typically invoked just
+% before invoking "setfont". The body of this procedure comes from
+% Section 5.6.1 of the Postscript book.
+
+/ISOEncode {
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding ISOLatin1Encoding def
+ currentdict
+ end
+
+ % I'm not sure why it's necessary to use "definefont" on this new
+ % font, but it seems to be important; just use the name "Temporary"
+ % for the font.
+
+ /Temporary exch definefont
+} bind def
+
+% StrokeClip
+%
+% This procedure converts the current path into a clip area under
+% the assumption of stroking. It's a bit tricky because some Postscript
+% interpreters get errors during strokepath for dashed lines. If
+% this happens then turn off dashes and try again.
+
+/StrokeClip {
+ {strokepath} stopped {
+ (This Postscript printer gets limitcheck overflows when) =
+ (stippling dashed lines; lines will be printed solid instead.) =
+ [] 0 setdash strokepath} if
+ clip
+} bind def
+
+% desiredSize EvenPixels closestSize
+%
+% The procedure below is used for stippling. Given the optimal size
+% of a dot in a stipple pattern in the current user coordinate system,
+% compute the closest size that is an exact multiple of the device's
+% pixel size. This allows stipple patterns to be displayed without
+% aliasing effects.
+
+/EvenPixels {
+ % Compute exact number of device pixels per stipple dot.
+ dup 0 matrix currentmatrix dtransform
+ dup mul exch dup mul add sqrt
+
+ % Round to an integer, make sure the number is at least 1, and compute
+ % user coord distance corresponding to this.
+ dup round dup 1 lt {pop 1} if
+ exch div mul
+} bind def
+
+% width height string StippleFill --
+%
+% Given a path already set up and a clipping region generated from
+% it, this procedure will fill the clipping region with a stipple
+% pattern. "String" contains a proper image description of the
+% stipple pattern and "width" and "height" give its dimensions. Each
+% stipple dot is assumed to be about one unit across in the current
+% user coordinate system. This procedure trashes the graphics state.
+
+/StippleFill {
+ % The following code is needed to work around a NeWSprint bug.
+
+ /tmpstip 1 index def
+
+ % Change the scaling so that one user unit in user coordinates
+ % corresponds to the size of one stipple dot.
+ 1 EvenPixels dup scale
+
+ % Compute the bounding box occupied by the path (which is now
+ % the clipping region), and round the lower coordinates down
+ % to the nearest starting point for the stipple pattern. Be
+ % careful about negative numbers, since the rounding works
+ % differently on them.
+
+ pathbbox
+ 4 2 roll
+ 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
+ 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
+
+ % Stack now: width height string y1 y2 x1 x2
+ % Below is a doubly-nested for loop to iterate across this area
+ % in units of the stipple pattern size, going up columns then
+ % across rows, blasting out a stipple-pattern-sized rectangle at
+ % each position
+
+ 6 index exch {
+ 2 index 5 index 3 index {
+ % Stack now: width height string y1 y2 x y
+
+ gsave
+ 1 index exch translate
+ 5 index 5 index true matrix tmpstip imagemask
+ grestore
+ } for
+ pop
+ } for
+ pop pop pop pop pop
+} bind def
+
+% -- AdjustColor --
+% Given a color value already set for output by the caller, adjusts
+% that value to a grayscale or mono value if requested by the CL
+% variable.
+
+/AdjustColor {
+ CL 2 lt {
+ currentgray
+ CL 0 eq {
+ .5 lt {0} {1} ifelse
+ } if
+ setgray
+ } if
+} bind def
+
+% x y strings spacing xoffset yoffset justify stipple DrawText --
+% This procedure does all of the real work of drawing text. The
+% color and font must already have been set by the caller, and the
+% following arguments must be on the stack:
+%
+% x, y - Coordinates at which to draw text.
+% strings - An array of strings, one for each line of the text item,
+% in order from top to bottom.
+% spacing - Spacing between lines.
+% xoffset - Horizontal offset for text bbox relative to x and y: 0 for
+% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se.
+% yoffset - Vertical offset for text bbox relative to x and y: 0 for
+% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se.
+% justify - 0 for left justification, 0.5 for center, 1 for right justify.
+% stipple - Boolean value indicating whether or not text is to be
+% drawn in stippled fashion. If text is stippled,
+% procedure StippleText must have been defined to call
+% StippleFill in the right way.
+%
+% Also, when this procedure is invoked, the color and font must already
+% have been set for the text.
+
+/DrawText {
+ /stipple exch def
+ /justify exch def
+ /yoffset exch def
+ /xoffset exch def
+ /spacing exch def
+ /strings exch def
+
+ % First scan through all of the text to find the widest line.
+
+ /lineLength 0 def
+ strings {
+ stringwidth pop
+ dup lineLength gt {/lineLength exch def} {pop} ifelse
+ newpath
+ } forall
+
+ % Compute the baseline offset and the actual font height.
+
+ 0 0 moveto (TXygqPZ) false charpath
+ pathbbox dup /baseline exch def
+ exch pop exch sub /height exch def pop
+ newpath
+
+ % Translate coordinates first so that the origin is at the upper-left
+ % corner of the text's bounding box. Remember that x and y for
+ % positioning are still on the stack.
+
+ translate
+ lineLength xoffset mul
+ strings length 1 sub spacing mul height add yoffset mul translate
+
+ % Now use the baseline and justification information to translate so
+ % that the origin is at the baseline and positioning point for the
+ % first line of text.
+
+ justify lineLength mul baseline neg translate
+
+ % Iterate over each of the lines to output it. For each line,
+ % compute its width again so it can be properly justified, then
+ % display it.
+
+ strings {
+ dup stringwidth pop
+ justify neg mul 0 moveto
+ stipple {
+
+ % The text is stippled, so turn it into a path and print
+ % by calling StippledText, which in turn calls StippleFill.
+ % Unfortunately, many Postscript interpreters will get
+ % overflow errors if we try to do the whole string at
+ % once, so do it a character at a time.
+
+ gsave
+ /char (X) def
+ {
+ char 0 3 -1 roll put
+ currentpoint
+ gsave
+ char true charpath clip StippleText
+ grestore
+ char stringwidth translate
+ moveto
+ } forall
+ grestore
+ } {show} ifelse
+ 0 spacing neg translate
+ } forall
+} bind def
+
+%%EndProlog
diff --git a/Master/tlpkg/tlperl/lib/Tk/reindex.pl b/Master/tlpkg/tlperl/lib/Tk/reindex.pl
new file mode 100644
index 00000000000..7af5cc1d13f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/reindex.pl
@@ -0,0 +1,33 @@
+#!/bin/perl
+
+use lib qw(/home1/gbartels/textlist);
+use Tk;
+
+use Tk::TextReindex qw(Tk::ROText ROTextReindex);
+
+$mw=new MainWindow;
+
+my $idx;
+
+$w=$mw->ROTextReindex()->pack(-side => "top");
+$t=$mw->Label(-textvariable => \$idx)->pack(-side => "bottom");
+
+$w->bind('<Key>',sub{$idx=$w->index("insert")});
+
+$w->insert('end',"abcd\n");
+$w->insert('end',"efgh\n");
+$w->insert('end',"mnop\n");
+$w->insert('end',"qrst\n");
+$w->insert('end',"uvwx\n");
+
+$w->insert('2.0',"ijkl\n");
+
+my $string = $w->get('4.0');
+
+
+my $result = "reading index 4.0 : expect string to equal >q<, actual value is $string \n";
+$w->insert('end',$result);
+
+print $result;
+
+MainLoop;
diff --git a/Master/tlpkg/tlperl/lib/Tk/srcfile.xpm b/Master/tlpkg/tlperl/lib/Tk/srcfile.xpm
new file mode 100644
index 00000000000..06a40a96c84
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/srcfile.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * srcfile_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c gray91",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .XXXXXXXX. ",
+" .XX...XXX. ",
+" .X.XXX.XX. ",
+" .X.XXXXXX. ",
+" .X.XXXXXX. ",
+" .XX....XX. ",
+" .XXXXXXXX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/textfile.xpm b/Master/tlpkg/tlperl/lib/Tk/textfile.xpm
new file mode 100644
index 00000000000..8fa8d2f9032
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/textfile.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * textfile_xpm[] = {
+"12 12 3 1",
+" s None c None",
+". c #000000000000",
+"X c #E0E0FFFFE0E0",
+" ........ ",
+" .XXXXXX. ",
+" .XXXXXX... ",
+" .X....XXX. ",
+" .XXXXXXXX. ",
+" .X...XXXX. ",
+" .XXXXXXXX. ",
+" .X.....XX. ",
+" .XXXXXXXX. ",
+" .X.....XX. ",
+" .XXXXXXXX. ",
+" .......... "};
diff --git a/Master/tlpkg/tlperl/lib/Tk/tkGlue.def b/Master/tlpkg/tlperl/lib/Tk/tkGlue.def
new file mode 100644
index 00000000000..2f1662c71c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tkGlue.def
@@ -0,0 +1,130 @@
+#ifdef CAN_PROTOTYPE
+#define XSdec(x) XS(x)
+#else
+#define XSdec(x) void x()
+#endif
+
+#define TKXSRETURN(off) \
+ STMT_START { \
+ IV ptkAdj = (off); \
+ XSRETURN(ptkAdj); \
+ } STMT_END
+
+#ifndef PATCHLEVEL
+#include <patchlevel.h>
+#endif
+
+#if defined(PATCHLEVEL) && (PATCHLEVEL < 5)
+#define PL_sv_undef sv_undef
+#define PL_tainting tainting
+#define PL_tainted tainted
+#define PL_stack_base stack_base
+#define PL_stack_sp stack_sp
+#define PL_curcop curcop
+#endif
+
+#ifndef CopSTASH
+#define CopSTASH(c) c->cop_stash
+#define CopSTASH_set(c,h) (CopSTASH(c) = h)
+#endif
+
+#ifndef dTHX
+#define dTHR int maybeTHR
+#endif
+
+#ifndef dTHXs
+#ifdef PERL_IMPLICIT_SYS
+#define dTHXs dTHX
+#else
+#define dTHR int maybeTHR
+#endif
+#endif
+
+#ifndef ERRSV
+#define ERRSV GvSV(errgv)
+#endif
+
+#ifndef aTHX_
+#define aTHX_
+#endif
+
+#ifndef pTHX_
+#define pTHX_
+#endif
+
+#ifdef dirty
+#undef dirty
+#endif
+#ifdef bufptr
+#undef bufptr
+#endif
+#ifdef colors
+#undef colors
+#endif
+#ifdef JOIN
+#undef JOIN
+#endif
+
+#ifdef na
+#if PATCHLEVEL >= 5
+#undef na
+#endif
+#endif
+
+
+#define Tcl_Interp HV
+#define LangCallback SV
+#define Var SV *
+#define LangResultSave AV
+struct Lang_CmdInfo;
+#define Tcl_Command struct Lang_CmdInfo *
+struct WrappedRegExp;
+#define Tcl_RegExp struct WrappedRegExp *
+#define Tcl_Obj SV
+#define Tcl_DString SV *
+
+#ifndef PerlIO
+#define PerlIO FILE
+#define PerlIO_stderr() stderr
+#define PerlIO_printf fprintf
+#define PerlIO_flush(f) Fflush(f)
+#define PerlIO_vprintf(f,fmt,a) vfprintf(f,fmt,a)
+#define PerlIO_putc(f,c) fputc(c,f)
+#define PerlIO_fileno(f) fileno(f)
+
+/* Now our interface to Configure's FILE_xxx macros */
+
+#ifdef USE_STDIO_PTR
+#define PerlIO_has_cntptr(f) 1
+#define PerlIO_get_ptr(f) FILE_ptr(f)
+#define PerlIO_get_cnt(f) FILE_cnt(f)
+
+#ifdef FILE_CNT_LVALUE
+#define PerlIO_canset_cnt(f) 1
+#ifdef FILE_PTR_LVALUE
+#define PerlIO_fast_gets(f) 1
+#endif
+#define PerlIO_set_cnt(f,c) (FILE_cnt(f) = (c))
+#else
+#define PerlIO_canset_cnt(f) 0
+#define PerlIO_set_cnt(f,c) abort()
+#endif
+
+#ifdef FILE_PTR_LVALUE
+#define PerlIO_set_ptrcnt(f,p,c) (FILE_ptr(f) = (p), PerlIO_set_cnt(f,c))
+#else
+#define PerlIO_set_ptrcnt(f,p,c) abort()
+#endif
+
+#else /* USE_STDIO_PTR */
+
+#define PerlIO_has_cntptr(f) 0
+#define PerlIO_get_cnt(f) (abort(),0)
+#define PerlIO_get_ptr(f) (abort(),0)
+#define PerlIO_set_cnt(f,c) abort()
+#define PerlIO_set_ptrcnt(f,p,c) abort()
+
+#endif /* USE_STDIO_PTR */
+
+#endif
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/tkGlue.h b/Master/tlpkg/tlperl/lib/Tk/tkGlue.h
new file mode 100644
index 00000000000..31a7f861700
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tkGlue.h
@@ -0,0 +1,79 @@
+#ifndef _TKGLUE
+#define _TKGLUE
+
+#ifndef BASEEXT
+#define BASEEXT "Tk"
+#endif
+
+#ifndef _TKOPTION
+#include "pTk/tkOption.h"
+#include "pTk/tkOption_f.h"
+#endif
+
+typedef struct EventAndKeySym
+ {XEvent event;
+ KeySym keySym;
+ Tcl_Interp *interp;
+ Tk_Window tkwin;
+ SV *window;
+ } EventAndKeySym;
+
+typedef struct Lang_CmdInfo
+ {Tcl_CmdInfo Tk;
+ Tcl_Interp *interp;
+ Tk_Window tkwin;
+ SV *image;
+ Tk_Font tkfont;
+ } Lang_CmdInfo;
+
+#include "vtab.def"
+
+
+#define VTABLE_INIT() IMPORT_VTABLES
+
+extern Lang_CmdInfo *WindowCommand _ANSI_ARGS_((SV *win,HV **hptr, int moan));
+extern Tk_Window SVtoWindow _ANSI_ARGS_((SV *win));
+extern Tk_Font SVtoFont _ANSI_ARGS_((SV *win));
+extern int Call_Tk _ANSI_ARGS_((Lang_CmdInfo *info,int argc, SV **args));
+extern HV *InterpHv _ANSI_ARGS_((Tcl_Interp *interp,int fatal));
+extern SV *WidgetRef _ANSI_ARGS_((Tcl_Interp *interp, char *path));
+extern SV *ObjectRef _ANSI_ARGS_((Tcl_Interp *interp, char *path));
+extern SV *TkToWidget _ANSI_ARGS_((Tk_Window tkwin,Tcl_Interp **pinterp));
+extern SV *FindTkVarName _ANSI_ARGS_((CONST char *varName,int flags));
+extern void EnterWidgetMethods _ANSI_ARGS_((char *package, ...));
+extern SV *MakeReference _ANSI_ARGS_((SV * sv));
+extern Tk_Window TkToMainWindow _ANSI_ARGS_((Tk_Window tkwin));
+extern void Lang_TkSubCommand _ANSI_ARGS_ ((char *name, Tcl_ObjCmdProc *proc));
+extern void Lang_TkCommand _ANSI_ARGS_ ((char *name, Tcl_ObjCmdProc *proc));
+extern SV *XEvent_Info _((EventAndKeySym *obj,char *s));
+extern EventAndKeySym *SVtoEventAndKeySym _((SV *arg));
+extern int XSTkCommand _ANSI_ARGS_((CV *cv, int mwcd, Tcl_ObjCmdProc *proc, int items, SV **args));
+
+extern XS(XStoWidget);
+
+EXTERN void ClearErrorInfo _ANSI_ARGS_((SV *interp));
+EXTERN Tk_Window mainWindow;
+EXTERN void DumpStack _ANSI_ARGS_((CONST char *who));
+EXTERN void Boot_Glue (pTHX);
+EXTERN void Boot_Tix (pTHX);
+EXTERN void install_vtab _ANSI_ARGS_((char *name, void *table, size_t size));
+extern SV *TagIt _((SV *sv, char *type));
+extern void Font_DESTROY _((SV *sv));
+struct pTkCheckChain;
+extern void Tk_CheckHash _((SV *sv,struct pTkCheckChain *chain));
+
+extern int has_highbit(CONST char *s,int l);
+extern SV * sv_maybe_utf8(SV *sv);
+extern SV * Lang_SystemEncoding(void);
+
+#ifndef WIN32
+#define HWND void *
+#endif
+EXTERN HWND SVtoHWND _ANSI_ARGS_((SV *win));
+
+#ifdef WIN32
+#include "pTk/tkWinInt.h"
+#endif
+
+#endif
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/tkGlue.m b/Master/tlpkg/tlperl/lib/Tk/tkGlue.m
new file mode 100644
index 00000000000..922d1426a55
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tkGlue.m
@@ -0,0 +1,74 @@
+#ifndef _TKGLUE_VM
+#define _TKGLUE_VM
+#include "tkGlue_f.h"
+#ifndef NO_VTABLES
+#ifndef Call_Tk
+# define Call_Tk (*TkglueVptr->V_Call_Tk)
+#endif
+
+#ifndef EnterWidgetMethods
+# define EnterWidgetMethods (*TkglueVptr->V_EnterWidgetMethods)
+#endif
+
+#ifndef FindTkVarName
+# define FindTkVarName (*TkglueVptr->V_FindTkVarName)
+#endif
+
+#ifndef InterpHv
+# define InterpHv (*TkglueVptr->V_InterpHv)
+#endif
+
+#ifndef Lang_TkCommand
+# define Lang_TkCommand (*TkglueVptr->V_Lang_TkCommand)
+#endif
+
+#ifndef Lang_TkSubCommand
+# define Lang_TkSubCommand (*TkglueVptr->V_Lang_TkSubCommand)
+#endif
+
+#ifndef MakeReference
+# define MakeReference (*TkglueVptr->V_MakeReference)
+#endif
+
+#ifndef ObjectRef
+# define ObjectRef (*TkglueVptr->V_ObjectRef)
+#endif
+
+#ifndef SVtoFont
+# define SVtoFont (*TkglueVptr->V_SVtoFont)
+#endif
+
+#ifndef SVtoHWND
+# define SVtoHWND (*TkglueVptr->V_SVtoHWND)
+#endif
+
+#ifndef SVtoWindow
+# define SVtoWindow (*TkglueVptr->V_SVtoWindow)
+#endif
+
+#ifndef TkToMainWindow
+# define TkToMainWindow (*TkglueVptr->V_TkToMainWindow)
+#endif
+
+#ifndef TkToWidget
+# define TkToWidget (*TkglueVptr->V_TkToWidget)
+#endif
+
+#ifndef WidgetRef
+# define WidgetRef (*TkglueVptr->V_WidgetRef)
+#endif
+
+#ifndef WindowCommand
+# define WindowCommand (*TkglueVptr->V_WindowCommand)
+#endif
+
+#ifndef XSTkCommand
+# define XSTkCommand (*TkglueVptr->V_XSTkCommand)
+#endif
+
+#ifndef install_vtab
+# define install_vtab (*TkglueVptr->V_install_vtab)
+#endif
+
+#endif /* NO_VTABLES */
+#endif /* _TKGLUE_VM */
diff --git a/Master/tlpkg/tlperl/lib/Tk/tkGlue.t b/Master/tlpkg/tlperl/lib/Tk/tkGlue.t
new file mode 100644
index 00000000000..ff689ff5539
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tkGlue.t
@@ -0,0 +1,70 @@
+#ifdef _TKGLUE
+#ifndef Call_Tk
+VFUNC(int,Call_Tk,V_Call_Tk,_ANSI_ARGS_((Lang_CmdInfo *info,int argc, SV **args)))
+#endif /* #ifndef Call_Tk */
+
+#ifndef EnterWidgetMethods
+VFUNC(void,EnterWidgetMethods,V_EnterWidgetMethods,_ANSI_ARGS_((char *package, ...)))
+#endif /* #ifndef EnterWidgetMethods */
+
+#ifndef FindTkVarName
+VFUNC(SV *,FindTkVarName,V_FindTkVarName,_ANSI_ARGS_((CONST char *varName,int flags)))
+#endif /* #ifndef FindTkVarName */
+
+#ifndef InterpHv
+VFUNC(HV *,InterpHv,V_InterpHv,_ANSI_ARGS_((Tcl_Interp *interp,int fatal)))
+#endif /* #ifndef InterpHv */
+
+#ifndef Lang_TkCommand
+VFUNC(void,Lang_TkCommand,V_Lang_TkCommand,_ANSI_ARGS_((char *name, Tcl_ObjCmdProc *proc)))
+#endif /* #ifndef Lang_TkCommand */
+
+#ifndef Lang_TkSubCommand
+VFUNC(void,Lang_TkSubCommand,V_Lang_TkSubCommand,_ANSI_ARGS_((char *name, Tcl_ObjCmdProc *proc)))
+#endif /* #ifndef Lang_TkSubCommand */
+
+#ifndef MakeReference
+VFUNC(SV *,MakeReference,V_MakeReference,_ANSI_ARGS_((SV * sv)))
+#endif /* #ifndef MakeReference */
+
+#ifndef ObjectRef
+VFUNC(SV *,ObjectRef,V_ObjectRef,_ANSI_ARGS_((Tcl_Interp *interp, char *path)))
+#endif /* #ifndef ObjectRef */
+
+#ifndef SVtoFont
+VFUNC(Tk_Font,SVtoFont,V_SVtoFont,_ANSI_ARGS_((SV *win)))
+#endif /* #ifndef SVtoFont */
+
+#ifndef SVtoHWND
+VFUNC(HWND,SVtoHWND,V_SVtoHWND,_ANSI_ARGS_((SV *win)))
+#endif /* #ifndef SVtoHWND */
+
+#ifndef SVtoWindow
+VFUNC(Tk_Window,SVtoWindow,V_SVtoWindow,_ANSI_ARGS_((SV *win)))
+#endif /* #ifndef SVtoWindow */
+
+#ifndef TkToMainWindow
+VFUNC(Tk_Window,TkToMainWindow,V_TkToMainWindow,_ANSI_ARGS_((Tk_Window tkwin)))
+#endif /* #ifndef TkToMainWindow */
+
+#ifndef TkToWidget
+VFUNC(SV *,TkToWidget,V_TkToWidget,_ANSI_ARGS_((Tk_Window tkwin,Tcl_Interp **pinterp)))
+#endif /* #ifndef TkToWidget */
+
+#ifndef WidgetRef
+VFUNC(SV *,WidgetRef,V_WidgetRef,_ANSI_ARGS_((Tcl_Interp *interp, char *path)))
+#endif /* #ifndef WidgetRef */
+
+#ifndef WindowCommand
+VFUNC(Lang_CmdInfo *,WindowCommand,V_WindowCommand,_ANSI_ARGS_((SV *win,HV **hptr, int moan)))
+#endif /* #ifndef WindowCommand */
+
+#ifndef XSTkCommand
+VFUNC(int,XSTkCommand,V_XSTkCommand,_ANSI_ARGS_((CV *cv, int mwcd, Tcl_ObjCmdProc *proc, int items, SV **args)))
+#endif /* #ifndef XSTkCommand */
+
+#ifndef install_vtab
+VFUNC(void,install_vtab,V_install_vtab,_ANSI_ARGS_((char *name, void *table, size_t size)))
+#endif /* #ifndef install_vtab */
+
+#endif /* _TKGLUE */
diff --git a/Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h b/Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h
new file mode 100644
index 00000000000..8255c08dc3f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tkGlue_f.h
@@ -0,0 +1,14 @@
+#ifndef TKGLUE_VT
+#define TKGLUE_VT
+typedef struct TkglueVtab
+{
+ unsigned (*tabSize)(void);
+#define VFUNC(type,name,mem,args) type (*mem) args;
+#define VVAR(type,name,mem) type (*mem);
+#include "tkGlue.t"
+#undef VFUNC
+#undef VVAR
+} TkglueVtab;
+extern TkglueVtab *TkglueVptr;
+extern TkglueVtab *TkglueVGet(void);
+#endif /* TKGLUE_VT */
diff --git a/Master/tlpkg/tlperl/lib/Tk/tranicon.gif b/Master/tlpkg/tlperl/lib/Tk/tranicon.gif
new file mode 100644
index 00000000000..dc7d494c572
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/tranicon.gif
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/Tk/typemap b/Master/tlpkg/tlperl/lib/Tk/typemap
new file mode 100644
index 00000000000..29138850ab3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/typemap
@@ -0,0 +1,96 @@
+TYPEMAP
+Tk_Window T_TK_WINDOW
+Tk_Image T_TK_IMAGE
+TkWindow * T_TKWINDOW
+Display * T_IVOBJ
+Screen * T_IVOBJ
+Visual * T_IVOBJ
+Window T_IVOBJ
+Colormap T_IVOBJ
+GC T_IVOBJ
+Font T_IVOBJ
+Atom T_IV
+HANDLE T_IV
+BOOL T_IV
+HWND T_TK_HWND
+FILE * T_NIO
+hash_ptr * T_PTR
+Tk_3DBorder T_IVOBJ
+Tk_Uid T_TK_UID
+Tcl_Interp * T_TK_INTERP
+Tk_Font T_TK_FONT
+EventAndKeySym * T_TK_XEVENT
+LangCallback * T_TK_CALLBACK
+LangFontInfo * T_PVOBJ
+const char * T_PV
+
+INPUT
+T_PVOBJ
+ if (sv_isobject($arg)) {
+ STRLEN sz;
+ $var = ($type) SvPV((SV*)SvRV($arg),sz);
+ if (sz != sizeof(*$var))
+ croak(\"$arg too small (%d) for $var $type (%d)\",sz,sizeof(*$var));
+ }
+ else
+ croak(\"$var is not an object\")
+
+T_TK_WINDOW
+ $var = SVtoWindow($arg)
+
+T_TK_CALLBACK
+ $var = LangMakeCallback($arg)
+
+
+T_TK_HWND
+ $var = SVtoHWND($arg)
+
+T_TK_XEVENT
+ $var = SVtoEventAndKeySym($arg)
+
+T_TK_FONT
+ $var = SVtoFont($arg)
+
+T_TK_IMAGE
+ $var = SVtoImage($arg)
+
+T_TKWINDOW
+ $var = (TkWindow *) SVtoWindow($arg)
+
+T_TK_INTERP
+ $var = WindowCommand($arg,NULL,1)->interp
+
+T_TK_UID
+ $var = Tk_GetUid(SvPV($arg,na))
+
+T_IVOBJ
+ if (sv_isa($arg, \"${ntype}\")) {
+ $var = INT2PTR($type, SvIV(SvRV($arg)));
+ }
+ else {
+ $var = ($type) NULL;
+ croak(\"$var is not of type ${ntype}\");
+ }
+
+T_NIO
+ if (sv_isa($arg, \"${Package}\")) {
+ $var = IoIFP(sv_2io(SvRV($arg)));
+ }
+ else
+ croak(\"$var is not of type ${Package}\")
+
+
+OUTPUT
+T_IVOBJ
+ sv_setref_iv($arg, \"${ntype}\", PTR2IV($var));
+
+T_TK_UID
+ sv_setpv($arg,$var);
+
+T_TK_WINDOW
+ SvSetMagicSV($arg,TkToWidget($var,NULL));
+
+T_TKWINDOW
+ SvSetMagicSV($arg,TkToWidget((Tk_Window) $var,NULL));
+
+
diff --git a/Master/tlpkg/tlperl/lib/Tk/vtab.def b/Master/tlpkg/tlperl/lib/Tk/vtab.def
new file mode 100644
index 00000000000..7663df7d6f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/vtab.def
@@ -0,0 +1,90 @@
+#define IMPORT_VTABLE(ptr,type,name) do { \
+ ptr = INT2PTR(type *,SvIV(get_sv(name,GV_ADDWARN|GV_ADD))); \
+ if ((*ptr->tabSize)() != sizeof(type)) { \
+ Perl_warn(aTHX_ "%s wrong size for %s",name,#type); \
+ } \
+ } while (0)
+
+#ifdef WIN32
+#define DECLARE_VTABLES \
+LangVtab *LangVptr; \
+TcldeclsVtab *TcldeclsVptr; \
+TkVtab *TkVptr; \
+TkdeclsVtab *TkdeclsVptr; \
+TkeventVtab *TkeventVptr; \
+TkglueVtab *TkglueVptr; \
+TkintVtab *TkintVptr; \
+TkintdeclsVtab *TkintdeclsVptr; \
+TkintplatdeclsVtab *TkintplatdeclsVptr;\
+TkintxlibdeclsVtab *TkintxlibdeclsVptr;\
+TkoptionVtab *TkoptionVptr; \
+TkplatdeclsVtab *TkplatdeclsVptr
+
+#define IMPORT_VTABLES do { \
+IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \
+IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \
+IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \
+IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \
+IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
+IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \
+IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \
+IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \
+IMPORT_VTABLE(TkintplatdeclsVptr,TkintplatdeclsVtab,"Tk::TkintplatdeclsVtab"); \
+IMPORT_VTABLE(TkintxlibdeclsVptr,TkintxlibdeclsVtab,"Tk::TkintxlibdeclsVtab"); \
+IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \
+IMPORT_VTABLE(TkplatdeclsVptr , TkplatdeclsVtab,"Tk::TkplatdeclsVtab"); \
+} while (0)
+#else
+#define DECLARE_VTABLES \
+LangVtab *LangVptr; \
+TcldeclsVtab *TcldeclsVptr; \
+TkVtab *TkVptr; \
+TkdeclsVtab *TkdeclsVptr; \
+TkeventVtab *TkeventVptr; \
+TkglueVtab *TkglueVptr; \
+TkintVtab *TkintVptr; \
+TkintdeclsVtab *TkintdeclsVptr; \
+TkoptionVtab *TkoptionVptr; \
+XlibVtab *XlibVptr
+
+#define IMPORT_VTABLES do { \
+IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \
+IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \
+IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \
+IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \
+IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
+IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \
+IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \
+IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \
+IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \
+IMPORT_VTABLE(XlibVptr , XlibVtab,"Tk::XlibVtab"); \
+} while (0)
+#endif
+#define DECLARE_TIX \
+TixVtab *TixVptr; \
+TixintVtab *TixintVptr
+
+#define IMPORT_TIX do { \
+IMPORT_VTABLE(TixVptr , TixVtab,"Tk::TixVtab"); \
+IMPORT_VTABLE(TixintVptr , TixintVtab,"Tk::TixintVtab"); \
+} while (0)
+#define DECLARE_PHOTO \
+ImgintVtab *ImgintVptr; \
+TkimgphotoVtab *TkimgphotoVptr
+
+#define IMPORT_PHOTO do { \
+IMPORT_VTABLE(ImgintVptr , ImgintVtab,"Tk::ImgintVtab"); \
+IMPORT_VTABLE(TkimgphotoVptr , TkimgphotoVtab,"Tk::TkimgphotoVtab"); \
+} while (0)
+#define DECLARE_EVENT \
+TkeventVtab *TkeventVptr
+
+#define IMPORT_EVENT do { \
+IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
+} while (0)
+#define DECLARE_TIXXPM \
+TiximgxpmVtab *TiximgxpmVptr
+
+#define IMPORT_TIXXPM do { \
+IMPORT_VTABLE(TiximgxpmVptr , TiximgxpmVtab,"Tk::TiximgxpmVtab"); \
+} while (0)
diff --git a/Master/tlpkg/tlperl/lib/Tk/widgets.pm b/Master/tlpkg/tlperl/lib/Tk/widgets.pm
new file mode 100644
index 00000000000..0d628027810
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/widgets.pm
@@ -0,0 +1,21 @@
+package Tk::widgets;
+use Carp;
+
+use vars qw($VERSION);
+$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/widgets.pm#4 $
+
+sub import
+{
+ my $class = shift;
+ foreach (@_)
+ {
+ local $SIG{__DIE__} = \&Carp::croak;
+ # carp "$_ already loaded" if (exists $INC{"Tk/$_.pm"});
+ require "Tk/$_.pm";
+ }
+}
+
+1;
+__END__
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Tk/win.xbm b/Master/tlpkg/tlperl/lib/Tk/win.xbm
new file mode 100644
index 00000000000..13c05e8c2d7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/win.xbm
@@ -0,0 +1,6 @@
+#define win.xbm_width 16
+#define win.xbm_height 16
+static char win.xbm_bits[] = {
+ 0xff, 0xff, 0x0d, 0xb0, 0xff, 0xff, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
+ 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
+ 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xff, 0xff};
diff --git a/Master/tlpkg/tlperl/lib/Tk/winfolder.xpm b/Master/tlpkg/tlperl/lib/Tk/winfolder.xpm
new file mode 100644
index 00000000000..73fe734c6d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/winfolder.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char *winfolder[] = {
+/* width height num_colors chars_per_pixel */
+" 17 15 17 1",
+/* colors */
+" c none",
+". c #000000",
+"# c #808080",
+"a c #800000",
+"b c #808000",
+"c c #008000",
+"d c #008080",
+"e c #000080",
+"f c #800080",
+"g c #ffffff",
+"h c #c0c0c0",
+"i c #ff0000",
+"j c #ffff00",
+"k c #00ff00",
+"l c #00ffff",
+"m c #0000ff",
+"n c #ff00ff",
+/* pixels */
+" ",
+" ##### ",
+" #hjhjh# ",
+" #hjhjhjh###### ",
+" #gggggggggggg#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" #ghjhjhjhjhjh#. ",
+" #gjhjhjhjhjhj#. ",
+" ##############. ",
+" .............. ",
+" ",
+};
diff --git a/Master/tlpkg/tlperl/lib/Tk/wintext.xpm b/Master/tlpkg/tlperl/lib/Tk/wintext.xpm
new file mode 100644
index 00000000000..50b2d5587dd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/wintext.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char *wintext[] = {
+/* width height num_colors chars_per_pixel */
+" 15 18 17 1",
+/* colors */
+" c None",
+". c #000000",
+"# c #808080",
+"a c #800000",
+"b c #808000",
+"c c #008000",
+"d c #008080",
+"e c #000080",
+"f c #800080",
+"g c #ffffff",
+"h c #c0c0c0",
+"i c #ff0000",
+"j c #ffff00",
+"k c #00ff00",
+"l c #00ffff",
+"m c #0000ff",
+"n c #ff00ff",
+/* pixels */
+" ",
+" . . . . . ",
+" .g#g#g#g#g. ",
+" #g.g.g.g.g.g. ",
+" #ggggggggggh. ",
+" #ggggggggggh. ",
+" #gg...g..ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #gg......ggh. ",
+" #ggggggggggh. ",
+" #ggggggggggh. ",
+" #hhhhhhhhhhh. ",
+" ........... ",
+" "
+};
diff --git a/Master/tlpkg/tlperl/lib/UNIVERSAL.pm b/Master/tlpkg/tlperl/lib/UNIVERSAL.pm
new file mode 100644
index 00000000000..7b7bfc4058a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/UNIVERSAL.pm
@@ -0,0 +1,147 @@
+package UNIVERSAL;
+
+our $VERSION = '1.01';
+
+# UNIVERSAL should not contain any extra subs/methods beyond those
+# that it exists to define. The use of Exporter below is a historical
+# accident that can't be fixed without breaking code. Note that we
+# *don't* set @ISA here, don't want all classes/objects inheriting from
+# Exporter. It's bad enough that all classes have a import() method
+# whenever UNIVERSAL.pm is loaded.
+require Exporter;
+*import = \&Exporter::import;
+@EXPORT_OK = qw(isa can VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+UNIVERSAL - base class for ALL classes (blessed references)
+
+=head1 SYNOPSIS
+
+ $is_io = $fd->isa("IO::Handle");
+ $is_io = Class->isa("IO::Handle");
+
+ $sub = $obj->can("print");
+ $sub = Class->can("print");
+
+ use UNIVERSAL qw( isa can VERSION );
+ $yes = isa $ref, "HASH" ;
+ $sub = can $ref, "fandango" ;
+ $ver = VERSION $obj ;
+
+=head1 DESCRIPTION
+
+C<UNIVERSAL> is the base class which all bless references will inherit from,
+see L<perlobj>.
+
+C<UNIVERSAL> provides the following methods and functions:
+
+=over 4
+
+=item C<< $obj->isa( TYPE ) >>
+
+=item C<< CLASS->isa( TYPE ) >>
+
+=item C<isa( VAL, TYPE )>
+
+Where
+
+=over 4
+
+=item C<TYPE>
+
+is a package name
+
+=item C<$obj>
+
+is a blessed reference or a string containing a package name
+
+=item C<CLASS>
+
+is a package name
+
+=item C<VAL>
+
+is any of the above or an unblessed reference
+
+=back
+
+When used as an instance or class method (C<< $obj->isa( TYPE ) >>),
+C<isa> returns I<true> if $obj is blessed into package C<TYPE> or
+inherits from package C<TYPE>.
+
+When used as a class method (C<< CLASS->isa( TYPE ) >>: sometimes
+referred to as a static method), C<isa> returns I<true> if C<CLASS>
+inherits from (or is itself) the name of the package C<TYPE> or
+inherits from package C<TYPE>.
+
+When used as a function, like
+
+ use UNIVERSAL qw( isa ) ;
+ $yes = isa $h, "HASH";
+ $yes = isa "Foo", "Bar";
+
+or
+
+ require UNIVERSAL ;
+ $yes = UNIVERSAL::isa $a, "ARRAY";
+
+C<isa> returns I<true> in the same cases as above and also if C<VAL> is an
+unblessed reference to a perl variable of type C<TYPE>, such as "HASH",
+"ARRAY", or "Regexp".
+
+=item C<< $obj->can( METHOD ) >>
+
+=item C<< CLASS->can( METHOD ) >>
+
+=item C<can( VAL, METHOD )>
+
+C<can> checks if the object or class has a method called C<METHOD>. If it does
+then a reference to the sub is returned. If it does not then I<undef> is
+returned. This includes methods inherited or imported by C<$obj>, C<CLASS>, or
+C<VAL>.
+
+C<can> cannot know whether an object will be able to provide a method
+through AUTOLOAD, so a return value of I<undef> does not necessarily mean
+the object will not be able to handle the method call. To get around
+this some module authors use a forward declaration (see L<perlsub>)
+for methods they will handle via AUTOLOAD. For such 'dummy' subs, C<can>
+will still return a code reference, which, when called, will fall through
+to the AUTOLOAD. If no suitable AUTOLOAD is provided, calling the coderef
+will cause an error.
+
+C<can> can be called as a class (static) method, an object method, or a
+function.
+
+When used as a function, if C<VAL> is a blessed reference or package name which
+has a method called C<METHOD>, C<can> returns a reference to the subroutine.
+If C<VAL> is not a blessed reference, or if it does not have a method
+C<METHOD>, I<undef> is returned.
+
+=item C<VERSION ( [ REQUIRE ] )>
+
+C<VERSION> will return the value of the variable C<$VERSION> in the
+package the object is blessed into. If C<REQUIRE> is given then
+it will do a comparison and die if the package version is not
+greater than or equal to C<REQUIRE>.
+
+C<VERSION> can be called as either a class (static) method, an object
+method or a function.
+
+
+=back
+
+=head1 EXPORTS
+
+None by default.
+
+You may request the import of all three functions (C<isa>, C<can>, and
+C<VERSION>), however it isn't usually necessary to do so. Perl magically
+makes these functions act as methods on all objects. The one exception is
+C<isa>, which is useful as a function when operating on non-blessed
+references.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32.pm b/Master/tlpkg/tlperl/lib/Win32.pm
new file mode 100644
index 00000000000..e55bfee4dfe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32.pm
@@ -0,0 +1,712 @@
+package Win32;
+
+BEGIN {
+ use strict;
+ use vars qw|$VERSION @ISA @EXPORT @EXPORT_OK|;
+
+ require Exporter;
+ require DynaLoader;
+
+ @ISA = qw|Exporter DynaLoader|;
+ $VERSION = '0.2601';
+
+ @EXPORT = qw(
+ NULL
+ WIN31_CLASS
+ OWNER_SECURITY_INFORMATION
+ GROUP_SECURITY_INFORMATION
+ DACL_SECURITY_INFORMATION
+ SACL_SECURITY_INFORMATION
+ MB_ICONHAND
+ MB_ICONQUESTION
+ MB_ICONEXCLAMATION
+ MB_ICONASTERISK
+ MB_ICONWARNING
+ MB_ICONERROR
+ MB_ICONINFORMATION
+ MB_ICONSTOP
+ );
+ @EXPORT_OK = qw(
+ GetOSName
+ SW_HIDE
+ SW_SHOWNORMAL
+ SW_SHOWMINIMIZED
+ SW_SHOWMAXIMIZED
+ SW_SHOWNOACTIVATE
+
+ CSIDL_DESKTOP
+ CSIDL_PROGRAMS
+ CSIDL_PERSONAL
+ CSIDL_FAVORITES
+ CSIDL_STARTUP
+ CSIDL_RECENT
+ CSIDL_SENDTO
+ CSIDL_STARTMENU
+ CSIDL_MYMUSIC
+ CSIDL_MYVIDEO
+ CSIDL_DESKTOPDIRECTORY
+ CSIDL_NETHOOD
+ CSIDL_FONTS
+ CSIDL_TEMPLATES
+ CSIDL_COMMON_STARTMENU
+ CSIDL_COMMON_PROGRAMS
+ CSIDL_COMMON_STARTUP
+ CSIDL_COMMON_DESKTOPDIRECTORY
+ CSIDL_APPDATA
+ CSIDL_PRINTHOOD
+ CSIDL_LOCAL_APPDATA
+ CSIDL_COMMON_FAVORITES
+ CSIDL_INTERNET_CACHE
+ CSIDL_COOKIES
+ CSIDL_HISTORY
+ CSIDL_COMMON_APPDATA
+ CSIDL_WINDOWS
+ CSIDL_SYSTEM
+ CSIDL_PROGRAM_FILES
+ CSIDL_MYPICTURES
+ CSIDL_PROFILE
+ CSIDL_PROGRAM_FILES_COMMON
+ CSIDL_COMMON_TEMPLATES
+ CSIDL_COMMON_DOCUMENTS
+ CSIDL_COMMON_ADMINTOOLS
+ CSIDL_ADMINTOOLS
+ CSIDL_COMMON_MUSIC
+ CSIDL_COMMON_PICTURES
+ CSIDL_COMMON_VIDEO
+ CSIDL_RESOURCES
+ CSIDL_RESOURCES_LOCALIZED
+ CSIDL_CDBURN_AREA
+ );
+}
+
+# Routines available in core:
+# Win32::GetLastError
+# Win32::LoginName
+# Win32::NodeName
+# Win32::DomainName
+# Win32::FsType
+# Win32::GetCwd
+# Win32::GetOSVersion
+# Win32::FormatMessage ERRORCODE
+# Win32::Spawn COMMAND, ARGS, PID
+# Win32::GetTickCount
+# Win32::IsWinNT
+# Win32::IsWin95
+
+# We won't bother with the constant stuff, too much of a hassle. Just hard
+# code it here.
+
+sub NULL { 0 }
+sub WIN31_CLASS { &NULL }
+
+sub OWNER_SECURITY_INFORMATION { 0x00000001 }
+sub GROUP_SECURITY_INFORMATION { 0x00000002 }
+sub DACL_SECURITY_INFORMATION { 0x00000004 }
+sub SACL_SECURITY_INFORMATION { 0x00000008 }
+
+sub MB_ICONHAND { 0x00000010 }
+sub MB_ICONQUESTION { 0x00000020 }
+sub MB_ICONEXCLAMATION { 0x00000030 }
+sub MB_ICONASTERISK { 0x00000040 }
+sub MB_ICONWARNING { 0x00000030 }
+sub MB_ICONERROR { 0x00000010 }
+sub MB_ICONINFORMATION { 0x00000040 }
+sub MB_ICONSTOP { 0x00000010 }
+
+#
+# Newly added constants. These have an empty prototype, unlike the
+# the ones above, which aren't prototyped for compatibility reasons.
+#
+sub SW_HIDE () { 0 }
+sub SW_SHOWNORMAL () { 1 }
+sub SW_SHOWMINIMIZED () { 2 }
+sub SW_SHOWMAXIMIZED () { 3 }
+sub SW_SHOWNOACTIVATE () { 4 }
+
+sub CSIDL_DESKTOP () { 0x0000 } # <desktop>
+sub CSIDL_PROGRAMS () { 0x0002 } # Start Menu\Programs
+sub CSIDL_PERSONAL () { 0x0005 } # "My Documents" folder
+sub CSIDL_FAVORITES () { 0x0006 } # <user name>\Favorites
+sub CSIDL_STARTUP () { 0x0007 } # Start Menu\Programs\Startup
+sub CSIDL_RECENT () { 0x0008 } # <user name>\Recent
+sub CSIDL_SENDTO () { 0x0009 } # <user name>\SendTo
+sub CSIDL_STARTMENU () { 0x000B } # <user name>\Start Menu
+sub CSIDL_MYMUSIC () { 0x000D } # "My Music" folder
+sub CSIDL_MYVIDEO () { 0x000E } # "My Videos" folder
+sub CSIDL_DESKTOPDIRECTORY () { 0x0010 } # <user name>\Desktop
+sub CSIDL_NETHOOD () { 0x0013 } # <user name>\nethood
+sub CSIDL_FONTS () { 0x0014 } # windows\fonts
+sub CSIDL_TEMPLATES () { 0x0015 }
+sub CSIDL_COMMON_STARTMENU () { 0x0016 } # All Users\Start Menu
+sub CSIDL_COMMON_PROGRAMS () { 0x0017 } # All Users\Start Menu\Programs
+sub CSIDL_COMMON_STARTUP () { 0x0018 } # All Users\Startup
+sub CSIDL_COMMON_DESKTOPDIRECTORY () { 0x0019 } # All Users\Desktop
+sub CSIDL_APPDATA () { 0x001A } # Application Data, new for NT4
+sub CSIDL_PRINTHOOD () { 0x001B } # <user name>\PrintHood
+sub CSIDL_LOCAL_APPDATA () { 0x001C } # non roaming, user\Local Settings\Application Data
+sub CSIDL_COMMON_FAVORITES () { 0x001F }
+sub CSIDL_INTERNET_CACHE () { 0x0020 }
+sub CSIDL_COOKIES () { 0x0021 }
+sub CSIDL_HISTORY () { 0x0022 }
+sub CSIDL_COMMON_APPDATA () { 0x0023 } # All Users\Application Data
+sub CSIDL_WINDOWS () { 0x0024 } # GetWindowsDirectory()
+sub CSIDL_SYSTEM () { 0x0025 } # GetSystemDirectory()
+sub CSIDL_PROGRAM_FILES () { 0x0026 } # C:\Program Files
+sub CSIDL_MYPICTURES () { 0x0027 } # "My Pictures", new for Win2K
+sub CSIDL_PROFILE () { 0x0028 } # USERPROFILE
+sub CSIDL_PROGRAM_FILES_COMMON () { 0x002B } # C:\Program Files\Common
+sub CSIDL_COMMON_TEMPLATES () { 0x002D } # All Users\Templates
+sub CSIDL_COMMON_DOCUMENTS () { 0x002E } # All Users\Documents
+sub CSIDL_COMMON_ADMINTOOLS () { 0x002F } # All Users\Start Menu\Programs\Administrative Tools
+sub CSIDL_ADMINTOOLS () { 0x0030 } # <user name>\Start Menu\Programs\Administrative Tools
+sub CSIDL_COMMON_MUSIC () { 0x0035 } # All Users\My Music
+sub CSIDL_COMMON_PICTURES () { 0x0036 } # All Users\My Pictures
+sub CSIDL_COMMON_VIDEO () { 0x0037 } # All Users\My Video
+sub CSIDL_RESOURCES () { 0x0038 } # %windir%\Resources\, For theme and other windows resources.
+sub CSIDL_RESOURCES_LOCALIZED () { 0x0039 } # %windir%\Resources\<LangID>, for theme and other windows specific resources.
+sub CSIDL_CDBURN_AREA () { 0x003B } # <user name>\Local Settings\Application Data\Microsoft\CD Burning
+
+### This method is just a simple interface into GetOSVersion(). More
+### specific or demanding situations should use that instead.
+
+my ($found_os, $found_desc);
+
+sub GetOSName {
+ my ($os,$desc,$major, $minor, $build, $id)=("","");
+ unless (defined $found_os) {
+ # If we have a run this already, we have the results cached
+ # If so, return them
+
+ # Use the standard API call to determine the version
+ ($desc, $major, $minor, $build, $id) = Win32::GetOSVersion();
+
+ # If id==0 then its a win32s box -- Meaning Win3.11
+ unless($id) {
+ $os = 'Win32s';
+ }
+ else {
+ # Magic numbers from MSDN documentation of OSVERSIONINFO
+ # Most version names can be parsed from just the id and minor
+ # version
+ $os = {
+ 1 => {
+ 0 => "95",
+ 10 => "98",
+ 90 => "Me"
+ },
+ 2 => {
+ 0 => "NT4",
+ 1 => "XP/.Net",
+ 2 => "2003",
+ 51 => "NT3.51"
+ }
+ }->{$id}->{$minor};
+ }
+
+ # This _really_ shouldnt happen. At least not for quite a while
+ # Politely warn and return undef
+ unless (defined $os) {
+ warn qq[Windows version [$id:$major:$minor] unknown!];
+ return undef;
+ }
+
+ my $tag = "";
+
+ # But distinguising W2k and Vista from NT4 requires looking at the major version
+ if ($os eq "NT4") {
+ $os = {5 => "2000", 6 => "Vista"}->{$major} || "NT4";
+ }
+
+ # For the rest we take a look at the build numbers and try to deduce
+ # the exact release name, but we put that in the $desc
+ elsif ($os eq "95") {
+ if ($build eq '67109814') {
+ $tag = '(a)';
+ }
+ elsif ($build eq '67306684') {
+ $tag = '(b1)';
+ }
+ elsif ($build eq '67109975') {
+ $tag = '(b2)';
+ }
+ }
+ elsif ($os eq "98" && $build eq '67766446') {
+ $tag = '(2nd ed)';
+ }
+
+ if (length $tag) {
+ if (length $desc) {
+ $desc = "$tag $desc";
+ }
+ else {
+ $desc = $tag;
+ }
+ }
+
+ # cache the results, so we dont have to do this again
+ $found_os = "Win$os";
+ $found_desc = $desc;
+ }
+
+ return wantarray ? ($found_os, $found_desc) : $found_os;
+}
+
+bootstrap Win32;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Win32 - Interfaces to some Win32 API Functions
+
+=head1 DESCRIPTION
+
+Perl on Win32 contains several functions to access Win32 APIs. Some
+are included in Perl itself (on Win32) and some are only available
+after explicitly requesting the Win32 module with:
+
+ use Win32;
+
+The builtin functions are marked as [CORE] and the other ones
+as [EXT] in the following alphabetical listing.
+
+=head2 Alphabetical Listing of Win32 Functions
+
+=over
+
+=item Win32::AbortSystemShutdown(MACHINE)
+
+[EXT] Aborts a system shutdown (started by the
+InitiateSystemShutdown function) on the specified MACHINE.
+
+=item Win32::BuildNumber()
+
+[CORE] Returns the ActivePerl build number. This function is
+only available in the ActivePerl binary distribution.
+
+=item Win32::CopyFile(FROM, TO, OVERWRITE)
+
+[CORE] The Win32::CopyFile() function copies an existing file to a new
+file. All file information like creation time and file attributes will
+be copied to the new file. However it will B<not> copy the security
+information. If the destination file already exists it will only be
+overwritten when the OVERWRITE parameter is true. But even this will
+not overwrite a read-only file; you have to unlink() it first
+yourself.
+
+=item Win32::DomainName()
+
+[CORE] Returns the name of the Microsoft Network domain that the
+owner of the current perl process is logged into. This function does
+B<not> work on Windows 9x.
+
+=item Win32::ExpandEnvironmentStrings(STRING)
+
+[EXT] Takes STRING and replaces all referenced environment variable
+names with their defined values. References to environment variables
+take the form C<%VariableName%>. Case is ignored when looking up the
+VariableName in the environment. If the variable is not found then the
+original C<%VariableName%> text is retained. Has the same effect
+as the following:
+
+ $string =~ s/%([^%]*)%/$ENV{$1} || "%$1%"/eg
+
+=item Win32::FormatMessage(ERRORCODE)
+
+[CORE] Converts the supplied Win32 error number (e.g. returned by
+Win32::GetLastError()) to a descriptive string. Analogous to the
+perror() standard-C library function. Note that C<$^E> used
+in a string context has much the same effect.
+
+ C:\> perl -e "$^E = 26; print $^E;"
+ The specified disk or diskette cannot be accessed
+
+=item Win32::FsType()
+
+[CORE] Returns the name of the filesystem of the currently active
+drive (like 'FAT' or 'NTFS'). In list context it returns three values:
+(FSTYPE, FLAGS, MAXCOMPLEN). FSTYPE is the filesystem type as
+before. FLAGS is a combination of values of the following table:
+
+ 0x00000001 supports case-sensitive filenames
+ 0x00000002 preserves the case of filenames
+ 0x00000004 supports Unicode in filenames
+ 0x00000008 preserves and enforces ACLs
+ 0x00000010 supports file-based compression
+ 0x00000020 supports disk quotas
+ 0x00000040 supports sparse files
+ 0x00000080 supports reparse points
+ 0x00000100 supports remote storage
+ 0x00008000 is a compressed volume (e.g. DoubleSpace)
+ 0x00010000 supports object identifiers
+ 0x00020000 supports the Encrypted File System (EFS)
+
+MAXCOMPLEN is the maximum length of a filename component (the part
+between two backslashes) on this file system.
+
+=item Win32::FreeLibrary(HANDLE)
+
+[EXT] Unloads a previously loaded dynamic-link library. The HANDLE is
+no longer valid after this call. See L<LoadLibrary|Win32::LoadLibrary(LIBNAME)>
+for information on dynamically loading a library.
+
+=item Win32::GetArchName()
+
+[EXT] Use of this function is deprecated. It is equivalent with
+$ENV{PROCESSOR_ARCHITECTURE}. This might not work on Win9X.
+
+=item Win32::GetChipName()
+
+[EXT] Returns the processor type: 386, 486 or 586 for Intel processors,
+21064 for the Alpha chip.
+
+=item Win32::GetCwd()
+
+[CORE] Returns the current active drive and directory. This function
+does not return a UNC path, since the functionality required for such
+a feature is not available under Windows 95.
+
+=item Win32::GetFileVersion(FILENAME)
+
+[EXT] Returns the file version number from the VERSIONINFO resource of
+the executable file or DLL. This is a tuple of four 16 bit numbers.
+In list context these four numbers will be returned. In scalar context
+they are concatenated into a string, separated by dots.
+
+=item Win32::GetFolderPath(FOLDER [, CREATE])
+
+[EXT] Returns the full pathname of one of the Windows special folders.
+The folder will be created if it doesn't exist and the optional CREATE
+argument is true. The following FOLDER constants are defined by the
+Win32 module, but only exported on demand:
+
+ CSIDL_ADMINTOOLS
+ CSIDL_APPDATA
+ CSIDL_CDBURN_AREA
+ CSIDL_COMMON_ADMINTOOLS
+ CSIDL_COMMON_APPDATA
+ CSIDL_COMMON_DESKTOPDIRECTORY
+ CSIDL_COMMON_DOCUMENTS
+ CSIDL_COMMON_FAVORITES
+ CSIDL_COMMON_MUSIC
+ CSIDL_COMMON_PICTURES
+ CSIDL_COMMON_PROGRAMS
+ CSIDL_COMMON_STARTMENU
+ CSIDL_COMMON_STARTUP
+ CSIDL_COMMON_TEMPLATES
+ CSIDL_COMMON_VIDEO
+ CSIDL_COOKIES
+ CSIDL_DESKTOP
+ CSIDL_DESKTOPDIRECTORY
+ CSIDL_FAVORITES
+ CSIDL_FONTS
+ CSIDL_HISTORY
+ CSIDL_INTERNET_CACHE
+ CSIDL_LOCAL_APPDATA
+ CSIDL_MYMUSIC
+ CSIDL_MYPICTURES
+ CSIDL_MYVIDEO
+ CSIDL_NETHOOD
+ CSIDL_PERSONAL
+ CSIDL_PRINTHOOD
+ CSIDL_PROFILE
+ CSIDL_PROGRAMS
+ CSIDL_PROGRAM_FILES
+ CSIDL_PROGRAM_FILES_COMMON
+ CSIDL_RECENT
+ CSIDL_RESOURCES
+ CSIDL_RESOURCES_LOCALIZED
+ CSIDL_SENDTO
+ CSIDL_STARTMENU
+ CSIDL_STARTUP
+ CSIDL_SYSTEM
+ CSIDL_TEMPLATES
+ CSIDL_WINDOWS
+
+Note that not all folders are defined on all versions of Windows.
+
+Please refer to the MSDN documentation of the CSIDL constants,
+currently available at:
+
+http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp
+
+=item Win32::GetFullPathName(FILENAME)
+
+[CORE] GetFullPathName combines the FILENAME with the current drive
+and directory name and returns a fully qualified (aka, absolute)
+path name. In list context it returns two elements: (PATH, FILE) where
+PATH is the complete pathname component (including trailing backslash)
+and FILE is just the filename part. Note that no attempt is made to
+convert 8.3 components in the supplied FILENAME to longnames or
+vice-versa. Compare with Win32::GetShortPathName and
+Win32::GetLongPathName.
+
+=item Win32::GetLastError()
+
+[CORE] Returns the last error value generated by a call to a Win32 API
+function. Note that C<$^E> used in a numeric context amounts to the
+same value.
+
+=item Win32::GetLongPathName(PATHNAME)
+
+[CORE] Returns a representation of PATHNAME composed of longname
+components (if any). The result may not necessarily be longer
+than PATHNAME. No attempt is made to convert PATHNAME to the
+absolute path. Compare with Win32::GetShortPathName and
+Win32::GetFullPathName.
+
+=item Win32::GetNextAvailDrive()
+
+[CORE] Returns a string in the form of "<d>:" where <d> is the first
+available drive letter.
+
+=item Win32::GetOSVersion()
+
+[CORE] Returns the list (STRING, MAJOR, MINOR, BUILD, ID), where the
+elements are, respectively: An arbitrary descriptive string, the major
+version number of the operating system, the minor version number, the
+build number, and a digit indicating the actual operating system.
+For the ID, the values are 0 for Win32s, 1 for Windows 9X/Me and 2 for
+Windows NT/2000/XP/2003. In scalar context it returns just the ID.
+
+Currently known values for ID MAJOR and MINOR are as follows:
+
+ OS ID MAJOR MINOR
+ Win32s 0 - -
+ Windows 95 1 4 0
+ Windows 98 1 4 10
+ Windows Me 1 4 90
+ Windows NT 3.51 2 3 51
+ Windows NT 4 2 4 0
+ Windows 2000 2 5 0
+ Windows XP 2 5 1
+ Windows Server 2003 2 5 2
+ Windows Vista 2 6 0
+
+On Windows NT 4 SP6 and later this function returns the following
+additional values: SPMAJOR, SPMINOR, SUITEMASK, PRODUCTTYPE.
+
+SPMAJOR and SPMINOR are are the version numbers of the latest
+installed service pack.
+
+SUITEMASK is a bitfield identifying the product suites available on
+the system. Known bits are:
+
+ VER_SUITE_SMALLBUSINESS 0x00000001
+ VER_SUITE_ENTERPRISE 0x00000002
+ VER_SUITE_BACKOFFICE 0x00000004
+ VER_SUITE_COMMUNICATIONS 0x00000008
+ VER_SUITE_TERMINAL 0x00000010
+ VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
+ VER_SUITE_EMBEDDEDNT 0x00000040
+ VER_SUITE_DATACENTER 0x00000080
+ VER_SUITE_SINGLEUSERTS 0x00000100
+ VER_SUITE_PERSONAL 0x00000200
+ VER_SUITE_BLADE 0x00000400
+ VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
+ VER_SUITE_SECURITY_APPLIANCE 0x00001000
+
+The VER_SUITE_xxx names are listed here to crossreference the Microsoft
+documentation. The Win32 module does not provide symbolic names for these
+constants.
+
+PRODUCTTYPE provides additional information about the system. It should
+be one of the following integer values:
+
+ 1 - Workstation (NT 4, 2000 Pro, XP Home, XP Pro)
+ 2 - Domaincontroller
+ 3 - Server
+
+=item Win32::GetOSName()
+
+[EXT] In scalar context returns the name of the Win32 operating system
+being used. In list context returns a two element list of the OS name
+and whatever edition information is known about the particular build
+(for Win9X boxes) and whatever service packs have been installed.
+The latter is roughly equivalent to the first item returned by
+GetOSVersion() in list context.
+
+Currently the possible values for the OS name are
+
+ Win32s Win95 Win98 WinMe WinNT3.51 WinNT4 Win2000 WinXP/.Net Win2003
+
+This routine is just a simple interface into GetOSVersion(). More
+specific or demanding situations should use that instead. Another
+option would be to use POSIX::uname(), however the latter appears to
+report only the OS family name and not the specific OS. In scalar
+context it returns just the ID.
+
+The name "WinXP/.Net" is used for historical reasons only, to maintain
+backwards compatibility of the Win32 module. Windows .NET Server has
+been renamed as Windows 2003 Server before final release and uses a
+different major/minor version number than Windows XP.
+
+=item Win32::GetShortPathName(PATHNAME)
+
+[CORE] Returns a representation of PATHNAME that is composed of short
+(8.3) path components where available. For path components where the
+file system has not generated the short form the returned path will
+use the long form, so this function might still for instance return a
+path containing spaces. Compare with Win32::GetFullPathName and
+Win32::GetLongPathName.
+
+=item Win32::GetProcAddress(INSTANCE, PROCNAME)
+
+[EXT] Returns the address of a function inside a loaded library. The
+information about what you can do with this address has been lost in
+the mist of time. Use the Win32::API module instead of this deprecated
+function.
+
+=item Win32::GetTickCount()
+
+[CORE] Returns the number of milliseconds elapsed since the last
+system boot. Resolution is limited to system timer ticks (about 10ms
+on WinNT and 55ms on Win9X).
+
+=item Win32::GuidGen()
+
+[EXT] Creates a globally unique 128 bit integer that can be used as a
+persistent identifier in a distributed setting. To a very high degree
+of certainty this function returns a unique value. No other
+invocation, on the same or any other system (networked or not), should
+return the same value.
+
+The return value is formatted according to OLE conventions, as groups
+of hex digits with surrounding braces. For example:
+
+ {09531CF1-D0C7-4860-840C-1C8C8735E2AD}
+
+=item Win32::InitiateSystemShutdown
+
+(MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT)
+
+[EXT] Shutsdown the specified MACHINE, notifying users with the
+supplied MESSAGE, within the specified TIMEOUT interval. Forces
+closing of all documents without prompting the user if FORCECLOSE is
+true, and reboots the machine if REBOOT is true. This function works
+only on WinNT.
+
+=item Win32::IsAdminUser()
+
+[EXT] Returns non zero if the account in whose security context the
+current process/thread is running belongs to the local group of
+Administrators in the built-in system domain; returns 0 if not.
+Returns the undefined value and prints a warning if an error occurred.
+This function always returns 1 on Win9X.
+
+=item Win32::IsWinNT()
+
+[CORE] Returns non zero if the Win32 subsystem is Windows NT.
+
+=item Win32::IsWin95()
+
+[CORE] Returns non zero if the Win32 subsystem is Windows 95.
+
+=item Win32::LoadLibrary(LIBNAME)
+
+[EXT] Loads a dynamic link library into memory and returns its module
+handle. This handle can be used with Win32::GetProcAddress and
+Win32::FreeLibrary. This function is deprecated. Use the Win32::API
+module instead.
+
+=item Win32::LoginName()
+
+[CORE] Returns the username of the owner of the current perl process.
+
+=item Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID, SIDTYPE)
+
+[EXT] Looks up ACCOUNT on SYSTEM and returns the domain name the SID and
+the SID type.
+
+=item Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE)
+
+[EXT] Looks up SID on SYSTEM and returns the account name, domain name,
+and the SID type.
+
+=item Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]])
+
+[EXT] Create a dialogbox containing MESSAGE. FLAGS specifies the
+required icon and buttons according to the following table:
+
+ 0 = OK
+ 1 = OK and Cancel
+ 2 = Abort, Retry, and Ignore
+ 3 = Yes, No and Cancel
+ 4 = Yes and No
+ 5 = Retry and Cancel
+
+ MB_ICONSTOP "X" in a red circle
+ MB_ICONQUESTION question mark in a bubble
+ MB_ICONEXCLAMATION exclamation mark in a yellow triangle
+ MB_ICONINFORMATION "i" in a bubble
+
+TITLE specifies an optional window title. The default is "Perl".
+
+The function returns the menu id of the selected push button:
+
+ 0 Error
+
+ 1 OK
+ 2 Cancel
+ 3 Abort
+ 4 Retry
+ 5 Ignore
+ 6 Yes
+ 7 No
+
+=item Win32::NodeName()
+
+[CORE] Returns the Microsoft Network node-name of the current machine.
+
+=item Win32::RegisterServer(LIBRARYNAME)
+
+[EXT] Loads the DLL LIBRARYNAME and calls the function DllRegisterServer.
+
+=item Win32::SetChildShowWindow(SHOWWINDOW)
+
+[CORE] Sets the I<ShowMode> of child processes started by system().
+By default system() will create a new console window for child
+processes if Perl itself is not running from a console. Calling
+SetChildShowWindow(0) will make these new console windows invisible.
+Calling SetChildShowWindow() without arguments reverts system() to the
+default behavior. The return value of SetChildShowWindow() is the
+previous setting or C<undef>.
+
+[EXT] The following symbolic constants for SHOWWINDOW are available
+(but not exported) from the Win32 module: SW_HIDE, SW_SHOWNORMAL,
+SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED and SW_SHOWNOACTIVATE.
+
+=item Win32::SetCwd(NEWDIRECTORY)
+
+[CORE] Sets the current active drive and directory. This function does not
+work with UNC paths, since the functionality required to required for
+such a feature is not available under Windows 95.
+
+=item Win32::SetLastError(ERROR)
+
+[CORE] Sets the value of the last error encountered to ERROR. This is
+that value that will be returned by the Win32::GetLastError()
+function.
+
+=item Win32::Sleep(TIME)
+
+[CORE] Pauses for TIME milliseconds. The timeslices are made available
+to other processes and threads.
+
+=item Win32::Spawn(COMMAND, ARGS, PID)
+
+[CORE] Spawns a new process using the supplied COMMAND, passing in
+arguments in the string ARGS. The pid of the new process is stored in
+PID. This function is deprecated. Please use the Win32::Process module
+instead.
+
+=item Win32::UnregisterServer(LIBRARYNAME)
+
+[EXT] Loads the DLL LIBRARYNAME and calls the function
+DllUnregisterServer.
+
+=back
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm b/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
new file mode 100644
index 00000000000..a86682da376
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
@@ -0,0 +1,198 @@
+#---------------------------------------------------------------------
+package Win32::ChangeNotify;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Created: 3 Feb 1998 from the ActiveWare version
+# (c) 1995 Microsoft Corporation. All rights reserved.
+# Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+#
+# Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Version: 1.02 (13-Jun-1999)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Monitor directory for changes
+#---------------------------------------------------------------------
+# 1.04 -Minor changes by Yves Orton to fix the trueness of $subtree (Dec 2002)
+
+$VERSION = '1.05';
+
+use Carp;
+use Win32::IPC 1.00 '/./'; # Import everything
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader Win32::IPC);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ FILE_NOTIFY_CHANGE_ATTRIBUTES
+ FILE_NOTIFY_CHANGE_DIR_NAME
+ FILE_NOTIFY_CHANGE_FILE_NAME
+ FILE_NOTIFY_CHANGE_LAST_WRITE
+ FILE_NOTIFY_CHANGE_SECURITY
+ FILE_NOTIFY_CHANGE_SIZE
+ INFINITE
+);
+@EXPORT_OK = qw(
+ wait_all wait_any
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ if ($constname =~ /^(?:FILE_NOTIFY_CHANGE_|INFINITE)/) {
+ local $! = 0;
+ my $val = constant($constname);
+ croak("$constname is not defined by Win32::ChangeNotify") if $! != 0;
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+ }
+} # end AUTOLOAD
+
+bootstrap Win32::ChangeNotify;
+
+sub new {
+ my ($class,$path,$subtree,$filter) = @_;
+
+ if ($filter =~ /\A[\s|A-Z_]+\Z/i) {
+ $filter = 0;
+ foreach (split(/[\s|]+/, $_[3])) {
+ $filter |= constant("FILE_NOTIFY_CHANGE_" . uc $_);
+ carp "Invalid filter $_" if $!;
+ }
+ }
+ _new($class,$path,$subtree,$filter);
+} # end new
+
+sub Close { &close }
+
+sub FindFirst { $_[0] = Win32::ChangeNotify->_new(@_[1..3]); }
+
+sub FindNext { &reset }
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::ChangeNotify - Monitor events related to files and directories
+
+=head1 SYNOPSIS
+
+ require Win32::ChangeNotify;
+
+ $notify = Win32::ChangeNotify->new($Path,$WatchSubTree,$Events);
+ $notify->wait or warn "Something failed: $!\n";
+ # There has been a change.
+
+=head1 DESCRIPTION
+
+This module allows the user to use a Win32 change notification event
+object from Perl. This allows the Perl program to monitor events
+relating to files and directory trees.
+
+Unfortunately, the Win32 API which implements this feature does not
+provide any indication of I<what> triggered the notification (as far
+as I know). If you're monitoring a directory for file changes, and
+you need to know I<which> file changed, you'll have to find some other
+way of determining that. Depending on exactly what you're trying to
+do, you may be able to check file timestamps to find recently changed
+files. Or, you may need to cache the directory contents somewhere and
+compare the current contents to your cached copy when you receive a
+change notification.
+
+The C<wait> method and C<wait_all> & C<wait_any> functions are
+inherited from the L<"Win32::IPC"> module.
+
+=head2 Methods
+
+=over 4
+
+=item $notify = Win32::ChangeNotify->new($path, $subtree, $filter)
+
+Constructor for a new ChangeNotification object. C<$path> is the
+directory to monitor. If C<$subtree> is true, then all directories
+under C<$path> will be monitored. C<$filter> indicates what events
+should trigger a notification. It should be a string containing any
+of the following flags (separated by whitespace and/or C<|>).
+
+ ATTRIBUTES Any attribute change
+ DIR_NAME Any directory name change
+ FILE_NAME Any file name change (creating/deleting/renaming)
+ LAST_WRITE Any change to a file's last write time
+ SECURITY Any security descriptor change
+ SIZE Any change in a file's size
+
+(C<$filter> can also be an integer composed from the
+C<FILE_NOTIFY_CHANGE_*> constants.)
+
+=item $notify->close
+
+Shut down monitoring. You could just C<undef $notify> instead (but
+C<close> works even if there are other copies of the object). This
+happens automatically when your program exits.
+
+=item $notify->reset
+
+Resets the ChangeNotification object after a change has been detected.
+The object will become signalled again after the next change. (It is
+OK to call this immediately after C<new>, but it is not required.)
+
+=item $notify->wait
+
+See L<"Win32::IPC">. Remember to call C<reset> afterwards if you want
+to continue monitoring.
+
+=back
+
+=head2 Deprecated Functions and Methods
+
+B<Win32::ChangeNotify> still supports the ActiveWare syntax, but its
+use is deprecated.
+
+=over 4
+
+=item FindFirst($Obj,$PathName,$WatchSubTree,$Filter)
+
+Use
+
+ $Obj = Win32::ChangeNotify->new($PathName,$WatchSubTree,$Filter)
+
+instead.
+
+=item $obj->FindNext()
+
+Use C<$obj-E<gt>reset> instead.
+
+=item $obj->Close()
+
+Use C<$obj-E<gt>close> instead.
+
+=back
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+Loosely based on the original module by ActiveWare Internet Corp.,
+F<http://www.ActiveWare.com>
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::ChangeNotify"
+# End:
diff --git a/Master/tlpkg/tlperl/lib/Win32/Client.pl b/Master/tlpkg/tlperl/lib/Win32/Client.pl
new file mode 100644
index 00000000000..6ae585b7c91
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Client.pl
@@ -0,0 +1,63 @@
+use strict;
+use Win32::Pipe;
+
+####
+# You may notice that named pipe names are case INsensitive!
+####
+
+my $PipeName = "\\\\.\\pipe\\TEST this LoNG Named Pipe!";
+
+print "I am falling asleep for few seconds, so that we give time\nFor the server to get up and running.\n";
+sleep(4);
+print "\nOpening a pipe ...\n";
+
+if (my $Pipe = Win32::Pipe->new($PipeName)) {
+ print "\n\nPipe has been opened, writing data to it...\n";
+ print "-------------------------------------------\n";
+ $Pipe->Write("\n" . Win32::Pipe::Credit() . "\n\n");
+ while () {
+ print "\nCommands:\n";
+ print " FILE:xxxxx Dumps the file xxxxx.\n";
+ print " Credit Dumps the credit screen.\n";
+ print " Quit Quits this client (server remains running).\n";
+ print " Exit Exits both client and server.\n";
+ print " -----------------------------------------\n";
+
+ my $In = <STDIN>;
+ chop($In);
+
+ if ((my $File = $In) =~ s/^file:(.*)/$1/i){
+ if (-s $File) {
+ if (open(FILE, "< $File")) {
+ while ($File = <FILE>) {
+ $In .= $File;
+ };
+ close(FILE);
+ }
+ }
+ }
+
+ if ($In =~ /^credit$/i){
+ $In = "\n" . Win32::Pipe::Credit() . "\n\n";
+ }
+
+ unless ($Pipe->Write($In)) {
+ print "Writing to pipe failed.\n";
+ last;
+ }
+
+ if ($In =~ /^(exit|quit)$/i) {
+ print "\nATTENTION: Closing due to user request.\n";
+ last;
+ }
+ }
+ print "Closing...\n";
+ $Pipe->Close();
+}
+else {
+ my($Error, $ErrorText) = Win32::Pipe::Error();
+ print "Error:$Error \"$ErrorText\"\n";
+ sleep(4);
+}
+
+print "Done...\n";
diff --git a/Master/tlpkg/tlperl/lib/Win32/Clipboard.pm b/Master/tlpkg/tlperl/lib/Win32/Clipboard.pm
new file mode 100644
index 00000000000..ba4038a5ade
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Clipboard.pm
@@ -0,0 +1,369 @@
+package Win32::Clipboard;
+#######################################################################
+#
+# Win32::Clipboard - Interaction with the Windows clipboard
+#
+# Version: 0.52
+# Author: Aldo Calpini <dada@perl.it>
+#
+# Modified by: Hideyo Imazu <himazu@gmail.com>
+#
+#######################################################################
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+
+@ISA = qw( Exporter DynaLoader );
+@EXPORT = qw(
+ CF_TEXT
+ CF_BITMAP
+ CF_METAFILEPICT
+ CF_SYLK
+ CF_DIF
+ CF_TIFF
+ CF_OEMTEXT
+ CF_DIB
+ CF_PALETTE
+ CF_PENDATA
+ CF_RIFF
+ CF_WAVE
+ CF_UNICODETEXT
+ CF_ENHMETAFILE
+ CF_HDROP
+ CF_LOCALE
+);
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+#
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ } else {
+ my ($pack, $file, $line) = caller;
+ die "Win32::Clipboard::$constname is not defined, used at $file line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+$VERSION = "0.5201";
+
+#######################################################################
+# FUNCTIONS
+#
+
+sub new {
+ my($class, $value) = @_;
+ my $self = "I'm the Clipboard!";
+ Set($value) if defined($value);
+ return bless(\$self);
+}
+
+sub Version {
+ return $VERSION;
+}
+
+sub Get {
+ if( IsBitmap() ) { return GetBitmap(); }
+ elsif( IsFiles() ) { return GetFiles(); }
+ else { return GetText(); }
+}
+
+sub TIESCALAR {
+ my $class = shift;
+ my $value = shift;
+ Set($value) if defined $value;
+ my $self = "I'm the Clipboard!";
+ return bless \$self, $class;
+}
+
+sub FETCH { Get() }
+sub STORE { shift; Set(@_) }
+
+sub DESTROY {
+ my($self) = @_;
+ undef $self;
+ StopClipboardViewer();
+}
+
+END {
+ StopClipboardViewer();
+}
+
+#######################################################################
+# dynamically load in the Clipboard.pll module.
+#
+
+bootstrap Win32::Clipboard;
+
+#######################################################################
+# a little hack to use the module itself as a class.
+#
+
+sub main::Win32::Clipboard {
+ my($value) = @_;
+ my $self={};
+ my $result = Win32::Clipboard::Set($value) if defined($value);
+ return bless($self, "Win32::Clipboard");
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Win32::Clipboard - Interaction with the Windows clipboard
+
+=head1 SYNOPSIS
+
+ use Win32::Clipboard;
+
+ $CLIP = Win32::Clipboard();
+
+ print "Clipboard contains: ", $CLIP->Get(), "\n";
+
+ $CLIP->Set("some text to copy into the clipboard");
+
+ $CLIP->Empty();
+
+ $CLIP->WaitForChange();
+ print "Clipboard has changed!\n";
+
+
+=head1 DESCRIPTION
+
+This module lets you interact with the Windows clipboard: you can get its content,
+set it, empty it, or let your script sleep until it changes.
+This version supports 3 formats for clipboard data:
+
+=over 4
+
+=item *
+text (C<CF_TEXT>)
+
+The clipboard contains some text; this is the B<only> format you can use to set
+clipboard data; you get it as a single string.
+
+Example:
+
+ $text = Win32::Clipboard::GetText();
+ print $text;
+
+=item *
+bitmap (C<CF_DIB>)
+
+The clipboard contains an image, either a bitmap or a picture copied in the
+clipboard from a graphic application. The data you get is a binary buffer
+ready to be written to a bitmap (BMP format) file.
+
+Example:
+
+ $image = Win32::Clipboard::GetBitmap();
+ open BITMAP, ">some.bmp";
+ binmode BITMAP;
+ print BITMAP $image;
+ close BITMAP;
+
+=item *
+list of files (C<CF_HDROP>)
+
+The clipboard contains files copied or cutted from an Explorer-like
+application; you get a list of filenames.
+
+Example:
+
+ @files = Win32::Clipboard::GetFiles();
+ print join("\n", @files);
+
+=back
+
+=head2 REFERENCE
+
+All the functions can be used either with their full name (eg. B<Win32::Clipboard::Get>)
+or as methods of a C<Win32::Clipboard> object.
+For the syntax, refer to L</SYNOPSIS> above. Note also that you can create a clipboard
+object and set its content at the same time with:
+
+ $CLIP = Win32::Clipboard("blah blah blah");
+
+or with the more common form:
+
+ $CLIP = new Win32::Clipboard("blah blah blah");
+
+If you prefer, you can even tie the Clipboard to a variable like this:
+
+ tie $CLIP, 'Win32::Clipboard';
+
+ print "Clipboard content: $CLIP\n";
+
+ $CLIP = "some text to copy to the clipboard...";
+
+In this case, you can still access other methods using the tied() function:
+
+ tied($CLIP)->Empty;
+ print "got the picture" if tied($CLIP)->IsBitmap;
+
+=over 4
+
+=item Empty()
+
+Empty the clipboard.
+
+=for html <P>
+
+=item EnumFormats()
+
+Returns an array of identifiers describing the format for the data currently in the
+clipboard. Formats can be standard ones (described in the L</CONSTANTS> section) or
+application-defined custom ones. See also IsFormatAvailable().
+
+=for html <P>
+
+=item Get()
+
+Returns the clipboard content; note that the result depends on the nature of
+clipboard data; to ensure that you get only the desired format, you should use
+GetText(), GetBitmap() or GetFiles() instead. Get() is in fact implemented as:
+
+ if( IsBitmap() ) { return GetBitmap(); }
+ elsif( IsFiles() ) { return GetFiles(); }
+ else { return GetText(); }
+
+See also IsBitmap(), IsFiles(), IsText(), EnumFormats() and IsFormatAvailable()
+to check the clipboard format before getting data.
+
+=for html <P>
+
+=item GetAs(FORMAT)
+
+Returns the clipboard content in the desired FORMAT (can be one of the constants
+defined in the L</CONSTANTS> section or a custom format). Note that the only
+meaningful identifiers are C<CF_TEXT>, C<CF_DIB> and C<CF_HDROP>; any other
+format is treated as a string.
+
+=for html <P>
+
+=item GetBitmap()
+
+Returns the clipboard content as an image, or C<undef> on errors.
+
+=for html <P>
+
+=item GetFiles()
+
+Returns the clipboard content as a list of filenames, or C<undef> on errors.
+
+=for html <P>
+
+=item GetFormatName(FORMAT)
+
+Returns the name of the specified custom clipboard format, or C<undef> on errors;
+note that you cannot get the name of the standard formats (described in the
+L</CONSTANTS> section).
+
+=for html <P>
+
+=item GetText()
+
+Returns the clipboard content as a string, or C<undef> on errors.
+
+=for html <P>
+
+=item IsBitmap()
+
+Returns a boolean value indicating if the clipboard contains an image.
+See also GetBitmap().
+
+=for html <P>
+
+=item IsFiles()
+
+Returns a boolean value indicating if the clipboard contains a list of
+files. See also GetFiles().
+
+=for html <P>
+
+=item IsFormatAvailable(FORMAT)
+
+Checks if the clipboard data matches the specified FORMAT (one of the constants
+described in the L</CONSTANTS> section); returns zero if the data does not match,
+a nonzero value if it matches.
+
+=for html <P>
+
+=item IsText()
+
+Returns a boolean value indicating if the clipboard contains text.
+See also GetText().
+
+=for html <P>
+
+=item Set(VALUE)
+
+Set the clipboard content to the specified string.
+
+=for html <P>
+
+=item WaitForChange([TIMEOUT])
+
+This function halts the script until the clipboard content changes. If you specify
+a C<TIMEOUT> value (in milliseconds), the function will return when this timeout
+expires, even if the clipboard hasn't changed. If no value is given, it will wait
+indefinitely. Returns 1 if the clipboard has changed, C<undef> on errors.
+
+=back
+
+=head2 CONSTANTS
+
+These constants are the standard clipboard formats recognized by Win32::Clipboard:
+
+ CF_TEXT 1
+ CF_DIB 8
+ CF_HDROP 15
+
+The following formats are B<not recognized> by Win32::Clipboard; they are,
+however, exported constants and can eventually be used with the EnumFormats(),
+IsFormatAvailable() and GetAs() functions:
+
+ CF_BITMAP 2
+ CF_METAFILEPICT 3
+ CF_SYLK 4
+ CF_DIF 5
+ CF_TIFF 6
+ CF_OEMTEXT 7
+ CF_PALETTE 9
+ CF_PENDATA 10
+ CF_RIFF 11
+ CF_WAVE 12
+ CF_UNICODETEXT 13
+ CF_ENHMETAFILE 14
+ CF_LOCALE 16
+
+=head1 AUTHOR
+
+This version was released by Hideyo Imazu <F<himazu@gmail.com>>.
+
+Aldo Calpini <F<dada@perl.it>> was the former maintainer.
+
+Original XS porting by Gurusamy Sarathy <F<gsar@activestate.com>>.
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/Win32/Console.pm b/Master/tlpkg/tlperl/lib/Win32/Console.pm
new file mode 100644
index 00000000000..1e3876a6a33
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Console.pm
@@ -0,0 +1,1463 @@
+#######################################################################
+#
+# Win32::Console - Win32 Console and Character Mode Functions
+#
+#######################################################################
+
+package Win32::Console;
+
+require Exporter;
+require DynaLoader;
+
+$VERSION = "0.07";
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT = qw(
+ BACKGROUND_BLUE
+ BACKGROUND_GREEN
+ BACKGROUND_INTENSITY
+ BACKGROUND_RED
+ CAPSLOCK_ON
+ CONSOLE_TEXTMODE_BUFFER
+ CTRL_BREAK_EVENT
+ CTRL_C_EVENT
+ ENABLE_ECHO_INPUT
+ ENABLE_LINE_INPUT
+ ENABLE_MOUSE_INPUT
+ ENABLE_PROCESSED_INPUT
+ ENABLE_PROCESSED_OUTPUT
+ ENABLE_WINDOW_INPUT
+ ENABLE_WRAP_AT_EOL_OUTPUT
+ ENHANCED_KEY
+ FILE_SHARE_READ
+ FILE_SHARE_WRITE
+ FOREGROUND_BLUE
+ FOREGROUND_GREEN
+ FOREGROUND_INTENSITY
+ FOREGROUND_RED
+ LEFT_ALT_PRESSED
+ LEFT_CTRL_PRESSED
+ NUMLOCK_ON
+ GENERIC_READ
+ GENERIC_WRITE
+ RIGHT_ALT_PRESSED
+ RIGHT_CTRL_PRESSED
+ SCROLLLOCK_ON
+ SHIFT_PRESSED
+ STD_INPUT_HANDLE
+ STD_OUTPUT_HANDLE
+ STD_ERROR_HANDLE
+ $FG_BLACK
+ $FG_GRAY
+ $FG_BLUE
+ $FG_LIGHTBLUE
+ $FG_RED
+ $FG_LIGHTRED
+ $FG_GREEN
+ $FG_LIGHTGREEN
+ $FG_MAGENTA
+ $FG_LIGHTMAGENTA
+ $FG_CYAN
+ $FG_LIGHTCYAN
+ $FG_BROWN
+ $FG_YELLOW
+ $FG_LIGHTGRAY
+ $FG_WHITE
+ $BG_BLACK
+ $BG_GRAY
+ $BG_BLUE
+ $BG_LIGHTBLUE
+ $BG_RED
+ $BG_LIGHTRED
+ $BG_GREEN
+ $BG_LIGHTGREEN
+ $BG_MAGENTA
+ $BG_LIGHTMAGENTA
+ $BG_CYAN
+ $BG_LIGHTCYAN
+ $BG_BROWN
+ $BG_YELLOW
+ $BG_LIGHTGRAY
+ $BG_WHITE
+ $ATTR_NORMAL
+ $ATTR_INVERSE
+ @CONSOLE_COLORS
+);
+
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+#
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+# if ($! =~ /Invalid/) {
+# $AutoLoader::AUTOLOAD = $AUTOLOAD;
+# goto &AutoLoader::AUTOLOAD;
+# } else {
+ ($pack, $file, $line) = caller; undef $pack;
+ die "Symbol Win32::Console::$constname not defined, used at $file line $line.";
+# }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+
+# %HandlerRoutineStack = ();
+# $HandlerRoutineRegistered = 0;
+
+#######################################################################
+# PUBLIC METHODS
+#
+
+#========
+sub new {
+#========
+ my($class, $param1, $param2) = @_;
+
+ my $self = {};
+
+ if (defined($param1)
+ and ($param1 == constant("STD_INPUT_HANDLE", 0)
+ or $param1 == constant("STD_OUTPUT_HANDLE", 0)
+ or $param1 == constant("STD_ERROR_HANDLE", 0)))
+ {
+ $self->{'handle'} = _GetStdHandle($param1);
+ }
+ else {
+ $param1 = constant("GENERIC_READ", 0) | constant("GENERIC_WRITE", 0) unless $param1;
+ $param2 = constant("FILE_SHARE_READ", 0) | constant("FILE_SHARE_WRITE", 0) unless $param2;
+ $self->{'handle'} = _CreateConsoleScreenBuffer($param1, $param2,
+ constant("CONSOLE_TEXTMODE_BUFFER", 0));
+ }
+ bless $self, $class;
+ return $self;
+}
+
+#============
+sub Display {
+#============
+ my($self) = @_;
+ return undef unless ref($self);
+ return _SetConsoleActiveScreenBuffer($self->{'handle'});
+}
+
+#===========
+sub Select {
+#===========
+ my($self, $type) = @_;
+ return undef unless ref($self);
+ return _SetStdHandle($type, $self->{'handle'});
+}
+
+#===========
+sub SetIcon {
+#===========
+ my($self, $icon) = @_;
+ $icon = $self unless ref($self);
+ return _SetConsoleIcon($icon);
+}
+
+#==========
+sub Title {
+#==========
+ my($self, $title) = @_;
+ $title = $self unless ref($self);
+
+ if (defined($title)) {
+ return _SetConsoleTitle($title);
+ }
+ else {
+ return _GetConsoleTitle();
+ }
+}
+
+#==============
+sub WriteChar {
+#==============
+ my($self, $text, $col, $row) = @_;
+ return undef unless ref($self);
+ return _WriteConsoleOutputCharacter($self->{'handle'},$text,$col,$row);
+}
+
+#=============
+sub ReadChar {
+#=============
+ my($self, $size, $col, $row) = @_;
+ return undef unless ref($self);
+
+ my $buffer = (" " x $size);
+ if (_ReadConsoleOutputCharacter($self->{'handle'}, $buffer, $size, $col, $row)) {
+ return $buffer;
+ }
+ else {
+ return undef;
+ }
+}
+
+#==============
+sub WriteAttr {
+#==============
+ my($self, $attr, $col, $row) = @_;
+ return undef unless ref($self);
+ return _WriteConsoleOutputAttribute($self->{'handle'}, $attr, $col, $row);
+}
+
+#=============
+sub ReadAttr {
+#=============
+ my($self, $size, $col, $row) = @_;
+ return undef unless ref($self);
+ return _ReadConsoleOutputAttribute($self->{'handle'}, $size, $col, $row);
+}
+
+#==========
+sub Write {
+#==========
+ my($self,$string) = @_;
+ return undef unless ref($self);
+ return _WriteConsole($self->{'handle'}, $string);
+}
+
+#=============
+sub ReadRect {
+#=============
+ my($self, $left, $top, $right, $bottom) = @_;
+ return undef unless ref($self);
+
+ my $col = $right - $left + 1;
+ my $row = $bottom - $top + 1;
+
+ my $buffer = (" " x ($col*$row*4));
+ if (_ReadConsoleOutput($self->{'handle'}, $buffer,
+ $col, $row, 0, 0,
+ $left, $top, $right, $bottom))
+ {
+ return $buffer;
+ }
+ else {
+ return undef;
+ }
+}
+
+#==============
+sub WriteRect {
+#==============
+ my($self, $buffer, $left, $top, $right, $bottom) = @_;
+ return undef unless ref($self);
+
+ my $col = $right - $left + 1;
+ my $row = $bottom - $top + 1;
+
+ return _WriteConsoleOutput($self->{'handle'}, $buffer,
+ $col, $row, 0, 0,
+ $left, $top, $right, $bottom);
+}
+
+#===========
+sub Scroll {
+#===========
+ my($self, $left1, $top1, $right1, $bottom1,
+ $col, $row, $char, $attr,
+ $left2, $top2, $right2, $bottom2) = @_;
+ return undef unless ref($self);
+
+ return _ScrollConsoleScreenBuffer($self->{'handle'},
+ $left1, $top1, $right1, $bottom1,
+ $col, $row, $char, $attr,
+ $left2, $top2, $right2, $bottom2);
+}
+
+#==============
+sub MaxWindow {
+#==============
+ my($self, $flag) = @_;
+ return undef unless ref($self);
+
+ if (not defined($flag)) {
+ my @info = _GetConsoleScreenBufferInfo($self->{'handle'});
+ return $info[9], $info[10];
+ }
+ else {
+ return _GetLargestConsoleWindowSize($self->{'handle'});
+ }
+}
+
+#=========
+sub Info {
+#=========
+ my($self) = @_;
+ return undef unless ref($self);
+ return _GetConsoleScreenBufferInfo($self->{'handle'});
+}
+
+#===========
+sub Window {
+#===========
+ my($self, $flag, $left, $top, $right, $bottom) = @_;
+ return undef unless ref($self);
+
+ if (not defined($flag)) {
+ my @info = _GetConsoleScreenBufferInfo($self->{'handle'});
+ return $info[5], $info[6], $info[7], $info[8];
+ }
+ else {
+ return _SetConsoleWindowInfo($self->{'handle'}, $flag, $left, $top, $right, $bottom);
+ }
+}
+
+#==============
+sub GetEvents {
+#==============
+ my($self) = @_;
+ return undef unless ref($self);
+ return _GetNumberOfConsoleInputEvents($self->{'handle'});
+}
+
+#==========
+sub Flush {
+#==========
+ my($self) = @_;
+ return undef unless ref($self);
+ return _FlushConsoleInputBuffer($self->{'handle'});
+}
+
+#==============
+sub InputChar {
+#==============
+ my($self, $number) = @_;
+ return undef unless ref($self);
+
+ $number = 1 unless defined($number);
+
+ my $buffer = (" " x $number);
+ if (_ReadConsole($self->{'handle'}, $buffer, $number) == $number) {
+ return $buffer;
+ }
+ else {
+ return undef;
+ }
+}
+
+#==========
+sub Input {
+#==========
+ my($self) = @_;
+ return undef unless ref($self);
+ return _ReadConsoleInput($self->{'handle'});
+}
+
+#==============
+sub PeekInput {
+#==============
+ my($self) = @_;
+ return undef unless ref($self);
+ return _PeekConsoleInput($self->{'handle'});
+}
+
+#===============
+sub WriteInput {
+#===============
+ my($self) = shift;
+ return undef unless ref($self);
+ return _WriteConsoleInput($self->{'handle'}, @_);
+}
+
+#=========
+sub Mode {
+#=========
+ my($self, $mode) = @_;
+ return undef unless ref($self);
+ if (defined($mode)) {
+ return _SetConsoleMode($self->{'handle'}, $mode);
+ }
+ else {
+ return _GetConsoleMode($self->{'handle'});
+ }
+}
+
+#========
+sub Cls {
+#========
+ my($self, $attr) = @_;
+ return undef unless ref($self);
+
+ $attr = $ATTR_NORMAL unless defined($attr);
+
+ my ($x, $y) = $self->Size();
+ my($left, $top, $right ,$bottom) = $self->Window();
+ my $vx = $right - $left;
+ my $vy = $bottom - $top;
+ $self->FillChar(" ", $x*$y, 0, 0);
+ $self->FillAttr($attr, $x*$y, 0, 0);
+ $self->Cursor(0, 0);
+ $self->Window(1, 0, 0, $vx, $vy);
+}
+
+#=========
+sub Attr {
+#=========
+ my($self, $attr) = @_;
+ return undef unless ref($self);
+
+ if (not defined($attr)) {
+ return (_GetConsoleScreenBufferInfo($self->{'handle'}))[4];
+ }
+ else {
+ return _SetConsoleTextAttribute($self->{'handle'}, $attr);
+ }
+}
+
+#===========
+sub Cursor {
+#===========
+ my($self, $col, $row, $size, $visi) = @_;
+ return undef unless ref($self);
+
+ my $curr_row = 0;
+ my $curr_col = 0;
+ my $curr_size = 0;
+ my $curr_visi = 0;
+ my $return = 0;
+ my $discard = 0;
+
+
+ if (defined($col)) {
+ $row = -1 if not defined($row);
+ if ($col == -1 or $row == -1) {
+ ($discard, $discard, $curr_col, $curr_row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ $col=$curr_col if $col==-1;
+ $row=$curr_row if $row==-1;
+ }
+ $return += _SetConsoleCursorPosition($self->{'handle'}, $col, $row);
+ if (defined($size) and defined($visi)) {
+ if ($size == -1 or $visi == -1) {
+ ($curr_size, $curr_visi) = _GetConsoleCursorInfo($self->{'handle'});
+ $size = $curr_size if $size == -1;
+ $visi = $curr_visi if $visi == -1;
+ }
+ $size = 1 if $size < 1;
+ $size = 99 if $size > 99;
+ $return += _SetConsoleCursorInfo($self->{'handle'}, $size, $visi);
+ }
+ return $return;
+ }
+ else {
+ ($discard, $discard, $curr_col, $curr_row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ ($curr_size, $curr_visi) = _GetConsoleCursorInfo($self->{'handle'});
+ return ($curr_col, $curr_row, $curr_size, $curr_visi);
+ }
+}
+
+#=========
+sub Size {
+#=========
+ my($self, $col, $row) = @_;
+ return undef unless ref($self);
+
+ if (not defined($col)) {
+ ($col, $row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ return ($col, $row);
+ }
+ else {
+ $row = -1 if not defined($row);
+ if ($col == -1 or $row == -1) {
+ ($curr_col, $curr_row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ $col=$curr_col if $col==-1;
+ $row=$curr_row if $row==-1;
+ }
+ return _SetConsoleScreenBufferSize($self->{'handle'}, $col, $row);
+ }
+}
+
+#=============
+sub FillAttr {
+#=============
+ my($self, $attr, $number, $col, $row) = @_;
+ return undef unless ref($self);
+
+ $number = 1 unless $number;
+
+ if (!defined($col) or !defined($row) or $col == -1 or $row == -1) {
+ ($discard, $discard,
+ $curr_col, $curr_row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ $col = $curr_col if !defined($col) or $col == -1;
+ $row = $curr_row if !defined($row) or $row == -1;
+ }
+ return _FillConsoleOutputAttribute($self->{'handle'}, $attr, $number, $col, $row);
+}
+
+#=============
+sub FillChar {
+#=============
+ my($self, $char, $number, $col, $row) = @_;
+ return undef unless ref($self);
+
+ if (!defined($col) or !defined($row) or $col == -1 or $row == -1) {
+ ($discard, $discard,
+ $curr_col, $curr_row) = _GetConsoleScreenBufferInfo($self->{'handle'});
+ $col = $curr_col if !defined($col) or $col == -1;
+ $row = $curr_row if !defined($row) or $row == -1;
+ }
+ return _FillConsoleOutputCharacter($self->{'handle'}, $char, $number, $col, $row);
+}
+
+#============
+sub InputCP {
+#============
+ my($self, $codepage) = @_;
+ $codepage = $self if (defined($self) and ref($self) ne "Win32::Console");
+ if (defined($codepage)) {
+ return _SetConsoleCP($codepage);
+ }
+ else {
+ return _GetConsoleCP();
+ }
+}
+
+#=============
+sub OutputCP {
+#=============
+ my($self, $codepage) = @_;
+ $codepage = $self if (defined($self) and ref($self) ne "Win32::Console");
+ if (defined($codepage)) {
+ return _SetConsoleOutputCP($codepage);
+ }
+ else {
+ return _GetConsoleOutputCP();
+ }
+}
+
+#======================
+sub GenerateCtrlEvent {
+#======================
+ my($self, $type, $pid) = @_;
+ $type = constant("CTRL_C_EVENT", 0) unless defined($type);
+ $pid = 0 unless defined($pid);
+ return _GenerateConsoleCtrlEvent($type, $pid);
+}
+
+#===================
+#sub SetCtrlHandler {
+#===================
+# my($name, $add) = @_;
+# $add = 1 unless defined($add);
+# my @nor = keys(%HandlerRoutineStack);
+# if ($add == 0) {
+# foreach $key (@nor) {
+# delete $HandlerRoutineStack{$key}, last if $HandlerRoutineStack{$key}==$name;
+# }
+# $HandlerRoutineRegistered--;
+# } else {
+# if ($#nor == -1) {
+# my $r = _SetConsoleCtrlHandler();
+# if (!$r) {
+# print "WARNING: SetConsoleCtrlHandler failed...\n";
+# }
+# }
+# $HandlerRoutineRegistered++;
+# $HandlerRoutineStack{$HandlerRoutineRegistered} = $name;
+# }
+#}
+
+#===================
+sub get_Win32_IPC_HANDLE { # So Win32::IPC can wait on a console handle
+#===================
+ $_[0]->{'handle'};
+}
+
+########################################################################
+# PRIVATE METHODS
+#
+
+#================
+#sub CtrlHandler {
+#================
+# my($ctrltype) = @_;
+# my $routine;
+# my $result = 0;
+# CALLEM: foreach $routine (sort { $b <=> $a } keys %HandlerRoutineStack) {
+# #print "CtrlHandler: calling $HandlerRoutineStack{$routine}($ctrltype)\n";
+# $result = &{"main::".$HandlerRoutineStack{$routine}}($ctrltype);
+# last CALLEM if $result;
+# }
+# return $result;
+#}
+
+#============
+sub DESTROY {
+#============
+ my($self) = @_;
+ _CloseHandle($self->{'handle'});
+}
+
+#######################################################################
+# dynamically load in the Console.pll module.
+#
+
+bootstrap Win32::Console;
+
+#######################################################################
+# ADDITIONAL CONSTANTS EXPORTED IN THE MAIN NAMESPACE
+#
+
+$FG_BLACK = 0;
+$FG_GRAY = constant("FOREGROUND_INTENSITY",0);
+$FG_BLUE = constant("FOREGROUND_BLUE",0);
+$FG_LIGHTBLUE = constant("FOREGROUND_BLUE",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_RED = constant("FOREGROUND_RED",0);
+$FG_LIGHTRED = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_GREEN = constant("FOREGROUND_GREEN",0);
+$FG_LIGHTGREEN = constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_MAGENTA = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_BLUE",0);
+$FG_LIGHTMAGENTA = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_BLUE",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_CYAN = constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_BLUE",0);
+$FG_LIGHTCYAN = constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_BLUE",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_BROWN = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_GREEN",0);
+$FG_YELLOW = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_INTENSITY",0);
+$FG_LIGHTGRAY = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_BLUE",0);
+$FG_WHITE = constant("FOREGROUND_RED",0)|
+ constant("FOREGROUND_GREEN",0)|
+ constant("FOREGROUND_BLUE",0)|
+ constant("FOREGROUND_INTENSITY",0);
+
+$BG_BLACK = 0;
+$BG_GRAY = constant("BACKGROUND_INTENSITY",0);
+$BG_BLUE = constant("BACKGROUND_BLUE",0);
+$BG_LIGHTBLUE = constant("BACKGROUND_BLUE",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_RED = constant("BACKGROUND_RED",0);
+$BG_LIGHTRED = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_GREEN = constant("BACKGROUND_GREEN",0);
+$BG_LIGHTGREEN = constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_MAGENTA = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_BLUE",0);
+$BG_LIGHTMAGENTA = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_BLUE",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_CYAN = constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_BLUE",0);
+$BG_LIGHTCYAN = constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_BLUE",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_BROWN = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_GREEN",0);
+$BG_YELLOW = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_INTENSITY",0);
+$BG_LIGHTGRAY = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_BLUE",0);
+$BG_WHITE = constant("BACKGROUND_RED",0)|
+ constant("BACKGROUND_GREEN",0)|
+ constant("BACKGROUND_BLUE",0)|
+ constant("BACKGROUND_INTENSITY",0);
+
+$ATTR_NORMAL = $FG_LIGHTGRAY|$BG_BLACK;
+$ATTR_INVERSE = $FG_BLACK|$BG_LIGHTGRAY;
+
+for my $fg ($FG_BLACK, $FG_GRAY, $FG_BLUE, $FG_GREEN,
+ $FG_CYAN, $FG_RED, $FG_MAGENTA, $FG_BROWN,
+ $FG_LIGHTBLUE, $FG_LIGHTGREEN, $FG_LIGHTCYAN,
+ $FG_LIGHTRED, $FG_LIGHTMAGENTA, $FG_YELLOW,
+ $FG_LIGHTGRAY, $FG_WHITE)
+{
+ for my $bg ($BG_BLACK, $BG_GRAY, $BG_BLUE, $BG_GREEN,
+ $BG_CYAN, $BG_RED, $BG_MAGENTA, $BG_BROWN,
+ $BG_LIGHTBLUE, $BG_LIGHTGREEN, $BG_LIGHTCYAN,
+ $BG_LIGHTRED, $BG_LIGHTMAGENTA, $BG_YELLOW,
+ $BG_LIGHTGRAY, $BG_WHITE)
+ {
+ push(@CONSOLE_COLORS, $fg|$bg);
+ }
+}
+
+# Preloaded methods go here.
+
+#Currently Autoloading is not implemented in Perl for win32
+# Autoload methods go after __END__, and are processed by the autosplit program.
+
+1;
+
+__END__
+
+=head1 NAME
+
+Win32::Console - Win32 Console and Character Mode Functions
+
+
+=head1 DESCRIPTION
+
+This module implements the Win32 console and character mode
+functions. They give you full control on the console input and output,
+including: support of off-screen console buffers (eg. multiple screen
+pages)
+
+=over
+
+=item *
+
+reading and writing of characters, attributes and whole portions of
+the screen
+
+=item *
+
+complete processing of keyboard and mouse events
+
+=item *
+
+some very funny additional features :)
+
+=back
+
+Those functions should also make possible a port of the Unix's curses
+library; if there is anyone interested (and/or willing to contribute)
+to this project, e-mail me. Thank you.
+
+
+=head1 REFERENCE
+
+
+=head2 Methods
+
+=over
+
+=item Alloc
+
+Allocates a new console for the process. Returns C<undef> on errors, a
+nonzero value on success. A process cannot be associated with more
+than one console, so this method will fail if there is already an
+allocated console. Use Free to detach the process from the console,
+and then call Alloc to create a new console. See also: C<Free>
+
+Example:
+
+ $CONSOLE->Alloc();
+
+=item Attr [attr]
+
+Gets or sets the current console attribute. This attribute is used by
+the Write method.
+
+Example:
+
+ $attr = $CONSOLE->Attr();
+ $CONSOLE->Attr($FG_YELLOW | $BG_BLUE);
+
+=item Close
+
+Closes a shortcut object. Note that it is not "strictly" required to
+close the objects you created, since the Win32::Shortcut objects are
+automatically closed when the program ends (or when you elsehow
+destroy such an object).
+
+Example:
+
+ $LINK->Close();
+
+=item Cls [attr]
+
+Clear the console, with the specified I<attr> if given, or using
+ATTR_NORMAL otherwise.
+
+Example:
+
+ $CONSOLE->Cls();
+ $CONSOLE->Cls($FG_WHITE | $BG_GREEN);
+
+=item Cursor [x, y, size, visible]
+
+Gets or sets cursor position and appearance. Returns C<undef> on
+errors, or a 4-element list containing: I<x>, I<y>, I<size>,
+I<visible>. I<x> and I<y> are the current cursor position; ...
+
+Example:
+
+ ($x, $y, $size, $visible) = $CONSOLE->Cursor();
+
+ # Get position only
+ ($x, $y) = $CONSOLE->Cursor();
+
+ $CONSOLE->Cursor(40, 13, 50, 1);
+
+ # Set position only
+ $CONSOLE->Cursor(40, 13);
+
+ # Set size and visibility without affecting position
+ $CONSOLE->Cursor(-1, -1, 50, 1);
+
+=item Display
+
+Displays the specified console on the screen. Returns C<undef> on errors,
+a nonzero value on success.
+
+Example:
+
+ $CONSOLE->Display();
+
+=item FillAttr [attribute, number, col, row]
+
+Fills the specified number of consecutive attributes, beginning at
+I<col>, I<row>, with the value specified in I<attribute>. Returns the
+number of attributes filled, or C<undef> on errors. See also:
+C<FillChar>.
+
+Example:
+
+ $CONSOLE->FillAttr($FG_BLACK | $BG_BLACK, 80*25, 0, 0);
+
+=item FillChar char, number, col, row
+
+Fills the specified number of consecutive characters, beginning at
+I<col>, I<row>, with the character specified in I<char>. Returns the
+number of characters filled, or C<undef> on errors. See also:
+C<FillAttr>.
+
+Example:
+
+ $CONSOLE->FillChar("X", 80*25, 0, 0);
+
+=item Flush
+
+Flushes the console input buffer. All the events in the buffer are
+discarded. Returns C<undef> on errors, a nonzero value on success.
+
+Example:
+
+ $CONSOLE->Flush();
+
+=item Free
+
+Detaches the process from the console. Returns C<undef> on errors, a
+nonzero value on success. See also: C<Alloc>.
+
+Example:
+
+ $CONSOLE->Free();
+
+=item GenerateCtrlEvent [type, processgroup]
+
+Sends a break signal of the specified I<type> to the specified
+I<processgroup>. I<type> can be one of the following constants:
+
+ CTRL_BREAK_EVENT
+ CTRL_C_EVENT
+
+they signal, respectively, the pressing of Control + Break and of
+Control + C; if not specified, it defaults to CTRL_C_EVENT.
+I<processgroup> is the pid of a process sharing the same console. If
+omitted, it defaults to 0 (the current process), which is also the
+only meaningful value that you can pass to this function. Returns
+C<undef> on errors, a nonzero value on success.
+
+Example:
+
+ # break this script now
+ $CONSOLE->GenerateCtrlEvent();
+
+=item GetEvents
+
+Returns the number of unread input events in the console's input
+buffer, or C<undef> on errors. See also: C<Input>, C<InputChar>,
+C<PeekInput>, C<WriteInput>.
+
+Example:
+
+ $events = $CONSOLE->GetEvents();
+
+=item Info
+
+Returns an array of informations about the console (or C<undef> on
+errors), which contains:
+
+=over
+
+=item *
+
+columns (X size) of the console buffer.
+
+=item *
+
+rows (Y size) of the console buffer.
+
+=item *
+
+current column (X position) of the cursor.
+
+=item *
+
+current row (Y position) of the cursor.
+
+=item *
+
+current attribute used for C<Write>.
+
+=item *
+
+left column (X of the starting point) of the current console window.
+
+=item *
+
+top row (Y of the starting point) of the current console window.
+
+=item *
+
+right column (X of the final point) of the current console window.
+
+=item *
+
+bottom row (Y of the final point) of the current console window.
+
+=item *
+
+maximum number of columns for the console window, given the current
+buffer size, font and the screen size.
+
+=item *
+
+maximum number of rows for the console window, given the current
+buffer size, font and the screen size.
+
+=back
+
+See also: C<Attr>, C<Cursor>, C<Size>, C<Window>, C<MaxWindow>.
+
+Example:
+
+ @info = $CONSOLE->Info();
+ print "Cursor at $info[3], $info[4].\n";
+
+=item Input
+
+Reads an event from the input buffer. Returns a list of values, which
+depending on the event's nature are:
+
+=over
+
+=item keyboard event
+
+The list will contain:
+
+=over
+
+=item *
+
+event type: 1 for keyboard
+
+=item *
+
+key down: TRUE if the key is being pressed, FALSE if the key is being released
+
+=item *
+
+repeat count: the number of times the key is being held down
+
+=item *
+
+virtual keycode: the virtual key code of the key
+
+=item *
+
+virtual scancode: the virtual scan code of the key
+
+=item *
+
+char: the ASCII code of the character (if the key is a character key, 0 otherwise)
+
+=item *
+
+control key state: the state of the control keys (SHIFTs, CTRLs, ALTs, etc.)
+
+=back
+
+=item mouse event
+
+The list will contain:
+
+=over
+
+=item *
+
+event type: 2 for mouse
+
+=item *
+
+mouse pos. X: X coordinate (column) of the mouse location
+
+=item *
+
+mouse pos. Y: Y coordinate (row) of the mouse location
+
+=item *
+
+button state: the mouse button(s) which are pressed
+
+=item *
+
+control key state: the state of the control keys (SHIFTs, CTRLs, ALTs, etc.)
+
+=item *
+
+event flags: the type of the mouse event
+
+=back
+
+=back
+
+This method will return C<undef> on errors. Note that the events
+returned are depending on the input C<Mode> of the console; for example,
+mouse events are not intercepted unless ENABLE_MOUSE_INPUT is
+specified. See also: C<GetEvents>, C<InputChar>, C<Mode>,
+C<PeekInput>, C<WriteInput>.
+
+Example:
+
+ @event = $CONSOLE->Input();
+
+=item InputChar number
+
+Reads and returns I<number> characters from the console input buffer,
+or C<undef> on errors. See also: C<Input>, C<Mode>.
+
+Example:
+
+ $key = $CONSOLE->InputChar(1);
+
+=item InputCP [codepage]
+
+Gets or sets the input code page used by the console. Note that this
+doesn't apply to a console object, but to the standard input
+console. This attribute is used by the Write method. See also:
+C<OutputCP>.
+
+Example:
+
+ $codepage = $CONSOLE->InputCP();
+ $CONSOLE->InputCP(437);
+
+ # you may want to use the non-instanciated form to avoid confuzion :)
+ $codepage = Win32::Console::InputCP();
+ Win32::Console::InputCP(437);
+
+=item MaxWindow
+
+Returns the size of the largest possible console window, based on the
+current font and the size of the display. The result is C<undef> on
+errors, otherwise a 2-element list containing col, row.
+
+Example:
+
+ ($maxCol, $maxRow) = $CONSOLE->MaxWindow();
+
+=item Mode [flags]
+
+Gets or sets the input or output mode of a console. I<flags> can be a
+combination of the following constants:
+
+ ENABLE_LINE_INPUT
+ ENABLE_ECHO_INPUT
+ ENABLE_PROCESSED_INPUT
+ ENABLE_WINDOW_INPUT
+ ENABLE_MOUSE_INPUT
+ ENABLE_PROCESSED_OUTPUT
+ ENABLE_WRAP_AT_EOL_OUTPUT
+
+For more informations on the meaning of those flags, please refer to
+the L<"Microsoft's Documentation">.
+
+Example:
+
+ $mode = $CONSOLE->Mode();
+ $CONSOLE->Mode(ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_INPUT);
+
+=item MouseButtons
+
+Returns the number of the buttons on your mouse, or C<undef> on errors.
+
+Example:
+
+ print "Your mouse has ", $CONSOLE->MouseButtons(), " buttons.\n";
+
+=item new Win32::Console standard_handle
+
+=item new Win32::Console [accessmode, sharemode]
+
+Creates a new console object. The first form creates a handle to a
+standard channel, I<standard_handle> can be one of the following:
+
+ STD_OUTPUT_HANDLE
+ STD_ERROR_HANDLE
+ STD_INPUT_HANDLE
+
+The second form, instead, creates a console screen buffer in memory,
+which you can access for reading and writing as a normal console, and
+then redirect on the standard output (the screen) with C<Display>. In
+this case, you can specify one or both of the following values for
+I<accessmode>:
+
+ GENERIC_READ
+ GENERIC_WRITE
+
+which are the permissions you will have on the created buffer, and one
+or both of the following values for I<sharemode>:
+
+ FILE_SHARE_READ
+ FILE_SHARE_WRITE
+
+which affect the way the console can be shared. If you don't specify
+any of those parameters, all 4 flags will be used.
+
+Example:
+
+ $STDOUT = new Win32::Console(STD_OUTPUT_HANDLE);
+ $STDERR = new Win32::Console(STD_ERROR_HANDLE);
+ $STDIN = new Win32::Console(STD_INPUT_HANDLE);
+
+ $BUFFER = new Win32::Console();
+ $BUFFER = new Win32::Console(GENERIC_READ | GENERIC_WRITE);
+
+=item OutputCP [codepage]
+
+Gets or sets the output code page used by the console. Note that this
+doesn't apply to a console object, but to the standard output console.
+See also: C<InputCP>.
+
+Example:
+
+ $codepage = $CONSOLE->OutputCP();
+ $CONSOLE->OutputCP(437);
+
+ # you may want to use the non-instanciated form to avoid confuzion :)
+ $codepage = Win32::Console::OutputCP();
+ Win32::Console::OutputCP(437);
+
+=item PeekInput
+
+Does exactly the same as C<Input>, except that the event read is not
+removed from the input buffer. See also: C<GetEvents>, C<Input>,
+C<InputChar>, C<Mode>, C<WriteInput>.
+
+Example:
+
+ @event = $CONSOLE->PeekInput();
+
+=item ReadAttr [number, col, row]
+
+Reads the specified I<number> of consecutive attributes, beginning at
+I<col>, I<row>, from the console. Returns the attributes read (a
+variable containing one character for each attribute), or C<undef> on
+errors. You can then pass the returned variable to C<WriteAttr> to
+restore the saved attributes on screen. See also: C<ReadChar>,
+C<ReadRect>.
+
+Example:
+
+ $colors = $CONSOLE->ReadAttr(80*25, 0, 0);
+
+=item ReadChar [number, col, row]
+
+Reads the specified I<number> of consecutive characters, beginning at
+I<col>, I<row>, from the console. Returns a string containing the
+characters read, or C<undef> on errors. You can then pass the
+returned variable to C<WriteChar> to restore the saved characters on
+screen. See also: C<ReadAttr>, C<ReadRect>.
+
+Example:
+
+ $chars = $CONSOLE->ReadChar(80*25, 0, 0);
+
+=item ReadRect left, top, right, bottom
+
+Reads the content (characters and attributes) of the rectangle
+specified by I<left>, I<top>, I<right>, I<bottom> from the console.
+Returns a string containing the rectangle read, or C<undef> on errors.
+You can then pass the returned variable to C<WriteRect> to restore the
+saved rectangle on screen (or on another console). See also:
+C<ReadAttr>, C<ReadChar>.
+
+Example:
+
+ $rect = $CONSOLE->ReadRect(0, 0, 80, 25);
+
+=item Scroll left, top, right, bottom, col, row, char, attr,
+ [cleft, ctop, cright, cbottom]
+
+Moves a block of data in a console buffer; the block is identified by
+I<left>, I<top>, I<right>, I<bottom>, while I<row>, I<col> identify
+the new location of the block. The cells left empty as a result of
+the move are filled with the character I<char> and attribute I<attr>.
+Optionally you can specify a clipping region with I<cleft>, I<ctop>,
+I<cright>, I<cbottom>, so that the content of the console outside this
+rectangle are unchanged. Returns C<undef> on errors, a nonzero value
+on success.
+
+Example:
+
+ # scrolls the screen 10 lines down, filling with black spaces
+ $CONSOLE->Scroll(0, 0, 80, 25, 0, 10, " ", $FG_BLACK | $BG_BLACK);
+
+=item Select standard_handle
+
+Redirects a standard handle to the specified console.
+I<standard_handle> can have one of the following values:
+
+ STD_INPUT_HANDLE
+ STD_OUTPUT_HANDLE
+ STD_ERROR_HANDLE
+
+Returns C<undef> on errors, a nonzero value on success.
+
+Example:
+
+ $CONSOLE->Select(STD_OUTPUT_HANDLE);
+
+=item SetIcon icon_file
+
+Sets the icon in the title bar of the current console window.
+
+Example:
+
+ $CONSOLE->SetIcon("C:/My/Path/To/Custom.ico");
+
+=item Size [col, row]
+
+Gets or sets the console buffer size.
+
+Example:
+
+ ($x, $y) = $CONSOLE->Size();
+ $CONSOLE->Size(80, 25);
+
+=item Title [title]
+
+Gets or sets the title of the current console window.
+
+Example:
+
+ $title = $CONSOLE->Title();
+ $CONSOLE->Title("This is a title");
+
+=item Window [flag, left, top, right, bottom]
+
+Gets or sets the current console window size. If called without
+arguments, returns a 4-element list containing the current window
+coordinates in the form of I<left>, I<top>, I<right>, I<bottom>. To
+set the window size, you have to specify an additional I<flag>
+parameter: if it is 0 (zero), coordinates are considered relative to
+the current coordinates; if it is non-zero, coordinates are absolute.
+
+Example:
+
+ ($left, $top, $right, $bottom) = $CONSOLE->Window();
+ $CONSOLE->Window(1, 0, 0, 80, 50);
+
+=item Write string
+
+Writes I<string> on the console, using the current attribute, that you
+can set with C<Attr>, and advancing the cursor as needed. This isn't
+so different from Perl's "print" statement. Returns the number of
+characters written or C<undef> on errors. See also: C<WriteAttr>,
+C<WriteChar>, C<WriteRect>.
+
+Example:
+
+ $CONSOLE->Write("Hello, world!");
+
+=item WriteAttr attrs, col, row
+
+Writes the attributes in the string I<attrs>, beginning at I<col>,
+I<row>, without affecting the characters that are on screen. The
+string attrs can be the result of a C<ReadAttr> function, or you can
+build your own attribute string; in this case, keep in mind that every
+attribute is treated as a character, not a number (see example).
+Returns the number of attributes written or C<undef> on errors. See
+also: C<Write>, C<WriteChar>, C<WriteRect>.
+
+Example:
+
+ $CONSOLE->WriteAttr($attrs, 0, 0);
+
+ # note the use of chr()...
+ $attrs = chr($FG_BLACK | $BG_WHITE) x 80;
+ $CONSOLE->WriteAttr($attrs, 0, 0);
+
+=item WriteChar chars, col, row
+
+Writes the characters in the string I<attr>, beginning at I<col>, I<row>,
+without affecting the attributes that are on screen. The string I<chars>
+can be the result of a C<ReadChar> function, or a normal string. Returns
+the number of characters written or C<undef> on errors. See also:
+C<Write>, C<WriteAttr>, C<WriteRect>.
+
+Example:
+
+ $CONSOLE->WriteChar("Hello, worlds!", 0, 0);
+
+=item WriteInput (event)
+
+Pushes data in the console input buffer. I<(event)> is a list of values,
+for more information see C<Input>. The string chars can be the result of
+a C<ReadChar> function, or a normal string. Returns the number of
+characters written or C<undef> on errors. See also: C<Write>,
+C<WriteAttr>, C<WriteRect>.
+
+Example:
+
+ $CONSOLE->WriteInput(@event);
+
+=item WriteRect rect, left, top, right, bottom
+
+Writes a rectangle of characters and attributes (contained in I<rect>)
+on the console at the coordinates specified by I<left>, I<top>,
+I<right>, I<bottom>. I<rect> can be the result of a C<ReadRect>
+function. Returns C<undef> on errors, otherwise a 4-element list
+containing the coordinates of the affected rectangle, in the format
+I<left>, I<top>, I<right>, I<bottom>. See also: C<Write>,
+C<WriteAttr>, C<WriteChar>.
+
+Example:
+
+ $CONSOLE->WriteRect($rect, 0, 0, 80, 25);
+
+=back
+
+
+=head2 Constants
+
+The following constants are exported in the main namespace of your
+script using Win32::Console:
+
+ BACKGROUND_BLUE
+ BACKGROUND_GREEN
+ BACKGROUND_INTENSITY
+ BACKGROUND_RED
+ CAPSLOCK_ON
+ CONSOLE_TEXTMODE_BUFFER
+ ENABLE_ECHO_INPUT
+ ENABLE_LINE_INPUT
+ ENABLE_MOUSE_INPUT
+ ENABLE_PROCESSED_INPUT
+ ENABLE_PROCESSED_OUTPUT
+ ENABLE_WINDOW_INPUT
+ ENABLE_WRAP_AT_EOL_OUTPUT
+ ENHANCED_KEY
+ FILE_SHARE_READ
+ FILE_SHARE_WRITE
+ FOREGROUND_BLUE
+ FOREGROUND_GREEN
+ FOREGROUND_INTENSITY
+ FOREGROUND_RED
+ LEFT_ALT_PRESSED
+ LEFT_CTRL_PRESSED
+ NUMLOCK_ON
+ GENERIC_READ
+ GENERIC_WRITE
+ RIGHT_ALT_PRESSED
+ RIGHT_CTRL_PRESSED
+ SCROLLLOCK_ON
+ SHIFT_PRESSED
+ STD_INPUT_HANDLE
+ STD_OUTPUT_HANDLE
+ STD_ERROR_HANDLE
+
+Additionally, the following variables can be used:
+
+ $FG_BLACK
+ $FG_GRAY
+ $FG_BLUE
+ $FG_LIGHTBLUE
+ $FG_RED
+ $FG_LIGHTRED
+ $FG_GREEN
+ $FG_LIGHTGREEN
+ $FG_MAGENTA
+ $FG_LIGHTMAGENTA
+ $FG_CYAN
+ $FG_LIGHTCYAN
+ $FG_BROWN
+ $FG_YELLOW
+ $FG_LIGHTGRAY
+ $FG_WHITE
+
+ $BG_BLACK
+ $BG_GRAY
+ $BG_BLUE
+ $BG_LIGHTBLUE
+ $BG_RED
+ $BG_LIGHTRED
+ $BG_GREEN
+ $BG_LIGHTGREEN
+ $BG_MAGENTA
+ $BG_LIGHTMAGENTA
+ $BG_CYAN
+ $BG_LIGHTCYAN
+ $BG_BROWN
+ $BG_YELLOW
+ $BG_LIGHTGRAY
+ $BG_WHITE
+
+ $ATTR_NORMAL
+ $ATTR_INVERSE
+
+ATTR_NORMAL is set to gray foreground on black background (DOS's
+standard colors).
+
+
+=head2 Microsoft's Documentation
+
+Documentation for the Win32 Console and Character mode Functions can
+be found on Microsoft's site at this URL:
+
+http://www.microsoft.com/msdn/sdk/platforms/doc/sdk/win32/sys/src/conchar.htm
+
+A reference of the available functions is at:
+
+http://www.microsoft.com/msdn/sdk/platforms/doc/sdk/win32/sys/src/conchar_34.htm
+
+
+=head1 AUTHOR
+
+Aldo Calpini <a.calpini@romagiubileo.it>
+
+=head1 CREDITS
+
+Thanks to: Jesse Dougherty, Dave Roth, ActiveWare, and the
+Perl-Win32-Users community.
+
+=head1 DISCLAIMER
+
+This program is FREE; you can redistribute, modify, disassemble, or
+even reverse engineer this software at your will. Keep in mind,
+however, that NOTHING IS GUARANTEED to work and everything you do is
+AT YOUR OWN RISK - I will not take responsibility for any damage, loss
+of money and/or health that may arise from the use of this program!
+
+This is distributed under the terms of Larry Wall's Artistic License.
diff --git a/Master/tlpkg/tlperl/lib/Win32/Event.pm b/Master/tlpkg/tlperl/lib/Win32/Event.pm
new file mode 100644
index 00000000000..5faddf5a76e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Event.pm
@@ -0,0 +1,104 @@
+#---------------------------------------------------------------------
+package Win32::Event;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Created: 3 Feb 1998 from the ActiveWare version
+# Version: 1.00 (6-Feb-1998)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Use Win32 event objects for synchronization
+#---------------------------------------------------------------------
+
+$VERSION = '1.01';
+
+use Win32::IPC 1.00 '/./'; # Import everything
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader Win32::IPC);
+@EXPORT_OK = qw(
+ wait_all wait_any INFINITE
+);
+
+bootstrap Win32::Event;
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Event - Use Win32 event objects from Perl
+
+=head1 SYNOPSIS
+
+ use Win32::Event;
+
+ $event = Win32::Event->new($manual,$initial,$name);
+ $event->wait();
+
+=head1 DESCRIPTION
+
+This module allows access to the Win32 event objects. The C<wait>
+method and C<wait_all> & C<wait_any> functions are inherited from the
+L<"Win32::IPC"> module.
+
+=head2 Methods
+
+=over 4
+
+=item $event = Win32::Event->new([$manual, [$initial, [$name]]])
+
+Constructor for a new event object. If C<$manual> is true, you must
+manually reset the event after it is signalled (the default is false).
+If C<$initial> is true, the initial state of the object is signalled
+(default false). If C<$name> is omitted, creates an unnamed event
+object.
+
+If C<$name> signifies an existing event object, then C<$manual> and
+C<$initial> are ignored and the object is opened. If this happens,
+C<$^E> will be set to 183 (ERROR_ALREADY_EXISTS).
+
+=item $event = Win32::Event->open($name)
+
+Constructor for opening an existing event object.
+
+=item $event->pulse
+
+Signal the C<$event> and then immediately reset it. If C<$event> is a
+manual-reset event, releases all threads currently blocking on it. If
+it's an auto-reset event, releases just one thread.
+
+If no threads are waiting, just resets the event.
+
+=item $event->reset
+
+Reset the C<$event> to nonsignalled.
+
+=item $event->set
+
+Set the C<$event> to signalled.
+
+=item $event->wait([$timeout])
+
+Wait for C<$event> to be signalled. See L<"Win32::IPC">.
+
+=back
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::Event"
+# End:
diff --git a/Master/tlpkg/tlperl/lib/Win32/EventLog.pm b/Master/tlpkg/tlperl/lib/Win32/EventLog.pm
new file mode 100644
index 00000000000..141821556e7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/EventLog.pm
@@ -0,0 +1,471 @@
+#
+# EventLog.pm
+#
+# Creates an object oriented interface to the Windows NT Evenlog
+# Written by Jesse Dougherty
+#
+
+package Win32::EventLog;
+
+use strict;
+use vars qw($VERSION $AUTOLOAD @ISA @EXPORT $GetMessageText);
+$VERSION = '0.074';
+
+require Exporter;
+require DynaLoader;
+
+die "The Win32::Eventlog module works only on Windows NT"
+ unless Win32::IsWinNT();
+
+@ISA= qw(Exporter DynaLoader);
+@EXPORT = qw(
+ EVENTLOG_AUDIT_FAILURE
+ EVENTLOG_AUDIT_SUCCESS
+ EVENTLOG_BACKWARDS_READ
+ EVENTLOG_END_ALL_PAIRED_EVENTS
+ EVENTLOG_END_PAIRED_EVENT
+ EVENTLOG_ERROR_TYPE
+ EVENTLOG_FORWARDS_READ
+ EVENTLOG_INFORMATION_TYPE
+ EVENTLOG_PAIRED_EVENT_ACTIVE
+ EVENTLOG_PAIRED_EVENT_INACTIVE
+ EVENTLOG_SEEK_READ
+ EVENTLOG_SEQUENTIAL_READ
+ EVENTLOG_START_PAIRED_EVENT
+ EVENTLOG_SUCCESS
+ EVENTLOG_WARNING_TYPE
+);
+
+$GetMessageText=0;
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ # reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($!) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ my ($pack,$file,$line) = caller;
+ die "Unknown Win32::EventLog macro $constname, at $file line $line.\n";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+#
+# new()
+#
+# Win32::EventLog->new("source name", "ServerName");
+#
+sub new {
+ die "usage: PACKAGE->new(SOURCENAME[, SERVERNAME])\n" unless @_ > 1;
+ my ($class,$source,$server) = @_;
+ my $handle;
+
+ # Create new handle
+ if ($source !~ /\\/) {
+ OpenEventLog($handle, $server, $source);
+ }
+ else {
+ OpenBackupEventLog($handle, $server, $source);
+ }
+ return bless {handle => $handle,
+ Source => $source,
+ Computer => $server} => $class;
+}
+
+sub DESTROY {shift->Close}
+
+#
+# Open (the rather braindead old way)
+# A variable initialized to empty must be supplied as the first
+# arg, followed by whatever new() takes
+#
+sub Open {
+ $_[0] = Win32::EventLog->new($_[1],$_[2]);
+}
+
+sub OpenBackup {
+ my ($class,$source,$server) = @_;
+ OpenBackupEventLog(my $handle, $server, $source);
+ return bless {handle => $handle,
+ Source => $source,
+ Computer => $server} => $class;
+}
+
+sub Backup {
+ die " usage: OBJECT->Backup(FILENAME)\n" unless @_ == 2;
+ my ($self,$file) = @_;
+ return BackupEventLog($self->{handle}, $file);
+}
+
+sub Close {
+ my $self = shift;
+ CloseEventLog($self->{handle});
+ $self->{handle} = 0;
+}
+
+# Read
+# Note: the EventInfo arguement requires a hash reference.
+sub Read {
+ my $self = shift;
+
+ die "usage: OBJECT->Read(FLAGS, RECORDOFFSET, HASHREF)\n" unless @_ == 3;
+
+ my ($readflags,$recordoffset) = @_;
+ # The following is stolen shamelessly from Wyt's tests for the registry.
+ my $result = ReadEventLog($self->{handle}, $readflags, $recordoffset,
+ my $header, my $source, my $computer, my $sid,
+ my $data, my $strings);
+ my ($length,
+ $reserved,
+ $recordnumber,
+ $timegenerated,
+ $timewritten,
+ $eventid,
+ $eventtype,
+ $numstrings,
+ $eventcategory,
+ $reservedflags,
+ $closingrecordnumber,
+ $stringoffset,
+ $usersidlength,
+ $usersidoffset,
+ $datalength,
+ $dataoffset) = unpack('l6s4l6', $header);
+
+ # make a hash out of the values returned from ReadEventLog.
+ my %h = ( Source => $source,
+ Computer => $computer,
+ Length => $datalength,
+ Category => $eventcategory,
+ RecordNumber => $recordnumber,
+ TimeGenerated => $timegenerated,
+ Timewritten => $timewritten,
+ EventID => $eventid,
+ EventType => $eventtype,
+ ClosingRecordNumber => $closingrecordnumber,
+ User => $sid,
+ Strings => $strings,
+ Data => $data,
+ );
+
+ # get the text message here
+ if ($result and $GetMessageText) {
+ GetEventLogText($source, $eventid, $strings, $numstrings, my $message);
+ $h{Message} = $message;
+ }
+
+ if (ref($_[2]) eq 'HASH') {
+ %{$_[2]} = %h; # this needed for Read(...,\%foo) case
+ }
+ else {
+ $_[2] = \%h;
+ }
+ return $result;
+}
+
+sub GetMessageText {
+ my $self = shift;
+ local $^W;
+ GetEventLogText($self->{Source},
+ $self->{EventID},
+ $self->{Strings},
+ $self->{Strings} =~ tr/\0/\0/,
+ my $message);
+
+ $self->{Message} = $message;
+ return $message;
+}
+
+sub Report {
+ die "usage: OBJECT->Report( HASHREF )\n" unless @_ == 2;
+ my ($self,$EventInfo) = @_;
+
+ die "Win32::EventLog::Report requires a hash reference as arg 2\n"
+ unless ref($EventInfo) eq "HASH";
+
+ my $computer = $EventInfo->{Computer} ? $EventInfo->{Computer}
+ : $self->{Computer};
+ my $source = exists($EventInfo->{Source}) ? $EventInfo->{Source}
+ : $self->{Source};
+
+ return WriteEventLog($computer, $source, $EventInfo->{EventType},
+ $EventInfo->{Category}, $EventInfo->{EventID}, 0,
+ $EventInfo->{Data}, split(/\0/, $EventInfo->{Strings}));
+
+}
+
+sub GetOldest {
+ my $self = shift;
+ die "usage: OBJECT->GetOldest( SCALAREF )\n" unless @_ == 1;
+ return GetOldestEventLogRecord($self->{handle},$_[0]);
+}
+
+sub GetNumber {
+ my $self = shift;
+ die "usage: OBJECT->GetNumber( SCALARREF )\n" unless @_ == 1;
+ return GetNumberOfEventLogRecords($self->{handle}, $_[0]);
+}
+
+sub Clear {
+ my ($self,$file) = @_;
+ die "usage: OBJECT->Clear( FILENAME )\n" unless @_ == 2;
+ return ClearEventLog($self->{handle}, $file);
+}
+
+bootstrap Win32::EventLog;
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::EventLog - Process Win32 Event Logs from Perl
+
+=head1 SYNOPSIS
+
+ use Win32::EventLog
+ $handle=Win32::EventLog->new("Application");
+
+=head1 DESCRIPTION
+
+This module implements most of the functionality available from the
+Win32 API for accessing and manipulating Win32 Event Logs. The access
+to the EventLog routines is divided into those that relate to an
+EventLog object and its associated methods and those that relate other
+EventLog tasks (like adding an EventLog record).
+
+=head1 The EventLog Object and its Methods
+
+The following methods are available to open, read, close and backup
+EventLogs.
+
+=over 4
+
+=item Win32::EventLog->new(SOURCENAME [,SERVERNAME]);
+
+The new() method creates a new EventLog object and returns a handle
+to it. This hande is then used to call the methods below.
+
+The method is overloaded in that if the supplied SOURCENAME
+argument contains one or more literal '\' characters (an illegal
+character in a SOURCENAME), it assumes that you are trying to open
+a backup eventlog and uses SOURCENAME as the backup eventlog to
+open. Note that when opening a backup eventlog, the SERVERNAME
+argument is ignored (as it is in the underlying Win32 API). For
+EventLogs on remote machines, the SOURCENAME parameter must
+therefore be specified as a UNC path.
+
+=item $handle->Backup(FILENAME);
+
+The Backup() method backs up the EventLog represented by $handle. It
+takes a single arguemt, FILENAME. When $handle represents an
+EventLog on a remote machine, FILENAME is filename on the remote
+machine and cannot be a UNC path (i.e you must use F<C:\TEMP\App.EVT>).
+The method will fail if the log file already exists.
+
+=item $handle->Read(FLAGS, OFFSET, HASHREF);
+
+The Read() method read an EventLog entry from the EventLog represented
+by $handle.
+
+=item $handle->Close();
+
+The Close() method closes the EventLog represented by $handle. After
+Close() has been called, any further attempt to use the EventLog
+represented by $handle will fail.
+
+=item $handle->GetOldest(SCALARREF);
+
+The GetOldest() method number of the the oldest EventLog record in
+the EventLog represented by $handle. This is required to correctly
+compute the OFFSET required by the Read() method.
+
+=item $handle->GetNumber(SCALARREF);
+
+The GetNumber() method returns the number of EventLog records in
+the EventLog represented by $handle. The number of the most recent
+record in the EventLog is therefore computed by
+
+ $handle->GetOldest($oldest);
+ $handle->GetNumber($lastRec);
+ $lastRecOffset=$oldest+$lastRec;
+
+=item $handle->Clear(FILENAME);
+
+The Clear() method clears the EventLog represented by $handle. If
+you provide a non-null FILENAME, the EventLog will be backed up
+into FILENAME before the EventLog is cleared. The method will fail
+if FILENAME is specified and the file refered to exists. Note also
+that FILENAME specifies a file local to the machine on which the
+EventLog resides and cannot be specified as a UNC name.
+
+=item $handle->Report(HASHREF);
+
+The Report() method generates an EventLog entry. The HASHREF should
+contain the following keys:
+
+=over 4
+
+=item C<Computer>
+
+The C<Computer> field specfies which computer you want the EventLog
+entry recorded. If this key doesn't exist, the server name used to
+create the $handle is used.
+
+=item C<Source>
+
+The C<Source> field specifies the source that generated the EventLog
+entry. If this key doesn't exist, the source name used to create the
+$handle is used.
+
+=item C<EventType>
+
+The C<EventType> field should be one of the constants
+
+=over 4
+
+=item C<EVENTLOG_ERROR_TYPE>
+
+An Error event is being logged.
+
+=item C<EVENTLOG_WARNING_TYPE>
+
+A Warning event is being logged.
+
+=item C<EVENTLOG_INFORMATION_TYPE>
+
+An Information event is being logged.
+
+=item C<EVENTLOG_AUDIT_SUCCESS>
+
+A Success Audit event is being logged (typically in the Security
+EventLog).
+
+=item C<EVENTLOG_AUDIT_FAILURE>
+
+A Failure Audit event is being logged (typically in the Security
+EventLog).
+
+=back
+
+These constants are exported into the main namespace by default.
+
+=item C<Category>
+
+The C<Category> field can have any value you want. It is specific to
+the particular Source.
+
+=item C<EventID>
+
+The C<EventID> field should contain the ID of the message that this
+event pertains too. This assumes that you have an associated message
+file (indirectly referenced by the field C<Source>).
+
+=item C<Data>
+
+The C<Data> field contains raw data associated with this event.
+
+=item C<Strings>
+
+The C<Strings> field contains the single string that itself contains
+NUL terminated sub-strings. This are used with the EventID to generate
+the message as seen from (for example) the Event Viewer application.
+
+=back
+
+=back
+
+=head1 Other Win32::EventLog functions.
+
+The following functions are part of the Win32::EventLog package but
+are not callable from an EventLog object.
+
+=over 4
+
+=item GetMessageText(HASHREF);
+
+The GetMessageText() function assumes that HASHREF was obtained by
+a call to C<$handle-E<gt>Read()>. It returns the formatted string that
+represents the fully resolved text of the EventLog message (such as
+would be seen in the Windows NT Event Viewer). For convenience, the
+key 'Message' in the supplied HASHREF is also set to the return value
+of this function.
+
+If you set the variable $Win32::EventLog::GetMessageText to 1 then
+each call to C<$handle-E<gt>Read()> will call this function automatically.
+
+=back
+
+=head1 Example 1
+
+The following example illustrates the way in which the EventLog module
+can be used. It opens the System EventLog and reads through it from
+oldest to newest records. For each record from the B<Source> EventLog
+it extracts the full text of the Entry and prints the EventLog message
+text out.
+
+ use Win32::EventLog;
+
+ $handle=Win32::EventLog->new("System", $ENV{ComputerName})
+ or die "Can't open Application EventLog\n";
+ $handle->GetNumber($recs)
+ or die "Can't get number of EventLog records\n";
+ $handle->GetOldest($base)
+ or die "Can't get number of oldest EventLog record\n";
+
+ while ($x < $recs) {
+ $handle->Read(EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,
+ $base+$x,
+ $hashRef)
+ or die "Can't read EventLog entry #$x\n";
+ if ($hashRef->{Source} eq "EventLog") {
+ Win32::EventLog::GetMessageText($hashRef);
+ print "Entry $x: $hashRef->{Message}\n";
+ }
+ $x++;
+ }
+
+=head1 Example 2
+
+To backup and clear the EventLogs on a remote machine, do the following :-
+
+ use Win32::EventLog;
+
+ $myServer="\\\\my-server"; # your servername here.
+ my($date)=join("-", ((split(/\s+/, scalar(localtime)))[0,1,2,4]));
+ my($dest);
+
+ for my $eventLog ("Application", "System", "Security") {
+ $handle=Win32::EventLog->new($eventLog, $myServer)
+ or die "Can't open Application EventLog on $myServer\n";
+
+ $dest="C:\\BackupEventLogs\\$eventLog\\$date.evt";
+ $handle->Backup($dest)
+ or warn "Could not backup and clear the $eventLog EventLog on $myServer ($^E)\n";
+
+ $handle->Close;
+ }
+
+Note that only the Clear method is required. Note also that if the
+file $dest exists, the function will fail.
+
+=head1 BUGS
+
+None currently known.
+
+The test script for 'make test' should be re-written to use the
+EventLog object.
+
+=head1 AUTHOR
+
+Original code by Jesse Dougherty for HiP Communications. Additional
+fixes and updates attributed to Martin Pauley
+<martin.pauley@ulsterbank.ltd.uk>) and Bret Giddings (bret@essex.ac.uk).
diff --git a/Master/tlpkg/tlperl/lib/Win32/File.pm b/Master/tlpkg/tlperl/lib/Win32/File.pm
new file mode 100644
index 00000000000..d67a25448c8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/File.pm
@@ -0,0 +1,118 @@
+package Win32::File;
+
+#
+# File.pm
+# Written by Douglas_Lankshear@ActiveWare.com
+#
+# subsequent hacks:
+# Gurusamy Sarathy
+#
+
+$VERSION = '0.05';
+
+require Exporter;
+require DynaLoader;
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT = qw(
+ ARCHIVE
+ COMPRESSED
+ DIRECTORY
+ HIDDEN
+ NORMAL
+ OFFLINE
+ READONLY
+ SYSTEM
+ TEMPORARY
+ );
+@EXPORT_OK = qw(GetAttributes SetAttributes);
+
+=head1 NAME
+
+Win32::File - manage file attributes in perl
+
+=head1 SYNOPSIS
+
+ use Win32::File;
+
+=head1 DESCRIPTION
+
+This module offers the retrieval and setting of file attributes.
+
+=head1 Functions
+
+=head2 NOTE
+
+All of the functions return FALSE (0) if they fail, unless otherwise noted.
+The function names are exported into the caller's namespace by request.
+
+=over 10
+
+=item GetAttributes(filename, returnedAttributes)
+
+Gets the attributes of a file or directory. returnedAttributes will be set
+to the OR-ed combination of the filename attributes.
+
+=item SetAttributes(filename, newAttributes)
+
+Sets the attributes of a file or directory. newAttributes must be an OR-ed
+combination of the attributes.
+
+=back
+
+=head1 Constants
+
+The following constants are exported by default.
+
+=over 10
+
+=item ARCHIVE
+
+=item COMPRESSED
+
+=item DIRECTORY
+
+=item HIDDEN
+
+=item NORMAL
+
+=item OFFLINE
+
+=item READONLY
+
+=item SYSTEM
+
+=item TEMPORARY
+
+=back
+
+=cut
+
+sub AUTOLOAD
+{
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname);
+ if($! != 0)
+ {
+ if($! =~ /Invalid/)
+ {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else
+ {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::File macro $constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::File;
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Win32/FileSecurity.pm b/Master/tlpkg/tlperl/lib/Win32/FileSecurity.pm
new file mode 100644
index 00000000000..6c6e5865336
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/FileSecurity.pm
@@ -0,0 +1,308 @@
+package Win32::FileSecurity;
+
+#
+# FileSecurity.pm
+# By Monte Mitzelfelt, monte@conchas.nm.org
+# Larry Wall's Artistic License applies to all related Perl
+# and C code for this module
+# Thanks to the guys at ActiveWare!
+# ver 0.67 ALPHA 1997.07.07
+#
+
+require Exporter;
+require DynaLoader;
+use Carp ;
+
+$VERSION = '1.04';
+
+require Win32 unless defined &Win32::IsWinNT;
+croak "The Win32::FileSecurity module works only on Windows NT" unless Win32::IsWinNT();
+
+@ISA= qw( Exporter DynaLoader );
+
+require Exporter ;
+require DynaLoader ;
+
+@ISA = qw(Exporter DynaLoader) ;
+@EXPORT_OK = qw(
+ Get
+ Set
+ EnumerateRights
+ MakeMask
+ DELETE
+ READ_CONTROL
+ WRITE_DAC
+ WRITE_OWNER
+ SYNCHRONIZE
+ STANDARD_RIGHTS_REQUIRED
+ STANDARD_RIGHTS_READ
+ STANDARD_RIGHTS_WRITE
+ STANDARD_RIGHTS_EXECUTE
+ STANDARD_RIGHTS_ALL
+ SPECIFIC_RIGHTS_ALL
+ ACCESS_SYSTEM_SECURITY
+ MAXIMUM_ALLOWED
+ GENERIC_READ
+ GENERIC_WRITE
+ GENERIC_EXECUTE
+ GENERIC_ALL
+ F
+ FULL
+ R
+ READ
+ C
+ CHANGE
+ A
+ ADD
+ ) ;
+
+sub AUTOLOAD {
+ local($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ $val = constant($constname);
+ if($! != 0) {
+ if($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::FileSecurity macro "
+ ."$constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::FileSecurity;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Win32::FileSecurity - manage FileSecurity Discretionary Access Control Lists in perl
+
+=head1 SYNOPSIS
+
+ use Win32::FileSecurity;
+
+=head1 DESCRIPTION
+
+This module offers control over the administration of system FileSecurity DACLs.
+You may want to use Get and EnumerateRights to get an idea of what mask values
+correspond to what rights as viewed from File Manager.
+
+=head1 CONSTANTS
+
+ DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER,
+ SYNCHRONIZE, STANDARD_RIGHTS_REQUIRED,
+ STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE,
+ STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_ALL,
+ SPECIFIC_RIGHTS_ALL, ACCESS_SYSTEM_SECURITY,
+ MAXIMUM_ALLOWED, GENERIC_READ, GENERIC_WRITE,
+ GENERIC_EXECUTE, GENERIC_ALL, F, FULL, R, READ,
+ C, CHANGE
+
+=head1 FUNCTIONS
+
+=head2 NOTE:
+
+All of the functions return false if they fail, unless otherwise noted.
+Errors returned via $! containing both Win32 GetLastError() and a text message
+indicating Win32 function that failed.
+
+=over 10
+
+=item constant( $name, $set )
+
+Stores the value of named constant $name into $set.
+Same as C<$set = Win32::FileSecurity::NAME_OF_CONSTANT();>.
+
+=item Get( $filename, \%permisshash )
+
+Gets the DACLs of a file or directory.
+
+=item Set( $filename, \%permisshash )
+
+Sets the DACL for a file or directory.
+
+=item EnumerateRights( $mask, \@rightslist )
+
+Turns the bitmask in $mask into a list of strings in @rightslist.
+
+=item MakeMask( qw( DELETE READ_CONTROL ) )
+
+Takes a list of strings representing constants and returns a bitmasked
+integer value.
+
+=back
+
+=head2 %permisshash
+
+Entries take the form $permisshash{USERNAME} = $mask ;
+
+=head1 EXAMPLE1
+
+ # Gets the rights for all files listed on the command line.
+ use Win32::FileSecurity qw(Get EnumerateRights);
+
+ foreach( @ARGV ) {
+ next unless -e $_ ;
+ if ( Get( $_, \%hash ) ) {
+ while( ($name, $mask) = each %hash ) {
+ print "$name:\n\t";
+ EnumerateRights( $mask, \@happy ) ;
+ print join( "\n\t", @happy ), "\n";
+ }
+ }
+ else {
+ print( "Error #", int( $! ), ": $!" ) ;
+ }
+ }
+
+=head1 EXAMPLE2
+
+ # Gets existing DACL and modifies Administrator rights
+ use Win32::FileSecurity qw(MakeMask Get Set);
+
+ # These masks show up as Full Control in File Manager
+ $file = MakeMask( qw( FULL ) );
+
+ $dir = MakeMask( qw(
+ FULL
+ GENERIC_ALL
+ ) );
+
+ foreach( @ARGV ) {
+ s/\\$//;
+ next unless -e;
+ Get( $_, \%hash ) ;
+ $hash{Administrator} = ( -d ) ? $dir : $file ;
+ Set( $_, \%hash ) ;
+ }
+
+=head1 COMMON MASKS FROM CACLS AND WINFILE
+
+=head2 READ
+
+ MakeMask( qw( FULL ) ); # for files
+ MakeMask( qw( READ GENERIC_READ GENERIC_EXECUTE ) ); # for directories
+
+=head2 CHANGE
+
+ MakeMask( qw( CHANGE ) ); # for files
+ MakeMask( qw( CHANGE GENERIC_WRITE GENERIC_READ GENERIC_EXECUTE ) ); # for directories
+
+=head2 ADD & READ
+
+ MakeMask( qw( ADD GENERIC_READ GENERIC_EXECUTE ) ); # for directories only!
+
+=head2 FULL
+
+ MakeMask( qw( FULL ) ); # for files
+ MakeMask( qw( FULL GENERIC_ALL ) ); # for directories
+
+=head1 RESOURCES
+
+From Microsoft: check_sd
+ http://premium.microsoft.com/download/msdn/samples/2760.exe
+
+(thanks to Guert Schimmel at Sybase for turning me on to this one)
+
+=head1 VERSION
+
+1.03 ALPHA 97-12-14
+
+=head1 REVISION NOTES
+
+=over 10
+
+=item 1.03 ALPHA 1998.01.11
+
+Imported diffs from 0.67 (parent) version
+
+=item 1.02 ALPHA 1997.12.14
+
+Pod fixes, @EXPORT list additions <gsar@activestate.com>
+
+Fix unitialized vars on unknown ACLs <jmk@exc.bybyte.de>
+
+=item 1.01 ALPHA 1997.04.25
+
+CORE Win32 version imported from 0.66 <gsar@activestate.com>
+
+=item 0.67 ALPHA 1997.07.07
+
+Kludged bug in mapping bits to separate ACE's. Notably, this screwed
+up CHANGE access by leaving out a delete bit in the
+C<INHERIT_ONLY_ACE | OBJECT_INHERIT_ACE> Access Control Entry.
+
+May need to rethink...
+
+=item 0.66 ALPHA 1997.03.13
+
+Fixed bug in memory allocation check
+
+=item 0.65 ALPHA 1997.02.25
+
+Tested with 5.003 build 303
+
+Added ISA exporter, and @EXPORT_OK
+
+Added F, FULL, R, READ, C, CHANGE as composite pre-built mask names.
+
+Added server\ to keys returned in hash from Get
+
+Made constants and MakeMask case insensitive (I don't know why I did that)
+
+Fixed mask comparison in ListDacl and Enumerate Rights from simple & mask
+to exact bit match ! ( ( x & y ) ^ x ) makes sure all bits in x
+are set in y
+
+Fixed some "wild" pointers
+
+=item 0.60 ALPHA 1996.07.31
+
+Now suitable for file and directory permissions
+
+Included ListDacl.exe in bundle for debugging
+
+Added "intuitive" inheritance for directories, basically functions like FM
+triggered by presence of GENERIC_ rights this may need to change
+
+see EXAMPLE2
+
+Changed from AddAccessAllowedAce to AddAce for control over inheritance
+
+=item 0.51 ALPHA 1996.07.20
+
+Fixed memory allocation bug
+
+=item 0.50 ALPHA 1996.07.29
+
+Base functionality
+
+Using AddAccessAllowedAce
+
+Suitable for file permissions
+
+=back
+
+=head1 KNOWN ISSUES / BUGS
+
+=over 10
+
+=item 1
+
+May not work on remote drives.
+
+=item 2
+
+Errors croak, don't return via $! as documented.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/IPC.pm b/Master/tlpkg/tlperl/lib/Win32/IPC.pm
new file mode 100644
index 00000000000..c97279b24c5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/IPC.pm
@@ -0,0 +1,195 @@
+#---------------------------------------------------------------------
+package Win32::IPC;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Created: 3 Feb 1998 from the ActiveWare version
+# (c) 1995 Microsoft Corporation. All rights reserved.
+# Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+#
+# Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Version: 1.03 (11-Jul-2003)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Base class for Win32 synchronization objects
+#---------------------------------------------------------------------
+
+$VERSION = '1.03';
+
+require Exporter;
+require DynaLoader;
+use strict;
+use vars qw($AUTOLOAD $VERSION @ISA @EXPORT @EXPORT_OK);
+
+@ISA = qw(Exporter DynaLoader);
+@EXPORT = qw(
+ INFINITE
+ WaitForMultipleObjects
+);
+@EXPORT_OK = qw(
+ wait_any wait_all
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function.
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ local $! = 0;
+ my $val = constant($constname);
+ if ($! != 0) {
+ my ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::IPC macro $constname, used at $file line $line.";
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+} # end AUTOLOAD
+
+bootstrap Win32::IPC;
+
+# How's this for cryptic? Use wait_any or wait_all!
+sub WaitForMultipleObjects
+{
+ my $result = (($_[1] ? wait_all($_[0], $_[2])
+ : wait_any($_[0], $_[2]))
+ ? 1
+ : 0);
+ @{$_[0]} = (); # Bug for bug compatibility! Use wait_any or wait_all!
+ $result;
+} # end WaitForMultipleObjects
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::IPC - Base class for Win32 synchronization objects
+
+=head1 SYNOPSIS
+
+ use Win32::Event 1.00 qw(wait_any);
+ #Create objects.
+
+ wait_any(@ListOfObjects,$timeout);
+
+=head1 DESCRIPTION
+
+This module is loaded by the other Win32 synchronization modules. You
+shouldn't need to load it yourself. It supplies the wait functions to
+those modules.
+
+The synchronization modules are L<"Win32::ChangeNotify">,
+L<"Win32::Event">, L<"Win32::Mutex">, & L<"Win32::Semaphore">.
+
+In addition, you can use C<wait_any> and C<wait_all> with
+L<"Win32::Console"> and L<"Win32::Process"> objects. (However, those
+modules do not export the wait functions; you must load one of the
+synchronization modules (or just Win32::IPC)).
+
+=head2 Methods
+
+B<Win32::IPC> supplies one method to all synchronization objects.
+
+=over 4
+
+=item $obj->wait([$timeout])
+
+Waits for C<$obj> to become signalled. C<$timeout> is the maximum time
+to wait (in milliseconds). If C<$timeout> is omitted, waits forever.
+If C<$timeout> is 0, returns immediately.
+
+Returns:
+
+ +1 The object is signalled
+ -1 The object is an abandoned mutex
+ 0 Timed out
+ undef An error occurred
+
+=back
+
+=head2 Functions
+
+=over 4
+
+=item wait_any(@objects, [$timeout])
+
+Waits for at least one of the C<@objects> to become signalled.
+C<$timeout> is the maximum time to wait (in milliseconds). If
+C<$timeout> is omitted, waits forever. If C<$timeout> is 0, returns
+immediately.
+
+The return value indicates which object ended the wait:
+
+ +N $object[N-1] is signalled
+ -N $object[N-1] is an abandoned mutex
+ 0 Timed out
+ undef An error occurred
+
+If more than one object became signalled, the one with the lowest
+index is used.
+
+=item wait_all(@objects, [$timeout])
+
+This is the same as C<wait_any>, but it waits for all the C<@objects>
+to become signalled. The return value indicates the last object to
+become signalled, and is negative if at least one of the C<@objects>
+is an abandoned mutex.
+
+=back
+
+=head2 Deprecated Functions and Methods
+
+B<Win32::IPC> still supports the ActiveWare syntax, but its use is
+deprecated.
+
+=over 4
+
+=item INFINITE
+
+Constant value for an infinite timeout. Omit the C<$timeout> argument
+instead.
+
+=item WaitForMultipleObjects(\@objects, $wait_all, $timeout)
+
+Warning: C<WaitForMultipleObjects> erases C<@objects>!
+Use C<wait_all> or C<wait_any> instead.
+
+=item $obj->Wait($timeout)
+
+Similar to C<not $obj-E<gt>wait($timeout)>.
+
+=back
+
+=head1 INTERNALS
+
+The C<wait_any> and C<wait_all> functions support two kinds of
+objects. Objects derived from C<Win32::IPC> are expected to consist
+of a reference to a scalar containing the Win32 HANDLE as an IV.
+
+Other objects (for which C<UNIVERSAL::isa($object, "Win32::IPC")> is
+false), are expected to implement a C<get_Win32_IPC_HANDLE> method.
+When called in scalar context with no arguments, this method should
+return a Win32 HANDLE (as an IV) suitable for passing to the Win32
+WaitForMultipleObjects API function.
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+Loosely based on the original module by ActiveWare Internet Corp.,
+F<http://www.ActiveWare.com>
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::IPC"
+# End:
diff --git a/Master/tlpkg/tlperl/lib/Win32/Internet.pm b/Master/tlpkg/tlperl/lib/Win32/Internet.pm
new file mode 100644
index 00000000000..f6dac3130af
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Internet.pm
@@ -0,0 +1,3009 @@
+#######################################################################
+#
+# Win32::Internet - Perl Module for Internet Extensions
+# ^^^^^^^^^^^^^^^
+# This module creates an object oriented interface to the Win32
+# Internet Functions (WININET.DLL).
+#
+# Version: 0.08 (14 Feb 1997)
+# Version: 0.081 (25 Sep 1999)
+# Version: 0.082 (04 Sep 2001)
+#
+#######################################################################
+
+# changes:
+# - fixed 2 bugs in Option(s) related subs
+# - works with build 30x also
+
+package Win32::Internet;
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+
+# use Win32::WinError; # for windows constants.
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT = qw(
+ HTTP_ADDREQ_FLAG_ADD
+ HTTP_ADDREQ_FLAG_REPLACE
+ HTTP_QUERY_ALLOW
+ HTTP_QUERY_CONTENT_DESCRIPTION
+ HTTP_QUERY_CONTENT_ID
+ HTTP_QUERY_CONTENT_LENGTH
+ HTTP_QUERY_CONTENT_TRANSFER_ENCODING
+ HTTP_QUERY_CONTENT_TYPE
+ HTTP_QUERY_COST
+ HTTP_QUERY_CUSTOM
+ HTTP_QUERY_DATE
+ HTTP_QUERY_DERIVED_FROM
+ HTTP_QUERY_EXPIRES
+ HTTP_QUERY_FLAG_REQUEST_HEADERS
+ HTTP_QUERY_FLAG_SYSTEMTIME
+ HTTP_QUERY_LANGUAGE
+ HTTP_QUERY_LAST_MODIFIED
+ HTTP_QUERY_MESSAGE_ID
+ HTTP_QUERY_MIME_VERSION
+ HTTP_QUERY_PRAGMA
+ HTTP_QUERY_PUBLIC
+ HTTP_QUERY_RAW_HEADERS
+ HTTP_QUERY_RAW_HEADERS_CRLF
+ HTTP_QUERY_REQUEST_METHOD
+ HTTP_QUERY_SERVER
+ HTTP_QUERY_STATUS_CODE
+ HTTP_QUERY_STATUS_TEXT
+ HTTP_QUERY_URI
+ HTTP_QUERY_USER_AGENT
+ HTTP_QUERY_VERSION
+ HTTP_QUERY_WWW_LINK
+ ICU_BROWSER_MODE
+ ICU_DECODE
+ ICU_ENCODE_SPACES_ONLY
+ ICU_ESCAPE
+ ICU_NO_ENCODE
+ ICU_NO_META
+ ICU_USERNAME
+ INTERNET_FLAG_PASSIVE
+ INTERNET_FLAG_ASYNC
+ INTERNET_HYPERLINK
+ INTERNET_FLAG_KEEP_CONNECTION
+ INTERNET_FLAG_MAKE_PERSISTENT
+ INTERNET_FLAG_NO_AUTH
+ INTERNET_FLAG_NO_AUTO_REDIRECT
+ INTERNET_FLAG_NO_CACHE_WRITE
+ INTERNET_FLAG_NO_COOKIES
+ INTERNET_FLAG_READ_PREFETCH
+ INTERNET_FLAG_RELOAD
+ INTERNET_FLAG_RESYNCHRONIZE
+ INTERNET_FLAG_TRANSFER_ASCII
+ INTERNET_FLAG_TRANSFER_BINARY
+ INTERNET_INVALID_PORT_NUMBER
+ INTERNET_INVALID_STATUS_CALLBACK
+ INTERNET_OPEN_TYPE_DIRECT
+ INTERNET_OPEN_TYPE_PROXY
+ INTERNET_OPEN_TYPE_PROXY_PRECONFIG
+ INTERNET_OPTION_CONNECT_BACKOFF
+ INTERNET_OPTION_CONNECT_RETRIES
+ INTERNET_OPTION_CONNECT_TIMEOUT
+ INTERNET_OPTION_CONTROL_SEND_TIMEOUT
+ INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT
+ INTERNET_OPTION_DATA_SEND_TIMEOUT
+ INTERNET_OPTION_DATA_RECEIVE_TIMEOUT
+ INTERNET_OPTION_HANDLE_SIZE
+ INTERNET_OPTION_LISTEN_TIMEOUT
+ INTERNET_OPTION_PASSWORD
+ INTERNET_OPTION_READ_BUFFER_SIZE
+ INTERNET_OPTION_USER_AGENT
+ INTERNET_OPTION_USERNAME
+ INTERNET_OPTION_VERSION
+ INTERNET_OPTION_WRITE_BUFFER_SIZE
+ INTERNET_SERVICE_FTP
+ INTERNET_SERVICE_GOPHER
+ INTERNET_SERVICE_HTTP
+ INTERNET_STATUS_CLOSING_CONNECTION
+ INTERNET_STATUS_CONNECTED_TO_SERVER
+ INTERNET_STATUS_CONNECTING_TO_SERVER
+ INTERNET_STATUS_CONNECTION_CLOSED
+ INTERNET_STATUS_HANDLE_CLOSING
+ INTERNET_STATUS_HANDLE_CREATED
+ INTERNET_STATUS_NAME_RESOLVED
+ INTERNET_STATUS_RECEIVING_RESPONSE
+ INTERNET_STATUS_REDIRECT
+ INTERNET_STATUS_REQUEST_COMPLETE
+ INTERNET_STATUS_REQUEST_SENT
+ INTERNET_STATUS_RESOLVING_NAME
+ INTERNET_STATUS_RESPONSE_RECEIVED
+ INTERNET_STATUS_SENDING_REQUEST
+);
+
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+#
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+
+ # [dada] This results in an ugly Autoloader error
+ #if ($! =~ /Invalid/) {
+ # $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ # goto &AutoLoader::AUTOLOAD;
+ #} else {
+
+ # [dada] ... I prefer this one :)
+
+ ($pack,$file,$line) = caller; undef $pack;
+ die "Win32::Internet::$constname is not defined, used at $file line $line.";
+
+ #}
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+$VERSION = "0.082";
+
+%callback_code = ();
+%callback_info = ();
+
+
+#######################################################################
+# PUBLIC METHODS
+#
+
+#======== ### CLASS CONSTRUCTOR
+sub new {
+#========
+ my($class, $useragent, $opentype, $proxy, $proxybypass, $flags) = @_;
+ my $self = {};
+
+ if(ref($useragent) and ref($useragent) eq "HASH") {
+ $opentype = $useragent->{'opentype'};
+ $proxy = $useragent->{'proxy'};
+ $proxybypass = $useragent->{'proxybypass'};
+ $flags = $useragent->{'flags'};
+ my $myuseragent = $useragent->{'useragent'};
+ undef $useragent;
+ $useragent = $myuseragent;
+ }
+
+ $useragent = "Perl-Win32::Internet/".$VERSION unless defined($useragent);
+ $opentype = constant("INTERNET_OPEN_TYPE_DIRECT",0) unless defined($opentype);
+ $proxy = "" unless defined($proxy);
+ $proxybypass = "" unless defined($proxybypass);
+ $flags = 0 unless defined($flags);
+
+
+ my $handle = InternetOpen($useragent, $opentype, $proxy, $proxybypass, $flags);
+ if ($handle) {
+ $self->{'connections'} = 0;
+ $self->{'pasv'} = 0;
+ $self->{'handle'} = $handle;
+ $self->{'useragent'} = $useragent;
+ $self->{'proxy'} = $proxy;
+ $self->{'proxybypass'} = $proxybypass;
+ $self->{'flags'} = $flags;
+ $self->{'Type'} = "Internet";
+
+ # [dada] I think it's better to call SetStatusCallback explicitly...
+ #if($flags & constant("INTERNET_FLAG_ASYNC",0)) {
+ # my $callbackresult=InternetSetStatusCallback($handle);
+ # if($callbackresult==&constant("INTERNET_INVALID_STATUS_CALLBACK",0)) {
+ # $self->{'Error'} = -2;
+ # }
+ #}
+
+ bless $self;
+ } else {
+ $self->{'handle'} = undef;
+ bless $self;
+ }
+ $self;
+}
+
+
+#============
+sub OpenURL {
+#============
+ my($self,$new,$URL) = @_;
+ return undef unless ref($self);
+
+ my $newhandle=InternetOpenUrl($self->{'handle'},$URL,"",0,0,0);
+ if(!$newhandle) {
+ $self->{'Error'} = "Cannot open URL.";
+ return undef;
+ } else {
+ $self->{'connections'}++;
+ $_[1] = _new($newhandle);
+ $_[1]->{'Type'} = "URL";
+ $_[1]->{'URL'} = $URL;
+ return $newhandle;
+ }
+}
+
+
+#================
+sub TimeConvert {
+#================
+ my($self, $sec, $min, $hour, $day, $mon, $year, $wday, $rfc) = @_;
+ return undef unless ref($self);
+
+ if(!defined($rfc)) {
+ return InternetTimeToSystemTime($sec);
+ } else {
+ return InternetTimeFromSystemTime($sec, $min, $hour,
+ $day, $mon, $year,
+ $wday, $rfc);
+ }
+}
+
+
+#=======================
+sub QueryDataAvailable {
+#=======================
+ my($self) = @_;
+ return undef unless ref($self);
+
+ return InternetQueryDataAvailable($self->{'handle'});
+}
+
+
+#=============
+sub ReadFile {
+#=============
+ my($self, $buffersize) = @_;
+ return undef unless ref($self);
+
+ my $howmuch = InternetQueryDataAvailable($self->{'handle'});
+ $buffersize = $howmuch unless defined($buffersize);
+ return InternetReadFile($self->{'handle'}, ($howmuch<$buffersize) ? $howmuch
+ : $buffersize);
+}
+
+
+#===================
+sub ReadEntireFile {
+#===================
+ my($handle) = @_;
+ my $content = "";
+ my $buffersize = 16000;
+ my $howmuch = 0;
+ my $buffer = "";
+
+ $handle = $handle->{'handle'} if defined($handle) and ref($handle);
+
+ $howmuch = InternetQueryDataAvailable($handle);
+ # print "\nReadEntireFile: $howmuch bytes to read...\n";
+
+ while($howmuch>0) {
+ $buffer = InternetReadFile($handle, ($howmuch<$buffersize) ? $howmuch
+ : $buffersize);
+ # print "\nReadEntireFile: ", length($buffer), " bytes read...\n";
+
+ if(!defined($buffer)) {
+ return undef;
+ } else {
+ $content .= $buffer;
+ }
+ $howmuch = InternetQueryDataAvailable($handle);
+ # print "\nReadEntireFile: still $howmuch bytes to read...\n";
+
+ }
+ return $content;
+}
+
+
+#=============
+sub FetchURL {
+#=============
+ # (OpenURL+Read+Close)...
+ my($self, $URL) = @_;
+ return undef unless ref($self);
+
+ my $newhandle = InternetOpenUrl($self->{'handle'}, $URL, "", 0, 0, 0);
+ if(!$newhandle) {
+ $self->{'Error'} = "Cannot open URL.";
+ return undef;
+ } else {
+ my $content = ReadEntireFile($newhandle);
+ InternetCloseHandle($newhandle);
+ return $content;
+ }
+}
+
+
+#================
+sub Connections {
+#================
+ my($self) = @_;
+ return undef unless ref($self);
+
+ return $self->{'connections'} if $self->{'Type'} eq "Internet";
+ return undef;
+}
+
+
+#================
+sub GetResponse {
+#================
+ my($num, $text) = InternetGetLastResponseInfo();
+ return $text;
+}
+
+#===========
+sub Option {
+#===========
+ my($self, $option, $value) = @_;
+ return undef unless ref($self);
+
+ my $retval = 0;
+
+ $option = constant("INTERNET_OPTION_USER_AGENT", 0) unless defined($option);
+
+ if(!defined($value)) {
+ $retval = InternetQueryOption($self->{'handle'}, $option);
+ } else {
+ $retval = InternetSetOption($self->{'handle'}, $option, $value);
+ }
+ return $retval;
+}
+
+
+#==============
+sub UserAgent {
+#==============
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_USER_AGENT", 0), $value);
+}
+
+
+#=============
+sub Username {
+#=============
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP" and $self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Username() only on FTP or HTTP sessions.";
+ return undef;
+ }
+
+ return Option($self, constant("INTERNET_OPTION_USERNAME", 0), $value);
+}
+
+
+#=============
+sub Password {
+#=============
+ my($self, $value)=@_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP" and $self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Password() only on FTP or HTTP sessions.";
+ return undef;
+ }
+
+ return Option($self, constant("INTERNET_OPTION_PASSWORD", 0), $value);
+}
+
+
+#===================
+sub ConnectTimeout {
+#===================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_CONNECT_TIMEOUT", 0), $value);
+}
+
+
+#===================
+sub ConnectRetries {
+#===================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_CONNECT_RETRIES", 0), $value);
+}
+
+
+#===================
+sub ConnectBackoff {
+#===================
+ my($self,$value)=@_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_CONNECT_BACKOFF", 0), $value);
+}
+
+
+#====================
+sub DataSendTimeout {
+#====================
+ my($self,$value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_DATA_SEND_TIMEOUT", 0), $value);
+}
+
+
+#=======================
+sub DataReceiveTimeout {
+#=======================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_DATA_RECEIVE_TIMEOUT", 0), $value);
+}
+
+
+#==========================
+sub ControlReceiveTimeout {
+#==========================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT", 0), $value);
+}
+
+
+#=======================
+sub ControlSendTimeout {
+#=======================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ return Option($self, constant("INTERNET_OPTION_CONTROL_SEND_TIMEOUT", 0), $value);
+}
+
+
+#================
+sub QueryOption {
+#================
+ my($self, $option) = @_;
+ return undef unless ref($self);
+
+ return InternetQueryOption($self->{'handle'}, $option);
+}
+
+
+#==============
+sub SetOption {
+#==============
+ my($self, $option, $value) = @_;
+ return undef unless ref($self);
+
+ return InternetSetOption($self->{'handle'}, $option, $value);
+}
+
+
+#=============
+sub CrackURL {
+#=============
+ my($self, $URL, $flags) = @_;
+ return undef unless ref($self);
+
+ $flags = constant("ICU_ESCAPE", 0) unless defined($flags);
+
+ my @newurl = InternetCrackUrl($URL, $flags);
+
+ if(!defined($newurl[0])) {
+ $self->{'Error'} = "Cannot crack URL.";
+ return undef;
+ } else {
+ return @newurl;
+ }
+}
+
+
+#==============
+sub CreateURL {
+#==============
+ my($self, $scheme, $hostname, $port,
+ $username, $password,
+ $path, $extrainfo, $flags) = @_;
+ return undef unless ref($self);
+
+ if(ref($scheme) and ref($scheme) eq "HASH") {
+ $flags = $hostname;
+ $hostname = $scheme->{'hostname'};
+ $port = $scheme->{'port'};
+ $username = $scheme->{'username'};
+ $password = $scheme->{'password'};
+ $path = $scheme->{'path'};
+ $extrainfo = $scheme->{'extrainfo'};
+ my $myscheme = $scheme->{'scheme'};
+ undef $scheme;
+ $scheme = $myscheme;
+ }
+
+ $hostname = "" unless defined($hostname);
+ $port = 0 unless defined($port);
+ $username = "" unless defined($username);
+ $password = "" unless defined($password);
+ $path = "" unless defined($path);
+ $extrainfo = "" unless defined($extrainfo);
+ $flags = constant("ICU_ESCAPE", 0) unless defined($flags);
+
+ my $newurl = InternetCreateUrl($scheme, $hostname, $port,
+ $username, $password,
+ $path, $extrainfo, $flags);
+ if(!defined($newurl)) {
+ $self->{'Error'} = "Cannot create URL.";
+ return undef;
+ } else {
+ return $newurl;
+ }
+}
+
+
+#====================
+sub CanonicalizeURL {
+#====================
+ my($self, $URL, $flags) = @_;
+ return undef unless ref($self);
+
+ my $newurl = InternetCanonicalizeUrl($URL, $flags);
+ if(!defined($newurl)) {
+ $self->{'Error'} = "Cannot canonicalize URL.";
+ return undef;
+ } else {
+ return $newurl;
+ }
+}
+
+
+#===============
+sub CombineURL {
+#===============
+ my($self, $baseURL, $relativeURL, $flags) = @_;
+ return undef unless ref($self);
+
+ my $newurl = InternetCombineUrl($baseURL, $relativeURL, $flags);
+ if(!defined($newurl)) {
+ $self->{'Error'} = "Cannot combine URL(s).";
+ return undef;
+ } else {
+ return $newurl;
+ }
+}
+
+
+#======================
+sub SetStatusCallback {
+#======================
+ my($self) = @_;
+ return undef unless ref($self);
+
+ my $callback = InternetSetStatusCallback($self->{'handle'});
+ print "callback=$callback, constant=",constant("INTERNET_INVALID_STATUS_CALLBACK", 0), "\n";
+ if($callback == constant("INTERNET_INVALID_STATUS_CALLBACK", 0)) {
+ return undef;
+ } else {
+ return $callback;
+ }
+}
+
+
+#======================
+sub GetStatusCallback {
+#======================
+ my($self, $context) = @_;
+ $context = $self if not defined $context;
+ return($callback_code{$context}, $callback_info{$context});
+}
+
+
+#==========
+sub Error {
+#==========
+ my($self) = @_;
+ return undef unless ref($self);
+
+ require Win32 unless defined &Win32::GetLastError;
+ my $errtext = "";
+ my $tmp = "";
+ my $errnum = Win32::GetLastError();
+
+ if($errnum < 12000) {
+ $errtext = Win32::FormatMessage($errnum);
+ $errtext =~ s/[\r\n]//g;
+ } elsif($errnum == 12003) {
+ ($tmp, $errtext) = InternetGetLastResponseInfo();
+ chomp $errtext;
+ 1 while($errtext =~ s/(.*)\n//); # the last line should be significative...
+ # otherwise call GetResponse() to get it whole
+ } elsif($errnum >= 12000) {
+ $errtext = FormatMessage($errnum);
+ $errtext =~ s/[\r\n]//g;
+ } else {
+ $errtext="Error";
+ }
+ if($errnum == 0 and defined($self->{'Error'})) {
+ if($self->{'Error'} == -2) {
+ $errnum = -2;
+ $errtext = "Asynchronous operations not available.";
+ } else {
+ $errnum = -1;
+ $errtext = $self->{'Error'};
+ }
+ }
+ return (wantarray)? ($errnum, $errtext) : "\[".$errnum."\] ".$errtext;
+}
+
+
+#============
+sub Version {
+#============
+ my $dll = InternetDllVersion();
+ $dll =~ s/\0//g;
+ return (wantarray)? ($Win32::Internet::VERSION, $dll)
+ : $Win32::Internet::VERSION."/".$dll;
+}
+
+
+#==========
+sub Close {
+#==========
+ my($self, $handle) = @_;
+ if(!defined($handle)) {
+ return undef unless ref($self);
+ $handle = $self->{'handle'};
+ }
+ InternetCloseHandle($handle);
+}
+
+
+
+#######################################################################
+# FTP CLASS METHODS
+#
+
+#======== ### FTP CONSTRUCTOR
+sub FTP {
+#========
+ my($self, $new, $server, $username, $password, $port, $pasv, $context) = @_;
+ return undef unless ref($self);
+
+ if(ref($server) and ref($server) eq "HASH") {
+ $port = $server->{'port'};
+ $username = $server->{'username'};
+ $password = $password->{'host'};
+ my $myserver = $server->{'server'};
+ $pasv = $server->{'pasv'};
+ $context = $server->{'context'};
+ undef $server;
+ $server = $myserver;
+ }
+
+ $server = "" unless defined($server);
+ $username = "anonymous" unless defined($username);
+ $password = "" unless defined($password);
+ $port = 21 unless defined($port);
+ $context = 0 unless defined($context);
+
+ $pasv = $self->{'pasv'} unless defined $pasv;
+ $pasv = $pasv ? constant("INTERNET_FLAG_PASSIVE",0) : 0;
+
+ my $newhandle = InternetConnect($self->{'handle'}, $server, $port,
+ $username, $password,
+ constant("INTERNET_SERVICE_FTP", 0),
+ $pasv, $context);
+ if($newhandle) {
+ $self->{'connections'}++;
+ $_[1] = _new($newhandle);
+ $_[1]->{'Type'} = "FTP";
+ $_[1]->{'Mode'} = "bin";
+ $_[1]->{'pasv'} = $pasv;
+ $_[1]->{'username'} = $username;
+ $_[1]->{'password'} = $password;
+ $_[1]->{'server'} = $server;
+ return $newhandle;
+ } else {
+ return undef;
+ }
+}
+
+#========
+sub Pwd {
+#========
+ my($self) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP" or !defined($self->{'handle'})) {
+ $self->{'Error'} = "Pwd() only on FTP sessions.";
+ return undef;
+ }
+
+ return FtpGetCurrentDirectory($self->{'handle'});
+}
+
+
+#=======
+sub Cd {
+#=======
+ my($self, $path) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP" || !defined($self->{'handle'})) {
+ $self->{'Error'} = "Cd() only on FTP sessions.";
+ return undef;
+ }
+
+ my $retval = FtpSetCurrentDirectory($self->{'handle'}, $path);
+ if(!defined($retval)) {
+ return undef;
+ } else {
+ return $path;
+ }
+}
+#====================
+sub Cwd { Cd(@_); }
+sub Chdir { Cd(@_); }
+#====================
+
+
+#==========
+sub Mkdir {
+#==========
+ my($self, $path) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP" or !defined($self->{'handle'})) {
+ $self->{'Error'} = "Mkdir() only on FTP sessions.";
+ return undef;
+ }
+
+ my $retval = FtpCreateDirectory($self->{'handle'}, $path);
+ $self->{'Error'} = "Can't create directory." unless defined($retval);
+ return $retval;
+}
+#====================
+sub Md { Mkdir(@_); }
+#====================
+
+
+#=========
+sub Mode {
+#=========
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP" or !defined($self->{'handle'})) {
+ $self->{'Error'} = "Mode() only on FTP sessions.";
+ return undef;
+ }
+
+ if(!defined($value)) {
+ return $self->{'Mode'};
+ } else {
+ my $modesub = ($value =~ /^a/i) ? "Ascii" : "Binary";
+ $self->$modesub($_[0]);
+ }
+ return $self->{'Mode'};
+}
+
+
+#==========
+sub Rmdir {
+#==========
+ my($self, $path) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP" or !defined($self->{'handle'})) {
+ $self->{'Error'} = "Rmdir() only on FTP sessions.";
+ return undef;
+ }
+ my $retval = FtpRemoveDirectory($self->{'handle'}, $path);
+ $self->{'Error'} = "Can't remove directory." unless defined($retval);
+ return $retval;
+}
+#====================
+sub Rd { Rmdir(@_); }
+#====================
+
+
+#=========
+sub Pasv {
+#=========
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(defined($value) and $self->{'Type'} eq "Internet") {
+ if($value == 0) {
+ $self->{'pasv'} = 0;
+ } else {
+ $self->{'pasv'} = 1;
+ }
+ }
+ return $self->{'pasv'};
+}
+
+#=========
+sub List {
+#=========
+ my($self, $pattern, $retmode) = @_;
+ return undef unless ref($self);
+
+ my $retval = "";
+ my $size = "";
+ my $attr = "";
+ my $ctime = "";
+ my $atime = "";
+ my $mtime = "";
+ my $csec = 0; my $cmin = 0; my $chou = 0; my $cday = 0; my $cmon = 0; my $cyea = 0;
+ my $asec = 0; my $amin = 0; my $ahou = 0; my $aday = 0; my $amon = 0; my $ayea = 0;
+ my $msec = 0; my $mmin = 0; my $mhou = 0; my $mday = 0; my $mmon = 0; my $myea = 0;
+ my $newhandle = 0;
+ my $nextfile = 1;
+ my @results = ();
+ my ($filename, $altname, $file);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "List() only on FTP sessions.";
+ return undef;
+ }
+
+ $pattern = "" unless defined($pattern);
+ $retmode = 1 unless defined($retmode);
+
+ if($retmode == 2) {
+
+ ( $newhandle,$filename, $altname, $size, $attr,
+ $csec, $cmin, $chou, $cday, $cmon, $cyea,
+ $asec, $amin, $ahou, $aday, $amon, $ayea,
+ $msec, $mmin, $mhou, $mday, $mmon, $myea
+ ) = FtpFindFirstFile($self->{'handle'}, $pattern, 0, 0);
+
+ if(!$newhandle) {
+ $self->{'Error'} = "Can't read FTP directory.";
+ return undef;
+ } else {
+
+ while($nextfile) {
+ $ctime = join(",", ($csec, $cmin, $chou, $cday, $cmon, $cyea));
+ $atime = join(",", ($asec, $amin, $ahou, $aday, $amon, $ayea));
+ $mtime = join(",", ($msec, $mmin, $mhou, $mday, $mmon, $myea));
+ push(@results, $filename, $altname, $size, $attr, $ctime, $atime, $mtime);
+
+ ( $nextfile, $filename, $altname, $size, $attr,
+ $csec, $cmin, $chou, $cday, $cmon, $cyea,
+ $asec, $amin, $ahou, $aday, $amon, $ayea,
+ $msec, $mmin, $mhou, $mday, $mmon, $myea
+ ) = InternetFindNextFile($newhandle);
+
+ }
+ InternetCloseHandle($newhandle);
+ return @results;
+
+ }
+
+ } elsif($retmode == 3) {
+
+ ( $newhandle,$filename, $altname, $size, $attr,
+ $csec, $cmin, $chou, $cday, $cmon, $cyea,
+ $asec, $amin, $ahou, $aday, $amon, $ayea,
+ $msec, $mmin, $mhou, $mday, $mmon, $myea
+ ) = FtpFindFirstFile($self->{'handle'}, $pattern, 0, 0);
+
+ if(!$newhandle) {
+ $self->{'Error'} = "Can't read FTP directory.";
+ return undef;
+
+ } else {
+
+ while($nextfile) {
+ $ctime = join(",", ($csec, $cmin, $chou, $cday, $cmon, $cyea));
+ $atime = join(",", ($asec, $amin, $ahou, $aday, $amon, $ayea));
+ $mtime = join(",", ($msec, $mmin, $mhou, $mday, $mmon, $myea));
+ $file = { "name" => $filename,
+ "altname" => $altname,
+ "size" => $size,
+ "attr" => $attr,
+ "ctime" => $ctime,
+ "atime" => $atime,
+ "mtime" => $mtime,
+ };
+ push(@results, $file);
+
+ ( $nextfile, $filename, $altname, $size, $attr,
+ $csec, $cmin, $chou, $cday, $cmon, $cyea,
+ $asec, $amin, $ahou, $aday, $amon, $ayea,
+ $msec, $mmin, $mhou, $mday, $mmon, $myea
+ ) = InternetFindNextFile($newhandle);
+
+ }
+ InternetCloseHandle($newhandle);
+ return @results;
+ }
+
+ } else {
+
+ ($newhandle, $filename) = FtpFindFirstFile($self->{'handle'}, $pattern, 0, 0);
+
+ if(!$newhandle) {
+ $self->{'Error'} = "Can't read FTP directory.";
+ return undef;
+
+ } else {
+
+ while($nextfile) {
+ push(@results, $filename);
+
+ ($nextfile, $filename) = InternetFindNextFile($newhandle);
+ # print "List.no more files\n" if !$nextfile;
+
+ }
+ InternetCloseHandle($newhandle);
+ return @results;
+ }
+ }
+}
+#====================
+sub Ls { List(@_); }
+sub Dir { List(@_); }
+#====================
+
+
+#=================
+sub FileAttrInfo {
+#=================
+ my($self,$attr) = @_;
+ my @attrinfo = ();
+ push(@attrinfo, "READONLY") if $attr & 1;
+ push(@attrinfo, "HIDDEN") if $attr & 2;
+ push(@attrinfo, "SYSTEM") if $attr & 4;
+ push(@attrinfo, "DIRECTORY") if $attr & 16;
+ push(@attrinfo, "ARCHIVE") if $attr & 32;
+ push(@attrinfo, "NORMAL") if $attr & 128;
+ push(@attrinfo, "TEMPORARY") if $attr & 256;
+ push(@attrinfo, "COMPRESSED") if $attr & 2048;
+ return (wantarray)? @attrinfo : join(" ", @attrinfo);
+}
+
+
+#===========
+sub Binary {
+#===========
+ my($self) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Binary() only on FTP sessions.";
+ return undef;
+ }
+ $self->{'Mode'} = "bin";
+ return undef;
+}
+#======================
+sub Bin { Binary(@_); }
+#======================
+
+
+#==========
+sub Ascii {
+#==========
+ my($self) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Ascii() only on FTP sessions.";
+ return undef;
+ }
+ $self->{'Mode'} = "asc";
+ return undef;
+}
+#=====================
+sub Asc { Ascii(@_); }
+#=====================
+
+
+#========
+sub Get {
+#========
+ my($self, $remote, $local, $overwrite, $flags, $context) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Get() only on FTP sessions.";
+ return undef;
+ }
+ my $mode = ($self->{'Mode'} eq "asc" ? 1 : 2);
+
+ $remote = "" unless defined($remote);
+ $local = $remote unless defined($local);
+ $overwrite = 0 unless defined($overwrite);
+ $flags = 0 unless defined($flags);
+ $context = 0 unless defined($context);
+
+ my $retval = FtpGetFile($self->{'handle'},
+ $remote,
+ $local,
+ $overwrite,
+ $flags,
+ $mode,
+ $context);
+ $self->{'Error'} = "Can't get file." unless defined($retval);
+ return $retval;
+}
+
+
+#===========
+sub Rename {
+#===========
+ my($self, $oldname, $newname) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Rename() only on FTP sessions.";
+ return undef;
+ }
+
+ my $retval = FtpRenameFile($self->{'handle'}, $oldname, $newname);
+ $self->{'Error'} = "Can't rename file." unless defined($retval);
+ return $retval;
+}
+#======================
+sub Ren { Rename(@_); }
+#======================
+
+
+#===========
+sub Delete {
+#===========
+ my($self, $filename) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Delete() only on FTP sessions.";
+ return undef;
+ }
+ my $retval = FtpDeleteFile($self->{'handle'}, $filename);
+ $self->{'Error'} = "Can't delete file." unless defined($retval);
+ return $retval;
+}
+#======================
+sub Del { Delete(@_); }
+#======================
+
+
+#========
+sub Put {
+#========
+ my($self, $local, $remote, $context) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "FTP") {
+ $self->{'Error'} = "Put() only on FTP sessions.";
+ return undef;
+ }
+ my $mode = ($self->{'Mode'} eq "asc" ? 1 : 2);
+
+ $context = 0 unless defined($context);
+
+ my $retval = FtpPutFile($self->{'handle'}, $local, $remote, $mode, $context);
+ $self->{'Error'} = "Can't put file." unless defined($retval);
+ return $retval;
+}
+
+
+#######################################################################
+# HTTP CLASS METHODS
+#
+
+#========= ### HTTP CONSTRUCTOR
+sub HTTP {
+#=========
+ my($self, $new, $server, $username, $password, $port, $flags, $context) = @_;
+ return undef unless ref($self);
+
+ if(ref($server) and ref($server) eq "HASH") {
+ my $myserver = $server->{'server'};
+ $username = $server->{'username'};
+ $password = $password->{'host'};
+ $port = $server->{'port'};
+ $flags = $server->{'flags'};
+ $context = $server->{'context'};
+ undef $server;
+ $server = $myserver;
+ }
+
+ $server = "" unless defined($server);
+ $username = "anonymous" unless defined($username);
+ $password = "" unless defined($password);
+ $port = 80 unless defined($port);
+ $flags = 0 unless defined($flags);
+ $context = 0 unless defined($context);
+
+ my $newhandle = InternetConnect($self->{'handle'}, $server, $port,
+ $username, $password,
+ constant("INTERNET_SERVICE_HTTP", 0),
+ $flags, $context);
+ if($newhandle) {
+ $self->{'connections'}++;
+ $_[1] = _new($newhandle);
+ $_[1]->{'Type'} = "HTTP";
+ $_[1]->{'username'} = $username;
+ $_[1]->{'password'} = $password;
+ $_[1]->{'server'} = $server;
+ $_[1]->{'accept'} = "text/*\0image/gif\0image/jpeg\0\0";
+ return $newhandle;
+ } else {
+ return undef;
+ }
+}
+
+
+#================
+sub OpenRequest {
+#================
+ # alternatively to Request:
+ # it creates a new HTTP_Request object
+ # you can act upon it with AddHeader, SendRequest, ReadFile, QueryInfo, Close, ...
+
+ my($self, $new, $path, $method, $version, $referer, $accept, $flags, $context) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP") {
+ $self->{'Error'} = "OpenRequest() only on HTTP sessions.";
+ return undef;
+ }
+
+ if(ref($path) and ref($path) eq "HASH") {
+ $method = $path->{'method'};
+ $version = $path->{'version'};
+ $referer = $path->{'referer'};
+ $accept = $path->{'accept'};
+ $flags = $path->{'flags'};
+ $context = $path->{'context'};
+ my $mypath = $path->{'path'};
+ undef $path;
+ $path = $mypath;
+ }
+
+ $method = "GET" unless defined($method);
+ $path = "/" unless defined($path);
+ $version = "HTTP/1.0" unless defined($version);
+ $referer = "" unless defined($referer);
+ $accept = $self->{'accept'} unless defined($accept);
+ $flags = 0 unless defined($flags);
+ $context = 0 unless defined($context);
+
+ $path = "/".$path if substr($path,0,1) ne "/";
+ # accept string list needs to be terminated by double-NULL
+ $accept .= "\0\0" unless $accept =~ /\0\0\z/;
+
+ my $newhandle = HttpOpenRequest($self->{'handle'},
+ $method,
+ $path,
+ $version,
+ $referer,
+ $accept,
+ $flags,
+ $context);
+ if($newhandle) {
+ $_[1] = _new($newhandle);
+ $_[1]->{'Type'} = "HTTP_Request";
+ $_[1]->{'method'} = $method;
+ $_[1]->{'request'} = $path;
+ $_[1]->{'accept'} = $accept;
+ return $newhandle;
+ } else {
+ return undef;
+ }
+}
+
+#================
+sub SendRequest {
+#================
+ my($self, $postdata) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP_Request") {
+ $self->{'Error'} = "SendRequest() only on HTTP requests.";
+ return undef;
+ }
+
+ $postdata = "" unless defined($postdata);
+
+ return HttpSendRequest($self->{'handle'}, "", $postdata);
+}
+
+
+#==============
+sub AddHeader {
+#==============
+ my($self, $header, $flags) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP_Request") {
+ $self->{'Error'} = "AddHeader() only on HTTP requests.";
+ return undef;
+ }
+
+ $flags = constant("HTTP_ADDREQ_FLAG_ADD", 0) if (!defined($flags) or $flags == 0);
+
+ return HttpAddRequestHeaders($self->{'handle'}, $header, $flags);
+}
+
+
+#==============
+sub QueryInfo {
+#==============
+ my($self, $header, $flags) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP_Request") {
+ $self->{'Error'}="QueryInfo() only on HTTP requests.";
+ return undef;
+ }
+
+ $flags = constant("HTTP_QUERY_CUSTOM", 0) if (!defined($flags) and defined($header));
+ my @queryresult = HttpQueryInfo($self->{'handle'}, $flags, $header);
+ return (wantarray)? @queryresult : join(" ", @queryresult);
+}
+
+
+#============
+sub Request {
+#============
+ # HttpOpenRequest+HttpAddHeaders+HttpSendRequest+InternetReadFile+HttpQueryInfo
+ my($self, $path, $method, $version, $referer, $accept, $flags, $postdata) = @_;
+ return undef unless ref($self);
+
+ if($self->{'Type'} ne "HTTP") {
+ $self->{'Error'} = "Request() only on HTTP sessions.";
+ return undef;
+ }
+
+ if(ref($path) and ref($path) eq "HASH") {
+ $method = $path->{'method'};
+ $version = $path->{'version'};
+ $referer = $path->{'referer'};
+ $accept = $path->{'accept'};
+ $flags = $path->{'flags'};
+ $postdata = $path->{'postdata'};
+ my $mypath = $path->{'path'};
+ undef $path;
+ $path = $mypath;
+ }
+
+ my $content = "";
+ my $result = "";
+ my @queryresult = ();
+ my $statuscode = "";
+ my $headers = "";
+
+ $path = "/" unless defined($path);
+ $method = "GET" unless defined($method);
+ $version = "HTTP/1.0" unless defined($version);
+ $referer = "" unless defined($referer);
+ $accept = $self->{'accept'} unless defined($accept);
+ $flags = 0 unless defined($flags);
+ $postdata = "" unless defined($postdata);
+
+ $path = "/".$path if substr($path,0,1) ne "/";
+ # accept string list needs to be terminated by double-NULL
+ $accept .= "\0\0" unless $accept =~ /\0\0\z/;
+
+ my $newhandle = HttpOpenRequest($self->{'handle'},
+ $method,
+ $path,
+ $version,
+ $referer,
+ $accept,
+ $flags,
+ 0);
+
+ if($newhandle) {
+
+ $result = HttpSendRequest($newhandle, "", $postdata);
+
+ if(defined($result)) {
+ $statuscode = HttpQueryInfo($newhandle,
+ constant("HTTP_QUERY_STATUS_CODE", 0), "");
+ $headers = HttpQueryInfo($newhandle,
+ constant("HTTP_QUERY_RAW_HEADERS_CRLF", 0), "");
+ $content = ReadEntireFile($newhandle);
+
+ InternetCloseHandle($newhandle);
+
+ return($statuscode, $headers, $content);
+ } else {
+ return undef;
+ }
+ } else {
+ return undef;
+ }
+}
+
+
+#######################################################################
+# END OF THE PUBLIC METHODS
+#
+
+
+#========= ### SUB-CLASSES CONSTRUCTOR
+sub _new {
+#=========
+ my $self = {};
+ if ($_[0]) {
+ $self->{'handle'} = $_[0];
+ bless $self;
+ } else {
+ undef($self);
+ }
+ $self;
+}
+
+
+#============ ### CLASS DESTRUCTOR
+sub DESTROY {
+#============
+ my($self) = @_;
+ # print "Closing handle $self->{'handle'}...\n";
+ InternetCloseHandle($self->{'handle'});
+ # [dada] rest in peace
+}
+
+
+#=============
+sub callback {
+#=============
+ my($name, $status, $info) = @_;
+ $callback_code{$name} = $status;
+ $callback_info{$name} = $info;
+}
+
+#######################################################################
+# dynamically load in the Internet.pll module.
+#
+
+bootstrap Win32::Internet;
+
+# Preloaded methods go here.
+
+#Currently Autoloading is not implemented in Perl for win32
+# Autoload methods go after __END__, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Internet - Access to WININET.DLL functions
+
+=head1 INTRODUCTION
+
+This extension to Perl implements the Win32 Internet APIs (found in
+F<WININET.DLL>). They give a complete support for HTTP, FTP and GOPHER
+connections.
+
+See the L<"Version History"> and the L<"Functions Table"> for a list
+of the currently supported features. You should also get a copy of the
+L<"Microsoft Win32 Internet Functions"> documentation.
+
+=head1 REFERENCE
+
+To use this module, first add the following line at the beginning of
+your script:
+
+ use Win32::Internet;
+
+Then you have to open an Internet connection with this command:
+
+ $Connection = new Win32::Internet();
+
+This is required to use any of the function of this module. It will
+create an Internet object in Perl on which you can act upon with the
+L<"General Internet Functions"> explained later.
+
+The objects available are:
+
+=over
+
+=item *
+
+Internet connections (the main object, see C<new>)
+
+=item *
+
+URLs (see C<OpenURL>)
+
+=item *
+
+FTP sessions (see C<FTP>)
+
+=item *
+
+HTTP sessions (see C<HTTP>)
+
+=item *
+
+HTTP requests (see C<OpenRequest>)
+
+=back
+
+As in the good Perl tradition, there are in this extension different
+ways to do the same thing; there are, in fact, different levels of
+implementation of the Win32 Internet Functions. Some routines use
+several Win32 API functions to perform a complex task in a single
+call; they are simpler to use, but of course less powerful.
+
+There are then other functions that implement nothing more and nothing
+less than the corresponding API function, so you can use all of their
+power, but with some additional programming steps.
+
+To make an example, there is a function called C<FetchURL> that you
+can use to fetch the content of any HTTP, FTP or GOPHER URL with this
+simple commands:
+
+ $INET = new Win32::Internet();
+ $file = $INET->FetchURL("http://www.yahoo.com");
+
+You can have the same result (and this is actually what is done by
+C<FetchURL>) this way:
+
+ $INET = new Win32::Internet();
+ $URL = $INET->OpenURL("http://www.yahoo.com");
+ $file = $URL->ReadFile();
+ $URL->Close();
+
+Or, you can open a complete HTTP session:
+
+ $INET = new Win32::Internet();
+ $HTTP = $INET->HTTP("www.yahoo.com", "anonymous", "dada@divinf.it");
+ ($statuscode, $headers, $file) = $HTTP->Request("/");
+ $HTTP->Close();
+
+Finally, you can choose to manage even the HTTP request:
+
+ $INET = new Win32::Internet();
+ $HTTP = $INET->HTTP("www.yahoo.com", "anonymous", "dada@divinf.it");
+ $HTTP->OpenRequest($REQ, "/");
+ $REQ->AddHeader("If-Modified-Since: Saturday, 16-Nov-96 15:58:50 GMT");
+ $REQ->SendRequest();
+ $statuscode = $REQ->QueryInfo("",HTTP_QUERY_STATUS_CODE);
+ $lastmodified = $REQ->QueryInfo("Last-Modified");
+ $file = $REQ->ReadEntireFile();
+ $REQ->Close();
+ $HTTP->Close();
+
+To open and control a complete FTP session, type:
+
+ $Connection->FTP($Session, "ftp://ftp.activeware.com", "anonymous", "dada\@divinf.it");
+
+This will create an FTP object in Perl to which you can apply the L<"FTP
+functions"> provided by the package:
+
+ $Session->Cd("/ntperl/perl5.001m/CurrentBuild");
+ $Session->Ascii();
+ $Session->Get("110-i86.zip");
+ $Session->Close();
+
+For a more complete example, see the TEST.PL file that comes with the
+package.
+
+=head2 General Internet Functions
+
+B<General Note>
+
+All methods assume that you have the line:
+
+ use Win32::Internet;
+
+somewhere before the method calls, and that you have an Internet
+object called $INET which was created using this call:
+
+ $INET = new Win32::Internet();
+
+See C<new> for more information.
+
+B<Methods>
+
+=over
+
+=item CanonicalizeURL URL, [flags]
+
+Converts a URL to a canonical format, which includes converting unsafe
+characters to escape sequences. Returns the canonicalized URL or
+C<undef> on errors. For the possible values of I<flags>, refer to the
+L<"Microsoft Win32 Internet Functions"> document. See also
+C<CombineURL> and C<OpenURL>.
+
+Example:
+
+ $cURL = $INET->CanonicalizeURL($URL);
+ $URL = $INET->CanonicalizeURL($cURL, ICU_DECODE);
+
+=item Close
+
+=item Close object
+
+Closes an Internet connection. This can be applied to any
+Win32::Internet object (Internet connections, URLs, FTP sessions,
+etc.). Note that it is not "strictly" required to close the
+connections you create, since the Win32::Internet objects are
+automatically closed when the program ends (or when you elsehow
+destroy such an object).
+
+Example:
+
+ $INET->Close();
+ $FTP->Close();
+ $INET->Close($FTP); # same as above...
+
+=item CombineURL baseURL, relativeURL, [flags]
+
+Combines a base and relative URL into a single URL. Returns the
+(canonicalized) combined URL or C<undef> on errors. For the possible
+values of I<flags>, refer to the L<"Microsoft Win32 Internet
+Functions"> document. See also C<CombineURL> and C<OpenURL>.
+
+Example:
+
+ $URL = $INET->CombineURL("http://www.divinf.it/dada/perl/internet", "..");
+
+=item ConnectBackoff [value]
+
+Reads or sets the delay value, in milliseconds, to wait between
+connection retries. If no I<value> parameter is specified, the
+current value is returned; otherwise, the delay between retries is set
+to I<value>. See also C<ConnectTimeout>, C<ConnectRetries>,
+C<QueryOption> and C<SetOption>.
+
+Example:
+
+ $HTTP->ConnectBackoff(2000);
+ $backoff = $HTTP->ConnectBackoff();
+
+=item ConnectRetries [value]
+
+Reads or sets the number of times a connection is retried before
+considering it failed. If no I<value> parameter is specified, the
+current value is returned; otherwise, the number of retries is set to
+I<value>. The default value for C<ConnectRetries> is 5. See also
+C<ConnectBackoff>, C<ConnectTimeout>, C<QueryOption> and C<SetOption>.
+
+Example:
+
+ $HTTP->ConnectRetries(20);
+ $retries = $HTTP->ConnectRetries();
+
+=item ConnectTimeout [value]
+
+Reads or sets the timeout value (in milliseconds) before a connection
+is considered failed. If no I<value> parameter is specified, the
+current value is returned; otherwise, the timeout is set to I<value>.
+The default value for C<ConnectTimeout> is infinite. See also
+C<ConnectBackoff>, C<ConnectRetries>, C<QueryOption> and C<SetOption>.
+
+Example:
+
+ $HTTP->ConnectTimeout(10000);
+ $timeout = $HTTP->ConnectTimeout();
+
+=item ControlReceiveTimeout [value]
+
+Reads or sets the timeout value (in milliseconds) to use for non-data
+(control) receive requests before they are canceled. Currently, this
+value has meaning only for C<FTP> sessions. If no I<value> parameter
+is specified, the current value is returned; otherwise, the timeout is
+set to I<value>. The default value for C<ControlReceiveTimeout> is
+infinite. See also C<ControlSendTimeout>, C<QueryOption> and
+C<SetOption>.
+
+Example:
+
+ $HTTP->ControlReceiveTimeout(10000);
+ $timeout = $HTTP->ControlReceiveTimeout();
+
+=item ControlSendTimeout [value]
+
+Reads or sets the timeout value (in milliseconds) to use for non-data
+(control) send requests before they are canceled. Currently, this
+value has meaning only for C<FTP> sessions. If no I<value> parameter
+is specified, the current value is returned; otherwise, the timeout is
+set to I<value>. The default value for C<ControlSendTimeout> is
+infinite. See also C<ControlReceiveTimeout>, C<QueryOption> and
+C<SetOption>.
+
+Example:
+
+ $HTTP->ControlSendTimeout(10000);
+ $timeout = $HTTP->ControlSendTimeout();
+
+=item CrackURL URL, [flags]
+
+Splits an URL into its component parts and returns them in an array.
+Returns C<undef> on errors, otherwise the array will contain the
+following values: I<scheme, host, port, username, password, path,
+extrainfo>.
+
+For example, the URL "http://www.divinf.it/index.html#top" can be
+splitted in:
+
+ http, www.divinf.it, 80, anonymous, dada@divinf.it, /index.html, #top
+
+If you don't specify a I<flags> parameter, ICU_ESCAPE will be used by
+default; for the possible values of I<flags> refer to the L<"Microsoft
+Win32 Internet Functions"> documentation. See also C<CreateURL>.
+
+Example:
+
+ @parts=$INET->CrackURL("http://www.activeware.com");
+ ($scheme, $host, $port, $user, $pass, $path, $extra) =
+ $INET->CrackURL("http://www.divinf.it:80/perl-win32/index.sht#feedback");
+
+=item CreateURL scheme, hostname, port, username, password, path, extrainfo, [flags]
+
+=item CreateURL hashref, [flags]
+
+Creates a URL from its component parts. Returns C<undef> on errors,
+otherwise the created URL.
+
+If you pass I<hashref> (a reference to an hash array), the following
+values are taken from the array:
+
+ %hash=(
+ "scheme" => "scheme",
+ "hostname" => "hostname",
+ "port" => port,
+ "username" => "username",
+ "password" => "password",
+ "path" => "path",
+ "extrainfo" => "extrainfo",
+ );
+
+If you don't specify a I<flags> parameter, ICU_ESCAPE will be used by
+default; for the other possible values of I<flags> refer to the
+L<"Microsoft Win32 Internet Functions"> documentation. See also
+C<CrackURL>.
+
+Example:
+
+ $URL=$I->CreateURL("http", "www.divinf.it", 80, "", "", "/perl-win32/index.sht", "#feedback");
+ $URL=$I->CreateURL(\%params);
+
+=item DataReceiveTimeout [value]
+
+Reads or sets the timeout value (in milliseconds) to use for data
+receive requests before they are canceled. If no I<value> parameter
+is specified, the current value is returned; otherwise, the timeout is
+set to I<value>. The default value for DataReceiveTimeout is
+infinite. See also C<DataSendTimeout>, C<QueryOption> and
+C<SetOption>.
+
+Example:
+
+ $HTTP->DataReceiveTimeout(10000);
+ $timeout = $HTTP->DataReceiveTimeout();
+
+=item DataSendTimeout [value]
+
+Reads or sets the timeout value (in milliseconds) to use for data send
+requests before they are canceled. If no I<value> parameter is
+specified, the current value is returned; otherwise, the timeout is
+set to I<value>. The default value for DataSendTimeout is infinite.
+See also C<DataReceiveTimeout>, C<QueryOption> and C<SetOption>.
+
+Example:
+
+ $HTTP->DataSendTimeout(10000);
+ $timeout = $HTTP->DataSendTimeout();
+
+=item Error
+
+Returns the last recorded error in the form of an array or string
+(depending upon the context) containing the error number and an error
+description. Can be applied on any Win32::Internet object (FTP
+sessions, etc.). There are 3 types of error you can encounter; they
+are recognizable by the error number returned:
+
+=over
+
+=item * -1
+
+A "trivial" error has occurred in the package. For example, you tried
+to use a method on the wrong type of object.
+
+=item * 1 .. 11999
+
+A generic error has occurred and the Win32::GetLastError error message
+is returned.
+
+=item * 12000 and higher
+
+An Internet error has occurred; the extended Win32 Internet API error
+message is returned.
+
+=back
+
+See also C<GetResponse>.
+
+Example:
+
+ die $INET->Error(), qq(\n);
+ ($ErrNum, $ErrText) = $INET->Error();
+
+=item FetchURL URL
+
+Fetch the content of an HTTP, FTP or GOPHER URL. Returns the content
+of the file read (or C<undef> if there was an error and nothing was
+read). See also C<OpenURL> and C<ReadFile>.
+
+Example:
+
+ $file = $INET->FetchURL("http://www.yahoo.com/");
+ $file = $INET->FetchURL("ftp://www.activeware.com/contrib/internet.zip");
+
+=item FTP ftpobject, server, username, password, [port, pasv, context]
+
+=item FTP ftpobject, hashref
+
+Opens an FTP connection to server logging in with the given
+I<username> and I<password>.
+
+The parameters and their values are:
+
+=over
+
+=item * server
+
+The server to connect to. Default: I<none>.
+
+=item * username
+
+The username used to login to the server. Default: anonymous.
+
+=item * password
+
+The password used to login to the server. Default: I<none>.
+
+=item * port
+
+The port of the FTP service on the server. Default: 21.
+
+=item * pasv
+
+If it is a value other than 0, use passive transfer mode. Default is
+taken from the parent Internet connection object; you can set this
+value with the C<Pasv> method.
+
+=item * context
+
+A number to identify this operation if it is asynchronous. See
+C<SetStatusCallback> and C<GetStatusCallback> for more info on
+asynchronous operations. Default: I<none>.
+
+=back
+
+If you pass I<hashref> (a reference to an hash array), the following
+values are taken from the array:
+
+ %hash=(
+ "server" => "server",
+ "username" => "username",
+ "password" => "password",
+ "port" => port,
+ "pasv" => pasv,
+ "context" => context,
+ );
+
+This method returns C<undef> if the connection failed, a number
+otherwise. You can then call any of the L<"FTP functions"> as methods
+of the newly created I<ftpobject>.
+
+Example:
+
+ $result = $INET->FTP($FTP, "ftp.activeware.com", "anonymous", "dada\@divinf.it");
+ # and then for example...
+ $FTP->Cd("/ntperl/perl5.001m/CurrentBuild");
+
+ $params{"server"} = "ftp.activeware.com";
+ $params{"password"} = "dada\@divinf.it";
+ $params{"pasv"} = 0;
+ $result = $INET->FTP($FTP,\%params);
+
+=item GetResponse
+
+Returns the text sent by a remote server in response to the last
+function executed. It applies on any Win32::Internet object,
+particularly of course on L<FTP sessions|"FTP functions">. See also
+the C<Error> function.
+
+Example:
+
+ print $INET->GetResponse();
+ $INET->FTP($FTP, "ftp.activeware.com", "anonymous", "dada\@divinf.it");
+ print $FTP->GetResponse();
+
+=item GetStatusCallback context
+
+Returns information about the progress of the asynchronous operation
+identified by I<context>; those informations consist of two values: a
+status code (one of the INTERNET_STATUS_* L<"Constants">) and an
+additional value depending on the status code; for example, if the
+status code returned is INTERNET_STATUS_HANDLE_CREATED, the second
+value will hold the handle just created. For more informations on
+those values, please refer to the L<"Microsoft Win32 Internet
+Functions"> documentation. See also C<SetStatusCallback>.
+
+Example:
+
+ ($status, $info) = $INET->GetStatusCallback(1);
+
+=item HTTP httpobject, server, username, password, [port, flags, context]
+
+=item HTTP httpobject, hashref
+
+Opens an HTTP connection to I<server> logging in with the given
+I<username> and I<password>.
+
+The parameters and their values are:
+
+=over
+
+=item * server
+
+The server to connect to. Default: I<none>.
+
+=item * username
+
+The username used to login to the server. Default: anonymous.
+
+=item * password
+
+The password used to login to the server. Default: I<none>.
+
+=item * port
+
+The port of the HTTP service on the server. Default: 80.
+
+=item * flags
+
+Additional flags affecting the behavior of the function. Default:
+I<none>.
+
+=item * context
+
+A number to identify this operation if it is asynchronous. See
+C<SetStatusCallback> and C<GetStatusCallback> for more info on
+asynchronous operations. Default: I<none>.
+
+=back
+
+Refer to the L<"Microsoft Win32 Internet Functions"> documentation for
+more details on those parameters.
+
+If you pass I<hashref> (a reference to an hash array), the following
+values are taken from the array:
+
+ %hash=(
+ "server" => "server",
+ "username" => "username",
+ "password" => "password",
+ "port" => port,
+ "flags" => flags,
+ "context" => context,
+ );
+
+This method returns C<undef> if the connection failed, a number
+otherwise. You can then call any of the L<"HTTP functions"> as
+methods of the newly created I<httpobject>.
+
+Example:
+
+ $result = $INET->HTTP($HTTP,"www.activeware.com","anonymous","dada\@divinf.it");
+ # and then for example...
+ ($statuscode, $headers, $file) = $HTTP->Request("/gifs/camel.gif");
+
+ $params{"server"} = "www.activeware.com";
+ $params{"password"} = "dada\@divinf.it";
+ $params{"flags"} = INTERNET_FLAG_RELOAD;
+ $result = $INET->HTTP($HTTP,\%params);
+
+=item new Win32::Internet [useragent, opentype, proxy, proxybypass, flags]
+
+=item new Win32::Internet [hashref]
+
+Creates a new Internet object and initializes the use of the Internet
+functions; this is required before any of the functions of this
+package can be used. Returns C<undef> if the connection fails, a number
+otherwise. The parameters and their values are:
+
+=over
+
+=item * useragent
+
+The user agent passed to HTTP requests. See C<OpenRequest>. Default:
+Perl-Win32::Internet/I<version>.
+
+=item * opentype
+
+How to access to the Internet (eg. directly or using a proxy).
+Default: INTERNET_OPEN_TYPE_DIRECT.
+
+=item * proxy
+
+Name of the proxy server (or servers) to use. Default: I<none>.
+
+=item * proxybypass
+
+Optional list of host names or IP addresses, or both, that are known
+locally. Default: I<none>.
+
+=item * flags
+
+Additional flags affecting the behavior of the function. Default:
+I<none>.
+
+=back
+
+Refer to the L<"Microsoft Win32 Internet Functions"> documentation for
+more details on those parameters. If you pass I<hashref> (a reference to
+an hash array), the following values are taken from the array:
+
+ %hash=(
+ "useragent" => "useragent",
+ "opentype" => "opentype",
+ "proxy" => "proxy",
+ "proxybypass" => "proxybypass",
+ "flags" => flags,
+ );
+
+Example:
+
+ $INET = new Win32::Internet();
+ die qq(Cannot connect to Internet...\n) if ! $INET;
+
+ $INET = new Win32::Internet("Mozilla/3.0", INTERNET_OPEN_TYPE_PROXY, "www.microsoft.com", "");
+
+ $params{"flags"} = INTERNET_FLAG_ASYNC;
+ $INET = new Win32::Internet(\%params);
+
+=item OpenURL urlobject, URL
+
+Opens a connection to an HTTP, FTP or GOPHER Uniform Resource Location
+(URL). Returns C<undef> on errors or a number if the connection was
+succesful. You can then retrieve the URL content by applying the
+methods C<QueryDataAvailable> and C<ReadFile> on the newly created
+I<urlobject>. See also C<FetchURL>.
+
+Example:
+
+ $INET->OpenURL($URL, "http://www.yahoo.com/");
+ $bytes = $URL->QueryDataAvailable();
+ $file = $URL->ReadEntireFile();
+ $URL->Close();
+
+=item Password [password]
+
+Reads or sets the password used for an C<FTP> or C<HTTP> connection.
+If no I<password> parameter is specified, the current value is
+returned; otherwise, the password is set to I<password>. See also
+C<Username>, C<QueryOption> and C<SetOption>.
+
+Example:
+
+ $HTTP->Password("splurfgnagbxam");
+ $password = $HTTP->Password();
+
+=item QueryDataAvailable
+
+Returns the number of bytes of data that are available to be read
+immediately by a subsequent call to C<ReadFile> (or C<undef> on
+errors). Can be applied to URL or HTTP request objects. See
+C<OpenURL> or C<OpenRequest>.
+
+Example:
+
+ $INET->OpenURL($URL, "http://www.yahoo.com/");
+ $bytes = $URL->QueryDataAvailable();
+
+=item QueryOption option
+
+Queries an Internet option. For the possible values of I<option>,
+refer to the L<"Microsoft Win32 Internet Functions"> document. See
+also C<SetOption>.
+
+Example:
+
+ $value = $INET->QueryOption(INTERNET_OPTION_CONNECT_TIMEOUT);
+ $value = $HTTP->QueryOption(INTERNET_OPTION_USERNAME);
+
+=item ReadEntireFile
+
+Reads all the data available from an opened URL or HTTP request
+object. Returns what have been read or C<undef> on errors. See also
+C<OpenURL>, C<OpenRequest> and C<ReadFile>.
+
+Example:
+
+ $INET->OpenURL($URL, "http://www.yahoo.com/");
+ $file = $URL->ReadEntireFile();
+
+=item ReadFile bytes
+
+Reads I<bytes> bytes of data from an opened URL or HTTP request
+object. Returns what have been read or C<undef> on errors. See also
+C<OpenURL>, C<OpenRequest>, C<QueryDataAvailable> and
+C<ReadEntireFile>.
+
+B<Note:> be careful to keep I<bytes> to an acceptable value (eg. don't
+tell him to swallow megabytes at once...). C<ReadEntireFile> in fact
+uses C<QueryDataAvailable> and C<ReadFile> in a loop to read no more
+than 16k at a time.
+
+Example:
+
+ $INET->OpenURL($URL, "http://www.yahoo.com/");
+ $chunk = $URL->ReadFile(16000);
+
+=item SetOption option, value
+
+Sets an Internet option. For the possible values of I<option>, refer to
+the L<"Microsoft Win32 Internet Functions"> document. See also
+C<QueryOption>.
+
+Example:
+
+ $INET->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,10000);
+ $HTTP->SetOption(INTERNET_OPTION_USERNAME,"dada");
+
+=item SetStatusCallback
+
+Initializes the callback routine used to return data about the
+progress of an asynchronous operation.
+
+Example:
+
+ $INET->SetStatusCallback();
+
+This is one of the step required to perform asynchronous operations;
+the complete procedure is:
+
+ # use the INTERNET_FLAG_ASYNC when initializing
+ $params{'flags'}=INTERNET_FLAG_ASYNC;
+ $INET = new Win32::Internet(\%params);
+
+ # initialize the callback routine
+ $INET->SetStatusCallback();
+
+ # specify the context parameter (the last 1 in this case)
+ $INET->HTTP($HTTP, "www.yahoo.com", "anonymous", "dada\@divinf.it", 80, 0, 1);
+
+At this point, control returns immediately to Perl and $INET->Error()
+will return 997, which means an asynchronous I/O operation is
+pending. Now, you can call
+
+ $HTTP->GetStatusCallback(1);
+
+in a loop to verify what's happening; see also C<GetStatusCallback>.
+
+=item TimeConvert time
+
+=item TimeConvert seconds, minute, hours, day, month, year,
+ day_of_week, RFC
+
+The first form takes a HTTP date/time string and returns the date/time
+converted in the following array: I<seconds, minute, hours, day,
+month, year, day_of_week>.
+
+The second form does the opposite (or at least it should, because
+actually seems to be malfunctioning): it takes the values and returns
+an HTTP date/time string, in the RFC format specified by the I<RFC>
+parameter (OK, I didn't find yet any accepted value in the range
+0..2000, let me know if you have more luck with it).
+
+Example:
+
+ ($sec, $min, $hour, $day, $mday, $year, $wday) =
+ $INET->TimeConvert("Sun, 26 Jan 1997 20:01:52 GMT");
+
+ # the opposite DOESN'T WORK! which value should $RFC have???
+ $time = $INET->TimeConvert(52, 1, 20, 26, 1, 1997, 0, $RFC);
+
+=item UserAgent [name]
+
+Reads or sets the user agent used for HTTP requests. If no I<name>
+parameter is specified, the current value is returned; otherwise, the
+user agent is set to I<name>. See also C<QueryOption> and
+C<SetOption>.
+
+Example:
+
+ $INET->UserAgent("Mozilla/3.0");
+ $useragent = $INET->UserAgent();
+
+=item Username [name]
+
+Reads or sets the username used for an C<FTP> or C<HTTP> connection.
+If no I<name> parameter is specified, the current value is returned;
+otherwise, the username is set to I<name>. See also C<Password>,
+C<QueryOption> and SetOption.
+
+Example:
+
+ $HTTP->Username("dada");
+ $username = $HTTP->Username();
+
+=item Version
+
+Returns the version numbers for the Win32::Internet package and the
+WININET.DLL version, as an array or string, depending on the context.
+The string returned will contain "package_version/DLL_version", while
+the array will contain: "package_version", "DLL_version".
+
+Example:
+
+ $version = $INET->Version(); # should return "0.06/4.70.1215"
+ @version = $INET->Version(); # should return ("0.06", "4.70.1215")
+
+=back
+
+
+=head2 FTP Functions
+
+B<General Note>
+
+All methods assume that you have the following lines:
+
+ use Win32::Internet;
+ $INET = new Win32::Internet();
+ $INET->FTP($FTP, "hostname", "username", "password");
+
+somewhere before the method calls; in other words, we assume that you
+have an Internet object called $INET and an open FTP session called
+$FTP.
+
+See C<new> and C<FTP> for more information.
+
+
+B<Methods>
+
+=over
+
+=item Ascii
+
+=item Asc
+
+Sets the ASCII transfer mode for this FTP session. It will be applied
+to the subsequent C<Get> functions. See also the C<Binary> and
+C<Mode> function.
+
+Example:
+
+ $FTP->Ascii();
+
+=item Binary
+
+=item Bin
+
+Sets the binary transfer mode for this FTP session. It will be
+applied to the subsequent C<Get> functions. See also the C<Ascii> and
+C<Mode> function.
+
+Example:
+
+ $FTP->Binary();
+
+=item Cd path
+
+=item Cwd path
+
+=item Chdir path
+
+Changes the current directory on the FTP remote host. Returns I<path>
+or C<undef> on error.
+
+Example:
+
+ $FTP->Cd("/pub");
+
+=item Delete file
+
+=item Del file
+
+Deletes a file on the FTP remote host. Returns C<undef> on error.
+
+Example:
+
+ $FTP->Delete("110-i86.zip");
+
+=item Get remote, [local, overwrite, flags, context]
+
+Gets the I<remote> FTP file and saves it locally in I<local>. If
+I<local> is not specified, it will be the same name as I<remote>.
+Returns C<undef> on error. The parameters and their values are:
+
+=over
+
+=item * remote
+
+The name of the remote file on the FTP server. Default: I<none>.
+
+=item * local
+
+The name of the local file to create. Default: remote.
+
+=item * overwrite
+
+If 0, overwrites I<local> if it exists; with any other value, the
+function fails if the I<local> file already exists. Default: 0.
+
+=item * flags
+
+Additional flags affecting the behavior of the function. Default:
+I<none>.
+
+=item * context
+
+A number to identify this operation if it is asynchronous. See
+C<SetStatusCallback> and C<GetStatusCallback> for more info on
+asynchronous operations. Default: I<none>.
+
+=back
+
+Refer to the L<"Microsoft Win32 Internet Functions"> documentation for
+more details on those parameters.
+
+Example:
+
+ $FTP->Get("110-i86.zip");
+ $FTP->Get("/pub/perl/languages/CPAN/00index.html", "CPAN_index.html");
+
+=item List [pattern, listmode]
+
+=item Ls [pattern, listmode]
+
+=item Dir [pattern, listmode]
+
+Returns a list containing the files found in this directory,
+eventually matching the given I<pattern> (which, if omitted, is
+considered "*.*"). The content of the returned list depends on the
+I<listmode> parameter, which can have the following values:
+
+=over
+
+=item * listmode=1 (or omitted)
+
+the list contains the names of the files found. Example:
+
+ @files = $FTP->List();
+ @textfiles = $FTP->List("*.txt");
+ foreach $file (@textfiles) {
+ print "Name: ", $file, "\n";
+ }
+
+=item * listmode=2
+
+the list contains 7 values for each file, which respectively are:
+
+=over
+
+=item * the file name
+
+=item * the DOS short file name, aka 8.3
+
+=item * the size
+
+=item * the attributes
+
+=item * the creation time
+
+=item * the last access time
+
+=item * the last modified time
+
+=back
+
+Example:
+
+ @files = $FTP->List("*.*", 2);
+ for($i=0; $i<=$#files; $i+=7) {
+ print "Name: ", @files[$i], "\n";
+ print "Size: ", @files[$i+2], "\n";
+ print "Attr: ", @files[$i+3], "\n";
+ }
+
+=item * listmode=3
+
+the list contains a reference to an hash array for each found file;
+each hash contains:
+
+=over
+
+=item * name => the file name
+
+=item * altname => the DOS short file name, aka 8.3
+
+=item * size => the size
+
+=item * attr => the attributes
+
+=item * ctime => the creation time
+
+=item * atime => the last access time
+
+=item * mtime => the last modified time
+
+=back
+
+Example:
+
+ @files = $FTP->List("*.*", 3);
+ foreach $file (@files) {
+ print $file->{'name'}, " ", $file->{'size'}, " ", $file->{'attr'}, "\n";
+ }
+
+B<Note:> all times are reported as strings of the following format:
+I<second, hour, minute, day, month, year>.
+
+Example:
+
+ $file->{'mtime'} == "0,10,58,9,12,1996" stands for 09 Dec 1996 at 10:58:00
+
+=back
+
+=item Mkdir name
+
+=item Md name
+
+Creates a directory on the FTP remote host. Returns C<undef> on error.
+
+Example:
+
+ $FTP->Mkdir("NextBuild");
+
+=item Mode [mode]
+
+If called with no arguments, returns the current transfer mode for
+this FTP session ("asc" for ASCII or "bin" for binary). The I<mode>
+argument can be "asc" or "bin", in which case the appropriate transfer
+mode is selected. See also the Ascii and Binary functions. Returns
+C<undef> on errors.
+
+Example:
+
+ print "Current mode is: ", $FTP->Mode();
+ $FTP->Mode("asc"); # ... same as $FTP->Ascii();
+
+=item Pasv [mode]
+
+If called with no arguments, returns 1 if the current FTP session has
+passive transfer mode enabled, 0 if not.
+
+You can call it with a I<mode> parameter (0/1) only as a method of a
+Internet object (see C<new>), in which case it will set the default
+value for the next C<FTP> objects you create (read: set it before,
+because you can't change this value once you opened the FTP session).
+
+Example:
+
+ print "Pasv is: ", $FTP->Pasv();
+
+ $INET->Pasv(1);
+ $INET->FTP($FTP,"ftp.activeware.com", "anonymous", "dada\@divinf.it");
+ $FTP->Pasv(0); # this will be ignored...
+
+=item Put local, [remote, context]
+
+Upload the I<local> file to the FTP server saving it under the name
+I<remote>, which if if omitted is the same name as I<local>. Returns
+C<undef> on error.
+
+I<context> is a number to identify this operation if it is asynchronous.
+See C<SetStatusCallback> and C<GetStatusCallback> for more info on
+asynchronous operations.
+
+Example:
+
+ $FTP->Put("internet.zip");
+ $FTP->Put("d:/users/dada/temp.zip", "/temp/dada.zip");
+
+=item Pwd
+
+Returns the current directory on the FTP server or C<undef> on errors.
+
+Example:
+
+ $path = $FTP->Pwd();
+
+=item Rename oldfile, newfile
+
+=item Ren oldfile, newfile
+
+Renames a file on the FTP remote host. Returns C<undef> on error.
+
+Example:
+
+ $FTP->Rename("110-i86.zip", "68i-011.zip");
+
+=item Rmdir name
+
+=item Rd name
+
+Removes a directory on the FTP remote host. Returns C<undef> on error.
+
+Example:
+
+ $FTP->Rmdir("CurrentBuild");
+
+=back
+
+=head2 HTTP Functions
+
+B<General Note>
+
+All methods assume that you have the following lines:
+
+ use Win32::Internet;
+ $INET = new Win32::Internet();
+ $INET->HTTP($HTTP, "hostname", "username", "password");
+
+somewhere before the method calls; in other words, we assume that you
+have an Internet object called $INET and an open HTTP session called
+$HTTP.
+
+See C<new> and C<HTTP> for more information.
+
+
+B<Methods>
+
+=over
+
+=item AddHeader header, [flags]
+
+Adds HTTP request headers to an HTTP request object created with
+C<OpenRequest>. For the possible values of I<flags> refer to the
+L<"Microsoft Win32 Internet Functions"> document.
+
+Example:
+
+ $HTTP->OpenRequest($REQUEST,"/index.html");
+ $REQUEST->AddHeader("If-Modified-Since: Sunday, 17-Nov-96 11:40:03 GMT");
+ $REQUEST->AddHeader("Accept: text/html\r\n", HTTP_ADDREQ_FLAG_REPLACE);
+
+=item OpenRequest requestobject, [path, method, version, referer, accept, flags, context]
+
+=item OpenRequest requestobject, hashref
+
+Opens an HTTP request. Returns C<undef> on errors or a number if the
+connection was succesful. You can then use one of the C<AddHeader>,
+C<SendRequest>, C<QueryInfo>, C<QueryDataAvailable> and C<ReadFile>
+methods on the newly created I<requestobject>. The parameters and
+their values are:
+
+=over
+
+=item * path
+
+The object to request. This is generally a file name, an executable
+module, etc. Default: /
+
+=item * method
+
+The method to use; can actually be GET, POST, HEAD or PUT. Default:
+GET
+
+=item * version
+
+The HTTP version. Default: HTTP/1.0
+
+=item * referer
+
+The URL of the document from which the URL in the request was
+obtained. Default: I<none>
+
+=item * accept
+
+A single string with "\0" (ASCII zero) delimited list of content
+types accepted. The string must be terminated by "\0\0".
+Default: "text/*\0image/gif\0image/jpeg\0\0"
+
+=item * flags
+
+Additional flags affecting the behavior of the function. Default:
+I<none>
+
+=item * context
+
+A number to identify this operation if it is asynchronous. See
+C<SetStatusCallback> and C<GetStatusCallback> for more info on
+asynchronous operations. Default: I<none>
+
+=back
+
+Refer to the L<"Microsoft Win32 Internet Functions"> documentation for
+more details on those parameters. If you pass I<hashref> (a reference to
+an hash array), the following values are taken from the array:
+
+ %hash=(
+ "path" => "path",
+ "method" => "method",
+ "version" => "version",
+ "referer" => "referer",
+ "accept" => "accept",
+ "flags" => flags,
+ "context" => context,
+ );
+
+See also C<Request>.
+
+Example:
+
+ $HTTP->OpenRequest($REQUEST, "/index.html");
+ $HTTP->OpenRequest($REQUEST, "/index.html", "GET", "HTTP/0.9");
+
+ $params{"path"} = "/index.html";
+ $params{"flags"} = "
+ $HTTP->OpenRequest($REQUEST, \%params);
+
+=item QueryInfo header, [flags]
+
+Queries information about an HTTP request object created with
+C<OpenRequest>. You can specify an I<header> (for example,
+"Content-type") and/or one or more I<flags>. If you don't specify
+I<flags>, HTTP_QUERY_CUSTOM will be used by default; this means that
+I<header> should contain a valid HTTP header name. For the possible
+values of I<flags> refer to the L<"Microsoft Win32 Internet
+Functions"> document.
+
+Example:
+
+ $HTTP->OpenRequest($REQUEST,"/index.html");
+ $statuscode = $REQUEST->QueryInfo("", HTTP_QUERY_STATUS_CODE);
+ $headers = $REQUEST->QueryInfo("", HTTP_QUERY_RAW_HEADERS_CRLF); # will get all the headers
+ $length = $REQUEST->QueryInfo("Content-length");
+
+=item Request [path, method, version, referer, accept, flags]
+
+=item Request hashref
+
+Performs an HTTP request and returns an array containing the status
+code, the headers and the content of the file. It is a one-step
+procedure that makes an C<OpenRequest>, a C<SendRequest>, some
+C<QueryInfo>, C<ReadFile> and finally C<Close>. For a description of
+the parameters, see C<OpenRequest>.
+
+Example:
+
+ ($statuscode, $headers, $file) = $HTTP->Request("/index.html");
+ ($s, $h, $f) = $HTTP->Request("/index.html", "GET", "HTTP/1.0");
+
+=item SendRequest [postdata]
+
+Send an HTTP request to the destination server. I<postdata> are any
+optional data to send immediately after the request header; this is
+generally used for POST or PUT requests. See also C<OpenRequest>.
+
+Example:
+
+ $HTTP->OpenRequest($REQUEST, "/index.html");
+ $REQUEST->SendRequest();
+
+ # A POST request...
+ $HTTP->OpenRequest($REQUEST, "/cgi-bin/somescript.pl", "POST");
+
+ #This line is a must -> (thanks Philip :)
+ $REQUEST->AddHeader("Content-Type: application/x-www-form-urlencoded");
+
+ $REQUEST->SendRequest("key1=value1&key2=value2&key3=value3");
+
+=back
+
+
+=head1 APPENDIX
+
+
+=head2 Microsoft Win32 Internet Functions
+
+Complete documentation for the Microsoft Win32 Internet Functions can
+be found, in both HTML and zipped Word format, at this address:
+
+ http://www.microsoft.com/intdev/sdk/docs/wininet/
+
+=head2 Functions Table
+
+This table reports the correspondence between the functions offered by
+WININET.DLL and their implementation in the Win32::Internet
+extension. Functions showing a "---" are not currently
+implemented. Functions enclosed in parens ( ) aren't implemented
+straightforwardly, but in a higher-level routine, eg. together with
+other functions.
+
+ WININET.DLL Win32::Internet
+
+ InternetOpen new Win32::Internet
+ InternetConnect FTP / HTTP
+ InternetCloseHandle Close
+ InternetQueryOption QueryOption
+ InternetSetOption SetOption
+ InternetSetOptionEx ---
+ InternetSetStatusCallback SetStatusCallback
+ InternetStatusCallback GetStatusCallback
+ InternetConfirmZoneCrossing ---
+ InternetTimeFromSystemTime TimeConvert
+ InternetTimeToSystemTime TimeConvert
+ InternetAttemptConnect ---
+ InternetReadFile ReadFile
+ InternetSetFilePointer ---
+ InternetFindNextFile (List)
+ InternetQueryDataAvailable QueryDataAvailable
+ InternetGetLastResponseInfo GetResponse
+ InternetWriteFile ---
+ InternetCrackUrl CrackURL
+ InternetCreateUrl CreateURL
+ InternetCanonicalizeUrl CanonicalizeURL
+ InternetCombineUrl CombineURL
+ InternetOpenUrl OpenURL
+ FtpFindFirstFile (List)
+ FtpGetFile Get
+ FtpPutFile Put
+ FtpDeleteFile Delete
+ FtpRenameFile Rename
+ FtpOpenFile ---
+ FtpCreateDirectory Mkdir
+ FtpRemoveDirectory Rmdir
+ FtpSetCurrentDirectory Cd
+ FtpGetCurrentDirectory Pwd
+ HttpOpenRequest OpenRequest
+ HttpAddRequestHeaders AddHeader
+ HttpSendRequest SendRequest
+ HttpQueryInfo QueryInfo
+ InternetErrorDlg ---
+
+
+Actually, I don't plan to add support for Gopher, Cookie and Cache
+functions. I will if there will be consistent requests to do so.
+
+There are a number of higher-level functions in the Win32::Internet
+that simplify some usual procedures, calling more that one WININET API
+function. This table reports those functions and the relative WININET
+functions they use.
+
+ Win32::Internet WININET.DLL
+
+ FetchURL InternetOpenUrl
+ InternetQueryDataAvailable
+ InternetReadFile
+ InternetCloseHandle
+
+ ReadEntireFile InternetQueryDataAvailable
+ InternetReadFile
+
+ Request HttpOpenRequest
+ HttpSendRequest
+ HttpQueryInfo
+ InternetQueryDataAvailable
+ InternetReadFile
+ InternetCloseHandle
+
+ List FtpFindFirstFile
+ InternetFindNextFile
+
+
+=head2 Constants
+
+Those are the constants exported by the package in the main namespace
+(eg. you can use them in your scripts); for their meaning and proper
+use, refer to the Microsoft Win32 Internet Functions document.
+
+ HTTP_ADDREQ_FLAG_ADD
+ HTTP_ADDREQ_FLAG_REPLACE
+ HTTP_QUERY_ALLOW
+ HTTP_QUERY_CONTENT_DESCRIPTION
+ HTTP_QUERY_CONTENT_ID
+ HTTP_QUERY_CONTENT_LENGTH
+ HTTP_QUERY_CONTENT_TRANSFER_ENCODING
+ HTTP_QUERY_CONTENT_TYPE
+ HTTP_QUERY_COST
+ HTTP_QUERY_CUSTOM
+ HTTP_QUERY_DATE
+ HTTP_QUERY_DERIVED_FROM
+ HTTP_QUERY_EXPIRES
+ HTTP_QUERY_FLAG_REQUEST_HEADERS
+ HTTP_QUERY_FLAG_SYSTEMTIME
+ HTTP_QUERY_LANGUAGE
+ HTTP_QUERY_LAST_MODIFIED
+ HTTP_QUERY_MESSAGE_ID
+ HTTP_QUERY_MIME_VERSION
+ HTTP_QUERY_PRAGMA
+ HTTP_QUERY_PUBLIC
+ HTTP_QUERY_RAW_HEADERS
+ HTTP_QUERY_RAW_HEADERS_CRLF
+ HTTP_QUERY_REQUEST_METHOD
+ HTTP_QUERY_SERVER
+ HTTP_QUERY_STATUS_CODE
+ HTTP_QUERY_STATUS_TEXT
+ HTTP_QUERY_URI
+ HTTP_QUERY_USER_AGENT
+ HTTP_QUERY_VERSION
+ HTTP_QUERY_WWW_LINK
+ ICU_BROWSER_MODE
+ ICU_DECODE
+ ICU_ENCODE_SPACES_ONLY
+ ICU_ESCAPE
+ ICU_NO_ENCODE
+ ICU_NO_META
+ ICU_USERNAME
+ INTERNET_FLAG_PASSIVE
+ INTERNET_FLAG_ASYNC
+ INTERNET_FLAG_HYPERLINK
+ INTERNET_FLAG_KEEP_CONNECTION
+ INTERNET_FLAG_MAKE_PERSISTENT
+ INTERNET_FLAG_NO_AUTH
+ INTERNET_FLAG_NO_AUTO_REDIRECT
+ INTERNET_FLAG_NO_CACHE_WRITE
+ INTERNET_FLAG_NO_COOKIES
+ INTERNET_FLAG_READ_PREFETCH
+ INTERNET_FLAG_RELOAD
+ INTERNET_FLAG_RESYNCHRONIZE
+ INTERNET_FLAG_TRANSFER_ASCII
+ INTERNET_FLAG_TRANSFER_BINARY
+ INTERNET_INVALID_PORT_NUMBER
+ INTERNET_INVALID_STATUS_CALLBACK
+ INTERNET_OPEN_TYPE_DIRECT
+ INTERNET_OPEN_TYPE_PROXY
+ INTERNET_OPEN_TYPE_PROXY_PRECONFIG
+ INTERNET_OPTION_CONNECT_BACKOFF
+ INTERNET_OPTION_CONNECT_RETRIES
+ INTERNET_OPTION_CONNECT_TIMEOUT
+ INTERNET_OPTION_CONTROL_SEND_TIMEOUT
+ INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT
+ INTERNET_OPTION_DATA_SEND_TIMEOUT
+ INTERNET_OPTION_DATA_RECEIVE_TIMEOUT
+ INTERNET_OPTION_HANDLE_TYPE
+ INTERNET_OPTION_LISTEN_TIMEOUT
+ INTERNET_OPTION_PASSWORD
+ INTERNET_OPTION_READ_BUFFER_SIZE
+ INTERNET_OPTION_USER_AGENT
+ INTERNET_OPTION_USERNAME
+ INTERNET_OPTION_VERSION
+ INTERNET_OPTION_WRITE_BUFFER_SIZE
+ INTERNET_SERVICE_FTP
+ INTERNET_SERVICE_GOPHER
+ INTERNET_SERVICE_HTTP
+ INTERNET_STATUS_CLOSING_CONNECTION
+ INTERNET_STATUS_CONNECTED_TO_SERVER
+ INTERNET_STATUS_CONNECTING_TO_SERVER
+ INTERNET_STATUS_CONNECTION_CLOSED
+ INTERNET_STATUS_HANDLE_CLOSING
+ INTERNET_STATUS_HANDLE_CREATED
+ INTERNET_STATUS_NAME_RESOLVED
+ INTERNET_STATUS_RECEIVING_RESPONSE
+ INTERNET_STATUS_REDIRECT
+ INTERNET_STATUS_REQUEST_COMPLETE
+ INTERNET_STATUS_REQUEST_SENT
+ INTERNET_STATUS_RESOLVING_NAME
+ INTERNET_STATUS_RESPONSE_RECEIVED
+ INTERNET_STATUS_SENDING_REQUEST
+
+
+=head1 VERSION HISTORY
+
+=over
+
+=item * 0.082 (4 Sep 2001)
+
+=over
+
+=item *
+
+Fix passive FTP mode. INTERNET_FLAG_PASSIVE was misspelled in earlier
+versions (as INTERNET_CONNECT_FLAG_PASSIVE) and wouldn't work. Found
+by Steve Raynesford <stever@evolvecomm.com>.
+
+=back
+
+=item * 0.081 (25 Sep 1999)
+
+=over
+
+=item *
+
+Documentation converted to pod format by Jan Dubois <JanD@ActiveState.com>.
+
+=item *
+
+Minor changes from Perl 5.005xx compatibility.
+
+=back
+
+=item * 0.08 (14 Feb 1997)
+
+=over
+
+=item *
+
+fixed 2 more bugs in Option(s) related subs (thanks to Brian
+Helterline!).
+
+=item *
+
+Error() now gets error messages directly from WININET.DLL.
+
+=item *
+
+The PLL file now comes in 2 versions, one for Perl version 5.001
+(build 100) and one for Perl version 5.003 (build 300 and
+higher). Everybody should be happy now :)
+
+=item *
+
+added an installation program.
+
+=back
+
+=item * 0.07 (10 Feb 1997)
+
+=over
+
+=item *
+
+fixed a bug in Version() introduced with 0.06...
+
+=item *
+
+completely reworked PM file, fixed *lots* of minor bugs, and removed
+almost all the warnings with "perl -w".
+
+=back
+
+=item * 0.06 (26 Jan 1997)
+
+=over
+
+=item *
+
+fixed another hideous bug in "new" (the 'class' parameter was still
+missing).
+
+=item *
+
+added support for asynchronous operations (work still in embryo).
+
+=item *
+
+removed the ending \0 (ASCII zero) from the DLL version returned by
+"Version".
+
+=item *
+
+added a lot of constants.
+
+=item *
+
+added safefree() after every safemalloc() in C... wonder why I didn't
+it before :)
+
+=item *
+
+added TimeConvert, which actually works one way only.
+
+=back
+
+=item * 0.05f (29 Nov 1996)
+
+=over
+
+=item *
+
+fixed a bug in "new" (parameters passed were simply ignored).
+
+=item *
+
+fixed another bug: "Chdir" and "Cwd" were aliases of RMDIR instead of
+CD..
+
+=back
+
+=item * 0.05 (29 Nov 1996)
+
+=over
+
+=item *
+
+added "CrackURL" and "CreateURL".
+
+=item *
+
+corrected an error in TEST.PL (there was a GetUserAgent instead of
+UserAgent).
+
+=back
+
+=item * 0.04 (25 Nov 1996)
+
+=over
+
+=item *
+
+added "Version" to retrieve package and DLL versions.
+
+=item *
+
+added proxies and other options to "new".
+
+=item *
+
+changed "OpenRequest" and "Request" to read parameters from a hash.
+
+=item *
+
+added "SetOption/QueryOption" and a lot of relative functions
+(connect, username, password, useragent, etc.).
+
+=item *
+
+added "CanonicalizeURL" and "CombineURL".
+
+=item *
+
+"Error" covers a wider spectrum of errors.
+
+=back
+
+=item * 0.02 (18 Nov 1996)
+
+=over
+
+=item *
+
+added support for HTTP sessions and requests.
+
+=back
+
+=item * 0.01 (11 Nov 1996)
+
+=over
+
+=item *
+
+fetching of HTTP, FTP and GOPHER URLs.
+
+=item *
+
+complete set of commands to manage an FTP session.
+
+=back
+
+=back
+
+=head1 AUTHOR
+
+Version 0.08 (14 Feb 1997) by Aldo Calpini <a.calpini@romagiubileo.it>
+
+
+=head1 CREDITS
+
+Win32::Internet is based on the Win32::Registry code written by Jesse
+Dougherty.
+
+Additional thanks to: Carl Tichler for his help in the initial
+development; Tore Haraldsen, Brian Helterline for the bugfixes; Dave
+Roth for his great source code examples.
+
+
+=head1 DISCLAIMER
+
+This program is FREE; you can redistribute, modify, disassemble, or
+even reverse engineer this software at your will. Keep in mind,
+however, that NOTHING IS GUARANTEED to work and everything you do is
+AT YOUR OWN RISK - I will not take responsability for any damage, loss
+of money and/or health that may arise from the use of this program!
+
+This is distributed under the terms of Larry Wall's Artistic License.
diff --git a/Master/tlpkg/tlperl/lib/Win32/Job.pm b/Master/tlpkg/tlperl/lib/Win32/Job.pm
new file mode 100644
index 00000000000..3350f76400d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Job.pm
@@ -0,0 +1,370 @@
+package Win32::Job;
+
+use strict;
+use base qw(DynaLoader);
+use vars qw($VERSION);
+
+$VERSION = '0.01';
+
+use constant WIN32s => 0;
+use constant WIN9X => 1;
+use constant WINNT => 2;
+
+require Win32 unless defined &Win32::GetOSVersion;
+my @ver = Win32::GetOSVersion;
+die "Win32::Job is not supported on $ver[0]" unless (
+ $ver[4] == WINNT and (
+ $ver[1] > 5 or
+ ($ver[1] == 5 and $ver[2] > 0) or
+ ($ver[1] == 5 and $ver[2] == 0 and $ver[3] >= 0)
+ )
+);
+
+Win32::Job->bootstrap($VERSION);
+
+1;
+
+__END__
+
+=head1 NAME
+
+Win32::Job - Run sub-processes in a "job" environment
+
+=head1 SYNOPSIS
+
+ use Win32::Job;
+
+ my $job = Win32::Job->new;
+
+ # Run 'perl Makefile.PL' for 10 seconds
+ $job->spawn($Config{perlpath}, "perl Makefile.PL");
+ $job->run(10);
+
+=head1 PLATFORMS
+
+Win32::Job requires Windows 2000 or later. Windows 95, 98, NT, and Me are not
+supported.
+
+=head1 DESCRIPTION
+
+Windows 2000 introduced the concept of a "job": a collection of processes
+which can be controlled as a single unit. For example, you can reliably kill a
+process and all of its children by launching the process in a job, then
+telling Windows to kill all processes in the job. Win32::Job makes this
+feature available to Perl.
+
+For example, imagine you want to allow 2 minutes for a process to complete.
+If you have control over the child process, you can probably just run it in
+the background, then poll every second to see if it has finished.
+
+That's fine as long as the child process doesn't spawn any child processes.
+What if it does? If you wrote the child process yourself and made an effort to
+clean up your child processes before terminating, you don't have to worry.
+If not, you will leave hanging processes (called "zombie" processes in Unix).
+
+With Win32::Job, just create a new Job, then use the job to spawn the child
+process. All I<its> children will also be created in the new Job. When you
+time out, just call the job's kill() method and the entire process tree will
+be terminated.
+
+=head1 Using Win32::Job
+
+The following methods are available:
+
+=over 4
+
+=item 1
+
+new()
+
+ new();
+
+Creates a new Job object using the Win32 API call CreateJobObject(). The job
+is created with a default security context, and is unnamed.
+
+Note: this method returns C<undef> if CreateJobObject() fails. Look at C<$^E>
+for more detailed error information.
+
+=item 2
+
+spawn()
+
+ spawn($exe, $args, \%opts);
+
+Creates a new process and associates it with the Job. The process is initially
+suspended, and can be resumed with one of the other methods. Uses the Win32
+API call CreateProcess(). Returns the PID of the newly created process.
+
+Note: this method returns C<undef> if CreateProcess() fails. See C<$^E> for
+more detailed error information. One reason this will fail is if the calling
+process is itself part of a job, and the job's security context does not allow
+child processes to be created in a different job context than the parent.
+
+The arguments are described here:
+
+=over 4
+
+=item 1
+
+$exe
+
+The executable program to run. This may be C<undef>, in which case the first
+argument in $args is the program to run.
+
+If this has path information in it, it is used "as is" and passed to
+CreateProcess(), which interprets it as either an absolute path, or a
+path relative to the current drive and directory. If you did not specify an
+extension, ".exe" is assumed.
+
+If there are no path separators (either backslashes or forward slashes),
+then Win32::Job will search the current directory and your PATH, looking
+for the file. In addition, if you did not specify an extension, then
+Win32::Job checks ".exe", ".com", and ".bat" in order. If it finds a ".bat"
+file, Win32::Job will actually call F<cmd.exe> and prepend "cmd.exe" to the
+$args.
+
+For example, assuming a fairly normal PATH:
+
+ spawn(q{c:\winnt\system\cmd.exe}, q{cmd /C "echo %PATH%"})
+ exefile: c:\winnt\system\cmd.exe
+ cmdline: cmd /C "echo %PATH%"
+
+ spawn("cmd.exe", q{cmd /C "echo %PATH%"})
+ exefile: c:\winnt\system\cmd.exe
+ cmdline: cmd /C "echo %PATH%"
+
+=item 2
+
+$args
+
+The commandline to pass to the executable program. The first word will be
+C<argv[0]> to an EXE file, so you should repeat the command name in $args.
+
+For example:
+
+ $job->spawn($Config{perlpath}, "perl foo.pl");
+
+In this case, the "perl" is ignored, since perl.exe doesn't use it.
+
+=item 3
+
+%opts
+
+A hash reference for advanced options. This parameter is optional.
+the following keys are recognized:
+
+=over 4
+
+=item cwd
+
+A string specifying the current directory of the new process.
+
+By default, the process shares the parent's current directory, C<.>.
+
+=item new_console
+
+A boolean; if true, the process is started in a new console window.
+
+By default, the process shares the parent's console. This has no effect on GUI
+programs which do not interact with the console.
+
+=item window_attr
+
+Either C<minimized>, which displays the new window minimized; C<maximimzed>,
+which shows the new window maximized; or C<hidden>, which does not display the
+new window.
+
+By default, the window is displayed using its application's defaults.
+
+=item new_group
+
+A boolean; if true, the process is the root of a new process group. This
+process group includes all descendents of the child.
+
+By default, the process is in the parent's process group (but in a new job).
+
+=item no_window
+
+A boolean; if true, the process is run without a console window. This flag is
+only valid when starting a console application, otherwise it is ignored. If you
+are launching a GUI application, use the C<window_attr> tag instead.
+
+By default, the process shares its parent's console.
+
+=item stdin
+
+An open input filehandle, or the name of an existing file. The resulting
+filehandle will be used for the child's standard input handle.
+
+By default, the child process shares the parent's standard input.
+
+=item stdout
+
+An open output filehandle or filename (will be opened for append). The
+resulting filehandle will be used for the child's standard output handle.
+
+By default, the child process shares the parent's standard output.
+
+=item stderr
+
+An open output filehandle or filename (will be opened for append). The
+resulting filehandle will be used for the child's standard error handle.
+
+By default, the child process shares the parent's standard error.
+
+=back
+
+Unrecognized keys are ignored.
+
+=back
+
+=item 3
+
+run()
+
+ run($timeout, $which);
+
+Provides a simple way to run the programs with a time limit. The
+$timeout is in seconds with millisecond accuracy. This call blocks for
+up to $timeout seconds, or until the processes finish.
+
+The $which parameter specifies whether to wait for I<all> processes to
+complete within the $timeout, or whether to wait for I<any> process to
+complete. You should set this to a boolean, where a true value means to
+wait for I<all> the processes to complete, and a false value to wait
+for I<any>. If you do not specify $which, it defaults to true (C<all>).
+
+Returns a boolean indicating whether the processes exited by themselves,
+or whether the time expired. A true return value means the processes
+exited normally; a false value means one or more processes was killed
+will $timeout.
+
+You can get extended information on process exit codes using the
+status() method.
+
+For example, this is how to build two perl modules at the same time,
+with a 5 minute timeout:
+
+ use Win32::Job;
+ $job = Win32::Job->new;
+ $job->spawn("cmd", q{cmd /C "cd Mod1 && nmake"});
+ $job->spawn("cmd", q{cmd /C "cd Mod2 && nmake"});
+ $ok = $job->run(5 * 60);
+ print "Mod1 and Mod2 built ok!\n" if $ok;
+
+=item 4
+
+watch()
+
+ watch(\&handler, $interval, $which);
+
+ handler($job);
+
+Provides more fine-grained control over how to stop the programs. You specify
+a callback and an interval in seconds, and Win32::Job will call the "watchdog"
+function at this interval, either until the processes finish or your watchdog
+tells Win32::Job to stop. You must return a value indicating whether to stop: a
+true value means to terminate the processes immediately.
+
+The $which parameter has the same meaning as run()'s.
+
+Returns a boolean with the same meaning as run()'s.
+
+The handler may do anything it wants. One useful application of the watch()
+method is to check the filesize of the output file, and terminate the Job if
+the file becomes larger than a certain limit:
+
+ use Win32::Job;
+ $job = Win32::Job->new;
+ $job->spawn("cmd", q{cmd /C "cd Mod1 && nmake"}, {
+ stdin => 'NUL', # the NUL device
+ stdout => 'stdout.log',
+ stderr => 'stdout.log',
+ });
+ $ok = $job->watch(sub {
+ return 1 if -s "stdout.log" > 1_000_000;
+ }, 1);
+ print "Mod1 built ok!\n" if $ok;
+
+=item 5
+
+status()
+
+ status()
+
+Returns a hash containing information about the processes in the job.
+Only returns valid information I<after> calling either run() or watch();
+returns an empty hash if you have not yet called them. May be called from a
+watch() callback, in which case the C<exitcode> field should be ignored.
+
+The keys of the hash are the process IDs; the values are a subhash
+containing the following keys:
+
+=over 4
+
+=item exitcode
+
+The exit code returned by the process. If the process was killed because
+of a timeout, the value is 293.
+
+=item time
+
+The time accumulated by the process. This is yet another subhash containing
+the subkeys (i) C<user>, the amount of time the process spent in user
+space; (ii) C<kernel>, the amount of time the process spent in kernel space;
+and (iii) C<elapsed>, the total time the process was running.
+
+=back
+
+=item 6
+
+kill()
+
+ kill();
+
+Kills all processes and subprocesses in the Job. Has no return value.
+Sets the exit code to all processes killed to 293, which you can check
+for in the status() return value.
+
+=back
+
+=head1 SEE ALSO
+
+For more information about jobs, see Microsoft's online help at
+
+ http://msdn.microsoft.com/
+
+For other modules which do similar things (but not as well), see:
+
+=over 4
+
+=item 1
+
+Win32::Process
+
+Low-level access to creating processes in Win32. See L<Win32::Process>.
+
+=item 2
+
+Win32::Console
+
+Low-level access to consoles in Win32. See L<Win32::Console>.
+
+=item 3
+
+Win32::ProcFarm
+
+Manage pools of threads to perform CPU-intensive tasks on Windows. See
+L<Win32::ProcFarm>.
+
+=back
+
+=head1 AUTHOR
+
+ActiveState (support@ActiveState.com)
+
+=head1 COPYRIGHT
+
+Copyright (c) 2002, ActiveState Corporation. All Rights Reserved.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/Mutex.pm b/Master/tlpkg/tlperl/lib/Win32/Mutex.pm
new file mode 100644
index 00000000000..801c2d35cda
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Mutex.pm
@@ -0,0 +1,125 @@
+#---------------------------------------------------------------------
+package Win32::Mutex;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Created: 3 Feb 1998 from the ActiveWare version
+# (c) 1995 Microsoft Corporation. All rights reserved.
+# Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+#
+# Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Version: 1.00 (6-Feb-1998)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Use Win32 mutex objects for synchronization
+#---------------------------------------------------------------------
+
+$VERSION = '1.02';
+
+use Win32::IPC 1.00 '/./'; # Import everything
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader Win32::IPC);
+@EXPORT_OK = qw(
+ wait_all wait_any
+);
+
+bootstrap Win32::Mutex;
+
+sub Create { $_[0] = Win32::Mutex->new(@_[1..2]) }
+sub Open { $_[0] = Win32::Mutex->open($_[1]) }
+sub Release { &release }
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Mutex - Use Win32 mutex objects from Perl
+
+=head1 SYNOPSIS
+
+ require Win32::Mutex;
+
+ $mutex = Win32::Mutex->new($initial,$name);
+ $mutex->wait;
+
+=head1 DESCRIPTION
+
+This module allows access to the Win32 mutex objects. The C<wait>
+method and C<wait_all> & C<wait_any> functions are inherited from the
+L<"Win32::IPC"> module.
+
+=head2 Methods
+
+=over 4
+
+=item $mutex = Win32::Mutex->new([$initial, [$name]])
+
+Constructor for a new mutex object. If C<$initial> is true, requests
+immediate ownership of the mutex (default false). If C<$name> is
+omitted, creates an unnamed mutex object.
+
+If C<$name> signifies an existing mutex object, then C<$initial> is
+ignored and the object is opened. If this happens, C<$^E> will be set
+to 183 (ERROR_ALREADY_EXISTS).
+
+=item $mutex = Win32::Mutex->open($name)
+
+Constructor for opening an existing mutex object.
+
+=item $mutex->release
+
+Release ownership of a C<$mutex>. You should have obtained ownership
+of the mutex through C<new> or one of the wait functions. Returns
+true if successful.
+
+=item $mutex->wait([$timeout])
+
+Wait for ownership of C<$mutex>. See L<"Win32::IPC">.
+
+=back
+
+=head2 Deprecated Functions and Methods
+
+B<Win32::Mutex> still supports the ActiveWare syntax, but its use is
+deprecated.
+
+=over 4
+
+=item Create($MutObj,$Initial,$Name)
+
+Use C<$MutObj = Win32::Mutex-E<gt>new($Initial,$Name)> instead.
+
+=item Open($MutObj,$Name)
+
+Use C<$MutObj = Win32::Mutex-E<gt>open($Name)> instead.
+
+=item $MutObj->Release()
+
+Use C<$MutObj-E<gt>release> instead.
+
+=back
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+Loosely based on the original module by ActiveWare Internet Corp.,
+F<http://www.ActiveWare.com>
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::Mutex"
+# End:
diff --git a/Master/tlpkg/tlperl/lib/Win32/NetAdmin.pm b/Master/tlpkg/tlperl/lib/Win32/NetAdmin.pm
new file mode 100644
index 00000000000..ace31a619e4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/NetAdmin.pm
@@ -0,0 +1,419 @@
+package Win32::NetAdmin;
+
+#
+#NetAdmin.pm
+#Written by Douglas_Lankshear@ActiveWare.com
+#
+
+$VERSION = '0.08';
+
+require Exporter;
+require DynaLoader;
+
+require Win32 unless defined &Win32::IsWinNT;
+die "The Win32::NetAdmin module works only on Windows NT" unless Win32::IsWinNT();
+
+@ISA= qw( Exporter DynaLoader );
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ DOMAIN_ALIAS_RID_ACCOUNT_OPS
+ DOMAIN_ALIAS_RID_ADMINS
+ DOMAIN_ALIAS_RID_BACKUP_OPS
+ DOMAIN_ALIAS_RID_GUESTS
+ DOMAIN_ALIAS_RID_POWER_USERS
+ DOMAIN_ALIAS_RID_PRINT_OPS
+ DOMAIN_ALIAS_RID_REPLICATOR
+ DOMAIN_ALIAS_RID_SYSTEM_OPS
+ DOMAIN_ALIAS_RID_USERS
+ DOMAIN_GROUP_RID_ADMINS
+ DOMAIN_GROUP_RID_GUESTS
+ DOMAIN_GROUP_RID_USERS
+ DOMAIN_USER_RID_ADMIN
+ DOMAIN_USER_RID_GUEST
+ FILTER_TEMP_DUPLICATE_ACCOUNT
+ FILTER_NORMAL_ACCOUNT
+ FILTER_INTERDOMAIN_TRUST_ACCOUNT
+ FILTER_WORKSTATION_TRUST_ACCOUNT
+ FILTER_SERVER_TRUST_ACCOUNT
+ SV_TYPE_WORKSTATION
+ SV_TYPE_SERVER
+ SV_TYPE_SQLSERVER
+ SV_TYPE_DOMAIN_CTRL
+ SV_TYPE_DOMAIN_BAKCTRL
+ SV_TYPE_TIMESOURCE
+ SV_TYPE_AFP
+ SV_TYPE_NOVELL
+ SV_TYPE_DOMAIN_MEMBER
+ SV_TYPE_PRINT
+ SV_TYPE_PRINTQ_SERVER
+ SV_TYPE_DIALIN
+ SV_TYPE_DIALIN_SERVER
+ SV_TYPE_XENIX_SERVER
+ SV_TYPE_NT
+ SV_TYPE_WFW
+ SV_TYPE_POTENTIAL_BROWSER
+ SV_TYPE_BACKUP_BROWSER
+ SV_TYPE_MASTER_BROWSER
+ SV_TYPE_DOMAIN_MASTER
+ SV_TYPE_DOMAIN_ENUM
+ SV_TYPE_SERVER_UNIX
+ SV_TYPE_SERVER_MFPN
+ SV_TYPE_SERVER_NT
+ SV_TYPE_SERVER_OSF
+ SV_TYPE_SERVER_VMS
+ SV_TYPE_WINDOWS
+ SV_TYPE_DFS
+ SV_TYPE_ALTERNATE_XPORT
+ SV_TYPE_LOCAL_LIST_ONLY
+ SV_TYPE_ALL
+ UF_TEMP_DUPLICATE_ACCOUNT
+ UF_NORMAL_ACCOUNT
+ UF_INTERDOMAIN_TRUST_ACCOUNT
+ UF_WORKSTATION_TRUST_ACCOUNT
+ UF_SERVER_TRUST_ACCOUNT
+ UF_MACHINE_ACCOUNT_MASK
+ UF_ACCOUNT_TYPE_MASK
+ UF_DONT_EXPIRE_PASSWD
+ UF_SETTABLE_BITS
+ UF_SCRIPT
+ UF_ACCOUNTDISABLE
+ UF_HOMEDIR_REQUIRED
+ UF_LOCKOUT
+ UF_PASSWD_NOTREQD
+ UF_PASSWD_CANT_CHANGE
+ USE_FORCE
+ USE_LOTS_OF_FORCE
+ USE_NOFORCE
+ USER_PRIV_MASK
+ USER_PRIV_GUEST
+ USER_PRIV_USER
+ USER_PRIV_ADMIN
+);
+
+@EXPORT_OK = qw(
+ GetError
+ GetDomainController
+ GetAnyDomainController
+ UserCreate
+ UserDelete
+ UserGetAttributes
+ UserSetAttributes
+ UserChangePassword
+ UsersExist
+ GetUsers
+ GroupCreate
+ GroupDelete
+ GroupGetAttributes
+ GroupSetAttributes
+ GroupAddUsers
+ GroupDeleteUsers
+ GroupIsMember
+ GroupGetMembers
+ LocalGroupCreate
+ LocalGroupDelete
+ LocalGroupGetAttributes
+ LocalGroupSetAttributes
+ LocalGroupIsMember
+ LocalGroupGetMembers
+ LocalGroupGetMembersWithDomain
+ LocalGroupAddUsers
+ LocalGroupDeleteUsers
+ GetServers
+ GetTransports
+ LoggedOnUsers
+ GetAliasFromRID
+ GetUserGroupFromRID
+ GetServerDisks
+);
+$EXPORT_TAGS{ALL}= \@EXPORT_OK;
+
+=head1 NAME
+
+Win32::NetAdmin - manage network groups and users in perl
+
+=head1 SYNOPSIS
+
+ use Win32::NetAdmin;
+
+=head1 DESCRIPTION
+
+This module offers control over the administration of groups and users over a
+network.
+
+=head1 FUNCTIONS
+
+=head2 NOTE
+
+All of the functions return false if they fail, unless otherwise noted.
+When a function fails call Win32::NetAdmin::GetError() rather than
+GetLastError() or $^E to retrieve the error code.
+
+C<server> is optional for all the calls below. If not given the local machine is
+assumed.
+
+=over 10
+
+=item GetError()
+
+Returns the error code of the last call to this module.
+
+=item GetDomainController(server, domain, returnedName)
+
+Returns the name of the domain controller for server.
+
+=item GetAnyDomainController(server, domain, returnedName)
+
+Returns the name of any domain controller for a domain that is directly trusted
+by the server.
+
+=item UserCreate(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
+
+Creates a user on server with password, passwordAge, privilege, homeDir, comment,
+flags, and scriptPath.
+
+=item UserDelete(server, user)
+
+Deletes a user from server.
+
+=item UserGetAttributes(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
+
+Gets password, passwordAge, privilege, homeDir, comment, flags, and scriptPath
+for user.
+
+=item UserSetAttributes(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
+
+Sets password, passwordAge, privilege, homeDir, comment, flags, and scriptPath
+for user.
+
+=item UserChangePassword(domainname, username, oldpassword, newpassword)
+
+Changes a users password. Can be run under any account.
+
+=item UsersExist(server, userName)
+
+Checks if a user exists.
+
+=item GetUsers(server, filter, userRef)
+
+Fills userRef with user names if it is an array reference and with the user
+names and the full names if it is a hash reference.
+
+=item GroupCreate(server, group, comment)
+
+Creates a group.
+
+=item GroupDelete(server, group)
+
+Deletes a group.
+
+=item GroupGetAttributes(server, groupName, comment)
+
+Gets the comment.
+
+=item GroupSetAttributes(server, groupName, comment)
+
+Sets the comment.
+
+=item GroupAddUsers(server, groupName, users)
+
+Adds a user to a group.
+
+=item GroupDeleteUsers(server, groupName, users)
+
+Deletes a users from a group.
+
+=item GroupIsMember(server, groupName, user)
+
+Returns TRUE if user is a member of groupName.
+
+=item GroupGetMembers(server, groupName, userArrayRef)
+
+Fills userArrayRef with the members of groupName.
+
+=item LocalGroupCreate(server, group, comment)
+
+Creates a local group.
+
+=item LocalGroupDelete(server, group)
+
+Deletes a local group.
+
+=item LocalGroupGetAttributes(server, groupName, comment)
+
+Gets the comment.
+
+=item LocalGroupSetAttributes(server, groupName, comment)
+
+Sets the comment.
+
+=item LocalGroupIsMember(server, groupName, user)
+
+Returns TRUE if user is a member of groupName.
+
+=item LocalGroupGetMembers(server, groupName, userArrayRef)
+
+Fills userArrayRef with the members of groupName.
+
+=item LocalGroupGetMembersWithDomain(server, groupName, userRef)
+
+This function is similar LocalGroupGetMembers but accepts an array or
+a hash reference. Unlike LocalGroupGetMembers it returns each user name
+as C<DOMAIN\USERNAME>. If a hash reference is given, the function
+returns to each user or group name the type (group, user, alias etc.).
+The possible types are as follows:
+
+ $SidTypeUser = 1;
+ $SidTypeGroup = 2;
+ $SidTypeDomain = 3;
+ $SidTypeAlias = 4;
+ $SidTypeWellKnownGroup = 5;
+ $SidTypeDeletedAccount = 6;
+ $SidTypeInvalid = 7;
+ $SidTypeUnknown = 8;
+
+=item LocalGroupAddUsers(server, groupName, users)
+
+Adds a user to a group.
+
+=item LocalGroupDeleteUsers(server, groupName, users)
+
+Deletes a users from a group.
+
+=item GetServers(server, domain, flags, serverRef)
+
+Gets an array of server names or an hash with the server names and the
+comments as seen in the Network Neighborhood or the server manager.
+For flags, see SV_TYPE_* constants.
+
+=item GetTransports(server, transportRef)
+
+Enumerates the network transports of a computer. If transportRef is an array
+reference, it is filled with the transport names. If transportRef is a hash
+reference then a hash of hashes is filled with the data for the transports.
+
+=item LoggedOnUsers(server, userRef)
+
+Gets an array or hash with the users logged on at the specified computer. If
+userRef is a hash reference, the value is a semikolon separated string of
+username, logon domain and logon server.
+
+=item GetAliasFromRID(server, RID, returnedName)
+
+=item GetUserGroupFromRID(server, RID, returnedName)
+
+Retrieves the name of an alias (i.e local group) or a user group for a RID
+from the specified server. These functions can be used for example to get the
+account name for the administrator account if it is renamed or localized.
+
+Possible values for C<RID>:
+
+ DOMAIN_ALIAS_RID_ACCOUNT_OPS
+ DOMAIN_ALIAS_RID_ADMINS
+ DOMAIN_ALIAS_RID_BACKUP_OPS
+ DOMAIN_ALIAS_RID_GUESTS
+ DOMAIN_ALIAS_RID_POWER_USERS
+ DOMAIN_ALIAS_RID_PRINT_OPS
+ DOMAIN_ALIAS_RID_REPLICATOR
+ DOMAIN_ALIAS_RID_SYSTEM_OPS
+ DOMAIN_ALIAS_RID_USERS
+ DOMAIN_GROUP_RID_ADMINS
+ DOMAIN_GROUP_RID_GUESTS
+ DOMAIN_GROUP_RID_USERS
+ DOMAIN_USER_RID_ADMIN
+ DOMAIN_USER_RID_GUEST
+
+=item GetServerDisks(server, arrayRef)
+
+Returns an array with the disk drives of the specified server. The array
+contains two-character strings (drive letter followed by a colon).
+
+=back
+
+=head1 EXAMPLE
+
+ # Simple script using Win32::NetAdmin to set the login script for
+ # all members of the NT group "Domain Users". Only works if you
+ # run it on the PDC. (From Robert Spier <rspier@seas.upenn.edu>)
+ #
+ # FILTER_TEMP_DUPLICATE_ACCOUNTS
+ # Enumerates local user account data on a domain controller.
+ #
+ # FILTER_NORMAL_ACCOUNT
+ # Enumerates global user account data on a computer.
+ #
+ # FILTER_INTERDOMAIN_TRUST_ACCOUNT
+ # Enumerates domain trust account data on a domain controller.
+ #
+ # FILTER_WORKSTATION_TRUST_ACCOUNT
+ # Enumerates workstation or member server account data on a domain
+ # controller.
+ #
+ # FILTER_SERVER_TRUST_ACCOUNT
+ # Enumerates domain controller account data on a domain controller.
+
+
+ use Win32::NetAdmin qw(GetUsers GroupIsMember
+ UserGetAttributes UserSetAttributes);
+
+ my %hash;
+ GetUsers("", FILTER_NORMAL_ACCOUNT , \%hash)
+ or die "GetUsers() failed: $^E";
+
+ foreach (keys %hash) {
+ my ($password, $passwordAge, $privilege,
+ $homeDir, $comment, $flags, $scriptPath);
+ if (GroupIsMember("", "Domain Users", $_)) {
+ print "Updating $_ ($hash{$_})\n";
+ UserGetAttributes("", $_, $password, $passwordAge, $privilege,
+ $homeDir, $comment, $flags, $scriptPath)
+ or die "UserGetAttributes() failed: $^E";
+ $scriptPath = "dnx_login.bat"; # this is the new login script
+ UserSetAttributes("", $_, $password, $passwordAge, $privilege,
+ $homeDir, $comment, $flags, $scriptPath)
+ or die "UserSetAttributes() failed: $^E";
+ }
+ }
+
+=cut
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::NetAdmin macro $constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+$SidTypeUser = 1;
+$SidTypeGroup = 2;
+$SidTypeDomain = 3;
+$SidTypeAlias = 4;
+$SidTypeWellKnownGroup = 5;
+$SidTypeDeletedAccount = 6;
+$SidTypeInvalid = 7;
+$SidTypeUnknown = 8;
+
+sub GetError() {
+ our $__lastError;
+ $__lastError;
+}
+
+bootstrap Win32::NetAdmin;
+
+1;
+__END__
+
diff --git a/Master/tlpkg/tlperl/lib/Win32/NetResource.pm b/Master/tlpkg/tlperl/lib/Win32/NetResource.pm
new file mode 100644
index 00000000000..04ac87acabd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/NetResource.pm
@@ -0,0 +1,456 @@
+package Win32::NetResource;
+
+require Exporter;
+require DynaLoader;
+require AutoLoader;
+
+$VERSION = '0.053';
+
+@ISA = qw(Exporter DynaLoader);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ RESOURCEDISPLAYTYPE_DOMAIN
+ RESOURCEDISPLAYTYPE_FILE
+ RESOURCEDISPLAYTYPE_GENERIC
+ RESOURCEDISPLAYTYPE_GROUP
+ RESOURCEDISPLAYTYPE_SERVER
+ RESOURCEDISPLAYTYPE_SHARE
+ RESOURCEDISPLAYTYPE_TREE
+ RESOURCETYPE_ANY
+ RESOURCETYPE_DISK
+ RESOURCETYPE_PRINT
+ RESOURCETYPE_UNKNOWN
+ RESOURCEUSAGE_CONNECTABLE
+ RESOURCEUSAGE_CONTAINER
+ RESOURCEUSAGE_RESERVED
+ RESOURCE_CONNECTED
+ RESOURCE_GLOBALNET
+ RESOURCE_REMEMBERED
+ STYPE_DISKTREE
+ STYPE_PRINTQ
+ STYPE_DEVICE
+ STYPE_IPC
+ STYPE_SPECIAL
+ SHARE_NETNAME_PARMNUM
+ SHARE_TYPE_PARMNUM
+ SHARE_REMARK_PARMNUM
+ SHARE_PERMISSIONS_PARMNUM
+ SHARE_MAX_USES_PARMNUM
+ SHARE_CURRENT_USES_PARMNUM
+ SHARE_PATH_PARMNUM
+ SHARE_PASSWD_PARMNUM
+ SHARE_FILE_SD_PARMNUM
+);
+
+@EXPORT_OK = qw(
+ GetSharedResources
+ AddConnection
+ CancelConnection
+ WNetGetLastError
+ GetError
+ GetUNCName
+ NetShareAdd
+ NetShareCheck
+ NetShareDel
+ NetShareGetInfo
+ NetShareSetInfo
+);
+
+=head1 NAME
+
+Win32::NetResource - manage network resources in perl
+
+=head1 SYNOPSIS
+
+ use Win32::NetResource;
+
+ $ShareInfo = {
+ 'path' => "C:\\MyShareDir",
+ 'netname' => "MyShare",
+ 'remark' => "It is good to share",
+ 'passwd' => "",
+ 'current-users' =>0,
+ 'permissions' => 0,
+ 'maxusers' => -1,
+ 'type' => 0,
+ };
+
+ Win32::NetResource::NetShareAdd( $ShareInfo,$parm )
+ or die "unable to add share";
+
+
+=head1 DESCRIPTION
+
+This module offers control over the network resources of Win32.Disks,
+printers etc can be shared over a network.
+
+=head1 DATA TYPES
+
+There are two main data types required to control network resources.
+In Perl these are represented by hash types.
+
+=over 4
+
+=item %NETRESOURCE
+
+ KEY VALUE
+
+ 'Scope' => Scope of an Enumeration
+ RESOURCE_CONNECTED,
+ RESOURCE_GLOBALNET,
+ RESOURCE_REMEMBERED.
+
+ 'Type' => The type of resource to Enum
+ RESOURCETYPE_ANY All resources
+ RESOURCETYPE_DISK Disk resources
+ RESOURCETYPE_PRINT Print resources
+
+ 'DisplayType' => The way the resource should be displayed.
+ RESOURCEDISPLAYTYPE_DOMAIN
+ The object should be displayed as a domain.
+ RESOURCEDISPLAYTYPE_GENERIC
+ The method used to display the object does not matter.
+ RESOURCEDISPLAYTYPE_SERVER
+ The object should be displayed as a server.
+ RESOURCEDISPLAYTYPE_SHARE
+ The object should be displayed as a sharepoint.
+
+ 'Usage' => Specifies the Resources usage:
+ RESOURCEUSAGE_CONNECTABLE
+ RESOURCEUSAGE_CONTAINER.
+
+ 'LocalName' => Name of the local device the resource is
+ connected to.
+
+ 'RemoteName' => The network name of the resource.
+
+ 'Comment' => A string comment.
+
+ 'Provider' => Name of the provider of the resource.
+
+=back
+
+=item %SHARE_INFO
+
+This hash represents the SHARE_INFO_502 struct.
+
+=over 4
+
+ KEY VALUE
+ 'netname' => Name of the share.
+ 'type' => type of share.
+ 'remark' => A string comment.
+ 'permissions' => Permissions value
+ 'maxusers' => the max # of users.
+ 'current-users' => the current # of users.
+ 'path' => The path of the share.
+ 'passwd' => A password if one is req'd
+
+=back
+
+=head1 FUNCTIONS
+
+=head2 NOTE
+
+All of the functions return false if they fail.
+
+=over 4
+
+=item GetSharedResources(\@Resources,dwType,\%NetResource = NULL)
+
+Creates a list in @Resources of %NETRESOURCE hash references.
+
+The return value indicates whether there was an error in accessing
+any of the shared resources. All the shared resources that were
+encountered (until the point of an error, if any) are pushed into
+@Resources as references to %NETRESOURCE hashes. See example
+below. The \%NetResource argument is optional. If it is not supplied,
+the root (that is, the topmost container) of the network is assumed,
+and all network resources available from the toplevel container will
+be enumerated.
+
+=item AddConnection(\%NETRESOURCE,$Password,$UserName,$Connection)
+
+Makes a connection to a network resource specified by %NETRESOURCE
+
+=item CancelConnection($Name,$Connection,$Force)
+
+Cancels a connection to a network resource connected to local device
+$name.$Connection is either 1 - persistent connection or 0, non-persistent.
+
+=item WNetGetLastError($ErrorCode,$Description,$Name)
+
+Gets the Extended Network Error.
+
+=item GetError( $ErrorCode )
+
+Gets the last Error for a Win32::NetResource call.
+
+=item GetUNCName( $UNCName, $LocalPath );
+
+Returns the UNC name of the disk share connected to $LocalPath in $UNCName.
+$LocalPath should be a drive based path. e.g. "C:\\share\\subdir"
+
+=back
+
+=head2 NOTE
+
+$servername is optional for all the calls below. (if not given the
+local machine is assumed.)
+
+=over 4
+
+=item NetShareAdd(\%SHARE,$parm_err,$servername = NULL )
+
+Add a share for sharing.
+
+=item NetShareCheck($device,$type,$servername = NULL )
+
+Check if a directory or a device is available for connection from the
+network through a share. This includes all directories that are
+reachable through a shared directory or device, meaning that if C:\foo
+is shared, C:\foo\bar is also available for sharing. This means that
+this function is pretty useless, given that by default every disk
+volume has an administrative share such as "C$" associated with its
+root directory.
+
+$device must be a drive name, directory, or a device. For example,
+"C:", "C:\dir", "LPT1", "D$", "IPC$" are all valid as the $device
+argument. $type is an output argument that will be set to one of
+the following constants that describe the type of share:
+
+ STYPE_DISKTREE Disk drive
+ STYPE_PRINTQ Print queue
+ STYPE_DEVICE Communication device
+ STYPE_IPC Interprocess communication (IPC)
+ STYPE_SPECIAL Special share reserved for interprocess
+ communication (IPC$) or remote administration
+ of the server (ADMIN$). Can also refer to
+ administrative shares such as C$, D$, etc.
+
+=item NetShareDel( $netname, $servername = NULL )
+
+Remove a share from a machines list of shares.
+
+=item NetShareGetInfo( $netname, \%SHARE,$servername=NULL )
+
+Get the %SHARE_INFO information about the share $netname on the
+server $servername.
+
+=item NetShareSetInfo( $netname,\%SHARE,$parm_err,$servername=NULL)
+
+Set the information for share $netname.
+
+=back
+
+=head1 EXAMPLE
+
+=over 4
+
+=item Enumerating all resources on the network
+
+ #
+ # This example displays all the share points in the entire
+ # visible part of the network.
+ #
+
+ use strict;
+ use Win32::NetResource qw(:DEFAULT GetSharedResources GetError);
+ my $resources = [];
+ unless(GetSharedResources($resources, RESOURCETYPE_ANY)) {
+ my $err;
+ GetError($err);
+ warn Win32::FormatMessage($err);
+ }
+
+ foreach my $href (@$resources) {
+ next if ($$href{DisplayType} != RESOURCEDISPLAYTYPE_SHARE);
+ print "-----\n";
+ foreach( keys %$href){
+ print "$_: $href->{$_}\n";
+ }
+ }
+
+=item Enumerating all resources on a particular host
+
+ #
+ # This example displays all the share points exported by the local
+ # host.
+ #
+
+ use strict;
+ use Win32::NetResource qw(:DEFAULT GetSharedResources GetError);
+ if (GetSharedResources(my $resources, RESOURCETYPE_ANY,
+ { RemoteName => "\\\\" . Win32::NodeName() }))
+ {
+ foreach my $href (@$resources) {
+ print "-----\n";
+ foreach(keys %$href) { print "$_: $href->{$_}\n"; }
+ }
+ }
+
+=back
+
+=head1 AUTHOR
+
+Jesse Dougherty for Hip Communications.
+
+Additional general cleanups and bug fixes by Gurusamy Sarathy <gsar@activestate.com>.
+
+=cut
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::NetResource macro $constname, used at $file line $line.
+";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+sub AddConnection
+{
+ my $h = $_[0];
+ die "AddConnection: HASH reference required" unless ref($h) eq "HASH";
+
+ #
+ # The last four items *must* not be deallocated until the
+ # _AddConnection() completes (since the packed structure is
+ # pointing into these values.
+ #
+ my $netres = pack( 'i4 p4', $h->{Scope},
+ $h->{Type},
+ $h->{DisplayType},
+ $h->{Usage},
+ $h->{LocalName},
+ $h->{RemoteName},
+ $h->{Comment},
+ $h->{Provider});
+ _AddConnection($netres,$_[1],$_[2],$_[3]);
+}
+
+#use Data::Dumper;
+
+sub GetSharedResources
+{
+ die "GetSharedResources: ARRAY reference required"
+ if defined $_[0] and ref($_[0]) ne "ARRAY";
+
+ my $aref = [];
+
+ # Get the shared resources.
+
+ my $ret;
+
+ if (@_ > 2 and $_[2]) {
+ my $netres = pack('i4 p4', @{$_[2]}{qw(Scope
+ Type
+ DisplayType
+ Usage
+ LocalName
+ RemoteName
+ Comment
+ Provider)});
+ $ret = _GetSharedResources( $aref , $_[1], $netres );
+ }
+ else {
+ $ret = _GetSharedResources( $aref , $_[1] );
+ }
+
+ # build the array of hashes in $_[0]
+# print Dumper($aref);
+ foreach ( @$aref ) {
+ my %hash;
+ @hash{'Scope',
+ 'Type',
+ 'DisplayType',
+ 'Usage',
+ 'LocalName',
+ 'RemoteName',
+ 'Comment',
+ 'Provider'} = split /\001/, $_;
+ push @{$_[0]}, \%hash;
+ }
+
+ $ret;
+}
+
+sub NetShareAdd
+{
+ my $shareinfo = _hash2SHARE( $_[0] );
+ _NetShareAdd($shareinfo,$_[1], $_[2] || "");
+}
+
+sub NetShareGetInfo
+{
+ my ($netinfo,$val);
+ $val = _NetShareGetInfo( $_[0],$netinfo,$_[2] || "");
+ %{$_[1]} = %{_SHARE2hash( $netinfo )};
+ $val;
+}
+
+sub NetShareSetInfo
+{
+ my $shareinfo = _hash2SHARE( $_[1] );
+ _NetShareSetInfo( $_[0],$shareinfo,$_[2],$_[3] || "");
+}
+
+
+# These are private functions to work with the ShareInfo structure.
+# please note that the implementation of these calls requires the
+# SHARE_INFO_502 level of information.
+
+sub _SHARE2hash
+{
+ my %hash = ();
+ @hash{'type',
+ 'permissions',
+ 'maxusers',
+ 'current-users',
+ 'remark',
+ 'netname',
+ 'path',
+ 'passwd'} = unpack('i4 A257 A81 A257 A257',$_[0]);
+
+ return \%hash;
+}
+
+sub _hash2SHARE
+{
+ my $h = $_[0];
+ die "Argument must be a HASH reference" unless ref($h) eq "HASH";
+
+ return pack 'i4 a257 a81 a257 a257',
+ @$h{'type',
+ 'permissions',
+ 'maxusers',
+ 'current-users',
+ 'remark',
+ 'netname',
+ 'path',
+ 'passwd'};
+}
+
+
+bootstrap Win32::NetResource;
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Win32/ODBC.pm b/Master/tlpkg/tlperl/lib/Win32/ODBC.pm
new file mode 100644
index 00000000000..a51616388ea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/ODBC.pm
@@ -0,0 +1,1493 @@
+package Win32::ODBC;
+
+$VERSION = '0.032';
+
+# Win32::ODBC.pm
+# +==========================================================+
+# | |
+# | ODBC.PM package |
+# | --------------- |
+# | |
+# | Copyright (c) 1996, 1997 Dave Roth. All rights reserved. |
+# | This program is free software; you can redistribute |
+# | it and/or modify it under the same terms as Perl itself. |
+# | |
+# +==========================================================+
+#
+#
+# based on original code by Dan DeMaggio (dmag@umich.edu)
+#
+# Use under GNU General Public License or Larry Wall's "Artistic License"
+#
+# Check the README.TXT file that comes with this package for details about
+# it's history.
+#
+
+require Exporter;
+require DynaLoader;
+
+$ODBCPackage = "Win32::ODBC";
+$ODBCPackage::Version = 970208;
+$::ODBC = $ODBCPackage;
+$CacheConnection = 0;
+
+ # Reserve ODBC in the main namespace for US!
+*ODBC::=\%Win32::ODBC::;
+
+
+@ISA= qw( Exporter DynaLoader );
+ # Items to export into callers namespace by default. Note: do not export
+ # names by default without a very good reason. Use EXPORT_OK instead.
+ # Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ ODBC_ADD_DSN
+ ODBC_REMOVE_DSN
+ ODBC_CONFIG_DSN
+ ODBC_ADD_SYS_DSN
+ ODBC_REMOVE_SYS_DSN
+ ODBC_CONFIG_SYS_DSN
+
+ SQL_DONT_CLOSE
+ SQL_DROP
+ SQL_CLOSE
+ SQL_UNBIND
+ SQL_RESET_PARAMS
+
+ SQL_FETCH_NEXT
+ SQL_FETCH_FIRST
+ SQL_FETCH_LAST
+ SQL_FETCH_PRIOR
+ SQL_FETCH_ABSOLUTE
+ SQL_FETCH_RELATIVE
+ SQL_FETCH_BOOKMARK
+
+ SQL_COLUMN_COUNT
+ SQL_COLUMN_NAME
+ SQL_COLUMN_TYPE
+ SQL_COLUMN_LENGTH
+ SQL_COLUMN_PRECISION
+ SQL_COLUMN_SCALE
+ SQL_COLUMN_DISPLAY_SIZE
+ SQL_COLUMN_NULLABLE
+ SQL_COLUMN_UNSIGNED
+ SQL_COLUMN_MONEY
+ SQL_COLUMN_UPDATABLE
+ SQL_COLUMN_AUTO_INCREMENT
+ SQL_COLUMN_CASE_SENSITIVE
+ SQL_COLUMN_SEARCHABLE
+ SQL_COLUMN_TYPE_NAME
+ SQL_COLUMN_TABLE_NAME
+ SQL_COLUMN_OWNER_NAME
+ SQL_COLUMN_QUALIFIER_NAME
+ SQL_COLUMN_LABEL
+ SQL_COLATT_OPT_MAX
+ SQL_COLUMN_DRIVER_START
+ SQL_COLATT_OPT_MIN
+ SQL_ATTR_READONLY
+ SQL_ATTR_WRITE
+ SQL_ATTR_READWRITE_UNKNOWN
+ SQL_UNSEARCHABLE
+ SQL_LIKE_ONLY
+ SQL_ALL_EXCEPT_LIKE
+ SQL_SEARCHABLE
+ );
+ #The above are included for backward compatibility
+
+
+sub new
+{
+ my ($n, $self);
+ my ($type) = shift;
+ my ($DSN) = shift;
+ my (@Results) = @_;
+
+ if (ref $DSN){
+ @Results = ODBCClone($DSN->{'connection'});
+ }else{
+ @Results = ODBCConnect($DSN, @Results);
+ }
+ @Results = processError(-1, @Results);
+ if (! scalar(@Results)){
+ return undef;
+ }
+ $self = bless {};
+ $self->{'connection'} = $Results[0];
+ $ErrConn = $Results[0];
+ $ErrText = $Results[1];
+ $ErrNum = 0;
+ $self->{'DSN'} = $DSN;
+ $self;
+}
+
+####
+# Close this ODBC session (or all sessions)
+####
+sub Close
+{
+ my ($self, $Result) = shift;
+ $Result = DESTROY($self);
+ $self->{'connection'} = -1;
+ return $Result;
+}
+
+####
+# Auto-Kill an instance of this module
+####
+sub DESTROY
+{
+ my ($self) = shift;
+ my (@Results) = (0);
+ if($self->{'connection'} > -1){
+ @Results = ODBCDisconnect($self->{'connection'});
+ @Results = processError($self, @Results);
+ if ($Results[0]){
+ undef $self->{'DSN'};
+ undef @{$self->{'fnames'}};
+ undef %{$self->{'field'}};
+ undef %{$self->{'connection'}};
+ }
+ }
+ return $Results[0];
+}
+
+
+sub sql{
+ return (Sql(@_));
+}
+
+####
+# Submit an SQL Execute statement for processing
+####
+sub Sql{
+ my ($self, $Sql, @Results) = @_;
+ @Results = ODBCExecute($self->{'connection'}, $Sql);
+ return updateResults($self, @Results);
+}
+
+####
+# Retrieve data from a particular field
+####
+sub Data{
+
+ # Change by JOC 06-APR-96
+ # Altered by Dave Roth <dave@roth.net> 96.05.07
+ my($self) = shift;
+ my(@Fields) = @_;
+ my(@Results, $Results, $Field);
+
+ if ($self->{'Dirty'}){
+ GetData($self);
+ $self->{'Dirty'} = 0;
+ }
+ @Fields = @{$self->{'fnames'}} if (! scalar(@Fields));
+ foreach $Field (@Fields) {
+ if (wantarray) {
+ push(@Results, data($self, $Field));
+ } else {
+ $Results .= data($self, $Field);
+ }
+ }
+ return wantarray ? @Results : $Results;
+}
+
+sub DataHash{
+ my($self, @Results) = @_;
+ my(%Results, $Element);
+
+ if ($self->{'Dirty'}){
+ GetData($self);
+ $self->{'Dirty'} = 0;
+ }
+ @Results = @{$self->{'fnames'}} if (! scalar(@Results));
+ foreach $Element (@Results) {
+ $Results{$Element} = data($self, $Element);
+ }
+
+ return %Results;
+}
+
+####
+# Retrieve data from the data buffer
+####
+sub data
+{ $_[0]->{'data'}->{$_[1]}; }
+
+
+sub fetchrow{
+ return (FetchRow(@_));
+}
+####
+# Put a row from an ODBC data set into data buffer
+####
+sub FetchRow{
+ my ($self, @Results) = @_;
+ my ($item, $num, $sqlcode);
+ # Added by JOC 06-APR-96
+ # $num = 0;
+ $num = 0;
+ undef $self->{'data'};
+
+
+ @Results = ODBCFetch($self->{'connection'}, @Results);
+ if (! (@Results = processError($self, @Results))){
+ ####
+ # There should be an innocuous error "No records remain"
+ # This indicates no more records in the dataset
+ ####
+ return undef;
+ }
+ # Set the Dirty bit so we will go and extract data via the
+ # ODBCGetData function. Otherwise use the cache.
+ $self->{'Dirty'} = 1;
+
+ # Return the array of field Results.
+ return @Results;
+}
+
+sub GetData{
+ my($self) = @_;
+ my @Results;
+ my $num = 0;
+
+ @Results = ODBCGetData($self->{'connection'});
+ if (!(@Results = processError($self, @Results))){
+ return undef;
+ }
+ ####
+ # This is a special case. Do not call processResults
+ ####
+ ClearError();
+ foreach (@Results){
+ s/ +$// if defined $_; # HACK
+ $self->{'data'}->{ ${$self->{'fnames'}}[$num] } = $_;
+ $num++;
+ }
+ # return is a hack to interface with a assoc array.
+ return wantarray? (1, 1): 1;
+}
+
+####
+# See if any more ODBC Results Sets
+# Added by Brian Dunfordshore <Brian_Dunfordshore@bridge.com>
+# 96.07.10
+####
+sub MoreResults{
+ my ($self) = @_;
+
+ my(@Results) = ODBCMoreResults($self->{'connection'});
+ return (processError($self, @Results))[0];
+}
+
+####
+# Retrieve the catalog from the current DSN
+# NOTE: All Field names are uppercase!!!
+####
+sub Catalog{
+ my ($self) = shift;
+ my ($Qualifier, $Owner, $Name, $Type) = @_;
+ my (@Results) = ODBCTableList($self->{'connection'}, $Qualifier, $Owner, $Name, $Type);
+
+ # If there was an error return 0 else 1
+ return (updateResults($self, @Results) != 1);
+}
+
+####
+# Return an array of names from the catalog for the current DSN
+# TableList($Qualifier, $Owner, $Name, $Type)
+# Return: (array of names of tables)
+# NOTE: All Field names are uppercase!!!
+####
+sub TableList{
+ my ($self) = shift;
+ my (@Results) = @_;
+ if (! scalar(@Results)){
+ @Results = ("", "", "%", "TABLE");
+ }
+
+ if (! Catalog($self, @Results)){
+ return undef;
+ }
+ undef @Results;
+ while (FetchRow($self)){
+ push(@Results, Data($self, "TABLE_NAME"));
+ }
+ return sort(@Results);
+}
+
+
+sub fieldnames{
+ return (FieldNames(@_));
+}
+####
+# Return an array of fieldnames extracted from the current dataset
+####
+sub FieldNames { $self = shift; return @{$self->{'fnames'}}; }
+
+
+####
+# Closes this connection. This is used mostly for testing. You should
+# probably use Close().
+####
+sub ShutDown{
+ my($self) = @_;
+ print "\nClosing connection $self->{'connection'}...";
+ $self->Close();
+ print "\nDone\n";
+}
+
+####
+# Return this connection number
+####
+sub Connection{
+ my($self) = @_;
+ return $self->{'connection'};
+}
+
+####
+# Returns the current connections that are in use.
+####
+sub GetConnections{
+ return ODBCGetConnections();
+}
+
+####
+# Set the Max Buffer Size for this connection. This determines just how much
+# ram can be allocated when a fetch() is performed that requires a HUGE amount
+# of memory. The default max is 10k and the absolute max is 100k.
+# This will probably never be used but I put it in because I noticed a fetch()
+# of a MEMO field in an Access table was something like 4Gig. Maybe I did
+# something wrong, but after checking several times I decided to impliment
+# this limit thingie.
+####
+sub SetMaxBufSize{
+ my($self, $Size) = @_;
+ my(@Results) = ODBCSetMaxBufSize($self->{'connection'}, $Size);
+ return (processError($self, @Results))[0];
+}
+
+####
+# Returns the Max Buffer Size for this connection. See SetMaxBufSize().
+####
+sub GetMaxBufSize{
+ my($self) = @_;
+ my(@Results) = ODBCGetMaxBufSize($self->{'connection'});
+ return (processError($self, @Results))[0];
+}
+
+
+####
+# Returns the DSN for this connection as an associative array.
+####
+sub GetDSN{
+ my($self, $DSN) = @_;
+ if(! ref($self)){
+ $DSN = $self;
+ $self = 0;
+ }
+ if (! $DSN){
+ $self = $self->{'connection'};
+ }
+ my(@Results) = ODBCGetDSN($self, $DSN);
+ return (processError($self, @Results));
+}
+
+####
+# Returns an associative array of $XXX{'DSN'}=Description
+####
+sub DataSources{
+ my($self, $DSN) = @_;
+ if(! ref $self){
+ $DSN = $self;
+ $self = 0;
+ }
+ my(@Results) = ODBCDataSources($DSN);
+ return (processError($self, @Results));
+}
+
+####
+# Returns an associative array of $XXX{'Driver Name'}=Driver Attributes
+####
+sub Drivers{
+ my($self) = @_;
+ if(! ref $self){
+ $self = 0;
+ }
+ my(@Results) = ODBCDrivers();
+ return (processError($self, @Results));
+}
+
+####
+# Returns the number of Rows that were affected by the previous SQL command.
+####
+sub RowCount{
+ my($self, $Connection) = @_;
+ if (! ref($self)){
+ $Connection = $self;
+ $self = 0;
+ }
+ if (! $Connection){$Connection = $self->{'connection'};}
+ my(@Results) = ODBCRowCount($Connection);
+ return (processError($self, @Results))[0];
+}
+
+####
+# Returns the Statement Close Type -- how does ODBC Close a statment.
+# Types:
+# SQL_DROP
+# SQL_CLOSE
+# SQL_UNBIND
+# SQL_RESET_PARAMS
+####
+sub GetStmtCloseType{
+ my($self, $Connection) = @_;
+ if (! ref($self)){
+ $Connection = $self;
+ $self = 0;
+ }
+ if (! $Connection){$Connection = $self->{'connection'};}
+ my(@Results) = ODBCGetStmtCloseType($Connection);
+ return (processError($self, @Results));
+}
+
+####
+# Sets the Statement Close Type -- how does ODBC Close a statment.
+# Types:
+# SQL_DROP
+# SQL_CLOSE
+# SQL_UNBIND
+# SQL_RESET_PARAMS
+# Returns the newly set value.
+####
+sub SetStmtCloseType{
+ my($self, $Type, $Connection) = @_;
+ if (! ref($self)){
+ $Connection = $Type;
+ $Type = $self;
+ $self = 0;
+ }
+ if (! $Connection){$Connection = $self->{'connection'};}
+ my(@Results) = ODBCSetStmtCloseType($Connection, $Type);
+ return (processError($self, @Results))[0];
+}
+
+sub ColAttributes{
+ my($self, $Type, @Field) = @_;
+ my(%Results, @Results, $Results, $Attrib, $Connection, $Temp);
+ if (! ref($self)){
+ $Type = $Field;
+ $Field = $self;
+ $self = 0;
+ }
+ $Connection = $self->{'connection'};
+ if (! scalar(@Field)){ @Field = $self->fieldnames;}
+ foreach $Temp (@Field){
+ @Results = ODBCColAttributes($Connection, $Temp, $Type);
+ ($Attrib) = processError($self, @Results);
+ if (wantarray){
+ $Results{$Temp} = $Attrib;
+ }else{
+ $Results .= "$Temp";
+ }
+ }
+ return wantarray? %Results:$Results;
+}
+
+sub GetInfo{
+ my($self, $Type) = @_;
+ my($Connection, @Results);
+ if(! ref $self){
+ $Type = $self;
+ $self = 0;
+ $Connection = 0;
+ }else{
+ $Connection = $self->{'connection'};
+ }
+ @Results = ODBCGetInfo($Connection, $Type);
+ return (processError($self, @Results))[0];
+}
+
+sub GetConnectOption{
+ my($self, $Type) = @_;
+ my(@Results);
+ if(! ref $self){
+ $Type = $self;
+ $self = 0;
+ }
+ @Results = ODBCGetConnectOption($self->{'connection'}, $Type);
+ return (processError($self, @Results))[0];
+}
+
+sub SetConnectOption{
+ my($self, $Type, $Value) = @_;
+ if(! ref $self){
+ $Value = $Type;
+ $Type = $self;
+ $self = 0;
+ }
+ my(@Results) = ODBCSetConnectOption($self->{'connection'}, $Type, $Value);
+ return (processError($self, @Results))[0];
+}
+
+
+sub Transact{
+ my($self, $Type) = @_;
+ my(@Results);
+ if(! ref $self){
+ $Type = $self;
+ $self = 0;
+ }
+ @Results = ODBCTransact($self->{'connection'}, $Type);
+ return (processError($self, @Results))[0];
+}
+
+
+sub SetPos{
+ my($self, @Results) = @_;
+ @Results = ODBCSetPos($self->{'connection'}, @Results);
+ $self->{'Dirty'} = 1;
+ return (processError($self, @Results))[0];
+}
+
+sub ConfigDSN{
+ my($self) = shift @_;
+ my($Type, $Connection);
+ if(! ref $self){
+ $Type = $self;
+ $Connection = 0;
+ $self = 0;
+ }else{
+ $Type = shift @_;
+ $Connection = $self->{'connection'};
+ }
+ my($Driver, @Attributes) = @_;
+ @Results = ODBCConfigDSN($Connection, $Type, $Driver, @Attributes);
+ return (processError($self, @Results))[0];
+}
+
+
+sub Version{
+ my($self, @Packages) = @_;
+ my($Temp, @Results);
+ if (! ref($self)){
+ push(@Packages, $self);
+ }
+ my($ExtName, $ExtVersion) = Info();
+ if (! scalar(@Packages)){
+ @Packages = ("ODBC.PM", "ODBC.PLL");
+ }
+ foreach $Temp (@Packages){
+ if ($Temp =~ /pll/i){
+ push(@Results, "ODBC.PM:$Win32::ODBC::Version");
+ }elsif ($Temp =~ /pm/i){
+ push(@Results, "ODBC.PLL:$ExtVersion");
+ }
+ }
+ return @Results;
+}
+
+
+sub SetStmtOption{
+ my($self, $Option, $Value) = @_;
+ if(! ref $self){
+ $Value = $Option;
+ $Option = $self;
+ $self = 0;
+ }
+ my(@Results) = ODBCSetStmtOption($self->{'connection'}, $Option, $Value);
+ return (processError($self, @Results))[0];
+}
+
+sub GetStmtOption{
+ my($self, $Type) = @_;
+ if(! ref $self){
+ $Type = $self;
+ $self = 0;
+ }
+ my(@Results) = ODBCGetStmtOption($self->{'connection'}, $Type);
+ return (processError($self, @Results))[0];
+}
+
+sub GetFunctions{
+ my($self, @Results)=@_;
+ @Results = ODBCGetFunctions($self->{'connection'}, @Results);
+ return (processError($self, @Results));
+}
+
+sub DropCursor{
+ my($self) = @_;
+ my(@Results) = ODBCDropCursor($self->{'connection'});
+ return (processError($self, @Results))[0];
+}
+
+sub SetCursorName{
+ my($self, $Name) = @_;
+ my(@Results) = ODBCSetCursorName($self->{'connection'}, $Name);
+ return (processError($self, @Results))[0];
+}
+
+sub GetCursorName{
+ my($self) = @_;
+ my(@Results) = ODBCGetCursorName($self->{'connection'});
+ return (processError($self, @Results))[0];
+}
+
+sub GetSQLState{
+ my($self) = @_;
+ my(@Results) = ODBCGetSQLState($self->{'connection'});
+ return (processError($self, @Results))[0];
+}
+
+
+# ----------- R e s u l t P r o c e s s i n g F u n c t i o n s ----------
+####
+# Generic processing of data into associative arrays
+####
+sub updateResults{
+ my ($self, $Error, @Results) = @_;
+
+ undef %{$self->{'field'}};
+
+ ClearError($self);
+ if ($Error){
+ SetError($self, $Results[0], $Results[1]);
+ return ($Error);
+ }
+
+ @{$self->{'fnames'}} = @Results;
+
+ foreach (0..$#{$self->{'fnames'}}){
+ s/ +$//;
+ $self->{'field'}->{${$self->{'fnames'}}[$_]} = $_;
+ }
+ return undef;
+}
+
+# ----------------------------------------------------------------------------
+# ----------------- D e b u g g i n g F u n c t i o n s --------------------
+
+sub Debug{
+ my($self, $iDebug, $File) = @_;
+ my(@Results);
+ if (! ref($self)){
+ if (defined $self){
+ $File = $iDebug;
+ $iDebug = $self;
+ }
+ $Connection = 0;
+ $self = 0;
+ }else{
+ $Connection = $self->{'connection'};
+ }
+ push(@Results, ($Connection, $iDebug));
+ push(@Results, $File) if ($File ne "");
+ @Results = ODBCDebug(@Results);
+ return (processError($self, @Results))[0];
+}
+
+####
+# Prints out the current dataset (used mostly for testing)
+####
+sub DumpData {
+ my($self) = @_; my($f, $goo);
+
+ # Changed by JOC 06-Apr-96
+ # print "\nDumping Data for connection: $conn->{'connection'}\n";
+ print "\nDumping Data for connection: $self->{'connection'}\n";
+ print "Error: \"";
+ print $self->Error();
+ print "\"\n";
+ if (! $self->Error()){
+ foreach $f ($self->FieldNames){
+ print $f . " ";
+ $goo .= "-" x length($f);
+ $goo .= " ";
+ }
+ print "\n$goo\n";
+ while ($self->FetchRow()){
+ foreach $f ($self->FieldNames){
+ print $self->Data($f) . " ";
+ }
+ print "\n";
+ }
+ }
+}
+
+sub DumpError{
+ my($self) = @_;
+ my($ErrNum, $ErrText, $ErrConn);
+ my($Temp);
+
+ print "\n---------- Error Report: ----------\n";
+ if (ref $self){
+ ($ErrNum, $ErrText, $ErrConn) = $self->Error();
+ ($Temp = $self->GetDSN()) =~ s/.*DSN=(.*?);.*/$1/i;
+ print "Errors for \"$Temp\" on connection " . $self->{'connection'} . ":\n";
+ }else{
+ ($ErrNum, $ErrText, $ErrConn) = Error();
+ print "Errors for the package:\n";
+ }
+
+ print "Connection Number: $ErrConn\nError number: $ErrNum\nError message: \"$ErrText\"\n";
+ print "-----------------------------------\n";
+
+}
+
+####
+# Submit an SQL statement and print data about it (used mostly for testing)
+####
+sub Run{
+ my($self, $Sql) = @_;
+
+ print "\nExcecuting connection $self->{'connection'}\nsql statement: \"$Sql\"\n";
+ $self->Sql($Sql);
+ print "Error: \"";
+ print $self->error;
+ print "\"\n";
+ print "--------------------\n\n";
+}
+
+# ----------------------------------------------------------------------------
+# ----------- E r r o r P r o c e s s i n g F u n c t i o n s ------------
+
+####
+# Process Errors returned from a call to ODBCxxxx().
+# It is assumed that the Win32::ODBC function returned the following structure:
+# ($ErrorNumber, $ResultsText, ...)
+# $ErrorNumber....0 = No Error
+# >0 = Error Number
+# $ResultsText.....if no error then this is the first Results element.
+# if error then this is the error text.
+####
+sub processError{
+ my($self, $Error, @Results) = @_;
+ if ($Error){
+ SetError($self, $Results[0], $Results[1]);
+ undef @Results;
+ }
+ return @Results;
+}
+
+####
+# Return the last recorded error message
+####
+sub error{
+ return (Error(@_));
+}
+
+sub Error{
+ my($self) = @_;
+ if(ref($self)){
+ if($self->{'ErrNum'}){
+ my($State) = ODBCGetSQLState($self->{'connection'});
+ return (wantarray)? ($self->{'ErrNum'}, $self->{'ErrText'}, $self->{'connection'}, $State) :"[$self->{'ErrNum'}] [$self->{'connection'}] [$State] \"$self->{'ErrText'}\"";
+ }
+ }elsif ($ErrNum){
+ return (wantarray)? ($ErrNum, $ErrText, $ErrConn):"[$ErrNum] [$ErrConn] \"$ErrText\"";
+ }
+ return undef
+}
+
+####
+# SetError:
+# Assume that if $self is not a reference then it is just a placeholder
+# and should be ignored.
+####
+sub SetError{
+ my($self, $Num, $Text, $Conn) = @_;
+ if (ref $self){
+ $self->{'ErrNum'} = $Num;
+ $self->{'ErrText'} = $Text;
+ $Conn = $self->{'connection'} if ! $Conn;
+ }
+ $ErrNum = $Num;
+ $ErrText = $Text;
+
+ ####
+ # Test Section Begin
+ ####
+# $! = ($Num, $Text);
+ ####
+ # Test Section End
+ ####
+
+ $ErrConn = $Conn;
+}
+
+sub ClearError{
+ my($self, $Num, $Text) = @_;
+ if (ref $self){
+ undef $self->{'ErrNum'};
+ undef $self->{'ErrText'};
+ }else{
+ undef $ErrConn;
+ undef $ErrNum;
+ undef $ErrText;
+ }
+ ODBCCleanError();
+ return 1;
+}
+
+
+sub GetError{
+ my($self, $Connection) = @_;
+ my(@Results);
+ if (! ref($self)){
+ $Connection = $self;
+ $self = 0;
+ }else{
+ if (! defined($Connection)){
+ $Connection = $self->{'connection'};
+ }
+ }
+
+ @Results = ODBCGetError($Connection);
+ return @Results;
+}
+
+
+
+
+# ----------------------------------------------------------------------------
+# ------------------ A U T O L O A D F U N C T I O N -----------------------
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ $val = constant($constname);
+
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+
+ # Added by JOC 06-APR-96
+ # $pack = 0;
+ $pack = 0;
+ ($pack,$file,$line) = caller;
+ print "Your vendor has not defined Win32::ODBC macro $constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+ # --------------------------------------------------------------
+ #
+ #
+ # Make sure that we shutdown ODBC and free memory even if we are
+ # using perlis.dll on Win32 platform!
+END{
+# ODBCShutDown() unless $CacheConnection;
+}
+
+
+bootstrap Win32::ODBC;
+
+# Preloaded methods go here.
+
+# Autoload methods go after __END__, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::ODBC - ODBC Extension for Win32
+
+=head1 SYNOPSIS
+
+To use this module, include the following statement at the top of your
+script:
+
+ use Win32::ODBC;
+
+Next, create a data connection to your DSN:
+
+ $Data = new Win32::ODBC("MyDSN");
+
+B<NOTE>: I<MyDSN> can be either the I<DSN> as defined in the ODBC
+Administrator, I<or> it can be an honest-to-God I<DSN Connect String>.
+
+ Example: "DSN=My Database;UID=Brown Cow;PWD=Moo;"
+
+You should check to see if C<$Data> is indeed defined, otherwise there
+has been an error.
+
+You can now send SQL queries and retrieve info to your heart's
+content! See the description of the methods provided by this module
+below and also the file F<TEST.PL> as referred to in L<INSTALLATION
+NOTES> to see how it all works.
+
+Finally, B<MAKE SURE> that you close your connection when you are
+finished:
+
+ $Data->Close();
+
+=head1 DESCRIPTION
+
+=head2 Background
+
+This is a hack of Dan DeMaggio's <dmag@umich.edu> F<NTXS.C> ODBC
+implementation. I have recoded and restructured most of it including
+most of the F<ODBC.PM> package, but its very core is still based on
+Dan's code (thanks Dan!).
+
+The history of this extension is found in the file F<HISTORY.TXT> that
+comes with the original archive (see L<INSTALLATION NOTES> below).
+
+=head2 Benefits
+
+And what are the benefits of this module?
+
+=over
+
+=item *
+
+The number of ODBC connections is limited by memory and ODBC itself
+(have as many as you want!).
+
+=item *
+
+The working limit for the size of a field is 10,240 bytes, but you can
+increase that limit (if needed) to a max of 2,147,483,647 bytes. (You
+can always recompile to increase the max limit.)
+
+=item *
+
+You can open a connection by either specifing a DSN or a connection
+string!
+
+=item *
+
+You can open and close the connections in any order!
+
+=item *
+
+Other things that I can not think of right now... :)
+
+=back
+
+=head1 CONSTANTS
+
+This package defines a number of constants. You may refer to each of
+these constants using the notation C<ODBC::xxxxx>, where C<xxxxx> is
+the constant.
+
+Example:
+
+ print ODBC::SQL_SQL_COLUMN_NAME, "\n";
+
+=head1 SPECIAL NOTATION
+
+For the method documentation that follows, an B<*> following the
+method parameters indicates that that method is new or has been
+modified for this version.
+
+=head1 CONSTRUCTOR
+
+=over
+
+=item new ( ODBC_OBJECT | DSN [, (OPTION1, VALUE1), (OPTION2, VALUE2) ...] )
+*
+
+Creates a new ODBC connection based on C<DSN>, or, if you specify an
+already existing ODBC object, then a new ODBC object will be created
+but using the ODBC Connection specified by C<ODBC_OBJECT>. (The new
+object will be a new I<hstmt> using the I<hdbc> connection in
+C<ODBC_OBJECT>.)
+
+C<DSN> is I<Data Source Name> or a proper C<ODBCDriverConnect> string.
+
+You can specify SQL Connect Options that are implemented before the
+actual connection to the DSN takes place. These option/values are the
+same as specified in C<GetConnectOption>/C<SetConnectOption> (see
+below) and are defined in the ODBC API specs.
+
+Returns a handle to the database on success, or I<undef> on failure.
+
+=back
+
+=head1 METHODS
+
+=over
+
+=item Catalog ( QUALIFIER, OWNER, NAME, TYPE )
+
+Tells ODBC to create a data set that contains table information about
+the DSN. Use C<Fetch> and C<Data> or C<DataHash> to retrieve the data.
+The returned format is:
+
+ [Qualifier] [Owner] [Name] [Type]
+
+Returns I<true> on error.
+
+=item ColAttributes ( ATTRIBUTE [, FIELD_NAMES ] )
+
+Returns the attribute C<ATTRIBUTE> on each of the fields in the list
+C<FIELD_NAMES> in the current record set. If C<FIELD_NAMES> is empty,
+then all fields are assumed. The attributes are returned as an
+associative array.
+
+=item ConfigDSN ( OPTION, DRIVER, ATTRIBUTE1 [, ATTRIBUTE2, ATTRIBUTE3, ...
+] )
+
+Configures a DSN. C<OPTION> takes on one of the following values:
+
+ ODBC_ADD_DSN.......Adds a new DSN.
+ ODBC_MODIFY_DSN....Modifies an existing DSN.
+ ODBC_REMOVE_DSN....Removes an existing DSN.
+
+ ODBC_ADD_SYS_DSN.......Adds a new System DSN.
+ ODBC_MODIFY_SYS_DSN....Modifies an existing System DSN.
+ ODBC_REMOVE_SYS_DSN....Removes an existing System DSN.
+
+You must specify the driver C<DRIVER> (which can be retrieved by using
+C<DataSources> or C<Drivers>).
+
+C<ATTRIBUTE1> B<should> be I<"DSN=xxx"> where I<xxx> is the name of
+the DSN. Other attributes can be any DSN attribute such as:
+
+ "UID=Cow"
+ "PWD=Moo"
+ "Description=My little bitty Data Source Name"
+
+Returns I<true> on success, I<false> on failure.
+
+B<NOTE 1>: If you use C<ODBC_ADD_DSN>, then you must include at least
+I<"DSN=xxx"> and the location of the database.
+
+Example: For MS Access databases, you must specify the
+I<DatabaseQualifier>:
+
+ "DBQ=c:\\...\\MyDatabase.mdb"
+
+B<NOTE 2>: If you use C<ODBC_MODIFY_DSN>, then you need only specify
+the I<"DNS=xxx"> attribute. Any other attribute you include will be
+changed to what you specify.
+
+B<NOTE 3>: If you use C<ODBC_REMOVE_DSN>, then you need only specify
+the I<"DSN=xxx"> attribute.
+
+=item Connection ()
+
+Returns the connection number associated with the ODBC connection.
+
+=item Close ()
+
+Closes the ODBC connection. No return value.
+
+=item Data ( [ FIELD_NAME ] )
+
+Returns the contents of column name C<FIELD_NAME> or the current row
+(if nothing is specified).
+
+=item DataHash ( [ FIELD1, FIELD2, ... ] )
+
+Returns the contents for C<FIELD1, FIELD2, ...> or the entire row (if
+nothing is specified) as an associative array consisting of:
+
+ {Field Name} => Field Data
+
+=item DataSources ()
+
+Returns an associative array of Data Sources and ODBC remarks about them.
+They are returned in the form of:
+
+ $ArrayName{'DSN'}=Driver
+
+where I<DSN> is the Data Source Name and ODBC Driver used.
+
+=item Debug ( [ 1 | 0 ] )
+
+Sets the debug option to on or off. If nothing is specified, then
+nothing is changed.
+
+Returns the debugging value (I<1> or I<0>).
+
+=item Drivers ()
+
+Returns an associative array of ODBC Drivers and their attributes.
+They are returned in the form of:
+
+ $ArrayName{'DRIVER'}=Attrib1;Attrib2;Attrib3;...
+
+where I<DRIVER> is the ODBC Driver Name and I<AttribX> are the
+driver-defined attributes.
+
+=item DropCursor ( [ CLOSE_TYPE ] )
+
+Drops the cursor associated with the ODBC object. This forces the
+cursor to be deallocated. This overrides C<SetStmtCloseType>, but the
+ODBC object does not lose the C<StmtCloseType> setting. C<CLOSE_TYPE>
+can be any valid C<SmtpCloseType> and will perform a close on the stmt
+using the specified close type.
+
+Returns I<true> on success, I<false> on failure.
+
+=item DumpData ()
+
+Dumps to the screen the fieldnames and all records of the current data
+set. Used primarily for debugging. No return value.
+
+=item Error ()
+
+Returns the last encountered error. The returned value is context
+dependent:
+
+If called in a I<scalar> context, then a I<3-element array> is
+returned:
+
+ ( ERROR_NUMBER, ERROR_TEXT, CONNECTION_NUMBER )
+
+If called in a I<string> context, then a I<string> is returned:
+
+ "[ERROR_NUMBER] [CONNECTION_NUMBER] [ERROR_TEXT]"
+
+If debugging is on then two more variables are returned:
+
+ ( ..., FUNCTION, LEVEL )
+
+where C<FUNCTION> is the name of the function in which the error
+occurred, and C<LEVEL> represents extra information about the error
+(usually the location of the error).
+
+=item FetchRow ( [ ROW [, TYPE ] ] )
+
+Retrieves the next record from the keyset. When C<ROW> and/or C<TYPE>
+are specified, the call is made using C<SQLExtendedFetch> instead of
+C<SQLFetch>.
+
+B<NOTE 1>: If you are unaware of C<SQLExtendedFetch> and its
+implications, stay with just regular C<FetchRow> with no parameters.
+
+B<NOTE 2>: The ODBC API explicitly warns against mixing calls to
+C<SQLFetch> and C<SQLExtendedFetch>; use one or the other but not
+both.
+
+If I<ROW> is specified, it moves the keyset B<RELATIVE> C<ROW> number
+of rows.
+
+If I<ROW> is specified and C<TYPE> is B<not>, then the type used is
+B<RELATIVE>.
+
+Returns I<true> when another record is available to read, and I<false>
+when there are no more records.
+
+=item FieldNames ()
+
+Returns an array of fieldnames found in the current data set. There is
+no guarantee on order.
+
+=item GetConnections ()
+
+Returns an array of connection numbers showing what connections are
+currently open.
+
+=item GetConnectOption ( OPTION )
+
+Returns the value of the specified connect option C<OPTION>. Refer to
+ODBC documentation for more information on the options and values.
+
+Returns a string or scalar depending upon the option specified.
+
+=item GetCursorName ()
+
+Returns the name of the current cursor as a string or I<undef>.
+
+=item GetData ()
+
+Retrieves the current row from the dataset. This is not generally
+used by users; it is used internally.
+
+Returns an array of field data where the first element is either
+I<false> (if successful) and I<true> (if B<not> successful).
+
+=item getDSN ( [ DSN ] )
+
+Returns an associative array indicating the configuration for the
+specified DSN.
+
+If no DSN is specified then the current connection is used.
+
+The returned associative array consists of:
+
+ keys=DSN keyword; values=Keyword value. $Data{$Keyword}=Value
+
+=item GetFunctions ( [ FUNCTION1, FUNCTION2, ... ] )
+
+Returns an associative array indicating the ability of the ODBC Driver
+to support the specified functions. If no functions are specified,
+then a 100 element associative array is returned containing all
+possible functions and their values.
+
+C<FUNCTION> must be in the form of an ODBC API constant like
+C<SQL_API_SQLTRANSACT>.
+
+The returned array will contain the results like:
+
+ $Results{SQL_API_SQLTRANSACT}=Value
+
+Example:
+
+ $Results = $O->GetFunctions(
+ $O->SQL_API_SQLTRANSACT,
+ SQL_API_SQLSETCONNECTOPTION
+ );
+ $ConnectOption = $Results{SQL_API_SQLSETCONNECTOPTION};
+ $Transact = $Results{SQL_API_SQLTRANSACT};
+
+=item GetInfo ( OPTION )
+
+Returns a string indicating the value of the particular
+option specified.
+
+=item GetMaxBufSize ()
+
+Returns the current allocated limit for I<MaxBufSize>. For more info,
+see C<SetMaxBufSize>.
+
+=item GetSQLState () *
+
+Returns a string indicating the SQL state as reported by ODBC. The SQL
+state is a code that the ODBC Manager or ODBC Driver returns after the
+execution of a SQL function. This is helpful for debugging purposes.
+
+=item GetStmtCloseType ( [ CONNECTION ] )
+
+Returns a string indicating the type of closure that will be used
+everytime the I<hstmt> is freed. See C<SetStmtCloseType> for details.
+
+By default, the connection of the current object will be used. If
+C<CONNECTION> is a valid connection number, then it will be used.
+
+=item GetStmtOption ( OPTION )
+
+Returns the value of the specified statement option C<OPTION>. Refer
+to ODBC documentation for more information on the options and values.
+
+Returns a string or scalar depending upon the option specified.
+
+=item MoreResults ()
+
+This will report whether there is data yet to be retrieved from the
+query. This can happen if the query was a multiple select.
+
+Example:
+
+ "SELECT * FROM [foo] SELECT * FROM [bar]"
+
+B<NOTE>: Not all drivers support this.
+
+Returns I<1> if there is more data, I<undef> otherwise.
+
+=item RowCount ( CONNECTION )
+
+For I<UPDATE>, I<INSERT> and I<DELETE> statements, the returned value
+is the number of rows affected by the request or I<-1> if the number
+of affected rows is not available.
+
+B<NOTE 1>: This function is not supported by all ODBC drivers! Some
+drivers do support this but not for all statements (e.g., it is
+supported for I<UPDATE>, I<INSERT> and I<DELETE> commands but not for
+the I<SELECT> command).
+
+B<NOTE 2>: Many data sources cannot return the number of rows in a
+result set before fetching them; for maximum interoperability,
+applications should not rely on this behavior.
+
+Returns the number of affected rows, or I<-1> if not supported by the
+driver in the current context.
+
+=item Run ( SQL )
+
+Executes the SQL command B<SQL> and dumps to the screen info about
+it. Used primarily for debugging.
+
+No return value.
+
+=item SetConnectOption ( OPTION ) *
+
+Sets the value of the specified connect option B<OPTION>. Refer to
+ODBC documentation for more information on the options and values.
+
+Returns I<true> on success, I<false> otherwise.
+
+=item SetCursorName ( NAME ) *
+
+Sets the name of the current cursor.
+
+Returns I<true> on success, I<false> otherwise.
+
+=item SetPos ( ROW [, OPTION, LOCK ] ) *
+
+Moves the cursor to the row C<ROW> within the current keyset (B<not>
+the current data/result set).
+
+Returns I<true> on success, I<false> otherwise.
+
+=item SetMaxBufSize ( SIZE )
+
+This sets the I<MaxBufSize> for a particular connection. This will
+most likely never be needed but...
+
+The amount of memory that is allocated to retrieve the field data of a
+record is dynamic and changes when it need to be larger. I found that
+a memo field in an MS Access database ended up requesting 4 Gig of
+space. This was a bit much so there is an imposed limit (2,147,483,647
+bytes) that can be allocated for data retrieval.
+
+Since it is possible that someone has a database with field data
+greater than 10,240, you can use this function to increase the limit
+up to a ceiling of 2,147,483,647 (recompile if you need more).
+
+Returns the max number of bytes.
+
+=item SetStmtCloseType ( TYPE [, CONNECTION ] )
+
+Sets a particular I<hstmt> close type for the connection. This is the
+same as C<ODBCFreeStmt(hstmt, TYPE)>. By default, the connection of
+the current object will be used. If C<CONNECTION> is a valid
+connection number, then it will be used.
+
+C<TYPE> may be one of:
+
+ SQL_CLOSE
+ SQL_DROP
+ SQL_UNBIND
+ SQL_RESET_PARAMS
+
+Returns a string indicating the newly set type.
+
+=item SetStmtOption ( OPTION ) *
+
+Sets the value of the specified statement option C<OPTION>. Refer to
+ODBC documentation for more information on the options and values.
+
+Returns I<true> on success, I<false> otherwise.
+
+=item ShutDown ()
+
+Closes the ODBC connection and dumps to the screen info about
+it. Used primarily for debugging.
+
+No return value.
+
+=item Sql ( SQL_STRING )
+
+Executes the SQL command C<SQL_STRING> on the current connection.
+
+Returns I<?> on success, or an error number on failure.
+
+=item TableList ( QUALIFIER, OWNER, NAME, TYPE )
+
+Returns the catalog of tables that are available in the DSN. For an
+unknown parameter, just specify the empty string I<"">.
+
+Returns an array of table names.
+
+=item Transact ( TYPE ) *
+
+Forces the ODBC connection to perform a I<rollback> or I<commit>
+transaction.
+
+C<TYPE> may be one of:
+
+ SQL_COMMIT
+ SQL_ROLLBACK
+
+B<NOTE>: This only works with ODBC drivers that support transactions.
+Your driver supports it if I<true> is returned from:
+
+ $O->GetFunctions($O->SQL_API_SQLTRANSACT)[1]
+
+(See C<GetFunctions> for more details.)
+
+Returns I<true> on success, I<false> otherwise.
+
+=item Version ( PACKAGES )
+
+Returns an array of version numbers for the requested packages
+(F<ODBC.pm> or F<ODBC.PLL>). If the list C<PACKAGES> is empty, then
+all version numbers are returned.
+
+=back
+
+=head1 LIMITATIONS
+
+What known problems does this thing have?
+
+=over
+
+=item *
+
+If the account under which the process runs does not have write
+permission on the default directory (for the process, not the ODBC
+DSN), you will probably get a runtime error during a
+C<SQLConnection>. I don't think that this is a problem with the code,
+but more like a problem with ODBC. This happens because some ODBC
+drivers need to write a temporary file. I noticed this using the MS
+Jet Engine (Access Driver).
+
+=item *
+
+This module has been neither optimized for speed nor optimized for
+memory consumption.
+
+=back
+
+=head1 INSTALLATION NOTES
+
+If you wish to use this module with a build of Perl other than
+ActivePerl, you may wish to fetch the original source distribution for
+this module at:
+
+ ftp://ftp.roth.net:/pub/ntperl/ODBC/970208/Bin/Win32_ODBC_Build_CORE.zip
+
+or one of the other archives at that same location. See the included
+README for hints on installing this module manually, what to do if you
+get a I<parse exception>, and a pointer to a test script for this
+module.
+
+=head1 OTHER DOCUMENTATION
+
+Find a FAQ for Win32::ODBC at:
+
+ http://www.roth.net/odbc/odbcfaq.htm
+
+=head1 AUTHOR
+
+Dave Roth <rothd@roth.net>
+
+=head1 CREDITS
+
+Based on original code by Dan DeMaggio <dmag@umich.edu>
+
+=head1 DISCLAIMER
+
+I do not guarantee B<ANYTHING> with this package. If you use it you
+are doing so B<AT YOUR OWN RISK>! I may or may not support this
+depending on my time schedule.
+
+=head1 HISTORY
+
+Last Modified 1999.09.25.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996-1998 Dave Roth. All rights reserved.
+
+Courtesy of Roth Consulting: http://www.roth.net/consult/
+
+Use under GNU General Public License. Details can be found at:
+http://www.gnu.org/copyleft/gpl.html
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/PerfLib.pm b/Master/tlpkg/tlperl/lib/Win32/PerfLib.pm
new file mode 100644
index 00000000000..2b773d68f4b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/PerfLib.pm
@@ -0,0 +1,538 @@
+package Win32::PerfLib;
+
+use strict;
+use Carp;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+
+require Exporter;
+require DynaLoader;
+require AutoLoader;
+
+@ISA = qw(Exporter DynaLoader);
+
+@EXPORT = qw(
+ PERF_100NSEC_MULTI_TIMER
+ PERF_100NSEC_MULTI_TIMER_INV
+ PERF_100NSEC_TIMER
+ PERF_100NSEC_TIMER_INV
+ PERF_AVERAGE_BASE
+ PERF_AVERAGE_BULK
+ PERF_AVERAGE_TIMER
+ PERF_COUNTER_BASE
+ PERF_COUNTER_BULK_COUNT
+ PERF_COUNTER_COUNTER
+ PERF_COUNTER_DELTA
+ PERF_COUNTER_ELAPSED
+ PERF_COUNTER_FRACTION
+ PERF_COUNTER_HISTOGRAM
+ PERF_COUNTER_HISTOGRAM_TYPE
+ PERF_COUNTER_LARGE_DELTA
+ PERF_COUNTER_LARGE_QUEUELEN_TYPE
+ PERF_COUNTER_LARGE_RAWCOUNT
+ PERF_COUNTER_LARGE_RAWCOUNT_HEX
+ PERF_COUNTER_MULTI_BASE
+ PERF_COUNTER_MULTI_TIMER
+ PERF_COUNTER_MULTI_TIMER_INV
+ PERF_COUNTER_NODATA
+ PERF_COUNTER_QUEUELEN
+ PERF_COUNTER_QUEUELEN_TYPE
+ PERF_COUNTER_RATE
+ PERF_COUNTER_RAWCOUNT
+ PERF_COUNTER_RAWCOUNT_HEX
+ PERF_COUNTER_TEXT
+ PERF_COUNTER_TIMER
+ PERF_COUNTER_TIMER_INV
+ PERF_COUNTER_VALUE
+ PERF_DATA_REVISION
+ PERF_DATA_VERSION
+ PERF_DELTA_BASE
+ PERF_DELTA_COUNTER
+ PERF_DETAIL_ADVANCED
+ PERF_DETAIL_EXPERT
+ PERF_DETAIL_NOVICE
+ PERF_DETAIL_WIZARD
+ PERF_DISPLAY_NOSHOW
+ PERF_DISPLAY_NO_SUFFIX
+ PERF_DISPLAY_PERCENT
+ PERF_DISPLAY_PER_SEC
+ PERF_DISPLAY_SECONDS
+ PERF_ELAPSED_TIME
+ PERF_INVERSE_COUNTER
+ PERF_MULTI_COUNTER
+ PERF_NO_INSTANCES
+ PERF_NO_UNIQUE_ID
+ PERF_NUMBER_DECIMAL
+ PERF_NUMBER_DEC_1000
+ PERF_NUMBER_HEX
+ PERF_OBJECT_TIMER
+ PERF_RAW_BASE
+ PERF_RAW_FRACTION
+ PERF_SAMPLE_BASE
+ PERF_SAMPLE_COUNTER
+ PERF_SAMPLE_FRACTION
+ PERF_SIZE_DWORD
+ PERF_SIZE_LARGE
+ PERF_SIZE_VARIABLE_LEN
+ PERF_SIZE_ZERO
+ PERF_TEXT_ASCII
+ PERF_TEXT_UNICODE
+ PERF_TIMER_100NS
+ PERF_TIMER_TICK
+ PERF_TYPE_COUNTER
+ PERF_TYPE_NUMBER
+ PERF_TYPE_TEXT
+ PERF_TYPE_ZERO
+ );
+
+$VERSION = '0.05';
+
+sub AUTOLOAD {
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ local $! = 0;
+ my $val = constant($constname);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ croak "Your vendor has not defined Win32::PerfLib macro $constname";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::PerfLib $VERSION;
+
+# Preloaded methods go here.
+
+sub new
+{
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $comp = shift;
+ my $handle;
+ my $self = {};
+ if(PerfLibOpen($comp,$handle))
+ {
+ $self->{handle} = $handle;
+ bless $self, $class;
+ return $self;
+ }
+ else
+ {
+ return undef;
+ }
+
+}
+
+sub Close
+{
+ my $self = shift;
+ return PerfLibClose($self->{handle});
+}
+
+sub DESTROY
+{
+ my $self = shift;
+ if(!PerfLibClose($self->{handle}))
+ {
+ croak "Error closing handle!\n";
+ }
+}
+
+sub GetCounterNames
+{
+ my($machine,$href) = @_;
+ if(ref $href ne "HASH")
+ {
+ croak("usage: Win32::PerfLib::GetCounterNames(machine,hashRef)\n");
+ }
+ my($data,@data,$num,$name);
+ my $retval = PerfLibGetNames($machine,$data);
+ if($retval)
+ {
+ @data = split(/\0/, $data);
+ while(@data)
+ {
+ $num = shift @data;
+ $name = shift @data;
+ $href->{$num} = $name;
+ }
+ }
+ $retval;
+}
+
+sub GetCounterHelp
+{
+ my($machine,$href) = @_;
+ if(ref $href ne "HASH")
+ {
+ croak("usage: Win32::PerfLib::GetCounterHelp(machine,hashRef)\n");
+ }
+ my($data,@data,$num,$name);
+ my $retval = PerfLibGetHelp($machine,$data);
+ if($retval)
+ {
+ @data = split(/\0/, $data);
+ while(@data)
+ {
+ $num = shift @data;
+ $name = shift @data;
+ $href->{$num} = $name;
+ }
+ }
+ $retval;
+}
+
+sub GetObjectList
+{
+ my $self = shift;
+ my $object = shift;
+ my $data = shift;
+ if(ref $data ne "HASH")
+ {
+ croak("reference isn't a hash reference!\n");
+ }
+ return PerfLibGetObjects($self->{handle}, $object, $data);
+}
+
+sub GetCounterType
+{
+ my $type = shift;
+ my $retval;
+ if( &Win32::PerfLib::PERF_100NSEC_MULTI_TIMER == $type )
+ {
+ $retval = "PERF_100NSEC_MULTI_TIMER";
+ }
+ elsif( &Win32::PerfLib::PERF_100NSEC_MULTI_TIMER_INV == $type )
+ {
+ $retval = "PERF_100NSEC_MULTI_TIMER_INV";
+ }
+ elsif( &Win32::PerfLib::PERF_100NSEC_TIMER == $type )
+ {
+ $retval = "PERF_100NSEC_TIMER";
+ }
+ elsif( &Win32::PerfLib::PERF_100NSEC_TIMER_INV == $type )
+ {
+ $retval = "PERF_100NSEC_TIMER_INV";
+ }
+ elsif( &Win32::PerfLib::PERF_AVERAGE_BASE == $type )
+ {
+ $retval = "PERF_AVERAGE_BASE";
+ }
+ elsif( &Win32::PerfLib::PERF_AVERAGE_BULK == $type )
+ {
+ $retval = "PERF_AVERAGE_BULK";
+ }
+ elsif( &Win32::PerfLib::PERF_AVERAGE_TIMER == $type )
+ {
+ $retval = "PERF_AVERAGE_TIMER";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_BULK_COUNT == $type )
+ {
+ $retval = "PERF_COUNTER_BULK_COUNT";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_COUNTER == $type )
+ {
+ $retval = "PERF_COUNTER_COUNTER";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_DELTA == $type )
+ {
+ $retval = "PERF_COUNTER_DELTA";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_LARGE_DELTA == $type )
+ {
+ $retval = "PERF_COUNTER_LARGE_DELTA";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_LARGE_QUEUELEN_TYPE == $type )
+ {
+ $retval = "PERF_COUNTER_LARGE_QUEUELEN_TYPE";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_LARGE_RAWCOUNT == $type )
+ {
+ $retval = "PERF_COUNTER_LARGE_RAWCOUNT";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_LARGE_RAWCOUNT_HEX == $type )
+ {
+ $retval = "PERF_COUNTER_LARGE_RAWCOUNT_HEX";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_MULTI_BASE == $type )
+ {
+ $retval = "PERF_COUNTER_MULTI_BASE";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_MULTI_TIMER == $type )
+ {
+ $retval = "PERF_COUNTER_MULTI_TIMER";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_MULTI_TIMER_INV == $type )
+ {
+ $retval = "PERF_COUNTER_MULTI_TIMER_INV";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_NODATA == $type )
+ {
+ $retval = "PERF_COUNTER_NODATA";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_QUEUELEN_TYPE == $type )
+ {
+ $retval = "PERF_COUNTER_QUEUELEN_TYPE";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_RAWCOUNT == $type )
+ {
+ $retval = "PERF_COUNTER_RAWCOUNT";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_RAWCOUNT_HEX == $type )
+ {
+ $retval = "PERF_COUNTER_RAWCOUNT_HEX";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_TEXT == $type )
+ {
+ $retval = "PERF_COUNTER_TEXT";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_TIMER == $type )
+ {
+ $retval = "PERF_COUNTER_TIMER";
+ }
+ elsif( &Win32::PerfLib::PERF_COUNTER_TIMER_INV == $type )
+ {
+ $retval = "PERF_COUNTER_TIMER_INV";
+ }
+ elsif( &Win32::PerfLib::PERF_ELAPSED_TIME == $type )
+ {
+ $retval = "PERF_ELAPSED_TIME";
+ }
+ elsif( &Win32::PerfLib::PERF_RAW_BASE == $type )
+ {
+ $retval = "PERF_RAW_BASE";
+ }
+ elsif( &Win32::PerfLib::PERF_RAW_FRACTION == $type )
+ {
+ $retval = "PERF_RAW_FRACTION";
+ }
+ elsif( &Win32::PerfLib::PERF_SAMPLE_BASE == $type )
+ {
+ $retval = "PERF_SAMPLE_BASE";
+ }
+ elsif( &Win32::PerfLib::PERF_SAMPLE_COUNTER == $type )
+ {
+ $retval = "PERF_SAMPLE_COUNTER";
+ }
+ elsif( &Win32::PerfLib::PERF_SAMPLE_FRACTION == $type )
+ {
+ $retval = "PERF_SAMPLE_FRACTION";
+ }
+ $retval;
+}
+
+
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::PerfLib - accessing the Windows NT Performance Counter
+
+=head1 SYNOPSIS
+
+ use Win32::PerfLib;
+ my $server = "";
+ Win32::PerfLib::GetCounterNames($server, \%counter);
+ %r_counter = map { $counter{$_} => $_ } keys %counter;
+ # retrieve the id for process object
+ $process_obj = $r_counter{Process};
+ # retrieve the id for the process ID counter
+ $process_id = $r_counter{'ID Process'};
+
+ # create connection to $server
+ $perflib = new Win32::PerfLib($server);
+ $proc_ref = {};
+ # get the performance data for the process object
+ $perflib->GetObjectList($process_obj, $proc_ref);
+ $perflib->Close();
+ $instance_ref = $proc_ref->{Objects}->{$process_obj}->{Instances};
+ foreach $p (sort keys %{$instance_ref})
+ {
+ $counter_ref = $instance_ref->{$p}->{Counters};
+ foreach $i (keys %{$counter_ref})
+ {
+ if($counter_ref->{$i}->{CounterNameTitleIndex} == $process_id)
+ {
+ printf( "% 6d %s\n", $counter_ref->{$i}->{Counter},
+ $instance_ref->{$p}->{Name}
+ );
+ }
+ }
+ }
+
+=head1 DESCRIPTION
+
+This module allows to retrieve the performance counter of any computer
+(running Windows NT) in the network.
+
+=head1 FUNCTIONS
+
+=head2 NOTE
+
+All of the functions return false if they fail, unless otherwise noted.
+If the $server argument is undef the local machine is assumed.
+
+=over 10
+
+=item Win32::PerfLib::GetCounterNames($server,$hashref)
+
+Retrieves the counter names and their indices from the registry and stores them
+in the hash reference
+
+=item Win32::PerfLib::GetCounterHelp($server,$hashref)
+
+Retrieves the counter help strings and their indices from the registry and
+stores them in the hash reference
+
+=item $perflib = Win32::PerfLib->new ($server)
+
+Creates a connection to the performance counters of the given server
+
+=item $perflib->GetObjectList($objectid,$hashref)
+
+retrieves the object and counter list of the given performance object.
+
+=item $perflib->Close($hashref)
+
+closes the connection to the performance counters
+
+=item Win32::PerfLib::GetCounterType(countertype)
+
+converts the counter type to readable string as referenced in L<calc.html> so
+that it is easier to find the appropriate formula to calculate the raw counter
+data.
+
+=back
+
+=head1 Datastructures
+
+The performance data is returned in the following data structure:
+
+=over 10
+
+=item Level 1
+
+ $hashref = {
+ 'NumObjectTypes' => VALUE
+ 'Objects' => HASHREF
+ 'PerfFreq' => VALUE
+ 'PerfTime' => VALUE
+ 'PerfTime100nSec' => VALUE
+ 'SystemName' => STRING
+ 'SystemTime' => VALUE
+ }
+
+=item Level 2
+
+The hash reference $hashref->{Objects} has the returned object ID(s) as keys and
+a hash reference to the object counter data as value. Even there is only one
+object requested in the call to GetObjectList there may be more than one object
+in the result.
+
+ $hashref->{Objects} = {
+ <object1> => HASHREF
+ <object2> => HASHREF
+ ...
+ }
+
+=item Level 3
+
+Each returned object ID has object-specific performance information. If an
+object has instances like the process object there is also a reference to
+the instance information.
+
+ $hashref->{Objects}->{<object1>} = {
+ 'DetailLevel' => VALUE
+ 'Instances' => HASHREF
+ 'Counters' => HASHREF
+ 'NumCounters' => VALUE
+ 'NumInstances' => VALUE
+ 'ObjectHelpTitleIndex' => VALUE
+ 'ObjectNameTitleIndex' => VALUE
+ 'PerfFreq' => VALUE
+ 'PerfTime' => VALUE
+ }
+
+=item Level 4
+
+If there are instance information for the object available they are stored in
+the 'Instances' hashref. If the object has no instances there is an 'Counters'
+key instead. The instances or counters are numbered.
+
+ $hashref->{Objects}->{<object1>}->{Instances} = {
+ <1> => HASHREF
+ <2> => HASHREF
+ ...
+ <n> => HASHREF
+ }
+ or
+ $hashref->{Objects}->{<object1>}->{Counters} = {
+ <1> => HASHREF
+ <2> => HASHREF
+ ...
+ <n> => HASHREF
+ }
+
+=item Level 5
+
+ $hashref->{Objects}->{<object1>}->{Instances}->{<1>} = {
+ Counters => HASHREF
+ Name => STRING
+ ParentObjectInstance => VALUE
+ ParentObjectTitleIndex => VALUE
+ }
+ or
+ $hashref->{Objects}->{<object1>}->{Counters}->{<1>} = {
+ Counter => VALUE
+ CounterHelpTitleIndex => VALUE
+ CounterNameTitleIndex => VALUE
+ CounterSize => VALUE
+ CounterType => VALUE
+ DefaultScale => VALUE
+ DetailLevel => VALUE
+ Display => STRING
+ }
+
+=item Level 6
+
+ $hashref->{Objects}->{<object1>}->{Instances}->{<1>}->{Counters} = {
+ <1> => HASHREF
+ <2> => HASHREF
+ ...
+ <n> => HASHREF
+ }
+
+=item Level 7
+
+ $hashref->{Objects}->{<object1>}->{Instances}->{<1>}->{Counters}->{<1>} = {
+ Counter => VALUE
+ CounterHelpTitleIndex => VALUE
+ CounterNameTitleIndex => VALUE
+ CounterSize => VALUE
+ CounterType => VALUE
+ DefaultScale => VALUE
+ DetailLevel => VALUE
+ Display => STRING
+ }
+
+Depending on the B<CounterType> there are calculations to do (see calc.html).
+
+=back
+
+=head1 AUTHOR
+
+Jutta M. Klebe, jmk@bybyte.de
+
+=head1 SEE ALSO
+
+perl(1).
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/Pipe.pm b/Master/tlpkg/tlperl/lib/Win32/Pipe.pm
new file mode 100644
index 00000000000..a99d5a0da08
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Pipe.pm
@@ -0,0 +1,414 @@
+package Win32::Pipe;
+
+$VERSION = '0.022';
+
+# Win32::Pipe.pm
+# +==========================================================+
+# | |
+# | PIPE.PM package |
+# | --------------- |
+# | Release v96.05.11 |
+# | |
+# | Copyright (c) 1996 Dave Roth. All rights reserved. |
+# | This program is free software; you can redistribute |
+# | it and/or modify it under the same terms as Perl itself. |
+# | |
+# +==========================================================+
+#
+#
+# Use under GNU General Public License or Larry Wall's "Artistic License"
+#
+# Check the README.TXT file that comes with this package for details about
+# it's history.
+#
+
+require Exporter;
+require DynaLoader;
+
+@ISA= qw( Exporter DynaLoader );
+ # Items to export into callers namespace by default. Note: do not export
+ # names by default without a very good reason. Use EXPORT_OK instead.
+ # Do not simply export all your public functions/methods/constants.
+@EXPORT = qw();
+
+$ErrorNum = 0;
+$ErrorText = "";
+
+sub new
+{
+ my ($self, $Pipe);
+ my ($Type, $Name, $Time) = @_;
+
+ if (! $Time){
+ $Time = DEFAULT_WAIT_TIME();
+ }
+ $Pipe = PipeCreate($Name, $Time);
+ if ($Pipe){
+ $self = bless {};
+ $self->{'Pipe'} = $Pipe;
+ }else{
+ ($ErrorNum, $ErrorText) = PipeError();
+ return undef;
+ }
+ $self;
+}
+
+sub Write{
+ my($self, $Data) = @_;
+ $Data = PipeWrite($self->{'Pipe'}, $Data);
+ return $Data;
+}
+
+sub Read{
+ my($self) = @_;
+ my($Data);
+ $Data = PipeRead($self->{'Pipe'});
+ return $Data;
+}
+
+sub Error{
+ my($self) = @_;
+ my($MyError, $MyErrorText, $Temp);
+ if (! ref($self)){
+ undef $Temp;
+ }else{
+ $Temp = $self->{'Pipe'};
+ }
+ ($MyError, $MyErrorText) = PipeError($Temp);
+ return wantarray? ($MyError, $MyErrorText):"[$MyError] \"$MyErrorText\"";
+}
+
+
+sub Close{
+ my ($self) = shift;
+ PipeClose($self->{'Pipe'});
+ $self->{'Pipe'} = 0;
+}
+
+sub Connect{
+ my ($self) = @_;
+ my ($Result);
+ $Result = PipeConnect($self->{'Pipe'});
+ return $Result;
+}
+
+sub Disconnect{
+ my ($self, $iPurge) = @_;
+ my ($Result);
+ if (! $iPurge){
+ $iPurge = 1;
+ }
+ $Result = PipeDisconnect($self->{'Pipe'}, $iPurge);
+ return $Result;
+}
+
+sub BufferSize{
+ my($self) = @_;
+ my($Result) = PipeBufferSize($self->{'Pipe'});
+ return $Result;
+}
+
+sub ResizeBuffer{
+ my($self, $Size) = @_;
+ my($Result) = PipeResizeBuffer($self->{'Pipe'}, $Size);
+ return $Result;
+}
+
+
+####
+# Auto-Kill an instance of this module
+####
+sub DESTROY
+{
+ my ($self) = shift;
+ Close($self);
+}
+
+
+sub Credit{
+ my($Name, $Version, $Date, $Author, $CompileDate, $CompileTime, $Credits) = Win32::Pipe::Info();
+ my($Out, $iWidth);
+ $iWidth = 60;
+ $Out .= "\n";
+ $Out .= " +". "=" x ($iWidth). "+\n";
+ $Out .= " |". Center("", $iWidth). "|\n";
+ $Out .= " |" . Center("", $iWidth). "|\n";
+ $Out .= " |". Center("$Name", $iWidth). "|\n";
+ $Out .= " |". Center("-" x length("$Name"), $iWidth). "|\n";
+ $Out .= " |". Center("", $iWidth). "|\n";
+
+ $Out .= " |". Center("Version $Version ($Date)", $iWidth). "|\n";
+ $Out .= " |". Center("by $Author", $iWidth). "|\n";
+ $Out .= " |". Center("Compiled on $CompileDate at $CompileTime.", $iWidth). "|\n";
+ $Out .= " |". Center("", $iWidth). "|\n";
+ $Out .= " |". Center("Credits:", $iWidth). "|\n";
+ $Out .= " |". Center(("-" x length("Credits:")), $iWidth). "|\n";
+ foreach $Temp (split("\n", $Credits)){
+ $Out .= " |". Center("$Temp", $iWidth). "|\n";
+ }
+ $Out .= " |". Center("", $iWidth). "|\n";
+ $Out .= " +". "=" x ($iWidth). "+\n";
+ return $Out;
+}
+
+sub Center{
+ local($Temp, $Width) = @_;
+ local($Len) = ($Width - length($Temp)) / 2;
+ return " " x int($Len) . $Temp . " " x (int($Len) + (($Len != int($Len))? 1:0));
+}
+
+# ------------------ A U T O L O A D F U N C T I O N ---------------------
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ $val = constant($constname, @_ ? $_[0] : 0);
+
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+
+ # Added by JOC 06-APR-96
+ # $pack = 0;
+ $pack = 0;
+ ($pack,$file,$line) = caller;
+ print "Your vendor has not defined Win32::Pipe macro $constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::Pipe;
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Pipe - Win32 Named Pipe
+
+=head1 SYNOPSIS
+
+To use this extension, follow these basic steps. First, you need to
+'use' the pipe extension:
+
+ use Win32::Pipe;
+
+Then you need to create a server side of a named pipe:
+
+ $Pipe = new Win32::Pipe("My Pipe Name");
+
+or if you are going to connect to pipe that has already been created:
+
+ $Pipe = new Win32::Pipe("\\\\server\\pipe\\My Pipe Name");
+
+ NOTE: The "\\\\server\\pipe\\" is necessary when connecting
+ to an existing pipe! If you are accessing the same
+ machine you could use "\\\\.\\pipe\\" but either way
+ works fine.
+
+You should check to see if C<$Pipe> is indeed defined otherwise there
+has been an error.
+
+Whichever end is the server, it must now wait for a connection...
+
+ $Result = $Pipe->Connect();
+
+ NOTE: The client end does not do this! When the client creates
+ the pipe it has already connected!
+
+Now you can read and write data from either end of the pipe:
+
+ $Data = $Pipe->Read();
+
+ $Result = $Pipe->Write("Howdy! This is cool!");
+
+When the server is finished it must disconnect:
+
+ $Pipe->Disconnect();
+
+Now the server could C<Connect> again (and wait for another client) or
+it could destroy the named pipe...
+
+ $Data->Close();
+
+The client should C<Close> in order to properly end the session.
+
+=head1 DESCRIPTION
+
+=head2 General Use
+
+This extension gives Win32 Perl the ability to use Named Pipes. Why?
+Well considering that Win32 Perl does not (yet) have the ability to
+C<fork> I could not see what good the C<pipe(X,Y)> was. Besides, where
+I am as an admin I must have several perl daemons running on several
+NT Servers. It dawned on me one day that if I could pipe all these
+daemons' output to my workstation (across the net) then it would be
+much easier to monitor. This was the impetus for an extension using
+Named Pipes. I think that it is kinda cool. :)
+
+=head2 Benefits
+
+And what are the benefits of this module?
+
+=over
+
+=item *
+
+You may create as many named pipes as you want (uh, well, as many as
+your resources will allow).
+
+=item *
+
+Currently there is a limit of 256 instances of a named pipe (once a
+pipe is created you can have 256 client/server connections to that
+name).
+
+=item *
+
+The default buffer size is 512 bytes; this can be altered by the
+C<ResizeBuffer> method.
+
+=item *
+
+All named pipes are byte streams. There is currently no way to alter a
+pipe to be message based.
+
+=item *
+
+Other things that I cannot think of right now... :)
+
+=back
+
+=head1 CONSTRUCTOR
+
+=over
+
+=item new ( NAME )
+
+Creates a named pipe if used in server context or a connection to the
+specified named pipe if used in client context. Client context is
+determined by prepending $Name with "\\\\".
+
+Returns I<true> on success, I<false> on failure.
+
+=back
+
+=head1 METHODS
+
+=over
+
+=item BufferSize ()
+
+Returns the size of the instance of the buffer of the named pipe.
+
+=item Connect ()
+
+Tells the named pipe to create an instance of the named pipe and wait
+until a client connects. Returns I<true> on success, I<false> on
+failure.
+
+=item Close ()
+
+Closes the named pipe.
+
+=item Disconnect ()
+
+Disconnects (and destroys) the instance of the named pipe from the
+client. Returns I<true> on success, I<false> on failure.
+
+=item Error ()
+
+Returns the last error messages pertaining to the named pipe. If used
+in context to the package. Returns a list containing C<ERROR_NUMBER>
+and C<ERROR_TEXT>.
+
+=item Read ()
+
+Reads from the named pipe. Returns data read from the pipe on success,
+undef on failure.
+
+=item ResizeBuffer ( SIZE )
+
+Sets the size of the buffer of the instance of the named pipe to
+C<SIZE>. Returns the size of the buffer on success, I<false> on
+failure.
+
+=item Write ( DATA )
+
+Writes C<DATA> to the named pipe. Returns I<true> on success, I<false>
+on failure.
+
+=back
+
+=head1 LIMITATIONS
+
+What known problems does this thing have?
+
+=over
+
+=item *
+
+If someone is waiting on a C<Read> and the other end terminates then
+you will wait for one B<REALLY> long time! (If anyone has an idea on
+how I can detect the termination of the other end let me know!)
+
+=item *
+
+All pipes are blocking. I am considering using threads and callbacks
+into Perl to perform async IO but this may be too much for my time
+stress. ;)
+
+=item *
+
+There is no security placed on these pipes.
+
+=item *
+
+This module has neither been optimized for speed nor optimized for
+memory consumption. This may run into memory bloat.
+
+=back
+
+=head1 INSTALLATION NOTES
+
+If you wish to use this module with a build of Perl other than
+ActivePerl, you may wish to fetch the source distribution for this
+module. The source is included as part of the C<libwin32> bundle,
+which you can find in any CPAN mirror here:
+
+ modules/by-authors/Gurusamy_Sarathy/libwin32-0.151.tar.gz
+
+The source distribution also contains a pair of sample client/server
+test scripts. For the latest information on this module, consult the
+following web site:
+
+ http://www.roth.net/perl
+
+=head1 AUTHOR
+
+Dave Roth <rothd@roth.net>
+
+=head1 DISCLAIMER
+
+I do not guarantee B<ANYTHING> with this package. If you use it you
+are doing so B<AT YOUR OWN RISK>! I may or may not support this
+depending on my time schedule.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996 Dave Roth. All rights reserved.
+This program is free software; you can redistribute
+it and/or modify it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/Process.pm b/Master/tlpkg/tlperl/lib/Win32/Process.pm
new file mode 100644
index 00000000000..f07169b4080
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Process.pm
@@ -0,0 +1,217 @@
+package Win32::Process;
+
+require Exporter;
+require DynaLoader;
+@ISA = qw(Exporter DynaLoader);
+
+$VERSION = '0.10';
+
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ CREATE_DEFAULT_ERROR_MODE
+ CREATE_NEW_CONSOLE
+ CREATE_NEW_PROCESS_GROUP
+ CREATE_NO_WINDOW
+ CREATE_SEPARATE_WOW_VDM
+ CREATE_SUSPENDED
+ CREATE_UNICODE_ENVIRONMENT
+ DEBUG_ONLY_THIS_PROCESS
+ DEBUG_PROCESS
+ DETACHED_PROCESS
+ HIGH_PRIORITY_CLASS
+ IDLE_PRIORITY_CLASS
+ INFINITE
+ NORMAL_PRIORITY_CLASS
+ REALTIME_PRIORITY_CLASS
+ THREAD_PRIORITY_ABOVE_NORMAL
+ THREAD_PRIORITY_BELOW_NORMAL
+ THREAD_PRIORITY_ERROR_RETURN
+ THREAD_PRIORITY_HIGHEST
+ THREAD_PRIORITY_IDLE
+ THREAD_PRIORITY_LOWEST
+ THREAD_PRIORITY_NORMAL
+ THREAD_PRIORITY_TIME_CRITICAL
+);
+
+@EXPORT_OK = qw(
+ STILL_ACTIVE
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function.
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ local $! = 0;
+ my $val = constant($constname);
+ if ($! != 0) {
+ my ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::Process macro $constname, used at $file line $line.";
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+} # end AUTOLOAD
+
+bootstrap Win32::Process;
+
+# Win32::IPC > 1.02 uses the get_Win32_IPC_HANDLE method:
+*get_Win32_IPC_HANDLE = \&get_process_handle;
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Process - Create and manipulate processes.
+
+=head1 SYNOPSIS
+
+ use Win32::Process;
+ use Win32;
+
+ sub ErrorReport{
+ print Win32::FormatMessage( Win32::GetLastError() );
+ }
+
+ Win32::Process::Create($ProcessObj,
+ "C:\\winnt\\system32\\notepad.exe",
+ "notepad temp.txt",
+ 0,
+ NORMAL_PRIORITY_CLASS,
+ ".")|| die ErrorReport();
+
+ $ProcessObj->Suspend();
+ $ProcessObj->Resume();
+ $ProcessObj->Wait(INFINITE);
+
+=head1 DESCRIPTION
+
+This module provides access to the process control functions in the
+Win32 API.
+
+=head1 METHODS
+
+=over 8
+
+=item Win32::Process::Create($obj,$appname,$cmdline,$iflags,$cflags,$curdir)
+
+Creates a new process.
+
+ Args:
+
+ $obj container for process object
+ $appname full path name of executable module
+ $cmdline command line args
+ $iflags flag: inherit calling processes handles or not
+ $cflags flags for creation (see exported vars below)
+ $curdir working dir of new process
+
+Returns non-zero on success, 0 on failure.
+
+=item Win32::Process::Open($obj,$pid,$iflags)
+
+Creates a handle Perl can use to an existing process as identified by $pid.
+The $iflags is the inherit flag that is passed to OpenProcess. Currently
+Win32::Process objects created using Win32::Process::Open cannot Suspend
+or Resume the process. All other calls should work.
+
+Win32::Process::Open returns non-zero on success, 0 on failure.
+
+=item Win32::Process::KillProcess($pid, $exitcode)
+
+Terminates any process identified by $pid. $exitcode will be set to
+the exit code of the process.
+
+=item $ProcessObj->Suspend()
+
+Suspend the process associated with the $ProcessObj.
+
+=item $ProcessObj->Resume()
+
+Resume a suspended process.
+
+=item $ProcessObj->Kill($exitcode)
+
+Kill the associated process, have it terminate with exit code $ExitCode.
+
+=item $ProcessObj->GetPriorityClass($class)
+
+Get the priority class of the process.
+
+=item $ProcessObj->SetPriorityClass($class)
+
+Set the priority class of the process (see exported values below for
+options).
+
+=item $ProcessObj->GetProcessAffinityMask($processAffinityMask, $systemAffinityMask)
+
+Get the process affinity mask. This is a bitvector in which each bit
+represents the processors that a process is allowed to run on.
+
+=item $ProcessObj->SetProcessAffinityMask($processAffinityMask)
+
+Set the process affinity mask. Only available on Windows NT.
+
+=item $ProcessObj->GetExitCode($exitcode)
+
+Retrieve the exitcode of the process. Will return STILL_ACTIVE if the
+process is still running. The STILL_ACTIVE constant is only exported
+by explicit request.
+
+=item $ProcessObj->Wait($timeout)
+
+Wait for the process to die. $timeout should be specified in milliseconds.
+To wait forever, specify the constant C<INFINITE>.
+
+=item $ProcessObj->GetProcessID()
+
+Returns the Process ID.
+
+=item Win32::Process::GetCurrentProcessID()
+
+Returns the current process ID, which is the same as $$. But not on cygwin,
+where $$ is the cygwin-internal PID and not the windows PID.
+On cygwin GetCurrentProcessID() returns the windows PID as needed for all
+the Win32::Process functions.
+
+=back
+
+=head1 EXPORTS
+
+The following constants are exported by default:
+
+ CREATE_DEFAULT_ERROR_MODE
+ CREATE_NEW_CONSOLE
+ CREATE_NEW_PROCESS_GROUP
+ CREATE_NO_WINDOW
+ CREATE_SEPARATE_WOW_VDM
+ CREATE_SUSPENDED
+ CREATE_UNICODE_ENVIRONMENT
+ DEBUG_ONLY_THIS_PROCESS
+ DEBUG_PROCESS
+ DETACHED_PROCESS
+ HIGH_PRIORITY_CLASS
+ IDLE_PRIORITY_CLASS
+ INFINITE
+ NORMAL_PRIORITY_CLASS
+ REALTIME_PRIORITY_CLASS
+ THREAD_PRIORITY_ABOVE_NORMAL
+ THREAD_PRIORITY_BELOW_NORMAL
+ THREAD_PRIORITY_ERROR_RETURN
+ THREAD_PRIORITY_HIGHEST
+ THREAD_PRIORITY_IDLE
+ THREAD_PRIORITY_LOWEST
+ THREAD_PRIORITY_NORMAL
+ THREAD_PRIORITY_TIME_CRITICAL
+
+The following additional constants are exported by request only:
+
+ STILL_ACTIVE
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::Process"
+# End:
diff --git a/Master/tlpkg/tlperl/lib/Win32/Registry.pm b/Master/tlpkg/tlperl/lib/Win32/Registry.pm
new file mode 100644
index 00000000000..c83fca5a3b1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Registry.pm
@@ -0,0 +1,547 @@
+package Win32::Registry;
+
+=head1 NAME
+
+Win32::Registry - accessing the Windows registry [obsolete, use Win32::TieRegistry]
+
+=head1 SYNOPSIS
+
+ use Win32::Registry;
+ my $tips;
+ $::HKEY_LOCAL_MACHINE->Open("SOFTWARE\\Microsoft\\Windows"
+ ."\\CurrentVersion\\Explorer\\Tips", $tips)
+ or die "Can't open tips: $^E";
+ my ($type, $value);
+ $tips->QueryValueEx("18", $type, $value) or die "No tip #18: $^E";
+ print "Here's a tip: $value\n";
+
+=head1 DESCRIPTION
+
+ NOTE: This module provides a very klunky interface to access the
+ Windows registry, and is not currently being developed actively. It
+ only exists for backward compatibility with old code that uses it.
+ For more powerful and flexible ways to access the registry, use
+ Win32::TieRegistry.
+
+Win32::Registry provides an object oriented interface to the Windows
+Registry.
+
+The following "root" registry objects are exported to the main:: name
+space. Additional keys must be opened by calling the provided methods
+on one of these.
+
+ $HKEY_CLASSES_ROOT
+ $HKEY_CURRENT_USER
+ $HKEY_LOCAL_MACHINE
+ $HKEY_USERS
+ $HKEY_PERFORMANCE_DATA
+ $HKEY_CURRENT_CONFIG
+ $HKEY_DYN_DATA
+
+=cut
+
+use strict;
+require Exporter;
+require DynaLoader;
+use Win32::WinError;
+
+require Win32 unless defined &Win32::GetLastError;
+
+use vars qw($VERSION $AUTOLOAD @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+$VERSION = '0.07';
+
+@ISA = qw( Exporter DynaLoader );
+@EXPORT = qw(
+ HKEY_CLASSES_ROOT
+ HKEY_CURRENT_USER
+ HKEY_LOCAL_MACHINE
+ HKEY_PERFORMANCE_DATA
+ HKEY_CURRENT_CONFIG
+ HKEY_DYN_DATA
+ HKEY_USERS
+ KEY_ALL_ACCESS
+ KEY_CREATE_LINK
+ KEY_CREATE_SUB_KEY
+ KEY_ENUMERATE_SUB_KEYS
+ KEY_EXECUTE
+ KEY_NOTIFY
+ KEY_QUERY_VALUE
+ KEY_READ
+ KEY_SET_VALUE
+ KEY_WRITE
+ REG_BINARY
+ REG_CREATED_NEW_KEY
+ REG_DWORD
+ REG_DWORD_BIG_ENDIAN
+ REG_DWORD_LITTLE_ENDIAN
+ REG_EXPAND_SZ
+ REG_FULL_RESOURCE_DESCRIPTOR
+ REG_LEGAL_CHANGE_FILTER
+ REG_LEGAL_OPTION
+ REG_LINK
+ REG_MULTI_SZ
+ REG_NONE
+ REG_NOTIFY_CHANGE_ATTRIBUTES
+ REG_NOTIFY_CHANGE_LAST_SET
+ REG_NOTIFY_CHANGE_NAME
+ REG_NOTIFY_CHANGE_SECURITY
+ REG_OPENED_EXISTING_KEY
+ REG_OPTION_BACKUP_RESTORE
+ REG_OPTION_CREATE_LINK
+ REG_OPTION_NON_VOLATILE
+ REG_OPTION_RESERVED
+ REG_OPTION_VOLATILE
+ REG_REFRESH_HIVE
+ REG_RESOURCE_LIST
+ REG_RESOURCE_REQUIREMENTS_LIST
+ REG_SZ
+ REG_WHOLE_HIVE_VOLATILE
+);
+
+@EXPORT_OK = qw(
+ RegCloseKey
+ RegConnectRegistry
+ RegCreateKey
+ RegCreateKeyEx
+ RegDeleteKey
+ RegDeleteValue
+ RegEnumKey
+ RegEnumValue
+ RegFlushKey
+ RegGetKeySecurity
+ RegLoadKey
+ RegNotifyChangeKeyValue
+ RegOpenKey
+ RegOpenKeyEx
+ RegQueryInfoKey
+ RegQueryValue
+ RegQueryValueEx
+ RegReplaceKey
+ RegRestoreKey
+ RegSaveKey
+ RegSetKeySecurity
+ RegSetValue
+ RegSetValueEx
+ RegUnLoadKey
+);
+$EXPORT_TAGS{ALL}= \@EXPORT_OK;
+
+bootstrap Win32::Registry;
+
+sub import {
+ my $pkg = shift;
+ if ($_[0] && "Win32" eq $_[0]) {
+ Exporter::export($pkg, "Win32", @EXPORT_OK);
+ shift;
+ }
+ Win32::Registry->export_to_level(1+$Exporter::ExportLevel, $pkg, @_);
+}
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ my ($pack,$file,$line) = caller;
+ die "Unknown constant $constname in Win32::Registry "
+ . "at $file line $line.\n";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+#######################################################################
+# _new is a private constructor, not intended for public use.
+#
+
+sub _new {
+ my $self;
+ if ($_[0]) {
+ $self->{'handle'} = $_[0];
+ bless $self;
+ }
+ $self;
+}
+
+#define the basic registry objects to be exported.
+#these had to be hardwired unfortunately.
+# XXX Yuck!
+
+{
+ package main;
+ use vars qw(
+ $HKEY_CLASSES_ROOT
+ $HKEY_CURRENT_USER
+ $HKEY_LOCAL_MACHINE
+ $HKEY_USERS
+ $HKEY_PERFORMANCE_DATA
+ $HKEY_CURRENT_CONFIG
+ $HKEY_DYN_DATA
+ );
+}
+
+$::HKEY_CLASSES_ROOT = _new(&HKEY_CLASSES_ROOT);
+$::HKEY_CURRENT_USER = _new(&HKEY_CURRENT_USER);
+$::HKEY_LOCAL_MACHINE = _new(&HKEY_LOCAL_MACHINE);
+$::HKEY_USERS = _new(&HKEY_USERS);
+$::HKEY_PERFORMANCE_DATA = _new(&HKEY_PERFORMANCE_DATA);
+$::HKEY_CURRENT_CONFIG = _new(&HKEY_CURRENT_CONFIG);
+$::HKEY_DYN_DATA = _new(&HKEY_DYN_DATA);
+
+=head2 Methods
+
+The following methods are supported. Note that subkeys can be
+specified as a path name, separated by backslashes (which may
+need to be doubled if you put them in double quotes).
+
+=over 8
+
+=item Open
+
+ $reg_obj->Open($sub_key_name, $sub_reg_obj);
+
+Opens a subkey of a registry object, returning the new registry object
+in $sub_reg_obj.
+
+=cut
+
+sub Open {
+ my $self = shift;
+ die 'usage: $obj->Open($sub_key_name, $sub_reg_obj)' if @_ != 2;
+
+ my ($subkey) = @_;
+ my ($result,$subhandle);
+
+ $result = RegOpenKey($self->{'handle'},$subkey,$subhandle);
+ $_[1] = _new($subhandle);
+
+ return 0 unless $_[1];
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item Close
+
+ $reg_obj->Close();
+
+Closes an open registry key.
+
+=cut
+
+sub Close {
+ my $self = shift;
+ die 'usage: $obj->Close()' if @_ != 0;
+
+ return unless exists $self->{'handle'};
+ my $result = RegCloseKey($self->{'handle'});
+ if ($result) {
+ delete $self->{'handle'};
+ }
+ else {
+ $! = Win32::GetLastError();
+ }
+ return $result;
+}
+
+sub DESTROY {
+ my $self = shift;
+ return unless exists $self->{'handle'};
+ RegCloseKey($self->{'handle'});
+ delete $self->{'handle'};
+}
+
+
+=item Connect
+
+ $reg_obj->Connect($node_name, $new_reg_obj);
+
+Connects to a remote Registry on the node specified by $node_name,
+returning it in $new_reg_obj. Returns false if it fails.
+
+=cut
+
+sub Connect {
+ my $self = shift;
+ die 'usage: $obj->Connect($node_name, $new_reg_obj)' if @_ != 2;
+
+ my ($node) = @_;
+ my ($result,$subhandle);
+
+ $result = RegConnectRegistry ($node, $self->{'handle'}, $subhandle);
+ $_[1] = _new($subhandle);
+
+ return 0 unless $_[1];
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item Create
+
+ $reg_obj->Create($sub_key_name, $new_reg_obj);
+
+Opens the subkey specified by $sub_key_name, returning the new registry
+object in $new_reg_obj. If the specified subkey doesn't exist, it is
+created.
+
+=cut
+
+sub Create {
+ my $self = shift;
+ die 'usage: $obj->Create($sub_key_name, $new_reg_obj)' if @_ != 2;
+
+ my ($subkey) = @_;
+ my ($result,$subhandle);
+
+ $result = RegCreateKey($self->{'handle'},$subkey,$subhandle);
+ $_[1] = _new ($subhandle);
+
+ return 0 unless $_[1];
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item SetValue
+
+ $reg_obj->SetValue($sub_key_name, $type, $value);
+
+Sets the default value for a subkey specified by $sub_key_name.
+
+=cut
+
+sub SetValue {
+ my $self = shift;
+ die 'usage: $obj->SetValue($subkey, $type, $value)' if @_ != 3;
+ my $result = RegSetValue($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item SetValueEx
+
+ $reg_obj->SetValueEx($value_name, $reserved, $type, $value);
+
+Sets the value for the value name identified by $value_name
+in the key specified by $reg_obj.
+
+=cut
+
+sub SetValueEx {
+ my $self = shift;
+ die 'usage: $obj->SetValueEx($value_name, $reserved, $type, $value)' if @_ != 4;
+ my $result = RegSetValueEx($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item QueryValue
+
+ $reg_obj->QueryValue($sub_key_name, $value);
+
+Gets the default value of the subkey specified by $sub_key_name.
+
+=cut
+
+sub QueryValue {
+ my $self = shift;
+ die 'usage: $obj->QueryValue($sub_key_name, $value)' if @_ != 2;
+ my $result = RegQueryValue($self->{'handle'}, $_[0], $_[1]);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item QueryKey
+
+ $reg_obj->QueryKey($classref, $number_of_subkeys, $number_of_values);
+
+Gets information on a key specified by $reg_obj.
+
+=cut
+
+sub QueryKey {
+ my $garbage;
+ my $self = shift;
+ die 'usage: $obj->QueryKey($classref, $number_of_subkeys, $number_of_values)'
+ if @_ != 3;
+
+ my $result = RegQueryInfoKey($self->{'handle'}, $_[0],
+ $garbage, $garbage, $_[1],
+ $garbage, $garbage, $_[2],
+ $garbage, $garbage, $garbage, $garbage);
+
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item QueryValueEx
+
+ $reg_obj->QueryValueEx($value_name, $type, $value);
+
+Gets the value for the value name identified by $value_name
+in the key specified by $reg_obj.
+
+=cut
+
+sub QueryValueEx {
+ my $self = shift;
+ die 'usage: $obj->QueryValueEx($value_name, $type, $value)' if @_ != 3;
+ my $result = RegQueryValueEx($self->{'handle'}, $_[0], undef, $_[1], $_[2]);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item GetKeys
+
+ my @keys;
+ $reg_obj->GetKeys(\@keys);
+
+Populates the supplied array reference with the names of all the keys
+within the registry object $reg_obj.
+
+=cut
+
+sub GetKeys {
+ my $self = shift;
+ die 'usage: $obj->GetKeys($arrayref)' if @_ != 1 or ref($_[0]) ne 'ARRAY';
+
+ my ($result, $i, $keyname);
+ $keyname = "DummyVal";
+ $i = 0;
+ $result = 1;
+
+ while ( $result ) {
+ $result = RegEnumKey( $self->{'handle'},$i++, $keyname );
+ if ($result) {
+ push( @{$_[0]}, $keyname );
+ }
+ }
+ return(1);
+}
+
+=item GetValues
+
+ my %values;
+ $reg_obj->GetValues(\%values);
+
+Populates the supplied hash reference with entries of the form
+
+ $value_name => [ $value_name, $type, $data ]
+
+for each value in the registry object $reg_obj.
+
+=cut
+
+sub GetValues {
+ my $self = shift;
+ die 'usage: $obj->GetValues($hashref)' if @_ != 1;
+
+ my ($result,$name,$type,$data,$i);
+ $name = "DummyVal";
+ $i = 0;
+ while ( $result=RegEnumValue( $self->{'handle'},
+ $i++,
+ $name,
+ undef,
+ $type,
+ $data ))
+ {
+ $_[0]->{$name} = [ $name, $type, $data ];
+ }
+ return(1);
+}
+
+=item DeleteKey
+
+ $reg_obj->DeleteKey($sub_key_name);
+
+Deletes a subkey specified by $sub_key_name from the registry.
+
+=cut
+
+sub DeleteKey {
+ my $self = shift;
+ die 'usage: $obj->DeleteKey($sub_key_name)' if @_ != 1;
+ my $result = RegDeleteKey($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item DeleteValue
+
+ $reg_obj->DeleteValue($value_name);
+
+Deletes a value identified by $value_name from the registry.
+
+=cut
+
+sub DeleteValue {
+ my $self = shift;
+ die 'usage: $obj->DeleteValue($value_name)' if @_ != 1;
+ my $result = RegDeleteValue($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item Save
+
+ $reg_obj->Save($filename);
+
+Saves the hive specified by $reg_obj to a file.
+
+=cut
+
+sub Save {
+ my $self = shift;
+ die 'usage: $obj->Save($filename)' if @_ != 1;
+ my $result = RegSaveKey($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item Load
+
+ $reg_obj->Load($sub_key_name, $file_name);
+
+Loads a key specified by $sub_key_name from a file.
+
+=cut
+
+sub Load {
+ my $self = shift;
+ die 'usage: $obj->Load($sub_key_name, $file_name)' if @_ != 2;
+ my $result = RegLoadKey($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+=item UnLoad
+
+ $reg_obj->Unload($sub_key_name);
+
+Unloads a registry hive.
+
+=cut
+
+sub UnLoad {
+ my $self = shift;
+ die 'usage: $obj->UnLoad($sub_key_name)' if @_ != 1;
+ my $result = RegUnLoadKey($self->{'handle'}, @_);
+ $! = Win32::GetLastError() unless $result;
+ return $result;
+}
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Win32/Semaphore.pm b/Master/tlpkg/tlperl/lib/Win32/Semaphore.pm
new file mode 100644
index 00000000000..2e2096eb6ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Semaphore.pm
@@ -0,0 +1,128 @@
+#---------------------------------------------------------------------
+package Win32::Semaphore;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Created: 3 Feb 1998 from the ActiveWare version
+# (c) 1995 Microsoft Corporation. All rights reserved.
+# Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+#
+# Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Version: 1.00 (6-Feb-1998)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Use Win32 semaphore objects for synchronization
+#---------------------------------------------------------------------
+
+$VERSION = '1.02';
+
+use Win32::IPC 1.00 '/./'; # Import everything
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader Win32::IPC);
+@EXPORT_OK = qw(
+ wait_all wait_any
+);
+
+bootstrap Win32::Semaphore;
+
+sub Create { $_[0] = new('Win32::Semaphore',@_[1..3]) }
+sub Open { $_[0] = Win32::Semaphore->open($_[1]) }
+sub Release { &release }
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Semaphore - Use Win32 semaphore objects from Perl
+
+=head1 SYNOPSIS
+ require Win32::Semaphore;
+
+ $sem = Win32::Semaphore->new($initial,$maximum,$name);
+ $sem->wait;
+
+=head1 DESCRIPTION
+
+This module allows access to Win32 semaphore objects. The C<wait>
+method and C<wait_all> & C<wait_any> functions are inherited from the
+L<"Win32::IPC"> module.
+
+=head2 Methods
+
+=over 4
+
+=item $semaphore = Win32::Semaphore->new($initial, $maximum, [$name])
+
+Constructor for a new semaphore object. C<$initial> is the initial
+count, and C<$maximum> is the maximum count for the semaphore. If
+C<$name> is omitted, creates an unnamed semaphore object.
+
+If C<$name> signifies an existing semaphore object, then C<$initial>
+and C<$maximum> are ignored and the object is opened. If this
+happens, C<$^E> will be set to 183 (ERROR_ALREADY_EXISTS).
+
+=item $semaphore = Win32::Semaphore->open($name)
+
+Constructor for opening an existing semaphore object.
+
+=item $semaphore->release([$increment, [$previous]])
+
+Increment the count of C<$semaphore> by C<$increment> (default 1).
+If C<$increment> plus the semaphore's current count is more than its
+maximum count, the count is not changed. Returns true if the
+increment is successful.
+
+The semaphore's count (before incrementing) is stored in the second
+argument (if any).
+
+It is not necessary to wait on a semaphore before calling C<release>,
+but you'd better know what you're doing.
+
+=item $semaphore->wait([$timeout])
+
+Wait for C<$semaphore>'s count to be nonzero, then decrement it by 1.
+See L<"Win32::IPC">.
+
+=back
+
+=head2 Deprecated Functions and Methods
+
+B<Win32::Semaphore> still supports the ActiveWare syntax, but its use
+is deprecated.
+
+=over 4
+
+=item Win32::Semaphore::Create($SemObject,$Initial,$Max,$Name)
+
+Use C<$SemObject = Win32::Semaphore-E<gt>new($Initial,$Max,$Name)> instead.
+
+=item Win32::Semaphore::Open($SemObject, $Name)
+
+Use C<$SemObject = Win32::Semaphore-E<gt>open($Name)> instead.
+
+=item $SemObj->Release($Count,$LastVal)
+
+Use C<$SemObj-E<gt>release($Count,$LastVal)> instead.
+
+=back
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+Loosely based on the original module by ActiveWare Internet Corp.,
+F<http://www.ActiveWare.com>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32/Server.pl b/Master/tlpkg/tlperl/lib/Win32/Server.pl
new file mode 100644
index 00000000000..ecfb91ba864
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Server.pl
@@ -0,0 +1,48 @@
+use strict;
+use Win32::Pipe;
+
+my $PipeName = "TEST this long named pipe!";
+my $NewSize = 2048;
+my $iMessage;
+
+while () {
+ print "Creating pipe \"$PipeName\".\n";
+ if (my $Pipe = new Win32::Pipe($PipeName)) {
+ my $PipeSize = $Pipe->BufferSize();
+ print "This pipe's current size is $PipeSize byte" . (($PipeSize == 1)? "":"s") . ".\nWe shall change it to $NewSize ...";
+ print +(($Pipe->ResizeBuffer($NewSize) == $NewSize)? "Successful":"Unsucessful") . "!\n\n";
+
+ print "\n\nR e a d y f o r r e a d i n g :\n";
+ print "-----------------------------------\n";
+
+ print "Openning the pipe...\n";
+ while ($Pipe->Connect()) {
+ while () {
+ ++$iMessage;
+ print "Reading Message #$iMessage: ";
+ my $In = $Pipe->Read();
+ unless ($In) {
+ print "Recieved no data, closing connection....\n";
+ last;
+ }
+ if ($In =~ /^quit/i){
+ print "\n\nQuitting this connection....\n";
+ last;
+ }
+ elsif ($In =~ /^exit/i){
+ print "\n\nExitting.....\n";
+ exit;
+ }
+ else{
+ print "\"$In\"\n";
+ }
+ }
+ print "Disconnecting...\n";
+ $Pipe->Disconnect();
+ }
+ print "Closing...\n";
+ $Pipe->Close();
+ }
+}
+
+print "You can't get here...\n";
diff --git a/Master/tlpkg/tlperl/lib/Win32/Service.pm b/Master/tlpkg/tlperl/lib/Win32/Service.pm
new file mode 100644
index 00000000000..0ae33b13ef8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Service.pm
@@ -0,0 +1,103 @@
+package Win32::Service;
+
+#
+# Service.pm
+# Written by Douglas_Lankshear@ActiveWare.com
+#
+# subsequently hacked by Gurusamy Sarathy <gsar@activestate.com>
+#
+
+$VERSION = '0.05';
+
+require Exporter;
+require DynaLoader;
+
+require Win32 unless defined &Win32::IsWinNT;
+die "The Win32::Service module works only on Windows NT" unless Win32::IsWinNT();
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT_OK =
+ qw(
+ StartService
+ StopService
+ GetStatus
+ PauseService
+ ResumeService
+ GetServices
+ );
+
+=head1 NAME
+
+Win32::Service - manage system services in perl
+
+=head1 SYNOPSIS
+
+ use Win32::Service;
+
+=head1 DESCRIPTION
+
+This module offers control over the administration of system services.
+
+=head1 FUNCTIONS
+
+=head2 NOTE:
+
+All of the functions return false if they fail, unless otherwise noted.
+If hostName is an empty string, the local machine is assumed.
+
+=over 10
+
+=item StartService(hostName, serviceName)
+
+Start the service serviceName on machine hostName.
+
+=item StopService(hostName, serviceName)
+
+Stop the service serviceName on the machine hostName.
+
+=item GetStatus(hostName, serviceName, status)
+
+Get the status of a service. The third argument must be a hash
+reference that will be populated with entries corresponding
+to the SERVICE_STATUS structure of the Win32 API. See the
+Win32 Platform SDK documentation for details of this structure.
+
+=item PauseService(hostName, serviceName)
+
+=item ResumeService(hostName, serviceName)
+
+=item GetServices(hostName, hashref)
+
+Enumerates both active and inactive Win32 services at the specified host.
+The hashref is populated with the descriptive service names as keys
+and the short names as the values.
+
+=back
+
+=cut
+
+sub AUTOLOAD
+{
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname);
+ if ($! != 0) {
+ if($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::Service macro $constname, used in $file at line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::Service;
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Win32/Shortcut.pm b/Master/tlpkg/tlperl/lib/Win32/Shortcut.pm
new file mode 100644
index 00000000000..d4dadafdcf2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Shortcut.pm
@@ -0,0 +1,323 @@
+package Win32::Shortcut;
+#######################################################################
+#
+# Win32::Shortcut - Perl Module for Shell Link Interface
+# ^^^^^^^^^^^^^^^
+# This module creates an object oriented interface to the Win32
+# Shell Links (IShellLink interface).
+#
+#######################################################################
+
+$VERSION = "0.04";
+
+require Exporter;
+require DynaLoader;
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT = qw(
+ SW_SHOWMAXIMIZED
+ SW_SHOWMINNOACTIVE
+ SW_SHOWNORMAL
+);
+
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+#
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $!;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($!) {
+ my(undef, $file, $line) = caller;
+ die "Win32::Shortcut::$constname is not defined, used at $file line $line.";
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+#######################################################################
+# PUBLIC METHODS
+#
+
+#========
+sub new {
+#========
+ my($class, $file) = @_;
+ my $self = {};
+ my $ilink = 0;
+ my $ifile = 0;
+
+ ($ilink, $ifile) = _Instance();
+
+ if($ilink and $ifile) {
+ $self->{'ilink'} = $ilink;
+ $self->{'ifile'} = $ifile;
+ bless $self;
+ # Initialize properties
+ $self->{'File'} = "";
+ $self->{'Path'} = "";
+ $self->{'Arguments'} = "";
+ $self->{'WorkingDirectory'} = "";
+ $self->{'Description'} = "";
+ $self->{'ShowCmd'} = 0;
+ $self->{'Hotkey'} = 0;
+ $self->{'IconLocation'} = "";
+ $self->{'IconNumber'} = 0;
+
+ $self->Load($file) if $file;
+
+ } else {
+ return undef;
+ }
+ $self;
+}
+
+#=========
+sub Load {
+#=========
+ my($self, $file) = @_;
+ return undef unless ref($self);
+
+ my $result = _Load($self->{'ilink'}, $self->{'ifile'}, $file);
+
+ if ($result) {
+
+ # fill the properties of $self
+ $self->{'File'} = $file;
+ $self->{'Path'} = _GetPath($self->{'ilink'}, $self->{'ifile'},0);
+ $self->{'ShortPath'} = _GetPath($self->{'ilink'}, $self->{'ifile'},1);
+ $self->{'Arguments'} = _GetArguments($self->{'ilink'}, $self->{'ifile'});
+ $self->{'WorkingDirectory'} = _GetWorkingDirectory($self->{'ilink'}, $self->{'ifile'});
+ $self->{'Description'} = _GetDescription($self->{'ilink'}, $self->{'ifile'});
+ $self->{'ShowCmd'} = _GetShowCmd($self->{'ilink'}, $self->{'ifile'});
+ $self->{'Hotkey'} = _GetHotkey($self->{'ilink'}, $self->{'ifile'});
+ ($self->{'IconLocation'},
+ $self->{'IconNumber'}) = _GetIconLocation($self->{'ilink'}, $self->{'ifile'});
+ }
+ return $result;
+}
+
+
+#========
+sub Set {
+#========
+ my($self, $path, $arguments, $dir, $description, $show, $hotkey,
+ $iconlocation, $iconnumber) = @_;
+ return undef unless ref($self);
+
+ $self->{'Path'} = $path;
+ $self->{'Arguments'} = $arguments;
+ $self->{'WorkingDirectory'} = $dir;
+ $self->{'Description'} = $description;
+ $self->{'ShowCmd'} = $show;
+ $self->{'Hotkey'} = $hotkey;
+ $self->{'IconLocation'} = $iconlocation;
+ $self->{'IconNumber'} = $iconnumber;
+ return 1;
+}
+
+
+#=========
+sub Save {
+#=========
+ my($self, $file) = @_;
+ return unless ref($self);
+
+ $file = $self->{'File'} unless $file;
+ return unless $file;
+
+ require Win32 unless defined &Win32::GetFullPathName;
+ $file = Win32::GetFullPathName($file);
+
+ _SetPath($self->{'ilink'}, $self->{'ifile'}, $self->{'Path'});
+ _SetArguments($self->{'ilink'}, $self->{'ifile'}, $self->{'Arguments'});
+ _SetWorkingDirectory($self->{'ilink'}, $self->{'ifile'}, $self->{'WorkingDirectory'});
+ _SetDescription($self->{'ilink'}, $self->{'ifile'}, $self->{'Description'});
+ _SetShowCmd($self->{'ilink'}, $self->{'ifile'}, $self->{'ShowCmd'});
+ _SetHotkey($self->{'ilink'}, $self->{'ifile'}, $self->{'Hotkey'});
+ _SetIconLocation($self->{'ilink'}, $self->{'ifile'},
+ $self->{'IconLocation'}, $self->{'IconNumber'});
+
+ my $result = _Save($self->{'ilink'}, $self->{'ifile'}, $file);
+ if ($result) {
+ $self->{'File'} = $file unless $self->{'File'};
+ }
+ return $result;
+}
+
+#============
+sub Resolve {
+#============
+ my($self, $flags) = @_;
+ return undef unless ref($self);
+ $flags = 1 unless defined($flags);
+ my $result = _Resolve($self->{'ilink'}, $self->{'ifile'}, $flags);
+ return $result;
+}
+
+
+#==========
+sub Close {
+#==========
+ my($self) = @_;
+ return undef unless ref($self);
+
+ my $result = _Release($self->{'ilink'}, $self->{'ifile'});
+ $self->{'released'} = 1;
+ return $result;
+}
+
+#=========
+sub Path {
+#=========
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'Path'};
+ } else {
+ $self->{'Path'} = $value;
+ }
+ return $self->{'Path'};
+}
+
+#==============
+sub ShortPath {
+#==============
+ my($self) = @_;
+ return undef unless ref($self);
+ return $self->{'ShortPath'};
+}
+
+#==============
+sub Arguments {
+#==============
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'Arguments'};
+ } else {
+ $self->{'Arguments'} = $value;
+ }
+ return $self->{'Arguments'};
+}
+
+#=====================
+sub WorkingDirectory {
+#=====================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'WorkingDirectory'};
+ } else {
+ $self->{'WorkingDirectory'} = $value;
+ }
+ return $self->{'WorkingDirectory'};
+}
+
+
+#================
+sub Description {
+#================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'Description'};
+ } else {
+ $self->{'Description'} = $value;
+ }
+ return $self->{'Description'};
+}
+
+#============
+sub ShowCmd {
+#============
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'ShowCmd'};
+ } else {
+ $self->{'ShowCmd'} = $value;
+ }
+ return $self->{'ShowCmd'};
+}
+
+#===========
+sub Hotkey {
+#===========
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'Hotkey'};
+ } else {
+ $self->{'Hotkey'} = $value;
+ }
+ return $self->{'Hotkey'};
+}
+
+#=================
+sub IconLocation {
+#=================
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'IconLocation'};
+ } else {
+ $self->{'IconLocation'} = $value;
+ }
+ return $self->{'IconLocation'};
+}
+
+#===============
+sub IconNumber {
+#===============
+ my($self, $value) = @_;
+ return undef unless ref($self);
+
+ if(not defined($value)) {
+ return $self->{'IconNumber'};
+ } else {
+ $self->{'IconNumber'} = $value;
+ }
+ return $self->{'IconNumber'};
+}
+
+#============
+sub Version {
+#============
+ # [dada] to get rid of the "used only once" warning...
+ return $VERSION;
+}
+
+
+#######################################################################
+# PRIVATE METHODS
+#
+
+#============
+sub DESTROY {
+#============
+ my($self) = @_;
+
+ if (not $self->{'released'}) {
+ _Release($self->{'ilink'}, $self->{'ifile'});
+ $self->{'released'} = 1;
+ }
+}
+
+bootstrap Win32::Shortcut;
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/Win32/Sound.pm b/Master/tlpkg/tlperl/lib/Win32/Sound.pm
new file mode 100644
index 00000000000..a8d52a95117
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Sound.pm
@@ -0,0 +1,582 @@
+#######################################################################
+#
+# Win32::Sound - An extension to play with Windows sounds
+#
+# Author: Aldo Calpini <dada@divinf.it>
+# Version: 0.47
+# Info:
+# http://www.divinf.it/dada/perl
+# http://www.perl.com/CPAN/authors/Aldo_Calpini
+#
+#######################################################################
+# Version history:
+# 0.01 (19 Nov 1996) file created
+# 0.03 (08 Apr 1997) first release
+# 0.30 (20 Oct 1998) added Volume/Format/Devices/DeviceInfo
+# (thanks Dave Roth!)
+# 0.40 (16 Mar 1999) added the WaveOut object
+# 0.45 (09 Apr 1999) added $! support, documentation et goodies
+# 0.46 (25 Sep 1999) fixed small bug in DESTROY, wo was used without being
+# initialized (Gurusamy Sarathy <gsar@activestate.com>)
+# 0.47 (22 May 2000) support for passing Unicode string to Play()
+# (Doug Lankshear <dougl@activestate.com>)
+
+package Win32::Sound;
+
+# See the bottom of this file for the POD documentation.
+# Search for the string '=head'.
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+
+@ISA= qw( Exporter DynaLoader );
+@EXPORT = qw(
+ SND_ASYNC
+ SND_NODEFAULT
+ SND_LOOP
+ SND_NOSTOP
+);
+
+#######################################################################
+# This AUTOLOAD is used to 'autoload' constants from the constant()
+# XS function. If a constant is not found then control is passed
+# to the AUTOLOAD in AutoLoader.
+#
+
+sub AUTOLOAD {
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+
+ # [dada] This results in an ugly Autoloader error
+
+ #if ($! =~ /Invalid/) {
+ # $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ # goto &AutoLoader::AUTOLOAD;
+ #} else {
+
+ # [dada] ... I prefer this one :)
+
+ ($pack, $file, $line) = caller;
+ undef $pack; # [dada] and get rid of "used only once" warning...
+ die "Win32::Sound::$constname is not defined, used at $file line $line.";
+
+ #}
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+$VERSION="0.47";
+undef unless $VERSION; # [dada] to avoid "possible typo" warning
+
+#######################################################################
+# METHODS
+#
+
+sub Version { $VERSION }
+
+sub Volume {
+ my(@in) = @_;
+ # Allows '0%'..'100%'
+ $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*100/255) }ex if defined $in[0];
+ $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*100/255) }ex if defined $in[1];
+ _Volume(@in);
+}
+
+#######################################################################
+# dynamically load in the Sound.dll module.
+#
+
+bootstrap Win32::Sound;
+
+#######################################################################
+# Win32::Sound::WaveOut
+#
+
+package Win32::Sound::WaveOut;
+
+sub new {
+ my($class, $one, $two, $three) = @_;
+ my $self = {};
+ bless($self, $class);
+
+ if($one !~ /^\d+$/
+ and not defined($two)
+ and not defined($three)) {
+ # Looks like a file
+ $self->Open($one);
+ } else {
+ # Default format if not given
+ $self->{samplerate} = ($one or 44100);
+ $self->{bits} = ($two or 16);
+ $self->{channels} = ($three or 2);
+ $self->OpenDevice();
+ }
+ return $self;
+}
+
+sub Volume {
+ my(@in) = @_;
+ # Allows '0%'..'100%'
+ $in[0] =~ s{ ([\d\.]+)%$ }{ int($1*255/100) }ex if defined $in[0];
+ $in[1] =~ s{ ([\d\.]+)%$ }{ int($1*255/100) }ex if defined $in[1];
+ _Volume(@in);
+}
+
+sub Pitch {
+ my($self, $pitch) = @_;
+ my($int, $frac);
+ if(defined($pitch)) {
+ $pitch =~ /(\d+).?(\d+)?/;
+ $int = $1;
+ $frac = $2 or 0;
+ $int = $int << 16;
+ $frac = eval("0.$frac * 65536");
+ $pitch = $int + $frac;
+ return _Pitch($self, $pitch);
+ } else {
+ $pitch = _Pitch($self);
+ $int = ($pitch & 0xFFFF0000) >> 16;
+ $frac = $pitch & 0x0000FFFF;
+ return eval("$int.$frac");
+ }
+}
+
+sub PlaybackRate {
+ my($self, $rate) = @_;
+ my($int, $frac);
+ if(defined($rate)) {
+ $rate =~ /(\d+).?(\d+)?/;
+ $int = $1;
+ $frac = $2 or 0;
+ $int = $int << 16;
+ $frac = eval("0.$frac * 65536");
+ $rate = $int + $frac;
+ return _PlaybackRate($self, $rate);
+ } else {
+ $rate = _PlaybackRate($self);
+ $int = ($rate & 0xFFFF0000) >> 16;
+ $frac = $rate & 0x0000FFFF;
+ return eval("$int.$frac");
+ }
+}
+
+# Preloaded methods go here.
+
+#Currently Autoloading is not implemented in Perl for win32
+# Autoload methods go after __END__, and are processed by the autosplit program.
+
+1;
+__END__
+
+
+=head1 NAME
+
+Win32::Sound - An extension to play with Windows sounds
+
+=head1 SYNOPSIS
+
+ use Win32::Sound;
+ Win32::Sound::Volume('100%');
+ Win32::Sound::Play("file.wav");
+ Win32::Sound::Stop();
+
+ # ...and read on for more fun ;-)
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item B<Win32::Sound::Play(SOUND, [FLAGS])>
+
+Plays the specified sound: SOUND can the be name of a WAV file
+or one of the following predefined sound names:
+
+ SystemDefault
+ SystemAsterisk
+ SystemExclamation
+ SystemExit
+ SystemHand
+ SystemQuestion
+ SystemStart
+
+Additionally, if the named sound could not be found, the
+function plays the system default sound (unless you specify the
+C<SND_NODEFAULT> flag). If no parameters are given, this function
+stops the sound actually playing (see also Win32::Sound::Stop).
+
+FLAGS can be a combination of the following constants:
+
+=over 4
+
+=item C<SND_ASYNC>
+
+The sound is played asynchronously and the function
+returns immediately after beginning the sound
+(if this flag is not specified, the sound is
+played synchronously and the function returns
+when the sound ends).
+
+=item C<SND_LOOP>
+
+The sound plays repeatedly until it is stopped.
+You must also specify C<SND_ASYNC> flag.
+
+=item C<SND_NODEFAULT>
+
+No default sound is used. If the specified I<sound>
+cannot be found, the function returns without
+playing anything.
+
+=item C<SND_NOSTOP>
+
+If a sound is already playing, the function fails.
+By default, any new call to the function will stop
+previously playing sounds.
+
+=back
+
+=item B<Win32::Sound::Stop()>
+
+Stops the sound currently playing.
+
+=item B<Win32::Sound::Volume()>
+
+Returns the wave device volume; if
+called in an array context, returns left
+and right values. Otherwise, returns a single
+32 bit value (left in the low word, right
+in the high word).
+In case of error, returns C<undef> and sets
+$!.
+
+Examples:
+
+ ($L, $R) = Win32::Sound::Volume();
+ if( not defined Win32::Sound::Volume() ) {
+ die "Can't get volume: $!";
+ }
+
+=item B<Win32::Sound::Volume(LEFT, [RIGHT])>
+
+Sets the wave device volume; if two arguments
+are given, sets left and right channels
+independently, otherwise sets them both to
+LEFT (eg. RIGHT=LEFT). Values range from
+0 to 65535 (0xFFFF), but they can also be
+given as percentage (use a string containing
+a number followed by a percent sign).
+
+Returns C<undef> and sets $! in case of error,
+a true value if successful.
+
+Examples:
+
+ Win32::Sound::Volume('50%');
+ Win32::Sound::Volume(0xFFFF, 0x7FFF);
+ Win32::Sound::Volume('100%', '50%');
+ Win32::Sound::Volume(0);
+
+=item B<Win32::Sound::Format(filename)>
+
+Returns information about the specified WAV file format;
+the array contains:
+
+=over
+
+=item * sample rate (in Hz)
+
+=item * bits per sample (8 or 16)
+
+=item * channels (1 for mono, 2 for stereo)
+
+=back
+
+Example:
+
+ ($hz, $bits, $channels)
+ = Win32::Sound::Format("file.wav");
+
+
+=item B<Win32::Sound::Devices()>
+
+Returns all the available sound devices;
+their names contain the type of the
+device (WAVEOUT, WAVEIN, MIDIOUT,
+MIDIIN, AUX or MIXER) and
+a zero-based ID number: valid devices
+names are for example:
+
+ WAVEOUT0
+ WAVEOUT1
+ WAVEIN0
+ MIDIOUT0
+ MIDIIN0
+ AUX0
+ AUX1
+ AUX2
+
+There are also two special device
+names, C<WAVE_MAPPER> and C<MIDI_MAPPER>
+(the default devices for wave output
+and midi output).
+
+Example:
+
+ @devices = Win32::Sound::Devices();
+
+=item Win32::Sound::DeviceInfo(DEVICE)
+
+Returns an associative array of information
+about the sound device named DEVICE (the
+same format of Win32::Sound::Devices).
+
+The content of the array depends on the device
+type queried. Each device type returns B<at least>
+the following information:
+
+ manufacturer_id
+ product_id
+ name
+ driver_version
+
+For additional data refer to the following
+table:
+
+ WAVEIN..... formats
+ channels
+
+ WAVEOUT.... formats
+ channels
+ support
+
+ MIDIOUT.... technology
+ voices
+ notes
+ channels
+ support
+
+ AUX........ technology
+ support
+
+ MIXER...... destinations
+ support
+
+The meaning of the fields, where not
+obvious, can be evinced from the
+Microsoft SDK documentation (too long
+to report here, maybe one day... :-).
+
+Example:
+
+ %info = Win32::Sound::DeviceInfo('WAVE_MAPPER');
+ print "$info{name} version $info{driver_version}\n";
+
+=back
+
+=head1 THE WaveOut PACKAGE
+
+Win32::Sound also provides a different, more
+powerful approach to wave audio data with its
+C<WaveOut> package. It has methods to load and
+then play WAV files, with the additional feature
+of specifying the start and end range, so you
+can play only a portion of an audio file.
+
+Furthermore, it is possible to load arbitrary
+binary data to the soundcard to let it play and
+save them back into WAV files; in a few words,
+you can do some sound synthesis work.
+
+=head2 FUNCTIONS
+
+=over
+
+=item new Win32::Sound::WaveOut(FILENAME)
+
+=item new Win32::Sound::WaveOut(SAMPLERATE, BITS, CHANNELS)
+
+=item new Win32::Sound::WaveOut()
+
+This function creates a C<WaveOut> object; the
+first form opens the specified wave file (see
+also C<Open()> ), so you can directly C<Play()> it.
+
+The second (and third) form opens the
+wave output device with the format given
+(or if none given, defaults to 44.1kHz,
+16 bits, stereo); to produce something
+audible you can either C<Open()> a wave file
+or C<Load()> binary data to the soundcard
+and then C<Write()> it.
+
+=item Close()
+
+Closes the wave file currently opened.
+
+=item CloseDevice()
+
+Closes the wave output device; you can change
+format and reopen it with C<OpenDevice()>.
+
+=item GetErrorText(ERROR)
+
+Returns the error text associated with
+the specified ERROR number; note it only
+works for wave-output-specific errors.
+
+=item Load(DATA)
+
+Loads the DATA buffer in the soundcard.
+The format of the data buffer depends
+on the format used; for example, with
+8 bit mono each sample is one character,
+while with 16 bit stereo each sample is
+four characters long (two 16 bit values
+for left and right channels). The sample
+rate defines how much samples are in one
+second of sound. For example, to fit one
+second at 44.1kHz 16 bit stereo your buffer
+must contain 176400 bytes (44100 * 4).
+
+=item Open(FILE)
+
+Opens the specified wave FILE.
+
+=item OpenDevice()
+
+Opens the wave output device with the
+current sound format (not needed unless
+you used C<CloseDevice()>).
+
+=item Pause()
+
+Pauses the sound currently playing;
+use C<Restart()> to continue playing.
+
+=item Play( [FROM, TO] )
+
+Plays the opened wave file. You can optionally
+specify a FROM - TO range, where FROM and TO
+are expressed in samples (or use FROM=0 for the
+first sample and TO=-1 for the last sample).
+Playback happens always asynchronously, eg. in
+the background.
+
+=item Position()
+
+Returns the sample number currently playing;
+note that the play position is not zeroed
+when the sound ends, so you have to call a
+C<Reset()> between plays to receive the
+correct position in the current sound.
+
+=item Reset()
+
+Stops playing and resets the play position
+(see C<Position()>).
+
+=item Restart()
+
+Continues playing the sound paused by C<Pause()>.
+
+=item Save(FILE, [DATA])
+
+Writes the DATA buffer (if not given, uses the
+buffer currently loaded in the soundcard)
+to the specified wave FILE.
+
+=item Status()
+
+Returns 0 if the soundcard is currently playing,
+1 if it's free, or C<undef> on errors.
+
+=item Unload()
+
+Frees the soundcard from the loaded data.
+
+=item Volume( [LEFT, RIGHT] )
+
+Gets or sets the volume for the wave output device.
+It works the same way as Win32::Sound::Volume.
+
+=item Write()
+
+Plays the data currently loaded in the soundcard;
+playback happens always asynchronously, eg. in
+the background.
+
+=back
+
+=head2 THE SOUND FORMAT
+
+The sound format is stored in three properties of
+the C<WaveOut> object: C<samplerate>, C<bits> and
+C<channels>.
+If you need to change them without creating a
+new object, you should close before and reopen
+afterwards the device.
+
+ $WAV->CloseDevice();
+ $WAV->{samplerate} = 44100; # 44.1kHz
+ $WAV->{bits} = 8; # 8 bit
+ $WAV->{channels} = 1; # mono
+ $WAV->OpenDevice();
+
+You can also use the properties to query the
+sound format currently used.
+
+=head2 EXAMPLE
+
+This small example produces a 1 second sinusoidal
+wave at 440Hz and saves it in F<sinus.wav>:
+
+ use Win32::Sound;
+
+ # Create the object
+ $WAV = new Win32::Sound::WaveOut(44100, 8, 2);
+
+ $data = "";
+ $counter = 0;
+ $increment = 440/44100;
+
+ # Generate 44100 samples ( = 1 second)
+ for $i (1..44100) {
+
+ # Calculate the pitch
+ # (range 0..255 for 8 bits)
+ $v = sin($counter/2*3.14) * 128 + 128;
+
+ # "pack" it twice for left and right
+ $data .= pack("cc", $v, $v);
+
+ $counter += $increment;
+ }
+
+ $WAV->Load($data); # get it
+ $WAV->Write(); # hear it
+ 1 until $WAV->Status(); # wait for completion
+ $WAV->Save("sinus.wav"); # write to disk
+ $WAV->Unload(); # drop it
+
+=head1 VERSION
+
+Win32::Sound version 0.46, 25 Sep 1999.
+
+=head1 AUTHOR
+
+Aldo Calpini, C<dada@divinf.it>
+
+Parts of the code provided and/or suggested by Dave Roth.
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/Win32/Test.pl b/Master/tlpkg/tlperl/lib/Win32/Test.pl
new file mode 100644
index 00000000000..235e94bdd78
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/Test.pl
@@ -0,0 +1,477 @@
+#####
+# T E S T . P L
+# -------------
+# A test script for exercising the Win32::ODBC extension. Install
+# the ODBC.PLL extension and the ODBC.PM wrapper, set up an ODBC
+# DSN (Data Source Name) by the ODBC administrator, then give this a try!
+#
+# READ THE DOCUMENTATION -- I AM NOT RESPOSIBLE FOR ANY PROBLEMS THAT
+# THIS MAY CAUSE WHATSOEVER. BY USING THIS OR ANY ---
+# OF THE WIN32::ODBC PARTS FOUND IN THE DISTRIBUTION YOU ARE AGREEING
+# WITH THE TERMS OF THIS DISTRIBUTION!!!!!
+#
+#
+# You have been warned.
+# --- ---- ---- ------
+#
+# Updated to test newest version v961007. Dave Roth <rothd@roth.net>
+# This version contains a small sample database (in MS Access 7.0
+# format) called ODBCTest.mdb. Place this database in the same
+# directory as this test.pl file.
+#
+# --------------------------------------------------------------------
+#
+# SYNTAX:
+# perl test.pl ["DSN Name" [Max Rows]]
+#
+# DSN Name....Name of DSN that will be used. If this is
+# omitted then we will use the obnoxious default DSN.
+# Max Rows....Maximum number of rows wanted to be retrieved from
+# the DSN.
+# - If this is 0 then the request is to retrieve as
+# many as possible.
+# - If this is a value greater than that which the DSN
+# driver can handle the value will be the greatest
+# the DSN driver allows.
+# - If omitted then we use the default value.
+#####
+
+ use Win32::ODBC;
+
+
+ $TempDSN = "Win32 ODBC Test --123xxYYzz987--";
+ $iTempDSN = 1;
+
+ if (!($DSN = $ARGV[0])){
+ $DSN = $TempDSN;
+ }
+ $MaxRows = 8 unless defined ($MaxRows = $ARGV[1]);
+
+ $DriverType = "Microsoft Access Driver (*.mdb)";
+ $Desc = "Description=The Win32::ODBC Test DSN for Perl";
+ $Dir = Win32::GetCwd();
+ $DBase = "ODBCTest.mdb";
+
+ $iWidth=60;
+ %SQLStmtTypes = (SQL_CLOSE, "SQL_CLOSE", SQL_DROP, "SQL_DROP", SQL_UNBIND, "SQL_UNBIND", SQL_RESET_PARAMS, "SQL_RESET_PARAMS");
+
+# Initialize();
+
+ ($Name, $Version, $Date, $Author, $CompileDate, $CompileTime, $Credits) = Win32::ODBC::Info();
+ print "\n";
+ print "\t+", "=" x ($iWidth), "+\n";
+ print "\t|", Center("", $iWidth), "|\n";
+ print "\t|", Center("", $iWidth), "|\n";
+ print "\t|", Center("$Name", $iWidth), "|\n";
+ print "\t|", Center("-" x length("$Name"), $iWidth), "|\n";
+ print "\t|", Center("", $iWidth), "|\n";
+
+ print "\t|", Center("Version $Version ($Date)", $iWidth), "|\n";
+ print "\t|", Center("by $Author", $iWidth), "|\n";
+ print "\t|", Center("Compiled on $CompileDate at $CompileTime.", $iWidth), "|\n";
+ print "\t|", Center("", $iWidth), "|\n";
+ print "\t|", Center("Credits:", $iWidth), "|\n";
+ print "\t|", Center(("-" x length("Credits:")), $iWidth), "|\n";
+ foreach $Temp (split("\n", $Credits)){
+ print "\t|", Center("$Temp", $iWidth), "|\n";
+ }
+ print "\t|", Center("", $iWidth), "|\n";
+ print "\t+", "=" x ($iWidth), "+\n";
+
+####
+# T E S T 1
+####
+ PrintTest(1, "Dump available ODBC Drivers");
+ print "\nAvailable ODBC Drivers:\n";
+ if (!(%Drivers = Win32::ODBC::Drivers())){
+ $Failed{'Test 1'} = "Drivers(): " . Win32::ODBC::Error();
+ }
+ foreach $Driver (keys(%Drivers)){
+ print " Driver=\"$Driver\"\n Attributes: ", join("\n" . " "x14, sort(split(';', $Drivers{$Driver}))), "\n\n";
+ }
+
+
+####
+# T E S T 2
+####
+ PrintTest(2,"Dump available datasources");
+
+ ####
+ # Notice you don't need an instantiated object to use this...
+ ####
+ print "\nHere are the available datasources...\n";
+ if (!(%DSNs = Win32::ODBC::DataSources())){
+ $Failed{'Test 2'} = "DataSources(): " . Win32::ODBC::Error();
+ }
+ foreach $Temp (keys(%DSNs)){
+ if (($Temp eq $TempDSN) && ($DSNs{$Temp} eq $DriverType)){
+ $iTempDSNExists++;
+ }
+ if ($DSN =~ /$Temp/i){
+ $iTempDSN = 0;
+ $DriverType = $DSNs{$Temp};
+ }
+ print "\tDSN=\"$Temp\" (\"$DSNs{$Temp}\")\n";
+ }
+
+####
+# T E S T 2.5
+####
+ # IF WE DO NOT find the DSN the user specified...
+ if ($iTempDSN){
+ PrintTest("2.5", "Create a Temporary DSN");
+
+ print "\n\tCould not find the DSN (\"$DSN\") so we will\n\tuse a temporary one (\"$TempDSN\")...\n\n";
+
+ $DSN = $TempDSN;
+
+ if (! $iTempDSNExists){
+ print "\tAdding DSN \"$DSN\"...";
+ if (Win32::ODBC::ConfigDSN(ODBC_ADD_DSN, $DriverType, ("DSN=$DSN", "Description=The Win32 ODBC Test DSN for Perl", "DBQ=$Dir\\$DBase", "DEFAULTDIR=$Dir", "UID=", "PWD="))){
+ print "Successful!\n";
+ }else{
+ print "Failure\n";
+ $Failed{'Test 2.5'} = "ConfigDSN(): Could not add \"$DSN\": " . Win32::ODBC::Error();
+ # If we failed here then use the last DSN we listed in Test 2
+ $DriverType = $DSNs{$Temp};
+ $DSN = $Temp;
+ print "\n\tCould not add a temporary DSN so using the last one listed:\n";
+ print "\t\t$DSN ($DriverType)\n";
+
+ }
+ }
+ }
+
+####
+# Report What Driver/DSN we are using
+####
+
+ print "\n\nWe are using the DSN:\n\tDSN = \"$DSN\"\n";
+ print "\tDriver = \"$DriverType\"\n\n";
+
+
+####
+# T E S T 3
+####
+ PrintTest(3, "Open several ODBC connections");
+ print "\n\tOpening ODBC connection for \"$DSN\"...\n\t\t";
+ if (!($O = new Win32::ODBC($DSN))){
+ print "Failure. \n\n";
+ $Failed{'Test 3a'} = "new(): " . Win32::ODBC::Error();
+ PresentErrors();
+ exit();
+ }else{
+ print "Success (connection #", $O->Connection(), ")\n\n";
+ }
+
+ print "\tOpening ODBC connection for \"$DSN\"...\n\t\t";
+ if (!($O2 = new Win32::ODBC($DSN))){
+ $Failed{'Test 3b'} = "new(): " . Win32::ODBC::Error();
+ print "Failure. \n\n";
+ }else{
+ print "Success (connection #", $O2->Connection(), ")\n\n";
+ }
+
+ print "\tOpening ODBC connection for \"$DSN\"\n\t\t";
+ if (!($O3 = new Win32::ODBC($DSN))){
+ $Failed{'Test 3c'} = "new(): " . Win32::ODBC::Error();
+ print "Failure. \n\n";
+ }else{
+ print "Success (connection #", $O3->Connection(), ")\n\n";
+ }
+
+
+####
+# T E S T 4
+####
+ PrintTest(4, "Close all but one connection");
+
+ print "\n\tCurrently open ODBC connections are: \"", join(", ", sort($O2->GetConnections())), "\"\n";
+ print "\tClosing ODBC connection #", $O2->Connection(), "...\n";
+ print "\t\t...", (($O2->Close())? "Successful.":"Failure."), "\n";
+
+ print "\n\tCurrently open ODBC connections are: \"", join(", ", sort($O3->GetConnections())), "\"\n";
+ print "\tClosing ODBC connection #", $O3->Connection(), "...\n";
+ print "\t\t...", (($O3->Close())? "Successful.":"Failure."), "\n";
+
+ print "\n\tCurrently open ODBC connections are: \"", join(", ", sort($O2->GetConnections())), "\"\n";
+
+####
+# T E S T 5
+####
+ PrintTest(5, "Set/query Max Buffer size for a connection");
+
+ srand(time);
+ $Temp = int(rand(10240)) + 10240;
+ print "\nMaximum Buffer Size for connection #", $O->Connection(), ":\n";
+ print "\tValue set at ", $O->GetMaxBufSize(), "\n";
+
+ print "\tSetting Maximum Buffer Size to $Temp... it has been set to ", $O->SetMaxBufSize($Temp), "\n";
+ print "\tValue set at ", $O->GetMaxBufSize(), "\n";
+
+ $Temp += int(rand(10240)) + 102400;
+ print "\tSetting Maximum Buffer Size to $Temp... (can not be more than 102400)\n\t\t...it has been set to ", $O->SetMaxBufSize($Temp), "\n";
+ print "\tValue set at ", $O->GetMaxBufSize(), "\n";
+
+ $Temp = int(rand(1024)) + 2048;
+ print "\tSetting Maximum Buffer Size to $Temp... it has been set to ", $O->SetMaxBufSize($Temp), "\n";
+
+ print "\tValue set at ", $O->GetMaxBufSize(), "\n";
+
+
+####
+# T E S T 6
+####
+ PrintTest(6, "Set/query Stmt Close Type");
+
+ print "\n\tStatement Close Type is currently set as ", $O->GetStmtCloseType(), " " . $O->Error . "\n";
+ print "\tSetting Statement Close Type to SQL_CLOSE: (returned code of ", $O->SetStmtCloseType(SQL_CLOSE), ")" . $O->Error . "\n";
+ print "\tStatement Close Type is currently set as ", $O->GetStmtCloseType(), " " . $O->Error ."\n";
+
+
+####
+# T E S T 7
+####
+ PrintTest(7, "Dump DSN for current connection");
+
+ if (! (%DSNAttributes = $O->GetDSN())){
+ $Failed{'Test 7'} = "GetDSN(): " . $O->Error();
+ }else{
+ print"\nThe DSN for connection #", $O->Connection(), ":\n";
+ print "\tDSN...\n";
+ foreach (sort(keys(%DSNAttributes))){
+ print "\t$_ = \"$DSNAttributes{$_}\"\n";
+ }
+ }
+
+
+
+####
+# T E S T 8
+####
+ PrintTest(8, "Dump list of ALL tables in datasource");
+
+ print "\nList of tables for \"$DSN\"\n\n";
+ $Num = 0;
+ if ($O->Catalog("", "", "%", "'TABLE','VIEW','SYSTEM TABLE', 'GLOBAL TEMPORARY','LOCAL TEMPORARY','ALIAS','SYNONYM'")){
+
+ print "\tCursor is currently named \"", $O->GetCursorName(), "\".\n";
+ print "\tRenaming cursor to \"TestCursor\"...", (($O->SetCursorName("TestCursor"))? "Success":"Failure"), ".\n";
+ print "\tCursor is currently named \"", $O->GetCursorName(), "\".\n\n";
+
+ @FieldNames = $O->FieldNames();
+
+ $~ = "Test_8_Header";
+ write;
+
+ $~ = "Test_8_Body";
+ while($O->FetchRow()){
+ undef %Data;
+ %Data = $O->DataHash();
+ write;
+ }
+ }
+ print "\n\tTotal number of tables displayed: $Num\n";
+
+
+
+####
+# T E S T 9
+####
+ PrintTest(9, "Dump list of non-system tables and views in datasource");
+
+ print "\n";
+ $Num = 0;
+
+ foreach $Temp ($O->TableList("", "", "%", "TABLE, VIEW, SYSTEM_TABLE")){
+ $Table = $Temp;
+ print "\t", ++$Num, ".) \"$Temp\"\n";
+ }
+ print "\n\tTotal number of tables displayed: $Num\n";
+
+
+####
+# T E S T 10
+####
+ PrintTest(10, "Dump contents of the table: \"$Table\"");
+
+ print "\n";
+
+ print "\tResetting (dropping) cursor...", (($O->DropCursor())? "Successful":"Failure"), ".\n\n";
+
+ print "\tCurrently the cursor type is: ", $O->GetStmtOption($O->SQL_CURSOR_TYPE), "\n";
+ print "\tSetting Cursor to Dynamic (", ($O->SQL_CURSOR_DYNAMIC), ")...", (($O->SetStmtOption($O->SQL_CURSOR_TYPE, $O->SQL_CURSOR_DYNAMIC))? "Success":"Failure"), ".\n";
+ print "\t\tThis may have failed depending on your ODBC Driver.\n";
+ print "\t\tThis is not really a problem, it will default to another value.\n";
+ print "\tUsing the cursor type of: ", $O->GetStmtOption($O->SQL_CURSOR_TYPE), "\n\n";
+
+ print "\tSetting the connection to only grab $MaxRows row", ($MaxRows == 1)? "":"s", " maximum...";
+ if ($O->SetStmtOption($O->SQL_MAX_ROWS, $MaxRows)){
+ print "Success!\n";
+ }else{
+ $Failed{'Test 10a'} = "SetStmtOption(): " . Win32::ODBC::Error();
+ print "Failure.\n";
+ }
+
+ $iTemp = $O->GetStmtOption($O->SQL_MAX_ROWS);
+ print "\tUsing the maximum rows: ", (($iTemp)? $iTemp:"No maximum limit"), "\n\n";
+
+ print "\tCursor is currently named \"", $O->GetCursorName(), "\".\n";
+ print "\tRenaming cursor to \"TestCursor\"...", (($O->SetCursorName("TestCursor"))? "Success":"Failure"), ".\n";
+ print "\tCursor is currently named \"", $O->GetCursorName(), "\".\n\n";
+
+ if (! $O->Sql("SELECT * FROM [$Table]")){
+ @FieldNames = $O->FieldNames();
+ $Cols = $#FieldNames + 1;
+ $Cols = 8 if ($Cols > 8);
+
+ $FmH = "format Test_10_Header =\n";
+ $FmH2 = "";
+ $FmH3 = "";
+ $FmB = "format Test_10_Body = \n";
+ $FmB2 = "";
+
+ for ($iTemp = 0; $iTemp < $Cols; $iTemp++){
+ $FmH .= "@" . "<" x (80/$Cols - 2) . " ";
+ $FmH2 .= "\$FieldNames[$iTemp],";
+ $FmH3 .= "-" x (80/$Cols - 1) . " ";
+
+ $FmB .= "@" . "<" x (80/$Cols - 2) . " ";
+ $FmB2 .= "\$Data{\$FieldNames[$iTemp]},";
+ }
+ chop $FmH2;
+ chop $FmB2;
+
+ eval"$FmH\n$FmH2\n$FmH3\n.\n";
+ eval "$FmB\n$FmB2\n.\n";
+
+ $~ = "Test_10_Header";
+ write();
+ $~ = "Test_10_Body";
+
+ # Fetch the next rowset
+ while($O->FetchRow()){
+ undef %Data;
+ %Data = $O->DataHash();
+ write();
+ }
+ ####
+ # THE preceeding block could have been written like this:
+ # ------------------------------------------------------
+ #
+ # print "\tCurrently the cursor type is: ", $O->GetStmtOption($O->SQL_CURSOR_TYPE), "\n";
+ # print "\tSetting Cursor to Dynamic (", ($O->SQL_CURSOR_DYNAMIC), ")...", (($O->SetStmtOption($O->SQL_CURSOR_TYPE, $O->SQL_CURSOR_DYNAMIC))? "Success":"Failure"), ".\n";
+ # print "\t\tThis may have failed depending on your ODBC Driver. No real problem.\n";
+ # print "\tUsing the cursor type of: ", $O->GetStmtOption($O->SQL_CURSOR_TYPE), "\n\n";
+ #
+ # print "\tSetting rowset size = 15 ...", (($O->SetStmtOption($O->SQL_ROWSET_SIZE, 15))? "Success":"Failure"), ".\n";
+ # print "\tGetting rowset size: ", $O->GetStmtOption($O->SQL_ROWSET_SIZE), "\n\n";
+ #
+ # while($O->FetchRow()){
+ # $iNum = 1;
+ # # Position yourself in the rowset
+ # while($O->SetPos($iNum++ ,$O->SQL_POSITION, $O->SQL_LOCK_NO_CHANGE)){
+ # undef %Data;
+ # %Data = $O->DataHash();
+ # write();
+ # }
+ # print "\t\tNext rowset...\n";
+ # }
+ #
+ # The reason I didn't write it that way (which is easier) is to
+ # show that we can now SetPos(). Also Fetch() now uses
+ # SQLExtendedFetch() so it can position itself and retrieve
+ # rowsets. Notice earlier in this Test 10 we set the
+ # SQL_ROWSET_SIZE. If this was not set it would default to
+ # no limit (depending upon your ODBC Driver).
+ ####
+
+ print "\n\tNo more records available.\n";
+ }else{
+ $Failed{'Test 10'} = "Sql(): " . $O->Error();
+ }
+
+ $O->Close();
+
+####
+# T E S T 11
+####
+ if ($iTempDSN){
+ PrintTest(11, "Remove the temporary DSN");
+ print "\n\tRemoving the temporary DSN:\n";
+ print "\t\tDSN = \"$DSN\"\n\t\tDriver = \"$DriverType\"\n";
+
+ if (Win32::ODBC::ConfigDSN(ODBC_REMOVE_DSN, $DriverType, "DSN=$DSN")){
+ print "\tSuccessful!\n";
+ }else{
+ print "\tFailed.\n";
+ $Failed{'Test 11'} = "ConfigDSN(): Could not remove \"$DSN\":" . Win32::ODBC::Error();
+ }
+ }
+
+
+ PrintTest("E N D O F T E S T");
+ PresentErrors();
+
+
+
+#----------------------- F U N C T I O N S ---------------------------
+
+sub Error{
+ my($Data) = @_;
+ $Data->DumpError() if ref($Data);
+ Win32::ODBC::DumpError() if ! ref($Data);
+}
+
+
+sub Center{
+ local($Temp, $Width) = @_;
+ local($Len) = ($Width - length($Temp)) / 2;
+ return " " x int($Len), $Temp, " " x (int($Len) + (($Len != int($Len))? 1:0));
+}
+
+sub PrintTest{
+ my($Num, $String) = @_;
+ my($Temp);
+ if (length($String)){
+ $Temp = " T E S T $Num $String ";
+ }else{
+ $Temp = " $Num ";
+ }
+ $Len = length($Temp);
+ print "\n", "-" x ((79 - $Len)/2), $Temp, "-" x ((79 - $Len)/2 - 1), "\n";
+ print "\t$String\n";
+}
+
+sub PresentErrors{
+ PrintTest("", "Error Report:");
+ if (keys(%Failed)){
+ print "The following were errors:\n";
+ foreach (sort(keys(%Failed))){
+ print "$_ = $Failed{$_}\n";
+ }
+ }else{
+ print "\n\nThere were no errors reported during this test.\n\n";
+ }
+}
+
+
+sub Initialize{
+format Test_8_Header =
+ @<<<<<<<<<<<<<<<<<<<<<<<<<<< @|||||||||||| @|||||||||||| @|||||||||||
+ $FieldNames[0], $FieldNames[1], $FieldNames[2], $FieldNames[3]
+ ---------------------------- ------------- ------------- ------------
+.
+format Test_8_Body =
+ @>. @<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<< @<<<<<<<<<<<< @<<<<<<<<<<<
+ ++$Num, $Data{$FieldNames[0]}, $Data{$FieldNames[1]}, $Data{$FieldNames[2]}, $Data{$FieldNames[3]}
+.
+format Test_9_Header =
+ @<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<<
+ $FieldNames[0], $FieldNames[1], $FieldNames[2], $FieldNames[3]
+.
+format Test_9_Body =
+ @<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<<
+ $Data{$FieldNames[0]}, $Data{$FieldNames[1]}, $Data{$FieldNames[2]}, $Data{$FieldNames[3]}
+.
+}
diff --git a/Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm b/Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm
new file mode 100644
index 00000000000..0abbbddb6b8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/TieRegistry.pm
@@ -0,0 +1,3801 @@
+# Win32/TieRegistry.pm -- Perl module to easily use a Registry
+# (on Win32 systems so far).
+# by Tye McQueen, tye@metronet.com, see http://www.metronet.com/~tye/.
+
+#
+# Skip to "=head" line for user documentation.
+#
+
+
+package Win32::TieRegistry;
+
+
+use strict;
+use vars qw( $PACK $VERSION @ISA @EXPORT @EXPORT_OK );
+
+$PACK= "Win32::TieRegistry"; # Used in error messages.
+$VERSION= '0.26';
+
+
+use Carp;
+
+require Tie::Hash;
+@ISA= qw(Tie::Hash);
+
+# Required other modules:
+use Win32API::Registry 0.12 qw( :KEY_ :HKEY_ :REG_ );
+
+#Optional other modules:
+use vars qw( $_NoMoreItems $_FileNotFound $_TooSmall $_MoreData $_SetDualVar );
+
+if( eval { require Win32::WinError } ) {
+ $_NoMoreItems= Win32::WinError::constant("ERROR_NO_MORE_ITEMS",0);
+ $_FileNotFound= Win32::WinError::constant("ERROR_FILE_NOT_FOUND",0);
+ $_TooSmall= Win32::WinError::constant("ERROR_INSUFFICIENT_BUFFER",0);
+ $_MoreData= Win32::WinError::constant("ERROR_MORE_DATA",0);
+} else {
+ $_NoMoreItems= "^No more data";
+ $_FileNotFound= "cannot find the file";
+ $_TooSmall= " data area passed to ";
+ $_MoreData= "^more data is avail";
+}
+if( $_SetDualVar= eval { require SetDualVar } ) {
+ import SetDualVar;
+}
+
+
+#Implementation details:
+# When opened:
+# HANDLE long; actual handle value
+# MACHINE string; name of remote machine ("" if local)
+# PATH list ref; machine-relative full path for this key:
+# ["LMachine","System","Disk"]
+# ["HKEY_LOCAL_MACHINE","System","Disk"]
+# DELIM char; delimiter used to separate subkeys (def="\\")
+# OS_DELIM char; always "\\" for Win32
+# ACCESS long; usually KEY_ALL_ACCESS, perhaps KEY_READ, etc.
+# ROOTS string; var name for "Lmachine"->HKEY_LOCAL_MACHINE map
+# FLAGS int; bits to control certain options
+# Often:
+# VALUES ref to list of value names (data/type never cached)
+# SUBKEYS ref to list of subkey names
+# SUBCLASSES ref to list of subkey classes
+# SUBTIMES ref to list of subkey write times
+# MEMBERS ref to list of subkey_name.DELIM's, DELIM.value_name's
+# MEMBHASH hash ref to with MEMBERS as keys and 1's as values
+# Once Key "Info" requested:
+# Class CntSubKeys CntValues MaxSubKeyLen MaxSubClassLen
+# MaxValNameLen MaxValDataLen SecurityLen LastWrite
+# If is tied to a hash and iterating over key values:
+# PREVIDX int; index of last MEMBERS element return
+# If is the key object returned by Load():
+# UNLOADME list ref; information about Load()ed key
+# If is a subkey of a "loaded" key other than the one returned by Load():
+# DEPENDON obj ref; object that can't be destroyed before us
+
+
+#Package-local variables:
+
+# Option flag bits:
+use vars qw( $Flag_ArrVal $Flag_TieVal $Flag_DualTyp $Flag_DualBin
+ $Flag_FastDel $Flag_HexDWord $Flag_Split $Flag_FixNulls );
+$Flag_ArrVal= 0x0001;
+$Flag_TieVal= 0x0002;
+$Flag_FastDel= 0x0004;
+$Flag_HexDWord= 0x0008;
+$Flag_Split= 0x0010;
+$Flag_DualTyp= 0x0020;
+$Flag_DualBin= 0x0040;
+$Flag_FixNulls= 0x0080;
+
+
+use vars qw( $RegObj %_Roots %RegHash $Registry );
+
+# Short-hand for HKEY_* constants:
+%_Roots= (
+ "Classes" => HKEY_CLASSES_ROOT,
+ "CUser" => HKEY_CURRENT_USER,
+ "LMachine" => HKEY_LOCAL_MACHINE,
+ "Users" => HKEY_USERS,
+ "PerfData" => HKEY_PERFORMANCE_DATA, # Too picky to be useful
+ "CConfig" => HKEY_CURRENT_CONFIG,
+ "DynData" => HKEY_DYN_DATA, # Too picky to be useful
+);
+
+# Basic master Registry object:
+$RegObj= {};
+@$RegObj{qw( HANDLE MACHINE PATH DELIM OS_DELIM ACCESS FLAGS ROOTS )}= (
+ "NONE", "", [], "\\", "\\",
+ KEY_READ|KEY_WRITE, $Flag_HexDWord|$Flag_FixNulls, "${PACK}::_Roots" );
+$RegObj->{FLAGS} |= $Flag_DualTyp|$Flag_DualBin if $_SetDualVar;
+bless $RegObj;
+
+# Fill cache for master Registry object:
+@$RegObj{qw( VALUES SUBKEYS SUBCLASSES SUBTIMES )}= (
+ [], [ keys(%_Roots) ], [], [] );
+grep( s#$#$RegObj->{DELIM}#,
+ @{ $RegObj->{MEMBERS}= [ @{$RegObj->{SUBKEYS}} ] } );
+@$RegObj{qw( Class MaxSubKeyLen MaxSubClassLen MaxValNameLen
+ MaxValDataLen SecurityLen LastWrite CntSubKeys CntValues )}=
+ ( "", 0, 0, 0, 0, 0, 0, 0, 0 );
+
+# Create master Registry tied hash:
+$RegObj->Tie( \%RegHash );
+
+# Create master Registry combination object and tied hash reference:
+$Registry= \%RegHash;
+bless $Registry;
+
+
+# Preloaded methods go here.
+
+
+# Map option names to name of subroutine that controls that option:
+use vars qw( @_opt_subs %_opt_subs );
+@_opt_subs= qw( Delimiter ArrayValues TieValues SplitMultis DWordsToHex
+ FastDelete FixSzNulls DualTypes DualBinVals AllowLoad AllowSave );
+@_opt_subs{@_opt_subs}= @_opt_subs;
+
+sub import
+{
+ my $pkg= shift(@_);
+ my $level= $Exporter::ExportLevel;
+ my $expto= caller($level);
+ my @export= ();
+ my @consts= ();
+ my $registry= $Registry->Clone;
+ local( $_ );
+ while( @_ ) {
+ $_= shift(@_);
+ if( /^\$(\w+::)*\w+$/ ) {
+ push( @export, "ObjVar" ) if /^\$RegObj$/;
+ push( @export, $_ );
+ } elsif( /^\%(\w+::)*\w+$/ ) {
+ push( @export, $_ );
+ } elsif( /^[$%]/ ) {
+ croak "${PACK}->import: Invalid variable name ($_)";
+ } elsif( /^:/ || /^(H?KEY|REG)_/ ) {
+ push( @consts, $_ );
+ } elsif( ! @_ ) {
+ croak "${PACK}->import: Missing argument after option ($_)";
+ } elsif( exists $_opt_subs{$_} ) {
+ $_= $_opt_subs{$_};
+ $registry->$_( shift(@_) );
+ } elsif( /^TiedRef$/ ) {
+ $_= shift(@_);
+ if( ! ref($_) && /^(\$?)(\w+::)*\w+$/ ) {
+ $_= '$'.$_ unless '$' eq $1;
+ } elsif( "SCALAR" ne ref($_) ) {
+ croak "${PACK}->import: Invalid var after TiedRef ($_)";
+ }
+ push( @export, $_ );
+ } elsif( /^TiedHash$/ ) {
+ $_= shift(@_);
+ if( ! ref($_) && /^(\%?)(\w+::)*\w+$/ ) {
+ $_= '%'.$_ unless '%' eq $1;
+ } elsif( "HASH" ne ref($_) ) {
+ croak "${PACK}->import: Invalid var after TiedHash ($_)";
+ }
+ push( @export, $_ );
+ } elsif( /^ObjectRef$/ ) {
+ $_= shift(@_);
+ if( ! ref($_) && /^(\$?)(\w+::)*\w+$/ ) {
+ push( @export, "ObjVar" );
+ $_= '$'.$_ unless '$' eq $1;
+ } elsif( "SCALAR" eq ref($_) ) {
+ push( @export, "ObjRef" );
+ } else {
+ croak "${PACK}->import: Invalid var after ObjectRef ($_)";
+ }
+ push( @export, $_ );
+ } elsif( /^ExportLevel$/ ) {
+ $level= shift(@_);
+ $expto= caller($level);
+ } elsif( /^ExportTo$/ ) {
+ undef $level;
+ $expto= caller($level);
+ } else {
+ croak "${PACK}->import: Invalid option ($_)";
+ }
+ }
+ Win32API::Registry->export( $expto, @consts ) if @consts;
+ @export= ('$Registry') unless @export;
+ while( @export ) {
+ $_= shift( @export );
+ if( /^\$((?:\w+::)*)(\w+)$/ ) {
+ my( $pack, $sym )= ( $1, $2 );
+ $pack= $expto unless defined($pack) && "" ne $pack;
+ no strict 'refs';
+ *{"${pack}::$sym"}= \${"${pack}::$sym"};
+ ${"${pack}::$sym"}= $registry;
+ } elsif( /^\%((?:\w+::)*)(\w+)$/ ) {
+ my( $pack, $sym )= ( $1, $2 );
+ $pack= $expto unless defined($pack) && "" ne $pack;
+ no strict 'refs';
+ *{"${pack}::$sym"}= \%{"${pack}::$sym"};
+ $registry->Tie( \%{"${pack}::$sym"} );
+ } elsif( "SCALAR" eq ref($_) ) {
+ $$_= $registry;
+ } elsif( "HASH" eq ref($_) ) {
+ $registry->Tie( $_ );
+ } elsif( /^ObjVar$/ ) {
+ $_= shift( @_ );
+ /^\$((?:\w+::)*)(\w+)$/;
+ my( $pack, $sym )= ( $1, $2 );
+ $pack= $expto unless defined($pack) && "" ne $pack;
+ no strict 'refs';
+ *{"${pack}::$sym"}= \${"${pack}::$sym"};
+ ${"${pack}::$sym"}= $registry->ObjectRef;
+ } elsif( /^ObjRef$/ ) {
+ ${shift(@_)}= $registry->ObjectRef;
+ } else {
+ die "Impossible var to export ($_)";
+ }
+ }
+}
+
+
+use vars qw( @_new_Opts %_new_Opts );
+@_new_Opts= qw( ACCESS DELIM MACHINE DEPENDON );
+@_new_Opts{@_new_Opts}= (1) x @_new_Opts;
+
+sub _new
+{
+ my $this= shift( @_ );
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ my $class= ref($this) || $this;
+ my $self= {};
+ my( $handle, $rpath, $opts )= @_;
+ if( @_ < 2 || "ARRAY" ne ref($rpath) || 3 < @_
+ || 3 == @_ && "HASH" ne ref($opts) ) {
+ croak "Usage: ${PACK}->_new( \$handle, \\\@path, {OPT=>VAL,...} );\n",
+ " options: @_new_Opts\nCalled";
+ }
+ @$self{qw( HANDLE PATH )}= ( $handle, $rpath );
+ @$self{qw( MACHINE ACCESS DELIM OS_DELIM ROOTS FLAGS )}=
+ ( $this->Machine, $this->Access, $this->Delimiter,
+ $this->OS_Delimiter, $this->_Roots, $this->_Flags );
+ if( ref($opts) ) {
+ my @err= grep( ! $_new_Opts{$_}, keys(%$opts) );
+ @err and croak "${PACK}->_new: Invalid options (@err)";
+ @$self{ keys(%$opts) }= values(%$opts);
+ }
+ bless $self, $class;
+ return $self;
+}
+
+
+sub _split
+{
+ my $self= shift( @_ );
+ $self= tied(%$self) if tied(%$self);
+ my $path= shift( @_ );
+ my $delim= @_ ? shift(@_) : $self->Delimiter;
+ my $list= [ split( /\Q$delim/, $path ) ];
+ return $list;
+}
+
+
+sub _rootKey
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $keyPath= shift(@_);
+ my $delim= @_ ? shift(@_) : $self->Delimiter;
+ my( $root, $subPath );
+ if( "ARRAY" eq ref($keyPath) ) {
+ $subPath= $keyPath;
+ } else {
+ $subPath= $self->_split( $keyPath, $delim );
+ }
+ $root= shift( @$subPath );
+ if( $root =~ /^HKEY_/ ) {
+ my $handle= Win32API::Registry::constant($root,0);
+ $handle or croak "Invalid HKEY_ constant ($root): $!";
+ return( $self->_new( $handle, [$root], {DELIM=>$delim} ),
+ $subPath );
+ } elsif( $root =~ /^([-+]|0x)?\d/ ) {
+ return( $self->_new( $root, [sprintf("0x%lX",$root)],
+ {DELIM=>$delim} ),
+ $subPath );
+ } else {
+ my $roots= $self->Roots;
+ if( $roots->{$root} ) {
+ return( $self->_new( $roots->{$root}, [$root], {DELIM=>$delim} ),
+ $subPath );
+ }
+ croak "No such root key ($root)";
+ }
+}
+
+
+sub _open
+{
+ my $this= shift(@_);
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ my $subPath= shift(@_);
+ my $sam= @_ ? shift(@_) : $this->Access;
+ my $subKey= join( $this->OS_Delimiter, @$subPath );
+ my $handle= 0;
+ $this->RegOpenKeyEx( $subKey, 0, $sam, $handle )
+ or return ();
+ return $this->_new( $handle, [ @{$this->_Path}, @$subPath ],
+ { ACCESS=>$sam, ( defined($this->{UNLOADME}) ? ("DEPENDON",$this)
+ : defined($this->{DEPENDON}) ? ("DEPENDON",$this->{DEPENDON}) : () )
+ } );
+}
+
+
+sub ObjectRef
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ return $self;
+}
+
+
+sub _constant
+{
+ my( $name, $desc )= @_;
+ my $value= Win32API::Registry::constant( $name, 0 );
+ my $func= (caller(1))[3];
+ if( 0 == $value ) {
+ if( $! =~ /invalid/i ) {
+ croak "$func: Invalid $desc ($name)";
+ } elsif( 0 != $! ) {
+ croak "$func: \u$desc ($name) not support on this platform";
+ }
+ }
+ return $value;
+}
+
+
+sub _connect
+{
+ my $this= shift(@_);
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ my $subPath= pop(@_);
+ $subPath= $this->_split( $subPath ) unless ref($subPath);
+ my $machine= @_ ? shift(@_) : shift(@$subPath);
+ my $handle= 0;
+ my( $temp )= $this->_rootKey( [@$subPath] );
+ $temp->RegConnectRegistry( $machine, $temp->Handle, $handle )
+ or return ();
+ my $self= $this->_new( $handle, [shift(@$subPath)], {MACHINE=>$machine} );
+ return( $self, $subPath );
+}
+
+
+use vars qw( @Connect_Opts %Connect_Opts );
+@Connect_Opts= qw(Access Delimiter);
+@Connect_Opts{@Connect_Opts}= (1) x @Connect_Opts;
+
+sub Connect
+{
+ my $this= shift(@_);
+ my $tied= ref($this) && tied(%$this);
+ $this= tied(%$this) if $tied;
+ my( $machine, $key, $opts )= @_;
+ my $delim= "";
+ my $sam;
+ my $subPath;
+ if( @_ < 2 || 3 < @_
+ || 3 == @_ && "HASH" ne ref($opts) ) {
+ croak "Usage: \$obj= ${PACK}->Connect(",
+ " \$Machine, \$subKey, { OPT=>VAL,... } );\n",
+ " options: @Connect_Opts\nCalled";
+ }
+ if( ref($opts) ) {
+ my @err= grep( ! $Connect_Opts{$_}, keys(%$opts) );
+ @err and croak "${PACK}->Connect: Invalid options (@err)";
+ }
+ $delim= "$opts->{Delimiter}" if defined($opts->{Delimiter});
+ $delim= $this->Delimiter if "" eq $delim;
+ $sam= defined($opts->{Access}) ? $opts->{Access} : $this->Access;
+ $sam= _constant($sam,"key access type") if $sam =~ /^KEY_/;
+ ( $this, $subPath )= $this->_connect( $machine, $key );
+ return () unless defined($this);
+ my $self= $this->_open( $subPath, $sam );
+ return () unless defined($self);
+ $self->Delimiter( $delim );
+ $self= $self->TiedRef if $tied;
+ return $self;
+}
+
+
+my @_newVirtual_keys= qw( MEMBERS VALUES SUBKEYS SUBTIMES SUBCLASSES
+ Class SecurityLen LastWrite CntValues CntSubKeys
+ MaxValNameLen MaxValDataLen MaxSubKeyLen MaxSubClassLen );
+
+sub _newVirtual
+{
+ my $self= shift(@_);
+ my( $rPath, $root, $opts )= @_;
+ my $new= $self->_new( "NONE", $rPath, $opts )
+ or return ();
+ @{$new}{@_newVirtual_keys}= @{$root->ObjectRef}{@_newVirtual_keys};
+ return $new;
+}
+
+
+#$key= new Win32::TieRegistry "LMachine/System/Disk";
+#$key= new Win32::TieRegistry "//Server1/LMachine/System/Disk";
+#Win32::TieRegistry->new( HKEY_LOCAL_MACHINE, {DELIM=>"/",ACCESS=>KEY_READ} );
+#Win32::TieRegistry->new( [ HKEY_LOCAL_MACHINE, ".../..." ], {DELIM=>$DELIM} );
+#$key->new( ... );
+
+use vars qw( @new_Opts %new_Opts );
+@new_Opts= qw(Access Delimiter);
+@new_Opts{@new_Opts}= (1) x @new_Opts;
+
+sub new
+{
+ my $this= shift( @_ );
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ if( ! ref($this) ) {
+ no strict "refs";
+ my $self= ${"${this}::Registry"};
+ croak "${this}->new failed since ${PACK}::new sees that ",
+ "\$${this}::Registry is not an object."
+ if ! ref($self);
+ $this= $self->Clone;
+ }
+ my( $subKey, $opts )= @_;
+ my $delim= "";
+ my $dlen;
+ my $sam;
+ my $subPath;
+ if( @_ < 1 || 2 < @_
+ || 2 == @_ && "HASH" ne ref($opts) ) {
+ croak "Usage: \$obj= ${PACK}->new( \$subKey, { OPT=>VAL,... } );\n",
+ " options: @new_Opts\nCalled";
+ }
+ if( defined($opts) ) {
+ my @err= grep( ! $new_Opts{$_}, keys(%$opts) );
+ @err and die "${PACK}->new: Invalid options (@err)";
+ }
+ $delim= "$opts->{Delimiter}" if defined($opts->{Delimiter});
+ $delim= $this->Delimiter if "" eq $delim;
+ $dlen= length($delim);
+ $sam= defined($opts->{Access}) ? $opts->{Access} : $this->Access;
+ $sam= _constant($sam,"key access type") if $sam =~ /^KEY_/;
+ if( "ARRAY" eq ref($subKey) ) {
+ $subPath= $subKey;
+ if( "NONE" eq $this->Handle && @$subPath ) {
+ ( $this, $subPath )= $this->_rootKey( $subPath );
+ }
+ } elsif( $delim x 2 eq substr($subKey,0,2*$dlen) ) {
+ my $path= $this->_split( substr($subKey,2*$dlen), $delim );
+ my $mach= shift(@$path);
+ if( ! @$path ) {
+ return $this->_newVirtual( $path, $Registry,
+ {MACHINE=>$mach,DELIM=>$delim,ACCESS=>$sam} );
+ }
+ ( $this, $subPath )= $this->_connect( $mach, $path );
+ return () if ! defined($this);
+ if( 0 == @$subPath ) {
+ $this->Delimiter( $delim );
+ return $this;
+ }
+ } elsif( $delim eq substr($subKey,0,$dlen) ) {
+ ( $this, $subPath )= $this->_rootKey( substr($subKey,$dlen), $delim );
+ } elsif( "NONE" eq $this->Handle && "" ne $subKey ) {
+ my( $mach )= $this->Machine;
+ if( $mach ) {
+ ( $this, $subPath )= $this->_connect( $mach, $subKey );
+ } else {
+ ( $this, $subPath )= $this->_rootKey( $subKey, $delim );
+ }
+ } else {
+ $subPath= $this->_split( $subKey, $delim );
+ }
+ return () unless defined($this);
+ if( 0 == @$subPath && "NONE" eq $this->Handle ) {
+ return $this->_newVirtual( $this->_Path, $this,
+ { DELIM=>$delim, ACCESS=>$sam } );
+ }
+ my $self= $this->_open( $subPath, $sam );
+ return () unless defined($self);
+ $self->Delimiter( $delim );
+ return $self;
+}
+
+
+sub Open
+{
+ my $self= shift(@_);
+ my $tied= ref($self) && tied(%$self);
+ $self= tied(%$self) if $tied;
+ $self= $self->new( @_ );
+ $self= $self->TiedRef if defined($self) && $tied;
+ return $self;
+}
+
+
+sub Clone
+{
+ my $self= shift( @_ );
+ my $new= $self->Open("");
+ return $new;
+}
+
+
+{ my @flush;
+ sub Flush
+ {
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( $flush )= shift(@_);
+ @_ and croak "Usage: \$key->Flush( \$bFlush );";
+ return 0 if "NONE" eq $self->Handle;
+ @flush= qw( VALUES SUBKEYS SUBCLASSES SUBTIMES MEMBERS Class
+ CntSubKeys CntValues MaxSubKeyLen MaxSubClassLen
+ MaxValNameLen MaxValDataLen SecurityLen LastWrite PREVIDX )
+ unless @flush;
+ delete( @$self{@flush} );
+ if( defined($flush) && $flush ) {
+ return $self->RegFlushKey();
+ } else {
+ return 1;
+ }
+ }
+}
+
+
+sub _DualVal
+{
+ my( $hRef, $num )= @_;
+ if( $_SetDualVar && $$hRef{$num} ) {
+ &SetDualVar( $num, "$$hRef{$num}", 0+$num );
+ }
+ return $num;
+}
+
+
+use vars qw( @_RegDataTypes %_RegDataTypes );
+@_RegDataTypes= qw( REG_SZ REG_EXPAND_SZ REG_BINARY REG_LINK REG_MULTI_SZ
+ REG_DWORD_LITTLE_ENDIAN REG_DWORD_BIG_ENDIAN REG_DWORD
+ REG_RESOURCE_LIST REG_FULL_RESOURCE_DESCRIPTOR
+ REG_RESOURCE_REQUIREMENTS_LIST REG_NONE );
+# Make sure that REG_DWORD appears _after_ other REG_DWORD_*
+# items above and that REG_NONE appears _last_.
+foreach( @_RegDataTypes ) {
+ $_RegDataTypes{Win32API::Registry::constant($_,0)}= $_;
+}
+
+sub GetValue
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ 1 == @_ or croak "Usage: (\$data,\$type)= \$key->GetValue('ValName');";
+ my( $valName )= @_;
+ my( $valType, $valData, $dLen )= (0,"",0);
+ return () if "NONE" eq $self->Handle;
+ $self->RegQueryValueEx( $valName, [], $valType, $valData,
+ $dLen= ( defined($self->{MaxValDataLen}) ? $self->{MaxValDataLen} : 0 )
+ ) or return ();
+ if( REG_DWORD == $valType ) {
+ my $val= unpack("L",$valData);
+ $valData= sprintf "0x%08.8lX", $val if $self->DWordsToHex;
+ &SetDualVar( $valData, $valData, $val ) if $self->DualBinVals
+ } elsif( REG_BINARY == $valType && length($valData) <= 4 ) {
+ &SetDualVar( $valData, $valData, hex reverse unpack("h*",$valData) )
+ if $self->DualBinVals;
+ } elsif( ( REG_SZ == $valType || REG_EXPAND_SZ == $valType )
+ && $self->FixSzNulls ) {
+ substr($valData,-1)= "" if "\0" eq substr($valData,-1);
+ } elsif( REG_MULTI_SZ == $valType && $self->SplitMultis ) {
+ ## $valData =~ s/\0\0$//; # Why does this often fail??
+ substr($valData,-2)= "" if "\0\0" eq substr($valData,-2);
+ $valData= [ split( /\0/, $valData, -1 ) ]
+ }
+ if( ! wantarray ) {
+ return $valData;
+ } elsif( ! $self->DualTypes ) {
+ return( $valData, $valType );
+ } else {
+ return( $valData, _DualVal( \%_RegDataTypes, $valType ) );
+ }
+}
+
+
+sub _ErrNum
+{
+ # return $^E;
+ return Win32::GetLastError();
+}
+
+
+sub _ErrMsg
+{
+ # return $^E;
+ return Win32::FormatMessage( Win32::GetLastError() );
+}
+
+sub _Err
+{
+ my $err;
+ # return $^E;
+ return _ErrMsg if ! $_SetDualVar;
+ return &SetDualVar( $err, _ErrMsg, _ErrNum );
+}
+
+sub _NoMoreItems
+{
+ return
+ $_NoMoreItems =~ /^\d/
+ ? _ErrNum == $_NoMoreItems
+ : _ErrMsg =~ /$_NoMoreItems/io;
+}
+
+
+sub _FileNotFound
+{
+ return
+ $_FileNotFound =~ /^\d/
+ ? _ErrNum == $_FileNotFound
+ : _ErrMsg =~ /$_FileNotFound/io;
+}
+
+
+sub _TooSmall
+{
+ return
+ $_TooSmall =~ /^\d/
+ ? _ErrNum == $_TooSmall
+ : _ErrMsg =~ /$_TooSmall/io;
+}
+
+
+sub _MoreData
+{
+ return
+ $_MoreData =~ /^\d/
+ ? _ErrNum == $_MoreData
+ : _ErrMsg =~ /$_MoreData/io;
+}
+
+
+sub _enumValues
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( @names )= ();
+ my $pos= 0;
+ my $name= "";
+ my $nlen= 1+$self->Information("MaxValNameLen");
+ while( $self->RegEnumValue($pos++,$name,$nlen,[],[],[],[]) ) {
+ push( @names, $name );
+ }
+ if( ! _NoMoreItems() ) {
+ return ();
+ }
+ $self->{VALUES}= \@names;
+ return 1;
+}
+
+
+sub ValueNames
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \@names= \$key->ValueNames;";
+ $self->_enumValues unless $self->{VALUES};
+ return @{$self->{VALUES}};
+}
+
+
+sub _enumSubKeys
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( @subkeys, @classes, @times )= ();
+ my $pos= 0;
+ my( $subkey, $class, $time )= ("","","");
+ my( $namSiz, $clsSiz )= $self->Information(
+ qw( MaxSubKeyLen MaxSubClassLen ));
+ $namSiz++; $clsSiz++;
+ while( $self->RegEnumKeyEx(
+ $pos++, $subkey, $namSiz, [], $class, $clsSiz, $time ) ) {
+ push( @subkeys, $subkey );
+ push( @classes, $class );
+ push( @times, $time );
+ }
+ if( ! _NoMoreItems() ) {
+ return ();
+ }
+ $self->{SUBKEYS}= \@subkeys;
+ $self->{SUBCLASSES}= \@classes;
+ $self->{SUBTIMES}= \@times;
+ return 1;
+}
+
+
+sub SubKeyNames
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \@names= \$key->SubKeyNames;";
+ $self->_enumSubKeys unless $self->{SUBKEYS};
+ return @{$self->{SUBKEYS}};
+}
+
+
+sub SubKeyClasses
+{
+ my $self= shift(@_);
+ @_ and croak "Usage: \@classes= \$key->SubKeyClasses;";
+ $self->_enumSubKeys unless $self->{SUBCLASSES};
+ return @{$self->{SUBCLASSES}};
+}
+
+
+sub SubKeyTimes
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \@times= \$key->SubKeyTimes;";
+ $self->_enumSubKeys unless $self->{SUBTIMES};
+ return @{$self->{SUBTIMES}};
+}
+
+
+sub _MemberNames
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$arrayRef= \$key->_MemberNames;";
+ if( ! $self->{MEMBERS} ) {
+ $self->_enumValues unless $self->{VALUES};
+ $self->_enumSubKeys unless $self->{SUBKEYS};
+ my( @members )= ( map( $_.$self->{DELIM}, @{$self->{SUBKEYS}} ),
+ map( $self->{DELIM}.$_, @{$self->{VALUES}} ) );
+ $self->{MEMBERS}= \@members;
+ }
+ return $self->{MEMBERS};
+}
+
+
+sub _MembersHash
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$hashRef= \$key->_MembersHash;";
+ if( ! $self->{MEMBHASH} ) {
+ my $aRef= $self->_MemberNames;
+ $self->{MEMBHASH}= {};
+ @{$self->{MEMBHASH}}{@$aRef}= (1) x @$aRef;
+ }
+ return $self->{MEMBHASH};
+}
+
+
+sub MemberNames
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \@members= \$key->MemberNames;";
+ return @{$self->_MemberNames};
+}
+
+
+sub Information
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( $time, $nkeys, $nvals, $xsec, $xkey, $xcls, $xname, $xdata )=
+ ("",0,0,0,0,0,0,0);
+ my $clen= 8;
+ if( ! $self->RegQueryInfoKey( [], [], $nkeys, $xkey, $xcls,
+ $nvals, $xname, $xdata, $xsec, $time ) ) {
+ return ();
+ }
+ if( defined($self->{Class}) ) {
+ $clen= length($self->{Class});
+ } else {
+ $self->{Class}= "";
+ }
+ while( ! $self->RegQueryInfoKey( $self->{Class}, $clen,
+ [],[],[],[],[],[],[],[],[])
+ && _MoreData ) {
+ $clen *= 2;
+ }
+ my( %info );
+ @info{ qw( LastWrite CntSubKeys CntValues SecurityLen
+ MaxValDataLen MaxSubKeyLen MaxSubClassLen MaxValNameLen )
+ }= ( $time, $nkeys, $nvals, $xsec,
+ $xdata, $xkey, $xcls, $xname );
+ if( @_ ) {
+ my( %check );
+ @check{keys(%info)}= keys(%info);
+ my( @err )= grep( ! $check{$_}, @_ );
+ if( @err ) {
+ croak "${PACK}::Information- Invalid info requested (@err)";
+ }
+ return @info{@_};
+ } else {
+ return %info;
+ }
+}
+
+
+sub Delimiter
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ $self= $RegObj unless ref($self);
+ my( $oldDelim )= $self->{DELIM};
+ if( 1 == @_ && "" ne "$_[0]" ) {
+ delete $self->{MEMBERS};
+ delete $self->{MEMBHASH};
+ $self->{DELIM}= "$_[0]";
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldDelim= \$key->Delimiter(\$newDelim);";
+ }
+ return $oldDelim;
+}
+
+
+sub Handle
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$handle= \$key->Handle;";
+ $self= $RegObj unless ref($self);
+ return $self->{HANDLE};
+}
+
+
+sub Path
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$path= \$key->Path;";
+ my $delim= $self->{DELIM};
+ $self= $RegObj unless ref($self);
+ if( "" eq $self->{MACHINE} ) {
+ return( $delim . join( $delim, @{$self->{PATH}} ) . $delim );
+ } else {
+ return( $delim x 2
+ . join( $delim, $self->{MACHINE}, @{$self->{PATH}} )
+ . $delim );
+ }
+}
+
+
+sub _Path
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$arrRef= \$key->_Path;";
+ $self= $RegObj unless ref($self);
+ return $self->{PATH};
+}
+
+
+sub Machine
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$machine= \$key->Machine;";
+ $self= $RegObj unless ref($self);
+ return $self->{MACHINE};
+}
+
+
+sub Access
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$access= \$key->Access;";
+ $self= $RegObj unless ref($self);
+ return $self->{ACCESS};
+}
+
+
+sub OS_Delimiter
+{
+ my $self= shift(@_);
+ @_ and croak "Usage: \$backslash= \$key->OS_Delimiter;";
+ return $self->{OS_DELIM};
+}
+
+
+sub _Roots
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if ref($self) && tied(%$self);
+ @_ and croak "Usage: \$varName= \$key->_Roots;";
+ $self= $RegObj unless ref($self);
+ return $self->{ROOTS};
+}
+
+
+sub Roots
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if ref($self) && tied(%$self);
+ @_ and croak "Usage: \$hashRef= \$key->Roots;";
+ $self= $RegObj unless ref($self);
+ return eval "\\%$self->{ROOTS}";
+}
+
+
+sub TIEHASH
+{
+ my( $this )= shift(@_);
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ my( $key )= @_;
+ if( 1 == @_ && ref($key) && "$key" =~ /=/ ) {
+ return $key; # $key is already an object (blessed reference).
+ }
+ return $this->new( @_ );
+}
+
+
+sub Tie
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( $hRef )= @_;
+ if( 1 != @_ || ! ref($hRef) || "$hRef" !~ /(^|=)HASH\(/ ) {
+ croak "Usage: \$key->Tie(\\\%hash);";
+ }
+ return tie %$hRef, ref($self), $self;
+}
+
+
+sub TiedRef
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $hRef= @_ ? shift(@_) : {};
+ return () if ! defined($self);
+ $self->Tie($hRef);
+ bless $hRef, ref($self);
+ return $hRef;
+}
+
+
+sub _Flags
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlags= $self->{FLAGS};
+ if( 1 == @_ ) {
+ $self->{FLAGS}= shift(@_);
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBits= \$key->_Flags(\$newBits);";
+ }
+ return $oldFlags;
+}
+
+
+sub ArrayValues
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_ArrVal == ( $Flag_ArrVal & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ $self->{FLAGS} |= $Flag_ArrVal;
+ } else {
+ $self->{FLAGS} &= ~( $Flag_ArrVal | $Flag_TieVal );
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->ArrayValues(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub TieValues
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_TieVal == ( $Flag_TieVal & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ croak "${PACK}->TieValues cannot be enabled with this version";
+ $self->{FLAGS} |= $Flag_TieVal;
+ } else {
+ $self->{FLAGS} &= ~$Flag_TieVal;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->TieValues(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub FastDelete
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_FastDel == ( $Flag_FastDel & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ $self->{FLAGS} |= $Flag_FastDel;
+ } else {
+ $self->{FLAGS} &= ~$Flag_FastDel;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->FastDelete(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub SplitMultis
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_Split == ( $Flag_Split & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ $self->{FLAGS} |= $Flag_Split;
+ } else {
+ $self->{FLAGS} &= ~$Flag_Split;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->SplitMultis(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub DWordsToHex
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_HexDWord == ( $Flag_HexDWord & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ $self->{FLAGS} |= $Flag_HexDWord;
+ } else {
+ $self->{FLAGS} &= ~$Flag_HexDWord;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->DWordsToHex(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub FixSzNulls
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_FixNulls == ( $Flag_FixNulls & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ $self->{FLAGS} |= $Flag_FixNulls;
+ } else {
+ $self->{FLAGS} &= ~$Flag_FixNulls;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->FixSzNulls(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub DualTypes
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_DualTyp == ( $Flag_DualTyp & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ croak "${PACK}->DualTypes cannot be enabled since ",
+ "SetDualVar module not installed"
+ unless $_SetDualVar;
+ $self->{FLAGS} |= $Flag_DualTyp;
+ } else {
+ $self->{FLAGS} &= ~$Flag_DualTyp;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->DualTypes(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub DualBinVals
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $oldFlag= $Flag_DualBin == ( $Flag_DualBin & $self->{FLAGS} );
+ if( 1 == @_ ) {
+ my $bool= shift(@_);
+ if( $bool ) {
+ croak "${PACK}->DualBinVals cannot be enabled since ",
+ "SetDualVar module not installed"
+ unless $_SetDualVar;
+ $self->{FLAGS} |= $Flag_DualBin;
+ } else {
+ $self->{FLAGS} &= ~$Flag_DualBin;
+ }
+ } elsif( 0 != @_ ) {
+ croak "Usage: \$oldBool= \$key->DualBinVals(\$newBool);";
+ }
+ return $oldFlag;
+}
+
+
+sub GetOptions
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my( $opt, $meth );
+ if( ! @_ || 1 == @_ && "HASH" eq ref($_[0]) ) {
+ my $href= @_ ? $_[0] : {};
+ foreach $opt ( grep !/^Allow/, @_opt_subs ) {
+ $meth= $_opt_subs{$opt};
+ $href->{$opt}= $self->$meth();
+ }
+ return @_ ? $self : $href;
+ }
+ my @old;
+ foreach $opt ( @_ ) {
+ $meth= $_opt_subs{$opt};
+ if( defined $meth ) {
+ if( $opt eq "AllowLoad" || $opt eq "AllowSave" ) {
+ croak "${PACK}->GetOptions: Getting current setting of $opt ",
+ "not supported in this release";
+ }
+ push( @old, $self->$meth() );
+ } else {
+ croak "${PACK}->GetOptions: Invalid option ($opt) ",
+ "not one of ( ", join(" ",grep !/^Allow/, @_opt_subs), " )";
+ }
+ }
+ return wantarray ? @old : $old[-1];
+}
+
+
+sub SetOptions
+{
+ my $self= shift(@_);
+ # Don't get object if hash ref so "ref" returns original ref.
+ my( $opt, $meth, @old );
+ while( @_ ) {
+ $opt= shift(@_);
+ $meth= $_opt_subs{$opt};
+ if( ! @_ ) {
+ croak "${PACK}->SetOptions: Option value missing ",
+ "after option name ($opt)";
+ } elsif( defined $meth ) {
+ push( @old, $self->$meth( shift(@_) ) );
+ } elsif( $opt eq substr("reference",0,length($opt)) ) {
+ shift(@_) if @_;
+ push( @old, $self );
+ } else {
+ croak "${PACK}->SetOptions: Invalid option ($opt) ",
+ "not one of ( @_opt_subs )";
+ }
+ }
+ return wantarray ? @old : $old[-1];
+}
+
+
+sub _parseTiedEnt
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $ent= shift(@_);
+ my $delim= shift(@_);
+ my $dlen= length( $delim );
+ my $parent= @_ ? shift(@_) : 0;
+ my $off;
+ if( $delim x 2 eq substr($ent,0,2*$dlen) && "NONE" eq $self->Handle ) {
+ if( 0 <= ( $off= index( $ent, $delim x 2, 2*$dlen ) ) ) {
+ return( substr( $ent, 0, $off ), substr( $ent, 2*$dlen+$off ) );
+ } elsif( $delim eq substr($ent,-$dlen) ) {
+ return( substr($ent,0,-$dlen) );
+ } elsif( 2*$dlen <= ( $off= rindex( $ent, $delim ) ) ) {
+ return( substr( $ent, 0, $off ),
+ undef, substr( $ent, $dlen+$off ) );
+ } elsif( $parent ) {
+ return();
+ } else {
+ return( $ent );
+ }
+ } elsif( $delim eq substr($ent,0,$dlen) && "NONE" ne $self->Handle ) {
+ return( undef, substr($ent,$dlen) );
+ } elsif( $self->{MEMBERS} && $self->_MembersHash->{$ent} ) {
+ return( substr($ent,0,-$dlen) );
+ } elsif( 0 <= ( $off= index( $ent, $delim x 2 ) ) ) {
+ return( substr( $ent, 0, $off ), substr( $ent, 2*$dlen+$off ) );
+ } elsif( $delim eq substr($ent,-$dlen) ) {
+ if( $parent
+ && 0 <= ( $off= rindex( $ent, $delim, length($ent)-2*$dlen ) ) ) {
+ return( substr($ent,0,$off),
+ undef, undef, substr($ent,$dlen+$off,-$dlen) );
+ } else {
+ return( substr($ent,0,-$dlen) );
+ }
+ } elsif( 0 <= ( $off= rindex( $ent, $delim ) ) ) {
+ return(
+ substr( $ent, 0, $off ), undef, substr( $ent, $dlen+$off ) );
+ } else {
+ return( undef, undef, $ent );
+ }
+}
+
+
+sub _FetchValue
+{
+ my $self= shift( @_ );
+ my( $val, $createKey )= @_;
+ my( $data, $type );
+ if( ( $data, $type )= $self->GetValue( $val ) ) {
+ return $self->ArrayValues ? [ $data, $type ]
+ : wantarray ? ( $data, $type )
+ : $data;
+ } elsif( $createKey and $data= $self->new($val) ) {
+ return $data->TiedRef;
+ } else {
+ return ();
+ }
+}
+
+
+sub FETCH
+{
+ my $self= shift(@_);
+ my $ent= shift(@_);
+ my $delim= $self->Delimiter;
+ my( $key, $val, $ambig )= $self->_parseTiedEnt( $ent, $delim, 0 );
+ my $sub;
+ if( defined($key) ) {
+ if( defined($self->{MEMBHASH})
+ && $self->{MEMBHASH}->{$key.$delim}
+ && 0 <= index($key,$delim) ) {
+ return ()
+ unless $sub= $self->new( $key,
+ {"Delimiter"=>$self->OS_Delimiter} );
+ $sub->Delimiter($delim);
+ } else {
+ return ()
+ unless $sub= $self->new( $key );
+ }
+ } else {
+ $sub= $self;
+ }
+ if( defined($val) ) {
+ return $sub->_FetchValue( $val );
+ } elsif( ! defined($ambig) ) {
+ return $sub->TiedRef;
+ } elsif( defined($key) ) {
+ return $sub->FETCH( $ambig );
+ } else {
+ return $sub->_FetchValue( $ambig, "" ne $ambig );
+ }
+}
+
+
+sub _FetchOld
+{
+ my( $self, $key )= @_;
+ my $old= $self->FETCH($key);
+ if( $old ) {
+ my $copy= {};
+ %$copy= %$old;
+ return $copy;
+ }
+ # return $^E;
+ return _Err;
+}
+
+
+sub DELETE
+{
+ my $self= shift(@_);
+ my $ent= shift(@_);
+ my $delim= $self->Delimiter;
+ my( $key, $val, $ambig, $subkey )= $self->_parseTiedEnt( $ent, $delim, 1 );
+ my $sub;
+ my $fast= defined(wantarray) ? $self->FastDelete : 2;
+ my $old= 1; # Value returned if FastDelete is set.
+ if( defined($key)
+ && ( defined($val) || defined($ambig) || defined($subkey) ) ) {
+ return ()
+ unless $sub= $self->new( $key );
+ } else {
+ $sub= $self;
+ }
+ if( defined($val) ) {
+ $old= $sub->GetValue($val) || _Err unless 2 <= $fast;
+ $sub->RegDeleteValue( $val );
+ } elsif( defined($subkey) ) {
+ $old= $sub->_FetchOld( $subkey.$delim ) unless $fast;
+ $sub->RegDeleteKey( $subkey );
+ } elsif( defined($ambig) ) {
+ if( defined($key) ) {
+ $old= $sub->DELETE($ambig);
+ } else {
+ $old= $sub->GetValue($ambig) || _Err unless 2 <= $fast;
+ if( defined( $old ) ) {
+ $sub->RegDeleteValue( $ambig );
+ } else {
+ $old= $sub->_FetchOld( $ambig.$delim ) unless $fast;
+ $sub->RegDeleteKey( $ambig );
+ }
+ }
+ } elsif( defined($key) ) {
+ $old= $sub->_FetchOld( $key.$delim ) unless $fast;
+ $sub->RegDeleteKey( $key );
+ } else {
+ croak "${PACK}->DELETE: Key ($ent) can never be deleted";
+ }
+ return $old;
+}
+
+
+sub SetValue
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ my $name= shift(@_);
+ my $data= shift(@_);
+ my( $type )= @_;
+ my $size;
+ if( ! defined($type) ) {
+ if( "ARRAY" eq ref($data) ) {
+ croak "${PACK}->SetValue: Value is array reference but ",
+ "no data type given"
+ unless 2 == @$data;
+ ( $data, $type )= @$data;
+ } else {
+ $type= REG_SZ;
+ }
+ }
+ $type= _constant($type,"registry value data type") if $type =~ /^REG_/;
+ if( REG_MULTI_SZ == $type && "ARRAY" eq ref($data) ) {
+ $data= join( "\0", @$data ) . "\0\0";
+ ## $data= pack( "a*" x (1+@$data), map( $_."\0", @$data, "" ) );
+ } elsif( ( REG_SZ == $type || REG_EXPAND_SZ == $type )
+ && $self->FixSzNulls ) {
+ $data .= "\0" unless "\0" eq substr($data,0,-1);
+ } elsif( REG_DWORD == $type && $data =~ /^0x[0-9a-fA-F]{3,}$/ ) {
+ $data= pack( "L", hex($data) );
+ # We could to $data=pack("L",$data) for REG_DWORD but I see
+ # no nice way to always destinguish when to do this or not.
+ }
+ return $self->RegSetValueEx( $name, 0, $type, $data, length($data) );
+}
+
+
+sub StoreKey
+{
+ my $this= shift(@_);
+ $this= tied(%$this) if ref($this) && tied(%$this);
+ my $subKey= shift(@_);
+ my $data= shift(@_);
+ my $ent;
+ my $self;
+ if( ! ref($data) || "$data" !~ /(^|=)HASH/ ) {
+ croak "${PACK}->StoreKey: For ", $this->Path.$subKey, ",\n",
+ " subkey data must be a HASH reference";
+ }
+ if( defined( $$data{""} ) && "HASH" eq ref($$data{""}) ) {
+ $self= $this->CreateKey( $subKey, delete $$data{""} );
+ } else {
+ $self= $this->CreateKey( $subKey );
+ }
+ return () if ! defined($self);
+ foreach $ent ( keys(%$data) ) {
+ return ()
+ unless $self->STORE( $ent, $$data{$ent} );
+ }
+ return $self;
+}
+
+
+# = { "" => {OPT=>VAL}, "val"=>[], "key"=>{} } creates a new key
+# = "string" creates a new REG_SZ value
+# = [ data, type ] creates a new value
+sub STORE
+{
+ my $self= shift(@_);
+ my $ent= shift(@_);
+ my $data= shift(@_);
+ my $delim= $self->Delimiter;
+ my( $key, $val, $ambig, $subkey )= $self->_parseTiedEnt( $ent, $delim, 1 );
+ my $sub;
+ if( defined($key)
+ && ( defined($val) || defined($ambig) || defined($subkey) ) ) {
+ return ()
+ unless $sub= $self->new( $key );
+ } else {
+ $sub= $self;
+ }
+ if( defined($val) ) {
+ croak "${PACK}->STORE: For ", $sub->Path.$delim.$val, ",\n",
+ " value data cannot be a HASH reference"
+ if ref($data) && "$data" =~ /(^|=)HASH/;
+ $sub->SetValue( $val, $data );
+ } elsif( defined($subkey) ) {
+ croak "${PACK}->STORE: For ", $sub->Path.$subkey.$delim, ",\n",
+ " subkey data must be a HASH reference"
+ unless ref($data) && "$data" =~ /(^|=)HASH/;
+ $sub->StoreKey( $subkey, $data );
+ } elsif( defined($ambig) ) {
+ if( ref($data) && "$data" =~ /(^|=)HASH/ ) {
+ $sub->StoreKey( $ambig, $data );
+ } else {
+ $sub->SetValue( $ambig, $data );
+ }
+ } elsif( defined($key) ) {
+ croak "${PACK}->STORE: For ", $sub->Path.$key.$delim, ",\n",
+ " subkey data must be a HASH reference"
+ unless ref($data) && "$data" =~ /(^|=)HASH/;
+ $sub->StoreKey( $key, $data );
+ } else {
+ croak "${PACK}->STORE: Key ($ent) can never be created nor set";
+ }
+}
+
+
+sub EXISTS
+{
+ my $self= shift(@_);
+ my $ent= shift(@_);
+ return defined( $self->FETCH($ent) );
+}
+
+
+sub FIRSTKEY
+{
+ my $self= shift(@_);
+ my $members= $self->_MemberNames;
+ $self->{PREVIDX}= 0;
+ return @{$members} ? $members->[0] : undef;
+}
+
+
+sub NEXTKEY
+{
+ my $self= shift(@_);
+ my $prev= shift(@_);
+ my $idx= $self->{PREVIDX};
+ my $members= $self->_MemberNames;
+ if( ! defined($idx) || $prev ne $members->[$idx] ) {
+ $idx= 0;
+ while( $idx < @$members && $prev ne $members->[$idx] ) {
+ $idx++;
+ }
+ }
+ $self->{PREVIDX}= ++$idx;
+ return $members->[$idx];
+}
+
+
+sub DESTROY
+{
+ my $self= shift(@_);
+ return if tied(%$self);
+ my $unload;
+ local $@;
+ eval { $unload= $self->{UNLOADME}; 1 }
+ or return;
+ my $debug= $ENV{DEBUG_TIE_REGISTRY};
+ if( defined($debug) ) {
+ if( 1 < $debug ) {
+ my $hand= $self->Handle;
+ my $dep= $self->{DEPENDON};
+ carp "${PACK} destroying ", $self->Path, " (",
+ "NONE" eq $hand ? $hand : sprintf("0x%lX",$hand), ")",
+ defined($dep) ? (" [depends on ",$dep->Path,"]") : ();
+ } else {
+ warn "${PACK} destroying ", $self->Path, ".\n";
+ }
+ }
+ $self->RegCloseKey
+ unless "NONE" eq $self->Handle;
+ if( defined($unload) ) {
+ if( defined($debug) && 1 < $debug ) {
+ my( $obj, $subKey, $file )= @$unload;
+ warn "Unloading ", $self->Path,
+ " (from ", $obj->Path, ", $subKey)...\n";
+ }
+ $self->UnLoad
+ || warn "Couldn't unload ", $self->Path, ": ", _ErrMsg, "\n";
+ ## carp "Never unloaded ${PACK}::Load($$unload[2])";
+ }
+ #delete $self->{DEPENDON};
+}
+
+
+use vars qw( @CreateKey_Opts %CreateKey_Opts %_KeyDispNames );
+@CreateKey_Opts= qw( Access Class Options Delimiter
+ Disposition Security Volatile Backup );
+@CreateKey_Opts{@CreateKey_Opts}= (1) x @CreateKey_Opts;
+%_KeyDispNames= ( REG_CREATED_NEW_KEY() => "REG_CREATED_NEW_KEY",
+ REG_OPENED_EXISTING_KEY() => "REG_OPENED_EXISTING_KEY" );
+
+sub CreateKey
+{
+ my $self= shift(@_);
+ my $tied= tied(%$self);
+ $self= tied(%$self) if $tied;
+ my( $subKey, $opts )= @_;
+ my( $sam )= $self->Access;
+ my( $delim )= $self->Delimiter;
+ my( $class )= "";
+ my( $flags )= 0;
+ my( $secure )= [];
+ my( $garb )= [];
+ my( $result )= \$garb;
+ my( $handle )= 0;
+ if( @_ < 1 || 2 < @_
+ || 2 == @_ && "HASH" ne ref($opts) ) {
+ croak "Usage: \$new= \$old->CreateKey( \$subKey, {OPT=>VAL,...} );\n",
+ " options: @CreateKey_Opts\nCalled";
+ }
+ if( defined($opts) ) {
+ $sam= $opts->{"Access"} if defined($opts->{"Access"});
+ $class= $opts->{Class} if defined($opts->{Class});
+ $flags= $opts->{Options} if defined($opts->{Options});
+ $delim= $opts->{"Delimiter"} if defined($opts->{"Delimiter"});
+ $secure= $opts->{Security} if defined($opts->{Security});
+ if( defined($opts->{Disposition}) ) {
+ "SCALAR" eq ref($opts->{Disposition})
+ or croak "${PACK}->CreateKey option `Disposition'",
+ " must provide a scalar reference";
+ $result= $opts->{Disposition};
+ }
+ if( 0 == $flags ) {
+ $flags |= REG_OPTION_VOLATILE
+ if defined($opts->{Volatile}) && $opts->{Volatile};
+ $flags |= REG_OPTION_BACKUP_RESTORE
+ if defined($opts->{Backup}) && $opts->{Backup};
+ }
+ }
+ my $subPath= ref($subKey) ? $subKey : $self->_split($subKey,$delim);
+ $subKey= join( $self->OS_Delimiter, @$subPath );
+ $self->RegCreateKeyEx( $subKey, 0, $class, $flags, $sam,
+ $secure, $handle, $$result )
+ or return ();
+ if( ! ref($$result) && $self->DualTypes ) {
+ $$result= _DualVal( \%_KeyDispNames, $$result );
+ }
+ my $new= $self->_new( $handle, [ @{$self->_Path}, @{$subPath} ] );
+ $new->{ACCESS}= $sam;
+ $new->{DELIM}= $delim;
+ $new= $new->TiedRef if $tied;
+ return $new;
+}
+
+
+use vars qw( $Load_Cnt @Load_Opts %Load_Opts );
+$Load_Cnt= 0;
+@Load_Opts= qw(NewSubKey);
+@Load_Opts{@Load_Opts}= (1) x @Load_Opts;
+
+sub Load
+{
+ my $this= shift(@_);
+ my $tied= ref($this) && tied(%$this);
+ $this= tied(%$this) if $tied;
+ my( $file, $subKey, $opts )= @_;
+ if( 2 == @_ && "HASH" eq ref($subKey) ) {
+ $opts= $subKey;
+ undef $subKey;
+ }
+ @_ < 1 || 3 < @_ || defined($opts) && "HASH" ne ref($opts)
+ and croak "Usage: \$key= ",
+ "${PACK}->Load( \$fileName, [\$newSubKey,] {OPT=>VAL...} );\n",
+ " options: @Load_Opts @new_Opts\nCalled";
+ if( defined($opts) && exists($opts->{NewSubKey}) ) {
+ $subKey= delete $opts->{NewSubKey};
+ }
+ if( ! defined( $subKey ) ) {
+ if( "" ne $this->Machine ) {
+ ( $this )= $this->_connect( [$this->Machine,"LMachine"] );
+ } else {
+ ( $this )= $this->_rootKey( "LMachine" ); # Could also be "Users"
+ }
+ $subKey= "PerlTie:$$." . ++$Load_Cnt;
+ }
+ $this->RegLoadKey( $subKey, $file )
+ or return ();
+ my $self= $this->new( $subKey, defined($opts) ? $opts : () );
+ if( ! defined( $self ) ) {
+ { my $err= Win32::GetLastError();
+ #{ local( $^E ); #}
+ $this->RegUnLoadKey( $subKey ) or carp
+ "Can't unload $subKey from ", $this->Path, ": ", _ErrMsg, "\n";
+ Win32::SetLastError($err);
+ }
+ return ();
+ }
+ $self->{UNLOADME}= [ $this, $subKey, $file ];
+ $self= $self->TiedRef if $tied;
+ return $self;
+}
+
+
+sub UnLoad
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ @_ and croak "Usage: \$key->UnLoad;";
+ my $unload= $self->{UNLOADME};
+ "ARRAY" eq ref($unload)
+ or croak "${PACK}->UnLoad called on a key which was not Load()ed";
+ my( $obj, $subKey, $file )= @$unload;
+ $self->RegCloseKey;
+ return Win32API::Registry::RegUnLoadKey( $obj->Handle, $subKey );
+}
+
+
+sub AllowSave
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ return $self->AllowPriv( "SeBackupPrivilege", @_ );
+}
+
+
+sub AllowLoad
+{
+ my $self= shift(@_);
+ $self= tied(%$self) if tied(%$self);
+ return $self->AllowPriv( "SeRestorePrivilege", @_ );
+}
+
+
+# RegNotifyChangeKeyValue( hKey, bWatchSubtree, iNotifyFilter, hEvent, bAsync )
+
+
+sub RegCloseKey { my $self= shift(@_);
+ Win32API::Registry::RegCloseKey $self->Handle, @_; }
+sub RegConnectRegistry { my $self= shift(@_);
+ Win32API::Registry::RegConnectRegistry @_; }
+sub RegCreateKey { my $self= shift(@_);
+ Win32API::Registry::RegCreateKey $self->Handle, @_; }
+sub RegCreateKeyEx { my $self= shift(@_);
+ Win32API::Registry::RegCreateKeyEx $self->Handle, @_; }
+sub RegDeleteKey { my $self= shift(@_);
+ Win32API::Registry::RegDeleteKey $self->Handle, @_; }
+sub RegDeleteValue { my $self= shift(@_);
+ Win32API::Registry::RegDeleteValue $self->Handle, @_; }
+sub RegEnumKey { my $self= shift(@_);
+ Win32API::Registry::RegEnumKey $self->Handle, @_; }
+sub RegEnumKeyEx { my $self= shift(@_);
+ Win32API::Registry::RegEnumKeyEx $self->Handle, @_; }
+sub RegEnumValue { my $self= shift(@_);
+ Win32API::Registry::RegEnumValue $self->Handle, @_; }
+sub RegFlushKey { my $self= shift(@_);
+ Win32API::Registry::RegFlushKey $self->Handle, @_; }
+sub RegGetKeySecurity { my $self= shift(@_);
+ Win32API::Registry::RegGetKeySecurity $self->Handle, @_; }
+sub RegLoadKey { my $self= shift(@_);
+ Win32API::Registry::RegLoadKey $self->Handle, @_; }
+sub RegNotifyChangeKeyValue { my $self= shift(@_);
+ Win32API::Registry::RegNotifyChangeKeyValue $self->Handle, @_; }
+sub RegOpenKey { my $self= shift(@_);
+ Win32API::Registry::RegOpenKey $self->Handle, @_; }
+sub RegOpenKeyEx { my $self= shift(@_);
+ Win32API::Registry::RegOpenKeyEx $self->Handle, @_; }
+sub RegQueryInfoKey { my $self= shift(@_);
+ Win32API::Registry::RegQueryInfoKey $self->Handle, @_; }
+sub RegQueryMultipleValues { my $self= shift(@_);
+ Win32API::Registry::RegQueryMultipleValues $self->Handle, @_; }
+sub RegQueryValue { my $self= shift(@_);
+ Win32API::Registry::RegQueryValue $self->Handle, @_; }
+sub RegQueryValueEx { my $self= shift(@_);
+ Win32API::Registry::RegQueryValueEx $self->Handle, @_; }
+sub RegReplaceKey { my $self= shift(@_);
+ Win32API::Registry::RegReplaceKey $self->Handle, @_; }
+sub RegRestoreKey { my $self= shift(@_);
+ Win32API::Registry::RegRestoreKey $self->Handle, @_; }
+sub RegSaveKey { my $self= shift(@_);
+ Win32API::Registry::RegSaveKey $self->Handle, @_; }
+sub RegSetKeySecurity { my $self= shift(@_);
+ Win32API::Registry::RegSetKeySecurity $self->Handle, @_; }
+sub RegSetValue { my $self= shift(@_);
+ Win32API::Registry::RegSetValue $self->Handle, @_; }
+sub RegSetValueEx { my $self= shift(@_);
+ Win32API::Registry::RegSetValueEx $self->Handle, @_; }
+sub RegUnLoadKey { my $self= shift(@_);
+ Win32API::Registry::RegUnLoadKey $self->Handle, @_; }
+sub AllowPriv { my $self= shift(@_);
+ Win32API::Registry::AllowPriv @_; }
+
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::TieRegistry - Powerful and easy ways to manipulate a registry
+[on Win32 for now].
+
+=head1 SYNOPSIS
+
+ use Win32::TieRegistry 0.20 ( UseOptionName=>UseOptionValue[,...] );
+
+ $Registry->SomeMethodCall(arg1,...);
+
+ $subKey= $Registry->{"Key\\SubKey\\"};
+ $valueData= $Registry->{"Key\\SubKey\\\\ValueName"};
+ $Registry->{"Key\\SubKey\\"}= { "NewSubKey" => {...} };
+ $Registry->{"Key\\SubKey\\\\ValueName"}= "NewValueData";
+ $Registry->{"\\ValueName"}= [ pack("fmt",$data), REG_DATATYPE ];
+
+=head1 EXAMPLES
+
+ use Win32::TieRegistry( Delimiter=>"#", ArrayValues=>0 );
+ $pound= $Registry->Delimiter("/");
+ $diskKey= $Registry->{"LMachine/System/Disk/"}
+ or die "Can't read LMachine/System/Disk key: $^E\n";
+ $data= $key->{"/Information"}
+ or die "Can't read LMachine/System/Disk//Information value: $^E\n";
+ $remoteKey= $Registry->{"//ServerA/LMachine/System/"}
+ or die "Can't read //ServerA/LMachine/System/ key: $^E\n";
+ $remoteData= $remoteKey->{"Disk//Information"}
+ or die "Can't read ServerA's System/Disk//Information value: $^E\n";
+ foreach $entry ( keys(%$diskKey) ) {
+ ...
+ }
+ foreach $subKey ( $diskKey->SubKeyNames ) {
+ ...
+ }
+ $diskKey->AllowSave( 1 );
+ $diskKey->RegSaveKey( "C:/TEMP/DiskReg", [] );
+
+=head1 DESCRIPTION
+
+The I<Win32::TieRegistry> module lets you manipulate the Registry
+via objects [as in "object oriented"] or via tied hashes. But
+you will probably mostly use a combination reference, that is, a
+reference to a tied hash that has also been made an object so that
+you can mix both access methods [as shown above].
+
+If you did not get this module as part of L<libwin32>, you might
+want to get a recent version of L<libwin32> from CPAN which should
+include this module and the I<Win32API::Registry> module that it
+uses.
+
+Skip to the L<SUMMARY> section if you just want to dive in and start
+using the Registry from Perl.
+
+Accessing and manipulating the registry is extremely simple using
+I<Win32::TieRegistry>. A single, simple expression can return
+you almost any bit of information stored in the Registry.
+I<Win32::TieRegistry> also gives you full access to the "raw"
+underlying API calls so that you can do anything with the Registry
+in Perl that you could do in C. But the "simple" interface has
+been carefully designed to handle almost all operations itself
+without imposing arbitrary limits while providing sensible
+defaults so you can list only the parameters you care about.
+
+But first, an overview of the Registry itself.
+
+=head2 The Registry
+
+The Registry is a forest: a collection of several tree structures.
+The root of each tree is a key. These root keys are identified by
+predefined constants whose names start with "HKEY_". Although all
+keys have a few attributes associated with each [a class, a time
+stamp, and security information], the most important aspect of keys
+is that each can contain subkeys and can contain values.
+
+Each subkey has a name: a string which cannot be blank and cannot
+contain the delimiter character [backslash: C<'\\'>] nor nul
+[C<'\0'>]. Each subkey is also a key and so can contain subkeys
+and values [and has a class, time stamp, and security information].
+
+Each value has a name: a string which E<can> be blank and E<can>
+contain the delimiter character [backslash: C<'\\'>] and any
+character except for null, C<'\0'>. Each value also has data
+associated with it. Each value's data is a contiguous chunk of
+bytes, which is exactly what a Perl string value is so Perl
+strings will usually be used to represent value data.
+
+Each value also has a data type which says how to interpret the
+value data. The primary data types are:
+
+=over
+
+=item REG_SZ
+
+A null-terminated string.
+
+=item REG_EXPAND_SZ
+
+A null-terminated string which contains substrings consisting of a
+percent sign [C<'%'>], an environment variable name, then a percent
+sign, that should be replaced with the value associate with that
+environment variable. The system does I<not> automatically do this
+substitution.
+
+=item REG_BINARY
+
+Some arbitrary binary value. You can think of these as being
+"packed" into a string.
+
+If your system has the L<SetDualVar> module installed,
+the C<DualBinVals()> option wasn't turned off, and you
+fetch a C<REG_BINARY> value of 4 bytes or fewer, then
+you can use the returned value in a numeric context to
+get at the "unpacked" numeric value. See C<GetValue()>
+for more information.
+
+=item REG_MULTI_SZ
+
+Several null-terminated strings concatenated together with an
+extra trailing C<'\0'> at the end of the list. Note that the list
+can include empty strings so use the value's length to determine
+the end of the list, not the first occurrence of C<'\0\0'>.
+It is best to set the C<SplitMultis()> option so I<Win32::TieRegistry>
+will split these values into an array of strings for you.
+
+=item REG_DWORD
+
+A long [4-byte] integer value. These values are expected either
+packed into a 4-character string or as a hex string of E<more than>
+4 characters [but I<not> as a numeric value, unfortunately, as there is
+no sure way to tell a numeric value from a packed 4-byte string that
+just happens to be a string containing a valid numeric value].
+
+How such values are returned depends on the C<DualBinVals()> and
+C<DWordsToHex()> options. See C<GetValue()> for details.
+
+=back
+
+In the underlying Registry calls, most places which take a
+subkey name also allow you to pass in a subkey "path" -- a
+string of several subkey names separated by the delimiter
+character, backslash [C<'\\'>]. For example, doing
+C<RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM\\DISK",...)> is much
+like opening the C<"SYSTEM"> subkey of C<HKEY_LOCAL_MACHINE>,
+then opening its C<"DISK"> subkey, then closing the C<"SYSTEM">
+subkey.
+
+All of the I<Win32::TieRegistry> features allow you to use your
+own delimiter in place of the system's delimiter, [C<'\\'>]. In
+most of our examples we will use a forward slash [C<'/'>] as our
+delimiter as it is easier to read and less error prone to use when
+writing Perl code since you have to type two backslashes for each
+backslash you want in a string. Note that this is true even when
+using single quotes -- C<'\\HostName\LMachine\'> is an invalid
+string and must be written as C<'\\\\HostName\\LMachine\\'>.
+
+You can also connect to the registry of other computers on your
+network. This will be discussed more later.
+
+Although the Registry does not have a single root key, the
+I<Win32::TieRegistry> module creates a virtual root key for you
+which has all of the I<HKEY_*> keys as subkeys.
+
+=head2 Tied Hashes Documentation
+
+Before you can use a tied hash, you must create one. One way to
+do that is via:
+
+ use Win32::TieRegistry ( TiedHash => '%RegHash' );
+
+which exports a C<%RegHash> variable into your package and ties it
+to the virtual root key of the Registry. An alternate method is:
+
+ my %RegHash;
+ use Win32::TieRegistry ( TiedHash => \%RegHash );
+
+There are also several ways you can tie a hash variable to any
+other key of the Registry, which are discussed later.
+
+Note that you will most likely use C<$Registry> instead of using
+a tied hash. C<$Registry> is a reference to a hash that has
+been tied to the virtual root of your computer's Registry [as if,
+C<$Registry= \%RegHash>]. So you would use C<$Registry-E<gt>{Key}>
+rather than C<$RegHash{Key}> and use C<keys %{$Registry}> rather
+than C<keys %RegHash>, for example.
+
+For each hash which has been tied to a Registry key, the Perl
+C<keys> function will return a list containing the name of each
+of the key's subkeys with a delimiter character appended to it and
+containing the name of each of the key's values with a delimiter
+prepended to it. For example:
+
+ keys( %{ $Registry->{"HKEY_CLASSES_ROOT\\batfile\\"} } )
+
+might yield the following list value:
+
+ ( "DefaultIcon\\", # The subkey named "DefaultIcon"
+ "shell\\", # The subkey named "shell"
+ "shellex\\", # The subkey named "shellex"
+ "\\", # The default value [named ""]
+ "\\EditFlags" ) # The value named "EditFlags"
+
+For the virtual root key, short-hand subkey names are used as
+shown below. You can use the short-hand name, the regular
+I<HKEY_*> name, or any numeric value to access these keys, but
+the short-hand names are all that will be returned by the C<keys>
+function.
+
+=over
+
+=item "Classes" for HKEY_CLASSES_ROOT
+
+Contains mappings between file name extensions and the uses
+for such files along with configuration information for COM
+[MicroSoft's Common Object Model] objects. Usually a link to
+the C<"SOFTWARE\\Classes"> subkey of the C<HKEY_LOCAL_MACHINE>
+key.
+
+=item "CUser" for HKEY_CURRENT_USER
+
+Contains information specific to the currently logged-in user.
+Mostly software configuration information. Usually a link to
+a subkey of the C<HKEY_USERS> key.
+
+=item "LMachine" for HKEY_LOCAL_MACHINE
+
+Contains all manner of information about the computer.
+
+=item "Users" for HKEY_USERS
+
+Contains one subkey, C<".DEFAULT">, which gets copied to a new
+subkey whenever a new user is added. Also contains a subkey for
+each user of the system, though only those for active users
+[usually only one] are loaded at any given time.
+
+=item "PerfData" for HKEY_PERFORMANCE_DATA
+
+Used to access data about system performance. Access via this key
+is "special" and all but the most carefully constructed calls will
+fail, usually with C<ERROR_INSUFFICIENT_BUFFER>. For example, you
+can't enumerate key names without also enumerating values which
+require huge buffers but the exact buffer size required cannot be
+determined beforehand because C<RegQueryInfoKey()> E<always> fails
+with C<ERROR_INSUFFICIENT_BUFFER> for C<HKEY_PERFORMANCE_DATA> no
+matter how it is called. So it is currently not very useful to
+tie a hash to this key. You can use it to create an object to use
+for making carefully constructed calls to the underlying Reg*()
+routines.
+
+=item "CConfig" for HKEY_CURRENT_CONFIG
+
+Contains minimal information about the computer's current
+configuration that is required very early in the boot process.
+For example, setting for the display adapter such as screen
+resolution and refresh rate are found in here.
+
+=item "DynData" for HKEY_DYN_DATA
+
+Dynamic data. We have found no documentation for this key.
+
+=back
+
+A tied hash is much like a regular hash variable in Perl -- you give
+it a key string inside braces, [C<{> and C<}>], and it gives you
+back a value [or lets you set a value]. For I<Win32::TieRegistry>
+hashes, there are two types of values that will be returned.
+
+=over
+
+=item SubKeys
+
+If you give it a string which represents a subkey, then it will
+give you back a reference to a hash which has been tied to that
+subkey. It can't return the hash itself, so it returns a
+reference to it. It also blesses that reference so that it is
+also an object so you can use it to call method functions.
+
+=item Values
+
+If you give it a string which is a value name, then it will give
+you back a string which is the data for that value. Alternately,
+you can request that it give you both the data value string and
+the data value type [we discuss how to request this later]. In
+this case, it would return a reference to an array where the value
+data string is element C<[0]> and the value data type is element
+C<[1]>.
+
+=back
+
+The key string which you use in the tied hash must be interpreted
+to determine whether it is a value name or a key name or a path
+that combines several of these or even other things. There are
+two simple rules that make this interpretation easy and
+unambiguous:
+
+ Put a delimiter after each key name.
+ Put a delimiter in front of each value name.
+
+Exactly how the key string will be intepreted is governed by the
+following cases, in the order listed. These cases are designed
+to "do what you mean". Most of the time you won't have to think
+about them, especially if you follow the two simple rules above.
+After the list of cases we give several examples which should be
+clear enough so feel free to skip to them unless you are worried
+about the details.
+
+=over
+
+=item Remote machines
+
+If the hash is tied to the virtual root of the registry [or the
+virtual root of a remote machine's registry], then we treat hash
+key strings which start with the delimiter character specially.
+
+If the hash key string starts with two delimiters in a row, then
+those should be immediately followed by the name of a remote
+machine whose registry we wish to connect to. That can be
+followed by a delimiter and more subkey names, etc. If the
+machine name is not following by anything, then a virtual root
+for the remote machine's registry is created, a hash is tied to
+it, and a reference to that hash it is returned.
+
+=item Hash key string starts with the delimiter
+
+If the hash is tied to a virtual root key, then the leading
+delimiter is ignored. It should be followed by a valid Registry
+root key name [either a short-hand name like C<"LMachine">, an
+I<HKEY_*> value, or a numeric value]. This alternate notation is
+allowed in order to be more consistant with the C<Open()> method
+function.
+
+For all other Registry keys, the leading delimiter indicates
+that the rest of the string is a value name. The leading
+delimiter is stripped and the rest of the string [which can
+be empty and can contain more delimiters] is used as a value
+name with no further parsing.
+
+=item Exact match with direct subkey name followed by delimiter
+
+If you have already called the Perl C<keys> function on the tied
+hash [or have already called C<MemberNames> on the object] and the
+hash key string exactly matches one of the strings returned, then
+no further parsing is done. In other words, if the key string
+exactly matches the name of a direct subkey with a delimiter
+appended, then a reference to a hash tied to that subkey is
+returned [but only if C<keys> or C<MemberNames> has already
+been called for that tied hash].
+
+This is only important if you have selected a delimiter other than
+the system default delimiter and one of the subkey names contains
+the delimiter you have chosen. This rule allows you to deal with
+subkeys which contain your chosen delimiter in their name as long
+as you only traverse subkeys one level at a time and always
+enumerate the list of members before doing so.
+
+The main advantage of this is that Perl code which recursively
+traverses a hash will work on hashes tied to Registry keys even if
+a non-default delimiter has been selected.
+
+=item Hash key string contains two delimiters in a row
+
+If the hash key string contains two [or more] delimiters in a row,
+then the string is split between the first pair of delimiters.
+The first part is interpreted as a subkey name or a path of subkey
+names separated by delimiters and with a trailing delimiter. The
+second part is interpreted as a value name with one leading
+delimiter [any extra delimiters are considered part of the value
+name].
+
+=item Hash key string ends with a delimiter
+
+If the key string ends with a delimiter, then it is treated
+as a subkey name or path of subkey names separated by delimiters.
+
+=item Hash key string contains a delimiter
+
+If the key string contains a delimiter, then it is split after
+the last delimiter. The first part is treated as a subkey name or
+path of subkey names separated by delimiters. The second part
+is ambiguous and is treated as outlined in the next item.
+
+=item Hash key string contains no delimiters
+
+If the hash key string contains no delimiters, then it is ambiguous.
+
+If you are reading from the hash [fetching], then we first use the
+key string as a value name. If there is a value with a matching
+name in the Registry key which the hash is tied to, then the value
+data string [and possibly the value data type] is returned.
+Otherwise, we retry by using the hash key string as a subkey name.
+If there is a subkey with a matching name, then we return a
+reference to a hash tied to that subkey. Otherwise we return
+C<undef>.
+
+If you are writing to the hash [storing], then we use the key
+string as a subkey name only if the value you are storing is a
+reference to a hash value. Otherwise we use the key string as
+a value name.
+
+=back
+
+=head3 Examples
+
+Here are some examples showing different ways of accessing Registry
+information using references to tied hashes:
+
+=over
+
+=item Canonical value fetch
+
+ $tip18= $Registry->{"HKEY_LOCAL_MACHINE\\Software\\Microsoft\\"
+ . 'Windows\\CurrentVersion\\Explorer\\Tips\\\\18'};
+
+Should return the text of important tip number 18. Note that two
+backslashes, C<"\\">, are required to get a single backslash into
+a Perl double-quoted or single-qouted string. Note that C<"\\">
+is appended to each key name [C<"HKEY_LOCAL_MACHINE"> through
+C<"Tips">] and C<"\\"> is prepended to the value name, C<"18">.
+
+=item Changing your delimiter
+
+ $Registry->Delimiter("/");
+ $tip18= $Registry->{"HKEY_LOCAL_MACHINE/Software/Microsoft/"
+ . 'Windows/CurrentVersion/Explorer/Tips//18'};
+
+This usually makes things easier to read when working in Perl.
+All remaining examples will assume the delimiter has been changed
+as above.
+
+=item Using intermediate keys
+
+ $ms= $Registry->{"LMachine/Software/Microsoft/"};
+ $tips= $ms->{"Windows/CurrentVersion/Explorer/Tips/"};
+ $tip18= $winlogon->{"/18"};
+
+Same as above but opens more keys into the Registry which lets you
+efficiently re-access those intermediate keys. This is slightly
+less efficient if you never reuse those intermediate keys.
+
+=item Chaining in a single statement
+
+ $tip18= $Registry->{"LMachine/Software/Microsoft/"}->
+ {"Windows/CurrentVersion/Explorer/Tips/"}->{"/18"};
+
+Like above, this creates intermediate key objects then uses
+them to access other data. Once this statement finishes, the
+intermediate key objects are destroyed. Several handles into
+the Registry are opened and closed by this statement so it is
+less efficient but there are times when this will be useful.
+
+=item Even less efficient example of chaining
+
+ $tip18= $Registry->{"LMachine/Software/Microsoft"}->
+ {"Windows/CurrentVersion/Explorer/Tips"}->{"/18"};
+
+Because we left off the trailing delimiters, I<Win32::TieRegistry>
+doesn't know whether final names, C<"Microsoft"> and C<"Tips">,
+are subkey names or value names. So this statement ends up
+executing the same code as the next one.
+
+=item What the above really does
+
+ $tip18= $Registry->{"LMachine/Software/"}->{"Microsoft"}->
+ {"Windows/CurrentVersion/Explorer/"}->{"Tips"}->{"/18"};
+
+With more chains to go through, more temporary objects are created
+and later destroyed than in our first chaining example. Also,
+when C<"Microsoft"> is looked up, I<Win32::TieRegistry> first
+tries to open it as a value and fails then tries it as a subkey.
+The same is true for when it looks up C<"Tips">.
+
+=item Getting all of the tips
+
+ $tips= $Registry->{"LMachine/Software/Microsoft/"}->
+ {"Windows/CurrentVersion/Explorer/Tips/"}
+ or die "Can't find the Windows tips: $^E\n";
+ foreach( keys %$tips ) {
+ print "$_: ", $tips->{$_}, "\n";
+ }
+
+First notice that we actually check for failure for the first
+time. We are assuming that the C<"Tips"> key contains no subkeys.
+Otherwise the C<print> statement would show something like
+C<"Win32::TieRegistry=HASH(0xc03ebc)"> for each subkey.
+
+The output from the above code will start something like:
+
+ /0: If you don't know how to do something,[...]
+
+=back
+
+=head3 Deleting items
+
+You can use the Perl C<delete> function to delete a value from a
+Registry key or to delete a subkey as long that subkey contains
+no subkeys of its own. See L<More Examples>, below, for more
+information.
+
+=head3 Storing items
+
+You can use the Perl assignment operator [C<=>] to create new
+keys, create new values, or replace values. The values you store
+should be in the same format as the values you would fetch from a
+tied hash. For example, you can use a single assignment statement
+to copy an entire Registry tree. The following statement:
+
+ $Registry->{"LMachine/Software/Classes/Tie_Registry/"}=
+ $Registry->{"LMachine/Software/Classes/batfile/"};
+
+creates a C<"Tie_Registry"> subkey under the C<"Software\\Classes">
+subkey of the C<HKEY_LOCAL_MACHINE> key. Then it populates it
+with copies of all of the subkeys and values in the C<"batfile">
+subkey and all of its subkeys. Note that you need to have
+called C<$Registry-E<gt>ArrayValues(1)> for the proper value data
+type information to be copied. Note also that this release of
+I<Win32::TieRegistry> does not copy key attributes such as class
+name and security information [this is planned for a future release].
+
+The following statement creates a whole subtree in the Registry:
+
+ $Registry->{"LMachine/Software/FooCorp/"}= {
+ "FooWriter/" => {
+ "/Version" => "4.032",
+ "Startup/" => {
+ "/Title" => "Foo Writer Deluxe ][",
+ "/WindowSize" => [ pack("LL",$wid,$ht), "REG_BINARY" ],
+ "/TaskBarIcon" => [ "0x0001", "REG_DWORD" ],
+ },
+ "Compatibility/" => {
+ "/AutoConvert" => "Always",
+ "/Default Palette" => "Windows Colors",
+ },
+ },
+ "/License", => "0123-9C8EF1-09-FC",
+ };
+
+Note that all but the last Registry key used on the left-hand
+side of the assignment [that is, "LMachine/Software/" but not
+"FooCorp/"] must already exist for this statement to succeed.
+
+By using the leading a trailing delimiters on each subkey name and
+value name, I<Win32::TieRegistry> will tell you if you try to assign
+subkey information to a value or visa-versa.
+
+=head3 More examples
+
+=over
+
+=item Adding a new tip
+
+ $tips= $Registry->{"LMachine/Software/Microsoft/"}->
+ {"Windows/CurrentVersion/Explorer/Tips/"}
+ or die "Can't find the Windows tips: $^E\n";
+ $tips{'/186'}= "Be very careful when making changes to the Registry!";
+
+=item Deleting our new tip
+
+ $tips= $Registry->{"LMachine/Software/Microsoft/"}->
+ {"Windows/CurrentVersion/Explorer/Tips/"}
+ or die "Can't find the Windows tips: $^E\n";
+ $tip186= delete $tips{'/186'};
+
+Note that Perl's C<delete> function returns the value that was deleted.
+
+=item Adding a new tip differently
+
+ $Registry->{"LMachine/Software/Microsoft/" .
+ "Windows/CurrentVersion/Explorer/Tips//186"}=
+ "Be very careful when making changes to the Registry!";
+
+=item Deleting differently
+
+ $tip186= delete $Registry->{"LMachine/Software/Microsoft/Windows/" .
+ "CurrentVersion/Explorer/Tips//186"};
+
+Note that this only deletes the tail of what we looked up, the
+C<"186"> value, not any of the keys listed.
+
+=item Deleting a key
+
+WARNING: The following code will delete all information about the
+current user's tip preferences. Actually executing this command
+would probably cause the user to see the Welcome screen the next
+time they log in and may cause more serious problems. This
+statement is shown as an example only and should not be used when
+experimenting.
+
+ $tips= delete $Registry->{"CUser/Software/Microsoft/Windows/" .
+ "CurrentVersion/Explorer/Tips/"};
+
+This deletes the C<"Tips"> key and the values it contains. The
+C<delete> function will return a reference to a hash [not a tied
+hash] containing the value names and value data that were deleted.
+
+The information to be returned is copied from the Registry into a
+regular Perl hash before the key is deleted. If the key has many
+subkeys, this copying could take a significant amount of memory
+and/or processor time. So you can disable this process by calling
+the C<FastDelete> member function:
+
+ $prevSetting= $regKey->FastDelete(1);
+
+which will cause all subsequent delete operations via C<$regKey>
+to simply return a true value if they succeed. This optimization
+is automatically done if you use C<delete> in a void context.
+
+=item Technical notes on deleting
+
+If you use C<delete> to delete a Registry key or value and use
+the return value, then I<Win32::TieRegistry> usually looks up the
+current contents of that key or value so they can be returned if
+the deletion is successful. If the deletion succeeds but the
+attempt to lookup the old contents failed, then the return value
+of C<delete> will be C<$^E> from the failed part of the operation.
+
+=item Undeleting a key
+
+ $Registry->{"LMachine/Software/Microsoft/Windows/" .
+ "CurrentVersion/Explorer/Tips/"}= $tips;
+
+This adds back what we just deleted. Note that this version of
+I<Win32::TieRegistry> will use defaults for the key attributes
+[such as class name and security] and will not restore the
+previous attributes.
+
+=item Not deleting a key
+
+WARNING: Actually executing the following code could cause
+serious problems. This statement is shown as an example only and
+should not be used when experimenting.
+
+ $res= delete $Registry->{"CUser/Software/Microsoft/Windows/"}
+ defined($res) || die "Can't delete URL key: $^E\n";
+
+Since the "Windows" key should contain subkeys, that C<delete>
+statement should make no changes to the Registry, return C<undef>,
+and set C<$^E> to "Access is denied".
+
+=item Not deleting again
+
+ $tips= $Registry->{"CUser/Software/Microsoft/Windows/" .
+ "CurrentVersion/Explorer/Tips/"};
+ delete $tips;
+
+The Perl C<delete> function requires that its argument be an
+expression that ends in a hash element lookup [or hash slice],
+which is not the case here. The C<delete> function doesn't
+know which hash $tips came from and so can't delete it.
+
+=back
+
+=head2 Objects Documentation
+
+The following member functions are defined for use on
+I<Win32::TieRegistry> objects:
+
+=over
+
+=item new
+
+The C<new> method creates a new I<Win32::TieRegistry> object.
+C<new> is mostly a synonym for C<Open()> so see C<Open()> below for
+information on what arguments to pass in. Examples:
+
+ $machKey= new Win32::TieRegistry "LMachine"
+ or die "Can't access HKEY_LOCAL_MACHINE key: $^E\n";
+ $userKey= Win32::TieRegistry->new("CUser")
+ or die "Can't access HKEY_CURRENT_USER key: $^E\n";
+
+Note that calling C<new> via a reference to a tied hash returns
+a simple object, not a reference to a tied hash.
+
+=item Open
+
+=item $subKey= $key->Open( $sSubKey, $rhOptions )
+
+The C<Open> method opens a Registry key and returns a new
+I<Win32::TieRegistry> object associated with that Registry key.
+If C<Open> is called via a reference to a tied hash, then C<Open>
+returns another reference to a tied hash. Otherwise C<Open>
+returns a simple object and you should then use C<TiedRef> to get
+a reference to a tied hash.
+
+C<$sSubKey> is a string specifying a subkey to be opened.
+Alternately C<$sSubKey> can be a reference to an array value
+containing the list of increasingly deep subkeys specifying the
+path to the subkey to be opened.
+
+C<$rhOptions> is an optional reference to a hash containing extra
+options. The C<Open> method supports two options, C<"Delimiter">
+and C<"Access">, and C<$rhOptions> should have only have zero or
+more of these strings as keys. See the "Examples" section below
+for more information.
+
+The C<"Delimiter"> option specifies what string [usually a single
+character] will be used as the delimiter to be appended to subkey
+names and prepended to value names. If this option is not specified,
+the new key [C<$subKey>] inherits the delimiter of the old key
+[C<$key>].
+
+The C<"Access"> option specifies what level of access to the
+Registry key you wish to have once it has been opened. If this
+option is not specified, the new key [C<$subKey>] is opened with
+the same access level used when the old key [C<$key>] was opened.
+The virtual root of the Registry pretends it was opened with
+access C<KEY_READ()|KEY_WRITE()> so this is the default access when
+opening keys directory via C<$Registry>. If you don't plan on
+modifying a key, you should open it with C<KEY_READ> access as
+you may not have C<KEY_WRITE> access to it or some of its subkeys.
+
+If the C<"Access"> option value is a string that starts with
+C<"KEY_">, then it should match E<one> of the predefined access
+levels [probably C<"KEY_READ">, C<"KEY_WRITE">, or
+C<"KEY_ALL_ACCESS">] exported by the I<Win32API::Registry> module.
+Otherwise, a numeric value is expected. For maximum flexibility,
+include C<use Win32::TieRegistry qw(:KEY_);>, for example, near
+the top of your script so you can specify more complicated access
+levels such as C<KEY_READ()|KEY_WRITE()>.
+
+If C<$sSubKey> does not begin with the delimiter [or C<$sSubKey>
+is an array reference], then the path to the subkey to be opened
+will be relative to the path of the original key [C<$key>]. If
+C<$sSubKey> begins with a single delimiter, then the path to the
+subkey to be opened will be relative to the virtual root of the
+Registry on whichever machine the original key resides. If
+C<$sSubKey> begins with two consectutive delimiters, then those
+must be followed by a machine name which causes the C<Connect()>
+method function to be called.
+
+Examples:
+
+ $machKey= $Registry->Open( "LMachine", {Access=>KEY_READ(),Delimiter=>"/"} )
+ or die "Can't open HKEY_LOCAL_MACHINE key: $^E\n";
+ $swKey= $machKey->Open( "Software" );
+ $logonKey= $swKey->Open( "Microsoft/Windows NT/CurrentVersion/Winlogon/" );
+ $NTversKey= $swKey->Open( ["Microsoft","Windows NT","CurrentVersion"] );
+ $versKey= $swKey->Open( qw(Microsoft Windows CurrentVersion) );
+
+ $remoteKey= $Registry->Open( "//HostA/LMachine/System/", {Delimiter=>"/"} )
+ or die "Can't connect to HostA or can't open subkey: $^E\n";
+
+=item Clone
+
+=item $copy= $key->Clone
+
+Creates a new object that is associated with the same Registry key
+as the invoking object.
+
+=item Connect
+
+=item $remoteKey= $Registry->Connect( $sMachineName, $sKeyPath, $rhOptions )
+
+The C<Connect> method connects to the Registry of a remote machine,
+and opens a key within it, then returns a new I<Win32::TieRegistry>
+object associated with that remote Registry key. If C<Connect>
+was called using a reference to a tied hash, then the return value
+will also be a reference to a tied hash [or C<undef>]. Otherwise,
+if you wish to use the returned object as a tied hash [not just as
+an object], then use the C<TiedRef> method function after C<Connect>.
+
+C<$sMachineName> is the name of the remote machine. You don't have
+to preceed the machine name with two delimiter characters.
+
+C<$sKeyPath> is a string specifying the remote key to be opened.
+Alternately C<$sKeyPath> can be a reference to an array value
+containing the list of increasingly deep keys specifying the path
+to the key to be opened.
+
+C<$rhOptions> is an optional reference to a hash containing extra
+options. The C<Connect> method supports two options, C<"Delimiter">
+and C<"Access">. See the C<Open> method documentation for more
+information on these options.
+
+C<$sKeyPath> is already relative to the virtual root of the Registry
+of the remote machine. A single leading delimiter on C<sKeyPath>
+will be ignored and is not required.
+
+C<$sKeyPath> can be empty in which case C<Connect> will return an
+object representing the virtual root key of the remote Registry.
+Each subsequent use of C<Open> on this virtual root key will call
+the system C<RegConnectRegistry> function.
+
+The C<Connect> method can be called via any I<Win32::TieRegistry>
+object, not just C<$Registry>. Attributes such as the desired
+level of access and the delimiter will be inherited from the
+object used but the C<$sKeyPath> will always be relative to the
+virtual root of the remote machine's registry.
+
+Examples:
+
+ $remMachKey= $Registry->Connect( "HostA", "LMachine", {Delimiter->"/"} )
+ or die "Can't connect to HostA's HKEY_LOCAL_MACHINE key: $^E\n";
+
+ $remVersKey= $remMachKey->Connect( "www.microsoft.com",
+ "LMachine/Software/Microsoft/Inetsrv/CurrentVersion/",
+ { Access=>KEY_READ, Delimiter=>"/" } )
+ or die "Can't check what version of IIS Microsoft is running: $^E\n";
+
+ $remVersKey= $remMachKey->Connect( "www",
+ qw(LMachine Software Microsoft Inetsrv CurrentVersion) )
+ or die "Can't check what version of IIS we are running: $^E\n";
+
+=item ObjectRef
+
+=item $object_ref= $obj_or_hash_ref->ObjectRef
+
+For a simple object, just returns itself [C<$obj == $obj->ObjectRef>].
+
+For a reference to a tied hash [if it is also an object], C<ObjectRef>
+returns the simple object that the hash is tied to.
+
+This is primarilly useful when debugging since typing C<x $Registry>
+will try to display your I<entire> registry contents to your screen.
+But the debugger command C<x $Registry->ObjectRef> will just dump
+the implementation details of the underlying object to your screen.
+
+=item Flush( $bFlush )
+
+Flushes all cached information about the Registry key so that future
+uses will get fresh data from the Registry.
+
+If the optional C<$bFlush> is specified and a true value, then
+C<RegFlushKey()> will be called, which is almost never necessary.
+
+=item GetValue
+
+=item $ValueData= $key->GetValue( $sValueName )
+
+=item ($ValueData,$ValueType)= $key->GetValue( $sValueName )
+
+Gets a Registry value's data and data type.
+
+C<$ValueData> is usually just a Perl string that contains the
+value data [packed into it]. For certain types of data, however,
+C<$ValueData> may be processed as described below.
+
+C<$ValueType> is the C<REG_*> constant describing the type of value
+data stored in C<$ValueData>. If the C<DualTypes()> option is on,
+then C<$ValueType> will be a dual value. That is, when used in a
+numeric context, C<$ValueType> will give the numeric value of a
+C<REG_*> constant. However, when used in a non-numeric context,
+C<$ValueType> will return the name of the C<REG_*> constant, for
+example C<"REG_SZ"> [note the quotes]. So both of the following
+can be true at the same time:
+
+ $ValueType == REG_SZ()
+ $ValueType eq "REG_SZ"
+
+=over
+
+=item REG_SZ and REG_EXPAND_SZ
+
+If the C<FixSzNulls()> option is on, then the trailing C<'\0'> will be
+stripped [unless there isn't one] before values of type C<REG_SZ>
+and C<REG_EXPAND_SZ> are returned. Note that C<SetValue()> will add
+a trailing C<'\0'> under similar circumstances.
+
+=item REG_MULTI_SZ
+
+If the C<SplitMultis()> option is on, then values of this type are
+returned as a reference to an array containing the strings. For
+example, a value that, with C<SplitMultis()> off, would be returned as:
+
+ "Value1\000Value2\000\000"
+
+would be returned, with C<SplitMultis()> on, as:
+
+ [ "Value1", "Value2" ]
+
+=item REG_DWORD
+
+If the C<DualBinVals()> option is on, then the value is returned
+as a scalar containing both a string and a number [much like
+the C<$!> variable -- see the L<SetDualVar> module for more
+information] where the number part is the "unpacked" value.
+Use the returned value in a numeric context to access this part
+of the value. For example:
+
+ $num= 0 + $Registry->{"CUser/Console//ColorTable01"};
+
+If the C<DWordsToHex()> option is off, the string part of the
+returned value is a packed, 4-byte string [use C<unpack("L",$value)>
+to get the numeric value.
+
+If C<DWordsToHex()> is on, the string part of the returned value is
+a 10-character hex strings [with leading "0x"]. You can use
+C<hex($value)> to get the numeric value.
+
+Note that C<SetValue()> will properly understand each of these
+returned value formats no matter how C<DualBinVals()> is set.
+
+=back
+
+=item ValueNames
+
+=item @names= $key->ValueNames
+
+Returns the list of value names stored directly in a Registry key.
+Note that the names returned do I<not> have a delimiter prepended
+to them like with C<MemberNames()> and tied hashes.
+
+Once you request this information, it is cached in the object and
+future requests will always return the same list unless C<Flush()>
+has been called.
+
+=item SubKeyNames
+
+=item @key_names= $key->SubKeyNames
+
+Returns the list of subkey names stored directly in a Registry key.
+Note that the names returned do I<not> have a delimiter appended
+to them like with C<MemberNames()> and tied hashes.
+
+Once you request this information, it is cached in the object and
+future requests will always return the same list unless C<Flush()>
+has been called.
+
+=item SubKeyClasses
+
+=item @classes= $key->SubKeyClasses
+
+Returns the list of classes for subkeys stored directly in a
+Registry key. The classes are returned in the same order as
+the subkey names returned by C<SubKeyNames()>.
+
+=item SubKeyTimes
+
+=item @times= $key->SubKeyTimes
+
+Returns the list of last-modified times for subkeys stored
+directly in a Registry key. The times are returned in the same
+order as the subkey names returned by C<SubKeyNames()>. Each
+time is a C<FILETIME> structure packed into a Perl string.
+
+Once you request this information, it is cached in the object and
+future requests will always return the same list unless C<Flush()>
+has been called.
+
+=item MemberNames
+
+=item @members= $key->MemberNames
+
+Returns the list of subkey names and value names stored directly
+in a Registry key. Subkey names have a delimiter appended to the
+end and value names have a delimiter prepended to the front.
+
+Note that a value name could end in a delimiter [or could be C<"">
+so that the member name returned is just a delimiter] so the
+presence or absence of the leading delimiter is what should be
+used to determine whether a particular name is for a subkey or a
+value, not the presence or absence of a trailing delimiter.
+
+Once you request this information, it is cached in the object and
+future requests will always return the same list unless C<Flush()>
+has been called.
+
+=item Information
+
+=item %info= $key->Information
+
+=item @items= $key->Information( @itemNames );
+
+Returns the following information about a Registry key:
+
+=over
+
+=item LastWrite
+
+A C<FILETIME> structure indicating when the key was last modified
+and packed into a Perl string.
+
+=item CntSubKeys
+
+The number of subkeys stored directly in this key.
+
+=item CntValues
+
+The number of values stored directly in this key.
+
+=item SecurityLen
+
+The length [in bytes] of the largest[?] C<SECURITY_DESCRIPTOR>
+associated with the Registry key.
+
+=item MaxValDataLen
+
+The length [in bytes] of the longest value data associated with
+a value stored in this key.
+
+=item MaxSubKeyLen
+
+The length [in chars] of the longest subkey name associated with
+a subkey stored in this key.
+
+=item MaxSubClassLen
+
+The length [in chars] of the longest class name associated with
+a subkey stored directly in this key.
+
+=item MaxValNameLen
+
+The length [in chars] of the longest value name associated with
+a value stored in this key.
+
+=back
+
+With no arguments, returns a hash [not a reference to a hash] where
+the keys are the names for the items given above and the values
+are the information describe above. For example:
+
+ %info= ( "CntValues" => 25, # Key contains 25 values.
+ "MaxValNameLen" => 20, # One of which has a 20-char name.
+ "MaxValDataLen" => 42, # One of which has a 42-byte value.
+ "CntSubKeys" => 1, # Key has 1 immediate subkey.
+ "MaxSubKeyLen" => 13, # One of which has a 12-char name.
+ "MaxSubClassLen" => 0, # All of which have class names of "".
+ "SecurityLen" => 232, # One SECURITY_DESCRIPTOR is 232 bytes.
+ "LastWrite" => "\x90mZ\cX{\xA3\xBD\cA\c@\cA"
+ # Key was last modifed 1998/06/01 16:29:32 GMT
+ );
+
+With arguments, each one must be the name of a item given above.
+The return value is the information associated with the listed
+names. In other words:
+
+ return $key->Information( @names );
+
+returns the same list as:
+
+ %info= $key->Information;
+ return @info{@names};
+
+=item Delimiter
+
+=item $oldDelim= $key->Delimiter
+
+=item $oldDelim= $key->Delimiter( $newDelim )
+
+Gets and possibly changes the delimiter used for this object. The
+delimiter is appended to subkey names and prepended to value names
+in many return values. It is also used when parsing keys passed
+to tied hashes.
+
+The delimiter defaults to backslash (C<'\\'>) but is inherited from
+the object used to create a new object and can be specified by an
+option when a new object is created.
+
+=item Handle
+
+=item $handle= $key->Handle
+
+Returns the raw C<HKEY> handle for the associated Registry key as
+an integer value. This value can then be used to Reg*() calls
+from I<Win32API::Registry>. However, it is usually easier to just
+call the I<Win32API::Registry> calls directly via:
+
+ $key->RegNotifyChangeKeyValue( ... );
+
+For the virtual root of the local or a remote Registry,
+C<Handle()> return C<"NONE">.
+
+=item Path
+
+=item $path= $key->Path
+
+Returns a string describing the path of key names to this
+Registry key. The string is built so that if it were passed
+to C<$Registry->Open()>, it would reopen the same Registry key
+[except in the rare case where one of the key names contains
+C<$key->Delimiter>].
+
+=item Machine
+
+=item $computerName= $key->Machine
+
+Returns the name of the computer [or "machine"] on which this Registry
+key resides. Returns C<""> for local Registry keys.
+
+=item Access
+
+Returns the numeric value of the bit mask used to specify the
+types of access requested when this Registry key was opened. Can
+be compared to C<KEY_*> values.
+
+=item OS_Delimiter
+
+Returns the delimiter used by the operating system's RegOpenKeyEx()
+call. For Win32, this is always backslash (C<"\\">).
+
+=item Roots
+
+Returns the mapping from root key names like C<"LMachine"> to their
+associated C<HKEY_*> constants. Primarily for internal use and
+subject to change.
+
+=item Tie
+
+=item $key->Tie( \%hash );
+
+Ties the referenced hash to that Registry key. Pretty much the
+same as
+
+ tie %hash, ref($key), $key;
+
+Since C<ref($key)> is the class [package] to tie the hash to and
+C<TIEHASH()> just returns its argument, C<$key>, [without calling
+C<new()>] when it sees that it is already a blessed object.
+
+=item TiedRef
+
+=item $TiedHashRef= $hash_or_obj_ref->TiedRef
+
+For a simple object, returns a reference to a hash tied to the
+object. Used to promote a simple object into a combined object
+and hash ref.
+
+If already a reference to a tied hash [that is also an object],
+it just returns itself [C<$ref == $ref->TiedRef>].
+
+Mostly used internally.
+
+=item ArrayValues
+
+=item $oldBool= $key->ArrayValues
+
+=item $oldBool= $key->ArrayValues( $newBool )
+
+Gets the current setting of the C<ArrayValues> option and possibly
+turns it on or off.
+
+When off, Registry values fetched via a tied hash are returned as
+just a value scalar [the same as C<GetValue()> in a scalar context].
+When on, they are returned as a reference to an array containing
+the value data as the C<[0]> element and the data type as the C<[1]>
+element.
+
+=item TieValues
+
+=item $oldBool= TieValues
+
+=item $oldBool= TieValues( $newBool )
+
+Gets the current setting of the C<TieValues> option and possibly
+turns it on or off.
+
+Turning this option on is not yet supported in this release of
+I<Win32::TieRegistry>. In a future release, turning this option
+on will cause Registry values returned from a tied hash to be
+a tied array that you can use to modify the value in the Registry.
+
+=item FastDelete
+
+=item $oldBool= $key->FastDelete
+
+=item $oldBool= $key->FastDelete( $newBool )
+
+Gets the current setting of the C<FastDelete> option and possibly
+turns it on or off.
+
+When on, successfully deleting a Registry key [via a tied hash]
+simply returns C<1>.
+
+When off, successfully deleting a Registry key [via a tied hash
+and not in a void context] returns a reference to a hash that
+contains the values present in the key when it was deleted. This
+hash is just like that returned when referencing the key before it
+was deleted except that it is an ordinary hash, not one tied to
+the I<Win32::TieRegistry> package.
+
+Note that deleting either a Registry key or value via a tied hash
+I<in a void context> prevents any overhead in trying to build an
+appropriate return value.
+
+Note that deleting a Registry I<value> via a tied hash [not in
+a void context] returns the value data even if <FastDelete> is on.
+
+=item SplitMultis
+
+=item $oldBool= $key->SplitMultis
+
+=item $oldBool= $key->SplitMultis( $newBool )
+
+Gets the current setting of the C<SplitMultis> option and possibly
+turns it on or off.
+
+If on, Registry values of type C<REG_MULTI_SZ> are returned as
+a reference to an array of strings. See C<GetValue()> for more
+information.
+
+=item DWordsToHex
+
+=item $oldBool= $key->DWordsToHex
+
+=item $oldBool= $key->DWordsToHex( $newBool )
+
+Gets the current setting of the C<DWordsToHex> option and possibly
+turns it on or off.
+
+If on, Registry values of type C<REG_DWORD> are returned as a hex
+string with leading C<"0x"> and longer than 4 characters. See
+C<GetValue()> for more information.
+
+=item FixSzNulls
+
+=item $oldBool= $key->FixSzNulls
+
+=item $oldBool= $key->FixSzNulls( $newBool )
+
+Gets the current setting of the C<FixSzNulls> option and possibly
+turns it on or off.
+
+If on, Registry values of type C<REG_SZ> and C<REG_EXPAND_SZ> have
+trailing C<'\0'>s added before they are set and stripped before
+they are returned. See C<GetValue()> and C<SetValue()> for more
+information.
+
+=item DualTypes
+
+=item $oldBool= $key->DualTypes
+
+=item $oldBool= $key->DualTypes( $newBool )
+
+Gets the current setting of the C<DualTypes> option and possibly
+turns it on or off.
+
+If on, data types are returned as a combined numeric/string value
+holding both the numeric value of a C<REG_*> constant and the
+string value of the constant's name. See C<GetValue()> for
+more information.
+
+=item DualBinVals
+
+=item $oldBool= $key->DualBinVals
+
+=item $oldBool= $key->DualBinVals( $newBool )
+
+Gets the current setting of the C<DualBinVals> option and possibly
+turns it on or off.
+
+If on, Registry value data of type C<REG_BINARY> and no more than
+4 bytes long and Registry values of type C<REG_DWORD> are returned
+as a combined numeric/string value where the numeric value is the
+"unpacked" binary value as returned by:
+
+ hex reverse unpack( "h*", $valData )
+
+on a "little-endian" computer. [Would be C<hex unpack("H*",$valData)>
+on a "big-endian" computer if this module is ever ported to one.]
+
+See C<GetValue()> for more information.
+
+=item GetOptions
+
+=item @oldOptValues= $key->GetOptions( @optionNames )
+
+=item $refHashOfOldOpts= $key->GetOptions()
+
+=item $key->GetOptions( \%hashForOldOpts )
+
+Returns the current setting of any of the following options:
+
+ Delimiter FixSzNulls DWordsToHex
+ ArrayValues SplitMultis DualBinVals
+ TieValues FastDelete DualTypes
+
+Pass in one or more of the above names (as strings) to get back
+an array of the corresponding current settings in the same order:
+
+ my( $fastDel, $delim )= $key->GetOptions("FastDelete","Delimiter");
+
+Pass in no arguments to get back a reference to a hash where
+the above option names are the keys and the values are
+the corresponding current settings for each option:
+
+ my $href= $key->GetOptions();
+ my $delim= $href->{Delimiter};
+
+Pass in a single reference to a hash to have the above key/value
+pairs I<added> to the referenced hash. For this case, the
+return value is the original object so further methods can be
+chained after the call to GetOptions:
+
+ my %oldOpts;
+ $key->GetOptions( \%oldOpts )->SetOptions( Delimiter => "/" );
+
+=item SetOptions
+
+=item @oldOpts= $key->SetOptions( optNames=>$optValue,... )
+
+Changes the current setting of any of the following options,
+returning the previous setting(s):
+
+ Delimiter FixSzNulls DWordsToHex AllowLoad
+ ArrayValues SplitMultis DualBinVals AllowSave
+ TieValues FastDelete DualTypes
+
+For C<AllowLoad> and C<AllowSave>, instead of the previous
+setting, C<SetOptions> returns whether or not the change was
+successful.
+
+In a scalar context, returns only the last item. The last
+option can also be specified as C<"ref"> or C<"r"> [which doesn't
+need to be followed by a value] to allow chaining:
+
+ $key->SetOptions(AllowSave=>1,"ref")->RegSaveKey(...)
+
+=item SetValue
+
+=item $okay= $key->SetValue( $ValueName, $ValueData );
+
+=item $okay= $key->SetValue( $ValueName, $ValueData, $ValueType );
+
+Adds or replaces a Registry value. Returns a true value if
+successfully, false otherwise.
+
+C<$ValueName> is the name of the value to add or replace and
+should I<not> have a delimiter prepended to it. Case is ignored.
+
+C<$ValueType> is assumed to be C<REG_SZ> if it is omitted. Otherwise,
+it should be one the C<REG_*> constants.
+
+C<$ValueData> is the data to be stored in the value, probably packed
+into a Perl string. Other supported formats for value data are
+listed below for each posible C<$ValueType>.
+
+=over
+
+=item REG_SZ or REG_EXPAND_SZ
+
+The only special processing for these values is the addition of
+the required trailing C<'\0'> if it is missing. This can be
+turned off by disabling the C<FixSzNulls> option.
+
+=item REG_MULTI_SZ
+
+These values can also be specified as a reference to a list of
+strings. For example, the following two lines are equivalent:
+
+ $key->SetValue( "Val1\000Value2\000LastVal\000\000", "REG_MULTI_SZ" );
+ $key->SetValue( ["Val1","Value2","LastVal"], "REG_MULTI_SZ" );
+
+Note that if the required two trailing nulls (C<"\000\000">) are
+missing, then this release of C<SetValue()> will I<not> add them.
+
+=item REG_DWORD
+
+These values can also be specified as a hex value with the leading
+C<"0x"> included and totaling I<more than> 4 bytes. These will be
+packed into a 4-byte string via:
+
+ $data= pack( "L", hex($data) );
+
+=item REG_BINARY
+
+This value type is listed just to emphasize that no alternate
+format is supported for it. In particular, you should I<not> pass
+in a numeric value for this type of data. C<SetValue()> cannot
+distinguish such from a packed string that just happens to match
+a numeric value and so will treat it as a packed string.
+
+=back
+
+An alternate calling format:
+
+ $okay= $key->SetValue( $ValueName, [ $ValueData, $ValueType ] );
+
+[two arguments, the second of which is a reference to an array
+containing the value data and value type] is supported to ease
+using tied hashes with C<SetValue()>.
+
+=item CreateKey
+
+=item $newKey= $key->CreateKey( $subKey );
+
+=item $newKey= $key->CreateKey( $subKey, { Option=>OptVal,... } );
+
+Creates a Registry key or just updates attributes of one. Calls
+C<RegCreateKeyEx()> then, if it succeeded, creates an object
+associated with the [possibly new] subkey.
+
+C<$subKey> is the name of a subkey [or a path to one] to be
+created or updated. It can also be a reference to an array
+containing a list of subkey names.
+
+The second argument, if it exists, should be a reference to a
+hash specifying options either to be passed to C<RegCreateKeyEx()>
+or to be used when creating the associated object. The following
+items are the supported keys for this options hash:
+
+=over
+
+=item Delimiter
+
+Specifies the delimiter to be used to parse C<$subKey> and to be
+used in the new object. Defaults to C<$key->Delimiter>.
+
+=item Access
+
+Specifies the types of access requested when the subkey is opened.
+Should be a numeric bit mask that combines one or more C<KEY_*>
+constant values.
+
+=item Class
+
+The name to assign as the class of the new or updated subkey.
+Defaults to C<""> as we have never seen a use for this information.
+
+=item Disposition
+
+Lets you specify a reference to a scalar where, upon success, will be
+stored either C<REG_CREATED_NEW_KEY()> or C<REG_OPENED_EXISTING_KEY()>
+depending on whether a new key was created or an existing key was
+opened.
+
+If you, for example, did C<use Win32::TieRegistry qw(REG_CREATED_NEW_KEY)>
+then you can use C<REG_CREATED_NEW_KEY()> to compare against the numeric
+value stored in the referenced scalar.
+
+If the C<DualTypes> option is enabled, then in addition to the
+numeric value described above, the referenced scalar will also
+have a string value equal to either C<"REG_CREATED_NEW_KEY"> or
+C<"REG_OPENED_EXISTING_KEY">, as appropriate.
+
+=item Security
+
+Lets you specify a C<SECURITY_ATTRIBUTES> structure packed into a
+Perl string. See C<Win32API::Registry::RegCreateKeyEx()> for more
+information.
+
+=item Volatile
+
+If true, specifies that the new key should be volatile, that is,
+stored only in memory and not backed by a hive file [and not saved
+if the computer is rebooted]. This option is ignored under
+Windows 95. Specifying C<Volatile=E<GT>1> is the same as
+specifying C<Options=E<GT>REG_OPTION_VOLATILE>.
+
+=item Backup
+
+If true, specifies that the new key should be opened for
+backup/restore access. The C<Access> option is ignored. If the
+calling process has enabled C<"SeBackupPrivilege">, then the
+subkey is opened with C<KEY_READ> access as the C<"LocalSystem">
+user which should have access to all subkeys. If the calling
+process has enabled C<"SeRestorePrivilege">, then the subkey is
+opened with C<KEY_WRITE> access as the C<"LocalSystem"> user which
+should have access to all subkeys.
+
+This option is ignored under Windows 95. Specifying C<Backup=E<GT>1>
+is the same as specifying C<Options=E<GT>REG_OPTION_BACKUP_RESTORE>.
+
+=item Options
+
+Lets you specify options to the C<RegOpenKeyEx()> call. The value
+for this option should be a numeric value combining zero or more
+of the C<REG_OPTION_*> bit masks. You may with to used the
+C<Volatile> and/or C<Backup> options instead of this one.
+
+=back
+
+=item StoreKey
+
+=item $newKey= $key->StoreKey( $subKey, \%Contents );
+
+Primarily for internal use.
+
+Used to create or update a Registry key and any number of subkeys
+or values under it or its subkeys.
+
+C<$subKey> is the name of a subkey to be created [or a path of
+subkey names separated by delimiters]. If that subkey already
+exists, then it is updated.
+
+C<\%Contents> is a reference to a hash containing pairs of
+value names with value data and/or subkey names with hash
+references similar to C<\%Contents>. Each of these cause
+a value or subkey of C<$subKey> to be created or updated.
+
+If C<$Contents{""}> exists and is a reference to a hash, then
+it used as the options argument when C<CreateKey()> is called
+for C<$subKey>. This allows you to specify ...
+
+ if( defined( $$data{""} ) && "HASH" eq ref($$data{""}) ) {
+ $self= $this->CreateKey( $subKey, delete $$data{""} );
+
+=item Load
+
+=item $newKey= $key->Load( $file )
+
+=item $newKey= $key->Load( $file, $newSubKey )
+
+=item $newKey= $key->Load( $file, $newSubKey, { Option=>OptVal... } )
+
+=item $newKey= $key->Load( $file, { Option=>OptVal... } )
+
+Loads a hive file into a Registry. That is, creates a new subkey
+and associates a hive file with it.
+
+C<$file> is a hive file, that is a file created by calling
+C<RegSaveKey()>. The C<$file> path is interpreted relative to
+C<%SystemRoot%/System32/config> on the machine where C<$key>
+resides.
+
+C<$newSubKey> is the name to be given to the new subkey. If
+C<$newSubKey> is specified, then C<$key> must be
+C<HKEY_LOCAL_MACHINE> or C<HKEY_USERS> of the local computer
+or a remote computer and C<$newSubKey> should not contain any
+occurrences of either the delimiter or the OS delimiter.
+
+If C<$newSubKey> is not specified, then it is as if C<$key>
+was C<$Registry-E<GT>{LMachine}> and C<$newSubKey> is
+C<"PerlTie:999"> where C<"999"> is actually a sequence number
+incremented each time this process calls C<Load()>.
+
+You can specify as the last argument a reference to a hash
+containing options. You can specify the same options that you
+can specify to C<Open()>. See C<Open()> for more information on
+those. In addition, you can specify the option C<"NewSubKey">.
+The value of this option is interpretted exactly as if it was
+specified as the C<$newSubKey> parameter and overrides the
+C<$newSubKey> if one was specified.
+
+The hive is automatically unloaded when the returned object
+[C<$newKey>] is destroyed. Registry key objects opened within
+the hive will keep a reference to the C<$newKey> object so that
+it will not be destroyed before these keys are closed.
+
+=item UnLoad
+
+=item $okay= $key->UnLoad
+
+Unloads a hive that was loaded via C<Load()>. Cannot unload other
+hives. C<$key> must be the return from a previous call to C<Load()>.
+C<$key> is closed and then the hive is unloaded.
+
+=item AllowSave
+
+=item $okay= AllowSave( $bool )
+
+Enables or disables the C<"ReBackupPrivilege"> privilege for the
+current process. You will probably have to enable this privilege
+before you can use C<RegSaveKey()>.
+
+The return value indicates whether the operation succeeded, not
+whether the privilege was previously enabled.
+
+=item AllowLoad
+
+=item $okay= AllowLoad( $bool )
+
+Enables or disables the C<"ReRestorePrivilege"> privilege for the
+current process. You will probably have to enable this privilege
+before you can use C<RegLoadKey()>, C<RegUnLoadKey()>,
+C<RegReplaceKey()>, or C<RegRestoreKey> and thus C<Load()> and
+C<UnLoad()>.
+
+The return value indicates whether the operation succeeded, not
+whether the privilege was previously enabled.
+
+=back
+
+=head2 Exports [C<use> and C<import()>]
+
+To have nothing imported into your package, use something like:
+
+ use Win32::TieRegistry 0.20 ();
+
+which would verify that you have at least version 0.20 but wouldn't
+call C<import()>. The F<Changes> file can be useful in figuring out
+which, if any, prior versions of I<Win32::TieRegistry> you want to
+support in your script.
+
+The code
+
+ use Win32::TieRegistry;
+
+imports the variable C<$Registry> into your package and sets it
+to be a reference to a hash tied to a copy of the master Registry
+virtual root object with the default options. One disadvantage
+to this "default" usage is that Perl does not support checking
+the module version when you use it.
+
+Alternately, you can specify a list of arguments on the C<use>
+line that will be passed to the C<Win32::TieRegistry->import()>
+method to control what items to import into your package. These
+arguments fall into the following broad categories:
+
+=over
+
+=item Import a reference to a hash tied to a Registry virtual root
+
+You can request that a scalar variable be imported (possibly)
+and set to be a reference to a hash tied to a Registry virtual root
+using any of the following types of arguments or argument pairs:
+
+=over
+
+=item "TiedRef", '$scalar'
+
+=item "TiedRef", '$pack::scalar'
+
+=item "TiedRef", 'scalar'
+
+=item "TiedRef", 'pack::scalar'
+
+All of the above import a scalar named C<$scalar> into your package
+(or the package named "pack") and then sets it.
+
+=item '$scalar'
+
+=item '$pack::scalar'
+
+These are equivalent to the previous items to support a more
+traditional appearance to the list of exports. Note that the
+scalar name cannot be "RegObj" here.
+
+=item "TiedRef", \$scalar
+
+=item \$scalar
+
+These versions don't import anything but set the referenced C<$scalar>.
+
+=back
+
+=item Import a hash tied to the Registry virtual root
+
+You can request that a hash variable be imported (possibly)
+and tied to a Registry virtual root using any of the following
+types of arguments or argument pairs:
+
+=over
+
+=item "TiedHash", '%hash'
+
+=item "TiedHash", '%pack::hash'
+
+=item "TiedHash", 'hash'
+
+=item "TiedHash", 'pack::hash'
+
+All of the above import a hash named C<%hash> into your package
+(or the package named "pack") and then sets it.
+
+=item '%hash'
+
+=item '%pack::hash'
+
+These are equivalent to the previous items to support a more
+traditional appearance to the list of exports.
+
+=item "TiedHash", \%hash
+
+=item \%hash
+
+These versions don't import anything but set the referenced C<%hash>.
+
+=back
+
+=item Import a Registry virtual root object
+
+You can request that a scalar variable be imported (possibly)
+and set to be a Registry virtual root object using any of the
+following types of arguments or argument pairs:
+
+=over
+
+=item "ObjectRef", '$scalar'
+
+=item "ObjectRef", '$pack::scalar'
+
+=item "ObjectRef", 'scalar'
+
+=item "ObjectRef", 'pack::scalar'
+
+All of the above import a scalar named C<$scalar> into your package
+(or the package named "pack") and then sets it.
+
+=item '$RegObj'
+
+This is equivalent to the previous items for backward compatibility.
+
+=item "ObjectRef", \$scalar
+
+This version doesn't import anything but sets the referenced C<$scalar>.
+
+=back
+
+=item Import constant(s) exported by I<Win32API::Registry>
+
+You can list any constants that are exported by I<Win32API::Registry>
+to have them imported into your package. These constants have names
+starting with "KEY_" or "REG_" (or even "HKEY_").
+
+You can also specify C<":KEY_">, C<":REG_">, and even C<":HKEY_"> to
+import a whole set of constants.
+
+See I<Win32API::Registry> documentation for more information.
+
+=item Options
+
+You can list any option names that can be listed in the C<SetOptions()>
+method call, each folowed by the value to use for that option.
+A Registry virtual root object is created, all of these options are
+set for it, then each variable to be imported/set is associated with
+this object.
+
+In addition, the following special options are supported:
+
+=over
+
+=item ExportLevel
+
+Whether to import variables into your package or some
+package that uses your package. Defaults to the value of
+C<$Exporter::ExportLevel> and has the same meaning. See
+the L<Exporter> module for more information.
+
+=item ExportTo
+
+The name of the package to import variables and constants into.
+Overrides I<ExportLevel>.
+
+=back
+
+=back
+
+=head3 Specifying constants in your Perl code
+
+This module was written with a strong emphasis on the convenience of
+the module user. Therefore, most places where you can specify a
+constant like C<REG_SZ()> also allow you to specify a string
+containing the name of the constant, C<"REG_SZ">. This is convenient
+because you may not have imported that symbolic constant.
+
+Perl also emphasizes programmer convenience so the code C<REG_SZ>
+can be used to mean C<REG_SZ()> or C<"REG_SZ"> or be illegal.
+Note that using C<&REG_SZ> (as we've seen in much Win32 Perl code)
+is not a good idea since it passes the current C<@_> to the
+C<constant()> routine of the module which, at the least, can give
+you a warning under B<-w>.
+
+Although greatly a matter of style, the "safest" practice is probably
+to specifically list all constants in the C<use Win32::TieRegistry>
+statement, specify C<use strict> [or at least C<use strict qw(subs)>],
+and use bare constant names when you want the numeric value. This will
+detect mispelled constant names at compile time.
+
+ use strict;
+ my $Registry;
+ use Win32::TieRegistry 0.20 (
+ TiedRef => \$Registry, Delimiter => "/", ArrayValues => 1,
+ SplitMultis => 1, AllowLoad => 1,
+ qw( REG_SZ REG_EXPAND_SZ REG_DWORD REG_BINARY REG_MULTI_SZ
+ KEY_READ KEY_WRITE KEY_ALL_ACCESS ),
+ );
+ $Registry->{"LMachine/Software/FooCorp/"}= {
+ "FooWriter/" => {
+ "/Fonts" => [ ["Times","Courier","Lucinda"], REG_MULTI_SZ ],
+ "/WindowSize" => [ pack("LL",24,80), REG_BINARY ],
+ "/TaskBarIcon" => [ "0x0001", REG_DWORD ],
+ },
+ } or die "Can't create Software/FooCorp/: $^E\n";
+
+If you don't want to C<use strict qw(subs)>, the second safest practice
+is similar to the above but use the C<REG_SZ()> form for constants
+when possible and quoted constant names when required. Note that
+C<qw()> is a form of quoting.
+
+ use Win32::TieRegistry 0.20 qw(
+ TiedRef $Registry
+ Delimiter / ArrayValues 1 SplitMultis 1 AllowLoad 1
+ REG_SZ REG_EXPAND_SZ REG_DWORD REG_BINARY REG_MULTI_SZ
+ KEY_READ KEY_WRITE KEY_ALL_ACCESS
+ );
+ $Registry->{"LMachine/Software/FooCorp/"}= {
+ "FooWriter/" => {
+ "/Fonts" => [ ["Times","Courier","Lucinda"], REG_MULTI_SZ() ],
+ "/WindowSize" => [ pack("LL",24,80), REG_BINARY() ],
+ "/TaskBarIcon" => [ "0x0001", REG_DWORD() ],
+ },
+ } or die "Can't create Software/FooCorp/: $^E\n";
+
+The examples in this document mostly use quoted constant names
+(C<"REG_SZ">) since that works regardless of which constants
+you imported and whether or not you have C<use strict> in your
+script. It is not the best choice for you to use for real
+scripts (vs. examples) because it is less efficient and is not
+supported by most other similar modules.
+
+=head1 SUMMARY
+
+Most things can be done most easily via tied hashes. Skip down to the
+the L<Tied Hashes Summary> to get started quickly.
+
+=head2 Objects Summary
+
+Here are quick examples that document the most common functionality
+of all of the method functions [except for a few almost useless ones].
+
+ # Just another way of saying Open():
+ $key= new Win32::TieRegistry "LMachine\\Software\\",
+ { Access=>KEY_READ()|KEY_WRITE(), Delimiter=>"\\" };
+
+ # Open a Registry key:
+ $subKey= $key->Open( "SubKey/SubSubKey/",
+ { Access=>KEY_ALL_ACCESS, Delimiter=>"/" } );
+
+ # Connect to a remote Registry key:
+ $remKey= $Registry->Connect( "MachineName", "LMachine/",
+ { Access=>KEY_READ, Delimiter=>"/" } );
+
+ # Get value data:
+ $valueString= $key->GetValue("ValueName");
+ ( $valueString, $valueType )= $key->GetValue("ValueName");
+
+ # Get list of value names:
+ @valueNames= $key->ValueNames;
+
+ # Get list of subkey names:
+ @subKeyNames= $key->SubKeyNames;
+
+ # Get combined list of value names (with leading delimiters)
+ # and subkey names (with trailing delimiters):
+ @memberNames= $key->MemberNames;
+
+ # Get all information about a key:
+ %keyInfo= $key->Information;
+ # keys(%keyInfo)= qw( Class LastWrite SecurityLen
+ # CntSubKeys MaxSubKeyLen MaxSubClassLen
+ # CntValues MaxValNameLen MaxValDataLen );
+
+ # Get selected information about a key:
+ ( $class, $cntSubKeys )= $key->Information( "Class", "CntSubKeys" );
+
+ # Get and/or set delimiter:
+ $delim= $key->Delimiter;
+ $oldDelim= $key->Delimiter( $newDelim );
+
+ # Get "path" for an open key:
+ $path= $key->Path;
+ # For example, "/CUser/Control Panel/Mouse/"
+ # or "//HostName/LMachine/System/DISK/".
+
+ # Get name of machine where key is from:
+ $mach= $key->Machine;
+ # Will usually be "" indicating key is on local machine.
+
+ # Control different options (see main documentation for descriptions):
+ $oldBool= $key->ArrayValues( $newBool );
+ $oldBool= $key->FastDelete( $newBool );
+ $oldBool= $key->FixSzNulls( $newBool );
+ $oldBool= $key->SplitMultis( $newBool );
+ $oldBool= $key->DWordsToHex( $newBool );
+ $oldBool= $key->DualBinVals( $newBool );
+ $oldBool= $key->DualTypes( $newBool );
+ @oldBools= $key->SetOptions( ArrayValues=>1, FastDelete=>1, FixSzNulls=>0,
+ Delimiter=>"/", AllowLoad=>1, AllowSave=>1 );
+ @oldBools= $key->GetOptions( ArrayValues, FastDelete, FixSzNulls );
+
+ # Add or set a value:
+ $key->SetValue( "ValueName", $valueDataString );
+ $key->SetValue( "ValueName", pack($format,$valueData), "REG_BINARY" );
+
+ # Add or set a key:
+ $key->CreateKey( "SubKeyName" );
+ $key->CreateKey( "SubKeyName",
+ { Access=>"KEY_ALL_ACCESS", Class=>"ClassName",
+ Delimiter=>"/", Volatile=>1, Backup=>1 } );
+
+ # Load an off-line Registry hive file into the on-line Registry:
+ $newKey= $Registry->Load( "C:/Path/To/Hive/FileName" );
+ $newKey= $key->Load( "C:/Path/To/Hive/FileName", "NewSubKeyName",
+ { Access=>"KEY_READ" } );
+ # Unload a Registry hive file loaded via the Load() method:
+ $newKey->UnLoad;
+
+ # (Dis)Allow yourself to load Registry hive files:
+ $success= $Registry->AllowLoad( $bool );
+
+ # (Dis)Allow yourself to save a Registry key to a hive file:
+ $success= $Registry->AllowSave( $bool );
+
+ # Save a Registry key to a new hive file:
+ $key->RegSaveKey( "C:/Path/To/Hive/FileName", [] );
+
+=head3 Other Useful Methods
+
+See I<Win32API::Registry> for more information on these methods.
+These methods are provided for coding convenience and are
+identical to the I<Win32API::Registry> functions except that these
+don't take a handle to a Registry key, instead getting the handle
+from the invoking object [C<$key>].
+
+ $key->RegGetKeySecurity( $iSecInfo, $sSecDesc, $lenSecDesc );
+ $key->RegLoadKey( $sSubKeyName, $sPathToFile );
+ $key->RegNotifyChangeKeyValue(
+ $bWatchSubtree, $iNotifyFilter, $hEvent, $bAsync );
+ $key->RegQueryMultipleValues(
+ $structValueEnts, $cntValueEnts, $Buffer, $lenBuffer );
+ $key->RegReplaceKey( $sSubKeyName, $sPathToNewFile, $sPathToBackupFile );
+ $key->RegRestoreKey( $sPathToFile, $iFlags );
+ $key->RegSetKeySecurity( $iSecInfo, $sSecDesc );
+ $key->RegUnLoadKey( $sSubKeyName );
+
+=head2 Tied Hashes Summary
+
+For fast learners, this may be the only section you need to read.
+Always append one delimiter to the end of each Registry key name
+and prepend one delimiter to the front of each Registry value name.
+
+=head3 Opening keys
+
+ use Win32::TieRegistry ( Delimiter=>"/", ArrayValues=>1 );
+ $Registry->Delimiter("/"); # Set delimiter to "/".
+ $swKey= $Registry->{"LMachine/Software/"};
+ $winKey= $swKey->{"Microsoft/Windows/CurrentVersion/"};
+ $userKey= $Registry->
+ {"CUser/Software/Microsoft/Windows/CurrentVersion/"};
+ $remoteKey= $Registry->{"//HostName/LMachine/"};
+
+=head3 Reading values
+
+ $progDir= $winKey->{"/ProgramFilesDir"}; # "C:\\Program Files"
+ $tip21= $winKey->{"Explorer/Tips//21"}; # Text of tip #21.
+
+ $winKey->ArrayValues(1);
+ ( $devPath, $type )= $winKey->{"/DevicePath"};
+ # $devPath eq "%SystemRoot%\\inf"
+ # $type eq "REG_EXPAND_SZ" [if you have SetDualVar.pm installed]
+ # $type == REG_EXPAND_SZ() [if did C<use Win32::TieRegistry qw(:REG_)>]
+
+=head3 Setting values
+
+ $winKey->{"Setup//SourcePath"}= "\\\\SwServer\\SwShare\\Windows";
+ # Simple. Assumes data type of REG_SZ.
+
+ $winKey->{"Setup//Installation Sources"}=
+ [ "D:\x00\\\\SwServer\\SwShare\\Windows\0\0", "REG_MULTI_SZ" ];
+ # "\x00" and "\0" used to mark ends of each string and end of list.
+
+ $winKey->{"Setup//Installation Sources"}=
+ [ ["D:","\\\\SwServer\\SwShare\\Windows"], "REG_MULTI_SZ" ];
+ # Alternate method that is easier to read.
+
+ $userKey->{"Explorer/Tips//DisplayInitialTipWindow"}=
+ [ pack("L",0), "REG_DWORD" ];
+ $userKey->{"Explorer/Tips//Next"}= [ pack("S",3), "REG_BINARY" ];
+ $userKey->{"Explorer/Tips//Show"}= [ pack("L",0), "REG_BINARY" ];
+
+=head3 Adding keys
+
+ $swKey->{"FooCorp/"}= {
+ "FooWriter/" => {
+ "/Version" => "4.032",
+ "Startup/" => {
+ "/Title" => "Foo Writer Deluxe ][",
+ "/WindowSize" => [ pack("LL",$wid,$ht), "REG_BINARY" ],
+ "/TaskBarIcon" => [ "0x0001", "REG_DWORD" ],
+ },
+ "Compatibility/" => {
+ "/AutoConvert" => "Always",
+ "/Default Palette" => "Windows Colors",
+ },
+ },
+ "/License", => "0123-9C8EF1-09-FC",
+ };
+
+=head3 Listing all subkeys and values
+
+ @members= keys( %{$swKey} );
+ @subKeys= grep( m#^/#, keys( %{$swKey->{"Classes/batfile/"}} ) );
+ # @subKeys= ( "/", "/EditFlags" );
+ @valueNames= grep( ! m#^/#, keys( %{$swKey->{"Classes/batfile/"}} ) );
+ # @valueNames= ( "DefaultIcon/", "shell/", "shellex/" );
+
+=head3 Deleting values or keys with no subkeys
+
+ $oldValue= delete $userKey->{"Explorer/Tips//Next"};
+
+ $oldValues= delete $userKey->{"Explorer/Tips/"};
+ # $oldValues will be reference to hash containing deleted keys values.
+
+=head3 Closing keys
+
+ undef $swKey; # Explicit way to close a key.
+ $winKey= "Anything else"; # Implicitly closes a key.
+ exit 0; # Implicitly closes all keys.
+
+=head2 Tie::Registry
+
+This module was originally called I<Tie::Registry>. Changing code
+that used I<Tie::Registry> over to I<Win32::TieRegistry> is trivial
+as the module name should only be mentioned once, in the C<use>
+line. However, finding all of the places that used I<Tie::Registry>
+may not be completely trivial so we have included F<Tie/Registry.pm>
+which you can install to provide backward compatibility.
+
+=head1 AUTHOR
+
+Tye McQueen. See http://www.metronet.com/~tye/ or e-mail
+tye@metronet.com with bug reports.
+
+=head1 SEE ALSO
+
+I<Win32API::Registry> - Provides access to C<Reg*()>, C<HKEY_*>,
+C<KEY_*>, C<REG_*> [required].
+
+I<Win32::WinError> - Defines C<ERROR_*> values [optional].
+
+L<SetDualVar> - For returning C<REG_*> values as combined
+string/integer values [optional].
+
+=head1 BUGS
+
+Perl5.004_02 has bugs that make I<Win32::TieRegistry> fail in
+strange and subtle ways.
+
+Using I<Win32::TieRegistry> with versions of Perl prior to 5.005
+can be tricky or impossible. Most notes about this have been
+removed from the documentation (they get rather complicated
+and confusing). This includes references to C<$^E> perhaps not
+being meaningful.
+
+Because Perl hashes are case sensitive, certain lookups are also
+case sensistive. In particular, the root keys ("Classes", "CUser",
+"LMachine", "Users", "PerfData", "CConfig", "DynData", and HKEY_*)
+must always be entered without changing between upper and lower
+case letters. Also, the special rule for matching subkey names
+that contain the user-selected delimiter only works if case is
+matched. All other key name and value name lookups should be case
+insensitive because the underlying Reg*() calls ignore case.
+
+Information about each key is cached when using a tied hash.
+This cache is not flushed nor updated when changes are made,
+I<even when the same tied hash is used> to make the changes.
+
+Current implementations of Perl's "global destruction" phase can
+cause objects returned by C<Load()> to be destroyed while keys
+within the hive are still open, if the objects still exist when
+the script starts to exit. When this happens, the automatic
+C<UnLoad()> will report a failure and the hive will remain loaded
+in the Registry.
+
+Trying to C<Load()> a hive file that is located on a remote network
+share may silently delete all data from the hive. This is a bug
+in the Win32 APIs, not any Perl code or modules. This module does
+not try to protect you from this bug.
+
+There is no test suite.
+
+=head1 FUTURE DIRECTIONS
+
+The following items are desired by the author and may appear in a
+future release of this module.
+
+=over
+
+=item TieValues option
+
+Currently described in main documentation but no yet implemented.
+
+=item AutoRefresh option
+
+Trigger use of C<RegNotifyChangeKeyValue()> to keep tied hash
+caches up-to-date even when other programs make changes.
+
+=item Error options
+
+Allow the user to have unchecked calls (calls in a "void context")
+to automatically report errors via C<warn> or C<die>.
+
+For complex operations, such a copying an entire subtree, provide
+access to detailed information about errors (and perhaps some
+warnings) that were encountered. Let the user control whether
+the complex operation continues in spite of errors.
+
+=back
+
+=cut
+
+# Autoload not currently supported by Perl under Windows.
diff --git a/Master/tlpkg/tlperl/lib/Win32/WinError.pm b/Master/tlpkg/tlperl/lib/Win32/WinError.pm
new file mode 100644
index 00000000000..46028a79321
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/WinError.pm
@@ -0,0 +1,1017 @@
+package Win32::WinError;
+
+require Exporter;
+require DynaLoader;
+
+$VERSION = '0.02';
+
+@ISA = qw(Exporter DynaLoader);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ GetLastError
+ CACHE_E_FIRST
+ CACHE_E_LAST
+ CACHE_E_NOCACHE_UPDATED
+ CACHE_S_FIRST
+ CACHE_S_FORMATETC_NOTSUPPORTED
+ CACHE_S_LAST
+ CACHE_S_SAMECACHE
+ CACHE_S_SOMECACHES_NOTUPDATED
+ CLASSFACTORY_E_FIRST
+ CLASSFACTORY_E_LAST
+ CLASSFACTORY_S_FIRST
+ CLASSFACTORY_S_LAST
+ CLASS_E_CLASSNOTAVAILABLE
+ CLASS_E_NOAGGREGATION
+ CLIENTSITE_E_FIRST
+ CLIENTSITE_E_LAST
+ CLIENTSITE_S_FIRST
+ CLIENTSITE_S_LAST
+ CLIPBRD_E_BAD_DATA
+ CLIPBRD_E_CANT_CLOSE
+ CLIPBRD_E_CANT_EMPTY
+ CLIPBRD_E_CANT_OPEN
+ CLIPBRD_E_CANT_SET
+ CLIPBRD_E_FIRST
+ CLIPBRD_E_LAST
+ CLIPBRD_S_FIRST
+ CLIPBRD_S_LAST
+ CONVERT10_E_FIRST
+ CONVERT10_E_LAST
+ CONVERT10_E_OLESTREAM_BITMAP_TO_DIB
+ CONVERT10_E_OLESTREAM_FMT
+ CONVERT10_E_OLESTREAM_GET
+ CONVERT10_E_OLESTREAM_PUT
+ CONVERT10_E_STG_DIB_TO_BITMAP
+ CONVERT10_E_STG_FMT
+ CONVERT10_E_STG_NO_STD_STREAM
+ CONVERT10_S_FIRST
+ CONVERT10_S_LAST
+ CONVERT10_S_NO_PRESENTATION
+ CO_E_ALREADYINITIALIZED
+ CO_E_APPDIDNTREG
+ CO_E_APPNOTFOUND
+ CO_E_APPSINGLEUSE
+ CO_E_BAD_PATH
+ CO_E_CANTDETERMINECLASS
+ CO_E_CLASSSTRING
+ CO_E_CLASS_CREATE_FAILED
+ CO_E_DLLNOTFOUND
+ CO_E_ERRORINAPP
+ CO_E_ERRORINDLL
+ CO_E_FIRST
+ CO_E_IIDSTRING
+ CO_E_INIT_CLASS_CACHE
+ CO_E_INIT_MEMORY_ALLOCATOR
+ CO_E_INIT_ONLY_SINGLE_THREADED
+ CO_E_INIT_RPC_CHANNEL
+ CO_E_INIT_SCM_EXEC_FAILURE
+ CO_E_INIT_SCM_FILE_MAPPING_EXISTS
+ CO_E_INIT_SCM_MAP_VIEW_OF_FILE
+ CO_E_INIT_SCM_MUTEX_EXISTS
+ CO_E_INIT_SHARED_ALLOCATOR
+ CO_E_INIT_TLS
+ CO_E_INIT_TLS_CHANNEL_CONTROL
+ CO_E_INIT_TLS_SET_CHANNEL_CONTROL
+ CO_E_INIT_UNACCEPTED_USER_ALLOCATOR
+ CO_E_LAST
+ CO_E_NOTINITIALIZED
+ CO_E_OBJISREG
+ CO_E_OBJNOTCONNECTED
+ CO_E_OBJNOTREG
+ CO_E_OBJSRV_RPC_FAILURE
+ CO_E_RELEASED
+ CO_E_SCM_ERROR
+ CO_E_SCM_RPC_FAILURE
+ CO_E_SERVER_EXEC_FAILURE
+ CO_E_SERVER_STOPPING
+ CO_E_WRONGOSFORAPP
+ CO_S_FIRST
+ CO_S_LAST
+ DATA_E_FIRST
+ DATA_E_LAST
+ DATA_S_FIRST
+ DATA_S_LAST
+ DATA_S_SAMEFORMATETC
+ DISP_E_ARRAYISLOCKED
+ DISP_E_BADCALLEE
+ DISP_E_BADINDEX
+ DISP_E_BADPARAMCOUNT
+ DISP_E_BADVARTYPE
+ DISP_E_EXCEPTION
+ DISP_E_MEMBERNOTFOUND
+ DISP_E_NONAMEDARGS
+ DISP_E_NOTACOLLECTION
+ DISP_E_OVERFLOW
+ DISP_E_PARAMNOTFOUND
+ DISP_E_PARAMNOTOPTIONAL
+ DISP_E_TYPEMISMATCH
+ DISP_E_UNKNOWNINTERFACE
+ DISP_E_UNKNOWNLCID
+ DISP_E_UNKNOWNNAME
+ DRAGDROP_E_ALREADYREGISTERED
+ DRAGDROP_E_FIRST
+ DRAGDROP_E_INVALIDHWND
+ DRAGDROP_E_LAST
+ DRAGDROP_E_NOTREGISTERED
+ DRAGDROP_S_CANCEL
+ DRAGDROP_S_DROP
+ DRAGDROP_S_FIRST
+ DRAGDROP_S_LAST
+ DRAGDROP_S_USEDEFAULTCURSORS
+ DV_E_CLIPFORMAT
+ DV_E_DVASPECT
+ DV_E_DVTARGETDEVICE
+ DV_E_DVTARGETDEVICE_SIZE
+ DV_E_FORMATETC
+ DV_E_LINDEX
+ DV_E_NOIVIEWOBJECT
+ DV_E_STATDATA
+ DV_E_STGMEDIUM
+ DV_E_TYMED
+ ENUM_E_FIRST
+ ENUM_E_LAST
+ ENUM_S_FIRST
+ ENUM_S_LAST
+ EPT_S_CANT_CREATE
+ EPT_S_CANT_PERFORM_OP
+ EPT_S_INVALID_ENTRY
+ EPT_S_NOT_REGISTERED
+ ERROR_ACCESS_DENIED
+ ERROR_ACCOUNT_DISABLED
+ ERROR_ACCOUNT_EXPIRED
+ ERROR_ACCOUNT_LOCKED_OUT
+ ERROR_ACCOUNT_RESTRICTION
+ ERROR_ACTIVE_CONNECTIONS
+ ERROR_ADAP_HDW_ERR
+ ERROR_ADDRESS_ALREADY_ASSOCIATED
+ ERROR_ADDRESS_NOT_ASSOCIATED
+ ERROR_ALIAS_EXISTS
+ ERROR_ALLOTTED_SPACE_EXCEEDED
+ ERROR_ALREADY_ASSIGNED
+ ERROR_ALREADY_EXISTS
+ ERROR_ALREADY_REGISTERED
+ ERROR_ALREADY_RUNNING_LKG
+ ERROR_ALREADY_WAITING
+ ERROR_ARENA_TRASHED
+ ERROR_ARITHMETIC_OVERFLOW
+ ERROR_ATOMIC_LOCKS_NOT_SUPPORTED
+ ERROR_AUTODATASEG_EXCEEDS_64k
+ ERROR_BADDB
+ ERROR_BADKEY
+ ERROR_BAD_ARGUMENTS
+ ERROR_BAD_COMMAND
+ ERROR_BAD_DESCRIPTOR_FORMAT
+ ERROR_BAD_DEVICE
+ ERROR_BAD_DEV_TYPE
+ ERROR_BAD_DRIVER
+ ERROR_BAD_DRIVER_LEVEL
+ ERROR_BAD_ENVIRONMENT
+ ERROR_BAD_EXE_FORMAT
+ ERROR_BAD_FORMAT
+ ERROR_BAD_IMPERSONATION_LEVEL
+ ERROR_BAD_INHERITANCE_ACL
+ ERROR_BAD_LENGTH
+ ERROR_BAD_LOGON_SESSION_STATE
+ ERROR_BAD_NETPATH
+ ERROR_BAD_NET_NAME
+ ERROR_BAD_NET_RESP
+ ERROR_BAD_PATHNAME
+ ERROR_BAD_PIPE
+ ERROR_BAD_PROFILE
+ ERROR_BAD_PROVIDER
+ ERROR_BAD_REM_ADAP
+ ERROR_BAD_THREADID_ADDR
+ ERROR_BAD_TOKEN_TYPE
+ ERROR_BAD_UNIT
+ ERROR_BAD_USERNAME
+ ERROR_BAD_VALIDATION_CLASS
+ ERROR_BEGINNING_OF_MEDIA
+ ERROR_BOOT_ALREADY_ACCEPTED
+ ERROR_BROKEN_PIPE
+ ERROR_BUFFER_OVERFLOW
+ ERROR_BUSY
+ ERROR_BUSY_DRIVE
+ ERROR_BUS_RESET
+ ERROR_CALL_NOT_IMPLEMENTED
+ ERROR_CANCELLED
+ ERROR_CANCEL_VIOLATION
+ ERROR_CANNOT_COPY
+ ERROR_CANNOT_FIND_WND_CLASS
+ ERROR_CANNOT_IMPERSONATE
+ ERROR_CANNOT_MAKE
+ ERROR_CANNOT_OPEN_PROFILE
+ ERROR_CANTOPEN
+ ERROR_CANTREAD
+ ERROR_CANTWRITE
+ ERROR_CANT_ACCESS_DOMAIN_INFO
+ ERROR_CANT_DISABLE_MANDATORY
+ ERROR_CANT_OPEN_ANONYMOUS
+ ERROR_CAN_NOT_COMPLETE
+ ERROR_CAN_NOT_DEL_LOCAL_WINS
+ ERROR_CHILD_MUST_BE_VOLATILE
+ ERROR_CHILD_NOT_COMPLETE
+ ERROR_CHILD_WINDOW_MENU
+ ERROR_CIRCULAR_DEPENDENCY
+ ERROR_CLASS_ALREADY_EXISTS
+ ERROR_CLASS_DOES_NOT_EXIST
+ ERROR_CLASS_HAS_WINDOWS
+ ERROR_CLIPBOARD_NOT_OPEN
+ ERROR_CLIPPING_NOT_SUPPORTED
+ ERROR_CONNECTION_ABORTED
+ ERROR_CONNECTION_ACTIVE
+ ERROR_CONNECTION_COUNT_LIMIT
+ ERROR_CONNECTION_INVALID
+ ERROR_CONNECTION_REFUSED
+ ERROR_CONNECTION_UNAVAIL
+ ERROR_CONTROL_ID_NOT_FOUND
+ ERROR_COUNTER_TIMEOUT
+ ERROR_CRC
+ ERROR_CURRENT_DIRECTORY
+ ERROR_DATABASE_DOES_NOT_EXIST
+ ERROR_DC_NOT_FOUND
+ ERROR_DEPENDENT_SERVICES_RUNNING
+ ERROR_DESTROY_OBJECT_OF_OTHER_THREAD
+ ERROR_DEVICE_ALREADY_REMEMBERED
+ ERROR_DEVICE_IN_USE
+ ERROR_DEVICE_NOT_PARTITIONED
+ ERROR_DEV_NOT_EXIST
+ ERROR_DIRECTORY
+ ERROR_DIRECT_ACCESS_HANDLE
+ ERROR_DIR_NOT_EMPTY
+ ERROR_DIR_NOT_ROOT
+ ERROR_DISCARDED
+ ERROR_DISK_CHANGE
+ ERROR_DISK_CORRUPT
+ ERROR_DISK_FULL
+ ERROR_DISK_OPERATION_FAILED
+ ERROR_DISK_RECALIBRATE_FAILED
+ ERROR_DISK_RESET_FAILED
+ ERROR_DLL_INIT_FAILED
+ ERROR_DOMAIN_CONTROLLER_NOT_FOUND
+ ERROR_DOMAIN_EXISTS
+ ERROR_DOMAIN_LIMIT_EXCEEDED
+ ERROR_DOMAIN_TRUST_INCONSISTENT
+ ERROR_DRIVE_LOCKED
+ ERROR_DUPLICATE_SERVICE_NAME
+ ERROR_DUP_DOMAINNAME
+ ERROR_DUP_NAME
+ ERROR_DYNLINK_FROM_INVALID_RING
+ ERROR_EAS_DIDNT_FIT
+ ERROR_EAS_NOT_SUPPORTED
+ ERROR_EA_ACCESS_DENIED
+ ERROR_EA_FILE_CORRUPT
+ ERROR_EA_LIST_INCONSISTENT
+ ERROR_EA_TABLE_FULL
+ ERROR_END_OF_MEDIA
+ ERROR_ENVVAR_NOT_FOUND
+ ERROR_EOM_OVERFLOW
+ ERROR_EVENTLOG_CANT_START
+ ERROR_EVENTLOG_FILE_CHANGED
+ ERROR_EVENTLOG_FILE_CORRUPT
+ ERROR_EXCEPTION_IN_SERVICE
+ ERROR_EXCL_SEM_ALREADY_OWNED
+ ERROR_EXE_MARKED_INVALID
+ ERROR_EXTENDED_ERROR
+ ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
+ ERROR_FAIL_I24
+ ERROR_FILEMARK_DETECTED
+ ERROR_FILENAME_EXCED_RANGE
+ ERROR_FILE_CORRUPT
+ ERROR_FILE_EXISTS
+ ERROR_FILE_INVALID
+ ERROR_FILE_NOT_FOUND
+ ERROR_FLOPPY_BAD_REGISTERS
+ ERROR_FLOPPY_ID_MARK_NOT_FOUND
+ ERROR_FLOPPY_UNKNOWN_ERROR
+ ERROR_FLOPPY_WRONG_CYLINDER
+ ERROR_FULLSCREEN_MODE
+ ERROR_FULL_BACKUP
+ ERROR_GENERIC_NOT_MAPPED
+ ERROR_GEN_FAILURE
+ ERROR_GLOBAL_ONLY_HOOK
+ ERROR_GRACEFUL_DISCONNECT
+ ERROR_GROUP_EXISTS
+ ERROR_HANDLE_DISK_FULL
+ ERROR_HANDLE_EOF
+ ERROR_HOOK_NEEDS_HMOD
+ ERROR_HOOK_NOT_INSTALLED
+ ERROR_HOST_UNREACHABLE
+ ERROR_HOTKEY_ALREADY_REGISTERED
+ ERROR_HOTKEY_NOT_REGISTERED
+ ERROR_HWNDS_HAVE_DIFF_PARENT
+ ERROR_ILL_FORMED_PASSWORD
+ ERROR_INCORRECT_ADDRESS
+ ERROR_INC_BACKUP
+ ERROR_INFLOOP_IN_RELOC_CHAIN
+ ERROR_INSUFFICIENT_BUFFER
+ ERROR_INTERNAL_DB_CORRUPTION
+ ERROR_INTERNAL_DB_ERROR
+ ERROR_INTERNAL_ERROR
+ ERROR_INVALID_ACCEL_HANDLE
+ ERROR_INVALID_ACCESS
+ ERROR_INVALID_ACCOUNT_NAME
+ ERROR_INVALID_ACL
+ ERROR_INVALID_ADDRESS
+ ERROR_INVALID_AT_INTERRUPT_TIME
+ ERROR_INVALID_BLOCK
+ ERROR_INVALID_BLOCK_LENGTH
+ ERROR_INVALID_CATEGORY
+ ERROR_INVALID_COMBOBOX_MESSAGE
+ ERROR_INVALID_COMPUTERNAME
+ ERROR_INVALID_CURSOR_HANDLE
+ ERROR_INVALID_DATA
+ ERROR_INVALID_DATATYPE
+ ERROR_INVALID_DOMAINNAME
+ ERROR_INVALID_DOMAIN_ROLE
+ ERROR_INVALID_DOMAIN_STATE
+ ERROR_INVALID_DRIVE
+ ERROR_INVALID_DWP_HANDLE
+ ERROR_INVALID_EA_HANDLE
+ ERROR_INVALID_EA_NAME
+ ERROR_INVALID_EDIT_HEIGHT
+ ERROR_INVALID_ENVIRONMENT
+ ERROR_INVALID_EVENTNAME
+ ERROR_INVALID_EVENT_COUNT
+ ERROR_INVALID_EXE_SIGNATURE
+ ERROR_INVALID_FILTER_PROC
+ ERROR_INVALID_FLAGS
+ ERROR_INVALID_FLAG_NUMBER
+ ERROR_INVALID_FORM_NAME
+ ERROR_INVALID_FORM_SIZE
+ ERROR_INVALID_FUNCTION
+ ERROR_INVALID_GROUPNAME
+ ERROR_INVALID_GROUP_ATTRIBUTES
+ ERROR_INVALID_GW_COMMAND
+ ERROR_INVALID_HANDLE
+ ERROR_INVALID_HOOK_FILTER
+ ERROR_INVALID_HOOK_HANDLE
+ ERROR_INVALID_ICON_HANDLE
+ ERROR_INVALID_ID_AUTHORITY
+ ERROR_INVALID_INDEX
+ ERROR_INVALID_LB_MESSAGE
+ ERROR_INVALID_LEVEL
+ ERROR_INVALID_LIST_FORMAT
+ ERROR_INVALID_LOGON_HOURS
+ ERROR_INVALID_LOGON_TYPE
+ ERROR_INVALID_MEMBER
+ ERROR_INVALID_MENU_HANDLE
+ ERROR_INVALID_MESSAGE
+ ERROR_INVALID_MESSAGEDEST
+ ERROR_INVALID_MESSAGENAME
+ ERROR_INVALID_MINALLOCSIZE
+ ERROR_INVALID_MODULETYPE
+ ERROR_INVALID_MSGBOX_STYLE
+ ERROR_INVALID_NAME
+ ERROR_INVALID_NETNAME
+ ERROR_INVALID_ORDINAL
+ ERROR_INVALID_OWNER
+ ERROR_INVALID_PARAMETER
+ ERROR_INVALID_PASSWORD
+ ERROR_INVALID_PASSWORDNAME
+ ERROR_INVALID_PIXEL_FORMAT
+ ERROR_INVALID_PRIMARY_GROUP
+ ERROR_INVALID_PRINTER_COMMAND
+ ERROR_INVALID_PRINTER_NAME
+ ERROR_INVALID_PRINTER_STATE
+ ERROR_INVALID_PRIORITY
+ ERROR_INVALID_SCROLLBAR_RANGE
+ ERROR_INVALID_SECURITY_DESCR
+ ERROR_INVALID_SEGDPL
+ ERROR_INVALID_SEGMENT_NUMBER
+ ERROR_INVALID_SEPARATOR_FILE
+ ERROR_INVALID_SERVER_STATE
+ ERROR_INVALID_SERVICENAME
+ ERROR_INVALID_SERVICE_ACCOUNT
+ ERROR_INVALID_SERVICE_CONTROL
+ ERROR_INVALID_SERVICE_LOCK
+ ERROR_INVALID_SHARENAME
+ ERROR_INVALID_SHOWWIN_COMMAND
+ ERROR_INVALID_SID
+ ERROR_INVALID_SIGNAL_NUMBER
+ ERROR_INVALID_SPI_VALUE
+ ERROR_INVALID_STACKSEG
+ ERROR_INVALID_STARTING_CODESEG
+ ERROR_INVALID_SUB_AUTHORITY
+ ERROR_INVALID_TARGET_HANDLE
+ ERROR_INVALID_THREAD_ID
+ ERROR_INVALID_TIME
+ ERROR_INVALID_USER_BUFFER
+ ERROR_INVALID_VERIFY_SWITCH
+ ERROR_INVALID_WINDOW_HANDLE
+ ERROR_INVALID_WINDOW_STYLE
+ ERROR_INVALID_WORKSTATION
+ ERROR_IOPL_NOT_ENABLED
+ ERROR_IO_DEVICE
+ ERROR_IO_INCOMPLETE
+ ERROR_IO_PENDING
+ ERROR_IRQ_BUSY
+ ERROR_IS_JOINED
+ ERROR_IS_JOIN_PATH
+ ERROR_IS_JOIN_TARGET
+ ERROR_IS_SUBSTED
+ ERROR_IS_SUBST_PATH
+ ERROR_IS_SUBST_TARGET
+ ERROR_ITERATED_DATA_EXCEEDS_64k
+ ERROR_JOIN_TO_JOIN
+ ERROR_JOIN_TO_SUBST
+ ERROR_JOURNAL_HOOK_SET
+ ERROR_KEY_DELETED
+ ERROR_KEY_HAS_CHILDREN
+ ERROR_LABEL_TOO_LONG
+ ERROR_LAST_ADMIN
+ ERROR_LB_WITHOUT_TABSTOPS
+ ERROR_LISTBOX_ID_NOT_FOUND
+ ERROR_LM_CROSS_ENCRYPTION_REQUIRED
+ ERROR_LOCAL_USER_SESSION_KEY
+ ERROR_LOCKED
+ ERROR_LOCK_FAILED
+ ERROR_LOCK_VIOLATION
+ ERROR_LOGIN_TIME_RESTRICTION
+ ERROR_LOGIN_WKSTA_RESTRICTION
+ ERROR_LOGON_FAILURE
+ ERROR_LOGON_NOT_GRANTED
+ ERROR_LOGON_SESSION_COLLISION
+ ERROR_LOGON_SESSION_EXISTS
+ ERROR_LOGON_TYPE_NOT_GRANTED
+ ERROR_LOG_FILE_FULL
+ ERROR_LUIDS_EXHAUSTED
+ ERROR_MAPPED_ALIGNMENT
+ ERROR_MAX_THRDS_REACHED
+ ERROR_MEDIA_CHANGED
+ ERROR_MEMBERS_PRIMARY_GROUP
+ ERROR_MEMBER_IN_ALIAS
+ ERROR_MEMBER_IN_GROUP
+ ERROR_MEMBER_NOT_IN_ALIAS
+ ERROR_MEMBER_NOT_IN_GROUP
+ ERROR_METAFILE_NOT_SUPPORTED
+ ERROR_META_EXPANSION_TOO_LONG
+ ERROR_MOD_NOT_FOUND
+ ERROR_MORE_DATA
+ ERROR_MORE_WRITES
+ ERROR_MR_MID_NOT_FOUND
+ ERROR_NEGATIVE_SEEK
+ ERROR_NESTING_NOT_ALLOWED
+ ERROR_NETLOGON_NOT_STARTED
+ ERROR_NETNAME_DELETED
+ ERROR_NETWORK_ACCESS_DENIED
+ ERROR_NETWORK_BUSY
+ ERROR_NETWORK_UNREACHABLE
+ ERROR_NET_WRITE_FAULT
+ ERROR_NOACCESS
+ ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
+ ERROR_NOLOGON_SERVER_TRUST_ACCOUNT
+ ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT
+ ERROR_NONE_MAPPED
+ ERROR_NON_MDICHILD_WINDOW
+ ERROR_NOTIFY_ENUM_DIR
+ ERROR_NOT_ALL_ASSIGNED
+ ERROR_NOT_CHILD_WINDOW
+ ERROR_NOT_CONNECTED
+ ERROR_NOT_CONTAINER
+ ERROR_NOT_DOS_DISK
+ ERROR_NOT_ENOUGH_MEMORY
+ ERROR_NOT_ENOUGH_QUOTA
+ ERROR_NOT_ENOUGH_SERVER_MEMORY
+ ERROR_NOT_JOINED
+ ERROR_NOT_LOCKED
+ ERROR_NOT_LOGON_PROCESS
+ ERROR_NOT_OWNER
+ ERROR_NOT_READY
+ ERROR_NOT_REGISTRY_FILE
+ ERROR_NOT_SAME_DEVICE
+ ERROR_NOT_SUBSTED
+ ERROR_NOT_SUPPORTED
+ ERROR_NO_BROWSER_SERVERS_FOUND
+ ERROR_NO_DATA
+ ERROR_NO_DATA_DETECTED
+ ERROR_NO_IMPERSONATION_TOKEN
+ ERROR_NO_INHERITANCE
+ ERROR_NO_LOGON_SERVERS
+ ERROR_NO_LOG_SPACE
+ ERROR_NO_MEDIA_IN_DRIVE
+ ERROR_NO_MORE_FILES
+ ERROR_NO_MORE_ITEMS
+ ERROR_NO_MORE_SEARCH_HANDLES
+ ERROR_NO_NETWORK
+ ERROR_NO_NET_OR_BAD_PATH
+ ERROR_NO_PROC_SLOTS
+ ERROR_NO_QUOTAS_FOR_ACCOUNT
+ ERROR_NO_SCROLLBARS
+ ERROR_NO_SECURITY_ON_OBJECT
+ ERROR_NO_SHUTDOWN_IN_PROGRESS
+ ERROR_NO_SIGNAL_SENT
+ ERROR_NO_SPOOL_SPACE
+ ERROR_NO_SUCH_ALIAS
+ ERROR_NO_SUCH_DOMAIN
+ ERROR_NO_SUCH_GROUP
+ ERROR_NO_SUCH_LOGON_SESSION
+ ERROR_NO_SUCH_MEMBER
+ ERROR_NO_SUCH_PACKAGE
+ ERROR_NO_SUCH_PRIVILEGE
+ ERROR_NO_SUCH_USER
+ ERROR_NO_SYSTEM_MENU
+ ERROR_NO_TOKEN
+ ERROR_NO_TRUST_LSA_SECRET
+ ERROR_NO_TRUST_SAM_ACCOUNT
+ ERROR_NO_UNICODE_TRANSLATION
+ ERROR_NO_USER_SESSION_KEY
+ ERROR_NO_VOLUME_LABEL
+ ERROR_NO_WILDCARD_CHARACTERS
+ ERROR_NT_CROSS_ENCRYPTION_REQUIRED
+ ERROR_NULL_LM_PASSWORD
+ ERROR_OPEN_FAILED
+ ERROR_OPEN_FILES
+ ERROR_OPERATION_ABORTED
+ ERROR_OUTOFMEMORY
+ ERROR_OUT_OF_PAPER
+ ERROR_OUT_OF_STRUCTURES
+ ERROR_PARTIAL_COPY
+ ERROR_PARTITION_FAILURE
+ ERROR_PASSWORD_EXPIRED
+ ERROR_PASSWORD_MUST_CHANGE
+ ERROR_PASSWORD_RESTRICTION
+ ERROR_PATH_BUSY
+ ERROR_PATH_NOT_FOUND
+ ERROR_PIPE_BUSY
+ ERROR_PIPE_CONNECTED
+ ERROR_PIPE_LISTENING
+ ERROR_PIPE_NOT_CONNECTED
+ ERROR_POPUP_ALREADY_ACTIVE
+ ERROR_PORT_UNREACHABLE
+ ERROR_POSSIBLE_DEADLOCK
+ ERROR_PRINTER_ALREADY_EXISTS
+ ERROR_PRINTER_DELETED
+ ERROR_PRINTER_DRIVER_ALREADY_INSTALLED
+ ERROR_PRINTER_DRIVER_IN_USE
+ ERROR_PRINTQ_FULL
+ ERROR_PRINT_CANCELLED
+ ERROR_PRINT_MONITOR_ALREADY_INSTALLED
+ ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED
+ ERROR_PRIVATE_DIALOG_INDEX
+ ERROR_PRIVILEGE_NOT_HELD
+ ERROR_PROCESS_ABORTED
+ ERROR_PROC_NOT_FOUND
+ ERROR_PROTOCOL_UNREACHABLE
+ ERROR_READ_FAULT
+ ERROR_REC_NON_EXISTENT
+ ERROR_REDIRECTOR_HAS_OPEN_HANDLES
+ ERROR_REDIR_PAUSED
+ ERROR_REGISTRY_CORRUPT
+ ERROR_REGISTRY_IO_FAILED
+ ERROR_REGISTRY_RECOVERED
+ ERROR_RELOC_CHAIN_XEEDS_SEGLIM
+ ERROR_REMOTE_SESSION_LIMIT_EXCEEDED
+ ERROR_REM_NOT_LIST
+ ERROR_REQUEST_ABORTED
+ ERROR_REQ_NOT_ACCEP
+ ERROR_RESOURCE_DATA_NOT_FOUND
+ ERROR_RESOURCE_LANG_NOT_FOUND
+ ERROR_RESOURCE_NAME_NOT_FOUND
+ ERROR_RESOURCE_TYPE_NOT_FOUND
+ ERROR_RETRY
+ ERROR_REVISION_MISMATCH
+ ERROR_RING2SEG_MUST_BE_MOVABLE
+ ERROR_RING2_STACK_IN_USE
+ ERROR_RPL_NOT_ALLOWED
+ ERROR_RXACT_COMMIT_FAILURE
+ ERROR_RXACT_INVALID_STATE
+ ERROR_SAME_DRIVE
+ ERROR_SCREEN_ALREADY_LOCKED
+ ERROR_SECRET_TOO_LONG
+ ERROR_SECTOR_NOT_FOUND
+ ERROR_SEEK
+ ERROR_SEEK_ON_DEVICE
+ ERROR_SEM_IS_SET
+ ERROR_SEM_NOT_FOUND
+ ERROR_SEM_OWNER_DIED
+ ERROR_SEM_TIMEOUT
+ ERROR_SEM_USER_LIMIT
+ ERROR_SERIAL_NO_DEVICE
+ ERROR_SERVER_DISABLED
+ ERROR_SERVER_HAS_OPEN_HANDLES
+ ERROR_SERVER_NOT_DISABLED
+ ERROR_SERVICE_ALREADY_RUNNING
+ ERROR_SERVICE_CANNOT_ACCEPT_CTRL
+ ERROR_SERVICE_DATABASE_LOCKED
+ ERROR_SERVICE_DEPENDENCY_DELETED
+ ERROR_SERVICE_DEPENDENCY_FAIL
+ ERROR_SERVICE_DISABLED
+ ERROR_SERVICE_DOES_NOT_EXIST
+ ERROR_SERVICE_EXISTS
+ ERROR_SERVICE_LOGON_FAILED
+ ERROR_SERVICE_MARKED_FOR_DELETE
+ ERROR_SERVICE_NEVER_STARTED
+ ERROR_SERVICE_NOT_ACTIVE
+ ERROR_SERVICE_NOT_FOUND
+ ERROR_SERVICE_NO_THREAD
+ ERROR_SERVICE_REQUEST_TIMEOUT
+ ERROR_SERVICE_SPECIFIC_ERROR
+ ERROR_SERVICE_START_HANG
+ ERROR_SESSION_CREDENTIAL_CONFLICT
+ ERROR_SETCOUNT_ON_BAD_LB
+ ERROR_SETMARK_DETECTED
+ ERROR_SHARING_BUFFER_EXCEEDED
+ ERROR_SHARING_PAUSED
+ ERROR_SHARING_VIOLATION
+ ERROR_SHUTDOWN_IN_PROGRESS
+ ERROR_SIGNAL_PENDING
+ ERROR_SIGNAL_REFUSED
+ ERROR_SOME_NOT_MAPPED
+ ERROR_SPECIAL_ACCOUNT
+ ERROR_SPECIAL_GROUP
+ ERROR_SPECIAL_USER
+ ERROR_SPL_NO_ADDJOB
+ ERROR_SPL_NO_STARTDOC
+ ERROR_SPOOL_FILE_NOT_FOUND
+ ERROR_STACK_OVERFLOW
+ ERROR_STATIC_INIT
+ ERROR_SUBST_TO_JOIN
+ ERROR_SUBST_TO_SUBST
+ ERROR_SUCCESS
+ ERROR_SWAPERROR
+ ERROR_SYSTEM_TRACE
+ ERROR_THREAD_1_INACTIVE
+ ERROR_TLW_WITH_WSCHILD
+ ERROR_TOKEN_ALREADY_IN_USE
+ ERROR_TOO_MANY_CMDS
+ ERROR_TOO_MANY_CONTEXT_IDS
+ ERROR_TOO_MANY_LUIDS_REQUESTED
+ ERROR_TOO_MANY_MODULES
+ ERROR_TOO_MANY_MUXWAITERS
+ ERROR_TOO_MANY_NAMES
+ ERROR_TOO_MANY_OPEN_FILES
+ ERROR_TOO_MANY_POSTS
+ ERROR_TOO_MANY_SECRETS
+ ERROR_TOO_MANY_SEMAPHORES
+ ERROR_TOO_MANY_SEM_REQUESTS
+ ERROR_TOO_MANY_SESS
+ ERROR_TOO_MANY_SIDS
+ ERROR_TOO_MANY_TCBS
+ ERROR_TRANSFORM_NOT_SUPPORTED
+ ERROR_TRUSTED_DOMAIN_FAILURE
+ ERROR_TRUSTED_RELATIONSHIP_FAILURE
+ ERROR_TRUST_FAILURE
+ ERROR_UNABLE_TO_LOCK_MEDIA
+ ERROR_UNABLE_TO_UNLOAD_MEDIA
+ ERROR_UNEXP_NET_ERR
+ ERROR_UNKNOWN_PORT
+ ERROR_UNKNOWN_PRINTER_DRIVER
+ ERROR_UNKNOWN_PRINTPROCESSOR
+ ERROR_UNKNOWN_PRINT_MONITOR
+ ERROR_UNKNOWN_REVISION
+ ERROR_UNRECOGNIZED_MEDIA
+ ERROR_UNRECOGNIZED_VOLUME
+ ERROR_USER_EXISTS
+ ERROR_USER_MAPPED_FILE
+ ERROR_VC_DISCONNECTED
+ ERROR_WAIT_NO_CHILDREN
+ ERROR_WINDOW_NOT_COMBOBOX
+ ERROR_WINDOW_NOT_DIALOG
+ ERROR_WINDOW_OF_OTHER_THREAD
+ ERROR_WINS_INTERNAL
+ ERROR_WRITE_FAULT
+ ERROR_WRITE_PROTECT
+ ERROR_WRONG_DISK
+ ERROR_WRONG_PASSWORD
+ E_ABORT
+ E_ACCESSDENIED
+ E_FAIL
+ E_HANDLE
+ E_INVALIDARG
+ E_NOINTERFACE
+ E_NOTIMPL
+ E_OUTOFMEMORY
+ E_POINTER
+ E_UNEXPECTED
+ FACILITY_CONTROL
+ FACILITY_DISPATCH
+ FACILITY_ITF
+ FACILITY_NT_BIT
+ FACILITY_NULL
+ FACILITY_RPC
+ FACILITY_STORAGE
+ FACILITY_WIN32
+ FACILITY_WINDOWS
+ INPLACE_E_FIRST
+ INPLACE_E_LAST
+ INPLACE_E_NOTOOLSPACE
+ INPLACE_E_NOTUNDOABLE
+ INPLACE_S_FIRST
+ INPLACE_S_LAST
+ INPLACE_S_TRUNCATED
+ MARSHAL_E_FIRST
+ MARSHAL_E_LAST
+ MARSHAL_S_FIRST
+ MARSHAL_S_LAST
+ MEM_E_INVALID_LINK
+ MEM_E_INVALID_ROOT
+ MEM_E_INVALID_SIZE
+ MK_E_CANTOPENFILE
+ MK_E_CONNECTMANUALLY
+ MK_E_ENUMERATION_FAILED
+ MK_E_EXCEEDEDDEADLINE
+ MK_E_FIRST
+ MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
+ MK_E_INVALIDEXTENSION
+ MK_E_LAST
+ MK_E_MUSTBOTHERUSER
+ MK_E_NEEDGENERIC
+ MK_E_NOINVERSE
+ MK_E_NOOBJECT
+ MK_E_NOPREFIX
+ MK_E_NOSTORAGE
+ MK_E_NOTBINDABLE
+ MK_E_NOTBOUND
+ MK_E_NO_NORMALIZED
+ MK_E_SYNTAX
+ MK_E_UNAVAILABLE
+ MK_S_FIRST
+ MK_S_HIM
+ MK_S_LAST
+ MK_S_ME
+ MK_S_MONIKERALREADYREGISTERED
+ MK_S_REDUCED_TO_SELF
+ MK_S_US
+ NOERROR
+ NO_ERROR
+ OLEOBJ_E_FIRST
+ OLEOBJ_E_INVALIDVERB
+ OLEOBJ_E_LAST
+ OLEOBJ_E_NOVERBS
+ OLEOBJ_S_CANNOT_DOVERB_NOW
+ OLEOBJ_S_FIRST
+ OLEOBJ_S_INVALIDHWND
+ OLEOBJ_S_INVALIDVERB
+ OLEOBJ_S_LAST
+ OLE_E_ADVF
+ OLE_E_ADVISENOTSUPPORTED
+ OLE_E_BLANK
+ OLE_E_CANTCONVERT
+ OLE_E_CANT_BINDTOSOURCE
+ OLE_E_CANT_GETMONIKER
+ OLE_E_CLASSDIFF
+ OLE_E_ENUM_NOMORE
+ OLE_E_FIRST
+ OLE_E_INVALIDHWND
+ OLE_E_INVALIDRECT
+ OLE_E_LAST
+ OLE_E_NOCACHE
+ OLE_E_NOCONNECTION
+ OLE_E_NOSTORAGE
+ OLE_E_NOTRUNNING
+ OLE_E_NOT_INPLACEACTIVE
+ OLE_E_OLEVERB
+ OLE_E_PROMPTSAVECANCELLED
+ OLE_E_STATIC
+ OLE_E_WRONGCOMPOBJ
+ OLE_S_FIRST
+ OLE_S_LAST
+ OLE_S_MAC_CLIPFORMAT
+ OLE_S_STATIC
+ OLE_S_USEREG
+ REGDB_E_CLASSNOTREG
+ REGDB_E_FIRST
+ REGDB_E_IIDNOTREG
+ REGDB_E_INVALIDVALUE
+ REGDB_E_KEYMISSING
+ REGDB_E_LAST
+ REGDB_E_READREGDB
+ REGDB_E_WRITEREGDB
+ REGDB_S_FIRST
+ REGDB_S_LAST
+ RPC_E_ATTEMPTED_MULTITHREAD
+ RPC_E_CALL_CANCELED
+ RPC_E_CALL_REJECTED
+ RPC_E_CANTCALLOUT_AGAIN
+ RPC_E_CANTCALLOUT_INASYNCCALL
+ RPC_E_CANTCALLOUT_INEXTERNALCALL
+ RPC_E_CANTCALLOUT_ININPUTSYNCCALL
+ RPC_E_CANTPOST_INSENDCALL
+ RPC_E_CANTTRANSMIT_CALL
+ RPC_E_CHANGED_MODE
+ RPC_E_CLIENT_CANTMARSHAL_DATA
+ RPC_E_CLIENT_CANTUNMARSHAL_DATA
+ RPC_E_CLIENT_DIED
+ RPC_E_CONNECTION_TERMINATED
+ RPC_E_DISCONNECTED
+ RPC_E_FAULT
+ RPC_E_INVALIDMETHOD
+ RPC_E_INVALID_CALLDATA
+ RPC_E_INVALID_DATA
+ RPC_E_INVALID_DATAPACKET
+ RPC_E_INVALID_PARAMETER
+ RPC_E_NOT_REGISTERED
+ RPC_E_OUT_OF_RESOURCES
+ RPC_E_RETRY
+ RPC_E_SERVERCALL_REJECTED
+ RPC_E_SERVERCALL_RETRYLATER
+ RPC_E_SERVERFAULT
+ RPC_E_SERVER_CANTMARSHAL_DATA
+ RPC_E_SERVER_CANTUNMARSHAL_DATA
+ RPC_E_SERVER_DIED
+ RPC_E_SERVER_DIED_DNE
+ RPC_E_SYS_CALL_FAILED
+ RPC_E_THREAD_NOT_INIT
+ RPC_E_UNEXPECTED
+ RPC_E_WRONG_THREAD
+ RPC_S_ADDRESS_ERROR
+ RPC_S_ALREADY_LISTENING
+ RPC_S_ALREADY_REGISTERED
+ RPC_S_BINDING_HAS_NO_AUTH
+ RPC_S_BINDING_INCOMPLETE
+ RPC_S_CALL_CANCELLED
+ RPC_S_CALL_FAILED
+ RPC_S_CALL_FAILED_DNE
+ RPC_S_CALL_IN_PROGRESS
+ RPC_S_CANNOT_SUPPORT
+ RPC_S_CANT_CREATE_ENDPOINT
+ RPC_S_COMM_FAILURE
+ RPC_S_DUPLICATE_ENDPOINT
+ RPC_S_ENTRY_ALREADY_EXISTS
+ RPC_S_ENTRY_NOT_FOUND
+ RPC_S_FP_DIV_ZERO
+ RPC_S_FP_OVERFLOW
+ RPC_S_FP_UNDERFLOW
+ RPC_S_GROUP_MEMBER_NOT_FOUND
+ RPC_S_INCOMPLETE_NAME
+ RPC_S_INTERFACE_NOT_FOUND
+ RPC_S_INTERNAL_ERROR
+ RPC_S_INVALID_AUTH_IDENTITY
+ RPC_S_INVALID_BINDING
+ RPC_S_INVALID_BOUND
+ RPC_S_INVALID_ENDPOINT_FORMAT
+ RPC_S_INVALID_NAF_ID
+ RPC_S_INVALID_NAME_SYNTAX
+ RPC_S_INVALID_NETWORK_OPTIONS
+ RPC_S_INVALID_NET_ADDR
+ RPC_S_INVALID_OBJECT
+ RPC_S_INVALID_RPC_PROTSEQ
+ RPC_S_INVALID_STRING_BINDING
+ RPC_S_INVALID_STRING_UUID
+ RPC_S_INVALID_TAG
+ RPC_S_INVALID_TIMEOUT
+ RPC_S_INVALID_VERS_OPTION
+ RPC_S_MAX_CALLS_TOO_SMALL
+ RPC_S_NAME_SERVICE_UNAVAILABLE
+ RPC_S_NOTHING_TO_EXPORT
+ RPC_S_NOT_ALL_OBJS_UNEXPORTED
+ RPC_S_NOT_CANCELLED
+ RPC_S_NOT_LISTENING
+ RPC_S_NOT_RPC_ERROR
+ RPC_S_NO_BINDINGS
+ RPC_S_NO_CALL_ACTIVE
+ RPC_S_NO_CONTEXT_AVAILABLE
+ RPC_S_NO_ENDPOINT_FOUND
+ RPC_S_NO_ENTRY_NAME
+ RPC_S_NO_INTERFACES
+ RPC_S_NO_MORE_BINDINGS
+ RPC_S_NO_MORE_MEMBERS
+ RPC_S_NO_PRINC_NAME
+ RPC_S_NO_PROTSEQS
+ RPC_S_NO_PROTSEQS_REGISTERED
+ RPC_S_OBJECT_NOT_FOUND
+ RPC_S_OUT_OF_RESOURCES
+ RPC_S_PROCNUM_OUT_OF_RANGE
+ RPC_S_PROTOCOL_ERROR
+ RPC_S_PROTSEQ_NOT_FOUND
+ RPC_S_PROTSEQ_NOT_SUPPORTED
+ RPC_S_SEC_PKG_ERROR
+ RPC_S_SERVER_TOO_BUSY
+ RPC_S_SERVER_UNAVAILABLE
+ RPC_S_STRING_TOO_LONG
+ RPC_S_TYPE_ALREADY_REGISTERED
+ RPC_S_UNKNOWN_AUTHN_LEVEL
+ RPC_S_UNKNOWN_AUTHN_SERVICE
+ RPC_S_UNKNOWN_AUTHN_TYPE
+ RPC_S_UNKNOWN_AUTHZ_SERVICE
+ RPC_S_UNKNOWN_IF
+ RPC_S_UNKNOWN_MGR_TYPE
+ RPC_S_UNSUPPORTED_AUTHN_LEVEL
+ RPC_S_UNSUPPORTED_NAME_SYNTAX
+ RPC_S_UNSUPPORTED_TRANS_SYN
+ RPC_S_UNSUPPORTED_TYPE
+ RPC_S_UUID_LOCAL_ONLY
+ RPC_S_UUID_NO_ADDRESS
+ RPC_S_WRONG_KIND_OF_BINDING
+ RPC_S_ZERO_DIVIDE
+ RPC_X_BAD_STUB_DATA
+ RPC_X_BYTE_COUNT_TOO_SMALL
+ RPC_X_ENUM_VALUE_OUT_OF_RANGE
+ RPC_X_INVALID_ES_ACTION
+ RPC_X_NO_MORE_ENTRIES
+ RPC_X_NULL_REF_POINTER
+ RPC_X_SS_CANNOT_GET_CALL_HANDLE
+ RPC_X_SS_CHAR_TRANS_OPEN_FAIL
+ RPC_X_SS_CHAR_TRANS_SHORT_FILE
+ RPC_X_SS_CONTEXT_DAMAGED
+ RPC_X_SS_HANDLES_MISMATCH
+ RPC_X_SS_IN_NULL_CONTEXT
+ RPC_X_WRONG_ES_VERSION
+ RPC_X_WRONG_STUB_VERSION
+ SEVERITY_ERROR
+ SEVERITY_SUCCESS
+ STG_E_ABNORMALAPIEXIT
+ STG_E_ACCESSDENIED
+ STG_E_CANTSAVE
+ STG_E_DISKISWRITEPROTECTED
+ STG_E_EXTANTMARSHALLINGS
+ STG_E_FILEALREADYEXISTS
+ STG_E_FILENOTFOUND
+ STG_E_INSUFFICIENTMEMORY
+ STG_E_INUSE
+ STG_E_INVALIDFLAG
+ STG_E_INVALIDFUNCTION
+ STG_E_INVALIDHANDLE
+ STG_E_INVALIDHEADER
+ STG_E_INVALIDNAME
+ STG_E_INVALIDPARAMETER
+ STG_E_INVALIDPOINTER
+ STG_E_LOCKVIOLATION
+ STG_E_MEDIUMFULL
+ STG_E_NOMOREFILES
+ STG_E_NOTCURRENT
+ STG_E_NOTFILEBASEDSTORAGE
+ STG_E_OLDDLL
+ STG_E_OLDFORMAT
+ STG_E_PATHNOTFOUND
+ STG_E_READFAULT
+ STG_E_REVERTED
+ STG_E_SEEKERROR
+ STG_E_SHAREREQUIRED
+ STG_E_SHAREVIOLATION
+ STG_E_TOOMANYOPENFILES
+ STG_E_UNIMPLEMENTEDFUNCTION
+ STG_E_UNKNOWN
+ STG_E_WRITEFAULT
+ STG_S_CONVERTED
+ S_FALSE
+ S_OK
+ TYPE_E_AMBIGUOUSNAME
+ TYPE_E_BADMODULEKIND
+ TYPE_E_BUFFERTOOSMALL
+ TYPE_E_CANTCREATETMPFILE
+ TYPE_E_CANTLOADLIBRARY
+ TYPE_E_CIRCULARTYPE
+ TYPE_E_DLLFUNCTIONNOTFOUND
+ TYPE_E_DUPLICATEID
+ TYPE_E_ELEMENTNOTFOUND
+ TYPE_E_INCONSISTENTPROPFUNCS
+ TYPE_E_INVALIDID
+ TYPE_E_INVALIDSTATE
+ TYPE_E_INVDATAREAD
+ TYPE_E_IOERROR
+ TYPE_E_LIBNOTREGISTERED
+ TYPE_E_NAMECONFLICT
+ TYPE_E_OUTOFBOUNDS
+ TYPE_E_QUALIFIEDNAMEDISALLOWED
+ TYPE_E_REGISTRYACCESS
+ TYPE_E_SIZETOOBIG
+ TYPE_E_TYPEMISMATCH
+ TYPE_E_UNDEFINEDTYPE
+ TYPE_E_UNKNOWNLCID
+ TYPE_E_UNSUPFORMAT
+ TYPE_E_WRONGTYPEKIND
+ VIEW_E_DRAW
+ VIEW_E_FIRST
+ VIEW_E_LAST
+ VIEW_S_ALREADY_FROZEN
+ VIEW_S_FIRST
+ VIEW_S_LAST
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function. If a constant is not found then control is passed
+ # to the AUTOLOAD in AutoLoader.
+
+ my($constname);
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ #reset $! to zero to reset any current errors.
+ local $! = 0;
+ local $^E = 0;
+ my $val = constant($constname, @_ ? $_[0] : 0);
+ if ($! != 0) {
+ if ($! =~ /Invalid/) {
+ $AutoLoader::AUTOLOAD = $AUTOLOAD;
+ goto &AutoLoader::AUTOLOAD;
+ }
+ else {
+ ($pack,$file,$line) = caller;
+ die "Your vendor has not defined Win32::WinError macro $constname, used at $file line $line.";
+ }
+ }
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+}
+
+bootstrap Win32::WinError;
+
+# Preloaded methods go here.
+
+# Autoload methods go after __END__, and are processed by the autosplit program.
+
+1;
+__END__
diff --git a/Master/tlpkg/tlperl/lib/Win32/test-async.pl b/Master/tlpkg/tlperl/lib/Win32/test-async.pl
new file mode 100644
index 00000000000..c47e2df04ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/test-async.pl
@@ -0,0 +1,129 @@
+#
+# TEST-ASYNC.PL
+# Test Win32::Internet's Asynchronous Operations
+# by Aldo Calpini <dada@divinf.it>
+#
+# WARNING: this code is most likely to fail with almost-random errors
+# I don't know what is wrong here, any hint will be greatly
+# appreciated!
+
+use Win32::Internet;
+
+$params{'flags'} = INTERNET_FLAG_ASYNC;
+$params{'opentype'} = INTERNET_OPEN_TYPE_DIRECT;
+$I = new Win32::Internet(\%params);
+
+# print "Error: ", $I->Error(), "\n";
+print "I.handle=", $I->{'handle'}, "\n";
+
+$return = $I->SetStatusCallback();
+print "SetStatusCallback=$return";
+print "ERROR" if $return eq undef;
+print "\n";
+
+$buffer = $I->QueryOption(INTERNET_OPTION_READ_BUFFER_SIZE);
+print "Buffer=$buffer\n";
+
+$host = "ftp.activeware.com";
+$user = "anonymous";
+$pass = "dada\@divinf.it";
+
+
+print "Doing FTP()...\n";
+
+$handle2 = $I->FTP($FTP, $host, $user, $pass, 21, 1);
+
+print "Returned from FTP()...\n";
+
+($n, $t) = $I->Error();
+
+if($n == 997) {
+ print "Going asynchronous...\n";
+ ($status, $info) = $I->GetStatusCallback(1);
+ while($status != 100 and $status != 70) {
+ if($oldstatus != $status) {
+ if($status == 60) {
+ $FTP->{'handle'} = $info;
+ } elsif($status == 10) {
+ print "resolving name... \n";
+ } elsif($status == 11) {
+ print "name resolved... \n";
+ } elsif($status == 20) {
+ print "connecting... \n";
+ } elsif($status == 21) {
+ print "connected... \n";
+ } elsif($status == 30) {
+ print "sending... \n";
+ } elsif($status == 31) {
+ print "$info bytes sent. \n";
+ } elsif($status == 40) {
+ print "receiving... \n";
+ } elsif($status == 41) {
+ print "$info bytes received. \n";
+ } else {
+ print "status=$status\n";
+ }
+ }
+ $oldstatus = $status;
+ ($status, $info) = $I->GetStatusCallback(1);
+ }
+} else {
+ print "Error=", $I->Error(), "\n";
+}
+print "FTP.handle=", $FTP->{'handle'}, "\n";
+print "STATUS(after FTP)=", $I->GetStatusCallback(1), "\n";
+
+# "/pub/microsoft/sdk/activex13.exe",
+
+print "Doing Get()...\n";
+
+$file = "/Perl-Win32/perl5.001m/currentBuild/110-i86.zip";
+
+$FTP->Get($file, "110-i86.zip", 1, 0, 2);
+
+print "Returned from Get()...\n";
+
+($n, $t) = $I->Error();
+if($n == 997) {
+ print "Going asynchronous...\n";
+ $bytes = 0;
+ $oldstatus = 0;
+ ($status, $info) = $I->GetStatusCallback(2);
+ while($status != 100 and $status != 70) {
+ # print "status=$status info=$info\n";
+ # if($oldstatus!=$status) {
+ if($status == 10) {
+ print "resolving name... \n";
+ } elsif($status == 11) {
+ print "name resolved... \n";
+ } elsif($status == 20) {
+ print "connecting... \n";
+ } elsif($status == 21) {
+ print "connected... \n";
+ #} elsif($status == 30) {
+ # print "sending... \n";
+ } elsif($status == 31) {
+ print "$info bytes sent. \n";
+ #} elsif($status == 40) {
+ # print "receiving... \n";
+ } elsif($status == 41) {
+ $bytes = $bytes+$info;
+ print "$bytes bytes received. \n";
+ #} else {
+ # print "status=$status\n";
+ }
+ # }
+ $oldstatus = $status;
+ undef $status, $info;
+ ($status, $info) = $I->GetStatusCallback(2);
+ }
+} else {
+ print "Error=[$n] $t\n";
+}
+print "\n";
+($status, $info) = $I->GetStatusCallback(2);
+print "STATUS(after Get)=$status\n";
+print "Error=", $I->Error(), "\n";
+exit(0);
+
+
diff --git a/Master/tlpkg/tlperl/lib/Win32API/Registry.pm b/Master/tlpkg/tlperl/lib/Win32API/Registry.pm
new file mode 100644
index 00000000000..dbf98b4e2e9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32API/Registry.pm
@@ -0,0 +1,1792 @@
+# Registry.pm -- Low-level access to functions/constants from WINREG.h
+
+package Win32API::Registry;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); #@EXPORT_FAIL);
+$VERSION= '0.24';
+
+require Exporter;
+require DynaLoader;
+@ISA= qw(Exporter DynaLoader);
+
+@EXPORT= qw();
+%EXPORT_TAGS= (
+ Func => [qw( regConstant regLastError
+ AllowPriv AbortSystemShutdown InitiateSystemShutdown
+ RegCloseKey RegConnectRegistry RegCreateKey
+ RegCreateKeyEx RegDeleteKey RegDeleteValue
+ RegEnumKey RegEnumKeyEx RegEnumValue
+ RegFlushKey RegGetKeySecurity RegLoadKey
+ RegNotifyChangeKeyValue RegOpenKey RegOpenKeyEx
+ RegQueryInfoKey RegQueryMultipleValues RegQueryValue
+ RegQueryValueEx RegReplaceKey RegRestoreKey
+ RegSaveKey RegSetKeySecurity RegSetValue
+ RegSetValueEx RegUnLoadKey )],
+ FuncA => [qw(
+ AbortSystemShutdownA InitiateSystemShutdownA
+ RegConnectRegistryA RegCreateKeyA RegCreateKeyExA
+ RegDeleteKeyA RegDeleteValueA RegEnumKeyA
+ RegEnumKeyExA RegEnumValueA RegLoadKeyA
+ RegOpenKeyA RegOpenKeyExA RegQueryInfoKeyA
+ RegQueryMultipleValuesA RegQueryValueA RegQueryValueExA
+ RegReplaceKeyA RegRestoreKeyA RegSaveKeyA
+ RegSetValueA RegSetValueExA RegUnLoadKeyA )],
+ FuncW => [qw(
+ AbortSystemShutdownW InitiateSystemShutdownW
+ RegConnectRegistryW RegCreateKeyW RegCreateKeyExW
+ RegDeleteKeyW RegDeleteValueW RegEnumKeyW
+ RegEnumKeyExW RegEnumValueW RegLoadKeyW
+ RegOpenKeyW RegOpenKeyExW RegQueryInfoKeyW
+ RegQueryMultipleValuesW RegQueryValueW RegQueryValueExW
+ RegReplaceKeyW RegRestoreKeyW RegSaveKeyW
+ RegSetValueW RegSetValueExW RegUnLoadKeyW )],
+ HKEY_ => [qw(
+ HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_CURRENT_USER
+ HKEY_DYN_DATA HKEY_LOCAL_MACHINE HKEY_PERFORMANCE_DATA
+ HKEY_USERS )],
+ KEY_ => [qw(
+ KEY_QUERY_VALUE KEY_SET_VALUE KEY_CREATE_SUB_KEY
+ KEY_ENUMERATE_SUB_KEYS KEY_NOTIFY KEY_CREATE_LINK
+ KEY_READ KEY_WRITE KEY_EXECUTE
+ KEY_ALL_ACCESS),
+ 'KEY_DELETE', # DELETE (0x00010000L)
+ 'KEY_READ_CONTROL', # READ_CONTROL (0x00020000L)
+ 'KEY_WRITE_DAC', # WRITE_DAC (0x00040000L)
+ 'KEY_WRITE_OWNER', # WRITE_OWNER (0x00080000L)
+ 'KEY_SYNCHRONIZE', # SYNCHRONIZE (0x00100000L) (not used)
+ ],
+ REG_ => [qw(
+ REG_OPTION_RESERVED REG_OPTION_NON_VOLATILE REG_OPTION_VOLATILE
+ REG_OPTION_CREATE_LINK REG_OPTION_BACKUP_RESTORE
+ REG_OPTION_OPEN_LINK REG_LEGAL_OPTION REG_CREATED_NEW_KEY
+ REG_OPENED_EXISTING_KEY REG_WHOLE_HIVE_VOLATILE REG_REFRESH_HIVE
+ REG_NO_LAZY_FLUSH REG_NOTIFY_CHANGE_ATTRIBUTES
+ REG_NOTIFY_CHANGE_NAME REG_NOTIFY_CHANGE_LAST_SET
+ REG_NOTIFY_CHANGE_SECURITY REG_LEGAL_CHANGE_FILTER
+ REG_NONE REG_SZ REG_EXPAND_SZ
+ REG_BINARY REG_DWORD REG_DWORD_LITTLE_ENDIAN
+ REG_DWORD_BIG_ENDIAN REG_LINK REG_MULTI_SZ
+ REG_RESOURCE_LIST REG_FULL_RESOURCE_DESCRIPTOR
+ REG_RESOURCE_REQUIREMENTS_LIST )],
+ SE_ => [qw(
+ SE_ASSIGNPRIMARYTOKEN_NAME SE_AUDIT_NAME
+ SE_BACKUP_NAME SE_CHANGE_NOTIFY_NAME
+ SE_CREATE_PAGEFILE_NAME SE_CREATE_PERMANENT_NAME
+ SE_CREATE_TOKEN_NAME SE_DEBUG_NAME
+ SE_INCREASE_QUOTA_NAME SE_INC_BASE_PRIORITY_NAME
+ SE_LOAD_DRIVER_NAME SE_LOCK_MEMORY_NAME
+ SE_MACHINE_ACCOUNT_NAME SE_PROF_SINGLE_PROCESS_NAME
+ SE_REMOTE_SHUTDOWN_NAME SE_RESTORE_NAME
+ SE_SECURITY_NAME SE_SHUTDOWN_NAME
+ SE_SYSTEMTIME_NAME SE_SYSTEM_ENVIRONMENT_NAME
+ SE_SYSTEM_PROFILE_NAME SE_TAKE_OWNERSHIP_NAME
+ SE_TCB_NAME SE_UNSOLICITED_INPUT_NAME )],
+);
+@EXPORT_OK= ();
+{ my $ref;
+ foreach $ref ( values(%EXPORT_TAGS) ) {
+ push( @EXPORT_OK, @$ref ) unless $ref->[0] =~ /^SE_/;
+ }
+}
+$EXPORT_TAGS{ALL}= [ @EXPORT_OK ]; # \@EXPORT_OK once SE_* settles down.
+# push( @EXPORT_OK, "JHEREG_TACOSALAD" ); # Used to test Mkconst2perl
+push( @EXPORT_OK, @{$EXPORT_TAGS{SE_}} );
+
+bootstrap Win32API::Registry $VERSION;
+
+# Preloaded methods go here.
+
+# To convert C constants to Perl code in cRegistry.pc
+# [instead of C or C++ code in cRegistry.h]:
+# * Modify F<Makefile.PL> to add WriteMakeFile() =>
+# CONST2PERL/postamble => [[ "Win32API::Registry" => ]] WRITE_PERL => 1.
+# * Either comment out C<#include "cRegistry.h"> from F<Registry.xs>
+# or make F<cRegistry.h> an empty file.
+# * Make sure the following C<if> block is not commented out.
+# * "nmake clean", "perl Makefile.PL", "nmake"
+
+if( ! defined &REG_NONE ) {
+ require "Win32API/Registry/cRegistry.pc";
+}
+
+# This would be convenient but inconsistant and hard to explain:
+#push( @{$EXPORT_TAGS{ALL}}, @{$EXPORT_TAGS{SE_}} )
+# if defined &SE_TCB_NAME;
+
+sub regConstant
+{
+ my( $name )= @_;
+ if( 1 != @_ || ! $name || $name =~ /\W/ ) {
+ require Carp;
+ Carp::croak( 'Usage: ',__PACKAGE__,'::regConstant("CONST_NAME")' );
+ }
+ my $proto= prototype $name;
+ if( defined \&$name
+ && defined $proto
+ && "" eq $proto ) {
+ no strict 'refs';
+ return &$name;
+ }
+ return undef;
+}
+
+# We provide this for backwards compatibility:
+sub constant
+{
+ my( $name )= @_;
+ my $value= regConstant( $name );
+ if( defined $value ) {
+ $!= 0;
+ return $value;
+ }
+ $!= 11; # EINVAL
+ return 0;
+}
+
+# BEGIN {
+# my $code= 'return _regLastError(@_)';
+# local( $!, $^E )= ( 1, 1 );
+# if( $! ne $^E ) {
+# $code= '
+# local( $^E )= _regLastError(@_);
+# my $ret= $^E;
+# return $ret;
+# ';
+# }
+# eval "sub regLastError { $code }";
+# die "$@" if $@;
+# }
+
+package Win32API::Registry::_error;
+
+use overload
+ '""' => sub {
+ require Win32 unless defined &Win32::FormatMessage;
+ $_ = Win32::FormatMessage(Win32API::Registry::_regLastError());
+ tr/\r\n//d;
+ return $_;
+ },
+ '0+' => sub { Win32API::Registry::_regLastError() },
+ 'fallback' => 1;
+
+sub new { return bless {}, shift }
+sub set { Win32API::Registry::_regLastError($_[1]); return $_[0] }
+
+package Win32API::Registry;
+
+my $_error = new Win32API::Registry::_error;
+
+sub regLastError {
+ require Carp;
+ Carp::croak('Usage: ',__PACKAGE__,'::regLastError( [$setWin32ErrCode] )') if @_ > 1;
+ $_error->set($_[0]) if defined $_[0];
+ return $_error;
+}
+
+# Since we ISA DynaLoader which ISA AutoLoader, we ISA AutoLoader so we
+# need this next chunk to prevent Win32API::Registry->nonesuch() from
+# looking for "nonesuch.al" and producing confusing error messages:
+use vars qw($AUTOLOAD);
+sub AUTOLOAD {
+ require Carp;
+ Carp::croak(
+ "Can't locate method $AUTOLOAD via package Win32API::Registry" );
+}
+
+# Replace "&rout;" with "goto &rout;" when that is supported on Win32.
+
+# Let user omit all buffer sizes:
+sub RegEnumKeyExA {
+ if( 6 == @_ ) { splice(@_,4,0,[]); splice(@_,2,0,[]); }
+ &_RegEnumKeyExA;
+}
+sub RegEnumKeyExW {
+ if( 6 == @_ ) { splice(@_,4,0,[]); splice(@_,2,0,[]); }
+ &_RegEnumKeyExW;
+}
+sub RegEnumValueA {
+ if( 6 == @_ ) { splice(@_,2,0,[]); push(@_,[]); }
+ &_RegEnumValueA;
+}
+sub RegEnumValueW {
+ if( 6 == @_ ) { splice(@_,2,0,[]); push(@_,[]); }
+ &_RegEnumValueW;
+}
+sub RegQueryInfoKeyA {
+ if( 11 == @_ ) { splice(@_,2,0,[]); }
+ &_RegQueryInfoKeyA;
+}
+sub RegQueryInfoKeyW {
+ if( 11 == @_ ) { splice(@_,2,0,[]); }
+ &_RegQueryInfoKeyW;
+}
+
+sub RegEnumKeyA {
+ push(@_,[]) if 3 == @_;
+ &_RegEnumKeyA;
+}
+sub RegEnumKeyW {
+ push(@_,[]) if 3 == @_;
+ &_RegEnumKeyW;
+}
+sub RegGetKeySecurity {
+ push(@_,[]) if 3 == @_;
+ &_RegGetKeySecurity;
+}
+sub RegQueryMultipleValuesA {
+ push(@_,[]) if 4 == @_;
+ &_RegQueryMultipleValuesA;
+}
+sub RegQueryMultipleValuesW {
+ push(@_,[]) if 4 == @_;
+ &_RegQueryMultipleValuesW;
+}
+sub RegQueryValueA {
+ push(@_,[]) if 3 == @_;
+ &_RegQueryValueA;
+}
+sub RegQueryValueW {
+ push(@_,[]) if 3 == @_;
+ &_RegQueryValueW;
+}
+sub RegQueryValueExA {
+ push(@_,[]) if 5 == @_;
+ &_RegQueryValueExA;
+}
+sub RegQueryValueExW {
+ push(@_,[]) if 5 == @_;
+ &_RegQueryValueExW;
+}
+sub RegSetValueA {
+ push(@_,0) if 4 == @_;
+ &_RegSetValueA;
+}
+sub RegSetValueW {
+ push(@_,0) if 4 == @_;
+ &_RegSetValueW;
+}
+sub RegSetValueExA {
+ push(@_,0) if 5 == @_;
+ &_RegSetValueExA;
+}
+sub RegSetValueExW {
+ push(@_,0) if 5 == @_;
+ &_RegSetValueExW;
+}
+
+# Aliases for non-Unicode functions:
+sub AbortSystemShutdown { &AbortSystemShutdownA; }
+sub InitiateSystemShutdown { &InitiateSystemShutdownA; }
+sub RegConnectRegistry { &RegConnectRegistryA; }
+sub RegCreateKey { &RegCreateKeyA; }
+sub RegCreateKeyEx { &RegCreateKeyExA; }
+sub RegDeleteKey { &RegDeleteKeyA; }
+sub RegDeleteValue { &RegDeleteValueA; }
+sub RegEnumKey { &RegEnumKeyA; }
+sub RegEnumKeyEx { &RegEnumKeyExA; }
+sub RegEnumValue { &RegEnumValueA; }
+sub RegLoadKey { &RegLoadKeyA; }
+sub RegOpenKey { &RegOpenKeyA; }
+sub RegOpenKeyEx { &RegOpenKeyExA; }
+sub RegQueryInfoKey { &RegQueryInfoKeyA; }
+sub RegQueryMultipleValues { &RegQueryMultipleValuesA; }
+sub RegQueryValue { &RegQueryValueA; }
+sub RegQueryValueEx { &RegQueryValueExA; }
+sub RegReplaceKey { &RegReplaceKeyA; }
+sub RegRestoreKey { &RegRestoreKeyA; }
+sub RegSaveKey { &RegSaveKeyA; }
+sub RegSetValue { &RegSetValueA; }
+sub RegSetValueEx { &RegSetValueExA; }
+sub RegUnLoadKey { &RegUnLoadKeyA; }
+
+1;
+__END__
+
+=head1 NAME
+
+Win32API::Registry - Low-level access to Win32 system API calls from WINREG.H
+
+=head1 SYNOPSIS
+
+ use Win32API::Registry 0.21 qw( :ALL );
+
+ RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\Disk", 0, KEY_READ, $key );
+ or die "Can't open HKEY_LOCAL_MACHINE\\SYSTEM\\Disk: ",
+ regLastError(),"\n";
+ RegQueryValueEx( $key, "Information", [], $type, $data, [] );
+ or die "Can't read HKEY_L*MACHINE\\SYSTEM\\Disk\\Information: ",
+ regLastError(),"\n";
+ [...]
+ RegCloseKey( $key )
+ or die "Can't close HKEY_LOCAL_MACHINE\\SYSTEM\\Disk: ",
+ regLastError(),"\n";
+
+=head1 DESCRIPTION
+
+This provides fairly low-level access to the Win32 System API
+calls dealing with the Registry [mostly from WINREG.H]. This
+is mostly intended to be used by other modules such as
+C<Win32::TieRegistry> [which provides an extremely Perl-friendly
+method for using the Registry].
+
+For a description of the logical structure of the Registry, see
+the documentation for the C<Win32::TieRegistry> module.
+
+To pass in C<NULL> as the pointer to an optional buffer, pass in
+an empty list reference, C<[]>.
+
+Beyond raw access to the API calls and related constants, this module
+handles smart buffer allocation and translation of return codes.
+
+All calls return a true value for success and a false value for
+failure. After any failure, C<$^E> should automatically be set
+to indicate the reason. However, current versions of Perl often
+overwrite C<$^E> too quickly, so you can use C<regLastError()>
+instead, which is only set by Win32API::Registry routines.
+
+Note that C<$!> is not set by these routines except by
+C<Win32API::Registry::constant()> when a constant is not defined.
+
+=head2 Exports
+
+Nothing is exported by default. The following tags can be used to
+have sets of symbols exported.
+
+[Note that much of the following documentation refers to the
+behavior of the underlying API calls which may vary in current
+and future versions of the Win32 API without any changes to this
+module. Therefore you should check the Win32 API documentation
+directly when needed.]
+
+=over
+
+=item :Func
+
+The basic function names:
+
+=over
+
+=item AllowPriv
+
+=item C<AllowPriv( $sPrivName, $bEnable )>
+
+Not a Win32 API call. Enables or disables a specific privilege for
+the current process. Returns a true value if successful and a false
+value [and sets C<$^E>/C<regLastError()>] on failure. This routine
+does not provide a way to tell if a privilege is currently enabled.
+
+C<$sPrivname> is a Win32 privilege name [see L</:SE_>]. For example,
+C<"SeBackupPrivilege"> [a.k.a. C<SE_BACKUP_NAME>] controls whether
+you can use C<RegSaveKey()> and C<"SeRestorePrivilege"> [a.k.a.
+C<SE_RESTORE_NAME>] controls whether you can use C<RegLoadKey()>.
+
+If C<$bEnable> is true, then C<AllowPriv()> tries to enable the
+privilege. Otherwise it tries to disable the privilege.
+
+=item AbortSystemShutdown
+
+=item C<AbortSystemShutdown( $sComputerName )>
+
+Tries to abort a remote shutdown request previously made via
+C<InitiateSystemShutdown()>. Returns a true value if successful
+and a false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+=item InitiateSystemShutdown
+
+=item C<InitiateSystemShutdown( $sComputer, $sMessage, $uTimeoutSecs, $bForce, $bReboot )>
+
+Requests that a [remote] computer be shutdown or rebooted.
+Returns a true value if successful and a false value [and
+sets C<$^E>/C<regLastError()>] on failure.
+
+C<$sComputer> is the name [or address] of the computer to be
+shutdown or rebooted. You can use C<[]> [for C<NULL>] or C<"">
+to indicate the local computer.
+
+C<$sMessage> is the message to be displayed in a pop-up window
+on the desktop of the computer to be shutdown or rebooted until
+the timeout expires or the shutdown is aborted via
+C<AbortSystemShutdown()>. With C<$iTimeoutSecs == 0>, the
+message will never be visible.
+
+C<$iTimeoutSecs> is the number of seconds to wait before starting
+the shutdown.
+
+If C<$bForce> is false, then any applications running on the remote
+computer get a chance to prompt the remote user whether they want
+to save changes. Also, for any applications that do not exit quickly
+enough, the operating system will prompt the user whether they wish
+to wait longer for the application to exit or force it to exit now.
+At any of these prompts the user can press B<CANCEL> to abort the
+shutdown but if no applications have unsaved data, they will likely
+all exit quickly and the shutdown will progress with the remote user
+having no option to cancel the shutdown.
+
+If C<$bForce> is true, all applications are told to exit immediately
+and so will not prompt the user even if there is unsaved data. Any
+applications that take too long to exit will be forcibly killed after
+a short time. The only way to abort the shutdown is to call
+C<AbortSystemShutdown()> before the timeout expires and there is no
+way to abort the shutdown once it has begun.
+
+If C<$bReboot> is true, the computer will automatically reboot once
+the shutdown is complete. If C<$bReboot> is false, then when the
+shutdown is complete the computer will halt at a screen indicating
+that the shutdown is complete and offering a way for the user to
+start to boot the computer.
+
+You must have the C<"SeRemoteShutdownPrivilege"> privilege
+on the remote computer for this call to succeed. If shutting
+down the local computer, then the calling process must have
+the C<"SeShutdownPrivilege"> privilege and have it enabled.
+
+=item RegCloseKey
+
+=item C<RegCloseKey( $hKey )>
+
+Closes the handle to a Registry key returned by C<RegOpenKeyEx()>,
+C<RegConnectRegistry()>, C<RegCreateKeyEx()>, or a few other
+routines. Returns a true value if successful and a false value
+[and sets C<$^E>/C<regLastError()>] on failure.
+
+=item RegConnectRegistry
+
+=item C<RegConnectRegistry( $sComputer, $hRootKey, $ohKey )>
+
+Connects to one of the root Registry keys of a remote computer.
+Returns a true value if successful and a false value [and
+sets C<$^E>/C<regLastError()>] on failure.
+
+C<$sComputer> is the name [or address] of a remote computer
+whose Registry you wish to access.
+
+C<$hKey> must be either C<HKEY_LOCAL_MACHINE> or C<HKEY_USERS>
+and specifies which root Registry key on the remote computer
+you wish to have access to.
+
+C<$phKey> will be set to the handle to be used to access the
+remote Registry key if the call succeeds.
+
+=item regConstant
+
+=item C<$value= regConstant( $sConstantName )>
+
+Fetch the value of a constant. Returns C<undef> if C<$sConstantName>
+is not the name of a constant supported by this module. Never sets
+C<$!> nor C<$^E>.
+
+This function is rarely used since you will usually get the value of a
+constant by having that constant imported into your package by listing
+the constant name in the C<use Win32API::Registry> statement and then
+simply using the constant name in your code [perhaps followed by
+C<()>]. This function is useful for verifying constant names not in
+Perl code, for example, after prompting a user to type in a constant
+name.
+
+=item RegCreateKey
+
+=item C<RegCreateKey( $hKey, $sSubKey, $ohSubKey )>
+
+This routine is meant only for compatibility with Windows version
+3.1. Use C<RegCreateKeyEx()> instead.
+
+=item RegCreateKeyEx
+
+=item C<RegCreateKeyEx( $hKey, $sSubKey, $uZero, $sClass, $uOpts, $uAccess, $pSecAttr, $ohNewKey, $ouDisp )>
+
+Creates a new Registry subkey. Returns a true value if successful and
+a false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sSubKey> is the name of the new subkey to be created.
+
+C<$iZero> is reserved for future use and should always be specified
+as C<0>.
+
+C<$sClass> is a string to be used as the class for the new
+subkey. We are not aware of any current use for Registry key
+class information so the empty string, C<"">, should usually
+be used here.
+
+C<$iOpts> is a numeric value containing bits that control options
+used while creating the new subkey. C<REG_OPTION_NON_VOLATILE>
+is the default. C<REG_OPTION_VOLATILE> [which is ignored on
+Windows 95] means the data stored under this key is not kept
+in a file and will not be preserved when the system reboots.
+C<REG_OPTION_BACKUP_RESTORE> [also ignored on Windows 95] means
+ignore the C<$iAccess> parameter and try to open the new key with
+the access required to backup or restore the key.
+
+C<$iAccess> is a numeric mask of bits specifying what type of
+access is desired when opening the new subkey. See C<RegOpenKeyEx()>.
+
+C<$pSecAttr> is a C<SECURITY_ATTRIBUTES> structure packed into
+a Perl string which controls whether the returned handle can be
+inherited by child processes. Normally you would pass C<[]> for
+this parameter to have C<NULL> passed to the underlying API
+indicating that the handle cannot be inherited. If not under
+Windows95, then C<$pSecAttr> also allows you to specify
+C<SECURITY_DESCRIPTOR> that controls which users will have
+what type of access to the new key -- otherwise the new key
+inherits its security from its parent key.
+
+C<$phKey> will be set to the handle to be used to access the new
+subkey if the call succeeds.
+
+C<$piDisp> will be set to either C<REG_CREATED_NEW_KEY> or
+C<REG_OPENED_EXISTING_KEY> to indicate for which reason the
+call succeeded. Can be specified as C<[]> if you don't care.
+
+If C<$phKey> and C<$piDisp> start out as integers, then they will
+probably remain unchanged if the call fails.
+
+=item RegDeleteKey
+
+=item C<RegDeleteKey( $hKey, $sSubKey )>
+
+Deletes a subkey of an open Registry key provided that the subkey
+contains no subkeys of its own [but the subkey may contain values].
+Returns a true value if successful and a false value [and sets
+C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sSubKey> is the name of the subkey to be deleted.
+
+=item RegDeleteValue
+
+=item C<RegDeleteValue( $hKey, $sValueName )>
+
+Deletes a value from an open Registry key. Returns a true value if
+successful and a false value [and sets C<$^E>/C<regLastError()>] on
+failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sValueKey> is the name of the value to be deleted.
+
+=item RegEnumKey
+
+=item C<RegEnumKey( $hKey, $uIndex, $osName, $ilNameSize )>
+
+This routine is meant only for compatibility with Windows version
+3.1. Use C<RegEnumKeyEx()> instead.
+
+=item RegEnumKeyEx
+
+=item C<RegEnumKeyEx( $hKey, $uIndex, $osName, $iolName, $pNull, $osClass, $iolClass, $opftLastWrite )>
+
+Lets you enumerate the names of all of the subkeys directly under
+an open Registry key. Returns a true value if successful and a false
+value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$iIndex> is the sequence number of the immediate subkey that
+you want information on. Start with this value as C<0> then
+repeat the call incrementing this value each time until the
+call fails with C<$^E>/C<regLastError()> numerically equal to
+C<ERROR_NO_MORE_ITEMS>.
+
+C<$sName> will be set to the name of the subkey. Can be C<[]> if
+you don't care about the name.
+
+C<$plName> initially specifies the [minimum] buffer size to be
+allocated for C<$sName>. Will be set to the length of the subkey
+name if the requested subkey exists even if C<$sName> isn't
+successfully set to the subkey name. See L<Buffer sizes> for
+more information.
+
+C<$pNull> is reserved for future used and should be passed as C<[]>.
+
+C<$sClass> will be set to the class name for the subkey. Can be
+C<[]> if you don't care about the class.
+
+C<$plClass> initially specifies the [minimum] buffer size to be
+allocated for C<$sClass> and will be set to the length of the
+subkey class name if the requested subkey exists. See L<Buffer
+sizes> for more information.
+
+C<$pftLastWrite> will be set to a C<FILETIME> structure packed
+into a Perl string and indicating when the subkey was last changed.
+Can be C<[]>.
+
+You may omit both C<$plName> and C<$plClass> to get the same effect
+as passing in C<[]> for each of them.
+
+=item RegEnumValue
+
+=item C<RegEnumValue( $hKey, $uIndex, $osValName, $iolValName, $pNull, $ouType, $opValData, $iolValData )>
+
+Lets you enumerate the names of all of the values contained in an
+open Registry key. Returns a true value if successful and a false
+value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$iIndex> is the sequence number of the value that you want
+information on. Start with this value as C<0> then repeat the
+call incrementing this value each time until the call fails with
+C<ERROR_NO_MORE_ITEMS>.
+
+C<$sValName> will be set to the name of the value. Can be C<[]>
+if you don't care about the name.
+
+C<$plValName> initially specifies the [minimum] buffer size to be
+allocated for C<$sValName>. Will be set to the length of the value
+name if the requested value exists even if C<$sValName> isn't
+successfully set to the value name. See L<Buffer sizes> for
+more information.
+
+C<$pNull> is reserved for future used and should be passed as C<[]>.
+
+C<$piType> will be set to the type of data stored in the value data.
+If the call succeeds, it will be set to a C<REG_*> value unless
+passed in as C<[]>.
+
+C<$pValData> will be set to the data [packed into a Perl string]
+that is stored in the requested value. Can be C<[]> if you don't
+care about the value data.
+
+C<$plValData> initially specifies the [minimum] buffer size to be
+allocated for C<$sValData> and will be set to the length of the
+value data if the requested value exists. See L<Buffer sizes> for
+more information.
+
+You may omit both C<$plValName> and C<$plValData> to get the same
+effect as passing in C<[]> for each of them.
+
+=item RegFlushKey
+
+=item C<RegFlushKey( $hKey )>
+
+Forces the data stored under an open Registry key to be flushed
+to the disk file where the data is preserved between reboots.
+Forced flushing is not guaranteed to be efficient so this routine
+should almost never be called. Returns a true value if successful
+and a false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+=item RegGetKeySecurity
+
+=item C<RegGetKeySecurity( $hKey, $uSecInfo, $opSecDesc, $iolSecDesc )>
+
+Retrieves one of the C<SECURITY_DESCRIPTOR> structures describing
+part of the security for an open Registry key. Returns a true value
+if successful and a false value [and sets C<$^E>/C<regLastError()>]
+on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$iSecInfo> is a numeric C<SECURITY_INFORMATION> value that
+specifies which parts of the C<SECURITY_DESCRIPTOR> structure
+to retrieve. Should be C<OWNER_SECURITY_INFORMATION>,
+C<GROUP_SECURITY_INFORMATION>, C<DACL_SECURITY_INFORMATION>, or
+or C<SACL_SECURITY_INFORMATION> or two or more of these bits
+combined using C<|>.
+
+C<$pSecDesc> will be set to the requested C<SECURITY_DESCRIPTOR>
+structure [packed into a Perl string].
+
+C<$plSecDesc> initially specifies the [minimum] buffer size to be
+allocated for C<$sSecDesc> and will be set to the length of the
+security descriptor. See L<Buffer sizes> for more information.
+You may omit this parameter to get the same effect as passing in
+C<[]> for it.
+
+=item regLastError
+
+=item C<$svError= regLastError();>
+
+=item C<regLastError( $uError );>
+
+Returns the last error encountered by a routine from this module.
+It is just like C<$^E> except it isn't changed by anything except
+routines from this module. Ideally you could just use C<$^E>, but
+current versions of Perl often overwrite C<$^E> before you get a
+chance to check it and really old versions of Perl don't really
+support C<$^E> under Win32.
+
+Just like C<$^E>, in a numeric context C<regLastError()> returns
+the numeric error value while in a string context it returns a
+text description of the error [actually it returns a Perl scalar
+that contains both values so C<$x= regLastError()> causes C<$x>
+to give different values in string vs. numeric contexts].
+
+The last form sets the error returned by future calls to
+C<regLastError()> and should not be used often. C<$uError> must
+be a numeric error code. Also returns the dual-valued version
+of C<$uError>.
+
+=item RegLoadKey
+
+=item C<RegLoadKey( $hKey, $sSubKey, $sFileName )>
+
+Loads a hive file. That is, it creates a new subkey in the
+Registry and associates that subkey with a disk file that contains
+a Registry hive so that the new subkey can be used to access the
+keys and values stored in that hive. Hives are usually created
+via C<RegSaveKey()>. Returns a true value if successful and a
+false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key that can have hives
+loaded to it. This must be C<HKEY_LOCAL_MACHINE>, C<HKEY_USERS>,
+or a remote version of one of these from a call to
+C<RegConnectRegistry()>.
+
+C<$sSubKey> is the name of the new subkey to created and associated
+with the hive file.
+
+C<$sFileName> is the name of the hive file to be loaded. This
+file name is interpretted relative to the
+C<%SystemRoot%/System32/config> directory on the computer where
+the C<$hKey> key resides. If C<$sFileName> is on a FAT file
+system, then its name must not have an extension.
+
+You must have the C<SE_RESTORE_NAME> privilege to use this routine.
+
+WARNING: Loading of hive files via a network share may silently
+corrupt the hive and so should not be attempted [this is a problem
+in at least some versions of the underlying API which this module
+does not try to fix or avoid]. To access a hive file located on a
+remote computer, connect to the remote computer's Registry and load
+the hive via that.
+
+=item RegNotifyChangeKeyValue
+
+=item C<RegNotifyChangeKeyValue( $hKey, $bWatchSubtree, $uNotifyFilter, $hEvent, $bAsync )>
+
+Arranges for your process to be notified when part of the Registry
+is changed. Returns a true value if successful and a false value
+[and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call] for which you wish to be notified when any changes
+are made to it.
+
+If C<$bWatchSubtree> is true, then changes to any subkey or
+descendant of C<$hKey> are also reported.
+
+C<$iNotifyFilter> controllers what types of changes are reported. It
+is a numeric value containing one or more of the following bit masks:
+
+=over
+
+=item C<REG_NOTIFY_CHANGE_NAME>
+
+Notify if a subkey is added or deleted to a monitored key.
+
+=item C<REG_NOTIFY_CHANGE_LAST_SET>
+
+Notify if a value in a monitored key is added, deleted, or modified.
+
+=item C<REG_NOTIFY_CHANGE_SECURITY>
+
+Notify if a security descriptor of a monitored key is changed.
+
+=item C<REG_NOTIFY_CHANGE_ATTRIBUTES>
+
+Notify if any attributes of a monitored key are changed [class
+name or security descriptors].
+
+=back
+
+C<$hEvent> is ignored unless C<$bAsync> is true. Otherwise, C<$hEvent>
+is a handle to a Win32 I<event> that will be signaled when changes are
+to be reported.
+
+If C<$bAsync> is true, then C<RegNotifyChangeKeyValue()> returns
+immediately and uses C<$hEvent> to notify your process of changes.
+If C<$bAsync> is false, then C<RegNotifyChangeKeyValue()> does
+not return until there is a change to be notified of.
+
+This routine does not work with Registry keys on remote computers.
+
+=item RegOpenKey
+
+=item C<RegOpenKey( $hKey, $sSubKey, $ohSubKey )>
+
+This routine is meant only for compatibility with Windows version
+3.1. Use C<RegOpenKeyEx()> instead.
+
+=item RegOpenKeyEx
+
+=item C<RegOpenKeyEx( $hKey, $sSubKey, $uOptions, $uAccess, $ohSubKey )>
+
+Opens an existing Registry key. Returns a true value if successful
+and a false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sSubKey> is the name of an existing subkey to be opened.
+Can be C<""> or C<[]> to open an additional handle to the
+key specified by C<$hKey>.
+
+C<$iOptions> is a numeric value containing bits that control options
+used while opening the subkey. There are currently no supported
+options so this parameter should be specified as C<0>.
+
+C<$iAccess> is a numeric mask of bits specifying what type of
+access is desired when opening the new subkey. Should be a
+combination of one or more of the following bit masks:
+
+=over
+
+=item C<KEY_ALL_ACCESS>
+
+ KEY_READ | KEY_WRITE | KEY_CREATE_LINK
+
+=item C<KEY_READ>
+
+ KEY_QUERY_VALUE | KEY_ENUMERATE_SUBKEYS | KEY_NOTIFY | STANDARD_RIGHTS_READ
+
+=item C<KEY_WRITE>
+
+ KEY_SET_VALUE | KEY_CREATE_SUB_KEY | STANDARD_RIGHTS_WRITE
+
+=item C<KEY_QUERY_VALUE>
+
+=item C<KEY_SET_VALUE>
+
+=item C<KEY_ENUMERATE_SUB_KEYS>
+
+=item C<KEY_CREATE_SUB_KEY>
+
+=item C<KEY_NOTIFY>
+
+Allows you to use C<RegNotifyChangeKeyValue()> on the opened key.
+
+=item C<KEY_EXECUTE>
+
+Same as C<KEY_READ>.
+
+=item C<KEY_CREATE_LINK>
+
+Gives you permission to create a symbolic link like
+C<HKEY_CLASSES_ROOT> and C<HKEY_CURRENT_USER>, though the method for
+doing so is not documented [and probably requires use of the mostly
+undocumented "native" routines, C<Nt*()> a.k.a. C<Zw*()>].
+
+=back
+
+C<$phKey> will be set to the handle to be used to access the new subkey
+if the call succeeds.
+
+=item RegQueryInfoKey
+
+=item C<RegQueryInfoKey( $hKey, $osClass, $iolClass, $pNull, $ocSubKeys, $olSubKey, $olSubClass, $ocValues, $olValName, $olValData, $olSecDesc, $opftTime )>
+
+Gets miscellaneous information about an open Registry key.
+Returns a true value if successful and a false value [and
+sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sClass> will be set to the class name for the key. Can be
+C<[]> if you don't care about the class.
+
+C<$plClass> initially specifies the [minimum] buffer size to be
+allocated for C<$sClass> and will be set to the length of the
+key's class name. See L<Buffer sizes> for more information.
+You may omit this parameter to get the same effect as passing in
+C<[]> for it.
+
+C<$pNull> is reserved for future use and should be passed as C<[]>.
+
+C<$pcSubKeys> will be set to the count of the number of subkeys
+directly under this key. Can be C<[]>.
+
+C<$plSubKey> will be set to the length of the longest subkey name.
+Can be C<[]>.
+
+C<$plSubClass> will be set to the length of the longest class name
+used with an immediate subkey of this key. Can be C<[]>.
+
+C<$pcValues> will be set to the count of the number of values in
+this key. Can be C<[]>.
+
+C<$plValName> will be set to the length of the longest value name
+in this key. Can be C<[]>.
+
+C<$plValData> will be set to the length of the longest value data
+in this key. Can be C<[]>.
+
+C<$plSecDesc> will be set to the length of this key's full security
+descriptor.
+
+C<$pftTime> will be set to a C<FILETIME> structure packed
+into a Perl string and indicating when this key was last changed.
+Can be C<[]>.
+
+=item RegQueryMultipleValues
+
+=item C<RegQueryMultipleValues( $hKey, $ioarValueEnts, $icValueEnts, $opBuffer, $iolBuffer )>
+
+Allows you to use a single call to query several values from a single
+open Registry key to maximize efficiency. Returns a true value if
+successful and a false value [and sets C<$^E>/C<regLastError()>] on
+failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$pValueEnts> should contain a list of C<VALENT> structures packed
+into a single Perl string. Each C<VALENT> structure should have
+the C<ve_valuename> entry [the first 4 bytes] pointing to a string
+containing the name of a value stored in this key. The remaining
+fields are set if the function succeeds.
+
+C<$cValueEnts> should contain the count of the number of C<VALENT>
+structures contained in C<$pValueEnts>.
+
+C<$pBuffer> will be set to the data from all of the requested values
+concatenated into a single Perl string.
+
+C<$plBuffer> initially specifies the [minimum] buffer size to be
+allocated for C<$sBuffer> and will be set to the total length of
+the data to be written to C<$sBuffer>. See L<Buffer sizes> for
+more information. You may omit this parameter to get the same
+effect as passing in C<[]> for it.
+
+Here is sample code to populate C<$pValueEnts>:
+
+ # @ValueNames= ...list of value name strings...;
+ $cValueEnts= @ValueNames;
+ $pValueEnts= pack( " p x4 x4 x4 " x $cValueEnts, @ValueNames );
+
+Here is sample code to retrieve the data type and data length
+returned in C<$pValueEnts>:
+
+ @Lengths= unpack( " x4 L x4 x4 " x $cValueEnts, $pValueEnts );
+ @Types= unpack( " x4 x4 x4 L " x $cValueEnts, $pValueEnts );
+
+Given the above, and assuming you haven't modified C<$sBuffer> since
+the call, you can also extract the value data strings from C<$sBuffer>
+by using the pointers returned in C<$pValueEnts>:
+
+ @Data= unpack( join( "", map {" x4 x4 P$_ x4 "} @Lengths ),
+ $pValueEnts );
+
+Much better is to use the lengths and extract directly from
+C<$sBuffer> using C<unpack()> [or C<substr()>]:
+
+ @Data= unpack( join("",map("P$_",@Lengths)), $sBuffer );
+
+=item RegQueryValue
+
+=item C<RegQueryValue( $hKey, $sSubKey, $osValueData, $iolValueData )>
+
+This routine is meant only for compatibility with Windows version
+3.1. Use C<RegQueryValueEx()> instead. This routine can only
+query unamed values [a.k.a. "default values"], that is, values with
+a name of C<"">.
+
+=item RegQueryValueEx
+
+=item C<RegQueryValueEx( $hKey, $sValueName, $pNull, $ouType, $opValueData, $iolValueData )>
+
+Lets you look up value data stored in an open Registry key by
+specifying the value name. Returns a true value if successful
+and a false value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sValueName> is the name of the value whose data you wish to
+retrieve.
+
+C<$pNull> this parameter is reserved for future use and should be
+specified as C<[]>.
+
+C<$piType> will be set to indicate what type of data is stored in
+the named value. Will be set to a C<REG_*> value if the function
+succeeds.
+
+C<$pValueData> will be set to the value data [packed into a Perl
+string] that is stored in the named value. Can be C<[]> if you
+don't care about the value data.
+
+C<$plValueData> initially specifies the [minimum] buffer size to be
+allocated for C<$sValueData> and will be set to the size [always
+in bytes] of the data to be written to C<$sValueData>, even if
+C<$sValueData> is not successfully written to. See L<Buffer sizes>
+for more information.
+
+=item RegReplaceKey
+
+=item C<RegReplaceKey( $hKey, $sSubKey, $sNewFile, $sOldFile )>
+
+Lets you replace an entire hive when the system is next booted.
+Returns a true value if successful and a false value [and sets
+C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key that has hive(s)
+loaded in it. This must be C<HKEY_LOCAL_MACHINE>,
+C<HKEY_USERS>, or a remote version of one of these from
+a call to C<RegConnectRegistry()>.
+
+C<$sSubKey> is the name of the subkey of C<$hKey> whose hive
+you wish to have replaced on the next reboot.
+
+C<$sNewFile> is the name of a file that will replace the existing
+hive file when the system reboots.
+
+C<$sOldFile> is the file name to save the current hive file to
+when the system reboots.
+
+C<$sNewFile> and C<$sOldFile> are interpretted relative to the
+C<%SystemRoot%/System32/config> directory on the computer where
+the C<$hKey> key resides [I think]. If either file is [would be]
+on a FAT file system, then its name must not have an extension.
+
+You must have the C<SE_RESTORE_NAME> privilege to use this routine.
+
+=item RegRestoreKey
+
+=item C<RegRestoreKey( $hKey, $sFileName, $uFlags )>
+
+Reads in a hive file and copies its contents over an existing
+Registry tree. Returns a true value if successful and a false
+value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sFileName> is the name of the hive file to be read. For each
+value and subkey in this file, a value or subkey will be added
+or replaced in C<$hKey>.
+
+C<$uFlags> is usally C<0>. It can also be C<REG_WHOLE_HIVE_VOLATILE>
+which, rather than copying the hive over the existing key,
+replaces the existing key with a temporary, memory-only Registry
+key and then copies the hive contents into it. This option only
+works if C<$hKey> is C<HKEY_LOCAL_MACHINE>, C<HKEY_USERS>, or a
+remote version of one of these from a call to C<RegConnectRegistry()>.
+
+C<RegRestoreKey> does I<not> delete values nor keys from the
+existing Registry tree when there is no corresponding value/key
+in the hive file.
+
+=item RegSaveKey
+
+=item C<RegSaveKey( $hKey, $sFileName, $pSecAttr )>
+
+Dumps any open Registry key and all of its subkeys and values into
+a new hive file. Returns a true value if successful and a false
+value [and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sFileName> is the name of the file that the Registry tree
+should be saved to. It is interpretted relative to the
+C<%SystemRoot%/System32/config> directory on the computer where
+the C<$hKey> key resides. If C<$sFileName> is on a FAT file system,
+then it must not have an extension.
+
+C<$pSecAttr> contains a C<SECURITY_ATTRIBUTES> structure that specifies
+the permissions to be set on the new file that is created. This can
+be C<[]>.
+
+You must have the C<SE_RESTORE_NAME> privilege to use this routine.
+
+=item RegSetKeySecurity
+
+=item C<RegSetKeySecurity( $hKey, $uSecInfo, $pSecDesc )>
+
+Sets [part of] the C<SECURITY_DESCRIPTOR> structure describing part
+of the security for an open Registry key. Returns a true value if
+successful and a false value [and sets C<$^E>/C<regLastError()>] on
+failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$uSecInfo> is a numeric C<SECURITY_INFORMATION> value that
+specifies which C<SECURITY_DESCRIPTOR> structure to set. Should
+be C<OWNER_SECURITY_INFORMATION>, C<GROUP_SECURITY_INFORMATION>,
+C<DACL_SECURITY_INFORMATION>, or C<SACL_SECURITY_INFORMATION>
+or two or more of these bits combined using C<|>.
+
+C<$pSecDesc> contains the new C<SECURITY_DESCRIPTOR> structure
+packed into a Perl string.
+
+=item RegSetValue
+
+=item C<RegSetValue( $hKey, $sSubKey, $uType, $sValueData, $lValueData )>
+
+This routine is meant only for compatibility with Windows version
+3.1. Use C<RegSetValueEx()> instead. This routine can only
+set unamed values [a.k.a. "default values"].
+
+=item RegSetValueEx
+
+=item C<RegSetValueEx( $hKey, $sName, $uZero, $uType, $pData, $lData )>
+
+Adds or replaces a value in an open Registry key. Returns
+a true value if successful and a false value [and sets
+C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key [either C<HKEY_*> or from
+a previous call].
+
+C<$sName> is the name of the value to be set.
+
+C<$uZero> is reserved for future use and should be specified as C<0>.
+
+C<$uType> is the type of data stored in C<$pData>. It should
+be a C<REG_*> value.
+
+C<$pData> is the value data packed into a Perl string.
+
+C<$lData> is the length of the value data that is stored in C<$pData>.
+You will usually omit this parameter or pass in C<0> to have
+C<length($pData)> used. In both of these cases, if C<$iType> is
+C<REG_SZ> or C<REG_EXPAND_SZ>, C<RegSetValueEx()> will append a
+trailing C<'\0'> to the end of C<$pData> [unless there is already
+one].
+
+=item RegUnLoadKey
+
+=item C<RegUnLoadKey( $hKey, $sSubKey )>
+
+Unloads a previously loaded hive file. That is, closes the
+hive file then deletes the subkey that was providing access
+to it. Returns a true value if successful and a false value
+[and sets C<$^E>/C<regLastError()>] on failure.
+
+C<$hKey> is the handle to a Registry key that has hives
+loaded in it. This must be C<HKEY_LOCAL_MACHINE>, C<HKEY_USERS>,
+or a remote version of one of these from a call to
+C<RegConnectRegistry()>.
+
+C<$sSubKey> is the name of the subkey whose hive you wish to
+have unloaded.
+
+=item :FuncA
+
+The ASCII-specific function names.
+
+Each of these is identical to the version listed above without the
+trailing "A":
+
+ AbortSystemShutdownA InitiateSystemShutdownA
+ RegConnectRegistryA RegCreateKeyA RegCreateKeyExA
+ RegDeleteKeyA RegDeleteValueA RegEnumKeyA
+ RegEnumKeyExA RegEnumValueA RegLoadKeyA
+ RegOpenKeyA RegOpenKeyExA RegQueryInfoKeyA
+ RegQueryMultipleValuesA RegQueryValueA RegQueryValueExA
+ RegReplaceKeyA RegRestoreKeyA RegSaveKeyA
+ RegSetValueA RegSetValueExA RegUnLoadKeyA
+
+=item :FuncW
+
+The UNICODE-specific function names. These are the same as the
+versions listed above without the trailing "W" except that string
+parameters are UNICODE strings rather than ASCII strings, as
+indicated.
+
+=item AbortSystemShutdownW
+
+=item C<AbortSystemShutdownW( $swComputerName )>
+
+C<$swComputerName> is UNICODE.
+
+=item InitiateSystemShutdownW
+
+=item C<InitiateSystemShutdownW( $swComputer, $swMessage, $uTimeoutSecs, $bForce, $bReboot )>
+
+C<$swComputer> and C<$swMessage> are UNICODE.
+
+=item RegConnectRegistryW
+
+=item C<RegConnectRegistryW( $swComputer, $hRootKey, $ohKey )>
+
+C<$swComputer> is UNICODE.
+
+=item RegCreateKeyW
+
+=item C<RegCreateKeyW( $hKey, $swSubKey, $ohSubKey )>
+
+C<$swSubKey> is UNICODE.
+
+=item RegCreateKeyExW
+
+=item C<RegCreateKeyExW( $hKey, $swSubKey, $uZero, $swClass, $uOpts, $uAccess, $pSecAttr, $ohNewKey, $ouDisp )>
+
+C<$swSubKey> and C<$swClass> are UNICODE.
+
+=item RegDeleteKeyW
+
+=item C<RegDeleteKeyW( $hKey, $swSubKey )>
+
+C<$swSubKey> is UNICODE.
+
+=item RegDeleteValueW
+
+=item C<RegDeleteValueW( $hKey, $swValueName )>
+
+C<$swValueName> is UNICODE.
+
+=item RegEnumKeyW
+
+=item C<RegEnumKeyW( $hKey, $uIndex, $oswName, $ilwNameSize )>
+
+C<$oswName> is UNICODE and C<$ilwNameSize> is measured as number of
+C<WCHAR>s.
+
+=item RegEnumKeyExW
+
+=item C<RegEnumKeyExW( $hKey, $uIndex, $oswName, $iolwName, $pNull, $oswClass, $iolwClass, $opftLastWrite )>
+
+C<$swName> and C<$swClass> are UNICODE and C<$iolwName> and C<$iolwClass>
+are measured as number of C<WCHAR>s.
+
+=item RegEnumValueW
+
+=item C<RegEnumValueW( $hKey, $uIndex, $oswName, $iolwName, $pNull, $ouType, $opData, $iolData )>
+
+C<$oswName> is UNICODE and C<$iolwName> is measured as number
+of C<WCHAR>s.
+
+C<$opData> is UNICODE if C<$piType> is C<REG_SZ>, C<REG_EXPAND_SZ>,
+or C<REG_MULTI_SZ>. Note that C<$iolData> is measured as number
+of bytes even in these cases.
+
+=item RegLoadKeyW
+
+=item C<RegLoadKeyW( $hKey, $swSubKey, $swFileName )>
+
+C<$swSubKey> and C<$swFileName> are UNICODE.
+
+=item RegOpenKeyW
+
+=item C<RegOpenKeyW( $hKey, $swSubKey, $ohSubKey )>
+
+C<$swSubKey> is UNICODE.
+
+=item RegOpenKeyExW
+
+=item C<RegOpenKeyExW( $hKey, $swSubKey, $uOptions, $uAccess, $ohSubKey )>
+
+C<$swSubKey> is UNICODE.
+
+=item RegQueryInfoKeyW
+
+=item C<RegQueryInfoKeyW( $hKey, $oswClass, $iolwClass, $pNull, $ocSubKeys, $olwSubKey, $olwSubClass, $ocValues, $olwValName, $olValData, $olSecDesc, $opftTime )>
+
+C<$swClass> is UNICODE. C<$iolwClass>, C<$olwSubKey>, C<$olwSubClass>,
+and C<$olwValName> are measured as number of C<WCHAR>s. Note that
+C<$olValData> is measured as number of bytes.
+
+=item RegQueryMultipleValuesW
+
+=item C<RegQueryMultipleValuesW( $hKey, $ioarValueEnts, $icValueEnts, $opBuffer, $iolBuffer )>
+
+The C<ve_valuename> fields of the C<VALENT> [actually C<VALENTW>]
+structures in C<$ioarValueEnts> are UNICODE. Values of type C<REG_SZ>,
+C<REG_EXPAND_SZ>, and C<REG_MULTI_SZ> are written to C<$opBuffer>
+in UNICODE. Note that C<$iolBuffer> and the C<ve_valuelen> fields
+of the C<VALENT> [C<VALENTW>] structures are measured as number of
+bytes.
+
+=item RegQueryValueW
+
+=item C<RegQueryValueW( $hKey, $swSubKey, $oswValueData, $iolValueData )>
+
+C<$swSubKey> and C<$oswValueData> are UNICODE. Note that
+C<$iolValueData> is measured as number of bytes.
+
+=item RegQueryValueExW
+
+=item C<RegQueryValueExW( $hKey, $swName, $pNull, $ouType, $opData, $iolData )>
+
+C<$swName> is UNICODE.
+
+C<$opData> is UNICODE if C<$ouType> is C<REG_SZ>, C<REG_EXPAND_SZ>,
+or C<REG_MULTI_SZ>. Note that C<$iolData> is measured as number of
+bytes even in these cases.
+
+=item RegReplaceKeyW
+
+=item C<RegReplaceKeyW( $hKey, $swSubKey, $swNewFile, $swOldFile )>
+
+C<$swSubKey>, C<$swNewFile>, and C<$swOldFile> are UNICODE.
+
+=item RegRestoreKeyW
+
+=item C<RegRestoreKeyW( $hKey, $swFileName, $uFlags )>
+
+C<$swFileName> is UNICODE.
+
+=item RegSaveKeyW
+
+=item C<RegSaveKeyW( $hKey, $swFileName, $pSecAttr )>
+
+C<$swFileName> is UNICODE.
+
+=item RegSetValueW
+
+=item C<RegSetValueW( $hKey, $swSubKey, $uType, $swValueData, $lValueData )>
+
+C<$swSubKey> and C<$swValueData> are UNICODE. Note that
+C<$lValueData> is measured as number of bytes even though
+C<$swValueData> is always UNICODE.
+
+=item RegSetValueExW
+
+=item C<RegSetValueExW( $hKey, $swName, $uZero, $uType, $pData, $lData )>
+
+C<$swName> is UNICODE.
+
+C<$pData> is UNICODE if C<$uType> is C<REG_SZ>, C<REG_EXPAND_SZ>,
+or C<REG_MULTI_SZ>. Note that C<$lData> is measured as number of
+bytes even in these cases.
+
+=item RegUnLoadKeyW
+
+=item C<RegUnLoadKeyW( $hKey, $swSubKey )>
+
+C<$swSubKey> is UNICODE.
+
+=item :HKEY_
+
+All C<HKEY_*> constants:
+
+ HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_CURRENT_USER
+ HKEY_DYN_DATA HKEY_LOCAL_MACHINE HKEY_PERFORMANCE_DATA
+ HKEY_USERS
+
+=item :KEY_
+
+All C<KEY_*> constants:
+
+ KEY_QUERY_VALUE KEY_SET_VALUE KEY_CREATE_SUB_KEY
+ KEY_ENUMERATE_SUB_KEYS KEY_NOTIFY KEY_CREATE_LINK
+ KEY_READ KEY_WRITE KEY_EXECUTE
+ KEY_ALL_ACCESS
+
+=item :REG_
+
+All C<REG_*> constants:
+
+ REG_CREATED_NEW_KEY REG_OPENED_EXISTING_KEY
+
+ REG_LEGAL_CHANGE_FILTER REG_NOTIFY_CHANGE_ATTRIBUTES
+ REG_NOTIFY_CHANGE_NAME REG_NOTIFY_CHANGE_LAST_SET
+ REG_NOTIFY_CHANGE_SECURITY REG_LEGAL_OPTION
+
+ REG_OPTION_BACKUP_RESTORE REG_OPTION_CREATE_LINK
+ REG_OPTION_NON_VOLATILE REG_OPTION_OPEN_LINK
+ REG_OPTION_RESERVED REG_OPTION_VOLATILE
+
+ REG_WHOLE_HIVE_VOLATILE REG_REFRESH_HIVE
+ REG_NO_LAZY_FLUSH
+
+ REG_NONE REG_SZ
+ REG_EXPAND_SZ REG_BINARY
+ REG_DWORD REG_DWORD_LITTLE_ENDIAN
+ REG_DWORD_BIG_ENDIAN REG_LINK
+ REG_MULTI_SZ REG_RESOURCE_LIST
+ REG_FULL_RESOURCE_DESCRIPTOR REG_RESOURCE_REQUIREMENTS_LIST
+
+=item :ALL
+
+All of the above.
+
+=item :SE_
+
+The strings for the following privilege names:
+
+ SE_ASSIGNPRIMARYTOKEN_NAME SE_AUDIT_NAME
+ SE_BACKUP_NAME SE_CHANGE_NOTIFY_NAME
+ SE_CREATE_PAGEFILE_NAME SE_CREATE_PERMANENT_NAME
+ SE_CREATE_TOKEN_NAME SE_DEBUG_NAME
+ SE_INCREASE_QUOTA_NAME SE_INC_BASE_PRIORITY_NAME
+ SE_LOAD_DRIVER_NAME SE_LOCK_MEMORY_NAME
+ SE_MACHINE_ACCOUNT_NAME SE_PROF_SINGLE_PROCESS_NAME
+ SE_REMOTE_SHUTDOWN_NAME SE_RESTORE_NAME
+ SE_SECURITY_NAME SE_SHUTDOWN_NAME
+ SE_SYSTEMTIME_NAME SE_SYSTEM_ENVIRONMENT_NAME
+ SE_SYSTEM_PROFILE_NAME SE_TAKE_OWNERSHIP_NAME
+ SE_TCB_NAME SE_UNSOLICITED_INPUT_NAME
+
+It can be difficult to successfully build this module in a way
+that makes these constants available. So some builds of this
+module may not make them available. For such builds, trying
+to export any of these constants will cause a fatal error.
+For this reason, none of these symbols are currently included
+in the C<":ALL"> grouping.
+
+=back
+
+=head2 The Win32API:: heirarchy
+
+This and the other Win32API:: modules are meant to expose the
+nearly raw API calls so they can be used from Perl code in any
+way they might be used from C code. This provides the following
+advantages:
+
+=over
+
+=item Many modules can be written by people that don't have a C compiler.
+
+=item Encourages more module code to be written in Perl [not C].
+
+Perl code is often much easier to inspect, debug, customize, and
+enhance than XS code.
+
+=item Allows those already familiar with the Win32 API to get
+off to a quick start.
+
+=item Provides an interactive tool for exploring even obscure
+details of the Win32 API.
+
+It can be very useful to interactively explore ad-hoc calls into
+parts of the Win32 API using:
+
+ perl -de 0
+
+=item Ensures that native Win32 data structures can be used.
+
+This allows maximum efficiency. It also allows data from one
+module [for example, time or security information from the
+C<Win32API::Registry> or C<Win32API::File> modules] to be used
+with other modules [for example, C<Win32API::Time> and
+C<Win32API::SecDesc>].
+
+=item Provides a single version of the XS interface to each API
+call where improvements can be collected.
+
+=back
+
+=head2 Buffer sizes
+
+For each parameter that specifies a buffer size, a value of C<0>
+can be passed. For parameter that are pointers to buffer sizes,
+you can also pass in C<NULL> by specifying an empty list reference,
+C<[]>. Both of these cases will ensure that the variable has
+I<some> buffer space allocated to it and pass in that buffer's
+allocated size. Many of the calls indicate, via C<ERROR_MORE_DATA>,
+that the buffer size was not sufficient and the F<Registry.xs>
+code will automatically enlarge the buffer to the required size
+and repeat the call.
+
+Numeric buffer sizes are used as minimum initial sizes for the
+buffers. The larger of this size and the size of space already
+allocated to the scalar will be passed to the underlying routine.
+If that size was insufficient, and the underlying call provides
+an easy method for determining the needed buffer size, then the
+buffer will be enlarged and the call repeated as above.
+
+The underlying calls define buffer size parameter as unsigned, so
+negative buffer sizes are treated as very large positive buffer
+sizes which usually cause C<malloc()> to fail.
+
+To force the F<Registry.xs> code to pass in a specific value for
+a buffer size, preceed the size with an equals sign via C<"=".>.
+Buffer sizes that are passed in as strings starting with an equals
+sign will have the equal sign stripped and the remainder of the string
+interpretted as a number [via C's C<strtoul()> using only base 10]
+which will be passed to the underlying routine [even if the allocated
+buffer is actually larger]. The F<Registry.xs> code will enlarge the
+buffer to the specified size, if needed, but will not enlarge the
+buffer based on the underlying routine requesting more space.
+
+Some Reg*() calls may not currently set the buffer size when they
+return C<ERROR_MORE_DATA>. But some that are not documented as
+doing so, currently do so anyway. So the code assumes that any
+routine I<might> do this and resizes any buffers and repeats the
+call. We hope that eventually all routines will provide this
+feature.
+
+When you use C<[]> for a buffer size, you can still find the
+length of the data returned by using C<length($buffer)>. Note
+that this length will be in bytes while a few of the buffer
+sizes would have been in units of wide characters.
+
+Note that the RegQueryValueEx*() and RegEnumValue*() calls
+will trim the trailing C<'\0'> [if present] from the returned data
+values of type C<REG_SZ> or C<REG_EXPAND_SZ> but only if the
+value data length parameter is omitted [or specified as C<[]>].
+
+The RegSetValueEx*() calls will add a trailing C<'\0'> [if
+missing] to the supplied data values of type C<REG_SZ> and
+C<REG_EXPAND_SZ> but only if the value data length parameter
+is omitted [or specified as C<0>].
+
+=head2 Hungarian Notation
+
+The following abbreviations are used at the start of each parameter
+name to hint at aspects of how the parameter is used. The prefix
+is always in lower case and followed by a capital letter that starts
+the descriptive part of the parameter name. Several of the following
+abbreviations can be combined into a single prefix.
+
+Probably not all of these prefix notations are used by this module.
+This document section may be included in any C<Win32API> module and
+so covers some notations not used by this specific module.
+
+=over
+
+=item s
+
+A string. In C, a C<'\0'>-terminated C<char *>. In Perl, just a
+string except that it will be truncated at the first C<"\0">, if
+it contains one.
+
+=item sw
+
+A wide [UNICODE] string. In C, a C<L'\0'>-terminated C<WCHAR *>.
+In Perl, a string that contains UNICODE data. You can convert a
+string to UNICODE in Perl via:
+
+ $string= "This is an example string";
+ $unicode= pack( "S*", unpack("C*",$string), 0 );
+
+Note how C<, 0> above causes an explicit C<L'\0'> to be added since
+Perl's implicit C<'\0'> that it puts after each of its strings is not
+wide enough to terminate a UNICODE string. So UNICODE strings are
+different than regular strings in that the Perl version of a regular
+string will not include the trialing C<'\0'> while the Perl version
+of a UNICODE string must include the trailing C<L'\0'>.
+
+If a UNICODE string contains no non-ASCII characters, then you
+can convert it back into a normal string via:
+
+ $string= pack( "C*", unpack("S*",$unicode) );
+ $string =~ s/\0$//;
+
+=item p
+
+A pointer to some buffer [usually containing some C<struct>]. In C,
+a C<void *> or some other pointer type. In Perl, a string that is
+usually manipulated using C<pack> and C<unpack>. The "p" is usually
+followed by more prefix character(s) to indicate what type of data is
+stored in the bufffer.
+
+=item a
+
+A packed array. In C, an array [usually of C<struct>s]. In Perl, a
+string containing the packed data. The "a" is usually followed by
+more prefix character(s) to indicate the data type of the elements.
+
+These packed arrays are also called "vectors" in places to avoid
+confusion with Perl arrays.
+
+=item n
+
+A generic number. In C, any of the integer or floating point data
+types. In Perl, a number; either an integer, unsigned, or double
+[IV, UV, or NV, respectively]. Usually an integer.
+
+=item iv
+
+A signed integral value. In C, any of the signed integer data types.
+In Perl, an integer [IV].
+
+=item u
+
+An unsigned integral value. In C, any of the unsigned integer data
+types. In Perl, an unsigned integer [UV].
+
+=item d
+
+A floating-point number. In C, a C<float> or C<double> or, perhaps,
+a C<long double>. In Perl, a double-precision floating-point number
+[NV].
+
+=item b
+
+A Boolean value. In C, any integer data type, though usually via
+a type alias of C<bool> or C<BOOL>, containing either a 0 [false] or
+non-zero [true] value. In Perl, a scalar containing a Boolean value
+[C<0>, C<"">, or C<undef> for "false" and anything else for "true"].
+
+=item c
+
+A count of items. In C, any integer data type. In Perl, an unsigned
+integer [UV]. Usually used in conjunction with a "vector" parameter
+[see L</a> above] to indicate the number of elements.
+
+=item l
+
+A length [in bytes]. In C, any integer data type. In Perl, an
+unsigned integer [UV]. Usually used in conjunction with a "string"
+or "pointer" parameter [see L</s> and L</p> above] to indicate the
+buffer size or the size of the value stored in the buffer.
+
+For strings, there is no general rule as to whether the trailing
+C<'\0'> is included in such sizes. For this reason, the C<Win32API>
+modules follow the Perl rule of always allocating one extra byte
+and reporting buffer sizes as being one smaller than allocated in
+case the C<'\0'> is not included in the size.
+
+=item lw
+
+A length measured as number of UNICODE characters. In C, a count
+of C<WCHAR>s. In Perl, an unsigned integer [UV] counting "shorts"
+[see "s" and "S" in C<pack> and C<unpack>].
+
+For UNICODE strings, the trailing C<L'\0'> may or may not be
+included in a length so, again, we always allocate extra room
+for one and don't report that extra space.
+
+=item h
+
+A handle. In C, a C<HANDLE> or more-specific handle data type.
+In Perl, an unsigned integer [UV]. In C, these handles are often
+actually some type of pointer, but Perl just treats them as opaque
+numbers, as it should. This prefix is also used for other pointers
+that are treated as integers in Perl code.
+
+=item r
+
+A record. In C, almost always a C<struct> or perhaps C<union>. Note
+that C C<struct>s are rarely passed by value so the "r" is almost
+always preceeded by a "p" or "a" [see L</p> and L</a> above]. For
+the very rare unadorned "r", Perl stores the record in the same way
+as a "pr", that is, in a string. For the very rare case where Perl
+explicitly stores a pointer to the C<struct> rather than storing the
+C<struct> directly in a Perl string, the prefix "pp" or "ppr" or even
+"par" is used.
+
+=item sv
+
+=item rv
+
+=item hv
+
+=item av
+
+=item cv
+
+A Perl data type. Respectively, a scalar value [SV], a reference
+[RV] [usually to a scalar], a hash [HV], a Perl array [AV], or a Perl
+code reference [PVCV]. For the "hv", "av", and "cv" prefixes, a
+leading "rv" is usually assumed. For a parameter to an XS subroutine,
+a prefix of "sv" means the parameter is a scalar and so may be a string
+or a number [or C<undef>] or even both at the same time. So "sv"
+doesn't imply a leading "rv".
+
+=item Input or Output
+
+Whether a parameter is for input data, output data, or both is usually
+not reflected by the data type prefix. In cases where this is not
+obvious nor reflected in the parameter name proper, we may use the
+following in front of the data type prefix.
+
+=over
+
+=item i
+
+An input parameter given to the API [usually omitted].
+
+=item o
+
+An output-only parameter taken from the API. You should not get a
+warning if such a parameter is C<undef> when you pass it into the
+function. You should get an error if such a parameter is read-only.
+You can [usually] pass in C<[]> for such a parameter to have the
+parameter silently ignored.
+
+The output may be written directly into the Perl variable passed
+to the subroutine, the same way the buffer parameter to Perl's
+C<sysread()>. This method is often avoided in Perl because
+the call then lacks any visual cue that some parameters are being
+overwritten. But this method closely matches the C API which is
+what we are trying to do.
+
+=item io
+
+Input given to the API then overwritten with output taken from the
+API. You should get a warning [if B<-w> is in effect] if such a
+parameter is C<undef> when you pass it into the function [unless it
+is a buffer or buffer length parameter]. If the value is read-only,
+then [for most parameters] the output is silently not written. This
+is because it is often convenient to pass in read-only constants for
+many such parameters. You can also usually pass in C<[]> for such
+parameters.
+
+=back
+
+=item pp
+
+=item ppr
+
+=item par
+
+=item pap
+
+These are just unusual combinations of prefix characters described above.
+
+For each, a pointer is stored in a [4-byte] Perl string. You can
+usually use C<unpack "P"> to access the real data from Perl.
+
+For "ppr" [and often for "pp"], the pointer points directly at a
+C C<struct>. For "par", the pointer points to the first element
+of a C [packed] array of C<struct>s. For "pap", the pointer points
+to a C [packed] array of pointers to other things.
+
+=item ap
+
+Here we have a list of pointers packed into a single Perl string.
+
+=back
+
+=head1 BUGS
+
+The old ActiveState ports of Perl for Win32 [but not, ActivePerl, the
+ActiveState distributions of standard Perl 5.004 and beyond] do not support
+the tools for building extensions and so do not support this extension.
+
+No routines are provided for using the data returned in the C<FILETIME>
+buffers. Those are in the C<Win32API::Time> module.
+
+No routines are provided for dealing with UNICODE data effectively.
+See L</:FuncW> above for some simple-minded UNICODE methods.
+
+Parts of the module test will fail if used on a version of Perl
+that does not yet set C<$^E> based on C<GetLastError()>.
+
+On NT 4.0 [at least], the RegEnum*() calls do not set the required
+buffer sizes when returning C<ERROR_MORE_DATA> so this module will
+not grow the buffers in such cases. C<Win32::TieRegistry> overcomes
+this by using values from C<RegQueryInfoKey()> for buffer sizes in
+RegEnum* calls.
+
+On NT 4.0 [at least], C<RegQueryInfoKey()> on C<HKEY_PERFORMANCE_DATA>
+never succeeds. Also, C<RegQueryValueEx()> on C<HKEY_PERFORMANCE_DATA>
+never returns the required buffer size. To access C<HKEY_PERFORMANCE_DATA>
+you will need to keep growing the data buffer until the call succeeds.
+
+Because C<goto &subroutine> seems to be buggy under Win32 Perl,
+it is not used in the stubs in F<Registry.pm>.
+
+=head1 AUTHOR
+
+Tye McQueen, tye@metronet.com, http://www.metronet.com/~tye/.
+
+=head1 SEE ALSO
+
+=over
+
+=item L<Win32::TieRegistry>
+
+=item L<Win32::Registry>
+
+=back
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/Win32API/Registry/cRegistry.pc b/Master/tlpkg/tlperl/lib/Win32API/Registry/cRegistry.pc
new file mode 100644
index 00000000000..9659d0c4361
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32API/Registry/cRegistry.pc
@@ -0,0 +1,87 @@
+# Generated by cRegistry_pc.cxx.
+# Package Win32API::Registry with options:
+# CPLUSPLUS => q[1]
+# IFDEF => q[ /^SE_/ ? '__cplusplus' : /REG_/ ]
+# IMPORT_LIST => [q[/._/], q[!/[a-z]/]]
+# VALUES => { KEY_DELETE=>q[DELETE], KEY_READ_CONTROL=>q[READ_CONTROL], KEY_WRITE_OWNER=>q[WRITE_OWNER], KEY_SYNCHRONIZE=>q[SYNCHRONIZE], KEY_WRITE_DAC=>q[WRITE_DAC] }
+# WRITE_PERL => q[1]
+# Perl files eval'd:
+# Registry.pm => last if /^\s*(bootstrap|XSLoader::load)\b/
+# C files included:
+# Registry.xs => last if m#/[/*]\s*CONSTS_DEFINED\b|^\s*MODULE\b#
+sub HKEY_CLASSES_ROOT () { 0x80000000 }
+sub HKEY_CURRENT_CONFIG () { 0x80000005 }
+sub HKEY_CURRENT_USER () { 0x80000001 }
+sub HKEY_DYN_DATA () { 0x80000006 }
+sub HKEY_LOCAL_MACHINE () { 0x80000002 }
+sub HKEY_PERFORMANCE_DATA () { 0x80000004 }
+sub HKEY_USERS () { 0x80000003 }
+sub KEY_ALL_ACCESS () { 983103 }
+sub KEY_CREATE_LINK () { 32 }
+sub KEY_CREATE_SUB_KEY () { 4 }
+sub KEY_DELETE () { 65536 }
+sub KEY_ENUMERATE_SUB_KEYS () { 8 }
+sub KEY_EXECUTE () { 131097 }
+sub KEY_NOTIFY () { 16 }
+sub KEY_QUERY_VALUE () { 1 }
+sub KEY_READ () { 131097 }
+sub KEY_READ_CONTROL () { 131072 }
+sub KEY_SET_VALUE () { 2 }
+sub KEY_SYNCHRONIZE () { 1048576 }
+sub KEY_WRITE () { 131078 }
+sub KEY_WRITE_DAC () { 262144 }
+sub KEY_WRITE_OWNER () { 524288 }
+sub REG_BINARY () { 3 }
+sub REG_CREATED_NEW_KEY () { 1 }
+sub REG_DWORD () { 4 }
+sub REG_DWORD_BIG_ENDIAN () { 5 }
+sub REG_DWORD_LITTLE_ENDIAN () { 4 }
+sub REG_EXPAND_SZ () { 2 }
+sub REG_FULL_RESOURCE_DESCRIPTOR () { 9 }
+sub REG_LEGAL_CHANGE_FILTER () { 15 }
+sub REG_LEGAL_OPTION () { 15 }
+sub REG_LINK () { 6 }
+sub REG_MULTI_SZ () { 7 }
+sub REG_NONE () { 0 }
+sub REG_NOTIFY_CHANGE_ATTRIBUTES () { 2 }
+sub REG_NOTIFY_CHANGE_LAST_SET () { 4 }
+sub REG_NOTIFY_CHANGE_NAME () { 1 }
+sub REG_NOTIFY_CHANGE_SECURITY () { 8 }
+sub REG_NO_LAZY_FLUSH () { 4 }
+sub REG_OPENED_EXISTING_KEY () { 2 }
+sub REG_OPTION_BACKUP_RESTORE () { 4 }
+sub REG_OPTION_CREATE_LINK () { 2 }
+sub REG_OPTION_NON_VOLATILE () { 0 }
+sub REG_OPTION_OPEN_LINK () { 8 }
+sub REG_OPTION_RESERVED () { 0 }
+sub REG_OPTION_VOLATILE () { 1 }
+sub REG_REFRESH_HIVE () { 2 }
+sub REG_RESOURCE_LIST () { 8 }
+sub REG_RESOURCE_REQUIREMENTS_LIST () { 10 }
+sub REG_SZ () { 1 }
+sub REG_WHOLE_HIVE_VOLATILE () { 1 }
+sub SE_ASSIGNPRIMARYTOKEN_NAME () { 'SeAssignPrimaryTokenPrivilege' }
+sub SE_AUDIT_NAME () { 'SeAuditPrivilege' }
+sub SE_BACKUP_NAME () { 'SeBackupPrivilege' }
+sub SE_CHANGE_NOTIFY_NAME () { 'SeChangeNotifyPrivilege' }
+sub SE_CREATE_PAGEFILE_NAME () { 'SeCreatePagefilePrivilege' }
+sub SE_CREATE_PERMANENT_NAME () { 'SeCreatePermanentPrivilege' }
+sub SE_CREATE_TOKEN_NAME () { 'SeCreateTokenPrivilege' }
+sub SE_DEBUG_NAME () { 'SeDebugPrivilege' }
+sub SE_INCREASE_QUOTA_NAME () { 'SeIncreaseQuotaPrivilege' }
+sub SE_INC_BASE_PRIORITY_NAME () { 'SeIncreaseBasePriorityPrivilege' }
+sub SE_LOAD_DRIVER_NAME () { 'SeLoadDriverPrivilege' }
+sub SE_LOCK_MEMORY_NAME () { 'SeLockMemoryPrivilege' }
+sub SE_MACHINE_ACCOUNT_NAME () { 'SeMachineAccountPrivilege' }
+sub SE_PROF_SINGLE_PROCESS_NAME () { 'SeProfileSingleProcessPrivilege' }
+sub SE_REMOTE_SHUTDOWN_NAME () { 'SeRemoteShutdownPrivilege' }
+sub SE_RESTORE_NAME () { 'SeRestorePrivilege' }
+sub SE_SECURITY_NAME () { 'SeSecurityPrivilege' }
+sub SE_SHUTDOWN_NAME () { 'SeShutdownPrivilege' }
+sub SE_SYSTEMTIME_NAME () { 'SeSystemtimePrivilege' }
+sub SE_SYSTEM_ENVIRONMENT_NAME () { 'SeSystemEnvironmentPrivilege' }
+sub SE_SYSTEM_PROFILE_NAME () { 'SeSystemProfilePrivilege' }
+sub SE_TAKE_OWNERSHIP_NAME () { 'SeTakeOwnershipPrivilege' }
+sub SE_TCB_NAME () { 'SeTcbPrivilege' }
+sub SE_UNSOLICITED_INPUT_NAME () { 'SeUnsolicitedInputPrivilege' }
+1;
diff --git a/Master/tlpkg/tlperl/lib/XSLoader.pm b/Master/tlpkg/tlperl/lib/XSLoader.pm
new file mode 100644
index 00000000000..34172dcfa70
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/XSLoader.pm
@@ -0,0 +1,356 @@
+# Generated from XSLoader.pm.PL (resolved %Config::Config value)
+
+package XSLoader;
+
+$VERSION = "0.06";
+
+#use strict;
+
+# enable debug/trace messages from DynaLoader perl code
+# $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
+
+ my $dl_dlext = 'dll';
+
+package DynaLoader;
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+ !defined(&dl_error);
+package XSLoader;
+
+sub load {
+ package DynaLoader;
+
+ die q{XSLoader::load('Your::Module', $Your::Module::VERSION)} unless @_;
+
+ my($module) = $_[0];
+
+ # work with static linking too
+ my $b = "$module\::bootstrap";
+ goto &$b if defined &$b;
+
+ goto retry unless $module and defined &dl_load_file;
+
+ my @modparts = split(/::/,$module);
+ my $modfname = $modparts[-1];
+
+ my $modpname = join('/',@modparts);
+ my $modlibname = (caller())[1];
+ my $c = @modparts;
+ $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
+ my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext";
+
+# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
+
+ my $bs = $file;
+ $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+
+ goto retry if not -f $file or -s $bs;
+
+ my $bootname = "boot_$module";
+ $bootname =~ s/\W/_/g;
+ @DynaLoader::dl_require_symbols = ($bootname);
+
+ my $boot_symbol_ref;
+
+ if ($^O eq 'darwin') {
+ if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) {
+ goto boot; #extension library has already been loaded, e.g. darwin
+ }
+ }
+
+ # Many dynamic extension loading problems will appear to come from
+ # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+ # Often these errors are actually occurring in the initialisation
+ # C code of the extension XS file. Perl reports the error as being
+ # in this perl code simply because this was the last perl code
+ # it executed.
+
+ my $libref = dl_load_file($file, 0) or do {
+ require Carp;
+ Carp::croak("Can't load '$file' for module $module: " . dl_error());
+ };
+ push(@DynaLoader::dl_librefs,$libref); # record loaded object
+
+ my @unresolved = dl_undef_symbols();
+ if (@unresolved) {
+ require Carp;
+ Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
+ }
+
+ $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
+ require Carp;
+ Carp::croak("Can't find '$bootname' symbol in $file\n");
+ };
+
+ push(@DynaLoader::dl_modules, $module); # record loaded module
+
+ boot:
+ my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+
+ # See comment block above
+ push(@DynaLoader::dl_shared_objects, $file); # record files loaded
+ return &$xs(@_);
+
+ retry:
+ my $bootstrap_inherit = DynaLoader->can('bootstrap_inherit') ||
+ XSLoader->can('bootstrap_inherit');
+ goto &$bootstrap_inherit;
+}
+
+# Versions of DynaLoader prior to 5.6.0 don't have this function.
+sub bootstrap_inherit {
+ package DynaLoader;
+
+ my $module = $_[0];
+ local *DynaLoader::isa = *{"$module\::ISA"};
+ local @DynaLoader::isa = (@DynaLoader::isa, 'DynaLoader');
+ # Cannot goto due to delocalization. Will report errors on a wrong line?
+ require DynaLoader;
+ DynaLoader::bootstrap(@_);
+}
+
+1;
+
+
+__END__
+
+=head1 NAME
+
+XSLoader - Dynamically load C libraries into Perl code
+
+=head1 VERSION
+
+Version 0.06
+
+=head1 SYNOPSIS
+
+ package YourPackage;
+ use XSLoader;
+
+ XSLoader::load 'YourPackage', $YourPackage::VERSION;
+
+=head1 DESCRIPTION
+
+This module defines a standard I<simplified> interface to the dynamic
+linking mechanisms available on many platforms. Its primary purpose is
+to implement cheap automatic dynamic loading of Perl modules.
+
+For a more complicated interface, see L<DynaLoader>. Many (most)
+features of C<DynaLoader> are not implemented in C<XSLoader>, like for
+example the C<dl_load_flags>, not honored by C<XSLoader>.
+
+=head2 Migration from C<DynaLoader>
+
+A typical module using L<DynaLoader|DynaLoader> starts like this:
+
+ package YourPackage;
+ require DynaLoader;
+
+ our @ISA = qw( OnePackage OtherPackage DynaLoader );
+ our $VERSION = '0.01';
+ bootstrap YourPackage $VERSION;
+
+Change this to
+
+ package YourPackage;
+ use XSLoader;
+
+ our @ISA = qw( OnePackage OtherPackage );
+ our $VERSION = '0.01';
+ XSLoader::load 'YourPackage', $VERSION;
+
+In other words: replace C<require DynaLoader> by C<use XSLoader>, remove
+C<DynaLoader> from C<@ISA>, change C<bootstrap> by C<XSLoader::load>. Do not
+forget to quote the name of your package on the C<XSLoader::load> line,
+and add comma (C<,>) before the arguments (C<$VERSION> above).
+
+Of course, if C<@ISA> contained only C<DynaLoader>, there is no need to have
+the C<@ISA> assignment at all; moreover, if instead of C<our> one uses the
+more backward-compatible
+
+ use vars qw($VERSION @ISA);
+
+one can remove this reference to C<@ISA> together with the C<@ISA> assignment.
+
+If no C<$VERSION> was specified on the C<bootstrap> line, the last line becomes
+
+ XSLoader::load 'YourPackage';
+
+=head2 Backward compatible boilerplate
+
+If you want to have your cake and eat it too, you need a more complicated
+boilerplate.
+
+ package YourPackage;
+ use vars qw($VERSION @ISA);
+
+ @ISA = qw( OnePackage OtherPackage );
+ $VERSION = '0.01';
+ eval {
+ require XSLoader;
+ XSLoader::load('YourPackage', $VERSION);
+ 1;
+ } or do {
+ require DynaLoader;
+ push @ISA, 'DynaLoader';
+ bootstrap YourPackage $VERSION;
+ };
+
+The parentheses about C<XSLoader::load()> arguments are needed since we replaced
+C<use XSLoader> by C<require>, so the compiler does not know that a function
+C<XSLoader::load()> is present.
+
+This boilerplate uses the low-overhead C<XSLoader> if present; if used with
+an antic Perl which has no C<XSLoader>, it falls back to using C<DynaLoader>.
+
+=head1 Order of initialization: early load()
+
+I<Skip this section if the XSUB functions are supposed to be called from other
+modules only; read it only if you call your XSUBs from the code in your module,
+or have a C<BOOT:> section in your XS file (see L<perlxs/"The BOOT: Keyword">).
+What is described here is equally applicable to the L<DynaLoader|DynaLoader>
+interface.>
+
+A sufficiently complicated module using XS would have both Perl code (defined
+in F<YourPackage.pm>) and XS code (defined in F<YourPackage.xs>). If this
+Perl code makes calls into this XS code, and/or this XS code makes calls to
+the Perl code, one should be careful with the order of initialization.
+
+The call to C<XSLoader::load()> (or C<bootstrap()>) has three side effects:
+
+=over
+
+=item *
+
+if C<$VERSION> was specified, a sanity check is done to ensure that the
+versions of the F<.pm> and the (compiled) F<.xs> parts are compatible;
+
+=item *
+
+the XSUBs are made accessible from Perl;
+
+=item *
+
+if a C<BOOT:> section was present in the F<.xs> file, the code there is called.
+
+=back
+
+Consequently, if the code in the F<.pm> file makes calls to these XSUBs, it is
+convenient to have XSUBs installed before the Perl code is defined; for
+example, this makes prototypes for XSUBs visible to this Perl code.
+Alternatively, if the C<BOOT:> section makes calls to Perl functions (or
+uses Perl variables) defined in the F<.pm> file, they must be defined prior to
+the call to C<XSLoader::load()> (or C<bootstrap()>).
+
+The first situation being much more frequent, it makes sense to rewrite the
+boilerplate as
+
+ package YourPackage;
+ use XSLoader;
+ use vars qw($VERSION @ISA);
+
+ BEGIN {
+ @ISA = qw( OnePackage OtherPackage );
+ $VERSION = '0.01';
+
+ # Put Perl code used in the BOOT: section here
+
+ XSLoader::load 'YourPackage', $VERSION;
+ }
+
+ # Put Perl code making calls into XSUBs here
+
+=head2 The most hairy case
+
+If the interdependence of your C<BOOT:> section and Perl code is
+more complicated than this (e.g., the C<BOOT:> section makes calls to Perl
+functions which make calls to XSUBs with prototypes), get rid of the C<BOOT:>
+section altogether. Replace it with a function C<onBOOT()>, and call it like
+this:
+
+ package YourPackage;
+ use XSLoader;
+ use vars qw($VERSION @ISA);
+
+ BEGIN {
+ @ISA = qw( OnePackage OtherPackage );
+ $VERSION = '0.01';
+ XSLoader::load 'YourPackage', $VERSION;
+ }
+
+ # Put Perl code used in onBOOT() function here; calls to XSUBs are
+ # prototype-checked.
+
+ onBOOT;
+
+ # Put Perl initialization code assuming that XS is initialized here
+
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=item Can't find '%s' symbol in %s
+
+B<(F)> The bootstrap symbol could not be found in the extension module.
+
+=item Can't load '%s' for module %s: %s
+
+B<(F)> The loading or initialisation of the extension module failed.
+The detailed error follows.
+
+=item Undefined symbols present after loading %s: %s
+
+B<(W)> As the message says, some symbols stay undefined although the
+extension module was correctly loaded and initialised. The list of undefined
+symbols follows.
+
+=item XSLoader::load('Your::Module', $Your::Module::VERSION)
+
+B<(F)> You tried to invoke C<load()> without any argument. You must supply
+a module name, and optionally its version.
+
+=back
+
+
+=head1 LIMITATIONS
+
+To reduce the overhead as much as possible, only one possible location
+is checked to find the extension DLL (this location is where C<make install>
+would put the DLL). If not found, the search for the DLL is transparently
+delegated to C<DynaLoader>, which looks for the DLL along the C<@INC> list.
+
+In particular, this is applicable to the structure of C<@INC> used for testing
+not-yet-installed extensions. This means that running uninstalled extensions
+may have much more overhead than running the same extensions after
+C<make install>.
+
+
+=head1 BUGS
+
+Please report any bugs or feature requests via the perlbug(1) utility.
+
+
+=head1 SEE ALSO
+
+L<DynaLoader>
+
+
+=head1 AUTHORS
+
+Ilya Zakharevich originally extracted C<XSLoader> from C<DynaLoader>.
+
+CPAN version is currently maintained by SE<eacute>bastien Aperghis-Tramoni
+E<lt>sebastien@aperghis.netE<gt>
+
+Previous maintainer was Michael G Schwern <schwern@pobox.com>
+
+
+=head1 COPYRIGHT
+
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/attributes.pm b/Master/tlpkg/tlperl/lib/attributes.pm
new file mode 100644
index 00000000000..714cb267218
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/attributes.pm
@@ -0,0 +1,418 @@
+package attributes;
+
+our $VERSION = 0.06;
+
+@EXPORT_OK = qw(get reftype);
+@EXPORT = ();
+%EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]);
+
+use strict;
+
+sub croak {
+ require Carp;
+ goto &Carp::croak;
+}
+
+sub carp {
+ require Carp;
+ goto &Carp::carp;
+}
+
+## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{}
+#sub reftype ($) ;
+#sub _fetch_attrs ($) ;
+#sub _guess_stash ($) ;
+#sub _modify_attrs ;
+#sub _warn_reserved () ;
+#
+# The extra trips through newATTRSUB in the interpreter wipe out any savings
+# from avoiding the BEGIN block. Just do the bootstrap now.
+BEGIN { bootstrap attributes }
+
+sub import {
+ @_ > 2 && ref $_[2] or do {
+ require Exporter;
+ goto &Exporter::import;
+ };
+ my (undef,$home_stash,$svref,@attrs) = @_;
+
+ my $svtype = uc reftype($svref);
+ my $pkgmeth;
+ $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES")
+ if defined $home_stash && $home_stash ne '';
+ my @badattrs;
+ if ($pkgmeth) {
+ my @pkgattrs = _modify_attrs($svref, @attrs);
+ @badattrs = $pkgmeth->($home_stash, $svref, @attrs);
+ if (!@badattrs && @pkgattrs) {
+ return unless _warn_reserved;
+ @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs;
+ if (@pkgattrs) {
+ for my $attr (@pkgattrs) {
+ $attr =~ s/\(.+\z//s;
+ }
+ my $s = ((@pkgattrs == 1) ? '' : 's');
+ carp "$svtype package attribute$s " .
+ "may clash with future reserved word$s: " .
+ join(' : ' , @pkgattrs);
+ }
+ }
+ }
+ else {
+ @badattrs = _modify_attrs($svref, @attrs);
+ }
+ if (@badattrs) {
+ croak "Invalid $svtype attribute" .
+ (( @badattrs == 1 ) ? '' : 's') .
+ ": " .
+ join(' : ', @badattrs);
+ }
+}
+
+sub get ($) {
+ @_ == 1 && ref $_[0] or
+ croak 'Usage: '.__PACKAGE__.'::get $ref';
+ my $svref = shift;
+ my $svtype = uc reftype $svref;
+ my $stash = _guess_stash $svref;
+ $stash = caller unless defined $stash;
+ my $pkgmeth;
+ $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES")
+ if defined $stash && $stash ne '';
+ return $pkgmeth ?
+ (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) :
+ (_fetch_attrs($svref))
+ ;
+}
+
+sub require_version { goto &UNIVERSAL::VERSION }
+
+1;
+__END__
+#The POD goes here
+
+=head1 NAME
+
+attributes - get/set subroutine or variable attributes
+
+=head1 SYNOPSIS
+
+ sub foo : method ;
+ my ($x,@y,%z) : Bent = 1;
+ my $s = sub : method { ... };
+
+ use attributes (); # optional, to get subroutine declarations
+ my @attrlist = attributes::get(\&foo);
+
+ use attributes 'get'; # import the attributes::get subroutine
+ my @attrlist = get \&foo;
+
+=head1 DESCRIPTION
+
+Subroutine declarations and definitions may optionally have attribute lists
+associated with them. (Variable C<my> declarations also may, but see the
+warning below.) Perl handles these declarations by passing some information
+about the call site and the thing being declared along with the attribute
+list to this module. In particular, the first example above is equivalent to
+the following:
+
+ use attributes __PACKAGE__, \&foo, 'method';
+
+The second example in the synopsis does something equivalent to this:
+
+ use attributes ();
+ my ($x,@y,%z);
+ attributes::->import(__PACKAGE__, \$x, 'Bent');
+ attributes::->import(__PACKAGE__, \@y, 'Bent');
+ attributes::->import(__PACKAGE__, \%z, 'Bent');
+ ($x,@y,%z) = 1;
+
+Yes, that's a lot of expansion.
+
+B<WARNING>: attribute declarations for variables are still evolving.
+The semantics and interfaces of such declarations could change in
+future versions. They are present for purposes of experimentation
+with what the semantics ought to be. Do not rely on the current
+implementation of this feature.
+
+There are only a few attributes currently handled by Perl itself (or
+directly by this module, depending on how you look at it.) However,
+package-specific attributes are allowed by an extension mechanism.
+(See L<"Package-specific Attribute Handling"> below.)
+
+The setting of subroutine attributes happens at compile time.
+Variable attributes in C<our> declarations are also applied at compile time.
+However, C<my> variables get their attributes applied at run-time.
+This means that you have to I<reach> the run-time component of the C<my>
+before those attributes will get applied. For example:
+
+ my $x : Bent = 42 if 0;
+
+will neither assign 42 to $x I<nor> will it apply the C<Bent> attribute
+to the variable.
+
+An attempt to set an unrecognized attribute is a fatal error. (The
+error is trappable, but it still stops the compilation within that
+C<eval>.) Setting an attribute with a name that's all lowercase
+letters that's not a built-in attribute (such as "foo") will result in
+a warning with B<-w> or C<use warnings 'reserved'>.
+
+=head2 Built-in Attributes
+
+The following are the built-in attributes for subroutines:
+
+=over 4
+
+=item locked
+
+B<5.005 threads only! The use of the "locked" attribute currently
+only makes sense if you are using the deprecated "Perl 5.005 threads"
+implementation of threads.>
+
+Setting this attribute is only meaningful when the subroutine or
+method is to be called by multiple threads. When set on a method
+subroutine (i.e., one marked with the B<method> attribute below),
+Perl ensures that any invocation of it implicitly locks its first
+argument before execution. When set on a non-method subroutine,
+Perl ensures that a lock is taken on the subroutine itself before
+execution. The semantics of the lock are exactly those of one
+explicitly taken with the C<lock> operator immediately after the
+subroutine is entered.
+
+=item method
+
+Indicates that the referenced subroutine is a method.
+This has a meaning when taken together with the B<locked> attribute,
+as described there. It also means that a subroutine so marked
+will not trigger the "Ambiguous call resolved as CORE::%s" warning.
+
+=item lvalue
+
+Indicates that the referenced subroutine is a valid lvalue and can
+be assigned to. The subroutine must return a modifiable value such
+as a scalar variable, as described in L<perlsub>.
+
+=back
+
+For global variables there is C<unique> attribute: see L<perlfunc/our>.
+
+=head2 Available Subroutines
+
+The following subroutines are available for general use once this module
+has been loaded:
+
+=over 4
+
+=item get
+
+This routine expects a single parameter--a reference to a
+subroutine or variable. It returns a list of attributes, which may be
+empty. If passed invalid arguments, it uses die() (via L<Carp::croak|Carp>)
+to raise a fatal exception. If it can find an appropriate package name
+for a class method lookup, it will include the results from a
+C<FETCH_I<type>_ATTRIBUTES> call in its return list, as described in
+L<"Package-specific Attribute Handling"> below.
+Otherwise, only L<built-in attributes|"Built-in Attributes"> will be returned.
+
+=item reftype
+
+This routine expects a single parameter--a reference to a subroutine or
+variable. It returns the built-in type of the referenced variable,
+ignoring any package into which it might have been blessed.
+This can be useful for determining the I<type> value which forms part of
+the method names described in L<"Package-specific Attribute Handling"> below.
+
+=back
+
+Note that these routines are I<not> exported by default.
+
+=head2 Package-specific Attribute Handling
+
+B<WARNING>: the mechanisms described here are still experimental. Do not
+rely on the current implementation. In particular, there is no provision
+for applying package attributes to 'cloned' copies of subroutines used as
+closures. (See L<perlref/"Making References"> for information on closures.)
+Package-specific attribute handling may change incompatibly in a future
+release.
+
+When an attribute list is present in a declaration, a check is made to see
+whether an attribute 'modify' handler is present in the appropriate package
+(or its @ISA inheritance tree). Similarly, when C<attributes::get> is
+called on a valid reference, a check is made for an appropriate attribute
+'fetch' handler. See L<"EXAMPLES"> to see how the "appropriate package"
+determination works.
+
+The handler names are based on the underlying type of the variable being
+declared or of the reference passed. Because these attributes are
+associated with subroutine or variable declarations, this deliberately
+ignores any possibility of being blessed into some package. Thus, a
+subroutine declaration uses "CODE" as its I<type>, and even a blessed
+hash reference uses "HASH" as its I<type>.
+
+The class methods invoked for modifying and fetching are these:
+
+=over 4
+
+=item FETCH_I<type>_ATTRIBUTES
+
+This method receives a single argument, which is a reference to the
+variable or subroutine for which package-defined attributes are desired.
+The expected return value is a list of associated attributes.
+This list may be empty.
+
+=item MODIFY_I<type>_ATTRIBUTES
+
+This method is called with two fixed arguments, followed by the list of
+attributes from the relevant declaration. The two fixed arguments are
+the relevant package name and a reference to the declared subroutine or
+variable. The expected return value is a list of attributes which were
+not recognized by this handler. Note that this allows for a derived class
+to delegate a call to its base class, and then only examine the attributes
+which the base class didn't already handle for it.
+
+The call to this method is currently made I<during> the processing of the
+declaration. In particular, this means that a subroutine reference will
+probably be for an undefined subroutine, even if this declaration is
+actually part of the definition.
+
+=back
+
+Calling C<attributes::get()> from within the scope of a null package
+declaration C<package ;> for an unblessed variable reference will
+not provide any starting package name for the 'fetch' method lookup.
+Thus, this circumstance will not result in a method call for package-defined
+attributes. A named subroutine knows to which symbol table entry it belongs
+(or originally belonged), and it will use the corresponding package.
+An anonymous subroutine knows the package name into which it was compiled
+(unless it was also compiled with a null package declaration), and so it
+will use that package name.
+
+=head2 Syntax of Attribute Lists
+
+An attribute list is a sequence of attribute specifications, separated by
+whitespace or a colon (with optional whitespace).
+Each attribute specification is a simple
+name, optionally followed by a parenthesised parameter list.
+If such a parameter list is present, it is scanned past as for the rules
+for the C<q()> operator. (See L<perlop/"Quote and Quote-like Operators">.)
+The parameter list is passed as it was found, however, and not as per C<q()>.
+
+Some examples of syntactically valid attribute lists:
+
+ switch(10,foo(7,3)) : expensive
+ Ugly('\(") :Bad
+ _5x5
+ locked method
+
+Some examples of syntactically invalid attribute lists (with annotation):
+
+ switch(10,foo() # ()-string not balanced
+ Ugly('(') # ()-string not balanced
+ 5x5 # "5x5" not a valid identifier
+ Y2::north # "Y2::north" not a simple identifier
+ foo + bar # "+" neither a colon nor whitespace
+
+=head1 EXPORTS
+
+=head2 Default exports
+
+None.
+
+=head2 Available exports
+
+The routines C<get> and C<reftype> are exportable.
+
+=head2 Export tags defined
+
+The C<:ALL> tag will get all of the above exports.
+
+=head1 EXAMPLES
+
+Here are some samples of syntactically valid declarations, with annotation
+as to how they resolve internally into C<use attributes> invocations by
+perl. These examples are primarily useful to see how the "appropriate
+package" is found for the possible method lookups for package-defined
+attributes.
+
+=over 4
+
+=item 1.
+
+Code:
+
+ package Canine;
+ package Dog;
+ my Canine $spot : Watchful ;
+
+Effect:
+
+ use attributes ();
+ attributes::->import(Canine => \$spot, "Watchful");
+
+=item 2.
+
+Code:
+
+ package Felis;
+ my $cat : Nervous;
+
+Effect:
+
+ use attributes ();
+ attributes::->import(Felis => \$cat, "Nervous");
+
+=item 3.
+
+Code:
+
+ package X;
+ sub foo : locked ;
+
+Effect:
+
+ use attributes X => \&foo, "locked";
+
+=item 4.
+
+Code:
+
+ package X;
+ sub Y::x : locked { 1 }
+
+Effect:
+
+ use attributes Y => \&Y::x, "locked";
+
+=item 5.
+
+Code:
+
+ package X;
+ sub foo { 1 }
+
+ package Y;
+ BEGIN { *bar = \&X::foo; }
+
+ package Z;
+ sub Y::bar : locked ;
+
+Effect:
+
+ use attributes X => \&X::foo, "locked";
+
+=back
+
+This last example is purely for purposes of completeness. You should not
+be trying to mess with the attributes of something in a package that's
+not your own.
+
+=head1 SEE ALSO
+
+L<perlsub/"Private Variables via my()"> and
+L<perlsub/"Subroutine Attributes"> for details on the basic declarations;
+L<attrs> for the obsolescent form of subroutine attribute specification
+which this module replaces;
+L<perlfunc/use> for details on the normal invocation mechanism.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/auto/B/B.bs b/Master/tlpkg/tlperl/lib/auto/B/B.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/B/B.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/B/B.dll b/Master/tlpkg/tlperl/lib/auto/B/B.dll
new file mode 100755
index 00000000000..02ecf851c22
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/B/B.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/B/C/C.bs b/Master/tlpkg/tlperl/lib/auto/B/C/C.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/B/C/C.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/B/C/C.dll b/Master/tlpkg/tlperl/lib/auto/B/C/C.dll
new file mode 100755
index 00000000000..0de9e53ba33
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/B/C/C.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs b/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll b/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll
new file mode 100755
index 00000000000..67f6d7baa57
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs b/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll b/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll
new file mode 100755
index 00000000000..9b99b3c3568
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs b/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll b/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll
new file mode 100755
index 00000000000..72ba4df2758
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/DynaLoader/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/DynaLoader/autosplit.ix
new file mode 100644
index 00000000000..d7605efa074
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/DynaLoader/autosplit.ix
@@ -0,0 +1,8 @@
+# Index created by AutoSplit for ../LIB\DynaLoader.pm
+# (file acts as timestamp)
+package DynaLoader;
+sub dl_findfile ;
+sub dl_expandspec ;
+sub dl_find_symbol_anywhere
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_expandspec.al b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_expandspec.al
new file mode 100644
index 00000000000..0bea19a3e4d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_expandspec.al
@@ -0,0 +1,34 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 377 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_expandspec.al)"
+sub dl_expandspec {
+ my($spec) = @_;
+ # Optional function invoked if DynaLoader.pm sets $do_expand.
+ # Most systems do not require or use this function.
+ # Some systems may implement it in the dl_*.xs file in which case
+ # this autoload version will not be called but is harmless.
+
+ # This function is designed to deal with systems which treat some
+ # 'filenames' in a special way. For example VMS 'Logical Names'
+ # (something like unix environment variables - but different).
+ # This function should recognise such names and expand them into
+ # full file paths.
+ # Must return undef if $spec is invalid or file does not exist.
+
+ my $file = $spec; # default output to input
+
+ if ($Is_VMS) { # dl_expandspec should be defined in dl_vms.xs
+ require Carp;
+ Carp::croak("dl_expandspec: should be defined in XS file!\n");
+ } else {
+ return undef unless -f $file;
+ }
+ print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
+ $file;
+}
+
+# end of DynaLoader::dl_expandspec
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al
new file mode 100644
index 00000000000..2232454ba69
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_find_symbol_anywhere.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 403 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_find_symbol_anywhere.al)"
+sub dl_find_symbol_anywhere
+{
+ my $sym = shift;
+ my $libref;
+ foreach $libref (@dl_librefs) {
+ my $symref = dl_find_symbol($libref,$sym);
+ return $symref if $symref;
+ }
+ return undef;
+}
+
+1;
+# end of DynaLoader::dl_find_symbol_anywhere
diff --git a/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_findfile.al b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_findfile.al
new file mode 100644
index 00000000000..9f8df39d00c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/DynaLoader/dl_findfile.al
@@ -0,0 +1,115 @@
+# NOTE: Derived from ../LIB\DynaLoader.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package DynaLoader;
+
+#line 269 "../LIB\DynaLoader.pm (autosplit into ..\lib\auto\DynaLoader\dl_findfile.al)"
+sub dl_findfile {
+ # Read ext/DynaLoader/DynaLoader.doc for detailed information.
+ # This function does not automatically consider the architecture
+ # or the perl library auto directories.
+ my (@args) = @_;
+ my (@dirs, $dir); # which directories to search
+ my (@found); # full paths to real files we have found
+ my $dl_ext= 'dll'; # $Config::Config{'dlext'} suffix for perl extensions
+ my $dl_so = 'dll'; # $Config::Config{'so'} suffix for shared libraries
+
+ print STDERR "dl_findfile(@args)\n" if $dl_debug;
+
+ # accumulate directories but process files as they appear
+ arg: foreach(@args) {
+ # Special fast case: full filepath requires no search
+ if ($Is_VMS && m%[:>/\]]% && -f $_) {
+ push(@found,dl_expandspec(VMS::Filespec::vmsify($_)));
+ last arg unless wantarray;
+ next;
+ }
+ elsif ($Is_MacOS) {
+ if (m/:/ && -f $_) {
+ push(@found,$_);
+ last arg unless wantarray;
+ }
+ }
+ elsif (m:/: && -f $_ && !$do_expand) {
+ push(@found,$_);
+ last arg unless wantarray;
+ next;
+ }
+
+ # Deal with directories first:
+ # Using a -L prefix is the preferred option (faster and more robust)
+ if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
+
+ if ($Is_MacOS) {
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m/:/ && -d $_) { push(@dirs, $_); next; }
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ s/^-l//;
+ push(@names, $_);
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ $dir =~ s/^([^:]+)$/:$1/;
+ $dir =~ s/:$//;
+ foreach $name (@names) {
+ my($file) = "$dir:$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ if (-f $file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ next;
+ }
+
+ # Otherwise we try to try to spot directories by a heuristic
+ # (this is a more complicated issue than it first appears)
+ if (m:/: && -d $_) { push(@dirs, $_); next; }
+
+ # VMS: we may be using native VMS directory syntax instead of
+ # Unix emulation, so check this as well
+ if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; }
+
+ # Only files should get this far...
+ my(@names, $name); # what filenames to look for
+ if (m:-l: ) { # convert -lname to appropriate library name
+ s/-l//;
+ push(@names,"lib$_.$dl_so");
+ push(@names,"lib$_.a");
+ } else { # Umm, a bare name. Try various alternatives:
+ # these should be ordered with the most likely first
+ push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o;
+ push(@names,"$_.$dl_so") unless m/\.$dl_so$/o;
+ push(@names,"lib$_.$dl_so") unless m:/:;
+ push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs";
+ push(@names, $_);
+ }
+ foreach $dir (@dirs, @dl_library_path) {
+ next unless -d $dir;
+ chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS;
+ foreach $name (@names) {
+ my($file) = "$dir/$name";
+ print STDERR " checking in $dir for $name\n" if $dl_debug;
+ $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
+ #$file = _check_file($file);
+ if ($file) {
+ push(@found, $file);
+ next arg; # no need to look any further
+ }
+ }
+ }
+ }
+ if ($dl_debug) {
+ foreach(@dirs) {
+ print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
+ }
+ print STDERR "dl_findfile found: @found\n";
+ }
+ return $found[0] unless wantarray;
+ @found;
+}
+
+# end of DynaLoader::dl_findfile
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs b/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll b/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll
new file mode 100755
index 00000000000..d053a295a71
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs b/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll b/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll
new file mode 100755
index 00000000000..9cd3d822949
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/IO/IO.bs b/Master/tlpkg/tlperl/lib/auto/IO/IO.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/IO/IO.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/IO/IO.dll b/Master/tlpkg/tlperl/lib/auto/IO/IO.dll
new file mode 100755
index 00000000000..86276c177d9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/IO/IO.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs b/Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll b/Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll
new file mode 100755
index 00000000000..238b1648bea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs b/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll b/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll
new file mode 100755
index 00000000000..49bdaee0917
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al
new file mode 100644
index 00000000000..800cdd9a2b2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al
@@ -0,0 +1,9 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX::SigAction;
+
+#line 964 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\SigAction\flags.al)"
+sub flags { $_[0]->{FLAGS} = $_[1] if @_ > 1; $_[0]->{FLAGS} };
+# end of POSIX::SigAction::flags
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/handler.al b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/handler.al
new file mode 100644
index 00000000000..f2a3994bdf0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/handler.al
@@ -0,0 +1,11 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX::SigAction;
+
+#line 960 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\SigAction\handler.al)"
+package POSIX::SigAction;
+
+sub handler { $_[0]->{HANDLER} = $_[1] if @_ > 1; $_[0]->{HANDLER} };
+# end of POSIX::SigAction::handler
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al
new file mode 100644
index 00000000000..e5c240eea1b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al
@@ -0,0 +1,9 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX::SigAction;
+
+#line 963 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\SigAction\mask.al)"
+sub mask { $_[0]->{MASK} = $_[1] if @_ > 1; $_[0]->{MASK} };
+# end of POSIX::SigAction::mask
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al
new file mode 100644
index 00000000000..bb27883beae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al
@@ -0,0 +1,9 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX::SigAction;
+
+#line 965 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\SigAction\safe.al)"
+sub safe { $_[0]->{SAFE} = $_[1] if @_ > 1; $_[0]->{SAFE} };
+1;
+# end of POSIX::SigAction::safe
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/abs.al b/Master/tlpkg/tlperl/lib/auto/POSIX/abs.al
new file mode 100644
index 00000000000..89999433d53
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/abs.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 398 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\abs.al)"
+sub abs {
+ usage "abs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+# end of POSIX::abs
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al b/Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al
new file mode 100644
index 00000000000..e1c864ed8e0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 615 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\alarm.al)"
+sub alarm {
+ usage "alarm(seconds)" if @_ != 1;
+ CORE::alarm($_[0]);
+}
+
+# end of POSIX::alarm
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/assert.al b/Master/tlpkg/tlperl/lib/auto/POSIX/assert.al
new file mode 100644
index 00000000000..b3bce100406
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/assert.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 80 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\assert.al)"
+sub assert {
+ usage "assert(expr)" if @_ != 1;
+ if (!$_[0]) {
+ croak "Assertion failed";
+ }
+}
+
+# end of POSIX::assert
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al b/Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al
new file mode 100644
index 00000000000..9482e3cff23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 145 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atan2.al)"
+sub atan2 {
+ usage "atan2(x,y)" if @_ != 2;
+ CORE::atan2($_[0], $_[1]);
+}
+
+# end of POSIX::atan2
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al b/Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al
new file mode 100644
index 00000000000..b0fdf7e97cf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 403 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atexit.al)"
+sub atexit {
+ unimpl "atexit() is C-specific: use END {} instead";
+}
+
+# end of POSIX::atexit
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/atof.al b/Master/tlpkg/tlperl/lib/auto/POSIX/atof.al
new file mode 100644
index 00000000000..fc1d1cef431
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/atof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 407 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atof.al)"
+sub atof {
+ unimpl "atof() is C-specific, stopped";
+}
+
+# end of POSIX::atof
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al b/Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al
new file mode 100644
index 00000000000..5eef246231b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 411 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atoi.al)"
+sub atoi {
+ unimpl "atoi() is C-specific, stopped";
+}
+
+# end of POSIX::atoi
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/atol.al b/Master/tlpkg/tlperl/lib/auto/POSIX/atol.al
new file mode 100644
index 00000000000..e6fc6869a1a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/atol.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 415 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atol.al)"
+sub atol {
+ unimpl "atol() is C-specific, stopped";
+}
+
+# end of POSIX::atol
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix
new file mode 100644
index 00000000000..8ecf455bb80
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix
@@ -0,0 +1,159 @@
+# Index created by AutoSplit for ..\..\lib\POSIX.pm
+# (file acts as timestamp)
+package POSIX;
+sub usage ;
+sub redef ;
+sub unimpl ;
+sub assert ;
+sub tolower ;
+sub toupper ;
+sub closedir ;
+sub opendir ;
+sub readdir ;
+sub rewinddir ;
+sub errno ;
+sub creat ;
+sub fcntl ;
+sub getgrgid ;
+sub getgrnam ;
+sub atan2 ;
+sub cos ;
+sub exp ;
+sub fabs ;
+sub log ;
+sub pow ;
+sub sin ;
+sub sqrt ;
+sub getpwnam ;
+sub getpwuid ;
+sub longjmp ;
+sub setjmp ;
+sub siglongjmp ;
+sub sigsetjmp ;
+sub kill ;
+sub raise ;
+sub offsetof ;
+sub clearerr ;
+sub fclose ;
+sub fdopen ;
+sub feof ;
+sub fgetc ;
+sub fgets ;
+sub fileno ;
+sub fopen ;
+sub fprintf ;
+sub fputc ;
+sub fputs ;
+sub fread ;
+sub freopen ;
+sub fscanf ;
+sub fseek ;
+sub fsync ;
+sub ferror ;
+sub fflush ;
+sub fgetpos ;
+sub fsetpos ;
+sub ftell ;
+sub fwrite ;
+sub getc ;
+sub getchar ;
+sub gets ;
+sub perror ;
+sub printf ;
+sub putc ;
+sub putchar ;
+sub puts ;
+sub remove ;
+sub rename ;
+sub rewind ;
+sub scanf ;
+sub sprintf ;
+sub sscanf ;
+sub tmpfile ;
+sub ungetc ;
+sub vfprintf ;
+sub vprintf ;
+sub vsprintf ;
+sub abs ;
+sub atexit ;
+sub atof ;
+sub atoi ;
+sub atol ;
+sub bsearch ;
+sub calloc ;
+sub div ;
+sub exit ;
+sub free ;
+sub getenv ;
+sub labs ;
+sub ldiv ;
+sub malloc ;
+sub qsort ;
+sub rand ;
+sub realloc ;
+sub srand ;
+sub system ;
+sub memchr ;
+sub memcmp ;
+sub memcpy ;
+sub memmove ;
+sub memset ;
+sub strcat ;
+sub strchr ;
+sub strcmp ;
+sub strcpy ;
+sub strcspn ;
+sub strerror ;
+sub strlen ;
+sub strncat ;
+sub strncmp ;
+sub strncpy ;
+sub strpbrk ;
+sub strrchr ;
+sub strspn ;
+sub strstr ;
+sub strtok ;
+sub chmod ;
+sub fstat ;
+sub mkdir ;
+sub stat ;
+sub umask ;
+sub wait ;
+sub waitpid ;
+sub gmtime ;
+sub localtime ;
+sub time ;
+sub alarm ;
+sub chdir ;
+sub chown ;
+sub execl ;
+sub execle ;
+sub execlp ;
+sub execv ;
+sub execve ;
+sub execvp ;
+sub fork ;
+sub getegid ;
+sub geteuid ;
+sub getgid ;
+sub getgroups ;
+sub getlogin ;
+sub getpgrp ;
+sub getpid ;
+sub getppid ;
+sub getuid ;
+sub isatty ;
+sub link ;
+sub rmdir ;
+sub setbuf ;
+sub setvbuf ;
+sub sleep ;
+sub unlink ;
+sub utime ;
+sub load_imports ;
+package POSIX::SigAction;
+sub handler ;
+sub mask ;
+sub flags ;
+sub safe ;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al b/Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al
new file mode 100644
index 00000000000..4acc59b5a7d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 419 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\bsearch.al)"
+sub bsearch {
+ unimpl "bsearch() not supplied";
+}
+
+# end of POSIX::bsearch
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al
new file mode 100644
index 00000000000..776029eff29
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 423 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\calloc.al)"
+sub calloc {
+ unimpl "calloc() is C-specific, stopped";
+}
+
+# end of POSIX::calloc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al
new file mode 100644
index 00000000000..1bddab213d6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 620 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chdir.al)"
+sub chdir {
+ usage "chdir(directory)" if @_ != 1;
+ CORE::chdir($_[0]);
+}
+
+# end of POSIX::chdir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al b/Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al
new file mode 100644
index 00000000000..8fc0d5a5e0b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 561 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chmod.al)"
+sub chmod {
+ usage "chmod(mode, filename)" if @_ != 2;
+ CORE::chmod($_[0], $_[1]);
+}
+
+# end of POSIX::chmod
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/chown.al b/Master/tlpkg/tlperl/lib/auto/POSIX/chown.al
new file mode 100644
index 00000000000..ca945bd855d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/chown.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 625 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chown.al)"
+sub chown {
+ usage "chown(uid, gid, filename)" if @_ != 3;
+ CORE::chown($_[0], $_[1], $_[2]);
+}
+
+# end of POSIX::chown
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al b/Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al
new file mode 100644
index 00000000000..c360043abf9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 225 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\clearerr.al)"
+sub clearerr {
+ redef "IO::Handle::clearerr()";
+}
+
+# end of POSIX::clearerr
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al
new file mode 100644
index 00000000000..16ae1cd4f76
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 97 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\closedir.al)"
+sub closedir {
+ usage "closedir(dirhandle)" if @_ != 1;
+ CORE::closedir($_[0]);
+}
+
+# end of POSIX::closedir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/cos.al b/Master/tlpkg/tlperl/lib/auto/POSIX/cos.al
new file mode 100644
index 00000000000..ee01c091b27
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/cos.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 150 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\cos.al)"
+sub cos {
+ usage "cos(x)" if @_ != 1;
+ CORE::cos($_[0]);
+}
+
+# end of POSIX::cos
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/creat.al b/Master/tlpkg/tlperl/lib/auto/POSIX/creat.al
new file mode 100644
index 00000000000..2d1cfb7d55d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/creat.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 125 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\creat.al)"
+sub creat {
+ usage "creat(filename, mode)" if @_ != 2;
+ &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1]);
+}
+
+# end of POSIX::creat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/div.al b/Master/tlpkg/tlperl/lib/auto/POSIX/div.al
new file mode 100644
index 00000000000..4c751314da0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/div.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 427 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\div.al)"
+sub div {
+ unimpl "div() is C-specific, use /, % and int instead";
+}
+
+# end of POSIX::div
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/errno.al b/Master/tlpkg/tlperl/lib/auto/POSIX/errno.al
new file mode 100644
index 00000000000..c57abdc4c3b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/errno.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 120 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\errno.al)"
+sub errno {
+ usage "errno()" if @_ != 0;
+ $! + 0;
+}
+
+# end of POSIX::errno
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execl.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execl.al
new file mode 100644
index 00000000000..3ffc4f5a671
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execl.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 630 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execl.al)"
+sub execl {
+ unimpl "execl() is C-specific, stopped";
+}
+
+# end of POSIX::execl
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execle.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execle.al
new file mode 100644
index 00000000000..ec7e12da909
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execle.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 634 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execle.al)"
+sub execle {
+ unimpl "execle() is C-specific, stopped";
+}
+
+# end of POSIX::execle
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al
new file mode 100644
index 00000000000..a9e32524839
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 638 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execlp.al)"
+sub execlp {
+ unimpl "execlp() is C-specific, stopped";
+}
+
+# end of POSIX::execlp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execv.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execv.al
new file mode 100644
index 00000000000..1e6f20bba77
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execv.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 642 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execv.al)"
+sub execv {
+ unimpl "execv() is C-specific, stopped";
+}
+
+# end of POSIX::execv
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execve.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execve.al
new file mode 100644
index 00000000000..ae23c53ea77
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execve.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 646 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execve.al)"
+sub execve {
+ unimpl "execve() is C-specific, stopped";
+}
+
+# end of POSIX::execve
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al
new file mode 100644
index 00000000000..88d5dd6764e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 650 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execvp.al)"
+sub execvp {
+ unimpl "execvp() is C-specific, stopped";
+}
+
+# end of POSIX::execvp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/exit.al b/Master/tlpkg/tlperl/lib/auto/POSIX/exit.al
new file mode 100644
index 00000000000..d7806b3f4db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/exit.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 431 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exit.al)"
+sub exit {
+ usage "exit(status)" if @_ != 1;
+ CORE::exit($_[0]);
+}
+
+# end of POSIX::exit
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/exp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/exp.al
new file mode 100644
index 00000000000..251dc740eaf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/exp.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 155 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exp.al)"
+sub exp {
+ usage "exp(x)" if @_ != 1;
+ CORE::exp($_[0]);
+}
+
+# end of POSIX::exp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al
new file mode 100644
index 00000000000..ebe714729c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 160 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fabs.al)"
+sub fabs {
+ usage "fabs(x)" if @_ != 1;
+ CORE::abs($_[0]);
+}
+
+# end of POSIX::fabs
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al
new file mode 100644
index 00000000000..f662ef7cda6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 229 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fclose.al)"
+sub fclose {
+ redef "IO::Handle::close()";
+}
+
+# end of POSIX::fclose
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al
new file mode 100644
index 00000000000..bf6ec04fb4c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 130 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fcntl.al)"
+sub fcntl {
+ usage "fcntl(filehandle, cmd, arg)" if @_ != 3;
+ CORE::fcntl($_[0], $_[1], $_[2]);
+}
+
+# end of POSIX::fcntl
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al
new file mode 100644
index 00000000000..392f8e27fbf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 233 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fdopen.al)"
+sub fdopen {
+ redef "IO::Handle::new_from_fd()";
+}
+
+# end of POSIX::fdopen
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/feof.al b/Master/tlpkg/tlperl/lib/auto/POSIX/feof.al
new file mode 100644
index 00000000000..4c8b5ea37af
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/feof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 237 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\feof.al)"
+sub feof {
+ redef "IO::Handle::eof()";
+}
+
+# end of POSIX::feof
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al b/Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al
new file mode 100644
index 00000000000..6ec8cccb11b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 289 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ferror.al)"
+sub ferror {
+ redef "IO::Handle::error()";
+}
+
+# end of POSIX::ferror
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al
new file mode 100644
index 00000000000..0ba6d1416f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 293 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fflush.al)"
+sub fflush {
+ redef "IO::Handle::flush()";
+}
+
+# end of POSIX::fflush
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al
new file mode 100644
index 00000000000..f89a6f86334
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 241 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetc.al)"
+sub fgetc {
+ redef "IO::Handle::getc()";
+}
+
+# end of POSIX::fgetc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al
new file mode 100644
index 00000000000..7583bbf3da6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 297 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetpos.al)"
+sub fgetpos {
+ redef "IO::Seekable::getpos()";
+}
+
+# end of POSIX::fgetpos
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al
new file mode 100644
index 00000000000..7edcffdd192
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 245 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgets.al)"
+sub fgets {
+ redef "IO::Handle::gets()";
+}
+
+# end of POSIX::fgets
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al
new file mode 100644
index 00000000000..45f0908329c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 249 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fileno.al)"
+sub fileno {
+ redef "IO::Handle::fileno()";
+}
+
+# end of POSIX::fileno
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al
new file mode 100644
index 00000000000..795f272b2bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 253 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fopen.al)"
+sub fopen {
+ redef "IO::File::open()";
+}
+
+# end of POSIX::fopen
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fork.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fork.al
new file mode 100644
index 00000000000..cb0ee7aaf13
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fork.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 654 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fork.al)"
+sub fork {
+ usage "fork()" if @_ != 0;
+ CORE::fork;
+}
+
+# end of POSIX::fork
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al
new file mode 100644
index 00000000000..6ac5cb6a065
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 257 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fprintf.al)"
+sub fprintf {
+ unimpl "fprintf() is C-specific--use printf instead";
+}
+
+# end of POSIX::fprintf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al
new file mode 100644
index 00000000000..71a3b2307bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 261 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputc.al)"
+sub fputc {
+ unimpl "fputc() is C-specific--use print instead";
+}
+
+# end of POSIX::fputc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al
new file mode 100644
index 00000000000..5cc9cdc175b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 265 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputs.al)"
+sub fputs {
+ unimpl "fputs() is C-specific--use print instead";
+}
+
+# end of POSIX::fputs
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fread.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fread.al
new file mode 100644
index 00000000000..a2f731a784c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fread.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 269 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fread.al)"
+sub fread {
+ unimpl "fread() is C-specific--use read instead";
+}
+
+# end of POSIX::fread
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/free.al b/Master/tlpkg/tlperl/lib/auto/POSIX/free.al
new file mode 100644
index 00000000000..71eff3059c3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/free.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 436 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\free.al)"
+sub free {
+ unimpl "free() is C-specific, stopped";
+}
+
+# end of POSIX::free
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al b/Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al
new file mode 100644
index 00000000000..31e08a2a889
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 273 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\freopen.al)"
+sub freopen {
+ unimpl "freopen() is C-specific--use open instead";
+}
+
+# end of POSIX::freopen
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al
new file mode 100644
index 00000000000..c5a5e08217b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 277 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fscanf.al)"
+sub fscanf {
+ unimpl "fscanf() is C-specific--use <> and regular expressions instead";
+}
+
+# end of POSIX::fscanf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al
new file mode 100644
index 00000000000..0a591cca259
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 281 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fseek.al)"
+sub fseek {
+ redef "IO::Seekable::seek()";
+}
+
+# end of POSIX::fseek
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al
new file mode 100644
index 00000000000..311027b54ea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 301 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fsetpos.al)"
+sub fsetpos {
+ redef "IO::Seekable::setpos()";
+}
+
+# end of POSIX::fsetpos
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al
new file mode 100644
index 00000000000..084979716d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 566 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fstat.al)"
+sub fstat {
+ usage "fstat(fd)" if @_ != 1;
+ local *TMP;
+ CORE::open(TMP, "<&$_[0]"); # Gross.
+ my @l = CORE::stat(TMP);
+ CORE::close(TMP);
+ @l;
+}
+
+# end of POSIX::fstat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al
new file mode 100644
index 00000000000..c8038d1d350
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 285 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fsync.al)"
+sub fsync {
+ redef "IO::Handle::sync()";
+}
+
+# end of POSIX::fsync
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al b/Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al
new file mode 100644
index 00000000000..1d3490c6033
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 305 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ftell.al)"
+sub ftell {
+ redef "IO::Seekable::tell()";
+}
+
+# end of POSIX::ftell
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al b/Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al
new file mode 100644
index 00000000000..1099587edbd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 309 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fwrite.al)"
+sub fwrite {
+ unimpl "fwrite() is C-specific--use print instead";
+}
+
+# end of POSIX::fwrite
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getc.al
new file mode 100644
index 00000000000..2ccc28cdf43
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getc.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 313 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getc.al)"
+sub getc {
+ usage "getc(handle)" if @_ != 1;
+ CORE::getc($_[0]);
+}
+
+# end of POSIX::getc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al
new file mode 100644
index 00000000000..930386f6827
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 318 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getchar.al)"
+sub getchar {
+ usage "getchar()" if @_ != 0;
+ CORE::getc(STDIN);
+}
+
+# end of POSIX::getchar
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al
new file mode 100644
index 00000000000..61c0942023f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 659 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getegid.al)"
+sub getegid {
+ usage "getegid()" if @_ != 0;
+ $) + 0;
+}
+
+# end of POSIX::getegid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al
new file mode 100644
index 00000000000..c6fec0ca34b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 440 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getenv.al)"
+sub getenv {
+ usage "getenv(name)" if @_ != 1;
+ $ENV{$_[0]};
+}
+
+# end of POSIX::getenv
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al
new file mode 100644
index 00000000000..710491ebcc3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 664 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\geteuid.al)"
+sub geteuid {
+ usage "geteuid()" if @_ != 0;
+ $> + 0;
+}
+
+# end of POSIX::geteuid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al
new file mode 100644
index 00000000000..7cd6164fb43
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 669 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgid.al)"
+sub getgid {
+ usage "getgid()" if @_ != 0;
+ $( + 0;
+}
+
+# end of POSIX::getgid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al
new file mode 100644
index 00000000000..550e75a69f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 135 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrgid.al)"
+sub getgrgid {
+ usage "getgrgid(gid)" if @_ != 1;
+ CORE::getgrgid($_[0]);
+}
+
+# end of POSIX::getgrgid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al
new file mode 100644
index 00000000000..a480731586c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 140 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrnam.al)"
+sub getgrnam {
+ usage "getgrnam(name)" if @_ != 1;
+ CORE::getgrnam($_[0]);
+}
+
+# end of POSIX::getgrnam
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al
new file mode 100644
index 00000000000..5fd0d9d3aea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 674 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgroups.al)"
+sub getgroups {
+ usage "getgroups()" if @_ != 0;
+ my %seen;
+ grep(!$seen{$_}++, split(' ', $) ));
+}
+
+# end of POSIX::getgroups
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al
new file mode 100644
index 00000000000..55bcb4ee9fb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 680 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getlogin.al)"
+sub getlogin {
+ usage "getlogin()" if @_ != 0;
+ CORE::getlogin();
+}
+
+# end of POSIX::getlogin
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al
new file mode 100644
index 00000000000..ef0425b7b7f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 685 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpgrp.al)"
+sub getpgrp {
+ usage "getpgrp()" if @_ != 0;
+ CORE::getpgrp;
+}
+
+# end of POSIX::getpgrp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al
new file mode 100644
index 00000000000..9aeaa25b63e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 690 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpid.al)"
+sub getpid {
+ usage "getpid()" if @_ != 0;
+ $$;
+}
+
+# end of POSIX::getpid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al
new file mode 100644
index 00000000000..4951623eb04
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 695 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getppid.al)"
+sub getppid {
+ usage "getppid()" if @_ != 0;
+ CORE::getppid;
+}
+
+# end of POSIX::getppid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al
new file mode 100644
index 00000000000..296b87f28ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 185 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwnam.al)"
+sub getpwnam {
+ usage "getpwnam(name)" if @_ != 1;
+ CORE::getpwnam($_[0]);
+}
+
+# end of POSIX::getpwnam
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al
new file mode 100644
index 00000000000..5616a6daa2c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 190 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwuid.al)"
+sub getpwuid {
+ usage "getpwuid(uid)" if @_ != 1;
+ CORE::getpwuid($_[0]);
+}
+
+# end of POSIX::getpwuid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/gets.al b/Master/tlpkg/tlperl/lib/auto/POSIX/gets.al
new file mode 100644
index 00000000000..34667890e6e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/gets.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 323 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gets.al)"
+sub gets {
+ usage "gets()" if @_ != 0;
+ scalar <STDIN>;
+}
+
+# end of POSIX::gets
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al
new file mode 100644
index 00000000000..5a326ec67f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 700 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getuid.al)"
+sub getuid {
+ usage "getuid()" if @_ != 0;
+ $<;
+}
+
+# end of POSIX::getuid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al b/Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al
new file mode 100644
index 00000000000..6bbf4fc6fef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 600 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gmtime.al)"
+sub gmtime {
+ usage "gmtime(time)" if @_ != 1;
+ CORE::gmtime($_[0]);
+}
+
+# end of POSIX::gmtime
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al b/Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al
new file mode 100644
index 00000000000..9ab71b3c2a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 705 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\isatty.al)"
+sub isatty {
+ usage "isatty(filehandle)" if @_ != 1;
+ -t $_[0];
+}
+
+# end of POSIX::isatty
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/kill.al b/Master/tlpkg/tlperl/lib/auto/POSIX/kill.al
new file mode 100644
index 00000000000..12f5276f5f8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/kill.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 211 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\kill.al)"
+sub kill {
+ usage "kill(pid, sig)" if @_ != 2;
+ CORE::kill $_[1], $_[0];
+}
+
+# end of POSIX::kill
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/labs.al b/Master/tlpkg/tlperl/lib/auto/POSIX/labs.al
new file mode 100644
index 00000000000..581a1897d73
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/labs.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 445 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\labs.al)"
+sub labs {
+ unimpl "labs() is C-specific, use abs instead";
+}
+
+# end of POSIX::labs
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al b/Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al
new file mode 100644
index 00000000000..1b704c1fad4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 449 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ldiv.al)"
+sub ldiv {
+ unimpl "ldiv() is C-specific, use /, % and int instead";
+}
+
+# end of POSIX::ldiv
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/link.al b/Master/tlpkg/tlperl/lib/auto/POSIX/link.al
new file mode 100644
index 00000000000..e78401a321d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/link.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 710 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\link.al)"
+sub link {
+ usage "link(oldfilename, newfilename)" if @_ != 2;
+ CORE::link($_[0], $_[1]);
+}
+
+# end of POSIX::link
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al b/Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al
new file mode 100644
index 00000000000..6c2ff0ad2ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al
@@ -0,0 +1,225 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 743 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\load_imports.al)"
+sub load_imports {
+%EXPORT_TAGS = (
+
+ assert_h => [qw(assert NDEBUG)],
+
+ ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower
+ isprint ispunct isspace isupper isxdigit tolower toupper)],
+
+ dirent_h => [],
+
+ errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
+ EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
+ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
+ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
+ EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
+ ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
+ ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
+ ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
+ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
+ ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
+ EUSERS EWOULDBLOCK EXDEV errno)],
+
+ fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
+ F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
+ O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK
+ O_RDONLY O_RDWR O_TRUNC O_WRONLY
+ creat
+ SEEK_CUR SEEK_END SEEK_SET
+ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
+ S_IWGRP S_IWOTH S_IWUSR)],
+
+ float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
+ DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
+ DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
+ FLT_DIG FLT_EPSILON FLT_MANT_DIG
+ FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP
+ FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP
+ FLT_RADIX FLT_ROUNDS
+ LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG
+ LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP
+ LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)],
+
+ grp_h => [],
+
+ limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX
+ INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON
+ MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX
+ PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN
+ SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX
+ ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX
+ _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
+ _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
+ _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
+
+ locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
+ LC_MONETARY LC_NUMERIC LC_TIME NULL
+ localeconv setlocale)],
+
+ math_h => [qw(HUGE_VAL acos asin atan ceil cosh fabs floor fmod
+ frexp ldexp log10 modf pow sinh tan tanh)],
+
+ pwd_h => [],
+
+ setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
+
+ signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
+ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
+ SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN
+ SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal
+ sigpending sigprocmask sigsuspend)],
+
+ stdarg_h => [],
+
+ stddef_h => [qw(NULL offsetof)],
+
+ stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
+ L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
+ STREAM_MAX TMP_MAX stderr stdin stdout
+ clearerr fclose fdopen feof ferror fflush fgetc fgetpos
+ fgets fopen fprintf fputc fputs fread freopen
+ fscanf fseek fsetpos ftell fwrite getchar gets
+ perror putc putchar puts remove rewind
+ scanf setbuf setvbuf sscanf tmpfile tmpnam
+ ungetc vfprintf vprintf vsprintf)],
+
+ stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
+ abort atexit atof atoi atol bsearch calloc div
+ free getenv labs ldiv malloc mblen mbstowcs mbtowc
+ qsort realloc strtod strtol strtoul wcstombs wctomb)],
+
+ string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
+ strchr strcmp strcoll strcpy strcspn strerror strlen
+ strncat strncmp strncpy strpbrk strrchr strspn strstr
+ strtok strxfrm)],
+
+ sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
+ S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
+ S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR
+ fstat mkfifo)],
+
+ sys_times_h => [],
+
+ sys_types_h => [],
+
+ sys_utsname_h => [qw(uname)],
+
+ sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED
+ WNOHANG WSTOPSIG WTERMSIG WUNTRACED)],
+
+ termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400
+ B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL
+ CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK
+ ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR
+ INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST
+ PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION
+ TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
+ TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART
+ VSTOP VSUSP VTIME
+ cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain
+ tcflow tcflush tcgetattr tcsendbreak tcsetattr )],
+
+ time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime
+ difftime mktime strftime tzset tzname)],
+
+ unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET
+ STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK
+ _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON
+ _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX
+ _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED
+ _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
+ _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
+ _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
+ _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
+ _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
+ _exit access ctermid cuserid
+ dup2 dup execl execle execlp execv execve execvp
+ fpathconf fsync getcwd getegid geteuid getgid getgroups
+ getpid getuid isatty lseek pathconf pause setgid setpgid
+ setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
+
+ utime_h => [],
+
+);
+
+# Exporter::export_tags();
+for (values %EXPORT_TAGS) {
+ push @EXPORT, @$_;
+}
+
+@EXPORT_OK = qw(
+ abs
+ alarm
+ atan2
+ chdir
+ chmod
+ chown
+ close
+ closedir
+ cos
+ exit
+ exp
+ fcntl
+ fileno
+ fork
+ getc
+ getgrgid
+ getgrnam
+ getlogin
+ getpgrp
+ getppid
+ getpwnam
+ getpwuid
+ gmtime
+ isatty
+ kill
+ lchown
+ link
+ localtime
+ log
+ mkdir
+ nice
+ open
+ opendir
+ pipe
+ printf
+ rand
+ read
+ readdir
+ rename
+ rewinddir
+ rmdir
+ sin
+ sleep
+ sprintf
+ sqrt
+ srand
+ stat
+ system
+ time
+ times
+ umask
+ unlink
+ utime
+ wait
+ waitpid
+ write
+);
+
+require Exporter;
+}
+
+# end of POSIX::SigAction::load_imports
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al b/Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al
new file mode 100644
index 00000000000..dde4f5769ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 605 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\localtime.al)"
+sub localtime {
+ usage "localtime(time)" if @_ != 1;
+ CORE::localtime($_[0]);
+}
+
+# end of POSIX::localtime
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/log.al b/Master/tlpkg/tlperl/lib/auto/POSIX/log.al
new file mode 100644
index 00000000000..6e400f25866
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/log.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 165 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\log.al)"
+sub log {
+ usage "log(x)" if @_ != 1;
+ CORE::log($_[0]);
+}
+
+# end of POSIX::log
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al
new file mode 100644
index 00000000000..f3dd3263086
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 195 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\longjmp.al)"
+sub longjmp {
+ unimpl "longjmp() is C-specific: use die instead";
+}
+
+# end of POSIX::longjmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al
new file mode 100644
index 00000000000..2f50c6da70a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 453 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\malloc.al)"
+sub malloc {
+ unimpl "malloc() is C-specific, stopped";
+}
+
+# end of POSIX::malloc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al b/Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al
new file mode 100644
index 00000000000..bcdfac6200b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 478 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memchr.al)"
+sub memchr {
+ unimpl "memchr() is C-specific, use index() instead";
+}
+
+# end of POSIX::memchr
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al
new file mode 100644
index 00000000000..e01575259d4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 482 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcmp.al)"
+sub memcmp {
+ unimpl "memcmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::memcmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al b/Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al
new file mode 100644
index 00000000000..b096a059be9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 486 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcpy.al)"
+sub memcpy {
+ unimpl "memcpy() is C-specific, use = instead";
+}
+
+# end of POSIX::memcpy
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al b/Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al
new file mode 100644
index 00000000000..dd29e805f70
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 490 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memmove.al)"
+sub memmove {
+ unimpl "memmove() is C-specific, use = instead";
+}
+
+# end of POSIX::memmove
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/memset.al b/Master/tlpkg/tlperl/lib/auto/POSIX/memset.al
new file mode 100644
index 00000000000..407980dd938
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/memset.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 494 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memset.al)"
+sub memset {
+ unimpl "memset() is C-specific, use x instead";
+}
+
+# end of POSIX::memset
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al
new file mode 100644
index 00000000000..edb004a11e8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 575 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\mkdir.al)"
+sub mkdir {
+ usage "mkdir(directoryname, mode)" if @_ != 2;
+ CORE::mkdir($_[0], $_[1]);
+}
+
+# end of POSIX::mkdir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al b/Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al
new file mode 100644
index 00000000000..83c2df0e521
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 221 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\offsetof.al)"
+sub offsetof {
+ unimpl "offsetof() is C-specific, stopped";
+}
+
+# end of POSIX::offsetof
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al
new file mode 100644
index 00000000000..9c508b64371
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 102 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\opendir.al)"
+sub opendir {
+ usage "opendir(directory)" if @_ != 1;
+ my $dirhandle;
+ CORE::opendir($dirhandle, $_[0])
+ ? $dirhandle
+ : undef;
+}
+
+# end of POSIX::opendir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/perror.al b/Master/tlpkg/tlperl/lib/auto/POSIX/perror.al
new file mode 100644
index 00000000000..df53df18eff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/perror.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 328 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\perror.al)"
+sub perror {
+ print STDERR "@_: " if @_;
+ print STDERR $!,"\n";
+}
+
+# end of POSIX::perror
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/pow.al b/Master/tlpkg/tlperl/lib/auto/POSIX/pow.al
new file mode 100644
index 00000000000..9f1ac2fc14f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/pow.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 170 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\pow.al)"
+sub pow {
+ usage "pow(x,exponent)" if @_ != 2;
+ $_[0] ** $_[1];
+}
+
+# end of POSIX::pow
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/printf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/printf.al
new file mode 100644
index 00000000000..28b07d21cd1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/printf.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 333 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\printf.al)"
+sub printf {
+ usage "printf(pattern, args...)" if @_ < 1;
+ CORE::printf STDOUT @_;
+}
+
+# end of POSIX::printf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/putc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/putc.al
new file mode 100644
index 00000000000..484984bcd9f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/putc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 338 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putc.al)"
+sub putc {
+ unimpl "putc() is C-specific--use print instead";
+}
+
+# end of POSIX::putc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al b/Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al
new file mode 100644
index 00000000000..a85a0d79b36
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 342 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putchar.al)"
+sub putchar {
+ unimpl "putchar() is C-specific--use print instead";
+}
+
+# end of POSIX::putchar
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/puts.al b/Master/tlpkg/tlperl/lib/auto/POSIX/puts.al
new file mode 100644
index 00000000000..0bd3f4f3b3c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/puts.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 346 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\puts.al)"
+sub puts {
+ unimpl "puts() is C-specific--use print instead";
+}
+
+# end of POSIX::puts
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al b/Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al
new file mode 100644
index 00000000000..1621e6db521
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 457 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\qsort.al)"
+sub qsort {
+ unimpl "qsort() is C-specific, use sort instead";
+}
+
+# end of POSIX::qsort
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/raise.al b/Master/tlpkg/tlperl/lib/auto/POSIX/raise.al
new file mode 100644
index 00000000000..3d078d08f35
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/raise.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 216 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\raise.al)"
+sub raise {
+ usage "raise(sig)" if @_ != 1;
+ CORE::kill $_[0], $$; # Is this good enough?
+}
+
+# end of POSIX::raise
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/rand.al b/Master/tlpkg/tlperl/lib/auto/POSIX/rand.al
new file mode 100644
index 00000000000..78d16fe53cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/rand.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 461 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rand.al)"
+sub rand {
+ unimpl "rand() is non-portable, use Perl's rand instead";
+}
+
+# end of POSIX::rand
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al
new file mode 100644
index 00000000000..395379abb86
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 110 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\readdir.al)"
+sub readdir {
+ usage "readdir(dirhandle)" if @_ != 1;
+ CORE::readdir($_[0]);
+}
+
+# end of POSIX::readdir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al
new file mode 100644
index 00000000000..949c4fc3b77
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 465 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\realloc.al)"
+sub realloc {
+ unimpl "realloc() is C-specific, stopped";
+}
+
+# end of POSIX::realloc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/redef.al b/Master/tlpkg/tlperl/lib/auto/POSIX/redef.al
new file mode 100644
index 00000000000..d667327d6b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/redef.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 69 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\redef.al)"
+sub redef {
+ my ($mess) = @_;
+ croak "Use method $mess instead";
+}
+
+# end of POSIX::redef
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/remove.al b/Master/tlpkg/tlperl/lib/auto/POSIX/remove.al
new file mode 100644
index 00000000000..e29b4531d68
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/remove.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 350 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\remove.al)"
+sub remove {
+ usage "remove(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+# end of POSIX::remove
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/rename.al b/Master/tlpkg/tlperl/lib/auto/POSIX/rename.al
new file mode 100644
index 00000000000..6087fefa798
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/rename.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 355 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rename.al)"
+sub rename {
+ usage "rename(oldfilename, newfilename)" if @_ != 2;
+ CORE::rename($_[0], $_[1]);
+}
+
+# end of POSIX::rename
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al b/Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al
new file mode 100644
index 00000000000..a07216f1c51
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 360 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewind.al)"
+sub rewind {
+ usage "rewind(filehandle)" if @_ != 1;
+ CORE::seek($_[0],0,0);
+}
+
+# end of POSIX::rewind
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al
new file mode 100644
index 00000000000..c01271a33d8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 115 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewinddir.al)"
+sub rewinddir {
+ usage "rewinddir(dirhandle)" if @_ != 1;
+ CORE::rewinddir($_[0]);
+}
+
+# end of POSIX::rewinddir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al b/Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al
new file mode 100644
index 00000000000..b94bdf166ee
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 715 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rmdir.al)"
+sub rmdir {
+ usage "rmdir(directoryname)" if @_ != 1;
+ CORE::rmdir($_[0]);
+}
+
+# end of POSIX::rmdir
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al
new file mode 100644
index 00000000000..2d4ff839328
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 365 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\scanf.al)"
+sub scanf {
+ unimpl "scanf() is C-specific--use <> and regular expressions instead";
+}
+
+# end of POSIX::scanf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al
new file mode 100644
index 00000000000..a7de25518fa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 720 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setbuf.al)"
+sub setbuf {
+ redef "IO::Handle::setbuf()";
+}
+
+# end of POSIX::setbuf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al
new file mode 100644
index 00000000000..780deb31940
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 199 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setjmp.al)"
+sub setjmp {
+ unimpl "setjmp() is C-specific: use eval {} instead";
+}
+
+# end of POSIX::setjmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al
new file mode 100644
index 00000000000..b134e52528d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 724 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setvbuf.al)"
+sub setvbuf {
+ redef "IO::Handle::setvbuf()";
+}
+
+# end of POSIX::setvbuf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al
new file mode 100644
index 00000000000..ab46fac02b6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 203 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\siglongjmp.al)"
+sub siglongjmp {
+ unimpl "siglongjmp() is C-specific: use die instead";
+}
+
+# end of POSIX::siglongjmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al
new file mode 100644
index 00000000000..31e563c6f4f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 207 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sigsetjmp.al)"
+sub sigsetjmp {
+ unimpl "sigsetjmp() is C-specific: use eval {} instead";
+}
+
+# end of POSIX::sigsetjmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sin.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sin.al
new file mode 100644
index 00000000000..9464a28bfea
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sin.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 175 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sin.al)"
+sub sin {
+ usage "sin(x)" if @_ != 1;
+ CORE::sin($_[0]);
+}
+
+# end of POSIX::sin
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al
new file mode 100644
index 00000000000..e58de4d5602
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 728 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sleep.al)"
+sub sleep {
+ usage "sleep(seconds)" if @_ != 1;
+ $_[0] - CORE::sleep($_[0]);
+}
+
+# end of POSIX::sleep
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al
new file mode 100644
index 00000000000..75e6bc5e277
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 369 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sprintf.al)"
+sub sprintf {
+ usage "sprintf(pattern,args)" if @_ == 0;
+ CORE::sprintf(shift,@_);
+}
+
+# end of POSIX::sprintf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al
new file mode 100644
index 00000000000..54a2976e2da
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 180 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sqrt.al)"
+sub sqrt {
+ usage "sqrt(x)" if @_ != 1;
+ CORE::sqrt($_[0]);
+}
+
+# end of POSIX::sqrt
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/srand.al b/Master/tlpkg/tlperl/lib/auto/POSIX/srand.al
new file mode 100644
index 00000000000..b85fd14c60b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/srand.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 469 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\srand.al)"
+sub srand {
+ unimpl "srand()";
+}
+
+# end of POSIX::srand
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al
new file mode 100644
index 00000000000..b6869491e5d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 374 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sscanf.al)"
+sub sscanf {
+ unimpl "sscanf() is C-specific--use regular expressions instead";
+}
+
+# end of POSIX::sscanf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/stat.al b/Master/tlpkg/tlperl/lib/auto/POSIX/stat.al
new file mode 100644
index 00000000000..4016c0e88ab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/stat.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 580 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\stat.al)"
+sub stat {
+ usage "stat(filename)" if @_ != 1;
+ CORE::stat($_[0]);
+}
+
+# end of POSIX::stat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al
new file mode 100644
index 00000000000..6b9602b93c6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 498 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcat.al)"
+sub strcat {
+ unimpl "strcat() is C-specific, use .= instead";
+}
+
+# end of POSIX::strcat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al
new file mode 100644
index 00000000000..36a59233340
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 502 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strchr.al)"
+sub strchr {
+ unimpl "strchr() is C-specific, use index() instead";
+}
+
+# end of POSIX::strchr
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al
new file mode 100644
index 00000000000..b0447b9f1db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 506 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcmp.al)"
+sub strcmp {
+ unimpl "strcmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::strcmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al
new file mode 100644
index 00000000000..5660760b81d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 510 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcpy.al)"
+sub strcpy {
+ unimpl "strcpy() is C-specific, use = instead";
+}
+
+# end of POSIX::strcpy
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al
new file mode 100644
index 00000000000..4a46be8baaa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 514 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcspn.al)"
+sub strcspn {
+ unimpl "strcspn() is C-specific, use regular expressions instead";
+}
+
+# end of POSIX::strcspn
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al
new file mode 100644
index 00000000000..cc4c86dbae4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 518 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strerror.al)"
+sub strerror {
+ usage "strerror(errno)" if @_ != 1;
+ local $! = $_[0];
+ $! . "";
+}
+
+# end of POSIX::strerror
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al
new file mode 100644
index 00000000000..9cc9df2d315
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 524 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strlen.al)"
+sub strlen {
+ unimpl "strlen() is C-specific, use length instead";
+}
+
+# end of POSIX::strlen
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al
new file mode 100644
index 00000000000..4f09a52c298
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 528 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncat.al)"
+sub strncat {
+ unimpl "strncat() is C-specific, use .= instead";
+}
+
+# end of POSIX::strncat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al
new file mode 100644
index 00000000000..b4dfc9ab0b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 532 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncmp.al)"
+sub strncmp {
+ unimpl "strncmp() is C-specific, use eq instead";
+}
+
+# end of POSIX::strncmp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al
new file mode 100644
index 00000000000..98b3c081e68
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 536 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncpy.al)"
+sub strncpy {
+ unimpl "strncpy() is C-specific, use = instead";
+}
+
+# end of POSIX::strncpy
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al
new file mode 100644
index 00000000000..227c00d76cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 540 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strpbrk.al)"
+sub strpbrk {
+ unimpl "strpbrk() is C-specific, stopped";
+}
+
+# end of POSIX::strpbrk
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al
new file mode 100644
index 00000000000..1dd2a6ebf04
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 544 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strrchr.al)"
+sub strrchr {
+ unimpl "strrchr() is C-specific, use rindex() instead";
+}
+
+# end of POSIX::strrchr
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al
new file mode 100644
index 00000000000..3bd65863563
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 548 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strspn.al)"
+sub strspn {
+ unimpl "strspn() is C-specific, stopped";
+}
+
+# end of POSIX::strspn
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al
new file mode 100644
index 00000000000..f755459b68f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 552 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strstr.al)"
+sub strstr {
+ usage "strstr(big, little)" if @_ != 2;
+ CORE::index($_[0], $_[1]);
+}
+
+# end of POSIX::strstr
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al b/Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al
new file mode 100644
index 00000000000..bae94c9282a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 557 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strtok.al)"
+sub strtok {
+ unimpl "strtok() is C-specific, stopped";
+}
+
+# end of POSIX::strtok
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/system.al b/Master/tlpkg/tlperl/lib/auto/POSIX/system.al
new file mode 100644
index 00000000000..1b51e8f5209
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/system.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 473 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\system.al)"
+sub system {
+ usage "system(command)" if @_ != 1;
+ CORE::system($_[0]);
+}
+
+# end of POSIX::system
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/time.al b/Master/tlpkg/tlperl/lib/auto/POSIX/time.al
new file mode 100644
index 00000000000..6b404400fd4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/time.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 610 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\time.al)"
+sub time {
+ usage "time()" if @_ != 0;
+ CORE::time;
+}
+
+# end of POSIX::time
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al b/Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al
new file mode 100644
index 00000000000..aa223d6a27c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 378 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tmpfile.al)"
+sub tmpfile {
+ redef "IO::File::new_tmpfile()";
+}
+
+# end of POSIX::tmpfile
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al b/Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al
new file mode 100644
index 00000000000..57937313fc9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 87 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tolower.al)"
+sub tolower {
+ usage "tolower(string)" if @_ != 1;
+ lc($_[0]);
+}
+
+# end of POSIX::tolower
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al b/Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al
new file mode 100644
index 00000000000..a5484a70aa6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 92 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\toupper.al)"
+sub toupper {
+ usage "toupper(string)" if @_ != 1;
+ uc($_[0]);
+}
+
+# end of POSIX::toupper
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/umask.al b/Master/tlpkg/tlperl/lib/auto/POSIX/umask.al
new file mode 100644
index 00000000000..8bf64ae7f0e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/umask.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 585 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\umask.al)"
+sub umask {
+ usage "umask(mask)" if @_ != 1;
+ CORE::umask($_[0]);
+}
+
+# end of POSIX::umask
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al b/Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al
new file mode 100644
index 00000000000..874e4416f71
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 382 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ungetc.al)"
+sub ungetc {
+ redef "IO::Handle::ungetc()";
+}
+
+# end of POSIX::ungetc
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al b/Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al
new file mode 100644
index 00000000000..e1c36c60f85
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 74 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unimpl.al)"
+sub unimpl {
+ my ($mess) = @_;
+ $mess =~ s/xxx//;
+ croak "Unimplemented: POSIX::$mess";
+}
+
+# end of POSIX::unimpl
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al b/Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al
new file mode 100644
index 00000000000..c8f58ab9836
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 733 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unlink.al)"
+sub unlink {
+ usage "unlink(filename)" if @_ != 1;
+ CORE::unlink($_[0]);
+}
+
+# end of POSIX::unlink
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/usage.al b/Master/tlpkg/tlperl/lib/auto/POSIX/usage.al
new file mode 100644
index 00000000000..0b2b0bd6115
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/usage.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 64 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\usage.al)"
+sub usage {
+ my ($mess) = @_;
+ croak "Usage: POSIX::$mess";
+}
+
+# end of POSIX::usage
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/utime.al b/Master/tlpkg/tlperl/lib/auto/POSIX/utime.al
new file mode 100644
index 00000000000..68008e7e110
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/utime.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 738 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\utime.al)"
+sub utime {
+ usage "utime(filename, atime, mtime)" if @_ != 3;
+ CORE::utime($_[1], $_[2], $_[0]);
+}
+
+# end of POSIX::utime
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al
new file mode 100644
index 00000000000..fb502afc761
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 386 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vfprintf.al)"
+sub vfprintf {
+ unimpl "vfprintf() is C-specific";
+}
+
+# end of POSIX::vfprintf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al
new file mode 100644
index 00000000000..28108face71
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 390 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vprintf.al)"
+sub vprintf {
+ unimpl "vprintf() is C-specific";
+}
+
+# end of POSIX::vprintf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al b/Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al
new file mode 100644
index 00000000000..9d4f008ebbc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al
@@ -0,0 +1,12 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 394 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vsprintf.al)"
+sub vsprintf {
+ unimpl "vsprintf() is C-specific";
+}
+
+# end of POSIX::vsprintf
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/wait.al b/Master/tlpkg/tlperl/lib/auto/POSIX/wait.al
new file mode 100644
index 00000000000..57d9701f4ff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/wait.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 590 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\wait.al)"
+sub wait {
+ usage "wait()" if @_ != 0;
+ CORE::wait();
+}
+
+# end of POSIX::wait
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al b/Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al
new file mode 100644
index 00000000000..6cd31c21009
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\..\lib\POSIX.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package POSIX;
+
+#line 595 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\waitpid.al)"
+sub waitpid {
+ usage "waitpid(pid, options)" if @_ != 2;
+ CORE::waitpid($_[0], $_[1]);
+}
+
+# end of POSIX::waitpid
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs b/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll b/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll
new file mode 100755
index 00000000000..59f6b5ad9f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs b/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll b/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll
new file mode 100755
index 00000000000..5303bcfb0a8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/.packlist b/Master/tlpkg/tlperl/lib/auto/Tk/.packlist
new file mode 100644
index 00000000000..cca7d534034
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/.packlist
@@ -0,0 +1,650 @@
+X:\perl\bin\gedi
+X:\perl\bin\gedi.bat
+X:\perl\bin\ptked
+X:\perl\bin\ptked.bat
+X:\perl\bin\ptksh
+X:\perl\bin\ptksh.bat
+X:\perl\bin\tkjpeg
+X:\perl\bin\tkjpeg.bat
+X:\perl\bin\widget
+X:\perl\bin\widget.bat
+X:\perl\site\lib\Tie\Watch.pm
+X:\perl\site\lib\Tk.pm
+X:\perl\site\lib\Tk.pod
+X:\perl\site\lib\Tk\804delta.pod
+X:\perl\site\lib\Tk\Adjuster.pm
+X:\perl\site\lib\Tk\Adjuster.pod
+X:\perl\site\lib\Tk\After.pm
+X:\perl\site\lib\Tk\Animation.pm
+X:\perl\site\lib\Tk\Animation.pod
+X:\perl\site\lib\Tk\Balloon.pm
+X:\perl\site\lib\Tk\Balloon.pod
+X:\perl\site\lib\Tk\Bitmap.pm
+X:\perl\site\lib\Tk\Bitmap.pod
+X:\perl\site\lib\Tk\BrowseEntry.pm
+X:\perl\site\lib\Tk\BrowseEntry.pod
+X:\perl\site\lib\Tk\Button.pm
+X:\perl\site\lib\Tk\Button.pod
+X:\perl\site\lib\Tk\Camel.xpm
+X:\perl\site\lib\Tk\Canvas.pm
+X:\perl\site\lib\Tk\Canvas.pod
+X:\perl\site\lib\Tk\Checkbutton.pm
+X:\perl\site\lib\Tk\Checkbutton.pod
+X:\perl\site\lib\Tk\Clipboard.pm
+X:\perl\site\lib\Tk\Clipboard.pod
+X:\perl\site\lib\Tk\CmdLine.pm
+X:\perl\site\lib\Tk\CmdLine.pod
+X:\perl\site\lib\Tk\ColorEdit.xpm
+X:\perl\site\lib\Tk\ColorEditor.pm
+X:\perl\site\lib\Tk\ColorEditor.pod
+X:\perl\site\lib\Tk\Common.pod
+X:\perl\site\lib\Tk\Compound.pm
+X:\perl\site\lib\Tk\Compound.pod
+X:\perl\site\lib\Tk\Config.pm
+X:\perl\site\lib\Tk\ConfigSpecs.pod
+X:\perl\site\lib\Tk\Configure.pm
+X:\perl\site\lib\Tk\Credits
+X:\perl\site\lib\Tk\DItem.pod
+X:\perl\site\lib\Tk\Derived.pm
+X:\perl\site\lib\Tk\Derived.pod
+X:\perl\site\lib\Tk\Dialog.pm
+X:\perl\site\lib\Tk\Dialog.pod
+X:\perl\site\lib\Tk\DialogBox.pm
+X:\perl\site\lib\Tk\DialogBox.pod
+X:\perl\site\lib\Tk\DirTree.pm
+X:\perl\site\lib\Tk\DirTree.pod
+X:\perl\site\lib\Tk\Dirlist.pm
+X:\perl\site\lib\Tk\DragDrop.pm
+X:\perl\site\lib\Tk\DragDrop\Common.pm
+X:\perl\site\lib\Tk\DragDrop\LocalDrop.pm
+X:\perl\site\lib\Tk\DragDrop\Rect.pm
+X:\perl\site\lib\Tk\DragDrop\SunConst.pm
+X:\perl\site\lib\Tk\DragDrop\SunDrop.pm
+X:\perl\site\lib\Tk\DragDrop\SunSite.pm
+X:\perl\site\lib\Tk\DragDrop\Win32Drop.pm
+X:\perl\site\lib\Tk\DragDrop\Win32Site.pm
+X:\perl\site\lib\Tk\DragDrop\XDNDDrop.pm
+X:\perl\site\lib\Tk\DragDrop\XDNDSite.pm
+X:\perl\site\lib\Tk\DropSite.pm
+X:\perl\site\lib\Tk\DropSite.pod
+X:\perl\site\lib\Tk\DummyEncode.pm
+X:\perl\site\lib\Tk\English.pm
+X:\perl\site\lib\Tk\Entry.pm
+X:\perl\site\lib\Tk\Entry.pod
+X:\perl\site\lib\Tk\Error.pod
+X:\perl\site\lib\Tk\ErrorDialog.pm
+X:\perl\site\lib\Tk\Event.pm
+X:\perl\site\lib\Tk\Event\IO.pm
+X:\perl\site\lib\Tk\Eventloop.pod
+X:\perl\site\lib\Tk\FBox.pm
+X:\perl\site\lib\Tk\FBox.pod
+X:\perl\site\lib\Tk\FileSelect.pm
+X:\perl\site\lib\Tk\FileSelect.pod
+X:\perl\site\lib\Tk\FloatEntry.pm
+X:\perl\site\lib\Tk\Font.pm
+X:\perl\site\lib\Tk\Font.pod
+X:\perl\site\lib\Tk\Frame.pm
+X:\perl\site\lib\Tk\Frame.pod
+X:\perl\site\lib\Tk\HList.pm
+X:\perl\site\lib\Tk\HList.pod
+X:\perl\site\lib\Tk\IO.pm
+X:\perl\site\lib\Tk\IO.pod
+X:\perl\site\lib\Tk\IconList.pm
+X:\perl\site\lib\Tk\IconList.pod
+X:\perl\site\lib\Tk\Image.pm
+X:\perl\site\lib\Tk\Image.pod
+X:\perl\site\lib\Tk\InputO.pod
+X:\perl\site\lib\Tk\Internals.pod
+X:\perl\site\lib\Tk\Item.pod
+X:\perl\site\lib\Tk\ItemStyle.pm
+X:\perl\site\lib\Tk\JPEG.pm
+X:\perl\site\lib\Tk\LabEntry.pm
+X:\perl\site\lib\Tk\LabFrame.pm
+X:\perl\site\lib\Tk\LabFrame.pod
+X:\perl\site\lib\Tk\LabRadio.pm
+X:\perl\site\lib\Tk\Label.pm
+X:\perl\site\lib\Tk\Label.pod
+X:\perl\site\lib\Tk\Labelframe.pm
+X:\perl\site\lib\Tk\Labelframe.pod
+X:\perl\site\lib\Tk\Listbox.pm
+X:\perl\site\lib\Tk\Listbox.pod
+X:\perl\site\lib\Tk\MMtry.pm
+X:\perl\site\lib\Tk\MMutil.pm
+X:\perl\site\lib\Tk\MainWindow.pm
+X:\perl\site\lib\Tk\MainWindow.pod
+X:\perl\site\lib\Tk\MakeDepend.pm
+X:\perl\site\lib\Tk\Menu.pm
+X:\perl\site\lib\Tk\Menu.pod
+X:\perl\site\lib\Tk\Menu\Item.pm
+X:\perl\site\lib\Tk\Menubar.pm
+X:\perl\site\lib\Tk\Menubutton.pm
+X:\perl\site\lib\Tk\Menubutton.pod
+X:\perl\site\lib\Tk\Message.pm
+X:\perl\site\lib\Tk\Message.pod
+X:\perl\site\lib\Tk\Mwm.pod
+X:\perl\site\lib\Tk\NBFrame.pm
+X:\perl\site\lib\Tk\NoteBook.pm
+X:\perl\site\lib\Tk\NoteBook.pod
+X:\perl\site\lib\Tk\Optionmenu.pm
+X:\perl\site\lib\Tk\Optionmenu.pod
+X:\perl\site\lib\Tk\PNG.pm
+X:\perl\site\lib\Tk\Pane.pm
+X:\perl\site\lib\Tk\Panedwindow.pm
+X:\perl\site\lib\Tk\Panedwindow.pod
+X:\perl\site\lib\Tk\Photo.pm
+X:\perl\site\lib\Tk\Photo.pod
+X:\perl\site\lib\Tk\Pixmap.pm
+X:\perl\site\lib\Tk\Pixmap.pod
+X:\perl\site\lib\Tk\Popup.pod
+X:\perl\site\lib\Tk\Pretty.pm
+X:\perl\site\lib\Tk\ProgressBar.pm
+X:\perl\site\lib\Tk\README.Adjust
+X:\perl\site\lib\Tk\ROText.pm
+X:\perl\site\lib\Tk\ROText.pod
+X:\perl\site\lib\Tk\Radiobutton.pm
+X:\perl\site\lib\Tk\Radiobutton.pod
+X:\perl\site\lib\Tk\Region.pm
+X:\perl\site\lib\Tk\Reindex.pm
+X:\perl\site\lib\Tk\ReindexedROText.pm
+X:\perl\site\lib\Tk\ReindexedText.pm
+X:\perl\site\lib\Tk\Scale.pm
+X:\perl\site\lib\Tk\Scale.pod
+X:\perl\site\lib\Tk\Scrollbar.pm
+X:\perl\site\lib\Tk\Scrollbar.pod
+X:\perl\site\lib\Tk\Scrolled.pod
+X:\perl\site\lib\Tk\Spinbox.pm
+X:\perl\site\lib\Tk\Spinbox.pod
+X:\perl\site\lib\Tk\Stats.pm
+X:\perl\site\lib\Tk\Submethods.pm
+X:\perl\site\lib\Tk\Submethods.pod
+X:\perl\site\lib\Tk\SunConst.pod
+X:\perl\site\lib\Tk\TList.pm
+X:\perl\site\lib\Tk\TList.pod
+X:\perl\site\lib\Tk\Table.pm
+X:\perl\site\lib\Tk\Table.pod
+X:\perl\site\lib\Tk\Tcl-perl.pod
+X:\perl\site\lib\Tk\Text.pm
+X:\perl\site\lib\Tk\Text.pod
+X:\perl\site\lib\Tk\TextEdit.pm
+X:\perl\site\lib\Tk\TextList.pm
+X:\perl\site\lib\Tk\TextUndo.pm
+X:\perl\site\lib\Tk\TextUndo.pod
+X:\perl\site\lib\Tk\Text\Tag.pm
+X:\perl\site\lib\Tk\Tiler.pm
+X:\perl\site\lib\Tk\Tiler.pod
+X:\perl\site\lib\Tk\TixGrid.pm
+X:\perl\site\lib\Tk\TixGrid.pod
+X:\perl\site\lib\Tk\Tk.xbm
+X:\perl\site\lib\Tk\Tk.xpm
+X:\perl\site\lib\Tk\TkXSUB.def
+X:\perl\site\lib\Tk\Toplevel.pm
+X:\perl\site\lib\Tk\Toplevel.pod
+X:\perl\site\lib\Tk\Trace.pm
+X:\perl\site\lib\Tk\Tree.pm
+X:\perl\site\lib\Tk\Tree.pod
+X:\perl\site\lib\Tk\UserGuide.pod
+X:\perl\site\lib\Tk\Widget.pm
+X:\perl\site\lib\Tk\Widget.pod
+X:\perl\site\lib\Tk\WidgetDemo.pod
+X:\perl\site\lib\Tk\Wm.pm
+X:\perl\site\lib\Tk\Wm.pod
+X:\perl\site\lib\Tk\X.pm
+X:\perl\site\lib\Tk\X.pod
+X:\perl\site\lib\Tk\X11Font.pm
+X:\perl\site\lib\Tk\X11Font.pod
+X:\perl\site\lib\Tk\X11\X.h
+X:\perl\site\lib\Tk\X11\Xatom.h
+X:\perl\site\lib\Tk\X11\Xfuncproto.h
+X:\perl\site\lib\Tk\X11\Xlib.h
+X:\perl\site\lib\Tk\X11\Xutil.h
+X:\perl\site\lib\Tk\X11\cursorfont.h
+X:\perl\site\lib\Tk\X11\keysym.h
+X:\perl\site\lib\Tk\X11\keysymdef.h
+X:\perl\site\lib\Tk\X11\license.terms
+X:\perl\site\lib\Tk\Xcamel.gif
+X:\perl\site\lib\Tk\Xlib.pm
+X:\perl\site\lib\Tk\Xrm.pm
+X:\perl\site\lib\Tk\Xrm.pod
+X:\perl\site\lib\Tk\act_folder.xbm
+X:\perl\site\lib\Tk\act_folder.xpm
+X:\perl\site\lib\Tk\after.pod
+X:\perl\site\lib\Tk\anim.gif
+X:\perl\site\lib\Tk\arrowdownwin.xbm
+X:\perl\site\lib\Tk\balArrow.xbm
+X:\perl\site\lib\Tk\bind.pod
+X:\perl\site\lib\Tk\bindtags.pod
+X:\perl\site\lib\Tk\callbacks.pod
+X:\perl\site\lib\Tk\cbxarrow.xbm
+X:\perl\site\lib\Tk\chooseColor.pod
+X:\perl\site\lib\Tk\chooseDirectory.pod
+X:\perl\site\lib\Tk\composite.pod
+X:\perl\site\lib\Tk\demos\LabEnLabRad.pm
+X:\perl\site\lib\Tk\demos\images\QuitPB.xpm
+X:\perl\site\lib\Tk\demos\images\QuitPBa.xpm
+X:\perl\site\lib\Tk\demos\images\c.icon
+X:\perl\site\lib\Tk\demos\images\cursor.cur
+X:\perl\site\lib\Tk\demos\images\cursor.mask
+X:\perl\site\lib\Tk\demos\images\cursor.xbm
+X:\perl\site\lib\Tk\demos\images\dir.icon
+X:\perl\site\lib\Tk\demos\images\dir.mask
+X:\perl\site\lib\Tk\demos\images\earth.gif
+X:\perl\site\lib\Tk\demos\images\earthris.gif
+X:\perl\site\lib\Tk\demos\images\face
+X:\perl\site\lib\Tk\demos\images\flagdown
+X:\perl\site\lib\Tk\demos\images\flagup
+X:\perl\site\lib\Tk\demos\images\grey.25
+X:\perl\site\lib\Tk\demos\images\grey.5
+X:\perl\site\lib\Tk\demos\images\letters
+X:\perl\site\lib\Tk\demos\images\mickey.gif
+X:\perl\site\lib\Tk\demos\images\ned.xpm
+X:\perl\site\lib\Tk\demos\images\noletters
+X:\perl\site\lib\Tk\demos\images\page.icon
+X:\perl\site\lib\Tk\demos\images\page.mask
+X:\perl\site\lib\Tk\demos\images\pattern
+X:\perl\site\lib\Tk\demos\images\teapot.ppm
+X:\perl\site\lib\Tk\demos\widget_lib\Ball.pm
+X:\perl\site\lib\Tk\demos\widget_lib\HList.pl
+X:\perl\site\lib\Tk\demos\widget_lib\HList2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\Plot.pm
+X:\perl\site\lib\Tk\demos\widget_lib\WidgetDemo.pm
+X:\perl\site\lib\Tk\demos\widget_lib\arrows.pl
+X:\perl\site\lib\Tk\demos\widget_lib\balloon.pl
+X:\perl\site\lib\Tk\demos\widget_lib\bind.pl
+X:\perl\site\lib\Tk\demos\widget_lib\bitmaps.pl
+X:\perl\site\lib\Tk\demos\widget_lib\bounce.pl
+X:\perl\site\lib\Tk\demos\widget_lib\browseentry.pl
+X:\perl\site\lib\Tk\demos\widget_lib\browseentry2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\button.pl
+X:\perl\site\lib\Tk\demos\widget_lib\check.pl
+X:\perl\site\lib\Tk\demos\widget_lib\choosedir.pl
+X:\perl\site\lib\Tk\demos\widget_lib\clrpick.pl
+X:\perl\site\lib\Tk\demos\widget_lib\colors.pl
+X:\perl\site\lib\Tk\demos\widget_lib\cscroll.pl
+X:\perl\site\lib\Tk\demos\widget_lib\ctext.pl
+X:\perl\site\lib\Tk\demos\widget_lib\dialog1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\dialog2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\dirtree.pl
+X:\perl\site\lib\Tk\demos\widget_lib\entry1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\entry2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\entry3.pl
+X:\perl\site\lib\Tk\demos\widget_lib\filebox.pl
+X:\perl\site\lib\Tk\demos\widget_lib\floor.pl
+X:\perl\site\lib\Tk\demos\widget_lib\form.pl
+X:\perl\site\lib\Tk\demos\widget_lib\form_mgr.pl
+X:\perl\site\lib\Tk\demos\widget_lib\hello.pl
+X:\perl\site\lib\Tk\demos\widget_lib\hscale.pl
+X:\perl\site\lib\Tk\demos\widget_lib\icon.pl
+X:\perl\site\lib\Tk\demos\widget_lib\image1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\image2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\items.pl
+X:\perl\site\lib\Tk\demos\widget_lib\keysyms.pl
+X:\perl\site\lib\Tk\demos\widget_lib\labelframe.pl
+X:\perl\site\lib\Tk\demos\widget_lib\labels.pl
+X:\perl\site\lib\Tk\demos\widget_lib\labframe.pl
+X:\perl\site\lib\Tk\demos\widget_lib\mega.pl
+X:\perl\site\lib\Tk\demos\widget_lib\menbut.pl
+X:\perl\site\lib\Tk\demos\widget_lib\menus.pl
+X:\perl\site\lib\Tk\demos\widget_lib\menus2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\msgBox.pl
+X:\perl\site\lib\Tk\demos\widget_lib\notebook.pl
+X:\perl\site\lib\Tk\demos\widget_lib\paned1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\paned2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\photo1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\photo2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\plot.pl
+X:\perl\site\lib\Tk\demos\widget_lib\progress.pl
+X:\perl\site\lib\Tk\demos\widget_lib\puzzle.pl
+X:\perl\site\lib\Tk\demos\widget_lib\radio.pl
+X:\perl\site\lib\Tk\demos\widget_lib\ruler.pl
+X:\perl\site\lib\Tk\demos\widget_lib\sayings.pl
+X:\perl\site\lib\Tk\demos\widget_lib\search.pl
+X:\perl\site\lib\Tk\demos\widget_lib\showVars.pl
+X:\perl\site\lib\Tk\demos\widget_lib\slide.pl
+X:\perl\site\lib\Tk\demos\widget_lib\spin.pl
+X:\perl\site\lib\Tk\demos\widget_lib\states.pl
+X:\perl\site\lib\Tk\demos\widget_lib\style.pl
+X:\perl\site\lib\Tk\demos\widget_lib\texts.pl
+X:\perl\site\lib\Tk\demos\widget_lib\trace1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\trace2.pl
+X:\perl\site\lib\Tk\demos\widget_lib\transtile.pl
+X:\perl\site\lib\Tk\demos\widget_lib\twind.pl
+X:\perl\site\lib\Tk\demos\widget_lib\unicodeout.pl
+X:\perl\site\lib\Tk\demos\widget_lib\virtevents1.pl
+X:\perl\site\lib\Tk\demos\widget_lib\vscale.pl
+X:\perl\site\lib\Tk\demos\widtrib\Gedi.pl
+X:\perl\site\lib\Tk\demos\widtrib\TEMPLATE.pl
+X:\perl\site\lib\Tk\demos\widtrib\Tiler.pl
+X:\perl\site\lib\Tk\demos\widtrib\lib\npuz\Xcamel.npuz
+X:\perl\site\lib\Tk\demos\widtrib\npuz.pl
+X:\perl\site\lib\Tk\demos\widtrib\plop.pl
+X:\perl\site\lib\Tk\event.pod
+X:\perl\site\lib\Tk\exit.pod
+X:\perl\site\lib\Tk\file.xbm
+X:\perl\site\lib\Tk\file.xpm
+X:\perl\site\lib\Tk\fileevent.pod
+X:\perl\site\lib\Tk\focus.pod
+X:\perl\site\lib\Tk\folder.xbm
+X:\perl\site\lib\Tk\folder.xpm
+X:\perl\site\lib\Tk\form.pod
+X:\perl\site\lib\Tk\getOpenFile.pod
+X:\perl\site\lib\Tk\grab.pod
+X:\perl\site\lib\Tk\grid.pod
+X:\perl\site\lib\Tk\icon.gif
+X:\perl\site\lib\Tk\install.pm
+X:\perl\site\lib\Tk\license.terms
+X:\perl\site\lib\Tk\mega.pod
+X:\perl\site\lib\Tk\messageBox.pod
+X:\perl\site\lib\Tk\openfile.xbm
+X:\perl\site\lib\Tk\openfolder.xbm
+X:\perl\site\lib\Tk\openfolder.xpm
+X:\perl\site\lib\Tk\option.pod
+X:\perl\site\lib\Tk\options.pod
+X:\perl\site\lib\Tk\overview.pod
+X:\perl\site\lib\Tk\pTk.pod
+X:\perl\site\lib\Tk\pTk\Lang.h
+X:\perl\site\lib\Tk\pTk\Lang.m
+X:\perl\site\lib\Tk\pTk\Lang.t
+X:\perl\site\lib\Tk\pTk\Lang_f.h
+X:\perl\site\lib\Tk\pTk\Tcl-pTk
+X:\perl\site\lib\Tk\pTk\Xlib.h
+X:\perl\site\lib\Tk\pTk\Xlib.m
+X:\perl\site\lib\Tk\pTk\Xlib.t
+X:\perl\site\lib\Tk\pTk\Xlib_f.h
+X:\perl\site\lib\Tk\pTk\compat\limits.h
+X:\perl\site\lib\Tk\pTk\compat\stdlib.h
+X:\perl\site\lib\Tk\pTk\compat\unistd.h
+X:\perl\site\lib\Tk\pTk\default.h
+X:\perl\site\lib\Tk\pTk\img.h
+X:\perl\site\lib\Tk\pTk\imgInt.h
+X:\perl\site\lib\Tk\pTk\imgInt.m
+X:\perl\site\lib\Tk\pTk\imgInt.t
+X:\perl\site\lib\Tk\pTk\imgInt_f.h
+X:\perl\site\lib\Tk\pTk\ks_names.h
+X:\perl\site\lib\Tk\pTk\mkVFunc
+X:\perl\site\lib\Tk\pTk\moredefs.h
+X:\perl\site\lib\Tk\pTk\port.h
+X:\perl\site\lib\Tk\pTk\tcl.h
+X:\perl\site\lib\Tk\pTk\tclDecls.h
+X:\perl\site\lib\Tk\pTk\tclDecls.m
+X:\perl\site\lib\Tk\pTk\tclDecls.t
+X:\perl\site\lib\Tk\pTk\tclDecls_f.h
+X:\perl\site\lib\Tk\pTk\tclIntDecls.h
+X:\perl\site\lib\Tk\pTk\tclIntPlatDecls.h
+X:\perl\site\lib\Tk\pTk\tclMath.h
+X:\perl\site\lib\Tk\pTk\tclPlatDecls.h
+X:\perl\site\lib\Tk\pTk\tclWinInt.h
+X:\perl\site\lib\Tk\pTk\tix.h
+X:\perl\site\lib\Tk\pTk\tix.m
+X:\perl\site\lib\Tk\pTk\tix.t
+X:\perl\site\lib\Tk\pTk\tixBitmaps.h
+X:\perl\site\lib\Tk\pTk\tixDef.h
+X:\perl\site\lib\Tk\pTk\tixForm.h
+X:\perl\site\lib\Tk\pTk\tixGrData.h
+X:\perl\site\lib\Tk\pTk\tixGrid.h
+X:\perl\site\lib\Tk\pTk\tixHList.h
+X:\perl\site\lib\Tk\pTk\tixImgXpm.h
+X:\perl\site\lib\Tk\pTk\tixImgXpm.m
+X:\perl\site\lib\Tk\pTk\tixImgXpm.t
+X:\perl\site\lib\Tk\pTk\tixImgXpm_f.h
+X:\perl\site\lib\Tk\pTk\tixInt.h
+X:\perl\site\lib\Tk\pTk\tixInt.m
+X:\perl\site\lib\Tk\pTk\tixInt.t
+X:\perl\site\lib\Tk\pTk\tixInt_f.h
+X:\perl\site\lib\Tk\pTk\tixPort.h
+X:\perl\site\lib\Tk\pTk\tixTList.h
+X:\perl\site\lib\Tk\pTk\tixWinInt.h
+X:\perl\site\lib\Tk\pTk\tixWinPort.h
+X:\perl\site\lib\Tk\pTk\tix_f.h
+X:\perl\site\lib\Tk\pTk\tk.h
+X:\perl\site\lib\Tk\pTk\tk.m
+X:\perl\site\lib\Tk\pTk\tk.t
+X:\perl\site\lib\Tk\pTk\tk3d.h
+X:\perl\site\lib\Tk\pTk\tkButton.h
+X:\perl\site\lib\Tk\pTk\tkCanvas.h
+X:\perl\site\lib\Tk\pTk\tkCanvases.h
+X:\perl\site\lib\Tk\pTk\tkColor.h
+X:\perl\site\lib\Tk\pTk\tkConfig.h
+X:\perl\site\lib\Tk\pTk\tkDecls.h
+X:\perl\site\lib\Tk\pTk\tkDecls.m
+X:\perl\site\lib\Tk\pTk\tkDecls.t
+X:\perl\site\lib\Tk\pTk\tkDecls_f.h
+X:\perl\site\lib\Tk\pTk\tkEvent.h
+X:\perl\site\lib\Tk\pTk\tkEvent.m
+X:\perl\site\lib\Tk\pTk\tkEvent.t
+X:\perl\site\lib\Tk\pTk\tkEvent_f.h
+X:\perl\site\lib\Tk\pTk\tkFileFilter.h
+X:\perl\site\lib\Tk\pTk\tkFont.h
+X:\perl\site\lib\Tk\pTk\tkImgPhoto.h
+X:\perl\site\lib\Tk\pTk\tkImgPhoto.m
+X:\perl\site\lib\Tk\pTk\tkImgPhoto.t
+X:\perl\site\lib\Tk\pTk\tkImgPhoto_f.h
+X:\perl\site\lib\Tk\pTk\tkInitScript.h
+X:\perl\site\lib\Tk\pTk\tkInt.h
+X:\perl\site\lib\Tk\pTk\tkInt.m
+X:\perl\site\lib\Tk\pTk\tkInt.t
+X:\perl\site\lib\Tk\pTk\tkIntDecls.h
+X:\perl\site\lib\Tk\pTk\tkIntDecls.m
+X:\perl\site\lib\Tk\pTk\tkIntDecls.t
+X:\perl\site\lib\Tk\pTk\tkIntDecls_f.h
+X:\perl\site\lib\Tk\pTk\tkIntPlatDecls.h
+X:\perl\site\lib\Tk\pTk\tkIntPlatDecls.m
+X:\perl\site\lib\Tk\pTk\tkIntPlatDecls.t
+X:\perl\site\lib\Tk\pTk\tkIntPlatDecls_f.h
+X:\perl\site\lib\Tk\pTk\tkIntXlibDecls.h
+X:\perl\site\lib\Tk\pTk\tkIntXlibDecls.m
+X:\perl\site\lib\Tk\pTk\tkIntXlibDecls.t
+X:\perl\site\lib\Tk\pTk\tkIntXlibDecls_f.h
+X:\perl\site\lib\Tk\pTk\tkInt_f.h
+X:\perl\site\lib\Tk\pTk\tkMenu.h
+X:\perl\site\lib\Tk\pTk\tkMenubutton.h
+X:\perl\site\lib\Tk\pTk\tkOption.h
+X:\perl\site\lib\Tk\pTk\tkOption.m
+X:\perl\site\lib\Tk\pTk\tkOption.t
+X:\perl\site\lib\Tk\pTk\tkOption_f.h
+X:\perl\site\lib\Tk\pTk\tkPlatDecls.h
+X:\perl\site\lib\Tk\pTk\tkPlatDecls.m
+X:\perl\site\lib\Tk\pTk\tkPlatDecls.t
+X:\perl\site\lib\Tk\pTk\tkPlatDecls_f.h
+X:\perl\site\lib\Tk\pTk\tkPort.h
+X:\perl\site\lib\Tk\pTk\tkScale.h
+X:\perl\site\lib\Tk\pTk\tkScrollbar.h
+X:\perl\site\lib\Tk\pTk\tkSelect.h
+X:\perl\site\lib\Tk\pTk\tkText.h
+X:\perl\site\lib\Tk\pTk\tkUndo.h
+X:\perl\site\lib\Tk\pTk\tkVMacro.h
+X:\perl\site\lib\Tk\pTk\tkWin.h
+X:\perl\site\lib\Tk\pTk\tkWinDefault.h
+X:\perl\site\lib\Tk\pTk\tkWinInt.h
+X:\perl\site\lib\Tk\pTk\tkWinPort.h
+X:\perl\site\lib\Tk\pTk\tkXrm.h
+X:\perl\site\lib\Tk\pTk\tk_f.h
+X:\perl\site\lib\Tk\pTk\xbytes.h
+X:\perl\site\lib\Tk\pack.pod
+X:\perl\site\lib\Tk\palette.pod
+X:\perl\site\lib\Tk\place.pod
+X:\perl\site\lib\Tk\prolog.ps
+X:\perl\site\lib\Tk\reindex.pl
+X:\perl\site\lib\Tk\selection.pod
+X:\perl\site\lib\Tk\send.pod
+X:\perl\site\lib\Tk\srcfile.xpm
+X:\perl\site\lib\Tk\textfile.xpm
+X:\perl\site\lib\Tk\tixWm.pod
+X:\perl\site\lib\Tk\tkGlue.def
+X:\perl\site\lib\Tk\tkGlue.h
+X:\perl\site\lib\Tk\tkGlue.m
+X:\perl\site\lib\Tk\tkGlue.t
+X:\perl\site\lib\Tk\tkGlue_f.h
+X:\perl\site\lib\Tk\tkvars.pod
+X:\perl\site\lib\Tk\tranicon.gif
+X:\perl\site\lib\Tk\typemap
+X:\perl\site\lib\Tk\vtab.def
+X:\perl\site\lib\Tk\widgets.pm
+X:\perl\site\lib\Tk\widgets.pod
+X:\perl\site\lib\Tk\win.xbm
+X:\perl\site\lib\Tk\winfolder.xpm
+X:\perl\site\lib\Tk\wintext.xpm
+X:\perl\site\lib\auto\Tk\CancelRepeat.al
+X:\perl\site\lib\auto\Tk\Canvas\Canvas.bs
+X:\perl\site\lib\auto\Tk\Canvas\Canvas.dll
+X:\perl\site\lib\auto\Tk\Clipboard\autosplit.ix
+X:\perl\site\lib\auto\Tk\Clipboard\getSelected.al
+X:\perl\site\lib\auto\Tk\Compound\Compound.bs
+X:\perl\site\lib\auto\Tk\Compound\Compound.dll
+X:\perl\site\lib\auto\Tk\DragDrop\Win32Site\Win32Site.bs
+X:\perl\site\lib\auto\Tk\DragDrop\Win32Site\Win32Site.dll
+X:\perl\site\lib\auto\Tk\EnterFocus.al
+X:\perl\site\lib\auto\Tk\Entry\Entry.bs
+X:\perl\site\lib\auto\Tk\Entry\Entry.dll
+X:\perl\site\lib\auto\Tk\Error.al
+X:\perl\site\lib\auto\Tk\Event\Event.bs
+X:\perl\site\lib\auto\Tk\Event\Event.dll
+X:\perl\site\lib\auto\Tk\FirstMenu.al
+X:\perl\site\lib\auto\Tk\FocusChildren.al
+X:\perl\site\lib\auto\Tk\FocusOK.al
+X:\perl\site\lib\auto\Tk\Frame\AddScrollbars.al
+X:\perl\site\lib\auto\Tk\Frame\FindMenu.al
+X:\perl\site\lib\auto\Tk\Frame\autosplit.ix
+X:\perl\site\lib\auto\Tk\Frame\freeze_on_map.al
+X:\perl\site\lib\auto\Tk\Frame\label.al
+X:\perl\site\lib\auto\Tk\Frame\labelPack.al
+X:\perl\site\lib\auto\Tk\Frame\labelVariable.al
+X:\perl\site\lib\auto\Tk\Frame\packscrollbars.al
+X:\perl\site\lib\auto\Tk\Frame\queuePack.al
+X:\perl\site\lib\auto\Tk\Frame\sbset.al
+X:\perl\site\lib\auto\Tk\Frame\scrollbars.al
+X:\perl\site\lib\auto\Tk\HList\HList.bs
+X:\perl\site\lib\auto\Tk\HList\HList.dll
+X:\perl\site\lib\auto\Tk\IO\IO.bs
+X:\perl\site\lib\auto\Tk\IO\IO.dll
+X:\perl\site\lib\auto\Tk\ImageNames.al
+X:\perl\site\lib\auto\Tk\ImageTypes.al
+X:\perl\site\lib\auto\Tk\JPEG\JPEG.bs
+X:\perl\site\lib\auto\Tk\JPEG\JPEG.dll
+X:\perl\site\lib\auto\Tk\Listbox\AutoScan.al
+X:\perl\site\lib\auto\Tk\Listbox\BeginExtend.al
+X:\perl\site\lib\auto\Tk\Listbox\BeginSelect.al
+X:\perl\site\lib\auto\Tk\Listbox\BeginToggle.al
+X:\perl\site\lib\auto\Tk\Listbox\ButtonRelease_1.al
+X:\perl\site\lib\auto\Tk\Listbox\CLEAR.al
+X:\perl\site\lib\auto\Tk\Listbox\Cancel.al
+X:\perl\site\lib\auto\Tk\Listbox\Cntrl_End.al
+X:\perl\site\lib\auto\Tk\Listbox\Cntrl_Home.al
+X:\perl\site\lib\auto\Tk\Listbox\Cntrl_backslash.al
+X:\perl\site\lib\auto\Tk\Listbox\DELETE.al
+X:\perl\site\lib\auto\Tk\Listbox\DataExtend.al
+X:\perl\site\lib\auto\Tk\Listbox\EXISTS.al
+X:\perl\site\lib\auto\Tk\Listbox\EXTEND.al
+X:\perl\site\lib\auto\Tk\Listbox\ExtendUpDown.al
+X:\perl\site\lib\auto\Tk\Listbox\FETCH.al
+X:\perl\site\lib\auto\Tk\Listbox\FETCHSIZE.al
+X:\perl\site\lib\auto\Tk\Listbox\Listbox.bs
+X:\perl\site\lib\auto\Tk\Listbox\Listbox.dll
+X:\perl\site\lib\auto\Tk\Listbox\Motion.al
+X:\perl\site\lib\auto\Tk\Listbox\POP.al
+X:\perl\site\lib\auto\Tk\Listbox\PUSH.al
+X:\perl\site\lib\auto\Tk\Listbox\SHIFT.al
+X:\perl\site\lib\auto\Tk\Listbox\SPLICE.al
+X:\perl\site\lib\auto\Tk\Listbox\STORE.al
+X:\perl\site\lib\auto\Tk\Listbox\SelectAll.al
+X:\perl\site\lib\auto\Tk\Listbox\SetList.al
+X:\perl\site\lib\auto\Tk\Listbox\TIEARRAY.al
+X:\perl\site\lib\auto\Tk\Listbox\TIESCALAR.al
+X:\perl\site\lib\auto\Tk\Listbox\UNSHIFT.al
+X:\perl\site\lib\auto\Tk\Listbox\UpDown.al
+X:\perl\site\lib\auto\Tk\Listbox\autosplit.ix
+X:\perl\site\lib\auto\Tk\Listbox\clipboardPaste.al
+X:\perl\site\lib\auto\Tk\Listbox\deleteSelected.al
+X:\perl\site\lib\auto\Tk\Listbox\getSelected.al
+X:\perl\site\lib\auto\Tk\Listbox\xyIndex.al
+X:\perl\site\lib\auto\Tk\Menubutton\Menubutton.bs
+X:\perl\site\lib\auto\Tk\Menubutton\Menubutton.dll
+X:\perl\site\lib\auto\Tk\NBFrame\NBFrame.bs
+X:\perl\site\lib\auto\Tk\NBFrame\NBFrame.dll
+X:\perl\site\lib\auto\Tk\PNG\PNG.bs
+X:\perl\site\lib\auto\Tk\PNG\PNG.dll
+X:\perl\site\lib\auto\Tk\Pixmap\Pixmap.bs
+X:\perl\site\lib\auto\Tk\Pixmap\Pixmap.dll
+X:\perl\site\lib\auto\Tk\Receive.al
+X:\perl\site\lib\auto\Tk\RepeatId.al
+X:\perl\site\lib\auto\Tk\Scale\Activate.al
+X:\perl\site\lib\auto\Tk\Scale\ButtonDown.al
+X:\perl\site\lib\auto\Tk\Scale\ButtonUp.al
+X:\perl\site\lib\auto\Tk\Scale\ControlPress.al
+X:\perl\site\lib\auto\Tk\Scale\Drag.al
+X:\perl\site\lib\auto\Tk\Scale\EndDrag.al
+X:\perl\site\lib\auto\Tk\Scale\Enter.al
+X:\perl\site\lib\auto\Tk\Scale\Increment.al
+X:\perl\site\lib\auto\Tk\Scale\Leave.al
+X:\perl\site\lib\auto\Tk\Scale\Scale.bs
+X:\perl\site\lib\auto\Tk\Scale\Scale.dll
+X:\perl\site\lib\auto\Tk\Scale\autosplit.ix
+X:\perl\site\lib\auto\Tk\Scrollbar\ButtonDown.al
+X:\perl\site\lib\auto\Tk\Scrollbar\ButtonUp.al
+X:\perl\site\lib\auto\Tk\Scrollbar\Drag.al
+X:\perl\site\lib\auto\Tk\Scrollbar\EndDrag.al
+X:\perl\site\lib\auto\Tk\Scrollbar\Enter.al
+X:\perl\site\lib\auto\Tk\Scrollbar\Leave.al
+X:\perl\site\lib\auto\Tk\Scrollbar\Motion.al
+X:\perl\site\lib\auto\Tk\Scrollbar\ScrlByPages.al
+X:\perl\site\lib\auto\Tk\Scrollbar\ScrlByUnits.al
+X:\perl\site\lib\auto\Tk\Scrollbar\ScrlToPos.al
+X:\perl\site\lib\auto\Tk\Scrollbar\ScrlTopBottom.al
+X:\perl\site\lib\auto\Tk\Scrollbar\Scrollbar.bs
+X:\perl\site\lib\auto\Tk\Scrollbar\Scrollbar.dll
+X:\perl\site\lib\auto\Tk\Scrollbar\Select.al
+X:\perl\site\lib\auto\Tk\Scrollbar\StartDrag.al
+X:\perl\site\lib\auto\Tk\Scrollbar\autosplit.ix
+X:\perl\site\lib\auto\Tk\Selection.al
+X:\perl\site\lib\auto\Tk\TList\TList.bs
+X:\perl\site\lib\auto\Tk\TList\TList.dll
+X:\perl\site\lib\auto\Tk\Table\Create.al
+X:\perl\site\lib\auto\Tk\Table\Posn.al
+X:\perl\site\lib\auto\Tk\Table\autosplit.ix
+X:\perl\site\lib\auto\Tk\Table\see.al
+X:\perl\site\lib\auto\Tk\Table\totalColumns.al
+X:\perl\site\lib\auto\Tk\Table\totalRows.al
+X:\perl\site\lib\auto\Tk\TextEdit\autosplit.ix
+X:\perl\site\lib\auto\Tk\TextUndo\autosplit.ix
+X:\perl\site\lib\auto\Tk\Text\Text.bs
+X:\perl\site\lib\auto\Tk\Text\Text.dll
+X:\perl\site\lib\auto\Tk\Text\autosplit.ix
+X:\perl\site\lib\auto\Tk\TixGrid\TixGrid.bs
+X:\perl\site\lib\auto\Tk\TixGrid\TixGrid.dll
+X:\perl\site\lib\auto\Tk\Tk.bs
+X:\perl\site\lib\auto\Tk\Tk.dll
+X:\perl\site\lib\auto\Tk\Toplevel\FG_BindIn.al
+X:\perl\site\lib\auto\Tk\Toplevel\FG_BindOut.al
+X:\perl\site\lib\auto\Tk\Toplevel\FG_Create.al
+X:\perl\site\lib\auto\Tk\Toplevel\FG_Destroy.al
+X:\perl\site\lib\auto\Tk\Toplevel\FG_In.al
+X:\perl\site\lib\auto\Tk\Toplevel\FG_Out.al
+X:\perl\site\lib\auto\Tk\Toplevel\autosplit.ix
+X:\perl\site\lib\auto\Tk\TraverseToMenu.al
+X:\perl\site\lib\auto\Tk\Widget\ASkludge.al
+X:\perl\site\lib\auto\Tk\Widget\autosplit.ix
+X:\perl\site\lib\auto\Tk\Widget\bindDump.al
+X:\perl\site\lib\auto\Tk\Widget\clipboardKeysyms.al
+X:\perl\site\lib\auto\Tk\Widget\pathname.al
+X:\perl\site\lib\auto\Tk\Wm\AnchorAdjust.al
+X:\perl\site\lib\auto\Tk\Wm\FullScreen.al
+X:\perl\site\lib\auto\Tk\Wm\Popup.al
+X:\perl\site\lib\auto\Tk\Wm\Post.al
+X:\perl\site\lib\auto\Tk\Wm\autosplit.ix
+X:\perl\site\lib\auto\Tk\Wm\iconposition.al
+X:\perl\site\lib\auto\Tk\X\X.bs
+X:\perl\site\lib\auto\Tk\X\X.dll
+X:\perl\site\lib\auto\Tk\X\autosplit.ix
+X:\perl\site\lib\auto\Tk\Xlib\Xlib.bs
+X:\perl\site\lib\auto\Tk\Xlib\Xlib.dll
+X:\perl\site\lib\auto\Tk\autosplit.ix
+X:\perl\site\lib\auto\Tk\break.al
+X:\perl\site\lib\auto\Tk\focusFollowsMouse.al
+X:\perl\site\lib\auto\Tk\focusNext.al
+X:\perl\site\lib\auto\Tk\focusPrev.al
+X:\perl\site\lib\auto\Tk\getEncoding.al
+X:\perl\site\lib\auto\Tk\interps.al
+X:\perl\site\lib\auto\Tk\lsearch.al
+X:\perl\site\lib\auto\Tk\pTk\extralibs.ld
+X:\perl\site\lib\auto\Tk\tabFocus.al
+X:\perl\site\lib\auto\Tk\updateWidgets.al
+X:\perl\site\lib\fix_4_os2.pl
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al b/Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al
new file mode 100644
index 00000000000..d0d6bb1b2a3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/CancelRepeat.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 491 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\CancelRepeat.al)"
+sub CancelRepeat
+{
+ my $w = shift->MainWindow;
+ my $id = delete $w->{_afterId_};
+ $w->after('cancel',$id) if (defined $id);
+}
+
+# end of Tk::CancelRepeat
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll
new file mode 100755
index 00000000000..85fdb8e0f02
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/autosplit.ix
new file mode 100644
index 00000000000..9831f74facb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/autosplit.ix
@@ -0,0 +1,6 @@
+# Index created by AutoSplit for blib\lib\Tk\Clipboard.pm
+# (file acts as timestamp)
+package Tk::Clipboard;
+sub getSelected
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/getSelected.al b/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/getSelected.al
new file mode 100644
index 00000000000..44ba7b74bf0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Clipboard/getSelected.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk\Clipboard.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Clipboard;
+
+#line 115 "blib\lib\Tk\Clipboard.pm (autosplit into blib\lib\auto\Tk\Clipboard\getSelected.al)"
+sub getSelected
+{
+ my $w = shift;
+ my $val = Tk::catch { $w->get('sel.first','sel.last') };
+ return $val;
+}
+
+1;
+# end of Tk::Clipboard::getSelected
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll
new file mode 100755
index 00000000000..321f56a0d24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.bs b/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll b/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll
new file mode 100755
index 00000000000..468d9d71d05
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al b/Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al
new file mode 100644
index 00000000000..6b2b5b171a1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/EnterFocus.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 657 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\EnterFocus.al)"
+# focusFollowsMouse
+#
+# If this procedure is invoked, Tk will enter "focus-follows-mouse"
+# mode, where the focus is always on whatever window contains the
+# mouse. If this procedure isn't invoked, then the user typically
+# has to click on a window to give it the focus.
+#
+# Arguments:
+# None.
+
+sub EnterFocus
+{
+ my $w = shift;
+ return unless $w;
+ my $Ev = $w->XEvent;
+ my $d = $Ev->d;
+ $w->Tk::focus() if ($d eq 'NotifyAncestor' || $d eq 'NotifyNonlinear' || $d eq 'NotifyInferior');
+}
+
+# end of Tk::EnterFocus
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll
new file mode 100755
index 00000000000..9b1c07a7792
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Error.al b/Master/tlpkg/tlperl/lib/auto/Tk/Error.al
new file mode 100644
index 00000000000..7efe2c7043d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Error.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 479 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Error.al)"
+sub Error
+{my $w = shift;
+ my $error = shift;
+ if (Exists($w))
+ {
+ my $grab = $w->grab('current');
+ $grab->Unbusy if (defined $grab);
+ }
+ chomp($error);
+ warn "Tk::Error: $error\n " . join("\n ",@_)."\n";
+}
+
+# end of Tk::Error
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll
new file mode 100755
index 00000000000..5a9706cb92e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al b/Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al
new file mode 100644
index 00000000000..9ae95c2b311
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/FirstMenu.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 705 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FirstMenu.al)"
+# tkFirstMenu --
+# This procedure traverses to the first menubutton in the toplevel
+# for a given window, and posts that menubutton's menu.
+#
+# Arguments:
+# w - Name of a window. Selects which toplevel
+# to search for menubuttons.
+sub FirstMenu
+{
+ my $w = shift;
+ $w = $w->toplevel->FindMenu('');
+}
+
+# end of Tk::FirstMenu
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al b/Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al
new file mode 100644
index 00000000000..816e29d5ce3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/FocusChildren.al
@@ -0,0 +1,35 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 508 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FocusChildren.al)"
+#----------------------------------------------------------------------------
+# focus.tcl --
+#
+# This file defines several procedures for managing the input
+# focus.
+#
+# @(#) focus.tcl 1.6 94/12/19 17:06:46
+#
+# Copyright (c) 1994 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+sub FocusChildren { shift->children }
+
+#
+# focusNext --
+# This procedure is invoked to move the input focus to the next window
+# after a given one. "Next" is defined in terms of the window
+# stacking order, with all the windows underneath a given top-level
+# (no matter how deeply nested in the hierarchy) considered except
+# for frames and toplevels.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the next window after this one in the traversal
+# order.
+# end of Tk::FocusChildren
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al b/Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al
new file mode 100644
index 00000000000..2bcfe3ebf82
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/FocusOK.al
@@ -0,0 +1,36 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 628 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\FocusOK.al)"
+sub FocusOK
+{
+ my $w = shift;
+ my $value;
+ catch { $value = $w->cget('-takefocus') };
+ if (!$@ && defined($value))
+ {
+ return 0 if ($value eq '0');
+ return $w->viewable if ($value eq '1');
+ if ($value)
+ {
+ $value = $w->$value();
+ return $value if (defined $value);
+ }
+ }
+ if (!$w->viewable)
+ {
+ return 0;
+ }
+ catch { $value = $w->cget('-state') } ;
+ if (!$@ && defined($value) && $value eq 'disabled')
+ {
+ return 0;
+ }
+ $value = grep(/Key|Focus/,$w->Tk::bind(),$w->Tk::bind(ref($w)));
+ return $value;
+}
+
+# end of Tk::FocusOK
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/AddScrollbars.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/AddScrollbars.al
new file mode 100644
index 00000000000..aa12259f675
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/AddScrollbars.al
@@ -0,0 +1,52 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 225 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\AddScrollbars.al)"
+sub AddScrollbars
+{
+ require Tk::Scrollbar;
+ my ($cw,$w) = @_;
+ my $def = '';
+ my ($x,$y) = ('','');
+ my $s = 0;
+ my $c;
+ $cw->freeze_on_map;
+ foreach $c ($w->configure)
+ {
+ my $opt = $c->[0];
+ if ($opt eq '-yscrollcommand')
+ {
+ my $slice = Tk::Frame->new($cw,Name => 'ysbslice');
+ my $ysb = Tk::Scrollbar->new($slice,-orient => 'vertical', -command => [ 'yview', $w ]);
+ my $size = $ysb->cget('-width');
+ my $corner = Tk::Frame->new($slice,Name=>'corner','-relief' => 'raised',
+ '-width' => $size, '-height' => $size);
+ $ysb->pack(-side => 'left', -fill => 'y');
+ $cw->Advertise('yscrollbar' => $ysb);
+ $cw->Advertise('corner' => $corner);
+ $cw->Advertise('ysbslice' => $slice);
+ $corner->{'before'} = $ysb->PathName;
+ $slice->{'before'} = $w->PathName;
+ $y = 'w';
+ $s = 1;
+ }
+ elsif ($opt eq '-xscrollcommand')
+ {
+ my $xsb = Tk::Scrollbar->new($cw,-orient => 'horizontal', -command => [ 'xview', $w ]);
+ $cw->Advertise('xscrollbar' => $xsb);
+ $xsb->{'before'} = $w->PathName;
+ $x = 's';
+ $s = 1;
+ }
+ }
+ if ($s)
+ {
+ $cw->Advertise('scrolled' => $w);
+ $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]);
+ }
+}
+
+# end of Tk::Frame::AddScrollbars
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al
new file mode 100644
index 00000000000..66e71c29b21
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/FindMenu.al
@@ -0,0 +1,22 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 363 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\FindMenu.al)"
+sub FindMenu
+{
+ my ($w,$char) = @_;
+ my $child;
+ my $match;
+ foreach $child ($w->children)
+ {
+ next unless (ref $child);
+ $match = $child->FindMenu($char);
+ return $match if (defined $match);
+ }
+ return undef;
+}
+
+1;
+# end of Tk::Frame::FindMenu
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix
new file mode 100644
index 00000000000..6e5b939fce1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/autosplit.ix
@@ -0,0 +1,24 @@
+# Index created by AutoSplit for blib\lib\Tk\Frame.pm
+# (file acts as timestamp)
+package Tk::Frame;
+sub labelPack
+;
+sub labelVariable
+;
+sub label
+;
+sub queuePack
+;
+sub sbset
+;
+sub freeze_on_map
+;
+sub AddScrollbars
+;
+sub packscrollbars
+;
+sub scrollbars
+;
+sub FindMenu
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/freeze_on_map.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/freeze_on_map.al
new file mode 100644
index 00000000000..6a8b8a4f96e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/freeze_on_map.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 215 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\freeze_on_map.al)"
+sub freeze_on_map
+{
+ my ($w) = @_;
+ unless ($w->Tk::bind('Freeze','<Map>'))
+ {
+ $w->Tk::bind('Freeze','<Map>',['packPropagate' => 0])
+ }
+ $w->AddBindTag('Freeze');
+}
+
+# end of Tk::Frame::freeze_on_map
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al
new file mode 100644
index 00000000000..83ec70ed803
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/label.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 182 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\label.al)"
+sub label
+{
+ my ($cw,$val) = @_;
+ my $var = $cw->cget('-labelVariable');
+ if (@_ > 1 && defined $val)
+ {
+ if (!defined $var)
+ {
+ $var = \$cw->{Configure}{'-label'};
+ $cw->labelVariable($var);
+ }
+ $$var = $val;
+ }
+ return (defined $var) ? $$var : undef;;
+}
+
+# end of Tk::Frame::label
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al
new file mode 100644
index 00000000000..0cfa8631c24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelPack.al
@@ -0,0 +1,50 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 121 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelPack.al)"
+sub labelPack
+{
+ my ($cw,$val) = @_;
+ my $w = $cw->Subwidget('label');
+ my @result = ();
+ if (@_ > 1)
+ {
+ if (defined($w) && !defined($val))
+ {
+ $w->packForget;
+ }
+ elsif (defined($val) && !defined ($w))
+ {
+ require Tk::Label;
+ $w = Tk::Label->new($cw,-textvariable => $cw->labelVariable);
+ $cw->Advertise('label' => $w);
+ $cw->ConfigDelegate('label',qw(-text -textvariable));
+ }
+ if (defined($val) && defined($w))
+ {
+ my %pack = @$val;
+ unless (exists $pack{-side})
+ {
+ $pack{-side} = 'top' unless (exists $pack{-side});
+ }
+ unless (exists $pack{-fill})
+ {
+ $pack{-fill} = 'x' if ($pack{-side} =~ /(top|bottom)/);
+ $pack{-fill} = 'y' if ($pack{-side} =~ /(left|right)/);
+ }
+ unless (exists($pack{'-before'}) || exists($pack{'-after'}))
+ {
+ my $before = ($cw->packSlaves)[0];
+ $pack{'-before'} = $before if (defined $before);
+ }
+ $w->pack(%pack);
+ }
+ }
+ @result = $w->packInfo if (defined $w);
+ return (wantarray) ? @result : \@result;
+}
+
+# end of Tk::Frame::labelPack
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelVariable.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelVariable.al
new file mode 100644
index 00000000000..ca60cff1288
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/labelVariable.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 163 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelVariable.al)"
+sub labelVariable
+{
+ my ($cw,$val) = @_;
+ my $var = \$cw->{Configure}{'-labelVariable'};
+ if (@_ > 1 && defined $val)
+ {
+ $$var = $val;
+ $$val = '' unless (defined $$val);
+ my $w = $cw->Subwidget('label');
+ unless (defined $w)
+ {
+ $cw->labelPack([]);
+ $w = $cw->Subwidget('label');
+ }
+ $w->configure(-textvariable => $val);
+ }
+ return $$var;
+}
+
+# end of Tk::Frame::labelVariable
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/packscrollbars.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/packscrollbars.al
new file mode 100644
index 00000000000..9990eb67b13
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/packscrollbars.al
@@ -0,0 +1,86 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 269 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\packscrollbars.al)"
+sub packscrollbars
+{
+ my ($cw) = @_;
+ my $opt = $cw->cget('-scrollbars');
+ my $slice = $cw->Subwidget('ysbslice');
+ my $xsb = $cw->Subwidget('xscrollbar');
+ my $corner = $cw->Subwidget('corner');
+ my $w = $cw->Subwidget('scrolled');
+ my $xside = (($opt =~ /n/) ? 'top' : 'bottom');
+ my $havex = 0;
+ my $havey = 0;
+ $opt =~ s/r//;
+ $cw->{'pack_pending'} = 0;
+ if (defined $slice)
+ {
+ my $reqy;
+ my $ysb = $cw->Subwidget('yscrollbar');
+ if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed))
+ {
+ my $yside = (($opt =~ /w/) ? 'left' : 'right');
+ $slice->pack(-side => $yside, -fill => 'y',-before => $slice->{'before'});
+ $havey = 1;
+ if ($reqy)
+ {
+ $w->configure(-yscrollcommand => ['set', $ysb]);
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => ['sbset', $cw, $ysb, \$cw->{'packysb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-yscrollcommand => undef) unless $opt =~ s/[we]//;
+ $slice->packForget;
+ }
+ $cw->{'packysb'} = $havey;
+ }
+ if (defined $xsb)
+ {
+ my $reqx;
+ if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed))
+ {
+ $xsb->pack(-side => $xside, -fill => 'x',-before => $xsb->{'before'});
+ $havex = 1;
+ if ($reqx)
+ {
+ $w->configure(-xscrollcommand => ['set', $xsb]);
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => ['sbset', $cw, $xsb, \$cw->{'packxsb'}]);
+ }
+ }
+ else
+ {
+ $w->configure(-xscrollcommand => undef) unless $opt =~ s/[ns]//;
+ $xsb->packForget;
+ }
+ $cw->{'packxsb'} = $havex;
+ }
+ if (defined $corner)
+ {
+ if ($havex && $havey && defined $corner->{'before'})
+ {
+ my $anchor = $opt;
+ $anchor =~ s/o//g;
+ $corner->configure(-height => $xsb->ReqHeight);
+ $corner->pack(-before => $corner->{'before'}, -side => $xside,
+ -anchor => $anchor, -fill => 'x');
+ }
+ else
+ {
+ $corner->packForget;
+ }
+ }
+}
+
+# end of Tk::Frame::packscrollbars
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al
new file mode 100644
index 00000000000..59fe3ee4de0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/queuePack.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 198 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\queuePack.al)"
+sub queuePack
+{
+ my ($cw) = @_;
+ unless ($cw->{'pack_pending'})
+ {
+ $cw->{'pack_pending'} = 1;
+ $cw->afterIdle([$cw,'packscrollbars']);
+ }
+}
+
+# end of Tk::Frame::queuePack
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al
new file mode 100644
index 00000000000..cca4f0d642a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/sbset.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 208 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\sbset.al)"
+sub sbset
+{
+ my ($cw,$sb,$ref,@args) = @_;
+ $sb->set(@args);
+ $cw->queuePack if (@args == 2 && $sb->Needed != $$ref);
+}
+
+# end of Tk::Frame::sbset
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al
new file mode 100644
index 00000000000..21eeb53d2b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Frame/scrollbars.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk\Frame.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Frame;
+
+#line 347 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\scrollbars.al)"
+sub scrollbars
+{
+ my ($cw,$opt) = @_;
+ my $var = \$cw->{'-scrollbars'};
+ if (@_ > 1)
+ {
+ my $old = $$var;
+ if (!defined $old || $old ne $opt)
+ {
+ $$var = $opt;
+ $cw->queuePack;
+ }
+ }
+ return $$var;
+}
+
+# end of Tk::Frame::scrollbars
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.bs b/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll b/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll
new file mode 100755
index 00000000000..aeb0f6bcf38
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.bs b/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll b/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll
new file mode 100755
index 00000000000..472f34c8f64
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al b/Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al
new file mode 100644
index 00000000000..46176b8a4c5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/ImageNames.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 757 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\ImageNames.al)"
+sub ImageNames
+{
+ image('names');
+}
+
+# end of Tk::ImageNames
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al b/Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al
new file mode 100644
index 00000000000..59fcf95b7d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/ImageTypes.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 762 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\ImageTypes.al)"
+sub ImageTypes
+{
+ image('types');
+}
+
+# end of Tk::ImageTypes
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.bs b/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll b/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll
new file mode 100755
index 00000000000..b30740e14b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al
new file mode 100644
index 00000000000..89bda0179c6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/AutoScan.al
@@ -0,0 +1,49 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 676 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\AutoScan.al)"
+# AutoScan --
+# This procedure is invoked when the mouse leaves an entry window
+# with button 1 down. It scrolls the window up, down, left, or
+# right, depending on where the mouse left the window, and reschedules
+# itself as an "after" command so that the window continues to scroll until
+# the mouse moves back into the window or the mouse button is released.
+#
+# Arguments:
+# w - The entry window.
+# x - The x-coordinate of the mouse when it left the window.
+# y - The y-coordinate of the mouse when it left the window.
+sub AutoScan
+{
+ my $w = shift;
+ return if !Tk::Exists($w);
+ my $x = shift;
+ my $y = shift;
+ if ($y >= $w->height)
+ {
+ $w->yview('scroll',1,'units')
+ }
+ elsif ($y < 0)
+ {
+ $w->yview('scroll',-1,'units')
+ }
+ elsif ($x >= $w->width)
+ {
+ $w->xview('scroll',2,'units')
+ }
+ elsif ($x < 0)
+ {
+ $w->xview('scroll',-2,'units')
+ }
+ else
+ {
+ return;
+ }
+ $w->Motion($w->index("@" . $x . ',' . $y));
+ $w->RepeatId($w->after(50,'AutoScan',$w,$x,$y));
+}
+
+# end of Tk::Listbox::AutoScan
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginExtend.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginExtend.al
new file mode 100644
index 00000000000..afd8f0e9fda
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginExtend.al
@@ -0,0 +1,34 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 620 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginExtend.al)"
+# BeginExtend --
+#
+# This procedure is typically invoked on shift-button-1 presses. It
+# begins the process of extending a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginExtend
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended' && $w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ else
+ {
+ # No selection yet; simulate the begin-select operation.
+ $w->BeginSelect($el);
+ }
+}
+
+# end of Tk::Listbox::BeginExtend
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginSelect.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginSelect.al
new file mode 100644
index 00000000000..304a0afe1e1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginSelect.al
@@ -0,0 +1,46 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 515 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginSelect.al)"
+# BeginSelect --
+#
+# This procedure is typically invoked on button-1 presses. It begins
+# the process of making a selection in the listbox. Its exact behavior
+# depends on the selection mode currently in effect for the listbox;
+# see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginSelect
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'multiple')
+ {
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ }
+ else
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $w->selectionAnchor($el);
+ @Selection = ();
+ $Prev = $el
+ }
+ $w->focus if ($w->cget('-takefocus'));
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# end of Tk::Listbox::BeginSelect
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginToggle.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginToggle.al
new file mode 100644
index 00000000000..6c70e35d75a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/BeginToggle.al
@@ -0,0 +1,40 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 645 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\BeginToggle.al)"
+# BeginToggle --
+#
+# This procedure is typically invoked on control-button-1 presses. It
+# begins the process of toggling a selection in the listbox. Its
+# exact behavior depends on the selection mode currently in effect
+# for the listbox; see the Motif documentation for details.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element for the selection operation (typically the
+# one under the pointer). Must be in numerical form.
+sub BeginToggle
+{
+ my $w = shift;
+ my $el = shift;
+ if ($w->cget('-selectmode') eq 'extended')
+ {
+ @Selection = $w->curselection();
+ $Prev = $el;
+ $w->selectionAnchor($el);
+ if ($w->selectionIncludes($el))
+ {
+ $w->selectionClear($el)
+ }
+ else
+ {
+ $w->selectionSet($el)
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+
+# end of Tk::Listbox::BeginToggle
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al
new file mode 100644
index 00000000000..ec8fa789fb9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ButtonRelease_1.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 471 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\ButtonRelease_1.al)"
+sub ButtonRelease_1
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->CancelRepeat;
+ $w->activate($Ev->xy);
+}
+
+# end of Tk::Listbox::ButtonRelease_1
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al
new file mode 100644
index 00000000000..8ed6feba4b5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/CLEAR.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 304 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\CLEAR.al)"
+# CLEAR
+# -----
+# Empty the Listbox of contents if tied to an array
+sub CLEAR {
+ my $class = shift;
+ ${$class->{OBJECT}}->delete(0, 'end');
+}
+
+# end of Tk::Listbox::CLEAR
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al
new file mode 100644
index 00000000000..7ff924756f8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cancel.al
@@ -0,0 +1,42 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 805 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cancel.al)"
+# Cancel
+#
+# This procedure is invoked to cancel an extended selection in
+# progress. If there is an extended selection in progress, it
+# restores all of the items between the active one and the anchor
+# to their previous selection state.
+#
+# Arguments:
+# w - The listbox widget.
+sub Cancel
+{
+ my $w = shift;
+ if ($w->cget('-selectmode') ne 'extended' || !defined $Prev)
+ {
+ return;
+ }
+ my $first = $w->index('anchor');
+ my $last = $Prev;
+ if ($first > $last)
+ {
+ ($first, $last) = ($last, $first);
+ }
+ $w->selectionClear($first,$last);
+ while ($first <= $last)
+ {
+ if (Tk::lsearch(\@Selection,$first) >= 0)
+ {
+ $w->selectionSet($first)
+ }
+ $first++
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# end of Tk::Listbox::Cancel
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al
new file mode 100644
index 00000000000..dad5a4bc0d1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_End.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 492 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_End.al)"
+sub Cntrl_End
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate('end');
+ $w->see('end');
+ $w->selectionClear(0,'end');
+ $w->selectionSet('end');
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# end of Tk::Listbox::Cntrl_End
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al
new file mode 100644
index 00000000000..08131896da1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_Home.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 480 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_Home.al)"
+sub Cntrl_Home
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $w->activate(0);
+ $w->see(0);
+ $w->selectionClear(0,'end');
+ $w->selectionSet(0);
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# end of Tk::Listbox::Cntrl_Home
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al
new file mode 100644
index 00000000000..402426261a7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Cntrl_backslash.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 504 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Cntrl_backslash.al)"
+sub Cntrl_backslash
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ if ($w->cget('-selectmode') ne 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+
+# end of Tk::Listbox::Cntrl_backslash
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al
new file mode 100644
index 00000000000..3dd81ad40fd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DELETE.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 355 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\DELETE.al)"
+# DELETE
+# ------
+# Delete element at specified index
+sub DELETE {
+ my ( $class, @list ) = @_;
+
+ my $value = ${$class->{OBJECT}}->get(@list);
+ ${$class->{OBJECT}}->delete(@list);
+ return $value;
+}
+
+# end of Tk::Listbox::DELETE
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al
new file mode 100644
index 00000000000..4240300aa68
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/DataExtend.al
@@ -0,0 +1,39 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 775 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\DataExtend.al)"
+# DataExtend
+#
+# This procedure is called for key-presses such as Shift-KEndData.
+# If the selection mode isn't multiple or extend then it does nothing.
+# Otherwise it moves the active element to el and, if we're in
+# extended mode, extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# el - An integer element number.
+sub DataExtend
+{
+ my $w = shift;
+ my $el = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'extended')
+ {
+ $w->activate($el);
+ $w->see($el);
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->Motion($el)
+ }
+ }
+ elsif ($mode eq 'multiple')
+ {
+ $w->activate($el);
+ $w->see($el)
+ }
+}
+
+# end of Tk::Listbox::DataExtend
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al
new file mode 100644
index 00000000000..ae1ed1bc5e6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXISTS.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 366 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\EXISTS.al)"
+# EXISTS
+# ------
+# Returns true if the index exist, and undef if not
+sub EXISTS {
+ my ( $class, $index ) = @_;
+ return undef unless ${$class->{OBJECT}}->get($index);
+}
+
+# end of Tk::Listbox::EXISTS
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al
new file mode 100644
index 00000000000..2a483ea08c1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/EXTEND.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 312 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\EXTEND.al)"
+# EXTEND
+# ------
+# Do nothing and be happy about it
+sub EXTEND { }
+
+# PUSH
+# ----
+# Append elements onto the Listbox contents
+# end of Tk::Listbox::EXTEND
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al
new file mode 100644
index 00000000000..9b72250ea41
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/ExtendUpDown.al
@@ -0,0 +1,36 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 748 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\ExtendUpDown.al)"
+# ExtendUpDown --
+#
+# Does nothing unless we're in extended selection mode; in this
+# case it moves the location cursor (active element) up or down by
+# one element, and extends the selection to that point.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub ExtendUpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ if ($w->cget('-selectmode') ne 'extended')
+ {
+ return;
+ }
+ my $active = $w->index('active');
+ if (!@Selection)
+ {
+ $w->selectionSet($active);
+ @Selection = $w->curselection;
+ }
+ $w->activate($active + $amount);
+ $w->see('active');
+ $w->Motion($w->index('active'))
+}
+
+# end of Tk::Listbox::ExtendUpDown
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al
new file mode 100644
index 00000000000..fbbe7a3ce9a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCH.al
@@ -0,0 +1,56 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 176 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\FETCH.al)"
+# FETCH
+# -----
+# Return either the full contents or only the selected items in the
+# box depending on whether we tied it to an array or scalar respectively
+sub FETCH {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # Define the return variable
+ my $result;
+
+ # Check whether we are have a tied array or scalar quantity
+ if ( @_ ) {
+ my $i = shift;
+ # The Tk:: Listbox has been tied to an array, we are returning
+ # an array list of the current items in the Listbox
+ $result = $self->get($i);
+ } else {
+ # The Tk::Listbox has been tied to a scalar, we are returning a
+ # reference to an array or hash containing the currently selected items
+ my ( @array, %hash );
+
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ $result = [$self->curselection];
+ } elsif ( $options{ReturnType} eq "element" ) {
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $selection ( $self->curselection ) {
+ %hash = ( %hash, $selection => $self->get($selection)); }
+ $result = \%hash;
+ }
+ } else {
+ # return elements (default)
+ foreach my $selection ( $self->curselection ) {
+ push(@array,$self->get($selection)); }
+ $result = \@array;
+ }
+ }
+ return $result;
+}
+
+# end of Tk::Listbox::FETCH
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al
new file mode 100644
index 00000000000..13b612a26f5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/FETCHSIZE.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 224 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\FETCHSIZE.al)"
+# FETCHSIZE
+# ---------
+# Return the number of elements in the Listbox when tied to an array
+sub FETCHSIZE {
+ my $class = shift;
+ return ${$class->{OBJECT}}->size();
+}
+
+# end of Tk::Listbox::FETCHSIZE
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll
new file mode 100755
index 00000000000..bb2c6c89f70
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al
new file mode 100644
index 00000000000..c1c3cbd978b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/Motion.al
@@ -0,0 +1,77 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 552 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\Motion.al)"
+# Motion --
+#
+# This procedure is called to process mouse motion events while
+# button 1 is down. It may move or extend the selection, depending
+# on the listbox's selection mode.
+#
+# Arguments:
+# w - The listbox widget.
+# el - The element under the pointer (must be a number).
+sub Motion
+{
+ my $w = shift;
+ my $el = shift;
+ if (defined($Prev) && $el == $Prev)
+ {
+ return;
+ }
+ my $anchor = $w->index('anchor');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet($el);
+ $Prev = $el;
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+ elsif ($mode eq 'extended')
+ {
+ my $i = $Prev;
+ if (!defined $i || $i eq '')
+ {
+ $i = $el;
+ $w->selectionSet($el);
+ }
+ if ($w->selectionIncludes('anchor'))
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionSet('anchor',$el)
+ }
+ else
+ {
+ $w->selectionClear($i,$el);
+ $w->selectionClear('anchor',$el)
+ }
+ if (!@Selection)
+ {
+ @Selection = $w->curselection;
+ }
+ while ($i < $el && $i < $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i++
+ }
+ while ($i > $el && $i > $anchor)
+ {
+ if (Tk::lsearch(\@Selection,$i) >= 0)
+ {
+ $w->selectionSet($i)
+ }
+ $i--
+ }
+ $Prev = $el;
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+
+# end of Tk::Listbox::Motion
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al
new file mode 100644
index 00000000000..db469652447
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/POP.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 325 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\POP.al)"
+# POP
+# ---
+# Remove last element of the array and return it
+sub POP {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get('end');
+ ${$class->{OBJECT}}->delete('end');
+ return $value;
+}
+
+# end of Tk::Listbox::POP
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al
new file mode 100644
index 00000000000..f2168ef46d9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/PUSH.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 320 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\PUSH.al)"
+sub PUSH {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert('end', @list);
+}
+
+# end of Tk::Listbox::PUSH
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al
new file mode 100644
index 00000000000..96a41f7d79c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SHIFT.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 336 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SHIFT.al)"
+# SHIFT
+# -----
+# Removes the first element and returns it
+sub SHIFT {
+ my $class = shift;
+
+ my $value = ${$class->{OBJECT}}->get(0);
+ ${$class->{OBJECT}}->delete(0);
+ return $value
+}
+
+# end of Tk::Listbox::SHIFT
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al
new file mode 100644
index 00000000000..aeddea8196a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SPLICE.al
@@ -0,0 +1,84 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 374 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SPLICE.al)"
+# SPLICE
+# ------
+# Performs equivalent of splice on the listbox contents
+sub SPLICE {
+ my $class = shift;
+
+ my $self = ${$class->{OBJECT}};
+
+ # check for arguments
+ my @elements;
+ if ( scalar(@_) == 0 ) {
+ # none
+ @elements = $self->get(0,'end');
+ $self->delete(0,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];;
+
+ } elsif ( scalar(@_) == 1 ) {
+ # $offset
+ my ( $offset ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,'end');
+ $self->delete($start,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,'end');
+ $self->delete($offset,'end');
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } elsif ( scalar(@_) == 2 ) {
+ # $offset and $length
+ my ( $offset, $length ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+
+ } else {
+ # $offset, $length and @list
+ my ( $offset, $length, @list ) = @_;
+ if ( $offset < 0 ) {
+ my $start = $self->size() + $offset;
+ my $end = $self->size() + $offset + $length - 1;
+ if ( $start > 0 ) {
+ @elements = $self->get($start,$end);
+ $self->delete($start,$end);
+ $self->insert($start,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ } else {
+ return undef;
+ }
+ } else {
+ @elements = $self->get($offset,$offset+$length-1);
+ $self->delete($offset,$offset+$length-1);
+ $self->insert($offset,@list);
+ return wantarray ? @elements : $elements[scalar(@elements)-1];
+ }
+ }
+}
+
+# end of Tk::Listbox::SPLICE
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al
new file mode 100644
index 00000000000..492c32ccc1e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/STORE.al
@@ -0,0 +1,80 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 232 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\STORE.al)"
+# STORE
+# -----
+# If tied to an array we will modify the Listbox contents, while if tied
+# to a scalar we will select and clear elements.
+sub STORE {
+
+ if ( scalar(@_) == 2 ) {
+ # we have a tied scalar
+ my ( $class, $selected ) = @_;
+ my $self = ${$class->{OBJECT}};
+ my %options = %{$class->{OPTION}} if defined $class->{OPTION};;
+
+ # clear currently selected elements
+ $self->selectionClear(0,'end');
+
+ # set selected elements
+ if ( defined $options{ReturnType} ) {
+
+ # THREE-WAY SWITCH
+ if ( $options{ReturnType} eq "index" ) {
+ for ( my $i=0; $i < scalar(@$selected) ; $i++ ) {
+ for ( my $j=0; $j < $self->size() ; $j++ ) {
+ if( $j == $$selected[$i] ) {
+ $self->selectionSet($j); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "element" ) {
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ } elsif ( $options{ReturnType} eq "both" ) {
+ foreach my $key ( keys %$selected ) {
+ $self->selectionSet($key)
+ if $$selected{$key} eq $self->get($key);
+ }
+ }
+ } else {
+ # return elements (default)
+ for ( my $k=0; $k < scalar(@$selected) ; $k++ ) {
+ for ( my $l=0; $l < $self->size() ; $l++ ) {
+ if( $self->get($l) eq $$selected[$k] ) {
+ $self->selectionSet($l); last; }
+ }
+ }
+ }
+
+ } else {
+ # we have a tied array
+ my ( $class, $index, $value ) = @_;
+ my $self = ${$class->{OBJECT}};
+
+ # check size of current contents list
+ my $sizeof = $self->size();
+
+ if ( $index <= $sizeof ) {
+ # Change a current listbox entry
+ $self->delete($index);
+ $self->insert($index, $value);
+ } else {
+ # Add a new value
+ if ( defined $index ) {
+ $self->insert($index, $value);
+ } else {
+ $self->insert("end", $value);
+ }
+ }
+ }
+}
+
+# end of Tk::Listbox::STORE
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al
new file mode 100644
index 00000000000..50569afbe50
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SelectAll.al
@@ -0,0 +1,32 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 838 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SelectAll.al)"
+# SelectAll
+#
+# This procedure is invoked to handle the "select all" operation.
+# For single and browse mode, it just selects the active element.
+# Otherwise it selects everything in the widget.
+#
+# Arguments:
+# w - The listbox widget.
+sub SelectAll
+{
+ my $w = shift;
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'single' || $mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active')
+ }
+ else
+ {
+ $w->selectionSet(0,'end')
+ }
+ $w->eventGenerate("<<ListboxSelect>>");
+}
+
+# end of Tk::Listbox::SelectAll
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al
new file mode 100644
index 00000000000..25e4f596592
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/SetList.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 862 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\SetList.al)"
+# Perl/Tk extensions:
+sub SetList
+{
+ my $w = shift;
+ $w->delete(0,'end');
+ $w->insert('end',@_);
+}
+
+# end of Tk::Listbox::SetList
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al
new file mode 100644
index 00000000000..8c147e8eac8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIEARRAY.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 160 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\TIEARRAY.al)"
+sub TIEARRAY {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+# end of Tk::Listbox::TIEARRAY
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al
new file mode 100644
index 00000000000..9cedf047c7f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/TIESCALAR.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 169 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\TIESCALAR.al)"
+sub TIESCALAR {
+ my ( $class, $obj, %options ) = @_;
+ return bless {
+ OBJECT => \$obj,
+ OPTION => \%options }, $class;
+}
+
+# end of Tk::Listbox::TIESCALAR
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al
new file mode 100644
index 00000000000..10d6bae86ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UNSHIFT.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 347 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\UNSHIFT.al)"
+# UNSHIFT
+# -------
+# Insert elements at the beginning of the Listbox
+sub UNSHIFT {
+ my ( $class, @list ) = @_;
+ ${$class->{OBJECT}}->insert(0, @list);
+}
+
+# end of Tk::Listbox::UNSHIFT
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al
new file mode 100644
index 00000000000..7ffbfebf4e1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/UpDown.al
@@ -0,0 +1,41 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 716 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\UpDown.al)"
+# UpDown --
+#
+# Moves the location cursor (active element) up or down by one element,
+# and changes the selection if we're in browse or extended selection
+# mode.
+#
+# Arguments:
+# w - The listbox widget.
+# amount - +1 to move down one item, -1 to move back one item.
+sub UpDown
+{
+ my $w = shift;
+ my $amount = shift;
+ $w->activate($w->index('active')+$amount);
+ $w->see('active');
+ my $mode = $w->cget('-selectmode');
+ if ($mode eq 'browse')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+ elsif ($mode eq 'extended')
+ {
+ $w->selectionClear(0,'end');
+ $w->selectionSet('active');
+ $w->selectionAnchor('active');
+ $Prev = $w->index('active');
+ @Selection = ();
+ $w->eventGenerate("<<ListboxSelect>>");
+ }
+}
+
+# end of Tk::Listbox::UpDown
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix
new file mode 100644
index 00000000000..0cd2e67037c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/autosplit.ix
@@ -0,0 +1,56 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Listbox.pm
+# (file acts as timestamp)
+package Tk::Listbox;
+sub TIEARRAY ;
+sub TIESCALAR ;
+sub FETCH ;
+sub FETCHSIZE ;
+sub STORE ;
+sub CLEAR ;
+sub EXTEND ;
+sub PUSH ;
+sub POP ;
+sub SHIFT ;
+sub UNSHIFT ;
+sub DELETE ;
+sub EXISTS ;
+sub SPLICE ;
+sub xyIndex
+;
+sub ButtonRelease_1
+;
+sub Cntrl_Home
+;
+sub Cntrl_End
+;
+sub Cntrl_backslash
+;
+sub BeginSelect
+;
+sub Motion
+;
+sub BeginExtend
+;
+sub BeginToggle
+;
+sub AutoScan
+;
+sub UpDown
+;
+sub ExtendUpDown
+;
+sub DataExtend
+;
+sub Cancel
+;
+sub SelectAll
+;
+sub SetList
+;
+sub deleteSelected
+;
+sub clipboardPaste
+;
+sub getSelected
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/clipboardPaste.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/clipboardPaste.al
new file mode 100644
index 00000000000..28f0bd731de
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/clipboardPaste.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 880 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\clipboardPaste.al)"
+sub clipboardPaste
+{
+ my $w = shift;
+ my $index = $w->index('active') || $w->index($w->XEvent->xy);
+ my $str;
+ eval {local $SIG{__DIE__}; $str = $w->clipboardGet };
+ return if $@;
+ foreach (split("\n",$str))
+ {
+ $w->insert($index++,$_);
+ }
+}
+
+# end of Tk::Listbox::clipboardPaste
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/deleteSelected.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/deleteSelected.al
new file mode 100644
index 00000000000..45bdfe73221
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/deleteSelected.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 870 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\deleteSelected.al)"
+sub deleteSelected
+{
+ my $w = shift;
+ my $i;
+ foreach $i (reverse $w->curselection)
+ {
+ $w->delete($i);
+ }
+}
+
+# end of Tk::Listbox::deleteSelected
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/getSelected.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/getSelected.al
new file mode 100644
index 00000000000..a729a713d3e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/getSelected.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 893 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\getSelected.al)"
+sub getSelected
+{
+ my ($w) = @_;
+ my $i;
+ my (@result) = ();
+ foreach $i ($w->curselection)
+ {
+ push(@result,$w->get($i));
+ }
+ return (wantarray) ? @result : $result[0];
+}
+
+1;
+__END__
+
+
+1;
+# end of Tk::Listbox::getSelected
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al
new file mode 100644
index 00000000000..5689afdb6ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Listbox/xyIndex.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from ..\blib\lib\Tk\Listbox.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Listbox;
+
+#line 450 "..\blib\lib\Tk\Listbox.pm (autosplit into ..\blib\lib\auto\Tk\Listbox\xyIndex.al)"
+# ----
+
+#
+# Bind --
+# This procedure is invoked the first time the mouse enters a listbox
+# widget or a listbox widget receives the input focus. It creates
+# all of the class bindings for listboxes.
+#
+# Arguments:
+# event - Indicates which event caused the procedure to be invoked
+# (Enter or FocusIn). It is used so that we can carry out
+# the functions of that event in addition to setting up
+# bindings.
+
+sub xyIndex
+{
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ return $w->index($Ev->xy);
+}
+
+# end of Tk::Listbox::xyIndex
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.dll
new file mode 100755
index 00000000000..594c0bdadd3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Menubutton/Menubutton.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.bs b/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll b/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll
new file mode 100755
index 00000000000..8678ec8c7af
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.bs b/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll b/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll
new file mode 100755
index 00000000000..08bbbed4fcc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll
new file mode 100755
index 00000000000..c3adb205b3d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Receive.al b/Master/tlpkg/tlperl/lib/auto/Tk/Receive.al
new file mode 100644
index 00000000000..7cae1fc380b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Receive.al
@@ -0,0 +1,23 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 728 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Receive.al)"
+# If we have sub Clipboard in Tk then use base qw(Tk::Clipboard ....)
+# calls it when it does its eval "require $base"
+#sub Clipboard
+#{my $w = shift;
+# my $cmd = shift;
+# croak "Use clipboard\u$cmd()";
+#}
+
+sub Receive
+{
+ my $w = shift;
+ warn 'Receive(' . join(',',@_) .')';
+ die 'Tk rejects send(' . join(',',@_) .")\n";
+}
+
+# end of Tk::Receive
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al b/Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al
new file mode 100644
index 00000000000..e71d2a337a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/RepeatId.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 498 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\RepeatId.al)"
+sub RepeatId
+{
+ my ($w,$id) = @_;
+ $w = $w->MainWindow;
+ $w->CancelRepeat;
+ $w->{_afterId_} = $id;
+}
+
+# end of Tk::RepeatId
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al
new file mode 100644
index 00000000000..500358c8e0e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Activate.al
@@ -0,0 +1,33 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 86 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Activate.al)"
+# Activate --
+# This procedure is invoked to check a given x-y position in the
+# scale and activate the slider if the x-y position falls within
+# the slider.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Activate
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ return if ($w->cget('-state') eq 'disabled');
+ my $ident = $w->identify($x,$y);
+ if (defined($ident) && $ident eq 'slider')
+ {
+ $w->configure(-state => 'active')
+ }
+ else
+ {
+ $w->configure(-state => 'normal')
+ }
+}
+
+# end of Tk::Scale::Activate
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al
new file mode 100644
index 00000000000..61ed6f32c11
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonDown.al
@@ -0,0 +1,40 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 138 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ButtonDown.al)"
+# ButtonDown --
+# This procedure is invoked when a button is pressed in a scale. It
+# takes different actions depending on where the button was pressed.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates of button press.
+sub ButtonDown
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ $Tk::dragging = 0;
+ $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->Increment('up','little','initial')
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->Increment('down','little','initial')
+ }
+ elsif ($el eq 'slider')
+ {
+ $Tk::dragging = 1;
+ my @coords = $w->coords();
+ $Tk::deltaX = $x-$coords[0];
+ $Tk::deltaY = $y-$coords[1];
+ }
+}
+
+# end of Tk::Scale::ButtonDown
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al
new file mode 100644
index 00000000000..d5a22a77a46
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ButtonUp.al
@@ -0,0 +1,16 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 129 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ButtonUp.al)"
+sub ButtonUp
+{
+ my ($w,$x,$y) = @_;
+ $w->CancelRepeat();
+ $w->EndDrag();
+ $w->Activate($x,$y)
+}
+
+# end of Tk::Scale::ButtonUp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al
new file mode 100644
index 00000000000..50d7ad8b447
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/ControlPress.al
@@ -0,0 +1,31 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 255 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\ControlPress.al)"
+# ControlPress --
+# This procedure handles button presses that are made with the Control
+# key down. Depending on the mouse position, it adjusts the scale
+# value to one end of the range or the other.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates where the button was pressed.
+sub ControlPress
+{
+ my ($w,$x,$y) = @_;
+ my $el = $w->identify($x,$y);
+ return unless ($el);
+ if ($el eq 'trough1')
+ {
+ $w->set($w->cget('-from'))
+ }
+ elsif ($el eq 'trough2')
+ {
+ $w->set($w->cget('-to'))
+ }
+}
+
+1;
+# end of Tk::Scale::ControlPress
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al
new file mode 100644
index 00000000000..0bc63b12879
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Drag.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 169 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Drag.al)"
+# Drag --
+# This procedure is called when the mouse is dragged with
+# mouse button 1 down. If the drag started inside the slider
+# (i.e. the scale is active) then the scale's value is adjusted
+# to reflect the mouse's position.
+#
+# Arguments:
+# w - The scale widget.
+# x, y - Mouse coordinates.
+sub Drag
+{
+ my $w = shift;
+ my $x = shift;
+ my $y = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $w->set($w->get($x-$Tk::deltaX,$y-$Tk::deltaY))
+}
+
+# end of Tk::Scale::Drag
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al
new file mode 100644
index 00000000000..86037b86d92
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/EndDrag.al
@@ -0,0 +1,23 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 189 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\EndDrag.al)"
+# EndDrag --
+# This procedure is called to end an interactive drag of the
+# slider. It just marks the drag as over.
+# Arguments:
+# w - The scale widget.
+sub EndDrag
+{
+ my $w = shift;
+ if (!$Tk::dragging)
+ {
+ return;
+ }
+ $Tk::dragging = 0;
+}
+
+# end of Tk::Scale::EndDrag
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al
new file mode 100644
index 00000000000..1326a5ed9a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Enter.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 118 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Enter.al)"
+sub Enter
+{
+ my ($w,$x,$y) = @_;
+ if ($Tk::strictMotif)
+ {
+ $w->{'activeBg'} = $w->cget('-activebackground');
+ $w->configure('-activebackground',$w->cget('-background'));
+ }
+ $w->Activate($x,$y);
+}
+
+# end of Tk::Scale::Enter
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al
new file mode 100644
index 00000000000..76432eeaf40
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Increment.al
@@ -0,0 +1,61 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 203 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Increment.al)"
+# Increment --
+# This procedure is invoked to increment the value of a scale and
+# to set up auto-repeating of the action if that is desired. The
+# way the value is incremented depends on the "dir" and "big"
+# arguments.
+#
+# Arguments:
+# w - The scale widget.
+# dir - "up" means move value towards -from, "down" means
+# move towards -to.
+# big - Size of increments: "big" or "little".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+sub Increment
+{
+ my $w = shift;
+ my $dir = shift;
+ my $big = shift;
+ my $repeat = shift;
+ my $inc;
+ if ($big eq 'big')
+ {
+ $inc = $w->cget('-bigincrement');
+ if ($inc == 0)
+ {
+ $inc = abs(($w->cget('-to')-$w->cget('-from')))/10.0
+ }
+ if ($inc < $w->cget('-resolution'))
+ {
+ $inc = $w->cget('-resolution')
+ }
+ }
+ else
+ {
+ $inc = $w->cget('-resolution')
+ }
+ if (($w->cget('-from') > $w->cget('-to')) ^ ($dir eq 'up'))
+ {
+ $inc = -$inc
+ }
+ $w->set($w->get()+$inc);
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),'Increment',$w,$dir,$big,'again'));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),'Increment',$w,$dir,$big,'again'));
+ }
+}
+
+# end of Tk::Scale::Increment
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al
new file mode 100644
index 00000000000..eb6f7b69f89
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Leave.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scale.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scale;
+
+#line 111 "..\blib\lib\Tk\Scale.pm (autosplit into ..\blib\lib\auto\Tk\Scale\Leave.al)"
+sub Leave
+{
+ my ($w) = @_;
+ $w->configure('-activebackground',$w->{'activeBg'}) if ($Tk::strictMotif);
+ $w->configure('-state','normal') if ($w->cget('-state') eq 'active');
+}
+
+# end of Tk::Scale::Leave
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll
new file mode 100755
index 00000000000..a63ac1d0213
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix
new file mode 100644
index 00000000000..a5c5d2292f2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scale/autosplit.ix
@@ -0,0 +1,22 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Scale.pm
+# (file acts as timestamp)
+package Tk::Scale;
+sub Activate
+;
+sub Leave
+;
+sub Enter
+;
+sub ButtonUp
+;
+sub ButtonDown
+;
+sub Drag
+;
+sub EndDrag
+;
+sub Increment
+;
+sub ControlPress
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al
new file mode 100644
index 00000000000..d80e2217abc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonDown.al
@@ -0,0 +1,55 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 116 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonDown.al)"
+# tkScrollButtonDown --
+# This procedure is invoked when a button is pressed in a scrollbar.
+# It changes the way the scrollbar is displayed and takes actions
+# depending on where the mouse is.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonDown
+{my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ $w->configure('-activerelief' => 'sunken');
+ if ($e->b == 1 and
+ (defined($element) && $element eq 'slider'))
+ {
+ $w->StartDrag($e->x,$e->y);
+ }
+ elsif ($e->b == 2 and
+ (defined($element) && $element =~ /^(trough[12]|slider)$/o))
+ {
+ my $pos = $w->fraction($e->x, $e->y);
+ my($head, $tail) = $w->get;
+ my $len = $tail - $head;
+
+ $head = $pos - $len/2;
+ $tail = $pos + $len/2;
+ if ($head < 0) {
+ $head = 0;
+ $tail = $len;
+ }
+ elsif ($tail > 1) {
+ $head = 1 - $len;
+ $tail = 1;
+ }
+ $w->ScrlToPos($head);
+ $w->set($head, $tail);
+
+ $w->StartDrag($e->x,$e->y);
+ }
+ else
+ {
+ $w->Select($element,'initial');
+ }
+}
+
+# end of Tk::Scrollbar::ButtonDown
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al
new file mode 100644
index 00000000000..68857548755
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ButtonUp.al
@@ -0,0 +1,26 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 163 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonUp.al)"
+# tkScrollButtonUp --
+# This procedure is invoked when a button is released in a scrollbar.
+# It cancels scans and auto-repeats that were in progress, and restores
+# the way the active element is displayed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates.
+
+sub ButtonUp
+{my $w = shift;
+ my $e = $w->XEvent;
+ $w->CancelRepeat;
+ $w->configure('-activerelief' => 'raised');
+ $w->EndDrag($e->x,$e->y);
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::ButtonUp
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al
new file mode 100644
index 00000000000..988f9d4a3ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Drag.al
@@ -0,0 +1,43 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 262 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Drag.al)"
+# tkScrollDrag --
+# This procedure is called for each mouse motion even when the slider
+# is being dragged. It notifies the associated widget if we're not
+# jump scrolling, and it just updates the scrollbar if we are jump
+# scrolling.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The current mouse position.
+
+sub Drag
+{
+ my($w,$x,$y) = @_;
+ return if !defined $initPos;
+ my $delta = $w->delta($x-$pressX, $y-$pressY);
+ if ($w->cget('-jump'))
+ {
+ if (@initValues == 2)
+ {
+ $w->set($initValues[0]+$delta, $initValues[1]+$delta);
+ }
+ else
+ {
+ $delta = sprintf "%d", $delta * $initValues[0]; # round()
+ $initValues[2] += $delta;
+ $initValues[3] += $delta;
+ $w->set(@initValues[2,3]);
+ }
+ }
+ else
+ {
+ $w->ScrlToPos($initPos+$delta);
+ }
+}
+
+# end of Tk::Scrollbar::Drag
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al
new file mode 100644
index 00000000000..8c401b6fc31
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/EndDrag.al
@@ -0,0 +1,28 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 297 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\EndDrag.al)"
+# tkScrollEndDrag --
+# This procedure is called to end an interactive drag of the slider.
+# It scrolls the window if we're in jump mode, otherwise it does nothing.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the end of the drag operation.
+
+sub EndDrag
+{
+ my($w,$x,$y) = @_;
+ return if (!defined $initPos);
+ if ($w->cget('-jump'))
+ {
+ my $delta = $w->delta($x-$pressX, $y-$pressY);
+ $w->ScrlToPos($initPos+$delta);
+ }
+ undef $initPos;
+}
+
+# end of Tk::Scrollbar::EndDrag
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al
new file mode 100644
index 00000000000..9584a7fa34c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Enter.al
@@ -0,0 +1,21 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 86 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Enter.al)"
+sub Enter
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ if ($Tk::strictMotif)
+ {
+ my $bg = $w->cget('-background');
+ $activeBg = $w->cget('-activebackground');
+ $w->configure('-activebackground' => $bg);
+ }
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::Enter
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al
new file mode 100644
index 00000000000..a6c5e89d91e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Leave.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 99 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Leave.al)"
+sub Leave
+{
+ my $w = shift;
+ if ($Tk::strictMotif)
+ {
+ $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ;
+ }
+ $w->activate('');
+}
+
+# end of Tk::Scrollbar::Leave
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al
new file mode 100644
index 00000000000..46aac656c70
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Motion.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 109 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Motion.al)"
+sub Motion
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ $w->activate($w->identify($e->x,$e->y));
+}
+
+# end of Tk::Scrollbar::Motion
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al
new file mode 100644
index 00000000000..9d4018e9128
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByPages.al
@@ -0,0 +1,38 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 346 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByPages.al)"
+# tkScrlByPages --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of screenfuls. It notifies the associated
+# widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many screens to scroll: typically 1 or -1.
+
+sub ScrlByPages
+{
+ my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'pages');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount*($info[1]-1));
+ }
+}
+
+# end of Tk::Scrollbar::ScrlByPages
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al
new file mode 100644
index 00000000000..a364b3e52ce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlByUnits.al
@@ -0,0 +1,37 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 317 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByUnits.al)"
+# tkScrlByUnits --
+# This procedure tells the scrollbar's associated widget to scroll up
+# or down by a given number of units. It notifies the associated widget
+# in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# orient - Which kinds of scrollbars this applies to: "h" for
+# horizontal, "v" for vertical, "hv" for both.
+# amount - How many units to scroll: typically 1 or -1.
+
+sub ScrlByUnits
+{my $w = shift;
+ my $orient = shift;
+ my $amount = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ return if (index($orient,substr($w->cget('-orient'),0,1)) < 0);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('scroll',$amount,'units');
+ }
+ else
+ {
+ $cmd->Call($info[2]+$amount);
+ }
+}
+
+# end of Tk::Scrollbar::ScrlByUnits
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al
new file mode 100644
index 00000000000..e277237953e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlToPos.al
@@ -0,0 +1,35 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 376 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlToPos.al)"
+# tkScrlToPos --
+# This procedure tells the scrollbar's associated widget to scroll to
+# a particular location, given by a fraction between 0 and 1. It notifies
+# the associated widget in different ways for old and new command syntaxes.
+#
+# Arguments:
+# w - The scrollbar widget.
+# pos - A fraction between 0 and 1 indicating a desired position
+# in the document.
+
+sub ScrlToPos
+{
+ my $w = shift;
+ my $pos = shift;
+ my $cmd = $w->cget('-command');
+ return unless (defined $cmd);
+ my @info = $w->get;
+ if (@info == 2)
+ {
+ $cmd->Call('moveto',$pos);
+ }
+ else
+ {
+ $cmd->Call(int($info[0]*$pos));
+ }
+}
+
+# end of Tk::Scrollbar::ScrlToPos
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al
new file mode 100644
index 00000000000..7a00efe616f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/ScrlTopBottom.al
@@ -0,0 +1,32 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 403 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlTopBottom.al)"
+# tkScrlTopBottom
+# Scroll to the top or bottom of the document, depending on the mouse
+# position.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - Mouse coordinates within the widget.
+
+sub ScrlTopBottom
+{
+ my $w = shift;
+ my $e = $w->XEvent;
+ my $element = $w->identify($e->x,$e->y);
+ return unless ($element);
+ if ($element =~ /1$/)
+ {
+ $w->ScrlToPos(0);
+ }
+ elsif ($element =~ /2$/)
+ {
+ $w->ScrlToPos(1);
+ }
+}
+
+1;
+# end of Tk::Scrollbar::ScrlTopBottom
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll
new file mode 100755
index 00000000000..e8caf25b628
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al
new file mode 100644
index 00000000000..0da50da443b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/Select.al
@@ -0,0 +1,59 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 181 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Select.al)"
+# tkScrollSelect --
+# This procedure is invoked when button 1 is pressed over the scrollbar.
+# It invokes one of several scrolling actions depending on where in
+# the scrollbar the button was pressed.
+#
+# Arguments:
+# w - The scrollbar widget.
+# element - The element of the scrollbar that was selected, such
+# as "arrow1" or "trough2". Shouldn't be "slider".
+# repeat - Whether and how to auto-repeat the action: "noRepeat"
+# means don't auto-repeat, "initial" means this is the
+# first action in an auto-repeat sequence, and "again"
+# means this is the second repetition or later.
+
+sub Select
+{
+ my $w = shift;
+ my $element = shift;
+ my $repeat = shift;
+ return unless defined ($element);
+ if ($element eq 'arrow1')
+ {
+ $w->ScrlByUnits('hv',-1);
+ }
+ elsif ($element eq 'trough1')
+ {
+ $w->ScrlByPages('hv',-1);
+ }
+ elsif ($element eq 'trough2')
+ {
+ $w->ScrlByPages('hv', 1);
+ }
+ elsif ($element eq 'arrow2')
+ {
+ $w->ScrlByUnits('hv', 1);
+ }
+ else
+ {
+ return;
+ }
+
+ if ($repeat eq 'again')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again']));
+ }
+ elsif ($repeat eq 'initial')
+ {
+ $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again']));
+ }
+}
+
+# end of Tk::Scrollbar::Select
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/StartDrag.al b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/StartDrag.al
new file mode 100644
index 00000000000..32edbfdef24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/StartDrag.al
@@ -0,0 +1,38 @@
+# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Scrollbar;
+
+#line 232 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\StartDrag.al)"
+# tkScrollStartDrag --
+# This procedure is called to initiate a drag of the slider. It just
+# remembers the starting position of the slider.
+#
+# Arguments:
+# w - The scrollbar widget.
+# x, y - The mouse position at the start of the drag operation.
+
+sub StartDrag
+{
+ my($w,$x,$y) = @_;
+ return unless (defined ($w->cget('-command')));
+ $pressX = $x;
+ $pressY = $y;
+ @initValues = $w->get;
+ my $iv0 = $initValues[0];
+ if (@initValues == 2)
+ {
+ $initPos = $iv0;
+ }
+ elsif ($iv0 == 0)
+ {
+ $initPos = 0;
+ }
+ else
+ {
+ $initPos = $initValues[2]/$initValues[0];
+ }
+}
+
+# end of Tk::Scrollbar::StartDrag
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/autosplit.ix
new file mode 100644
index 00000000000..293d1322dd4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Scrollbar/autosplit.ix
@@ -0,0 +1,30 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Scrollbar.pm
+# (file acts as timestamp)
+package Tk::Scrollbar;
+sub Enter
+;
+sub Leave
+;
+sub Motion
+;
+sub ButtonDown
+;
+sub ButtonUp
+;
+sub Select
+;
+sub StartDrag
+;
+sub Drag
+;
+sub EndDrag
+;
+sub ScrlByUnits
+;
+sub ScrlByPages
+;
+sub ScrlToPos
+;
+sub ScrlTopBottom
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Selection.al b/Master/tlpkg/tlperl/lib/auto/Tk/Selection.al
new file mode 100644
index 00000000000..965dae3cc22
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Selection.al
@@ -0,0 +1,18 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 718 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\Selection.al)"
+# These wrappers don't use method syntax so need to live
+# in same package as raw Tk routines are newXS'ed into.
+
+sub Selection
+{my $widget = shift;
+ my $cmd = shift;
+ croak 'Use SelectionOwn/SelectionOwner' if ($cmd eq 'own');
+ croak "Use Selection\u$cmd()";
+}
+
+# end of Tk::Selection
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.bs b/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll b/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll
new file mode 100755
index 00000000000..24c8e9ceb5a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al b/Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al
new file mode 100644
index 00000000000..7900531ad3f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/Create.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from blib\lib\Tk\Table.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Table;
+
+#line 533 "blib\lib\Tk\Table.pm (autosplit into blib\lib\auto\Tk\Table\Create.al)"
+sub Create
+{
+ my $t = shift;
+ my $r = shift;
+ my $c = shift;
+ my $kind = shift;
+ $t->put($r,$c,$t->$kind(@_));
+}
+
+# end of Tk::Table::Create
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al b/Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al
new file mode 100644
index 00000000000..b625efe8212
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/Posn.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk\Table.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Table;
+
+#line 552 "blib\lib\Tk\Table.pm (autosplit into blib\lib\auto\Tk\Table\Posn.al)"
+sub Posn
+{
+ my ($t,$s) = @_;
+ my $info = $t->{Slave}{$s->PathName};
+ return (wantarray) ? @$info : $info;
+}
+
+# end of Tk::Table::Posn
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix
new file mode 100644
index 00000000000..1616ae28e83
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/autosplit.ix
@@ -0,0 +1,14 @@
+# Index created by AutoSplit for blib\lib\Tk\Table.pm
+# (file acts as timestamp)
+package Tk::Table;
+sub Create
+;
+sub totalColumns
+;
+sub totalRows
+;
+sub Posn
+;
+sub see
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al b/Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al
new file mode 100644
index 00000000000..38841a76552
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/see.al
@@ -0,0 +1,46 @@
+# NOTE: Derived from blib\lib\Tk\Table.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Table;
+
+#line 559 "blib\lib\Tk\Table.pm (autosplit into blib\lib\auto\Tk\Table\see.al)"
+sub see
+{
+ my $t = shift;
+ my ($row,$col) = (@_ == 2) ? @_ : @{$t->{Slave}{$_[0]->PathName}};
+ my $see = 1;
+ if (($row -= $t->cget('-fixedrows')) >= 0)
+ {
+ if ($row < $t->{Top})
+ {
+ $t->{Top} = $row;
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ elsif ($row >= $t->{Bottom})
+ {
+ $t->{Top} += ($row - $t->{Bottom}+1);
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ }
+ if (($col -= $t->cget('-fixedcolumns')) >= 0)
+ {
+ if ($col < $t->{Left})
+ {
+ $t->{Left} = $col;
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ elsif ($col >= $t->{Right})
+ {
+ $t->{Left} += ($col - $t->{Right}+1);
+ $t->QueueLayout(_ViewChange);
+ $see = 0;
+ }
+ }
+ return $see;
+}
+
+1;
+# end of Tk::Table::see
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al b/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al
new file mode 100644
index 00000000000..bee111bbe80
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalColumns.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk\Table.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Table;
+
+#line 542 "blib\lib\Tk\Table.pm (autosplit into blib\lib\auto\Tk\Table\totalColumns.al)"
+sub totalColumns
+{
+ scalar @{shift->{'Width'}};
+}
+
+# end of Tk::Table::totalColumns
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al b/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al
new file mode 100644
index 00000000000..88591cc7cab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Table/totalRows.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk\Table.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Table;
+
+#line 547 "blib\lib\Tk\Table.pm (autosplit into blib\lib\auto\Tk\Table\totalRows.al)"
+sub totalRows
+{
+ scalar @{shift->{'Height'}};
+}
+
+# end of Tk::Table::totalRows
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll
new file mode 100755
index 00000000000..2b0235a8221
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix
new file mode 100644
index 00000000000..48a5455c34a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Text/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\blib\lib\Tk\Text.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix
new file mode 100644
index 00000000000..d7c2cbff9ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TextEdit/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for blib\lib\Tk\TextEdit.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix
new file mode 100644
index 00000000000..3aef3c081a4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TextUndo/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for blib\lib\Tk\TextUndo.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.bs b/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll b/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll
new file mode 100755
index 00000000000..7261f4fd948
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Tk.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Tk.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Tk.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll
new file mode 100755
index 00000000000..8d80944808d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al
new file mode 100644
index 00000000000..8a0a0a6c911
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindIn.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 128 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_BindIn.al)"
+# tkFocusGroup_BindIn --
+#
+# Add a widget into the "FocusIn" list of the focus group. The $cmd will be
+# called when the widget is focused on by the user.
+#
+sub FG_BindIn {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusIn'}{$w} = Tk::Callback->new($cmd);
+}
+
+# end of Tk::Toplevel::FG_BindIn
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al
new file mode 100644
index 00000000000..d7fb14d40dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_BindOut.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 139 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_BindOut.al)"
+# tkFocusGroup_BindOut --
+#
+# Add a widget into the "FocusOut" list of the focus group. The
+# $cmd will be called when the widget loses the focus (User
+# types Tab or click on another widget).
+#
+sub FG_BindOut {
+ my($t, $w, $cmd) = @_;
+ $t->Error("focus group \"$t\" doesn't exist") unless (exists $t->{'_fg'});
+ $t->{'_FocusOut'}{$w} = Tk::Callback->new($cmd);
+}
+
+# end of Tk::Toplevel::FG_BindOut
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al
new file mode 100644
index 00000000000..34bb933cfa0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Create.al
@@ -0,0 +1,56 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 80 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Create.al)"
+#----------------------------------------------------------------------
+#
+# Focus Group
+#
+# Focus groups are used to handle the user's focusing actions inside a
+# toplevel.
+#
+# One example of using focus groups is: when the user focuses on an
+# entry, the text in the entry is highlighted and the cursor is put to
+# the end of the text. When the user changes focus to another widget,
+# the text in the previously focused entry is validated.
+#
+
+#----------------------------------------------------------------------
+# tkFocusGroup_Create --
+#
+# Create a focus group. All the widgets in a focus group must be
+# within the same focus toplevel. Each toplevel can have only
+# one focus group, which is identified by the name of the
+# toplevel widget.
+#
+sub FG_Create {
+ my $t = shift;
+ unless (exists $t->{'_fg'}) {
+ $t->{'_fg'} = 1;
+ $t->bind('<FocusIn>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_In($w, $Ev->d);
+ }
+ );
+ $t->bind('<FocusOut>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Out($w, $Ev->d);
+ }
+ );
+ $t->bind('<Destroy>', sub {
+ my $w = shift;
+ my $Ev = $w->XEvent;
+ $t->FG_Destroy($w);
+ }
+ );
+ # <Destroy> is not sufficient to break loops if never mapped.
+ $t->OnDestroy([$t,'FG_Destroy']);
+ }
+}
+
+# end of Tk::Toplevel::FG_Create
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al
new file mode 100644
index 00000000000..e0af457799f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Destroy.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 151 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Destroy.al)"
+# tkFocusGroup_Destroy --
+#
+# Cleans up when members of the focus group is deleted, or when the
+# toplevel itself gets deleted.
+#
+sub FG_Destroy {
+ my($t, $w) = @_;
+ if (!defined($w) || $t == $w) {
+ delete $t->{'_fg'};
+ delete $t->{'_focus'};
+ delete $t->{'_FocusOut'};
+ delete $t->{'_FocusIn'};
+ } else {
+ if (exists $t->{'_focus'}) {
+ delete $t->{'_focus'} if ($t->{'_focus'} == $w);
+ }
+ delete $t->{'_FocusIn'}{$w};
+ delete $t->{'_FocusOut'}{$w};
+ }
+}
+
+# end of Tk::Toplevel::FG_Destroy
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al
new file mode 100644
index 00000000000..74cf18b9b9d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_In.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 172 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_In.al)"
+# tkFocusGroup_In --
+#
+# Handles the <FocusIn> event. Calls the FocusIn command for the newly
+# focused widget in the focus group.
+#
+sub FG_In {
+ my($t, $w, $detail) = @_;
+ if (defined $t->{'_focus'} and $t->{'_focus'} eq $w) {
+ # This is already in focus
+ return;
+ } else {
+ $t->{'_focus'} = $w;
+ $t->{'_FocusIn'}{$w}->Call if exists $t->{'_FocusIn'}{$w};
+ }
+}
+
+# end of Tk::Toplevel::FG_In
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al
new file mode 100644
index 00000000000..9dfaffe9d2e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/FG_Out.al
@@ -0,0 +1,32 @@
+# NOTE: Derived from blib\lib\Tk\Toplevel.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Toplevel;
+
+#line 188 "blib\lib\Tk\Toplevel.pm (autosplit into blib\lib\auto\Tk\Toplevel\FG_Out.al)"
+# tkFocusGroup_Out --
+#
+# Handles the <FocusOut> event. Checks if this is really a lose
+# focus event, not one generated by the mouse moving out of the
+# toplevel window. Calls the FocusOut command for the widget
+# who loses its focus.
+#
+sub FG_Out {
+ my($t, $w, $detail) = @_;
+ if ($detail ne 'NotifyNonlinear' and $detail ne 'NotifyNonlinearVirtual') {
+ # This is caused by mouse moving out of the window
+ return;
+ }
+ unless (exists $t->{'_FocusOut'}{$w}) {
+ return;
+ } else {
+ $t->{'_FocusOut'}{$w}->Call;
+ delete $t->{'_focus'};
+ }
+}
+
+1;
+
+__END__
+1;
+# end of Tk::Toplevel::FG_Out
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix
new file mode 100644
index 00000000000..859b90d9a40
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Toplevel/autosplit.ix
@@ -0,0 +1,10 @@
+# Index created by AutoSplit for blib\lib\Tk\Toplevel.pm
+# (file acts as timestamp)
+package Tk::Toplevel;
+sub FG_Create ;
+sub FG_BindIn ;
+sub FG_BindOut ;
+sub FG_Destroy ;
+sub FG_In ;
+sub FG_Out ;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al b/Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al
new file mode 100644
index 00000000000..2fdfc38b631
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/TraverseToMenu.al
@@ -0,0 +1,27 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 687 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\TraverseToMenu.al)"
+# tkTraverseToMenu --
+# This procedure implements keyboard traversal of menus. Given an
+# ASCII character "char", it looks for a menubutton with that character
+# underlined. If one is found, it posts the menubutton's menu
+#
+# Arguments:
+# w - Window in which the key was typed (selects
+# a toplevel window).
+# char - Character that selects a menu. The case
+# is ignored. If an empty string, nothing
+# happens.
+sub TraverseToMenu
+{
+ my $w = shift;
+ my $char = shift;
+ return unless(defined $char && $char ne '');
+ $w = $w->toplevel->FindMenu($char);
+}
+
+# end of Tk::TraverseToMenu
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al
new file mode 100644
index 00000000000..1c19caf235f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/ASkludge.al
@@ -0,0 +1,30 @@
+# NOTE: Derived from blib\lib\Tk\Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1438 "blib\lib\Tk\Widget.pm (autosplit into blib\lib\auto\Tk\Widget\ASkludge.al)"
+sub ASkludge
+{
+ my ($hash,$sense) = @_;
+ foreach my $key (%$hash)
+ {
+ if ($key =~ /-.*variable/ && ref($hash->{$key}) eq 'SCALAR')
+ {
+ if ($sense)
+ {
+ my $val = ${$hash->{$key}};
+ require Tie::Scalar;
+ tie ${$hash->{$key}},'Tie::StdScalar';
+ ${$hash->{$key}} = $val;
+ }
+ else
+ {
+ untie ${$hash->{$key}};
+ }
+ }
+ }
+}
+
+# end of Tk::Widget::ASkludge
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix
new file mode 100644
index 00000000000..b610773d4dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/autosplit.ix
@@ -0,0 +1,11 @@
+# Index created by AutoSplit for blib\lib\Tk\Widget.pm
+# (file acts as timestamp)
+package Tk::Widget;
+sub bindDump ;
+sub ASkludge
+;
+sub clipboardKeysyms
+;
+sub pathname
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al
new file mode 100644
index 00000000000..cafaeececde
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/bindDump.al
@@ -0,0 +1,87 @@
+# NOTE: Derived from blib\lib\Tk\Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1358 "blib\lib\Tk\Widget.pm (autosplit into blib\lib\auto\Tk\Widget\bindDump.al)"
+sub bindDump {
+
+ # Dump lots of good binding information. This pretty-print subroutine
+ # is, essentially, the following code in disguise:
+ #
+ # print "Binding information for $w\n";
+ # foreach my $tag ($w->bindtags) {
+ # printf "\n Binding tag '$tag' has these bindings:\n";
+ # foreach my $binding ($w->bind($tag)) {
+ # printf " $binding\n";
+ # }
+ # }
+
+ my ($w) = @_;
+
+ my (@bindtags) = $w->bindtags;
+ my $digits = length( scalar @bindtags );
+ my ($spc1, $spc2) = ($digits + 33, $digits + 35);
+ my $format1 = "%${digits}d.";
+ my $format2 = ' ' x ($digits + 2);
+ my $n = 0;
+
+ my @out;
+ push @out, sprintf( "\n## Binding information for '%s', %s ##", $w->PathName, $w );
+
+ foreach my $tag (@bindtags) {
+ my (@bindings) = $w->bind($tag);
+ $n++; # count this bindtag
+
+ if ($#bindings == -1) {
+ push @out, sprintf( "\n$format1 Binding tag '$tag' has no bindings.\n", $n );
+ } else {
+ push @out, sprintf( "\n$format1 Binding tag '$tag' has these bindings:\n", $n );
+
+ foreach my $binding ( @bindings ) {
+ my $callback = $w->bind($tag, $binding);
+ push @out, sprintf( "$format2%27s : %-40s\n", $binding, $callback );
+
+ if ($callback =~ /SCALAR/) {
+ if (ref $$callback) {
+ push @out, sprintf( "%s %s\n", ' ' x $spc1, $$callback );
+ } else {
+ push @out, sprintf( "%s '%s'\n", ' ' x $spc1, $$callback );
+ }
+ } elsif ($callback =~ /ARRAY/) {
+ if (ref $callback->[0]) {
+ push @out, sprintf( "%s %s\n", ' ' x $spc1, $callback->[0], "\n" );
+ } else {
+ push @out, sprintf( "%s '%s'\n", ' ' x $spc1, $callback->[0], "\n" );
+ }
+ foreach my $arg (@$callback[1 .. $#{@$callback}]) {
+ if (ref $arg) {
+ push @out, sprintf( "%s %-40s", ' ' x $spc2, $arg );
+ } else {
+ push @out, sprintf( "%s '%s'", ' ' x $spc2, $arg );
+ }
+
+ if (ref $arg eq 'Tk::Ev') {
+ if ($arg =~ /SCALAR/) {
+ push @out, sprintf( ": '$$arg'" );
+ } else {
+ push @out, sprintf( ": '%s'", join("' '", @$arg) );
+ }
+ }
+
+ push @out, sprintf( "\n" );
+ } # forend callback arguments
+ } # ifend callback
+
+ } # forend all bindings for one tag
+
+ } # ifend have bindings
+
+ } # forend all tags
+ push @out, sprintf( "\n" );
+ return @out;
+
+} # end bindDump
+
+# end of Tk::Widget::bindDump
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al
new file mode 100644
index 00000000000..a5e488a7053
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/clipboardKeysyms.al
@@ -0,0 +1,51 @@
+# NOTE: Derived from blib\lib\Tk\Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1462 "blib\lib\Tk\Widget.pm (autosplit into blib\lib\auto\Tk\Widget\clipboardKeysyms.al)"
+# clipboardKeysyms --
+# This procedure is invoked to identify the keys that correspond to
+# the "copy", "cut", and "paste" functions for the clipboard.
+#
+# Arguments:
+# copy - Name of the key (keysym name plus modifiers, if any,
+# such as "Meta-y") used for the copy operation.
+# cut - Name of the key used for the cut operation.
+# paste - Name of the key used for the paste operation.
+#
+# This method is obsolete use clipboardOperations and abstract
+# event types instead. See Clipboard.pm and Mainwindow.pm
+
+sub clipboardKeysyms
+{
+ my @class = ();
+ my $mw = shift;
+ if (ref $mw)
+ {
+ $mw = $mw->DelegateFor('bind');
+ }
+ else
+ {
+ push(@class,$mw);
+ $mw = shift;
+ }
+ if (@_)
+ {
+ my $copy = shift;
+ $mw->Tk::bind(@class,"<$copy>",'clipboardCopy') if (defined $copy);
+ }
+ if (@_)
+ {
+ my $cut = shift;
+ $mw->Tk::bind(@class,"<$cut>",'clipboardCut') if (defined $cut);
+ }
+ if (@_)
+ {
+ my $paste = shift;
+ $mw->Tk::bind(@class,"<$paste>",'clipboardPaste') if (defined $paste);
+ }
+}
+
+# end of Tk::Widget::clipboardKeysyms
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al
new file mode 100644
index 00000000000..9b725dc26d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Widget/pathname.al
@@ -0,0 +1,15 @@
+# NOTE: Derived from blib\lib\Tk\Widget.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Widget;
+
+#line 1505 "blib\lib\Tk\Widget.pm (autosplit into blib\lib\auto\Tk\Widget\pathname.al)"
+sub pathname
+{
+ my ($w,$id) = @_;
+ my $x = $w->winfo('pathname',-displayof => oct($id));
+ return $x->PathName;
+}
+
+1;
+# end of Tk::Widget::pathname
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al
new file mode 100644
index 00000000000..538612878ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/AnchorAdjust.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from blib\lib\Tk\Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 87 "blib\lib\Tk\Wm.pm (autosplit into blib\lib\auto\Tk\Wm\AnchorAdjust.al)"
+sub AnchorAdjust
+{
+ my ($anchor,$X,$Y,$w,$h) = @_;
+ $anchor = 'c' unless (defined $anchor);
+ $Y += ($anchor =~ /s/) ? $h : ($anchor =~ /n/) ? 0 : $h/2;
+ $X += ($anchor =~ /e/) ? $w : ($anchor =~ /w/) ? 0 : $w/2;
+ return ($X,$Y);
+}
+
+# end of Tk::Wm::AnchorAdjust
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al
new file mode 100644
index 00000000000..4d5702cc60d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/FullScreen.al
@@ -0,0 +1,29 @@
+# NOTE: Derived from blib\lib\Tk\Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 138 "blib\lib\Tk\Wm.pm (autosplit into blib\lib\auto\Tk\Wm\FullScreen.al)"
+sub FullScreen
+{
+ my $w = shift;
+ my $over = (@_) ? shift : 0;
+ my $width = $w->screenwidth;
+ my $height = $w->screenheight;
+ $w->GeometryRequest($width,$height);
+ $w->overrideredirect($over & 1);
+ $w->Post(0,0);
+ $w->update;
+ if ($over & 2)
+ {
+ my $x = $w->rootx;
+ my $y = $w->rooty;
+ $width -= 2*$x;
+ $height -= $x + $y;
+ $w->GeometryRequest($width,$height);
+ $w->update;
+ }
+}
+
+# end of Tk::Wm::FullScreen
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al
new file mode 100644
index 00000000000..3f460c5bac6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Popup.al
@@ -0,0 +1,50 @@
+# NOTE: Derived from blib\lib\Tk\Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 96 "blib\lib\Tk\Wm.pm (autosplit into blib\lib\auto\Tk\Wm\Popup.al)"
+sub Popup
+{
+ my $w = shift;
+ $w->configure(@_) if @_;
+ $w->idletasks;
+ my ($mw,$mh) = ($w->reqwidth,$w->reqheight);
+ my ($rx,$ry,$rw,$rh) = (0,0,0,0);
+ my $base = $w->cget('-popover');
+ my $outside = 0;
+ if (defined $base)
+ {
+ if ($base eq 'cursor')
+ {
+ ($rx,$ry) = $w->pointerxy;
+ }
+ else
+ {
+ $rx = $base->rootx;
+ $ry = $base->rooty;
+ $rw = $base->Width;
+ $rh = $base->Height;
+ }
+ }
+ else
+ {
+ my $sc = ($w->parent) ? $w->parent->toplevel : $w;
+ $rx = -$sc->vrootx;
+ $ry = -$sc->vrooty;
+ $rw = $w->screenwidth;
+ $rh = $w->screenheight;
+ }
+ my ($X,$Y) = AnchorAdjust($w->cget('-overanchor'),$rx,$ry,$rw,$rh);
+ ($X,$Y) = AnchorAdjust($w->cget('-popanchor'),$X,$Y,-$mw,-$mh);
+ # adjust to not cross screen borders
+ if ($X < 0) { $X = 0 }
+ if ($Y < 0) { $Y = 0 }
+ if ($mw > $w->screenwidth) { $X = 0 }
+ if ($mh > $w->screenheight) { $Y = 0 }
+ $w->Post($X,$Y);
+ $w->waitVisibility;
+}
+
+# end of Tk::Wm::Popup
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al
new file mode 100644
index 00000000000..f3f5c8e3e08
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/Post.al
@@ -0,0 +1,20 @@
+# NOTE: Derived from blib\lib\Tk\Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 75 "blib\lib\Tk\Wm.pm (autosplit into blib\lib\auto\Tk\Wm\Post.al)"
+sub Post
+{
+ my ($w,$X,$Y) = @_;
+ $X = int($X);
+ $Y = int($Y);
+ $w->positionfrom('user');
+ $w->geometry("+$X+$Y");
+ # $w->MoveToplevelWindow($X,$Y);
+ $w->deiconify;
+ $w->raise;
+}
+
+# end of Tk::Wm::Post
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix
new file mode 100644
index 00000000000..201dbe8ba99
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/autosplit.ix
@@ -0,0 +1,14 @@
+# Index created by AutoSplit for blib\lib\Tk\Wm.pm
+# (file acts as timestamp)
+package Tk::Wm;
+sub Post
+;
+sub AnchorAdjust
+;
+sub Popup
+;
+sub FullScreen
+;
+sub iconposition
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al
new file mode 100644
index 00000000000..9254968f61c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Wm/iconposition.al
@@ -0,0 +1,24 @@
+# NOTE: Derived from blib\lib\Tk\Wm.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk::Wm;
+
+#line 159 "blib\lib\Tk\Wm.pm (autosplit into blib\lib\auto\Tk\Wm\iconposition.al)"
+sub iconposition
+{
+ my $w = shift;
+ if (@_ == 1)
+ {
+ return $w->wm('iconposition',$1,$2) if $_[0] =~ /^(\d+),(\d+)$/;
+ if ($_[0] =~ /^([+-])(\d+)([+-])(\d+)$/)
+ {
+ my $x = ($1 eq '-') ? $w->screenwidth-$2 : $2;
+ my $y = ($3 eq '-') ? $w->screenheight-$4 : $4;
+ return $w->wm('iconposition',$x,$y);
+ }
+ }
+ $w->wm('iconposition',@_);
+}
+
+1;
+# end of Tk::Wm::iconposition
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/X/X.bs b/Master/tlpkg/tlperl/lib/auto/Tk/X/X.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/X/X.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll b/Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll
new file mode 100755
index 00000000000..cbddac849e0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix
new file mode 100644
index 00000000000..e63dbf19b00
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/X/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\..\blib\lib\Tk\X.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.bs b/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll b/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll
new file mode 100755
index 00000000000..aa4ebe56447
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix
new file mode 100644
index 00000000000..7bd25b78a9a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/autosplit.ix
@@ -0,0 +1,45 @@
+# Index created by AutoSplit for blib\lib\Tk.pm
+# (file acts as timestamp)
+package Tk;
+sub Error
+;
+sub CancelRepeat
+;
+sub RepeatId
+;
+sub FocusChildren ;
+sub focusNext
+;
+sub focusPrev
+;
+sub FocusOK
+;
+sub EnterFocus
+;
+sub tabFocus
+;
+sub focusFollowsMouse
+;
+sub TraverseToMenu
+;
+sub FirstMenu
+;
+sub Selection
+;
+sub Receive
+;
+sub break
+;
+sub updateWidgets
+;
+sub ImageNames
+;
+sub ImageTypes
+;
+sub interps
+;
+sub lsearch
+;
+sub getEncoding
+;
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/break.al b/Master/tlpkg/tlperl/lib/auto/Tk/break.al
new file mode 100644
index 00000000000..98ff783f190
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/break.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 743 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\break.al)"
+sub break
+{
+ die "_TK_BREAK_\n";
+}
+
+# end of Tk::break
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al b/Master/tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al
new file mode 100644
index 00000000000..4a26198d323
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/focusFollowsMouse.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 681 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusFollowsMouse.al)"
+sub focusFollowsMouse
+{
+ my $widget = shift;
+ $widget->bind('all','<Enter>','EnterFocus');
+}
+
+# end of Tk::focusFollowsMouse
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al b/Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al
new file mode 100644
index 00000000000..18eece41cd6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/focusNext.al
@@ -0,0 +1,45 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 535 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusNext.al)"
+sub focusNext
+{
+ my $w = shift;
+ my $cur = $w;
+ while (1)
+ {
+ # Descend to just before the first child of the current widget.
+ my $parent = $cur;
+ my @children = $cur->FocusChildren();
+ my $i = -1;
+ # Look for the next sibling that isn't a top-level.
+ while (1)
+ {
+ $i += 1;
+ if ($i < @children)
+ {
+ $cur = $children[$i];
+ next if ($cur->toplevel == $cur);
+ last
+ }
+ # No more siblings, so go to the current widget's parent.
+ # If it's a top-level, break out of the loop, otherwise
+ # look for its next sibling.
+ $cur = $parent;
+ last if ($cur->toplevel() == $cur);
+ $parent = $parent->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+}
+
+# end of Tk::focusNext
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al b/Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al
new file mode 100644
index 00000000000..340feab598f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/focusPrev.al
@@ -0,0 +1,65 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 571 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\focusPrev.al)"
+# focusPrev --
+# This procedure is invoked to move the input focus to the previous
+# window before a given one. "Previous" is defined in terms of the
+# window stacking order, with all the windows underneath a given
+# top-level (no matter how deeply nested in the hierarchy) considered.
+#
+# Arguments:
+# w - Name of a window: the procedure will set the focus
+# to the previous window before this one in the traversal
+# order.
+sub focusPrev
+{
+ my $w = shift;
+ my $cur = $w;
+ my @children;
+ my $i;
+ my $parent;
+ while (1)
+ {
+ # Collect information about the current window's position
+ # among its siblings. Also, if the window is a top-level,
+ # then reposition to just after the last child of the window.
+ if ($cur->toplevel() == $cur)
+ {
+ $parent = $cur;
+ @children = $cur->FocusChildren();
+ $i = @children;
+ }
+ else
+ {
+ $parent = $cur->parent();
+ @children = $parent->FocusChildren();
+ $i = lsearch(\@children,$cur);
+ }
+ # Go to the previous sibling, then descend to its last descendant
+ # (highest in stacking order. While doing this, ignore top-levels
+ # and their descendants. When we run out of descendants, go up
+ # one level to the parent.
+ while ($i > 0)
+ {
+ $i--;
+ $cur = $children[$i];
+ next if ($cur->toplevel() == $cur);
+ $parent = $cur;
+ @children = $parent->FocusChildren();
+ $i = @children;
+ }
+ $cur = $parent;
+ if ($cur == $w || $cur->FocusOK)
+ {
+ $cur->tabFocus;
+ return;
+ }
+ }
+
+}
+
+# end of Tk::focusPrev
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al b/Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al
new file mode 100644
index 00000000000..b9e230edbf1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/getEncoding.al
@@ -0,0 +1,43 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 785 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\getEncoding.al)"
+sub getEncoding
+{
+ my ($class,$name) = @_;
+ eval { require Encode };
+ if ($@)
+ {
+ require Tk::DummyEncode;
+ return Tk::DummyEncode->getEncoding($name);
+ }
+ $name = $Tk::font_encoding{$name} if exists $Tk::font_encoding{$name};
+ my $enc = Encode::find_encoding($name);
+
+ unless ($enc)
+ {
+ $enc = Encode::find_encoding($name) if ($name =~ s/[-_]\d+$//)
+ }
+# if ($enc)
+# {
+# print STDERR "Lookup '$name' => ".$enc->name."\n";
+# }
+# else
+# {
+# print STDERR "Failed '$name'\n";
+# }
+ unless ($enc)
+ {
+ if ($name eq 'X11ControlChars')
+ {
+ require Tk::DummyEncode;
+ $Encode::encoding{$name} = $enc = Tk::DummyEncode->getEncoding($name);
+ }
+ }
+ return $enc;
+}
+
+1;
+# end of Tk::getEncoding
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/interps.al b/Master/tlpkg/tlperl/lib/auto/Tk/interps.al
new file mode 100644
index 00000000000..9298fe95b5c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/interps.al
@@ -0,0 +1,14 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 767 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\interps.al)"
+sub interps
+{
+ my $w = shift;
+ return $w->winfo('interps','-displayof');
+}
+
+# end of Tk::interps
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al b/Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al
new file mode 100644
index 00000000000..7fa5d5839de
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/lsearch.al
@@ -0,0 +1,19 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 773 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\lsearch.al)"
+sub lsearch
+{my $ar = shift;
+ my $x = shift;
+ my $i;
+ for ($i = 0; $i < scalar @$ar; $i++)
+ {
+ return $i if ($$ar[$i] eq $x);
+ }
+ return -1;
+}
+
+# end of Tk::lsearch
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld b/Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld
new file mode 100644
index 00000000000..9f42bd72dec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/pTk/extralibs.ld
@@ -0,0 +1 @@
+x:\msys\mingw\lib\libcomdlg32.a x:\msys\mingw\lib\libgdi32.a x:\msys\mingw\lib\libmsvcrt.a x:\msys\mingw\lib\libmoldname.a x:\msys\mingw\lib\libkernel32.a x:\msys\mingw\lib\libuser32.a x:\msys\mingw\lib\libgdi32.a x:\msys\mingw\lib\libwinspool.a x:\msys\mingw\lib\libcomdlg32.a x:\msys\mingw\lib\libadvapi32.a x:\msys\mingw\lib\libshell32.a x:\msys\mingw\lib\libole32.a x:\msys\mingw\lib\liboleaut32.a x:\msys\mingw\lib\libnetapi32.a x:\msys\mingw\lib\libuuid.a x:\msys\mingw\lib\libws2_32.a x:\msys\mingw\lib\libmpr.a x:\msys\mingw\lib\libwinmm.a x:\msys\mingw\lib\libversion.a x:\msys\mingw\lib\libodbc32.a x:\msys\mingw\lib\libodbccp32.a
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al b/Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al
new file mode 100644
index 00000000000..7a4ffdf80f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/tabFocus.al
@@ -0,0 +1,13 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 676 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\tabFocus.al)"
+sub tabFocus
+{
+ shift->Tk::focus;
+}
+
+# end of Tk::tabFocus
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al b/Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al
new file mode 100644
index 00000000000..5b1bf866ead
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Tk/updateWidgets.al
@@ -0,0 +1,17 @@
+# NOTE: Derived from blib\lib\Tk.pm.
+# Changes made here will be lost when autosplit is run again.
+# See AutoSplit.pm.
+package Tk;
+
+#line 748 "blib\lib\Tk.pm (autosplit into blib\lib\auto\Tk\updateWidgets.al)"
+sub updateWidgets
+{
+ my ($w) = @_;
+ while ($w->DoOneEvent(DONT_WAIT|IDLE_EVENTS|WINDOW_EVENTS))
+ {
+ }
+ $w;
+}
+
+# end of Tk::updateWidgets
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.bs b/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.dll b/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.dll
new file mode 100755
index 00000000000..d2aea9dad9b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/ChangeNotify/ChangeNotify.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.dll
new file mode 100755
index 00000000000..d278ab5a424
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Clipboard/Clipboard.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.dll
new file mode 100755
index 00000000000..1063d12ed68
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Console/Console.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.dll
new file mode 100755
index 00000000000..60b2bebca01
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Event/Event.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.bs b/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.dll b/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.dll
new file mode 100755
index 00000000000..61e6c54c3ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/EventLog/EventLog.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/File/File.bs b/Master/tlpkg/tlperl/lib/auto/Win32/File/File.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/File/File.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/File/File.dll b/Master/tlpkg/tlperl/lib/auto/Win32/File/File.dll
new file mode 100755
index 00000000000..70f4a8f8849
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/File/File.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.bs b/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.dll b/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.dll
new file mode 100755
index 00000000000..402775123a1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/FileSecurity/FileSecurity.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.bs b/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.dll b/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.dll
new file mode 100755
index 00000000000..e12f04c7c0a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/IPC/IPC.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.dll
new file mode 100755
index 00000000000..ae5b15e9cd3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Internet/Internet.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.dll
new file mode 100755
index 00000000000..46db0b6a335
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Job/Job.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.dll
new file mode 100755
index 00000000000..db311a4b229
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Mutex/Mutex.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.bs b/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.dll b/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.dll
new file mode 100755
index 00000000000..c9c353b1624
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/NetAdmin/NetAdmin.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.bs b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.dll b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.dll
new file mode 100755
index 00000000000..e28382b65b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/NetResource.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/autosplit.ix
new file mode 100644
index 00000000000..5a940127951
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/NetResource/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\blib\lib\Win32\NetResource.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.bs b/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.dll b/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.dll
new file mode 100755
index 00000000000..c3a55ff68f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/ODBC/ODBC.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.bs b/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dll b/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dll
new file mode 100755
index 00000000000..a8bb4eb0097
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/OLE/OLE.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.bs b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.dll b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.dll
new file mode 100755
index 00000000000..c0aa61962ae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/PerfLib.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/autosplit.ix b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/autosplit.ix
new file mode 100644
index 00000000000..e8fc6693cb5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/PerfLib/autosplit.ix
@@ -0,0 +1,3 @@
+# Index created by AutoSplit for ..\blib\lib\Win32\PerfLib.pm
+# (file acts as timestamp)
+1;
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.dll
new file mode 100755
index 00000000000..d6db3893029
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Pipe/Pipe.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.dll
new file mode 100755
index 00000000000..d5d417912da
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Process/Process.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.dll
new file mode 100755
index 00000000000..b1dfb36fd34
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Registry/Registry.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.dll
new file mode 100755
index 00000000000..3ab2f6f4850
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Semaphore/Semaphore.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.dll
new file mode 100755
index 00000000000..7a6be008842
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Service/Service.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.dll
new file mode 100755
index 00000000000..17889059886
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Shortcut/Shortcut.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.bs b/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.dll b/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.dll
new file mode 100755
index 00000000000..6dd86ff29f8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/Sound/Sound.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.bs b/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.dll b/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.dll
new file mode 100755
index 00000000000..d63300a7405
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32/WinError/WinError.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.bs b/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.dll b/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.dll
new file mode 100755
index 00000000000..45b7bc0688a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/Win32API/Registry/Registry.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/auto/re/re.bs b/Master/tlpkg/tlperl/lib/auto/re/re.bs
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/re/re.bs
diff --git a/Master/tlpkg/tlperl/lib/auto/re/re.dll b/Master/tlpkg/tlperl/lib/auto/re/re.dll
new file mode 100755
index 00000000000..d2c1852db63
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/auto/re/re.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/base.pm b/Master/tlpkg/tlperl/lib/base.pm
new file mode 100644
index 00000000000..001914be4d3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/base.pm
@@ -0,0 +1,226 @@
+package base;
+
+use strict 'vars';
+use vars qw($VERSION);
+$VERSION = '2.07';
+
+# constant.pm is slow
+sub SUCCESS () { 1 }
+
+sub PUBLIC () { 2**0 }
+sub PRIVATE () { 2**1 }
+sub INHERITED () { 2**2 }
+sub PROTECTED () { 2**3 }
+
+
+my $Fattr = \%fields::attr;
+
+sub has_fields {
+ my($base) = shift;
+ my $fglob = ${"$base\::"}{FIELDS};
+ return( ($fglob && *$fglob{HASH}) ? 1 : 0 );
+}
+
+sub has_version {
+ my($base) = shift;
+ my $vglob = ${$base.'::'}{VERSION};
+ return( ($vglob && *$vglob{SCALAR}) ? 1 : 0 );
+}
+
+sub has_attr {
+ my($proto) = shift;
+ my($class) = ref $proto || $proto;
+ return exists $Fattr->{$class};
+}
+
+sub get_attr {
+ $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]};
+ return $Fattr->{$_[0]};
+}
+
+if ($] < 5.009) {
+ *get_fields = sub {
+ # Shut up a possible typo warning.
+ () = \%{$_[0].'::FIELDS'};
+ my $f = \%{$_[0].'::FIELDS'};
+
+ # should be centralized in fields? perhaps
+ # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' }
+ # is used here anyway, it doesn't matter.
+ bless $f, 'pseudohash' if (ref($f) ne 'pseudohash');
+
+ return $f;
+ }
+}
+else {
+ *get_fields = sub {
+ # Shut up a possible typo warning.
+ () = \%{$_[0].'::FIELDS'};
+ return \%{$_[0].'::FIELDS'};
+ }
+}
+
+sub import {
+ my $class = shift;
+
+ return SUCCESS unless @_;
+
+ # List of base classes from which we will inherit %FIELDS.
+ my $fields_base;
+
+ my $inheritor = caller(0);
+
+ foreach my $base (@_) {
+ next if $inheritor->isa($base);
+
+ if (has_version($base)) {
+ ${$base.'::VERSION'} = '-1, set by base.pm'
+ unless defined ${$base.'::VERSION'};
+ }
+ else {
+ local $SIG{__DIE__};
+ eval "require $base";
+ # Only ignore "Can't locate" errors from our eval require.
+ # Other fatal errors (syntax etc) must be reported.
+ die if $@ && $@ !~ /^Can't locate .*? at \(eval /;
+ unless (%{"$base\::"}) {
+ require Carp;
+ Carp::croak(<<ERROR);
+Base class package "$base" is empty.
+ (Perhaps you need to 'use' the module which defines that package first.)
+ERROR
+
+ }
+ ${$base.'::VERSION'} = "-1, set by base.pm"
+ unless defined ${$base.'::VERSION'};
+ }
+ push @{"$inheritor\::ISA"}, $base;
+
+ if ( has_fields($base) || has_attr($base) ) {
+ # No multiple fields inheritence *suck*
+ if ($fields_base) {
+ require Carp;
+ Carp::croak("Can't multiply inherit %FIELDS");
+ } else {
+ $fields_base = $base;
+ }
+ }
+ }
+
+ if( defined $fields_base ) {
+ inherit_fields($inheritor, $fields_base);
+ }
+}
+
+
+sub inherit_fields {
+ my($derived, $base) = @_;
+
+ return SUCCESS unless $base;
+
+ my $battr = get_attr($base);
+ my $dattr = get_attr($derived);
+ my $dfields = get_fields($derived);
+ my $bfields = get_fields($base);
+
+ $dattr->[0] = @$battr;
+
+ if( keys %$dfields ) {
+ warn "$derived is inheriting from $base but already has its own ".
+ "fields!\n".
+ "This will cause problems.\n".
+ "Be sure you use base BEFORE declaring fields\n";
+ }
+
+ # Iterate through the base's fields adding all the non-private
+ # ones to the derived class. Hang on to the original attribute
+ # (Public, Private, etc...) and add Inherited.
+ # This is all too complicated to do efficiently with add_fields().
+ while (my($k,$v) = each %$bfields) {
+ my $fno;
+ if ($fno = $dfields->{$k} and $fno != $v) {
+ require Carp;
+ Carp::croak ("Inherited %FIELDS can't override existing %FIELDS");
+ }
+
+ if( $battr->[$v] & PRIVATE ) {
+ $dattr->[$v] = PRIVATE | INHERITED;
+ }
+ else {
+ $dattr->[$v] = INHERITED | $battr->[$v];
+ $dfields->{$k} = $v;
+ }
+ }
+
+ foreach my $idx (1..$#{$battr}) {
+ next if defined $dattr->[$idx];
+ $dattr->[$idx] = $battr->[$idx] & INHERITED;
+ }
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+base - Establish IS-A relationship with base classes at compile time
+
+=head1 SYNOPSIS
+
+ package Baz;
+ use base qw(Foo Bar);
+
+=head1 DESCRIPTION
+
+Allows you to both load one or more modules, while setting up inheritance from
+those modules at the same time. Roughly similar in effect to
+
+ package Baz;
+ BEGIN {
+ require Foo;
+ require Bar;
+ push @ISA, qw(Foo Bar);
+ }
+
+If any of the listed modules are not loaded yet, I<base> silently attempts to
+C<require> them (and silently continues if the C<require> failed). Whether to
+C<require> a base class module is determined by the absence of a global variable
+$VERSION in the base package. If $VERSION is not detected even after loading
+it, <base> will define $VERSION in the base package, setting it to the string
+C<-1, set by base.pm>.
+
+Will also initialize the fields if one of the base classes has it.
+Multiple inheritence of fields is B<NOT> supported, if two or more
+base classes each have inheritable fields the 'base' pragma will
+croak. See L<fields>, L<public> and L<protected> for a description of
+this feature.
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=item Base class package "%s" is empty.
+
+base.pm was unable to require the base package, because it was not
+found in your path.
+
+=back
+
+=head1 HISTORY
+
+This module was introduced with Perl 5.004_04.
+
+
+=head1 CAVEATS
+
+Due to the limitations of the implementation, you must use
+base I<before> you declare any of your own fields.
+
+
+=head1 SEE ALSO
+
+L<fields>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/bytes.pm b/Master/tlpkg/tlperl/lib/bytes.pm
new file mode 100644
index 00000000000..a8222794ddf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/bytes.pm
@@ -0,0 +1,88 @@
+package bytes;
+
+our $VERSION = '1.02';
+
+$bytes::hint_bits = 0x00000008;
+
+sub import {
+ $^H |= $bytes::hint_bits;
+}
+
+sub unimport {
+ $^H &= ~$bytes::hint_bits;
+}
+
+sub AUTOLOAD {
+ require "bytes_heavy.pl";
+ goto &$AUTOLOAD if defined &$AUTOLOAD;
+ require Carp;
+ Carp::croak("Undefined subroutine $AUTOLOAD called");
+}
+
+sub length ($);
+sub chr ($);
+sub ord ($);
+sub substr ($$;$$);
+sub index ($$;$);
+sub rindex ($$;$);
+
+1;
+__END__
+
+=head1 NAME
+
+bytes - Perl pragma to force byte semantics rather than character semantics
+
+=head1 SYNOPSIS
+
+ use bytes;
+ ... chr(...); # or bytes::chr
+ ... index(...); # or bytes::index
+ ... length(...); # or bytes::length
+ ... ord(...); # or bytes::ord
+ ... rindex(...); # or bytes::rindex
+ ... substr(...); # or bytes::substr
+ no bytes;
+
+
+=head1 DESCRIPTION
+
+The C<use bytes> pragma disables character semantics for the rest of the
+lexical scope in which it appears. C<no bytes> can be used to reverse
+the effect of C<use bytes> within the current lexical scope.
+
+Perl normally assumes character semantics in the presence of character
+data (i.e. data that has come from a source that has been marked as
+being of a particular character encoding). When C<use bytes> is in
+effect, the encoding is temporarily ignored, and each string is treated
+as a series of bytes.
+
+As an example, when Perl sees C<$x = chr(400)>, it encodes the character
+in UTF-8 and stores it in $x. Then it is marked as character data, so,
+for instance, C<length $x> returns C<1>. However, in the scope of the
+C<bytes> pragma, $x is treated as a series of bytes - the bytes that make
+up the UTF8 encoding - and C<length $x> returns C<2>:
+
+ $x = chr(400);
+ print "Length is ", length $x, "\n"; # "Length is 1"
+ printf "Contents are %vd\n", $x; # "Contents are 400"
+ {
+ use bytes; # or "require bytes; bytes::length()"
+ print "Length is ", length $x, "\n"; # "Length is 2"
+ printf "Contents are %vd\n", $x; # "Contents are 198.144"
+ }
+
+chr(), ord(), substr(), index() and rindex() behave similarly.
+
+For more on the implications and differences between character
+semantics and byte semantics, see L<perluniintro> and L<perlunicode>.
+
+=head1 LIMITATIONS
+
+bytes::substr() does not work as an lvalue().
+
+=head1 SEE ALSO
+
+L<perluniintro>, L<perlunicode>, L<utf8>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/bytes_heavy.pl b/Master/tlpkg/tlperl/lib/bytes_heavy.pl
new file mode 100644
index 00000000000..923381de58d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/bytes_heavy.pl
@@ -0,0 +1,40 @@
+package bytes;
+
+sub length ($) {
+ BEGIN { bytes::import() }
+ return CORE::length($_[0]);
+}
+
+sub substr ($$;$$) {
+ BEGIN { bytes::import() }
+ return
+ @_ == 2 ? CORE::substr($_[0], $_[1]) :
+ @_ == 3 ? CORE::substr($_[0], $_[1], $_[2]) :
+ CORE::substr($_[0], $_[1], $_[2], $_[3]) ;
+}
+
+sub ord ($) {
+ BEGIN { bytes::import() }
+ return CORE::ord($_[0]);
+}
+
+sub chr ($) {
+ BEGIN { bytes::import() }
+ return CORE::chr($_[0]);
+}
+
+sub index ($$;$) {
+ BEGIN { bytes::import() }
+ return
+ @_ == 2 ? CORE::index($_[0], $_[1]) :
+ CORE::index($_[0], $_[1], $_[2]) ;
+}
+
+sub rindex ($$;$) {
+ BEGIN { bytes::import() }
+ return
+ @_ == 2 ? CORE::rindex($_[0], $_[1]) :
+ CORE::rindex($_[0], $_[1], $_[2]) ;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/constant.pm b/Master/tlpkg/tlperl/lib/constant.pm
new file mode 100644
index 00000000000..159c29978a5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/constant.pm
@@ -0,0 +1,340 @@
+package constant;
+
+use strict;
+use 5.006_00;
+use warnings::register;
+
+our($VERSION, %declared);
+$VERSION = '1.05';
+
+#=======================================================================
+
+# Some names are evil choices.
+my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
+
+my %forced_into_main = map +($_, 1),
+ qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
+
+my %forbidden = (%keywords, %forced_into_main);
+
+#=======================================================================
+# import() - import symbols into user's namespace
+#
+# What we actually do is define a function in the caller's namespace
+# which returns the value. The function we create will normally
+# be inlined as a constant, thereby avoiding further sub calling
+# overhead.
+#=======================================================================
+sub import {
+ my $class = shift;
+ return unless @_; # Ignore 'use constant;'
+ my %constants = ();
+ my $multiple = ref $_[0];
+
+ if ( $multiple ) {
+ if (ref $_[0] ne 'HASH') {
+ require Carp;
+ Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
+ }
+ %constants = %{+shift};
+ } else {
+ $constants{+shift} = undef;
+ }
+
+ foreach my $name ( keys %constants ) {
+ unless (defined $name) {
+ require Carp;
+ Carp::croak("Can't use undef as constant name");
+ }
+ my $pkg = caller;
+
+ # Normal constant name
+ if ($name =~ /^_?[^\W_0-9]\w*\z/ and !$forbidden{$name}) {
+ # Everything is okay
+
+ # Name forced into main, but we're not in main. Fatal.
+ } elsif ($forced_into_main{$name} and $pkg ne 'main') {
+ require Carp;
+ Carp::croak("Constant name '$name' is forced into main::");
+
+ # Starts with double underscore. Fatal.
+ } elsif ($name =~ /^__/) {
+ require Carp;
+ Carp::croak("Constant name '$name' begins with '__'");
+
+ # Maybe the name is tolerable
+ } elsif ($name =~ /^[A-Za-z_]\w*\z/) {
+ # Then we'll warn only if you've asked for warnings
+ if (warnings::enabled()) {
+ if ($keywords{$name}) {
+ warnings::warn("Constant name '$name' is a Perl keyword");
+ } elsif ($forced_into_main{$name}) {
+ warnings::warn("Constant name '$name' is " .
+ "forced into package main::");
+ }
+ }
+
+ # Looks like a boolean
+ # use constant FRED == fred;
+ } elsif ($name =~ /^[01]?\z/) {
+ require Carp;
+ if (@_) {
+ Carp::croak("Constant name '$name' is invalid");
+ } else {
+ Carp::croak("Constant name looks like boolean value");
+ }
+
+ } else {
+ # Must have bad characters
+ require Carp;
+ Carp::croak("Constant name '$name' has invalid characters");
+ }
+
+ {
+ no strict 'refs';
+ my $full_name = "${pkg}::$name";
+ $declared{$full_name}++;
+ if ($multiple) {
+ my $scalar = $constants{$name};
+ *$full_name = sub () { $scalar };
+ } else {
+ if (@_ == 1) {
+ my $scalar = $_[0];
+ *$full_name = sub () { $scalar };
+ } elsif (@_) {
+ my @list = @_;
+ *$full_name = sub () { @list };
+ } else {
+ *$full_name = sub () { };
+ }
+ }
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+constant - Perl pragma to declare constants
+
+=head1 SYNOPSIS
+
+ use constant PI => 4 * atan2(1, 1);
+ use constant DEBUG => 0;
+
+ print "Pi equals ", PI, "...\n" if DEBUG;
+
+ use constant {
+ SEC => 0,
+ MIN => 1,
+ HOUR => 2,
+ MDAY => 3,
+ MON => 4,
+ YEAR => 5,
+ WDAY => 6,
+ YDAY => 7,
+ ISDST => 8,
+ };
+
+ use constant WEEKDAYS => qw(
+ Sunday Monday Tuesday Wednesday Thursday Friday Saturday
+ );
+
+ print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";
+
+=head1 DESCRIPTION
+
+This will declare a symbol to be a constant with the given value.
+
+When you declare a constant such as C<PI> using the method shown
+above, each machine your script runs upon can have as many digits
+of accuracy as it can use. Also, your program will be easier to
+read, more likely to be maintained (and maintained correctly), and
+far less likely to send a space probe to the wrong planet because
+nobody noticed the one equation in which you wrote C<3.14195>.
+
+When a constant is used in an expression, perl replaces it with its
+value at compile time, and may then optimize the expression further.
+In particular, any code in an C<if (CONSTANT)> block will be optimized
+away if the constant is false.
+
+=head1 NOTES
+
+As with all C<use> directives, defining a constant happens at
+compile time. Thus, it's probably not correct to put a constant
+declaration inside of a conditional statement (like C<if ($foo)
+{ use constant ... }>).
+
+Constants defined using this module cannot be interpolated into
+strings like variables. However, concatenation works just fine:
+
+ print "Pi equals PI...\n"; # WRONG: does not expand "PI"
+ print "Pi equals ".PI."...\n"; # right
+
+Even though a reference may be declared as a constant, the reference may
+point to data which may be changed, as this code shows.
+
+ use constant ARRAY => [ 1,2,3,4 ];
+ print ARRAY->[1];
+ ARRAY->[1] = " be changed";
+ print ARRAY->[1];
+
+Dereferencing constant references incorrectly (such as using an array
+subscript on a constant hash reference, or vice versa) will be trapped at
+compile time.
+
+Constants belong to the package they are defined in. To refer to a
+constant defined in another package, specify the full package name, as
+in C<Some::Package::CONSTANT>. Constants may be exported by modules,
+and may also be called as either class or instance methods, that is,
+as C<< Some::Package->CONSTANT >> or as C<< $obj->CONSTANT >> where
+C<$obj> is an instance of C<Some::Package>. Subclasses may define
+their own constants to override those in their base class.
+
+The use of all caps for constant names is merely a convention,
+although it is recommended in order to make constants stand out
+and to help avoid collisions with other barewords, keywords, and
+subroutine names. Constant names must begin with a letter or
+underscore. Names beginning with a double underscore are reserved. Some
+poor choices for names will generate warnings, if warnings are enabled at
+compile time.
+
+=head2 List constants
+
+Constants may be lists of more (or less) than one value. A constant
+with no values evaluates to C<undef> in scalar context. Note that
+constants with more than one value do I<not> return their last value in
+scalar context as one might expect. They currently return the number
+of values, but B<this may change in the future>. Do not use constants
+with multiple values in scalar context.
+
+B<NOTE:> This implies that the expression defining the value of a
+constant is evaluated in list context. This may produce surprises:
+
+ use constant TIMESTAMP => localtime; # WRONG!
+ use constant TIMESTAMP => scalar localtime; # right
+
+The first line above defines C<TIMESTAMP> as a 9-element list, as
+returned by localtime() in list context. To set it to the string
+returned by localtime() in scalar context, an explicit C<scalar>
+keyword is required.
+
+List constants are lists, not arrays. To index or slice them, they
+must be placed in parentheses.
+
+ my @workdays = WEEKDAYS[1 .. 5]; # WRONG!
+ my @workdays = (WEEKDAYS)[1 .. 5]; # right
+
+=head2 Defining multiple constants at once
+
+Instead of writing multiple C<use constant> statements, you may define
+multiple constants in a single statement by giving, instead of the
+constant name, a reference to a hash where the keys are the names of
+the constants to be defined. Obviously, all constants defined using
+this method must have a single value.
+
+ use constant {
+ FOO => "A single value",
+ BAR => "This", "won't", "work!", # Error!
+ };
+
+This is a fundamental limitation of the way hashes are constructed in
+Perl. The error messages produced when this happens will often be
+quite cryptic -- in the worst case there may be none at all, and
+you'll only later find that something is broken.
+
+When defining multiple constants, you cannot use the values of other
+constants defined in the same declaration. This is because the
+calling package doesn't know about any constant within that group
+until I<after> the C<use> statement is finished.
+
+ use constant {
+ BITMASK => 0xAFBAEBA8,
+ NEGMASK => ~BITMASK, # Error!
+ };
+
+=head2 Magic constants
+
+Magical values and references can be made into constants at compile
+time, allowing for way cool stuff like this. (These error numbers
+aren't totally portable, alas.)
+
+ use constant E2BIG => ($! = 7);
+ print E2BIG, "\n"; # something like "Arg list too long"
+ print 0+E2BIG, "\n"; # "7"
+
+You can't produce a tied constant by giving a tied scalar as the
+value. References to tied variables, however, can be used as
+constants without any problems.
+
+=head1 TECHNICAL NOTES
+
+In the current implementation, scalar constants are actually
+inlinable subroutines. As of version 5.004 of Perl, the appropriate
+scalar constant is inserted directly in place of some subroutine
+calls, thereby saving the overhead of a subroutine call. See
+L<perlsub/"Constant Functions"> for details about how and when this
+happens.
+
+In the rare case in which you need to discover at run time whether a
+particular constant has been declared via this module, you may use
+this function to examine the hash C<%constant::declared>. If the given
+constant name does not include a package name, the current package is
+used.
+
+ sub declared ($) {
+ use constant 1.01; # don't omit this!
+ my $name = shift;
+ $name =~ s/^::/main::/;
+ my $pkg = caller;
+ my $full_name = $name =~ /::/ ? $name : "${pkg}::$name";
+ $constant::declared{$full_name};
+ }
+
+=head1 BUGS
+
+In the current version of Perl, list constants are not inlined
+and some symbols may be redefined without generating a warning.
+
+It is not possible to have a subroutine or a keyword with the same
+name as a constant in the same package. This is probably a Good Thing.
+
+A constant with a name in the list C<STDIN STDOUT STDERR ARGV ARGVOUT
+ENV INC SIG> is not allowed anywhere but in package C<main::>, for
+technical reasons.
+
+Unlike constants in some languages, these cannot be overridden
+on the command line or via environment variables.
+
+You can get into trouble if you use constants in a context which
+automatically quotes barewords (as is true for any subroutine call).
+For example, you can't say C<$hash{CONSTANT}> because C<CONSTANT> will
+be interpreted as a string. Use C<$hash{CONSTANT()}> or
+C<$hash{+CONSTANT}> to prevent the bareword quoting mechanism from
+kicking in. Similarly, since the C<< => >> operator quotes a bareword
+immediately to its left, you have to say C<< CONSTANT() => 'value' >>
+(or simply use a comma in place of the big arrow) instead of
+C<< CONSTANT => 'value' >>.
+
+=head1 AUTHOR
+
+Tom Phoenix, E<lt>F<rootbeer@redcat.com>E<gt>, with help from
+many other folks.
+
+Multiple constant declarations at once added by Casey West,
+E<lt>F<casey@geeknest.com>E<gt>.
+
+Documentation mostly rewritten by Ilmari Karonen,
+E<lt>F<perl@itz.pp.sci.fi>E<gt>.
+
+=head1 COPYRIGHT
+
+Copyright (C) 1997, 1999 Tom Phoenix
+
+This module is free software; you can redistribute it or modify it
+under the same terms as Perl itself.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/fields.pm b/Master/tlpkg/tlperl/lib/fields.pm
new file mode 100644
index 00000000000..cca778f905d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/fields.pm
@@ -0,0 +1,319 @@
+package fields;
+
+require 5.005;
+use strict;
+no strict 'refs';
+unless( eval q{require warnings::register; warnings::register->import} ) {
+ *warnings::warnif = sub {
+ require Carp;
+ Carp::carp(@_);
+ }
+}
+use vars qw(%attr $VERSION);
+
+$VERSION = '2.03';
+
+# constant.pm is slow
+sub PUBLIC () { 2**0 }
+sub PRIVATE () { 2**1 }
+sub INHERITED () { 2**2 }
+sub PROTECTED () { 2**3 }
+
+
+# The %attr hash holds the attributes of the currently assigned fields
+# per class. The hash is indexed by class names and the hash value is
+# an array reference. The first element in the array is the lowest field
+# number not belonging to a base class. The remaining elements' indices
+# are the field numbers. The values are integer bit masks, or undef
+# in the case of base class private fields (which occupy a slot but are
+# otherwise irrelevant to the class).
+
+sub import {
+ my $class = shift;
+ return unless @_;
+ my $package = caller(0);
+ # avoid possible typo warnings
+ %{"$package\::FIELDS"} = () unless %{"$package\::FIELDS"};
+ my $fields = \%{"$package\::FIELDS"};
+ my $fattr = ($attr{$package} ||= [1]);
+ my $next = @$fattr;
+
+ # Quiet pseudo-hash deprecation warning for uses of fields::new.
+ bless \%{"$package\::FIELDS"}, 'pseudohash';
+
+ if ($next > $fattr->[0]
+ and ($fields->{$_[0]} || 0) >= $fattr->[0])
+ {
+ # There are already fields not belonging to base classes.
+ # Looks like a possible module reload...
+ $next = $fattr->[0];
+ }
+ foreach my $f (@_) {
+ my $fno = $fields->{$f};
+
+ # Allow the module to be reloaded so long as field positions
+ # have not changed.
+ if ($fno and $fno != $next) {
+ require Carp;
+ if ($fno < $fattr->[0]) {
+ if ($] < 5.006001) {
+ warn("Hides field '$f' in base class") if $^W;
+ } else {
+ warnings::warnif("Hides field '$f' in base class") ;
+ }
+ } else {
+ Carp::croak("Field name '$f' already in use");
+ }
+ }
+ $fields->{$f} = $next;
+ $fattr->[$next] = ($f =~ /^_/) ? PRIVATE : PUBLIC;
+ $next += 1;
+ }
+ if (@$fattr > $next) {
+ # Well, we gave them the benefit of the doubt by guessing the
+ # module was reloaded, but they appear to be declaring fields
+ # in more than one place. We can't be sure (without some extra
+ # bookkeeping) that the rest of the fields will be declared or
+ # have the same positions, so punt.
+ require Carp;
+ Carp::croak ("Reloaded module must declare all fields at once");
+ }
+}
+
+sub inherit {
+ require base;
+ goto &base::inherit_fields;
+}
+
+sub _dump # sometimes useful for debugging
+{
+ for my $pkg (sort keys %attr) {
+ print "\n$pkg";
+ if (@{"$pkg\::ISA"}) {
+ print " (", join(", ", @{"$pkg\::ISA"}), ")";
+ }
+ print "\n";
+ my $fields = \%{"$pkg\::FIELDS"};
+ for my $f (sort {$fields->{$a} <=> $fields->{$b}} keys %$fields) {
+ my $no = $fields->{$f};
+ print " $no: $f";
+ my $fattr = $attr{$pkg}[$no];
+ if (defined $fattr) {
+ my @a;
+ push(@a, "public") if $fattr & PUBLIC;
+ push(@a, "private") if $fattr & PRIVATE;
+ push(@a, "inherited") if $fattr & INHERITED;
+ print "\t(", join(", ", @a), ")";
+ }
+ print "\n";
+ }
+ }
+}
+
+if ($] < 5.009) {
+ *new = sub {
+ my $class = shift;
+ $class = ref $class if ref $class;
+ return bless [\%{$class . "::FIELDS"}], $class;
+ }
+} else {
+ *new = sub {
+ my $class = shift;
+ $class = ref $class if ref $class;
+ require Hash::Util;
+ my $self = bless {}, $class;
+
+ # The lock_keys() prototype won't work since we require Hash::Util :(
+ &Hash::Util::lock_keys(\%$self, keys %{$class.'::FIELDS'});
+ return $self;
+ }
+}
+
+sub phash {
+ die "Pseudo-hashes have been removed from Perl" if $] >= 5.009;
+ my $h;
+ my $v;
+ if (@_) {
+ if (ref $_[0] eq 'ARRAY') {
+ my $a = shift;
+ @$h{@$a} = 1 .. @$a;
+ if (@_) {
+ $v = shift;
+ unless (! @_ and ref $v eq 'ARRAY') {
+ require Carp;
+ Carp::croak ("Expected at most two array refs\n");
+ }
+ }
+ }
+ else {
+ if (@_ % 2) {
+ require Carp;
+ Carp::croak ("Odd number of elements initializing pseudo-hash\n");
+ }
+ my $i = 0;
+ @$h{grep ++$i % 2, @_} = 1 .. @_ / 2;
+ $i = 0;
+ $v = [grep $i++ % 2, @_];
+ }
+ }
+ else {
+ $h = {};
+ $v = [];
+ }
+ [ $h, @$v ];
+
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+fields - compile-time class fields
+
+=head1 SYNOPSIS
+
+ {
+ package Foo;
+ use fields qw(foo bar _Foo_private);
+ sub new {
+ my Foo $self = shift;
+ unless (ref $self) {
+ $self = fields::new($self);
+ $self->{_Foo_private} = "this is Foo's secret";
+ }
+ $self->{foo} = 10;
+ $self->{bar} = 20;
+ return $self;
+ }
+ }
+
+ my $var = Foo->new;
+ $var->{foo} = 42;
+
+ # this will generate an error
+ $var->{zap} = 42;
+
+ # subclassing
+ {
+ package Bar;
+ use base 'Foo';
+ use fields qw(baz _Bar_private); # not shared with Foo
+ sub new {
+ my $class = shift;
+ my $self = fields::new($class);
+ $self->SUPER::new(); # init base fields
+ $self->{baz} = 10; # init own fields
+ $self->{_Bar_private} = "this is Bar's secret";
+ return $self;
+ }
+ }
+
+=head1 DESCRIPTION
+
+The C<fields> pragma enables compile-time verified class fields.
+
+NOTE: The current implementation keeps the declared fields in the %FIELDS
+hash of the calling package, but this may change in future versions.
+Do B<not> update the %FIELDS hash directly, because it must be created
+at compile-time for it to be fully useful, as is done by this pragma.
+
+B<Only valid for perl before 5.9.0:>
+
+If a typed lexical variable holding a reference is used to access a
+hash element and a package with the same name as the type has
+declared class fields using this pragma, then the operation is
+turned into an array access at compile time.
+
+
+The related C<base> pragma will combine fields from base classes and any
+fields declared using the C<fields> pragma. This enables field
+inheritance to work properly.
+
+Field names that start with an underscore character are made private to
+the class and are not visible to subclasses. Inherited fields can be
+overridden but will generate a warning if used together with the C<-w>
+switch.
+
+B<Only valid for perls before 5.9.0:>
+
+The effect of all this is that you can have objects with named
+fields which are as compact and as fast arrays to access. This only
+works as long as the objects are accessed through properly typed
+variables. If the objects are not typed, access is only checked at
+run time.
+
+
+The following functions are supported:
+
+=over 4
+
+=item new
+
+B< perl before 5.9.0: > fields::new() creates and blesses a
+pseudo-hash comprised of the fields declared using the C<fields>
+pragma into the specified class.
+
+B< perl 5.9.0 and higher: > fields::new() creates and blesses a
+restricted-hash comprised of the fields declared using the C<fields>
+pragma into the specified class.
+
+This function is usable with or without pseudo-hashes. It is the
+recommended way to construct a fields-based object.
+
+This makes it possible to write a constructor like this:
+
+ package Critter::Sounds;
+ use fields qw(cat dog bird);
+
+ sub new {
+ my $self = shift;
+ $self = fields::new($self) unless ref $self;
+ $self->{cat} = 'meow'; # scalar element
+ @$self{'dog','bird'} = ('bark','tweet'); # slice
+ return $self;
+ }
+
+=item phash
+
+B< before perl 5.9.0: >
+
+fields::phash() can be used to create and initialize a plain (unblessed)
+pseudo-hash. This function should always be used instead of creating
+pseudo-hashes directly.
+
+If the first argument is a reference to an array, the pseudo-hash will
+be created with keys from that array. If a second argument is supplied,
+it must also be a reference to an array whose elements will be used as
+the values. If the second array contains less elements than the first,
+the trailing elements of the pseudo-hash will not be initialized.
+This makes it particularly useful for creating a pseudo-hash from
+subroutine arguments:
+
+ sub dogtag {
+ my $tag = fields::phash([qw(name rank ser_num)], [@_]);
+ }
+
+fields::phash() also accepts a list of key-value pairs that will
+be used to construct the pseudo hash. Examples:
+
+ my $tag = fields::phash(name => "Joe",
+ rank => "captain",
+ ser_num => 42);
+
+ my $pseudohash = fields::phash(%args);
+
+B< perl 5.9.0 and higher: >
+
+Pseudo-hashes have been removed from Perl as of 5.10. Consider using
+restricted hashes or fields::new() instead. Using fields::phash()
+will cause an error.
+
+=back
+
+=head1 SEE ALSO
+
+L<base>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/lib.pm b/Master/tlpkg/tlperl/lib/lib.pm
new file mode 100644
index 00000000000..06a03502368
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/lib.pm
@@ -0,0 +1,206 @@
+package lib;
+
+# THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL.
+# ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD.
+
+use Config;
+
+use strict;
+
+my $archname = $Config{archname};
+my $version = $Config{version};
+my @inc_version_list = reverse split / /, $Config{inc_version_list};
+
+
+our @ORIG_INC = @INC; # take a handy copy of 'original' value
+our $VERSION = '0.5565';
+my $Is_MacOS = $^O eq 'MacOS';
+my $Mac_FS;
+if ($Is_MacOS) {
+ require File::Spec;
+ $Mac_FS = eval { require Mac::FileSpec::Unixish };
+}
+
+sub import {
+ shift;
+
+ my %names;
+ foreach (reverse @_) {
+ my $path = $_; # we'll be modifying it, so break the alias
+ if ($path eq '') {
+ require Carp;
+ Carp::carp("Empty compile time value given to use lib");
+ }
+
+ $path = _nativize($path);
+
+ if (-e $path && ! -d _) {
+ require Carp;
+ Carp::carp("Parameter to use lib must be directory, not file");
+ }
+ unshift(@INC, $path);
+ # Add any previous version directories we found at configure time
+ foreach my $incver (@inc_version_list)
+ {
+ my $dir = $Is_MacOS
+ ? File::Spec->catdir( $path, $incver )
+ : "$path/$incver";
+ unshift(@INC, $dir) if -d $dir;
+ }
+ # Put a corresponding archlib directory in front of $path if it
+ # looks like $path has an archlib directory below it.
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
+ = _get_dirs($path);
+ unshift(@INC, $arch_dir) if -d $arch_auto_dir;
+ unshift(@INC, $version_dir) if -d $version_dir;
+ unshift(@INC, $version_arch_dir) if -d $version_arch_dir;
+ }
+
+ # remove trailing duplicates
+ @INC = grep { ++$names{$_} == 1 } @INC;
+ return;
+}
+
+
+sub unimport {
+ shift;
+
+ my %names;
+ foreach (@_) {
+ my $path = _nativize($_);
+
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir)
+ = _get_dirs($path);
+ ++$names{$path};
+ ++$names{$arch_dir} if -d $arch_auto_dir;
+ ++$names{$version_dir} if -d $version_dir;
+ ++$names{$version_arch_dir} if -d $version_arch_dir;
+ }
+
+ # Remove ALL instances of each named directory.
+ @INC = grep { !exists $names{$_} } @INC;
+ return;
+}
+
+sub _get_dirs {
+ my($dir) = @_;
+ my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
+
+ # we could use this for all platforms in the future, but leave it
+ # Mac-only for now, until there is more time for testing it.
+ if ($Is_MacOS) {
+ $arch_auto_dir = File::Spec->catdir( $dir, $archname, 'auto' );
+ $arch_dir = File::Spec->catdir( $dir, $archname, );
+ $version_dir = File::Spec->catdir( $dir, $version );
+ $version_arch_dir = File::Spec->catdir( $dir, $version, $archname );
+ } else {
+ $arch_auto_dir = "$dir/$archname/auto";
+ $arch_dir = "$dir/$archname";
+ $version_dir = "$dir/$version";
+ $version_arch_dir = "$dir/$version/$archname";
+ }
+ return($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir);
+}
+
+sub _nativize {
+ my($dir) = @_;
+
+ if ($Is_MacOS && $Mac_FS && ! -d $dir) {
+ $dir = Mac::FileSpec::Unixish::nativize($dir);
+ $dir .= ":" unless $dir =~ /:$/;
+ }
+
+ return $dir;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+lib - manipulate @INC at compile time
+
+=head1 SYNOPSIS
+
+ use lib LIST;
+
+ no lib LIST;
+
+=head1 DESCRIPTION
+
+This is a small simple module which simplifies the manipulation of @INC
+at compile time.
+
+It is typically used to add extra directories to perl's search path so
+that later C<use> or C<require> statements will find modules which are
+not located on perl's default search path.
+
+=head2 Adding directories to @INC
+
+The parameters to C<use lib> are added to the start of the perl search
+path. Saying
+
+ use lib LIST;
+
+is I<almost> the same as saying
+
+ BEGIN { unshift(@INC, LIST) }
+
+For each directory in LIST (called $dir here) the lib module also
+checks to see if a directory called $dir/$archname/auto exists.
+If so the $dir/$archname directory is assumed to be a corresponding
+architecture specific directory and is added to @INC in front of $dir.
+
+To avoid memory leaks, all trailing duplicate entries in @INC are
+removed.
+
+=head2 Deleting directories from @INC
+
+You should normally only add directories to @INC. If you need to
+delete directories from @INC take care to only delete those which you
+added yourself or which you are certain are not needed by other modules
+in your script. Other modules may have added directories which they
+need for correct operation.
+
+The C<no lib> statement deletes all instances of each named directory
+from @INC.
+
+For each directory in LIST (called $dir here) the lib module also
+checks to see if a directory called $dir/$archname/auto exists.
+If so the $dir/$archname directory is assumed to be a corresponding
+architecture specific directory and is also deleted from @INC.
+
+=head2 Restoring original @INC
+
+When the lib module is first loaded it records the current value of @INC
+in an array C<@lib::ORIG_INC>. To restore @INC to that value you
+can say
+
+ @INC = @lib::ORIG_INC;
+
+=head1 CAVEATS
+
+In order to keep lib.pm small and simple, it only works with Unix
+filepaths. This doesn't mean it only works on Unix, but non-Unix
+users must first translate their file paths to Unix conventions.
+
+ # VMS users wanting to put [.stuff.moo] into
+ # their @INC would write
+ use lib 'stuff/moo';
+
+=head1 NOTES
+
+In the future, this module will likely use File::Spec for determining
+paths, as it does now for Mac OS (where Unix-style or Mac-style paths
+work, and Unix-style paths are converted properly to Mac-style paths
+before being added to @INC).
+
+=head1 SEE ALSO
+
+FindBin - optional module which deals with paths relative to the source file.
+
+=head1 AUTHOR
+
+Tim Bunce, 2nd June 1995.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/lib/Win32/API.pm b/Master/tlpkg/tlperl/lib/lib/Win32/API.pm
new file mode 100644
index 00000000000..154de7a80ee
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/lib/Win32/API.pm
@@ -0,0 +1,719 @@
+package Win32::API;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API - Perl Win32 API Import Facility
+#
+# Version: 0.41
+# Date: 10 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: API.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+use vars qw( $DEBUG );
+$DEBUG = 0;
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+use Win32::API::Type;
+use Win32::API::Struct;
+
+#######################################################################
+# STATIC OBJECT PROPERTIES
+#
+$VERSION = "0.41";
+
+#### some package-global hash to
+#### keep track of the imported
+#### libraries and procedures
+my %Libraries = ();
+my %Procedures = ();
+
+
+#######################################################################
+# dynamically load in the API extension module.
+#
+bootstrap Win32::API;
+
+#######################################################################
+# PUBLIC METHODS
+#
+sub new {
+ my($class, $dll, $proc, $in, $out) = @_;
+ my $hdll;
+ my $self = {};
+
+ #### avoid loading a library more than once
+ if(exists($Libraries{$dll})) {
+ # print "Win32::API::new: Library '$dll' already loaded, handle=$Libraries{$dll}\n";
+ $hdll = $Libraries{$dll};
+ } else {
+ # print "Win32::API::new: Loading library '$dll'\n";
+ $hdll = Win32::API::LoadLibrary($dll);
+ $Libraries{$dll} = $hdll;
+ }
+
+ #### if the dll can't be loaded, set $! to Win32's GetLastError()
+ if(!$hdll) {
+ $! = Win32::GetLastError();
+ return undef;
+ }
+
+ #### determine if we have a prototype or not
+ if( (not defined $in) and (not defined $out) ) {
+ ($proc, $self->{in}, $self->{intypes}, $self->{out}) = parse_prototype( $proc );
+ return undef unless $proc;
+ $self->{proto} = 1;
+ } else {
+ $self->{in} = [];
+ if(ref($in) eq 'ARRAY') {
+ foreach (@$in) {
+ push(@{ $self->{in} }, type_to_num($_));
+ }
+ } else {
+ my @in = split '', $in;
+ foreach (@in) {
+ push(@{ $self->{in} }, type_to_num($_));
+ }
+ }
+ $self->{out} = type_to_num($out);
+ }
+
+ #### first try to import the function of given name...
+ my $hproc = Win32::API::GetProcAddress($hdll, $proc);
+
+ #### ...then try appending either A or W (for ASCII or Unicode)
+ if(!$hproc) {
+ my $tproc = $proc;
+ $tproc .= (IsUnicode() ? "W" : "A");
+ # print "Win32::API::new: procedure not found, trying '$tproc'...\n";
+ $hproc = Win32::API::GetProcAddress($hdll, $tproc);
+ }
+
+ #### ...if all that fails, set $! accordingly
+ if(!$hproc) {
+ $! = Win32::GetLastError();
+ return undef;
+ }
+
+ #### ok, let's stuff the object
+ $self->{procname} = $proc;
+ $self->{dll} = $hdll;
+ $self->{dllname} = $dll;
+ $self->{proc} = $hproc;
+
+ #### keep track of the imported function
+ $Libraries{$dll} = $hdll;
+ $Procedures{$dll}++;
+
+ #### cast the spell
+ bless($self, $class);
+ return $self;
+}
+
+sub Import {
+ my($class, $dll, $proc, $in, $out) = @_;
+ $Imported{"$dll:$proc"} = Win32::API->new($dll, $proc, $in, $out) or return 0;
+ my $P = (caller)[0];
+ eval qq(
+ sub ${P}::$Imported{"$dll:$proc"}->{procname} { \$Win32::API::Imported{"$dll:$proc"}->Call(\@_); }
+ );
+ return $@ ? 0 : 1;
+}
+
+
+#######################################################################
+# PRIVATE METHODS
+#
+sub DESTROY {
+ my($self) = @_;
+
+ #### decrease this library's procedures reference count
+ $Procedures{$self->{dllname}}--;
+
+ #### once it reaches 0, free it
+ if($Procedures{$self->{dllname}} == 0) {
+ # print "Win32::API::DESTROY: Freeing library '$self->{dllname}'\n";
+ Win32::API::FreeLibrary($Libraries{$self->{dllname}});
+ delete($Libraries{$self->{dllname}});
+ }
+}
+
+sub type_to_num {
+ my $type = shift;
+ my $out = shift;
+ my $num;
+
+ if( $type eq 'N'
+ or $type eq 'n'
+ or $type eq 'l'
+ or $type eq 'L'
+ ) {
+ $num = 1;
+ } elsif($type eq 'P'
+ or $type eq 'p'
+ ) {
+ $num = 2;
+ } elsif($type eq 'I'
+ or $type eq 'i'
+ ) {
+ $num = 3;
+ } elsif($type eq 'f'
+ or $type eq 'F'
+ ) {
+ $num = 4;
+ } elsif($type eq 'D'
+ or $type eq 'd'
+ ) {
+ $num = 5;
+ } elsif($type eq 'c'
+ or $type eq 'C'
+ ) {
+ $num = 6;
+ } else {
+ $num = 0;
+ }
+ unless(defined $out) {
+ if( $type eq 's'
+ or $type eq 'S'
+ ) {
+ $num = 51;
+ } elsif($type eq 'b'
+ or $type eq 'B'
+ ) {
+ $num = 22;
+ } elsif($type eq 'k'
+ or $type eq 'K'
+ ) {
+ $num = 101;
+ }
+ }
+ return $num;
+}
+
+sub parse_prototype {
+ my($proto) = @_;
+
+ my @in_params = ();
+ my @in_types = ();
+ if($proto =~ /^\s*(\S+)\s+(\S+)\s*\(([^\)]*)\)/) {
+ my $ret = $1;
+ my $proc = $2;
+ my $params = $3;
+
+ $params =~ s/^\s+//;
+ $params =~ s/\s+$//;
+
+ DEBUG "(PM)parse_prototype: got PROC '%s'\n", $proc;
+ DEBUG "(PM)parse_prototype: got PARAMS '%s'\n", $params;
+
+ foreach my $param (split(/\s*,\s*/, $params)) {
+ my($type, $name);
+ if($param =~ /(\S+)\s+(\S+)/) {
+ ($type, $name) = ($1, $2);
+ }
+
+ if(Win32::API::Type::is_known($type)) {
+ if(Win32::API::Type::is_pointer($type)) {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type,
+ Win32::API::Type->packing( $type ),
+ type_to_num('P');
+ push(@in_params, type_to_num('P'));
+ } else {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type,
+ Win32::API::Type->packing( $type ),
+ type_to_num( Win32::API::Type->packing( $type ) );
+ push(@in_params, type_to_num( Win32::API::Type->packing( $type ) ));
+ }
+ } elsif( Win32::API::Struct::is_known( $type ) ) {
+ DEBUG "(PM)parse_prototype: IN='%s' PACKING='%s' API_TYPE=%d\n",
+ $type, 'S', type_to_num('S');
+ push(@in_params, type_to_num('S'));
+ } else {
+ warn "Win32::API::parse_prototype: WARNING unknown parameter type '$type'";
+ push(@in_params, type_to_num('I'));
+ }
+ push(@in_types, $type);
+
+ }
+ DEBUG "parse_prototype: IN=[ @in_params ]\n";
+
+
+
+ if(Win32::API::Type::is_known($ret)) {
+ if(Win32::API::Type::is_pointer($ret)) {
+ DEBUG "parse_prototype: OUT='%s' PACKING='%s' API_TYPE=%d\n",
+ $ret,
+ Win32::API::Type->packing( $ret ),
+ type_to_num('P');
+ return ( $proc, \@in_params, \@in_types, type_to_num('P') );
+ } else {
+ DEBUG "parse_prototype: OUT='%s' PACKING='%s' API_TYPE=%d\n",
+ $ret,
+ Win32::API::Type->packing( $ret ),
+ type_to_num( Win32::API::Type->packing( $ret ) );
+ return ( $proc, \@in_params, \@in_types, type_to_num(Win32::API::Type->packing($ret)) );
+ }
+ } else {
+ warn "Win32::API::parse_prototype: WARNING unknown output parameter type '$ret'";
+ return ( $proc, \@in_params, \@in_types, type_to_num('I') );
+ }
+
+ } else {
+ warn "Win32::API::parse_prototype: bad prototype '$proto'";
+ return undef;
+ }
+}
+
+1;
+
+__END__
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API - Perl Win32 API Import Facility
+
+=head1 SYNOPSIS
+
+ #### Method 1: with prototype
+
+ use Win32::API;
+ $function = Win32::API->new(
+ 'mydll, 'int sum_integers(int a, int b)',
+ );
+ $return = $function->Call(3, 2);
+
+ #### Method 2: with parameter list
+
+ use Win32::API;
+ $function = Win32::API->new(
+ 'mydll', 'sum_integers', 'II', 'I',
+ );
+ $return = $function->Call(3, 2);
+
+ #### Method 3: with Import
+
+ use Win32::API;
+ Win32::API->Import(
+ 'mydll', 'int sum_integers(int a, int b)',
+ );
+ $return = sum_integers(3, 2);
+
+
+=for LATER-UNIMPLEMENTED
+ #### or
+ use Win32::API mydll => 'int sum_integers(int a, int b)';
+ $return = sum_integers(3, 2);
+
+
+=head1 ABSTRACT
+
+With this module you can import and call arbitrary functions
+from Win32's Dynamic Link Libraries (DLL), without having
+to write an XS extension. Note, however, that this module
+can't do anything (parameters input and output is limited
+to simpler cases), and anyway a regular XS extension is
+always safer and faster.
+
+The current version of Win32::API is available at my website:
+
+ http://dada.perl.it/
+
+It's also available on your nearest CPAN mirror (but allow a few days
+for worldwide spreading of the latest version) reachable at:
+
+ http://www.perl.com/CPAN/authors/Aldo_Calpini/
+
+A short example of how you can use this module (it just gets the PID of
+the current process, eg. same as Perl's internal C<$$>):
+
+ use Win32::API;
+ Win32::API->Import("kernel32", "int GetCurrentProcessId()");
+ $PID = GetCurrentProcessId();
+
+The possibilities are nearly infinite (but not all are good :-).
+Enjoy it.
+
+
+=head1 CREDITS
+
+All the credits go to Andrea Frosini
+for the neat assembler trick that makes this thing work.
+I've also used some work by Dave Roth for the prototyping stuff.
+A big thank you also to Gurusamy Sarathy for his
+unvaluable help in XS development, and to all the Perl community for
+being what it is.
+
+
+=head1 DESCRIPTION
+
+To use this module put the following line at the beginning of your script:
+
+ use Win32::API;
+
+You can now use the C<new()> function of the Win32::API module to create a
+new Win32::API object (see L<IMPORTING A FUNCTION>) and then invoke the
+C<Call()> method on this object to perform a call to the imported API
+(see L<CALLING AN IMPORTED FUNCTION>).
+
+Starting from version 0.40, you can also avoid creating a Win32::API object
+and instead automatically define a Perl sub with the same name of the API
+function you're importing. The details of the API definitions are the same,
+just the call is different:
+
+ my $GetCurrentProcessId = Win32::API->new(
+ "kernel32", "int GetCurrentProcessId()"
+ );
+ my $PID = $GetCurrentProcessId->Call();
+
+ #### vs.
+
+ Win32::API->Import("kernel32", "int GetCurrentProcessId()");
+ $PID = GetCurrentProcessId();
+
+Note that C<Import> returns 1 on success and 0 on failure (in which case you
+can check the content of C<$^E>).
+
+=head2 IMPORTING A FUNCTION
+
+You can import a function from a 32 bit Dynamic Link Library (DLL) file
+with the C<new()> function. This will create a Perl object that contains the
+reference to that function, which you can later C<Call()>.
+
+What you need to know is the prototype of the function you're going to import
+(eg. the definition of the function expressed in C syntax).
+
+Starting from version 0.40, there are 2 different approaches for this step:
+(the preferred) one uses the prototype directly, while the other (now deprecated)
+one uses Win32::API's internal representation for parameters.
+
+=head2 IMPORTING A FUNCTION BY PROTOTYPE
+
+You need to pass 2 parameters:
+
+=over 4
+
+=item 1.
+The name of the library from which you want to import the function.
+
+=item 2.
+The C prototype of the function.
+
+=back
+
+See L<Win32::API::Type> for a list of the known parameter types and
+L<Win32::API::Struct> for information on how to define a structure.
+
+=head2 IMPORTING A FUNCTION WITH A PARAMETER LIST
+
+You need to pass 4 parameters:
+
+=over 4
+
+=item 1.
+The name of the library from which you want to import the function.
+
+=item 2.
+The name of the function (as exported by the library).
+
+=item 3.
+The number and types of the arguments the function expects as input.
+
+=item 4.
+The type of the value returned by the function.
+
+=back
+
+To better explain their meaning, let's suppose that we
+want to import and call the Win32 API C<GetTempPath()>.
+This function is defined in C as:
+
+ DWORD WINAPI GetTempPathA( DWORD nBufferLength, LPSTR lpBuffer );
+
+This is documented in the B<Win32 SDK Reference>; you can look
+for it on the Microsoft's WWW site, or in your C compiler's
+documentation, if you own one.
+
+=over 4
+
+=item B<1.>
+
+The first parameter is the name of the library file that
+exports this function; our function resides in the F<KERNEL32.DLL>
+system file.
+When specifying this name as parameter, the F<.DLL> extension
+is implicit, and if no path is given, the file is searched through
+a couple of directories, including:
+
+=over 4
+
+=item 1. The directory from which the application loaded.
+
+=item 2. The current directory.
+
+=item 3. The Windows system directory (eg. c:\windows\system or system32).
+
+=item 4. The Windows directory (eg. c:\windows).
+
+=item 5. The directories that are listed in the PATH environment variable.
+
+=back
+
+So, you don't have to write F<C:\windows\system\kernel32.dll>;
+only F<kernel32> is enough:
+
+ $GetTempPath = new Win32::API('kernel32', ...
+
+=item B<2.>
+
+Now for the second parameter: the name of the function.
+It must be written exactly as it is exported
+by the library (case is significant here).
+If you are using Windows 95 or NT 4.0, you can use the B<Quick View>
+command on the DLL file to see the function it exports.
+Remember that you can only import functions from 32 bit DLLs:
+in Quick View, the file's characteristics should report
+somewhere "32 bit word machine"; as a rule of thumb,
+when you see that all the exported functions are in upper case,
+the DLL is a 16 bit one and you can't use it.
+If their capitalization looks correct, then it's probably a 32 bit
+DLL.
+
+Also note that many Win32 APIs are exported twice, with the addition of
+a final B<A> or B<W> to their name, for - respectively - the ASCII
+and the Unicode version.
+When a function name is not found, Win32::API will actually append
+an B<A> to the name and try again; if the extension is built on a
+Unicode system, then it will try with the B<W> instead.
+So our function name will be:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', ...
+
+In our case C<GetTempPath> is really loaded as C<GetTempPathA>.
+
+=item B<3.>
+
+The third parameter, the input parameter list, specifies how many
+arguments the function wants, and their types. It can be passed as
+a single string, in which each character represents one parameter,
+or as a list reference. The following forms are valid:
+
+ "abcd"
+ [a, b, c, d]
+ \@LIST
+
+But those are not:
+
+ (a, b, c, d)
+ @LIST
+
+The number of characters, or elements in the list, specifies the number
+of parameters, and each character or element specifies the type of an
+argument; allowed types are:
+
+=over 4
+
+=item C<I>:
+value is an integer (int)
+
+=item C<N>:
+value is a number (long)
+
+=item C<F>:
+value is a floating point number (float)
+
+=item C<D>:
+value is a double precision number (double)
+
+=item C<C>:
+value is a char (char)
+
+=item C<P>:
+value is a pointer (to a string, structure, etc...)
+
+=item C<S>:
+value is a Win32::API::Struct object (see below)
+
+=item C<K>:
+value is a Win32::API::Callback object (see L<Win32::API::Callback>)
+
+=back
+
+Our function needs two parameters: a number (C<DWORD>) and a pointer to a
+string (C<LPSTR>):
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', ...
+
+=item B<4.>
+
+The fourth and final parameter is the type of the value returned by the
+function. It can be one of the types seen above, plus another type named B<V>
+(for C<void>), used for functions that do not return a value.
+In our example the value returned by GetTempPath() is a C<DWORD>, so
+our return type will be B<N>:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+
+Now the line is complete, and the GetTempPath() API is ready to be used
+in Perl. Before calling it, you should test that $GetTempPath is
+C<defined>, otherwise either the function or the library could not be
+loaded; in this case, C<$!> will be set to the error message reported
+by Windows.
+Our definition, with error checking added, should then look like this:
+
+ $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
+ if(not defined $GetTempPath) {
+ die "Can't import API GetTempPath: $!\n";
+ }
+
+=back
+
+=head2 CALLING AN IMPORTED FUNCTION
+
+To effectively make a call to an imported function you must use the
+Call() method on the Win32::API object you created.
+Continuing with the example from the previous paragraph,
+the GetTempPath() API can be called using the method:
+
+ $GetTempPath->Call(...
+
+Of course, parameters have to be passed as defined in the import phase.
+In particular, if the number of parameters does not match (in the example,
+if GetTempPath() is called with more or less than two parameters),
+Perl will C<croak> an error message and C<die>.
+
+The two parameters needed here are the length of the buffer
+that will hold the returned temporary path, and a pointer to the
+buffer itself.
+For numerical parameters, you can use either a constant expression
+or a variable, while B<for pointers you must use a variable name> (no
+Perl references, just a plain variable name).
+Also note that B<memory must be allocated before calling the function>,
+just like in C.
+For example, to pass a buffer of 80 characters to GetTempPath(),
+it must be initialized before with:
+
+ $lpBuffer = " " x 80;
+
+This allocates a string of 80 characters. If you don't do so, you'll
+probably get C<Runtime exception> errors, and generally nothing will
+work. The call should therefore include:
+
+ $lpBuffer = " " x 80;
+ $GetTempPath->Call(80, $lpBuffer);
+
+And the result will be stored in the $lpBuffer variable.
+Note that you don't need to pass a reference to the variable
+(eg. you B<don't need> C<\$lpBuffer>), even if its value will be set
+by the function.
+
+A little problem here is that Perl does not trim the variable,
+so $lpBuffer will still contain 80 characters in return; the exceeding
+characters will be spaces, because we said C<" " x 80>.
+
+In this case we're lucky enough, because the value returned by
+the GetTempPath() function is the length of the string, so to get
+the actual temporary path we can write:
+
+ $lpBuffer = " " x 80;
+ $return = $GetTempPath->Call(80, $lpBuffer);
+ $TempPath = substr($lpBuffer, 0, $return);
+
+If you don't know the length of the string, you can usually
+cut it at the C<\0> (ASCII zero) character, which is the string
+delimiter in C:
+
+ $TempPath = ((split(/\0/, $lpBuffer))[0];
+ # or
+ $lpBuffer =~ s/\0.*$//;
+
+=head2 USING STRUCTURES
+
+Starting from version 0.40, Win32::API comes with a support package
+named Win32::API::Struct. The package is loaded automatically with
+Win32::API, so you don't need to use it explicitly.
+
+With this module you can conveniently define structures and use
+them as parameters to Win32::API functions. A short example follows:
+
+
+ # the 'POINT' structure is defined in C as:
+ # typedef struct {
+ # LONG x;
+ # LONG y;
+ # } POINT;
+
+
+ #### define the structure
+ Win32::API::Struct->typedef( POINT => qw{
+ LONG x;
+ LONG y;
+ });
+
+ #### import an API that uses this structure
+ Win32::API->Import('user32', 'BOOL GetCursorPos(LPPOINT lpPoint)');
+
+ #### create a 'POINT' object
+ my $pt = Win32::API::Struct->new('POINT');
+
+ #### call the function passing our structure object
+ GetCursorPos($pt);
+
+ #### and now, access its members
+ print "The cursor is at: $pt->{x}, $pt->{y}\n";
+
+Note that this works only when the function wants a
+B<pointer to a structure>: as you can see, our structure is named
+'POINT', but the API used 'LPPOINT'. 'LP' is automatically added at
+the beginning of the structure name when feeding it to a Win32::API
+call.
+
+For more information, see also L<Win32::API::Struct>.
+
+If you don't want (or can't) use the Win32::API::Struct facility,
+you can still use the low-level approach to use structures:
+
+
+=over 4
+
+=item 1.
+you have to pack() the required elements in a variable:
+
+ $lpPoint = pack('LL', 0, 0); # store two LONGs
+
+=item 2. to access the values stored in a structure, unpack() it as required:
+
+ ($x, $y) = unpack('LL', $lpPoint); # get the actual values
+
+=back
+
+
+The rest is left as an exercise to the reader...
+
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
+
+
diff --git a/Master/tlpkg/tlperl/lib/lib/Win32/API/Struct.pm b/Master/tlpkg/tlperl/lib/lib/Win32/API/Struct.pm
new file mode 100644
index 00000000000..acd160a95a8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/lib/Win32/API/Struct.pm
@@ -0,0 +1,528 @@
+package Win32::API::Struct;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API::Struct - Perl Win32 API struct Facility
+#
+# Version: 0.40
+# Date: 07 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: Struct.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+$VERSION = "0.40";
+
+use Win32::API::Type;
+
+use Carp;
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+my %Known = ();
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+sub typedef {
+ my $class = shift;
+ my $struct = shift;
+ my($type, $name);
+ my $self = {
+ align => undef,
+ typedef => [],
+ };
+ while(defined($type = shift)) {
+ $name = shift;
+ $name =~ s/;$//;
+ push( @{ $self->{typedef} }, [ recognize($type, $name) ] );
+ }
+
+ $Known{$struct} = $self;
+ return 1;
+}
+
+
+sub recognize {
+ my($type, $name) = @_;
+ my($size, $packing);
+ if(exists $Known{$type}) {
+ $packing = ">";
+ return $name, $packing, $type;
+ } else {
+ $packing = Win32::API::Type::packing($type);
+ return undef unless defined $packing;
+ if($name =~ s/\[(.*)\]$//) {
+ $size = $1;
+ $packing = $packing."*".$size;
+ }
+ DEBUG "(PM)Struct::recognize got '$name', '$type' -> '$packing'\n";
+ return $name, $packing, $type;
+ }
+}
+
+sub new {
+ my $class = shift;
+ my($type, $name);
+ my $self = {
+ typedef => [],
+ };
+ if($#_ == 0) {
+ if(exists $Known{$_[0]}) {
+ DEBUG "(PM)Struct::new: got '$_[0]'\n";
+ $self->{typedef} = $Known{$_[0]}->{typedef};
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $packing, $type) = @$member;
+ if($packing eq '>') {
+ $self->{$name} = Win32::API::Struct->new($type);
+ }
+ }
+ $self->{__typedef__} = $_[0];
+ } else {
+ carp "Unknown Win32::API::Struct '$_[0]'";
+ return undef;
+ }
+ } else {
+ while(defined($type = shift)) {
+ $name = shift;
+ # print "new: found member $name ($type)\n";
+ if(not exists $Win32::API::Type::Known{$type}) {
+ warn "Unknown Win32::API::Struct type '$type'";
+ return undef;
+ } else {
+ push( @{ $self->{typedef} }, [ $name, $Win32::API::Type::Known{$type}, $type ] );
+ }
+ }
+ }
+ return bless $self;
+}
+
+sub members {
+ my $self = shift;
+ return map {$_->[0]} @{ $self->{typedef} };
+}
+
+sub sizeof {
+ my $self = shift;
+ my $size = 0;
+ my $align = 0;
+ my $first = undef;
+ foreach my $member (@{ $self->{typedef} }) {
+ my($name, $packing, $type) = @$member;
+
+ if(ref( $self->{$name} ) eq "Win32::API::Struct") {
+ $size += $self->{$name}->sizeof();
+ # $align = $self->{$name}->sizeof() if $self->{$name}->sizeof() > $align;
+ } else {
+ if($packing =~ /\w\*(\d+)/) {
+ $size += Win32::API::Type::sizeof($type) * $1;
+ $first = Win32::API::Type::sizeof($type) * $1 unless defined $first;
+ DEBUG "(PM)Struct::sizeof: sizeof with member($name) now = ". $size. "\n";
+ } else {
+ $size += Win32::API::Type::sizeof($type);
+ $first = Win32::API::Type::sizeof($type) unless defined $first;
+ $align = Win32::API::Type::sizeof($type)
+ if Win32::API::Type::sizeof($type) > $align;
+ DEBUG "(PM)Struct::sizeof: sizeof with member($name) now = ". $size. "\n";
+ }
+ }
+ }
+ DEBUG "(PM)Struct::sizeof first=$first align=$align\n";
+ #DEBUG "(PM)Struct::sizeof returning %d\n", $first + (scalar(@{ $self->{typedef} })-1) * $align;
+ #return $first + (scalar(@{ $self->{typedef} })-1) * $align;
+ DEBUG "(PM)Struct::sizeof returning %d\n", scalar(@{ $self->{typedef} }) * $align;
+ if(defined $align and $align > 0) {
+ return scalar(@{ $self->{typedef} }) * $align;
+ } else {
+ return $size;
+ }
+ return $size;
+}
+
+sub align {
+ my $self = shift;
+ my $align = shift;
+
+ if(not defined $align) {
+ return $self->{align} unless $self->{align} eq 'auto';
+ $align = 0;
+ foreach my $member (@{ $self->{typedef} }) {
+ my($name, $packing, $type) = @$member;
+
+ if(ref( $self->{$name} ) eq "Win32::API::Struct") {
+ #### ????
+ } else {
+ if($packing =~ /\w\*(\d+)/) {
+ #### ????
+ } else {
+ $align = Win32::API::Type::sizeof($type)
+ if Win32::API::Type::sizeof($type) > $align;
+ }
+ }
+ }
+ return $align;
+ } else {
+ $self->{align} = $align;
+
+ }
+}
+
+sub getPack {
+ my $self = shift;
+ my $packing = "";
+ my($type, $name);
+ my @items = ();
+ my @recipients = ();
+
+ my $align = $self->align();
+
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $type, $orig) = @$member;
+ if($type eq '>') {
+ my($subpacking, $subitems, $subrecipients) = $self->{$name}->getPack();
+
+ DEBUG "(PM)Struct::getPack($self->{__typedef__}) ++ $subpacking\n";
+
+ $packing .= $subpacking;
+ push(@items, @$subitems);
+ push(@recipients, @$subrecipients);
+ } else {
+ if($type =~ /\w\*(\d+)/) {
+ my $size = $1;
+ $type = "a$size";
+ }
+
+ DEBUG "(PM)Struct::getPack($self->{__typedef__}) ++ $type\n";
+
+ if($type eq 'p') {
+ $type = "L";
+ push(@items, Win32::API::PointerTo($self->{$name}));
+ } else {
+ push(@items, $self->{$name});
+ }
+ $packing .= $type;
+
+ if($Win32::API::Type::PackSize{$type} < $align) {
+ $packing .= ("x" x ($align - $Win32::API::Type::PackSize{$type}));
+ }
+
+ push(@recipients, $self);
+ }
+ }
+ DEBUG "(PM)Struct::getPack: $self->{__typedef__}(buffer) = pack($packing, @items)\n";
+ return($packing, [@items], [@recipients]);
+}
+
+
+sub Pack {
+ my $self = shift;
+ my($packing, $items, $recipients) = $self->getPack();
+ DEBUG "(PM)Struct::Pack: $self->{__typedef__}(buffer) = pack($packing, @$items)\n";
+ $self->{buffer} = pack($packing, @$items);
+ if(DEBUG) {
+ for my $i (0..$self->sizeof-1) {
+ printf " %3d: 0x%02x\n", $i, ord(substr($self->{buffer}, $i, 1));
+ }
+ }
+ $self->{buffer_recipients} = $recipients
+}
+
+sub getUnpack {
+ my $self = shift;
+ my $packing = "";
+ my($type, $name);
+ my @items = ();
+ my $align = $self->align();
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $type, $orig) = @$member;
+ if($type eq '>') {
+ my($subpacking, @subitems) = $self->{$name}->getUnpack();
+
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ $subpacking\n";
+ $packing .= $subpacking;
+
+
+ push(@items, @subitems);
+ } else {
+ if($type =~ /\w\*(\d+)/) {
+ my $size = $1;
+ $type = "Z$size";
+ }
+
+ #if($type eq 'p') {
+ # $packing .= 'Z*';
+ # DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ Z*\n";
+ #} else {
+ $packing .= $type;
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}) ++ $type\n";
+ #}
+ if($type ne 'p' and $type !~ /^Z(\d+)/ and $Win32::API::Type::PackSize{$type} < $align) {
+ DEBUG "(PM)Struct::getUnpack %s(%d) < %d\n",
+ $type, $Win32::API::Type::PackSize{$type}, $align
+ ;
+ $packing .= ("x" x ($align - $Win32::API::Type::PackSize{$type}));
+ }
+
+ push(@items, $name);
+ }
+ }
+ DEBUG "(PM)Struct::getUnpack($self->{__typedef__}): unpack($packing, @items)\n";
+ return($packing, @items);
+}
+
+sub Unpack {
+ my $self = shift;
+ my($packing, @items) = $self->getUnpack();
+ my @itemvalue = unpack($packing, $self->{buffer});
+ DEBUG "(PM)Struct::Unpack: unpack($packing, buffer) = @itemvalue\n";
+ foreach my $i (0..$#items) {
+ my $recipient = $self->{buffer_recipients}->[$i];
+ DEBUG "(PM)Struct::Unpack: %s(%s) = '%s' (0x%08x)\n",
+ $recipient->{__typedef__},
+ $items[$i],
+ $itemvalue[$i],
+ $itemvalue[$i],
+ ;
+ $recipient->{$items[$i]} = $itemvalue[$i];
+ DEBUG "(PM)Struct::Unpack: self.$items[$i] = $self->{$items[$i]}\n";
+ }
+}
+
+sub FromMemory {
+ my($self, $addr) = @_;
+ DEBUG "(PM)Struct::FromMemory: doing Pack\n";
+ $self->Pack();
+ DEBUG "(PM)Struct::FromMemory: doing GetMemory( 0x%08x, %d )\n", $addr, $self->sizeof;
+ $self->{buffer} = Win32::API::ReadMemory( $addr, $self->sizeof );
+ $self->Unpack();
+ DEBUG "(PM)Struct::FromMemory: doing Unpack\n";
+ DEBUG "(PM)Struct::FromMemory: structure is now:\n";
+ $self->Dump() if DEBUG;
+ DEBUG "\n";
+}
+
+sub Dump {
+ my $self = shift;
+ my $prefix = shift;
+ foreach my $member (@{ $self->{typedef} }) {
+ ($name, $packing, $type) = @$member;
+ if( ref($self->{$name}) ) {
+ $self->{$name}->Dump($name);
+ } else {
+ printf "%-20s %-20s %-20s\n", $prefix, $name, $self->{$name};
+ }
+ }
+}
+
+
+sub is_known {
+ my $name = shift;
+ if(exists $Known{ $name }) {
+ return 1;
+ } else {
+ if($name =~ s/^LP//) {
+ return exists $Known{ $name };
+ }
+ return 0;
+ }
+}
+
+sub TIEHASH {
+ return Win32::API::Struct::new(@_);
+}
+
+sub EXISTS {
+
+}
+
+sub FETCH {
+ my $self = shift;
+ my $key = shift;
+
+ if($key eq 'sizeof') {
+ return $self->sizeof;
+ }
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ if(grep(/^\Q$key\E$/, @members)) {
+ return $self->{$key};
+ } else {
+ warn "'$key' is not a member of Win32::API::Struct $self->{__typedef__}";
+ }
+}
+
+sub STORE {
+ my $self = shift;
+ my($key, $val) = @_;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ if(grep(/^\Q$key\E$/, @members)) {
+ $self->{$key} = $val;
+ } else {
+ warn "'$key' is not a member of Win32::API::Struct $self->{__typedef__}";
+ }
+}
+
+sub FIRSTKEY {
+ my $self = shift;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ return $members[0];
+}
+
+sub NEXTKEY {
+ my $self = shift;
+ my $key = shift;
+ my @members = map { $_->[0] } @{ $self->{typedef} };
+ for my $i (0..$#members-1) {
+ return $members[$i+1] if $members[$i] eq $key;
+ }
+ return undef;
+}
+
+1;
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API::Struct - C struct support package for Win32::API
+
+=head1 SYNOPSIS
+
+ use Win32::API;
+
+ Win32::API::Struct->typedef( 'POINT', qw(
+ LONG x;
+ LONG y;
+ ));
+
+ my $Point = Win32::API::Struct->new( 'POINT' );
+ $Point->{x} = 1024;
+ $Point->{y} = 768;
+
+ #### alternatively
+
+ tie %Point, 'Win32::API::Struct', 'POINT';
+ $Point{x} = 1024;
+ $Point{y} = 768;
+
+
+=head1 ABSTRACT
+
+This module enables you to define C structs for use with
+Win32::API.
+
+See L<Win32::API> for more info about its usage.
+
+=head1 DESCRIPTION
+
+This module is automatically imported by Win32::API, so you don't
+need to 'use' it explicitly. The main methods are C<typedef> and
+C<new>, which are documented below.
+
+=over 4
+
+=item C<typedef NAME, TYPE, MEMBER, TYPE, MEMBER, ...>
+
+This method defines a structure named C<NAME>. The definition consists
+of types and member names, just like in C. In fact, most of the
+times you can cut the C definition for a structure and paste it
+verbatim to your script, enclosing it in a C<qw()> block. The
+function takes care of removing the semicolon after the member
+name.
+
+The synopsis example could be written like this:
+
+ Win32::API::Struct->typedef('POINT', 'LONG', 'x', 'LONG', 'y');
+
+But it could also be written like this (note the indirect object
+syntax), which is pretty cool:
+
+ typedef Win32::API::Struct POINT => qw{
+ LONG x;
+ LONG y;
+ };
+
+Also note that C<typedef> automatically defines an 'LPNAME' type,
+which holds a pointer to your structure. In the example above,
+'LPPOINT' is also defined and can be used in a call to a
+Win32::API (in fact, this is what you're really going to use when
+doing API calls).
+
+=item C<new NAME>
+
+This creates a structure (a Win32::API::Struct object) of the
+type C<NAME> (it must have been defined with C<typedef>). In Perl,
+when you create a structure, all the members are undefined. But
+when you use that structure in C (eg. a Win32::API call), you
+can safely assume that they will be treated as zero (or NULL).
+
+=item C<sizeof>
+
+This returns the size, in bytes, of the structure. Acts just like
+the C function of the same name. It is particularly useful for
+structures that need a member to be initialized to the structure's
+own size.
+
+=item C<align [SIZE]>
+
+Sets or returns the structure alignment (eg. how the structure is
+stored in memory). This is a very advanced option, and you normally
+don't need to mess with it.
+All structures in the Win32 Platform SDK should work without it.
+But if you define your own structure, you may need to give it an
+explicit alignment. In most cases, passing a C<SIZE> of 'auto'
+should keep the world happy.
+
+=back
+
+=head2 THE C<tie> INTERFACE
+
+Instead of creating an object with the C<new> method, you can
+tie a hash, which will hold the desired structure, using the
+C<tie> builtin function:
+
+ tie %structure, Win32::API::Struct => 'NAME';
+
+The differences between the tied and non-tied approaches are:
+
+=over 4
+
+=item *
+with tied structures, you can access members directly as
+hash lookups, eg.
+
+ # tied # non-tied
+ $Point{x} vs. $Point->{x}
+
+=item *
+with tied structures, when you try to fetch or store a
+member that is not part of the structure, it will result
+in a warning, eg.
+
+ print $Point{z};
+ # this will warn: 'z' is not a member of Win32::API::Struct POINT
+
+=item *
+when you pass a tied structure as a Win32::API parameter,
+remember to backslash it, eg.
+
+ # tied # non-tied
+ GetCursorPos( \%Point ) vs. GetCursorPos( $Point )
+
+=back
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/lib/Win32/API/Type.pm b/Master/tlpkg/tlperl/lib/lib/Win32/API/Type.pm
new file mode 100644
index 00000000000..9ebe9ff57dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/lib/Win32/API/Type.pm
@@ -0,0 +1,440 @@
+package Win32::API::Type;
+
+# See the bottom of this file for the POD documentation. Search for the
+# string '=head'.
+
+#######################################################################
+#
+# Win32::API::Type - Perl Win32 API type definitions
+#
+# Version: 0.40
+# Date: 07 Mar 2003
+# Author: Aldo Calpini <dada@perl.it>
+# $Id: Type.pm,v 1.0 2001/10/30 13:57:31 dada Exp $
+#######################################################################
+
+$VERSION = "0.40";
+
+use Carp;
+
+require Exporter; # to export the constants to the main:: space
+require DynaLoader; # to dynuhlode the module.
+@ISA = qw( Exporter DynaLoader );
+
+use vars qw( %Known %PackSize %Modifier %Pointer );
+
+sub DEBUG {
+ if ($Win32::API::DEBUG) {
+ printf @_ if @_ or return 1;
+ } else {
+ return 0;
+ }
+}
+
+%Known = ();
+%PackSize = ();
+%Modifier = ();
+%Pointer = ();
+
+INIT {
+ my $section = 'nothing';
+ foreach (<DATA>) {
+ next if /^\s*#/ or /^\s*$/;
+ chomp;
+ if( /\[(.+)\]/) {
+ $section = $1;
+ next;
+ }
+ if($section eq 'TYPE') {
+ my($name, $packing) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: Known('$name') => '$packing'\n";
+ $Known{$name} = $packing;
+ } elsif($section eq 'PACKSIZE') {
+ my($packing, $size) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: PackSize('$packing') => '$size'\n";
+ $PackSize{$packing} = $size;
+ } elsif($section eq 'MODIFIER') {
+ my($modifier, $mapto) = split(/\s+/, $_, 2);
+ my %maps = ();
+ foreach my $item (split(/\s+/, $mapto)) {
+ my($k, $v) = split(/=/, $item);
+ $maps{$k} = $v;
+ }
+ # DEBUG "(PM)Type::INIT: Modifier('$modifier') => '%maps'\n";
+ $Modifier{$modifier} = { %maps };
+ } elsif($section eq 'POINTER') {
+ my($pointer, $pointto) = split(/\s+/);
+ # DEBUG "(PM)Type::INIT: Pointer('$pointer') => '$pointto'\n";
+ $Pointer{$pointer} = $pointto;
+ }
+ }
+}
+
+sub new {
+ my $class = shift;
+ my($type) = @_;
+ my $packing = packing($type);
+ my $size = sizeof($type);
+ my $self = {
+ type => $type,
+ packing => $packing,
+ size => $size,
+ };
+ return bless $self;
+}
+
+sub typedef {
+ my $class = shift;
+ my($name, $type) = @_;
+ my $packing = packing($type, $name);
+ DEBUG "(PM)Type::typedef: packing='$packing'\n";
+ my $size = sizeof($type);
+ $Known{$name} = $packing;
+ return 1;
+}
+
+
+sub is_known {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return 1;
+ } else {
+ return defined packing($type);
+ }
+}
+
+sub sizeof {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return $self->{size};
+ } else {
+ my $packing = packing($type);
+ if($packing =~ /(\w)\*(\d+)/) {
+ return $PackSize{ $1 } * $2;
+ } else {
+ return $PackSize{ $packing };
+ }
+ }
+}
+
+sub packing {
+ # DEBUG "(PM)Type::packing: called by ". join("::", (caller(1))[0,3]). "\n";
+ my $self = shift;
+ my $is_pointer = 0;
+ if(ref($self) =~ /Win32::API::Type/) {
+ # DEBUG "(PM)Type::packing: got an object\n";
+ return $self->{packing};
+ }
+ my $type = ($self eq 'Win32::API::Type') ? shift : $self;
+ my $name = shift;
+
+ # DEBUG "(PM)Type::packing: got '$type', '$name'\n";
+ my($modifier, $size, $packing);
+ if(exists $Pointer{$type}) {
+ # DEBUG "(PM)Type::packing: got '$type', is really '$Pointer{$type}'\n";
+ $type = $Pointer{$type};
+ $is_pointer = 1;
+ } elsif($type =~ /(\w+)\s+(\w+)/) {
+ $modifier = $1;
+ $type = $2;
+ # DEBUG "(PM)packing: got modifier '$modifier', type '$type'\n";
+ }
+
+ $type =~ s/\*$//;
+
+ if(exists $Known{$type}) {
+ if(defined $name and $name =~ s/\[(.*)\]$//) {
+ $size = $1;
+ $packing = $Known{$type}[0]."*".$size;
+ # DEBUG "(PM)Type::packing: composite packing: '$packing' '$size'\n";
+ } else {
+ $packing = $Known{$type};
+ if($is_pointer and $packing eq 'c') {
+ $packing = "p";
+ }
+ # DEBUG "(PM)Type::packing: simple packing: '$packing'\n";
+ }
+ if(defined $modifier and exists $Modifier{$modifier}->{$type}) {
+ # DEBUG "(PM)Type::packing: applying modifier '$modifier' -> '$Modifier{$modifier}->{$type}'\n";
+ $packing = $Modifier{$modifier}->{$type};
+ }
+ return $packing;
+ } else {
+ # DEBUG "(PM)Type::packing: NOT FOUND\n";
+ return undef;
+ }
+}
+
+
+sub is_pointer {
+ my $self = shift;
+ my $type = shift;
+ $type = $self unless defined $type;
+ if(ref($type) =~ /Win32::API::Type/) {
+ return 1;
+ } else {
+ if($type =~ /\*$/) {
+ return 1;
+ } else {
+ return exists $Pointer{$type};
+ }
+ }
+}
+
+sub Pack {
+ my $type = $_[0];
+
+ if(packing($type) eq 'c' and is_pointer($type)) {
+ $_[1] = pack("Z*", $_[1]);
+ return $_[1];
+ }
+ $_[1] = pack( packing($type), $_[1]);
+ return $_[1];
+}
+
+sub Unpack {
+ my $type = $_[0];
+ if(packing($type) eq 'c' and is_pointer($type)) {
+ DEBUG "(PM)Type::Unpack: got packing 'c', is a pointer, unpacking 'Z*' '$_[1]'\n";
+ $_[1] = unpack("Z*", $_[1]);
+ DEBUG "(PM)Type::Unpack: returning '$_[1]'\n";
+ return $_[1];
+ }
+ DEBUG "(PM)Type::Unpack: unpacking '".packing($type)."' '$_[1]'\n";
+ $_[1] = unpack( packing($type), $_[1]);
+ DEBUG "(PM)Type::Unpack: returning '$_[1]'\n";
+ return $_[1];
+}
+
+1;
+
+#######################################################################
+# DOCUMENTATION
+#
+
+=head1 NAME
+
+Win32::API::Type - C type support package for Win32::API
+
+=head1 SYNOPSIS
+
+ use Win32::API;
+
+ Win32::API::Type->typedef( 'my_number', 'LONG' );
+
+
+=head1 ABSTRACT
+
+This module is a support package for Win32::API that implements
+C types for the import with prototype functionality.
+
+See L<Win32::API> for more info about its usage.
+
+=head1 DESCRIPTION
+
+This module is automatically imported by Win32::API, so you don't
+need to 'use' it explicitly. These are the methods of this package:
+
+=over 4
+
+=item C<typedef NAME, TYPE>
+
+This method defines a new type named C<NAME>. This actually just
+creates an alias for the already-defined type C<TYPE>, which you
+can use as a parameter in a Win32::API call.
+
+=item C<sizeof TYPE>
+
+This returns the size, in bytes, of C<TYPE>. Acts just like
+the C function of the same name.
+
+=item C<is_known TYPE>
+
+Returns true if C<TYPE> is known by Win32::API::Type, false
+otherwise.
+
+=back
+
+=head2 SUPPORTED TYPES
+
+This module should recognize all the types defined in the
+Win32 Platform SDK header files.
+Please see the source for this module, in the C<__DATA__> section,
+for the full list.
+
+=head1 AUTHOR
+
+Aldo Calpini ( I<dada@perl.it> ).
+
+=cut
+
+
+__DATA__
+
+[TYPE]
+ATOM s
+BOOL L
+BOOLEAN c
+BYTE C
+CHAR c
+COLORREF L
+DWORD L
+DWORD32 L
+DWORD64 Q
+FLOAT f
+HACCEL L
+HANDLE L
+HBITMAP L
+HBRUSH L
+HCOLORSPACE L
+HCONV L
+HCONVLIST L
+HCURSOR L
+HDC L
+HDDEDATA L
+HDESK L
+HDROP L
+HDWP L
+HENHMETAFILE L
+HFILE L
+HFONT L
+HGDIOBJ L
+HGLOBAL L
+HHOOK L
+HICON L
+HIMC L
+HINSTANCE L
+HKEY L
+HKL L
+HLOCAL L
+HMENU L
+HMETAFILE L
+HMODULE L
+HPALETTE L
+HPEN L
+HRGN L
+HRSRC L
+HSZ L
+HWINSTA L
+HWND L
+INT i
+INT32 i
+INT64 q
+LANGID s
+LCID L
+LCSCSTYPE L
+LCSGAMUTMATCH L
+LCTYPE L
+LONG l
+LONG32 l
+LONG64 q
+LONGLONG q
+LPARAM L
+LRESULT L
+REGSAM L
+SC_HANDLE L
+SC_LOCK L
+SERVICE_STATUS_HANDLE L
+SHORT s
+SIZE_T L
+SSIZE_T L
+TBYTE c
+TCHAR C
+UCHAR C
+UINT I
+UINT_PTR L
+UINT32 I
+UINT64 Q
+ULONG L
+ULONG32 L
+ULONG64 Q
+ULONGLONG Q
+USHORT S
+WCHAR S
+WORD S
+WPARAM L
+VOID c
+
+int i
+long l
+float f
+double d
+char c
+
+#CRITICAL_SECTION 24 -- a structure
+#LUID ? 8 -- a structure
+#VOID 0
+#CONST 4
+#FILE_SEGMENT_ELEMENT 8 -- a structure
+
+[PACKSIZE]
+c 1
+C 1
+d 8
+f 4
+i 4
+I 4
+l 4
+L 4
+q 8
+Q 8
+s 2
+S 2
+p 4
+
+[MODIFIER]
+unsigned int=I long=L short=S char=C
+
+[POINTER]
+INT_PTR INT
+LPBOOL BOOL
+LPBYTE BYTE
+LPCOLORREF COLORREF
+LPCSTR CHAR
+#LPCTSTR CHAR or WCHAR
+LPCTSTR CHAR
+LPCVOID any
+LPCWSTR WCHAR
+LPDWORD DWORD
+LPHANDLE HANDLE
+LPINT INT
+LPLONG LONG
+LPSTR CHAR
+#LPTSTR CHAR or WCHAR
+LPTSTR CHAR
+LPVOID VOID
+LPWORD WORD
+LPWSTR WCHAR
+
+PBOOL BOOL
+PBOOLEAN BOOL
+PBYTE BYTE
+PCHAR CHAR
+PCSTR CSTR
+PCWCH CWCH
+PCWSTR CWSTR
+PDWORD DWORD
+PFLOAT FLOAT
+PHANDLE HANDLE
+PHKEY HKEY
+PINT INT
+PLCID LCID
+PLONG LONG
+PSHORT SHORT
+PSTR CHAR
+#PTBYTE TBYTE --
+#PTCHAR TCHAR --
+#PTSTR CHAR or WCHAR
+PTSTR CHAR
+PUCHAR UCHAR
+PUINT UINT
+PULONG ULONG
+PUSHORT USHORT
+PVOID VOID
+PWCHAR WCHAR
+PWORD WORD
+PWSTR WCHAR
diff --git a/Master/tlpkg/tlperl/lib/lib/auto/Win32/API/API.dll b/Master/tlpkg/tlperl/lib/lib/auto/Win32/API/API.dll
new file mode 100755
index 00000000000..4c478dc3136
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/lib/auto/Win32/API/API.dll
Binary files differ
diff --git a/Master/tlpkg/tlperl/lib/newgetopt.pl b/Master/tlpkg/tlperl/lib/newgetopt.pl
new file mode 100644
index 00000000000..95eef220fe7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/newgetopt.pl
@@ -0,0 +1,75 @@
+# $Id: newgetopt.pl,v 1.18 2001-09-21 15:34:59+02 jv Exp $
+
+# This library is no longer being maintained, and is included for backward
+# compatibility with Perl 4 programs which may require it.
+# It is now just a wrapper around the Getopt::Long module.
+#
+# In particular, this should not be used as an example of modern Perl
+# programming techniques.
+#
+# Suggested alternative: Getopt::Long
+
+{ package newgetopt;
+
+ # Values for $order. See GNU getopt.c for details.
+ $REQUIRE_ORDER = 0;
+ $PERMUTE = 1;
+ $RETURN_IN_ORDER = 2;
+
+ # Handle POSIX compliancy.
+ if ( defined $ENV{"POSIXLY_CORRECT"} ) {
+ $autoabbrev = 0; # no automatic abbrev of options (???)
+ $getopt_compat = 0; # disallow '+' to start options
+ $option_start = "(--|-)";
+ $order = $REQUIRE_ORDER;
+ $bundling = 0;
+ $passthrough = 0;
+ }
+ else {
+ $autoabbrev = 1; # automatic abbrev of options
+ $getopt_compat = 1; # allow '+' to start options
+ $option_start = "(--|-|\\+)";
+ $order = $PERMUTE;
+ $bundling = 0;
+ $passthrough = 0;
+ }
+
+ # Other configurable settings.
+ $debug = 0; # for debugging
+ $ignorecase = 1; # ignore case when matching options
+ $argv_end = "--"; # don't change this!
+}
+
+use Getopt::Long;
+
+################ Subroutines ################
+
+sub NGetOpt {
+
+ $Getopt::Long::debug = $newgetopt::debug
+ if defined $newgetopt::debug;
+ $Getopt::Long::autoabbrev = $newgetopt::autoabbrev
+ if defined $newgetopt::autoabbrev;
+ $Getopt::Long::getopt_compat = $newgetopt::getopt_compat
+ if defined $newgetopt::getopt_compat;
+ $Getopt::Long::option_start = $newgetopt::option_start
+ if defined $newgetopt::option_start;
+ $Getopt::Long::order = $newgetopt::order
+ if defined $newgetopt::order;
+ $Getopt::Long::bundling = $newgetopt::bundling
+ if defined $newgetopt::bundling;
+ $Getopt::Long::ignorecase = $newgetopt::ignorecase
+ if defined $newgetopt::ignorecase;
+ $Getopt::Long::ignorecase = $newgetopt::ignorecase
+ if defined $newgetopt::ignorecase;
+ $Getopt::Long::passthrough = $newgetopt::passthrough
+ if defined $newgetopt::passthrough;
+
+ &GetOptions;
+}
+
+################ Package return ################
+
+1;
+
+################ End of newgetopt.pl ################
diff --git a/Master/tlpkg/tlperl/lib/overload.pm b/Master/tlpkg/tlperl/lib/overload.pm
new file mode 100644
index 00000000000..15b7e775e74
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/overload.pm
@@ -0,0 +1,1434 @@
+package overload;
+
+our $VERSION = '1.04';
+
+$overload::hint_bits = 0x20000; # HINT_LOCALIZE_HH
+
+sub nil {}
+
+sub OVERLOAD {
+ $package = shift;
+ my %arg = @_;
+ my ($sub, $fb);
+ $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching.
+ *{$package . "::()"} = \&nil; # Make it findable via fetchmethod.
+ for (keys %arg) {
+ if ($_ eq 'fallback') {
+ $fb = $arg{$_};
+ } else {
+ $sub = $arg{$_};
+ if (not ref $sub and $sub !~ /::/) {
+ $ {$package . "::(" . $_} = $sub;
+ $sub = \&nil;
+ }
+ #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n";
+ *{$package . "::(" . $_} = \&{ $sub };
+ }
+ }
+ ${$package . "::()"} = $fb; # Make it findable too (fallback only).
+}
+
+sub import {
+ $package = (caller())[0];
+ # *{$package . "::OVERLOAD"} = \&OVERLOAD;
+ shift;
+ $package->overload::OVERLOAD(@_);
+}
+
+sub unimport {
+ $package = (caller())[0];
+ ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table
+ shift;
+ for (@_) {
+ if ($_ eq 'fallback') {
+ undef $ {$package . "::()"};
+ } else {
+ delete $ {$package . "::"}{"(" . $_};
+ }
+ }
+}
+
+sub Overloaded {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ $package->can('()');
+}
+
+sub ov_method {
+ my $globref = shift;
+ return undef unless $globref;
+ my $sub = \&{*$globref};
+ return $sub if $sub ne \&nil;
+ return shift->can($ {*$globref});
+}
+
+sub OverloadedStringify {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ #$package->can('(""')
+ ov_method mycan($package, '(""'), $package
+ or ov_method mycan($package, '(0+'), $package
+ or ov_method mycan($package, '(bool'), $package
+ or ov_method mycan($package, '(nomethod'), $package;
+}
+
+sub Method {
+ my $package = shift;
+ $package = ref $package if ref $package;
+ #my $meth = $package->can('(' . shift);
+ ov_method mycan($package, '(' . shift), $package;
+ #return $meth if $meth ne \&nil;
+ #return $ {*{$meth}};
+}
+
+sub AddrRef {
+ my $package = ref $_[0];
+ return "$_[0]" unless $package;
+
+ require Scalar::Util;
+ my $class = Scalar::Util::blessed($_[0]);
+ my $class_prefix = defined($class) ? "$class=" : "";
+ my $type = Scalar::Util::reftype($_[0]);
+ my $addr = Scalar::Util::refaddr($_[0]);
+ return sprintf("$class_prefix$type(0x%x)", $addr);
+}
+
+*StrVal = *AddrRef;
+
+sub mycan { # Real can would leave stubs.
+ my ($package, $meth) = @_;
+ return \*{$package . "::$meth"} if defined &{$package . "::$meth"};
+ my $p;
+ foreach $p (@{$package . "::ISA"}) {
+ my $out = mycan($p, $meth);
+ return $out if $out;
+ }
+ return undef;
+}
+
+%constants = (
+ 'integer' => 0x1000, # HINT_NEW_INTEGER
+ 'float' => 0x2000, # HINT_NEW_FLOAT
+ 'binary' => 0x4000, # HINT_NEW_BINARY
+ 'q' => 0x8000, # HINT_NEW_STRING
+ 'qr' => 0x10000, # HINT_NEW_RE
+ );
+
+%ops = ( with_assign => "+ - * / % ** << >> x .",
+ assign => "+= -= *= /= %= **= <<= >>= x= .=",
+ num_comparison => "< <= > >= == !=",
+ '3way_comparison'=> "<=> cmp",
+ str_comparison => "lt le gt ge eq ne",
+ binary => "& | ^",
+ unary => "neg ! ~",
+ mutators => '++ --',
+ func => "atan2 cos sin exp abs log sqrt int",
+ conversion => 'bool "" 0+',
+ iterators => '<>',
+ dereferencing => '${} @{} %{} &{} *{}',
+ special => 'nomethod fallback =');
+
+use warnings::register;
+sub constant {
+ # Arguments: what, sub
+ while (@_) {
+ if (@_ == 1) {
+ warnings::warnif ("Odd number of arguments for overload::constant");
+ last;
+ }
+ elsif (!exists $constants {$_ [0]}) {
+ warnings::warnif ("`$_[0]' is not an overloadable type");
+ }
+ elsif (!ref $_ [1] || "$_[1]" !~ /CODE\(0x[\da-f]+\)$/) {
+ # Can't use C<ref $_[1] eq "CODE"> above as code references can be
+ # blessed, and C<ref> would return the package the ref is blessed into.
+ if (warnings::enabled) {
+ $_ [1] = "undef" unless defined $_ [1];
+ warnings::warn ("`$_[1]' is not a code reference");
+ }
+ }
+ else {
+ $^H{$_[0]} = $_[1];
+ $^H |= $constants{$_[0]} | $overload::hint_bits;
+ }
+ shift, shift;
+ }
+}
+
+sub remove_constant {
+ # Arguments: what, sub
+ while (@_) {
+ delete $^H{$_[0]};
+ $^H &= ~ $constants{$_[0]};
+ shift, shift;
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+overload - Package for overloading Perl operations
+
+=head1 SYNOPSIS
+
+ package SomeThing;
+
+ use overload
+ '+' => \&myadd,
+ '-' => \&mysub;
+ # etc
+ ...
+
+ package main;
+ $a = new SomeThing 57;
+ $b=5+$a;
+ ...
+ if (overload::Overloaded $b) {...}
+ ...
+ $strval = overload::StrVal $b;
+
+=head1 DESCRIPTION
+
+=head2 Declaration of overloaded functions
+
+The compilation directive
+
+ package Number;
+ use overload
+ "+" => \&add,
+ "*=" => "muas";
+
+declares function Number::add() for addition, and method muas() in
+the "class" C<Number> (or one of its base classes)
+for the assignment form C<*=> of multiplication.
+
+Arguments of this directive come in (key, value) pairs. Legal values
+are values legal inside a C<&{ ... }> call, so the name of a
+subroutine, a reference to a subroutine, or an anonymous subroutine
+will all work. Note that values specified as strings are
+interpreted as methods, not subroutines. Legal keys are listed below.
+
+The subroutine C<add> will be called to execute C<$a+$b> if $a
+is a reference to an object blessed into the package C<Number>, or if $a is
+not an object from a package with defined mathemagic addition, but $b is a
+reference to a C<Number>. It can also be called in other situations, like
+C<$a+=7>, or C<$a++>. See L<MAGIC AUTOGENERATION>. (Mathemagical
+methods refer to methods triggered by an overloaded mathematical
+operator.)
+
+Since overloading respects inheritance via the @ISA hierarchy, the
+above declaration would also trigger overloading of C<+> and C<*=> in
+all the packages which inherit from C<Number>.
+
+=head2 Calling Conventions for Binary Operations
+
+The functions specified in the C<use overload ...> directive are called
+with three (in one particular case with four, see L<Last Resort>)
+arguments. If the corresponding operation is binary, then the first
+two arguments are the two arguments of the operation. However, due to
+general object calling conventions, the first argument should always be
+an object in the package, so in the situation of C<7+$a>, the
+order of the arguments is interchanged. It probably does not matter
+when implementing the addition method, but whether the arguments
+are reversed is vital to the subtraction method. The method can
+query this information by examining the third argument, which can take
+three different values:
+
+=over 7
+
+=item FALSE
+
+the order of arguments is as in the current operation.
+
+=item TRUE
+
+the arguments are reversed.
+
+=item C<undef>
+
+the current operation is an assignment variant (as in
+C<$a+=7>), but the usual function is called instead. This additional
+information can be used to generate some optimizations. Compare
+L<Calling Conventions for Mutators>.
+
+=back
+
+=head2 Calling Conventions for Unary Operations
+
+Unary operation are considered binary operations with the second
+argument being C<undef>. Thus the functions that overloads C<{"++"}>
+is called with arguments C<($a,undef,'')> when $a++ is executed.
+
+=head2 Calling Conventions for Mutators
+
+Two types of mutators have different calling conventions:
+
+=over
+
+=item C<++> and C<-->
+
+The routines which implement these operators are expected to actually
+I<mutate> their arguments. So, assuming that $obj is a reference to a
+number,
+
+ sub incr { my $n = $ {$_[0]}; ++$n; $_[0] = bless \$n}
+
+is an appropriate implementation of overloaded C<++>. Note that
+
+ sub incr { ++$ {$_[0]} ; shift }
+
+is OK if used with preincrement and with postincrement. (In the case
+of postincrement a copying will be performed, see L<Copy Constructor>.)
+
+=item C<x=> and other assignment versions
+
+There is nothing special about these methods. They may change the
+value of their arguments, and may leave it as is. The result is going
+to be assigned to the value in the left-hand-side if different from
+this value.
+
+This allows for the same method to be used as overloaded C<+=> and
+C<+>. Note that this is I<allowed>, but not recommended, since by the
+semantic of L<"Fallback"> Perl will call the method for C<+> anyway,
+if C<+=> is not overloaded.
+
+=back
+
+B<Warning.> Due to the presence of assignment versions of operations,
+routines which may be called in assignment context may create
+self-referential structures. Currently Perl will not free self-referential
+structures until cycles are C<explicitly> broken. You may get problems
+when traversing your structures too.
+
+Say,
+
+ use overload '+' => sub { bless [ \$_[0], \$_[1] ] };
+
+is asking for trouble, since for code C<$obj += $foo> the subroutine
+is called as C<$obj = add($obj, $foo, undef)>, or C<$obj = [\$obj,
+\$foo]>. If using such a subroutine is an important optimization, one
+can overload C<+=> explicitly by a non-"optimized" version, or switch
+to non-optimized version if C<not defined $_[2]> (see
+L<Calling Conventions for Binary Operations>).
+
+Even if no I<explicit> assignment-variants of operators are present in
+the script, they may be generated by the optimizer. Say, C<",$obj,"> or
+C<',' . $obj . ','> may be both optimized to
+
+ my $tmp = ',' . $obj; $tmp .= ',';
+
+=head2 Overloadable Operations
+
+The following symbols can be specified in C<use overload> directive:
+
+=over 5
+
+=item * I<Arithmetic operations>
+
+ "+", "+=", "-", "-=", "*", "*=", "/", "/=", "%", "%=",
+ "**", "**=", "<<", "<<=", ">>", ">>=", "x", "x=", ".", ".=",
+
+For these operations a substituted non-assignment variant can be called if
+the assignment variant is not available. Methods for operations C<+>,
+C<->, C<+=>, and C<-=> can be called to automatically generate
+increment and decrement methods. The operation C<-> can be used to
+autogenerate missing methods for unary minus or C<abs>.
+
+See L<"MAGIC AUTOGENERATION">, L<"Calling Conventions for Mutators"> and
+L<"Calling Conventions for Binary Operations">) for details of these
+substitutions.
+
+=item * I<Comparison operations>
+
+ "<", "<=", ">", ">=", "==", "!=", "<=>",
+ "lt", "le", "gt", "ge", "eq", "ne", "cmp",
+
+If the corresponding "spaceship" variant is available, it can be
+used to substitute for the missing operation. During C<sort>ing
+arrays, C<cmp> is used to compare values subject to C<use overload>.
+
+=item * I<Bit operations>
+
+ "&", "^", "|", "neg", "!", "~",
+
+C<neg> stands for unary minus. If the method for C<neg> is not
+specified, it can be autogenerated using the method for
+subtraction. If the method for C<!> is not specified, it can be
+autogenerated using the methods for C<bool>, or C<"">, or C<0+>.
+
+=item * I<Increment and decrement>
+
+ "++", "--",
+
+If undefined, addition and subtraction methods can be
+used instead. These operations are called both in prefix and
+postfix form.
+
+=item * I<Transcendental functions>
+
+ "atan2", "cos", "sin", "exp", "abs", "log", "sqrt", "int"
+
+If C<abs> is unavailable, it can be autogenerated using methods
+for "E<lt>" or "E<lt>=E<gt>" combined with either unary minus or subtraction.
+
+Note that traditionally the Perl function L<int> rounds to 0, thus for
+floating-point-like types one should follow the same semantic. If
+C<int> is unavailable, it can be autogenerated using the overloading of
+C<0+>.
+
+=item * I<Boolean, string and numeric conversion>
+
+ 'bool', '""', '0+',
+
+If one or two of these operations are not overloaded, the remaining ones can
+be used instead. C<bool> is used in the flow control operators
+(like C<while>) and for the ternary C<?:> operation. These functions can
+return any arbitrary Perl value. If the corresponding operation for this value
+is overloaded too, that operation will be called again with this value.
+
+As a special case if the overload returns the object itself then it will
+be used directly. An overloaded conversion returning the object is
+probably a bug, because you're likely to get something that looks like
+C<YourPackage=HASH(0x8172b34)>.
+
+=item * I<Iteration>
+
+ "<>"
+
+If not overloaded, the argument will be converted to a filehandle or
+glob (which may require a stringification). The same overloading
+happens both for the I<read-filehandle> syntax C<E<lt>$varE<gt>> and
+I<globbing> syntax C<E<lt>${var}E<gt>>.
+
+B<BUGS> Even in list context, the iterator is currently called only
+once and with scalar context.
+
+=item * I<Dereferencing>
+
+ '${}', '@{}', '%{}', '&{}', '*{}'.
+
+If not overloaded, the argument will be dereferenced I<as is>, thus
+should be of correct type. These functions should return a reference
+of correct type, or another object with overloaded dereferencing.
+
+As a special case if the overload returns the object itself then it
+will be used directly (provided it is the correct type).
+
+The dereference operators must be specified explicitly they will not be passed to
+"nomethod".
+
+=item * I<Special>
+
+ "nomethod", "fallback", "=",
+
+see L<SPECIAL SYMBOLS FOR C<use overload>>.
+
+=back
+
+See L<"Fallback"> for an explanation of when a missing method can be
+autogenerated.
+
+A computer-readable form of the above table is available in the hash
+%overload::ops, with values being space-separated lists of names:
+
+ with_assign => '+ - * / % ** << >> x .',
+ assign => '+= -= *= /= %= **= <<= >>= x= .=',
+ num_comparison => '< <= > >= == !=',
+ '3way_comparison'=> '<=> cmp',
+ str_comparison => 'lt le gt ge eq ne',
+ binary => '& | ^',
+ unary => 'neg ! ~',
+ mutators => '++ --',
+ func => 'atan2 cos sin exp abs log sqrt',
+ conversion => 'bool "" 0+',
+ iterators => '<>',
+ dereferencing => '${} @{} %{} &{} *{}',
+ special => 'nomethod fallback ='
+
+=head2 Inheritance and overloading
+
+Inheritance interacts with overloading in two ways.
+
+=over
+
+=item Strings as values of C<use overload> directive
+
+If C<value> in
+
+ use overload key => value;
+
+is a string, it is interpreted as a method name.
+
+=item Overloading of an operation is inherited by derived classes
+
+Any class derived from an overloaded class is also overloaded. The
+set of overloaded methods is the union of overloaded methods of all
+the ancestors. If some method is overloaded in several ancestor, then
+which description will be used is decided by the usual inheritance
+rules:
+
+If C<A> inherits from C<B> and C<C> (in this order), C<B> overloads
+C<+> with C<\&D::plus_sub>, and C<C> overloads C<+> by C<"plus_meth">,
+then the subroutine C<D::plus_sub> will be called to implement
+operation C<+> for an object in package C<A>.
+
+=back
+
+Note that since the value of the C<fallback> key is not a subroutine,
+its inheritance is not governed by the above rules. In the current
+implementation, the value of C<fallback> in the first overloaded
+ancestor is used, but this is accidental and subject to change.
+
+=head1 SPECIAL SYMBOLS FOR C<use overload>
+
+Three keys are recognized by Perl that are not covered by the above
+description.
+
+=head2 Last Resort
+
+C<"nomethod"> should be followed by a reference to a function of four
+parameters. If defined, it is called when the overloading mechanism
+cannot find a method for some operation. The first three arguments of
+this function coincide with the arguments for the corresponding method if
+it were found, the fourth argument is the symbol
+corresponding to the missing method. If several methods are tried,
+the last one is used. Say, C<1-$a> can be equivalent to
+
+ &nomethodMethod($a,1,1,"-")
+
+if the pair C<"nomethod" =E<gt> "nomethodMethod"> was specified in the
+C<use overload> directive.
+
+The C<"nomethod"> mechanism is I<not> used for the dereference operators
+( ${} @{} %{} &{} *{} ).
+
+
+If some operation cannot be resolved, and there is no function
+assigned to C<"nomethod">, then an exception will be raised via die()--
+unless C<"fallback"> was specified as a key in C<use overload> directive.
+
+
+=head2 Fallback
+
+The key C<"fallback"> governs what to do if a method for a particular
+operation is not found. Three different cases are possible depending on
+the value of C<"fallback">:
+
+=over 16
+
+=item * C<undef>
+
+Perl tries to use a
+substituted method (see L<MAGIC AUTOGENERATION>). If this fails, it
+then tries to calls C<"nomethod"> value; if missing, an exception
+will be raised.
+
+=item * TRUE
+
+The same as for the C<undef> value, but no exception is raised. Instead,
+it silently reverts to what it would have done were there no C<use overload>
+present.
+
+=item * defined, but FALSE
+
+No autogeneration is tried. Perl tries to call
+C<"nomethod"> value, and if this is missing, raises an exception.
+
+=back
+
+B<Note.> C<"fallback"> inheritance via @ISA is not carved in stone
+yet, see L<"Inheritance and overloading">.
+
+=head2 Copy Constructor
+
+The value for C<"="> is a reference to a function with three
+arguments, i.e., it looks like the other values in C<use
+overload>. However, it does not overload the Perl assignment
+operator. This would go against Camel hair.
+
+This operation is called in the situations when a mutator is applied
+to a reference that shares its object with some other reference, such
+as
+
+ $a=$b;
+ ++$a;
+
+To make this change $a and not change $b, a copy of C<$$a> is made,
+and $a is assigned a reference to this new object. This operation is
+done during execution of the C<++$a>, and not during the assignment,
+(so before the increment C<$$a> coincides with C<$$b>). This is only
+done if C<++> is expressed via a method for C<'++'> or C<'+='> (or
+C<nomethod>). Note that if this operation is expressed via C<'+'>
+a nonmutator, i.e., as in
+
+ $a=$b;
+ $a=$a+1;
+
+then C<$a> does not reference a new copy of C<$$a>, since $$a does not
+appear as lvalue when the above code is executed.
+
+If the copy constructor is required during the execution of some mutator,
+but a method for C<'='> was not specified, it can be autogenerated as a
+string copy if the object is a plain scalar.
+
+=over 5
+
+=item B<Example>
+
+The actually executed code for
+
+ $a=$b;
+ Something else which does not modify $a or $b....
+ ++$a;
+
+may be
+
+ $a=$b;
+ Something else which does not modify $a or $b....
+ $a = $a->clone(undef,"");
+ $a->incr(undef,"");
+
+if $b was mathemagical, and C<'++'> was overloaded with C<\&incr>,
+C<'='> was overloaded with C<\&clone>.
+
+=back
+
+Same behaviour is triggered by C<$b = $a++>, which is consider a synonym for
+C<$b = $a; ++$a>.
+
+=head1 MAGIC AUTOGENERATION
+
+If a method for an operation is not found, and the value for C<"fallback"> is
+TRUE or undefined, Perl tries to autogenerate a substitute method for
+the missing operation based on the defined operations. Autogenerated method
+substitutions are possible for the following operations:
+
+=over 16
+
+=item I<Assignment forms of arithmetic operations>
+
+C<$a+=$b> can use the method for C<"+"> if the method for C<"+=">
+is not defined.
+
+=item I<Conversion operations>
+
+String, numeric, and boolean conversion are calculated in terms of one
+another if not all of them are defined.
+
+=item I<Increment and decrement>
+
+The C<++$a> operation can be expressed in terms of C<$a+=1> or C<$a+1>,
+and C<$a--> in terms of C<$a-=1> and C<$a-1>.
+
+=item C<abs($a)>
+
+can be expressed in terms of C<$aE<lt>0> and C<-$a> (or C<0-$a>).
+
+=item I<Unary minus>
+
+can be expressed in terms of subtraction.
+
+=item I<Negation>
+
+C<!> and C<not> can be expressed in terms of boolean conversion, or
+string or numerical conversion.
+
+=item I<Concatenation>
+
+can be expressed in terms of string conversion.
+
+=item I<Comparison operations>
+
+can be expressed in terms of its "spaceship" counterpart: either
+C<E<lt>=E<gt>> or C<cmp>:
+
+ <, >, <=, >=, ==, != in terms of <=>
+ lt, gt, le, ge, eq, ne in terms of cmp
+
+=item I<Iterator>
+
+ <> in terms of builtin operations
+
+=item I<Dereferencing>
+
+ ${} @{} %{} &{} *{} in terms of builtin operations
+
+=item I<Copy operator>
+
+can be expressed in terms of an assignment to the dereferenced value, if this
+value is a scalar and not a reference.
+
+=back
+
+=head1 Losing overloading
+
+The restriction for the comparison operation is that even if, for example,
+`C<cmp>' should return a blessed reference, the autogenerated `C<lt>'
+function will produce only a standard logical value based on the
+numerical value of the result of `C<cmp>'. In particular, a working
+numeric conversion is needed in this case (possibly expressed in terms of
+other conversions).
+
+Similarly, C<.=> and C<x=> operators lose their mathemagical properties
+if the string conversion substitution is applied.
+
+When you chop() a mathemagical object it is promoted to a string and its
+mathemagical properties are lost. The same can happen with other
+operations as well.
+
+=head1 Run-time Overloading
+
+Since all C<use> directives are executed at compile-time, the only way to
+change overloading during run-time is to
+
+ eval 'use overload "+" => \&addmethod';
+
+You can also use
+
+ eval 'no overload "+", "--", "<="';
+
+though the use of these constructs during run-time is questionable.
+
+=head1 Public functions
+
+Package C<overload.pm> provides the following public functions:
+
+=over 5
+
+=item overload::StrVal(arg)
+
+Gives string value of C<arg> as in absence of stringify overloading. If you
+are using this to get the address of a reference (useful for checking if two
+references point to the same thing) then you may be better off using
+C<Scalar::Util::refaddr()>, which is faster.
+
+=item overload::Overloaded(arg)
+
+Returns true if C<arg> is subject to overloading of some operations.
+
+=item overload::Method(obj,op)
+
+Returns C<undef> or a reference to the method that implements C<op>.
+
+=back
+
+=head1 Overloading constants
+
+For some applications, the Perl parser mangles constants too much.
+It is possible to hook into this process via C<overload::constant()>
+and C<overload::remove_constant()> functions.
+
+These functions take a hash as an argument. The recognized keys of this hash
+are:
+
+=over 8
+
+=item integer
+
+to overload integer constants,
+
+=item float
+
+to overload floating point constants,
+
+=item binary
+
+to overload octal and hexadecimal constants,
+
+=item q
+
+to overload C<q>-quoted strings, constant pieces of C<qq>- and C<qx>-quoted
+strings and here-documents,
+
+=item qr
+
+to overload constant pieces of regular expressions.
+
+=back
+
+The corresponding values are references to functions which take three arguments:
+the first one is the I<initial> string form of the constant, the second one
+is how Perl interprets this constant, the third one is how the constant is used.
+Note that the initial string form does not
+contain string delimiters, and has backslashes in backslash-delimiter
+combinations stripped (thus the value of delimiter is not relevant for
+processing of this string). The return value of this function is how this
+constant is going to be interpreted by Perl. The third argument is undefined
+unless for overloaded C<q>- and C<qr>- constants, it is C<q> in single-quote
+context (comes from strings, regular expressions, and single-quote HERE
+documents), it is C<tr> for arguments of C<tr>/C<y> operators,
+it is C<s> for right-hand side of C<s>-operator, and it is C<qq> otherwise.
+
+Since an expression C<"ab$cd,,"> is just a shortcut for C<'ab' . $cd . ',,'>,
+it is expected that overloaded constant strings are equipped with reasonable
+overloaded catenation operator, otherwise absurd results will result.
+Similarly, negative numbers are considered as negations of positive constants.
+
+Note that it is probably meaningless to call the functions overload::constant()
+and overload::remove_constant() from anywhere but import() and unimport() methods.
+From these methods they may be called as
+
+ sub import {
+ shift;
+ return unless @_;
+ die "unknown import: @_" unless @_ == 1 and $_[0] eq ':constant';
+ overload::constant integer => sub {Math::BigInt->new(shift)};
+ }
+
+B<BUGS> Currently overloaded-ness of constants does not propagate
+into C<eval '...'>.
+
+=head1 IMPLEMENTATION
+
+What follows is subject to change RSN.
+
+The table of methods for all operations is cached in magic for the
+symbol table hash for the package. The cache is invalidated during
+processing of C<use overload>, C<no overload>, new function
+definitions, and changes in @ISA. However, this invalidation remains
+unprocessed until the next C<bless>ing into the package. Hence if you
+want to change overloading structure dynamically, you'll need an
+additional (fake) C<bless>ing to update the table.
+
+(Every SVish thing has a magic queue, and magic is an entry in that
+queue. This is how a single variable may participate in multiple
+forms of magic simultaneously. For instance, environment variables
+regularly have two forms at once: their %ENV magic and their taint
+magic. However, the magic which implements overloading is applied to
+the stashes, which are rarely used directly, thus should not slow down
+Perl.)
+
+If an object belongs to a package using overload, it carries a special
+flag. Thus the only speed penalty during arithmetic operations without
+overloading is the checking of this flag.
+
+In fact, if C<use overload> is not present, there is almost no overhead
+for overloadable operations, so most programs should not suffer
+measurable performance penalties. A considerable effort was made to
+minimize the overhead when overload is used in some package, but the
+arguments in question do not belong to packages using overload. When
+in doubt, test your speed with C<use overload> and without it. So far
+there have been no reports of substantial speed degradation if Perl is
+compiled with optimization turned on.
+
+There is no size penalty for data if overload is not used. The only
+size penalty if overload is used in some package is that I<all> the
+packages acquire a magic during the next C<bless>ing into the
+package. This magic is three-words-long for packages without
+overloading, and carries the cache table if the package is overloaded.
+
+Copying (C<$a=$b>) is shallow; however, a one-level-deep copying is
+carried out before any operation that can imply an assignment to the
+object $a (or $b) refers to, like C<$a++>. You can override this
+behavior by defining your own copy constructor (see L<"Copy Constructor">).
+
+It is expected that arguments to methods that are not explicitly supposed
+to be changed are constant (but this is not enforced).
+
+=head1 Metaphor clash
+
+One may wonder why the semantic of overloaded C<=> is so counter intuitive.
+If it I<looks> counter intuitive to you, you are subject to a metaphor
+clash.
+
+Here is a Perl object metaphor:
+
+I< object is a reference to blessed data>
+
+and an arithmetic metaphor:
+
+I< object is a thing by itself>.
+
+The I<main> problem of overloading C<=> is the fact that these metaphors
+imply different actions on the assignment C<$a = $b> if $a and $b are
+objects. Perl-think implies that $a becomes a reference to whatever
+$b was referencing. Arithmetic-think implies that the value of "object"
+$a is changed to become the value of the object $b, preserving the fact
+that $a and $b are separate entities.
+
+The difference is not relevant in the absence of mutators. After
+a Perl-way assignment an operation which mutates the data referenced by $a
+would change the data referenced by $b too. Effectively, after
+C<$a = $b> values of $a and $b become I<indistinguishable>.
+
+On the other hand, anyone who has used algebraic notation knows the
+expressive power of the arithmetic metaphor. Overloading works hard
+to enable this metaphor while preserving the Perlian way as far as
+possible. Since it is not possible to freely mix two contradicting
+metaphors, overloading allows the arithmetic way to write things I<as
+far as all the mutators are called via overloaded access only>. The
+way it is done is described in L<Copy Constructor>.
+
+If some mutator methods are directly applied to the overloaded values,
+one may need to I<explicitly unlink> other values which references the
+same value:
+
+ $a = new Data 23;
+ ...
+ $b = $a; # $b is "linked" to $a
+ ...
+ $a = $a->clone; # Unlink $b from $a
+ $a->increment_by(4);
+
+Note that overloaded access makes this transparent:
+
+ $a = new Data 23;
+ $b = $a; # $b is "linked" to $a
+ $a += 4; # would unlink $b automagically
+
+However, it would not make
+
+ $a = new Data 23;
+ $a = 4; # Now $a is a plain 4, not 'Data'
+
+preserve "objectness" of $a. But Perl I<has> a way to make assignments
+to an object do whatever you want. It is just not the overload, but
+tie()ing interface (see L<perlfunc/tie>). Adding a FETCH() method
+which returns the object itself, and STORE() method which changes the
+value of the object, one can reproduce the arithmetic metaphor in its
+completeness, at least for variables which were tie()d from the start.
+
+(Note that a workaround for a bug may be needed, see L<"BUGS">.)
+
+=head1 Cookbook
+
+Please add examples to what follows!
+
+=head2 Two-face scalars
+
+Put this in F<two_face.pm> in your Perl library directory:
+
+ package two_face; # Scalars with separate string and
+ # numeric values.
+ sub new { my $p = shift; bless [@_], $p }
+ use overload '""' => \&str, '0+' => \&num, fallback => 1;
+ sub num {shift->[1]}
+ sub str {shift->[0]}
+
+Use it as follows:
+
+ require two_face;
+ my $seven = new two_face ("vii", 7);
+ printf "seven=$seven, seven=%d, eight=%d\n", $seven, $seven+1;
+ print "seven contains `i'\n" if $seven =~ /i/;
+
+(The second line creates a scalar which has both a string value, and a
+numeric value.) This prints:
+
+ seven=vii, seven=7, eight=8
+ seven contains `i'
+
+=head2 Two-face references
+
+Suppose you want to create an object which is accessible as both an
+array reference and a hash reference, similar to the
+L<pseudo-hash|perlref/"Pseudo-hashes: Using an array as a hash">
+builtin Perl type. Let's make it better than a pseudo-hash by
+allowing index 0 to be treated as a normal element.
+
+ package two_refs;
+ use overload '%{}' => \&gethash, '@{}' => sub { $ {shift()} };
+ sub new {
+ my $p = shift;
+ bless \ [@_], $p;
+ }
+ sub gethash {
+ my %h;
+ my $self = shift;
+ tie %h, ref $self, $self;
+ \%h;
+ }
+
+ sub TIEHASH { my $p = shift; bless \ shift, $p }
+ my %fields;
+ my $i = 0;
+ $fields{$_} = $i++ foreach qw{zero one two three};
+ sub STORE {
+ my $self = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $$self->[$key] = shift;
+ }
+ sub FETCH {
+ my $self = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $$self->[$key];
+ }
+
+Now one can access an object using both the array and hash syntax:
+
+ my $bar = new two_refs 3,4,5,6;
+ $bar->[2] = 11;
+ $bar->{two} == 11 or die 'bad hash fetch';
+
+Note several important features of this example. First of all, the
+I<actual> type of $bar is a scalar reference, and we do not overload
+the scalar dereference. Thus we can get the I<actual> non-overloaded
+contents of $bar by just using C<$$bar> (what we do in functions which
+overload dereference). Similarly, the object returned by the
+TIEHASH() method is a scalar reference.
+
+Second, we create a new tied hash each time the hash syntax is used.
+This allows us not to worry about a possibility of a reference loop,
+which would lead to a memory leak.
+
+Both these problems can be cured. Say, if we want to overload hash
+dereference on a reference to an object which is I<implemented> as a
+hash itself, the only problem one has to circumvent is how to access
+this I<actual> hash (as opposed to the I<virtual> hash exhibited by the
+overloaded dereference operator). Here is one possible fetching routine:
+
+ sub access_hash {
+ my ($self, $key) = (shift, shift);
+ my $class = ref $self;
+ bless $self, 'overload::dummy'; # Disable overloading of %{}
+ my $out = $self->{$key};
+ bless $self, $class; # Restore overloading
+ $out;
+ }
+
+To remove creation of the tied hash on each access, one may an extra
+level of indirection which allows a non-circular structure of references:
+
+ package two_refs1;
+ use overload '%{}' => sub { ${shift()}->[1] },
+ '@{}' => sub { ${shift()}->[0] };
+ sub new {
+ my $p = shift;
+ my $a = [@_];
+ my %h;
+ tie %h, $p, $a;
+ bless \ [$a, \%h], $p;
+ }
+ sub gethash {
+ my %h;
+ my $self = shift;
+ tie %h, ref $self, $self;
+ \%h;
+ }
+
+ sub TIEHASH { my $p = shift; bless \ shift, $p }
+ my %fields;
+ my $i = 0;
+ $fields{$_} = $i++ foreach qw{zero one two three};
+ sub STORE {
+ my $a = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $a->[$key] = shift;
+ }
+ sub FETCH {
+ my $a = ${shift()};
+ my $key = $fields{shift()};
+ defined $key or die "Out of band access";
+ $a->[$key];
+ }
+
+Now if $baz is overloaded like this, then C<$baz> is a reference to a
+reference to the intermediate array, which keeps a reference to an
+actual array, and the access hash. The tie()ing object for the access
+hash is a reference to a reference to the actual array, so
+
+=over
+
+=item *
+
+There are no loops of references.
+
+=item *
+
+Both "objects" which are blessed into the class C<two_refs1> are
+references to a reference to an array, thus references to a I<scalar>.
+Thus the accessor expression C<$$foo-E<gt>[$ind]> involves no
+overloaded operations.
+
+=back
+
+=head2 Symbolic calculator
+
+Put this in F<symbolic.pm> in your Perl library directory:
+
+ package symbolic; # Primitive symbolic calculator
+ use overload nomethod => \&wrap;
+
+ sub new { shift; bless ['n', @_] }
+ sub wrap {
+ my ($obj, $other, $inv, $meth) = @_;
+ ($obj, $other) = ($other, $obj) if $inv;
+ bless [$meth, $obj, $other];
+ }
+
+This module is very unusual as overloaded modules go: it does not
+provide any usual overloaded operators, instead it provides the L<Last
+Resort> operator C<nomethod>. In this example the corresponding
+subroutine returns an object which encapsulates operations done over
+the objects: C<new symbolic 3> contains C<['n', 3]>, C<2 + new
+symbolic 3> contains C<['+', 2, ['n', 3]]>.
+
+Here is an example of the script which "calculates" the side of
+circumscribed octagon using the above package:
+
+ require symbolic;
+ my $iter = 1; # 2**($iter+2) = 8
+ my $side = new symbolic 1;
+ my $cnt = $iter;
+
+ while ($cnt--) {
+ $side = (sqrt(1 + $side**2) - 1)/$side;
+ }
+ print "OK\n";
+
+The value of $side is
+
+ ['/', ['-', ['sqrt', ['+', 1, ['**', ['n', 1], 2]],
+ undef], 1], ['n', 1]]
+
+Note that while we obtained this value using a nice little script,
+there is no simple way to I<use> this value. In fact this value may
+be inspected in debugger (see L<perldebug>), but ony if
+C<bareStringify> B<O>ption is set, and not via C<p> command.
+
+If one attempts to print this value, then the overloaded operator
+C<""> will be called, which will call C<nomethod> operator. The
+result of this operator will be stringified again, but this result is
+again of type C<symbolic>, which will lead to an infinite loop.
+
+Add a pretty-printer method to the module F<symbolic.pm>:
+
+ sub pretty {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ $b = 'u' unless defined $b;
+ $a = $a->pretty if ref $a;
+ $b = $b->pretty if ref $b;
+ "[$meth $a $b]";
+ }
+
+Now one can finish the script by
+
+ print "side = ", $side->pretty, "\n";
+
+The method C<pretty> is doing object-to-string conversion, so it
+is natural to overload the operator C<""> using this method. However,
+inside such a method it is not necessary to pretty-print the
+I<components> $a and $b of an object. In the above subroutine
+C<"[$meth $a $b]"> is a catenation of some strings and components $a
+and $b. If these components use overloading, the catenation operator
+will look for an overloaded operator C<.>; if not present, it will
+look for an overloaded operator C<"">. Thus it is enough to use
+
+ use overload nomethod => \&wrap, '""' => \&str;
+ sub str {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ $b = 'u' unless defined $b;
+ "[$meth $a $b]";
+ }
+
+Now one can change the last line of the script to
+
+ print "side = $side\n";
+
+which outputs
+
+ side = [/ [- [sqrt [+ 1 [** [n 1 u] 2]] u] 1] [n 1 u]]
+
+and one can inspect the value in debugger using all the possible
+methods.
+
+Something is still amiss: consider the loop variable $cnt of the
+script. It was a number, not an object. We cannot make this value of
+type C<symbolic>, since then the loop will not terminate.
+
+Indeed, to terminate the cycle, the $cnt should become false.
+However, the operator C<bool> for checking falsity is overloaded (this
+time via overloaded C<"">), and returns a long string, thus any object
+of type C<symbolic> is true. To overcome this, we need a way to
+compare an object to 0. In fact, it is easier to write a numeric
+conversion routine.
+
+Here is the text of F<symbolic.pm> with such a routine added (and
+slightly modified str()):
+
+ package symbolic; # Primitive symbolic calculator
+ use overload
+ nomethod => \&wrap, '""' => \&str, '0+' => \&num;
+
+ sub new { shift; bless ['n', @_] }
+ sub wrap {
+ my ($obj, $other, $inv, $meth) = @_;
+ ($obj, $other) = ($other, $obj) if $inv;
+ bless [$meth, $obj, $other];
+ }
+ sub str {
+ my ($meth, $a, $b) = @{+shift};
+ $a = 'u' unless defined $a;
+ if (defined $b) {
+ "[$meth $a $b]";
+ } else {
+ "[$meth $a]";
+ }
+ }
+ my %subr = ( n => sub {$_[0]},
+ sqrt => sub {sqrt $_[0]},
+ '-' => sub {shift() - shift()},
+ '+' => sub {shift() + shift()},
+ '/' => sub {shift() / shift()},
+ '*' => sub {shift() * shift()},
+ '**' => sub {shift() ** shift()},
+ );
+ sub num {
+ my ($meth, $a, $b) = @{+shift};
+ my $subr = $subr{$meth}
+ or die "Do not know how to ($meth) in symbolic";
+ $a = $a->num if ref $a eq __PACKAGE__;
+ $b = $b->num if ref $b eq __PACKAGE__;
+ $subr->($a,$b);
+ }
+
+All the work of numeric conversion is done in %subr and num(). Of
+course, %subr is not complete, it contains only operators used in the
+example below. Here is the extra-credit question: why do we need an
+explicit recursion in num()? (Answer is at the end of this section.)
+
+Use this module like this:
+
+ require symbolic;
+ my $iter = new symbolic 2; # 16-gon
+ my $side = new symbolic 1;
+ my $cnt = $iter;
+
+ while ($cnt) {
+ $cnt = $cnt - 1; # Mutator `--' not implemented
+ $side = (sqrt(1 + $side**2) - 1)/$side;
+ }
+ printf "%s=%f\n", $side, $side;
+ printf "pi=%f\n", $side*(2**($iter+2));
+
+It prints (without so many line breaks)
+
+ [/ [- [sqrt [+ 1 [** [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1]
+ [n 1]] 2]]] 1]
+ [/ [- [sqrt [+ 1 [** [n 1] 2]]] 1] [n 1]]]=0.198912
+ pi=3.182598
+
+The above module is very primitive. It does not implement
+mutator methods (C<++>, C<-=> and so on), does not do deep copying
+(not required without mutators!), and implements only those arithmetic
+operations which are used in the example.
+
+To implement most arithmetic operations is easy; one should just use
+the tables of operations, and change the code which fills %subr to
+
+ my %subr = ( 'n' => sub {$_[0]} );
+ foreach my $op (split " ", $overload::ops{with_assign}) {
+ $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
+ }
+ my @bins = qw(binary 3way_comparison num_comparison str_comparison);
+ foreach my $op (split " ", "@overload::ops{ @bins }") {
+ $subr{$op} = eval "sub {shift() $op shift()}";
+ }
+ foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
+ print "defining `$op'\n";
+ $subr{$op} = eval "sub {$op shift()}";
+ }
+
+Due to L<Calling Conventions for Mutators>, we do not need anything
+special to make C<+=> and friends work, except filling C<+=> entry of
+%subr, and defining a copy constructor (needed since Perl has no
+way to know that the implementation of C<'+='> does not mutate
+the argument, compare L<Copy Constructor>).
+
+To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload>
+line, and code (this code assumes that mutators change things one level
+deep only, so recursive copying is not needed):
+
+ sub cpy {
+ my $self = shift;
+ bless [@$self], ref $self;
+ }
+
+To make C<++> and C<--> work, we need to implement actual mutators,
+either directly, or in C<nomethod>. We continue to do things inside
+C<nomethod>, thus add
+
+ if ($meth eq '++' or $meth eq '--') {
+ @$obj = ($meth, (bless [@$obj]), 1); # Avoid circular reference
+ return $obj;
+ }
+
+after the first line of wrap(). This is not a most effective
+implementation, one may consider
+
+ sub inc { $_[0] = bless ['++', shift, 1]; }
+
+instead.
+
+As a final remark, note that one can fill %subr by
+
+ my %subr = ( 'n' => sub {$_[0]} );
+ foreach my $op (split " ", $overload::ops{with_assign}) {
+ $subr{$op} = $subr{"$op="} = eval "sub {shift() $op shift()}";
+ }
+ my @bins = qw(binary 3way_comparison num_comparison str_comparison);
+ foreach my $op (split " ", "@overload::ops{ @bins }") {
+ $subr{$op} = eval "sub {shift() $op shift()}";
+ }
+ foreach my $op (split " ", "@overload::ops{qw(unary func)}") {
+ $subr{$op} = eval "sub {$op shift()}";
+ }
+ $subr{'++'} = $subr{'+'};
+ $subr{'--'} = $subr{'-'};
+
+This finishes implementation of a primitive symbolic calculator in
+50 lines of Perl code. Since the numeric values of subexpressions
+are not cached, the calculator is very slow.
+
+Here is the answer for the exercise: In the case of str(), we need no
+explicit recursion since the overloaded C<.>-operator will fall back
+to an existing overloaded operator C<"">. Overloaded arithmetic
+operators I<do not> fall back to numeric conversion if C<fallback> is
+not explicitly requested. Thus without an explicit recursion num()
+would convert C<['+', $a, $b]> to C<$a + $b>, which would just rebuild
+the argument of num().
+
+If you wonder why defaults for conversion are different for str() and
+num(), note how easy it was to write the symbolic calculator. This
+simplicity is due to an appropriate choice of defaults. One extra
+note: due to the explicit recursion num() is more fragile than sym():
+we need to explicitly check for the type of $a and $b. If components
+$a and $b happen to be of some related type, this may lead to problems.
+
+=head2 I<Really> symbolic calculator
+
+One may wonder why we call the above calculator symbolic. The reason
+is that the actual calculation of the value of expression is postponed
+until the value is I<used>.
+
+To see it in action, add a method
+
+ sub STORE {
+ my $obj = shift;
+ $#$obj = 1;
+ @$obj->[0,1] = ('=', shift);
+ }
+
+to the package C<symbolic>. After this change one can do
+
+ my $a = new symbolic 3;
+ my $b = new symbolic 4;
+ my $c = sqrt($a**2 + $b**2);
+
+and the numeric value of $c becomes 5. However, after calling
+
+ $a->STORE(12); $b->STORE(5);
+
+the numeric value of $c becomes 13. There is no doubt now that the module
+symbolic provides a I<symbolic> calculator indeed.
+
+To hide the rough edges under the hood, provide a tie()d interface to the
+package C<symbolic> (compare with L<Metaphor clash>). Add methods
+
+ sub TIESCALAR { my $pack = shift; $pack->new(@_) }
+ sub FETCH { shift }
+ sub nop { } # Around a bug
+
+(the bug is described in L<"BUGS">). One can use this new interface as
+
+ tie $a, 'symbolic', 3;
+ tie $b, 'symbolic', 4;
+ $a->nop; $b->nop; # Around a bug
+
+ my $c = sqrt($a**2 + $b**2);
+
+Now numeric value of $c is 5. After C<$a = 12; $b = 5> the numeric value
+of $c becomes 13. To insulate the user of the module add a method
+
+ sub vars { my $p = shift; tie($_, $p), $_->nop foreach @_; }
+
+Now
+
+ my ($a, $b);
+ symbolic->vars($a, $b);
+ my $c = sqrt($a**2 + $b**2);
+
+ $a = 3; $b = 4;
+ printf "c5 %s=%f\n", $c, $c;
+
+ $a = 12; $b = 5;
+ printf "c13 %s=%f\n", $c, $c;
+
+shows that the numeric value of $c follows changes to the values of $a
+and $b.
+
+=head1 AUTHOR
+
+Ilya Zakharevich E<lt>F<ilya@math.mps.ohio-state.edu>E<gt>.
+
+=head1 DIAGNOSTICS
+
+When Perl is run with the B<-Do> switch or its equivalent, overloading
+induces diagnostic messages.
+
+Using the C<m> command of Perl debugger (see L<perldebug>) one can
+deduce which operations are overloaded (and which ancestor triggers
+this overloading). Say, if C<eq> is overloaded, then the method C<(eq>
+is shown by debugger. The method C<()> corresponds to the C<fallback>
+key (in fact a presence of this method shows that this package has
+overloading enabled, and it is what is used by the C<Overloaded>
+function of module C<overload>).
+
+The module might issue the following warnings:
+
+=over 4
+
+=item Odd number of arguments for overload::constant
+
+(W) The call to overload::constant contained an odd number of arguments.
+The arguments should come in pairs.
+
+=item `%s' is not an overloadable type
+
+(W) You tried to overload a constant type the overload package is unaware of.
+
+=item `%s' is not a code reference
+
+(W) The second (fourth, sixth, ...) argument of overload::constant needs
+to be a code reference. Either an anonymous subroutine, or a reference
+to a subroutine.
+
+=back
+
+=head1 BUGS
+
+Because it is used for overloading, the per-package hash %OVERLOAD now
+has a special meaning in Perl. The symbol table is filled with names
+looking like line-noise.
+
+For the purpose of inheritance every overloaded package behaves as if
+C<fallback> is present (possibly undefined). This may create
+interesting effects if some package is not overloaded, but inherits
+from two overloaded packages.
+
+Relation between overloading and tie()ing is broken. Overloading is
+triggered or not basing on the I<previous> class of tie()d value.
+
+This happens because the presence of overloading is checked too early,
+before any tie()d access is attempted. If the FETCH()ed class of the
+tie()d value does not change, a simple workaround is to access the value
+immediately after tie()ing, so that after this call the I<previous> class
+coincides with the current one.
+
+B<Needed:> a way to fix this without a speed penalty.
+
+Barewords are not covered by overloaded string constants.
+
+This document is confusing. There are grammos and misleading language
+used in places. It would seem a total rewrite is needed.
+
+=cut
+
diff --git a/Master/tlpkg/tlperl/lib/re.pm b/Master/tlpkg/tlperl/lib/re.pm
new file mode 100644
index 00000000000..6e9d1218ef0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/re.pm
@@ -0,0 +1,134 @@
+package re;
+
+our $VERSION = 0.05;
+
+=head1 NAME
+
+re - Perl pragma to alter regular expression behaviour
+
+=head1 SYNOPSIS
+
+ use re 'taint';
+ ($x) = ($^X =~ /^(.*)$/s); # $x is tainted here
+
+ $pat = '(?{ $foo = 1 })';
+ use re 'eval';
+ /foo${pat}bar/; # won't fail (when not under -T switch)
+
+ {
+ no re 'taint'; # the default
+ ($x) = ($^X =~ /^(.*)$/s); # $x is not tainted here
+
+ no re 'eval'; # the default
+ /foo${pat}bar/; # disallowed (with or without -T switch)
+ }
+
+ use re 'debug'; # NOT lexically scoped (as others are)
+ /^(.*)$/s; # output debugging info during
+ # compile and run time
+
+ use re 'debugcolor'; # same as 'debug', but with colored output
+ ...
+
+(We use $^X in these examples because it's tainted by default.)
+
+=head1 DESCRIPTION
+
+When C<use re 'taint'> is in effect, and a tainted string is the target
+of a regex, the regex memories (or values returned by the m// operator
+in list context) are tainted. This feature is useful when regex operations
+on tainted data aren't meant to extract safe substrings, but to perform
+other transformations.
+
+When C<use re 'eval'> is in effect, a regex is allowed to contain
+C<(?{ ... })> zero-width assertions even if regular expression contains
+variable interpolation. That is normally disallowed, since it is a
+potential security risk. Note that this pragma is ignored when the regular
+expression is obtained from tainted data, i.e. evaluation is always
+disallowed with tainted regular expressions. See L<perlre/(?{ code })>.
+
+For the purpose of this pragma, interpolation of precompiled regular
+expressions (i.e., the result of C<qr//>) is I<not> considered variable
+interpolation. Thus:
+
+ /foo${pat}bar/
+
+I<is> allowed if $pat is a precompiled regular expression, even
+if $pat contains C<(?{ ... })> assertions.
+
+When C<use re 'debug'> is in effect, perl emits debugging messages when
+compiling and using regular expressions. The output is the same as that
+obtained by running a C<-DDEBUGGING>-enabled perl interpreter with the
+B<-Dr> switch. It may be quite voluminous depending on the complexity
+of the match. Using C<debugcolor> instead of C<debug> enables a
+form of output that can be used to get a colorful display on terminals
+that understand termcap color sequences. Set C<$ENV{PERL_RE_TC}> to a
+comma-separated list of C<termcap> properties to use for highlighting
+strings on/off, pre-point part on/off.
+See L<perldebug/"Debugging regular expressions"> for additional info.
+
+The directive C<use re 'debug'> is I<not lexically scoped>, as the
+other directives are. It has both compile-time and run-time effects.
+
+See L<perlmodlib/Pragmatic Modules>.
+
+=cut
+
+# N.B. File::Basename contains a literal for 'taint' as a fallback. If
+# taint is changed here, File::Basename must be updated as well.
+my %bitmask = (
+taint => 0x00100000, # HINT_RE_TAINT
+eval => 0x00200000, # HINT_RE_EVAL
+);
+
+sub setcolor {
+ eval { # Ignore errors
+ require Term::Cap;
+
+ my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning.
+ my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue';
+ my @props = split /,/, $props;
+ my $colors = join "\t", map {$terminal->Tputs($_,1)} @props;
+
+ $colors =~ s/\0//g;
+ $ENV{PERL_RE_COLORS} = $colors;
+ };
+}
+
+sub bits {
+ my $on = shift;
+ my $bits = 0;
+ unless (@_) {
+ require Carp;
+ Carp::carp("Useless use of \"re\" pragma");
+ }
+ foreach my $s (@_){
+ if ($s eq 'debug' or $s eq 'debugcolor') {
+ setcolor() if $s eq 'debugcolor';
+ require XSLoader;
+ XSLoader::load('re');
+ install() if $on;
+ uninstall() unless $on;
+ next;
+ }
+ if (exists $bitmask{$s}) {
+ $bits |= $bitmask{$s};
+ } else {
+ require Carp;
+ Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: @{[join(', ', map {qq('$_')} 'debug', 'debugcolor', sort keys %bitmask)]})");
+ }
+ }
+ $bits;
+}
+
+sub import {
+ shift;
+ $^H |= bits(1, @_);
+}
+
+sub unimport {
+ shift;
+ $^H &= ~ bits(0, @_);
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/strict.pm b/Master/tlpkg/tlperl/lib/strict.pm
new file mode 100644
index 00000000000..d14391add44
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/strict.pm
@@ -0,0 +1,136 @@
+package strict;
+
+$strict::VERSION = "1.03";
+
+my %bitmask = (
+refs => 0x00000002,
+subs => 0x00000200,
+vars => 0x00000400
+);
+
+sub bits {
+ my $bits = 0;
+ my @wrong;
+ foreach my $s (@_) {
+ push @wrong, $s unless exists $bitmask{$s};
+ $bits |= $bitmask{$s} || 0;
+ }
+ if (@wrong) {
+ require Carp;
+ Carp::croak("Unknown 'strict' tag(s) '@wrong'");
+ }
+ $bits;
+}
+
+my $default_bits = bits(qw(refs subs vars));
+
+sub import {
+ shift;
+ $^H |= @_ ? bits(@_) : $default_bits;
+}
+
+sub unimport {
+ shift;
+ $^H &= ~ (@_ ? bits(@_) : $default_bits);
+}
+
+1;
+__END__
+
+=head1 NAME
+
+strict - Perl pragma to restrict unsafe constructs
+
+=head1 SYNOPSIS
+
+ use strict;
+
+ use strict "vars";
+ use strict "refs";
+ use strict "subs";
+
+ use strict;
+ no strict "vars";
+
+=head1 DESCRIPTION
+
+If no import list is supplied, all possible restrictions are assumed.
+(This is the safest mode to operate in, but is sometimes too strict for
+casual programming.) Currently, there are three possible things to be
+strict about: "subs", "vars", and "refs".
+
+=over 6
+
+=item C<strict refs>
+
+This generates a runtime error if you
+use symbolic references (see L<perlref>).
+
+ use strict 'refs';
+ $ref = \$foo;
+ print $$ref; # ok
+ $ref = "foo";
+ print $$ref; # runtime error; normally ok
+ $file = "STDOUT";
+ print $file "Hi!"; # error; note: no comma after $file
+
+There is one exception to this rule:
+
+ $bar = \&{'foo'};
+ &$bar;
+
+is allowed so that C<goto &$AUTOLOAD> would not break under stricture.
+
+
+=item C<strict vars>
+
+This generates a compile-time error if you access a variable that wasn't
+declared via C<our> or C<use vars>,
+localized via C<my()>, or wasn't fully qualified. Because this is to avoid
+variable suicide problems and subtle dynamic scoping issues, a merely
+local() variable isn't good enough. See L<perlfunc/my> and
+L<perlfunc/local>.
+
+ use strict 'vars';
+ $X::foo = 1; # ok, fully qualified
+ my $foo = 10; # ok, my() var
+ local $foo = 9; # blows up
+
+ package Cinna;
+ our $bar; # Declares $bar in current package
+ $bar = 'HgS'; # ok, global declared via pragma
+
+The local() generated a compile-time error because you just touched a global
+name without fully qualifying it.
+
+Because of their special use by sort(), the variables $a and $b are
+exempted from this check.
+
+=item C<strict subs>
+
+This disables the poetry optimization, generating a compile-time error if
+you try to use a bareword identifier that's not a subroutine, unless it
+is a simple identifier (no colons) and that it appears in curly braces or
+on the left hand side of the C<< => >> symbol.
+
+ use strict 'subs';
+ $SIG{PIPE} = Plumber; # blows up
+ $SIG{PIPE} = "Plumber"; # just fine: quoted string is always ok
+ $SIG{PIPE} = \&Plumber; # preferred form
+
+=back
+
+See L<perlmodlib/Pragmatic Modules>.
+
+=head1 HISTORY
+
+C<strict 'subs'>, with Perl 5.6.1, erroneously permitted to use an unquoted
+compound identifier (e.g. C<Foo::Bar>) as a hash key (before C<< => >> or
+inside curlies), but without forcing it always to a literal string.
+
+Starting with Perl 5.8.1 strict is strict about its restrictions:
+if unknown restrictions are used, the strict pragma will abort with
+
+ Unknown 'strict' tag(s) '...'
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/subs.pm b/Master/tlpkg/tlperl/lib/subs.pm
new file mode 100644
index 00000000000..e5a9aa8827d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/subs.pm
@@ -0,0 +1,40 @@
+package subs;
+
+our $VERSION = '1.00';
+
+=head1 NAME
+
+subs - Perl pragma to predeclare sub names
+
+=head1 SYNOPSIS
+
+ use subs qw(frob);
+ frob 3..10;
+
+=head1 DESCRIPTION
+
+This will predeclare all the subroutine whose names are
+in the list, allowing you to use them without parentheses
+even before they're declared.
+
+Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
+C<use subs> declarations are not BLOCK-scoped. They are thus effective
+for the entire file in which they appear. You may not rescind such
+declarations with C<no vars> or C<no subs>.
+
+See L<perlmodlib/Pragmatic Modules> and L<strict/strict subs>.
+
+=cut
+
+require 5.000;
+
+sub import {
+ my $callpack = caller;
+ my $pack = shift;
+ my @imports = @_;
+ foreach $sym (@imports) {
+ *{"${callpack}::$sym"} = \&{"${callpack}::$sym"};
+ }
+};
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/unicore/ArabicShaping.txt b/Master/tlpkg/tlperl/lib/unicore/ArabicShaping.txt
new file mode 100644
index 00000000000..ec2e0241012
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/ArabicShaping.txt
@@ -0,0 +1,299 @@
+# ArabicShaping-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# This file defines the shaping classes for Arabic and Syriac
+# positional shaping, repeating in machine readable form the
+# information printed in Tables 8-3, 8-7, 8-8, 8-11, 8-12, and
+# 8-13 of The Unicode Standard, Version 4.0.
+#
+# See sections 8.2 and 8.3 of The Unicode Standard, Version 4.0
+# for more information.
+#
+# Each line contains four fields, separated by a semicolon.
+#
+# Field 0: the code point, in 4-digit hexadecimal
+# form, of an Arabic or Syriac character.
+# Field 1: gives a short schematic name for that character,
+# abbreviated from the normative Unicode character name.
+# Field 2: defines the joining type (property name: Joining_Type)
+# R Right_Joining
+# L Left_Joining
+# D Dual_Joining
+# C Join_Causing
+# U Non_Joining
+# T Transparent
+# See the Arabic block description for more information on these types.
+# Field 3: defines the joining group (property name: Joining_Group)
+#
+# The values of the joining group are based schematically on character
+# names. Where a schematic character name consists of two or more parts separated
+# by spaces, the formal Joining_Group property value, as specified in
+# PropertyValueAliases.txt, consists of the same name parts joined by
+# underscores. Hence, the entry:
+#
+# 0629; TEH MARBUTA; R; TEH MARBUTA
+#
+# corresponds to [Joining_Group = Teh_Marbuta].
+#
+# Note: For historical reasons, the property value [Joining_Group = Hamza_On_Heh_Goal]
+# is anachronistically named. It used to apply to both of the following characters
+# in earlier versions of the standard:
+#
+# U+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+# U+06C3 ARABIC LETTER TEH MARBUTA GOAL
+#
+# However, it currently applies only to U+06C3, and *not* to U+06C2.
+# To avoid destabilizing existing Joining_Group property aliases, the
+# value Hamza_On_Heh_Goal has not been changed, despite the fact that it
+# no longer applies to Hamza On Heh Goal, but only to Teh Marbuta Goal.
+#
+# Note: Code points that are not explicitly listed in this file are
+# either of joining type T or U:
+#
+# - Those that not explicitly listed that are of General Category Mn, Me, or Cf
+# have joining type T.
+# - All others not explicitly listed have type U.
+#
+# For an explicit listing of characters of joining type T, see
+# the derived property file DerivedJoiningType.txt.
+#
+# There are currently no characters of type L defined in Unicode.
+#
+# #############################################################
+
+# Unicode; Schematic Name; Joining Type; Joining Group
+
+# Arabic characters
+
+0600; ARABIC NUMBER SIGN; U; No_Joining_Group
+0601; ARABIC SIGN SANAH; U; No_Joining_Group
+0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group
+0603; ARABIC SIGN SAFHA; U; No_Joining_Group
+060B; AFGHANI SIGN; U; No_Joining_Group
+0621; HAMZA; U; No_Joining_Group
+0622; MADDA ON ALEF; R; ALEF
+0623; HAMZA ON ALEF; R; ALEF
+0624; HAMZA ON WAW; R; WAW
+0625; HAMZA UNDER ALEF; R; ALEF
+0626; HAMZA ON YEH; D; YEH
+0627; ALEF; R; ALEF
+0628; BEH; D; BEH
+0629; TEH MARBUTA; R; TEH MARBUTA
+062A; TEH; D; BEH
+062B; THEH; D; BEH
+062C; JEEM; D; HAH
+062D; HAH; D; HAH
+062E; KHAH; D; HAH
+062F; DAL; R; DAL
+0630; THAL; R; DAL
+0631; REH; R; REH
+0632; ZAIN; R; REH
+0633; SEEN; D; SEEN
+0634; SHEEN; D; SEEN
+0635; SAD; D; SAD
+0636; DAD; D; SAD
+0637; TAH; D; TAH
+0638; ZAH; D; TAH
+0639; AIN; D; AIN
+063A; GHAIN; D; AIN
+0640; TATWEEL; C; No_Joining_Group
+0641; FEH; D; FEH
+0642; QAF; D; QAF
+0643; KAF; D; KAF
+0644; LAM; D; LAM
+0645; MEEM; D; MEEM
+0646; NOON; D; NOON
+0647; HEH; D; HEH
+0648; WAW; R; WAW
+0649; ALEF MAKSURA; D; YEH
+064A; YEH; D; YEH
+066E; DOTLESS BEH; D; BEH
+066F; DOTLESS QAF; D; QAF
+0671; HAMZAT WASL ON ALEF; R; ALEF
+0672; WAVY HAMZA ON ALEF; R; ALEF
+0673; WAVY HAMZA UNDER ALEF; R; ALEF
+0674; HIGH HAMZA; U; No_Joining_Group
+0675; HIGH HAMZA ALEF; R; ALEF
+0676; HIGH HAMZA WAW; R; WAW
+0677; HIGH HAMZA WAW WITH DAMMA; R; WAW
+0678; HIGH HAMZA YEH; D; YEH
+0679; TEH WITH SMALL TAH; D; BEH
+067A; TEH WITH 2 DOTS VERTICAL ABOVE; D; BEH
+067B; BEH WITH 2 DOTS VERTICAL BELOW; D; BEH
+067C; TEH WITH RING; D; BEH
+067D; TEH WITH 3 DOTS ABOVE DOWNWARD; D; BEH
+067E; TEH WITH 3 DOTS BELOW; D; BEH
+067F; TEH WITH 4 DOTS ABOVE; D; BEH
+0680; BEH WITH 4 DOTS BELOW; D; BEH
+0681; HAMZA ON HAH; D; HAH
+0682; HAH WITH 2 DOTS VERTICAL ABOVE; D; HAH
+0683; HAH WITH MIDDLE 2 DOTS; D; HAH
+0684; HAH WITH MIDDLE 2 DOTS VERTICAL; D; HAH
+0685; HAH WITH 3 DOTS ABOVE; D; HAH
+0686; HAH WITH MIDDLE 3 DOTS DOWNWARD; D; HAH
+0687; HAH WITH MIDDLE 4 DOTS; D; HAH
+0688; DAL WITH SMALL TAH; R; DAL
+0689; DAL WITH RING; R; DAL
+068A; DAL WITH DOT BELOW; R; DAL
+068B; DAL WITH DOT BELOW AND SMALL TAH; R; DAL
+068C; DAL WITH 2 DOTS ABOVE; R; DAL
+068D; DAL WITH 2 DOTS BELOW; R; DAL
+068E; DAL WITH 3 DOTS ABOVE; R; DAL
+068F; DAL WITH 3 DOTS ABOVE DOWNWARD; R; DAL
+0690; DAL WITH 4 DOTS ABOVE; R; DAL
+0691; REH WITH SMALL TAH; R; REH
+0692; REH WITH SMALL V; R; REH
+0693; REH WITH RING; R; REH
+0694; REH WITH DOT BELOW; R; REH
+0695; REH WITH SMALL V BELOW; R; REH
+0696; REH WITH DOT BELOW AND DOT ABOVE; R; REH
+0697; REH WITH 2 DOTS ABOVE; R; REH
+0698; REH WITH 3 DOTS ABOVE; R; REH
+0699; REH WITH 4 DOTS ABOVE; R; REH
+069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN
+069B; SEEN WITH 3 DOTS BELOW; D; SEEN
+069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN
+069D; SAD WITH 2 DOTS BELOW; D; SAD
+069E; SAD WITH 3 DOTS ABOVE; D; SAD
+069F; TAH WITH 3 DOTS ABOVE; D; TAH
+06A0; AIN WITH 3 DOTS ABOVE; D; AIN
+06A1; DOTLESS FEH; D; FEH
+06A2; FEH WITH DOT MOVED BELOW; D; FEH
+06A3; FEH WITH DOT BELOW; D; FEH
+06A4; FEH WITH 3 DOTS ABOVE; D; FEH
+06A5; FEH WITH 3 DOTS BELOW; D; FEH
+06A6; FEH WITH 4 DOTS ABOVE; D; FEH
+06A7; QAF WITH DOT ABOVE; D; QAF
+06A8; QAF WITH 3 DOTS ABOVE; D; QAF
+06A9; KEHEH; D; GAF
+06AA; SWASH KAF; D; SWASH KAF
+06AB; KAF WITH RING; D; GAF
+06AC; KAF WITH DOT ABOVE; D; KAF
+06AD; KAF WITH 3 DOTS ABOVE; D; KAF
+06AE; KAF WITH 3 DOTS BELOW; D; KAF
+06AF; GAF; D; GAF
+06B0; GAF WITH RING; D; GAF
+06B1; GAF WITH 2 DOTS ABOVE; D; GAF
+06B2; GAF WITH 2 DOTS BELOW; D; GAF
+06B3; GAF WITH 2 DOTS VERTICAL BELOW; D; GAF
+06B4; GAF WITH 3 DOTS ABOVE; D; GAF
+06B5; LAM WITH SMALL V; D; LAM
+06B6; LAM WITH DOT ABOVE; D; LAM
+06B7; LAM WITH 3 DOTS ABOVE; D; LAM
+06B8; LAM WITH 3 DOTS BELOW; D; LAM
+06B9; NOON WITH DOT BELOW; D; NOON
+06BA; DOTLESS NOON; D; NOON
+06BB; DOTLESS NOON WITH SMALL TAH; D; NOON
+06BC; NOON WITH RING; D; NOON
+06BD; NOON WITH 3 DOTS ABOVE; D; NOON
+06BE; KNOTTED HEH; D; KNOTTED HEH
+06BF; HAH WITH MIDDLE 3 DOTS DOWNWARD AND DOT ABOVE; D; HAH
+06C0; HAMZA ON HEH; R; TEH MARBUTA
+06C1; HEH GOAL; D; HEH GOAL
+06C2; HAMZA ON HEH GOAL; D; HEH GOAL
+06C3; TEH MARBUTA GOAL; R; HAMZA ON HEH GOAL
+06C4; WAW WITH RING; R; WAW
+06C5; WAW WITH BAR; R; WAW
+06C6; WAW WITH SMALL V; R; WAW
+06C7; WAW WITH DAMMA; R; WAW
+06C8; WAW WITH ALEF ABOVE; R; WAW
+06C9; WAW WITH INVERTED SMALL V; R; WAW
+06CA; WAW WITH 2 DOTS ABOVE; R; WAW
+06CB; WAW WITH 3 DOTS ABOVE; R; WAW
+06CC; DOTLESS YEH; D; YEH
+06CD; YEH WITH TAIL; R; YEH WITH TAIL
+06CE; YEH WITH SMALL V; D; YEH
+06CF; WAW WITH DOT ABOVE; R; WAW
+06D0; YEH WITH 2 DOTS VERTICAL BELOW; D; YEH
+06D1; YEH WITH 3 DOTS BELOW; D; YEH
+06D2; YEH BARREE; R; YEH BARREE
+06D3; HAMZA ON YEH BARREE; R; YEH BARREE
+06D5; AE; R; TEH MARBUTA
+06DD; ARABIC END OF AYAH; U; No_Joining_Group
+06EE; DAL WITH INVERTED V; R; DAL
+06EF; REH WITH INVERTED V; R; REH
+06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN
+06FB; DAD WITH DOT BELOW; D; SAD
+06FC; GHAIN WITH DOT BELOW; D; AIN
+06FF; HEH WITH INVERTED V; D; KNOTTED HEH
+
+# Syriac characters
+
+0710; ALAPH; R; ALAPH
+0712; BETH; D; BETH
+0713; GAMAL; D; GAMAL
+0714; GAMAL GARSHUNI; D; GAMAL
+0715; DALATH; R; DALATH RISH
+0716; DOTLESS DALATH RISH; R; DALATH RISH
+0717; HE; R; HE
+0718; WAW; R; SYRIAC WAW
+0719; ZAIN; R; ZAIN
+071A; HETH; D; HETH
+071B; TETH; D; TETH
+071C; TETH GARSHUNI; D; TETH
+071D; YUDH; D; YUDH
+071E; YUDH HE; R; YUDH HE
+071F; KAPH; D; KAPH
+0720; LAMADH; D; LAMADH
+0721; MIM; D; MIM
+0722; NUN; D; NUN
+0723; SEMKATH; D; SEMKATH
+0724; FINAL SEMKATH; D; FINAL SEMKATH
+0725; E; D; E
+0726; PE; D; PE
+0727; REVERSED PE; D; REVERSED PE
+0728; SADHE; R; SADHE
+0729; QAPH; D; QAPH
+072A; RISH; R; DALATH RISH
+072B; SHIN; D; SHIN
+072C; TAW; R; TAW
+072D; PERSIAN BHETH; D; BETH
+072E; PERSIAN GHAMAL; D; GAMAL
+072F; PERSIAN DHALATH; R; DALATH RISH
+074D; SOGDIAN ZHAIN; R; ZHAIN
+074E; SOGDIAN KHAPH; D; KHAPH
+074F; SOGDIAN FE; D; FE
+
+# Arabic supplement characters
+
+0750; BEH WITH 3 DOTS HORIZONTALLY BELOW; D; BEH
+0751; BEH WITH DOT BELOW AND 3 DOTS ABOVE; D; BEH
+0752; BEH WITH 3 DOTS POINTING UPWARDS BELOW; D; BEH
+0753; BEH WITH 3 DOTS POINTING UPWARDS BELOW AND 2 DOTS ABOVE; D; BEH
+0754; BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH
+0755; BEH WITH INVERTED SMALL V BELOW; D; BEH
+0756; BEH WITH SMALL V; D; BEH
+0757; HAH WITH 2 DOTS ABOVE; D; HAH
+0758; HAH WITH 3 DOTS POINTING UPWARDS BELOW; D; HAH
+0759; DAL WITH 2 DOTS VERTICALLY BELOW AND SMALL TAH; R; DAL
+075A; DAL WITH INVERTED SMALL V BELOW; R; DAL
+075B; REH WITH STROKE; R; REH
+075C; SEEN WITH 4 DOTS ABOVE; D; SEEN
+075D; AIN WITH 2 DOTS ABOVE; D; AIN
+075E; AIN WITH 3 DOTS POINTING DOWNWARDS ABOVE; D; AIN
+075F; AIN WITH 2 DOTS VERTICALLY ABOVE; D; AIN
+0760; FEH WITH 2 DOTS BELOW; D; FEH
+0761; FEH WITH 3 DOTS POINTING UPWARDS BELOW; D; FEH
+0762; KEHEH WITH DOT ABOVE; D; GAF
+0763; KEHEH WITH 3 DOTS ABOVE; D; GAF
+0764; KEHEH WITH 3 DOTS POINTING UPWARDS BELOW; D; GAF
+0765; MEEM WITH DOT ABOVE; D; MEEM
+0766; MEEM WITH DOT BELOW; D; MEEM
+0767; NOON WITH 2 DOTS BELOW; D; NOON
+0768; NOON WITH SMALL TAH; D; NOON
+0769; NOON WITH SMALL V; D; NOON
+076A; LAM WITH BAR; D; LAM
+076B; REH WITH 2 DOTS VERTICALLY ABOVE; R; REH
+076C; REH WITH HAMZA ABOVE; R; REH
+076D; SEEN WITH 2 DOTS VERTICALLY ABOVE; D; SEEN
+
+# Other
+
+200D; ZERO WIDTH JOINER; C; No_Joining_Group
+200C; ZERO WIDTH NON-JOINER; U; No_Joining_Group
diff --git a/Master/tlpkg/tlperl/lib/unicore/BidiMirroring.txt b/Master/tlpkg/tlperl/lib/unicore/BidiMirroring.txt
new file mode 100644
index 00000000000..45167fbb99c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/BidiMirroring.txt
@@ -0,0 +1,550 @@
+# BidiMirroring-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# Bidi_Mirroring_Glyph Property
+#
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# This data file lists characters that have the mirrored property
+# where there is another Unicode character that typically has a glyph
+# that is the mirror image of the original character's glyph.
+# The repertoire covered by the file is Unicode 4.1.0.
+#
+# The file contains a list of lines with mappings from one code point
+# to another one for character-based mirroring.
+# Note that for "real" mirroring, a rendering engine needs to select
+# appropriate alternative glyphs, and that many Unicode characters do not
+# have a mirror-image Unicode character.
+#
+# Each mapping line contains two fields, separated by a semicolon (';').
+# Each of the two fields contains a code point represented as a
+# variable-length hexadecimal value with 4 to 6 digits.
+# A comment indicates where the characters are "BEST FIT" mirroring.
+#
+# Code points with the "mirrored" property but no appropriate mirrors are
+# listed as comments at the end of the file.
+#
+# For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
+# at http://www.unicode.org/unicode/reports/tr9/
+#
+# This file was originally created by Markus Scherer.
+# Extended for Unicode 3.2, 4.0, and 4.1 by Ken Whistler.
+#
+# ############################################################
+
+0028; 0029 # LEFT PARENTHESIS
+0029; 0028 # RIGHT PARENTHESIS
+003C; 003E # LESS-THAN SIGN
+003E; 003C # GREATER-THAN SIGN
+005B; 005D # LEFT SQUARE BRACKET
+005D; 005B # RIGHT SQUARE BRACKET
+007B; 007D # LEFT CURLY BRACKET
+007D; 007B # RIGHT CURLY BRACKET
+00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+2045; 2046 # LEFT SQUARE BRACKET WITH QUILL
+2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL
+207D; 207E # SUPERSCRIPT LEFT PARENTHESIS
+207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS
+208D; 208E # SUBSCRIPT LEFT PARENTHESIS
+208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
+2208; 220B # ELEMENT OF
+2209; 220C # NOT AN ELEMENT OF
+220A; 220D # SMALL ELEMENT OF
+220B; 2208 # CONTAINS AS MEMBER
+220C; 2209 # DOES NOT CONTAIN AS MEMBER
+220D; 220A # SMALL CONTAINS AS MEMBER
+2215; 29F5 # DIVISION SLASH
+223C; 223D # TILDE OPERATOR
+223D; 223C # REVERSED TILDE
+2243; 22CD # ASYMPTOTICALLY EQUAL TO
+2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254; 2255 # COLON EQUALS
+2255; 2254 # EQUALS COLON
+2264; 2265 # LESS-THAN OR EQUAL TO
+2265; 2264 # GREATER-THAN OR EQUAL TO
+2266; 2267 # LESS-THAN OVER EQUAL TO
+2267; 2266 # GREATER-THAN OVER EQUAL TO
+2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
+2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
+226A; 226B # MUCH LESS-THAN
+226B; 226A # MUCH GREATER-THAN
+226E; 226F # [BEST FIT] NOT LESS-THAN
+226F; 226E # [BEST FIT] NOT GREATER-THAN
+2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
+2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
+2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO
+2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
+2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
+2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276; 2277 # LESS-THAN OR GREATER-THAN
+2277; 2276 # GREATER-THAN OR LESS-THAN
+2278; 2279 # NEITHER LESS-THAN NOR GREATER-THAN
+2279; 2278 # NEITHER GREATER-THAN NOR LESS-THAN
+227A; 227B # PRECEDES
+227B; 227A # SUCCEEDS
+227C; 227D # PRECEDES OR EQUAL TO
+227D; 227C # SUCCEEDS OR EQUAL TO
+227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO
+227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
+2280; 2281 # [BEST FIT] DOES NOT PRECEDE
+2281; 2280 # [BEST FIT] DOES NOT SUCCEED
+2282; 2283 # SUBSET OF
+2283; 2282 # SUPERSET OF
+2284; 2285 # [BEST FIT] NOT A SUBSET OF
+2285; 2284 # [BEST FIT] NOT A SUPERSET OF
+2286; 2287 # SUBSET OF OR EQUAL TO
+2287; 2286 # SUPERSET OF OR EQUAL TO
+2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
+2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
+228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
+228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
+228F; 2290 # SQUARE IMAGE OF
+2290; 228F # SQUARE ORIGINAL OF
+2291; 2292 # SQUARE IMAGE OF OR EQUAL TO
+2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO
+2298; 29B8 # CIRCLED DIVISION SLASH
+22A2; 22A3 # RIGHT TACK
+22A3; 22A2 # LEFT TACK
+22A6; 2ADE # ASSERTION
+22A8; 2AE4 # TRUE
+22A9; 2AE3 # FORCES
+22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0; 22B1 # PRECEDES UNDER RELATION
+22B1; 22B0 # SUCCEEDS UNDER RELATION
+22B2; 22B3 # NORMAL SUBGROUP OF
+22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP
+22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO
+22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6; 22B7 # ORIGINAL OF
+22B7; 22B6 # IMAGE OF
+22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB; 22CC # LEFT SEMIDIRECT PRODUCT
+22CC; 22CB # RIGHT SEMIDIRECT PRODUCT
+22CD; 2243 # REVERSED TILDE EQUALS
+22D0; 22D1 # DOUBLE SUBSET
+22D1; 22D0 # DOUBLE SUPERSET
+22D6; 22D7 # LESS-THAN WITH DOT
+22D7; 22D6 # GREATER-THAN WITH DOT
+22D8; 22D9 # VERY MUCH LESS-THAN
+22D9; 22D8 # VERY MUCH GREATER-THAN
+22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC; 22DD # EQUAL TO OR LESS-THAN
+22DD; 22DC # EQUAL TO OR GREATER-THAN
+22DE; 22DF # EQUAL TO OR PRECEDES
+22DF; 22DE # EQUAL TO OR SUCCEEDS
+22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL
+22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL
+22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
+22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
+22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
+22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
+22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
+22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
+22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF
+22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS
+22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F6; 22FD # ELEMENT OF WITH OVERBAR
+22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR
+22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD; 22F6 # CONTAINS WITH OVERBAR
+22FE; 22F7 # SMALL CONTAINS WITH OVERBAR
+2308; 2309 # LEFT CEILING
+2309; 2308 # RIGHT CEILING
+230A; 230B # LEFT FLOOR
+230B; 230A # RIGHT FLOOR
+2329; 232A # LEFT-POINTING ANGLE BRACKET
+232A; 2329 # RIGHT-POINTING ANGLE BRACKET
+2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET
+2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET
+2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+27C3; 27C4 # OPEN SUBSET
+27C4; 27C3 # OPEN SUPERSET
+27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER
+27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER
+27D5; 27D6 # LEFT OUTER JOIN
+27D6; 27D5 # RIGHT OUTER JOIN
+27DD; 27DE # LONG RIGHT TACK
+27DE; 27DD # LONG LEFT TACK
+27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK
+27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET
+27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+2983; 2984 # LEFT WHITE CURLY BRACKET
+2984; 2983 # RIGHT WHITE CURLY BRACKET
+2985; 2986 # LEFT WHITE PARENTHESIS
+2986; 2985 # RIGHT WHITE PARENTHESIS
+2987; 2988 # Z NOTATION LEFT IMAGE BRACKET
+2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET
+2989; 298A # Z NOTATION LEFT BINDING BRACKET
+298A; 2989 # Z NOTATION RIGHT BINDING BRACKET
+298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR
+298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991; 2992 # LEFT ANGLE BRACKET WITH DOT
+2992; 2991 # RIGHT ANGLE BRACKET WITH DOT
+2993; 2994 # LEFT ARC LESS-THAN BRACKET
+2994; 2993 # RIGHT ARC GREATER-THAN BRACKET
+2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET
+2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET
+29B8; 2298 # CIRCLED REVERSE SOLIDUS
+29C0; 29C1 # CIRCLED LESS-THAN
+29C1; 29C0 # CIRCLED GREATER-THAN
+29C4; 29C5 # SQUARED RISING DIAGONAL SLASH
+29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH
+29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK
+29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK
+29D4; 29D5 # TIMES WITH LEFT HALF BLACK
+29D5; 29D4 # TIMES WITH RIGHT HALF BLACK
+29D8; 29D9 # LEFT WIGGLY FENCE
+29D9; 29D8 # RIGHT WIGGLY FENCE
+29DA; 29DB # LEFT DOUBLE WIGGLY FENCE
+29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE
+29F5; 2215 # REVERSE SOLIDUS OPERATOR
+29F8; 29F9 # BIG SOLIDUS
+29F9; 29F8 # BIG REVERSE SOLIDUS
+29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET
+29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET
+2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS
+2A2C; 2A2B # MINUS SIGN WITH RISING DOTS
+2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE
+2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A3C; 2A3D # INTERIOR PRODUCT
+2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT
+2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION
+2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE
+2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE
+2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO
+2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO
+2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN
+2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN
+2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2AA1; 2AA2 # DOUBLE NESTED LESS-THAN
+2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN
+2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE
+2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE
+2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA; 2AAB # SMALLER THAN
+2AAB; 2AAA # LARGER THAN
+2AAC; 2AAD # SMALLER THAN OR EQUAL TO
+2AAD; 2AAC # LARGER THAN OR EQUAL TO
+2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN
+2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN
+2ABB; 2ABC # DOUBLE PRECEDES
+2ABC; 2ABB # DOUBLE SUCCEEDS
+2ABD; 2ABE # SUBSET WITH DOT
+2ABE; 2ABD # SUPERSET WITH DOT
+2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW
+2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW
+2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN
+2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN
+2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR
+2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF; 2AD0 # CLOSED SUBSET
+2AD0; 2ACF # CLOSED SUPERSET
+2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO
+2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO
+2AD3; 2AD4 # SUBSET ABOVE SUPERSET
+2AD4; 2AD3 # SUPERSET ABOVE SUBSET
+2AD5; 2AD6 # SUBSET ABOVE SUBSET
+2AD6; 2AD5 # SUPERSET ABOVE SUPERSET
+2ADE; 22A6 # SHORT LEFT TACK
+2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AEC; 2AED # DOUBLE STROKE NOT SIGN
+2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN
+2AF7; 2AF8 # TRIPLE NESTED LESS-THAN
+2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN
+2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2E02; 2E03 # LEFT SUBSTITUTION BRACKET
+2E03; 2E02 # RIGHT SUBSTITUTION BRACKET
+2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET
+2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET
+2E09; 2E0A # LEFT TRANSPOSITION BRACKET
+2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET
+2E0C; 2E0D # LEFT RAISED OMISSION BRACKET
+2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET
+2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET
+2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET
+3008; 3009 # LEFT ANGLE BRACKET
+3009; 3008 # RIGHT ANGLE BRACKET
+300A; 300B # LEFT DOUBLE ANGLE BRACKET
+300B; 300A # RIGHT DOUBLE ANGLE BRACKET
+300C; 300D # [BEST FIT] LEFT CORNER BRACKET
+300D; 300C # [BEST FIT] RIGHT CORNER BRACKET
+300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET
+300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET
+3010; 3011 # LEFT BLACK LENTICULAR BRACKET
+3011; 3010 # RIGHT BLACK LENTICULAR BRACKET
+3014; 3015 # LEFT TORTOISE SHELL BRACKET
+3015; 3014 # RIGHT TORTOISE SHELL BRACKET
+3016; 3017 # LEFT WHITE LENTICULAR BRACKET
+3017; 3016 # RIGHT WHITE LENTICULAR BRACKET
+3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET
+3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET
+301A; 301B # LEFT WHITE SQUARE BRACKET
+301B; 301A # RIGHT WHITE SQUARE BRACKET
+FF08; FF09 # FULLWIDTH LEFT PARENTHESIS
+FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS
+FF1C; FF1E # FULLWIDTH LESS-THAN SIGN
+FF1E; FF1C # FULLWIDTH GREATER-THAN SIGN
+FF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET
+FF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET
+FF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET
+FF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET
+FF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
+FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
+
+# The following characters have no appropriate mirroring character.
+# For these characters it is up to the rendering system
+# to provide mirrored glyphs.
+
+# 2140; DOUBLE-STRUCK N-ARY SUMMATION
+# 2201; COMPLEMENT
+# 2202; PARTIAL DIFFERENTIAL
+# 2203; THERE EXISTS
+# 2204; THERE DOES NOT EXIST
+# 2211; N-ARY SUMMATION
+# 2216; SET MINUS
+# 221A; SQUARE ROOT
+# 221B; CUBE ROOT
+# 221C; FOURTH ROOT
+# 221D; PROPORTIONAL TO
+# 221F; RIGHT ANGLE
+# 2220; ANGLE
+# 2221; MEASURED ANGLE
+# 2222; SPHERICAL ANGLE
+# 2224; DOES NOT DIVIDE
+# 2226; NOT PARALLEL TO
+# 222B; INTEGRAL
+# 222C; DOUBLE INTEGRAL
+# 222D; TRIPLE INTEGRAL
+# 222E; CONTOUR INTEGRAL
+# 222F; SURFACE INTEGRAL
+# 2230; VOLUME INTEGRAL
+# 2231; CLOCKWISE INTEGRAL
+# 2232; CLOCKWISE CONTOUR INTEGRAL
+# 2233; ANTICLOCKWISE CONTOUR INTEGRAL
+# 2239; EXCESS
+# 223B; HOMOTHETIC
+# 223E; INVERTED LAZY S
+# 223F; SINE WAVE
+# 2240; WREATH PRODUCT
+# 2241; NOT TILDE
+# 2242; MINUS TILDE
+# 2244; NOT ASYMPTOTICALLY EQUAL TO
+# 2245; APPROXIMATELY EQUAL TO
+# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+# 2248; ALMOST EQUAL TO
+# 2249; NOT ALMOST EQUAL TO
+# 224A; ALMOST EQUAL OR EQUAL TO
+# 224B; TRIPLE TILDE
+# 224C; ALL EQUAL TO
+# 225F; QUESTIONED EQUAL TO
+# 2260; NOT EQUAL TO
+# 2262; NOT IDENTICAL TO
+# 228C; MULTISET
+# 22A7; MODELS
+# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE
+# 22AC; DOES NOT PROVE
+# 22AD; NOT TRUE
+# 22AE; DOES NOT FORCE
+# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+# 22B8; MULTIMAP
+# 22BE; RIGHT ANGLE WITH ARC
+# 22BF; RIGHT TRIANGLE
+# 22F5; ELEMENT OF WITH DOT ABOVE
+# 22F8; ELEMENT OF WITH UNDERBAR
+# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES
+# 22FF; Z NOTATION BAG MEMBERSHIP
+# 2320; TOP HALF INTEGRAL
+# 2321; BOTTOM HALF INTEGRAL
+# 27C0; THREE DIMENSIONAL ANGLE
+# 27D3; LOWER RIGHT CORNER WITH DOT
+# 27D4; UPPER LEFT CORNER WITH DOT
+# 27DC; LEFT MULTIMAP
+# 299B; MEASURED ANGLE OPENING LEFT
+# 299C; RIGHT ANGLE VARIANT WITH SQUARE
+# 299D; MEASURED RIGHT ANGLE WITH DOT
+# 299E; ANGLE WITH S INSIDE
+# 299F; ACUTE ANGLE
+# 29A0; SPHERICAL ANGLE OPENING LEFT
+# 29A1; SPHERICAL ANGLE OPENING UP
+# 29A2; TURNED ANGLE
+# 29A3; REVERSED ANGLE
+# 29A4; ANGLE WITH UNDERBAR
+# 29A5; REVERSED ANGLE WITH UNDERBAR
+# 29A6; OBLIQUE ANGLE OPENING UP
+# 29A7; OBLIQUE ANGLE OPENING DOWN
+# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+# 29C9; TWO JOINED SQUARES
+# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+# 29DC; INCOMPLETE INFINITY
+# 29E1; INCREASES AS
+# 29E3; EQUALS SIGN AND SLANTED PARALLEL
+# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+# 29E5; IDENTICAL TO AND SLANTED PARALLEL
+# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+# 29F4; RULE-DELAYED
+# 29F6; SOLIDUS WITH OVERBAR
+# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE
+# 2A0A; MODULO TWO SUM
+# 2A0B; SUMMATION WITH INTEGRAL
+# 2A0C; QUADRUPLE INTEGRAL OPERATOR
+# 2A0D; FINITE PART INTEGRAL
+# 2A0E; INTEGRAL WITH DOUBLE STROKE
+# 2A0F; INTEGRAL AVERAGE WITH SLASH
+# 2A10; CIRCULATION FUNCTION
+# 2A11; ANTICLOCKWISE INTEGRATION
+# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE
+# 2A15; INTEGRAL AROUND A POINT OPERATOR
+# 2A16; QUATERNION INTEGRAL OPERATOR
+# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+# 2A18; INTEGRAL WITH TIMES SIGN
+# 2A19; INTEGRAL WITH INTERSECTION
+# 2A1A; INTEGRAL WITH UNION
+# 2A1B; INTEGRAL WITH OVERBAR
+# 2A1C; INTEGRAL WITH UNDERBAR
+# 2A1E; LARGE LEFT TRIANGLE OPERATOR
+# 2A1F; Z NOTATION SCHEMA COMPOSITION
+# 2A20; Z NOTATION SCHEMA PIPING
+# 2A21; Z NOTATION SCHEMA PROJECTION
+# 2A24; PLUS SIGN WITH TILDE ABOVE
+# 2A26; PLUS SIGN WITH TILDE BELOW
+# 2A29; MINUS SIGN WITH COMMA ABOVE
+# 2A3E; Z NOTATION RELATIONAL COMPOSITION
+# 2A57; SLOPING LARGE OR
+# 2A58; SLOPING LARGE AND
+# 2A6A; TILDE OPERATOR WITH DOT ABOVE
+# 2A6B; TILDE OPERATOR WITH RISING DOTS
+# 2A6C; SIMILAR MINUS SIMILAR
+# 2A6D; CONGRUENT WITH DOT ABOVE
+# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+# 2A70; APPROXIMATELY EQUAL OR EQUAL TO
+# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR
+# 2A74; DOUBLE COLON EQUAL
+# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE
+# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE
+# 2A85; LESS-THAN OR APPROXIMATE
+# 2A86; GREATER-THAN OR APPROXIMATE
+# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+# 2A89; LESS-THAN AND NOT APPROXIMATE
+# 2A8A; GREATER-THAN AND NOT APPROXIMATE
+# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL
+# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL
+# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+# 2A9D; SIMILAR OR LESS-THAN
+# 2A9E; SIMILAR OR GREATER-THAN
+# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR
+# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+# 2AB5; PRECEDES ABOVE NOT EQUAL TO
+# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO
+# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO
+# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO
+# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO
+# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+# 2AC7; SUBSET OF ABOVE TILDE OPERATOR
+# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR
+# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO
+# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO
+# 2ACB; SUBSET OF ABOVE NOT EQUAL TO
+# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO
+# 2ADC; FORKING
+# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE
+# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+# 2AF3; PARALLEL WITH TILDE OPERATOR
+# 2AFB; TRIPLE SOLIDUS BINARY RELATION
+# 2AFD; DOUBLE SOLIDUS OPERATOR
diff --git a/Master/tlpkg/tlperl/lib/unicore/Blocks.txt b/Master/tlpkg/tlperl/lib/unicore/Blocks.txt
new file mode 100644
index 00000000000..f2b95662745
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Blocks.txt
@@ -0,0 +1,172 @@
+# Blocks-4.1.0.txt
+# Date: 2005-1-31, 16:50 [KW]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# Note: The casing of block names is not normative.
+# For example, "Basic Latin" and "BASIC LATIN" are equivalent.
+#
+# Format:
+# Start Code..End Code; Block Name
+
+# ================================================
+
+# Note: When comparing block names, casing, whitespace, hyphens,
+# and underbars are ignored.
+# For example, "Latin Extended-A" and "latin extended a" are equivalent.
+# For more information on the comparison of property values,
+# see UCD.html.
+#
+# All code points not explicitly listed for Block
+# have the value No_Block.
+
+# Property: Block
+
+0000..007F; Basic Latin
+0080..00FF; Latin-1 Supplement
+0100..017F; Latin Extended-A
+0180..024F; Latin Extended-B
+0250..02AF; IPA Extensions
+02B0..02FF; Spacing Modifier Letters
+0300..036F; Combining Diacritical Marks
+0370..03FF; Greek and Coptic
+0400..04FF; Cyrillic
+0500..052F; Cyrillic Supplement
+0530..058F; Armenian
+0590..05FF; Hebrew
+0600..06FF; Arabic
+0700..074F; Syriac
+0750..077F; Arabic Supplement
+0780..07BF; Thaana
+0900..097F; Devanagari
+0980..09FF; Bengali
+0A00..0A7F; Gurmukhi
+0A80..0AFF; Gujarati
+0B00..0B7F; Oriya
+0B80..0BFF; Tamil
+0C00..0C7F; Telugu
+0C80..0CFF; Kannada
+0D00..0D7F; Malayalam
+0D80..0DFF; Sinhala
+0E00..0E7F; Thai
+0E80..0EFF; Lao
+0F00..0FFF; Tibetan
+1000..109F; Myanmar
+10A0..10FF; Georgian
+1100..11FF; Hangul Jamo
+1200..137F; Ethiopic
+1380..139F; Ethiopic Supplement
+13A0..13FF; Cherokee
+1400..167F; Unified Canadian Aboriginal Syllabics
+1680..169F; Ogham
+16A0..16FF; Runic
+1700..171F; Tagalog
+1720..173F; Hanunoo
+1740..175F; Buhid
+1760..177F; Tagbanwa
+1780..17FF; Khmer
+1800..18AF; Mongolian
+1900..194F; Limbu
+1950..197F; Tai Le
+1980..19DF; New Tai Lue
+19E0..19FF; Khmer Symbols
+1A00..1A1F; Buginese
+1D00..1D7F; Phonetic Extensions
+1D80..1DBF; Phonetic Extensions Supplement
+1DC0..1DFF; Combining Diacritical Marks Supplement
+1E00..1EFF; Latin Extended Additional
+1F00..1FFF; Greek Extended
+2000..206F; General Punctuation
+2070..209F; Superscripts and Subscripts
+20A0..20CF; Currency Symbols
+20D0..20FF; Combining Diacritical Marks for Symbols
+2100..214F; Letterlike Symbols
+2150..218F; Number Forms
+2190..21FF; Arrows
+2200..22FF; Mathematical Operators
+2300..23FF; Miscellaneous Technical
+2400..243F; Control Pictures
+2440..245F; Optical Character Recognition
+2460..24FF; Enclosed Alphanumerics
+2500..257F; Box Drawing
+2580..259F; Block Elements
+25A0..25FF; Geometric Shapes
+2600..26FF; Miscellaneous Symbols
+2700..27BF; Dingbats
+27C0..27EF; Miscellaneous Mathematical Symbols-A
+27F0..27FF; Supplemental Arrows-A
+2800..28FF; Braille Patterns
+2900..297F; Supplemental Arrows-B
+2980..29FF; Miscellaneous Mathematical Symbols-B
+2A00..2AFF; Supplemental Mathematical Operators
+2B00..2BFF; Miscellaneous Symbols and Arrows
+2C00..2C5F; Glagolitic
+2C80..2CFF; Coptic
+2D00..2D2F; Georgian Supplement
+2D30..2D7F; Tifinagh
+2D80..2DDF; Ethiopic Extended
+2E00..2E7F; Supplemental Punctuation
+2E80..2EFF; CJK Radicals Supplement
+2F00..2FDF; Kangxi Radicals
+2FF0..2FFF; Ideographic Description Characters
+3000..303F; CJK Symbols and Punctuation
+3040..309F; Hiragana
+30A0..30FF; Katakana
+3100..312F; Bopomofo
+3130..318F; Hangul Compatibility Jamo
+3190..319F; Kanbun
+31A0..31BF; Bopomofo Extended
+31C0..31EF; CJK Strokes
+31F0..31FF; Katakana Phonetic Extensions
+3200..32FF; Enclosed CJK Letters and Months
+3300..33FF; CJK Compatibility
+3400..4DBF; CJK Unified Ideographs Extension A
+4DC0..4DFF; Yijing Hexagram Symbols
+4E00..9FFF; CJK Unified Ideographs
+A000..A48F; Yi Syllables
+A490..A4CF; Yi Radicals
+A700..A71F; Modifier Tone Letters
+A800..A82F; Syloti Nagri
+AC00..D7AF; Hangul Syllables
+D800..DB7F; High Surrogates
+DB80..DBFF; High Private Use Surrogates
+DC00..DFFF; Low Surrogates
+E000..F8FF; Private Use Area
+F900..FAFF; CJK Compatibility Ideographs
+FB00..FB4F; Alphabetic Presentation Forms
+FB50..FDFF; Arabic Presentation Forms-A
+FE00..FE0F; Variation Selectors
+FE10..FE1F; Vertical Forms
+FE20..FE2F; Combining Half Marks
+FE30..FE4F; CJK Compatibility Forms
+FE50..FE6F; Small Form Variants
+FE70..FEFF; Arabic Presentation Forms-B
+FF00..FFEF; Halfwidth and Fullwidth Forms
+FFF0..FFFF; Specials
+10000..1007F; Linear B Syllabary
+10080..100FF; Linear B Ideograms
+10100..1013F; Aegean Numbers
+10140..1018F; Ancient Greek Numbers
+10300..1032F; Old Italic
+10330..1034F; Gothic
+10380..1039F; Ugaritic
+103A0..103DF; Old Persian
+10400..1044F; Deseret
+10450..1047F; Shavian
+10480..104AF; Osmanya
+10800..1083F; Cypriot Syllabary
+10A00..10A5F; Kharoshthi
+1D000..1D0FF; Byzantine Musical Symbols
+1D100..1D1FF; Musical Symbols
+1D200..1D24F; Ancient Greek Musical Notation
+1D300..1D35F; Tai Xuan Jing Symbols
+1D400..1D7FF; Mathematical Alphanumeric Symbols
+20000..2A6DF; CJK Unified Ideographs Extension B
+2F800..2FA1F; CJK Compatibility Ideographs Supplement
+E0000..E007F; Tags
+E0100..E01EF; Variation Selectors Supplement
+F0000..FFFFF; Supplementary Private Use Area-A
+100000..10FFFF; Supplementary Private Use Area-B
diff --git a/Master/tlpkg/tlperl/lib/unicore/Canonical.pl b/Master/tlpkg/tlperl/lib/unicore/Canonical.pl
new file mode 100644
index 00000000000..fce1e219700
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Canonical.pl
@@ -0,0 +1,1042 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+##
+## Data in this file used by ../utf8_heavy.pl
+##
+
+## Mapping from lc(canonical name) to filename in ./lib
+%utf8::Canonical = (
+
+ # InAegeanNumbers
+ aegeannumbers => 'InAegean',
+
+ alphabetic => 'Alphabet',
+
+ # InAlphabeticPresentationForms
+ alphabeticpresentationforms => 'InAlphab',
+
+ # InAncientGreekMusicalNotation
+ ancientgreekmusicalnotation => 'InAncie2',
+
+ # InAncientGreekNumbers
+ ancientgreeknumbers => 'InAncien',
+
+ arabic => 'Arab',
+
+ # InArabicPresentationFormsA
+ arabicpresentationformsa => 'InArabi4',
+
+ # InArabicPresentationFormsB
+ arabicpresentationformsb => 'InArabi3',
+
+ # InArabicSupplement
+ arabicsupplement => 'InArabi2',
+
+ armenian => 'Armn',
+
+ # InArrows
+ arrows => 'InArrows',
+
+ # AsciiHexDigit
+ asciihexdigit => 'AsciiHex',
+
+ # InBasicLatin
+ basiclatin => 'InBasicL',
+
+ bengali => 'Beng',
+
+ # BidiControl
+ bidicontrol => 'BidiCont',
+
+ # InBlockElements
+ blockelements => 'InBlockE',
+
+ bopomofo => 'Bopo',
+
+ # InBopomofoExtended
+ bopomofoextended => 'InBopom2',
+
+ # InBoxDrawing
+ boxdrawing => 'InBoxDra',
+
+ braille => 'Brai',
+
+ # InBraillePatterns
+ braillepatterns => 'InBraill',
+
+ buginese => 'Bugi',
+ buhid => 'Buhd',
+
+ # InByzantineMusicalSymbols
+ byzantinemusicalsymbols => 'InByzant',
+
+ # CanadianAboriginal
+ canadianaboriginal => 'Canadian',
+
+ # CasedLetter
+ casedletter => 'LC',
+
+ cherokee => 'Cher',
+
+ # InCjkCompatibility
+ cjkcompatibility => 'InCjkCom',
+
+ # InCjkCompatibilityForms
+ cjkcompatibilityforms => 'InCjkCo2',
+
+ # InCjkCompatibilityIdeographs
+ cjkcompatibilityideographs => 'InCjkCo3',
+
+ # InCjkCompatibilityIdeographsSupplement
+ cjkcompatibilityideographssupplement => 'InCjkCo4',
+
+ # InCjkRadicalsSupplement
+ cjkradicalssupplement => 'InCjkRad',
+
+ # InCjkStrokes
+ cjkstrokes => 'InCjkStr',
+
+ # InCjkSymbolsAndPunctuation
+ cjksymbolsandpunctuation => 'InCjkSym',
+
+ # InCjkUnifiedIdeographs
+ cjkunifiedideographs => 'InCjkUni',
+
+ # InCjkUnifiedIdeographsExtensionA
+ cjkunifiedideographsextensiona => 'InCjkUn3',
+
+ # InCjkUnifiedIdeographsExtensionB
+ cjkunifiedideographsextensionb => 'InCjkUn2',
+
+ # ClosePunctuation
+ closepunctuation => 'Pe',
+
+ # InCombiningDiacriticalMarks
+ combiningdiacriticalmarks => 'InCombi2',
+
+ # InCombiningDiacriticalMarksForSymbols
+ combiningdiacriticalmarksforsymbols => 'InCombi4',
+
+ # InCombiningDiacriticalMarksSupplement
+ combiningdiacriticalmarkssupplement => 'InCombi3',
+
+ # InCombiningHalfMarks
+ combininghalfmarks => 'InCombin',
+
+ common => 'Zyyy',
+
+ # ConnectorPunctuation
+ connectorpunctuation => 'Pc',
+
+ control => 'Cc',
+
+ # InControlPictures
+ controlpictures => 'InContro',
+
+ coptic => 'Copt',
+
+ # CurrencySymbol
+ currencysymbol => 'Sc',
+
+ # InCurrencySymbols
+ currencysymbols => 'InCurren',
+
+ cypriot => 'Cprt',
+
+ # InCypriotSyllabary
+ cypriotsyllabary => 'InCyprio',
+
+ cyrillic => 'Cyrl',
+
+ # InCyrillicSupplement
+ cyrillicsupplement => 'InCyril2',
+
+ dash => 'Dash2',
+
+ # DashPunctuation
+ dashpunctuation => 'Pd',
+
+ # DecimalNumber
+ decimalnumber => 'Nd',
+
+ deprecated => 'Deprecat',
+ deseret => 'Dsrt',
+ devanagari => 'Deva',
+ diacritic => 'Diacriti',
+
+ # InDingbats
+ dingbats => 'InDingba',
+
+ # InEnclosedAlphanumerics
+ enclosedalphanumerics => 'InEnclos',
+
+ # InEnclosedCjkLettersAndMonths
+ enclosedcjklettersandmonths => 'InEnclo2',
+
+ # EnclosingMark
+ enclosingmark => 'Me',
+
+ ethiopic => 'Ethi',
+
+ # InEthiopicExtended
+ ethiopicextended => 'InEthio2',
+
+ # InEthiopicSupplement
+ ethiopicsupplement => 'InEthio3',
+
+ extender => 'Extender',
+
+ # FinalPunctuation
+ finalpunctuation => 'Pf',
+
+ format => 'Cf',
+
+ # InGeneralPunctuation
+ generalpunctuation => 'InGenera',
+
+ # InGeometricShapes
+ geometricshapes => 'InGeomet',
+
+ georgian => 'Geor',
+
+ # InGeorgianSupplement
+ georgiansupplement => 'InGeorg2',
+
+ glagolitic => 'Glag',
+ gothic => 'Goth',
+
+ # GraphemeLink
+ graphemelink => 'Grapheme',
+
+ greek => 'Grek',
+
+ # InGreekAndCoptic
+ greekandcoptic => 'InGreekA',
+
+ # InGreekExtended
+ greekextended => 'InGreekE',
+
+ gujarati => 'Gujr',
+ gurmukhi => 'Guru',
+
+ # InHalfwidthAndFullwidthForms
+ halfwidthandfullwidthforms => 'InHalfwi',
+
+ han => 'Hani',
+ hangul => 'Hang',
+
+ # InHangulCompatibilityJamo
+ hangulcompatibilityjamo => 'InHangu3',
+
+ # InHangulJamo
+ hanguljamo => 'InHangul',
+
+ # InHangulSyllables
+ hangulsyllables => 'InHangu2',
+
+ hanunoo => 'Hano',
+ hebrew => 'Hebr',
+
+ # HexDigit
+ hexdigit => 'HexDigit',
+
+ # InHighPrivateUseSurrogates
+ highprivateusesurrogates => 'InHighPr',
+
+ # InHighSurrogates
+ highsurrogates => 'InHighSu',
+
+ hiragana => 'Hira',
+ hyphen => 'Hyphen2',
+
+ # IdContinue
+ idcontinue => 'IdContin',
+
+ ideographic => 'Ideograp',
+
+ # InIdeographicDescriptionCharacters
+ ideographicdescriptioncharacters => 'InIdeogr',
+
+ # IdsBinaryOperator
+ idsbinaryoperator => 'IdsBinar',
+
+ # IdStart
+ idstart => 'IdStart',
+
+ # IdsTrinaryOperator
+ idstrinaryoperator => 'IdsTrina',
+
+ # InAegeanNumbers
+ inaegeannumbers => 'InAegean',
+
+ # InAlphabeticPresentationForms
+ inalphabeticpresentationforms => 'InAlphab',
+
+ # InAncientGreekMusicalNotation
+ inancientgreekmusicalnotation => 'InAncie2',
+
+ # InAncientGreekNumbers
+ inancientgreeknumbers => 'InAncien',
+
+ # InArabic
+ inarabic => 'InArabic',
+
+ # InArabicPresentationFormsA
+ inarabicpresentationformsa => 'InArabi4',
+
+ # InArabicPresentationFormsB
+ inarabicpresentationformsb => 'InArabi3',
+
+ # InArabicSupplement
+ inarabicsupplement => 'InArabi2',
+
+ # InArmenian
+ inarmenian => 'InArmeni',
+
+ # InArrows
+ inarrows => 'InArrows',
+
+ # InBasicLatin
+ inbasiclatin => 'InBasicL',
+
+ # InBengali
+ inbengali => 'InBengal',
+
+ # InBlockElements
+ inblockelements => 'InBlockE',
+
+ # InBopomofo
+ inbopomofo => 'InBopomo',
+
+ # InBopomofoExtended
+ inbopomofoextended => 'InBopom2',
+
+ # InBoxDrawing
+ inboxdrawing => 'InBoxDra',
+
+ # InBraillePatterns
+ inbraillepatterns => 'InBraill',
+
+ # InBuginese
+ inbuginese => 'InBugine',
+
+ # InBuhid
+ inbuhid => 'InBuhid',
+
+ # InByzantineMusicalSymbols
+ inbyzantinemusicalsymbols => 'InByzant',
+
+ # InCherokee
+ incherokee => 'InCherok',
+
+ # InCjkCompatibility
+ incjkcompatibility => 'InCjkCom',
+
+ # InCjkCompatibilityForms
+ incjkcompatibilityforms => 'InCjkCo2',
+
+ # InCjkCompatibilityIdeographs
+ incjkcompatibilityideographs => 'InCjkCo3',
+
+ # InCjkCompatibilityIdeographsSupplement
+ incjkcompatibilityideographssupplement => 'InCjkCo4',
+
+ # InCjkRadicalsSupplement
+ incjkradicalssupplement => 'InCjkRad',
+
+ # InCjkStrokes
+ incjkstrokes => 'InCjkStr',
+
+ # InCjkSymbolsAndPunctuation
+ incjksymbolsandpunctuation => 'InCjkSym',
+
+ # InCjkUnifiedIdeographs
+ incjkunifiedideographs => 'InCjkUni',
+
+ # InCjkUnifiedIdeographsExtensionA
+ incjkunifiedideographsextensiona => 'InCjkUn3',
+
+ # InCjkUnifiedIdeographsExtensionB
+ incjkunifiedideographsextensionb => 'InCjkUn2',
+
+ # InCombiningDiacriticalMarks
+ incombiningdiacriticalmarks => 'InCombi2',
+
+ # InCombiningDiacriticalMarksForSymbols
+ incombiningdiacriticalmarksforsymbols => 'InCombi4',
+
+ # InCombiningDiacriticalMarksSupplement
+ incombiningdiacriticalmarkssupplement => 'InCombi3',
+
+ # InCombiningHalfMarks
+ incombininghalfmarks => 'InCombin',
+
+ # InControlPictures
+ incontrolpictures => 'InContro',
+
+ # InCoptic
+ incoptic => 'InCoptic',
+
+ # InCurrencySymbols
+ incurrencysymbols => 'InCurren',
+
+ # InCypriotSyllabary
+ incypriotsyllabary => 'InCyprio',
+
+ # InCyrillic
+ incyrillic => 'InCyrill',
+
+ # InCyrillicSupplement
+ incyrillicsupplement => 'InCyril2',
+
+ # InDeseret
+ indeseret => 'InDesere',
+
+ # InDevanagari
+ indevanagari => 'InDevana',
+
+ # InDingbats
+ indingbats => 'InDingba',
+
+ # InEnclosedAlphanumerics
+ inenclosedalphanumerics => 'InEnclos',
+
+ # InEnclosedCjkLettersAndMonths
+ inenclosedcjklettersandmonths => 'InEnclo2',
+
+ # InEthiopic
+ inethiopic => 'InEthiop',
+
+ # InEthiopicExtended
+ inethiopicextended => 'InEthio2',
+
+ # InEthiopicSupplement
+ inethiopicsupplement => 'InEthio3',
+
+ # InGeneralPunctuation
+ ingeneralpunctuation => 'InGenera',
+
+ # InGeometricShapes
+ ingeometricshapes => 'InGeomet',
+
+ # InGeorgian
+ ingeorgian => 'InGeorgi',
+
+ # InGeorgianSupplement
+ ingeorgiansupplement => 'InGeorg2',
+
+ # InGlagolitic
+ inglagolitic => 'InGlagol',
+
+ # InGothic
+ ingothic => 'InGothic',
+
+ # InGreekAndCoptic
+ ingreekandcoptic => 'InGreekA',
+
+ # InGreekExtended
+ ingreekextended => 'InGreekE',
+
+ # InGujarati
+ ingujarati => 'InGujara',
+
+ # InGurmukhi
+ ingurmukhi => 'InGurmuk',
+
+ # InHalfwidthAndFullwidthForms
+ inhalfwidthandfullwidthforms => 'InHalfwi',
+
+ # InHangulCompatibilityJamo
+ inhangulcompatibilityjamo => 'InHangu3',
+
+ # InHangulJamo
+ inhanguljamo => 'InHangul',
+
+ # InHangulSyllables
+ inhangulsyllables => 'InHangu2',
+
+ # InHanunoo
+ inhanunoo => 'InHanuno',
+
+ # InHebrew
+ inhebrew => 'InHebrew',
+
+ inherited => 'Qaai',
+
+ # InHighPrivateUseSurrogates
+ inhighprivateusesurrogates => 'InHighPr',
+
+ # InHighSurrogates
+ inhighsurrogates => 'InHighSu',
+
+ # InHiragana
+ inhiragana => 'InHiraga',
+
+ # InIdeographicDescriptionCharacters
+ inideographicdescriptioncharacters => 'InIdeogr',
+
+ # InIpaExtensions
+ inipaextensions => 'InIpaExt',
+
+ # InitialPunctuation
+ initialpunctuation => 'Pi',
+
+ # InKanbun
+ inkanbun => 'InKanbun',
+
+ # InKangxiRadicals
+ inkangxiradicals => 'InKangxi',
+
+ # InKannada
+ inkannada => 'InKannad',
+
+ # InKatakana
+ inkatakana => 'InKataka',
+
+ # InKatakanaPhoneticExtensions
+ inkatakanaphoneticextensions => 'InKatak2',
+
+ # InKharoshthi
+ inkharoshthi => 'InKharos',
+
+ # InKhmer
+ inkhmer => 'InKhmer',
+
+ # InKhmerSymbols
+ inkhmersymbols => 'InKhmerS',
+
+ # InLao
+ inlao => 'InLao',
+
+ # InLatin1Supplement
+ inlatin1supplement => 'InLatin1',
+
+ # InLatinExtendedA
+ inlatinextendeda => 'InLatin2',
+
+ # InLatinExtendedAdditional
+ inlatinextendedadditional => 'InLatin3',
+
+ # InLatinExtendedB
+ inlatinextendedb => 'InLatinE',
+
+ # InLetterlikeSymbols
+ inletterlikesymbols => 'InLetter',
+
+ # InLimbu
+ inlimbu => 'InLimbu',
+
+ # InLinearBIdeograms
+ inlinearbideograms => 'InLinear',
+
+ # InLinearBSyllabary
+ inlinearbsyllabary => 'InLinea2',
+
+ # InLowSurrogates
+ inlowsurrogates => 'InLowSur',
+
+ # InMalayalam
+ inmalayalam => 'InMalaya',
+
+ # InMathematicalAlphanumericSymbols
+ inmathematicalalphanumericsymbols => 'InMathe2',
+
+ # InMathematicalOperators
+ inmathematicaloperators => 'InMathem',
+
+ # InMiscellaneousMathematicalSymbolsA
+ inmiscellaneousmathematicalsymbolsa => 'InMisce4',
+
+ # InMiscellaneousMathematicalSymbolsB
+ inmiscellaneousmathematicalsymbolsb => 'InMisce5',
+
+ # InMiscellaneousSymbols
+ inmiscellaneoussymbols => 'InMiscel',
+
+ # InMiscellaneousSymbolsAndArrows
+ inmiscellaneoussymbolsandarrows => 'InMisce3',
+
+ # InMiscellaneousTechnical
+ inmiscellaneoustechnical => 'InMisce2',
+
+ # InModifierToneLetters
+ inmodifiertoneletters => 'InModifi',
+
+ # InMongolian
+ inmongolian => 'InMongol',
+
+ # InMusicalSymbols
+ inmusicalsymbols => 'InMusica',
+
+ # InMyanmar
+ inmyanmar => 'InMyanma',
+
+ # InNewTaiLue
+ innewtailue => 'InNewTai',
+
+ # InNumberForms
+ innumberforms => 'InNumber',
+
+ # InOgham
+ inogham => 'InOgham',
+
+ # InOldItalic
+ inolditalic => 'InOldIta',
+
+ # InOldPersian
+ inoldpersian => 'InOldPer',
+
+ # InOpticalCharacterRecognition
+ inopticalcharacterrecognition => 'InOptica',
+
+ # InOriya
+ inoriya => 'InOriya',
+
+ # InOsmanya
+ inosmanya => 'InOsmany',
+
+ # InPhoneticExtensions
+ inphoneticextensions => 'InPhonet',
+
+ # InPhoneticExtensionsSupplement
+ inphoneticextensionssupplement => 'InPhone2',
+
+ # InPrivateUseArea
+ inprivateusearea => 'InPrivat',
+
+ # InRunic
+ inrunic => 'InRunic',
+
+ # InShavian
+ inshavian => 'InShavia',
+
+ # InSinhala
+ insinhala => 'InSinhal',
+
+ # InSmallFormVariants
+ insmallformvariants => 'InSmallF',
+
+ # InSpacingModifierLetters
+ inspacingmodifierletters => 'InSpacin',
+
+ # InSpecials
+ inspecials => 'InSpecia',
+
+ # InSuperscriptsAndSubscripts
+ insuperscriptsandsubscripts => 'InSupers',
+
+ # InSupplementalArrowsA
+ insupplementalarrowsa => 'InSuppl2',
+
+ # InSupplementalArrowsB
+ insupplementalarrowsb => 'InSupple',
+
+ # InSupplementalMathematicalOperators
+ insupplementalmathematicaloperators => 'InSuppl6',
+
+ # InSupplementalPunctuation
+ insupplementalpunctuation => 'InSuppl3',
+
+ # InSupplementaryPrivateUseAreaA
+ insupplementaryprivateuseareaa => 'InSuppl4',
+
+ # InSupplementaryPrivateUseAreaB
+ insupplementaryprivateuseareab => 'InSuppl5',
+
+ # InSylotiNagri
+ insylotinagri => 'InSyloti',
+
+ # InSyriac
+ insyriac => 'InSyriac',
+
+ # InTagalog
+ intagalog => 'InTagalo',
+
+ # InTagbanwa
+ intagbanwa => 'InTagban',
+
+ # InTags
+ intags => 'InTags',
+
+ # InTaiLe
+ intaile => 'InTaiLe',
+
+ # InTaiXuanJingSymbols
+ intaixuanjingsymbols => 'InTaiXua',
+
+ # InTamil
+ intamil => 'InTamil',
+
+ # InTelugu
+ intelugu => 'InTelugu',
+
+ # InThaana
+ inthaana => 'InThaana',
+
+ # InThai
+ inthai => 'InThai',
+
+ # InTibetan
+ intibetan => 'InTibeta',
+
+ # InTifinagh
+ intifinagh => 'InTifina',
+
+ # InUgaritic
+ inugaritic => 'InUgarit',
+
+ # InUnifiedCanadianAboriginalSyllabics
+ inunifiedcanadianaboriginalsyllabics => 'InUnifie',
+
+ # InVariationSelectors
+ invariationselectors => 'InVariat',
+
+ # InVariationSelectorsSupplement
+ invariationselectorssupplement => 'InVaria2',
+
+ # InVerticalForms
+ inverticalforms => 'InVertic',
+
+ # InYijingHexagramSymbols
+ inyijinghexagramsymbols => 'InYijing',
+
+ # InYiRadicals
+ inyiradicals => 'InYiRadi',
+
+ # InYiSyllables
+ inyisyllables => 'InYiSyll',
+
+ # InIpaExtensions
+ ipaextensions => 'InIpaExt',
+
+ # JoinControl
+ joincontrol => 'JoinCont',
+
+ # InKanbun
+ kanbun => 'InKanbun',
+
+ # InKangxiRadicals
+ kangxiradicals => 'InKangxi',
+
+ kannada => 'Knda',
+ katakana => 'Kana',
+
+ # InKatakanaPhoneticExtensions
+ katakanaphoneticextensions => 'InKatak2',
+
+ kharoshthi => 'Khar',
+ khmer => 'Khmr',
+
+ # InKhmerSymbols
+ khmersymbols => 'InKhmerS',
+
+ lao => 'Laoo',
+ latin => 'Latn',
+
+ # InLatin1Supplement
+ latin1supplement => 'InLatin1',
+
+ # InLatinExtendedA
+ latinextendeda => 'InLatin2',
+
+ # InLatinExtendedAdditional
+ latinextendedadditional => 'InLatin3',
+
+ # InLatinExtendedB
+ latinextendedb => 'InLatinE',
+
+ letter => 'L',
+
+ # InLetterlikeSymbols
+ letterlikesymbols => 'InLetter',
+
+ # LetterNumber
+ letternumber => 'Nl',
+
+ limbu => 'Limb',
+
+ # LinearB
+ linearb => 'LinearB',
+
+ # InLinearBIdeograms
+ linearbideograms => 'InLinear',
+
+ # InLinearBSyllabary
+ linearbsyllabary => 'InLinea2',
+
+ # LineSeparator
+ lineseparator => 'Zl',
+
+ # LogicalOrderException
+ logicalorderexception => 'LogicalO',
+
+ lowercase => 'Lowercas',
+
+ # LowercaseLetter
+ lowercaseletter => 'Ll',
+
+ # InLowSurrogates
+ lowsurrogates => 'InLowSur',
+
+ malayalam => 'Mlym',
+ mark => 'M',
+ math => 'Math',
+
+ # InMathematicalAlphanumericSymbols
+ mathematicalalphanumericsymbols => 'InMathe2',
+
+ # InMathematicalOperators
+ mathematicaloperators => 'InMathem',
+
+ # MathSymbol
+ mathsymbol => 'Sm',
+
+ # InMiscellaneousMathematicalSymbolsA
+ miscellaneousmathematicalsymbolsa => 'InMisce4',
+
+ # InMiscellaneousMathematicalSymbolsB
+ miscellaneousmathematicalsymbolsb => 'InMisce5',
+
+ # InMiscellaneousSymbols
+ miscellaneoussymbols => 'InMiscel',
+
+ # InMiscellaneousSymbolsAndArrows
+ miscellaneoussymbolsandarrows => 'InMisce3',
+
+ # InMiscellaneousTechnical
+ miscellaneoustechnical => 'InMisce2',
+
+ # ModifierLetter
+ modifierletter => 'Lm',
+
+ # ModifierSymbol
+ modifiersymbol => 'Sk',
+
+ # InModifierToneLetters
+ modifiertoneletters => 'InModifi',
+
+ mongolian => 'Mong',
+
+ # InMusicalSymbols
+ musicalsymbols => 'InMusica',
+
+ myanmar => 'Mymr',
+
+ # NewTaiLue
+ newtailue => 'NewTaiLu',
+
+ # NoncharacterCodePoint
+ noncharactercodepoint => 'Nonchara',
+
+ # NonspacingMark
+ nonspacingmark => 'Mn',
+
+ number => 'N',
+
+ # InNumberForms
+ numberforms => 'InNumber',
+
+ ogham => 'Ogam',
+
+ # OldItalic
+ olditalic => 'OldItali',
+
+ # OldPersian
+ oldpersian => 'OldPersi',
+
+ # OpenPunctuation
+ openpunctuation => 'Ps',
+
+ # InOpticalCharacterRecognition
+ opticalcharacterrecognition => 'InOptica',
+
+ oriya => 'Orya',
+ osmanya => 'Osma',
+ other => 'C',
+
+ # OtherAlphabetic
+ otheralphabetic => 'OtherAlp',
+
+ # OtherDefaultIgnorableCodePoint
+ otherdefaultignorablecodepoint => 'OtherDef',
+
+ # OtherGraphemeExtend
+ othergraphemeextend => 'OtherGra',
+
+ # OtherIdContinue
+ otheridcontinue => 'OtherIdC',
+
+ # OtherIdStart
+ otheridstart => 'OtherIdS',
+
+ # OtherLetter
+ otherletter => 'Lo',
+
+ # OtherLowercase
+ otherlowercase => 'OtherLow',
+
+ # OtherMath
+ othermath => 'OtherMat',
+
+ # OtherNumber
+ othernumber => 'No',
+
+ # OtherPunctuation
+ otherpunctuation => 'Po',
+
+ # OtherSymbol
+ othersymbol => 'So',
+
+ # OtherUppercase
+ otheruppercase => 'OtherUpp',
+
+ # ParagraphSeparator
+ paragraphseparator => 'Zp',
+
+ # PatternSyntax
+ patternsyntax => 'PatternS',
+
+ # PatternWhiteSpace
+ patternwhitespace => 'PatternW',
+
+ # InPhoneticExtensions
+ phoneticextensions => 'InPhonet',
+
+ # InPhoneticExtensionsSupplement
+ phoneticextensionssupplement => 'InPhone2',
+
+ # PrivateUse
+ privateuse => 'Co',
+
+ # InPrivateUseArea
+ privateusearea => 'InPrivat',
+
+ punctuation => 'P',
+
+ # QuotationMark
+ quotationmark => 'Quotatio',
+
+ radical => 'Radical2',
+ runic => 'Runr',
+ separator => 'Z',
+ shavian => 'Shaw',
+ sinhala => 'Sinh',
+
+ # InSmallFormVariants
+ smallformvariants => 'InSmallF',
+
+ # SoftDotted
+ softdotted => 'SoftDott',
+
+ # SpaceSeparator
+ spaceseparator => 'Zs',
+
+ # SpacingMark
+ spacingmark => 'Mc',
+
+ # InSpacingModifierLetters
+ spacingmodifierletters => 'InSpacin',
+
+ # InSpecials
+ specials => 'InSpecia',
+
+ sterm => 'Sterm2',
+
+ # InSuperscriptsAndSubscripts
+ superscriptsandsubscripts => 'InSupers',
+
+ # InSupplementalArrowsA
+ supplementalarrowsa => 'InSuppl2',
+
+ # InSupplementalArrowsB
+ supplementalarrowsb => 'InSupple',
+
+ # InSupplementalMathematicalOperators
+ supplementalmathematicaloperators => 'InSuppl6',
+
+ # InSupplementalPunctuation
+ supplementalpunctuation => 'InSuppl3',
+
+ # InSupplementaryPrivateUseAreaA
+ supplementaryprivateuseareaa => 'InSuppl4',
+
+ # InSupplementaryPrivateUseAreaB
+ supplementaryprivateuseareab => 'InSuppl5',
+
+ surrogate => 'Cs',
+
+ # SylotiNagri
+ sylotinagri => 'SylotiNa',
+
+ symbol => 'S',
+ syriac => 'Syrc',
+ tagalog => 'Tglg',
+ tagbanwa => 'Tagb',
+
+ # InTags
+ tags => 'InTags',
+
+ # TaiLe
+ taile => 'TaiLe',
+
+ # InTaiXuanJingSymbols
+ taixuanjingsymbols => 'InTaiXua',
+
+ tamil => 'Taml',
+ telugu => 'Telu',
+
+ # TerminalPunctuation
+ terminalpunctuation => 'Terminal',
+
+ thaana => 'Thaa',
+ thai => 'Thai',
+ tibetan => 'Tibt',
+ tifinagh => 'Tfng',
+
+ # TitlecaseLetter
+ titlecaseletter => 'Lt',
+
+ ugaritic => 'Ugar',
+ unassigned => 'Cn',
+
+ # InUnifiedCanadianAboriginalSyllabics
+ unifiedcanadianaboriginalsyllabics => 'InUnifie',
+
+ # UnifiedIdeograph
+ unifiedideograph => 'UnifiedI',
+
+ uppercase => 'Uppercas',
+
+ # UppercaseLetter
+ uppercaseletter => 'Lu',
+
+ # VariationSelector
+ variationselector => 'Variatio',
+
+ # InVariationSelectors
+ variationselectors => 'InVariat',
+
+ # InVariationSelectorsSupplement
+ variationselectorssupplement => 'InVaria2',
+
+ # InVerticalForms
+ verticalforms => 'InVertic',
+
+ # WhiteSpace
+ whitespace => 'WhiteSpa',
+
+ yi => 'Yiii',
+
+ # InYijingHexagramSymbols
+ yijinghexagramsymbols => 'InYijing',
+
+ # InYiRadicals
+ yiradicals => 'InYiRadi',
+
+ # InYiSyllables
+ yisyllables => 'InYiSyll',
+
+);
+1
diff --git a/Master/tlpkg/tlperl/lib/unicore/CaseFolding.txt b/Master/tlpkg/tlperl/lib/unicore/CaseFolding.txt
new file mode 100644
index 00000000000..f25d9bfed4d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/CaseFolding.txt
@@ -0,0 +1,1064 @@
+# CaseFolding-4.1.0.txt
+# Date: 2005-03-26, 00:24:43 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# Case Folding Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It provides a case folding mapping generated from the Unicode Character Database.
+# If all characters are mapped according to the full mapping below, then
+# case differences (according to UnicodeData.txt and SpecialCasing.txt)
+# are eliminated.
+#
+# The data supports both implementations that require simple case foldings
+# (where string lengths don't change), and implementations that allow full case folding
+# (where string lengths may grow). Note that where they can be supported, the
+# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+#
+# All code points not listed in this file map to themselves.
+#
+# NOTE: case folding does not preserve normalization formats!
+#
+# For information on case folding, see
+# UTR #21 Case Mappings, at http://www.unicode.org/unicode/reports/tr21/
+#
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <status>; <mapping>; # <name>
+#
+# The status field is:
+# C: common case folding, common mappings shared by both simple and full mappings.
+# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
+# S: simple case folding, mappings to single characters where different from F.
+# T: special case for uppercase I and dotted uppercase I
+# - For non-Turkic languages, this mapping is normally not used.
+# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
+# Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
+# See the discussions of case mapping in the Unicode Standard for more information.
+#
+# Usage:
+# A. To do a simple case folding, use the mappings with status C + S.
+# B. To do a full case folding, use the mappings with status C + F.
+#
+# The mappings with status T can be used or omitted depending on the desired case-folding
+# behavior. (The default option is to exclude them.)
+#
+# =================================================================
+
+0041; C; 0061; # LATIN CAPITAL LETTER A
+0042; C; 0062; # LATIN CAPITAL LETTER B
+0043; C; 0063; # LATIN CAPITAL LETTER C
+0044; C; 0064; # LATIN CAPITAL LETTER D
+0045; C; 0065; # LATIN CAPITAL LETTER E
+0046; C; 0066; # LATIN CAPITAL LETTER F
+0047; C; 0067; # LATIN CAPITAL LETTER G
+0048; C; 0068; # LATIN CAPITAL LETTER H
+0049; C; 0069; # LATIN CAPITAL LETTER I
+0049; T; 0131; # LATIN CAPITAL LETTER I
+004A; C; 006A; # LATIN CAPITAL LETTER J
+004B; C; 006B; # LATIN CAPITAL LETTER K
+004C; C; 006C; # LATIN CAPITAL LETTER L
+004D; C; 006D; # LATIN CAPITAL LETTER M
+004E; C; 006E; # LATIN CAPITAL LETTER N
+004F; C; 006F; # LATIN CAPITAL LETTER O
+0050; C; 0070; # LATIN CAPITAL LETTER P
+0051; C; 0071; # LATIN CAPITAL LETTER Q
+0052; C; 0072; # LATIN CAPITAL LETTER R
+0053; C; 0073; # LATIN CAPITAL LETTER S
+0054; C; 0074; # LATIN CAPITAL LETTER T
+0055; C; 0075; # LATIN CAPITAL LETTER U
+0056; C; 0076; # LATIN CAPITAL LETTER V
+0057; C; 0077; # LATIN CAPITAL LETTER W
+0058; C; 0078; # LATIN CAPITAL LETTER X
+0059; C; 0079; # LATIN CAPITAL LETTER Y
+005A; C; 007A; # LATIN CAPITAL LETTER Z
+00B5; C; 03BC; # MICRO SIGN
+00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
+00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
+00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
+00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6; C; 00E6; # LATIN CAPITAL LETTER AE
+00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
+00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
+00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
+00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
+00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
+00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
+00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
+00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
+00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
+00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
+00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
+00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
+00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
+0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
+0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
+0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
+0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
+0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
+010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
+0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
+0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
+0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
+0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
+011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
+011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
+0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
+0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
+0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
+012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
+012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
+012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
+0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
+0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
+0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
+013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
+013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
+013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
+0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
+0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
+0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
+0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A; C; 014B; # LATIN CAPITAL LETTER ENG
+014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
+014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
+0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152; C; 0153; # LATIN CAPITAL LIGATURE OE
+0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
+0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
+0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
+015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
+015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
+0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
+0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
+0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
+0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
+0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
+016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
+016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
+016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
+0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
+0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
+017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
+017F; C; 0073; # LATIN SMALL LETTER LONG S
+0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
+0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
+0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
+0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
+0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
+0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
+018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
+018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
+018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
+018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
+0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
+0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
+0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
+0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
+0196; C; 0269; # LATIN CAPITAL LETTER IOTA
+0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
+0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
+019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
+019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
+01A2; C; 01A3; # LATIN CAPITAL LETTER OI
+01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
+01A6; C; 0280; # LATIN LETTER YR
+01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
+01A9; C; 0283; # LATIN CAPITAL LETTER ESH
+01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
+01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
+01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
+01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
+01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
+01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
+01B7; C; 0292; # LATIN CAPITAL LETTER EZH
+01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
+01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
+01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
+01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
+01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
+01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
+01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
+01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
+01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
+01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
+01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
+01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
+01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
+01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
+01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
+01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
+01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
+01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
+01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
+01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
+01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
+01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C; C; 021D; # LATIN CAPITAL LETTER YOGH
+021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
+0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222; C; 0223; # LATIN CAPITAL LETTER OU
+0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
+0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
+022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+0241; C; 0294; # LATIN CAPITAL LETTER GLOTTAL STOP
+0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
+0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
+038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
+0392; C; 03B2; # GREEK CAPITAL LETTER BETA
+0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
+0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
+0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
+0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
+0397; C; 03B7; # GREEK CAPITAL LETTER ETA
+0398; C; 03B8; # GREEK CAPITAL LETTER THETA
+0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
+039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
+039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
+039C; C; 03BC; # GREEK CAPITAL LETTER MU
+039D; C; 03BD; # GREEK CAPITAL LETTER NU
+039E; C; 03BE; # GREEK CAPITAL LETTER XI
+039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
+03A0; C; 03C0; # GREEK CAPITAL LETTER PI
+03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
+03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
+03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
+03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
+03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
+03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
+03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
+03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
+03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
+03D0; C; 03B2; # GREEK BETA SYMBOL
+03D1; C; 03B8; # GREEK THETA SYMBOL
+03D5; C; 03C6; # GREEK PHI SYMBOL
+03D6; C; 03C0; # GREEK PI SYMBOL
+03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
+03DA; C; 03DB; # GREEK LETTER STIGMA
+03DC; C; 03DD; # GREEK LETTER DIGAMMA
+03DE; C; 03DF; # GREEK LETTER KOPPA
+03E0; C; 03E1; # GREEK LETTER SAMPI
+03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
+03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
+03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
+03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
+03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
+03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
+03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
+03F0; C; 03BA; # GREEK KAPPA SYMBOL
+03F1; C; 03C1; # GREEK RHO SYMBOL
+03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
+03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
+03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
+03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
+0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
+0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
+0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
+0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
+0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
+0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
+0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
+040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
+040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
+040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
+040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
+040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
+0410; C; 0430; # CYRILLIC CAPITAL LETTER A
+0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
+0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
+0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
+0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
+0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
+0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
+0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
+0418; C; 0438; # CYRILLIC CAPITAL LETTER I
+0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
+041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
+041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
+041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
+041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
+041E; C; 043E; # CYRILLIC CAPITAL LETTER O
+041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
+0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
+0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
+0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
+0423; C; 0443; # CYRILLIC CAPITAL LETTER U
+0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
+0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
+0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
+0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
+0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
+0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
+042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
+042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
+042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D; C; 044D; # CYRILLIC CAPITAL LETTER E
+042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
+042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
+0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
+0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
+0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
+0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
+0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
+046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
+0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
+0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
+0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
+0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
+047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
+0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
+048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
+0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
+04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
+04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
+04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
+04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
+04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
+04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
+0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
+0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
+0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
+0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
+050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
+050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
+050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
+0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
+0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
+0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
+0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
+0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
+0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
+0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
+0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
+0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
+053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
+053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
+053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
+053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
+053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
+053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
+0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
+0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
+0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
+0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
+0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
+0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
+0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
+0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
+0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
+0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
+054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
+054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
+054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
+054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
+054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
+054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
+0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
+0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
+0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
+0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
+0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
+0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
+0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
+0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
+1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
+1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
+1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
+1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
+1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
+1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
+1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
+1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
+1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
+1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
+1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
+1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
+1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126; C; 03C9; # OHM SIGN
+212A; C; 006B; # KELVIN SIGN
+212B; C; 00E5; # ANGSTROM SIGN
+2160; C; 2170; # ROMAN NUMERAL ONE
+2161; C; 2171; # ROMAN NUMERAL TWO
+2162; C; 2172; # ROMAN NUMERAL THREE
+2163; C; 2173; # ROMAN NUMERAL FOUR
+2164; C; 2174; # ROMAN NUMERAL FIVE
+2165; C; 2175; # ROMAN NUMERAL SIX
+2166; C; 2176; # ROMAN NUMERAL SEVEN
+2167; C; 2177; # ROMAN NUMERAL EIGHT
+2168; C; 2178; # ROMAN NUMERAL NINE
+2169; C; 2179; # ROMAN NUMERAL TEN
+216A; C; 217A; # ROMAN NUMERAL ELEVEN
+216B; C; 217B; # ROMAN NUMERAL TWELVE
+216C; C; 217C; # ROMAN NUMERAL FIFTY
+216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
+216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
+216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
+24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
+24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
+24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
+24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
+24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
+24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
+24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
+24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
+24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
+24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
+24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
+24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
+24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
+24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
+24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
+24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
+24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
+24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
+24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
+24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
+24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
+24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
+24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
+24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
+24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
+24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
+FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
+FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
+FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
+FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
+FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
+FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
+FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
+FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
+FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
+FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
+FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
+FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
+FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
+FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
+FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
+FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
+FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
+FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
+FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
+FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
+FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
+FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
+FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
+FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
+FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
+10400; C; 10428; # DESERET CAPITAL LETTER LONG I
+10401; C; 10429; # DESERET CAPITAL LETTER LONG E
+10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
+10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
+10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
+10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
+10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
+10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
+10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
+10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
+1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
+1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
+1040C; C; 10434; # DESERET CAPITAL LETTER AY
+1040D; C; 10435; # DESERET CAPITAL LETTER OW
+1040E; C; 10436; # DESERET CAPITAL LETTER WU
+1040F; C; 10437; # DESERET CAPITAL LETTER YEE
+10410; C; 10438; # DESERET CAPITAL LETTER H
+10411; C; 10439; # DESERET CAPITAL LETTER PEE
+10412; C; 1043A; # DESERET CAPITAL LETTER BEE
+10413; C; 1043B; # DESERET CAPITAL LETTER TEE
+10414; C; 1043C; # DESERET CAPITAL LETTER DEE
+10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
+10416; C; 1043E; # DESERET CAPITAL LETTER JEE
+10417; C; 1043F; # DESERET CAPITAL LETTER KAY
+10418; C; 10440; # DESERET CAPITAL LETTER GAY
+10419; C; 10441; # DESERET CAPITAL LETTER EF
+1041A; C; 10442; # DESERET CAPITAL LETTER VEE
+1041B; C; 10443; # DESERET CAPITAL LETTER ETH
+1041C; C; 10444; # DESERET CAPITAL LETTER THEE
+1041D; C; 10445; # DESERET CAPITAL LETTER ES
+1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
+1041F; C; 10447; # DESERET CAPITAL LETTER ESH
+10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
+10421; C; 10449; # DESERET CAPITAL LETTER ER
+10422; C; 1044A; # DESERET CAPITAL LETTER EL
+10423; C; 1044B; # DESERET CAPITAL LETTER EM
+10424; C; 1044C; # DESERET CAPITAL LETTER EN
+10425; C; 1044D; # DESERET CAPITAL LETTER ENG
+10426; C; 1044E; # DESERET CAPITAL LETTER OI
+10427; C; 1044F; # DESERET CAPITAL LETTER EW
diff --git a/Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl b/Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl
new file mode 100644
index 00000000000..7d4b8085c57
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl
@@ -0,0 +1,203 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0300 0314 230
+0315 232
+0316 0319 220
+031A 232
+031B 216
+031C 0320 220
+0321 0322 202
+0323 0326 220
+0327 0328 202
+0329 0333 220
+0334 0338 1
+0339 033C 220
+033D 0344 230
+0345 240
+0346 230
+0347 0349 220
+034A 034C 230
+034D 034E 220
+0350 0352 230
+0353 0356 220
+0357 230
+0358 232
+0359 035A 220
+035B 230
+035C 233
+035D 035E 234
+035F 233
+0360 0361 234
+0362 233
+0363 036F 230
+0483 0486 230
+0591 220
+0592 0595 230
+0596 220
+0597 0599 230
+059A 222
+059B 220
+059C 05A1 230
+05A2 05A7 220
+05A8 05A9 230
+05AA 220
+05AB 05AC 230
+05AD 222
+05AE 228
+05AF 230
+05B0 10
+05B1 11
+05B2 12
+05B3 13
+05B4 14
+05B5 15
+05B6 16
+05B7 17
+05B8 18
+05B9 19
+05BB 20
+05BC 21
+05BD 22
+05BF 23
+05C1 24
+05C2 25
+05C4 230
+05C5 220
+05C7 18
+0610 0615 230
+064B 27
+064C 28
+064D 29
+064E 30
+064F 31
+0650 32
+0651 33
+0652 34
+0653 0654 230
+0655 0656 220
+0657 065B 230
+065C 220
+065D 065E 230
+0670 35
+06D6 06DC 230
+06DF 06E2 230
+06E3 220
+06E4 230
+06E7 06E8 230
+06EA 220
+06EB 06EC 230
+06ED 220
+0711 36
+0730 230
+0731 220
+0732 0733 230
+0734 220
+0735 0736 230
+0737 0739 220
+073A 230
+073B 073C 220
+073D 230
+073E 220
+073F 0741 230
+0742 220
+0743 230
+0744 220
+0745 230
+0746 220
+0747 230
+0748 220
+0749 074A 230
+093C 7
+094D 9
+0951 230
+0952 220
+0953 0954 230
+09BC 7
+09CD 9
+0A3C 7
+0A4D 9
+0ABC 7
+0ACD 9
+0B3C 7
+0B4D 9
+0BCD 9
+0C4D 9
+0C55 84
+0C56 91
+0CBC 7
+0CCD 9
+0D4D 9
+0DCA 9
+0E38 0E39 103
+0E3A 9
+0E48 0E4B 107
+0EB8 0EB9 118
+0EC8 0ECB 122
+0F18 0F19 220
+0F35 220
+0F37 220
+0F39 216
+0F71 129
+0F72 130
+0F74 132
+0F7A 0F7D 130
+0F80 130
+0F82 0F83 230
+0F84 9
+0F86 0F87 230
+0FC6 220
+1037 7
+1039 9
+135F 230
+1714 9
+1734 9
+17D2 9
+17DD 230
+18A9 228
+1939 222
+193A 230
+193B 220
+1A17 230
+1A18 220
+1DC0 1DC1 230
+1DC2 220
+1DC3 230
+20D0 20D1 230
+20D2 20D3 1
+20D4 20D7 230
+20D8 20DA 1
+20DB 20DC 230
+20E1 230
+20E5 20E6 1
+20E7 230
+20E8 220
+20E9 230
+20EA 20EB 1
+302A 218
+302B 228
+302C 232
+302D 222
+302E 302F 224
+3099 309A 8
+A806 9
+FB1E 26
+FE20 FE23 230
+10A0D 220
+10A0F 230
+10A38 230
+10A39 1
+10A3A 220
+10A3F 9
+1D165 1D166 216
+1D167 1D169 1
+1D16D 226
+1D16E 1D172 216
+1D17B 1D182 220
+1D185 1D189 230
+1D18A 1D18B 220
+1D1AA 1D1AD 230
+1D242 1D244 230
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/CompositionExclusions.txt b/Master/tlpkg/tlperl/lib/unicore/CompositionExclusions.txt
new file mode 100644
index 00000000000..f20528b091e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/CompositionExclusions.txt
@@ -0,0 +1,179 @@
+# CompositionExclusions-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# This file lists the characters from the UAX #15 Composition Exclusion Table.
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# For more information, see
+# http://www.unicode.org/unicode/reports/tr15/#Primary Exclusion List Table
+# ================================================
+
+# (1) Script Specifics
+# This list of characters cannot be derived from the UnicodeData file.
+# ================================================
+
+0958 # DEVANAGARI LETTER QA
+0959 # DEVANAGARI LETTER KHHA
+095A # DEVANAGARI LETTER GHHA
+095B # DEVANAGARI LETTER ZA
+095C # DEVANAGARI LETTER DDDHA
+095D # DEVANAGARI LETTER RHA
+095E # DEVANAGARI LETTER FA
+095F # DEVANAGARI LETTER YYA
+09DC # BENGALI LETTER RRA
+09DD # BENGALI LETTER RHA
+09DF # BENGALI LETTER YYA
+0A33 # GURMUKHI LETTER LLA
+0A36 # GURMUKHI LETTER SHA
+0A59 # GURMUKHI LETTER KHHA
+0A5A # GURMUKHI LETTER GHHA
+0A5B # GURMUKHI LETTER ZA
+0A5E # GURMUKHI LETTER FA
+0B5C # ORIYA LETTER RRA
+0B5D # ORIYA LETTER RHA
+0F43 # TIBETAN LETTER GHA
+0F4D # TIBETAN LETTER DDHA
+0F52 # TIBETAN LETTER DHA
+0F57 # TIBETAN LETTER BHA
+0F5C # TIBETAN LETTER DZHA
+0F69 # TIBETAN LETTER KSSA
+0F76 # TIBETAN VOWEL SIGN VOCALIC R
+0F78 # TIBETAN VOWEL SIGN VOCALIC L
+0F93 # TIBETAN SUBJOINED LETTER GHA
+0F9D # TIBETAN SUBJOINED LETTER DDHA
+0FA2 # TIBETAN SUBJOINED LETTER DHA
+0FA7 # TIBETAN SUBJOINED LETTER BHA
+0FAC # TIBETAN SUBJOINED LETTER DZHA
+0FB9 # TIBETAN SUBJOINED LETTER KSSA
+FB1D # HEBREW LETTER YOD WITH HIRIQ
+FB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B # HEBREW LETTER SHIN WITH SIN DOT
+FB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E # HEBREW LETTER ALEF WITH PATAH
+FB2F # HEBREW LETTER ALEF WITH QAMATS
+FB30 # HEBREW LETTER ALEF WITH MAPIQ
+FB31 # HEBREW LETTER BET WITH DAGESH
+FB32 # HEBREW LETTER GIMEL WITH DAGESH
+FB33 # HEBREW LETTER DALET WITH DAGESH
+FB34 # HEBREW LETTER HE WITH MAPIQ
+FB35 # HEBREW LETTER VAV WITH DAGESH
+FB36 # HEBREW LETTER ZAYIN WITH DAGESH
+FB38 # HEBREW LETTER TET WITH DAGESH
+FB39 # HEBREW LETTER YOD WITH DAGESH
+FB3A # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B # HEBREW LETTER KAF WITH DAGESH
+FB3C # HEBREW LETTER LAMED WITH DAGESH
+FB3E # HEBREW LETTER MEM WITH DAGESH
+FB40 # HEBREW LETTER NUN WITH DAGESH
+FB41 # HEBREW LETTER SAMEKH WITH DAGESH
+FB43 # HEBREW LETTER FINAL PE WITH DAGESH
+FB44 # HEBREW LETTER PE WITH DAGESH
+FB46 # HEBREW LETTER TSADI WITH DAGESH
+FB47 # HEBREW LETTER QOF WITH DAGESH
+FB48 # HEBREW LETTER RESH WITH DAGESH
+FB49 # HEBREW LETTER SHIN WITH DAGESH
+FB4A # HEBREW LETTER TAV WITH DAGESH
+FB4B # HEBREW LETTER VAV WITH HOLAM
+FB4C # HEBREW LETTER BET WITH RAFE
+FB4D # HEBREW LETTER KAF WITH RAFE
+FB4E # HEBREW LETTER PE WITH RAFE
+
+# Total code points: 67
+
+# ================================================
+# (2) Post Composition Version precomposed characters
+# These characters cannot be derived solely from the UnicodeData.txt file
+# in this version of Unicode.
+# ================================================
+
+2ADC # FORKING
+1D15E # MUSICAL SYMBOL HALF NOTE
+1D15F # MUSICAL SYMBOL QUARTER NOTE
+1D160 # MUSICAL SYMBOL EIGHTH NOTE
+1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
+1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB # MUSICAL SYMBOL MINIMA
+1D1BC # MUSICAL SYMBOL MINIMA BLACK
+1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF # MUSICAL SYMBOL FUSA WHITE
+1D1C0 # MUSICAL SYMBOL FUSA BLACK
+
+# Total code points: 14
+
+# ================================================
+# (3) Singleton Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition
+# consists of a single character.
+# These characters are simply quoted here for reference.
+# ================================================
+
+# 0340..0341 [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+# 0343 COMBINING GREEK KORONIS
+# 0374 GREEK NUMERAL SIGN
+# 037E GREEK QUESTION MARK
+# 0387 GREEK ANO TELEIA
+# 1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+# 1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+# 1F75 GREEK SMALL LETTER ETA WITH OXIA
+# 1F77 GREEK SMALL LETTER IOTA WITH OXIA
+# 1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+# 1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+# 1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+# 1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+# 1FBE GREEK PROSGEGRAMMENI
+# 1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+# 1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+# 1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+# 1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+# 1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+# 1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+# 1FEE..1FEF [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA
+# 1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+# 1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+# 1FFD GREEK OXIA
+# 2000..2001 [2] EN QUAD..EM QUAD
+# 2126 OHM SIGN
+# 212A..212B [2] KELVIN SIGN..ANGSTROM SIGN
+# 2329 LEFT-POINTING ANGLE BRACKET
+# 232A RIGHT-POINTING ANGLE BRACKET
+# F900..FA0D [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+# FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+# FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+# FA15..FA1E [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+# FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+# FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+# FA25..FA26 [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+# FA2A..FA2D [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D
+# FA30..FA6A [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+# FA70..FAD9 [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+# 2F800..2FA1D [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 924
+
+# ================================================
+# (4) Non-Starter Decompositions
+# These characters can be derived from the UnicodeData file
+# by including all characters whose canonical decomposition consists
+# of a sequence of characters, the first of which has a non-zero
+# combining class.
+# These characters are simply quoted here for reference.
+# ================================================
+
+# 0344 COMBINING GREEK DIALYTIKA TONOS
+# 0F73 TIBETAN VOWEL SIGN II
+# 0F75 TIBETAN VOWEL SIGN UU
+# 0F81 TIBETAN VOWEL SIGN REVERSED II
+
+# Total code points: 4
+
diff --git a/Master/tlpkg/tlperl/lib/unicore/Decomposition.pl b/Master/tlpkg/tlperl/lib/unicore/Decomposition.pl
new file mode 100644
index 00000000000..ba6b304c15e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Decomposition.pl
@@ -0,0 +1,5366 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+00A0 <noBreak> 0020
+00A8 <compat> 0020 0308
+00AA <super> 0061
+00AF <compat> 0020 0304
+00B2 <super> 0032
+00B3 <super> 0033
+00B4 <compat> 0020 0301
+00B5 <compat> 03BC
+00B8 <compat> 0020 0327
+00B9 <super> 0031
+00BA <super> 006F
+00BC <fraction> 0031 2044 0034
+00BD <fraction> 0031 2044 0032
+00BE <fraction> 0033 2044 0034
+00C0 0041 0300
+00C1 0041 0301
+00C2 0041 0302
+00C3 0041 0303
+00C4 0041 0308
+00C5 0041 030A
+00C7 0043 0327
+00C8 0045 0300
+00C9 0045 0301
+00CA 0045 0302
+00CB 0045 0308
+00CC 0049 0300
+00CD 0049 0301
+00CE 0049 0302
+00CF 0049 0308
+00D1 004E 0303
+00D2 004F 0300
+00D3 004F 0301
+00D4 004F 0302
+00D5 004F 0303
+00D6 004F 0308
+00D9 0055 0300
+00DA 0055 0301
+00DB 0055 0302
+00DC 0055 0308
+00DD 0059 0301
+00E0 0061 0300
+00E1 0061 0301
+00E2 0061 0302
+00E3 0061 0303
+00E4 0061 0308
+00E5 0061 030A
+00E7 0063 0327
+00E8 0065 0300
+00E9 0065 0301
+00EA 0065 0302
+00EB 0065 0308
+00EC 0069 0300
+00ED 0069 0301
+00EE 0069 0302
+00EF 0069 0308
+00F1 006E 0303
+00F2 006F 0300
+00F3 006F 0301
+00F4 006F 0302
+00F5 006F 0303
+00F6 006F 0308
+00F9 0075 0300
+00FA 0075 0301
+00FB 0075 0302
+00FC 0075 0308
+00FD 0079 0301
+00FF 0079 0308
+0100 0041 0304
+0101 0061 0304
+0102 0041 0306
+0103 0061 0306
+0104 0041 0328
+0105 0061 0328
+0106 0043 0301
+0107 0063 0301
+0108 0043 0302
+0109 0063 0302
+010A 0043 0307
+010B 0063 0307
+010C 0043 030C
+010D 0063 030C
+010E 0044 030C
+010F 0064 030C
+0112 0045 0304
+0113 0065 0304
+0114 0045 0306
+0115 0065 0306
+0116 0045 0307
+0117 0065 0307
+0118 0045 0328
+0119 0065 0328
+011A 0045 030C
+011B 0065 030C
+011C 0047 0302
+011D 0067 0302
+011E 0047 0306
+011F 0067 0306
+0120 0047 0307
+0121 0067 0307
+0122 0047 0327
+0123 0067 0327
+0124 0048 0302
+0125 0068 0302
+0128 0049 0303
+0129 0069 0303
+012A 0049 0304
+012B 0069 0304
+012C 0049 0306
+012D 0069 0306
+012E 0049 0328
+012F 0069 0328
+0130 0049 0307
+0132 <compat> 0049 004A
+0133 <compat> 0069 006A
+0134 004A 0302
+0135 006A 0302
+0136 004B 0327
+0137 006B 0327
+0139 004C 0301
+013A 006C 0301
+013B 004C 0327
+013C 006C 0327
+013D 004C 030C
+013E 006C 030C
+013F <compat> 004C 00B7
+0140 <compat> 006C 00B7
+0143 004E 0301
+0144 006E 0301
+0145 004E 0327
+0146 006E 0327
+0147 004E 030C
+0148 006E 030C
+0149 <compat> 02BC 006E
+014C 004F 0304
+014D 006F 0304
+014E 004F 0306
+014F 006F 0306
+0150 004F 030B
+0151 006F 030B
+0154 0052 0301
+0155 0072 0301
+0156 0052 0327
+0157 0072 0327
+0158 0052 030C
+0159 0072 030C
+015A 0053 0301
+015B 0073 0301
+015C 0053 0302
+015D 0073 0302
+015E 0053 0327
+015F 0073 0327
+0160 0053 030C
+0161 0073 030C
+0162 0054 0327
+0163 0074 0327
+0164 0054 030C
+0165 0074 030C
+0168 0055 0303
+0169 0075 0303
+016A 0055 0304
+016B 0075 0304
+016C 0055 0306
+016D 0075 0306
+016E 0055 030A
+016F 0075 030A
+0170 0055 030B
+0171 0075 030B
+0172 0055 0328
+0173 0075 0328
+0174 0057 0302
+0175 0077 0302
+0176 0059 0302
+0177 0079 0302
+0178 0059 0308
+0179 005A 0301
+017A 007A 0301
+017B 005A 0307
+017C 007A 0307
+017D 005A 030C
+017E 007A 030C
+017F <compat> 0073
+01A0 004F 031B
+01A1 006F 031B
+01AF 0055 031B
+01B0 0075 031B
+01C4 <compat> 0044 017D
+01C5 <compat> 0044 017E
+01C6 <compat> 0064 017E
+01C7 <compat> 004C 004A
+01C8 <compat> 004C 006A
+01C9 <compat> 006C 006A
+01CA <compat> 004E 004A
+01CB <compat> 004E 006A
+01CC <compat> 006E 006A
+01CD 0041 030C
+01CE 0061 030C
+01CF 0049 030C
+01D0 0069 030C
+01D1 004F 030C
+01D2 006F 030C
+01D3 0055 030C
+01D4 0075 030C
+01D5 00DC 0304
+01D6 00FC 0304
+01D7 00DC 0301
+01D8 00FC 0301
+01D9 00DC 030C
+01DA 00FC 030C
+01DB 00DC 0300
+01DC 00FC 0300
+01DE 00C4 0304
+01DF 00E4 0304
+01E0 0226 0304
+01E1 0227 0304
+01E2 00C6 0304
+01E3 00E6 0304
+01E6 0047 030C
+01E7 0067 030C
+01E8 004B 030C
+01E9 006B 030C
+01EA 004F 0328
+01EB 006F 0328
+01EC 01EA 0304
+01ED 01EB 0304
+01EE 01B7 030C
+01EF 0292 030C
+01F0 006A 030C
+01F1 <compat> 0044 005A
+01F2 <compat> 0044 007A
+01F3 <compat> 0064 007A
+01F4 0047 0301
+01F5 0067 0301
+01F8 004E 0300
+01F9 006E 0300
+01FA 00C5 0301
+01FB 00E5 0301
+01FC 00C6 0301
+01FD 00E6 0301
+01FE 00D8 0301
+01FF 00F8 0301
+0200 0041 030F
+0201 0061 030F
+0202 0041 0311
+0203 0061 0311
+0204 0045 030F
+0205 0065 030F
+0206 0045 0311
+0207 0065 0311
+0208 0049 030F
+0209 0069 030F
+020A 0049 0311
+020B 0069 0311
+020C 004F 030F
+020D 006F 030F
+020E 004F 0311
+020F 006F 0311
+0210 0052 030F
+0211 0072 030F
+0212 0052 0311
+0213 0072 0311
+0214 0055 030F
+0215 0075 030F
+0216 0055 0311
+0217 0075 0311
+0218 0053 0326
+0219 0073 0326
+021A 0054 0326
+021B 0074 0326
+021E 0048 030C
+021F 0068 030C
+0226 0041 0307
+0227 0061 0307
+0228 0045 0327
+0229 0065 0327
+022A 00D6 0304
+022B 00F6 0304
+022C 00D5 0304
+022D 00F5 0304
+022E 004F 0307
+022F 006F 0307
+0230 022E 0304
+0231 022F 0304
+0232 0059 0304
+0233 0079 0304
+02B0 <super> 0068
+02B1 <super> 0266
+02B2 <super> 006A
+02B3 <super> 0072
+02B4 <super> 0279
+02B5 <super> 027B
+02B6 <super> 0281
+02B7 <super> 0077
+02B8 <super> 0079
+02D8 <compat> 0020 0306
+02D9 <compat> 0020 0307
+02DA <compat> 0020 030A
+02DB <compat> 0020 0328
+02DC <compat> 0020 0303
+02DD <compat> 0020 030B
+02E0 <super> 0263
+02E1 <super> 006C
+02E2 <super> 0073
+02E3 <super> 0078
+02E4 <super> 0295
+0340 0300
+0341 0301
+0343 0313
+0344 0308 0301
+0374 02B9
+037A <compat> 0020 0345
+037E 003B
+0384 <compat> 0020 0301
+0385 00A8 0301
+0386 0391 0301
+0387 00B7
+0388 0395 0301
+0389 0397 0301
+038A 0399 0301
+038C 039F 0301
+038E 03A5 0301
+038F 03A9 0301
+0390 03CA 0301
+03AA 0399 0308
+03AB 03A5 0308
+03AC 03B1 0301
+03AD 03B5 0301
+03AE 03B7 0301
+03AF 03B9 0301
+03B0 03CB 0301
+03CA 03B9 0308
+03CB 03C5 0308
+03CC 03BF 0301
+03CD 03C5 0301
+03CE 03C9 0301
+03D0 <compat> 03B2
+03D1 <compat> 03B8
+03D2 <compat> 03A5
+03D3 03D2 0301
+03D4 03D2 0308
+03D5 <compat> 03C6
+03D6 <compat> 03C0
+03F0 <compat> 03BA
+03F1 <compat> 03C1
+03F2 <compat> 03C2
+03F4 <compat> 0398
+03F5 <compat> 03B5
+03F9 <compat> 03A3
+0400 0415 0300
+0401 0415 0308
+0403 0413 0301
+0407 0406 0308
+040C 041A 0301
+040D 0418 0300
+040E 0423 0306
+0419 0418 0306
+0439 0438 0306
+0450 0435 0300
+0451 0435 0308
+0453 0433 0301
+0457 0456 0308
+045C 043A 0301
+045D 0438 0300
+045E 0443 0306
+0476 0474 030F
+0477 0475 030F
+04C1 0416 0306
+04C2 0436 0306
+04D0 0410 0306
+04D1 0430 0306
+04D2 0410 0308
+04D3 0430 0308
+04D6 0415 0306
+04D7 0435 0306
+04DA 04D8 0308
+04DB 04D9 0308
+04DC 0416 0308
+04DD 0436 0308
+04DE 0417 0308
+04DF 0437 0308
+04E2 0418 0304
+04E3 0438 0304
+04E4 0418 0308
+04E5 0438 0308
+04E6 041E 0308
+04E7 043E 0308
+04EA 04E8 0308
+04EB 04E9 0308
+04EC 042D 0308
+04ED 044D 0308
+04EE 0423 0304
+04EF 0443 0304
+04F0 0423 0308
+04F1 0443 0308
+04F2 0423 030B
+04F3 0443 030B
+04F4 0427 0308
+04F5 0447 0308
+04F8 042B 0308
+04F9 044B 0308
+0587 <compat> 0565 0582
+0622 0627 0653
+0623 0627 0654
+0624 0648 0654
+0625 0627 0655
+0626 064A 0654
+0675 <compat> 0627 0674
+0676 <compat> 0648 0674
+0677 <compat> 06C7 0674
+0678 <compat> 064A 0674
+06C0 06D5 0654
+06C2 06C1 0654
+06D3 06D2 0654
+0929 0928 093C
+0931 0930 093C
+0934 0933 093C
+0958 0915 093C
+0959 0916 093C
+095A 0917 093C
+095B 091C 093C
+095C 0921 093C
+095D 0922 093C
+095E 092B 093C
+095F 092F 093C
+09CB 09C7 09BE
+09CC 09C7 09D7
+09DC 09A1 09BC
+09DD 09A2 09BC
+09DF 09AF 09BC
+0A33 0A32 0A3C
+0A36 0A38 0A3C
+0A59 0A16 0A3C
+0A5A 0A17 0A3C
+0A5B 0A1C 0A3C
+0A5E 0A2B 0A3C
+0B48 0B47 0B56
+0B4B 0B47 0B3E
+0B4C 0B47 0B57
+0B5C 0B21 0B3C
+0B5D 0B22 0B3C
+0B94 0B92 0BD7
+0BCA 0BC6 0BBE
+0BCB 0BC7 0BBE
+0BCC 0BC6 0BD7
+0C48 0C46 0C56
+0CC0 0CBF 0CD5
+0CC7 0CC6 0CD5
+0CC8 0CC6 0CD6
+0CCA 0CC6 0CC2
+0CCB 0CCA 0CD5
+0D4A 0D46 0D3E
+0D4B 0D47 0D3E
+0D4C 0D46 0D57
+0DDA 0DD9 0DCA
+0DDC 0DD9 0DCF
+0DDD 0DDC 0DCA
+0DDE 0DD9 0DDF
+0E33 <compat> 0E4D 0E32
+0EB3 <compat> 0ECD 0EB2
+0EDC <compat> 0EAB 0E99
+0EDD <compat> 0EAB 0EA1
+0F0C <noBreak> 0F0B
+0F43 0F42 0FB7
+0F4D 0F4C 0FB7
+0F52 0F51 0FB7
+0F57 0F56 0FB7
+0F5C 0F5B 0FB7
+0F69 0F40 0FB5
+0F73 0F71 0F72
+0F75 0F71 0F74
+0F76 0FB2 0F80
+0F77 <compat> 0FB2 0F81
+0F78 0FB3 0F80
+0F79 <compat> 0FB3 0F81
+0F81 0F71 0F80
+0F93 0F92 0FB7
+0F9D 0F9C 0FB7
+0FA2 0FA1 0FB7
+0FA7 0FA6 0FB7
+0FAC 0FAB 0FB7
+0FB9 0F90 0FB5
+1026 1025 102E
+10FC <super> 10DC
+1D2C <super> 0041
+1D2D <super> 00C6
+1D2E <super> 0042
+1D30 <super> 0044
+1D31 <super> 0045
+1D32 <super> 018E
+1D33 <super> 0047
+1D34 <super> 0048
+1D35 <super> 0049
+1D36 <super> 004A
+1D37 <super> 004B
+1D38 <super> 004C
+1D39 <super> 004D
+1D3A <super> 004E
+1D3C <super> 004F
+1D3D <super> 0222
+1D3E <super> 0050
+1D3F <super> 0052
+1D40 <super> 0054
+1D41 <super> 0055
+1D42 <super> 0057
+1D43 <super> 0061
+1D44 <super> 0250
+1D45 <super> 0251
+1D46 <super> 1D02
+1D47 <super> 0062
+1D48 <super> 0064
+1D49 <super> 0065
+1D4A <super> 0259
+1D4B <super> 025B
+1D4C <super> 025C
+1D4D <super> 0067
+1D4F <super> 006B
+1D50 <super> 006D
+1D51 <super> 014B
+1D52 <super> 006F
+1D53 <super> 0254
+1D54 <super> 1D16
+1D55 <super> 1D17
+1D56 <super> 0070
+1D57 <super> 0074
+1D58 <super> 0075
+1D59 <super> 1D1D
+1D5A <super> 026F
+1D5B <super> 0076
+1D5C <super> 1D25
+1D5D <super> 03B2
+1D5E <super> 03B3
+1D5F <super> 03B4
+1D60 <super> 03C6
+1D61 <super> 03C7
+1D62 <sub> 0069
+1D63 <sub> 0072
+1D64 <sub> 0075
+1D65 <sub> 0076
+1D66 <sub> 03B2
+1D67 <sub> 03B3
+1D68 <sub> 03C1
+1D69 <sub> 03C6
+1D6A <sub> 03C7
+1D78 <super> 043D
+1D9B <super> 0252
+1D9C <super> 0063
+1D9D <super> 0255
+1D9E <super> 00F0
+1D9F <super> 025C
+1DA0 <super> 0066
+1DA1 <super> 025F
+1DA2 <super> 0261
+1DA3 <super> 0265
+1DA4 <super> 0268
+1DA5 <super> 0269
+1DA6 <super> 026A
+1DA7 <super> 1D7B
+1DA8 <super> 029D
+1DA9 <super> 026D
+1DAA <super> 1D85
+1DAB <super> 029F
+1DAC <super> 0271
+1DAD <super> 0270
+1DAE <super> 0272
+1DAF <super> 0273
+1DB0 <super> 0274
+1DB1 <super> 0275
+1DB2 <super> 0278
+1DB3 <super> 0282
+1DB4 <super> 0283
+1DB5 <super> 01AB
+1DB6 <super> 0289
+1DB7 <super> 028A
+1DB8 <super> 1D1C
+1DB9 <super> 028B
+1DBA <super> 028C
+1DBB <super> 007A
+1DBC <super> 0290
+1DBD <super> 0291
+1DBE <super> 0292
+1DBF <super> 03B8
+1E00 0041 0325
+1E01 0061 0325
+1E02 0042 0307
+1E03 0062 0307
+1E04 0042 0323
+1E05 0062 0323
+1E06 0042 0331
+1E07 0062 0331
+1E08 00C7 0301
+1E09 00E7 0301
+1E0A 0044 0307
+1E0B 0064 0307
+1E0C 0044 0323
+1E0D 0064 0323
+1E0E 0044 0331
+1E0F 0064 0331
+1E10 0044 0327
+1E11 0064 0327
+1E12 0044 032D
+1E13 0064 032D
+1E14 0112 0300
+1E15 0113 0300
+1E16 0112 0301
+1E17 0113 0301
+1E18 0045 032D
+1E19 0065 032D
+1E1A 0045 0330
+1E1B 0065 0330
+1E1C 0228 0306
+1E1D 0229 0306
+1E1E 0046 0307
+1E1F 0066 0307
+1E20 0047 0304
+1E21 0067 0304
+1E22 0048 0307
+1E23 0068 0307
+1E24 0048 0323
+1E25 0068 0323
+1E26 0048 0308
+1E27 0068 0308
+1E28 0048 0327
+1E29 0068 0327
+1E2A 0048 032E
+1E2B 0068 032E
+1E2C 0049 0330
+1E2D 0069 0330
+1E2E 00CF 0301
+1E2F 00EF 0301
+1E30 004B 0301
+1E31 006B 0301
+1E32 004B 0323
+1E33 006B 0323
+1E34 004B 0331
+1E35 006B 0331
+1E36 004C 0323
+1E37 006C 0323
+1E38 1E36 0304
+1E39 1E37 0304
+1E3A 004C 0331
+1E3B 006C 0331
+1E3C 004C 032D
+1E3D 006C 032D
+1E3E 004D 0301
+1E3F 006D 0301
+1E40 004D 0307
+1E41 006D 0307
+1E42 004D 0323
+1E43 006D 0323
+1E44 004E 0307
+1E45 006E 0307
+1E46 004E 0323
+1E47 006E 0323
+1E48 004E 0331
+1E49 006E 0331
+1E4A 004E 032D
+1E4B 006E 032D
+1E4C 00D5 0301
+1E4D 00F5 0301
+1E4E 00D5 0308
+1E4F 00F5 0308
+1E50 014C 0300
+1E51 014D 0300
+1E52 014C 0301
+1E53 014D 0301
+1E54 0050 0301
+1E55 0070 0301
+1E56 0050 0307
+1E57 0070 0307
+1E58 0052 0307
+1E59 0072 0307
+1E5A 0052 0323
+1E5B 0072 0323
+1E5C 1E5A 0304
+1E5D 1E5B 0304
+1E5E 0052 0331
+1E5F 0072 0331
+1E60 0053 0307
+1E61 0073 0307
+1E62 0053 0323
+1E63 0073 0323
+1E64 015A 0307
+1E65 015B 0307
+1E66 0160 0307
+1E67 0161 0307
+1E68 1E62 0307
+1E69 1E63 0307
+1E6A 0054 0307
+1E6B 0074 0307
+1E6C 0054 0323
+1E6D 0074 0323
+1E6E 0054 0331
+1E6F 0074 0331
+1E70 0054 032D
+1E71 0074 032D
+1E72 0055 0324
+1E73 0075 0324
+1E74 0055 0330
+1E75 0075 0330
+1E76 0055 032D
+1E77 0075 032D
+1E78 0168 0301
+1E79 0169 0301
+1E7A 016A 0308
+1E7B 016B 0308
+1E7C 0056 0303
+1E7D 0076 0303
+1E7E 0056 0323
+1E7F 0076 0323
+1E80 0057 0300
+1E81 0077 0300
+1E82 0057 0301
+1E83 0077 0301
+1E84 0057 0308
+1E85 0077 0308
+1E86 0057 0307
+1E87 0077 0307
+1E88 0057 0323
+1E89 0077 0323
+1E8A 0058 0307
+1E8B 0078 0307
+1E8C 0058 0308
+1E8D 0078 0308
+1E8E 0059 0307
+1E8F 0079 0307
+1E90 005A 0302
+1E91 007A 0302
+1E92 005A 0323
+1E93 007A 0323
+1E94 005A 0331
+1E95 007A 0331
+1E96 0068 0331
+1E97 0074 0308
+1E98 0077 030A
+1E99 0079 030A
+1E9A <compat> 0061 02BE
+1E9B 017F 0307
+1EA0 0041 0323
+1EA1 0061 0323
+1EA2 0041 0309
+1EA3 0061 0309
+1EA4 00C2 0301
+1EA5 00E2 0301
+1EA6 00C2 0300
+1EA7 00E2 0300
+1EA8 00C2 0309
+1EA9 00E2 0309
+1EAA 00C2 0303
+1EAB 00E2 0303
+1EAC 1EA0 0302
+1EAD 1EA1 0302
+1EAE 0102 0301
+1EAF 0103 0301
+1EB0 0102 0300
+1EB1 0103 0300
+1EB2 0102 0309
+1EB3 0103 0309
+1EB4 0102 0303
+1EB5 0103 0303
+1EB6 1EA0 0306
+1EB7 1EA1 0306
+1EB8 0045 0323
+1EB9 0065 0323
+1EBA 0045 0309
+1EBB 0065 0309
+1EBC 0045 0303
+1EBD 0065 0303
+1EBE 00CA 0301
+1EBF 00EA 0301
+1EC0 00CA 0300
+1EC1 00EA 0300
+1EC2 00CA 0309
+1EC3 00EA 0309
+1EC4 00CA 0303
+1EC5 00EA 0303
+1EC6 1EB8 0302
+1EC7 1EB9 0302
+1EC8 0049 0309
+1EC9 0069 0309
+1ECA 0049 0323
+1ECB 0069 0323
+1ECC 004F 0323
+1ECD 006F 0323
+1ECE 004F 0309
+1ECF 006F 0309
+1ED0 00D4 0301
+1ED1 00F4 0301
+1ED2 00D4 0300
+1ED3 00F4 0300
+1ED4 00D4 0309
+1ED5 00F4 0309
+1ED6 00D4 0303
+1ED7 00F4 0303
+1ED8 1ECC 0302
+1ED9 1ECD 0302
+1EDA 01A0 0301
+1EDB 01A1 0301
+1EDC 01A0 0300
+1EDD 01A1 0300
+1EDE 01A0 0309
+1EDF 01A1 0309
+1EE0 01A0 0303
+1EE1 01A1 0303
+1EE2 01A0 0323
+1EE3 01A1 0323
+1EE4 0055 0323
+1EE5 0075 0323
+1EE6 0055 0309
+1EE7 0075 0309
+1EE8 01AF 0301
+1EE9 01B0 0301
+1EEA 01AF 0300
+1EEB 01B0 0300
+1EEC 01AF 0309
+1EED 01B0 0309
+1EEE 01AF 0303
+1EEF 01B0 0303
+1EF0 01AF 0323
+1EF1 01B0 0323
+1EF2 0059 0300
+1EF3 0079 0300
+1EF4 0059 0323
+1EF5 0079 0323
+1EF6 0059 0309
+1EF7 0079 0309
+1EF8 0059 0303
+1EF9 0079 0303
+1F00 03B1 0313
+1F01 03B1 0314
+1F02 1F00 0300
+1F03 1F01 0300
+1F04 1F00 0301
+1F05 1F01 0301
+1F06 1F00 0342
+1F07 1F01 0342
+1F08 0391 0313
+1F09 0391 0314
+1F0A 1F08 0300
+1F0B 1F09 0300
+1F0C 1F08 0301
+1F0D 1F09 0301
+1F0E 1F08 0342
+1F0F 1F09 0342
+1F10 03B5 0313
+1F11 03B5 0314
+1F12 1F10 0300
+1F13 1F11 0300
+1F14 1F10 0301
+1F15 1F11 0301
+1F18 0395 0313
+1F19 0395 0314
+1F1A 1F18 0300
+1F1B 1F19 0300
+1F1C 1F18 0301
+1F1D 1F19 0301
+1F20 03B7 0313
+1F21 03B7 0314
+1F22 1F20 0300
+1F23 1F21 0300
+1F24 1F20 0301
+1F25 1F21 0301
+1F26 1F20 0342
+1F27 1F21 0342
+1F28 0397 0313
+1F29 0397 0314
+1F2A 1F28 0300
+1F2B 1F29 0300
+1F2C 1F28 0301
+1F2D 1F29 0301
+1F2E 1F28 0342
+1F2F 1F29 0342
+1F30 03B9 0313
+1F31 03B9 0314
+1F32 1F30 0300
+1F33 1F31 0300
+1F34 1F30 0301
+1F35 1F31 0301
+1F36 1F30 0342
+1F37 1F31 0342
+1F38 0399 0313
+1F39 0399 0314
+1F3A 1F38 0300
+1F3B 1F39 0300
+1F3C 1F38 0301
+1F3D 1F39 0301
+1F3E 1F38 0342
+1F3F 1F39 0342
+1F40 03BF 0313
+1F41 03BF 0314
+1F42 1F40 0300
+1F43 1F41 0300
+1F44 1F40 0301
+1F45 1F41 0301
+1F48 039F 0313
+1F49 039F 0314
+1F4A 1F48 0300
+1F4B 1F49 0300
+1F4C 1F48 0301
+1F4D 1F49 0301
+1F50 03C5 0313
+1F51 03C5 0314
+1F52 1F50 0300
+1F53 1F51 0300
+1F54 1F50 0301
+1F55 1F51 0301
+1F56 1F50 0342
+1F57 1F51 0342
+1F59 03A5 0314
+1F5B 1F59 0300
+1F5D 1F59 0301
+1F5F 1F59 0342
+1F60 03C9 0313
+1F61 03C9 0314
+1F62 1F60 0300
+1F63 1F61 0300
+1F64 1F60 0301
+1F65 1F61 0301
+1F66 1F60 0342
+1F67 1F61 0342
+1F68 03A9 0313
+1F69 03A9 0314
+1F6A 1F68 0300
+1F6B 1F69 0300
+1F6C 1F68 0301
+1F6D 1F69 0301
+1F6E 1F68 0342
+1F6F 1F69 0342
+1F70 03B1 0300
+1F71 03AC
+1F72 03B5 0300
+1F73 03AD
+1F74 03B7 0300
+1F75 03AE
+1F76 03B9 0300
+1F77 03AF
+1F78 03BF 0300
+1F79 03CC
+1F7A 03C5 0300
+1F7B 03CD
+1F7C 03C9 0300
+1F7D 03CE
+1F80 1F00 0345
+1F81 1F01 0345
+1F82 1F02 0345
+1F83 1F03 0345
+1F84 1F04 0345
+1F85 1F05 0345
+1F86 1F06 0345
+1F87 1F07 0345
+1F88 1F08 0345
+1F89 1F09 0345
+1F8A 1F0A 0345
+1F8B 1F0B 0345
+1F8C 1F0C 0345
+1F8D 1F0D 0345
+1F8E 1F0E 0345
+1F8F 1F0F 0345
+1F90 1F20 0345
+1F91 1F21 0345
+1F92 1F22 0345
+1F93 1F23 0345
+1F94 1F24 0345
+1F95 1F25 0345
+1F96 1F26 0345
+1F97 1F27 0345
+1F98 1F28 0345
+1F99 1F29 0345
+1F9A 1F2A 0345
+1F9B 1F2B 0345
+1F9C 1F2C 0345
+1F9D 1F2D 0345
+1F9E 1F2E 0345
+1F9F 1F2F 0345
+1FA0 1F60 0345
+1FA1 1F61 0345
+1FA2 1F62 0345
+1FA3 1F63 0345
+1FA4 1F64 0345
+1FA5 1F65 0345
+1FA6 1F66 0345
+1FA7 1F67 0345
+1FA8 1F68 0345
+1FA9 1F69 0345
+1FAA 1F6A 0345
+1FAB 1F6B 0345
+1FAC 1F6C 0345
+1FAD 1F6D 0345
+1FAE 1F6E 0345
+1FAF 1F6F 0345
+1FB0 03B1 0306
+1FB1 03B1 0304
+1FB2 1F70 0345
+1FB3 03B1 0345
+1FB4 03AC 0345
+1FB6 03B1 0342
+1FB7 1FB6 0345
+1FB8 0391 0306
+1FB9 0391 0304
+1FBA 0391 0300
+1FBB 0386
+1FBC 0391 0345
+1FBD <compat> 0020 0313
+1FBE 03B9
+1FBF <compat> 0020 0313
+1FC0 <compat> 0020 0342
+1FC1 00A8 0342
+1FC2 1F74 0345
+1FC3 03B7 0345
+1FC4 03AE 0345
+1FC6 03B7 0342
+1FC7 1FC6 0345
+1FC8 0395 0300
+1FC9 0388
+1FCA 0397 0300
+1FCB 0389
+1FCC 0397 0345
+1FCD 1FBF 0300
+1FCE 1FBF 0301
+1FCF 1FBF 0342
+1FD0 03B9 0306
+1FD1 03B9 0304
+1FD2 03CA 0300
+1FD3 0390
+1FD6 03B9 0342
+1FD7 03CA 0342
+1FD8 0399 0306
+1FD9 0399 0304
+1FDA 0399 0300
+1FDB 038A
+1FDD 1FFE 0300
+1FDE 1FFE 0301
+1FDF 1FFE 0342
+1FE0 03C5 0306
+1FE1 03C5 0304
+1FE2 03CB 0300
+1FE3 03B0
+1FE4 03C1 0313
+1FE5 03C1 0314
+1FE6 03C5 0342
+1FE7 03CB 0342
+1FE8 03A5 0306
+1FE9 03A5 0304
+1FEA 03A5 0300
+1FEB 038E
+1FEC 03A1 0314
+1FED 00A8 0300
+1FEE 0385
+1FEF 0060
+1FF2 1F7C 0345
+1FF3 03C9 0345
+1FF4 03CE 0345
+1FF6 03C9 0342
+1FF7 1FF6 0345
+1FF8 039F 0300
+1FF9 038C
+1FFA 03A9 0300
+1FFB 038F
+1FFC 03A9 0345
+1FFD 00B4
+1FFE <compat> 0020 0314
+2000 2002
+2001 2003
+2002 2006 <compat> 0020
+2007 <noBreak> 0020
+2008 200A <compat> 0020
+2011 <noBreak> 2010
+2017 <compat> 0020 0333
+2024 <compat> 002E
+2025 <compat> 002E 002E
+2026 <compat> 002E 002E 002E
+202F <noBreak> 0020
+2033 <compat> 2032 2032
+2034 <compat> 2032 2032 2032
+2036 <compat> 2035 2035
+2037 <compat> 2035 2035 2035
+203C <compat> 0021 0021
+203E <compat> 0020 0305
+2047 <compat> 003F 003F
+2048 <compat> 003F 0021
+2049 <compat> 0021 003F
+2057 <compat> 2032 2032 2032 2032
+205F <compat> 0020
+2070 <super> 0030
+2071 <super> 0069
+2074 <super> 0034
+2075 <super> 0035
+2076 <super> 0036
+2077 <super> 0037
+2078 <super> 0038
+2079 <super> 0039
+207A <super> 002B
+207B <super> 2212
+207C <super> 003D
+207D <super> 0028
+207E <super> 0029
+207F <super> 006E
+2080 <sub> 0030
+2081 <sub> 0031
+2082 <sub> 0032
+2083 <sub> 0033
+2084 <sub> 0034
+2085 <sub> 0035
+2086 <sub> 0036
+2087 <sub> 0037
+2088 <sub> 0038
+2089 <sub> 0039
+208A <sub> 002B
+208B <sub> 2212
+208C <sub> 003D
+208D <sub> 0028
+208E <sub> 0029
+2090 <sub> 0061
+2091 <sub> 0065
+2092 <sub> 006F
+2093 <sub> 0078
+2094 <sub> 0259
+20A8 <compat> 0052 0073
+2100 <compat> 0061 002F 0063
+2101 <compat> 0061 002F 0073
+2102 <font> 0043
+2103 <compat> 00B0 0043
+2105 <compat> 0063 002F 006F
+2106 <compat> 0063 002F 0075
+2107 <compat> 0190
+2109 <compat> 00B0 0046
+210A <font> 0067
+210B 210D <font> 0048
+210E <font> 0068
+210F <font> 0127
+2110 2111 <font> 0049
+2112 <font> 004C
+2113 <font> 006C
+2115 <font> 004E
+2116 <compat> 004E 006F
+2119 <font> 0050
+211A <font> 0051
+211B 211D <font> 0052
+2120 <super> 0053 004D
+2121 <compat> 0054 0045 004C
+2122 <super> 0054 004D
+2124 <font> 005A
+2126 03A9
+2128 <font> 005A
+212A 004B
+212B 00C5
+212C <font> 0042
+212D <font> 0043
+212F <font> 0065
+2130 <font> 0045
+2131 <font> 0046
+2133 <font> 004D
+2134 <font> 006F
+2135 <compat> 05D0
+2136 <compat> 05D1
+2137 <compat> 05D2
+2138 <compat> 05D3
+2139 <font> 0069
+213B <compat> 0046 0041 0058
+213C <font> 03C0
+213D <font> 03B3
+213E <font> 0393
+213F <font> 03A0
+2140 <font> 2211
+2145 <font> 0044
+2146 <font> 0064
+2147 <font> 0065
+2148 <font> 0069
+2149 <font> 006A
+2153 <fraction> 0031 2044 0033
+2154 <fraction> 0032 2044 0033
+2155 <fraction> 0031 2044 0035
+2156 <fraction> 0032 2044 0035
+2157 <fraction> 0033 2044 0035
+2158 <fraction> 0034 2044 0035
+2159 <fraction> 0031 2044 0036
+215A <fraction> 0035 2044 0036
+215B <fraction> 0031 2044 0038
+215C <fraction> 0033 2044 0038
+215D <fraction> 0035 2044 0038
+215E <fraction> 0037 2044 0038
+215F <fraction> 0031 2044
+2160 <compat> 0049
+2161 <compat> 0049 0049
+2162 <compat> 0049 0049 0049
+2163 <compat> 0049 0056
+2164 <compat> 0056
+2165 <compat> 0056 0049
+2166 <compat> 0056 0049 0049
+2167 <compat> 0056 0049 0049 0049
+2168 <compat> 0049 0058
+2169 <compat> 0058
+216A <compat> 0058 0049
+216B <compat> 0058 0049 0049
+216C <compat> 004C
+216D <compat> 0043
+216E <compat> 0044
+216F <compat> 004D
+2170 <compat> 0069
+2171 <compat> 0069 0069
+2172 <compat> 0069 0069 0069
+2173 <compat> 0069 0076
+2174 <compat> 0076
+2175 <compat> 0076 0069
+2176 <compat> 0076 0069 0069
+2177 <compat> 0076 0069 0069 0069
+2178 <compat> 0069 0078
+2179 <compat> 0078
+217A <compat> 0078 0069
+217B <compat> 0078 0069 0069
+217C <compat> 006C
+217D <compat> 0063
+217E <compat> 0064
+217F <compat> 006D
+219A 2190 0338
+219B 2192 0338
+21AE 2194 0338
+21CD 21D0 0338
+21CE 21D4 0338
+21CF 21D2 0338
+2204 2203 0338
+2209 2208 0338
+220C 220B 0338
+2224 2223 0338
+2226 2225 0338
+222C <compat> 222B 222B
+222D <compat> 222B 222B 222B
+222F <compat> 222E 222E
+2230 <compat> 222E 222E 222E
+2241 223C 0338
+2244 2243 0338
+2247 2245 0338
+2249 2248 0338
+2260 003D 0338
+2262 2261 0338
+226D 224D 0338
+226E 003C 0338
+226F 003E 0338
+2270 2264 0338
+2271 2265 0338
+2274 2272 0338
+2275 2273 0338
+2278 2276 0338
+2279 2277 0338
+2280 227A 0338
+2281 227B 0338
+2284 2282 0338
+2285 2283 0338
+2288 2286 0338
+2289 2287 0338
+22AC 22A2 0338
+22AD 22A8 0338
+22AE 22A9 0338
+22AF 22AB 0338
+22E0 227C 0338
+22E1 227D 0338
+22E2 2291 0338
+22E3 2292 0338
+22EA 22B2 0338
+22EB 22B3 0338
+22EC 22B4 0338
+22ED 22B5 0338
+2329 3008
+232A 3009
+2460 <circle> 0031
+2461 <circle> 0032
+2462 <circle> 0033
+2463 <circle> 0034
+2464 <circle> 0035
+2465 <circle> 0036
+2466 <circle> 0037
+2467 <circle> 0038
+2468 <circle> 0039
+2469 <circle> 0031 0030
+246A <circle> 0031 0031
+246B <circle> 0031 0032
+246C <circle> 0031 0033
+246D <circle> 0031 0034
+246E <circle> 0031 0035
+246F <circle> 0031 0036
+2470 <circle> 0031 0037
+2471 <circle> 0031 0038
+2472 <circle> 0031 0039
+2473 <circle> 0032 0030
+2474 <compat> 0028 0031 0029
+2475 <compat> 0028 0032 0029
+2476 <compat> 0028 0033 0029
+2477 <compat> 0028 0034 0029
+2478 <compat> 0028 0035 0029
+2479 <compat> 0028 0036 0029
+247A <compat> 0028 0037 0029
+247B <compat> 0028 0038 0029
+247C <compat> 0028 0039 0029
+247D <compat> 0028 0031 0030 0029
+247E <compat> 0028 0031 0031 0029
+247F <compat> 0028 0031 0032 0029
+2480 <compat> 0028 0031 0033 0029
+2481 <compat> 0028 0031 0034 0029
+2482 <compat> 0028 0031 0035 0029
+2483 <compat> 0028 0031 0036 0029
+2484 <compat> 0028 0031 0037 0029
+2485 <compat> 0028 0031 0038 0029
+2486 <compat> 0028 0031 0039 0029
+2487 <compat> 0028 0032 0030 0029
+2488 <compat> 0031 002E
+2489 <compat> 0032 002E
+248A <compat> 0033 002E
+248B <compat> 0034 002E
+248C <compat> 0035 002E
+248D <compat> 0036 002E
+248E <compat> 0037 002E
+248F <compat> 0038 002E
+2490 <compat> 0039 002E
+2491 <compat> 0031 0030 002E
+2492 <compat> 0031 0031 002E
+2493 <compat> 0031 0032 002E
+2494 <compat> 0031 0033 002E
+2495 <compat> 0031 0034 002E
+2496 <compat> 0031 0035 002E
+2497 <compat> 0031 0036 002E
+2498 <compat> 0031 0037 002E
+2499 <compat> 0031 0038 002E
+249A <compat> 0031 0039 002E
+249B <compat> 0032 0030 002E
+249C <compat> 0028 0061 0029
+249D <compat> 0028 0062 0029
+249E <compat> 0028 0063 0029
+249F <compat> 0028 0064 0029
+24A0 <compat> 0028 0065 0029
+24A1 <compat> 0028 0066 0029
+24A2 <compat> 0028 0067 0029
+24A3 <compat> 0028 0068 0029
+24A4 <compat> 0028 0069 0029
+24A5 <compat> 0028 006A 0029
+24A6 <compat> 0028 006B 0029
+24A7 <compat> 0028 006C 0029
+24A8 <compat> 0028 006D 0029
+24A9 <compat> 0028 006E 0029
+24AA <compat> 0028 006F 0029
+24AB <compat> 0028 0070 0029
+24AC <compat> 0028 0071 0029
+24AD <compat> 0028 0072 0029
+24AE <compat> 0028 0073 0029
+24AF <compat> 0028 0074 0029
+24B0 <compat> 0028 0075 0029
+24B1 <compat> 0028 0076 0029
+24B2 <compat> 0028 0077 0029
+24B3 <compat> 0028 0078 0029
+24B4 <compat> 0028 0079 0029
+24B5 <compat> 0028 007A 0029
+24B6 <circle> 0041
+24B7 <circle> 0042
+24B8 <circle> 0043
+24B9 <circle> 0044
+24BA <circle> 0045
+24BB <circle> 0046
+24BC <circle> 0047
+24BD <circle> 0048
+24BE <circle> 0049
+24BF <circle> 004A
+24C0 <circle> 004B
+24C1 <circle> 004C
+24C2 <circle> 004D
+24C3 <circle> 004E
+24C4 <circle> 004F
+24C5 <circle> 0050
+24C6 <circle> 0051
+24C7 <circle> 0052
+24C8 <circle> 0053
+24C9 <circle> 0054
+24CA <circle> 0055
+24CB <circle> 0056
+24CC <circle> 0057
+24CD <circle> 0058
+24CE <circle> 0059
+24CF <circle> 005A
+24D0 <circle> 0061
+24D1 <circle> 0062
+24D2 <circle> 0063
+24D3 <circle> 0064
+24D4 <circle> 0065
+24D5 <circle> 0066
+24D6 <circle> 0067
+24D7 <circle> 0068
+24D8 <circle> 0069
+24D9 <circle> 006A
+24DA <circle> 006B
+24DB <circle> 006C
+24DC <circle> 006D
+24DD <circle> 006E
+24DE <circle> 006F
+24DF <circle> 0070
+24E0 <circle> 0071
+24E1 <circle> 0072
+24E2 <circle> 0073
+24E3 <circle> 0074
+24E4 <circle> 0075
+24E5 <circle> 0076
+24E6 <circle> 0077
+24E7 <circle> 0078
+24E8 <circle> 0079
+24E9 <circle> 007A
+24EA <circle> 0030
+2A0C <compat> 222B 222B 222B 222B
+2A74 <compat> 003A 003A 003D
+2A75 <compat> 003D 003D
+2A76 <compat> 003D 003D 003D
+2ADC 2ADD 0338
+2D6F <super> 2D61
+2E9F <compat> 6BCD
+2EF3 <compat> 9F9F
+2F00 <compat> 4E00
+2F01 <compat> 4E28
+2F02 <compat> 4E36
+2F03 <compat> 4E3F
+2F04 <compat> 4E59
+2F05 <compat> 4E85
+2F06 <compat> 4E8C
+2F07 <compat> 4EA0
+2F08 <compat> 4EBA
+2F09 <compat> 513F
+2F0A <compat> 5165
+2F0B <compat> 516B
+2F0C <compat> 5182
+2F0D <compat> 5196
+2F0E <compat> 51AB
+2F0F <compat> 51E0
+2F10 <compat> 51F5
+2F11 <compat> 5200
+2F12 <compat> 529B
+2F13 <compat> 52F9
+2F14 <compat> 5315
+2F15 <compat> 531A
+2F16 <compat> 5338
+2F17 <compat> 5341
+2F18 <compat> 535C
+2F19 <compat> 5369
+2F1A <compat> 5382
+2F1B <compat> 53B6
+2F1C <compat> 53C8
+2F1D <compat> 53E3
+2F1E <compat> 56D7
+2F1F <compat> 571F
+2F20 <compat> 58EB
+2F21 <compat> 5902
+2F22 <compat> 590A
+2F23 <compat> 5915
+2F24 <compat> 5927
+2F25 <compat> 5973
+2F26 <compat> 5B50
+2F27 <compat> 5B80
+2F28 <compat> 5BF8
+2F29 <compat> 5C0F
+2F2A <compat> 5C22
+2F2B <compat> 5C38
+2F2C <compat> 5C6E
+2F2D <compat> 5C71
+2F2E <compat> 5DDB
+2F2F <compat> 5DE5
+2F30 <compat> 5DF1
+2F31 <compat> 5DFE
+2F32 <compat> 5E72
+2F33 <compat> 5E7A
+2F34 <compat> 5E7F
+2F35 <compat> 5EF4
+2F36 <compat> 5EFE
+2F37 <compat> 5F0B
+2F38 <compat> 5F13
+2F39 <compat> 5F50
+2F3A <compat> 5F61
+2F3B <compat> 5F73
+2F3C <compat> 5FC3
+2F3D <compat> 6208
+2F3E <compat> 6236
+2F3F <compat> 624B
+2F40 <compat> 652F
+2F41 <compat> 6534
+2F42 <compat> 6587
+2F43 <compat> 6597
+2F44 <compat> 65A4
+2F45 <compat> 65B9
+2F46 <compat> 65E0
+2F47 <compat> 65E5
+2F48 <compat> 66F0
+2F49 <compat> 6708
+2F4A <compat> 6728
+2F4B <compat> 6B20
+2F4C <compat> 6B62
+2F4D <compat> 6B79
+2F4E <compat> 6BB3
+2F4F <compat> 6BCB
+2F50 <compat> 6BD4
+2F51 <compat> 6BDB
+2F52 <compat> 6C0F
+2F53 <compat> 6C14
+2F54 <compat> 6C34
+2F55 <compat> 706B
+2F56 <compat> 722A
+2F57 <compat> 7236
+2F58 <compat> 723B
+2F59 <compat> 723F
+2F5A <compat> 7247
+2F5B <compat> 7259
+2F5C <compat> 725B
+2F5D <compat> 72AC
+2F5E <compat> 7384
+2F5F <compat> 7389
+2F60 <compat> 74DC
+2F61 <compat> 74E6
+2F62 <compat> 7518
+2F63 <compat> 751F
+2F64 <compat> 7528
+2F65 <compat> 7530
+2F66 <compat> 758B
+2F67 <compat> 7592
+2F68 <compat> 7676
+2F69 <compat> 767D
+2F6A <compat> 76AE
+2F6B <compat> 76BF
+2F6C <compat> 76EE
+2F6D <compat> 77DB
+2F6E <compat> 77E2
+2F6F <compat> 77F3
+2F70 <compat> 793A
+2F71 <compat> 79B8
+2F72 <compat> 79BE
+2F73 <compat> 7A74
+2F74 <compat> 7ACB
+2F75 <compat> 7AF9
+2F76 <compat> 7C73
+2F77 <compat> 7CF8
+2F78 <compat> 7F36
+2F79 <compat> 7F51
+2F7A <compat> 7F8A
+2F7B <compat> 7FBD
+2F7C <compat> 8001
+2F7D <compat> 800C
+2F7E <compat> 8012
+2F7F <compat> 8033
+2F80 <compat> 807F
+2F81 <compat> 8089
+2F82 <compat> 81E3
+2F83 <compat> 81EA
+2F84 <compat> 81F3
+2F85 <compat> 81FC
+2F86 <compat> 820C
+2F87 <compat> 821B
+2F88 <compat> 821F
+2F89 <compat> 826E
+2F8A <compat> 8272
+2F8B <compat> 8278
+2F8C <compat> 864D
+2F8D <compat> 866B
+2F8E <compat> 8840
+2F8F <compat> 884C
+2F90 <compat> 8863
+2F91 <compat> 897E
+2F92 <compat> 898B
+2F93 <compat> 89D2
+2F94 <compat> 8A00
+2F95 <compat> 8C37
+2F96 <compat> 8C46
+2F97 <compat> 8C55
+2F98 <compat> 8C78
+2F99 <compat> 8C9D
+2F9A <compat> 8D64
+2F9B <compat> 8D70
+2F9C <compat> 8DB3
+2F9D <compat> 8EAB
+2F9E <compat> 8ECA
+2F9F <compat> 8F9B
+2FA0 <compat> 8FB0
+2FA1 <compat> 8FB5
+2FA2 <compat> 9091
+2FA3 <compat> 9149
+2FA4 <compat> 91C6
+2FA5 <compat> 91CC
+2FA6 <compat> 91D1
+2FA7 <compat> 9577
+2FA8 <compat> 9580
+2FA9 <compat> 961C
+2FAA <compat> 96B6
+2FAB <compat> 96B9
+2FAC <compat> 96E8
+2FAD <compat> 9751
+2FAE <compat> 975E
+2FAF <compat> 9762
+2FB0 <compat> 9769
+2FB1 <compat> 97CB
+2FB2 <compat> 97ED
+2FB3 <compat> 97F3
+2FB4 <compat> 9801
+2FB5 <compat> 98A8
+2FB6 <compat> 98DB
+2FB7 <compat> 98DF
+2FB8 <compat> 9996
+2FB9 <compat> 9999
+2FBA <compat> 99AC
+2FBB <compat> 9AA8
+2FBC <compat> 9AD8
+2FBD <compat> 9ADF
+2FBE <compat> 9B25
+2FBF <compat> 9B2F
+2FC0 <compat> 9B32
+2FC1 <compat> 9B3C
+2FC2 <compat> 9B5A
+2FC3 <compat> 9CE5
+2FC4 <compat> 9E75
+2FC5 <compat> 9E7F
+2FC6 <compat> 9EA5
+2FC7 <compat> 9EBB
+2FC8 <compat> 9EC3
+2FC9 <compat> 9ECD
+2FCA <compat> 9ED1
+2FCB <compat> 9EF9
+2FCC <compat> 9EFD
+2FCD <compat> 9F0E
+2FCE <compat> 9F13
+2FCF <compat> 9F20
+2FD0 <compat> 9F3B
+2FD1 <compat> 9F4A
+2FD2 <compat> 9F52
+2FD3 <compat> 9F8D
+2FD4 <compat> 9F9C
+2FD5 <compat> 9FA0
+3000 <wide> 0020
+3036 <compat> 3012
+3038 <compat> 5341
+3039 <compat> 5344
+303A <compat> 5345
+304C 304B 3099
+304E 304D 3099
+3050 304F 3099
+3052 3051 3099
+3054 3053 3099
+3056 3055 3099
+3058 3057 3099
+305A 3059 3099
+305C 305B 3099
+305E 305D 3099
+3060 305F 3099
+3062 3061 3099
+3065 3064 3099
+3067 3066 3099
+3069 3068 3099
+3070 306F 3099
+3071 306F 309A
+3073 3072 3099
+3074 3072 309A
+3076 3075 3099
+3077 3075 309A
+3079 3078 3099
+307A 3078 309A
+307C 307B 3099
+307D 307B 309A
+3094 3046 3099
+309B <compat> 0020 3099
+309C <compat> 0020 309A
+309E 309D 3099
+309F <vertical> 3088 308A
+30AC 30AB 3099
+30AE 30AD 3099
+30B0 30AF 3099
+30B2 30B1 3099
+30B4 30B3 3099
+30B6 30B5 3099
+30B8 30B7 3099
+30BA 30B9 3099
+30BC 30BB 3099
+30BE 30BD 3099
+30C0 30BF 3099
+30C2 30C1 3099
+30C5 30C4 3099
+30C7 30C6 3099
+30C9 30C8 3099
+30D0 30CF 3099
+30D1 30CF 309A
+30D3 30D2 3099
+30D4 30D2 309A
+30D6 30D5 3099
+30D7 30D5 309A
+30D9 30D8 3099
+30DA 30D8 309A
+30DC 30DB 3099
+30DD 30DB 309A
+30F4 30A6 3099
+30F7 30EF 3099
+30F8 30F0 3099
+30F9 30F1 3099
+30FA 30F2 3099
+30FE 30FD 3099
+30FF <vertical> 30B3 30C8
+3131 <compat> 1100
+3132 <compat> 1101
+3133 <compat> 11AA
+3134 <compat> 1102
+3135 <compat> 11AC
+3136 <compat> 11AD
+3137 <compat> 1103
+3138 <compat> 1104
+3139 <compat> 1105
+313A <compat> 11B0
+313B <compat> 11B1
+313C <compat> 11B2
+313D <compat> 11B3
+313E <compat> 11B4
+313F <compat> 11B5
+3140 <compat> 111A
+3141 <compat> 1106
+3142 <compat> 1107
+3143 <compat> 1108
+3144 <compat> 1121
+3145 <compat> 1109
+3146 <compat> 110A
+3147 <compat> 110B
+3148 <compat> 110C
+3149 <compat> 110D
+314A <compat> 110E
+314B <compat> 110F
+314C <compat> 1110
+314D <compat> 1111
+314E <compat> 1112
+314F <compat> 1161
+3150 <compat> 1162
+3151 <compat> 1163
+3152 <compat> 1164
+3153 <compat> 1165
+3154 <compat> 1166
+3155 <compat> 1167
+3156 <compat> 1168
+3157 <compat> 1169
+3158 <compat> 116A
+3159 <compat> 116B
+315A <compat> 116C
+315B <compat> 116D
+315C <compat> 116E
+315D <compat> 116F
+315E <compat> 1170
+315F <compat> 1171
+3160 <compat> 1172
+3161 <compat> 1173
+3162 <compat> 1174
+3163 <compat> 1175
+3164 <compat> 1160
+3165 <compat> 1114
+3166 <compat> 1115
+3167 <compat> 11C7
+3168 <compat> 11C8
+3169 <compat> 11CC
+316A <compat> 11CE
+316B <compat> 11D3
+316C <compat> 11D7
+316D <compat> 11D9
+316E <compat> 111C
+316F <compat> 11DD
+3170 <compat> 11DF
+3171 <compat> 111D
+3172 <compat> 111E
+3173 <compat> 1120
+3174 <compat> 1122
+3175 <compat> 1123
+3176 <compat> 1127
+3177 <compat> 1129
+3178 <compat> 112B
+3179 <compat> 112C
+317A <compat> 112D
+317B <compat> 112E
+317C <compat> 112F
+317D <compat> 1132
+317E <compat> 1136
+317F <compat> 1140
+3180 <compat> 1147
+3181 <compat> 114C
+3182 <compat> 11F1
+3183 <compat> 11F2
+3184 <compat> 1157
+3185 <compat> 1158
+3186 <compat> 1159
+3187 <compat> 1184
+3188 <compat> 1185
+3189 <compat> 1188
+318A <compat> 1191
+318B <compat> 1192
+318C <compat> 1194
+318D <compat> 119E
+318E <compat> 11A1
+3192 <super> 4E00
+3193 <super> 4E8C
+3194 <super> 4E09
+3195 <super> 56DB
+3196 <super> 4E0A
+3197 <super> 4E2D
+3198 <super> 4E0B
+3199 <super> 7532
+319A <super> 4E59
+319B <super> 4E19
+319C <super> 4E01
+319D <super> 5929
+319E <super> 5730
+319F <super> 4EBA
+3200 <compat> 0028 1100 0029
+3201 <compat> 0028 1102 0029
+3202 <compat> 0028 1103 0029
+3203 <compat> 0028 1105 0029
+3204 <compat> 0028 1106 0029
+3205 <compat> 0028 1107 0029
+3206 <compat> 0028 1109 0029
+3207 <compat> 0028 110B 0029
+3208 <compat> 0028 110C 0029
+3209 <compat> 0028 110E 0029
+320A <compat> 0028 110F 0029
+320B <compat> 0028 1110 0029
+320C <compat> 0028 1111 0029
+320D <compat> 0028 1112 0029
+320E <compat> 0028 1100 1161 0029
+320F <compat> 0028 1102 1161 0029
+3210 <compat> 0028 1103 1161 0029
+3211 <compat> 0028 1105 1161 0029
+3212 <compat> 0028 1106 1161 0029
+3213 <compat> 0028 1107 1161 0029
+3214 <compat> 0028 1109 1161 0029
+3215 <compat> 0028 110B 1161 0029
+3216 <compat> 0028 110C 1161 0029
+3217 <compat> 0028 110E 1161 0029
+3218 <compat> 0028 110F 1161 0029
+3219 <compat> 0028 1110 1161 0029
+321A <compat> 0028 1111 1161 0029
+321B <compat> 0028 1112 1161 0029
+321C <compat> 0028 110C 116E 0029
+321D <compat> 0028 110B 1169 110C 1165 11AB 0029
+321E <compat> 0028 110B 1169 1112 116E 0029
+3220 <compat> 0028 4E00 0029
+3221 <compat> 0028 4E8C 0029
+3222 <compat> 0028 4E09 0029
+3223 <compat> 0028 56DB 0029
+3224 <compat> 0028 4E94 0029
+3225 <compat> 0028 516D 0029
+3226 <compat> 0028 4E03 0029
+3227 <compat> 0028 516B 0029
+3228 <compat> 0028 4E5D 0029
+3229 <compat> 0028 5341 0029
+322A <compat> 0028 6708 0029
+322B <compat> 0028 706B 0029
+322C <compat> 0028 6C34 0029
+322D <compat> 0028 6728 0029
+322E <compat> 0028 91D1 0029
+322F <compat> 0028 571F 0029
+3230 <compat> 0028 65E5 0029
+3231 <compat> 0028 682A 0029
+3232 <compat> 0028 6709 0029
+3233 <compat> 0028 793E 0029
+3234 <compat> 0028 540D 0029
+3235 <compat> 0028 7279 0029
+3236 <compat> 0028 8CA1 0029
+3237 <compat> 0028 795D 0029
+3238 <compat> 0028 52B4 0029
+3239 <compat> 0028 4EE3 0029
+323A <compat> 0028 547C 0029
+323B <compat> 0028 5B66 0029
+323C <compat> 0028 76E3 0029
+323D <compat> 0028 4F01 0029
+323E <compat> 0028 8CC7 0029
+323F <compat> 0028 5354 0029
+3240 <compat> 0028 796D 0029
+3241 <compat> 0028 4F11 0029
+3242 <compat> 0028 81EA 0029
+3243 <compat> 0028 81F3 0029
+3250 <square> 0050 0054 0045
+3251 <circle> 0032 0031
+3252 <circle> 0032 0032
+3253 <circle> 0032 0033
+3254 <circle> 0032 0034
+3255 <circle> 0032 0035
+3256 <circle> 0032 0036
+3257 <circle> 0032 0037
+3258 <circle> 0032 0038
+3259 <circle> 0032 0039
+325A <circle> 0033 0030
+325B <circle> 0033 0031
+325C <circle> 0033 0032
+325D <circle> 0033 0033
+325E <circle> 0033 0034
+325F <circle> 0033 0035
+3260 <circle> 1100
+3261 <circle> 1102
+3262 <circle> 1103
+3263 <circle> 1105
+3264 <circle> 1106
+3265 <circle> 1107
+3266 <circle> 1109
+3267 <circle> 110B
+3268 <circle> 110C
+3269 <circle> 110E
+326A <circle> 110F
+326B <circle> 1110
+326C <circle> 1111
+326D <circle> 1112
+326E <circle> 1100 1161
+326F <circle> 1102 1161
+3270 <circle> 1103 1161
+3271 <circle> 1105 1161
+3272 <circle> 1106 1161
+3273 <circle> 1107 1161
+3274 <circle> 1109 1161
+3275 <circle> 110B 1161
+3276 <circle> 110C 1161
+3277 <circle> 110E 1161
+3278 <circle> 110F 1161
+3279 <circle> 1110 1161
+327A <circle> 1111 1161
+327B <circle> 1112 1161
+327C <circle> 110E 1161 11B7 1100 1169
+327D <circle> 110C 116E 110B 1174
+327E <circle> 110B 116E
+3280 <circle> 4E00
+3281 <circle> 4E8C
+3282 <circle> 4E09
+3283 <circle> 56DB
+3284 <circle> 4E94
+3285 <circle> 516D
+3286 <circle> 4E03
+3287 <circle> 516B
+3288 <circle> 4E5D
+3289 <circle> 5341
+328A <circle> 6708
+328B <circle> 706B
+328C <circle> 6C34
+328D <circle> 6728
+328E <circle> 91D1
+328F <circle> 571F
+3290 <circle> 65E5
+3291 <circle> 682A
+3292 <circle> 6709
+3293 <circle> 793E
+3294 <circle> 540D
+3295 <circle> 7279
+3296 <circle> 8CA1
+3297 <circle> 795D
+3298 <circle> 52B4
+3299 <circle> 79D8
+329A <circle> 7537
+329B <circle> 5973
+329C <circle> 9069
+329D <circle> 512A
+329E <circle> 5370
+329F <circle> 6CE8
+32A0 <circle> 9805
+32A1 <circle> 4F11
+32A2 <circle> 5199
+32A3 <circle> 6B63
+32A4 <circle> 4E0A
+32A5 <circle> 4E2D
+32A6 <circle> 4E0B
+32A7 <circle> 5DE6
+32A8 <circle> 53F3
+32A9 <circle> 533B
+32AA <circle> 5B97
+32AB <circle> 5B66
+32AC <circle> 76E3
+32AD <circle> 4F01
+32AE <circle> 8CC7
+32AF <circle> 5354
+32B0 <circle> 591C
+32B1 <circle> 0033 0036
+32B2 <circle> 0033 0037
+32B3 <circle> 0033 0038
+32B4 <circle> 0033 0039
+32B5 <circle> 0034 0030
+32B6 <circle> 0034 0031
+32B7 <circle> 0034 0032
+32B8 <circle> 0034 0033
+32B9 <circle> 0034 0034
+32BA <circle> 0034 0035
+32BB <circle> 0034 0036
+32BC <circle> 0034 0037
+32BD <circle> 0034 0038
+32BE <circle> 0034 0039
+32BF <circle> 0035 0030
+32C0 <compat> 0031 6708
+32C1 <compat> 0032 6708
+32C2 <compat> 0033 6708
+32C3 <compat> 0034 6708
+32C4 <compat> 0035 6708
+32C5 <compat> 0036 6708
+32C6 <compat> 0037 6708
+32C7 <compat> 0038 6708
+32C8 <compat> 0039 6708
+32C9 <compat> 0031 0030 6708
+32CA <compat> 0031 0031 6708
+32CB <compat> 0031 0032 6708
+32CC <square> 0048 0067
+32CD <square> 0065 0072 0067
+32CE <square> 0065 0056
+32CF <square> 004C 0054 0044
+32D0 <circle> 30A2
+32D1 <circle> 30A4
+32D2 <circle> 30A6
+32D3 <circle> 30A8
+32D4 <circle> 30AA
+32D5 <circle> 30AB
+32D6 <circle> 30AD
+32D7 <circle> 30AF
+32D8 <circle> 30B1
+32D9 <circle> 30B3
+32DA <circle> 30B5
+32DB <circle> 30B7
+32DC <circle> 30B9
+32DD <circle> 30BB
+32DE <circle> 30BD
+32DF <circle> 30BF
+32E0 <circle> 30C1
+32E1 <circle> 30C4
+32E2 <circle> 30C6
+32E3 <circle> 30C8
+32E4 <circle> 30CA
+32E5 <circle> 30CB
+32E6 <circle> 30CC
+32E7 <circle> 30CD
+32E8 <circle> 30CE
+32E9 <circle> 30CF
+32EA <circle> 30D2
+32EB <circle> 30D5
+32EC <circle> 30D8
+32ED <circle> 30DB
+32EE <circle> 30DE
+32EF <circle> 30DF
+32F0 <circle> 30E0
+32F1 <circle> 30E1
+32F2 <circle> 30E2
+32F3 <circle> 30E4
+32F4 <circle> 30E6
+32F5 <circle> 30E8
+32F6 <circle> 30E9
+32F7 <circle> 30EA
+32F8 <circle> 30EB
+32F9 <circle> 30EC
+32FA <circle> 30ED
+32FB <circle> 30EF
+32FC <circle> 30F0
+32FD <circle> 30F1
+32FE <circle> 30F2
+3300 <square> 30A2 30D1 30FC 30C8
+3301 <square> 30A2 30EB 30D5 30A1
+3302 <square> 30A2 30F3 30DA 30A2
+3303 <square> 30A2 30FC 30EB
+3304 <square> 30A4 30CB 30F3 30B0
+3305 <square> 30A4 30F3 30C1
+3306 <square> 30A6 30A9 30F3
+3307 <square> 30A8 30B9 30AF 30FC 30C9
+3308 <square> 30A8 30FC 30AB 30FC
+3309 <square> 30AA 30F3 30B9
+330A <square> 30AA 30FC 30E0
+330B <square> 30AB 30A4 30EA
+330C <square> 30AB 30E9 30C3 30C8
+330D <square> 30AB 30ED 30EA 30FC
+330E <square> 30AC 30ED 30F3
+330F <square> 30AC 30F3 30DE
+3310 <square> 30AE 30AC
+3311 <square> 30AE 30CB 30FC
+3312 <square> 30AD 30E5 30EA 30FC
+3313 <square> 30AE 30EB 30C0 30FC
+3314 <square> 30AD 30ED
+3315 <square> 30AD 30ED 30B0 30E9 30E0
+3316 <square> 30AD 30ED 30E1 30FC 30C8 30EB
+3317 <square> 30AD 30ED 30EF 30C3 30C8
+3318 <square> 30B0 30E9 30E0
+3319 <square> 30B0 30E9 30E0 30C8 30F3
+331A <square> 30AF 30EB 30BC 30A4 30ED
+331B <square> 30AF 30ED 30FC 30CD
+331C <square> 30B1 30FC 30B9
+331D <square> 30B3 30EB 30CA
+331E <square> 30B3 30FC 30DD
+331F <square> 30B5 30A4 30AF 30EB
+3320 <square> 30B5 30F3 30C1 30FC 30E0
+3321 <square> 30B7 30EA 30F3 30B0
+3322 <square> 30BB 30F3 30C1
+3323 <square> 30BB 30F3 30C8
+3324 <square> 30C0 30FC 30B9
+3325 <square> 30C7 30B7
+3326 <square> 30C9 30EB
+3327 <square> 30C8 30F3
+3328 <square> 30CA 30CE
+3329 <square> 30CE 30C3 30C8
+332A <square> 30CF 30A4 30C4
+332B <square> 30D1 30FC 30BB 30F3 30C8
+332C <square> 30D1 30FC 30C4
+332D <square> 30D0 30FC 30EC 30EB
+332E <square> 30D4 30A2 30B9 30C8 30EB
+332F <square> 30D4 30AF 30EB
+3330 <square> 30D4 30B3
+3331 <square> 30D3 30EB
+3332 <square> 30D5 30A1 30E9 30C3 30C9
+3333 <square> 30D5 30A3 30FC 30C8
+3334 <square> 30D6 30C3 30B7 30A7 30EB
+3335 <square> 30D5 30E9 30F3
+3336 <square> 30D8 30AF 30BF 30FC 30EB
+3337 <square> 30DA 30BD
+3338 <square> 30DA 30CB 30D2
+3339 <square> 30D8 30EB 30C4
+333A <square> 30DA 30F3 30B9
+333B <square> 30DA 30FC 30B8
+333C <square> 30D9 30FC 30BF
+333D <square> 30DD 30A4 30F3 30C8
+333E <square> 30DC 30EB 30C8
+333F <square> 30DB 30F3
+3340 <square> 30DD 30F3 30C9
+3341 <square> 30DB 30FC 30EB
+3342 <square> 30DB 30FC 30F3
+3343 <square> 30DE 30A4 30AF 30ED
+3344 <square> 30DE 30A4 30EB
+3345 <square> 30DE 30C3 30CF
+3346 <square> 30DE 30EB 30AF
+3347 <square> 30DE 30F3 30B7 30E7 30F3
+3348 <square> 30DF 30AF 30ED 30F3
+3349 <square> 30DF 30EA
+334A <square> 30DF 30EA 30D0 30FC 30EB
+334B <square> 30E1 30AC
+334C <square> 30E1 30AC 30C8 30F3
+334D <square> 30E1 30FC 30C8 30EB
+334E <square> 30E4 30FC 30C9
+334F <square> 30E4 30FC 30EB
+3350 <square> 30E6 30A2 30F3
+3351 <square> 30EA 30C3 30C8 30EB
+3352 <square> 30EA 30E9
+3353 <square> 30EB 30D4 30FC
+3354 <square> 30EB 30FC 30D6 30EB
+3355 <square> 30EC 30E0
+3356 <square> 30EC 30F3 30C8 30B2 30F3
+3357 <square> 30EF 30C3 30C8
+3358 <compat> 0030 70B9
+3359 <compat> 0031 70B9
+335A <compat> 0032 70B9
+335B <compat> 0033 70B9
+335C <compat> 0034 70B9
+335D <compat> 0035 70B9
+335E <compat> 0036 70B9
+335F <compat> 0037 70B9
+3360 <compat> 0038 70B9
+3361 <compat> 0039 70B9
+3362 <compat> 0031 0030 70B9
+3363 <compat> 0031 0031 70B9
+3364 <compat> 0031 0032 70B9
+3365 <compat> 0031 0033 70B9
+3366 <compat> 0031 0034 70B9
+3367 <compat> 0031 0035 70B9
+3368 <compat> 0031 0036 70B9
+3369 <compat> 0031 0037 70B9
+336A <compat> 0031 0038 70B9
+336B <compat> 0031 0039 70B9
+336C <compat> 0032 0030 70B9
+336D <compat> 0032 0031 70B9
+336E <compat> 0032 0032 70B9
+336F <compat> 0032 0033 70B9
+3370 <compat> 0032 0034 70B9
+3371 <square> 0068 0050 0061
+3372 <square> 0064 0061
+3373 <square> 0041 0055
+3374 <square> 0062 0061 0072
+3375 <square> 006F 0056
+3376 <square> 0070 0063
+3377 <square> 0064 006D
+3378 <square> 0064 006D 00B2
+3379 <square> 0064 006D 00B3
+337A <square> 0049 0055
+337B <square> 5E73 6210
+337C <square> 662D 548C
+337D <square> 5927 6B63
+337E <square> 660E 6CBB
+337F <square> 682A 5F0F 4F1A 793E
+3380 <square> 0070 0041
+3381 <square> 006E 0041
+3382 <square> 03BC 0041
+3383 <square> 006D 0041
+3384 <square> 006B 0041
+3385 <square> 004B 0042
+3386 <square> 004D 0042
+3387 <square> 0047 0042
+3388 <square> 0063 0061 006C
+3389 <square> 006B 0063 0061 006C
+338A <square> 0070 0046
+338B <square> 006E 0046
+338C <square> 03BC 0046
+338D <square> 03BC 0067
+338E <square> 006D 0067
+338F <square> 006B 0067
+3390 <square> 0048 007A
+3391 <square> 006B 0048 007A
+3392 <square> 004D 0048 007A
+3393 <square> 0047 0048 007A
+3394 <square> 0054 0048 007A
+3395 <square> 03BC 2113
+3396 <square> 006D 2113
+3397 <square> 0064 2113
+3398 <square> 006B 2113
+3399 <square> 0066 006D
+339A <square> 006E 006D
+339B <square> 03BC 006D
+339C <square> 006D 006D
+339D <square> 0063 006D
+339E <square> 006B 006D
+339F <square> 006D 006D 00B2
+33A0 <square> 0063 006D 00B2
+33A1 <square> 006D 00B2
+33A2 <square> 006B 006D 00B2
+33A3 <square> 006D 006D 00B3
+33A4 <square> 0063 006D 00B3
+33A5 <square> 006D 00B3
+33A6 <square> 006B 006D 00B3
+33A7 <square> 006D 2215 0073
+33A8 <square> 006D 2215 0073 00B2
+33A9 <square> 0050 0061
+33AA <square> 006B 0050 0061
+33AB <square> 004D 0050 0061
+33AC <square> 0047 0050 0061
+33AD <square> 0072 0061 0064
+33AE <square> 0072 0061 0064 2215 0073
+33AF <square> 0072 0061 0064 2215 0073 00B2
+33B0 <square> 0070 0073
+33B1 <square> 006E 0073
+33B2 <square> 03BC 0073
+33B3 <square> 006D 0073
+33B4 <square> 0070 0056
+33B5 <square> 006E 0056
+33B6 <square> 03BC 0056
+33B7 <square> 006D 0056
+33B8 <square> 006B 0056
+33B9 <square> 004D 0056
+33BA <square> 0070 0057
+33BB <square> 006E 0057
+33BC <square> 03BC 0057
+33BD <square> 006D 0057
+33BE <square> 006B 0057
+33BF <square> 004D 0057
+33C0 <square> 006B 03A9
+33C1 <square> 004D 03A9
+33C2 <square> 0061 002E 006D 002E
+33C3 <square> 0042 0071
+33C4 <square> 0063 0063
+33C5 <square> 0063 0064
+33C6 <square> 0043 2215 006B 0067
+33C7 <square> 0043 006F 002E
+33C8 <square> 0064 0042
+33C9 <square> 0047 0079
+33CA <square> 0068 0061
+33CB <square> 0048 0050
+33CC <square> 0069 006E
+33CD <square> 004B 004B
+33CE <square> 004B 004D
+33CF <square> 006B 0074
+33D0 <square> 006C 006D
+33D1 <square> 006C 006E
+33D2 <square> 006C 006F 0067
+33D3 <square> 006C 0078
+33D4 <square> 006D 0062
+33D5 <square> 006D 0069 006C
+33D6 <square> 006D 006F 006C
+33D7 <square> 0050 0048
+33D8 <square> 0070 002E 006D 002E
+33D9 <square> 0050 0050 004D
+33DA <square> 0050 0052
+33DB <square> 0073 0072
+33DC <square> 0053 0076
+33DD <square> 0057 0062
+33DE <square> 0056 2215 006D
+33DF <square> 0041 2215 006D
+33E0 <compat> 0031 65E5
+33E1 <compat> 0032 65E5
+33E2 <compat> 0033 65E5
+33E3 <compat> 0034 65E5
+33E4 <compat> 0035 65E5
+33E5 <compat> 0036 65E5
+33E6 <compat> 0037 65E5
+33E7 <compat> 0038 65E5
+33E8 <compat> 0039 65E5
+33E9 <compat> 0031 0030 65E5
+33EA <compat> 0031 0031 65E5
+33EB <compat> 0031 0032 65E5
+33EC <compat> 0031 0033 65E5
+33ED <compat> 0031 0034 65E5
+33EE <compat> 0031 0035 65E5
+33EF <compat> 0031 0036 65E5
+33F0 <compat> 0031 0037 65E5
+33F1 <compat> 0031 0038 65E5
+33F2 <compat> 0031 0039 65E5
+33F3 <compat> 0032 0030 65E5
+33F4 <compat> 0032 0031 65E5
+33F5 <compat> 0032 0032 65E5
+33F6 <compat> 0032 0033 65E5
+33F7 <compat> 0032 0034 65E5
+33F8 <compat> 0032 0035 65E5
+33F9 <compat> 0032 0036 65E5
+33FA <compat> 0032 0037 65E5
+33FB <compat> 0032 0038 65E5
+33FC <compat> 0032 0039 65E5
+33FD <compat> 0033 0030 65E5
+33FE <compat> 0033 0031 65E5
+33FF <square> 0067 0061 006C
+F900 8C48
+F901 66F4
+F902 8ECA
+F903 8CC8
+F904 6ED1
+F905 4E32
+F906 53E5
+F907 F908 9F9C
+F909 5951
+F90A 91D1
+F90B 5587
+F90C 5948
+F90D 61F6
+F90E 7669
+F90F 7F85
+F910 863F
+F911 87BA
+F912 88F8
+F913 908F
+F914 6A02
+F915 6D1B
+F916 70D9
+F917 73DE
+F918 843D
+F919 916A
+F91A 99F1
+F91B 4E82
+F91C 5375
+F91D 6B04
+F91E 721B
+F91F 862D
+F920 9E1E
+F921 5D50
+F922 6FEB
+F923 85CD
+F924 8964
+F925 62C9
+F926 81D8
+F927 881F
+F928 5ECA
+F929 6717
+F92A 6D6A
+F92B 72FC
+F92C 90CE
+F92D 4F86
+F92E 51B7
+F92F 52DE
+F930 64C4
+F931 6AD3
+F932 7210
+F933 76E7
+F934 8001
+F935 8606
+F936 865C
+F937 8DEF
+F938 9732
+F939 9B6F
+F93A 9DFA
+F93B 788C
+F93C 797F
+F93D 7DA0
+F93E 83C9
+F93F 9304
+F940 9E7F
+F941 8AD6
+F942 58DF
+F943 5F04
+F944 7C60
+F945 807E
+F946 7262
+F947 78CA
+F948 8CC2
+F949 96F7
+F94A 58D8
+F94B 5C62
+F94C 6A13
+F94D 6DDA
+F94E 6F0F
+F94F 7D2F
+F950 7E37
+F951 964B
+F952 52D2
+F953 808B
+F954 51DC
+F955 51CC
+F956 7A1C
+F957 7DBE
+F958 83F1
+F959 9675
+F95A 8B80
+F95B 62CF
+F95C 6A02
+F95D 8AFE
+F95E 4E39
+F95F 5BE7
+F960 6012
+F961 7387
+F962 7570
+F963 5317
+F964 78FB
+F965 4FBF
+F966 5FA9
+F967 4E0D
+F968 6CCC
+F969 6578
+F96A 7D22
+F96B 53C3
+F96C 585E
+F96D 7701
+F96E 8449
+F96F 8AAA
+F970 6BBA
+F971 8FB0
+F972 6C88
+F973 62FE
+F974 82E5
+F975 63A0
+F976 7565
+F977 4EAE
+F978 5169
+F979 51C9
+F97A 6881
+F97B 7CE7
+F97C 826F
+F97D 8AD2
+F97E 91CF
+F97F 52F5
+F980 5442
+F981 5973
+F982 5EEC
+F983 65C5
+F984 6FFE
+F985 792A
+F986 95AD
+F987 9A6A
+F988 9E97
+F989 9ECE
+F98A 529B
+F98B 66C6
+F98C 6B77
+F98D 8F62
+F98E 5E74
+F98F 6190
+F990 6200
+F991 649A
+F992 6F23
+F993 7149
+F994 7489
+F995 79CA
+F996 7DF4
+F997 806F
+F998 8F26
+F999 84EE
+F99A 9023
+F99B 934A
+F99C 5217
+F99D 52A3
+F99E 54BD
+F99F 70C8
+F9A0 88C2
+F9A1 8AAA
+F9A2 5EC9
+F9A3 5FF5
+F9A4 637B
+F9A5 6BAE
+F9A6 7C3E
+F9A7 7375
+F9A8 4EE4
+F9A9 56F9
+F9AA 5BE7
+F9AB 5DBA
+F9AC 601C
+F9AD 73B2
+F9AE 7469
+F9AF 7F9A
+F9B0 8046
+F9B1 9234
+F9B2 96F6
+F9B3 9748
+F9B4 9818
+F9B5 4F8B
+F9B6 79AE
+F9B7 91B4
+F9B8 96B8
+F9B9 60E1
+F9BA 4E86
+F9BB 50DA
+F9BC 5BEE
+F9BD 5C3F
+F9BE 6599
+F9BF 6A02
+F9C0 71CE
+F9C1 7642
+F9C2 84FC
+F9C3 907C
+F9C4 9F8D
+F9C5 6688
+F9C6 962E
+F9C7 5289
+F9C8 677B
+F9C9 67F3
+F9CA 6D41
+F9CB 6E9C
+F9CC 7409
+F9CD 7559
+F9CE 786B
+F9CF 7D10
+F9D0 985E
+F9D1 516D
+F9D2 622E
+F9D3 9678
+F9D4 502B
+F9D5 5D19
+F9D6 6DEA
+F9D7 8F2A
+F9D8 5F8B
+F9D9 6144
+F9DA 6817
+F9DB 7387
+F9DC 9686
+F9DD 5229
+F9DE 540F
+F9DF 5C65
+F9E0 6613
+F9E1 674E
+F9E2 68A8
+F9E3 6CE5
+F9E4 7406
+F9E5 75E2
+F9E6 7F79
+F9E7 88CF
+F9E8 88E1
+F9E9 91CC
+F9EA 96E2
+F9EB 533F
+F9EC 6EBA
+F9ED 541D
+F9EE 71D0
+F9EF 7498
+F9F0 85FA
+F9F1 96A3
+F9F2 9C57
+F9F3 9E9F
+F9F4 6797
+F9F5 6DCB
+F9F6 81E8
+F9F7 7ACB
+F9F8 7B20
+F9F9 7C92
+F9FA 72C0
+F9FB 7099
+F9FC 8B58
+F9FD 4EC0
+F9FE 8336
+F9FF 523A
+FA00 5207
+FA01 5EA6
+FA02 62D3
+FA03 7CD6
+FA04 5B85
+FA05 6D1E
+FA06 66B4
+FA07 8F3B
+FA08 884C
+FA09 964D
+FA0A 898B
+FA0B 5ED3
+FA0C 5140
+FA0D 55C0
+FA10 585A
+FA12 6674
+FA15 51DE
+FA16 732A
+FA17 76CA
+FA18 793C
+FA19 795E
+FA1A 7965
+FA1B 798F
+FA1C 9756
+FA1D 7CBE
+FA1E 7FBD
+FA20 8612
+FA22 8AF8
+FA25 9038
+FA26 90FD
+FA2A 98EF
+FA2B 98FC
+FA2C 9928
+FA2D 9DB4
+FA30 4FAE
+FA31 50E7
+FA32 514D
+FA33 52C9
+FA34 52E4
+FA35 5351
+FA36 559D
+FA37 5606
+FA38 5668
+FA39 5840
+FA3A 58A8
+FA3B 5C64
+FA3C 5C6E
+FA3D 6094
+FA3E 6168
+FA3F 618E
+FA40 61F2
+FA41 654F
+FA42 65E2
+FA43 6691
+FA44 6885
+FA45 6D77
+FA46 6E1A
+FA47 6F22
+FA48 716E
+FA49 722B
+FA4A 7422
+FA4B 7891
+FA4C 793E
+FA4D 7949
+FA4E 7948
+FA4F 7950
+FA50 7956
+FA51 795D
+FA52 798D
+FA53 798E
+FA54 7A40
+FA55 7A81
+FA56 7BC0
+FA57 7DF4
+FA58 7E09
+FA59 7E41
+FA5A 7F72
+FA5B 8005
+FA5C 81ED
+FA5D FA5E 8279
+FA5F 8457
+FA60 8910
+FA61 8996
+FA62 8B01
+FA63 8B39
+FA64 8CD3
+FA65 8D08
+FA66 8FB6
+FA67 9038
+FA68 96E3
+FA69 97FF
+FA6A 983B
+FA70 4E26
+FA71 51B5
+FA72 5168
+FA73 4F80
+FA74 5145
+FA75 5180
+FA76 52C7
+FA77 52FA
+FA78 559D
+FA79 5555
+FA7A 5599
+FA7B 55E2
+FA7C 585A
+FA7D 58B3
+FA7E 5944
+FA7F 5954
+FA80 5A62
+FA81 5B28
+FA82 5ED2
+FA83 5ED9
+FA84 5F69
+FA85 5FAD
+FA86 60D8
+FA87 614E
+FA88 6108
+FA89 618E
+FA8A 6160
+FA8B 61F2
+FA8C 6234
+FA8D 63C4
+FA8E 641C
+FA8F 6452
+FA90 6556
+FA91 6674
+FA92 6717
+FA93 671B
+FA94 6756
+FA95 6B79
+FA96 6BBA
+FA97 6D41
+FA98 6EDB
+FA99 6ECB
+FA9A 6F22
+FA9B 701E
+FA9C 716E
+FA9D 77A7
+FA9E 7235
+FA9F 72AF
+FAA0 732A
+FAA1 7471
+FAA2 7506
+FAA3 753B
+FAA4 761D
+FAA5 761F
+FAA6 76CA
+FAA7 76DB
+FAA8 76F4
+FAA9 774A
+FAAA 7740
+FAAB 78CC
+FAAC 7AB1
+FAAD 7BC0
+FAAE 7C7B
+FAAF 7D5B
+FAB0 7DF4
+FAB1 7F3E
+FAB2 8005
+FAB3 8352
+FAB4 83EF
+FAB5 8779
+FAB6 8941
+FAB7 8986
+FAB8 8996
+FAB9 8ABF
+FABA 8AF8
+FABB 8ACB
+FABC 8B01
+FABD 8AFE
+FABE 8AED
+FABF 8B39
+FAC0 8B8A
+FAC1 8D08
+FAC2 8F38
+FAC3 9072
+FAC4 9199
+FAC5 9276
+FAC6 967C
+FAC7 96E3
+FAC8 9756
+FAC9 97DB
+FACA 97FF
+FACB 980B
+FACC 983B
+FACD 9B12
+FACE 9F9C
+FACF 2284A
+FAD0 22844
+FAD1 233D5
+FAD2 3B9D
+FAD3 4018
+FAD4 4039
+FAD5 25249
+FAD6 25CD0
+FAD7 27ED3
+FAD8 9F43
+FAD9 9F8E
+FB00 <compat> 0066 0066
+FB01 <compat> 0066 0069
+FB02 <compat> 0066 006C
+FB03 <compat> 0066 0066 0069
+FB04 <compat> 0066 0066 006C
+FB05 <compat> 017F 0074
+FB06 <compat> 0073 0074
+FB13 <compat> 0574 0576
+FB14 <compat> 0574 0565
+FB15 <compat> 0574 056B
+FB16 <compat> 057E 0576
+FB17 <compat> 0574 056D
+FB1D 05D9 05B4
+FB1F 05F2 05B7
+FB20 <font> 05E2
+FB21 <font> 05D0
+FB22 <font> 05D3
+FB23 <font> 05D4
+FB24 <font> 05DB
+FB25 <font> 05DC
+FB26 <font> 05DD
+FB27 <font> 05E8
+FB28 <font> 05EA
+FB29 <font> 002B
+FB2A 05E9 05C1
+FB2B 05E9 05C2
+FB2C FB49 05C1
+FB2D FB49 05C2
+FB2E 05D0 05B7
+FB2F 05D0 05B8
+FB30 05D0 05BC
+FB31 05D1 05BC
+FB32 05D2 05BC
+FB33 05D3 05BC
+FB34 05D4 05BC
+FB35 05D5 05BC
+FB36 05D6 05BC
+FB38 05D8 05BC
+FB39 05D9 05BC
+FB3A 05DA 05BC
+FB3B 05DB 05BC
+FB3C 05DC 05BC
+FB3E 05DE 05BC
+FB40 05E0 05BC
+FB41 05E1 05BC
+FB43 05E3 05BC
+FB44 05E4 05BC
+FB46 05E6 05BC
+FB47 05E7 05BC
+FB48 05E8 05BC
+FB49 05E9 05BC
+FB4A 05EA 05BC
+FB4B 05D5 05B9
+FB4C 05D1 05BF
+FB4D 05DB 05BF
+FB4E 05E4 05BF
+FB4F <compat> 05D0 05DC
+FB50 <isolated> 0671
+FB51 <final> 0671
+FB52 <isolated> 067B
+FB53 <final> 067B
+FB54 <initial> 067B
+FB55 <medial> 067B
+FB56 <isolated> 067E
+FB57 <final> 067E
+FB58 <initial> 067E
+FB59 <medial> 067E
+FB5A <isolated> 0680
+FB5B <final> 0680
+FB5C <initial> 0680
+FB5D <medial> 0680
+FB5E <isolated> 067A
+FB5F <final> 067A
+FB60 <initial> 067A
+FB61 <medial> 067A
+FB62 <isolated> 067F
+FB63 <final> 067F
+FB64 <initial> 067F
+FB65 <medial> 067F
+FB66 <isolated> 0679
+FB67 <final> 0679
+FB68 <initial> 0679
+FB69 <medial> 0679
+FB6A <isolated> 06A4
+FB6B <final> 06A4
+FB6C <initial> 06A4
+FB6D <medial> 06A4
+FB6E <isolated> 06A6
+FB6F <final> 06A6
+FB70 <initial> 06A6
+FB71 <medial> 06A6
+FB72 <isolated> 0684
+FB73 <final> 0684
+FB74 <initial> 0684
+FB75 <medial> 0684
+FB76 <isolated> 0683
+FB77 <final> 0683
+FB78 <initial> 0683
+FB79 <medial> 0683
+FB7A <isolated> 0686
+FB7B <final> 0686
+FB7C <initial> 0686
+FB7D <medial> 0686
+FB7E <isolated> 0687
+FB7F <final> 0687
+FB80 <initial> 0687
+FB81 <medial> 0687
+FB82 <isolated> 068D
+FB83 <final> 068D
+FB84 <isolated> 068C
+FB85 <final> 068C
+FB86 <isolated> 068E
+FB87 <final> 068E
+FB88 <isolated> 0688
+FB89 <final> 0688
+FB8A <isolated> 0698
+FB8B <final> 0698
+FB8C <isolated> 0691
+FB8D <final> 0691
+FB8E <isolated> 06A9
+FB8F <final> 06A9
+FB90 <initial> 06A9
+FB91 <medial> 06A9
+FB92 <isolated> 06AF
+FB93 <final> 06AF
+FB94 <initial> 06AF
+FB95 <medial> 06AF
+FB96 <isolated> 06B3
+FB97 <final> 06B3
+FB98 <initial> 06B3
+FB99 <medial> 06B3
+FB9A <isolated> 06B1
+FB9B <final> 06B1
+FB9C <initial> 06B1
+FB9D <medial> 06B1
+FB9E <isolated> 06BA
+FB9F <final> 06BA
+FBA0 <isolated> 06BB
+FBA1 <final> 06BB
+FBA2 <initial> 06BB
+FBA3 <medial> 06BB
+FBA4 <isolated> 06C0
+FBA5 <final> 06C0
+FBA6 <isolated> 06C1
+FBA7 <final> 06C1
+FBA8 <initial> 06C1
+FBA9 <medial> 06C1
+FBAA <isolated> 06BE
+FBAB <final> 06BE
+FBAC <initial> 06BE
+FBAD <medial> 06BE
+FBAE <isolated> 06D2
+FBAF <final> 06D2
+FBB0 <isolated> 06D3
+FBB1 <final> 06D3
+FBD3 <isolated> 06AD
+FBD4 <final> 06AD
+FBD5 <initial> 06AD
+FBD6 <medial> 06AD
+FBD7 <isolated> 06C7
+FBD8 <final> 06C7
+FBD9 <isolated> 06C6
+FBDA <final> 06C6
+FBDB <isolated> 06C8
+FBDC <final> 06C8
+FBDD <isolated> 0677
+FBDE <isolated> 06CB
+FBDF <final> 06CB
+FBE0 <isolated> 06C5
+FBE1 <final> 06C5
+FBE2 <isolated> 06C9
+FBE3 <final> 06C9
+FBE4 <isolated> 06D0
+FBE5 <final> 06D0
+FBE6 <initial> 06D0
+FBE7 <medial> 06D0
+FBE8 <initial> 0649
+FBE9 <medial> 0649
+FBEA <isolated> 0626 0627
+FBEB <final> 0626 0627
+FBEC <isolated> 0626 06D5
+FBED <final> 0626 06D5
+FBEE <isolated> 0626 0648
+FBEF <final> 0626 0648
+FBF0 <isolated> 0626 06C7
+FBF1 <final> 0626 06C7
+FBF2 <isolated> 0626 06C6
+FBF3 <final> 0626 06C6
+FBF4 <isolated> 0626 06C8
+FBF5 <final> 0626 06C8
+FBF6 <isolated> 0626 06D0
+FBF7 <final> 0626 06D0
+FBF8 <initial> 0626 06D0
+FBF9 <isolated> 0626 0649
+FBFA <final> 0626 0649
+FBFB <initial> 0626 0649
+FBFC <isolated> 06CC
+FBFD <final> 06CC
+FBFE <initial> 06CC
+FBFF <medial> 06CC
+FC00 <isolated> 0626 062C
+FC01 <isolated> 0626 062D
+FC02 <isolated> 0626 0645
+FC03 <isolated> 0626 0649
+FC04 <isolated> 0626 064A
+FC05 <isolated> 0628 062C
+FC06 <isolated> 0628 062D
+FC07 <isolated> 0628 062E
+FC08 <isolated> 0628 0645
+FC09 <isolated> 0628 0649
+FC0A <isolated> 0628 064A
+FC0B <isolated> 062A 062C
+FC0C <isolated> 062A 062D
+FC0D <isolated> 062A 062E
+FC0E <isolated> 062A 0645
+FC0F <isolated> 062A 0649
+FC10 <isolated> 062A 064A
+FC11 <isolated> 062B 062C
+FC12 <isolated> 062B 0645
+FC13 <isolated> 062B 0649
+FC14 <isolated> 062B 064A
+FC15 <isolated> 062C 062D
+FC16 <isolated> 062C 0645
+FC17 <isolated> 062D 062C
+FC18 <isolated> 062D 0645
+FC19 <isolated> 062E 062C
+FC1A <isolated> 062E 062D
+FC1B <isolated> 062E 0645
+FC1C <isolated> 0633 062C
+FC1D <isolated> 0633 062D
+FC1E <isolated> 0633 062E
+FC1F <isolated> 0633 0645
+FC20 <isolated> 0635 062D
+FC21 <isolated> 0635 0645
+FC22 <isolated> 0636 062C
+FC23 <isolated> 0636 062D
+FC24 <isolated> 0636 062E
+FC25 <isolated> 0636 0645
+FC26 <isolated> 0637 062D
+FC27 <isolated> 0637 0645
+FC28 <isolated> 0638 0645
+FC29 <isolated> 0639 062C
+FC2A <isolated> 0639 0645
+FC2B <isolated> 063A 062C
+FC2C <isolated> 063A 0645
+FC2D <isolated> 0641 062C
+FC2E <isolated> 0641 062D
+FC2F <isolated> 0641 062E
+FC30 <isolated> 0641 0645
+FC31 <isolated> 0641 0649
+FC32 <isolated> 0641 064A
+FC33 <isolated> 0642 062D
+FC34 <isolated> 0642 0645
+FC35 <isolated> 0642 0649
+FC36 <isolated> 0642 064A
+FC37 <isolated> 0643 0627
+FC38 <isolated> 0643 062C
+FC39 <isolated> 0643 062D
+FC3A <isolated> 0643 062E
+FC3B <isolated> 0643 0644
+FC3C <isolated> 0643 0645
+FC3D <isolated> 0643 0649
+FC3E <isolated> 0643 064A
+FC3F <isolated> 0644 062C
+FC40 <isolated> 0644 062D
+FC41 <isolated> 0644 062E
+FC42 <isolated> 0644 0645
+FC43 <isolated> 0644 0649
+FC44 <isolated> 0644 064A
+FC45 <isolated> 0645 062C
+FC46 <isolated> 0645 062D
+FC47 <isolated> 0645 062E
+FC48 <isolated> 0645 0645
+FC49 <isolated> 0645 0649
+FC4A <isolated> 0645 064A
+FC4B <isolated> 0646 062C
+FC4C <isolated> 0646 062D
+FC4D <isolated> 0646 062E
+FC4E <isolated> 0646 0645
+FC4F <isolated> 0646 0649
+FC50 <isolated> 0646 064A
+FC51 <isolated> 0647 062C
+FC52 <isolated> 0647 0645
+FC53 <isolated> 0647 0649
+FC54 <isolated> 0647 064A
+FC55 <isolated> 064A 062C
+FC56 <isolated> 064A 062D
+FC57 <isolated> 064A 062E
+FC58 <isolated> 064A 0645
+FC59 <isolated> 064A 0649
+FC5A <isolated> 064A 064A
+FC5B <isolated> 0630 0670
+FC5C <isolated> 0631 0670
+FC5D <isolated> 0649 0670
+FC5E <isolated> 0020 064C 0651
+FC5F <isolated> 0020 064D 0651
+FC60 <isolated> 0020 064E 0651
+FC61 <isolated> 0020 064F 0651
+FC62 <isolated> 0020 0650 0651
+FC63 <isolated> 0020 0651 0670
+FC64 <final> 0626 0631
+FC65 <final> 0626 0632
+FC66 <final> 0626 0645
+FC67 <final> 0626 0646
+FC68 <final> 0626 0649
+FC69 <final> 0626 064A
+FC6A <final> 0628 0631
+FC6B <final> 0628 0632
+FC6C <final> 0628 0645
+FC6D <final> 0628 0646
+FC6E <final> 0628 0649
+FC6F <final> 0628 064A
+FC70 <final> 062A 0631
+FC71 <final> 062A 0632
+FC72 <final> 062A 0645
+FC73 <final> 062A 0646
+FC74 <final> 062A 0649
+FC75 <final> 062A 064A
+FC76 <final> 062B 0631
+FC77 <final> 062B 0632
+FC78 <final> 062B 0645
+FC79 <final> 062B 0646
+FC7A <final> 062B 0649
+FC7B <final> 062B 064A
+FC7C <final> 0641 0649
+FC7D <final> 0641 064A
+FC7E <final> 0642 0649
+FC7F <final> 0642 064A
+FC80 <final> 0643 0627
+FC81 <final> 0643 0644
+FC82 <final> 0643 0645
+FC83 <final> 0643 0649
+FC84 <final> 0643 064A
+FC85 <final> 0644 0645
+FC86 <final> 0644 0649
+FC87 <final> 0644 064A
+FC88 <final> 0645 0627
+FC89 <final> 0645 0645
+FC8A <final> 0646 0631
+FC8B <final> 0646 0632
+FC8C <final> 0646 0645
+FC8D <final> 0646 0646
+FC8E <final> 0646 0649
+FC8F <final> 0646 064A
+FC90 <final> 0649 0670
+FC91 <final> 064A 0631
+FC92 <final> 064A 0632
+FC93 <final> 064A 0645
+FC94 <final> 064A 0646
+FC95 <final> 064A 0649
+FC96 <final> 064A 064A
+FC97 <initial> 0626 062C
+FC98 <initial> 0626 062D
+FC99 <initial> 0626 062E
+FC9A <initial> 0626 0645
+FC9B <initial> 0626 0647
+FC9C <initial> 0628 062C
+FC9D <initial> 0628 062D
+FC9E <initial> 0628 062E
+FC9F <initial> 0628 0645
+FCA0 <initial> 0628 0647
+FCA1 <initial> 062A 062C
+FCA2 <initial> 062A 062D
+FCA3 <initial> 062A 062E
+FCA4 <initial> 062A 0645
+FCA5 <initial> 062A 0647
+FCA6 <initial> 062B 0645
+FCA7 <initial> 062C 062D
+FCA8 <initial> 062C 0645
+FCA9 <initial> 062D 062C
+FCAA <initial> 062D 0645
+FCAB <initial> 062E 062C
+FCAC <initial> 062E 0645
+FCAD <initial> 0633 062C
+FCAE <initial> 0633 062D
+FCAF <initial> 0633 062E
+FCB0 <initial> 0633 0645
+FCB1 <initial> 0635 062D
+FCB2 <initial> 0635 062E
+FCB3 <initial> 0635 0645
+FCB4 <initial> 0636 062C
+FCB5 <initial> 0636 062D
+FCB6 <initial> 0636 062E
+FCB7 <initial> 0636 0645
+FCB8 <initial> 0637 062D
+FCB9 <initial> 0638 0645
+FCBA <initial> 0639 062C
+FCBB <initial> 0639 0645
+FCBC <initial> 063A 062C
+FCBD <initial> 063A 0645
+FCBE <initial> 0641 062C
+FCBF <initial> 0641 062D
+FCC0 <initial> 0641 062E
+FCC1 <initial> 0641 0645
+FCC2 <initial> 0642 062D
+FCC3 <initial> 0642 0645
+FCC4 <initial> 0643 062C
+FCC5 <initial> 0643 062D
+FCC6 <initial> 0643 062E
+FCC7 <initial> 0643 0644
+FCC8 <initial> 0643 0645
+FCC9 <initial> 0644 062C
+FCCA <initial> 0644 062D
+FCCB <initial> 0644 062E
+FCCC <initial> 0644 0645
+FCCD <initial> 0644 0647
+FCCE <initial> 0645 062C
+FCCF <initial> 0645 062D
+FCD0 <initial> 0645 062E
+FCD1 <initial> 0645 0645
+FCD2 <initial> 0646 062C
+FCD3 <initial> 0646 062D
+FCD4 <initial> 0646 062E
+FCD5 <initial> 0646 0645
+FCD6 <initial> 0646 0647
+FCD7 <initial> 0647 062C
+FCD8 <initial> 0647 0645
+FCD9 <initial> 0647 0670
+FCDA <initial> 064A 062C
+FCDB <initial> 064A 062D
+FCDC <initial> 064A 062E
+FCDD <initial> 064A 0645
+FCDE <initial> 064A 0647
+FCDF <medial> 0626 0645
+FCE0 <medial> 0626 0647
+FCE1 <medial> 0628 0645
+FCE2 <medial> 0628 0647
+FCE3 <medial> 062A 0645
+FCE4 <medial> 062A 0647
+FCE5 <medial> 062B 0645
+FCE6 <medial> 062B 0647
+FCE7 <medial> 0633 0645
+FCE8 <medial> 0633 0647
+FCE9 <medial> 0634 0645
+FCEA <medial> 0634 0647
+FCEB <medial> 0643 0644
+FCEC <medial> 0643 0645
+FCED <medial> 0644 0645
+FCEE <medial> 0646 0645
+FCEF <medial> 0646 0647
+FCF0 <medial> 064A 0645
+FCF1 <medial> 064A 0647
+FCF2 <medial> 0640 064E 0651
+FCF3 <medial> 0640 064F 0651
+FCF4 <medial> 0640 0650 0651
+FCF5 <isolated> 0637 0649
+FCF6 <isolated> 0637 064A
+FCF7 <isolated> 0639 0649
+FCF8 <isolated> 0639 064A
+FCF9 <isolated> 063A 0649
+FCFA <isolated> 063A 064A
+FCFB <isolated> 0633 0649
+FCFC <isolated> 0633 064A
+FCFD <isolated> 0634 0649
+FCFE <isolated> 0634 064A
+FCFF <isolated> 062D 0649
+FD00 <isolated> 062D 064A
+FD01 <isolated> 062C 0649
+FD02 <isolated> 062C 064A
+FD03 <isolated> 062E 0649
+FD04 <isolated> 062E 064A
+FD05 <isolated> 0635 0649
+FD06 <isolated> 0635 064A
+FD07 <isolated> 0636 0649
+FD08 <isolated> 0636 064A
+FD09 <isolated> 0634 062C
+FD0A <isolated> 0634 062D
+FD0B <isolated> 0634 062E
+FD0C <isolated> 0634 0645
+FD0D <isolated> 0634 0631
+FD0E <isolated> 0633 0631
+FD0F <isolated> 0635 0631
+FD10 <isolated> 0636 0631
+FD11 <final> 0637 0649
+FD12 <final> 0637 064A
+FD13 <final> 0639 0649
+FD14 <final> 0639 064A
+FD15 <final> 063A 0649
+FD16 <final> 063A 064A
+FD17 <final> 0633 0649
+FD18 <final> 0633 064A
+FD19 <final> 0634 0649
+FD1A <final> 0634 064A
+FD1B <final> 062D 0649
+FD1C <final> 062D 064A
+FD1D <final> 062C 0649
+FD1E <final> 062C 064A
+FD1F <final> 062E 0649
+FD20 <final> 062E 064A
+FD21 <final> 0635 0649
+FD22 <final> 0635 064A
+FD23 <final> 0636 0649
+FD24 <final> 0636 064A
+FD25 <final> 0634 062C
+FD26 <final> 0634 062D
+FD27 <final> 0634 062E
+FD28 <final> 0634 0645
+FD29 <final> 0634 0631
+FD2A <final> 0633 0631
+FD2B <final> 0635 0631
+FD2C <final> 0636 0631
+FD2D <initial> 0634 062C
+FD2E <initial> 0634 062D
+FD2F <initial> 0634 062E
+FD30 <initial> 0634 0645
+FD31 <initial> 0633 0647
+FD32 <initial> 0634 0647
+FD33 <initial> 0637 0645
+FD34 <medial> 0633 062C
+FD35 <medial> 0633 062D
+FD36 <medial> 0633 062E
+FD37 <medial> 0634 062C
+FD38 <medial> 0634 062D
+FD39 <medial> 0634 062E
+FD3A <medial> 0637 0645
+FD3B <medial> 0638 0645
+FD3C <final> 0627 064B
+FD3D <isolated> 0627 064B
+FD50 <initial> 062A 062C 0645
+FD51 <final> 062A 062D 062C
+FD52 <initial> 062A 062D 062C
+FD53 <initial> 062A 062D 0645
+FD54 <initial> 062A 062E 0645
+FD55 <initial> 062A 0645 062C
+FD56 <initial> 062A 0645 062D
+FD57 <initial> 062A 0645 062E
+FD58 <final> 062C 0645 062D
+FD59 <initial> 062C 0645 062D
+FD5A <final> 062D 0645 064A
+FD5B <final> 062D 0645 0649
+FD5C <initial> 0633 062D 062C
+FD5D <initial> 0633 062C 062D
+FD5E <final> 0633 062C 0649
+FD5F <final> 0633 0645 062D
+FD60 <initial> 0633 0645 062D
+FD61 <initial> 0633 0645 062C
+FD62 <final> 0633 0645 0645
+FD63 <initial> 0633 0645 0645
+FD64 <final> 0635 062D 062D
+FD65 <initial> 0635 062D 062D
+FD66 <final> 0635 0645 0645
+FD67 <final> 0634 062D 0645
+FD68 <initial> 0634 062D 0645
+FD69 <final> 0634 062C 064A
+FD6A <final> 0634 0645 062E
+FD6B <initial> 0634 0645 062E
+FD6C <final> 0634 0645 0645
+FD6D <initial> 0634 0645 0645
+FD6E <final> 0636 062D 0649
+FD6F <final> 0636 062E 0645
+FD70 <initial> 0636 062E 0645
+FD71 <final> 0637 0645 062D
+FD72 <initial> 0637 0645 062D
+FD73 <initial> 0637 0645 0645
+FD74 <final> 0637 0645 064A
+FD75 <final> 0639 062C 0645
+FD76 <final> 0639 0645 0645
+FD77 <initial> 0639 0645 0645
+FD78 <final> 0639 0645 0649
+FD79 <final> 063A 0645 0645
+FD7A <final> 063A 0645 064A
+FD7B <final> 063A 0645 0649
+FD7C <final> 0641 062E 0645
+FD7D <initial> 0641 062E 0645
+FD7E <final> 0642 0645 062D
+FD7F <final> 0642 0645 0645
+FD80 <final> 0644 062D 0645
+FD81 <final> 0644 062D 064A
+FD82 <final> 0644 062D 0649
+FD83 <initial> 0644 062C 062C
+FD84 <final> 0644 062C 062C
+FD85 <final> 0644 062E 0645
+FD86 <initial> 0644 062E 0645
+FD87 <final> 0644 0645 062D
+FD88 <initial> 0644 0645 062D
+FD89 <initial> 0645 062D 062C
+FD8A <initial> 0645 062D 0645
+FD8B <final> 0645 062D 064A
+FD8C <initial> 0645 062C 062D
+FD8D <initial> 0645 062C 0645
+FD8E <initial> 0645 062E 062C
+FD8F <initial> 0645 062E 0645
+FD92 <initial> 0645 062C 062E
+FD93 <initial> 0647 0645 062C
+FD94 <initial> 0647 0645 0645
+FD95 <initial> 0646 062D 0645
+FD96 <final> 0646 062D 0649
+FD97 <final> 0646 062C 0645
+FD98 <initial> 0646 062C 0645
+FD99 <final> 0646 062C 0649
+FD9A <final> 0646 0645 064A
+FD9B <final> 0646 0645 0649
+FD9C <final> 064A 0645 0645
+FD9D <initial> 064A 0645 0645
+FD9E <final> 0628 062E 064A
+FD9F <final> 062A 062C 064A
+FDA0 <final> 062A 062C 0649
+FDA1 <final> 062A 062E 064A
+FDA2 <final> 062A 062E 0649
+FDA3 <final> 062A 0645 064A
+FDA4 <final> 062A 0645 0649
+FDA5 <final> 062C 0645 064A
+FDA6 <final> 062C 062D 0649
+FDA7 <final> 062C 0645 0649
+FDA8 <final> 0633 062E 0649
+FDA9 <final> 0635 062D 064A
+FDAA <final> 0634 062D 064A
+FDAB <final> 0636 062D 064A
+FDAC <final> 0644 062C 064A
+FDAD <final> 0644 0645 064A
+FDAE <final> 064A 062D 064A
+FDAF <final> 064A 062C 064A
+FDB0 <final> 064A 0645 064A
+FDB1 <final> 0645 0645 064A
+FDB2 <final> 0642 0645 064A
+FDB3 <final> 0646 062D 064A
+FDB4 <initial> 0642 0645 062D
+FDB5 <initial> 0644 062D 0645
+FDB6 <final> 0639 0645 064A
+FDB7 <final> 0643 0645 064A
+FDB8 <initial> 0646 062C 062D
+FDB9 <final> 0645 062E 064A
+FDBA <initial> 0644 062C 0645
+FDBB <final> 0643 0645 0645
+FDBC <final> 0644 062C 0645
+FDBD <final> 0646 062C 062D
+FDBE <final> 062C 062D 064A
+FDBF <final> 062D 062C 064A
+FDC0 <final> 0645 062C 064A
+FDC1 <final> 0641 0645 064A
+FDC2 <final> 0628 062D 064A
+FDC3 <initial> 0643 0645 0645
+FDC4 <initial> 0639 062C 0645
+FDC5 <initial> 0635 0645 0645
+FDC6 <final> 0633 062E 064A
+FDC7 <final> 0646 062C 064A
+FDF0 <isolated> 0635 0644 06D2
+FDF1 <isolated> 0642 0644 06D2
+FDF2 <isolated> 0627 0644 0644 0647
+FDF3 <isolated> 0627 0643 0628 0631
+FDF4 <isolated> 0645 062D 0645 062F
+FDF5 <isolated> 0635 0644 0639 0645
+FDF6 <isolated> 0631 0633 0648 0644
+FDF7 <isolated> 0639 0644 064A 0647
+FDF8 <isolated> 0648 0633 0644 0645
+FDF9 <isolated> 0635 0644 0649
+FDFA <isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645
+FDFB <isolated> 062C 0644 0020 062C 0644 0627 0644 0647
+FDFC <isolated> 0631 06CC 0627 0644
+FE10 <vertical> 002C
+FE11 <vertical> 3001
+FE12 <vertical> 3002
+FE13 <vertical> 003A
+FE14 <vertical> 003B
+FE15 <vertical> 0021
+FE16 <vertical> 003F
+FE17 <vertical> 3016
+FE18 <vertical> 3017
+FE19 <vertical> 2026
+FE30 <vertical> 2025
+FE31 <vertical> 2014
+FE32 <vertical> 2013
+FE33 FE34 <vertical> 005F
+FE35 <vertical> 0028
+FE36 <vertical> 0029
+FE37 <vertical> 007B
+FE38 <vertical> 007D
+FE39 <vertical> 3014
+FE3A <vertical> 3015
+FE3B <vertical> 3010
+FE3C <vertical> 3011
+FE3D <vertical> 300A
+FE3E <vertical> 300B
+FE3F <vertical> 3008
+FE40 <vertical> 3009
+FE41 <vertical> 300C
+FE42 <vertical> 300D
+FE43 <vertical> 300E
+FE44 <vertical> 300F
+FE47 <vertical> 005B
+FE48 <vertical> 005D
+FE49 FE4C <compat> 203E
+FE4D FE4F <compat> 005F
+FE50 <small> 002C
+FE51 <small> 3001
+FE52 <small> 002E
+FE54 <small> 003B
+FE55 <small> 003A
+FE56 <small> 003F
+FE57 <small> 0021
+FE58 <small> 2014
+FE59 <small> 0028
+FE5A <small> 0029
+FE5B <small> 007B
+FE5C <small> 007D
+FE5D <small> 3014
+FE5E <small> 3015
+FE5F <small> 0023
+FE60 <small> 0026
+FE61 <small> 002A
+FE62 <small> 002B
+FE63 <small> 002D
+FE64 <small> 003C
+FE65 <small> 003E
+FE66 <small> 003D
+FE68 <small> 005C
+FE69 <small> 0024
+FE6A <small> 0025
+FE6B <small> 0040
+FE70 <isolated> 0020 064B
+FE71 <medial> 0640 064B
+FE72 <isolated> 0020 064C
+FE74 <isolated> 0020 064D
+FE76 <isolated> 0020 064E
+FE77 <medial> 0640 064E
+FE78 <isolated> 0020 064F
+FE79 <medial> 0640 064F
+FE7A <isolated> 0020 0650
+FE7B <medial> 0640 0650
+FE7C <isolated> 0020 0651
+FE7D <medial> 0640 0651
+FE7E <isolated> 0020 0652
+FE7F <medial> 0640 0652
+FE80 <isolated> 0621
+FE81 <isolated> 0622
+FE82 <final> 0622
+FE83 <isolated> 0623
+FE84 <final> 0623
+FE85 <isolated> 0624
+FE86 <final> 0624
+FE87 <isolated> 0625
+FE88 <final> 0625
+FE89 <isolated> 0626
+FE8A <final> 0626
+FE8B <initial> 0626
+FE8C <medial> 0626
+FE8D <isolated> 0627
+FE8E <final> 0627
+FE8F <isolated> 0628
+FE90 <final> 0628
+FE91 <initial> 0628
+FE92 <medial> 0628
+FE93 <isolated> 0629
+FE94 <final> 0629
+FE95 <isolated> 062A
+FE96 <final> 062A
+FE97 <initial> 062A
+FE98 <medial> 062A
+FE99 <isolated> 062B
+FE9A <final> 062B
+FE9B <initial> 062B
+FE9C <medial> 062B
+FE9D <isolated> 062C
+FE9E <final> 062C
+FE9F <initial> 062C
+FEA0 <medial> 062C
+FEA1 <isolated> 062D
+FEA2 <final> 062D
+FEA3 <initial> 062D
+FEA4 <medial> 062D
+FEA5 <isolated> 062E
+FEA6 <final> 062E
+FEA7 <initial> 062E
+FEA8 <medial> 062E
+FEA9 <isolated> 062F
+FEAA <final> 062F
+FEAB <isolated> 0630
+FEAC <final> 0630
+FEAD <isolated> 0631
+FEAE <final> 0631
+FEAF <isolated> 0632
+FEB0 <final> 0632
+FEB1 <isolated> 0633
+FEB2 <final> 0633
+FEB3 <initial> 0633
+FEB4 <medial> 0633
+FEB5 <isolated> 0634
+FEB6 <final> 0634
+FEB7 <initial> 0634
+FEB8 <medial> 0634
+FEB9 <isolated> 0635
+FEBA <final> 0635
+FEBB <initial> 0635
+FEBC <medial> 0635
+FEBD <isolated> 0636
+FEBE <final> 0636
+FEBF <initial> 0636
+FEC0 <medial> 0636
+FEC1 <isolated> 0637
+FEC2 <final> 0637
+FEC3 <initial> 0637
+FEC4 <medial> 0637
+FEC5 <isolated> 0638
+FEC6 <final> 0638
+FEC7 <initial> 0638
+FEC8 <medial> 0638
+FEC9 <isolated> 0639
+FECA <final> 0639
+FECB <initial> 0639
+FECC <medial> 0639
+FECD <isolated> 063A
+FECE <final> 063A
+FECF <initial> 063A
+FED0 <medial> 063A
+FED1 <isolated> 0641
+FED2 <final> 0641
+FED3 <initial> 0641
+FED4 <medial> 0641
+FED5 <isolated> 0642
+FED6 <final> 0642
+FED7 <initial> 0642
+FED8 <medial> 0642
+FED9 <isolated> 0643
+FEDA <final> 0643
+FEDB <initial> 0643
+FEDC <medial> 0643
+FEDD <isolated> 0644
+FEDE <final> 0644
+FEDF <initial> 0644
+FEE0 <medial> 0644
+FEE1 <isolated> 0645
+FEE2 <final> 0645
+FEE3 <initial> 0645
+FEE4 <medial> 0645
+FEE5 <isolated> 0646
+FEE6 <final> 0646
+FEE7 <initial> 0646
+FEE8 <medial> 0646
+FEE9 <isolated> 0647
+FEEA <final> 0647
+FEEB <initial> 0647
+FEEC <medial> 0647
+FEED <isolated> 0648
+FEEE <final> 0648
+FEEF <isolated> 0649
+FEF0 <final> 0649
+FEF1 <isolated> 064A
+FEF2 <final> 064A
+FEF3 <initial> 064A
+FEF4 <medial> 064A
+FEF5 <isolated> 0644 0622
+FEF6 <final> 0644 0622
+FEF7 <isolated> 0644 0623
+FEF8 <final> 0644 0623
+FEF9 <isolated> 0644 0625
+FEFA <final> 0644 0625
+FEFB <isolated> 0644 0627
+FEFC <final> 0644 0627
+FF01 <wide> 0021
+FF02 <wide> 0022
+FF03 <wide> 0023
+FF04 <wide> 0024
+FF05 <wide> 0025
+FF06 <wide> 0026
+FF07 <wide> 0027
+FF08 <wide> 0028
+FF09 <wide> 0029
+FF0A <wide> 002A
+FF0B <wide> 002B
+FF0C <wide> 002C
+FF0D <wide> 002D
+FF0E <wide> 002E
+FF0F <wide> 002F
+FF10 <wide> 0030
+FF11 <wide> 0031
+FF12 <wide> 0032
+FF13 <wide> 0033
+FF14 <wide> 0034
+FF15 <wide> 0035
+FF16 <wide> 0036
+FF17 <wide> 0037
+FF18 <wide> 0038
+FF19 <wide> 0039
+FF1A <wide> 003A
+FF1B <wide> 003B
+FF1C <wide> 003C
+FF1D <wide> 003D
+FF1E <wide> 003E
+FF1F <wide> 003F
+FF20 <wide> 0040
+FF21 <wide> 0041
+FF22 <wide> 0042
+FF23 <wide> 0043
+FF24 <wide> 0044
+FF25 <wide> 0045
+FF26 <wide> 0046
+FF27 <wide> 0047
+FF28 <wide> 0048
+FF29 <wide> 0049
+FF2A <wide> 004A
+FF2B <wide> 004B
+FF2C <wide> 004C
+FF2D <wide> 004D
+FF2E <wide> 004E
+FF2F <wide> 004F
+FF30 <wide> 0050
+FF31 <wide> 0051
+FF32 <wide> 0052
+FF33 <wide> 0053
+FF34 <wide> 0054
+FF35 <wide> 0055
+FF36 <wide> 0056
+FF37 <wide> 0057
+FF38 <wide> 0058
+FF39 <wide> 0059
+FF3A <wide> 005A
+FF3B <wide> 005B
+FF3C <wide> 005C
+FF3D <wide> 005D
+FF3E <wide> 005E
+FF3F <wide> 005F
+FF40 <wide> 0060
+FF41 <wide> 0061
+FF42 <wide> 0062
+FF43 <wide> 0063
+FF44 <wide> 0064
+FF45 <wide> 0065
+FF46 <wide> 0066
+FF47 <wide> 0067
+FF48 <wide> 0068
+FF49 <wide> 0069
+FF4A <wide> 006A
+FF4B <wide> 006B
+FF4C <wide> 006C
+FF4D <wide> 006D
+FF4E <wide> 006E
+FF4F <wide> 006F
+FF50 <wide> 0070
+FF51 <wide> 0071
+FF52 <wide> 0072
+FF53 <wide> 0073
+FF54 <wide> 0074
+FF55 <wide> 0075
+FF56 <wide> 0076
+FF57 <wide> 0077
+FF58 <wide> 0078
+FF59 <wide> 0079
+FF5A <wide> 007A
+FF5B <wide> 007B
+FF5C <wide> 007C
+FF5D <wide> 007D
+FF5E <wide> 007E
+FF5F <wide> 2985
+FF60 <wide> 2986
+FF61 <narrow> 3002
+FF62 <narrow> 300C
+FF63 <narrow> 300D
+FF64 <narrow> 3001
+FF65 <narrow> 30FB
+FF66 <narrow> 30F2
+FF67 <narrow> 30A1
+FF68 <narrow> 30A3
+FF69 <narrow> 30A5
+FF6A <narrow> 30A7
+FF6B <narrow> 30A9
+FF6C <narrow> 30E3
+FF6D <narrow> 30E5
+FF6E <narrow> 30E7
+FF6F <narrow> 30C3
+FF70 <narrow> 30FC
+FF71 <narrow> 30A2
+FF72 <narrow> 30A4
+FF73 <narrow> 30A6
+FF74 <narrow> 30A8
+FF75 <narrow> 30AA
+FF76 <narrow> 30AB
+FF77 <narrow> 30AD
+FF78 <narrow> 30AF
+FF79 <narrow> 30B1
+FF7A <narrow> 30B3
+FF7B <narrow> 30B5
+FF7C <narrow> 30B7
+FF7D <narrow> 30B9
+FF7E <narrow> 30BB
+FF7F <narrow> 30BD
+FF80 <narrow> 30BF
+FF81 <narrow> 30C1
+FF82 <narrow> 30C4
+FF83 <narrow> 30C6
+FF84 <narrow> 30C8
+FF85 <narrow> 30CA
+FF86 <narrow> 30CB
+FF87 <narrow> 30CC
+FF88 <narrow> 30CD
+FF89 <narrow> 30CE
+FF8A <narrow> 30CF
+FF8B <narrow> 30D2
+FF8C <narrow> 30D5
+FF8D <narrow> 30D8
+FF8E <narrow> 30DB
+FF8F <narrow> 30DE
+FF90 <narrow> 30DF
+FF91 <narrow> 30E0
+FF92 <narrow> 30E1
+FF93 <narrow> 30E2
+FF94 <narrow> 30E4
+FF95 <narrow> 30E6
+FF96 <narrow> 30E8
+FF97 <narrow> 30E9
+FF98 <narrow> 30EA
+FF99 <narrow> 30EB
+FF9A <narrow> 30EC
+FF9B <narrow> 30ED
+FF9C <narrow> 30EF
+FF9D <narrow> 30F3
+FF9E <narrow> 3099
+FF9F <narrow> 309A
+FFA0 <narrow> 3164
+FFA1 <narrow> 3131
+FFA2 <narrow> 3132
+FFA3 <narrow> 3133
+FFA4 <narrow> 3134
+FFA5 <narrow> 3135
+FFA6 <narrow> 3136
+FFA7 <narrow> 3137
+FFA8 <narrow> 3138
+FFA9 <narrow> 3139
+FFAA <narrow> 313A
+FFAB <narrow> 313B
+FFAC <narrow> 313C
+FFAD <narrow> 313D
+FFAE <narrow> 313E
+FFAF <narrow> 313F
+FFB0 <narrow> 3140
+FFB1 <narrow> 3141
+FFB2 <narrow> 3142
+FFB3 <narrow> 3143
+FFB4 <narrow> 3144
+FFB5 <narrow> 3145
+FFB6 <narrow> 3146
+FFB7 <narrow> 3147
+FFB8 <narrow> 3148
+FFB9 <narrow> 3149
+FFBA <narrow> 314A
+FFBB <narrow> 314B
+FFBC <narrow> 314C
+FFBD <narrow> 314D
+FFBE <narrow> 314E
+FFC2 <narrow> 314F
+FFC3 <narrow> 3150
+FFC4 <narrow> 3151
+FFC5 <narrow> 3152
+FFC6 <narrow> 3153
+FFC7 <narrow> 3154
+FFCA <narrow> 3155
+FFCB <narrow> 3156
+FFCC <narrow> 3157
+FFCD <narrow> 3158
+FFCE <narrow> 3159
+FFCF <narrow> 315A
+FFD2 <narrow> 315B
+FFD3 <narrow> 315C
+FFD4 <narrow> 315D
+FFD5 <narrow> 315E
+FFD6 <narrow> 315F
+FFD7 <narrow> 3160
+FFDA <narrow> 3161
+FFDB <narrow> 3162
+FFDC <narrow> 3163
+FFE0 <wide> 00A2
+FFE1 <wide> 00A3
+FFE2 <wide> 00AC
+FFE3 <wide> 00AF
+FFE4 <wide> 00A6
+FFE5 <wide> 00A5
+FFE6 <wide> 20A9
+FFE8 <narrow> 2502
+FFE9 <narrow> 2190
+FFEA <narrow> 2191
+FFEB <narrow> 2192
+FFEC <narrow> 2193
+FFED <narrow> 25A0
+FFEE <narrow> 25CB
+1D15E 1D157 1D165
+1D15F 1D158 1D165
+1D160 1D15F 1D16E
+1D161 1D15F 1D16F
+1D162 1D15F 1D170
+1D163 1D15F 1D171
+1D164 1D15F 1D172
+1D1BB 1D1B9 1D165
+1D1BC 1D1BA 1D165
+1D1BD 1D1BB 1D16E
+1D1BE 1D1BC 1D16E
+1D1BF 1D1BB 1D16F
+1D1C0 1D1BC 1D16F
+1D400 <font> 0041
+1D401 <font> 0042
+1D402 <font> 0043
+1D403 <font> 0044
+1D404 <font> 0045
+1D405 <font> 0046
+1D406 <font> 0047
+1D407 <font> 0048
+1D408 <font> 0049
+1D409 <font> 004A
+1D40A <font> 004B
+1D40B <font> 004C
+1D40C <font> 004D
+1D40D <font> 004E
+1D40E <font> 004F
+1D40F <font> 0050
+1D410 <font> 0051
+1D411 <font> 0052
+1D412 <font> 0053
+1D413 <font> 0054
+1D414 <font> 0055
+1D415 <font> 0056
+1D416 <font> 0057
+1D417 <font> 0058
+1D418 <font> 0059
+1D419 <font> 005A
+1D41A <font> 0061
+1D41B <font> 0062
+1D41C <font> 0063
+1D41D <font> 0064
+1D41E <font> 0065
+1D41F <font> 0066
+1D420 <font> 0067
+1D421 <font> 0068
+1D422 <font> 0069
+1D423 <font> 006A
+1D424 <font> 006B
+1D425 <font> 006C
+1D426 <font> 006D
+1D427 <font> 006E
+1D428 <font> 006F
+1D429 <font> 0070
+1D42A <font> 0071
+1D42B <font> 0072
+1D42C <font> 0073
+1D42D <font> 0074
+1D42E <font> 0075
+1D42F <font> 0076
+1D430 <font> 0077
+1D431 <font> 0078
+1D432 <font> 0079
+1D433 <font> 007A
+1D434 <font> 0041
+1D435 <font> 0042
+1D436 <font> 0043
+1D437 <font> 0044
+1D438 <font> 0045
+1D439 <font> 0046
+1D43A <font> 0047
+1D43B <font> 0048
+1D43C <font> 0049
+1D43D <font> 004A
+1D43E <font> 004B
+1D43F <font> 004C
+1D440 <font> 004D
+1D441 <font> 004E
+1D442 <font> 004F
+1D443 <font> 0050
+1D444 <font> 0051
+1D445 <font> 0052
+1D446 <font> 0053
+1D447 <font> 0054
+1D448 <font> 0055
+1D449 <font> 0056
+1D44A <font> 0057
+1D44B <font> 0058
+1D44C <font> 0059
+1D44D <font> 005A
+1D44E <font> 0061
+1D44F <font> 0062
+1D450 <font> 0063
+1D451 <font> 0064
+1D452 <font> 0065
+1D453 <font> 0066
+1D454 <font> 0067
+1D456 <font> 0069
+1D457 <font> 006A
+1D458 <font> 006B
+1D459 <font> 006C
+1D45A <font> 006D
+1D45B <font> 006E
+1D45C <font> 006F
+1D45D <font> 0070
+1D45E <font> 0071
+1D45F <font> 0072
+1D460 <font> 0073
+1D461 <font> 0074
+1D462 <font> 0075
+1D463 <font> 0076
+1D464 <font> 0077
+1D465 <font> 0078
+1D466 <font> 0079
+1D467 <font> 007A
+1D468 <font> 0041
+1D469 <font> 0042
+1D46A <font> 0043
+1D46B <font> 0044
+1D46C <font> 0045
+1D46D <font> 0046
+1D46E <font> 0047
+1D46F <font> 0048
+1D470 <font> 0049
+1D471 <font> 004A
+1D472 <font> 004B
+1D473 <font> 004C
+1D474 <font> 004D
+1D475 <font> 004E
+1D476 <font> 004F
+1D477 <font> 0050
+1D478 <font> 0051
+1D479 <font> 0052
+1D47A <font> 0053
+1D47B <font> 0054
+1D47C <font> 0055
+1D47D <font> 0056
+1D47E <font> 0057
+1D47F <font> 0058
+1D480 <font> 0059
+1D481 <font> 005A
+1D482 <font> 0061
+1D483 <font> 0062
+1D484 <font> 0063
+1D485 <font> 0064
+1D486 <font> 0065
+1D487 <font> 0066
+1D488 <font> 0067
+1D489 <font> 0068
+1D48A <font> 0069
+1D48B <font> 006A
+1D48C <font> 006B
+1D48D <font> 006C
+1D48E <font> 006D
+1D48F <font> 006E
+1D490 <font> 006F
+1D491 <font> 0070
+1D492 <font> 0071
+1D493 <font> 0072
+1D494 <font> 0073
+1D495 <font> 0074
+1D496 <font> 0075
+1D497 <font> 0076
+1D498 <font> 0077
+1D499 <font> 0078
+1D49A <font> 0079
+1D49B <font> 007A
+1D49C <font> 0041
+1D49E <font> 0043
+1D49F <font> 0044
+1D4A2 <font> 0047
+1D4A5 <font> 004A
+1D4A6 <font> 004B
+1D4A9 <font> 004E
+1D4AA <font> 004F
+1D4AB <font> 0050
+1D4AC <font> 0051
+1D4AE <font> 0053
+1D4AF <font> 0054
+1D4B0 <font> 0055
+1D4B1 <font> 0056
+1D4B2 <font> 0057
+1D4B3 <font> 0058
+1D4B4 <font> 0059
+1D4B5 <font> 005A
+1D4B6 <font> 0061
+1D4B7 <font> 0062
+1D4B8 <font> 0063
+1D4B9 <font> 0064
+1D4BB <font> 0066
+1D4BD <font> 0068
+1D4BE <font> 0069
+1D4BF <font> 006A
+1D4C0 <font> 006B
+1D4C1 <font> 006C
+1D4C2 <font> 006D
+1D4C3 <font> 006E
+1D4C5 <font> 0070
+1D4C6 <font> 0071
+1D4C7 <font> 0072
+1D4C8 <font> 0073
+1D4C9 <font> 0074
+1D4CA <font> 0075
+1D4CB <font> 0076
+1D4CC <font> 0077
+1D4CD <font> 0078
+1D4CE <font> 0079
+1D4CF <font> 007A
+1D4D0 <font> 0041
+1D4D1 <font> 0042
+1D4D2 <font> 0043
+1D4D3 <font> 0044
+1D4D4 <font> 0045
+1D4D5 <font> 0046
+1D4D6 <font> 0047
+1D4D7 <font> 0048
+1D4D8 <font> 0049
+1D4D9 <font> 004A
+1D4DA <font> 004B
+1D4DB <font> 004C
+1D4DC <font> 004D
+1D4DD <font> 004E
+1D4DE <font> 004F
+1D4DF <font> 0050
+1D4E0 <font> 0051
+1D4E1 <font> 0052
+1D4E2 <font> 0053
+1D4E3 <font> 0054
+1D4E4 <font> 0055
+1D4E5 <font> 0056
+1D4E6 <font> 0057
+1D4E7 <font> 0058
+1D4E8 <font> 0059
+1D4E9 <font> 005A
+1D4EA <font> 0061
+1D4EB <font> 0062
+1D4EC <font> 0063
+1D4ED <font> 0064
+1D4EE <font> 0065
+1D4EF <font> 0066
+1D4F0 <font> 0067
+1D4F1 <font> 0068
+1D4F2 <font> 0069
+1D4F3 <font> 006A
+1D4F4 <font> 006B
+1D4F5 <font> 006C
+1D4F6 <font> 006D
+1D4F7 <font> 006E
+1D4F8 <font> 006F
+1D4F9 <font> 0070
+1D4FA <font> 0071
+1D4FB <font> 0072
+1D4FC <font> 0073
+1D4FD <font> 0074
+1D4FE <font> 0075
+1D4FF <font> 0076
+1D500 <font> 0077
+1D501 <font> 0078
+1D502 <font> 0079
+1D503 <font> 007A
+1D504 <font> 0041
+1D505 <font> 0042
+1D507 <font> 0044
+1D508 <font> 0045
+1D509 <font> 0046
+1D50A <font> 0047
+1D50D <font> 004A
+1D50E <font> 004B
+1D50F <font> 004C
+1D510 <font> 004D
+1D511 <font> 004E
+1D512 <font> 004F
+1D513 <font> 0050
+1D514 <font> 0051
+1D516 <font> 0053
+1D517 <font> 0054
+1D518 <font> 0055
+1D519 <font> 0056
+1D51A <font> 0057
+1D51B <font> 0058
+1D51C <font> 0059
+1D51E <font> 0061
+1D51F <font> 0062
+1D520 <font> 0063
+1D521 <font> 0064
+1D522 <font> 0065
+1D523 <font> 0066
+1D524 <font> 0067
+1D525 <font> 0068
+1D526 <font> 0069
+1D527 <font> 006A
+1D528 <font> 006B
+1D529 <font> 006C
+1D52A <font> 006D
+1D52B <font> 006E
+1D52C <font> 006F
+1D52D <font> 0070
+1D52E <font> 0071
+1D52F <font> 0072
+1D530 <font> 0073
+1D531 <font> 0074
+1D532 <font> 0075
+1D533 <font> 0076
+1D534 <font> 0077
+1D535 <font> 0078
+1D536 <font> 0079
+1D537 <font> 007A
+1D538 <font> 0041
+1D539 <font> 0042
+1D53B <font> 0044
+1D53C <font> 0045
+1D53D <font> 0046
+1D53E <font> 0047
+1D540 <font> 0049
+1D541 <font> 004A
+1D542 <font> 004B
+1D543 <font> 004C
+1D544 <font> 004D
+1D546 <font> 004F
+1D54A <font> 0053
+1D54B <font> 0054
+1D54C <font> 0055
+1D54D <font> 0056
+1D54E <font> 0057
+1D54F <font> 0058
+1D550 <font> 0059
+1D552 <font> 0061
+1D553 <font> 0062
+1D554 <font> 0063
+1D555 <font> 0064
+1D556 <font> 0065
+1D557 <font> 0066
+1D558 <font> 0067
+1D559 <font> 0068
+1D55A <font> 0069
+1D55B <font> 006A
+1D55C <font> 006B
+1D55D <font> 006C
+1D55E <font> 006D
+1D55F <font> 006E
+1D560 <font> 006F
+1D561 <font> 0070
+1D562 <font> 0071
+1D563 <font> 0072
+1D564 <font> 0073
+1D565 <font> 0074
+1D566 <font> 0075
+1D567 <font> 0076
+1D568 <font> 0077
+1D569 <font> 0078
+1D56A <font> 0079
+1D56B <font> 007A
+1D56C <font> 0041
+1D56D <font> 0042
+1D56E <font> 0043
+1D56F <font> 0044
+1D570 <font> 0045
+1D571 <font> 0046
+1D572 <font> 0047
+1D573 <font> 0048
+1D574 <font> 0049
+1D575 <font> 004A
+1D576 <font> 004B
+1D577 <font> 004C
+1D578 <font> 004D
+1D579 <font> 004E
+1D57A <font> 004F
+1D57B <font> 0050
+1D57C <font> 0051
+1D57D <font> 0052
+1D57E <font> 0053
+1D57F <font> 0054
+1D580 <font> 0055
+1D581 <font> 0056
+1D582 <font> 0057
+1D583 <font> 0058
+1D584 <font> 0059
+1D585 <font> 005A
+1D586 <font> 0061
+1D587 <font> 0062
+1D588 <font> 0063
+1D589 <font> 0064
+1D58A <font> 0065
+1D58B <font> 0066
+1D58C <font> 0067
+1D58D <font> 0068
+1D58E <font> 0069
+1D58F <font> 006A
+1D590 <font> 006B
+1D591 <font> 006C
+1D592 <font> 006D
+1D593 <font> 006E
+1D594 <font> 006F
+1D595 <font> 0070
+1D596 <font> 0071
+1D597 <font> 0072
+1D598 <font> 0073
+1D599 <font> 0074
+1D59A <font> 0075
+1D59B <font> 0076
+1D59C <font> 0077
+1D59D <font> 0078
+1D59E <font> 0079
+1D59F <font> 007A
+1D5A0 <font> 0041
+1D5A1 <font> 0042
+1D5A2 <font> 0043
+1D5A3 <font> 0044
+1D5A4 <font> 0045
+1D5A5 <font> 0046
+1D5A6 <font> 0047
+1D5A7 <font> 0048
+1D5A8 <font> 0049
+1D5A9 <font> 004A
+1D5AA <font> 004B
+1D5AB <font> 004C
+1D5AC <font> 004D
+1D5AD <font> 004E
+1D5AE <font> 004F
+1D5AF <font> 0050
+1D5B0 <font> 0051
+1D5B1 <font> 0052
+1D5B2 <font> 0053
+1D5B3 <font> 0054
+1D5B4 <font> 0055
+1D5B5 <font> 0056
+1D5B6 <font> 0057
+1D5B7 <font> 0058
+1D5B8 <font> 0059
+1D5B9 <font> 005A
+1D5BA <font> 0061
+1D5BB <font> 0062
+1D5BC <font> 0063
+1D5BD <font> 0064
+1D5BE <font> 0065
+1D5BF <font> 0066
+1D5C0 <font> 0067
+1D5C1 <font> 0068
+1D5C2 <font> 0069
+1D5C3 <font> 006A
+1D5C4 <font> 006B
+1D5C5 <font> 006C
+1D5C6 <font> 006D
+1D5C7 <font> 006E
+1D5C8 <font> 006F
+1D5C9 <font> 0070
+1D5CA <font> 0071
+1D5CB <font> 0072
+1D5CC <font> 0073
+1D5CD <font> 0074
+1D5CE <font> 0075
+1D5CF <font> 0076
+1D5D0 <font> 0077
+1D5D1 <font> 0078
+1D5D2 <font> 0079
+1D5D3 <font> 007A
+1D5D4 <font> 0041
+1D5D5 <font> 0042
+1D5D6 <font> 0043
+1D5D7 <font> 0044
+1D5D8 <font> 0045
+1D5D9 <font> 0046
+1D5DA <font> 0047
+1D5DB <font> 0048
+1D5DC <font> 0049
+1D5DD <font> 004A
+1D5DE <font> 004B
+1D5DF <font> 004C
+1D5E0 <font> 004D
+1D5E1 <font> 004E
+1D5E2 <font> 004F
+1D5E3 <font> 0050
+1D5E4 <font> 0051
+1D5E5 <font> 0052
+1D5E6 <font> 0053
+1D5E7 <font> 0054
+1D5E8 <font> 0055
+1D5E9 <font> 0056
+1D5EA <font> 0057
+1D5EB <font> 0058
+1D5EC <font> 0059
+1D5ED <font> 005A
+1D5EE <font> 0061
+1D5EF <font> 0062
+1D5F0 <font> 0063
+1D5F1 <font> 0064
+1D5F2 <font> 0065
+1D5F3 <font> 0066
+1D5F4 <font> 0067
+1D5F5 <font> 0068
+1D5F6 <font> 0069
+1D5F7 <font> 006A
+1D5F8 <font> 006B
+1D5F9 <font> 006C
+1D5FA <font> 006D
+1D5FB <font> 006E
+1D5FC <font> 006F
+1D5FD <font> 0070
+1D5FE <font> 0071
+1D5FF <font> 0072
+1D600 <font> 0073
+1D601 <font> 0074
+1D602 <font> 0075
+1D603 <font> 0076
+1D604 <font> 0077
+1D605 <font> 0078
+1D606 <font> 0079
+1D607 <font> 007A
+1D608 <font> 0041
+1D609 <font> 0042
+1D60A <font> 0043
+1D60B <font> 0044
+1D60C <font> 0045
+1D60D <font> 0046
+1D60E <font> 0047
+1D60F <font> 0048
+1D610 <font> 0049
+1D611 <font> 004A
+1D612 <font> 004B
+1D613 <font> 004C
+1D614 <font> 004D
+1D615 <font> 004E
+1D616 <font> 004F
+1D617 <font> 0050
+1D618 <font> 0051
+1D619 <font> 0052
+1D61A <font> 0053
+1D61B <font> 0054
+1D61C <font> 0055
+1D61D <font> 0056
+1D61E <font> 0057
+1D61F <font> 0058
+1D620 <font> 0059
+1D621 <font> 005A
+1D622 <font> 0061
+1D623 <font> 0062
+1D624 <font> 0063
+1D625 <font> 0064
+1D626 <font> 0065
+1D627 <font> 0066
+1D628 <font> 0067
+1D629 <font> 0068
+1D62A <font> 0069
+1D62B <font> 006A
+1D62C <font> 006B
+1D62D <font> 006C
+1D62E <font> 006D
+1D62F <font> 006E
+1D630 <font> 006F
+1D631 <font> 0070
+1D632 <font> 0071
+1D633 <font> 0072
+1D634 <font> 0073
+1D635 <font> 0074
+1D636 <font> 0075
+1D637 <font> 0076
+1D638 <font> 0077
+1D639 <font> 0078
+1D63A <font> 0079
+1D63B <font> 007A
+1D63C <font> 0041
+1D63D <font> 0042
+1D63E <font> 0043
+1D63F <font> 0044
+1D640 <font> 0045
+1D641 <font> 0046
+1D642 <font> 0047
+1D643 <font> 0048
+1D644 <font> 0049
+1D645 <font> 004A
+1D646 <font> 004B
+1D647 <font> 004C
+1D648 <font> 004D
+1D649 <font> 004E
+1D64A <font> 004F
+1D64B <font> 0050
+1D64C <font> 0051
+1D64D <font> 0052
+1D64E <font> 0053
+1D64F <font> 0054
+1D650 <font> 0055
+1D651 <font> 0056
+1D652 <font> 0057
+1D653 <font> 0058
+1D654 <font> 0059
+1D655 <font> 005A
+1D656 <font> 0061
+1D657 <font> 0062
+1D658 <font> 0063
+1D659 <font> 0064
+1D65A <font> 0065
+1D65B <font> 0066
+1D65C <font> 0067
+1D65D <font> 0068
+1D65E <font> 0069
+1D65F <font> 006A
+1D660 <font> 006B
+1D661 <font> 006C
+1D662 <font> 006D
+1D663 <font> 006E
+1D664 <font> 006F
+1D665 <font> 0070
+1D666 <font> 0071
+1D667 <font> 0072
+1D668 <font> 0073
+1D669 <font> 0074
+1D66A <font> 0075
+1D66B <font> 0076
+1D66C <font> 0077
+1D66D <font> 0078
+1D66E <font> 0079
+1D66F <font> 007A
+1D670 <font> 0041
+1D671 <font> 0042
+1D672 <font> 0043
+1D673 <font> 0044
+1D674 <font> 0045
+1D675 <font> 0046
+1D676 <font> 0047
+1D677 <font> 0048
+1D678 <font> 0049
+1D679 <font> 004A
+1D67A <font> 004B
+1D67B <font> 004C
+1D67C <font> 004D
+1D67D <font> 004E
+1D67E <font> 004F
+1D67F <font> 0050
+1D680 <font> 0051
+1D681 <font> 0052
+1D682 <font> 0053
+1D683 <font> 0054
+1D684 <font> 0055
+1D685 <font> 0056
+1D686 <font> 0057
+1D687 <font> 0058
+1D688 <font> 0059
+1D689 <font> 005A
+1D68A <font> 0061
+1D68B <font> 0062
+1D68C <font> 0063
+1D68D <font> 0064
+1D68E <font> 0065
+1D68F <font> 0066
+1D690 <font> 0067
+1D691 <font> 0068
+1D692 <font> 0069
+1D693 <font> 006A
+1D694 <font> 006B
+1D695 <font> 006C
+1D696 <font> 006D
+1D697 <font> 006E
+1D698 <font> 006F
+1D699 <font> 0070
+1D69A <font> 0071
+1D69B <font> 0072
+1D69C <font> 0073
+1D69D <font> 0074
+1D69E <font> 0075
+1D69F <font> 0076
+1D6A0 <font> 0077
+1D6A1 <font> 0078
+1D6A2 <font> 0079
+1D6A3 <font> 007A
+1D6A4 <font> 0131
+1D6A5 <font> 0237
+1D6A8 <font> 0391
+1D6A9 <font> 0392
+1D6AA <font> 0393
+1D6AB <font> 0394
+1D6AC <font> 0395
+1D6AD <font> 0396
+1D6AE <font> 0397
+1D6AF <font> 0398
+1D6B0 <font> 0399
+1D6B1 <font> 039A
+1D6B2 <font> 039B
+1D6B3 <font> 039C
+1D6B4 <font> 039D
+1D6B5 <font> 039E
+1D6B6 <font> 039F
+1D6B7 <font> 03A0
+1D6B8 <font> 03A1
+1D6B9 <font> 03F4
+1D6BA <font> 03A3
+1D6BB <font> 03A4
+1D6BC <font> 03A5
+1D6BD <font> 03A6
+1D6BE <font> 03A7
+1D6BF <font> 03A8
+1D6C0 <font> 03A9
+1D6C1 <font> 2207
+1D6C2 <font> 03B1
+1D6C3 <font> 03B2
+1D6C4 <font> 03B3
+1D6C5 <font> 03B4
+1D6C6 <font> 03B5
+1D6C7 <font> 03B6
+1D6C8 <font> 03B7
+1D6C9 <font> 03B8
+1D6CA <font> 03B9
+1D6CB <font> 03BA
+1D6CC <font> 03BB
+1D6CD <font> 03BC
+1D6CE <font> 03BD
+1D6CF <font> 03BE
+1D6D0 <font> 03BF
+1D6D1 <font> 03C0
+1D6D2 <font> 03C1
+1D6D3 <font> 03C2
+1D6D4 <font> 03C3
+1D6D5 <font> 03C4
+1D6D6 <font> 03C5
+1D6D7 <font> 03C6
+1D6D8 <font> 03C7
+1D6D9 <font> 03C8
+1D6DA <font> 03C9
+1D6DB <font> 2202
+1D6DC <font> 03F5
+1D6DD <font> 03D1
+1D6DE <font> 03F0
+1D6DF <font> 03D5
+1D6E0 <font> 03F1
+1D6E1 <font> 03D6
+1D6E2 <font> 0391
+1D6E3 <font> 0392
+1D6E4 <font> 0393
+1D6E5 <font> 0394
+1D6E6 <font> 0395
+1D6E7 <font> 0396
+1D6E8 <font> 0397
+1D6E9 <font> 0398
+1D6EA <font> 0399
+1D6EB <font> 039A
+1D6EC <font> 039B
+1D6ED <font> 039C
+1D6EE <font> 039D
+1D6EF <font> 039E
+1D6F0 <font> 039F
+1D6F1 <font> 03A0
+1D6F2 <font> 03A1
+1D6F3 <font> 03F4
+1D6F4 <font> 03A3
+1D6F5 <font> 03A4
+1D6F6 <font> 03A5
+1D6F7 <font> 03A6
+1D6F8 <font> 03A7
+1D6F9 <font> 03A8
+1D6FA <font> 03A9
+1D6FB <font> 2207
+1D6FC <font> 03B1
+1D6FD <font> 03B2
+1D6FE <font> 03B3
+1D6FF <font> 03B4
+1D700 <font> 03B5
+1D701 <font> 03B6
+1D702 <font> 03B7
+1D703 <font> 03B8
+1D704 <font> 03B9
+1D705 <font> 03BA
+1D706 <font> 03BB
+1D707 <font> 03BC
+1D708 <font> 03BD
+1D709 <font> 03BE
+1D70A <font> 03BF
+1D70B <font> 03C0
+1D70C <font> 03C1
+1D70D <font> 03C2
+1D70E <font> 03C3
+1D70F <font> 03C4
+1D710 <font> 03C5
+1D711 <font> 03C6
+1D712 <font> 03C7
+1D713 <font> 03C8
+1D714 <font> 03C9
+1D715 <font> 2202
+1D716 <font> 03F5
+1D717 <font> 03D1
+1D718 <font> 03F0
+1D719 <font> 03D5
+1D71A <font> 03F1
+1D71B <font> 03D6
+1D71C <font> 0391
+1D71D <font> 0392
+1D71E <font> 0393
+1D71F <font> 0394
+1D720 <font> 0395
+1D721 <font> 0396
+1D722 <font> 0397
+1D723 <font> 0398
+1D724 <font> 0399
+1D725 <font> 039A
+1D726 <font> 039B
+1D727 <font> 039C
+1D728 <font> 039D
+1D729 <font> 039E
+1D72A <font> 039F
+1D72B <font> 03A0
+1D72C <font> 03A1
+1D72D <font> 03F4
+1D72E <font> 03A3
+1D72F <font> 03A4
+1D730 <font> 03A5
+1D731 <font> 03A6
+1D732 <font> 03A7
+1D733 <font> 03A8
+1D734 <font> 03A9
+1D735 <font> 2207
+1D736 <font> 03B1
+1D737 <font> 03B2
+1D738 <font> 03B3
+1D739 <font> 03B4
+1D73A <font> 03B5
+1D73B <font> 03B6
+1D73C <font> 03B7
+1D73D <font> 03B8
+1D73E <font> 03B9
+1D73F <font> 03BA
+1D740 <font> 03BB
+1D741 <font> 03BC
+1D742 <font> 03BD
+1D743 <font> 03BE
+1D744 <font> 03BF
+1D745 <font> 03C0
+1D746 <font> 03C1
+1D747 <font> 03C2
+1D748 <font> 03C3
+1D749 <font> 03C4
+1D74A <font> 03C5
+1D74B <font> 03C6
+1D74C <font> 03C7
+1D74D <font> 03C8
+1D74E <font> 03C9
+1D74F <font> 2202
+1D750 <font> 03F5
+1D751 <font> 03D1
+1D752 <font> 03F0
+1D753 <font> 03D5
+1D754 <font> 03F1
+1D755 <font> 03D6
+1D756 <font> 0391
+1D757 <font> 0392
+1D758 <font> 0393
+1D759 <font> 0394
+1D75A <font> 0395
+1D75B <font> 0396
+1D75C <font> 0397
+1D75D <font> 0398
+1D75E <font> 0399
+1D75F <font> 039A
+1D760 <font> 039B
+1D761 <font> 039C
+1D762 <font> 039D
+1D763 <font> 039E
+1D764 <font> 039F
+1D765 <font> 03A0
+1D766 <font> 03A1
+1D767 <font> 03F4
+1D768 <font> 03A3
+1D769 <font> 03A4
+1D76A <font> 03A5
+1D76B <font> 03A6
+1D76C <font> 03A7
+1D76D <font> 03A8
+1D76E <font> 03A9
+1D76F <font> 2207
+1D770 <font> 03B1
+1D771 <font> 03B2
+1D772 <font> 03B3
+1D773 <font> 03B4
+1D774 <font> 03B5
+1D775 <font> 03B6
+1D776 <font> 03B7
+1D777 <font> 03B8
+1D778 <font> 03B9
+1D779 <font> 03BA
+1D77A <font> 03BB
+1D77B <font> 03BC
+1D77C <font> 03BD
+1D77D <font> 03BE
+1D77E <font> 03BF
+1D77F <font> 03C0
+1D780 <font> 03C1
+1D781 <font> 03C2
+1D782 <font> 03C3
+1D783 <font> 03C4
+1D784 <font> 03C5
+1D785 <font> 03C6
+1D786 <font> 03C7
+1D787 <font> 03C8
+1D788 <font> 03C9
+1D789 <font> 2202
+1D78A <font> 03F5
+1D78B <font> 03D1
+1D78C <font> 03F0
+1D78D <font> 03D5
+1D78E <font> 03F1
+1D78F <font> 03D6
+1D790 <font> 0391
+1D791 <font> 0392
+1D792 <font> 0393
+1D793 <font> 0394
+1D794 <font> 0395
+1D795 <font> 0396
+1D796 <font> 0397
+1D797 <font> 0398
+1D798 <font> 0399
+1D799 <font> 039A
+1D79A <font> 039B
+1D79B <font> 039C
+1D79C <font> 039D
+1D79D <font> 039E
+1D79E <font> 039F
+1D79F <font> 03A0
+1D7A0 <font> 03A1
+1D7A1 <font> 03F4
+1D7A2 <font> 03A3
+1D7A3 <font> 03A4
+1D7A4 <font> 03A5
+1D7A5 <font> 03A6
+1D7A6 <font> 03A7
+1D7A7 <font> 03A8
+1D7A8 <font> 03A9
+1D7A9 <font> 2207
+1D7AA <font> 03B1
+1D7AB <font> 03B2
+1D7AC <font> 03B3
+1D7AD <font> 03B4
+1D7AE <font> 03B5
+1D7AF <font> 03B6
+1D7B0 <font> 03B7
+1D7B1 <font> 03B8
+1D7B2 <font> 03B9
+1D7B3 <font> 03BA
+1D7B4 <font> 03BB
+1D7B5 <font> 03BC
+1D7B6 <font> 03BD
+1D7B7 <font> 03BE
+1D7B8 <font> 03BF
+1D7B9 <font> 03C0
+1D7BA <font> 03C1
+1D7BB <font> 03C2
+1D7BC <font> 03C3
+1D7BD <font> 03C4
+1D7BE <font> 03C5
+1D7BF <font> 03C6
+1D7C0 <font> 03C7
+1D7C1 <font> 03C8
+1D7C2 <font> 03C9
+1D7C3 <font> 2202
+1D7C4 <font> 03F5
+1D7C5 <font> 03D1
+1D7C6 <font> 03F0
+1D7C7 <font> 03D5
+1D7C8 <font> 03F1
+1D7C9 <font> 03D6
+1D7CE <font> 0030
+1D7CF <font> 0031
+1D7D0 <font> 0032
+1D7D1 <font> 0033
+1D7D2 <font> 0034
+1D7D3 <font> 0035
+1D7D4 <font> 0036
+1D7D5 <font> 0037
+1D7D6 <font> 0038
+1D7D7 <font> 0039
+1D7D8 <font> 0030
+1D7D9 <font> 0031
+1D7DA <font> 0032
+1D7DB <font> 0033
+1D7DC <font> 0034
+1D7DD <font> 0035
+1D7DE <font> 0036
+1D7DF <font> 0037
+1D7E0 <font> 0038
+1D7E1 <font> 0039
+1D7E2 <font> 0030
+1D7E3 <font> 0031
+1D7E4 <font> 0032
+1D7E5 <font> 0033
+1D7E6 <font> 0034
+1D7E7 <font> 0035
+1D7E8 <font> 0036
+1D7E9 <font> 0037
+1D7EA <font> 0038
+1D7EB <font> 0039
+1D7EC <font> 0030
+1D7ED <font> 0031
+1D7EE <font> 0032
+1D7EF <font> 0033
+1D7F0 <font> 0034
+1D7F1 <font> 0035
+1D7F2 <font> 0036
+1D7F3 <font> 0037
+1D7F4 <font> 0038
+1D7F5 <font> 0039
+1D7F6 <font> 0030
+1D7F7 <font> 0031
+1D7F8 <font> 0032
+1D7F9 <font> 0033
+1D7FA <font> 0034
+1D7FB <font> 0035
+1D7FC <font> 0036
+1D7FD <font> 0037
+1D7FE <font> 0038
+1D7FF <font> 0039
+2F800 4E3D
+2F801 4E38
+2F802 4E41
+2F803 20122
+2F804 4F60
+2F805 4FAE
+2F806 4FBB
+2F807 5002
+2F808 507A
+2F809 5099
+2F80A 50E7
+2F80B 50CF
+2F80C 349E
+2F80D 2063A
+2F80E 514D
+2F80F 5154
+2F810 5164
+2F811 5177
+2F812 2051C
+2F813 34B9
+2F814 5167
+2F815 518D
+2F816 2054B
+2F817 5197
+2F818 51A4
+2F819 4ECC
+2F81A 51AC
+2F81B 51B5
+2F81C 291DF
+2F81D 51F5
+2F81E 5203
+2F81F 34DF
+2F820 523B
+2F821 5246
+2F822 5272
+2F823 5277
+2F824 3515
+2F825 52C7
+2F826 52C9
+2F827 52E4
+2F828 52FA
+2F829 5305
+2F82A 5306
+2F82B 5317
+2F82C 5349
+2F82D 5351
+2F82E 535A
+2F82F 5373
+2F830 537D
+2F831 2F833 537F
+2F834 20A2C
+2F835 7070
+2F836 53CA
+2F837 53DF
+2F838 20B63
+2F839 53EB
+2F83A 53F1
+2F83B 5406
+2F83C 549E
+2F83D 5438
+2F83E 5448
+2F83F 5468
+2F840 54A2
+2F841 54F6
+2F842 5510
+2F843 5553
+2F844 5563
+2F845 2F846 5584
+2F847 5599
+2F848 55AB
+2F849 55B3
+2F84A 55C2
+2F84B 5716
+2F84C 5606
+2F84D 5717
+2F84E 5651
+2F84F 5674
+2F850 5207
+2F851 58EE
+2F852 57CE
+2F853 57F4
+2F854 580D
+2F855 578B
+2F856 5832
+2F857 5831
+2F858 58AC
+2F859 214E4
+2F85A 58F2
+2F85B 58F7
+2F85C 5906
+2F85D 591A
+2F85E 5922
+2F85F 5962
+2F860 216A8
+2F861 216EA
+2F862 59EC
+2F863 5A1B
+2F864 5A27
+2F865 59D8
+2F866 5A66
+2F867 36EE
+2F868 36FC
+2F869 5B08
+2F86A 2F86B 5B3E
+2F86C 219C8
+2F86D 5BC3
+2F86E 5BD8
+2F86F 5BE7
+2F870 5BF3
+2F871 21B18
+2F872 5BFF
+2F873 5C06
+2F874 5F53
+2F875 5C22
+2F876 3781
+2F877 5C60
+2F878 5C6E
+2F879 5CC0
+2F87A 5C8D
+2F87B 21DE4
+2F87C 5D43
+2F87D 21DE6
+2F87E 5D6E
+2F87F 5D6B
+2F880 5D7C
+2F881 5DE1
+2F882 5DE2
+2F883 382F
+2F884 5DFD
+2F885 5E28
+2F886 5E3D
+2F887 5E69
+2F888 3862
+2F889 22183
+2F88A 387C
+2F88B 5EB0
+2F88C 5EB3
+2F88D 5EB6
+2F88E 5ECA
+2F88F 2A392
+2F890 5EFE
+2F891 2F892 22331
+2F893 8201
+2F894 2F895 5F22
+2F896 38C7
+2F897 232B8
+2F898 261DA
+2F899 5F62
+2F89A 5F6B
+2F89B 38E3
+2F89C 5F9A
+2F89D 5FCD
+2F89E 5FD7
+2F89F 5FF9
+2F8A0 6081
+2F8A1 393A
+2F8A2 391C
+2F8A3 6094
+2F8A4 226D4
+2F8A5 60C7
+2F8A6 6148
+2F8A7 614C
+2F8A8 614E
+2F8A9 614C
+2F8AA 617A
+2F8AB 618E
+2F8AC 61B2
+2F8AD 61A4
+2F8AE 61AF
+2F8AF 61DE
+2F8B0 61F2
+2F8B1 61F6
+2F8B2 6210
+2F8B3 621B
+2F8B4 625D
+2F8B5 62B1
+2F8B6 62D4
+2F8B7 6350
+2F8B8 22B0C
+2F8B9 633D
+2F8BA 62FC
+2F8BB 6368
+2F8BC 6383
+2F8BD 63E4
+2F8BE 22BF1
+2F8BF 6422
+2F8C0 63C5
+2F8C1 63A9
+2F8C2 3A2E
+2F8C3 6469
+2F8C4 647E
+2F8C5 649D
+2F8C6 6477
+2F8C7 3A6C
+2F8C8 654F
+2F8C9 656C
+2F8CA 2300A
+2F8CB 65E3
+2F8CC 66F8
+2F8CD 6649
+2F8CE 3B19
+2F8CF 6691
+2F8D0 3B08
+2F8D1 3AE4
+2F8D2 5192
+2F8D3 5195
+2F8D4 6700
+2F8D5 669C
+2F8D6 80AD
+2F8D7 43D9
+2F8D8 6717
+2F8D9 671B
+2F8DA 6721
+2F8DB 675E
+2F8DC 6753
+2F8DD 233C3
+2F8DE 3B49
+2F8DF 67FA
+2F8E0 6785
+2F8E1 6852
+2F8E2 6885
+2F8E3 2346D
+2F8E4 688E
+2F8E5 681F
+2F8E6 6914
+2F8E7 3B9D
+2F8E8 6942
+2F8E9 69A3
+2F8EA 69EA
+2F8EB 6AA8
+2F8EC 236A3
+2F8ED 6ADB
+2F8EE 3C18
+2F8EF 6B21
+2F8F0 238A7
+2F8F1 6B54
+2F8F2 3C4E
+2F8F3 6B72
+2F8F4 6B9F
+2F8F5 6BBA
+2F8F6 6BBB
+2F8F7 23A8D
+2F8F8 21D0B
+2F8F9 23AFA
+2F8FA 6C4E
+2F8FB 23CBC
+2F8FC 6CBF
+2F8FD 6CCD
+2F8FE 6C67
+2F8FF 6D16
+2F900 6D3E
+2F901 6D77
+2F902 6D41
+2F903 6D69
+2F904 6D78
+2F905 6D85
+2F906 23D1E
+2F907 6D34
+2F908 6E2F
+2F909 6E6E
+2F90A 3D33
+2F90B 6ECB
+2F90C 6EC7
+2F90D 23ED1
+2F90E 6DF9
+2F90F 6F6E
+2F910 23F5E
+2F911 23F8E
+2F912 6FC6
+2F913 7039
+2F914 701E
+2F915 701B
+2F916 3D96
+2F917 704A
+2F918 707D
+2F919 7077
+2F91A 70AD
+2F91B 20525
+2F91C 7145
+2F91D 24263
+2F91E 719C
+2F91F 243AB
+2F920 7228
+2F921 7235
+2F922 7250
+2F923 24608
+2F924 7280
+2F925 7295
+2F926 24735
+2F927 24814
+2F928 737A
+2F929 738B
+2F92A 3EAC
+2F92B 73A5
+2F92C 2F92D 3EB8
+2F92E 7447
+2F92F 745C
+2F930 7471
+2F931 7485
+2F932 74CA
+2F933 3F1B
+2F934 7524
+2F935 24C36
+2F936 753E
+2F937 24C92
+2F938 7570
+2F939 2219F
+2F93A 7610
+2F93B 24FA1
+2F93C 24FB8
+2F93D 25044
+2F93E 3FFC
+2F93F 4008
+2F940 76F4
+2F941 250F3
+2F942 250F2
+2F943 25119
+2F944 25133
+2F945 771E
+2F946 2F947 771F
+2F948 774A
+2F949 4039
+2F94A 778B
+2F94B 4046
+2F94C 4096
+2F94D 2541D
+2F94E 784E
+2F94F 788C
+2F950 78CC
+2F951 40E3
+2F952 25626
+2F953 7956
+2F954 2569A
+2F955 256C5
+2F956 798F
+2F957 79EB
+2F958 412F
+2F959 7A40
+2F95A 7A4A
+2F95B 7A4F
+2F95C 2597C
+2F95D 2F95E 25AA7
+2F95F 7AEE
+2F960 4202
+2F961 25BAB
+2F962 7BC6
+2F963 7BC9
+2F964 4227
+2F965 25C80
+2F966 7CD2
+2F967 42A0
+2F968 7CE8
+2F969 7CE3
+2F96A 7D00
+2F96B 25F86
+2F96C 7D63
+2F96D 4301
+2F96E 7DC7
+2F96F 7E02
+2F970 7E45
+2F971 4334
+2F972 26228
+2F973 26247
+2F974 4359
+2F975 262D9
+2F976 7F7A
+2F977 2633E
+2F978 7F95
+2F979 7FFA
+2F97A 8005
+2F97B 264DA
+2F97C 26523
+2F97D 8060
+2F97E 265A8
+2F97F 8070
+2F980 2335F
+2F981 43D5
+2F982 80B2
+2F983 8103
+2F984 440B
+2F985 813E
+2F986 5AB5
+2F987 267A7
+2F988 267B5
+2F989 23393
+2F98A 2339C
+2F98B 8201
+2F98C 8204
+2F98D 8F9E
+2F98E 446B
+2F98F 8291
+2F990 828B
+2F991 829D
+2F992 52B3
+2F993 82B1
+2F994 82B3
+2F995 82BD
+2F996 82E6
+2F997 26B3C
+2F998 82E5
+2F999 831D
+2F99A 8363
+2F99B 83AD
+2F99C 8323
+2F99D 83BD
+2F99E 83E7
+2F99F 8457
+2F9A0 8353
+2F9A1 83CA
+2F9A2 83CC
+2F9A3 83DC
+2F9A4 26C36
+2F9A5 26D6B
+2F9A6 26CD5
+2F9A7 452B
+2F9A8 84F1
+2F9A9 84F3
+2F9AA 8516
+2F9AB 273CA
+2F9AC 8564
+2F9AD 26F2C
+2F9AE 455D
+2F9AF 4561
+2F9B0 26FB1
+2F9B1 270D2
+2F9B2 456B
+2F9B3 8650
+2F9B4 865C
+2F9B5 8667
+2F9B6 8669
+2F9B7 86A9
+2F9B8 8688
+2F9B9 870E
+2F9BA 86E2
+2F9BB 8779
+2F9BC 8728
+2F9BD 876B
+2F9BE 8786
+2F9BF 45D7
+2F9C0 87E1
+2F9C1 8801
+2F9C2 45F9
+2F9C3 8860
+2F9C4 8863
+2F9C5 27667
+2F9C6 88D7
+2F9C7 88DE
+2F9C8 4635
+2F9C9 88FA
+2F9CA 34BB
+2F9CB 278AE
+2F9CC 27966
+2F9CD 46BE
+2F9CE 46C7
+2F9CF 8AA0
+2F9D0 8AED
+2F9D1 8B8A
+2F9D2 8C55
+2F9D3 27CA8
+2F9D4 8CAB
+2F9D5 8CC1
+2F9D6 8D1B
+2F9D7 8D77
+2F9D8 27F2F
+2F9D9 20804
+2F9DA 8DCB
+2F9DB 8DBC
+2F9DC 8DF0
+2F9DD 208DE
+2F9DE 8ED4
+2F9DF 8F38
+2F9E0 285D2
+2F9E1 285ED
+2F9E2 9094
+2F9E3 90F1
+2F9E4 9111
+2F9E5 2872E
+2F9E6 911B
+2F9E7 9238
+2F9E8 92D7
+2F9E9 92D8
+2F9EA 927C
+2F9EB 93F9
+2F9EC 9415
+2F9ED 28BFA
+2F9EE 958B
+2F9EF 4995
+2F9F0 95B7
+2F9F1 28D77
+2F9F2 49E6
+2F9F3 96C3
+2F9F4 5DB2
+2F9F5 9723
+2F9F6 29145
+2F9F7 2921A
+2F9F8 4A6E
+2F9F9 4A76
+2F9FA 97E0
+2F9FB 2940A
+2F9FC 4AB2
+2F9FD 29496
+2F9FE 2F9FF 980B
+2FA00 9829
+2FA01 295B6
+2FA02 98E2
+2FA03 4B33
+2FA04 9929
+2FA05 99A7
+2FA06 99C2
+2FA07 99FE
+2FA08 4BCE
+2FA09 29B30
+2FA0A 9B12
+2FA0B 9C40
+2FA0C 9CFD
+2FA0D 4CCE
+2FA0E 4CED
+2FA0F 9D67
+2FA10 2A0CE
+2FA11 4CF8
+2FA12 2A105
+2FA13 2A20E
+2FA14 2A291
+2FA15 9EBB
+2FA16 4D56
+2FA17 9EF9
+2FA18 9EFE
+2FA19 9F05
+2FA1A 9F0F
+2FA1B 9F16
+2FA1C 9F3B
+2FA1D 2A600
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/EastAsianWidth.txt b/Master/tlpkg/tlperl/lib/unicore/EastAsianWidth.txt
new file mode 100644
index 00000000000..935d041eacd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/EastAsianWidth.txt
@@ -0,0 +1,16368 @@
+# EastAsianWidth-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# East Asian Width Properties
+#
+# This file is an informative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# The format is two fields separated by a semicolon.
+# Field 0: Unicode value
+# Field 1: East Asian Width property, consisting of one of the following values:
+# "N", "A", "H", "W", "F", "Na"
+# - All code points, assigned or unassigned, that are not listed
+# explicitly are given the value "N".
+# - Characters ranges are specified as for other property files in
+# the Unicode Character Database.
+#
+# The Unicode name of each character is provided in a comment for help
+# in identifying the characters.
+#
+# See UAX #11: East Asian Character Width, for more information.
+0000;N # <control>
+0001;N # <control>
+0002;N # <control>
+0003;N # <control>
+0004;N # <control>
+0005;N # <control>
+0006;N # <control>
+0007;N # <control>
+0008;N # <control>
+0009;N # <control>
+000A;N # <control>
+000B;N # <control>
+000C;N # <control>
+000D;N # <control>
+000E;N # <control>
+000F;N # <control>
+0010;N # <control>
+0011;N # <control>
+0012;N # <control>
+0013;N # <control>
+0014;N # <control>
+0015;N # <control>
+0016;N # <control>
+0017;N # <control>
+0018;N # <control>
+0019;N # <control>
+001A;N # <control>
+001B;N # <control>
+001C;N # <control>
+001D;N # <control>
+001E;N # <control>
+001F;N # <control>
+0020;Na # SPACE
+0021;Na # EXCLAMATION MARK
+0022;Na # QUOTATION MARK
+0023;Na # NUMBER SIGN
+0024;Na # DOLLAR SIGN
+0025;Na # PERCENT SIGN
+0026;Na # AMPERSAND
+0027;Na # APOSTROPHE
+0028;Na # LEFT PARENTHESIS
+0029;Na # RIGHT PARENTHESIS
+002A;Na # ASTERISK
+002B;Na # PLUS SIGN
+002C;Na # COMMA
+002D;Na # HYPHEN-MINUS
+002E;Na # FULL STOP
+002F;Na # SOLIDUS
+0030;Na # DIGIT ZERO
+0031;Na # DIGIT ONE
+0032;Na # DIGIT TWO
+0033;Na # DIGIT THREE
+0034;Na # DIGIT FOUR
+0035;Na # DIGIT FIVE
+0036;Na # DIGIT SIX
+0037;Na # DIGIT SEVEN
+0038;Na # DIGIT EIGHT
+0039;Na # DIGIT NINE
+003A;Na # COLON
+003B;Na # SEMICOLON
+003C;Na # LESS-THAN SIGN
+003D;Na # EQUALS SIGN
+003E;Na # GREATER-THAN SIGN
+003F;Na # QUESTION MARK
+0040;Na # COMMERCIAL AT
+0041;Na # LATIN CAPITAL LETTER A
+0042;Na # LATIN CAPITAL LETTER B
+0043;Na # LATIN CAPITAL LETTER C
+0044;Na # LATIN CAPITAL LETTER D
+0045;Na # LATIN CAPITAL LETTER E
+0046;Na # LATIN CAPITAL LETTER F
+0047;Na # LATIN CAPITAL LETTER G
+0048;Na # LATIN CAPITAL LETTER H
+0049;Na # LATIN CAPITAL LETTER I
+004A;Na # LATIN CAPITAL LETTER J
+004B;Na # LATIN CAPITAL LETTER K
+004C;Na # LATIN CAPITAL LETTER L
+004D;Na # LATIN CAPITAL LETTER M
+004E;Na # LATIN CAPITAL LETTER N
+004F;Na # LATIN CAPITAL LETTER O
+0050;Na # LATIN CAPITAL LETTER P
+0051;Na # LATIN CAPITAL LETTER Q
+0052;Na # LATIN CAPITAL LETTER R
+0053;Na # LATIN CAPITAL LETTER S
+0054;Na # LATIN CAPITAL LETTER T
+0055;Na # LATIN CAPITAL LETTER U
+0056;Na # LATIN CAPITAL LETTER V
+0057;Na # LATIN CAPITAL LETTER W
+0058;Na # LATIN CAPITAL LETTER X
+0059;Na # LATIN CAPITAL LETTER Y
+005A;Na # LATIN CAPITAL LETTER Z
+005B;Na # LEFT SQUARE BRACKET
+005C;Na # REVERSE SOLIDUS
+005D;Na # RIGHT SQUARE BRACKET
+005E;Na # CIRCUMFLEX ACCENT
+005F;Na # LOW LINE
+0060;Na # GRAVE ACCENT
+0061;Na # LATIN SMALL LETTER A
+0062;Na # LATIN SMALL LETTER B
+0063;Na # LATIN SMALL LETTER C
+0064;Na # LATIN SMALL LETTER D
+0065;Na # LATIN SMALL LETTER E
+0066;Na # LATIN SMALL LETTER F
+0067;Na # LATIN SMALL LETTER G
+0068;Na # LATIN SMALL LETTER H
+0069;Na # LATIN SMALL LETTER I
+006A;Na # LATIN SMALL LETTER J
+006B;Na # LATIN SMALL LETTER K
+006C;Na # LATIN SMALL LETTER L
+006D;Na # LATIN SMALL LETTER M
+006E;Na # LATIN SMALL LETTER N
+006F;Na # LATIN SMALL LETTER O
+0070;Na # LATIN SMALL LETTER P
+0071;Na # LATIN SMALL LETTER Q
+0072;Na # LATIN SMALL LETTER R
+0073;Na # LATIN SMALL LETTER S
+0074;Na # LATIN SMALL LETTER T
+0075;Na # LATIN SMALL LETTER U
+0076;Na # LATIN SMALL LETTER V
+0077;Na # LATIN SMALL LETTER W
+0078;Na # LATIN SMALL LETTER X
+0079;Na # LATIN SMALL LETTER Y
+007A;Na # LATIN SMALL LETTER Z
+007B;Na # LEFT CURLY BRACKET
+007C;Na # VERTICAL LINE
+007D;Na # RIGHT CURLY BRACKET
+007E;Na # TILDE
+007F;N # <control>
+0080;N # <control>
+0081;N # <control>
+0082;N # <control>
+0083;N # <control>
+0084;N # <control>
+0085;N # <control>
+0086;N # <control>
+0087;N # <control>
+0088;N # <control>
+0089;N # <control>
+008A;N # <control>
+008B;N # <control>
+008C;N # <control>
+008D;N # <control>
+008E;N # <control>
+008F;N # <control>
+0090;N # <control>
+0091;N # <control>
+0092;N # <control>
+0093;N # <control>
+0094;N # <control>
+0095;N # <control>
+0096;N # <control>
+0097;N # <control>
+0098;N # <control>
+0099;N # <control>
+009A;N # <control>
+009B;N # <control>
+009C;N # <control>
+009D;N # <control>
+009E;N # <control>
+009F;N # <control>
+00A0;N # NO-BREAK SPACE
+00A1;A # INVERTED EXCLAMATION MARK
+00A2;Na # CENT SIGN
+00A3;Na # POUND SIGN
+00A4;A # CURRENCY SIGN
+00A5;Na # YEN SIGN
+00A6;Na # BROKEN BAR
+00A7;A # SECTION SIGN
+00A8;A # DIAERESIS
+00A9;N # COPYRIGHT SIGN
+00AA;A # FEMININE ORDINAL INDICATOR
+00AB;N # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC;Na # NOT SIGN
+00AD;A # SOFT HYPHEN
+00AE;A # REGISTERED SIGN
+00AF;Na # MACRON
+00B0;A # DEGREE SIGN
+00B1;A # PLUS-MINUS SIGN
+00B2;A # SUPERSCRIPT TWO
+00B3;A # SUPERSCRIPT THREE
+00B4;A # ACUTE ACCENT
+00B5;N # MICRO SIGN
+00B6;A # PILCROW SIGN
+00B7;A # MIDDLE DOT
+00B8;A # CEDILLA
+00B9;A # SUPERSCRIPT ONE
+00BA;A # MASCULINE ORDINAL INDICATOR
+00BB;N # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC;A # VULGAR FRACTION ONE QUARTER
+00BD;A # VULGAR FRACTION ONE HALF
+00BE;A # VULGAR FRACTION THREE QUARTERS
+00BF;A # INVERTED QUESTION MARK
+00C0;N # LATIN CAPITAL LETTER A WITH GRAVE
+00C1;N # LATIN CAPITAL LETTER A WITH ACUTE
+00C2;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3;N # LATIN CAPITAL LETTER A WITH TILDE
+00C4;N # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5;N # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6;A # LATIN CAPITAL LETTER AE
+00C7;N # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8;N # LATIN CAPITAL LETTER E WITH GRAVE
+00C9;N # LATIN CAPITAL LETTER E WITH ACUTE
+00CA;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;N # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC;N # LATIN CAPITAL LETTER I WITH GRAVE
+00CD;N # LATIN CAPITAL LETTER I WITH ACUTE
+00CE;N # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;N # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0;A # LATIN CAPITAL LETTER ETH
+00D1;N # LATIN CAPITAL LETTER N WITH TILDE
+00D2;N # LATIN CAPITAL LETTER O WITH GRAVE
+00D3;N # LATIN CAPITAL LETTER O WITH ACUTE
+00D4;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5;N # LATIN CAPITAL LETTER O WITH TILDE
+00D6;N # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7;A # MULTIPLICATION SIGN
+00D8;A # LATIN CAPITAL LETTER O WITH STROKE
+00D9;N # LATIN CAPITAL LETTER U WITH GRAVE
+00DA;N # LATIN CAPITAL LETTER U WITH ACUTE
+00DB;N # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;N # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD;N # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE;A # LATIN CAPITAL LETTER THORN
+00DF;A # LATIN SMALL LETTER SHARP S
+00E0;A # LATIN SMALL LETTER A WITH GRAVE
+00E1;A # LATIN SMALL LETTER A WITH ACUTE
+00E2;N # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3;N # LATIN SMALL LETTER A WITH TILDE
+00E4;N # LATIN SMALL LETTER A WITH DIAERESIS
+00E5;N # LATIN SMALL LETTER A WITH RING ABOVE
+00E6;A # LATIN SMALL LETTER AE
+00E7;N # LATIN SMALL LETTER C WITH CEDILLA
+00E8;A # LATIN SMALL LETTER E WITH GRAVE
+00E9;A # LATIN SMALL LETTER E WITH ACUTE
+00EA;A # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;N # LATIN SMALL LETTER E WITH DIAERESIS
+00EC;A # LATIN SMALL LETTER I WITH GRAVE
+00ED;A # LATIN SMALL LETTER I WITH ACUTE
+00EE;N # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;N # LATIN SMALL LETTER I WITH DIAERESIS
+00F0;A # LATIN SMALL LETTER ETH
+00F1;N # LATIN SMALL LETTER N WITH TILDE
+00F2;A # LATIN SMALL LETTER O WITH GRAVE
+00F3;A # LATIN SMALL LETTER O WITH ACUTE
+00F4;N # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5;N # LATIN SMALL LETTER O WITH TILDE
+00F6;N # LATIN SMALL LETTER O WITH DIAERESIS
+00F7;A # DIVISION SIGN
+00F8;A # LATIN SMALL LETTER O WITH STROKE
+00F9;A # LATIN SMALL LETTER U WITH GRAVE
+00FA;A # LATIN SMALL LETTER U WITH ACUTE
+00FB;N # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;A # LATIN SMALL LETTER U WITH DIAERESIS
+00FD;N # LATIN SMALL LETTER Y WITH ACUTE
+00FE;A # LATIN SMALL LETTER THORN
+00FF;N # LATIN SMALL LETTER Y WITH DIAERESIS
+0100;N # LATIN CAPITAL LETTER A WITH MACRON
+0101;A # LATIN SMALL LETTER A WITH MACRON
+0102;N # LATIN CAPITAL LETTER A WITH BREVE
+0103;N # LATIN SMALL LETTER A WITH BREVE
+0104;N # LATIN CAPITAL LETTER A WITH OGONEK
+0105;N # LATIN SMALL LETTER A WITH OGONEK
+0106;N # LATIN CAPITAL LETTER C WITH ACUTE
+0107;N # LATIN SMALL LETTER C WITH ACUTE
+0108;N # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109;N # LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A;N # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B;N # LATIN SMALL LETTER C WITH DOT ABOVE
+010C;N # LATIN CAPITAL LETTER C WITH CARON
+010D;N # LATIN SMALL LETTER C WITH CARON
+010E;N # LATIN CAPITAL LETTER D WITH CARON
+010F;N # LATIN SMALL LETTER D WITH CARON
+0110;N # LATIN CAPITAL LETTER D WITH STROKE
+0111;A # LATIN SMALL LETTER D WITH STROKE
+0112;N # LATIN CAPITAL LETTER E WITH MACRON
+0113;A # LATIN SMALL LETTER E WITH MACRON
+0114;N # LATIN CAPITAL LETTER E WITH BREVE
+0115;N # LATIN SMALL LETTER E WITH BREVE
+0116;N # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117;N # LATIN SMALL LETTER E WITH DOT ABOVE
+0118;N # LATIN CAPITAL LETTER E WITH OGONEK
+0119;N # LATIN SMALL LETTER E WITH OGONEK
+011A;N # LATIN CAPITAL LETTER E WITH CARON
+011B;A # LATIN SMALL LETTER E WITH CARON
+011C;N # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D;N # LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E;N # LATIN CAPITAL LETTER G WITH BREVE
+011F;N # LATIN SMALL LETTER G WITH BREVE
+0120;N # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121;N # LATIN SMALL LETTER G WITH DOT ABOVE
+0122;N # LATIN CAPITAL LETTER G WITH CEDILLA
+0123;N # LATIN SMALL LETTER G WITH CEDILLA
+0124;N # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125;N # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126;A # LATIN CAPITAL LETTER H WITH STROKE
+0127;A # LATIN SMALL LETTER H WITH STROKE
+0128;N # LATIN CAPITAL LETTER I WITH TILDE
+0129;N # LATIN SMALL LETTER I WITH TILDE
+012A;N # LATIN CAPITAL LETTER I WITH MACRON
+012B;A # LATIN SMALL LETTER I WITH MACRON
+012C;N # LATIN CAPITAL LETTER I WITH BREVE
+012D;N # LATIN SMALL LETTER I WITH BREVE
+012E;N # LATIN CAPITAL LETTER I WITH OGONEK
+012F;N # LATIN SMALL LETTER I WITH OGONEK
+0130;N # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131;A # LATIN SMALL LETTER DOTLESS I
+0132;A # LATIN CAPITAL LIGATURE IJ
+0133;A # LATIN SMALL LIGATURE IJ
+0134;N # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135;N # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136;N # LATIN CAPITAL LETTER K WITH CEDILLA
+0137;N # LATIN SMALL LETTER K WITH CEDILLA
+0138;A # LATIN SMALL LETTER KRA
+0139;N # LATIN CAPITAL LETTER L WITH ACUTE
+013A;N # LATIN SMALL LETTER L WITH ACUTE
+013B;N # LATIN CAPITAL LETTER L WITH CEDILLA
+013C;N # LATIN SMALL LETTER L WITH CEDILLA
+013D;N # LATIN CAPITAL LETTER L WITH CARON
+013E;N # LATIN SMALL LETTER L WITH CARON
+013F;A # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140;A # LATIN SMALL LETTER L WITH MIDDLE DOT
+0141;A # LATIN CAPITAL LETTER L WITH STROKE
+0142;A # LATIN SMALL LETTER L WITH STROKE
+0143;N # LATIN CAPITAL LETTER N WITH ACUTE
+0144;A # LATIN SMALL LETTER N WITH ACUTE
+0145;N # LATIN CAPITAL LETTER N WITH CEDILLA
+0146;N # LATIN SMALL LETTER N WITH CEDILLA
+0147;N # LATIN CAPITAL LETTER N WITH CARON
+0148;A # LATIN SMALL LETTER N WITH CARON
+0149;A # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A;A # LATIN CAPITAL LETTER ENG
+014B;A # LATIN SMALL LETTER ENG
+014C;N # LATIN CAPITAL LETTER O WITH MACRON
+014D;A # LATIN SMALL LETTER O WITH MACRON
+014E;N # LATIN CAPITAL LETTER O WITH BREVE
+014F;N # LATIN SMALL LETTER O WITH BREVE
+0150;N # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151;N # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152;A # LATIN CAPITAL LIGATURE OE
+0153;A # LATIN SMALL LIGATURE OE
+0154;N # LATIN CAPITAL LETTER R WITH ACUTE
+0155;N # LATIN SMALL LETTER R WITH ACUTE
+0156;N # LATIN CAPITAL LETTER R WITH CEDILLA
+0157;N # LATIN SMALL LETTER R WITH CEDILLA
+0158;N # LATIN CAPITAL LETTER R WITH CARON
+0159;N # LATIN SMALL LETTER R WITH CARON
+015A;N # LATIN CAPITAL LETTER S WITH ACUTE
+015B;N # LATIN SMALL LETTER S WITH ACUTE
+015C;N # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D;N # LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E;N # LATIN CAPITAL LETTER S WITH CEDILLA
+015F;N # LATIN SMALL LETTER S WITH CEDILLA
+0160;N # LATIN CAPITAL LETTER S WITH CARON
+0161;N # LATIN SMALL LETTER S WITH CARON
+0162;N # LATIN CAPITAL LETTER T WITH CEDILLA
+0163;N # LATIN SMALL LETTER T WITH CEDILLA
+0164;N # LATIN CAPITAL LETTER T WITH CARON
+0165;N # LATIN SMALL LETTER T WITH CARON
+0166;A # LATIN CAPITAL LETTER T WITH STROKE
+0167;A # LATIN SMALL LETTER T WITH STROKE
+0168;N # LATIN CAPITAL LETTER U WITH TILDE
+0169;N # LATIN SMALL LETTER U WITH TILDE
+016A;N # LATIN CAPITAL LETTER U WITH MACRON
+016B;A # LATIN SMALL LETTER U WITH MACRON
+016C;N # LATIN CAPITAL LETTER U WITH BREVE
+016D;N # LATIN SMALL LETTER U WITH BREVE
+016E;N # LATIN CAPITAL LETTER U WITH RING ABOVE
+016F;N # LATIN SMALL LETTER U WITH RING ABOVE
+0170;N # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171;N # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172;N # LATIN CAPITAL LETTER U WITH OGONEK
+0173;N # LATIN SMALL LETTER U WITH OGONEK
+0174;N # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175;N # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176;N # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177;N # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178;N # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179;N # LATIN CAPITAL LETTER Z WITH ACUTE
+017A;N # LATIN SMALL LETTER Z WITH ACUTE
+017B;N # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C;N # LATIN SMALL LETTER Z WITH DOT ABOVE
+017D;N # LATIN CAPITAL LETTER Z WITH CARON
+017E;N # LATIN SMALL LETTER Z WITH CARON
+017F;N # LATIN SMALL LETTER LONG S
+0180;N # LATIN SMALL LETTER B WITH STROKE
+0181;N # LATIN CAPITAL LETTER B WITH HOOK
+0182;N # LATIN CAPITAL LETTER B WITH TOPBAR
+0183;N # LATIN SMALL LETTER B WITH TOPBAR
+0184;N # LATIN CAPITAL LETTER TONE SIX
+0185;N # LATIN SMALL LETTER TONE SIX
+0186;N # LATIN CAPITAL LETTER OPEN O
+0187;N # LATIN CAPITAL LETTER C WITH HOOK
+0188;N # LATIN SMALL LETTER C WITH HOOK
+0189;N # LATIN CAPITAL LETTER AFRICAN D
+018A;N # LATIN CAPITAL LETTER D WITH HOOK
+018B;N # LATIN CAPITAL LETTER D WITH TOPBAR
+018C;N # LATIN SMALL LETTER D WITH TOPBAR
+018D;N # LATIN SMALL LETTER TURNED DELTA
+018E;N # LATIN CAPITAL LETTER REVERSED E
+018F;N # LATIN CAPITAL LETTER SCHWA
+0190;N # LATIN CAPITAL LETTER OPEN E
+0191;N # LATIN CAPITAL LETTER F WITH HOOK
+0192;N # LATIN SMALL LETTER F WITH HOOK
+0193;N # LATIN CAPITAL LETTER G WITH HOOK
+0194;N # LATIN CAPITAL LETTER GAMMA
+0195;N # LATIN SMALL LETTER HV
+0196;N # LATIN CAPITAL LETTER IOTA
+0197;N # LATIN CAPITAL LETTER I WITH STROKE
+0198;N # LATIN CAPITAL LETTER K WITH HOOK
+0199;N # LATIN SMALL LETTER K WITH HOOK
+019A;N # LATIN SMALL LETTER L WITH BAR
+019B;N # LATIN SMALL LETTER LAMBDA WITH STROKE
+019C;N # LATIN CAPITAL LETTER TURNED M
+019D;N # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019E;N # LATIN SMALL LETTER N WITH LONG RIGHT LEG
+019F;N # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0;N # LATIN CAPITAL LETTER O WITH HORN
+01A1;N # LATIN SMALL LETTER O WITH HORN
+01A2;N # LATIN CAPITAL LETTER OI
+01A3;N # LATIN SMALL LETTER OI
+01A4;N # LATIN CAPITAL LETTER P WITH HOOK
+01A5;N # LATIN SMALL LETTER P WITH HOOK
+01A6;N # LATIN LETTER YR
+01A7;N # LATIN CAPITAL LETTER TONE TWO
+01A8;N # LATIN SMALL LETTER TONE TWO
+01A9;N # LATIN CAPITAL LETTER ESH
+01AA;N # LATIN LETTER REVERSED ESH LOOP
+01AB;N # LATIN SMALL LETTER T WITH PALATAL HOOK
+01AC;N # LATIN CAPITAL LETTER T WITH HOOK
+01AD;N # LATIN SMALL LETTER T WITH HOOK
+01AE;N # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF;N # LATIN CAPITAL LETTER U WITH HORN
+01B0;N # LATIN SMALL LETTER U WITH HORN
+01B1;N # LATIN CAPITAL LETTER UPSILON
+01B2;N # LATIN CAPITAL LETTER V WITH HOOK
+01B3;N # LATIN CAPITAL LETTER Y WITH HOOK
+01B4;N # LATIN SMALL LETTER Y WITH HOOK
+01B5;N # LATIN CAPITAL LETTER Z WITH STROKE
+01B6;N # LATIN SMALL LETTER Z WITH STROKE
+01B7;N # LATIN CAPITAL LETTER EZH
+01B8;N # LATIN CAPITAL LETTER EZH REVERSED
+01B9;N # LATIN SMALL LETTER EZH REVERSED
+01BA;N # LATIN SMALL LETTER EZH WITH TAIL
+01BB;N # LATIN LETTER TWO WITH STROKE
+01BC;N # LATIN CAPITAL LETTER TONE FIVE
+01BD;N # LATIN SMALL LETTER TONE FIVE
+01BE;N # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+01BF;N # LATIN LETTER WYNN
+01C0;N # LATIN LETTER DENTAL CLICK
+01C1;N # LATIN LETTER LATERAL CLICK
+01C2;N # LATIN LETTER ALVEOLAR CLICK
+01C3;N # LATIN LETTER RETROFLEX CLICK
+01C4;N # LATIN CAPITAL LETTER DZ WITH CARON
+01C5;N # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6;N # LATIN SMALL LETTER DZ WITH CARON
+01C7;N # LATIN CAPITAL LETTER LJ
+01C8;N # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9;N # LATIN SMALL LETTER LJ
+01CA;N # LATIN CAPITAL LETTER NJ
+01CB;N # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC;N # LATIN SMALL LETTER NJ
+01CD;N # LATIN CAPITAL LETTER A WITH CARON
+01CE;A # LATIN SMALL LETTER A WITH CARON
+01CF;N # LATIN CAPITAL LETTER I WITH CARON
+01D0;A # LATIN SMALL LETTER I WITH CARON
+01D1;N # LATIN CAPITAL LETTER O WITH CARON
+01D2;A # LATIN SMALL LETTER O WITH CARON
+01D3;N # LATIN CAPITAL LETTER U WITH CARON
+01D4;A # LATIN SMALL LETTER U WITH CARON
+01D5;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6;A # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8;A # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA;A # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB;N # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC;A # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD;N # LATIN SMALL LETTER TURNED E
+01DE;N # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF;N # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0;N # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1;N # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2;N # LATIN CAPITAL LETTER AE WITH MACRON
+01E3;N # LATIN SMALL LETTER AE WITH MACRON
+01E4;N # LATIN CAPITAL LETTER G WITH STROKE
+01E5;N # LATIN SMALL LETTER G WITH STROKE
+01E6;N # LATIN CAPITAL LETTER G WITH CARON
+01E7;N # LATIN SMALL LETTER G WITH CARON
+01E8;N # LATIN CAPITAL LETTER K WITH CARON
+01E9;N # LATIN SMALL LETTER K WITH CARON
+01EA;N # LATIN CAPITAL LETTER O WITH OGONEK
+01EB;N # LATIN SMALL LETTER O WITH OGONEK
+01EC;N # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED;N # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE;N # LATIN CAPITAL LETTER EZH WITH CARON
+01EF;N # LATIN SMALL LETTER EZH WITH CARON
+01F0;N # LATIN SMALL LETTER J WITH CARON
+01F1;N # LATIN CAPITAL LETTER DZ
+01F2;N # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3;N # LATIN SMALL LETTER DZ
+01F4;N # LATIN CAPITAL LETTER G WITH ACUTE
+01F5;N # LATIN SMALL LETTER G WITH ACUTE
+01F6;N # LATIN CAPITAL LETTER HWAIR
+01F7;N # LATIN CAPITAL LETTER WYNN
+01F8;N # LATIN CAPITAL LETTER N WITH GRAVE
+01F9;N # LATIN SMALL LETTER N WITH GRAVE
+01FA;N # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB;N # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC;N # LATIN CAPITAL LETTER AE WITH ACUTE
+01FD;N # LATIN SMALL LETTER AE WITH ACUTE
+01FE;N # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF;N # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200;N # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201;N # LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202;N # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203;N # LATIN SMALL LETTER A WITH INVERTED BREVE
+0204;N # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205;N # LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206;N # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207;N # LATIN SMALL LETTER E WITH INVERTED BREVE
+0208;N # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209;N # LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A;N # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B;N # LATIN SMALL LETTER I WITH INVERTED BREVE
+020C;N # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D;N # LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E;N # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F;N # LATIN SMALL LETTER O WITH INVERTED BREVE
+0210;N # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211;N # LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212;N # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213;N # LATIN SMALL LETTER R WITH INVERTED BREVE
+0214;N # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215;N # LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216;N # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217;N # LATIN SMALL LETTER U WITH INVERTED BREVE
+0218;N # LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219;N # LATIN SMALL LETTER S WITH COMMA BELOW
+021A;N # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B;N # LATIN SMALL LETTER T WITH COMMA BELOW
+021C;N # LATIN CAPITAL LETTER YOGH
+021D;N # LATIN SMALL LETTER YOGH
+021E;N # LATIN CAPITAL LETTER H WITH CARON
+021F;N # LATIN SMALL LETTER H WITH CARON
+0220;N # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0221;N # LATIN SMALL LETTER D WITH CURL
+0222;N # LATIN CAPITAL LETTER OU
+0223;N # LATIN SMALL LETTER OU
+0224;N # LATIN CAPITAL LETTER Z WITH HOOK
+0225;N # LATIN SMALL LETTER Z WITH HOOK
+0226;N # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227;N # LATIN SMALL LETTER A WITH DOT ABOVE
+0228;N # LATIN CAPITAL LETTER E WITH CEDILLA
+0229;N # LATIN SMALL LETTER E WITH CEDILLA
+022A;N # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B;N # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C;N # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D;N # LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E;N # LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F;N # LATIN SMALL LETTER O WITH DOT ABOVE
+0230;N # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231;N # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232;N # LATIN CAPITAL LETTER Y WITH MACRON
+0233;N # LATIN SMALL LETTER Y WITH MACRON
+0234;N # LATIN SMALL LETTER L WITH CURL
+0235;N # LATIN SMALL LETTER N WITH CURL
+0236;N # LATIN SMALL LETTER T WITH CURL
+0237;N # LATIN SMALL LETTER DOTLESS J
+0238;N # LATIN SMALL LETTER DB DIGRAPH
+0239;N # LATIN SMALL LETTER QP DIGRAPH
+023A;N # LATIN CAPITAL LETTER A WITH STROKE
+023B;N # LATIN CAPITAL LETTER C WITH STROKE
+023C;N # LATIN SMALL LETTER C WITH STROKE
+023D;N # LATIN CAPITAL LETTER L WITH BAR
+023E;N # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F;N # LATIN SMALL LETTER S WITH SWASH TAIL
+0240;N # LATIN SMALL LETTER Z WITH SWASH TAIL
+0241;N # LATIN CAPITAL LETTER GLOTTAL STOP
+0250;N # LATIN SMALL LETTER TURNED A
+0251;A # LATIN SMALL LETTER ALPHA
+0252;N # LATIN SMALL LETTER TURNED ALPHA
+0253;N # LATIN SMALL LETTER B WITH HOOK
+0254;N # LATIN SMALL LETTER OPEN O
+0255;N # LATIN SMALL LETTER C WITH CURL
+0256;N # LATIN SMALL LETTER D WITH TAIL
+0257;N # LATIN SMALL LETTER D WITH HOOK
+0258;N # LATIN SMALL LETTER REVERSED E
+0259;N # LATIN SMALL LETTER SCHWA
+025A;N # LATIN SMALL LETTER SCHWA WITH HOOK
+025B;N # LATIN SMALL LETTER OPEN E
+025C;N # LATIN SMALL LETTER REVERSED OPEN E
+025D;N # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E;N # LATIN SMALL LETTER CLOSED REVERSED OPEN E
+025F;N # LATIN SMALL LETTER DOTLESS J WITH STROKE
+0260;N # LATIN SMALL LETTER G WITH HOOK
+0261;A # LATIN SMALL LETTER SCRIPT G
+0262;N # LATIN LETTER SMALL CAPITAL G
+0263;N # LATIN SMALL LETTER GAMMA
+0264;N # LATIN SMALL LETTER RAMS HORN
+0265;N # LATIN SMALL LETTER TURNED H
+0266;N # LATIN SMALL LETTER H WITH HOOK
+0267;N # LATIN SMALL LETTER HENG WITH HOOK
+0268;N # LATIN SMALL LETTER I WITH STROKE
+0269;N # LATIN SMALL LETTER IOTA
+026A;N # LATIN LETTER SMALL CAPITAL I
+026B;N # LATIN SMALL LETTER L WITH MIDDLE TILDE
+026C;N # LATIN SMALL LETTER L WITH BELT
+026D;N # LATIN SMALL LETTER L WITH RETROFLEX HOOK
+026E;N # LATIN SMALL LETTER LEZH
+026F;N # LATIN SMALL LETTER TURNED M
+0270;N # LATIN SMALL LETTER TURNED M WITH LONG LEG
+0271;N # LATIN SMALL LETTER M WITH HOOK
+0272;N # LATIN SMALL LETTER N WITH LEFT HOOK
+0273;N # LATIN SMALL LETTER N WITH RETROFLEX HOOK
+0274;N # LATIN LETTER SMALL CAPITAL N
+0275;N # LATIN SMALL LETTER BARRED O
+0276;N # LATIN LETTER SMALL CAPITAL OE
+0277;N # LATIN SMALL LETTER CLOSED OMEGA
+0278;N # LATIN SMALL LETTER PHI
+0279;N # LATIN SMALL LETTER TURNED R
+027A;N # LATIN SMALL LETTER TURNED R WITH LONG LEG
+027B;N # LATIN SMALL LETTER TURNED R WITH HOOK
+027C;N # LATIN SMALL LETTER R WITH LONG LEG
+027D;N # LATIN SMALL LETTER R WITH TAIL
+027E;N # LATIN SMALL LETTER R WITH FISHHOOK
+027F;N # LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+0280;N # LATIN LETTER SMALL CAPITAL R
+0281;N # LATIN LETTER SMALL CAPITAL INVERTED R
+0282;N # LATIN SMALL LETTER S WITH HOOK
+0283;N # LATIN SMALL LETTER ESH
+0284;N # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+0285;N # LATIN SMALL LETTER SQUAT REVERSED ESH
+0286;N # LATIN SMALL LETTER ESH WITH CURL
+0287;N # LATIN SMALL LETTER TURNED T
+0288;N # LATIN SMALL LETTER T WITH RETROFLEX HOOK
+0289;N # LATIN SMALL LETTER U BAR
+028A;N # LATIN SMALL LETTER UPSILON
+028B;N # LATIN SMALL LETTER V WITH HOOK
+028C;N # LATIN SMALL LETTER TURNED V
+028D;N # LATIN SMALL LETTER TURNED W
+028E;N # LATIN SMALL LETTER TURNED Y
+028F;N # LATIN LETTER SMALL CAPITAL Y
+0290;N # LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+0291;N # LATIN SMALL LETTER Z WITH CURL
+0292;N # LATIN SMALL LETTER EZH
+0293;N # LATIN SMALL LETTER EZH WITH CURL
+0294;N # LATIN LETTER GLOTTAL STOP
+0295;N # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+0296;N # LATIN LETTER INVERTED GLOTTAL STOP
+0297;N # LATIN LETTER STRETCHED C
+0298;N # LATIN LETTER BILABIAL CLICK
+0299;N # LATIN LETTER SMALL CAPITAL B
+029A;N # LATIN SMALL LETTER CLOSED OPEN E
+029B;N # LATIN LETTER SMALL CAPITAL G WITH HOOK
+029C;N # LATIN LETTER SMALL CAPITAL H
+029D;N # LATIN SMALL LETTER J WITH CROSSED-TAIL
+029E;N # LATIN SMALL LETTER TURNED K
+029F;N # LATIN LETTER SMALL CAPITAL L
+02A0;N # LATIN SMALL LETTER Q WITH HOOK
+02A1;N # LATIN LETTER GLOTTAL STOP WITH STROKE
+02A2;N # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+02A3;N # LATIN SMALL LETTER DZ DIGRAPH
+02A4;N # LATIN SMALL LETTER DEZH DIGRAPH
+02A5;N # LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+02A6;N # LATIN SMALL LETTER TS DIGRAPH
+02A7;N # LATIN SMALL LETTER TESH DIGRAPH
+02A8;N # LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9;N # LATIN SMALL LETTER FENG DIGRAPH
+02AA;N # LATIN SMALL LETTER LS DIGRAPH
+02AB;N # LATIN SMALL LETTER LZ DIGRAPH
+02AC;N # LATIN LETTER BILABIAL PERCUSSIVE
+02AD;N # LATIN LETTER BIDENTAL PERCUSSIVE
+02AE;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF;N # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0;N # MODIFIER LETTER SMALL H
+02B1;N # MODIFIER LETTER SMALL H WITH HOOK
+02B2;N # MODIFIER LETTER SMALL J
+02B3;N # MODIFIER LETTER SMALL R
+02B4;N # MODIFIER LETTER SMALL TURNED R
+02B5;N # MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6;N # MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7;N # MODIFIER LETTER SMALL W
+02B8;N # MODIFIER LETTER SMALL Y
+02B9;N # MODIFIER LETTER PRIME
+02BA;N # MODIFIER LETTER DOUBLE PRIME
+02BB;N # MODIFIER LETTER TURNED COMMA
+02BC;N # MODIFIER LETTER APOSTROPHE
+02BD;N # MODIFIER LETTER REVERSED COMMA
+02BE;N # MODIFIER LETTER RIGHT HALF RING
+02BF;N # MODIFIER LETTER LEFT HALF RING
+02C0;N # MODIFIER LETTER GLOTTAL STOP
+02C1;N # MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2;N # MODIFIER LETTER LEFT ARROWHEAD
+02C3;N # MODIFIER LETTER RIGHT ARROWHEAD
+02C4;A # MODIFIER LETTER UP ARROWHEAD
+02C5;N # MODIFIER LETTER DOWN ARROWHEAD
+02C6;N # MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7;A # CARON
+02C8;N # MODIFIER LETTER VERTICAL LINE
+02C9;A # MODIFIER LETTER MACRON
+02CA;A # MODIFIER LETTER ACUTE ACCENT
+02CB;A # MODIFIER LETTER GRAVE ACCENT
+02CC;N # MODIFIER LETTER LOW VERTICAL LINE
+02CD;A # MODIFIER LETTER LOW MACRON
+02CE;N # MODIFIER LETTER LOW GRAVE ACCENT
+02CF;N # MODIFIER LETTER LOW ACUTE ACCENT
+02D0;A # MODIFIER LETTER TRIANGULAR COLON
+02D1;N # MODIFIER LETTER HALF TRIANGULAR COLON
+02D2;N # MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3;N # MODIFIER LETTER CENTRED LEFT HALF RING
+02D4;N # MODIFIER LETTER UP TACK
+02D5;N # MODIFIER LETTER DOWN TACK
+02D6;N # MODIFIER LETTER PLUS SIGN
+02D7;N # MODIFIER LETTER MINUS SIGN
+02D8;A # BREVE
+02D9;A # DOT ABOVE
+02DA;A # RING ABOVE
+02DB;A # OGONEK
+02DC;N # SMALL TILDE
+02DD;A # DOUBLE ACUTE ACCENT
+02DE;N # MODIFIER LETTER RHOTIC HOOK
+02DF;A # MODIFIER LETTER CROSS ACCENT
+02E0;N # MODIFIER LETTER SMALL GAMMA
+02E1;N # MODIFIER LETTER SMALL L
+02E2;N # MODIFIER LETTER SMALL S
+02E3;N # MODIFIER LETTER SMALL X
+02E4;N # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5;N # MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6;N # MODIFIER LETTER HIGH TONE BAR
+02E7;N # MODIFIER LETTER MID TONE BAR
+02E8;N # MODIFIER LETTER LOW TONE BAR
+02E9;N # MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA;N # MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB;N # MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC;N # MODIFIER LETTER VOICING
+02ED;N # MODIFIER LETTER UNASPIRATED
+02EE;N # MODIFIER LETTER DOUBLE APOSTROPHE
+02EF;N # MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0;N # MODIFIER LETTER LOW UP ARROWHEAD
+02F1;N # MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2;N # MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3;N # MODIFIER LETTER LOW RING
+02F4;N # MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5;N # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6;N # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7;N # MODIFIER LETTER LOW TILDE
+02F8;N # MODIFIER LETTER RAISED COLON
+02F9;N # MODIFIER LETTER BEGIN HIGH TONE
+02FA;N # MODIFIER LETTER END HIGH TONE
+02FB;N # MODIFIER LETTER BEGIN LOW TONE
+02FC;N # MODIFIER LETTER END LOW TONE
+02FD;N # MODIFIER LETTER SHELF
+02FE;N # MODIFIER LETTER OPEN SHELF
+02FF;N # MODIFIER LETTER LOW LEFT ARROW
+0300;A # COMBINING GRAVE ACCENT
+0301;A # COMBINING ACUTE ACCENT
+0302;A # COMBINING CIRCUMFLEX ACCENT
+0303;A # COMBINING TILDE
+0304;A # COMBINING MACRON
+0305;A # COMBINING OVERLINE
+0306;A # COMBINING BREVE
+0307;A # COMBINING DOT ABOVE
+0308;A # COMBINING DIAERESIS
+0309;A # COMBINING HOOK ABOVE
+030A;A # COMBINING RING ABOVE
+030B;A # COMBINING DOUBLE ACUTE ACCENT
+030C;A # COMBINING CARON
+030D;A # COMBINING VERTICAL LINE ABOVE
+030E;A # COMBINING DOUBLE VERTICAL LINE ABOVE
+030F;A # COMBINING DOUBLE GRAVE ACCENT
+0310;A # COMBINING CANDRABINDU
+0311;A # COMBINING INVERTED BREVE
+0312;A # COMBINING TURNED COMMA ABOVE
+0313;A # COMBINING COMMA ABOVE
+0314;A # COMBINING REVERSED COMMA ABOVE
+0315;A # COMBINING COMMA ABOVE RIGHT
+0316;A # COMBINING GRAVE ACCENT BELOW
+0317;A # COMBINING ACUTE ACCENT BELOW
+0318;A # COMBINING LEFT TACK BELOW
+0319;A # COMBINING RIGHT TACK BELOW
+031A;A # COMBINING LEFT ANGLE ABOVE
+031B;A # COMBINING HORN
+031C;A # COMBINING LEFT HALF RING BELOW
+031D;A # COMBINING UP TACK BELOW
+031E;A # COMBINING DOWN TACK BELOW
+031F;A # COMBINING PLUS SIGN BELOW
+0320;A # COMBINING MINUS SIGN BELOW
+0321;A # COMBINING PALATALIZED HOOK BELOW
+0322;A # COMBINING RETROFLEX HOOK BELOW
+0323;A # COMBINING DOT BELOW
+0324;A # COMBINING DIAERESIS BELOW
+0325;A # COMBINING RING BELOW
+0326;A # COMBINING COMMA BELOW
+0327;A # COMBINING CEDILLA
+0328;A # COMBINING OGONEK
+0329;A # COMBINING VERTICAL LINE BELOW
+032A;A # COMBINING BRIDGE BELOW
+032B;A # COMBINING INVERTED DOUBLE ARCH BELOW
+032C;A # COMBINING CARON BELOW
+032D;A # COMBINING CIRCUMFLEX ACCENT BELOW
+032E;A # COMBINING BREVE BELOW
+032F;A # COMBINING INVERTED BREVE BELOW
+0330;A # COMBINING TILDE BELOW
+0331;A # COMBINING MACRON BELOW
+0332;A # COMBINING LOW LINE
+0333;A # COMBINING DOUBLE LOW LINE
+0334;A # COMBINING TILDE OVERLAY
+0335;A # COMBINING SHORT STROKE OVERLAY
+0336;A # COMBINING LONG STROKE OVERLAY
+0337;A # COMBINING SHORT SOLIDUS OVERLAY
+0338;A # COMBINING LONG SOLIDUS OVERLAY
+0339;A # COMBINING RIGHT HALF RING BELOW
+033A;A # COMBINING INVERTED BRIDGE BELOW
+033B;A # COMBINING SQUARE BELOW
+033C;A # COMBINING SEAGULL BELOW
+033D;A # COMBINING X ABOVE
+033E;A # COMBINING VERTICAL TILDE
+033F;A # COMBINING DOUBLE OVERLINE
+0340;A # COMBINING GRAVE TONE MARK
+0341;A # COMBINING ACUTE TONE MARK
+0342;A # COMBINING GREEK PERISPOMENI
+0343;A # COMBINING GREEK KORONIS
+0344;A # COMBINING GREEK DIALYTIKA TONOS
+0345;A # COMBINING GREEK YPOGEGRAMMENI
+0346;A # COMBINING BRIDGE ABOVE
+0347;A # COMBINING EQUALS SIGN BELOW
+0348;A # COMBINING DOUBLE VERTICAL LINE BELOW
+0349;A # COMBINING LEFT ANGLE BELOW
+034A;A # COMBINING NOT TILDE ABOVE
+034B;A # COMBINING HOMOTHETIC ABOVE
+034C;A # COMBINING ALMOST EQUAL TO ABOVE
+034D;A # COMBINING LEFT RIGHT ARROW BELOW
+034E;A # COMBINING UPWARDS ARROW BELOW
+034F;A # COMBINING GRAPHEME JOINER
+0350;A # COMBINING RIGHT ARROWHEAD ABOVE
+0351;A # COMBINING LEFT HALF RING ABOVE
+0352;A # COMBINING FERMATA
+0353;A # COMBINING X BELOW
+0354;A # COMBINING LEFT ARROWHEAD BELOW
+0355;A # COMBINING RIGHT ARROWHEAD BELOW
+0356;A # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0357;A # COMBINING RIGHT HALF RING ABOVE
+0358;A # COMBINING DOT ABOVE RIGHT
+0359;A # COMBINING ASTERISK BELOW
+035A;A # COMBINING DOUBLE RING BELOW
+035B;A # COMBINING ZIGZAG ABOVE
+035C;A # COMBINING DOUBLE BREVE BELOW
+035D;A # COMBINING DOUBLE BREVE
+035E;A # COMBINING DOUBLE MACRON
+035F;A # COMBINING DOUBLE MACRON BELOW
+0360;A # COMBINING DOUBLE TILDE
+0361;A # COMBINING DOUBLE INVERTED BREVE
+0362;A # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363;A # COMBINING LATIN SMALL LETTER A
+0364;A # COMBINING LATIN SMALL LETTER E
+0365;A # COMBINING LATIN SMALL LETTER I
+0366;A # COMBINING LATIN SMALL LETTER O
+0367;A # COMBINING LATIN SMALL LETTER U
+0368;A # COMBINING LATIN SMALL LETTER C
+0369;A # COMBINING LATIN SMALL LETTER D
+036A;A # COMBINING LATIN SMALL LETTER H
+036B;A # COMBINING LATIN SMALL LETTER M
+036C;A # COMBINING LATIN SMALL LETTER R
+036D;A # COMBINING LATIN SMALL LETTER T
+036E;A # COMBINING LATIN SMALL LETTER V
+036F;A # COMBINING LATIN SMALL LETTER X
+0374;N # GREEK NUMERAL SIGN
+0375;N # GREEK LOWER NUMERAL SIGN
+037A;N # GREEK YPOGEGRAMMENI
+037E;N # GREEK QUESTION MARK
+0384;N # GREEK TONOS
+0385;N # GREEK DIALYTIKA TONOS
+0386;N # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;N # GREEK ANO TELEIA
+0388;N # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389;N # GREEK CAPITAL LETTER ETA WITH TONOS
+038A;N # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;N # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E;N # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F;N # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391;A # GREEK CAPITAL LETTER ALPHA
+0392;A # GREEK CAPITAL LETTER BETA
+0393;A # GREEK CAPITAL LETTER GAMMA
+0394;A # GREEK CAPITAL LETTER DELTA
+0395;A # GREEK CAPITAL LETTER EPSILON
+0396;A # GREEK CAPITAL LETTER ZETA
+0397;A # GREEK CAPITAL LETTER ETA
+0398;A # GREEK CAPITAL LETTER THETA
+0399;A # GREEK CAPITAL LETTER IOTA
+039A;A # GREEK CAPITAL LETTER KAPPA
+039B;A # GREEK CAPITAL LETTER LAMDA
+039C;A # GREEK CAPITAL LETTER MU
+039D;A # GREEK CAPITAL LETTER NU
+039E;A # GREEK CAPITAL LETTER XI
+039F;A # GREEK CAPITAL LETTER OMICRON
+03A0;A # GREEK CAPITAL LETTER PI
+03A1;A # GREEK CAPITAL LETTER RHO
+03A3;A # GREEK CAPITAL LETTER SIGMA
+03A4;A # GREEK CAPITAL LETTER TAU
+03A5;A # GREEK CAPITAL LETTER UPSILON
+03A6;A # GREEK CAPITAL LETTER PHI
+03A7;A # GREEK CAPITAL LETTER CHI
+03A8;A # GREEK CAPITAL LETTER PSI
+03A9;A # GREEK CAPITAL LETTER OMEGA
+03AA;N # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB;N # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC;N # GREEK SMALL LETTER ALPHA WITH TONOS
+03AD;N # GREEK SMALL LETTER EPSILON WITH TONOS
+03AE;N # GREEK SMALL LETTER ETA WITH TONOS
+03AF;N # GREEK SMALL LETTER IOTA WITH TONOS
+03B0;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1;A # GREEK SMALL LETTER ALPHA
+03B2;A # GREEK SMALL LETTER BETA
+03B3;A # GREEK SMALL LETTER GAMMA
+03B4;A # GREEK SMALL LETTER DELTA
+03B5;A # GREEK SMALL LETTER EPSILON
+03B6;A # GREEK SMALL LETTER ZETA
+03B7;A # GREEK SMALL LETTER ETA
+03B8;A # GREEK SMALL LETTER THETA
+03B9;A # GREEK SMALL LETTER IOTA
+03BA;A # GREEK SMALL LETTER KAPPA
+03BB;A # GREEK SMALL LETTER LAMDA
+03BC;A # GREEK SMALL LETTER MU
+03BD;A # GREEK SMALL LETTER NU
+03BE;A # GREEK SMALL LETTER XI
+03BF;A # GREEK SMALL LETTER OMICRON
+03C0;A # GREEK SMALL LETTER PI
+03C1;A # GREEK SMALL LETTER RHO
+03C2;N # GREEK SMALL LETTER FINAL SIGMA
+03C3;A # GREEK SMALL LETTER SIGMA
+03C4;A # GREEK SMALL LETTER TAU
+03C5;A # GREEK SMALL LETTER UPSILON
+03C6;A # GREEK SMALL LETTER PHI
+03C7;A # GREEK SMALL LETTER CHI
+03C8;A # GREEK SMALL LETTER PSI
+03C9;A # GREEK SMALL LETTER OMEGA
+03CA;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC;N # GREEK SMALL LETTER OMICRON WITH TONOS
+03CD;N # GREEK SMALL LETTER UPSILON WITH TONOS
+03CE;N # GREEK SMALL LETTER OMEGA WITH TONOS
+03D0;N # GREEK BETA SYMBOL
+03D1;N # GREEK THETA SYMBOL
+03D2;N # GREEK UPSILON WITH HOOK SYMBOL
+03D3;N # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4;N # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5;N # GREEK PHI SYMBOL
+03D6;N # GREEK PI SYMBOL
+03D7;N # GREEK KAI SYMBOL
+03D8;N # GREEK LETTER ARCHAIC KOPPA
+03D9;N # GREEK SMALL LETTER ARCHAIC KOPPA
+03DA;N # GREEK LETTER STIGMA
+03DB;N # GREEK SMALL LETTER STIGMA
+03DC;N # GREEK LETTER DIGAMMA
+03DD;N # GREEK SMALL LETTER DIGAMMA
+03DE;N # GREEK LETTER KOPPA
+03DF;N # GREEK SMALL LETTER KOPPA
+03E0;N # GREEK LETTER SAMPI
+03E1;N # GREEK SMALL LETTER SAMPI
+03E2;N # COPTIC CAPITAL LETTER SHEI
+03E3;N # COPTIC SMALL LETTER SHEI
+03E4;N # COPTIC CAPITAL LETTER FEI
+03E5;N # COPTIC SMALL LETTER FEI
+03E6;N # COPTIC CAPITAL LETTER KHEI
+03E7;N # COPTIC SMALL LETTER KHEI
+03E8;N # COPTIC CAPITAL LETTER HORI
+03E9;N # COPTIC SMALL LETTER HORI
+03EA;N # COPTIC CAPITAL LETTER GANGIA
+03EB;N # COPTIC SMALL LETTER GANGIA
+03EC;N # COPTIC CAPITAL LETTER SHIMA
+03ED;N # COPTIC SMALL LETTER SHIMA
+03EE;N # COPTIC CAPITAL LETTER DEI
+03EF;N # COPTIC SMALL LETTER DEI
+03F0;N # GREEK KAPPA SYMBOL
+03F1;N # GREEK RHO SYMBOL
+03F2;N # GREEK LUNATE SIGMA SYMBOL
+03F3;N # GREEK LETTER YOT
+03F4;N # GREEK CAPITAL THETA SYMBOL
+03F5;N # GREEK LUNATE EPSILON SYMBOL
+03F6;N # GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7;N # GREEK CAPITAL LETTER SHO
+03F8;N # GREEK SMALL LETTER SHO
+03F9;N # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA;N # GREEK CAPITAL LETTER SAN
+03FB;N # GREEK SMALL LETTER SAN
+03FC;N # GREEK RHO WITH STROKE SYMBOL
+03FD;N # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE;N # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF;N # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400;N # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401;A # CYRILLIC CAPITAL LETTER IO
+0402;N # CYRILLIC CAPITAL LETTER DJE
+0403;N # CYRILLIC CAPITAL LETTER GJE
+0404;N # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405;N # CYRILLIC CAPITAL LETTER DZE
+0406;N # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407;N # CYRILLIC CAPITAL LETTER YI
+0408;N # CYRILLIC CAPITAL LETTER JE
+0409;N # CYRILLIC CAPITAL LETTER LJE
+040A;N # CYRILLIC CAPITAL LETTER NJE
+040B;N # CYRILLIC CAPITAL LETTER TSHE
+040C;N # CYRILLIC CAPITAL LETTER KJE
+040D;N # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E;N # CYRILLIC CAPITAL LETTER SHORT U
+040F;N # CYRILLIC CAPITAL LETTER DZHE
+0410;A # CYRILLIC CAPITAL LETTER A
+0411;A # CYRILLIC CAPITAL LETTER BE
+0412;A # CYRILLIC CAPITAL LETTER VE
+0413;A # CYRILLIC CAPITAL LETTER GHE
+0414;A # CYRILLIC CAPITAL LETTER DE
+0415;A # CYRILLIC CAPITAL LETTER IE
+0416;A # CYRILLIC CAPITAL LETTER ZHE
+0417;A # CYRILLIC CAPITAL LETTER ZE
+0418;A # CYRILLIC CAPITAL LETTER I
+0419;A # CYRILLIC CAPITAL LETTER SHORT I
+041A;A # CYRILLIC CAPITAL LETTER KA
+041B;A # CYRILLIC CAPITAL LETTER EL
+041C;A # CYRILLIC CAPITAL LETTER EM
+041D;A # CYRILLIC CAPITAL LETTER EN
+041E;A # CYRILLIC CAPITAL LETTER O
+041F;A # CYRILLIC CAPITAL LETTER PE
+0420;A # CYRILLIC CAPITAL LETTER ER
+0421;A # CYRILLIC CAPITAL LETTER ES
+0422;A # CYRILLIC CAPITAL LETTER TE
+0423;A # CYRILLIC CAPITAL LETTER U
+0424;A # CYRILLIC CAPITAL LETTER EF
+0425;A # CYRILLIC CAPITAL LETTER HA
+0426;A # CYRILLIC CAPITAL LETTER TSE
+0427;A # CYRILLIC CAPITAL LETTER CHE
+0428;A # CYRILLIC CAPITAL LETTER SHA
+0429;A # CYRILLIC CAPITAL LETTER SHCHA
+042A;A # CYRILLIC CAPITAL LETTER HARD SIGN
+042B;A # CYRILLIC CAPITAL LETTER YERU
+042C;A # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D;A # CYRILLIC CAPITAL LETTER E
+042E;A # CYRILLIC CAPITAL LETTER YU
+042F;A # CYRILLIC CAPITAL LETTER YA
+0430;A # CYRILLIC SMALL LETTER A
+0431;A # CYRILLIC SMALL LETTER BE
+0432;A # CYRILLIC SMALL LETTER VE
+0433;A # CYRILLIC SMALL LETTER GHE
+0434;A # CYRILLIC SMALL LETTER DE
+0435;A # CYRILLIC SMALL LETTER IE
+0436;A # CYRILLIC SMALL LETTER ZHE
+0437;A # CYRILLIC SMALL LETTER ZE
+0438;A # CYRILLIC SMALL LETTER I
+0439;A # CYRILLIC SMALL LETTER SHORT I
+043A;A # CYRILLIC SMALL LETTER KA
+043B;A # CYRILLIC SMALL LETTER EL
+043C;A # CYRILLIC SMALL LETTER EM
+043D;A # CYRILLIC SMALL LETTER EN
+043E;A # CYRILLIC SMALL LETTER O
+043F;A # CYRILLIC SMALL LETTER PE
+0440;A # CYRILLIC SMALL LETTER ER
+0441;A # CYRILLIC SMALL LETTER ES
+0442;A # CYRILLIC SMALL LETTER TE
+0443;A # CYRILLIC SMALL LETTER U
+0444;A # CYRILLIC SMALL LETTER EF
+0445;A # CYRILLIC SMALL LETTER HA
+0446;A # CYRILLIC SMALL LETTER TSE
+0447;A # CYRILLIC SMALL LETTER CHE
+0448;A # CYRILLIC SMALL LETTER SHA
+0449;A # CYRILLIC SMALL LETTER SHCHA
+044A;A # CYRILLIC SMALL LETTER HARD SIGN
+044B;A # CYRILLIC SMALL LETTER YERU
+044C;A # CYRILLIC SMALL LETTER SOFT SIGN
+044D;A # CYRILLIC SMALL LETTER E
+044E;A # CYRILLIC SMALL LETTER YU
+044F;A # CYRILLIC SMALL LETTER YA
+0450;N # CYRILLIC SMALL LETTER IE WITH GRAVE
+0451;A # CYRILLIC SMALL LETTER IO
+0452;N # CYRILLIC SMALL LETTER DJE
+0453;N # CYRILLIC SMALL LETTER GJE
+0454;N # CYRILLIC SMALL LETTER UKRAINIAN IE
+0455;N # CYRILLIC SMALL LETTER DZE
+0456;N # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457;N # CYRILLIC SMALL LETTER YI
+0458;N # CYRILLIC SMALL LETTER JE
+0459;N # CYRILLIC SMALL LETTER LJE
+045A;N # CYRILLIC SMALL LETTER NJE
+045B;N # CYRILLIC SMALL LETTER TSHE
+045C;N # CYRILLIC SMALL LETTER KJE
+045D;N # CYRILLIC SMALL LETTER I WITH GRAVE
+045E;N # CYRILLIC SMALL LETTER SHORT U
+045F;N # CYRILLIC SMALL LETTER DZHE
+0460;N # CYRILLIC CAPITAL LETTER OMEGA
+0461;N # CYRILLIC SMALL LETTER OMEGA
+0462;N # CYRILLIC CAPITAL LETTER YAT
+0463;N # CYRILLIC SMALL LETTER YAT
+0464;N # CYRILLIC CAPITAL LETTER IOTIFIED E
+0465;N # CYRILLIC SMALL LETTER IOTIFIED E
+0466;N # CYRILLIC CAPITAL LETTER LITTLE YUS
+0467;N # CYRILLIC SMALL LETTER LITTLE YUS
+0468;N # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469;N # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A;N # CYRILLIC CAPITAL LETTER BIG YUS
+046B;N # CYRILLIC SMALL LETTER BIG YUS
+046C;N # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D;N # CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E;N # CYRILLIC CAPITAL LETTER KSI
+046F;N # CYRILLIC SMALL LETTER KSI
+0470;N # CYRILLIC CAPITAL LETTER PSI
+0471;N # CYRILLIC SMALL LETTER PSI
+0472;N # CYRILLIC CAPITAL LETTER FITA
+0473;N # CYRILLIC SMALL LETTER FITA
+0474;N # CYRILLIC CAPITAL LETTER IZHITSA
+0475;N # CYRILLIC SMALL LETTER IZHITSA
+0476;N # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477;N # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478;N # CYRILLIC CAPITAL LETTER UK
+0479;N # CYRILLIC SMALL LETTER UK
+047A;N # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B;N # CYRILLIC SMALL LETTER ROUND OMEGA
+047C;N # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D;N # CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E;N # CYRILLIC CAPITAL LETTER OT
+047F;N # CYRILLIC SMALL LETTER OT
+0480;N # CYRILLIC CAPITAL LETTER KOPPA
+0481;N # CYRILLIC SMALL LETTER KOPPA
+0482;N # CYRILLIC THOUSANDS SIGN
+0483;N # COMBINING CYRILLIC TITLO
+0484;N # COMBINING CYRILLIC PALATALIZATION
+0485;N # COMBINING CYRILLIC DASIA PNEUMATA
+0486;N # COMBINING CYRILLIC PSILI PNEUMATA
+0488;N # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489;N # COMBINING CYRILLIC MILLIONS SIGN
+048A;N # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B;N # CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C;N # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D;N # CYRILLIC SMALL LETTER SEMISOFT SIGN
+048E;N # CYRILLIC CAPITAL LETTER ER WITH TICK
+048F;N # CYRILLIC SMALL LETTER ER WITH TICK
+0490;N # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491;N # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0492;N # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493;N # CYRILLIC SMALL LETTER GHE WITH STROKE
+0494;N # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495;N # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0496;N # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497;N # CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0498;N # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499;N # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049A;N # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B;N # CYRILLIC SMALL LETTER KA WITH DESCENDER
+049C;N # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D;N # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049E;N # CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F;N # CYRILLIC SMALL LETTER KA WITH STROKE
+04A0;N # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1;N # CYRILLIC SMALL LETTER BASHKIR KA
+04A2;N # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3;N # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A4;N # CYRILLIC CAPITAL LIGATURE EN GHE
+04A5;N # CYRILLIC SMALL LIGATURE EN GHE
+04A6;N # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A7;N # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A8;N # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9;N # CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA;N # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB;N # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AC;N # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD;N # CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AE;N # CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF;N # CYRILLIC SMALL LETTER STRAIGHT U
+04B0;N # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1;N # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B2;N # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3;N # CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B4;N # CYRILLIC CAPITAL LIGATURE TE TSE
+04B5;N # CYRILLIC SMALL LIGATURE TE TSE
+04B6;N # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7;N # CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B8;N # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9;N # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BA;N # CYRILLIC CAPITAL LETTER SHHA
+04BB;N # CYRILLIC SMALL LETTER SHHA
+04BC;N # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD;N # CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE;N # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF;N # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0;N # CYRILLIC LETTER PALOCHKA
+04C1;N # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2;N # CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C3;N # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4;N # CYRILLIC SMALL LETTER KA WITH HOOK
+04C5;N # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6;N # CYRILLIC SMALL LETTER EL WITH TAIL
+04C7;N # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8;N # CYRILLIC SMALL LETTER EN WITH HOOK
+04C9;N # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA;N # CYRILLIC SMALL LETTER EN WITH TAIL
+04CB;N # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC;N # CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD;N # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE;N # CYRILLIC SMALL LETTER EM WITH TAIL
+04D0;N # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1;N # CYRILLIC SMALL LETTER A WITH BREVE
+04D2;N # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3;N # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D4;N # CYRILLIC CAPITAL LIGATURE A IE
+04D5;N # CYRILLIC SMALL LIGATURE A IE
+04D6;N # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7;N # CYRILLIC SMALL LETTER IE WITH BREVE
+04D8;N # CYRILLIC CAPITAL LETTER SCHWA
+04D9;N # CYRILLIC SMALL LETTER SCHWA
+04DA;N # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB;N # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC;N # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD;N # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE;N # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF;N # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E0;N # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1;N # CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E2;N # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3;N # CYRILLIC SMALL LETTER I WITH MACRON
+04E4;N # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5;N # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6;N # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7;N # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E8;N # CYRILLIC CAPITAL LETTER BARRED O
+04E9;N # CYRILLIC SMALL LETTER BARRED O
+04EA;N # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB;N # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC;N # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED;N # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE;N # CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF;N # CYRILLIC SMALL LETTER U WITH MACRON
+04F0;N # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1;N # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2;N # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3;N # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4;N # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5;N # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6;N # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7;N # CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8;N # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9;N # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500;N # CYRILLIC CAPITAL LETTER KOMI DE
+0501;N # CYRILLIC SMALL LETTER KOMI DE
+0502;N # CYRILLIC CAPITAL LETTER KOMI DJE
+0503;N # CYRILLIC SMALL LETTER KOMI DJE
+0504;N # CYRILLIC CAPITAL LETTER KOMI ZJE
+0505;N # CYRILLIC SMALL LETTER KOMI ZJE
+0506;N # CYRILLIC CAPITAL LETTER KOMI DZJE
+0507;N # CYRILLIC SMALL LETTER KOMI DZJE
+0508;N # CYRILLIC CAPITAL LETTER KOMI LJE
+0509;N # CYRILLIC SMALL LETTER KOMI LJE
+050A;N # CYRILLIC CAPITAL LETTER KOMI NJE
+050B;N # CYRILLIC SMALL LETTER KOMI NJE
+050C;N # CYRILLIC CAPITAL LETTER KOMI SJE
+050D;N # CYRILLIC SMALL LETTER KOMI SJE
+050E;N # CYRILLIC CAPITAL LETTER KOMI TJE
+050F;N # CYRILLIC SMALL LETTER KOMI TJE
+0531;N # ARMENIAN CAPITAL LETTER AYB
+0532;N # ARMENIAN CAPITAL LETTER BEN
+0533;N # ARMENIAN CAPITAL LETTER GIM
+0534;N # ARMENIAN CAPITAL LETTER DA
+0535;N # ARMENIAN CAPITAL LETTER ECH
+0536;N # ARMENIAN CAPITAL LETTER ZA
+0537;N # ARMENIAN CAPITAL LETTER EH
+0538;N # ARMENIAN CAPITAL LETTER ET
+0539;N # ARMENIAN CAPITAL LETTER TO
+053A;N # ARMENIAN CAPITAL LETTER ZHE
+053B;N # ARMENIAN CAPITAL LETTER INI
+053C;N # ARMENIAN CAPITAL LETTER LIWN
+053D;N # ARMENIAN CAPITAL LETTER XEH
+053E;N # ARMENIAN CAPITAL LETTER CA
+053F;N # ARMENIAN CAPITAL LETTER KEN
+0540;N # ARMENIAN CAPITAL LETTER HO
+0541;N # ARMENIAN CAPITAL LETTER JA
+0542;N # ARMENIAN CAPITAL LETTER GHAD
+0543;N # ARMENIAN CAPITAL LETTER CHEH
+0544;N # ARMENIAN CAPITAL LETTER MEN
+0545;N # ARMENIAN CAPITAL LETTER YI
+0546;N # ARMENIAN CAPITAL LETTER NOW
+0547;N # ARMENIAN CAPITAL LETTER SHA
+0548;N # ARMENIAN CAPITAL LETTER VO
+0549;N # ARMENIAN CAPITAL LETTER CHA
+054A;N # ARMENIAN CAPITAL LETTER PEH
+054B;N # ARMENIAN CAPITAL LETTER JHEH
+054C;N # ARMENIAN CAPITAL LETTER RA
+054D;N # ARMENIAN CAPITAL LETTER SEH
+054E;N # ARMENIAN CAPITAL LETTER VEW
+054F;N # ARMENIAN CAPITAL LETTER TIWN
+0550;N # ARMENIAN CAPITAL LETTER REH
+0551;N # ARMENIAN CAPITAL LETTER CO
+0552;N # ARMENIAN CAPITAL LETTER YIWN
+0553;N # ARMENIAN CAPITAL LETTER PIWR
+0554;N # ARMENIAN CAPITAL LETTER KEH
+0555;N # ARMENIAN CAPITAL LETTER OH
+0556;N # ARMENIAN CAPITAL LETTER FEH
+0559;N # ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A;N # ARMENIAN APOSTROPHE
+055B;N # ARMENIAN EMPHASIS MARK
+055C;N # ARMENIAN EXCLAMATION MARK
+055D;N # ARMENIAN COMMA
+055E;N # ARMENIAN QUESTION MARK
+055F;N # ARMENIAN ABBREVIATION MARK
+0561;N # ARMENIAN SMALL LETTER AYB
+0562;N # ARMENIAN SMALL LETTER BEN
+0563;N # ARMENIAN SMALL LETTER GIM
+0564;N # ARMENIAN SMALL LETTER DA
+0565;N # ARMENIAN SMALL LETTER ECH
+0566;N # ARMENIAN SMALL LETTER ZA
+0567;N # ARMENIAN SMALL LETTER EH
+0568;N # ARMENIAN SMALL LETTER ET
+0569;N # ARMENIAN SMALL LETTER TO
+056A;N # ARMENIAN SMALL LETTER ZHE
+056B;N # ARMENIAN SMALL LETTER INI
+056C;N # ARMENIAN SMALL LETTER LIWN
+056D;N # ARMENIAN SMALL LETTER XEH
+056E;N # ARMENIAN SMALL LETTER CA
+056F;N # ARMENIAN SMALL LETTER KEN
+0570;N # ARMENIAN SMALL LETTER HO
+0571;N # ARMENIAN SMALL LETTER JA
+0572;N # ARMENIAN SMALL LETTER GHAD
+0573;N # ARMENIAN SMALL LETTER CHEH
+0574;N # ARMENIAN SMALL LETTER MEN
+0575;N # ARMENIAN SMALL LETTER YI
+0576;N # ARMENIAN SMALL LETTER NOW
+0577;N # ARMENIAN SMALL LETTER SHA
+0578;N # ARMENIAN SMALL LETTER VO
+0579;N # ARMENIAN SMALL LETTER CHA
+057A;N # ARMENIAN SMALL LETTER PEH
+057B;N # ARMENIAN SMALL LETTER JHEH
+057C;N # ARMENIAN SMALL LETTER RA
+057D;N # ARMENIAN SMALL LETTER SEH
+057E;N # ARMENIAN SMALL LETTER VEW
+057F;N # ARMENIAN SMALL LETTER TIWN
+0580;N # ARMENIAN SMALL LETTER REH
+0581;N # ARMENIAN SMALL LETTER CO
+0582;N # ARMENIAN SMALL LETTER YIWN
+0583;N # ARMENIAN SMALL LETTER PIWR
+0584;N # ARMENIAN SMALL LETTER KEH
+0585;N # ARMENIAN SMALL LETTER OH
+0586;N # ARMENIAN SMALL LETTER FEH
+0587;N # ARMENIAN SMALL LIGATURE ECH YIWN
+0589;N # ARMENIAN FULL STOP
+058A;N # ARMENIAN HYPHEN
+0591;N # HEBREW ACCENT ETNAHTA
+0592;N # HEBREW ACCENT SEGOL
+0593;N # HEBREW ACCENT SHALSHELET
+0594;N # HEBREW ACCENT ZAQEF QATAN
+0595;N # HEBREW ACCENT ZAQEF GADOL
+0596;N # HEBREW ACCENT TIPEHA
+0597;N # HEBREW ACCENT REVIA
+0598;N # HEBREW ACCENT ZARQA
+0599;N # HEBREW ACCENT PASHTA
+059A;N # HEBREW ACCENT YETIV
+059B;N # HEBREW ACCENT TEVIR
+059C;N # HEBREW ACCENT GERESH
+059D;N # HEBREW ACCENT GERESH MUQDAM
+059E;N # HEBREW ACCENT GERSHAYIM
+059F;N # HEBREW ACCENT QARNEY PARA
+05A0;N # HEBREW ACCENT TELISHA GEDOLA
+05A1;N # HEBREW ACCENT PAZER
+05A2;N # HEBREW ACCENT ATNAH HAFUKH
+05A3;N # HEBREW ACCENT MUNAH
+05A4;N # HEBREW ACCENT MAHAPAKH
+05A5;N # HEBREW ACCENT MERKHA
+05A6;N # HEBREW ACCENT MERKHA KEFULA
+05A7;N # HEBREW ACCENT DARGA
+05A8;N # HEBREW ACCENT QADMA
+05A9;N # HEBREW ACCENT TELISHA QETANA
+05AA;N # HEBREW ACCENT YERAH BEN YOMO
+05AB;N # HEBREW ACCENT OLE
+05AC;N # HEBREW ACCENT ILUY
+05AD;N # HEBREW ACCENT DEHI
+05AE;N # HEBREW ACCENT ZINOR
+05AF;N # HEBREW MARK MASORA CIRCLE
+05B0;N # HEBREW POINT SHEVA
+05B1;N # HEBREW POINT HATAF SEGOL
+05B2;N # HEBREW POINT HATAF PATAH
+05B3;N # HEBREW POINT HATAF QAMATS
+05B4;N # HEBREW POINT HIRIQ
+05B5;N # HEBREW POINT TSERE
+05B6;N # HEBREW POINT SEGOL
+05B7;N # HEBREW POINT PATAH
+05B8;N # HEBREW POINT QAMATS
+05B9;N # HEBREW POINT HOLAM
+05BB;N # HEBREW POINT QUBUTS
+05BC;N # HEBREW POINT DAGESH OR MAPIQ
+05BD;N # HEBREW POINT METEG
+05BE;N # HEBREW PUNCTUATION MAQAF
+05BF;N # HEBREW POINT RAFE
+05C0;N # HEBREW PUNCTUATION PASEQ
+05C1;N # HEBREW POINT SHIN DOT
+05C2;N # HEBREW POINT SIN DOT
+05C3;N # HEBREW PUNCTUATION SOF PASUQ
+05C4;N # HEBREW MARK UPPER DOT
+05C5;N # HEBREW MARK LOWER DOT
+05C6;N # HEBREW PUNCTUATION NUN HAFUKHA
+05C7;N # HEBREW POINT QAMATS QATAN
+05D0;N # HEBREW LETTER ALEF
+05D1;N # HEBREW LETTER BET
+05D2;N # HEBREW LETTER GIMEL
+05D3;N # HEBREW LETTER DALET
+05D4;N # HEBREW LETTER HE
+05D5;N # HEBREW LETTER VAV
+05D6;N # HEBREW LETTER ZAYIN
+05D7;N # HEBREW LETTER HET
+05D8;N # HEBREW LETTER TET
+05D9;N # HEBREW LETTER YOD
+05DA;N # HEBREW LETTER FINAL KAF
+05DB;N # HEBREW LETTER KAF
+05DC;N # HEBREW LETTER LAMED
+05DD;N # HEBREW LETTER FINAL MEM
+05DE;N # HEBREW LETTER MEM
+05DF;N # HEBREW LETTER FINAL NUN
+05E0;N # HEBREW LETTER NUN
+05E1;N # HEBREW LETTER SAMEKH
+05E2;N # HEBREW LETTER AYIN
+05E3;N # HEBREW LETTER FINAL PE
+05E4;N # HEBREW LETTER PE
+05E5;N # HEBREW LETTER FINAL TSADI
+05E6;N # HEBREW LETTER TSADI
+05E7;N # HEBREW LETTER QOF
+05E8;N # HEBREW LETTER RESH
+05E9;N # HEBREW LETTER SHIN
+05EA;N # HEBREW LETTER TAV
+05F0;N # HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1;N # HEBREW LIGATURE YIDDISH VAV YOD
+05F2;N # HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3;N # HEBREW PUNCTUATION GERESH
+05F4;N # HEBREW PUNCTUATION GERSHAYIM
+0600;N # ARABIC NUMBER SIGN
+0601;N # ARABIC SIGN SANAH
+0602;N # ARABIC FOOTNOTE MARKER
+0603;N # ARABIC SIGN SAFHA
+060B;N # AFGHANI SIGN
+060C;N # ARABIC COMMA
+060D;N # ARABIC DATE SEPARATOR
+060E;N # ARABIC POETIC VERSE SIGN
+060F;N # ARABIC SIGN MISRA
+0610;N # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+0611;N # ARABIC SIGN ALAYHE ASSALLAM
+0612;N # ARABIC SIGN RAHMATULLAH ALAYHE
+0613;N # ARABIC SIGN RADI ALLAHOU ANHU
+0614;N # ARABIC SIGN TAKHALLUS
+0615;N # ARABIC SMALL HIGH TAH
+061B;N # ARABIC SEMICOLON
+061E;N # ARABIC TRIPLE DOT PUNCTUATION MARK
+061F;N # ARABIC QUESTION MARK
+0621;N # ARABIC LETTER HAMZA
+0622;N # ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;N # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;N # ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;N # ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;N # ARABIC LETTER YEH WITH HAMZA ABOVE
+0627;N # ARABIC LETTER ALEF
+0628;N # ARABIC LETTER BEH
+0629;N # ARABIC LETTER TEH MARBUTA
+062A;N # ARABIC LETTER TEH
+062B;N # ARABIC LETTER THEH
+062C;N # ARABIC LETTER JEEM
+062D;N # ARABIC LETTER HAH
+062E;N # ARABIC LETTER KHAH
+062F;N # ARABIC LETTER DAL
+0630;N # ARABIC LETTER THAL
+0631;N # ARABIC LETTER REH
+0632;N # ARABIC LETTER ZAIN
+0633;N # ARABIC LETTER SEEN
+0634;N # ARABIC LETTER SHEEN
+0635;N # ARABIC LETTER SAD
+0636;N # ARABIC LETTER DAD
+0637;N # ARABIC LETTER TAH
+0638;N # ARABIC LETTER ZAH
+0639;N # ARABIC LETTER AIN
+063A;N # ARABIC LETTER GHAIN
+0640;N # ARABIC TATWEEL
+0641;N # ARABIC LETTER FEH
+0642;N # ARABIC LETTER QAF
+0643;N # ARABIC LETTER KAF
+0644;N # ARABIC LETTER LAM
+0645;N # ARABIC LETTER MEEM
+0646;N # ARABIC LETTER NOON
+0647;N # ARABIC LETTER HEH
+0648;N # ARABIC LETTER WAW
+0649;N # ARABIC LETTER ALEF MAKSURA
+064A;N # ARABIC LETTER YEH
+064B;N # ARABIC FATHATAN
+064C;N # ARABIC DAMMATAN
+064D;N # ARABIC KASRATAN
+064E;N # ARABIC FATHA
+064F;N # ARABIC DAMMA
+0650;N # ARABIC KASRA
+0651;N # ARABIC SHADDA
+0652;N # ARABIC SUKUN
+0653;N # ARABIC MADDAH ABOVE
+0654;N # ARABIC HAMZA ABOVE
+0655;N # ARABIC HAMZA BELOW
+0656;N # ARABIC SUBSCRIPT ALEF
+0657;N # ARABIC INVERTED DAMMA
+0658;N # ARABIC MARK NOON GHUNNA
+0659;N # ARABIC ZWARAKAY
+065A;N # ARABIC VOWEL SIGN SMALL V ABOVE
+065B;N # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C;N # ARABIC VOWEL SIGN DOT BELOW
+065D;N # ARABIC REVERSED DAMMA
+065E;N # ARABIC FATHA WITH TWO DOTS
+0660;N # ARABIC-INDIC DIGIT ZERO
+0661;N # ARABIC-INDIC DIGIT ONE
+0662;N # ARABIC-INDIC DIGIT TWO
+0663;N # ARABIC-INDIC DIGIT THREE
+0664;N # ARABIC-INDIC DIGIT FOUR
+0665;N # ARABIC-INDIC DIGIT FIVE
+0666;N # ARABIC-INDIC DIGIT SIX
+0667;N # ARABIC-INDIC DIGIT SEVEN
+0668;N # ARABIC-INDIC DIGIT EIGHT
+0669;N # ARABIC-INDIC DIGIT NINE
+066A;N # ARABIC PERCENT SIGN
+066B;N # ARABIC DECIMAL SEPARATOR
+066C;N # ARABIC THOUSANDS SEPARATOR
+066D;N # ARABIC FIVE POINTED STAR
+066E;N # ARABIC LETTER DOTLESS BEH
+066F;N # ARABIC LETTER DOTLESS QAF
+0670;N # ARABIC LETTER SUPERSCRIPT ALEF
+0671;N # ARABIC LETTER ALEF WASLA
+0672;N # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0673;N # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0674;N # ARABIC LETTER HIGH HAMZA
+0675;N # ARABIC LETTER HIGH HAMZA ALEF
+0676;N # ARABIC LETTER HIGH HAMZA WAW
+0677;N # ARABIC LETTER U WITH HAMZA ABOVE
+0678;N # ARABIC LETTER HIGH HAMZA YEH
+0679;N # ARABIC LETTER TTEH
+067A;N # ARABIC LETTER TTEHEH
+067B;N # ARABIC LETTER BEEH
+067C;N # ARABIC LETTER TEH WITH RING
+067D;N # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067E;N # ARABIC LETTER PEH
+067F;N # ARABIC LETTER TEHEH
+0680;N # ARABIC LETTER BEHEH
+0681;N # ARABIC LETTER HAH WITH HAMZA ABOVE
+0682;N # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0683;N # ARABIC LETTER NYEH
+0684;N # ARABIC LETTER DYEH
+0685;N # ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0686;N # ARABIC LETTER TCHEH
+0687;N # ARABIC LETTER TCHEHEH
+0688;N # ARABIC LETTER DDAL
+0689;N # ARABIC LETTER DAL WITH RING
+068A;N # ARABIC LETTER DAL WITH DOT BELOW
+068B;N # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C;N # ARABIC LETTER DAHAL
+068D;N # ARABIC LETTER DDAHAL
+068E;N # ARABIC LETTER DUL
+068F;N # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690;N # ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+0691;N # ARABIC LETTER RREH
+0692;N # ARABIC LETTER REH WITH SMALL V
+0693;N # ARABIC LETTER REH WITH RING
+0694;N # ARABIC LETTER REH WITH DOT BELOW
+0695;N # ARABIC LETTER REH WITH SMALL V BELOW
+0696;N # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697;N # ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698;N # ARABIC LETTER JEH
+0699;N # ARABIC LETTER REH WITH FOUR DOTS ABOVE
+069A;N # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B;N # ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C;N # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+069D;N # ARABIC LETTER SAD WITH TWO DOTS BELOW
+069E;N # ARABIC LETTER SAD WITH THREE DOTS ABOVE
+069F;N # ARABIC LETTER TAH WITH THREE DOTS ABOVE
+06A0;N # ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A1;N # ARABIC LETTER DOTLESS FEH
+06A2;N # ARABIC LETTER FEH WITH DOT MOVED BELOW
+06A3;N # ARABIC LETTER FEH WITH DOT BELOW
+06A4;N # ARABIC LETTER VEH
+06A5;N # ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6;N # ARABIC LETTER PEHEH
+06A7;N # ARABIC LETTER QAF WITH DOT ABOVE
+06A8;N # ARABIC LETTER QAF WITH THREE DOTS ABOVE
+06A9;N # ARABIC LETTER KEHEH
+06AA;N # ARABIC LETTER SWASH KAF
+06AB;N # ARABIC LETTER KAF WITH RING
+06AC;N # ARABIC LETTER KAF WITH DOT ABOVE
+06AD;N # ARABIC LETTER NG
+06AE;N # ARABIC LETTER KAF WITH THREE DOTS BELOW
+06AF;N # ARABIC LETTER GAF
+06B0;N # ARABIC LETTER GAF WITH RING
+06B1;N # ARABIC LETTER NGOEH
+06B2;N # ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3;N # ARABIC LETTER GUEH
+06B4;N # ARABIC LETTER GAF WITH THREE DOTS ABOVE
+06B5;N # ARABIC LETTER LAM WITH SMALL V
+06B6;N # ARABIC LETTER LAM WITH DOT ABOVE
+06B7;N # ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8;N # ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9;N # ARABIC LETTER NOON WITH DOT BELOW
+06BA;N # ARABIC LETTER NOON GHUNNA
+06BB;N # ARABIC LETTER RNOON
+06BC;N # ARABIC LETTER NOON WITH RING
+06BD;N # ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06BE;N # ARABIC LETTER HEH DOACHASHMEE
+06BF;N # ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0;N # ARABIC LETTER HEH WITH YEH ABOVE
+06C1;N # ARABIC LETTER HEH GOAL
+06C2;N # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3;N # ARABIC LETTER TEH MARBUTA GOAL
+06C4;N # ARABIC LETTER WAW WITH RING
+06C5;N # ARABIC LETTER KIRGHIZ OE
+06C6;N # ARABIC LETTER OE
+06C7;N # ARABIC LETTER U
+06C8;N # ARABIC LETTER YU
+06C9;N # ARABIC LETTER KIRGHIZ YU
+06CA;N # ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB;N # ARABIC LETTER VE
+06CC;N # ARABIC LETTER FARSI YEH
+06CD;N # ARABIC LETTER YEH WITH TAIL
+06CE;N # ARABIC LETTER YEH WITH SMALL V
+06CF;N # ARABIC LETTER WAW WITH DOT ABOVE
+06D0;N # ARABIC LETTER E
+06D1;N # ARABIC LETTER YEH WITH THREE DOTS BELOW
+06D2;N # ARABIC LETTER YEH BARREE
+06D3;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4;N # ARABIC FULL STOP
+06D5;N # ARABIC LETTER AE
+06D6;N # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7;N # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8;N # ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9;N # ARABIC SMALL HIGH LAM ALEF
+06DA;N # ARABIC SMALL HIGH JEEM
+06DB;N # ARABIC SMALL HIGH THREE DOTS
+06DC;N # ARABIC SMALL HIGH SEEN
+06DD;N # ARABIC END OF AYAH
+06DE;N # ARABIC START OF RUB EL HIZB
+06DF;N # ARABIC SMALL HIGH ROUNDED ZERO
+06E0;N # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1;N # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2;N # ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3;N # ARABIC SMALL LOW SEEN
+06E4;N # ARABIC SMALL HIGH MADDA
+06E5;N # ARABIC SMALL WAW
+06E6;N # ARABIC SMALL YEH
+06E7;N # ARABIC SMALL HIGH YEH
+06E8;N # ARABIC SMALL HIGH NOON
+06E9;N # ARABIC PLACE OF SAJDAH
+06EA;N # ARABIC EMPTY CENTRE LOW STOP
+06EB;N # ARABIC EMPTY CENTRE HIGH STOP
+06EC;N # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED;N # ARABIC SMALL LOW MEEM
+06EE;N # ARABIC LETTER DAL WITH INVERTED V
+06EF;N # ARABIC LETTER REH WITH INVERTED V
+06F0;N # EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1;N # EXTENDED ARABIC-INDIC DIGIT ONE
+06F2;N # EXTENDED ARABIC-INDIC DIGIT TWO
+06F3;N # EXTENDED ARABIC-INDIC DIGIT THREE
+06F4;N # EXTENDED ARABIC-INDIC DIGIT FOUR
+06F5;N # EXTENDED ARABIC-INDIC DIGIT FIVE
+06F6;N # EXTENDED ARABIC-INDIC DIGIT SIX
+06F7;N # EXTENDED ARABIC-INDIC DIGIT SEVEN
+06F8;N # EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9;N # EXTENDED ARABIC-INDIC DIGIT NINE
+06FA;N # ARABIC LETTER SHEEN WITH DOT BELOW
+06FB;N # ARABIC LETTER DAD WITH DOT BELOW
+06FC;N # ARABIC LETTER GHAIN WITH DOT BELOW
+06FD;N # ARABIC SIGN SINDHI AMPERSAND
+06FE;N # ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF;N # ARABIC LETTER HEH WITH INVERTED V
+0700;N # SYRIAC END OF PARAGRAPH
+0701;N # SYRIAC SUPRALINEAR FULL STOP
+0702;N # SYRIAC SUBLINEAR FULL STOP
+0703;N # SYRIAC SUPRALINEAR COLON
+0704;N # SYRIAC SUBLINEAR COLON
+0705;N # SYRIAC HORIZONTAL COLON
+0706;N # SYRIAC COLON SKEWED LEFT
+0707;N # SYRIAC COLON SKEWED RIGHT
+0708;N # SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709;N # SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A;N # SYRIAC CONTRACTION
+070B;N # SYRIAC HARKLEAN OBELUS
+070C;N # SYRIAC HARKLEAN METOBELUS
+070D;N # SYRIAC HARKLEAN ASTERISCUS
+070F;N # SYRIAC ABBREVIATION MARK
+0710;N # SYRIAC LETTER ALAPH
+0711;N # SYRIAC LETTER SUPERSCRIPT ALAPH
+0712;N # SYRIAC LETTER BETH
+0713;N # SYRIAC LETTER GAMAL
+0714;N # SYRIAC LETTER GAMAL GARSHUNI
+0715;N # SYRIAC LETTER DALATH
+0716;N # SYRIAC LETTER DOTLESS DALATH RISH
+0717;N # SYRIAC LETTER HE
+0718;N # SYRIAC LETTER WAW
+0719;N # SYRIAC LETTER ZAIN
+071A;N # SYRIAC LETTER HETH
+071B;N # SYRIAC LETTER TETH
+071C;N # SYRIAC LETTER TETH GARSHUNI
+071D;N # SYRIAC LETTER YUDH
+071E;N # SYRIAC LETTER YUDH HE
+071F;N # SYRIAC LETTER KAPH
+0720;N # SYRIAC LETTER LAMADH
+0721;N # SYRIAC LETTER MIM
+0722;N # SYRIAC LETTER NUN
+0723;N # SYRIAC LETTER SEMKATH
+0724;N # SYRIAC LETTER FINAL SEMKATH
+0725;N # SYRIAC LETTER E
+0726;N # SYRIAC LETTER PE
+0727;N # SYRIAC LETTER REVERSED PE
+0728;N # SYRIAC LETTER SADHE
+0729;N # SYRIAC LETTER QAPH
+072A;N # SYRIAC LETTER RISH
+072B;N # SYRIAC LETTER SHIN
+072C;N # SYRIAC LETTER TAW
+072D;N # SYRIAC LETTER PERSIAN BHETH
+072E;N # SYRIAC LETTER PERSIAN GHAMAL
+072F;N # SYRIAC LETTER PERSIAN DHALATH
+0730;N # SYRIAC PTHAHA ABOVE
+0731;N # SYRIAC PTHAHA BELOW
+0732;N # SYRIAC PTHAHA DOTTED
+0733;N # SYRIAC ZQAPHA ABOVE
+0734;N # SYRIAC ZQAPHA BELOW
+0735;N # SYRIAC ZQAPHA DOTTED
+0736;N # SYRIAC RBASA ABOVE
+0737;N # SYRIAC RBASA BELOW
+0738;N # SYRIAC DOTTED ZLAMA HORIZONTAL
+0739;N # SYRIAC DOTTED ZLAMA ANGULAR
+073A;N # SYRIAC HBASA ABOVE
+073B;N # SYRIAC HBASA BELOW
+073C;N # SYRIAC HBASA-ESASA DOTTED
+073D;N # SYRIAC ESASA ABOVE
+073E;N # SYRIAC ESASA BELOW
+073F;N # SYRIAC RWAHA
+0740;N # SYRIAC FEMININE DOT
+0741;N # SYRIAC QUSHSHAYA
+0742;N # SYRIAC RUKKAKHA
+0743;N # SYRIAC TWO VERTICAL DOTS ABOVE
+0744;N # SYRIAC TWO VERTICAL DOTS BELOW
+0745;N # SYRIAC THREE DOTS ABOVE
+0746;N # SYRIAC THREE DOTS BELOW
+0747;N # SYRIAC OBLIQUE LINE ABOVE
+0748;N # SYRIAC OBLIQUE LINE BELOW
+0749;N # SYRIAC MUSIC
+074A;N # SYRIAC BARREKH
+074D;N # SYRIAC LETTER SOGDIAN ZHAIN
+074E;N # SYRIAC LETTER SOGDIAN KHAPH
+074F;N # SYRIAC LETTER SOGDIAN FE
+0750;N # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751;N # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753;N # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754;N # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755;N # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756;N # ARABIC LETTER BEH WITH SMALL V
+0757;N # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758;N # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759;N # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A;N # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B;N # ARABIC LETTER REH WITH STROKE
+075C;N # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D;N # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E;N # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F;N # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760;N # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761;N # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762;N # ARABIC LETTER KEHEH WITH DOT ABOVE
+0763;N # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764;N # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765;N # ARABIC LETTER MEEM WITH DOT ABOVE
+0766;N # ARABIC LETTER MEEM WITH DOT BELOW
+0767;N # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768;N # ARABIC LETTER NOON WITH SMALL TAH
+0769;N # ARABIC LETTER NOON WITH SMALL V
+076A;N # ARABIC LETTER LAM WITH BAR
+076B;N # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C;N # ARABIC LETTER REH WITH HAMZA ABOVE
+076D;N # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+0780;N # THAANA LETTER HAA
+0781;N # THAANA LETTER SHAVIYANI
+0782;N # THAANA LETTER NOONU
+0783;N # THAANA LETTER RAA
+0784;N # THAANA LETTER BAA
+0785;N # THAANA LETTER LHAVIYANI
+0786;N # THAANA LETTER KAAFU
+0787;N # THAANA LETTER ALIFU
+0788;N # THAANA LETTER VAAVU
+0789;N # THAANA LETTER MEEMU
+078A;N # THAANA LETTER FAAFU
+078B;N # THAANA LETTER DHAALU
+078C;N # THAANA LETTER THAA
+078D;N # THAANA LETTER LAAMU
+078E;N # THAANA LETTER GAAFU
+078F;N # THAANA LETTER GNAVIYANI
+0790;N # THAANA LETTER SEENU
+0791;N # THAANA LETTER DAVIYANI
+0792;N # THAANA LETTER ZAVIYANI
+0793;N # THAANA LETTER TAVIYANI
+0794;N # THAANA LETTER YAA
+0795;N # THAANA LETTER PAVIYANI
+0796;N # THAANA LETTER JAVIYANI
+0797;N # THAANA LETTER CHAVIYANI
+0798;N # THAANA LETTER TTAA
+0799;N # THAANA LETTER HHAA
+079A;N # THAANA LETTER KHAA
+079B;N # THAANA LETTER THAALU
+079C;N # THAANA LETTER ZAA
+079D;N # THAANA LETTER SHEENU
+079E;N # THAANA LETTER SAADHU
+079F;N # THAANA LETTER DAADHU
+07A0;N # THAANA LETTER TO
+07A1;N # THAANA LETTER ZO
+07A2;N # THAANA LETTER AINU
+07A3;N # THAANA LETTER GHAINU
+07A4;N # THAANA LETTER QAAFU
+07A5;N # THAANA LETTER WAAVU
+07A6;N # THAANA ABAFILI
+07A7;N # THAANA AABAAFILI
+07A8;N # THAANA IBIFILI
+07A9;N # THAANA EEBEEFILI
+07AA;N # THAANA UBUFILI
+07AB;N # THAANA OOBOOFILI
+07AC;N # THAANA EBEFILI
+07AD;N # THAANA EYBEYFILI
+07AE;N # THAANA OBOFILI
+07AF;N # THAANA OABOAFILI
+07B0;N # THAANA SUKUN
+07B1;N # THAANA LETTER NAA
+0901;N # DEVANAGARI SIGN CANDRABINDU
+0902;N # DEVANAGARI SIGN ANUSVARA
+0903;N # DEVANAGARI SIGN VISARGA
+0904;N # DEVANAGARI LETTER SHORT A
+0905;N # DEVANAGARI LETTER A
+0906;N # DEVANAGARI LETTER AA
+0907;N # DEVANAGARI LETTER I
+0908;N # DEVANAGARI LETTER II
+0909;N # DEVANAGARI LETTER U
+090A;N # DEVANAGARI LETTER UU
+090B;N # DEVANAGARI LETTER VOCALIC R
+090C;N # DEVANAGARI LETTER VOCALIC L
+090D;N # DEVANAGARI LETTER CANDRA E
+090E;N # DEVANAGARI LETTER SHORT E
+090F;N # DEVANAGARI LETTER E
+0910;N # DEVANAGARI LETTER AI
+0911;N # DEVANAGARI LETTER CANDRA O
+0912;N # DEVANAGARI LETTER SHORT O
+0913;N # DEVANAGARI LETTER O
+0914;N # DEVANAGARI LETTER AU
+0915;N # DEVANAGARI LETTER KA
+0916;N # DEVANAGARI LETTER KHA
+0917;N # DEVANAGARI LETTER GA
+0918;N # DEVANAGARI LETTER GHA
+0919;N # DEVANAGARI LETTER NGA
+091A;N # DEVANAGARI LETTER CA
+091B;N # DEVANAGARI LETTER CHA
+091C;N # DEVANAGARI LETTER JA
+091D;N # DEVANAGARI LETTER JHA
+091E;N # DEVANAGARI LETTER NYA
+091F;N # DEVANAGARI LETTER TTA
+0920;N # DEVANAGARI LETTER TTHA
+0921;N # DEVANAGARI LETTER DDA
+0922;N # DEVANAGARI LETTER DDHA
+0923;N # DEVANAGARI LETTER NNA
+0924;N # DEVANAGARI LETTER TA
+0925;N # DEVANAGARI LETTER THA
+0926;N # DEVANAGARI LETTER DA
+0927;N # DEVANAGARI LETTER DHA
+0928;N # DEVANAGARI LETTER NA
+0929;N # DEVANAGARI LETTER NNNA
+092A;N # DEVANAGARI LETTER PA
+092B;N # DEVANAGARI LETTER PHA
+092C;N # DEVANAGARI LETTER BA
+092D;N # DEVANAGARI LETTER BHA
+092E;N # DEVANAGARI LETTER MA
+092F;N # DEVANAGARI LETTER YA
+0930;N # DEVANAGARI LETTER RA
+0931;N # DEVANAGARI LETTER RRA
+0932;N # DEVANAGARI LETTER LA
+0933;N # DEVANAGARI LETTER LLA
+0934;N # DEVANAGARI LETTER LLLA
+0935;N # DEVANAGARI LETTER VA
+0936;N # DEVANAGARI LETTER SHA
+0937;N # DEVANAGARI LETTER SSA
+0938;N # DEVANAGARI LETTER SA
+0939;N # DEVANAGARI LETTER HA
+093C;N # DEVANAGARI SIGN NUKTA
+093D;N # DEVANAGARI SIGN AVAGRAHA
+093E;N # DEVANAGARI VOWEL SIGN AA
+093F;N # DEVANAGARI VOWEL SIGN I
+0940;N # DEVANAGARI VOWEL SIGN II
+0941;N # DEVANAGARI VOWEL SIGN U
+0942;N # DEVANAGARI VOWEL SIGN UU
+0943;N # DEVANAGARI VOWEL SIGN VOCALIC R
+0944;N # DEVANAGARI VOWEL SIGN VOCALIC RR
+0945;N # DEVANAGARI VOWEL SIGN CANDRA E
+0946;N # DEVANAGARI VOWEL SIGN SHORT E
+0947;N # DEVANAGARI VOWEL SIGN E
+0948;N # DEVANAGARI VOWEL SIGN AI
+0949;N # DEVANAGARI VOWEL SIGN CANDRA O
+094A;N # DEVANAGARI VOWEL SIGN SHORT O
+094B;N # DEVANAGARI VOWEL SIGN O
+094C;N # DEVANAGARI VOWEL SIGN AU
+094D;N # DEVANAGARI SIGN VIRAMA
+0950;N # DEVANAGARI OM
+0951;N # DEVANAGARI STRESS SIGN UDATTA
+0952;N # DEVANAGARI STRESS SIGN ANUDATTA
+0953;N # DEVANAGARI GRAVE ACCENT
+0954;N # DEVANAGARI ACUTE ACCENT
+0958;N # DEVANAGARI LETTER QA
+0959;N # DEVANAGARI LETTER KHHA
+095A;N # DEVANAGARI LETTER GHHA
+095B;N # DEVANAGARI LETTER ZA
+095C;N # DEVANAGARI LETTER DDDHA
+095D;N # DEVANAGARI LETTER RHA
+095E;N # DEVANAGARI LETTER FA
+095F;N # DEVANAGARI LETTER YYA
+0960;N # DEVANAGARI LETTER VOCALIC RR
+0961;N # DEVANAGARI LETTER VOCALIC LL
+0962;N # DEVANAGARI VOWEL SIGN VOCALIC L
+0963;N # DEVANAGARI VOWEL SIGN VOCALIC LL
+0964;N # DEVANAGARI DANDA
+0965;N # DEVANAGARI DOUBLE DANDA
+0966;N # DEVANAGARI DIGIT ZERO
+0967;N # DEVANAGARI DIGIT ONE
+0968;N # DEVANAGARI DIGIT TWO
+0969;N # DEVANAGARI DIGIT THREE
+096A;N # DEVANAGARI DIGIT FOUR
+096B;N # DEVANAGARI DIGIT FIVE
+096C;N # DEVANAGARI DIGIT SIX
+096D;N # DEVANAGARI DIGIT SEVEN
+096E;N # DEVANAGARI DIGIT EIGHT
+096F;N # DEVANAGARI DIGIT NINE
+0970;N # DEVANAGARI ABBREVIATION SIGN
+097D;N # DEVANAGARI LETTER GLOTTAL STOP
+0981;N # BENGALI SIGN CANDRABINDU
+0982;N # BENGALI SIGN ANUSVARA
+0983;N # BENGALI SIGN VISARGA
+0985;N # BENGALI LETTER A
+0986;N # BENGALI LETTER AA
+0987;N # BENGALI LETTER I
+0988;N # BENGALI LETTER II
+0989;N # BENGALI LETTER U
+098A;N # BENGALI LETTER UU
+098B;N # BENGALI LETTER VOCALIC R
+098C;N # BENGALI LETTER VOCALIC L
+098F;N # BENGALI LETTER E
+0990;N # BENGALI LETTER AI
+0993;N # BENGALI LETTER O
+0994;N # BENGALI LETTER AU
+0995;N # BENGALI LETTER KA
+0996;N # BENGALI LETTER KHA
+0997;N # BENGALI LETTER GA
+0998;N # BENGALI LETTER GHA
+0999;N # BENGALI LETTER NGA
+099A;N # BENGALI LETTER CA
+099B;N # BENGALI LETTER CHA
+099C;N # BENGALI LETTER JA
+099D;N # BENGALI LETTER JHA
+099E;N # BENGALI LETTER NYA
+099F;N # BENGALI LETTER TTA
+09A0;N # BENGALI LETTER TTHA
+09A1;N # BENGALI LETTER DDA
+09A2;N # BENGALI LETTER DDHA
+09A3;N # BENGALI LETTER NNA
+09A4;N # BENGALI LETTER TA
+09A5;N # BENGALI LETTER THA
+09A6;N # BENGALI LETTER DA
+09A7;N # BENGALI LETTER DHA
+09A8;N # BENGALI LETTER NA
+09AA;N # BENGALI LETTER PA
+09AB;N # BENGALI LETTER PHA
+09AC;N # BENGALI LETTER BA
+09AD;N # BENGALI LETTER BHA
+09AE;N # BENGALI LETTER MA
+09AF;N # BENGALI LETTER YA
+09B0;N # BENGALI LETTER RA
+09B2;N # BENGALI LETTER LA
+09B6;N # BENGALI LETTER SHA
+09B7;N # BENGALI LETTER SSA
+09B8;N # BENGALI LETTER SA
+09B9;N # BENGALI LETTER HA
+09BC;N # BENGALI SIGN NUKTA
+09BD;N # BENGALI SIGN AVAGRAHA
+09BE;N # BENGALI VOWEL SIGN AA
+09BF;N # BENGALI VOWEL SIGN I
+09C0;N # BENGALI VOWEL SIGN II
+09C1;N # BENGALI VOWEL SIGN U
+09C2;N # BENGALI VOWEL SIGN UU
+09C3;N # BENGALI VOWEL SIGN VOCALIC R
+09C4;N # BENGALI VOWEL SIGN VOCALIC RR
+09C7;N # BENGALI VOWEL SIGN E
+09C8;N # BENGALI VOWEL SIGN AI
+09CB;N # BENGALI VOWEL SIGN O
+09CC;N # BENGALI VOWEL SIGN AU
+09CD;N # BENGALI SIGN VIRAMA
+09CE;N # BENGALI LETTER KHANDA TA
+09D7;N # BENGALI AU LENGTH MARK
+09DC;N # BENGALI LETTER RRA
+09DD;N # BENGALI LETTER RHA
+09DF;N # BENGALI LETTER YYA
+09E0;N # BENGALI LETTER VOCALIC RR
+09E1;N # BENGALI LETTER VOCALIC LL
+09E2;N # BENGALI VOWEL SIGN VOCALIC L
+09E3;N # BENGALI VOWEL SIGN VOCALIC LL
+09E6;N # BENGALI DIGIT ZERO
+09E7;N # BENGALI DIGIT ONE
+09E8;N # BENGALI DIGIT TWO
+09E9;N # BENGALI DIGIT THREE
+09EA;N # BENGALI DIGIT FOUR
+09EB;N # BENGALI DIGIT FIVE
+09EC;N # BENGALI DIGIT SIX
+09ED;N # BENGALI DIGIT SEVEN
+09EE;N # BENGALI DIGIT EIGHT
+09EF;N # BENGALI DIGIT NINE
+09F0;N # BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09F1;N # BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2;N # BENGALI RUPEE MARK
+09F3;N # BENGALI RUPEE SIGN
+09F4;N # BENGALI CURRENCY NUMERATOR ONE
+09F5;N # BENGALI CURRENCY NUMERATOR TWO
+09F6;N # BENGALI CURRENCY NUMERATOR THREE
+09F7;N # BENGALI CURRENCY NUMERATOR FOUR
+09F8;N # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9;N # BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA;N # BENGALI ISSHAR
+0A01;N # GURMUKHI SIGN ADAK BINDI
+0A02;N # GURMUKHI SIGN BINDI
+0A03;N # GURMUKHI SIGN VISARGA
+0A05;N # GURMUKHI LETTER A
+0A06;N # GURMUKHI LETTER AA
+0A07;N # GURMUKHI LETTER I
+0A08;N # GURMUKHI LETTER II
+0A09;N # GURMUKHI LETTER U
+0A0A;N # GURMUKHI LETTER UU
+0A0F;N # GURMUKHI LETTER EE
+0A10;N # GURMUKHI LETTER AI
+0A13;N # GURMUKHI LETTER OO
+0A14;N # GURMUKHI LETTER AU
+0A15;N # GURMUKHI LETTER KA
+0A16;N # GURMUKHI LETTER KHA
+0A17;N # GURMUKHI LETTER GA
+0A18;N # GURMUKHI LETTER GHA
+0A19;N # GURMUKHI LETTER NGA
+0A1A;N # GURMUKHI LETTER CA
+0A1B;N # GURMUKHI LETTER CHA
+0A1C;N # GURMUKHI LETTER JA
+0A1D;N # GURMUKHI LETTER JHA
+0A1E;N # GURMUKHI LETTER NYA
+0A1F;N # GURMUKHI LETTER TTA
+0A20;N # GURMUKHI LETTER TTHA
+0A21;N # GURMUKHI LETTER DDA
+0A22;N # GURMUKHI LETTER DDHA
+0A23;N # GURMUKHI LETTER NNA
+0A24;N # GURMUKHI LETTER TA
+0A25;N # GURMUKHI LETTER THA
+0A26;N # GURMUKHI LETTER DA
+0A27;N # GURMUKHI LETTER DHA
+0A28;N # GURMUKHI LETTER NA
+0A2A;N # GURMUKHI LETTER PA
+0A2B;N # GURMUKHI LETTER PHA
+0A2C;N # GURMUKHI LETTER BA
+0A2D;N # GURMUKHI LETTER BHA
+0A2E;N # GURMUKHI LETTER MA
+0A2F;N # GURMUKHI LETTER YA
+0A30;N # GURMUKHI LETTER RA
+0A32;N # GURMUKHI LETTER LA
+0A33;N # GURMUKHI LETTER LLA
+0A35;N # GURMUKHI LETTER VA
+0A36;N # GURMUKHI LETTER SHA
+0A38;N # GURMUKHI LETTER SA
+0A39;N # GURMUKHI LETTER HA
+0A3C;N # GURMUKHI SIGN NUKTA
+0A3E;N # GURMUKHI VOWEL SIGN AA
+0A3F;N # GURMUKHI VOWEL SIGN I
+0A40;N # GURMUKHI VOWEL SIGN II
+0A41;N # GURMUKHI VOWEL SIGN U
+0A42;N # GURMUKHI VOWEL SIGN UU
+0A47;N # GURMUKHI VOWEL SIGN EE
+0A48;N # GURMUKHI VOWEL SIGN AI
+0A4B;N # GURMUKHI VOWEL SIGN OO
+0A4C;N # GURMUKHI VOWEL SIGN AU
+0A4D;N # GURMUKHI SIGN VIRAMA
+0A59;N # GURMUKHI LETTER KHHA
+0A5A;N # GURMUKHI LETTER GHHA
+0A5B;N # GURMUKHI LETTER ZA
+0A5C;N # GURMUKHI LETTER RRA
+0A5E;N # GURMUKHI LETTER FA
+0A66;N # GURMUKHI DIGIT ZERO
+0A67;N # GURMUKHI DIGIT ONE
+0A68;N # GURMUKHI DIGIT TWO
+0A69;N # GURMUKHI DIGIT THREE
+0A6A;N # GURMUKHI DIGIT FOUR
+0A6B;N # GURMUKHI DIGIT FIVE
+0A6C;N # GURMUKHI DIGIT SIX
+0A6D;N # GURMUKHI DIGIT SEVEN
+0A6E;N # GURMUKHI DIGIT EIGHT
+0A6F;N # GURMUKHI DIGIT NINE
+0A70;N # GURMUKHI TIPPI
+0A71;N # GURMUKHI ADDAK
+0A72;N # GURMUKHI IRI
+0A73;N # GURMUKHI URA
+0A74;N # GURMUKHI EK ONKAR
+0A81;N # GUJARATI SIGN CANDRABINDU
+0A82;N # GUJARATI SIGN ANUSVARA
+0A83;N # GUJARATI SIGN VISARGA
+0A85;N # GUJARATI LETTER A
+0A86;N # GUJARATI LETTER AA
+0A87;N # GUJARATI LETTER I
+0A88;N # GUJARATI LETTER II
+0A89;N # GUJARATI LETTER U
+0A8A;N # GUJARATI LETTER UU
+0A8B;N # GUJARATI LETTER VOCALIC R
+0A8C;N # GUJARATI LETTER VOCALIC L
+0A8D;N # GUJARATI VOWEL CANDRA E
+0A8F;N # GUJARATI LETTER E
+0A90;N # GUJARATI LETTER AI
+0A91;N # GUJARATI VOWEL CANDRA O
+0A93;N # GUJARATI LETTER O
+0A94;N # GUJARATI LETTER AU
+0A95;N # GUJARATI LETTER KA
+0A96;N # GUJARATI LETTER KHA
+0A97;N # GUJARATI LETTER GA
+0A98;N # GUJARATI LETTER GHA
+0A99;N # GUJARATI LETTER NGA
+0A9A;N # GUJARATI LETTER CA
+0A9B;N # GUJARATI LETTER CHA
+0A9C;N # GUJARATI LETTER JA
+0A9D;N # GUJARATI LETTER JHA
+0A9E;N # GUJARATI LETTER NYA
+0A9F;N # GUJARATI LETTER TTA
+0AA0;N # GUJARATI LETTER TTHA
+0AA1;N # GUJARATI LETTER DDA
+0AA2;N # GUJARATI LETTER DDHA
+0AA3;N # GUJARATI LETTER NNA
+0AA4;N # GUJARATI LETTER TA
+0AA5;N # GUJARATI LETTER THA
+0AA6;N # GUJARATI LETTER DA
+0AA7;N # GUJARATI LETTER DHA
+0AA8;N # GUJARATI LETTER NA
+0AAA;N # GUJARATI LETTER PA
+0AAB;N # GUJARATI LETTER PHA
+0AAC;N # GUJARATI LETTER BA
+0AAD;N # GUJARATI LETTER BHA
+0AAE;N # GUJARATI LETTER MA
+0AAF;N # GUJARATI LETTER YA
+0AB0;N # GUJARATI LETTER RA
+0AB2;N # GUJARATI LETTER LA
+0AB3;N # GUJARATI LETTER LLA
+0AB5;N # GUJARATI LETTER VA
+0AB6;N # GUJARATI LETTER SHA
+0AB7;N # GUJARATI LETTER SSA
+0AB8;N # GUJARATI LETTER SA
+0AB9;N # GUJARATI LETTER HA
+0ABC;N # GUJARATI SIGN NUKTA
+0ABD;N # GUJARATI SIGN AVAGRAHA
+0ABE;N # GUJARATI VOWEL SIGN AA
+0ABF;N # GUJARATI VOWEL SIGN I
+0AC0;N # GUJARATI VOWEL SIGN II
+0AC1;N # GUJARATI VOWEL SIGN U
+0AC2;N # GUJARATI VOWEL SIGN UU
+0AC3;N # GUJARATI VOWEL SIGN VOCALIC R
+0AC4;N # GUJARATI VOWEL SIGN VOCALIC RR
+0AC5;N # GUJARATI VOWEL SIGN CANDRA E
+0AC7;N # GUJARATI VOWEL SIGN E
+0AC8;N # GUJARATI VOWEL SIGN AI
+0AC9;N # GUJARATI VOWEL SIGN CANDRA O
+0ACB;N # GUJARATI VOWEL SIGN O
+0ACC;N # GUJARATI VOWEL SIGN AU
+0ACD;N # GUJARATI SIGN VIRAMA
+0AD0;N # GUJARATI OM
+0AE0;N # GUJARATI LETTER VOCALIC RR
+0AE1;N # GUJARATI LETTER VOCALIC LL
+0AE2;N # GUJARATI VOWEL SIGN VOCALIC L
+0AE3;N # GUJARATI VOWEL SIGN VOCALIC LL
+0AE6;N # GUJARATI DIGIT ZERO
+0AE7;N # GUJARATI DIGIT ONE
+0AE8;N # GUJARATI DIGIT TWO
+0AE9;N # GUJARATI DIGIT THREE
+0AEA;N # GUJARATI DIGIT FOUR
+0AEB;N # GUJARATI DIGIT FIVE
+0AEC;N # GUJARATI DIGIT SIX
+0AED;N # GUJARATI DIGIT SEVEN
+0AEE;N # GUJARATI DIGIT EIGHT
+0AEF;N # GUJARATI DIGIT NINE
+0AF1;N # GUJARATI RUPEE SIGN
+0B01;N # ORIYA SIGN CANDRABINDU
+0B02;N # ORIYA SIGN ANUSVARA
+0B03;N # ORIYA SIGN VISARGA
+0B05;N # ORIYA LETTER A
+0B06;N # ORIYA LETTER AA
+0B07;N # ORIYA LETTER I
+0B08;N # ORIYA LETTER II
+0B09;N # ORIYA LETTER U
+0B0A;N # ORIYA LETTER UU
+0B0B;N # ORIYA LETTER VOCALIC R
+0B0C;N # ORIYA LETTER VOCALIC L
+0B0F;N # ORIYA LETTER E
+0B10;N # ORIYA LETTER AI
+0B13;N # ORIYA LETTER O
+0B14;N # ORIYA LETTER AU
+0B15;N # ORIYA LETTER KA
+0B16;N # ORIYA LETTER KHA
+0B17;N # ORIYA LETTER GA
+0B18;N # ORIYA LETTER GHA
+0B19;N # ORIYA LETTER NGA
+0B1A;N # ORIYA LETTER CA
+0B1B;N # ORIYA LETTER CHA
+0B1C;N # ORIYA LETTER JA
+0B1D;N # ORIYA LETTER JHA
+0B1E;N # ORIYA LETTER NYA
+0B1F;N # ORIYA LETTER TTA
+0B20;N # ORIYA LETTER TTHA
+0B21;N # ORIYA LETTER DDA
+0B22;N # ORIYA LETTER DDHA
+0B23;N # ORIYA LETTER NNA
+0B24;N # ORIYA LETTER TA
+0B25;N # ORIYA LETTER THA
+0B26;N # ORIYA LETTER DA
+0B27;N # ORIYA LETTER DHA
+0B28;N # ORIYA LETTER NA
+0B2A;N # ORIYA LETTER PA
+0B2B;N # ORIYA LETTER PHA
+0B2C;N # ORIYA LETTER BA
+0B2D;N # ORIYA LETTER BHA
+0B2E;N # ORIYA LETTER MA
+0B2F;N # ORIYA LETTER YA
+0B30;N # ORIYA LETTER RA
+0B32;N # ORIYA LETTER LA
+0B33;N # ORIYA LETTER LLA
+0B35;N # ORIYA LETTER VA
+0B36;N # ORIYA LETTER SHA
+0B37;N # ORIYA LETTER SSA
+0B38;N # ORIYA LETTER SA
+0B39;N # ORIYA LETTER HA
+0B3C;N # ORIYA SIGN NUKTA
+0B3D;N # ORIYA SIGN AVAGRAHA
+0B3E;N # ORIYA VOWEL SIGN AA
+0B3F;N # ORIYA VOWEL SIGN I
+0B40;N # ORIYA VOWEL SIGN II
+0B41;N # ORIYA VOWEL SIGN U
+0B42;N # ORIYA VOWEL SIGN UU
+0B43;N # ORIYA VOWEL SIGN VOCALIC R
+0B47;N # ORIYA VOWEL SIGN E
+0B48;N # ORIYA VOWEL SIGN AI
+0B4B;N # ORIYA VOWEL SIGN O
+0B4C;N # ORIYA VOWEL SIGN AU
+0B4D;N # ORIYA SIGN VIRAMA
+0B56;N # ORIYA AI LENGTH MARK
+0B57;N # ORIYA AU LENGTH MARK
+0B5C;N # ORIYA LETTER RRA
+0B5D;N # ORIYA LETTER RHA
+0B5F;N # ORIYA LETTER YYA
+0B60;N # ORIYA LETTER VOCALIC RR
+0B61;N # ORIYA LETTER VOCALIC LL
+0B66;N # ORIYA DIGIT ZERO
+0B67;N # ORIYA DIGIT ONE
+0B68;N # ORIYA DIGIT TWO
+0B69;N # ORIYA DIGIT THREE
+0B6A;N # ORIYA DIGIT FOUR
+0B6B;N # ORIYA DIGIT FIVE
+0B6C;N # ORIYA DIGIT SIX
+0B6D;N # ORIYA DIGIT SEVEN
+0B6E;N # ORIYA DIGIT EIGHT
+0B6F;N # ORIYA DIGIT NINE
+0B70;N # ORIYA ISSHAR
+0B71;N # ORIYA LETTER WA
+0B82;N # TAMIL SIGN ANUSVARA
+0B83;N # TAMIL SIGN VISARGA
+0B85;N # TAMIL LETTER A
+0B86;N # TAMIL LETTER AA
+0B87;N # TAMIL LETTER I
+0B88;N # TAMIL LETTER II
+0B89;N # TAMIL LETTER U
+0B8A;N # TAMIL LETTER UU
+0B8E;N # TAMIL LETTER E
+0B8F;N # TAMIL LETTER EE
+0B90;N # TAMIL LETTER AI
+0B92;N # TAMIL LETTER O
+0B93;N # TAMIL LETTER OO
+0B94;N # TAMIL LETTER AU
+0B95;N # TAMIL LETTER KA
+0B99;N # TAMIL LETTER NGA
+0B9A;N # TAMIL LETTER CA
+0B9C;N # TAMIL LETTER JA
+0B9E;N # TAMIL LETTER NYA
+0B9F;N # TAMIL LETTER TTA
+0BA3;N # TAMIL LETTER NNA
+0BA4;N # TAMIL LETTER TA
+0BA8;N # TAMIL LETTER NA
+0BA9;N # TAMIL LETTER NNNA
+0BAA;N # TAMIL LETTER PA
+0BAE;N # TAMIL LETTER MA
+0BAF;N # TAMIL LETTER YA
+0BB0;N # TAMIL LETTER RA
+0BB1;N # TAMIL LETTER RRA
+0BB2;N # TAMIL LETTER LA
+0BB3;N # TAMIL LETTER LLA
+0BB4;N # TAMIL LETTER LLLA
+0BB5;N # TAMIL LETTER VA
+0BB6;N # TAMIL LETTER SHA
+0BB7;N # TAMIL LETTER SSA
+0BB8;N # TAMIL LETTER SA
+0BB9;N # TAMIL LETTER HA
+0BBE;N # TAMIL VOWEL SIGN AA
+0BBF;N # TAMIL VOWEL SIGN I
+0BC0;N # TAMIL VOWEL SIGN II
+0BC1;N # TAMIL VOWEL SIGN U
+0BC2;N # TAMIL VOWEL SIGN UU
+0BC6;N # TAMIL VOWEL SIGN E
+0BC7;N # TAMIL VOWEL SIGN EE
+0BC8;N # TAMIL VOWEL SIGN AI
+0BCA;N # TAMIL VOWEL SIGN O
+0BCB;N # TAMIL VOWEL SIGN OO
+0BCC;N # TAMIL VOWEL SIGN AU
+0BCD;N # TAMIL SIGN VIRAMA
+0BD7;N # TAMIL AU LENGTH MARK
+0BE6;N # TAMIL DIGIT ZERO
+0BE7;N # TAMIL DIGIT ONE
+0BE8;N # TAMIL DIGIT TWO
+0BE9;N # TAMIL DIGIT THREE
+0BEA;N # TAMIL DIGIT FOUR
+0BEB;N # TAMIL DIGIT FIVE
+0BEC;N # TAMIL DIGIT SIX
+0BED;N # TAMIL DIGIT SEVEN
+0BEE;N # TAMIL DIGIT EIGHT
+0BEF;N # TAMIL DIGIT NINE
+0BF0;N # TAMIL NUMBER TEN
+0BF1;N # TAMIL NUMBER ONE HUNDRED
+0BF2;N # TAMIL NUMBER ONE THOUSAND
+0BF3;N # TAMIL DAY SIGN
+0BF4;N # TAMIL MONTH SIGN
+0BF5;N # TAMIL YEAR SIGN
+0BF6;N # TAMIL DEBIT SIGN
+0BF7;N # TAMIL CREDIT SIGN
+0BF8;N # TAMIL AS ABOVE SIGN
+0BF9;N # TAMIL RUPEE SIGN
+0BFA;N # TAMIL NUMBER SIGN
+0C01;N # TELUGU SIGN CANDRABINDU
+0C02;N # TELUGU SIGN ANUSVARA
+0C03;N # TELUGU SIGN VISARGA
+0C05;N # TELUGU LETTER A
+0C06;N # TELUGU LETTER AA
+0C07;N # TELUGU LETTER I
+0C08;N # TELUGU LETTER II
+0C09;N # TELUGU LETTER U
+0C0A;N # TELUGU LETTER UU
+0C0B;N # TELUGU LETTER VOCALIC R
+0C0C;N # TELUGU LETTER VOCALIC L
+0C0E;N # TELUGU LETTER E
+0C0F;N # TELUGU LETTER EE
+0C10;N # TELUGU LETTER AI
+0C12;N # TELUGU LETTER O
+0C13;N # TELUGU LETTER OO
+0C14;N # TELUGU LETTER AU
+0C15;N # TELUGU LETTER KA
+0C16;N # TELUGU LETTER KHA
+0C17;N # TELUGU LETTER GA
+0C18;N # TELUGU LETTER GHA
+0C19;N # TELUGU LETTER NGA
+0C1A;N # TELUGU LETTER CA
+0C1B;N # TELUGU LETTER CHA
+0C1C;N # TELUGU LETTER JA
+0C1D;N # TELUGU LETTER JHA
+0C1E;N # TELUGU LETTER NYA
+0C1F;N # TELUGU LETTER TTA
+0C20;N # TELUGU LETTER TTHA
+0C21;N # TELUGU LETTER DDA
+0C22;N # TELUGU LETTER DDHA
+0C23;N # TELUGU LETTER NNA
+0C24;N # TELUGU LETTER TA
+0C25;N # TELUGU LETTER THA
+0C26;N # TELUGU LETTER DA
+0C27;N # TELUGU LETTER DHA
+0C28;N # TELUGU LETTER NA
+0C2A;N # TELUGU LETTER PA
+0C2B;N # TELUGU LETTER PHA
+0C2C;N # TELUGU LETTER BA
+0C2D;N # TELUGU LETTER BHA
+0C2E;N # TELUGU LETTER MA
+0C2F;N # TELUGU LETTER YA
+0C30;N # TELUGU LETTER RA
+0C31;N # TELUGU LETTER RRA
+0C32;N # TELUGU LETTER LA
+0C33;N # TELUGU LETTER LLA
+0C35;N # TELUGU LETTER VA
+0C36;N # TELUGU LETTER SHA
+0C37;N # TELUGU LETTER SSA
+0C38;N # TELUGU LETTER SA
+0C39;N # TELUGU LETTER HA
+0C3E;N # TELUGU VOWEL SIGN AA
+0C3F;N # TELUGU VOWEL SIGN I
+0C40;N # TELUGU VOWEL SIGN II
+0C41;N # TELUGU VOWEL SIGN U
+0C42;N # TELUGU VOWEL SIGN UU
+0C43;N # TELUGU VOWEL SIGN VOCALIC R
+0C44;N # TELUGU VOWEL SIGN VOCALIC RR
+0C46;N # TELUGU VOWEL SIGN E
+0C47;N # TELUGU VOWEL SIGN EE
+0C48;N # TELUGU VOWEL SIGN AI
+0C4A;N # TELUGU VOWEL SIGN O
+0C4B;N # TELUGU VOWEL SIGN OO
+0C4C;N # TELUGU VOWEL SIGN AU
+0C4D;N # TELUGU SIGN VIRAMA
+0C55;N # TELUGU LENGTH MARK
+0C56;N # TELUGU AI LENGTH MARK
+0C60;N # TELUGU LETTER VOCALIC RR
+0C61;N # TELUGU LETTER VOCALIC LL
+0C66;N # TELUGU DIGIT ZERO
+0C67;N # TELUGU DIGIT ONE
+0C68;N # TELUGU DIGIT TWO
+0C69;N # TELUGU DIGIT THREE
+0C6A;N # TELUGU DIGIT FOUR
+0C6B;N # TELUGU DIGIT FIVE
+0C6C;N # TELUGU DIGIT SIX
+0C6D;N # TELUGU DIGIT SEVEN
+0C6E;N # TELUGU DIGIT EIGHT
+0C6F;N # TELUGU DIGIT NINE
+0C82;N # KANNADA SIGN ANUSVARA
+0C83;N # KANNADA SIGN VISARGA
+0C85;N # KANNADA LETTER A
+0C86;N # KANNADA LETTER AA
+0C87;N # KANNADA LETTER I
+0C88;N # KANNADA LETTER II
+0C89;N # KANNADA LETTER U
+0C8A;N # KANNADA LETTER UU
+0C8B;N # KANNADA LETTER VOCALIC R
+0C8C;N # KANNADA LETTER VOCALIC L
+0C8E;N # KANNADA LETTER E
+0C8F;N # KANNADA LETTER EE
+0C90;N # KANNADA LETTER AI
+0C92;N # KANNADA LETTER O
+0C93;N # KANNADA LETTER OO
+0C94;N # KANNADA LETTER AU
+0C95;N # KANNADA LETTER KA
+0C96;N # KANNADA LETTER KHA
+0C97;N # KANNADA LETTER GA
+0C98;N # KANNADA LETTER GHA
+0C99;N # KANNADA LETTER NGA
+0C9A;N # KANNADA LETTER CA
+0C9B;N # KANNADA LETTER CHA
+0C9C;N # KANNADA LETTER JA
+0C9D;N # KANNADA LETTER JHA
+0C9E;N # KANNADA LETTER NYA
+0C9F;N # KANNADA LETTER TTA
+0CA0;N # KANNADA LETTER TTHA
+0CA1;N # KANNADA LETTER DDA
+0CA2;N # KANNADA LETTER DDHA
+0CA3;N # KANNADA LETTER NNA
+0CA4;N # KANNADA LETTER TA
+0CA5;N # KANNADA LETTER THA
+0CA6;N # KANNADA LETTER DA
+0CA7;N # KANNADA LETTER DHA
+0CA8;N # KANNADA LETTER NA
+0CAA;N # KANNADA LETTER PA
+0CAB;N # KANNADA LETTER PHA
+0CAC;N # KANNADA LETTER BA
+0CAD;N # KANNADA LETTER BHA
+0CAE;N # KANNADA LETTER MA
+0CAF;N # KANNADA LETTER YA
+0CB0;N # KANNADA LETTER RA
+0CB1;N # KANNADA LETTER RRA
+0CB2;N # KANNADA LETTER LA
+0CB3;N # KANNADA LETTER LLA
+0CB5;N # KANNADA LETTER VA
+0CB6;N # KANNADA LETTER SHA
+0CB7;N # KANNADA LETTER SSA
+0CB8;N # KANNADA LETTER SA
+0CB9;N # KANNADA LETTER HA
+0CBC;N # KANNADA SIGN NUKTA
+0CBD;N # KANNADA SIGN AVAGRAHA
+0CBE;N # KANNADA VOWEL SIGN AA
+0CBF;N # KANNADA VOWEL SIGN I
+0CC0;N # KANNADA VOWEL SIGN II
+0CC1;N # KANNADA VOWEL SIGN U
+0CC2;N # KANNADA VOWEL SIGN UU
+0CC3;N # KANNADA VOWEL SIGN VOCALIC R
+0CC4;N # KANNADA VOWEL SIGN VOCALIC RR
+0CC6;N # KANNADA VOWEL SIGN E
+0CC7;N # KANNADA VOWEL SIGN EE
+0CC8;N # KANNADA VOWEL SIGN AI
+0CCA;N # KANNADA VOWEL SIGN O
+0CCB;N # KANNADA VOWEL SIGN OO
+0CCC;N # KANNADA VOWEL SIGN AU
+0CCD;N # KANNADA SIGN VIRAMA
+0CD5;N # KANNADA LENGTH MARK
+0CD6;N # KANNADA AI LENGTH MARK
+0CDE;N # KANNADA LETTER FA
+0CE0;N # KANNADA LETTER VOCALIC RR
+0CE1;N # KANNADA LETTER VOCALIC LL
+0CE6;N # KANNADA DIGIT ZERO
+0CE7;N # KANNADA DIGIT ONE
+0CE8;N # KANNADA DIGIT TWO
+0CE9;N # KANNADA DIGIT THREE
+0CEA;N # KANNADA DIGIT FOUR
+0CEB;N # KANNADA DIGIT FIVE
+0CEC;N # KANNADA DIGIT SIX
+0CED;N # KANNADA DIGIT SEVEN
+0CEE;N # KANNADA DIGIT EIGHT
+0CEF;N # KANNADA DIGIT NINE
+0D02;N # MALAYALAM SIGN ANUSVARA
+0D03;N # MALAYALAM SIGN VISARGA
+0D05;N # MALAYALAM LETTER A
+0D06;N # MALAYALAM LETTER AA
+0D07;N # MALAYALAM LETTER I
+0D08;N # MALAYALAM LETTER II
+0D09;N # MALAYALAM LETTER U
+0D0A;N # MALAYALAM LETTER UU
+0D0B;N # MALAYALAM LETTER VOCALIC R
+0D0C;N # MALAYALAM LETTER VOCALIC L
+0D0E;N # MALAYALAM LETTER E
+0D0F;N # MALAYALAM LETTER EE
+0D10;N # MALAYALAM LETTER AI
+0D12;N # MALAYALAM LETTER O
+0D13;N # MALAYALAM LETTER OO
+0D14;N # MALAYALAM LETTER AU
+0D15;N # MALAYALAM LETTER KA
+0D16;N # MALAYALAM LETTER KHA
+0D17;N # MALAYALAM LETTER GA
+0D18;N # MALAYALAM LETTER GHA
+0D19;N # MALAYALAM LETTER NGA
+0D1A;N # MALAYALAM LETTER CA
+0D1B;N # MALAYALAM LETTER CHA
+0D1C;N # MALAYALAM LETTER JA
+0D1D;N # MALAYALAM LETTER JHA
+0D1E;N # MALAYALAM LETTER NYA
+0D1F;N # MALAYALAM LETTER TTA
+0D20;N # MALAYALAM LETTER TTHA
+0D21;N # MALAYALAM LETTER DDA
+0D22;N # MALAYALAM LETTER DDHA
+0D23;N # MALAYALAM LETTER NNA
+0D24;N # MALAYALAM LETTER TA
+0D25;N # MALAYALAM LETTER THA
+0D26;N # MALAYALAM LETTER DA
+0D27;N # MALAYALAM LETTER DHA
+0D28;N # MALAYALAM LETTER NA
+0D2A;N # MALAYALAM LETTER PA
+0D2B;N # MALAYALAM LETTER PHA
+0D2C;N # MALAYALAM LETTER BA
+0D2D;N # MALAYALAM LETTER BHA
+0D2E;N # MALAYALAM LETTER MA
+0D2F;N # MALAYALAM LETTER YA
+0D30;N # MALAYALAM LETTER RA
+0D31;N # MALAYALAM LETTER RRA
+0D32;N # MALAYALAM LETTER LA
+0D33;N # MALAYALAM LETTER LLA
+0D34;N # MALAYALAM LETTER LLLA
+0D35;N # MALAYALAM LETTER VA
+0D36;N # MALAYALAM LETTER SHA
+0D37;N # MALAYALAM LETTER SSA
+0D38;N # MALAYALAM LETTER SA
+0D39;N # MALAYALAM LETTER HA
+0D3E;N # MALAYALAM VOWEL SIGN AA
+0D3F;N # MALAYALAM VOWEL SIGN I
+0D40;N # MALAYALAM VOWEL SIGN II
+0D41;N # MALAYALAM VOWEL SIGN U
+0D42;N # MALAYALAM VOWEL SIGN UU
+0D43;N # MALAYALAM VOWEL SIGN VOCALIC R
+0D46;N # MALAYALAM VOWEL SIGN E
+0D47;N # MALAYALAM VOWEL SIGN EE
+0D48;N # MALAYALAM VOWEL SIGN AI
+0D4A;N # MALAYALAM VOWEL SIGN O
+0D4B;N # MALAYALAM VOWEL SIGN OO
+0D4C;N # MALAYALAM VOWEL SIGN AU
+0D4D;N # MALAYALAM SIGN VIRAMA
+0D57;N # MALAYALAM AU LENGTH MARK
+0D60;N # MALAYALAM LETTER VOCALIC RR
+0D61;N # MALAYALAM LETTER VOCALIC LL
+0D66;N # MALAYALAM DIGIT ZERO
+0D67;N # MALAYALAM DIGIT ONE
+0D68;N # MALAYALAM DIGIT TWO
+0D69;N # MALAYALAM DIGIT THREE
+0D6A;N # MALAYALAM DIGIT FOUR
+0D6B;N # MALAYALAM DIGIT FIVE
+0D6C;N # MALAYALAM DIGIT SIX
+0D6D;N # MALAYALAM DIGIT SEVEN
+0D6E;N # MALAYALAM DIGIT EIGHT
+0D6F;N # MALAYALAM DIGIT NINE
+0D82;N # SINHALA SIGN ANUSVARAYA
+0D83;N # SINHALA SIGN VISARGAYA
+0D85;N # SINHALA LETTER AYANNA
+0D86;N # SINHALA LETTER AAYANNA
+0D87;N # SINHALA LETTER AEYANNA
+0D88;N # SINHALA LETTER AEEYANNA
+0D89;N # SINHALA LETTER IYANNA
+0D8A;N # SINHALA LETTER IIYANNA
+0D8B;N # SINHALA LETTER UYANNA
+0D8C;N # SINHALA LETTER UUYANNA
+0D8D;N # SINHALA LETTER IRUYANNA
+0D8E;N # SINHALA LETTER IRUUYANNA
+0D8F;N # SINHALA LETTER ILUYANNA
+0D90;N # SINHALA LETTER ILUUYANNA
+0D91;N # SINHALA LETTER EYANNA
+0D92;N # SINHALA LETTER EEYANNA
+0D93;N # SINHALA LETTER AIYANNA
+0D94;N # SINHALA LETTER OYANNA
+0D95;N # SINHALA LETTER OOYANNA
+0D96;N # SINHALA LETTER AUYANNA
+0D9A;N # SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B;N # SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C;N # SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D;N # SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E;N # SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F;N # SINHALA LETTER SANYAKA GAYANNA
+0DA0;N # SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1;N # SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2;N # SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3;N # SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4;N # SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5;N # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6;N # SINHALA LETTER SANYAKA JAYANNA
+0DA7;N # SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8;N # SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9;N # SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA;N # SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB;N # SINHALA LETTER MUURDHAJA NAYANNA
+0DAC;N # SINHALA LETTER SANYAKA DDAYANNA
+0DAD;N # SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE;N # SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF;N # SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0;N # SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1;N # SINHALA LETTER DANTAJA NAYANNA
+0DB3;N # SINHALA LETTER SANYAKA DAYANNA
+0DB4;N # SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5;N # SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6;N # SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7;N # SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8;N # SINHALA LETTER MAYANNA
+0DB9;N # SINHALA LETTER AMBA BAYANNA
+0DBA;N # SINHALA LETTER YAYANNA
+0DBB;N # SINHALA LETTER RAYANNA
+0DBD;N # SINHALA LETTER DANTAJA LAYANNA
+0DC0;N # SINHALA LETTER VAYANNA
+0DC1;N # SINHALA LETTER TAALUJA SAYANNA
+0DC2;N # SINHALA LETTER MUURDHAJA SAYANNA
+0DC3;N # SINHALA LETTER DANTAJA SAYANNA
+0DC4;N # SINHALA LETTER HAYANNA
+0DC5;N # SINHALA LETTER MUURDHAJA LAYANNA
+0DC6;N # SINHALA LETTER FAYANNA
+0DCA;N # SINHALA SIGN AL-LAKUNA
+0DCF;N # SINHALA VOWEL SIGN AELA-PILLA
+0DD0;N # SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1;N # SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2;N # SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3;N # SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4;N # SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6;N # SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8;N # SINHALA VOWEL SIGN GAETTA-PILLA
+0DD9;N # SINHALA VOWEL SIGN KOMBUVA
+0DDA;N # SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB;N # SINHALA VOWEL SIGN KOMBU DEKA
+0DDC;N # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD;N # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE;N # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DDF;N # SINHALA VOWEL SIGN GAYANUKITTA
+0DF2;N # SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DF3;N # SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4;N # SINHALA PUNCTUATION KUNDDALIYA
+0E01;N # THAI CHARACTER KO KAI
+0E02;N # THAI CHARACTER KHO KHAI
+0E03;N # THAI CHARACTER KHO KHUAT
+0E04;N # THAI CHARACTER KHO KHWAI
+0E05;N # THAI CHARACTER KHO KHON
+0E06;N # THAI CHARACTER KHO RAKHANG
+0E07;N # THAI CHARACTER NGO NGU
+0E08;N # THAI CHARACTER CHO CHAN
+0E09;N # THAI CHARACTER CHO CHING
+0E0A;N # THAI CHARACTER CHO CHANG
+0E0B;N # THAI CHARACTER SO SO
+0E0C;N # THAI CHARACTER CHO CHOE
+0E0D;N # THAI CHARACTER YO YING
+0E0E;N # THAI CHARACTER DO CHADA
+0E0F;N # THAI CHARACTER TO PATAK
+0E10;N # THAI CHARACTER THO THAN
+0E11;N # THAI CHARACTER THO NANGMONTHO
+0E12;N # THAI CHARACTER THO PHUTHAO
+0E13;N # THAI CHARACTER NO NEN
+0E14;N # THAI CHARACTER DO DEK
+0E15;N # THAI CHARACTER TO TAO
+0E16;N # THAI CHARACTER THO THUNG
+0E17;N # THAI CHARACTER THO THAHAN
+0E18;N # THAI CHARACTER THO THONG
+0E19;N # THAI CHARACTER NO NU
+0E1A;N # THAI CHARACTER BO BAIMAI
+0E1B;N # THAI CHARACTER PO PLA
+0E1C;N # THAI CHARACTER PHO PHUNG
+0E1D;N # THAI CHARACTER FO FA
+0E1E;N # THAI CHARACTER PHO PHAN
+0E1F;N # THAI CHARACTER FO FAN
+0E20;N # THAI CHARACTER PHO SAMPHAO
+0E21;N # THAI CHARACTER MO MA
+0E22;N # THAI CHARACTER YO YAK
+0E23;N # THAI CHARACTER RO RUA
+0E24;N # THAI CHARACTER RU
+0E25;N # THAI CHARACTER LO LING
+0E26;N # THAI CHARACTER LU
+0E27;N # THAI CHARACTER WO WAEN
+0E28;N # THAI CHARACTER SO SALA
+0E29;N # THAI CHARACTER SO RUSI
+0E2A;N # THAI CHARACTER SO SUA
+0E2B;N # THAI CHARACTER HO HIP
+0E2C;N # THAI CHARACTER LO CHULA
+0E2D;N # THAI CHARACTER O ANG
+0E2E;N # THAI CHARACTER HO NOKHUK
+0E2F;N # THAI CHARACTER PAIYANNOI
+0E30;N # THAI CHARACTER SARA A
+0E31;N # THAI CHARACTER MAI HAN-AKAT
+0E32;N # THAI CHARACTER SARA AA
+0E33;N # THAI CHARACTER SARA AM
+0E34;N # THAI CHARACTER SARA I
+0E35;N # THAI CHARACTER SARA II
+0E36;N # THAI CHARACTER SARA UE
+0E37;N # THAI CHARACTER SARA UEE
+0E38;N # THAI CHARACTER SARA U
+0E39;N # THAI CHARACTER SARA UU
+0E3A;N # THAI CHARACTER PHINTHU
+0E3F;N # THAI CURRENCY SYMBOL BAHT
+0E40;N # THAI CHARACTER SARA E
+0E41;N # THAI CHARACTER SARA AE
+0E42;N # THAI CHARACTER SARA O
+0E43;N # THAI CHARACTER SARA AI MAIMUAN
+0E44;N # THAI CHARACTER SARA AI MAIMALAI
+0E45;N # THAI CHARACTER LAKKHANGYAO
+0E46;N # THAI CHARACTER MAIYAMOK
+0E47;N # THAI CHARACTER MAITAIKHU
+0E48;N # THAI CHARACTER MAI EK
+0E49;N # THAI CHARACTER MAI THO
+0E4A;N # THAI CHARACTER MAI TRI
+0E4B;N # THAI CHARACTER MAI CHATTAWA
+0E4C;N # THAI CHARACTER THANTHAKHAT
+0E4D;N # THAI CHARACTER NIKHAHIT
+0E4E;N # THAI CHARACTER YAMAKKAN
+0E4F;N # THAI CHARACTER FONGMAN
+0E50;N # THAI DIGIT ZERO
+0E51;N # THAI DIGIT ONE
+0E52;N # THAI DIGIT TWO
+0E53;N # THAI DIGIT THREE
+0E54;N # THAI DIGIT FOUR
+0E55;N # THAI DIGIT FIVE
+0E56;N # THAI DIGIT SIX
+0E57;N # THAI DIGIT SEVEN
+0E58;N # THAI DIGIT EIGHT
+0E59;N # THAI DIGIT NINE
+0E5A;N # THAI CHARACTER ANGKHANKHU
+0E5B;N # THAI CHARACTER KHOMUT
+0E81;N # LAO LETTER KO
+0E82;N # LAO LETTER KHO SUNG
+0E84;N # LAO LETTER KHO TAM
+0E87;N # LAO LETTER NGO
+0E88;N # LAO LETTER CO
+0E8A;N # LAO LETTER SO TAM
+0E8D;N # LAO LETTER NYO
+0E94;N # LAO LETTER DO
+0E95;N # LAO LETTER TO
+0E96;N # LAO LETTER THO SUNG
+0E97;N # LAO LETTER THO TAM
+0E99;N # LAO LETTER NO
+0E9A;N # LAO LETTER BO
+0E9B;N # LAO LETTER PO
+0E9C;N # LAO LETTER PHO SUNG
+0E9D;N # LAO LETTER FO TAM
+0E9E;N # LAO LETTER PHO TAM
+0E9F;N # LAO LETTER FO SUNG
+0EA1;N # LAO LETTER MO
+0EA2;N # LAO LETTER YO
+0EA3;N # LAO LETTER LO LING
+0EA5;N # LAO LETTER LO LOOT
+0EA7;N # LAO LETTER WO
+0EAA;N # LAO LETTER SO SUNG
+0EAB;N # LAO LETTER HO SUNG
+0EAD;N # LAO LETTER O
+0EAE;N # LAO LETTER HO TAM
+0EAF;N # LAO ELLIPSIS
+0EB0;N # LAO VOWEL SIGN A
+0EB1;N # LAO VOWEL SIGN MAI KAN
+0EB2;N # LAO VOWEL SIGN AA
+0EB3;N # LAO VOWEL SIGN AM
+0EB4;N # LAO VOWEL SIGN I
+0EB5;N # LAO VOWEL SIGN II
+0EB6;N # LAO VOWEL SIGN Y
+0EB7;N # LAO VOWEL SIGN YY
+0EB8;N # LAO VOWEL SIGN U
+0EB9;N # LAO VOWEL SIGN UU
+0EBB;N # LAO VOWEL SIGN MAI KON
+0EBC;N # LAO SEMIVOWEL SIGN LO
+0EBD;N # LAO SEMIVOWEL SIGN NYO
+0EC0;N # LAO VOWEL SIGN E
+0EC1;N # LAO VOWEL SIGN EI
+0EC2;N # LAO VOWEL SIGN O
+0EC3;N # LAO VOWEL SIGN AY
+0EC4;N # LAO VOWEL SIGN AI
+0EC6;N # LAO KO LA
+0EC8;N # LAO TONE MAI EK
+0EC9;N # LAO TONE MAI THO
+0ECA;N # LAO TONE MAI TI
+0ECB;N # LAO TONE MAI CATAWA
+0ECC;N # LAO CANCELLATION MARK
+0ECD;N # LAO NIGGAHITA
+0ED0;N # LAO DIGIT ZERO
+0ED1;N # LAO DIGIT ONE
+0ED2;N # LAO DIGIT TWO
+0ED3;N # LAO DIGIT THREE
+0ED4;N # LAO DIGIT FOUR
+0ED5;N # LAO DIGIT FIVE
+0ED6;N # LAO DIGIT SIX
+0ED7;N # LAO DIGIT SEVEN
+0ED8;N # LAO DIGIT EIGHT
+0ED9;N # LAO DIGIT NINE
+0EDC;N # LAO HO NO
+0EDD;N # LAO HO MO
+0F00;N # TIBETAN SYLLABLE OM
+0F01;N # TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02;N # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03;N # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04;N # TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05;N # TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06;N # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07;N # TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08;N # TIBETAN MARK SBRUL SHAD
+0F09;N # TIBETAN MARK BSKUR YIG MGO
+0F0A;N # TIBETAN MARK BKA- SHOG YIG MGO
+0F0B;N # TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C;N # TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D;N # TIBETAN MARK SHAD
+0F0E;N # TIBETAN MARK NYIS SHAD
+0F0F;N # TIBETAN MARK TSHEG SHAD
+0F10;N # TIBETAN MARK NYIS TSHEG SHAD
+0F11;N # TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12;N # TIBETAN MARK RGYA GRAM SHAD
+0F13;N # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14;N # TIBETAN MARK GTER TSHEG
+0F15;N # TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16;N # TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17;N # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18;N # TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19;N # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A;N # TIBETAN SIGN RDEL DKAR GCIG
+0F1B;N # TIBETAN SIGN RDEL DKAR GNYIS
+0F1C;N # TIBETAN SIGN RDEL DKAR GSUM
+0F1D;N # TIBETAN SIGN RDEL NAG GCIG
+0F1E;N # TIBETAN SIGN RDEL NAG GNYIS
+0F1F;N # TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20;N # TIBETAN DIGIT ZERO
+0F21;N # TIBETAN DIGIT ONE
+0F22;N # TIBETAN DIGIT TWO
+0F23;N # TIBETAN DIGIT THREE
+0F24;N # TIBETAN DIGIT FOUR
+0F25;N # TIBETAN DIGIT FIVE
+0F26;N # TIBETAN DIGIT SIX
+0F27;N # TIBETAN DIGIT SEVEN
+0F28;N # TIBETAN DIGIT EIGHT
+0F29;N # TIBETAN DIGIT NINE
+0F2A;N # TIBETAN DIGIT HALF ONE
+0F2B;N # TIBETAN DIGIT HALF TWO
+0F2C;N # TIBETAN DIGIT HALF THREE
+0F2D;N # TIBETAN DIGIT HALF FOUR
+0F2E;N # TIBETAN DIGIT HALF FIVE
+0F2F;N # TIBETAN DIGIT HALF SIX
+0F30;N # TIBETAN DIGIT HALF SEVEN
+0F31;N # TIBETAN DIGIT HALF EIGHT
+0F32;N # TIBETAN DIGIT HALF NINE
+0F33;N # TIBETAN DIGIT HALF ZERO
+0F34;N # TIBETAN MARK BSDUS RTAGS
+0F35;N # TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36;N # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37;N # TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38;N # TIBETAN MARK CHE MGO
+0F39;N # TIBETAN MARK TSA -PHRU
+0F3A;N # TIBETAN MARK GUG RTAGS GYON
+0F3B;N # TIBETAN MARK GUG RTAGS GYAS
+0F3C;N # TIBETAN MARK ANG KHANG GYON
+0F3D;N # TIBETAN MARK ANG KHANG GYAS
+0F3E;N # TIBETAN SIGN YAR TSHES
+0F3F;N # TIBETAN SIGN MAR TSHES
+0F40;N # TIBETAN LETTER KA
+0F41;N # TIBETAN LETTER KHA
+0F42;N # TIBETAN LETTER GA
+0F43;N # TIBETAN LETTER GHA
+0F44;N # TIBETAN LETTER NGA
+0F45;N # TIBETAN LETTER CA
+0F46;N # TIBETAN LETTER CHA
+0F47;N # TIBETAN LETTER JA
+0F49;N # TIBETAN LETTER NYA
+0F4A;N # TIBETAN LETTER TTA
+0F4B;N # TIBETAN LETTER TTHA
+0F4C;N # TIBETAN LETTER DDA
+0F4D;N # TIBETAN LETTER DDHA
+0F4E;N # TIBETAN LETTER NNA
+0F4F;N # TIBETAN LETTER TA
+0F50;N # TIBETAN LETTER THA
+0F51;N # TIBETAN LETTER DA
+0F52;N # TIBETAN LETTER DHA
+0F53;N # TIBETAN LETTER NA
+0F54;N # TIBETAN LETTER PA
+0F55;N # TIBETAN LETTER PHA
+0F56;N # TIBETAN LETTER BA
+0F57;N # TIBETAN LETTER BHA
+0F58;N # TIBETAN LETTER MA
+0F59;N # TIBETAN LETTER TSA
+0F5A;N # TIBETAN LETTER TSHA
+0F5B;N # TIBETAN LETTER DZA
+0F5C;N # TIBETAN LETTER DZHA
+0F5D;N # TIBETAN LETTER WA
+0F5E;N # TIBETAN LETTER ZHA
+0F5F;N # TIBETAN LETTER ZA
+0F60;N # TIBETAN LETTER -A
+0F61;N # TIBETAN LETTER YA
+0F62;N # TIBETAN LETTER RA
+0F63;N # TIBETAN LETTER LA
+0F64;N # TIBETAN LETTER SHA
+0F65;N # TIBETAN LETTER SSA
+0F66;N # TIBETAN LETTER SA
+0F67;N # TIBETAN LETTER HA
+0F68;N # TIBETAN LETTER A
+0F69;N # TIBETAN LETTER KSSA
+0F6A;N # TIBETAN LETTER FIXED-FORM RA
+0F71;N # TIBETAN VOWEL SIGN AA
+0F72;N # TIBETAN VOWEL SIGN I
+0F73;N # TIBETAN VOWEL SIGN II
+0F74;N # TIBETAN VOWEL SIGN U
+0F75;N # TIBETAN VOWEL SIGN UU
+0F76;N # TIBETAN VOWEL SIGN VOCALIC R
+0F77;N # TIBETAN VOWEL SIGN VOCALIC RR
+0F78;N # TIBETAN VOWEL SIGN VOCALIC L
+0F79;N # TIBETAN VOWEL SIGN VOCALIC LL
+0F7A;N # TIBETAN VOWEL SIGN E
+0F7B;N # TIBETAN VOWEL SIGN EE
+0F7C;N # TIBETAN VOWEL SIGN O
+0F7D;N # TIBETAN VOWEL SIGN OO
+0F7E;N # TIBETAN SIGN RJES SU NGA RO
+0F7F;N # TIBETAN SIGN RNAM BCAD
+0F80;N # TIBETAN VOWEL SIGN REVERSED I
+0F81;N # TIBETAN VOWEL SIGN REVERSED II
+0F82;N # TIBETAN SIGN NYI ZLA NAA DA
+0F83;N # TIBETAN SIGN SNA LDAN
+0F84;N # TIBETAN MARK HALANTA
+0F85;N # TIBETAN MARK PALUTA
+0F86;N # TIBETAN SIGN LCI RTAGS
+0F87;N # TIBETAN SIGN YANG RTAGS
+0F88;N # TIBETAN SIGN LCE TSA CAN
+0F89;N # TIBETAN SIGN MCHU CAN
+0F8A;N # TIBETAN SIGN GRU CAN RGYINGS
+0F8B;N # TIBETAN SIGN GRU MED RGYINGS
+0F90;N # TIBETAN SUBJOINED LETTER KA
+0F91;N # TIBETAN SUBJOINED LETTER KHA
+0F92;N # TIBETAN SUBJOINED LETTER GA
+0F93;N # TIBETAN SUBJOINED LETTER GHA
+0F94;N # TIBETAN SUBJOINED LETTER NGA
+0F95;N # TIBETAN SUBJOINED LETTER CA
+0F96;N # TIBETAN SUBJOINED LETTER CHA
+0F97;N # TIBETAN SUBJOINED LETTER JA
+0F99;N # TIBETAN SUBJOINED LETTER NYA
+0F9A;N # TIBETAN SUBJOINED LETTER TTA
+0F9B;N # TIBETAN SUBJOINED LETTER TTHA
+0F9C;N # TIBETAN SUBJOINED LETTER DDA
+0F9D;N # TIBETAN SUBJOINED LETTER DDHA
+0F9E;N # TIBETAN SUBJOINED LETTER NNA
+0F9F;N # TIBETAN SUBJOINED LETTER TA
+0FA0;N # TIBETAN SUBJOINED LETTER THA
+0FA1;N # TIBETAN SUBJOINED LETTER DA
+0FA2;N # TIBETAN SUBJOINED LETTER DHA
+0FA3;N # TIBETAN SUBJOINED LETTER NA
+0FA4;N # TIBETAN SUBJOINED LETTER PA
+0FA5;N # TIBETAN SUBJOINED LETTER PHA
+0FA6;N # TIBETAN SUBJOINED LETTER BA
+0FA7;N # TIBETAN SUBJOINED LETTER BHA
+0FA8;N # TIBETAN SUBJOINED LETTER MA
+0FA9;N # TIBETAN SUBJOINED LETTER TSA
+0FAA;N # TIBETAN SUBJOINED LETTER TSHA
+0FAB;N # TIBETAN SUBJOINED LETTER DZA
+0FAC;N # TIBETAN SUBJOINED LETTER DZHA
+0FAD;N # TIBETAN SUBJOINED LETTER WA
+0FAE;N # TIBETAN SUBJOINED LETTER ZHA
+0FAF;N # TIBETAN SUBJOINED LETTER ZA
+0FB0;N # TIBETAN SUBJOINED LETTER -A
+0FB1;N # TIBETAN SUBJOINED LETTER YA
+0FB2;N # TIBETAN SUBJOINED LETTER RA
+0FB3;N # TIBETAN SUBJOINED LETTER LA
+0FB4;N # TIBETAN SUBJOINED LETTER SHA
+0FB5;N # TIBETAN SUBJOINED LETTER SSA
+0FB6;N # TIBETAN SUBJOINED LETTER SA
+0FB7;N # TIBETAN SUBJOINED LETTER HA
+0FB8;N # TIBETAN SUBJOINED LETTER A
+0FB9;N # TIBETAN SUBJOINED LETTER KSSA
+0FBA;N # TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0FBB;N # TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0FBC;N # TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE;N # TIBETAN KU RU KHA
+0FBF;N # TIBETAN KU RU KHA BZHI MIG CAN
+0FC0;N # TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1;N # TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2;N # TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3;N # TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4;N # TIBETAN SYMBOL DRIL BU
+0FC5;N # TIBETAN SYMBOL RDO RJE
+0FC6;N # TIBETAN SYMBOL PADMA GDAN
+0FC7;N # TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8;N # TIBETAN SYMBOL PHUR PA
+0FC9;N # TIBETAN SYMBOL NOR BU
+0FCA;N # TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB;N # TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC;N # TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF;N # TIBETAN SIGN RDEL NAG GSUM
+0FD0;N # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1;N # TIBETAN MARK MNYAM YIG GI MGO RGYAN
+1000;N # MYANMAR LETTER KA
+1001;N # MYANMAR LETTER KHA
+1002;N # MYANMAR LETTER GA
+1003;N # MYANMAR LETTER GHA
+1004;N # MYANMAR LETTER NGA
+1005;N # MYANMAR LETTER CA
+1006;N # MYANMAR LETTER CHA
+1007;N # MYANMAR LETTER JA
+1008;N # MYANMAR LETTER JHA
+1009;N # MYANMAR LETTER NYA
+100A;N # MYANMAR LETTER NNYA
+100B;N # MYANMAR LETTER TTA
+100C;N # MYANMAR LETTER TTHA
+100D;N # MYANMAR LETTER DDA
+100E;N # MYANMAR LETTER DDHA
+100F;N # MYANMAR LETTER NNA
+1010;N # MYANMAR LETTER TA
+1011;N # MYANMAR LETTER THA
+1012;N # MYANMAR LETTER DA
+1013;N # MYANMAR LETTER DHA
+1014;N # MYANMAR LETTER NA
+1015;N # MYANMAR LETTER PA
+1016;N # MYANMAR LETTER PHA
+1017;N # MYANMAR LETTER BA
+1018;N # MYANMAR LETTER BHA
+1019;N # MYANMAR LETTER MA
+101A;N # MYANMAR LETTER YA
+101B;N # MYANMAR LETTER RA
+101C;N # MYANMAR LETTER LA
+101D;N # MYANMAR LETTER WA
+101E;N # MYANMAR LETTER SA
+101F;N # MYANMAR LETTER HA
+1020;N # MYANMAR LETTER LLA
+1021;N # MYANMAR LETTER A
+1023;N # MYANMAR LETTER I
+1024;N # MYANMAR LETTER II
+1025;N # MYANMAR LETTER U
+1026;N # MYANMAR LETTER UU
+1027;N # MYANMAR LETTER E
+1029;N # MYANMAR LETTER O
+102A;N # MYANMAR LETTER AU
+102C;N # MYANMAR VOWEL SIGN AA
+102D;N # MYANMAR VOWEL SIGN I
+102E;N # MYANMAR VOWEL SIGN II
+102F;N # MYANMAR VOWEL SIGN U
+1030;N # MYANMAR VOWEL SIGN UU
+1031;N # MYANMAR VOWEL SIGN E
+1032;N # MYANMAR VOWEL SIGN AI
+1036;N # MYANMAR SIGN ANUSVARA
+1037;N # MYANMAR SIGN DOT BELOW
+1038;N # MYANMAR SIGN VISARGA
+1039;N # MYANMAR SIGN VIRAMA
+1040;N # MYANMAR DIGIT ZERO
+1041;N # MYANMAR DIGIT ONE
+1042;N # MYANMAR DIGIT TWO
+1043;N # MYANMAR DIGIT THREE
+1044;N # MYANMAR DIGIT FOUR
+1045;N # MYANMAR DIGIT FIVE
+1046;N # MYANMAR DIGIT SIX
+1047;N # MYANMAR DIGIT SEVEN
+1048;N # MYANMAR DIGIT EIGHT
+1049;N # MYANMAR DIGIT NINE
+104A;N # MYANMAR SIGN LITTLE SECTION
+104B;N # MYANMAR SIGN SECTION
+104C;N # MYANMAR SYMBOL LOCATIVE
+104D;N # MYANMAR SYMBOL COMPLETED
+104E;N # MYANMAR SYMBOL AFOREMENTIONED
+104F;N # MYANMAR SYMBOL GENITIVE
+1050;N # MYANMAR LETTER SHA
+1051;N # MYANMAR LETTER SSA
+1052;N # MYANMAR LETTER VOCALIC R
+1053;N # MYANMAR LETTER VOCALIC RR
+1054;N # MYANMAR LETTER VOCALIC L
+1055;N # MYANMAR LETTER VOCALIC LL
+1056;N # MYANMAR VOWEL SIGN VOCALIC R
+1057;N # MYANMAR VOWEL SIGN VOCALIC RR
+1058;N # MYANMAR VOWEL SIGN VOCALIC L
+1059;N # MYANMAR VOWEL SIGN VOCALIC LL
+10A0;N # GEORGIAN CAPITAL LETTER AN
+10A1;N # GEORGIAN CAPITAL LETTER BAN
+10A2;N # GEORGIAN CAPITAL LETTER GAN
+10A3;N # GEORGIAN CAPITAL LETTER DON
+10A4;N # GEORGIAN CAPITAL LETTER EN
+10A5;N # GEORGIAN CAPITAL LETTER VIN
+10A6;N # GEORGIAN CAPITAL LETTER ZEN
+10A7;N # GEORGIAN CAPITAL LETTER TAN
+10A8;N # GEORGIAN CAPITAL LETTER IN
+10A9;N # GEORGIAN CAPITAL LETTER KAN
+10AA;N # GEORGIAN CAPITAL LETTER LAS
+10AB;N # GEORGIAN CAPITAL LETTER MAN
+10AC;N # GEORGIAN CAPITAL LETTER NAR
+10AD;N # GEORGIAN CAPITAL LETTER ON
+10AE;N # GEORGIAN CAPITAL LETTER PAR
+10AF;N # GEORGIAN CAPITAL LETTER ZHAR
+10B0;N # GEORGIAN CAPITAL LETTER RAE
+10B1;N # GEORGIAN CAPITAL LETTER SAN
+10B2;N # GEORGIAN CAPITAL LETTER TAR
+10B3;N # GEORGIAN CAPITAL LETTER UN
+10B4;N # GEORGIAN CAPITAL LETTER PHAR
+10B5;N # GEORGIAN CAPITAL LETTER KHAR
+10B6;N # GEORGIAN CAPITAL LETTER GHAN
+10B7;N # GEORGIAN CAPITAL LETTER QAR
+10B8;N # GEORGIAN CAPITAL LETTER SHIN
+10B9;N # GEORGIAN CAPITAL LETTER CHIN
+10BA;N # GEORGIAN CAPITAL LETTER CAN
+10BB;N # GEORGIAN CAPITAL LETTER JIL
+10BC;N # GEORGIAN CAPITAL LETTER CIL
+10BD;N # GEORGIAN CAPITAL LETTER CHAR
+10BE;N # GEORGIAN CAPITAL LETTER XAN
+10BF;N # GEORGIAN CAPITAL LETTER JHAN
+10C0;N # GEORGIAN CAPITAL LETTER HAE
+10C1;N # GEORGIAN CAPITAL LETTER HE
+10C2;N # GEORGIAN CAPITAL LETTER HIE
+10C3;N # GEORGIAN CAPITAL LETTER WE
+10C4;N # GEORGIAN CAPITAL LETTER HAR
+10C5;N # GEORGIAN CAPITAL LETTER HOE
+10D0;N # GEORGIAN LETTER AN
+10D1;N # GEORGIAN LETTER BAN
+10D2;N # GEORGIAN LETTER GAN
+10D3;N # GEORGIAN LETTER DON
+10D4;N # GEORGIAN LETTER EN
+10D5;N # GEORGIAN LETTER VIN
+10D6;N # GEORGIAN LETTER ZEN
+10D7;N # GEORGIAN LETTER TAN
+10D8;N # GEORGIAN LETTER IN
+10D9;N # GEORGIAN LETTER KAN
+10DA;N # GEORGIAN LETTER LAS
+10DB;N # GEORGIAN LETTER MAN
+10DC;N # GEORGIAN LETTER NAR
+10DD;N # GEORGIAN LETTER ON
+10DE;N # GEORGIAN LETTER PAR
+10DF;N # GEORGIAN LETTER ZHAR
+10E0;N # GEORGIAN LETTER RAE
+10E1;N # GEORGIAN LETTER SAN
+10E2;N # GEORGIAN LETTER TAR
+10E3;N # GEORGIAN LETTER UN
+10E4;N # GEORGIAN LETTER PHAR
+10E5;N # GEORGIAN LETTER KHAR
+10E6;N # GEORGIAN LETTER GHAN
+10E7;N # GEORGIAN LETTER QAR
+10E8;N # GEORGIAN LETTER SHIN
+10E9;N # GEORGIAN LETTER CHIN
+10EA;N # GEORGIAN LETTER CAN
+10EB;N # GEORGIAN LETTER JIL
+10EC;N # GEORGIAN LETTER CIL
+10ED;N # GEORGIAN LETTER CHAR
+10EE;N # GEORGIAN LETTER XAN
+10EF;N # GEORGIAN LETTER JHAN
+10F0;N # GEORGIAN LETTER HAE
+10F1;N # GEORGIAN LETTER HE
+10F2;N # GEORGIAN LETTER HIE
+10F3;N # GEORGIAN LETTER WE
+10F4;N # GEORGIAN LETTER HAR
+10F5;N # GEORGIAN LETTER HOE
+10F6;N # GEORGIAN LETTER FI
+10F7;N # GEORGIAN LETTER YN
+10F8;N # GEORGIAN LETTER ELIFI
+10F9;N # GEORGIAN LETTER TURNED GAN
+10FA;N # GEORGIAN LETTER AIN
+10FB;N # GEORGIAN PARAGRAPH SEPARATOR
+10FC;N # MODIFIER LETTER GEORGIAN NAR
+1100;W # HANGUL CHOSEONG KIYEOK
+1101;W # HANGUL CHOSEONG SSANGKIYEOK
+1102;W # HANGUL CHOSEONG NIEUN
+1103;W # HANGUL CHOSEONG TIKEUT
+1104;W # HANGUL CHOSEONG SSANGTIKEUT
+1105;W # HANGUL CHOSEONG RIEUL
+1106;W # HANGUL CHOSEONG MIEUM
+1107;W # HANGUL CHOSEONG PIEUP
+1108;W # HANGUL CHOSEONG SSANGPIEUP
+1109;W # HANGUL CHOSEONG SIOS
+110A;W # HANGUL CHOSEONG SSANGSIOS
+110B;W # HANGUL CHOSEONG IEUNG
+110C;W # HANGUL CHOSEONG CIEUC
+110D;W # HANGUL CHOSEONG SSANGCIEUC
+110E;W # HANGUL CHOSEONG CHIEUCH
+110F;W # HANGUL CHOSEONG KHIEUKH
+1110;W # HANGUL CHOSEONG THIEUTH
+1111;W # HANGUL CHOSEONG PHIEUPH
+1112;W # HANGUL CHOSEONG HIEUH
+1113;W # HANGUL CHOSEONG NIEUN-KIYEOK
+1114;W # HANGUL CHOSEONG SSANGNIEUN
+1115;W # HANGUL CHOSEONG NIEUN-TIKEUT
+1116;W # HANGUL CHOSEONG NIEUN-PIEUP
+1117;W # HANGUL CHOSEONG TIKEUT-KIYEOK
+1118;W # HANGUL CHOSEONG RIEUL-NIEUN
+1119;W # HANGUL CHOSEONG SSANGRIEUL
+111A;W # HANGUL CHOSEONG RIEUL-HIEUH
+111B;W # HANGUL CHOSEONG KAPYEOUNRIEUL
+111C;W # HANGUL CHOSEONG MIEUM-PIEUP
+111D;W # HANGUL CHOSEONG KAPYEOUNMIEUM
+111E;W # HANGUL CHOSEONG PIEUP-KIYEOK
+111F;W # HANGUL CHOSEONG PIEUP-NIEUN
+1120;W # HANGUL CHOSEONG PIEUP-TIKEUT
+1121;W # HANGUL CHOSEONG PIEUP-SIOS
+1122;W # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123;W # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124;W # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125;W # HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126;W # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127;W # HANGUL CHOSEONG PIEUP-CIEUC
+1128;W # HANGUL CHOSEONG PIEUP-CHIEUCH
+1129;W # HANGUL CHOSEONG PIEUP-THIEUTH
+112A;W # HANGUL CHOSEONG PIEUP-PHIEUPH
+112B;W # HANGUL CHOSEONG KAPYEOUNPIEUP
+112C;W # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D;W # HANGUL CHOSEONG SIOS-KIYEOK
+112E;W # HANGUL CHOSEONG SIOS-NIEUN
+112F;W # HANGUL CHOSEONG SIOS-TIKEUT
+1130;W # HANGUL CHOSEONG SIOS-RIEUL
+1131;W # HANGUL CHOSEONG SIOS-MIEUM
+1132;W # HANGUL CHOSEONG SIOS-PIEUP
+1133;W # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134;W # HANGUL CHOSEONG SIOS-SSANGSIOS
+1135;W # HANGUL CHOSEONG SIOS-IEUNG
+1136;W # HANGUL CHOSEONG SIOS-CIEUC
+1137;W # HANGUL CHOSEONG SIOS-CHIEUCH
+1138;W # HANGUL CHOSEONG SIOS-KHIEUKH
+1139;W # HANGUL CHOSEONG SIOS-THIEUTH
+113A;W # HANGUL CHOSEONG SIOS-PHIEUPH
+113B;W # HANGUL CHOSEONG SIOS-HIEUH
+113C;W # HANGUL CHOSEONG CHITUEUMSIOS
+113D;W # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E;W # HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F;W # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140;W # HANGUL CHOSEONG PANSIOS
+1141;W # HANGUL CHOSEONG IEUNG-KIYEOK
+1142;W # HANGUL CHOSEONG IEUNG-TIKEUT
+1143;W # HANGUL CHOSEONG IEUNG-MIEUM
+1144;W # HANGUL CHOSEONG IEUNG-PIEUP
+1145;W # HANGUL CHOSEONG IEUNG-SIOS
+1146;W # HANGUL CHOSEONG IEUNG-PANSIOS
+1147;W # HANGUL CHOSEONG SSANGIEUNG
+1148;W # HANGUL CHOSEONG IEUNG-CIEUC
+1149;W # HANGUL CHOSEONG IEUNG-CHIEUCH
+114A;W # HANGUL CHOSEONG IEUNG-THIEUTH
+114B;W # HANGUL CHOSEONG IEUNG-PHIEUPH
+114C;W # HANGUL CHOSEONG YESIEUNG
+114D;W # HANGUL CHOSEONG CIEUC-IEUNG
+114E;W # HANGUL CHOSEONG CHITUEUMCIEUC
+114F;W # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150;W # HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151;W # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152;W # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153;W # HANGUL CHOSEONG CHIEUCH-HIEUH
+1154;W # HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155;W # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156;W # HANGUL CHOSEONG PHIEUPH-PIEUP
+1157;W # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158;W # HANGUL CHOSEONG SSANGHIEUH
+1159;W # HANGUL CHOSEONG YEORINHIEUH
+115F;W # HANGUL CHOSEONG FILLER
+1160;N # HANGUL JUNGSEONG FILLER
+1161;N # HANGUL JUNGSEONG A
+1162;N # HANGUL JUNGSEONG AE
+1163;N # HANGUL JUNGSEONG YA
+1164;N # HANGUL JUNGSEONG YAE
+1165;N # HANGUL JUNGSEONG EO
+1166;N # HANGUL JUNGSEONG E
+1167;N # HANGUL JUNGSEONG YEO
+1168;N # HANGUL JUNGSEONG YE
+1169;N # HANGUL JUNGSEONG O
+116A;N # HANGUL JUNGSEONG WA
+116B;N # HANGUL JUNGSEONG WAE
+116C;N # HANGUL JUNGSEONG OE
+116D;N # HANGUL JUNGSEONG YO
+116E;N # HANGUL JUNGSEONG U
+116F;N # HANGUL JUNGSEONG WEO
+1170;N # HANGUL JUNGSEONG WE
+1171;N # HANGUL JUNGSEONG WI
+1172;N # HANGUL JUNGSEONG YU
+1173;N # HANGUL JUNGSEONG EU
+1174;N # HANGUL JUNGSEONG YI
+1175;N # HANGUL JUNGSEONG I
+1176;N # HANGUL JUNGSEONG A-O
+1177;N # HANGUL JUNGSEONG A-U
+1178;N # HANGUL JUNGSEONG YA-O
+1179;N # HANGUL JUNGSEONG YA-YO
+117A;N # HANGUL JUNGSEONG EO-O
+117B;N # HANGUL JUNGSEONG EO-U
+117C;N # HANGUL JUNGSEONG EO-EU
+117D;N # HANGUL JUNGSEONG YEO-O
+117E;N # HANGUL JUNGSEONG YEO-U
+117F;N # HANGUL JUNGSEONG O-EO
+1180;N # HANGUL JUNGSEONG O-E
+1181;N # HANGUL JUNGSEONG O-YE
+1182;N # HANGUL JUNGSEONG O-O
+1183;N # HANGUL JUNGSEONG O-U
+1184;N # HANGUL JUNGSEONG YO-YA
+1185;N # HANGUL JUNGSEONG YO-YAE
+1186;N # HANGUL JUNGSEONG YO-YEO
+1187;N # HANGUL JUNGSEONG YO-O
+1188;N # HANGUL JUNGSEONG YO-I
+1189;N # HANGUL JUNGSEONG U-A
+118A;N # HANGUL JUNGSEONG U-AE
+118B;N # HANGUL JUNGSEONG U-EO-EU
+118C;N # HANGUL JUNGSEONG U-YE
+118D;N # HANGUL JUNGSEONG U-U
+118E;N # HANGUL JUNGSEONG YU-A
+118F;N # HANGUL JUNGSEONG YU-EO
+1190;N # HANGUL JUNGSEONG YU-E
+1191;N # HANGUL JUNGSEONG YU-YEO
+1192;N # HANGUL JUNGSEONG YU-YE
+1193;N # HANGUL JUNGSEONG YU-U
+1194;N # HANGUL JUNGSEONG YU-I
+1195;N # HANGUL JUNGSEONG EU-U
+1196;N # HANGUL JUNGSEONG EU-EU
+1197;N # HANGUL JUNGSEONG YI-U
+1198;N # HANGUL JUNGSEONG I-A
+1199;N # HANGUL JUNGSEONG I-YA
+119A;N # HANGUL JUNGSEONG I-O
+119B;N # HANGUL JUNGSEONG I-U
+119C;N # HANGUL JUNGSEONG I-EU
+119D;N # HANGUL JUNGSEONG I-ARAEA
+119E;N # HANGUL JUNGSEONG ARAEA
+119F;N # HANGUL JUNGSEONG ARAEA-EO
+11A0;N # HANGUL JUNGSEONG ARAEA-U
+11A1;N # HANGUL JUNGSEONG ARAEA-I
+11A2;N # HANGUL JUNGSEONG SSANGARAEA
+11A8;N # HANGUL JONGSEONG KIYEOK
+11A9;N # HANGUL JONGSEONG SSANGKIYEOK
+11AA;N # HANGUL JONGSEONG KIYEOK-SIOS
+11AB;N # HANGUL JONGSEONG NIEUN
+11AC;N # HANGUL JONGSEONG NIEUN-CIEUC
+11AD;N # HANGUL JONGSEONG NIEUN-HIEUH
+11AE;N # HANGUL JONGSEONG TIKEUT
+11AF;N # HANGUL JONGSEONG RIEUL
+11B0;N # HANGUL JONGSEONG RIEUL-KIYEOK
+11B1;N # HANGUL JONGSEONG RIEUL-MIEUM
+11B2;N # HANGUL JONGSEONG RIEUL-PIEUP
+11B3;N # HANGUL JONGSEONG RIEUL-SIOS
+11B4;N # HANGUL JONGSEONG RIEUL-THIEUTH
+11B5;N # HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6;N # HANGUL JONGSEONG RIEUL-HIEUH
+11B7;N # HANGUL JONGSEONG MIEUM
+11B8;N # HANGUL JONGSEONG PIEUP
+11B9;N # HANGUL JONGSEONG PIEUP-SIOS
+11BA;N # HANGUL JONGSEONG SIOS
+11BB;N # HANGUL JONGSEONG SSANGSIOS
+11BC;N # HANGUL JONGSEONG IEUNG
+11BD;N # HANGUL JONGSEONG CIEUC
+11BE;N # HANGUL JONGSEONG CHIEUCH
+11BF;N # HANGUL JONGSEONG KHIEUKH
+11C0;N # HANGUL JONGSEONG THIEUTH
+11C1;N # HANGUL JONGSEONG PHIEUPH
+11C2;N # HANGUL JONGSEONG HIEUH
+11C3;N # HANGUL JONGSEONG KIYEOK-RIEUL
+11C4;N # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5;N # HANGUL JONGSEONG NIEUN-KIYEOK
+11C6;N # HANGUL JONGSEONG NIEUN-TIKEUT
+11C7;N # HANGUL JONGSEONG NIEUN-SIOS
+11C8;N # HANGUL JONGSEONG NIEUN-PANSIOS
+11C9;N # HANGUL JONGSEONG NIEUN-THIEUTH
+11CA;N # HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB;N # HANGUL JONGSEONG TIKEUT-RIEUL
+11CC;N # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD;N # HANGUL JONGSEONG RIEUL-NIEUN
+11CE;N # HANGUL JONGSEONG RIEUL-TIKEUT
+11CF;N # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0;N # HANGUL JONGSEONG SSANGRIEUL
+11D1;N # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2;N # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3;N # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4;N # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5;N # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6;N # HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7;N # HANGUL JONGSEONG RIEUL-PANSIOS
+11D8;N # HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9;N # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA;N # HANGUL JONGSEONG MIEUM-KIYEOK
+11DB;N # HANGUL JONGSEONG MIEUM-RIEUL
+11DC;N # HANGUL JONGSEONG MIEUM-PIEUP
+11DD;N # HANGUL JONGSEONG MIEUM-SIOS
+11DE;N # HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF;N # HANGUL JONGSEONG MIEUM-PANSIOS
+11E0;N # HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1;N # HANGUL JONGSEONG MIEUM-HIEUH
+11E2;N # HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3;N # HANGUL JONGSEONG PIEUP-RIEUL
+11E4;N # HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5;N # HANGUL JONGSEONG PIEUP-HIEUH
+11E6;N # HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7;N # HANGUL JONGSEONG SIOS-KIYEOK
+11E8;N # HANGUL JONGSEONG SIOS-TIKEUT
+11E9;N # HANGUL JONGSEONG SIOS-RIEUL
+11EA;N # HANGUL JONGSEONG SIOS-PIEUP
+11EB;N # HANGUL JONGSEONG PANSIOS
+11EC;N # HANGUL JONGSEONG IEUNG-KIYEOK
+11ED;N # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE;N # HANGUL JONGSEONG SSANGIEUNG
+11EF;N # HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0;N # HANGUL JONGSEONG YESIEUNG
+11F1;N # HANGUL JONGSEONG YESIEUNG-SIOS
+11F2;N # HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3;N # HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4;N # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5;N # HANGUL JONGSEONG HIEUH-NIEUN
+11F6;N # HANGUL JONGSEONG HIEUH-RIEUL
+11F7;N # HANGUL JONGSEONG HIEUH-MIEUM
+11F8;N # HANGUL JONGSEONG HIEUH-PIEUP
+11F9;N # HANGUL JONGSEONG YEORINHIEUH
+1200;N # ETHIOPIC SYLLABLE HA
+1201;N # ETHIOPIC SYLLABLE HU
+1202;N # ETHIOPIC SYLLABLE HI
+1203;N # ETHIOPIC SYLLABLE HAA
+1204;N # ETHIOPIC SYLLABLE HEE
+1205;N # ETHIOPIC SYLLABLE HE
+1206;N # ETHIOPIC SYLLABLE HO
+1207;N # ETHIOPIC SYLLABLE HOA
+1208;N # ETHIOPIC SYLLABLE LA
+1209;N # ETHIOPIC SYLLABLE LU
+120A;N # ETHIOPIC SYLLABLE LI
+120B;N # ETHIOPIC SYLLABLE LAA
+120C;N # ETHIOPIC SYLLABLE LEE
+120D;N # ETHIOPIC SYLLABLE LE
+120E;N # ETHIOPIC SYLLABLE LO
+120F;N # ETHIOPIC SYLLABLE LWA
+1210;N # ETHIOPIC SYLLABLE HHA
+1211;N # ETHIOPIC SYLLABLE HHU
+1212;N # ETHIOPIC SYLLABLE HHI
+1213;N # ETHIOPIC SYLLABLE HHAA
+1214;N # ETHIOPIC SYLLABLE HHEE
+1215;N # ETHIOPIC SYLLABLE HHE
+1216;N # ETHIOPIC SYLLABLE HHO
+1217;N # ETHIOPIC SYLLABLE HHWA
+1218;N # ETHIOPIC SYLLABLE MA
+1219;N # ETHIOPIC SYLLABLE MU
+121A;N # ETHIOPIC SYLLABLE MI
+121B;N # ETHIOPIC SYLLABLE MAA
+121C;N # ETHIOPIC SYLLABLE MEE
+121D;N # ETHIOPIC SYLLABLE ME
+121E;N # ETHIOPIC SYLLABLE MO
+121F;N # ETHIOPIC SYLLABLE MWA
+1220;N # ETHIOPIC SYLLABLE SZA
+1221;N # ETHIOPIC SYLLABLE SZU
+1222;N # ETHIOPIC SYLLABLE SZI
+1223;N # ETHIOPIC SYLLABLE SZAA
+1224;N # ETHIOPIC SYLLABLE SZEE
+1225;N # ETHIOPIC SYLLABLE SZE
+1226;N # ETHIOPIC SYLLABLE SZO
+1227;N # ETHIOPIC SYLLABLE SZWA
+1228;N # ETHIOPIC SYLLABLE RA
+1229;N # ETHIOPIC SYLLABLE RU
+122A;N # ETHIOPIC SYLLABLE RI
+122B;N # ETHIOPIC SYLLABLE RAA
+122C;N # ETHIOPIC SYLLABLE REE
+122D;N # ETHIOPIC SYLLABLE RE
+122E;N # ETHIOPIC SYLLABLE RO
+122F;N # ETHIOPIC SYLLABLE RWA
+1230;N # ETHIOPIC SYLLABLE SA
+1231;N # ETHIOPIC SYLLABLE SU
+1232;N # ETHIOPIC SYLLABLE SI
+1233;N # ETHIOPIC SYLLABLE SAA
+1234;N # ETHIOPIC SYLLABLE SEE
+1235;N # ETHIOPIC SYLLABLE SE
+1236;N # ETHIOPIC SYLLABLE SO
+1237;N # ETHIOPIC SYLLABLE SWA
+1238;N # ETHIOPIC SYLLABLE SHA
+1239;N # ETHIOPIC SYLLABLE SHU
+123A;N # ETHIOPIC SYLLABLE SHI
+123B;N # ETHIOPIC SYLLABLE SHAA
+123C;N # ETHIOPIC SYLLABLE SHEE
+123D;N # ETHIOPIC SYLLABLE SHE
+123E;N # ETHIOPIC SYLLABLE SHO
+123F;N # ETHIOPIC SYLLABLE SHWA
+1240;N # ETHIOPIC SYLLABLE QA
+1241;N # ETHIOPIC SYLLABLE QU
+1242;N # ETHIOPIC SYLLABLE QI
+1243;N # ETHIOPIC SYLLABLE QAA
+1244;N # ETHIOPIC SYLLABLE QEE
+1245;N # ETHIOPIC SYLLABLE QE
+1246;N # ETHIOPIC SYLLABLE QO
+1247;N # ETHIOPIC SYLLABLE QOA
+1248;N # ETHIOPIC SYLLABLE QWA
+124A;N # ETHIOPIC SYLLABLE QWI
+124B;N # ETHIOPIC SYLLABLE QWAA
+124C;N # ETHIOPIC SYLLABLE QWEE
+124D;N # ETHIOPIC SYLLABLE QWE
+1250;N # ETHIOPIC SYLLABLE QHA
+1251;N # ETHIOPIC SYLLABLE QHU
+1252;N # ETHIOPIC SYLLABLE QHI
+1253;N # ETHIOPIC SYLLABLE QHAA
+1254;N # ETHIOPIC SYLLABLE QHEE
+1255;N # ETHIOPIC SYLLABLE QHE
+1256;N # ETHIOPIC SYLLABLE QHO
+1258;N # ETHIOPIC SYLLABLE QHWA
+125A;N # ETHIOPIC SYLLABLE QHWI
+125B;N # ETHIOPIC SYLLABLE QHWAA
+125C;N # ETHIOPIC SYLLABLE QHWEE
+125D;N # ETHIOPIC SYLLABLE QHWE
+1260;N # ETHIOPIC SYLLABLE BA
+1261;N # ETHIOPIC SYLLABLE BU
+1262;N # ETHIOPIC SYLLABLE BI
+1263;N # ETHIOPIC SYLLABLE BAA
+1264;N # ETHIOPIC SYLLABLE BEE
+1265;N # ETHIOPIC SYLLABLE BE
+1266;N # ETHIOPIC SYLLABLE BO
+1267;N # ETHIOPIC SYLLABLE BWA
+1268;N # ETHIOPIC SYLLABLE VA
+1269;N # ETHIOPIC SYLLABLE VU
+126A;N # ETHIOPIC SYLLABLE VI
+126B;N # ETHIOPIC SYLLABLE VAA
+126C;N # ETHIOPIC SYLLABLE VEE
+126D;N # ETHIOPIC SYLLABLE VE
+126E;N # ETHIOPIC SYLLABLE VO
+126F;N # ETHIOPIC SYLLABLE VWA
+1270;N # ETHIOPIC SYLLABLE TA
+1271;N # ETHIOPIC SYLLABLE TU
+1272;N # ETHIOPIC SYLLABLE TI
+1273;N # ETHIOPIC SYLLABLE TAA
+1274;N # ETHIOPIC SYLLABLE TEE
+1275;N # ETHIOPIC SYLLABLE TE
+1276;N # ETHIOPIC SYLLABLE TO
+1277;N # ETHIOPIC SYLLABLE TWA
+1278;N # ETHIOPIC SYLLABLE CA
+1279;N # ETHIOPIC SYLLABLE CU
+127A;N # ETHIOPIC SYLLABLE CI
+127B;N # ETHIOPIC SYLLABLE CAA
+127C;N # ETHIOPIC SYLLABLE CEE
+127D;N # ETHIOPIC SYLLABLE CE
+127E;N # ETHIOPIC SYLLABLE CO
+127F;N # ETHIOPIC SYLLABLE CWA
+1280;N # ETHIOPIC SYLLABLE XA
+1281;N # ETHIOPIC SYLLABLE XU
+1282;N # ETHIOPIC SYLLABLE XI
+1283;N # ETHIOPIC SYLLABLE XAA
+1284;N # ETHIOPIC SYLLABLE XEE
+1285;N # ETHIOPIC SYLLABLE XE
+1286;N # ETHIOPIC SYLLABLE XO
+1287;N # ETHIOPIC SYLLABLE XOA
+1288;N # ETHIOPIC SYLLABLE XWA
+128A;N # ETHIOPIC SYLLABLE XWI
+128B;N # ETHIOPIC SYLLABLE XWAA
+128C;N # ETHIOPIC SYLLABLE XWEE
+128D;N # ETHIOPIC SYLLABLE XWE
+1290;N # ETHIOPIC SYLLABLE NA
+1291;N # ETHIOPIC SYLLABLE NU
+1292;N # ETHIOPIC SYLLABLE NI
+1293;N # ETHIOPIC SYLLABLE NAA
+1294;N # ETHIOPIC SYLLABLE NEE
+1295;N # ETHIOPIC SYLLABLE NE
+1296;N # ETHIOPIC SYLLABLE NO
+1297;N # ETHIOPIC SYLLABLE NWA
+1298;N # ETHIOPIC SYLLABLE NYA
+1299;N # ETHIOPIC SYLLABLE NYU
+129A;N # ETHIOPIC SYLLABLE NYI
+129B;N # ETHIOPIC SYLLABLE NYAA
+129C;N # ETHIOPIC SYLLABLE NYEE
+129D;N # ETHIOPIC SYLLABLE NYE
+129E;N # ETHIOPIC SYLLABLE NYO
+129F;N # ETHIOPIC SYLLABLE NYWA
+12A0;N # ETHIOPIC SYLLABLE GLOTTAL A
+12A1;N # ETHIOPIC SYLLABLE GLOTTAL U
+12A2;N # ETHIOPIC SYLLABLE GLOTTAL I
+12A3;N # ETHIOPIC SYLLABLE GLOTTAL AA
+12A4;N # ETHIOPIC SYLLABLE GLOTTAL EE
+12A5;N # ETHIOPIC SYLLABLE GLOTTAL E
+12A6;N # ETHIOPIC SYLLABLE GLOTTAL O
+12A7;N # ETHIOPIC SYLLABLE GLOTTAL WA
+12A8;N # ETHIOPIC SYLLABLE KA
+12A9;N # ETHIOPIC SYLLABLE KU
+12AA;N # ETHIOPIC SYLLABLE KI
+12AB;N # ETHIOPIC SYLLABLE KAA
+12AC;N # ETHIOPIC SYLLABLE KEE
+12AD;N # ETHIOPIC SYLLABLE KE
+12AE;N # ETHIOPIC SYLLABLE KO
+12AF;N # ETHIOPIC SYLLABLE KOA
+12B0;N # ETHIOPIC SYLLABLE KWA
+12B2;N # ETHIOPIC SYLLABLE KWI
+12B3;N # ETHIOPIC SYLLABLE KWAA
+12B4;N # ETHIOPIC SYLLABLE KWEE
+12B5;N # ETHIOPIC SYLLABLE KWE
+12B8;N # ETHIOPIC SYLLABLE KXA
+12B9;N # ETHIOPIC SYLLABLE KXU
+12BA;N # ETHIOPIC SYLLABLE KXI
+12BB;N # ETHIOPIC SYLLABLE KXAA
+12BC;N # ETHIOPIC SYLLABLE KXEE
+12BD;N # ETHIOPIC SYLLABLE KXE
+12BE;N # ETHIOPIC SYLLABLE KXO
+12C0;N # ETHIOPIC SYLLABLE KXWA
+12C2;N # ETHIOPIC SYLLABLE KXWI
+12C3;N # ETHIOPIC SYLLABLE KXWAA
+12C4;N # ETHIOPIC SYLLABLE KXWEE
+12C5;N # ETHIOPIC SYLLABLE KXWE
+12C8;N # ETHIOPIC SYLLABLE WA
+12C9;N # ETHIOPIC SYLLABLE WU
+12CA;N # ETHIOPIC SYLLABLE WI
+12CB;N # ETHIOPIC SYLLABLE WAA
+12CC;N # ETHIOPIC SYLLABLE WEE
+12CD;N # ETHIOPIC SYLLABLE WE
+12CE;N # ETHIOPIC SYLLABLE WO
+12CF;N # ETHIOPIC SYLLABLE WOA
+12D0;N # ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1;N # ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2;N # ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3;N # ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4;N # ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5;N # ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6;N # ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8;N # ETHIOPIC SYLLABLE ZA
+12D9;N # ETHIOPIC SYLLABLE ZU
+12DA;N # ETHIOPIC SYLLABLE ZI
+12DB;N # ETHIOPIC SYLLABLE ZAA
+12DC;N # ETHIOPIC SYLLABLE ZEE
+12DD;N # ETHIOPIC SYLLABLE ZE
+12DE;N # ETHIOPIC SYLLABLE ZO
+12DF;N # ETHIOPIC SYLLABLE ZWA
+12E0;N # ETHIOPIC SYLLABLE ZHA
+12E1;N # ETHIOPIC SYLLABLE ZHU
+12E2;N # ETHIOPIC SYLLABLE ZHI
+12E3;N # ETHIOPIC SYLLABLE ZHAA
+12E4;N # ETHIOPIC SYLLABLE ZHEE
+12E5;N # ETHIOPIC SYLLABLE ZHE
+12E6;N # ETHIOPIC SYLLABLE ZHO
+12E7;N # ETHIOPIC SYLLABLE ZHWA
+12E8;N # ETHIOPIC SYLLABLE YA
+12E9;N # ETHIOPIC SYLLABLE YU
+12EA;N # ETHIOPIC SYLLABLE YI
+12EB;N # ETHIOPIC SYLLABLE YAA
+12EC;N # ETHIOPIC SYLLABLE YEE
+12ED;N # ETHIOPIC SYLLABLE YE
+12EE;N # ETHIOPIC SYLLABLE YO
+12EF;N # ETHIOPIC SYLLABLE YOA
+12F0;N # ETHIOPIC SYLLABLE DA
+12F1;N # ETHIOPIC SYLLABLE DU
+12F2;N # ETHIOPIC SYLLABLE DI
+12F3;N # ETHIOPIC SYLLABLE DAA
+12F4;N # ETHIOPIC SYLLABLE DEE
+12F5;N # ETHIOPIC SYLLABLE DE
+12F6;N # ETHIOPIC SYLLABLE DO
+12F7;N # ETHIOPIC SYLLABLE DWA
+12F8;N # ETHIOPIC SYLLABLE DDA
+12F9;N # ETHIOPIC SYLLABLE DDU
+12FA;N # ETHIOPIC SYLLABLE DDI
+12FB;N # ETHIOPIC SYLLABLE DDAA
+12FC;N # ETHIOPIC SYLLABLE DDEE
+12FD;N # ETHIOPIC SYLLABLE DDE
+12FE;N # ETHIOPIC SYLLABLE DDO
+12FF;N # ETHIOPIC SYLLABLE DDWA
+1300;N # ETHIOPIC SYLLABLE JA
+1301;N # ETHIOPIC SYLLABLE JU
+1302;N # ETHIOPIC SYLLABLE JI
+1303;N # ETHIOPIC SYLLABLE JAA
+1304;N # ETHIOPIC SYLLABLE JEE
+1305;N # ETHIOPIC SYLLABLE JE
+1306;N # ETHIOPIC SYLLABLE JO
+1307;N # ETHIOPIC SYLLABLE JWA
+1308;N # ETHIOPIC SYLLABLE GA
+1309;N # ETHIOPIC SYLLABLE GU
+130A;N # ETHIOPIC SYLLABLE GI
+130B;N # ETHIOPIC SYLLABLE GAA
+130C;N # ETHIOPIC SYLLABLE GEE
+130D;N # ETHIOPIC SYLLABLE GE
+130E;N # ETHIOPIC SYLLABLE GO
+130F;N # ETHIOPIC SYLLABLE GOA
+1310;N # ETHIOPIC SYLLABLE GWA
+1312;N # ETHIOPIC SYLLABLE GWI
+1313;N # ETHIOPIC SYLLABLE GWAA
+1314;N # ETHIOPIC SYLLABLE GWEE
+1315;N # ETHIOPIC SYLLABLE GWE
+1318;N # ETHIOPIC SYLLABLE GGA
+1319;N # ETHIOPIC SYLLABLE GGU
+131A;N # ETHIOPIC SYLLABLE GGI
+131B;N # ETHIOPIC SYLLABLE GGAA
+131C;N # ETHIOPIC SYLLABLE GGEE
+131D;N # ETHIOPIC SYLLABLE GGE
+131E;N # ETHIOPIC SYLLABLE GGO
+131F;N # ETHIOPIC SYLLABLE GGWAA
+1320;N # ETHIOPIC SYLLABLE THA
+1321;N # ETHIOPIC SYLLABLE THU
+1322;N # ETHIOPIC SYLLABLE THI
+1323;N # ETHIOPIC SYLLABLE THAA
+1324;N # ETHIOPIC SYLLABLE THEE
+1325;N # ETHIOPIC SYLLABLE THE
+1326;N # ETHIOPIC SYLLABLE THO
+1327;N # ETHIOPIC SYLLABLE THWA
+1328;N # ETHIOPIC SYLLABLE CHA
+1329;N # ETHIOPIC SYLLABLE CHU
+132A;N # ETHIOPIC SYLLABLE CHI
+132B;N # ETHIOPIC SYLLABLE CHAA
+132C;N # ETHIOPIC SYLLABLE CHEE
+132D;N # ETHIOPIC SYLLABLE CHE
+132E;N # ETHIOPIC SYLLABLE CHO
+132F;N # ETHIOPIC SYLLABLE CHWA
+1330;N # ETHIOPIC SYLLABLE PHA
+1331;N # ETHIOPIC SYLLABLE PHU
+1332;N # ETHIOPIC SYLLABLE PHI
+1333;N # ETHIOPIC SYLLABLE PHAA
+1334;N # ETHIOPIC SYLLABLE PHEE
+1335;N # ETHIOPIC SYLLABLE PHE
+1336;N # ETHIOPIC SYLLABLE PHO
+1337;N # ETHIOPIC SYLLABLE PHWA
+1338;N # ETHIOPIC SYLLABLE TSA
+1339;N # ETHIOPIC SYLLABLE TSU
+133A;N # ETHIOPIC SYLLABLE TSI
+133B;N # ETHIOPIC SYLLABLE TSAA
+133C;N # ETHIOPIC SYLLABLE TSEE
+133D;N # ETHIOPIC SYLLABLE TSE
+133E;N # ETHIOPIC SYLLABLE TSO
+133F;N # ETHIOPIC SYLLABLE TSWA
+1340;N # ETHIOPIC SYLLABLE TZA
+1341;N # ETHIOPIC SYLLABLE TZU
+1342;N # ETHIOPIC SYLLABLE TZI
+1343;N # ETHIOPIC SYLLABLE TZAA
+1344;N # ETHIOPIC SYLLABLE TZEE
+1345;N # ETHIOPIC SYLLABLE TZE
+1346;N # ETHIOPIC SYLLABLE TZO
+1347;N # ETHIOPIC SYLLABLE TZOA
+1348;N # ETHIOPIC SYLLABLE FA
+1349;N # ETHIOPIC SYLLABLE FU
+134A;N # ETHIOPIC SYLLABLE FI
+134B;N # ETHIOPIC SYLLABLE FAA
+134C;N # ETHIOPIC SYLLABLE FEE
+134D;N # ETHIOPIC SYLLABLE FE
+134E;N # ETHIOPIC SYLLABLE FO
+134F;N # ETHIOPIC SYLLABLE FWA
+1350;N # ETHIOPIC SYLLABLE PA
+1351;N # ETHIOPIC SYLLABLE PU
+1352;N # ETHIOPIC SYLLABLE PI
+1353;N # ETHIOPIC SYLLABLE PAA
+1354;N # ETHIOPIC SYLLABLE PEE
+1355;N # ETHIOPIC SYLLABLE PE
+1356;N # ETHIOPIC SYLLABLE PO
+1357;N # ETHIOPIC SYLLABLE PWA
+1358;N # ETHIOPIC SYLLABLE RYA
+1359;N # ETHIOPIC SYLLABLE MYA
+135A;N # ETHIOPIC SYLLABLE FYA
+135F;N # ETHIOPIC COMBINING GEMINATION MARK
+1360;N # ETHIOPIC SECTION MARK
+1361;N # ETHIOPIC WORDSPACE
+1362;N # ETHIOPIC FULL STOP
+1363;N # ETHIOPIC COMMA
+1364;N # ETHIOPIC SEMICOLON
+1365;N # ETHIOPIC COLON
+1366;N # ETHIOPIC PREFACE COLON
+1367;N # ETHIOPIC QUESTION MARK
+1368;N # ETHIOPIC PARAGRAPH SEPARATOR
+1369;N # ETHIOPIC DIGIT ONE
+136A;N # ETHIOPIC DIGIT TWO
+136B;N # ETHIOPIC DIGIT THREE
+136C;N # ETHIOPIC DIGIT FOUR
+136D;N # ETHIOPIC DIGIT FIVE
+136E;N # ETHIOPIC DIGIT SIX
+136F;N # ETHIOPIC DIGIT SEVEN
+1370;N # ETHIOPIC DIGIT EIGHT
+1371;N # ETHIOPIC DIGIT NINE
+1372;N # ETHIOPIC NUMBER TEN
+1373;N # ETHIOPIC NUMBER TWENTY
+1374;N # ETHIOPIC NUMBER THIRTY
+1375;N # ETHIOPIC NUMBER FORTY
+1376;N # ETHIOPIC NUMBER FIFTY
+1377;N # ETHIOPIC NUMBER SIXTY
+1378;N # ETHIOPIC NUMBER SEVENTY
+1379;N # ETHIOPIC NUMBER EIGHTY
+137A;N # ETHIOPIC NUMBER NINETY
+137B;N # ETHIOPIC NUMBER HUNDRED
+137C;N # ETHIOPIC NUMBER TEN THOUSAND
+1380;N # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381;N # ETHIOPIC SYLLABLE MWI
+1382;N # ETHIOPIC SYLLABLE MWEE
+1383;N # ETHIOPIC SYLLABLE MWE
+1384;N # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385;N # ETHIOPIC SYLLABLE BWI
+1386;N # ETHIOPIC SYLLABLE BWEE
+1387;N # ETHIOPIC SYLLABLE BWE
+1388;N # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389;N # ETHIOPIC SYLLABLE FWI
+138A;N # ETHIOPIC SYLLABLE FWEE
+138B;N # ETHIOPIC SYLLABLE FWE
+138C;N # ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D;N # ETHIOPIC SYLLABLE PWI
+138E;N # ETHIOPIC SYLLABLE PWEE
+138F;N # ETHIOPIC SYLLABLE PWE
+1390;N # ETHIOPIC TONAL MARK YIZET
+1391;N # ETHIOPIC TONAL MARK DERET
+1392;N # ETHIOPIC TONAL MARK RIKRIK
+1393;N # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394;N # ETHIOPIC TONAL MARK DIFAT
+1395;N # ETHIOPIC TONAL MARK KENAT
+1396;N # ETHIOPIC TONAL MARK CHIRET
+1397;N # ETHIOPIC TONAL MARK HIDET
+1398;N # ETHIOPIC TONAL MARK DERET-HIDET
+1399;N # ETHIOPIC TONAL MARK KURT
+13A0;N # CHEROKEE LETTER A
+13A1;N # CHEROKEE LETTER E
+13A2;N # CHEROKEE LETTER I
+13A3;N # CHEROKEE LETTER O
+13A4;N # CHEROKEE LETTER U
+13A5;N # CHEROKEE LETTER V
+13A6;N # CHEROKEE LETTER GA
+13A7;N # CHEROKEE LETTER KA
+13A8;N # CHEROKEE LETTER GE
+13A9;N # CHEROKEE LETTER GI
+13AA;N # CHEROKEE LETTER GO
+13AB;N # CHEROKEE LETTER GU
+13AC;N # CHEROKEE LETTER GV
+13AD;N # CHEROKEE LETTER HA
+13AE;N # CHEROKEE LETTER HE
+13AF;N # CHEROKEE LETTER HI
+13B0;N # CHEROKEE LETTER HO
+13B1;N # CHEROKEE LETTER HU
+13B2;N # CHEROKEE LETTER HV
+13B3;N # CHEROKEE LETTER LA
+13B4;N # CHEROKEE LETTER LE
+13B5;N # CHEROKEE LETTER LI
+13B6;N # CHEROKEE LETTER LO
+13B7;N # CHEROKEE LETTER LU
+13B8;N # CHEROKEE LETTER LV
+13B9;N # CHEROKEE LETTER MA
+13BA;N # CHEROKEE LETTER ME
+13BB;N # CHEROKEE LETTER MI
+13BC;N # CHEROKEE LETTER MO
+13BD;N # CHEROKEE LETTER MU
+13BE;N # CHEROKEE LETTER NA
+13BF;N # CHEROKEE LETTER HNA
+13C0;N # CHEROKEE LETTER NAH
+13C1;N # CHEROKEE LETTER NE
+13C2;N # CHEROKEE LETTER NI
+13C3;N # CHEROKEE LETTER NO
+13C4;N # CHEROKEE LETTER NU
+13C5;N # CHEROKEE LETTER NV
+13C6;N # CHEROKEE LETTER QUA
+13C7;N # CHEROKEE LETTER QUE
+13C8;N # CHEROKEE LETTER QUI
+13C9;N # CHEROKEE LETTER QUO
+13CA;N # CHEROKEE LETTER QUU
+13CB;N # CHEROKEE LETTER QUV
+13CC;N # CHEROKEE LETTER SA
+13CD;N # CHEROKEE LETTER S
+13CE;N # CHEROKEE LETTER SE
+13CF;N # CHEROKEE LETTER SI
+13D0;N # CHEROKEE LETTER SO
+13D1;N # CHEROKEE LETTER SU
+13D2;N # CHEROKEE LETTER SV
+13D3;N # CHEROKEE LETTER DA
+13D4;N # CHEROKEE LETTER TA
+13D5;N # CHEROKEE LETTER DE
+13D6;N # CHEROKEE LETTER TE
+13D7;N # CHEROKEE LETTER DI
+13D8;N # CHEROKEE LETTER TI
+13D9;N # CHEROKEE LETTER DO
+13DA;N # CHEROKEE LETTER DU
+13DB;N # CHEROKEE LETTER DV
+13DC;N # CHEROKEE LETTER DLA
+13DD;N # CHEROKEE LETTER TLA
+13DE;N # CHEROKEE LETTER TLE
+13DF;N # CHEROKEE LETTER TLI
+13E0;N # CHEROKEE LETTER TLO
+13E1;N # CHEROKEE LETTER TLU
+13E2;N # CHEROKEE LETTER TLV
+13E3;N # CHEROKEE LETTER TSA
+13E4;N # CHEROKEE LETTER TSE
+13E5;N # CHEROKEE LETTER TSI
+13E6;N # CHEROKEE LETTER TSO
+13E7;N # CHEROKEE LETTER TSU
+13E8;N # CHEROKEE LETTER TSV
+13E9;N # CHEROKEE LETTER WA
+13EA;N # CHEROKEE LETTER WE
+13EB;N # CHEROKEE LETTER WI
+13EC;N # CHEROKEE LETTER WO
+13ED;N # CHEROKEE LETTER WU
+13EE;N # CHEROKEE LETTER WV
+13EF;N # CHEROKEE LETTER YA
+13F0;N # CHEROKEE LETTER YE
+13F1;N # CHEROKEE LETTER YI
+13F2;N # CHEROKEE LETTER YO
+13F3;N # CHEROKEE LETTER YU
+13F4;N # CHEROKEE LETTER YV
+1401;N # CANADIAN SYLLABICS E
+1402;N # CANADIAN SYLLABICS AAI
+1403;N # CANADIAN SYLLABICS I
+1404;N # CANADIAN SYLLABICS II
+1405;N # CANADIAN SYLLABICS O
+1406;N # CANADIAN SYLLABICS OO
+1407;N # CANADIAN SYLLABICS Y-CREE OO
+1408;N # CANADIAN SYLLABICS CARRIER EE
+1409;N # CANADIAN SYLLABICS CARRIER I
+140A;N # CANADIAN SYLLABICS A
+140B;N # CANADIAN SYLLABICS AA
+140C;N # CANADIAN SYLLABICS WE
+140D;N # CANADIAN SYLLABICS WEST-CREE WE
+140E;N # CANADIAN SYLLABICS WI
+140F;N # CANADIAN SYLLABICS WEST-CREE WI
+1410;N # CANADIAN SYLLABICS WII
+1411;N # CANADIAN SYLLABICS WEST-CREE WII
+1412;N # CANADIAN SYLLABICS WO
+1413;N # CANADIAN SYLLABICS WEST-CREE WO
+1414;N # CANADIAN SYLLABICS WOO
+1415;N # CANADIAN SYLLABICS WEST-CREE WOO
+1416;N # CANADIAN SYLLABICS NASKAPI WOO
+1417;N # CANADIAN SYLLABICS WA
+1418;N # CANADIAN SYLLABICS WEST-CREE WA
+1419;N # CANADIAN SYLLABICS WAA
+141A;N # CANADIAN SYLLABICS WEST-CREE WAA
+141B;N # CANADIAN SYLLABICS NASKAPI WAA
+141C;N # CANADIAN SYLLABICS AI
+141D;N # CANADIAN SYLLABICS Y-CREE W
+141E;N # CANADIAN SYLLABICS GLOTTAL STOP
+141F;N # CANADIAN SYLLABICS FINAL ACUTE
+1420;N # CANADIAN SYLLABICS FINAL GRAVE
+1421;N # CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422;N # CANADIAN SYLLABICS FINAL TOP HALF RING
+1423;N # CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424;N # CANADIAN SYLLABICS FINAL RING
+1425;N # CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426;N # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427;N # CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428;N # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429;N # CANADIAN SYLLABICS FINAL PLUS
+142A;N # CANADIAN SYLLABICS FINAL DOWN TACK
+142B;N # CANADIAN SYLLABICS EN
+142C;N # CANADIAN SYLLABICS IN
+142D;N # CANADIAN SYLLABICS ON
+142E;N # CANADIAN SYLLABICS AN
+142F;N # CANADIAN SYLLABICS PE
+1430;N # CANADIAN SYLLABICS PAAI
+1431;N # CANADIAN SYLLABICS PI
+1432;N # CANADIAN SYLLABICS PII
+1433;N # CANADIAN SYLLABICS PO
+1434;N # CANADIAN SYLLABICS POO
+1435;N # CANADIAN SYLLABICS Y-CREE POO
+1436;N # CANADIAN SYLLABICS CARRIER HEE
+1437;N # CANADIAN SYLLABICS CARRIER HI
+1438;N # CANADIAN SYLLABICS PA
+1439;N # CANADIAN SYLLABICS PAA
+143A;N # CANADIAN SYLLABICS PWE
+143B;N # CANADIAN SYLLABICS WEST-CREE PWE
+143C;N # CANADIAN SYLLABICS PWI
+143D;N # CANADIAN SYLLABICS WEST-CREE PWI
+143E;N # CANADIAN SYLLABICS PWII
+143F;N # CANADIAN SYLLABICS WEST-CREE PWII
+1440;N # CANADIAN SYLLABICS PWO
+1441;N # CANADIAN SYLLABICS WEST-CREE PWO
+1442;N # CANADIAN SYLLABICS PWOO
+1443;N # CANADIAN SYLLABICS WEST-CREE PWOO
+1444;N # CANADIAN SYLLABICS PWA
+1445;N # CANADIAN SYLLABICS WEST-CREE PWA
+1446;N # CANADIAN SYLLABICS PWAA
+1447;N # CANADIAN SYLLABICS WEST-CREE PWAA
+1448;N # CANADIAN SYLLABICS Y-CREE PWAA
+1449;N # CANADIAN SYLLABICS P
+144A;N # CANADIAN SYLLABICS WEST-CREE P
+144B;N # CANADIAN SYLLABICS CARRIER H
+144C;N # CANADIAN SYLLABICS TE
+144D;N # CANADIAN SYLLABICS TAAI
+144E;N # CANADIAN SYLLABICS TI
+144F;N # CANADIAN SYLLABICS TII
+1450;N # CANADIAN SYLLABICS TO
+1451;N # CANADIAN SYLLABICS TOO
+1452;N # CANADIAN SYLLABICS Y-CREE TOO
+1453;N # CANADIAN SYLLABICS CARRIER DEE
+1454;N # CANADIAN SYLLABICS CARRIER DI
+1455;N # CANADIAN SYLLABICS TA
+1456;N # CANADIAN SYLLABICS TAA
+1457;N # CANADIAN SYLLABICS TWE
+1458;N # CANADIAN SYLLABICS WEST-CREE TWE
+1459;N # CANADIAN SYLLABICS TWI
+145A;N # CANADIAN SYLLABICS WEST-CREE TWI
+145B;N # CANADIAN SYLLABICS TWII
+145C;N # CANADIAN SYLLABICS WEST-CREE TWII
+145D;N # CANADIAN SYLLABICS TWO
+145E;N # CANADIAN SYLLABICS WEST-CREE TWO
+145F;N # CANADIAN SYLLABICS TWOO
+1460;N # CANADIAN SYLLABICS WEST-CREE TWOO
+1461;N # CANADIAN SYLLABICS TWA
+1462;N # CANADIAN SYLLABICS WEST-CREE TWA
+1463;N # CANADIAN SYLLABICS TWAA
+1464;N # CANADIAN SYLLABICS WEST-CREE TWAA
+1465;N # CANADIAN SYLLABICS NASKAPI TWAA
+1466;N # CANADIAN SYLLABICS T
+1467;N # CANADIAN SYLLABICS TTE
+1468;N # CANADIAN SYLLABICS TTI
+1469;N # CANADIAN SYLLABICS TTO
+146A;N # CANADIAN SYLLABICS TTA
+146B;N # CANADIAN SYLLABICS KE
+146C;N # CANADIAN SYLLABICS KAAI
+146D;N # CANADIAN SYLLABICS KI
+146E;N # CANADIAN SYLLABICS KII
+146F;N # CANADIAN SYLLABICS KO
+1470;N # CANADIAN SYLLABICS KOO
+1471;N # CANADIAN SYLLABICS Y-CREE KOO
+1472;N # CANADIAN SYLLABICS KA
+1473;N # CANADIAN SYLLABICS KAA
+1474;N # CANADIAN SYLLABICS KWE
+1475;N # CANADIAN SYLLABICS WEST-CREE KWE
+1476;N # CANADIAN SYLLABICS KWI
+1477;N # CANADIAN SYLLABICS WEST-CREE KWI
+1478;N # CANADIAN SYLLABICS KWII
+1479;N # CANADIAN SYLLABICS WEST-CREE KWII
+147A;N # CANADIAN SYLLABICS KWO
+147B;N # CANADIAN SYLLABICS WEST-CREE KWO
+147C;N # CANADIAN SYLLABICS KWOO
+147D;N # CANADIAN SYLLABICS WEST-CREE KWOO
+147E;N # CANADIAN SYLLABICS KWA
+147F;N # CANADIAN SYLLABICS WEST-CREE KWA
+1480;N # CANADIAN SYLLABICS KWAA
+1481;N # CANADIAN SYLLABICS WEST-CREE KWAA
+1482;N # CANADIAN SYLLABICS NASKAPI KWAA
+1483;N # CANADIAN SYLLABICS K
+1484;N # CANADIAN SYLLABICS KW
+1485;N # CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486;N # CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487;N # CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488;N # CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489;N # CANADIAN SYLLABICS CE
+148A;N # CANADIAN SYLLABICS CAAI
+148B;N # CANADIAN SYLLABICS CI
+148C;N # CANADIAN SYLLABICS CII
+148D;N # CANADIAN SYLLABICS CO
+148E;N # CANADIAN SYLLABICS COO
+148F;N # CANADIAN SYLLABICS Y-CREE COO
+1490;N # CANADIAN SYLLABICS CA
+1491;N # CANADIAN SYLLABICS CAA
+1492;N # CANADIAN SYLLABICS CWE
+1493;N # CANADIAN SYLLABICS WEST-CREE CWE
+1494;N # CANADIAN SYLLABICS CWI
+1495;N # CANADIAN SYLLABICS WEST-CREE CWI
+1496;N # CANADIAN SYLLABICS CWII
+1497;N # CANADIAN SYLLABICS WEST-CREE CWII
+1498;N # CANADIAN SYLLABICS CWO
+1499;N # CANADIAN SYLLABICS WEST-CREE CWO
+149A;N # CANADIAN SYLLABICS CWOO
+149B;N # CANADIAN SYLLABICS WEST-CREE CWOO
+149C;N # CANADIAN SYLLABICS CWA
+149D;N # CANADIAN SYLLABICS WEST-CREE CWA
+149E;N # CANADIAN SYLLABICS CWAA
+149F;N # CANADIAN SYLLABICS WEST-CREE CWAA
+14A0;N # CANADIAN SYLLABICS NASKAPI CWAA
+14A1;N # CANADIAN SYLLABICS C
+14A2;N # CANADIAN SYLLABICS SAYISI TH
+14A3;N # CANADIAN SYLLABICS ME
+14A4;N # CANADIAN SYLLABICS MAAI
+14A5;N # CANADIAN SYLLABICS MI
+14A6;N # CANADIAN SYLLABICS MII
+14A7;N # CANADIAN SYLLABICS MO
+14A8;N # CANADIAN SYLLABICS MOO
+14A9;N # CANADIAN SYLLABICS Y-CREE MOO
+14AA;N # CANADIAN SYLLABICS MA
+14AB;N # CANADIAN SYLLABICS MAA
+14AC;N # CANADIAN SYLLABICS MWE
+14AD;N # CANADIAN SYLLABICS WEST-CREE MWE
+14AE;N # CANADIAN SYLLABICS MWI
+14AF;N # CANADIAN SYLLABICS WEST-CREE MWI
+14B0;N # CANADIAN SYLLABICS MWII
+14B1;N # CANADIAN SYLLABICS WEST-CREE MWII
+14B2;N # CANADIAN SYLLABICS MWO
+14B3;N # CANADIAN SYLLABICS WEST-CREE MWO
+14B4;N # CANADIAN SYLLABICS MWOO
+14B5;N # CANADIAN SYLLABICS WEST-CREE MWOO
+14B6;N # CANADIAN SYLLABICS MWA
+14B7;N # CANADIAN SYLLABICS WEST-CREE MWA
+14B8;N # CANADIAN SYLLABICS MWAA
+14B9;N # CANADIAN SYLLABICS WEST-CREE MWAA
+14BA;N # CANADIAN SYLLABICS NASKAPI MWAA
+14BB;N # CANADIAN SYLLABICS M
+14BC;N # CANADIAN SYLLABICS WEST-CREE M
+14BD;N # CANADIAN SYLLABICS MH
+14BE;N # CANADIAN SYLLABICS ATHAPASCAN M
+14BF;N # CANADIAN SYLLABICS SAYISI M
+14C0;N # CANADIAN SYLLABICS NE
+14C1;N # CANADIAN SYLLABICS NAAI
+14C2;N # CANADIAN SYLLABICS NI
+14C3;N # CANADIAN SYLLABICS NII
+14C4;N # CANADIAN SYLLABICS NO
+14C5;N # CANADIAN SYLLABICS NOO
+14C6;N # CANADIAN SYLLABICS Y-CREE NOO
+14C7;N # CANADIAN SYLLABICS NA
+14C8;N # CANADIAN SYLLABICS NAA
+14C9;N # CANADIAN SYLLABICS NWE
+14CA;N # CANADIAN SYLLABICS WEST-CREE NWE
+14CB;N # CANADIAN SYLLABICS NWA
+14CC;N # CANADIAN SYLLABICS WEST-CREE NWA
+14CD;N # CANADIAN SYLLABICS NWAA
+14CE;N # CANADIAN SYLLABICS WEST-CREE NWAA
+14CF;N # CANADIAN SYLLABICS NASKAPI NWAA
+14D0;N # CANADIAN SYLLABICS N
+14D1;N # CANADIAN SYLLABICS CARRIER NG
+14D2;N # CANADIAN SYLLABICS NH
+14D3;N # CANADIAN SYLLABICS LE
+14D4;N # CANADIAN SYLLABICS LAAI
+14D5;N # CANADIAN SYLLABICS LI
+14D6;N # CANADIAN SYLLABICS LII
+14D7;N # CANADIAN SYLLABICS LO
+14D8;N # CANADIAN SYLLABICS LOO
+14D9;N # CANADIAN SYLLABICS Y-CREE LOO
+14DA;N # CANADIAN SYLLABICS LA
+14DB;N # CANADIAN SYLLABICS LAA
+14DC;N # CANADIAN SYLLABICS LWE
+14DD;N # CANADIAN SYLLABICS WEST-CREE LWE
+14DE;N # CANADIAN SYLLABICS LWI
+14DF;N # CANADIAN SYLLABICS WEST-CREE LWI
+14E0;N # CANADIAN SYLLABICS LWII
+14E1;N # CANADIAN SYLLABICS WEST-CREE LWII
+14E2;N # CANADIAN SYLLABICS LWO
+14E3;N # CANADIAN SYLLABICS WEST-CREE LWO
+14E4;N # CANADIAN SYLLABICS LWOO
+14E5;N # CANADIAN SYLLABICS WEST-CREE LWOO
+14E6;N # CANADIAN SYLLABICS LWA
+14E7;N # CANADIAN SYLLABICS WEST-CREE LWA
+14E8;N # CANADIAN SYLLABICS LWAA
+14E9;N # CANADIAN SYLLABICS WEST-CREE LWAA
+14EA;N # CANADIAN SYLLABICS L
+14EB;N # CANADIAN SYLLABICS WEST-CREE L
+14EC;N # CANADIAN SYLLABICS MEDIAL L
+14ED;N # CANADIAN SYLLABICS SE
+14EE;N # CANADIAN SYLLABICS SAAI
+14EF;N # CANADIAN SYLLABICS SI
+14F0;N # CANADIAN SYLLABICS SII
+14F1;N # CANADIAN SYLLABICS SO
+14F2;N # CANADIAN SYLLABICS SOO
+14F3;N # CANADIAN SYLLABICS Y-CREE SOO
+14F4;N # CANADIAN SYLLABICS SA
+14F5;N # CANADIAN SYLLABICS SAA
+14F6;N # CANADIAN SYLLABICS SWE
+14F7;N # CANADIAN SYLLABICS WEST-CREE SWE
+14F8;N # CANADIAN SYLLABICS SWI
+14F9;N # CANADIAN SYLLABICS WEST-CREE SWI
+14FA;N # CANADIAN SYLLABICS SWII
+14FB;N # CANADIAN SYLLABICS WEST-CREE SWII
+14FC;N # CANADIAN SYLLABICS SWO
+14FD;N # CANADIAN SYLLABICS WEST-CREE SWO
+14FE;N # CANADIAN SYLLABICS SWOO
+14FF;N # CANADIAN SYLLABICS WEST-CREE SWOO
+1500;N # CANADIAN SYLLABICS SWA
+1501;N # CANADIAN SYLLABICS WEST-CREE SWA
+1502;N # CANADIAN SYLLABICS SWAA
+1503;N # CANADIAN SYLLABICS WEST-CREE SWAA
+1504;N # CANADIAN SYLLABICS NASKAPI SWAA
+1505;N # CANADIAN SYLLABICS S
+1506;N # CANADIAN SYLLABICS ATHAPASCAN S
+1507;N # CANADIAN SYLLABICS SW
+1508;N # CANADIAN SYLLABICS BLACKFOOT S
+1509;N # CANADIAN SYLLABICS MOOSE-CREE SK
+150A;N # CANADIAN SYLLABICS NASKAPI SKW
+150B;N # CANADIAN SYLLABICS NASKAPI S-W
+150C;N # CANADIAN SYLLABICS NASKAPI SPWA
+150D;N # CANADIAN SYLLABICS NASKAPI STWA
+150E;N # CANADIAN SYLLABICS NASKAPI SKWA
+150F;N # CANADIAN SYLLABICS NASKAPI SCWA
+1510;N # CANADIAN SYLLABICS SHE
+1511;N # CANADIAN SYLLABICS SHI
+1512;N # CANADIAN SYLLABICS SHII
+1513;N # CANADIAN SYLLABICS SHO
+1514;N # CANADIAN SYLLABICS SHOO
+1515;N # CANADIAN SYLLABICS SHA
+1516;N # CANADIAN SYLLABICS SHAA
+1517;N # CANADIAN SYLLABICS SHWE
+1518;N # CANADIAN SYLLABICS WEST-CREE SHWE
+1519;N # CANADIAN SYLLABICS SHWI
+151A;N # CANADIAN SYLLABICS WEST-CREE SHWI
+151B;N # CANADIAN SYLLABICS SHWII
+151C;N # CANADIAN SYLLABICS WEST-CREE SHWII
+151D;N # CANADIAN SYLLABICS SHWO
+151E;N # CANADIAN SYLLABICS WEST-CREE SHWO
+151F;N # CANADIAN SYLLABICS SHWOO
+1520;N # CANADIAN SYLLABICS WEST-CREE SHWOO
+1521;N # CANADIAN SYLLABICS SHWA
+1522;N # CANADIAN SYLLABICS WEST-CREE SHWA
+1523;N # CANADIAN SYLLABICS SHWAA
+1524;N # CANADIAN SYLLABICS WEST-CREE SHWAA
+1525;N # CANADIAN SYLLABICS SH
+1526;N # CANADIAN SYLLABICS YE
+1527;N # CANADIAN SYLLABICS YAAI
+1528;N # CANADIAN SYLLABICS YI
+1529;N # CANADIAN SYLLABICS YII
+152A;N # CANADIAN SYLLABICS YO
+152B;N # CANADIAN SYLLABICS YOO
+152C;N # CANADIAN SYLLABICS Y-CREE YOO
+152D;N # CANADIAN SYLLABICS YA
+152E;N # CANADIAN SYLLABICS YAA
+152F;N # CANADIAN SYLLABICS YWE
+1530;N # CANADIAN SYLLABICS WEST-CREE YWE
+1531;N # CANADIAN SYLLABICS YWI
+1532;N # CANADIAN SYLLABICS WEST-CREE YWI
+1533;N # CANADIAN SYLLABICS YWII
+1534;N # CANADIAN SYLLABICS WEST-CREE YWII
+1535;N # CANADIAN SYLLABICS YWO
+1536;N # CANADIAN SYLLABICS WEST-CREE YWO
+1537;N # CANADIAN SYLLABICS YWOO
+1538;N # CANADIAN SYLLABICS WEST-CREE YWOO
+1539;N # CANADIAN SYLLABICS YWA
+153A;N # CANADIAN SYLLABICS WEST-CREE YWA
+153B;N # CANADIAN SYLLABICS YWAA
+153C;N # CANADIAN SYLLABICS WEST-CREE YWAA
+153D;N # CANADIAN SYLLABICS NASKAPI YWAA
+153E;N # CANADIAN SYLLABICS Y
+153F;N # CANADIAN SYLLABICS BIBLE-CREE Y
+1540;N # CANADIAN SYLLABICS WEST-CREE Y
+1541;N # CANADIAN SYLLABICS SAYISI YI
+1542;N # CANADIAN SYLLABICS RE
+1543;N # CANADIAN SYLLABICS R-CREE RE
+1544;N # CANADIAN SYLLABICS WEST-CREE LE
+1545;N # CANADIAN SYLLABICS RAAI
+1546;N # CANADIAN SYLLABICS RI
+1547;N # CANADIAN SYLLABICS RII
+1548;N # CANADIAN SYLLABICS RO
+1549;N # CANADIAN SYLLABICS ROO
+154A;N # CANADIAN SYLLABICS WEST-CREE LO
+154B;N # CANADIAN SYLLABICS RA
+154C;N # CANADIAN SYLLABICS RAA
+154D;N # CANADIAN SYLLABICS WEST-CREE LA
+154E;N # CANADIAN SYLLABICS RWAA
+154F;N # CANADIAN SYLLABICS WEST-CREE RWAA
+1550;N # CANADIAN SYLLABICS R
+1551;N # CANADIAN SYLLABICS WEST-CREE R
+1552;N # CANADIAN SYLLABICS MEDIAL R
+1553;N # CANADIAN SYLLABICS FE
+1554;N # CANADIAN SYLLABICS FAAI
+1555;N # CANADIAN SYLLABICS FI
+1556;N # CANADIAN SYLLABICS FII
+1557;N # CANADIAN SYLLABICS FO
+1558;N # CANADIAN SYLLABICS FOO
+1559;N # CANADIAN SYLLABICS FA
+155A;N # CANADIAN SYLLABICS FAA
+155B;N # CANADIAN SYLLABICS FWAA
+155C;N # CANADIAN SYLLABICS WEST-CREE FWAA
+155D;N # CANADIAN SYLLABICS F
+155E;N # CANADIAN SYLLABICS THE
+155F;N # CANADIAN SYLLABICS N-CREE THE
+1560;N # CANADIAN SYLLABICS THI
+1561;N # CANADIAN SYLLABICS N-CREE THI
+1562;N # CANADIAN SYLLABICS THII
+1563;N # CANADIAN SYLLABICS N-CREE THII
+1564;N # CANADIAN SYLLABICS THO
+1565;N # CANADIAN SYLLABICS THOO
+1566;N # CANADIAN SYLLABICS THA
+1567;N # CANADIAN SYLLABICS THAA
+1568;N # CANADIAN SYLLABICS THWAA
+1569;N # CANADIAN SYLLABICS WEST-CREE THWAA
+156A;N # CANADIAN SYLLABICS TH
+156B;N # CANADIAN SYLLABICS TTHE
+156C;N # CANADIAN SYLLABICS TTHI
+156D;N # CANADIAN SYLLABICS TTHO
+156E;N # CANADIAN SYLLABICS TTHA
+156F;N # CANADIAN SYLLABICS TTH
+1570;N # CANADIAN SYLLABICS TYE
+1571;N # CANADIAN SYLLABICS TYI
+1572;N # CANADIAN SYLLABICS TYO
+1573;N # CANADIAN SYLLABICS TYA
+1574;N # CANADIAN SYLLABICS NUNAVIK HE
+1575;N # CANADIAN SYLLABICS NUNAVIK HI
+1576;N # CANADIAN SYLLABICS NUNAVIK HII
+1577;N # CANADIAN SYLLABICS NUNAVIK HO
+1578;N # CANADIAN SYLLABICS NUNAVIK HOO
+1579;N # CANADIAN SYLLABICS NUNAVIK HA
+157A;N # CANADIAN SYLLABICS NUNAVIK HAA
+157B;N # CANADIAN SYLLABICS NUNAVIK H
+157C;N # CANADIAN SYLLABICS NUNAVUT H
+157D;N # CANADIAN SYLLABICS HK
+157E;N # CANADIAN SYLLABICS QAAI
+157F;N # CANADIAN SYLLABICS QI
+1580;N # CANADIAN SYLLABICS QII
+1581;N # CANADIAN SYLLABICS QO
+1582;N # CANADIAN SYLLABICS QOO
+1583;N # CANADIAN SYLLABICS QA
+1584;N # CANADIAN SYLLABICS QAA
+1585;N # CANADIAN SYLLABICS Q
+1586;N # CANADIAN SYLLABICS TLHE
+1587;N # CANADIAN SYLLABICS TLHI
+1588;N # CANADIAN SYLLABICS TLHO
+1589;N # CANADIAN SYLLABICS TLHA
+158A;N # CANADIAN SYLLABICS WEST-CREE RE
+158B;N # CANADIAN SYLLABICS WEST-CREE RI
+158C;N # CANADIAN SYLLABICS WEST-CREE RO
+158D;N # CANADIAN SYLLABICS WEST-CREE RA
+158E;N # CANADIAN SYLLABICS NGAAI
+158F;N # CANADIAN SYLLABICS NGI
+1590;N # CANADIAN SYLLABICS NGII
+1591;N # CANADIAN SYLLABICS NGO
+1592;N # CANADIAN SYLLABICS NGOO
+1593;N # CANADIAN SYLLABICS NGA
+1594;N # CANADIAN SYLLABICS NGAA
+1595;N # CANADIAN SYLLABICS NG
+1596;N # CANADIAN SYLLABICS NNG
+1597;N # CANADIAN SYLLABICS SAYISI SHE
+1598;N # CANADIAN SYLLABICS SAYISI SHI
+1599;N # CANADIAN SYLLABICS SAYISI SHO
+159A;N # CANADIAN SYLLABICS SAYISI SHA
+159B;N # CANADIAN SYLLABICS WOODS-CREE THE
+159C;N # CANADIAN SYLLABICS WOODS-CREE THI
+159D;N # CANADIAN SYLLABICS WOODS-CREE THO
+159E;N # CANADIAN SYLLABICS WOODS-CREE THA
+159F;N # CANADIAN SYLLABICS WOODS-CREE TH
+15A0;N # CANADIAN SYLLABICS LHI
+15A1;N # CANADIAN SYLLABICS LHII
+15A2;N # CANADIAN SYLLABICS LHO
+15A3;N # CANADIAN SYLLABICS LHOO
+15A4;N # CANADIAN SYLLABICS LHA
+15A5;N # CANADIAN SYLLABICS LHAA
+15A6;N # CANADIAN SYLLABICS LH
+15A7;N # CANADIAN SYLLABICS TH-CREE THE
+15A8;N # CANADIAN SYLLABICS TH-CREE THI
+15A9;N # CANADIAN SYLLABICS TH-CREE THII
+15AA;N # CANADIAN SYLLABICS TH-CREE THO
+15AB;N # CANADIAN SYLLABICS TH-CREE THOO
+15AC;N # CANADIAN SYLLABICS TH-CREE THA
+15AD;N # CANADIAN SYLLABICS TH-CREE THAA
+15AE;N # CANADIAN SYLLABICS TH-CREE TH
+15AF;N # CANADIAN SYLLABICS AIVILIK B
+15B0;N # CANADIAN SYLLABICS BLACKFOOT E
+15B1;N # CANADIAN SYLLABICS BLACKFOOT I
+15B2;N # CANADIAN SYLLABICS BLACKFOOT O
+15B3;N # CANADIAN SYLLABICS BLACKFOOT A
+15B4;N # CANADIAN SYLLABICS BLACKFOOT WE
+15B5;N # CANADIAN SYLLABICS BLACKFOOT WI
+15B6;N # CANADIAN SYLLABICS BLACKFOOT WO
+15B7;N # CANADIAN SYLLABICS BLACKFOOT WA
+15B8;N # CANADIAN SYLLABICS BLACKFOOT NE
+15B9;N # CANADIAN SYLLABICS BLACKFOOT NI
+15BA;N # CANADIAN SYLLABICS BLACKFOOT NO
+15BB;N # CANADIAN SYLLABICS BLACKFOOT NA
+15BC;N # CANADIAN SYLLABICS BLACKFOOT KE
+15BD;N # CANADIAN SYLLABICS BLACKFOOT KI
+15BE;N # CANADIAN SYLLABICS BLACKFOOT KO
+15BF;N # CANADIAN SYLLABICS BLACKFOOT KA
+15C0;N # CANADIAN SYLLABICS SAYISI HE
+15C1;N # CANADIAN SYLLABICS SAYISI HI
+15C2;N # CANADIAN SYLLABICS SAYISI HO
+15C3;N # CANADIAN SYLLABICS SAYISI HA
+15C4;N # CANADIAN SYLLABICS CARRIER GHU
+15C5;N # CANADIAN SYLLABICS CARRIER GHO
+15C6;N # CANADIAN SYLLABICS CARRIER GHE
+15C7;N # CANADIAN SYLLABICS CARRIER GHEE
+15C8;N # CANADIAN SYLLABICS CARRIER GHI
+15C9;N # CANADIAN SYLLABICS CARRIER GHA
+15CA;N # CANADIAN SYLLABICS CARRIER RU
+15CB;N # CANADIAN SYLLABICS CARRIER RO
+15CC;N # CANADIAN SYLLABICS CARRIER RE
+15CD;N # CANADIAN SYLLABICS CARRIER REE
+15CE;N # CANADIAN SYLLABICS CARRIER RI
+15CF;N # CANADIAN SYLLABICS CARRIER RA
+15D0;N # CANADIAN SYLLABICS CARRIER WU
+15D1;N # CANADIAN SYLLABICS CARRIER WO
+15D2;N # CANADIAN SYLLABICS CARRIER WE
+15D3;N # CANADIAN SYLLABICS CARRIER WEE
+15D4;N # CANADIAN SYLLABICS CARRIER WI
+15D5;N # CANADIAN SYLLABICS CARRIER WA
+15D6;N # CANADIAN SYLLABICS CARRIER HWU
+15D7;N # CANADIAN SYLLABICS CARRIER HWO
+15D8;N # CANADIAN SYLLABICS CARRIER HWE
+15D9;N # CANADIAN SYLLABICS CARRIER HWEE
+15DA;N # CANADIAN SYLLABICS CARRIER HWI
+15DB;N # CANADIAN SYLLABICS CARRIER HWA
+15DC;N # CANADIAN SYLLABICS CARRIER THU
+15DD;N # CANADIAN SYLLABICS CARRIER THO
+15DE;N # CANADIAN SYLLABICS CARRIER THE
+15DF;N # CANADIAN SYLLABICS CARRIER THEE
+15E0;N # CANADIAN SYLLABICS CARRIER THI
+15E1;N # CANADIAN SYLLABICS CARRIER THA
+15E2;N # CANADIAN SYLLABICS CARRIER TTU
+15E3;N # CANADIAN SYLLABICS CARRIER TTO
+15E4;N # CANADIAN SYLLABICS CARRIER TTE
+15E5;N # CANADIAN SYLLABICS CARRIER TTEE
+15E6;N # CANADIAN SYLLABICS CARRIER TTI
+15E7;N # CANADIAN SYLLABICS CARRIER TTA
+15E8;N # CANADIAN SYLLABICS CARRIER PU
+15E9;N # CANADIAN SYLLABICS CARRIER PO
+15EA;N # CANADIAN SYLLABICS CARRIER PE
+15EB;N # CANADIAN SYLLABICS CARRIER PEE
+15EC;N # CANADIAN SYLLABICS CARRIER PI
+15ED;N # CANADIAN SYLLABICS CARRIER PA
+15EE;N # CANADIAN SYLLABICS CARRIER P
+15EF;N # CANADIAN SYLLABICS CARRIER GU
+15F0;N # CANADIAN SYLLABICS CARRIER GO
+15F1;N # CANADIAN SYLLABICS CARRIER GE
+15F2;N # CANADIAN SYLLABICS CARRIER GEE
+15F3;N # CANADIAN SYLLABICS CARRIER GI
+15F4;N # CANADIAN SYLLABICS CARRIER GA
+15F5;N # CANADIAN SYLLABICS CARRIER KHU
+15F6;N # CANADIAN SYLLABICS CARRIER KHO
+15F7;N # CANADIAN SYLLABICS CARRIER KHE
+15F8;N # CANADIAN SYLLABICS CARRIER KHEE
+15F9;N # CANADIAN SYLLABICS CARRIER KHI
+15FA;N # CANADIAN SYLLABICS CARRIER KHA
+15FB;N # CANADIAN SYLLABICS CARRIER KKU
+15FC;N # CANADIAN SYLLABICS CARRIER KKO
+15FD;N # CANADIAN SYLLABICS CARRIER KKE
+15FE;N # CANADIAN SYLLABICS CARRIER KKEE
+15FF;N # CANADIAN SYLLABICS CARRIER KKI
+1600;N # CANADIAN SYLLABICS CARRIER KKA
+1601;N # CANADIAN SYLLABICS CARRIER KK
+1602;N # CANADIAN SYLLABICS CARRIER NU
+1603;N # CANADIAN SYLLABICS CARRIER NO
+1604;N # CANADIAN SYLLABICS CARRIER NE
+1605;N # CANADIAN SYLLABICS CARRIER NEE
+1606;N # CANADIAN SYLLABICS CARRIER NI
+1607;N # CANADIAN SYLLABICS CARRIER NA
+1608;N # CANADIAN SYLLABICS CARRIER MU
+1609;N # CANADIAN SYLLABICS CARRIER MO
+160A;N # CANADIAN SYLLABICS CARRIER ME
+160B;N # CANADIAN SYLLABICS CARRIER MEE
+160C;N # CANADIAN SYLLABICS CARRIER MI
+160D;N # CANADIAN SYLLABICS CARRIER MA
+160E;N # CANADIAN SYLLABICS CARRIER YU
+160F;N # CANADIAN SYLLABICS CARRIER YO
+1610;N # CANADIAN SYLLABICS CARRIER YE
+1611;N # CANADIAN SYLLABICS CARRIER YEE
+1612;N # CANADIAN SYLLABICS CARRIER YI
+1613;N # CANADIAN SYLLABICS CARRIER YA
+1614;N # CANADIAN SYLLABICS CARRIER JU
+1615;N # CANADIAN SYLLABICS SAYISI JU
+1616;N # CANADIAN SYLLABICS CARRIER JO
+1617;N # CANADIAN SYLLABICS CARRIER JE
+1618;N # CANADIAN SYLLABICS CARRIER JEE
+1619;N # CANADIAN SYLLABICS CARRIER JI
+161A;N # CANADIAN SYLLABICS SAYISI JI
+161B;N # CANADIAN SYLLABICS CARRIER JA
+161C;N # CANADIAN SYLLABICS CARRIER JJU
+161D;N # CANADIAN SYLLABICS CARRIER JJO
+161E;N # CANADIAN SYLLABICS CARRIER JJE
+161F;N # CANADIAN SYLLABICS CARRIER JJEE
+1620;N # CANADIAN SYLLABICS CARRIER JJI
+1621;N # CANADIAN SYLLABICS CARRIER JJA
+1622;N # CANADIAN SYLLABICS CARRIER LU
+1623;N # CANADIAN SYLLABICS CARRIER LO
+1624;N # CANADIAN SYLLABICS CARRIER LE
+1625;N # CANADIAN SYLLABICS CARRIER LEE
+1626;N # CANADIAN SYLLABICS CARRIER LI
+1627;N # CANADIAN SYLLABICS CARRIER LA
+1628;N # CANADIAN SYLLABICS CARRIER DLU
+1629;N # CANADIAN SYLLABICS CARRIER DLO
+162A;N # CANADIAN SYLLABICS CARRIER DLE
+162B;N # CANADIAN SYLLABICS CARRIER DLEE
+162C;N # CANADIAN SYLLABICS CARRIER DLI
+162D;N # CANADIAN SYLLABICS CARRIER DLA
+162E;N # CANADIAN SYLLABICS CARRIER LHU
+162F;N # CANADIAN SYLLABICS CARRIER LHO
+1630;N # CANADIAN SYLLABICS CARRIER LHE
+1631;N # CANADIAN SYLLABICS CARRIER LHEE
+1632;N # CANADIAN SYLLABICS CARRIER LHI
+1633;N # CANADIAN SYLLABICS CARRIER LHA
+1634;N # CANADIAN SYLLABICS CARRIER TLHU
+1635;N # CANADIAN SYLLABICS CARRIER TLHO
+1636;N # CANADIAN SYLLABICS CARRIER TLHE
+1637;N # CANADIAN SYLLABICS CARRIER TLHEE
+1638;N # CANADIAN SYLLABICS CARRIER TLHI
+1639;N # CANADIAN SYLLABICS CARRIER TLHA
+163A;N # CANADIAN SYLLABICS CARRIER TLU
+163B;N # CANADIAN SYLLABICS CARRIER TLO
+163C;N # CANADIAN SYLLABICS CARRIER TLE
+163D;N # CANADIAN SYLLABICS CARRIER TLEE
+163E;N # CANADIAN SYLLABICS CARRIER TLI
+163F;N # CANADIAN SYLLABICS CARRIER TLA
+1640;N # CANADIAN SYLLABICS CARRIER ZU
+1641;N # CANADIAN SYLLABICS CARRIER ZO
+1642;N # CANADIAN SYLLABICS CARRIER ZE
+1643;N # CANADIAN SYLLABICS CARRIER ZEE
+1644;N # CANADIAN SYLLABICS CARRIER ZI
+1645;N # CANADIAN SYLLABICS CARRIER ZA
+1646;N # CANADIAN SYLLABICS CARRIER Z
+1647;N # CANADIAN SYLLABICS CARRIER INITIAL Z
+1648;N # CANADIAN SYLLABICS CARRIER DZU
+1649;N # CANADIAN SYLLABICS CARRIER DZO
+164A;N # CANADIAN SYLLABICS CARRIER DZE
+164B;N # CANADIAN SYLLABICS CARRIER DZEE
+164C;N # CANADIAN SYLLABICS CARRIER DZI
+164D;N # CANADIAN SYLLABICS CARRIER DZA
+164E;N # CANADIAN SYLLABICS CARRIER SU
+164F;N # CANADIAN SYLLABICS CARRIER SO
+1650;N # CANADIAN SYLLABICS CARRIER SE
+1651;N # CANADIAN SYLLABICS CARRIER SEE
+1652;N # CANADIAN SYLLABICS CARRIER SI
+1653;N # CANADIAN SYLLABICS CARRIER SA
+1654;N # CANADIAN SYLLABICS CARRIER SHU
+1655;N # CANADIAN SYLLABICS CARRIER SHO
+1656;N # CANADIAN SYLLABICS CARRIER SHE
+1657;N # CANADIAN SYLLABICS CARRIER SHEE
+1658;N # CANADIAN SYLLABICS CARRIER SHI
+1659;N # CANADIAN SYLLABICS CARRIER SHA
+165A;N # CANADIAN SYLLABICS CARRIER SH
+165B;N # CANADIAN SYLLABICS CARRIER TSU
+165C;N # CANADIAN SYLLABICS CARRIER TSO
+165D;N # CANADIAN SYLLABICS CARRIER TSE
+165E;N # CANADIAN SYLLABICS CARRIER TSEE
+165F;N # CANADIAN SYLLABICS CARRIER TSI
+1660;N # CANADIAN SYLLABICS CARRIER TSA
+1661;N # CANADIAN SYLLABICS CARRIER CHU
+1662;N # CANADIAN SYLLABICS CARRIER CHO
+1663;N # CANADIAN SYLLABICS CARRIER CHE
+1664;N # CANADIAN SYLLABICS CARRIER CHEE
+1665;N # CANADIAN SYLLABICS CARRIER CHI
+1666;N # CANADIAN SYLLABICS CARRIER CHA
+1667;N # CANADIAN SYLLABICS CARRIER TTSU
+1668;N # CANADIAN SYLLABICS CARRIER TTSO
+1669;N # CANADIAN SYLLABICS CARRIER TTSE
+166A;N # CANADIAN SYLLABICS CARRIER TTSEE
+166B;N # CANADIAN SYLLABICS CARRIER TTSI
+166C;N # CANADIAN SYLLABICS CARRIER TTSA
+166D;N # CANADIAN SYLLABICS CHI SIGN
+166E;N # CANADIAN SYLLABICS FULL STOP
+166F;N # CANADIAN SYLLABICS QAI
+1670;N # CANADIAN SYLLABICS NGAI
+1671;N # CANADIAN SYLLABICS NNGI
+1672;N # CANADIAN SYLLABICS NNGII
+1673;N # CANADIAN SYLLABICS NNGO
+1674;N # CANADIAN SYLLABICS NNGOO
+1675;N # CANADIAN SYLLABICS NNGA
+1676;N # CANADIAN SYLLABICS NNGAA
+1680;N # OGHAM SPACE MARK
+1681;N # OGHAM LETTER BEITH
+1682;N # OGHAM LETTER LUIS
+1683;N # OGHAM LETTER FEARN
+1684;N # OGHAM LETTER SAIL
+1685;N # OGHAM LETTER NION
+1686;N # OGHAM LETTER UATH
+1687;N # OGHAM LETTER DAIR
+1688;N # OGHAM LETTER TINNE
+1689;N # OGHAM LETTER COLL
+168A;N # OGHAM LETTER CEIRT
+168B;N # OGHAM LETTER MUIN
+168C;N # OGHAM LETTER GORT
+168D;N # OGHAM LETTER NGEADAL
+168E;N # OGHAM LETTER STRAIF
+168F;N # OGHAM LETTER RUIS
+1690;N # OGHAM LETTER AILM
+1691;N # OGHAM LETTER ONN
+1692;N # OGHAM LETTER UR
+1693;N # OGHAM LETTER EADHADH
+1694;N # OGHAM LETTER IODHADH
+1695;N # OGHAM LETTER EABHADH
+1696;N # OGHAM LETTER OR
+1697;N # OGHAM LETTER UILLEANN
+1698;N # OGHAM LETTER IFIN
+1699;N # OGHAM LETTER EAMHANCHOLL
+169A;N # OGHAM LETTER PEITH
+169B;N # OGHAM FEATHER MARK
+169C;N # OGHAM REVERSED FEATHER MARK
+16A0;N # RUNIC LETTER FEHU FEOH FE F
+16A1;N # RUNIC LETTER V
+16A2;N # RUNIC LETTER URUZ UR U
+16A3;N # RUNIC LETTER YR
+16A4;N # RUNIC LETTER Y
+16A5;N # RUNIC LETTER W
+16A6;N # RUNIC LETTER THURISAZ THURS THORN
+16A7;N # RUNIC LETTER ETH
+16A8;N # RUNIC LETTER ANSUZ A
+16A9;N # RUNIC LETTER OS O
+16AA;N # RUNIC LETTER AC A
+16AB;N # RUNIC LETTER AESC
+16AC;N # RUNIC LETTER LONG-BRANCH-OSS O
+16AD;N # RUNIC LETTER SHORT-TWIG-OSS O
+16AE;N # RUNIC LETTER O
+16AF;N # RUNIC LETTER OE
+16B0;N # RUNIC LETTER ON
+16B1;N # RUNIC LETTER RAIDO RAD REID R
+16B2;N # RUNIC LETTER KAUNA
+16B3;N # RUNIC LETTER CEN
+16B4;N # RUNIC LETTER KAUN K
+16B5;N # RUNIC LETTER G
+16B6;N # RUNIC LETTER ENG
+16B7;N # RUNIC LETTER GEBO GYFU G
+16B8;N # RUNIC LETTER GAR
+16B9;N # RUNIC LETTER WUNJO WYNN W
+16BA;N # RUNIC LETTER HAGLAZ H
+16BB;N # RUNIC LETTER HAEGL H
+16BC;N # RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD;N # RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE;N # RUNIC LETTER NAUDIZ NYD NAUD N
+16BF;N # RUNIC LETTER SHORT-TWIG-NAUD N
+16C0;N # RUNIC LETTER DOTTED-N
+16C1;N # RUNIC LETTER ISAZ IS ISS I
+16C2;N # RUNIC LETTER E
+16C3;N # RUNIC LETTER JERAN J
+16C4;N # RUNIC LETTER GER
+16C5;N # RUNIC LETTER LONG-BRANCH-AR AE
+16C6;N # RUNIC LETTER SHORT-TWIG-AR A
+16C7;N # RUNIC LETTER IWAZ EOH
+16C8;N # RUNIC LETTER PERTHO PEORTH P
+16C9;N # RUNIC LETTER ALGIZ EOLHX
+16CA;N # RUNIC LETTER SOWILO S
+16CB;N # RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC;N # RUNIC LETTER SHORT-TWIG-SOL S
+16CD;N # RUNIC LETTER C
+16CE;N # RUNIC LETTER Z
+16CF;N # RUNIC LETTER TIWAZ TIR TYR T
+16D0;N # RUNIC LETTER SHORT-TWIG-TYR T
+16D1;N # RUNIC LETTER D
+16D2;N # RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3;N # RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4;N # RUNIC LETTER DOTTED-P
+16D5;N # RUNIC LETTER OPEN-P
+16D6;N # RUNIC LETTER EHWAZ EH E
+16D7;N # RUNIC LETTER MANNAZ MAN M
+16D8;N # RUNIC LETTER LONG-BRANCH-MADR M
+16D9;N # RUNIC LETTER SHORT-TWIG-MADR M
+16DA;N # RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB;N # RUNIC LETTER DOTTED-L
+16DC;N # RUNIC LETTER INGWAZ
+16DD;N # RUNIC LETTER ING
+16DE;N # RUNIC LETTER DAGAZ DAEG D
+16DF;N # RUNIC LETTER OTHALAN ETHEL O
+16E0;N # RUNIC LETTER EAR
+16E1;N # RUNIC LETTER IOR
+16E2;N # RUNIC LETTER CWEORTH
+16E3;N # RUNIC LETTER CALC
+16E4;N # RUNIC LETTER CEALC
+16E5;N # RUNIC LETTER STAN
+16E6;N # RUNIC LETTER LONG-BRANCH-YR
+16E7;N # RUNIC LETTER SHORT-TWIG-YR
+16E8;N # RUNIC LETTER ICELANDIC-YR
+16E9;N # RUNIC LETTER Q
+16EA;N # RUNIC LETTER X
+16EB;N # RUNIC SINGLE PUNCTUATION
+16EC;N # RUNIC MULTIPLE PUNCTUATION
+16ED;N # RUNIC CROSS PUNCTUATION
+16EE;N # RUNIC ARLAUG SYMBOL
+16EF;N # RUNIC TVIMADUR SYMBOL
+16F0;N # RUNIC BELGTHOR SYMBOL
+1700;N # TAGALOG LETTER A
+1701;N # TAGALOG LETTER I
+1702;N # TAGALOG LETTER U
+1703;N # TAGALOG LETTER KA
+1704;N # TAGALOG LETTER GA
+1705;N # TAGALOG LETTER NGA
+1706;N # TAGALOG LETTER TA
+1707;N # TAGALOG LETTER DA
+1708;N # TAGALOG LETTER NA
+1709;N # TAGALOG LETTER PA
+170A;N # TAGALOG LETTER BA
+170B;N # TAGALOG LETTER MA
+170C;N # TAGALOG LETTER YA
+170E;N # TAGALOG LETTER LA
+170F;N # TAGALOG LETTER WA
+1710;N # TAGALOG LETTER SA
+1711;N # TAGALOG LETTER HA
+1712;N # TAGALOG VOWEL SIGN I
+1713;N # TAGALOG VOWEL SIGN U
+1714;N # TAGALOG SIGN VIRAMA
+1720;N # HANUNOO LETTER A
+1721;N # HANUNOO LETTER I
+1722;N # HANUNOO LETTER U
+1723;N # HANUNOO LETTER KA
+1724;N # HANUNOO LETTER GA
+1725;N # HANUNOO LETTER NGA
+1726;N # HANUNOO LETTER TA
+1727;N # HANUNOO LETTER DA
+1728;N # HANUNOO LETTER NA
+1729;N # HANUNOO LETTER PA
+172A;N # HANUNOO LETTER BA
+172B;N # HANUNOO LETTER MA
+172C;N # HANUNOO LETTER YA
+172D;N # HANUNOO LETTER RA
+172E;N # HANUNOO LETTER LA
+172F;N # HANUNOO LETTER WA
+1730;N # HANUNOO LETTER SA
+1731;N # HANUNOO LETTER HA
+1732;N # HANUNOO VOWEL SIGN I
+1733;N # HANUNOO VOWEL SIGN U
+1734;N # HANUNOO SIGN PAMUDPOD
+1735;N # PHILIPPINE SINGLE PUNCTUATION
+1736;N # PHILIPPINE DOUBLE PUNCTUATION
+1740;N # BUHID LETTER A
+1741;N # BUHID LETTER I
+1742;N # BUHID LETTER U
+1743;N # BUHID LETTER KA
+1744;N # BUHID LETTER GA
+1745;N # BUHID LETTER NGA
+1746;N # BUHID LETTER TA
+1747;N # BUHID LETTER DA
+1748;N # BUHID LETTER NA
+1749;N # BUHID LETTER PA
+174A;N # BUHID LETTER BA
+174B;N # BUHID LETTER MA
+174C;N # BUHID LETTER YA
+174D;N # BUHID LETTER RA
+174E;N # BUHID LETTER LA
+174F;N # BUHID LETTER WA
+1750;N # BUHID LETTER SA
+1751;N # BUHID LETTER HA
+1752;N # BUHID VOWEL SIGN I
+1753;N # BUHID VOWEL SIGN U
+1760;N # TAGBANWA LETTER A
+1761;N # TAGBANWA LETTER I
+1762;N # TAGBANWA LETTER U
+1763;N # TAGBANWA LETTER KA
+1764;N # TAGBANWA LETTER GA
+1765;N # TAGBANWA LETTER NGA
+1766;N # TAGBANWA LETTER TA
+1767;N # TAGBANWA LETTER DA
+1768;N # TAGBANWA LETTER NA
+1769;N # TAGBANWA LETTER PA
+176A;N # TAGBANWA LETTER BA
+176B;N # TAGBANWA LETTER MA
+176C;N # TAGBANWA LETTER YA
+176E;N # TAGBANWA LETTER LA
+176F;N # TAGBANWA LETTER WA
+1770;N # TAGBANWA LETTER SA
+1772;N # TAGBANWA VOWEL SIGN I
+1773;N # TAGBANWA VOWEL SIGN U
+1780;N # KHMER LETTER KA
+1781;N # KHMER LETTER KHA
+1782;N # KHMER LETTER KO
+1783;N # KHMER LETTER KHO
+1784;N # KHMER LETTER NGO
+1785;N # KHMER LETTER CA
+1786;N # KHMER LETTER CHA
+1787;N # KHMER LETTER CO
+1788;N # KHMER LETTER CHO
+1789;N # KHMER LETTER NYO
+178A;N # KHMER LETTER DA
+178B;N # KHMER LETTER TTHA
+178C;N # KHMER LETTER DO
+178D;N # KHMER LETTER TTHO
+178E;N # KHMER LETTER NNO
+178F;N # KHMER LETTER TA
+1790;N # KHMER LETTER THA
+1791;N # KHMER LETTER TO
+1792;N # KHMER LETTER THO
+1793;N # KHMER LETTER NO
+1794;N # KHMER LETTER BA
+1795;N # KHMER LETTER PHA
+1796;N # KHMER LETTER PO
+1797;N # KHMER LETTER PHO
+1798;N # KHMER LETTER MO
+1799;N # KHMER LETTER YO
+179A;N # KHMER LETTER RO
+179B;N # KHMER LETTER LO
+179C;N # KHMER LETTER VO
+179D;N # KHMER LETTER SHA
+179E;N # KHMER LETTER SSO
+179F;N # KHMER LETTER SA
+17A0;N # KHMER LETTER HA
+17A1;N # KHMER LETTER LA
+17A2;N # KHMER LETTER QA
+17A3;N # KHMER INDEPENDENT VOWEL QAQ
+17A4;N # KHMER INDEPENDENT VOWEL QAA
+17A5;N # KHMER INDEPENDENT VOWEL QI
+17A6;N # KHMER INDEPENDENT VOWEL QII
+17A7;N # KHMER INDEPENDENT VOWEL QU
+17A8;N # KHMER INDEPENDENT VOWEL QUK
+17A9;N # KHMER INDEPENDENT VOWEL QUU
+17AA;N # KHMER INDEPENDENT VOWEL QUUV
+17AB;N # KHMER INDEPENDENT VOWEL RY
+17AC;N # KHMER INDEPENDENT VOWEL RYY
+17AD;N # KHMER INDEPENDENT VOWEL LY
+17AE;N # KHMER INDEPENDENT VOWEL LYY
+17AF;N # KHMER INDEPENDENT VOWEL QE
+17B0;N # KHMER INDEPENDENT VOWEL QAI
+17B1;N # KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2;N # KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3;N # KHMER INDEPENDENT VOWEL QAU
+17B4;N # KHMER VOWEL INHERENT AQ
+17B5;N # KHMER VOWEL INHERENT AA
+17B6;N # KHMER VOWEL SIGN AA
+17B7;N # KHMER VOWEL SIGN I
+17B8;N # KHMER VOWEL SIGN II
+17B9;N # KHMER VOWEL SIGN Y
+17BA;N # KHMER VOWEL SIGN YY
+17BB;N # KHMER VOWEL SIGN U
+17BC;N # KHMER VOWEL SIGN UU
+17BD;N # KHMER VOWEL SIGN UA
+17BE;N # KHMER VOWEL SIGN OE
+17BF;N # KHMER VOWEL SIGN YA
+17C0;N # KHMER VOWEL SIGN IE
+17C1;N # KHMER VOWEL SIGN E
+17C2;N # KHMER VOWEL SIGN AE
+17C3;N # KHMER VOWEL SIGN AI
+17C4;N # KHMER VOWEL SIGN OO
+17C5;N # KHMER VOWEL SIGN AU
+17C6;N # KHMER SIGN NIKAHIT
+17C7;N # KHMER SIGN REAHMUK
+17C8;N # KHMER SIGN YUUKALEAPINTU
+17C9;N # KHMER SIGN MUUSIKATOAN
+17CA;N # KHMER SIGN TRIISAP
+17CB;N # KHMER SIGN BANTOC
+17CC;N # KHMER SIGN ROBAT
+17CD;N # KHMER SIGN TOANDAKHIAT
+17CE;N # KHMER SIGN KAKABAT
+17CF;N # KHMER SIGN AHSDA
+17D0;N # KHMER SIGN SAMYOK SANNYA
+17D1;N # KHMER SIGN VIRIAM
+17D2;N # KHMER SIGN COENG
+17D3;N # KHMER SIGN BATHAMASAT
+17D4;N # KHMER SIGN KHAN
+17D5;N # KHMER SIGN BARIYOOSAN
+17D6;N # KHMER SIGN CAMNUC PII KUUH
+17D7;N # KHMER SIGN LEK TOO
+17D8;N # KHMER SIGN BEYYAL
+17D9;N # KHMER SIGN PHNAEK MUAN
+17DA;N # KHMER SIGN KOOMUUT
+17DB;N # KHMER CURRENCY SYMBOL RIEL
+17DC;N # KHMER SIGN AVAKRAHASANYA
+17DD;N # KHMER SIGN ATTHACAN
+17E0;N # KHMER DIGIT ZERO
+17E1;N # KHMER DIGIT ONE
+17E2;N # KHMER DIGIT TWO
+17E3;N # KHMER DIGIT THREE
+17E4;N # KHMER DIGIT FOUR
+17E5;N # KHMER DIGIT FIVE
+17E6;N # KHMER DIGIT SIX
+17E7;N # KHMER DIGIT SEVEN
+17E8;N # KHMER DIGIT EIGHT
+17E9;N # KHMER DIGIT NINE
+17F0;N # KHMER SYMBOL LEK ATTAK SON
+17F1;N # KHMER SYMBOL LEK ATTAK MUOY
+17F2;N # KHMER SYMBOL LEK ATTAK PII
+17F3;N # KHMER SYMBOL LEK ATTAK BEI
+17F4;N # KHMER SYMBOL LEK ATTAK BUON
+17F5;N # KHMER SYMBOL LEK ATTAK PRAM
+17F6;N # KHMER SYMBOL LEK ATTAK PRAM-MUOY
+17F7;N # KHMER SYMBOL LEK ATTAK PRAM-PII
+17F8;N # KHMER SYMBOL LEK ATTAK PRAM-BEI
+17F9;N # KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800;N # MONGOLIAN BIRGA
+1801;N # MONGOLIAN ELLIPSIS
+1802;N # MONGOLIAN COMMA
+1803;N # MONGOLIAN FULL STOP
+1804;N # MONGOLIAN COLON
+1805;N # MONGOLIAN FOUR DOTS
+1806;N # MONGOLIAN TODO SOFT HYPHEN
+1807;N # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808;N # MONGOLIAN MANCHU COMMA
+1809;N # MONGOLIAN MANCHU FULL STOP
+180A;N # MONGOLIAN NIRUGU
+180B;N # MONGOLIAN FREE VARIATION SELECTOR ONE
+180C;N # MONGOLIAN FREE VARIATION SELECTOR TWO
+180D;N # MONGOLIAN FREE VARIATION SELECTOR THREE
+180E;N # MONGOLIAN VOWEL SEPARATOR
+1810;N # MONGOLIAN DIGIT ZERO
+1811;N # MONGOLIAN DIGIT ONE
+1812;N # MONGOLIAN DIGIT TWO
+1813;N # MONGOLIAN DIGIT THREE
+1814;N # MONGOLIAN DIGIT FOUR
+1815;N # MONGOLIAN DIGIT FIVE
+1816;N # MONGOLIAN DIGIT SIX
+1817;N # MONGOLIAN DIGIT SEVEN
+1818;N # MONGOLIAN DIGIT EIGHT
+1819;N # MONGOLIAN DIGIT NINE
+1820;N # MONGOLIAN LETTER A
+1821;N # MONGOLIAN LETTER E
+1822;N # MONGOLIAN LETTER I
+1823;N # MONGOLIAN LETTER O
+1824;N # MONGOLIAN LETTER U
+1825;N # MONGOLIAN LETTER OE
+1826;N # MONGOLIAN LETTER UE
+1827;N # MONGOLIAN LETTER EE
+1828;N # MONGOLIAN LETTER NA
+1829;N # MONGOLIAN LETTER ANG
+182A;N # MONGOLIAN LETTER BA
+182B;N # MONGOLIAN LETTER PA
+182C;N # MONGOLIAN LETTER QA
+182D;N # MONGOLIAN LETTER GA
+182E;N # MONGOLIAN LETTER MA
+182F;N # MONGOLIAN LETTER LA
+1830;N # MONGOLIAN LETTER SA
+1831;N # MONGOLIAN LETTER SHA
+1832;N # MONGOLIAN LETTER TA
+1833;N # MONGOLIAN LETTER DA
+1834;N # MONGOLIAN LETTER CHA
+1835;N # MONGOLIAN LETTER JA
+1836;N # MONGOLIAN LETTER YA
+1837;N # MONGOLIAN LETTER RA
+1838;N # MONGOLIAN LETTER WA
+1839;N # MONGOLIAN LETTER FA
+183A;N # MONGOLIAN LETTER KA
+183B;N # MONGOLIAN LETTER KHA
+183C;N # MONGOLIAN LETTER TSA
+183D;N # MONGOLIAN LETTER ZA
+183E;N # MONGOLIAN LETTER HAA
+183F;N # MONGOLIAN LETTER ZRA
+1840;N # MONGOLIAN LETTER LHA
+1841;N # MONGOLIAN LETTER ZHI
+1842;N # MONGOLIAN LETTER CHI
+1843;N # MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844;N # MONGOLIAN LETTER TODO E
+1845;N # MONGOLIAN LETTER TODO I
+1846;N # MONGOLIAN LETTER TODO O
+1847;N # MONGOLIAN LETTER TODO U
+1848;N # MONGOLIAN LETTER TODO OE
+1849;N # MONGOLIAN LETTER TODO UE
+184A;N # MONGOLIAN LETTER TODO ANG
+184B;N # MONGOLIAN LETTER TODO BA
+184C;N # MONGOLIAN LETTER TODO PA
+184D;N # MONGOLIAN LETTER TODO QA
+184E;N # MONGOLIAN LETTER TODO GA
+184F;N # MONGOLIAN LETTER TODO MA
+1850;N # MONGOLIAN LETTER TODO TA
+1851;N # MONGOLIAN LETTER TODO DA
+1852;N # MONGOLIAN LETTER TODO CHA
+1853;N # MONGOLIAN LETTER TODO JA
+1854;N # MONGOLIAN LETTER TODO TSA
+1855;N # MONGOLIAN LETTER TODO YA
+1856;N # MONGOLIAN LETTER TODO WA
+1857;N # MONGOLIAN LETTER TODO KA
+1858;N # MONGOLIAN LETTER TODO GAA
+1859;N # MONGOLIAN LETTER TODO HAA
+185A;N # MONGOLIAN LETTER TODO JIA
+185B;N # MONGOLIAN LETTER TODO NIA
+185C;N # MONGOLIAN LETTER TODO DZA
+185D;N # MONGOLIAN LETTER SIBE E
+185E;N # MONGOLIAN LETTER SIBE I
+185F;N # MONGOLIAN LETTER SIBE IY
+1860;N # MONGOLIAN LETTER SIBE UE
+1861;N # MONGOLIAN LETTER SIBE U
+1862;N # MONGOLIAN LETTER SIBE ANG
+1863;N # MONGOLIAN LETTER SIBE KA
+1864;N # MONGOLIAN LETTER SIBE GA
+1865;N # MONGOLIAN LETTER SIBE HA
+1866;N # MONGOLIAN LETTER SIBE PA
+1867;N # MONGOLIAN LETTER SIBE SHA
+1868;N # MONGOLIAN LETTER SIBE TA
+1869;N # MONGOLIAN LETTER SIBE DA
+186A;N # MONGOLIAN LETTER SIBE JA
+186B;N # MONGOLIAN LETTER SIBE FA
+186C;N # MONGOLIAN LETTER SIBE GAA
+186D;N # MONGOLIAN LETTER SIBE HAA
+186E;N # MONGOLIAN LETTER SIBE TSA
+186F;N # MONGOLIAN LETTER SIBE ZA
+1870;N # MONGOLIAN LETTER SIBE RAA
+1871;N # MONGOLIAN LETTER SIBE CHA
+1872;N # MONGOLIAN LETTER SIBE ZHA
+1873;N # MONGOLIAN LETTER MANCHU I
+1874;N # MONGOLIAN LETTER MANCHU KA
+1875;N # MONGOLIAN LETTER MANCHU RA
+1876;N # MONGOLIAN LETTER MANCHU FA
+1877;N # MONGOLIAN LETTER MANCHU ZHA
+1880;N # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881;N # MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882;N # MONGOLIAN LETTER ALI GALI DAMARU
+1883;N # MONGOLIAN LETTER ALI GALI UBADAMA
+1884;N # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885;N # MONGOLIAN LETTER ALI GALI BALUDA
+1886;N # MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887;N # MONGOLIAN LETTER ALI GALI A
+1888;N # MONGOLIAN LETTER ALI GALI I
+1889;N # MONGOLIAN LETTER ALI GALI KA
+188A;N # MONGOLIAN LETTER ALI GALI NGA
+188B;N # MONGOLIAN LETTER ALI GALI CA
+188C;N # MONGOLIAN LETTER ALI GALI TTA
+188D;N # MONGOLIAN LETTER ALI GALI TTHA
+188E;N # MONGOLIAN LETTER ALI GALI DDA
+188F;N # MONGOLIAN LETTER ALI GALI NNA
+1890;N # MONGOLIAN LETTER ALI GALI TA
+1891;N # MONGOLIAN LETTER ALI GALI DA
+1892;N # MONGOLIAN LETTER ALI GALI PA
+1893;N # MONGOLIAN LETTER ALI GALI PHA
+1894;N # MONGOLIAN LETTER ALI GALI SSA
+1895;N # MONGOLIAN LETTER ALI GALI ZHA
+1896;N # MONGOLIAN LETTER ALI GALI ZA
+1897;N # MONGOLIAN LETTER ALI GALI AH
+1898;N # MONGOLIAN LETTER TODO ALI GALI TA
+1899;N # MONGOLIAN LETTER TODO ALI GALI ZHA
+189A;N # MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B;N # MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C;N # MONGOLIAN LETTER MANCHU ALI GALI CA
+189D;N # MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E;N # MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F;N # MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0;N # MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1;N # MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2;N # MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3;N # MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4;N # MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5;N # MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6;N # MONGOLIAN LETTER ALI GALI HALF U
+18A7;N # MONGOLIAN LETTER ALI GALI HALF YA
+18A8;N # MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9;N # MONGOLIAN LETTER ALI GALI DAGALGA
+1900;N # LIMBU VOWEL-CARRIER LETTER
+1901;N # LIMBU LETTER KA
+1902;N # LIMBU LETTER KHA
+1903;N # LIMBU LETTER GA
+1904;N # LIMBU LETTER GHA
+1905;N # LIMBU LETTER NGA
+1906;N # LIMBU LETTER CA
+1907;N # LIMBU LETTER CHA
+1908;N # LIMBU LETTER JA
+1909;N # LIMBU LETTER JHA
+190A;N # LIMBU LETTER YAN
+190B;N # LIMBU LETTER TA
+190C;N # LIMBU LETTER THA
+190D;N # LIMBU LETTER DA
+190E;N # LIMBU LETTER DHA
+190F;N # LIMBU LETTER NA
+1910;N # LIMBU LETTER PA
+1911;N # LIMBU LETTER PHA
+1912;N # LIMBU LETTER BA
+1913;N # LIMBU LETTER BHA
+1914;N # LIMBU LETTER MA
+1915;N # LIMBU LETTER YA
+1916;N # LIMBU LETTER RA
+1917;N # LIMBU LETTER LA
+1918;N # LIMBU LETTER WA
+1919;N # LIMBU LETTER SHA
+191A;N # LIMBU LETTER SSA
+191B;N # LIMBU LETTER SA
+191C;N # LIMBU LETTER HA
+1920;N # LIMBU VOWEL SIGN A
+1921;N # LIMBU VOWEL SIGN I
+1922;N # LIMBU VOWEL SIGN U
+1923;N # LIMBU VOWEL SIGN EE
+1924;N # LIMBU VOWEL SIGN AI
+1925;N # LIMBU VOWEL SIGN OO
+1926;N # LIMBU VOWEL SIGN AU
+1927;N # LIMBU VOWEL SIGN E
+1928;N # LIMBU VOWEL SIGN O
+1929;N # LIMBU SUBJOINED LETTER YA
+192A;N # LIMBU SUBJOINED LETTER RA
+192B;N # LIMBU SUBJOINED LETTER WA
+1930;N # LIMBU SMALL LETTER KA
+1931;N # LIMBU SMALL LETTER NGA
+1932;N # LIMBU SMALL LETTER ANUSVARA
+1933;N # LIMBU SMALL LETTER TA
+1934;N # LIMBU SMALL LETTER NA
+1935;N # LIMBU SMALL LETTER PA
+1936;N # LIMBU SMALL LETTER MA
+1937;N # LIMBU SMALL LETTER RA
+1938;N # LIMBU SMALL LETTER LA
+1939;N # LIMBU SIGN MUKPHRENG
+193A;N # LIMBU SIGN KEMPHRENG
+193B;N # LIMBU SIGN SA-I
+1940;N # LIMBU SIGN LOO
+1944;N # LIMBU EXCLAMATION MARK
+1945;N # LIMBU QUESTION MARK
+1946;N # LIMBU DIGIT ZERO
+1947;N # LIMBU DIGIT ONE
+1948;N # LIMBU DIGIT TWO
+1949;N # LIMBU DIGIT THREE
+194A;N # LIMBU DIGIT FOUR
+194B;N # LIMBU DIGIT FIVE
+194C;N # LIMBU DIGIT SIX
+194D;N # LIMBU DIGIT SEVEN
+194E;N # LIMBU DIGIT EIGHT
+194F;N # LIMBU DIGIT NINE
+1950;N # TAI LE LETTER KA
+1951;N # TAI LE LETTER XA
+1952;N # TAI LE LETTER NGA
+1953;N # TAI LE LETTER TSA
+1954;N # TAI LE LETTER SA
+1955;N # TAI LE LETTER YA
+1956;N # TAI LE LETTER TA
+1957;N # TAI LE LETTER THA
+1958;N # TAI LE LETTER LA
+1959;N # TAI LE LETTER PA
+195A;N # TAI LE LETTER PHA
+195B;N # TAI LE LETTER MA
+195C;N # TAI LE LETTER FA
+195D;N # TAI LE LETTER VA
+195E;N # TAI LE LETTER HA
+195F;N # TAI LE LETTER QA
+1960;N # TAI LE LETTER KHA
+1961;N # TAI LE LETTER TSHA
+1962;N # TAI LE LETTER NA
+1963;N # TAI LE LETTER A
+1964;N # TAI LE LETTER I
+1965;N # TAI LE LETTER EE
+1966;N # TAI LE LETTER EH
+1967;N # TAI LE LETTER U
+1968;N # TAI LE LETTER OO
+1969;N # TAI LE LETTER O
+196A;N # TAI LE LETTER UE
+196B;N # TAI LE LETTER E
+196C;N # TAI LE LETTER AUE
+196D;N # TAI LE LETTER AI
+1970;N # TAI LE LETTER TONE-2
+1971;N # TAI LE LETTER TONE-3
+1972;N # TAI LE LETTER TONE-4
+1973;N # TAI LE LETTER TONE-5
+1974;N # TAI LE LETTER TONE-6
+1980;N # NEW TAI LUE LETTER HIGH QA
+1981;N # NEW TAI LUE LETTER LOW QA
+1982;N # NEW TAI LUE LETTER HIGH KA
+1983;N # NEW TAI LUE LETTER HIGH XA
+1984;N # NEW TAI LUE LETTER HIGH NGA
+1985;N # NEW TAI LUE LETTER LOW KA
+1986;N # NEW TAI LUE LETTER LOW XA
+1987;N # NEW TAI LUE LETTER LOW NGA
+1988;N # NEW TAI LUE LETTER HIGH TSA
+1989;N # NEW TAI LUE LETTER HIGH SA
+198A;N # NEW TAI LUE LETTER HIGH YA
+198B;N # NEW TAI LUE LETTER LOW TSA
+198C;N # NEW TAI LUE LETTER LOW SA
+198D;N # NEW TAI LUE LETTER LOW YA
+198E;N # NEW TAI LUE LETTER HIGH TA
+198F;N # NEW TAI LUE LETTER HIGH THA
+1990;N # NEW TAI LUE LETTER HIGH NA
+1991;N # NEW TAI LUE LETTER LOW TA
+1992;N # NEW TAI LUE LETTER LOW THA
+1993;N # NEW TAI LUE LETTER LOW NA
+1994;N # NEW TAI LUE LETTER HIGH PA
+1995;N # NEW TAI LUE LETTER HIGH PHA
+1996;N # NEW TAI LUE LETTER HIGH MA
+1997;N # NEW TAI LUE LETTER LOW PA
+1998;N # NEW TAI LUE LETTER LOW PHA
+1999;N # NEW TAI LUE LETTER LOW MA
+199A;N # NEW TAI LUE LETTER HIGH FA
+199B;N # NEW TAI LUE LETTER HIGH VA
+199C;N # NEW TAI LUE LETTER HIGH LA
+199D;N # NEW TAI LUE LETTER LOW FA
+199E;N # NEW TAI LUE LETTER LOW VA
+199F;N # NEW TAI LUE LETTER LOW LA
+19A0;N # NEW TAI LUE LETTER HIGH HA
+19A1;N # NEW TAI LUE LETTER HIGH DA
+19A2;N # NEW TAI LUE LETTER HIGH BA
+19A3;N # NEW TAI LUE LETTER LOW HA
+19A4;N # NEW TAI LUE LETTER LOW DA
+19A5;N # NEW TAI LUE LETTER LOW BA
+19A6;N # NEW TAI LUE LETTER HIGH KVA
+19A7;N # NEW TAI LUE LETTER HIGH XVA
+19A8;N # NEW TAI LUE LETTER LOW KVA
+19A9;N # NEW TAI LUE LETTER LOW XVA
+19B0;N # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1;N # NEW TAI LUE VOWEL SIGN AA
+19B2;N # NEW TAI LUE VOWEL SIGN II
+19B3;N # NEW TAI LUE VOWEL SIGN U
+19B4;N # NEW TAI LUE VOWEL SIGN UU
+19B5;N # NEW TAI LUE VOWEL SIGN E
+19B6;N # NEW TAI LUE VOWEL SIGN AE
+19B7;N # NEW TAI LUE VOWEL SIGN O
+19B8;N # NEW TAI LUE VOWEL SIGN OA
+19B9;N # NEW TAI LUE VOWEL SIGN UE
+19BA;N # NEW TAI LUE VOWEL SIGN AY
+19BB;N # NEW TAI LUE VOWEL SIGN AAY
+19BC;N # NEW TAI LUE VOWEL SIGN UY
+19BD;N # NEW TAI LUE VOWEL SIGN OY
+19BE;N # NEW TAI LUE VOWEL SIGN OAY
+19BF;N # NEW TAI LUE VOWEL SIGN UEY
+19C0;N # NEW TAI LUE VOWEL SIGN IY
+19C1;N # NEW TAI LUE LETTER FINAL V
+19C2;N # NEW TAI LUE LETTER FINAL NG
+19C3;N # NEW TAI LUE LETTER FINAL N
+19C4;N # NEW TAI LUE LETTER FINAL M
+19C5;N # NEW TAI LUE LETTER FINAL K
+19C6;N # NEW TAI LUE LETTER FINAL D
+19C7;N # NEW TAI LUE LETTER FINAL B
+19C8;N # NEW TAI LUE TONE MARK-1
+19C9;N # NEW TAI LUE TONE MARK-2
+19D0;N # NEW TAI LUE DIGIT ZERO
+19D1;N # NEW TAI LUE DIGIT ONE
+19D2;N # NEW TAI LUE DIGIT TWO
+19D3;N # NEW TAI LUE DIGIT THREE
+19D4;N # NEW TAI LUE DIGIT FOUR
+19D5;N # NEW TAI LUE DIGIT FIVE
+19D6;N # NEW TAI LUE DIGIT SIX
+19D7;N # NEW TAI LUE DIGIT SEVEN
+19D8;N # NEW TAI LUE DIGIT EIGHT
+19D9;N # NEW TAI LUE DIGIT NINE
+19DE;N # NEW TAI LUE SIGN LAE
+19DF;N # NEW TAI LUE SIGN LAEV
+19E0;N # KHMER SYMBOL PATHAMASAT
+19E1;N # KHMER SYMBOL MUOY KOET
+19E2;N # KHMER SYMBOL PII KOET
+19E3;N # KHMER SYMBOL BEI KOET
+19E4;N # KHMER SYMBOL BUON KOET
+19E5;N # KHMER SYMBOL PRAM KOET
+19E6;N # KHMER SYMBOL PRAM-MUOY KOET
+19E7;N # KHMER SYMBOL PRAM-PII KOET
+19E8;N # KHMER SYMBOL PRAM-BEI KOET
+19E9;N # KHMER SYMBOL PRAM-BUON KOET
+19EA;N # KHMER SYMBOL DAP KOET
+19EB;N # KHMER SYMBOL DAP-MUOY KOET
+19EC;N # KHMER SYMBOL DAP-PII KOET
+19ED;N # KHMER SYMBOL DAP-BEI KOET
+19EE;N # KHMER SYMBOL DAP-BUON KOET
+19EF;N # KHMER SYMBOL DAP-PRAM KOET
+19F0;N # KHMER SYMBOL TUTEYASAT
+19F1;N # KHMER SYMBOL MUOY ROC
+19F2;N # KHMER SYMBOL PII ROC
+19F3;N # KHMER SYMBOL BEI ROC
+19F4;N # KHMER SYMBOL BUON ROC
+19F5;N # KHMER SYMBOL PRAM ROC
+19F6;N # KHMER SYMBOL PRAM-MUOY ROC
+19F7;N # KHMER SYMBOL PRAM-PII ROC
+19F8;N # KHMER SYMBOL PRAM-BEI ROC
+19F9;N # KHMER SYMBOL PRAM-BUON ROC
+19FA;N # KHMER SYMBOL DAP ROC
+19FB;N # KHMER SYMBOL DAP-MUOY ROC
+19FC;N # KHMER SYMBOL DAP-PII ROC
+19FD;N # KHMER SYMBOL DAP-BEI ROC
+19FE;N # KHMER SYMBOL DAP-BUON ROC
+19FF;N # KHMER SYMBOL DAP-PRAM ROC
+1A00;N # BUGINESE LETTER KA
+1A01;N # BUGINESE LETTER GA
+1A02;N # BUGINESE LETTER NGA
+1A03;N # BUGINESE LETTER NGKA
+1A04;N # BUGINESE LETTER PA
+1A05;N # BUGINESE LETTER BA
+1A06;N # BUGINESE LETTER MA
+1A07;N # BUGINESE LETTER MPA
+1A08;N # BUGINESE LETTER TA
+1A09;N # BUGINESE LETTER DA
+1A0A;N # BUGINESE LETTER NA
+1A0B;N # BUGINESE LETTER NRA
+1A0C;N # BUGINESE LETTER CA
+1A0D;N # BUGINESE LETTER JA
+1A0E;N # BUGINESE LETTER NYA
+1A0F;N # BUGINESE LETTER NYCA
+1A10;N # BUGINESE LETTER YA
+1A11;N # BUGINESE LETTER RA
+1A12;N # BUGINESE LETTER LA
+1A13;N # BUGINESE LETTER VA
+1A14;N # BUGINESE LETTER SA
+1A15;N # BUGINESE LETTER A
+1A16;N # BUGINESE LETTER HA
+1A17;N # BUGINESE VOWEL SIGN I
+1A18;N # BUGINESE VOWEL SIGN U
+1A19;N # BUGINESE VOWEL SIGN E
+1A1A;N # BUGINESE VOWEL SIGN O
+1A1B;N # BUGINESE VOWEL SIGN AE
+1A1E;N # BUGINESE PALLAWA
+1A1F;N # BUGINESE END OF SECTION
+1D00;N # LATIN LETTER SMALL CAPITAL A
+1D01;N # LATIN LETTER SMALL CAPITAL AE
+1D02;N # LATIN SMALL LETTER TURNED AE
+1D03;N # LATIN LETTER SMALL CAPITAL BARRED B
+1D04;N # LATIN LETTER SMALL CAPITAL C
+1D05;N # LATIN LETTER SMALL CAPITAL D
+1D06;N # LATIN LETTER SMALL CAPITAL ETH
+1D07;N # LATIN LETTER SMALL CAPITAL E
+1D08;N # LATIN SMALL LETTER TURNED OPEN E
+1D09;N # LATIN SMALL LETTER TURNED I
+1D0A;N # LATIN LETTER SMALL CAPITAL J
+1D0B;N # LATIN LETTER SMALL CAPITAL K
+1D0C;N # LATIN LETTER SMALL CAPITAL L WITH STROKE
+1D0D;N # LATIN LETTER SMALL CAPITAL M
+1D0E;N # LATIN LETTER SMALL CAPITAL REVERSED N
+1D0F;N # LATIN LETTER SMALL CAPITAL O
+1D10;N # LATIN LETTER SMALL CAPITAL OPEN O
+1D11;N # LATIN SMALL LETTER SIDEWAYS O
+1D12;N # LATIN SMALL LETTER SIDEWAYS OPEN O
+1D13;N # LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+1D14;N # LATIN SMALL LETTER TURNED OE
+1D15;N # LATIN LETTER SMALL CAPITAL OU
+1D16;N # LATIN SMALL LETTER TOP HALF O
+1D17;N # LATIN SMALL LETTER BOTTOM HALF O
+1D18;N # LATIN LETTER SMALL CAPITAL P
+1D19;N # LATIN LETTER SMALL CAPITAL REVERSED R
+1D1A;N # LATIN LETTER SMALL CAPITAL TURNED R
+1D1B;N # LATIN LETTER SMALL CAPITAL T
+1D1C;N # LATIN LETTER SMALL CAPITAL U
+1D1D;N # LATIN SMALL LETTER SIDEWAYS U
+1D1E;N # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+1D1F;N # LATIN SMALL LETTER SIDEWAYS TURNED M
+1D20;N # LATIN LETTER SMALL CAPITAL V
+1D21;N # LATIN LETTER SMALL CAPITAL W
+1D22;N # LATIN LETTER SMALL CAPITAL Z
+1D23;N # LATIN LETTER SMALL CAPITAL EZH
+1D24;N # LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25;N # LATIN LETTER AIN
+1D26;N # GREEK LETTER SMALL CAPITAL GAMMA
+1D27;N # GREEK LETTER SMALL CAPITAL LAMDA
+1D28;N # GREEK LETTER SMALL CAPITAL PI
+1D29;N # GREEK LETTER SMALL CAPITAL RHO
+1D2A;N # GREEK LETTER SMALL CAPITAL PSI
+1D2B;N # CYRILLIC LETTER SMALL CAPITAL EL
+1D2C;N # MODIFIER LETTER CAPITAL A
+1D2D;N # MODIFIER LETTER CAPITAL AE
+1D2E;N # MODIFIER LETTER CAPITAL B
+1D2F;N # MODIFIER LETTER CAPITAL BARRED B
+1D30;N # MODIFIER LETTER CAPITAL D
+1D31;N # MODIFIER LETTER CAPITAL E
+1D32;N # MODIFIER LETTER CAPITAL REVERSED E
+1D33;N # MODIFIER LETTER CAPITAL G
+1D34;N # MODIFIER LETTER CAPITAL H
+1D35;N # MODIFIER LETTER CAPITAL I
+1D36;N # MODIFIER LETTER CAPITAL J
+1D37;N # MODIFIER LETTER CAPITAL K
+1D38;N # MODIFIER LETTER CAPITAL L
+1D39;N # MODIFIER LETTER CAPITAL M
+1D3A;N # MODIFIER LETTER CAPITAL N
+1D3B;N # MODIFIER LETTER CAPITAL REVERSED N
+1D3C;N # MODIFIER LETTER CAPITAL O
+1D3D;N # MODIFIER LETTER CAPITAL OU
+1D3E;N # MODIFIER LETTER CAPITAL P
+1D3F;N # MODIFIER LETTER CAPITAL R
+1D40;N # MODIFIER LETTER CAPITAL T
+1D41;N # MODIFIER LETTER CAPITAL U
+1D42;N # MODIFIER LETTER CAPITAL W
+1D43;N # MODIFIER LETTER SMALL A
+1D44;N # MODIFIER LETTER SMALL TURNED A
+1D45;N # MODIFIER LETTER SMALL ALPHA
+1D46;N # MODIFIER LETTER SMALL TURNED AE
+1D47;N # MODIFIER LETTER SMALL B
+1D48;N # MODIFIER LETTER SMALL D
+1D49;N # MODIFIER LETTER SMALL E
+1D4A;N # MODIFIER LETTER SMALL SCHWA
+1D4B;N # MODIFIER LETTER SMALL OPEN E
+1D4C;N # MODIFIER LETTER SMALL TURNED OPEN E
+1D4D;N # MODIFIER LETTER SMALL G
+1D4E;N # MODIFIER LETTER SMALL TURNED I
+1D4F;N # MODIFIER LETTER SMALL K
+1D50;N # MODIFIER LETTER SMALL M
+1D51;N # MODIFIER LETTER SMALL ENG
+1D52;N # MODIFIER LETTER SMALL O
+1D53;N # MODIFIER LETTER SMALL OPEN O
+1D54;N # MODIFIER LETTER SMALL TOP HALF O
+1D55;N # MODIFIER LETTER SMALL BOTTOM HALF O
+1D56;N # MODIFIER LETTER SMALL P
+1D57;N # MODIFIER LETTER SMALL T
+1D58;N # MODIFIER LETTER SMALL U
+1D59;N # MODIFIER LETTER SMALL SIDEWAYS U
+1D5A;N # MODIFIER LETTER SMALL TURNED M
+1D5B;N # MODIFIER LETTER SMALL V
+1D5C;N # MODIFIER LETTER SMALL AIN
+1D5D;N # MODIFIER LETTER SMALL BETA
+1D5E;N # MODIFIER LETTER SMALL GREEK GAMMA
+1D5F;N # MODIFIER LETTER SMALL DELTA
+1D60;N # MODIFIER LETTER SMALL GREEK PHI
+1D61;N # MODIFIER LETTER SMALL CHI
+1D62;N # LATIN SUBSCRIPT SMALL LETTER I
+1D63;N # LATIN SUBSCRIPT SMALL LETTER R
+1D64;N # LATIN SUBSCRIPT SMALL LETTER U
+1D65;N # LATIN SUBSCRIPT SMALL LETTER V
+1D66;N # GREEK SUBSCRIPT SMALL LETTER BETA
+1D67;N # GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D68;N # GREEK SUBSCRIPT SMALL LETTER RHO
+1D69;N # GREEK SUBSCRIPT SMALL LETTER PHI
+1D6A;N # GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B;N # LATIN SMALL LETTER UE
+1D6C;N # LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D;N # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E;N # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F;N # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70;N # LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71;N # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72;N # LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73;N # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74;N # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75;N # LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76;N # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77;N # LATIN SMALL LETTER TURNED G
+1D78;N # MODIFIER LETTER CYRILLIC EN
+1D79;N # LATIN SMALL LETTER INSULAR G
+1D7A;N # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B;N # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C;N # LATIN SMALL LETTER IOTA WITH STROKE
+1D7D;N # LATIN SMALL LETTER P WITH STROKE
+1D7E;N # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F;N # LATIN SMALL LETTER UPSILON WITH STROKE
+1D80;N # LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81;N # LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82;N # LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83;N # LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84;N # LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85;N # LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86;N # LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87;N # LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88;N # LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89;N # LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A;N # LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B;N # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C;N # LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D;N # LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E;N # LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F;N # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90;N # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91;N # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92;N # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93;N # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94;N # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95;N # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96;N # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97;N # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98;N # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99;N # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A;N # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B;N # MODIFIER LETTER SMALL TURNED ALPHA
+1D9C;N # MODIFIER LETTER SMALL C
+1D9D;N # MODIFIER LETTER SMALL C WITH CURL
+1D9E;N # MODIFIER LETTER SMALL ETH
+1D9F;N # MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0;N # MODIFIER LETTER SMALL F
+1DA1;N # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2;N # MODIFIER LETTER SMALL SCRIPT G
+1DA3;N # MODIFIER LETTER SMALL TURNED H
+1DA4;N # MODIFIER LETTER SMALL I WITH STROKE
+1DA5;N # MODIFIER LETTER SMALL IOTA
+1DA6;N # MODIFIER LETTER SMALL CAPITAL I
+1DA7;N # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8;N # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9;N # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA;N # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB;N # MODIFIER LETTER SMALL CAPITAL L
+1DAC;N # MODIFIER LETTER SMALL M WITH HOOK
+1DAD;N # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE;N # MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF;N # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0;N # MODIFIER LETTER SMALL CAPITAL N
+1DB1;N # MODIFIER LETTER SMALL BARRED O
+1DB2;N # MODIFIER LETTER SMALL PHI
+1DB3;N # MODIFIER LETTER SMALL S WITH HOOK
+1DB4;N # MODIFIER LETTER SMALL ESH
+1DB5;N # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6;N # MODIFIER LETTER SMALL U BAR
+1DB7;N # MODIFIER LETTER SMALL UPSILON
+1DB8;N # MODIFIER LETTER SMALL CAPITAL U
+1DB9;N # MODIFIER LETTER SMALL V WITH HOOK
+1DBA;N # MODIFIER LETTER SMALL TURNED V
+1DBB;N # MODIFIER LETTER SMALL Z
+1DBC;N # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD;N # MODIFIER LETTER SMALL Z WITH CURL
+1DBE;N # MODIFIER LETTER SMALL EZH
+1DBF;N # MODIFIER LETTER SMALL THETA
+1DC0;N # COMBINING DOTTED GRAVE ACCENT
+1DC1;N # COMBINING DOTTED ACUTE ACCENT
+1DC2;N # COMBINING SNAKE BELOW
+1DC3;N # COMBINING SUSPENSION MARK
+1E00;N # LATIN CAPITAL LETTER A WITH RING BELOW
+1E01;N # LATIN SMALL LETTER A WITH RING BELOW
+1E02;N # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03;N # LATIN SMALL LETTER B WITH DOT ABOVE
+1E04;N # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05;N # LATIN SMALL LETTER B WITH DOT BELOW
+1E06;N # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07;N # LATIN SMALL LETTER B WITH LINE BELOW
+1E08;N # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09;N # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A;N # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B;N # LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C;N # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D;N # LATIN SMALL LETTER D WITH DOT BELOW
+1E0E;N # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F;N # LATIN SMALL LETTER D WITH LINE BELOW
+1E10;N # LATIN CAPITAL LETTER D WITH CEDILLA
+1E11;N # LATIN SMALL LETTER D WITH CEDILLA
+1E12;N # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13;N # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14;N # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15;N # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16;N # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17;N # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19;N # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A;N # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B;N # LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C;N # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D;N # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E;N # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F;N # LATIN SMALL LETTER F WITH DOT ABOVE
+1E20;N # LATIN CAPITAL LETTER G WITH MACRON
+1E21;N # LATIN SMALL LETTER G WITH MACRON
+1E22;N # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23;N # LATIN SMALL LETTER H WITH DOT ABOVE
+1E24;N # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25;N # LATIN SMALL LETTER H WITH DOT BELOW
+1E26;N # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27;N # LATIN SMALL LETTER H WITH DIAERESIS
+1E28;N # LATIN CAPITAL LETTER H WITH CEDILLA
+1E29;N # LATIN SMALL LETTER H WITH CEDILLA
+1E2A;N # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B;N # LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C;N # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D;N # LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E;N # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F;N # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30;N # LATIN CAPITAL LETTER K WITH ACUTE
+1E31;N # LATIN SMALL LETTER K WITH ACUTE
+1E32;N # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33;N # LATIN SMALL LETTER K WITH DOT BELOW
+1E34;N # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35;N # LATIN SMALL LETTER K WITH LINE BELOW
+1E36;N # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37;N # LATIN SMALL LETTER L WITH DOT BELOW
+1E38;N # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39;N # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A;N # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B;N # LATIN SMALL LETTER L WITH LINE BELOW
+1E3C;N # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D;N # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E;N # LATIN CAPITAL LETTER M WITH ACUTE
+1E3F;N # LATIN SMALL LETTER M WITH ACUTE
+1E40;N # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41;N # LATIN SMALL LETTER M WITH DOT ABOVE
+1E42;N # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43;N # LATIN SMALL LETTER M WITH DOT BELOW
+1E44;N # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45;N # LATIN SMALL LETTER N WITH DOT ABOVE
+1E46;N # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47;N # LATIN SMALL LETTER N WITH DOT BELOW
+1E48;N # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49;N # LATIN SMALL LETTER N WITH LINE BELOW
+1E4A;N # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B;N # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C;N # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D;N # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E;N # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F;N # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50;N # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51;N # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52;N # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53;N # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54;N # LATIN CAPITAL LETTER P WITH ACUTE
+1E55;N # LATIN SMALL LETTER P WITH ACUTE
+1E56;N # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57;N # LATIN SMALL LETTER P WITH DOT ABOVE
+1E58;N # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59;N # LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A;N # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B;N # LATIN SMALL LETTER R WITH DOT BELOW
+1E5C;N # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D;N # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E;N # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F;N # LATIN SMALL LETTER R WITH LINE BELOW
+1E60;N # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61;N # LATIN SMALL LETTER S WITH DOT ABOVE
+1E62;N # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63;N # LATIN SMALL LETTER S WITH DOT BELOW
+1E64;N # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65;N # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66;N # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67;N # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68;N # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69;N # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A;N # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B;N # LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C;N # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D;N # LATIN SMALL LETTER T WITH DOT BELOW
+1E6E;N # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F;N # LATIN SMALL LETTER T WITH LINE BELOW
+1E70;N # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71;N # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72;N # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73;N # LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74;N # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75;N # LATIN SMALL LETTER U WITH TILDE BELOW
+1E76;N # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77;N # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78;N # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79;N # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A;N # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B;N # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C;N # LATIN CAPITAL LETTER V WITH TILDE
+1E7D;N # LATIN SMALL LETTER V WITH TILDE
+1E7E;N # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F;N # LATIN SMALL LETTER V WITH DOT BELOW
+1E80;N # LATIN CAPITAL LETTER W WITH GRAVE
+1E81;N # LATIN SMALL LETTER W WITH GRAVE
+1E82;N # LATIN CAPITAL LETTER W WITH ACUTE
+1E83;N # LATIN SMALL LETTER W WITH ACUTE
+1E84;N # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85;N # LATIN SMALL LETTER W WITH DIAERESIS
+1E86;N # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87;N # LATIN SMALL LETTER W WITH DOT ABOVE
+1E88;N # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89;N # LATIN SMALL LETTER W WITH DOT BELOW
+1E8A;N # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B;N # LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C;N # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D;N # LATIN SMALL LETTER X WITH DIAERESIS
+1E8E;N # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F;N # LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90;N # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91;N # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92;N # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93;N # LATIN SMALL LETTER Z WITH DOT BELOW
+1E94;N # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95;N # LATIN SMALL LETTER Z WITH LINE BELOW
+1E96;N # LATIN SMALL LETTER H WITH LINE BELOW
+1E97;N # LATIN SMALL LETTER T WITH DIAERESIS
+1E98;N # LATIN SMALL LETTER W WITH RING ABOVE
+1E99;N # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A;N # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B;N # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0;N # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1;N # LATIN SMALL LETTER A WITH DOT BELOW
+1EA2;N # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3;N # LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC;N # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD;N # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE;N # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF;N # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0;N # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1;N # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2;N # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3;N # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4;N # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5;N # LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6;N # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7;N # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8;N # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9;N # LATIN SMALL LETTER E WITH DOT BELOW
+1EBA;N # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB;N # LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC;N # LATIN CAPITAL LETTER E WITH TILDE
+1EBD;N # LATIN SMALL LETTER E WITH TILDE
+1EBE;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6;N # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7;N # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8;N # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9;N # LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA;N # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB;N # LATIN SMALL LETTER I WITH DOT BELOW
+1ECC;N # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD;N # LATIN SMALL LETTER O WITH DOT BELOW
+1ECE;N # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF;N # LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8;N # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9;N # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA;N # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB;N # LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC;N # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD;N # LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE;N # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF;N # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0;N # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1;N # LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2;N # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3;N # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4;N # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5;N # LATIN SMALL LETTER U WITH DOT BELOW
+1EE6;N # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7;N # LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8;N # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9;N # LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA;N # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB;N # LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC;N # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED;N # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE;N # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF;N # LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0;N # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1;N # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2;N # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3;N # LATIN SMALL LETTER Y WITH GRAVE
+1EF4;N # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5;N # LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6;N # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7;N # LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8;N # LATIN CAPITAL LETTER Y WITH TILDE
+1EF9;N # LATIN SMALL LETTER Y WITH TILDE
+1F00;N # GREEK SMALL LETTER ALPHA WITH PSILI
+1F01;N # GREEK SMALL LETTER ALPHA WITH DASIA
+1F02;N # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03;N # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04;N # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05;N # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06;N # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07;N # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08;N # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09;N # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10;N # GREEK SMALL LETTER EPSILON WITH PSILI
+1F11;N # GREEK SMALL LETTER EPSILON WITH DASIA
+1F12;N # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13;N # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14;N # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15;N # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18;N # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19;N # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A;N # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B;N # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C;N # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D;N # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20;N # GREEK SMALL LETTER ETA WITH PSILI
+1F21;N # GREEK SMALL LETTER ETA WITH DASIA
+1F22;N # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23;N # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24;N # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25;N # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26;N # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27;N # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28;N # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29;N # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A;N # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B;N # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C;N # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D;N # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30;N # GREEK SMALL LETTER IOTA WITH PSILI
+1F31;N # GREEK SMALL LETTER IOTA WITH DASIA
+1F32;N # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33;N # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34;N # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35;N # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36;N # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37;N # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38;N # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39;N # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E;N # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F;N # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40;N # GREEK SMALL LETTER OMICRON WITH PSILI
+1F41;N # GREEK SMALL LETTER OMICRON WITH DASIA
+1F42;N # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43;N # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44;N # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45;N # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48;N # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49;N # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A;N # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B;N # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C;N # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D;N # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50;N # GREEK SMALL LETTER UPSILON WITH PSILI
+1F51;N # GREEK SMALL LETTER UPSILON WITH DASIA
+1F52;N # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53;N # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54;N # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55;N # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56;N # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57;N # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;N # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F;N # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60;N # GREEK SMALL LETTER OMEGA WITH PSILI
+1F61;N # GREEK SMALL LETTER OMEGA WITH DASIA
+1F62;N # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63;N # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64;N # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65;N # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66;N # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67;N # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68;N # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69;N # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70;N # GREEK SMALL LETTER ALPHA WITH VARIA
+1F71;N # GREEK SMALL LETTER ALPHA WITH OXIA
+1F72;N # GREEK SMALL LETTER EPSILON WITH VARIA
+1F73;N # GREEK SMALL LETTER EPSILON WITH OXIA
+1F74;N # GREEK SMALL LETTER ETA WITH VARIA
+1F75;N # GREEK SMALL LETTER ETA WITH OXIA
+1F76;N # GREEK SMALL LETTER IOTA WITH VARIA
+1F77;N # GREEK SMALL LETTER IOTA WITH OXIA
+1F78;N # GREEK SMALL LETTER OMICRON WITH VARIA
+1F79;N # GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A;N # GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B;N # GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C;N # GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D;N # GREEK SMALL LETTER OMEGA WITH OXIA
+1F80;N # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81;N # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82;N # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83;N # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84;N # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85;N # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86;N # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87;N # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E;N # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F;N # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90;N # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91;N # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92;N # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93;N # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94;N # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95;N # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96;N # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97;N # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A;N # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B;N # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C;N # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D;N # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E;N # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F;N # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0;N # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1;N # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2;N # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3;N # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4;N # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5;N # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6;N # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7;N # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE;N # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF;N # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0;N # GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1;N # GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2;N # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3;N # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4;N # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6;N # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7;N # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8;N # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9;N # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA;N # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB;N # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC;N # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;N # GREEK KORONIS
+1FBE;N # GREEK PROSGEGRAMMENI
+1FBF;N # GREEK PSILI
+1FC0;N # GREEK PERISPOMENI
+1FC1;N # GREEK DIALYTIKA AND PERISPOMENI
+1FC2;N # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3;N # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4;N # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6;N # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7;N # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8;N # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9;N # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA;N # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB;N # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC;N # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD;N # GREEK PSILI AND VARIA
+1FCE;N # GREEK PSILI AND OXIA
+1FCF;N # GREEK PSILI AND PERISPOMENI
+1FD0;N # GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1;N # GREEK SMALL LETTER IOTA WITH MACRON
+1FD2;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6;N # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7;N # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8;N # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9;N # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA;N # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB;N # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD;N # GREEK DASIA AND VARIA
+1FDE;N # GREEK DASIA AND OXIA
+1FDF;N # GREEK DASIA AND PERISPOMENI
+1FE0;N # GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1;N # GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4;N # GREEK SMALL LETTER RHO WITH PSILI
+1FE5;N # GREEK SMALL LETTER RHO WITH DASIA
+1FE6;N # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7;N # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8;N # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9;N # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA;N # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB;N # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC;N # GREEK CAPITAL LETTER RHO WITH DASIA
+1FED;N # GREEK DIALYTIKA AND VARIA
+1FEE;N # GREEK DIALYTIKA AND OXIA
+1FEF;N # GREEK VARIA
+1FF2;N # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3;N # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4;N # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6;N # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7;N # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8;N # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9;N # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA;N # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB;N # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC;N # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD;N # GREEK OXIA
+1FFE;N # GREEK DASIA
+2000;N # EN QUAD
+2001;N # EM QUAD
+2002;N # EN SPACE
+2003;N # EM SPACE
+2004;N # THREE-PER-EM SPACE
+2005;N # FOUR-PER-EM SPACE
+2006;N # SIX-PER-EM SPACE
+2007;N # FIGURE SPACE
+2008;N # PUNCTUATION SPACE
+2009;N # THIN SPACE
+200A;N # HAIR SPACE
+200B;N # ZERO WIDTH SPACE
+200C;N # ZERO WIDTH NON-JOINER
+200D;N # ZERO WIDTH JOINER
+200E;N # LEFT-TO-RIGHT MARK
+200F;N # RIGHT-TO-LEFT MARK
+2010;A # HYPHEN
+2011;N # NON-BREAKING HYPHEN
+2012;N # FIGURE DASH
+2013;A # EN DASH
+2014;A # EM DASH
+2015;A # HORIZONTAL BAR
+2016;A # DOUBLE VERTICAL LINE
+2017;N # DOUBLE LOW LINE
+2018;A # LEFT SINGLE QUOTATION MARK
+2019;A # RIGHT SINGLE QUOTATION MARK
+201A;N # SINGLE LOW-9 QUOTATION MARK
+201B;N # SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C;A # LEFT DOUBLE QUOTATION MARK
+201D;A # RIGHT DOUBLE QUOTATION MARK
+201E;N # DOUBLE LOW-9 QUOTATION MARK
+201F;N # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020;A # DAGGER
+2021;A # DOUBLE DAGGER
+2022;A # BULLET
+2023;N # TRIANGULAR BULLET
+2024;A # ONE DOT LEADER
+2025;A # TWO DOT LEADER
+2026;A # HORIZONTAL ELLIPSIS
+2027;A # HYPHENATION POINT
+2028;N # LINE SEPARATOR
+2029;N # PARAGRAPH SEPARATOR
+202A;N # LEFT-TO-RIGHT EMBEDDING
+202B;N # RIGHT-TO-LEFT EMBEDDING
+202C;N # POP DIRECTIONAL FORMATTING
+202D;N # LEFT-TO-RIGHT OVERRIDE
+202E;N # RIGHT-TO-LEFT OVERRIDE
+202F;N # NARROW NO-BREAK SPACE
+2030;A # PER MILLE SIGN
+2031;N # PER TEN THOUSAND SIGN
+2032;A # PRIME
+2033;A # DOUBLE PRIME
+2034;N # TRIPLE PRIME
+2035;A # REVERSED PRIME
+2036;N # REVERSED DOUBLE PRIME
+2037;N # REVERSED TRIPLE PRIME
+2038;N # CARET
+2039;N # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;N # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B;A # REFERENCE MARK
+203C;N # DOUBLE EXCLAMATION MARK
+203D;N # INTERROBANG
+203E;A # OVERLINE
+203F;N # UNDERTIE
+2040;N # CHARACTER TIE
+2041;N # CARET INSERTION POINT
+2042;N # ASTERISM
+2043;N # HYPHEN BULLET
+2044;N # FRACTION SLASH
+2045;N # LEFT SQUARE BRACKET WITH QUILL
+2046;N # RIGHT SQUARE BRACKET WITH QUILL
+2047;N # DOUBLE QUESTION MARK
+2048;N # QUESTION EXCLAMATION MARK
+2049;N # EXCLAMATION QUESTION MARK
+204A;N # TIRONIAN SIGN ET
+204B;N # REVERSED PILCROW SIGN
+204C;N # BLACK LEFTWARDS BULLET
+204D;N # BLACK RIGHTWARDS BULLET
+204E;N # LOW ASTERISK
+204F;N # REVERSED SEMICOLON
+2050;N # CLOSE UP
+2051;N # TWO ASTERISKS ALIGNED VERTICALLY
+2052;N # COMMERCIAL MINUS SIGN
+2053;N # SWUNG DASH
+2054;N # INVERTED UNDERTIE
+2055;N # FLOWER PUNCTUATION MARK
+2056;N # THREE DOT PUNCTUATION
+2057;N # QUADRUPLE PRIME
+2058;N # FOUR DOT PUNCTUATION
+2059;N # FIVE DOT PUNCTUATION
+205A;N # TWO DOT PUNCTUATION
+205B;N # FOUR DOT MARK
+205C;N # DOTTED CROSS
+205D;N # TRICOLON
+205E;N # VERTICAL FOUR DOTS
+205F;N # MEDIUM MATHEMATICAL SPACE
+2060;N # WORD JOINER
+2061;N # FUNCTION APPLICATION
+2062;N # INVISIBLE TIMES
+2063;N # INVISIBLE SEPARATOR
+206A;N # INHIBIT SYMMETRIC SWAPPING
+206B;N # ACTIVATE SYMMETRIC SWAPPING
+206C;N # INHIBIT ARABIC FORM SHAPING
+206D;N # ACTIVATE ARABIC FORM SHAPING
+206E;N # NATIONAL DIGIT SHAPES
+206F;N # NOMINAL DIGIT SHAPES
+2070;N # SUPERSCRIPT ZERO
+2071;N # SUPERSCRIPT LATIN SMALL LETTER I
+2074;A # SUPERSCRIPT FOUR
+2075;N # SUPERSCRIPT FIVE
+2076;N # SUPERSCRIPT SIX
+2077;N # SUPERSCRIPT SEVEN
+2078;N # SUPERSCRIPT EIGHT
+2079;N # SUPERSCRIPT NINE
+207A;N # SUPERSCRIPT PLUS SIGN
+207B;N # SUPERSCRIPT MINUS
+207C;N # SUPERSCRIPT EQUALS SIGN
+207D;N # SUPERSCRIPT LEFT PARENTHESIS
+207E;N # SUPERSCRIPT RIGHT PARENTHESIS
+207F;A # SUPERSCRIPT LATIN SMALL LETTER N
+2080;N # SUBSCRIPT ZERO
+2081;A # SUBSCRIPT ONE
+2082;A # SUBSCRIPT TWO
+2083;A # SUBSCRIPT THREE
+2084;A # SUBSCRIPT FOUR
+2085;N # SUBSCRIPT FIVE
+2086;N # SUBSCRIPT SIX
+2087;N # SUBSCRIPT SEVEN
+2088;N # SUBSCRIPT EIGHT
+2089;N # SUBSCRIPT NINE
+208A;N # SUBSCRIPT PLUS SIGN
+208B;N # SUBSCRIPT MINUS
+208C;N # SUBSCRIPT EQUALS SIGN
+208D;N # SUBSCRIPT LEFT PARENTHESIS
+208E;N # SUBSCRIPT RIGHT PARENTHESIS
+2090;N # LATIN SUBSCRIPT SMALL LETTER A
+2091;N # LATIN SUBSCRIPT SMALL LETTER E
+2092;N # LATIN SUBSCRIPT SMALL LETTER O
+2093;N # LATIN SUBSCRIPT SMALL LETTER X
+2094;N # LATIN SUBSCRIPT SMALL LETTER SCHWA
+20A0;N # EURO-CURRENCY SIGN
+20A1;N # COLON SIGN
+20A2;N # CRUZEIRO SIGN
+20A3;N # FRENCH FRANC SIGN
+20A4;N # LIRA SIGN
+20A5;N # MILL SIGN
+20A6;N # NAIRA SIGN
+20A7;N # PESETA SIGN
+20A8;N # RUPEE SIGN
+20A9;H # WON SIGN
+20AA;N # NEW SHEQEL SIGN
+20AB;N # DONG SIGN
+20AC;A # EURO SIGN
+20AD;N # KIP SIGN
+20AE;N # TUGRIK SIGN
+20AF;N # DRACHMA SIGN
+20B0;N # GERMAN PENNY SIGN
+20B1;N # PESO SIGN
+20B2;N # GUARANI SIGN
+20B3;N # AUSTRAL SIGN
+20B4;N # HRYVNIA SIGN
+20B5;N # CEDI SIGN
+20D0;N # COMBINING LEFT HARPOON ABOVE
+20D1;N # COMBINING RIGHT HARPOON ABOVE
+20D2;N # COMBINING LONG VERTICAL LINE OVERLAY
+20D3;N # COMBINING SHORT VERTICAL LINE OVERLAY
+20D4;N # COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5;N # COMBINING CLOCKWISE ARROW ABOVE
+20D6;N # COMBINING LEFT ARROW ABOVE
+20D7;N # COMBINING RIGHT ARROW ABOVE
+20D8;N # COMBINING RING OVERLAY
+20D9;N # COMBINING CLOCKWISE RING OVERLAY
+20DA;N # COMBINING ANTICLOCKWISE RING OVERLAY
+20DB;N # COMBINING THREE DOTS ABOVE
+20DC;N # COMBINING FOUR DOTS ABOVE
+20DD;N # COMBINING ENCLOSING CIRCLE
+20DE;N # COMBINING ENCLOSING SQUARE
+20DF;N # COMBINING ENCLOSING DIAMOND
+20E0;N # COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1;N # COMBINING LEFT RIGHT ARROW ABOVE
+20E2;N # COMBINING ENCLOSING SCREEN
+20E3;N # COMBINING ENCLOSING KEYCAP
+20E4;N # COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5;N # COMBINING REVERSE SOLIDUS OVERLAY
+20E6;N # COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7;N # COMBINING ANNUITY SYMBOL
+20E8;N # COMBINING TRIPLE UNDERDOT
+20E9;N # COMBINING WIDE BRIDGE ABOVE
+20EA;N # COMBINING LEFTWARDS ARROW OVERLAY
+20EB;N # COMBINING LONG DOUBLE SOLIDUS OVERLAY
+2100;N # ACCOUNT OF
+2101;N # ADDRESSED TO THE SUBJECT
+2102;N # DOUBLE-STRUCK CAPITAL C
+2103;A # DEGREE CELSIUS
+2104;N # CENTRE LINE SYMBOL
+2105;A # CARE OF
+2106;N # CADA UNA
+2107;N # EULER CONSTANT
+2108;N # SCRUPLE
+2109;A # DEGREE FAHRENHEIT
+210A;N # SCRIPT SMALL G
+210B;N # SCRIPT CAPITAL H
+210C;N # BLACK-LETTER CAPITAL H
+210D;N # DOUBLE-STRUCK CAPITAL H
+210E;N # PLANCK CONSTANT
+210F;N # PLANCK CONSTANT OVER TWO PI
+2110;N # SCRIPT CAPITAL I
+2111;N # BLACK-LETTER CAPITAL I
+2112;N # SCRIPT CAPITAL L
+2113;A # SCRIPT SMALL L
+2114;N # L B BAR SYMBOL
+2115;N # DOUBLE-STRUCK CAPITAL N
+2116;A # NUMERO SIGN
+2117;N # SOUND RECORDING COPYRIGHT
+2118;N # SCRIPT CAPITAL P
+2119;N # DOUBLE-STRUCK CAPITAL P
+211A;N # DOUBLE-STRUCK CAPITAL Q
+211B;N # SCRIPT CAPITAL R
+211C;N # BLACK-LETTER CAPITAL R
+211D;N # DOUBLE-STRUCK CAPITAL R
+211E;N # PRESCRIPTION TAKE
+211F;N # RESPONSE
+2120;N # SERVICE MARK
+2121;A # TELEPHONE SIGN
+2122;A # TRADE MARK SIGN
+2123;N # VERSICLE
+2124;N # DOUBLE-STRUCK CAPITAL Z
+2125;N # OUNCE SIGN
+2126;A # OHM SIGN
+2127;N # INVERTED OHM SIGN
+2128;N # BLACK-LETTER CAPITAL Z
+2129;N # TURNED GREEK SMALL LETTER IOTA
+212A;N # KELVIN SIGN
+212B;A # ANGSTROM SIGN
+212C;N # SCRIPT CAPITAL B
+212D;N # BLACK-LETTER CAPITAL C
+212E;N # ESTIMATED SYMBOL
+212F;N # SCRIPT SMALL E
+2130;N # SCRIPT CAPITAL E
+2131;N # SCRIPT CAPITAL F
+2132;N # TURNED CAPITAL F
+2133;N # SCRIPT CAPITAL M
+2134;N # SCRIPT SMALL O
+2135;N # ALEF SYMBOL
+2136;N # BET SYMBOL
+2137;N # GIMEL SYMBOL
+2138;N # DALET SYMBOL
+2139;N # INFORMATION SOURCE
+213A;N # ROTATED CAPITAL Q
+213B;N # FACSIMILE SIGN
+213C;N # DOUBLE-STRUCK SMALL PI
+213D;N # DOUBLE-STRUCK SMALL GAMMA
+213E;N # DOUBLE-STRUCK CAPITAL GAMMA
+213F;N # DOUBLE-STRUCK CAPITAL PI
+2140;N # DOUBLE-STRUCK N-ARY SUMMATION
+2141;N # TURNED SANS-SERIF CAPITAL G
+2142;N # TURNED SANS-SERIF CAPITAL L
+2143;N # REVERSED SANS-SERIF CAPITAL L
+2144;N # TURNED SANS-SERIF CAPITAL Y
+2145;N # DOUBLE-STRUCK ITALIC CAPITAL D
+2146;N # DOUBLE-STRUCK ITALIC SMALL D
+2147;N # DOUBLE-STRUCK ITALIC SMALL E
+2148;N # DOUBLE-STRUCK ITALIC SMALL I
+2149;N # DOUBLE-STRUCK ITALIC SMALL J
+214A;N # PROPERTY LINE
+214B;N # TURNED AMPERSAND
+214C;N # PER SIGN
+2153;A # VULGAR FRACTION ONE THIRD
+2154;A # VULGAR FRACTION TWO THIRDS
+2155;N # VULGAR FRACTION ONE FIFTH
+2156;N # VULGAR FRACTION TWO FIFTHS
+2157;N # VULGAR FRACTION THREE FIFTHS
+2158;N # VULGAR FRACTION FOUR FIFTHS
+2159;N # VULGAR FRACTION ONE SIXTH
+215A;N # VULGAR FRACTION FIVE SIXTHS
+215B;A # VULGAR FRACTION ONE EIGHTH
+215C;A # VULGAR FRACTION THREE EIGHTHS
+215D;A # VULGAR FRACTION FIVE EIGHTHS
+215E;A # VULGAR FRACTION SEVEN EIGHTHS
+215F;N # FRACTION NUMERATOR ONE
+2160;A # ROMAN NUMERAL ONE
+2161;A # ROMAN NUMERAL TWO
+2162;A # ROMAN NUMERAL THREE
+2163;A # ROMAN NUMERAL FOUR
+2164;A # ROMAN NUMERAL FIVE
+2165;A # ROMAN NUMERAL SIX
+2166;A # ROMAN NUMERAL SEVEN
+2167;A # ROMAN NUMERAL EIGHT
+2168;A # ROMAN NUMERAL NINE
+2169;A # ROMAN NUMERAL TEN
+216A;A # ROMAN NUMERAL ELEVEN
+216B;A # ROMAN NUMERAL TWELVE
+216C;N # ROMAN NUMERAL FIFTY
+216D;N # ROMAN NUMERAL ONE HUNDRED
+216E;N # ROMAN NUMERAL FIVE HUNDRED
+216F;N # ROMAN NUMERAL ONE THOUSAND
+2170;A # SMALL ROMAN NUMERAL ONE
+2171;A # SMALL ROMAN NUMERAL TWO
+2172;A # SMALL ROMAN NUMERAL THREE
+2173;A # SMALL ROMAN NUMERAL FOUR
+2174;A # SMALL ROMAN NUMERAL FIVE
+2175;A # SMALL ROMAN NUMERAL SIX
+2176;A # SMALL ROMAN NUMERAL SEVEN
+2177;A # SMALL ROMAN NUMERAL EIGHT
+2178;A # SMALL ROMAN NUMERAL NINE
+2179;A # SMALL ROMAN NUMERAL TEN
+217A;N # SMALL ROMAN NUMERAL ELEVEN
+217B;N # SMALL ROMAN NUMERAL TWELVE
+217C;N # SMALL ROMAN NUMERAL FIFTY
+217D;N # SMALL ROMAN NUMERAL ONE HUNDRED
+217E;N # SMALL ROMAN NUMERAL FIVE HUNDRED
+217F;N # SMALL ROMAN NUMERAL ONE THOUSAND
+2180;N # ROMAN NUMERAL ONE THOUSAND C D
+2181;N # ROMAN NUMERAL FIVE THOUSAND
+2182;N # ROMAN NUMERAL TEN THOUSAND
+2183;N # ROMAN NUMERAL REVERSED ONE HUNDRED
+2190;A # LEFTWARDS ARROW
+2191;A # UPWARDS ARROW
+2192;A # RIGHTWARDS ARROW
+2193;A # DOWNWARDS ARROW
+2194;A # LEFT RIGHT ARROW
+2195;A # UP DOWN ARROW
+2196;A # NORTH WEST ARROW
+2197;A # NORTH EAST ARROW
+2198;A # SOUTH EAST ARROW
+2199;A # SOUTH WEST ARROW
+219A;N # LEFTWARDS ARROW WITH STROKE
+219B;N # RIGHTWARDS ARROW WITH STROKE
+219C;N # LEFTWARDS WAVE ARROW
+219D;N # RIGHTWARDS WAVE ARROW
+219E;N # LEFTWARDS TWO HEADED ARROW
+219F;N # UPWARDS TWO HEADED ARROW
+21A0;N # RIGHTWARDS TWO HEADED ARROW
+21A1;N # DOWNWARDS TWO HEADED ARROW
+21A2;N # LEFTWARDS ARROW WITH TAIL
+21A3;N # RIGHTWARDS ARROW WITH TAIL
+21A4;N # LEFTWARDS ARROW FROM BAR
+21A5;N # UPWARDS ARROW FROM BAR
+21A6;N # RIGHTWARDS ARROW FROM BAR
+21A7;N # DOWNWARDS ARROW FROM BAR
+21A8;N # UP DOWN ARROW WITH BASE
+21A9;N # LEFTWARDS ARROW WITH HOOK
+21AA;N # RIGHTWARDS ARROW WITH HOOK
+21AB;N # LEFTWARDS ARROW WITH LOOP
+21AC;N # RIGHTWARDS ARROW WITH LOOP
+21AD;N # LEFT RIGHT WAVE ARROW
+21AE;N # LEFT RIGHT ARROW WITH STROKE
+21AF;N # DOWNWARDS ZIGZAG ARROW
+21B0;N # UPWARDS ARROW WITH TIP LEFTWARDS
+21B1;N # UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2;N # DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3;N # DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4;N # RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5;N # DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6;N # ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7;N # CLOCKWISE TOP SEMICIRCLE ARROW
+21B8;A # NORTH WEST ARROW TO LONG BAR
+21B9;A # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA;N # ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB;N # CLOCKWISE OPEN CIRCLE ARROW
+21BC;N # LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD;N # LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE;N # UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF;N # UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0;N # RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1;N # RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2;N # DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3;N # DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4;N # RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5;N # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6;N # LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7;N # LEFTWARDS PAIRED ARROWS
+21C8;N # UPWARDS PAIRED ARROWS
+21C9;N # RIGHTWARDS PAIRED ARROWS
+21CA;N # DOWNWARDS PAIRED ARROWS
+21CB;N # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC;N # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD;N # LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE;N # LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF;N # RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0;N # LEFTWARDS DOUBLE ARROW
+21D1;N # UPWARDS DOUBLE ARROW
+21D2;A # RIGHTWARDS DOUBLE ARROW
+21D3;N # DOWNWARDS DOUBLE ARROW
+21D4;A # LEFT RIGHT DOUBLE ARROW
+21D5;N # UP DOWN DOUBLE ARROW
+21D6;N # NORTH WEST DOUBLE ARROW
+21D7;N # NORTH EAST DOUBLE ARROW
+21D8;N # SOUTH EAST DOUBLE ARROW
+21D9;N # SOUTH WEST DOUBLE ARROW
+21DA;N # LEFTWARDS TRIPLE ARROW
+21DB;N # RIGHTWARDS TRIPLE ARROW
+21DC;N # LEFTWARDS SQUIGGLE ARROW
+21DD;N # RIGHTWARDS SQUIGGLE ARROW
+21DE;N # UPWARDS ARROW WITH DOUBLE STROKE
+21DF;N # DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0;N # LEFTWARDS DASHED ARROW
+21E1;N # UPWARDS DASHED ARROW
+21E2;N # RIGHTWARDS DASHED ARROW
+21E3;N # DOWNWARDS DASHED ARROW
+21E4;N # LEFTWARDS ARROW TO BAR
+21E5;N # RIGHTWARDS ARROW TO BAR
+21E6;N # LEFTWARDS WHITE ARROW
+21E7;A # UPWARDS WHITE ARROW
+21E8;N # RIGHTWARDS WHITE ARROW
+21E9;N # DOWNWARDS WHITE ARROW
+21EA;N # UPWARDS WHITE ARROW FROM BAR
+21EB;N # UPWARDS WHITE ARROW ON PEDESTAL
+21EC;N # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED;N # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE;N # UPWARDS WHITE DOUBLE ARROW
+21EF;N # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0;N # RIGHTWARDS WHITE ARROW FROM WALL
+21F1;N # NORTH WEST ARROW TO CORNER
+21F2;N # SOUTH EAST ARROW TO CORNER
+21F3;N # UP DOWN WHITE ARROW
+21F4;N # RIGHT ARROW WITH SMALL CIRCLE
+21F5;N # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6;N # THREE RIGHTWARDS ARROWS
+21F7;N # LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8;N # RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9;N # LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA;N # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB;N # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC;N # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD;N # LEFTWARDS OPEN-HEADED ARROW
+21FE;N # RIGHTWARDS OPEN-HEADED ARROW
+21FF;N # LEFT RIGHT OPEN-HEADED ARROW
+2200;A # FOR ALL
+2201;N # COMPLEMENT
+2202;A # PARTIAL DIFFERENTIAL
+2203;A # THERE EXISTS
+2204;N # THERE DOES NOT EXIST
+2205;N # EMPTY SET
+2206;N # INCREMENT
+2207;A # NABLA
+2208;A # ELEMENT OF
+2209;N # NOT AN ELEMENT OF
+220A;N # SMALL ELEMENT OF
+220B;A # CONTAINS AS MEMBER
+220C;N # DOES NOT CONTAIN AS MEMBER
+220D;N # SMALL CONTAINS AS MEMBER
+220E;N # END OF PROOF
+220F;A # N-ARY PRODUCT
+2210;N # N-ARY COPRODUCT
+2211;A # N-ARY SUMMATION
+2212;N # MINUS SIGN
+2213;N # MINUS-OR-PLUS SIGN
+2214;N # DOT PLUS
+2215;A # DIVISION SLASH
+2216;N # SET MINUS
+2217;N # ASTERISK OPERATOR
+2218;N # RING OPERATOR
+2219;N # BULLET OPERATOR
+221A;A # SQUARE ROOT
+221B;N # CUBE ROOT
+221C;N # FOURTH ROOT
+221D;A # PROPORTIONAL TO
+221E;A # INFINITY
+221F;A # RIGHT ANGLE
+2220;A # ANGLE
+2221;N # MEASURED ANGLE
+2222;N # SPHERICAL ANGLE
+2223;A # DIVIDES
+2224;N # DOES NOT DIVIDE
+2225;A # PARALLEL TO
+2226;N # NOT PARALLEL TO
+2227;A # LOGICAL AND
+2228;A # LOGICAL OR
+2229;A # INTERSECTION
+222A;A # UNION
+222B;A # INTEGRAL
+222C;A # DOUBLE INTEGRAL
+222D;N # TRIPLE INTEGRAL
+222E;A # CONTOUR INTEGRAL
+222F;N # SURFACE INTEGRAL
+2230;N # VOLUME INTEGRAL
+2231;N # CLOCKWISE INTEGRAL
+2232;N # CLOCKWISE CONTOUR INTEGRAL
+2233;N # ANTICLOCKWISE CONTOUR INTEGRAL
+2234;A # THEREFORE
+2235;A # BECAUSE
+2236;A # RATIO
+2237;A # PROPORTION
+2238;N # DOT MINUS
+2239;N # EXCESS
+223A;N # GEOMETRIC PROPORTION
+223B;N # HOMOTHETIC
+223C;A # TILDE OPERATOR
+223D;A # REVERSED TILDE
+223E;N # INVERTED LAZY S
+223F;N # SINE WAVE
+2240;N # WREATH PRODUCT
+2241;N # NOT TILDE
+2242;N # MINUS TILDE
+2243;N # ASYMPTOTICALLY EQUAL TO
+2244;N # NOT ASYMPTOTICALLY EQUAL TO
+2245;N # APPROXIMATELY EQUAL TO
+2246;N # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247;N # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248;A # ALMOST EQUAL TO
+2249;N # NOT ALMOST EQUAL TO
+224A;N # ALMOST EQUAL OR EQUAL TO
+224B;N # TRIPLE TILDE
+224C;A # ALL EQUAL TO
+224D;N # EQUIVALENT TO
+224E;N # GEOMETRICALLY EQUIVALENT TO
+224F;N # DIFFERENCE BETWEEN
+2250;N # APPROACHES THE LIMIT
+2251;N # GEOMETRICALLY EQUAL TO
+2252;A # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253;N # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254;N # COLON EQUALS
+2255;N # EQUALS COLON
+2256;N # RING IN EQUAL TO
+2257;N # RING EQUAL TO
+2258;N # CORRESPONDS TO
+2259;N # ESTIMATES
+225A;N # EQUIANGULAR TO
+225B;N # STAR EQUALS
+225C;N # DELTA EQUAL TO
+225D;N # EQUAL TO BY DEFINITION
+225E;N # MEASURED BY
+225F;N # QUESTIONED EQUAL TO
+2260;A # NOT EQUAL TO
+2261;A # IDENTICAL TO
+2262;N # NOT IDENTICAL TO
+2263;N # STRICTLY EQUIVALENT TO
+2264;A # LESS-THAN OR EQUAL TO
+2265;A # GREATER-THAN OR EQUAL TO
+2266;A # LESS-THAN OVER EQUAL TO
+2267;A # GREATER-THAN OVER EQUAL TO
+2268;N # LESS-THAN BUT NOT EQUAL TO
+2269;N # GREATER-THAN BUT NOT EQUAL TO
+226A;A # MUCH LESS-THAN
+226B;A # MUCH GREATER-THAN
+226C;N # BETWEEN
+226D;N # NOT EQUIVALENT TO
+226E;A # NOT LESS-THAN
+226F;A # NOT GREATER-THAN
+2270;N # NEITHER LESS-THAN NOR EQUAL TO
+2271;N # NEITHER GREATER-THAN NOR EQUAL TO
+2272;N # LESS-THAN OR EQUIVALENT TO
+2273;N # GREATER-THAN OR EQUIVALENT TO
+2274;N # NEITHER LESS-THAN NOR EQUIVALENT TO
+2275;N # NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276;N # LESS-THAN OR GREATER-THAN
+2277;N # GREATER-THAN OR LESS-THAN
+2278;N # NEITHER LESS-THAN NOR GREATER-THAN
+2279;N # NEITHER GREATER-THAN NOR LESS-THAN
+227A;N # PRECEDES
+227B;N # SUCCEEDS
+227C;N # PRECEDES OR EQUAL TO
+227D;N # SUCCEEDS OR EQUAL TO
+227E;N # PRECEDES OR EQUIVALENT TO
+227F;N # SUCCEEDS OR EQUIVALENT TO
+2280;N # DOES NOT PRECEDE
+2281;N # DOES NOT SUCCEED
+2282;A # SUBSET OF
+2283;A # SUPERSET OF
+2284;N # NOT A SUBSET OF
+2285;N # NOT A SUPERSET OF
+2286;A # SUBSET OF OR EQUAL TO
+2287;A # SUPERSET OF OR EQUAL TO
+2288;N # NEITHER A SUBSET OF NOR EQUAL TO
+2289;N # NEITHER A SUPERSET OF NOR EQUAL TO
+228A;N # SUBSET OF WITH NOT EQUAL TO
+228B;N # SUPERSET OF WITH NOT EQUAL TO
+228C;N # MULTISET
+228D;N # MULTISET MULTIPLICATION
+228E;N # MULTISET UNION
+228F;N # SQUARE IMAGE OF
+2290;N # SQUARE ORIGINAL OF
+2291;N # SQUARE IMAGE OF OR EQUAL TO
+2292;N # SQUARE ORIGINAL OF OR EQUAL TO
+2293;N # SQUARE CAP
+2294;N # SQUARE CUP
+2295;A # CIRCLED PLUS
+2296;N # CIRCLED MINUS
+2297;N # CIRCLED TIMES
+2298;N # CIRCLED DIVISION SLASH
+2299;A # CIRCLED DOT OPERATOR
+229A;N # CIRCLED RING OPERATOR
+229B;N # CIRCLED ASTERISK OPERATOR
+229C;N # CIRCLED EQUALS
+229D;N # CIRCLED DASH
+229E;N # SQUARED PLUS
+229F;N # SQUARED MINUS
+22A0;N # SQUARED TIMES
+22A1;N # SQUARED DOT OPERATOR
+22A2;N # RIGHT TACK
+22A3;N # LEFT TACK
+22A4;N # DOWN TACK
+22A5;A # UP TACK
+22A6;N # ASSERTION
+22A7;N # MODELS
+22A8;N # TRUE
+22A9;N # FORCES
+22AA;N # TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB;N # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC;N # DOES NOT PROVE
+22AD;N # NOT TRUE
+22AE;N # DOES NOT FORCE
+22AF;N # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0;N # PRECEDES UNDER RELATION
+22B1;N # SUCCEEDS UNDER RELATION
+22B2;N # NORMAL SUBGROUP OF
+22B3;N # CONTAINS AS NORMAL SUBGROUP
+22B4;N # NORMAL SUBGROUP OF OR EQUAL TO
+22B5;N # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6;N # ORIGINAL OF
+22B7;N # IMAGE OF
+22B8;N # MULTIMAP
+22B9;N # HERMITIAN CONJUGATE MATRIX
+22BA;N # INTERCALATE
+22BB;N # XOR
+22BC;N # NAND
+22BD;N # NOR
+22BE;N # RIGHT ANGLE WITH ARC
+22BF;A # RIGHT TRIANGLE
+22C0;N # N-ARY LOGICAL AND
+22C1;N # N-ARY LOGICAL OR
+22C2;N # N-ARY INTERSECTION
+22C3;N # N-ARY UNION
+22C4;N # DIAMOND OPERATOR
+22C5;N # DOT OPERATOR
+22C6;N # STAR OPERATOR
+22C7;N # DIVISION TIMES
+22C8;N # BOWTIE
+22C9;N # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA;N # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB;N # LEFT SEMIDIRECT PRODUCT
+22CC;N # RIGHT SEMIDIRECT PRODUCT
+22CD;N # REVERSED TILDE EQUALS
+22CE;N # CURLY LOGICAL OR
+22CF;N # CURLY LOGICAL AND
+22D0;N # DOUBLE SUBSET
+22D1;N # DOUBLE SUPERSET
+22D2;N # DOUBLE INTERSECTION
+22D3;N # DOUBLE UNION
+22D4;N # PITCHFORK
+22D5;N # EQUAL AND PARALLEL TO
+22D6;N # LESS-THAN WITH DOT
+22D7;N # GREATER-THAN WITH DOT
+22D8;N # VERY MUCH LESS-THAN
+22D9;N # VERY MUCH GREATER-THAN
+22DA;N # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB;N # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC;N # EQUAL TO OR LESS-THAN
+22DD;N # EQUAL TO OR GREATER-THAN
+22DE;N # EQUAL TO OR PRECEDES
+22DF;N # EQUAL TO OR SUCCEEDS
+22E0;N # DOES NOT PRECEDE OR EQUAL
+22E1;N # DOES NOT SUCCEED OR EQUAL
+22E2;N # NOT SQUARE IMAGE OF OR EQUAL TO
+22E3;N # NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4;N # SQUARE IMAGE OF OR NOT EQUAL TO
+22E5;N # SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6;N # LESS-THAN BUT NOT EQUIVALENT TO
+22E7;N # GREATER-THAN BUT NOT EQUIVALENT TO
+22E8;N # PRECEDES BUT NOT EQUIVALENT TO
+22E9;N # SUCCEEDS BUT NOT EQUIVALENT TO
+22EA;N # NOT NORMAL SUBGROUP OF
+22EB;N # DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC;N # NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED;N # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE;N # VERTICAL ELLIPSIS
+22EF;N # MIDLINE HORIZONTAL ELLIPSIS
+22F0;N # UP RIGHT DIAGONAL ELLIPSIS
+22F1;N # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2;N # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3;N # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4;N # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5;N # ELEMENT OF WITH DOT ABOVE
+22F6;N # ELEMENT OF WITH OVERBAR
+22F7;N # SMALL ELEMENT OF WITH OVERBAR
+22F8;N # ELEMENT OF WITH UNDERBAR
+22F9;N # ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA;N # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB;N # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC;N # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD;N # CONTAINS WITH OVERBAR
+22FE;N # SMALL CONTAINS WITH OVERBAR
+22FF;N # Z NOTATION BAG MEMBERSHIP
+2300;N # DIAMETER SIGN
+2301;N # ELECTRIC ARROW
+2302;N # HOUSE
+2303;N # UP ARROWHEAD
+2304;N # DOWN ARROWHEAD
+2305;N # PROJECTIVE
+2306;N # PERSPECTIVE
+2307;N # WAVY LINE
+2308;N # LEFT CEILING
+2309;N # RIGHT CEILING
+230A;N # LEFT FLOOR
+230B;N # RIGHT FLOOR
+230C;N # BOTTOM RIGHT CROP
+230D;N # BOTTOM LEFT CROP
+230E;N # TOP RIGHT CROP
+230F;N # TOP LEFT CROP
+2310;N # REVERSED NOT SIGN
+2311;N # SQUARE LOZENGE
+2312;A # ARC
+2313;N # SEGMENT
+2314;N # SECTOR
+2315;N # TELEPHONE RECORDER
+2316;N # POSITION INDICATOR
+2317;N # VIEWDATA SQUARE
+2318;N # PLACE OF INTEREST SIGN
+2319;N # TURNED NOT SIGN
+231A;N # WATCH
+231B;N # HOURGLASS
+231C;N # TOP LEFT CORNER
+231D;N # TOP RIGHT CORNER
+231E;N # BOTTOM LEFT CORNER
+231F;N # BOTTOM RIGHT CORNER
+2320;N # TOP HALF INTEGRAL
+2321;N # BOTTOM HALF INTEGRAL
+2322;N # FROWN
+2323;N # SMILE
+2324;N # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325;N # OPTION KEY
+2326;N # ERASE TO THE RIGHT
+2327;N # X IN A RECTANGLE BOX
+2328;N # KEYBOARD
+2329;W # LEFT-POINTING ANGLE BRACKET
+232A;W # RIGHT-POINTING ANGLE BRACKET
+232B;N # ERASE TO THE LEFT
+232C;N # BENZENE RING
+232D;N # CYLINDRICITY
+232E;N # ALL AROUND-PROFILE
+232F;N # SYMMETRY
+2330;N # TOTAL RUNOUT
+2331;N # DIMENSION ORIGIN
+2332;N # CONICAL TAPER
+2333;N # SLOPE
+2334;N # COUNTERBORE
+2335;N # COUNTERSINK
+2336;N # APL FUNCTIONAL SYMBOL I-BEAM
+2337;N # APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338;N # APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339;N # APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A;N # APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B;N # APL FUNCTIONAL SYMBOL QUAD JOT
+233C;N # APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D;N # APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E;N # APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F;N # APL FUNCTIONAL SYMBOL SLASH BAR
+2340;N # APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341;N # APL FUNCTIONAL SYMBOL QUAD SLASH
+2342;N # APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343;N # APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344;N # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345;N # APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346;N # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347;N # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348;N # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349;N # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A;N # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B;N # APL FUNCTIONAL SYMBOL DELTA STILE
+234C;N # APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D;N # APL FUNCTIONAL SYMBOL QUAD DELTA
+234E;N # APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F;N # APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350;N # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351;N # APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352;N # APL FUNCTIONAL SYMBOL DEL STILE
+2353;N # APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354;N # APL FUNCTIONAL SYMBOL QUAD DEL
+2355;N # APL FUNCTIONAL SYMBOL UP TACK JOT
+2356;N # APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357;N # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358;N # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359;N # APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A;N # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B;N # APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C;N # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D;N # APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E;N # APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F;N # APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360;N # APL FUNCTIONAL SYMBOL QUAD COLON
+2361;N # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362;N # APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363;N # APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364;N # APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365;N # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366;N # APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367;N # APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368;N # APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369;N # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A;N # APL FUNCTIONAL SYMBOL COMMA BAR
+236B;N # APL FUNCTIONAL SYMBOL DEL TILDE
+236C;N # APL FUNCTIONAL SYMBOL ZILDE
+236D;N # APL FUNCTIONAL SYMBOL STILE TILDE
+236E;N # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F;N # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370;N # APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371;N # APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372;N # APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373;N # APL FUNCTIONAL SYMBOL IOTA
+2374;N # APL FUNCTIONAL SYMBOL RHO
+2375;N # APL FUNCTIONAL SYMBOL OMEGA
+2376;N # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377;N # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378;N # APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379;N # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A;N # APL FUNCTIONAL SYMBOL ALPHA
+237B;N # NOT CHECK MARK
+237C;N # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D;N # SHOULDERED OPEN BOX
+237E;N # BELL SYMBOL
+237F;N # VERTICAL LINE WITH MIDDLE DOT
+2380;N # INSERTION SYMBOL
+2381;N # CONTINUOUS UNDERLINE SYMBOL
+2382;N # DISCONTINUOUS UNDERLINE SYMBOL
+2383;N # EMPHASIS SYMBOL
+2384;N # COMPOSITION SYMBOL
+2385;N # WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386;N # ENTER SYMBOL
+2387;N # ALTERNATIVE KEY SYMBOL
+2388;N # HELM SYMBOL
+2389;N # CIRCLED HORIZONTAL BAR WITH NOTCH
+238A;N # CIRCLED TRIANGLE DOWN
+238B;N # BROKEN CIRCLE WITH NORTHWEST ARROW
+238C;N # UNDO SYMBOL
+238D;N # MONOSTABLE SYMBOL
+238E;N # HYSTERESIS SYMBOL
+238F;N # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390;N # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391;N # PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392;N # PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393;N # DIRECT CURRENT SYMBOL FORM TWO
+2394;N # SOFTWARE-FUNCTION SYMBOL
+2395;N # APL FUNCTIONAL SYMBOL QUAD
+2396;N # DECIMAL SEPARATOR KEY SYMBOL
+2397;N # PREVIOUS PAGE
+2398;N # NEXT PAGE
+2399;N # PRINT SCREEN SYMBOL
+239A;N # CLEAR SCREEN SYMBOL
+239B;N # LEFT PARENTHESIS UPPER HOOK
+239C;N # LEFT PARENTHESIS EXTENSION
+239D;N # LEFT PARENTHESIS LOWER HOOK
+239E;N # RIGHT PARENTHESIS UPPER HOOK
+239F;N # RIGHT PARENTHESIS EXTENSION
+23A0;N # RIGHT PARENTHESIS LOWER HOOK
+23A1;N # LEFT SQUARE BRACKET UPPER CORNER
+23A2;N # LEFT SQUARE BRACKET EXTENSION
+23A3;N # LEFT SQUARE BRACKET LOWER CORNER
+23A4;N # RIGHT SQUARE BRACKET UPPER CORNER
+23A5;N # RIGHT SQUARE BRACKET EXTENSION
+23A6;N # RIGHT SQUARE BRACKET LOWER CORNER
+23A7;N # LEFT CURLY BRACKET UPPER HOOK
+23A8;N # LEFT CURLY BRACKET MIDDLE PIECE
+23A9;N # LEFT CURLY BRACKET LOWER HOOK
+23AA;N # CURLY BRACKET EXTENSION
+23AB;N # RIGHT CURLY BRACKET UPPER HOOK
+23AC;N # RIGHT CURLY BRACKET MIDDLE PIECE
+23AD;N # RIGHT CURLY BRACKET LOWER HOOK
+23AE;N # INTEGRAL EXTENSION
+23AF;N # HORIZONTAL LINE EXTENSION
+23B0;N # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1;N # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2;N # SUMMATION TOP
+23B3;N # SUMMATION BOTTOM
+23B4;N # TOP SQUARE BRACKET
+23B5;N # BOTTOM SQUARE BRACKET
+23B6;N # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7;N # RADICAL SYMBOL BOTTOM
+23B8;N # LEFT VERTICAL BOX LINE
+23B9;N # RIGHT VERTICAL BOX LINE
+23BA;N # HORIZONTAL SCAN LINE-1
+23BB;N # HORIZONTAL SCAN LINE-3
+23BC;N # HORIZONTAL SCAN LINE-7
+23BD;N # HORIZONTAL SCAN LINE-9
+23BE;N # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF;N # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0;N # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3;N # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6;N # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9;N # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA;N # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB;N # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC;N # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD;N # SQUARE FOOT
+23CE;N # RETURN SYMBOL
+23CF;N # EJECT SYMBOL
+23D0;N # VERTICAL LINE EXTENSION
+23D1;N # METRICAL BREVE
+23D2;N # METRICAL LONG OVER SHORT
+23D3;N # METRICAL SHORT OVER LONG
+23D4;N # METRICAL LONG OVER TWO SHORTS
+23D5;N # METRICAL TWO SHORTS OVER LONG
+23D6;N # METRICAL TWO SHORTS JOINED
+23D7;N # METRICAL TRISEME
+23D8;N # METRICAL TETRASEME
+23D9;N # METRICAL PENTASEME
+23DA;N # EARTH GROUND
+23DB;N # FUSE
+2400;N # SYMBOL FOR NULL
+2401;N # SYMBOL FOR START OF HEADING
+2402;N # SYMBOL FOR START OF TEXT
+2403;N # SYMBOL FOR END OF TEXT
+2404;N # SYMBOL FOR END OF TRANSMISSION
+2405;N # SYMBOL FOR ENQUIRY
+2406;N # SYMBOL FOR ACKNOWLEDGE
+2407;N # SYMBOL FOR BELL
+2408;N # SYMBOL FOR BACKSPACE
+2409;N # SYMBOL FOR HORIZONTAL TABULATION
+240A;N # SYMBOL FOR LINE FEED
+240B;N # SYMBOL FOR VERTICAL TABULATION
+240C;N # SYMBOL FOR FORM FEED
+240D;N # SYMBOL FOR CARRIAGE RETURN
+240E;N # SYMBOL FOR SHIFT OUT
+240F;N # SYMBOL FOR SHIFT IN
+2410;N # SYMBOL FOR DATA LINK ESCAPE
+2411;N # SYMBOL FOR DEVICE CONTROL ONE
+2412;N # SYMBOL FOR DEVICE CONTROL TWO
+2413;N # SYMBOL FOR DEVICE CONTROL THREE
+2414;N # SYMBOL FOR DEVICE CONTROL FOUR
+2415;N # SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416;N # SYMBOL FOR SYNCHRONOUS IDLE
+2417;N # SYMBOL FOR END OF TRANSMISSION BLOCK
+2418;N # SYMBOL FOR CANCEL
+2419;N # SYMBOL FOR END OF MEDIUM
+241A;N # SYMBOL FOR SUBSTITUTE
+241B;N # SYMBOL FOR ESCAPE
+241C;N # SYMBOL FOR FILE SEPARATOR
+241D;N # SYMBOL FOR GROUP SEPARATOR
+241E;N # SYMBOL FOR RECORD SEPARATOR
+241F;N # SYMBOL FOR UNIT SEPARATOR
+2420;N # SYMBOL FOR SPACE
+2421;N # SYMBOL FOR DELETE
+2422;N # BLANK SYMBOL
+2423;N # OPEN BOX
+2424;N # SYMBOL FOR NEWLINE
+2425;N # SYMBOL FOR DELETE FORM TWO
+2426;N # SYMBOL FOR SUBSTITUTE FORM TWO
+2440;N # OCR HOOK
+2441;N # OCR CHAIR
+2442;N # OCR FORK
+2443;N # OCR INVERTED FORK
+2444;N # OCR BELT BUCKLE
+2445;N # OCR BOW TIE
+2446;N # OCR BRANCH BANK IDENTIFICATION
+2447;N # OCR AMOUNT OF CHECK
+2448;N # OCR DASH
+2449;N # OCR CUSTOMER ACCOUNT NUMBER
+244A;N # OCR DOUBLE BACKSLASH
+2460;A # CIRCLED DIGIT ONE
+2461;A # CIRCLED DIGIT TWO
+2462;A # CIRCLED DIGIT THREE
+2463;A # CIRCLED DIGIT FOUR
+2464;A # CIRCLED DIGIT FIVE
+2465;A # CIRCLED DIGIT SIX
+2466;A # CIRCLED DIGIT SEVEN
+2467;A # CIRCLED DIGIT EIGHT
+2468;A # CIRCLED DIGIT NINE
+2469;A # CIRCLED NUMBER TEN
+246A;A # CIRCLED NUMBER ELEVEN
+246B;A # CIRCLED NUMBER TWELVE
+246C;A # CIRCLED NUMBER THIRTEEN
+246D;A # CIRCLED NUMBER FOURTEEN
+246E;A # CIRCLED NUMBER FIFTEEN
+246F;A # CIRCLED NUMBER SIXTEEN
+2470;A # CIRCLED NUMBER SEVENTEEN
+2471;A # CIRCLED NUMBER EIGHTEEN
+2472;A # CIRCLED NUMBER NINETEEN
+2473;A # CIRCLED NUMBER TWENTY
+2474;A # PARENTHESIZED DIGIT ONE
+2475;A # PARENTHESIZED DIGIT TWO
+2476;A # PARENTHESIZED DIGIT THREE
+2477;A # PARENTHESIZED DIGIT FOUR
+2478;A # PARENTHESIZED DIGIT FIVE
+2479;A # PARENTHESIZED DIGIT SIX
+247A;A # PARENTHESIZED DIGIT SEVEN
+247B;A # PARENTHESIZED DIGIT EIGHT
+247C;A # PARENTHESIZED DIGIT NINE
+247D;A # PARENTHESIZED NUMBER TEN
+247E;A # PARENTHESIZED NUMBER ELEVEN
+247F;A # PARENTHESIZED NUMBER TWELVE
+2480;A # PARENTHESIZED NUMBER THIRTEEN
+2481;A # PARENTHESIZED NUMBER FOURTEEN
+2482;A # PARENTHESIZED NUMBER FIFTEEN
+2483;A # PARENTHESIZED NUMBER SIXTEEN
+2484;A # PARENTHESIZED NUMBER SEVENTEEN
+2485;A # PARENTHESIZED NUMBER EIGHTEEN
+2486;A # PARENTHESIZED NUMBER NINETEEN
+2487;A # PARENTHESIZED NUMBER TWENTY
+2488;A # DIGIT ONE FULL STOP
+2489;A # DIGIT TWO FULL STOP
+248A;A # DIGIT THREE FULL STOP
+248B;A # DIGIT FOUR FULL STOP
+248C;A # DIGIT FIVE FULL STOP
+248D;A # DIGIT SIX FULL STOP
+248E;A # DIGIT SEVEN FULL STOP
+248F;A # DIGIT EIGHT FULL STOP
+2490;A # DIGIT NINE FULL STOP
+2491;A # NUMBER TEN FULL STOP
+2492;A # NUMBER ELEVEN FULL STOP
+2493;A # NUMBER TWELVE FULL STOP
+2494;A # NUMBER THIRTEEN FULL STOP
+2495;A # NUMBER FOURTEEN FULL STOP
+2496;A # NUMBER FIFTEEN FULL STOP
+2497;A # NUMBER SIXTEEN FULL STOP
+2498;A # NUMBER SEVENTEEN FULL STOP
+2499;A # NUMBER EIGHTEEN FULL STOP
+249A;A # NUMBER NINETEEN FULL STOP
+249B;A # NUMBER TWENTY FULL STOP
+249C;A # PARENTHESIZED LATIN SMALL LETTER A
+249D;A # PARENTHESIZED LATIN SMALL LETTER B
+249E;A # PARENTHESIZED LATIN SMALL LETTER C
+249F;A # PARENTHESIZED LATIN SMALL LETTER D
+24A0;A # PARENTHESIZED LATIN SMALL LETTER E
+24A1;A # PARENTHESIZED LATIN SMALL LETTER F
+24A2;A # PARENTHESIZED LATIN SMALL LETTER G
+24A3;A # PARENTHESIZED LATIN SMALL LETTER H
+24A4;A # PARENTHESIZED LATIN SMALL LETTER I
+24A5;A # PARENTHESIZED LATIN SMALL LETTER J
+24A6;A # PARENTHESIZED LATIN SMALL LETTER K
+24A7;A # PARENTHESIZED LATIN SMALL LETTER L
+24A8;A # PARENTHESIZED LATIN SMALL LETTER M
+24A9;A # PARENTHESIZED LATIN SMALL LETTER N
+24AA;A # PARENTHESIZED LATIN SMALL LETTER O
+24AB;A # PARENTHESIZED LATIN SMALL LETTER P
+24AC;A # PARENTHESIZED LATIN SMALL LETTER Q
+24AD;A # PARENTHESIZED LATIN SMALL LETTER R
+24AE;A # PARENTHESIZED LATIN SMALL LETTER S
+24AF;A # PARENTHESIZED LATIN SMALL LETTER T
+24B0;A # PARENTHESIZED LATIN SMALL LETTER U
+24B1;A # PARENTHESIZED LATIN SMALL LETTER V
+24B2;A # PARENTHESIZED LATIN SMALL LETTER W
+24B3;A # PARENTHESIZED LATIN SMALL LETTER X
+24B4;A # PARENTHESIZED LATIN SMALL LETTER Y
+24B5;A # PARENTHESIZED LATIN SMALL LETTER Z
+24B6;A # CIRCLED LATIN CAPITAL LETTER A
+24B7;A # CIRCLED LATIN CAPITAL LETTER B
+24B8;A # CIRCLED LATIN CAPITAL LETTER C
+24B9;A # CIRCLED LATIN CAPITAL LETTER D
+24BA;A # CIRCLED LATIN CAPITAL LETTER E
+24BB;A # CIRCLED LATIN CAPITAL LETTER F
+24BC;A # CIRCLED LATIN CAPITAL LETTER G
+24BD;A # CIRCLED LATIN CAPITAL LETTER H
+24BE;A # CIRCLED LATIN CAPITAL LETTER I
+24BF;A # CIRCLED LATIN CAPITAL LETTER J
+24C0;A # CIRCLED LATIN CAPITAL LETTER K
+24C1;A # CIRCLED LATIN CAPITAL LETTER L
+24C2;A # CIRCLED LATIN CAPITAL LETTER M
+24C3;A # CIRCLED LATIN CAPITAL LETTER N
+24C4;A # CIRCLED LATIN CAPITAL LETTER O
+24C5;A # CIRCLED LATIN CAPITAL LETTER P
+24C6;A # CIRCLED LATIN CAPITAL LETTER Q
+24C7;A # CIRCLED LATIN CAPITAL LETTER R
+24C8;A # CIRCLED LATIN CAPITAL LETTER S
+24C9;A # CIRCLED LATIN CAPITAL LETTER T
+24CA;A # CIRCLED LATIN CAPITAL LETTER U
+24CB;A # CIRCLED LATIN CAPITAL LETTER V
+24CC;A # CIRCLED LATIN CAPITAL LETTER W
+24CD;A # CIRCLED LATIN CAPITAL LETTER X
+24CE;A # CIRCLED LATIN CAPITAL LETTER Y
+24CF;A # CIRCLED LATIN CAPITAL LETTER Z
+24D0;A # CIRCLED LATIN SMALL LETTER A
+24D1;A # CIRCLED LATIN SMALL LETTER B
+24D2;A # CIRCLED LATIN SMALL LETTER C
+24D3;A # CIRCLED LATIN SMALL LETTER D
+24D4;A # CIRCLED LATIN SMALL LETTER E
+24D5;A # CIRCLED LATIN SMALL LETTER F
+24D6;A # CIRCLED LATIN SMALL LETTER G
+24D7;A # CIRCLED LATIN SMALL LETTER H
+24D8;A # CIRCLED LATIN SMALL LETTER I
+24D9;A # CIRCLED LATIN SMALL LETTER J
+24DA;A # CIRCLED LATIN SMALL LETTER K
+24DB;A # CIRCLED LATIN SMALL LETTER L
+24DC;A # CIRCLED LATIN SMALL LETTER M
+24DD;A # CIRCLED LATIN SMALL LETTER N
+24DE;A # CIRCLED LATIN SMALL LETTER O
+24DF;A # CIRCLED LATIN SMALL LETTER P
+24E0;A # CIRCLED LATIN SMALL LETTER Q
+24E1;A # CIRCLED LATIN SMALL LETTER R
+24E2;A # CIRCLED LATIN SMALL LETTER S
+24E3;A # CIRCLED LATIN SMALL LETTER T
+24E4;A # CIRCLED LATIN SMALL LETTER U
+24E5;A # CIRCLED LATIN SMALL LETTER V
+24E6;A # CIRCLED LATIN SMALL LETTER W
+24E7;A # CIRCLED LATIN SMALL LETTER X
+24E8;A # CIRCLED LATIN SMALL LETTER Y
+24E9;A # CIRCLED LATIN SMALL LETTER Z
+24EA;N # CIRCLED DIGIT ZERO
+24EB;A # NEGATIVE CIRCLED NUMBER ELEVEN
+24EC;A # NEGATIVE CIRCLED NUMBER TWELVE
+24ED;A # NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE;A # NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF;A # NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0;A # NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1;A # NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2;A # NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3;A # NEGATIVE CIRCLED NUMBER NINETEEN
+24F4;A # NEGATIVE CIRCLED NUMBER TWENTY
+24F5;A # DOUBLE CIRCLED DIGIT ONE
+24F6;A # DOUBLE CIRCLED DIGIT TWO
+24F7;A # DOUBLE CIRCLED DIGIT THREE
+24F8;A # DOUBLE CIRCLED DIGIT FOUR
+24F9;A # DOUBLE CIRCLED DIGIT FIVE
+24FA;A # DOUBLE CIRCLED DIGIT SIX
+24FB;A # DOUBLE CIRCLED DIGIT SEVEN
+24FC;A # DOUBLE CIRCLED DIGIT EIGHT
+24FD;A # DOUBLE CIRCLED DIGIT NINE
+24FE;A # DOUBLE CIRCLED NUMBER TEN
+24FF;A # NEGATIVE CIRCLED DIGIT ZERO
+2500;A # BOX DRAWINGS LIGHT HORIZONTAL
+2501;A # BOX DRAWINGS HEAVY HORIZONTAL
+2502;A # BOX DRAWINGS LIGHT VERTICAL
+2503;A # BOX DRAWINGS HEAVY VERTICAL
+2504;A # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505;A # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506;A # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507;A # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508;A # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509;A # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A;A # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B;A # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C;A # BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D;A # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E;A # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F;A # BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510;A # BOX DRAWINGS LIGHT DOWN AND LEFT
+2511;A # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512;A # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513;A # BOX DRAWINGS HEAVY DOWN AND LEFT
+2514;A # BOX DRAWINGS LIGHT UP AND RIGHT
+2515;A # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516;A # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517;A # BOX DRAWINGS HEAVY UP AND RIGHT
+2518;A # BOX DRAWINGS LIGHT UP AND LEFT
+2519;A # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A;A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B;A # BOX DRAWINGS HEAVY UP AND LEFT
+251C;A # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D;A # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E;A # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F;A # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520;A # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521;A # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522;A # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523;A # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524;A # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525;A # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526;A # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527;A # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528;A # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529;A # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A;A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B;A # BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C;A # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D;A # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E;A # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F;A # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530;A # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531;A # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532;A # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533;A # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534;A # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535;A # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536;A # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537;A # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538;A # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539;A # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A;A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B;A # BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C;A # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D;A # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E;A # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F;A # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540;A # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541;A # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542;A # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543;A # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544;A # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545;A # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546;A # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547;A # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548;A # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549;A # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A;A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B;A # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C;N # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D;N # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E;N # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F;N # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550;A # BOX DRAWINGS DOUBLE HORIZONTAL
+2551;A # BOX DRAWINGS DOUBLE VERTICAL
+2552;A # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553;A # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554;A # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555;A # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556;A # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557;A # BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558;A # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559;A # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A;A # BOX DRAWINGS DOUBLE UP AND RIGHT
+255B;A # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C;A # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D;A # BOX DRAWINGS DOUBLE UP AND LEFT
+255E;A # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F;A # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560;A # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561;A # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562;A # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563;A # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564;A # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565;A # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566;A # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567;A # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568;A # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569;A # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A;A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B;A # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C;A # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D;A # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E;A # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F;A # BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570;A # BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571;A # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572;A # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573;A # BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574;N # BOX DRAWINGS LIGHT LEFT
+2575;N # BOX DRAWINGS LIGHT UP
+2576;N # BOX DRAWINGS LIGHT RIGHT
+2577;N # BOX DRAWINGS LIGHT DOWN
+2578;N # BOX DRAWINGS HEAVY LEFT
+2579;N # BOX DRAWINGS HEAVY UP
+257A;N # BOX DRAWINGS HEAVY RIGHT
+257B;N # BOX DRAWINGS HEAVY DOWN
+257C;N # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D;N # BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E;N # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F;N # BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580;A # UPPER HALF BLOCK
+2581;A # LOWER ONE EIGHTH BLOCK
+2582;A # LOWER ONE QUARTER BLOCK
+2583;A # LOWER THREE EIGHTHS BLOCK
+2584;A # LOWER HALF BLOCK
+2585;A # LOWER FIVE EIGHTHS BLOCK
+2586;A # LOWER THREE QUARTERS BLOCK
+2587;A # LOWER SEVEN EIGHTHS BLOCK
+2588;A # FULL BLOCK
+2589;A # LEFT SEVEN EIGHTHS BLOCK
+258A;A # LEFT THREE QUARTERS BLOCK
+258B;A # LEFT FIVE EIGHTHS BLOCK
+258C;A # LEFT HALF BLOCK
+258D;A # LEFT THREE EIGHTHS BLOCK
+258E;A # LEFT ONE QUARTER BLOCK
+258F;A # LEFT ONE EIGHTH BLOCK
+2590;N # RIGHT HALF BLOCK
+2591;N # LIGHT SHADE
+2592;A # MEDIUM SHADE
+2593;A # DARK SHADE
+2594;A # UPPER ONE EIGHTH BLOCK
+2595;A # RIGHT ONE EIGHTH BLOCK
+2596;N # QUADRANT LOWER LEFT
+2597;N # QUADRANT LOWER RIGHT
+2598;N # QUADRANT UPPER LEFT
+2599;N # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A;N # QUADRANT UPPER LEFT AND LOWER RIGHT
+259B;N # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C;N # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D;N # QUADRANT UPPER RIGHT
+259E;N # QUADRANT UPPER RIGHT AND LOWER LEFT
+259F;N # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0;A # BLACK SQUARE
+25A1;A # WHITE SQUARE
+25A2;N # WHITE SQUARE WITH ROUNDED CORNERS
+25A3;A # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4;A # SQUARE WITH HORIZONTAL FILL
+25A5;A # SQUARE WITH VERTICAL FILL
+25A6;A # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7;A # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8;A # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9;A # SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA;N # BLACK SMALL SQUARE
+25AB;N # WHITE SMALL SQUARE
+25AC;N # BLACK RECTANGLE
+25AD;N # WHITE RECTANGLE
+25AE;N # BLACK VERTICAL RECTANGLE
+25AF;N # WHITE VERTICAL RECTANGLE
+25B0;N # BLACK PARALLELOGRAM
+25B1;N # WHITE PARALLELOGRAM
+25B2;A # BLACK UP-POINTING TRIANGLE
+25B3;A # WHITE UP-POINTING TRIANGLE
+25B4;N # BLACK UP-POINTING SMALL TRIANGLE
+25B5;N # WHITE UP-POINTING SMALL TRIANGLE
+25B6;A # BLACK RIGHT-POINTING TRIANGLE
+25B7;A # WHITE RIGHT-POINTING TRIANGLE
+25B8;N # BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9;N # WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA;N # BLACK RIGHT-POINTING POINTER
+25BB;N # WHITE RIGHT-POINTING POINTER
+25BC;A # BLACK DOWN-POINTING TRIANGLE
+25BD;A # WHITE DOWN-POINTING TRIANGLE
+25BE;N # BLACK DOWN-POINTING SMALL TRIANGLE
+25BF;N # WHITE DOWN-POINTING SMALL TRIANGLE
+25C0;A # BLACK LEFT-POINTING TRIANGLE
+25C1;A # WHITE LEFT-POINTING TRIANGLE
+25C2;N # BLACK LEFT-POINTING SMALL TRIANGLE
+25C3;N # WHITE LEFT-POINTING SMALL TRIANGLE
+25C4;N # BLACK LEFT-POINTING POINTER
+25C5;N # WHITE LEFT-POINTING POINTER
+25C6;A # BLACK DIAMOND
+25C7;A # WHITE DIAMOND
+25C8;A # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9;N # FISHEYE
+25CA;N # LOZENGE
+25CB;A # WHITE CIRCLE
+25CC;N # DOTTED CIRCLE
+25CD;N # CIRCLE WITH VERTICAL FILL
+25CE;A # BULLSEYE
+25CF;A # BLACK CIRCLE
+25D0;A # CIRCLE WITH LEFT HALF BLACK
+25D1;A # CIRCLE WITH RIGHT HALF BLACK
+25D2;N # CIRCLE WITH LOWER HALF BLACK
+25D3;N # CIRCLE WITH UPPER HALF BLACK
+25D4;N # CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5;N # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6;N # LEFT HALF BLACK CIRCLE
+25D7;N # RIGHT HALF BLACK CIRCLE
+25D8;N # INVERSE BULLET
+25D9;N # INVERSE WHITE CIRCLE
+25DA;N # UPPER HALF INVERSE WHITE CIRCLE
+25DB;N # LOWER HALF INVERSE WHITE CIRCLE
+25DC;N # UPPER LEFT QUADRANT CIRCULAR ARC
+25DD;N # UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE;N # LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF;N # LOWER LEFT QUADRANT CIRCULAR ARC
+25E0;N # UPPER HALF CIRCLE
+25E1;N # LOWER HALF CIRCLE
+25E2;A # BLACK LOWER RIGHT TRIANGLE
+25E3;A # BLACK LOWER LEFT TRIANGLE
+25E4;A # BLACK UPPER LEFT TRIANGLE
+25E5;A # BLACK UPPER RIGHT TRIANGLE
+25E6;N # WHITE BULLET
+25E7;N # SQUARE WITH LEFT HALF BLACK
+25E8;N # SQUARE WITH RIGHT HALF BLACK
+25E9;N # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA;N # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB;N # WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC;N # WHITE UP-POINTING TRIANGLE WITH DOT
+25ED;N # UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE;N # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF;A # LARGE CIRCLE
+25F0;N # WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1;N # WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2;N # WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3;N # WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4;N # WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5;N # WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6;N # WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7;N # WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8;N # UPPER LEFT TRIANGLE
+25F9;N # UPPER RIGHT TRIANGLE
+25FA;N # LOWER LEFT TRIANGLE
+25FB;N # WHITE MEDIUM SQUARE
+25FC;N # BLACK MEDIUM SQUARE
+25FD;N # WHITE MEDIUM SMALL SQUARE
+25FE;N # BLACK MEDIUM SMALL SQUARE
+25FF;N # LOWER RIGHT TRIANGLE
+2600;N # BLACK SUN WITH RAYS
+2601;N # CLOUD
+2602;N # UMBRELLA
+2603;N # SNOWMAN
+2604;N # COMET
+2605;A # BLACK STAR
+2606;A # WHITE STAR
+2607;N # LIGHTNING
+2608;N # THUNDERSTORM
+2609;A # SUN
+260A;N # ASCENDING NODE
+260B;N # DESCENDING NODE
+260C;N # CONJUNCTION
+260D;N # OPPOSITION
+260E;A # BLACK TELEPHONE
+260F;A # WHITE TELEPHONE
+2610;N # BALLOT BOX
+2611;N # BALLOT BOX WITH CHECK
+2612;N # BALLOT BOX WITH X
+2613;N # SALTIRE
+2614;A # UMBRELLA WITH RAIN DROPS
+2615;A # HOT BEVERAGE
+2616;N # WHITE SHOGI PIECE
+2617;N # BLACK SHOGI PIECE
+2618;N # SHAMROCK
+2619;N # REVERSED ROTATED FLORAL HEART BULLET
+261A;N # BLACK LEFT POINTING INDEX
+261B;N # BLACK RIGHT POINTING INDEX
+261C;A # WHITE LEFT POINTING INDEX
+261D;N # WHITE UP POINTING INDEX
+261E;A # WHITE RIGHT POINTING INDEX
+261F;N # WHITE DOWN POINTING INDEX
+2620;N # SKULL AND CROSSBONES
+2621;N # CAUTION SIGN
+2622;N # RADIOACTIVE SIGN
+2623;N # BIOHAZARD SIGN
+2624;N # CADUCEUS
+2625;N # ANKH
+2626;N # ORTHODOX CROSS
+2627;N # CHI RHO
+2628;N # CROSS OF LORRAINE
+2629;N # CROSS OF JERUSALEM
+262A;N # STAR AND CRESCENT
+262B;N # FARSI SYMBOL
+262C;N # ADI SHAKTI
+262D;N # HAMMER AND SICKLE
+262E;N # PEACE SYMBOL
+262F;N # YIN YANG
+2630;N # TRIGRAM FOR HEAVEN
+2631;N # TRIGRAM FOR LAKE
+2632;N # TRIGRAM FOR FIRE
+2633;N # TRIGRAM FOR THUNDER
+2634;N # TRIGRAM FOR WIND
+2635;N # TRIGRAM FOR WATER
+2636;N # TRIGRAM FOR MOUNTAIN
+2637;N # TRIGRAM FOR EARTH
+2638;N # WHEEL OF DHARMA
+2639;N # WHITE FROWNING FACE
+263A;N # WHITE SMILING FACE
+263B;N # BLACK SMILING FACE
+263C;N # WHITE SUN WITH RAYS
+263D;N # FIRST QUARTER MOON
+263E;N # LAST QUARTER MOON
+263F;N # MERCURY
+2640;A # FEMALE SIGN
+2641;N # EARTH
+2642;A # MALE SIGN
+2643;N # JUPITER
+2644;N # SATURN
+2645;N # URANUS
+2646;N # NEPTUNE
+2647;N # PLUTO
+2648;N # ARIES
+2649;N # TAURUS
+264A;N # GEMINI
+264B;N # CANCER
+264C;N # LEO
+264D;N # VIRGO
+264E;N # LIBRA
+264F;N # SCORPIUS
+2650;N # SAGITTARIUS
+2651;N # CAPRICORN
+2652;N # AQUARIUS
+2653;N # PISCES
+2654;N # WHITE CHESS KING
+2655;N # WHITE CHESS QUEEN
+2656;N # WHITE CHESS ROOK
+2657;N # WHITE CHESS BISHOP
+2658;N # WHITE CHESS KNIGHT
+2659;N # WHITE CHESS PAWN
+265A;N # BLACK CHESS KING
+265B;N # BLACK CHESS QUEEN
+265C;N # BLACK CHESS ROOK
+265D;N # BLACK CHESS BISHOP
+265E;N # BLACK CHESS KNIGHT
+265F;N # BLACK CHESS PAWN
+2660;A # BLACK SPADE SUIT
+2661;A # WHITE HEART SUIT
+2662;N # WHITE DIAMOND SUIT
+2663;A # BLACK CLUB SUIT
+2664;A # WHITE SPADE SUIT
+2665;A # BLACK HEART SUIT
+2666;N # BLACK DIAMOND SUIT
+2667;A # WHITE CLUB SUIT
+2668;A # HOT SPRINGS
+2669;A # QUARTER NOTE
+266A;A # EIGHTH NOTE
+266B;N # BEAMED EIGHTH NOTES
+266C;A # BEAMED SIXTEENTH NOTES
+266D;A # MUSIC FLAT SIGN
+266E;N # MUSIC NATURAL SIGN
+266F;A # MUSIC SHARP SIGN
+2670;N # WEST SYRIAC CROSS
+2671;N # EAST SYRIAC CROSS
+2672;N # UNIVERSAL RECYCLING SYMBOL
+2673;N # RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674;N # RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675;N # RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676;N # RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677;N # RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678;N # RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679;N # RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A;N # RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B;N # BLACK UNIVERSAL RECYCLING SYMBOL
+267C;N # RECYCLED PAPER SYMBOL
+267D;N # PARTIALLY-RECYCLED PAPER SYMBOL
+267E;N # PERMANENT PAPER SIGN
+267F;N # WHEELCHAIR SYMBOL
+2680;N # DIE FACE-1
+2681;N # DIE FACE-2
+2682;N # DIE FACE-3
+2683;N # DIE FACE-4
+2684;N # DIE FACE-5
+2685;N # DIE FACE-6
+2686;N # WHITE CIRCLE WITH DOT RIGHT
+2687;N # WHITE CIRCLE WITH TWO DOTS
+2688;N # BLACK CIRCLE WITH WHITE DOT RIGHT
+2689;N # BLACK CIRCLE WITH TWO WHITE DOTS
+268A;N # MONOGRAM FOR YANG
+268B;N # MONOGRAM FOR YIN
+268C;N # DIGRAM FOR GREATER YANG
+268D;N # DIGRAM FOR LESSER YIN
+268E;N # DIGRAM FOR LESSER YANG
+268F;N # DIGRAM FOR GREATER YIN
+2690;N # WHITE FLAG
+2691;N # BLACK FLAG
+2692;N # HAMMER AND PICK
+2693;N # ANCHOR
+2694;N # CROSSED SWORDS
+2695;N # STAFF OF AESCULAPIUS
+2696;N # SCALES
+2697;N # ALEMBIC
+2698;N # FLOWER
+2699;N # GEAR
+269A;N # STAFF OF HERMES
+269B;N # ATOM SYMBOL
+269C;N # FLEUR-DE-LIS
+26A0;N # WARNING SIGN
+26A1;N # HIGH VOLTAGE SIGN
+26A2;N # DOUBLED FEMALE SIGN
+26A3;N # DOUBLED MALE SIGN
+26A4;N # INTERLOCKED FEMALE AND MALE SIGN
+26A5;N # MALE AND FEMALE SIGN
+26A6;N # MALE WITH STROKE SIGN
+26A7;N # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8;N # VERTICAL MALE WITH STROKE SIGN
+26A9;N # HORIZONTAL MALE WITH STROKE SIGN
+26AA;N # MEDIUM WHITE CIRCLE
+26AB;N # MEDIUM BLACK CIRCLE
+26AC;N # MEDIUM SMALL WHITE CIRCLE
+26AD;N # MARRIAGE SYMBOL
+26AE;N # DIVORCE SYMBOL
+26AF;N # UNMARRIED PARTNERSHIP SYMBOL
+26B0;N # COFFIN
+26B1;N # FUNERAL URN
+2701;N # UPPER BLADE SCISSORS
+2702;N # BLACK SCISSORS
+2703;N # LOWER BLADE SCISSORS
+2704;N # WHITE SCISSORS
+2706;N # TELEPHONE LOCATION SIGN
+2707;N # TAPE DRIVE
+2708;N # AIRPLANE
+2709;N # ENVELOPE
+270C;N # VICTORY HAND
+270D;N # WRITING HAND
+270E;N # LOWER RIGHT PENCIL
+270F;N # PENCIL
+2710;N # UPPER RIGHT PENCIL
+2711;N # WHITE NIB
+2712;N # BLACK NIB
+2713;N # CHECK MARK
+2714;N # HEAVY CHECK MARK
+2715;N # MULTIPLICATION X
+2716;N # HEAVY MULTIPLICATION X
+2717;N # BALLOT X
+2718;N # HEAVY BALLOT X
+2719;N # OUTLINED GREEK CROSS
+271A;N # HEAVY GREEK CROSS
+271B;N # OPEN CENTRE CROSS
+271C;N # HEAVY OPEN CENTRE CROSS
+271D;N # LATIN CROSS
+271E;N # SHADOWED WHITE LATIN CROSS
+271F;N # OUTLINED LATIN CROSS
+2720;N # MALTESE CROSS
+2721;N # STAR OF DAVID
+2722;N # FOUR TEARDROP-SPOKED ASTERISK
+2723;N # FOUR BALLOON-SPOKED ASTERISK
+2724;N # HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725;N # FOUR CLUB-SPOKED ASTERISK
+2726;N # BLACK FOUR POINTED STAR
+2727;N # WHITE FOUR POINTED STAR
+2729;N # STRESS OUTLINED WHITE STAR
+272A;N # CIRCLED WHITE STAR
+272B;N # OPEN CENTRE BLACK STAR
+272C;N # BLACK CENTRE WHITE STAR
+272D;N # OUTLINED BLACK STAR
+272E;N # HEAVY OUTLINED BLACK STAR
+272F;N # PINWHEEL STAR
+2730;N # SHADOWED WHITE STAR
+2731;N # HEAVY ASTERISK
+2732;N # OPEN CENTRE ASTERISK
+2733;N # EIGHT SPOKED ASTERISK
+2734;N # EIGHT POINTED BLACK STAR
+2735;N # EIGHT POINTED PINWHEEL STAR
+2736;N # SIX POINTED BLACK STAR
+2737;N # EIGHT POINTED RECTILINEAR BLACK STAR
+2738;N # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739;N # TWELVE POINTED BLACK STAR
+273A;N # SIXTEEN POINTED ASTERISK
+273B;N # TEARDROP-SPOKED ASTERISK
+273C;N # OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D;A # HEAVY TEARDROP-SPOKED ASTERISK
+273E;N # SIX PETALLED BLACK AND WHITE FLORETTE
+273F;N # BLACK FLORETTE
+2740;N # WHITE FLORETTE
+2741;N # EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742;N # CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743;N # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744;N # SNOWFLAKE
+2745;N # TIGHT TRIFOLIATE SNOWFLAKE
+2746;N # HEAVY CHEVRON SNOWFLAKE
+2747;N # SPARKLE
+2748;N # HEAVY SPARKLE
+2749;N # BALLOON-SPOKED ASTERISK
+274A;N # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B;N # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D;N # SHADOWED WHITE CIRCLE
+274F;N # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750;N # UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751;N # LOWER RIGHT SHADOWED WHITE SQUARE
+2752;N # UPPER RIGHT SHADOWED WHITE SQUARE
+2756;N # BLACK DIAMOND MINUS WHITE X
+2758;N # LIGHT VERTICAL BAR
+2759;N # MEDIUM VERTICAL BAR
+275A;N # HEAVY VERTICAL BAR
+275B;N # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C;N # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D;N # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E;N # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761;N # CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762;N # HEAVY EXCLAMATION MARK ORNAMENT
+2763;N # HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764;N # HEAVY BLACK HEART
+2765;N # ROTATED HEAVY BLACK HEART BULLET
+2766;N # FLORAL HEART
+2767;N # ROTATED FLORAL HEART BULLET
+2768;N # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769;N # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A;N # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B;N # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C;N # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D;N # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E;N # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F;N # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770;N # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771;N # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772;N # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773;N # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774;N # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775;N # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776;A # DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777;A # DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778;A # DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779;A # DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A;A # DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B;A # DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C;A # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D;A # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E;A # DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F;A # DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780;N # DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781;N # DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782;N # DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783;N # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784;N # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785;N # DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786;N # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787;N # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788;N # DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789;N # DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793;N # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794;N # HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798;N # HEAVY SOUTH EAST ARROW
+2799;N # HEAVY RIGHTWARDS ARROW
+279A;N # HEAVY NORTH EAST ARROW
+279B;N # DRAFTING POINT RIGHTWARDS ARROW
+279C;N # HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D;N # TRIANGLE-HEADED RIGHTWARDS ARROW
+279E;N # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F;N # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0;N # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1;N # BLACK RIGHTWARDS ARROW
+27A2;N # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3;N # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4;N # BLACK RIGHTWARDS ARROWHEAD
+27A5;N # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6;N # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7;N # SQUAT BLACK RIGHTWARDS ARROW
+27A8;N # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9;N # RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA;N # LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB;N # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC;N # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD;N # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE;N # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF;N # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1;N # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2;N # CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3;N # WHITE-FEATHERED RIGHTWARDS ARROW
+27B4;N # BLACK-FEATHERED SOUTH EAST ARROW
+27B5;N # BLACK-FEATHERED RIGHTWARDS ARROW
+27B6;N # BLACK-FEATHERED NORTH EAST ARROW
+27B7;N # HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8;N # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9;N # HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA;N # TEARDROP-BARBED RIGHTWARDS ARROW
+27BB;N # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC;N # WEDGE-TAILED RIGHTWARDS ARROW
+27BD;N # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE;N # OPEN-OUTLINED RIGHTWARDS ARROW
+27C0;N # THREE DIMENSIONAL ANGLE
+27C1;N # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2;N # PERPENDICULAR
+27C3;N # OPEN SUBSET
+27C4;N # OPEN SUPERSET
+27C5;N # LEFT S-SHAPED BAG DELIMITER
+27C6;N # RIGHT S-SHAPED BAG DELIMITER
+27D0;N # WHITE DIAMOND WITH CENTRED DOT
+27D1;N # AND WITH DOT
+27D2;N # ELEMENT OF OPENING UPWARDS
+27D3;N # LOWER RIGHT CORNER WITH DOT
+27D4;N # UPPER LEFT CORNER WITH DOT
+27D5;N # LEFT OUTER JOIN
+27D6;N # RIGHT OUTER JOIN
+27D7;N # FULL OUTER JOIN
+27D8;N # LARGE UP TACK
+27D9;N # LARGE DOWN TACK
+27DA;N # LEFT AND RIGHT DOUBLE TURNSTILE
+27DB;N # LEFT AND RIGHT TACK
+27DC;N # LEFT MULTIMAP
+27DD;N # LONG RIGHT TACK
+27DE;N # LONG LEFT TACK
+27DF;N # UP TACK WITH CIRCLE ABOVE
+27E0;N # LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1;N # WHITE CONCAVE-SIDED DIAMOND
+27E2;N # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3;N # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4;N # WHITE SQUARE WITH LEFTWARDS TICK
+27E5;N # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6;Na # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7;Na # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8;Na # MATHEMATICAL LEFT ANGLE BRACKET
+27E9;Na # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA;Na # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB;Na # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0;N # UPWARDS QUADRUPLE ARROW
+27F1;N # DOWNWARDS QUADRUPLE ARROW
+27F2;N # ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3;N # CLOCKWISE GAPPED CIRCLE ARROW
+27F4;N # RIGHT ARROW WITH CIRCLED PLUS
+27F5;N # LONG LEFTWARDS ARROW
+27F6;N # LONG RIGHTWARDS ARROW
+27F7;N # LONG LEFT RIGHT ARROW
+27F8;N # LONG LEFTWARDS DOUBLE ARROW
+27F9;N # LONG RIGHTWARDS DOUBLE ARROW
+27FA;N # LONG LEFT RIGHT DOUBLE ARROW
+27FB;N # LONG LEFTWARDS ARROW FROM BAR
+27FC;N # LONG RIGHTWARDS ARROW FROM BAR
+27FD;N # LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE;N # LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF;N # LONG RIGHTWARDS SQUIGGLE ARROW
+2800;N # BRAILLE PATTERN BLANK
+2801;N # BRAILLE PATTERN DOTS-1
+2802;N # BRAILLE PATTERN DOTS-2
+2803;N # BRAILLE PATTERN DOTS-12
+2804;N # BRAILLE PATTERN DOTS-3
+2805;N # BRAILLE PATTERN DOTS-13
+2806;N # BRAILLE PATTERN DOTS-23
+2807;N # BRAILLE PATTERN DOTS-123
+2808;N # BRAILLE PATTERN DOTS-4
+2809;N # BRAILLE PATTERN DOTS-14
+280A;N # BRAILLE PATTERN DOTS-24
+280B;N # BRAILLE PATTERN DOTS-124
+280C;N # BRAILLE PATTERN DOTS-34
+280D;N # BRAILLE PATTERN DOTS-134
+280E;N # BRAILLE PATTERN DOTS-234
+280F;N # BRAILLE PATTERN DOTS-1234
+2810;N # BRAILLE PATTERN DOTS-5
+2811;N # BRAILLE PATTERN DOTS-15
+2812;N # BRAILLE PATTERN DOTS-25
+2813;N # BRAILLE PATTERN DOTS-125
+2814;N # BRAILLE PATTERN DOTS-35
+2815;N # BRAILLE PATTERN DOTS-135
+2816;N # BRAILLE PATTERN DOTS-235
+2817;N # BRAILLE PATTERN DOTS-1235
+2818;N # BRAILLE PATTERN DOTS-45
+2819;N # BRAILLE PATTERN DOTS-145
+281A;N # BRAILLE PATTERN DOTS-245
+281B;N # BRAILLE PATTERN DOTS-1245
+281C;N # BRAILLE PATTERN DOTS-345
+281D;N # BRAILLE PATTERN DOTS-1345
+281E;N # BRAILLE PATTERN DOTS-2345
+281F;N # BRAILLE PATTERN DOTS-12345
+2820;N # BRAILLE PATTERN DOTS-6
+2821;N # BRAILLE PATTERN DOTS-16
+2822;N # BRAILLE PATTERN DOTS-26
+2823;N # BRAILLE PATTERN DOTS-126
+2824;N # BRAILLE PATTERN DOTS-36
+2825;N # BRAILLE PATTERN DOTS-136
+2826;N # BRAILLE PATTERN DOTS-236
+2827;N # BRAILLE PATTERN DOTS-1236
+2828;N # BRAILLE PATTERN DOTS-46
+2829;N # BRAILLE PATTERN DOTS-146
+282A;N # BRAILLE PATTERN DOTS-246
+282B;N # BRAILLE PATTERN DOTS-1246
+282C;N # BRAILLE PATTERN DOTS-346
+282D;N # BRAILLE PATTERN DOTS-1346
+282E;N # BRAILLE PATTERN DOTS-2346
+282F;N # BRAILLE PATTERN DOTS-12346
+2830;N # BRAILLE PATTERN DOTS-56
+2831;N # BRAILLE PATTERN DOTS-156
+2832;N # BRAILLE PATTERN DOTS-256
+2833;N # BRAILLE PATTERN DOTS-1256
+2834;N # BRAILLE PATTERN DOTS-356
+2835;N # BRAILLE PATTERN DOTS-1356
+2836;N # BRAILLE PATTERN DOTS-2356
+2837;N # BRAILLE PATTERN DOTS-12356
+2838;N # BRAILLE PATTERN DOTS-456
+2839;N # BRAILLE PATTERN DOTS-1456
+283A;N # BRAILLE PATTERN DOTS-2456
+283B;N # BRAILLE PATTERN DOTS-12456
+283C;N # BRAILLE PATTERN DOTS-3456
+283D;N # BRAILLE PATTERN DOTS-13456
+283E;N # BRAILLE PATTERN DOTS-23456
+283F;N # BRAILLE PATTERN DOTS-123456
+2840;N # BRAILLE PATTERN DOTS-7
+2841;N # BRAILLE PATTERN DOTS-17
+2842;N # BRAILLE PATTERN DOTS-27
+2843;N # BRAILLE PATTERN DOTS-127
+2844;N # BRAILLE PATTERN DOTS-37
+2845;N # BRAILLE PATTERN DOTS-137
+2846;N # BRAILLE PATTERN DOTS-237
+2847;N # BRAILLE PATTERN DOTS-1237
+2848;N # BRAILLE PATTERN DOTS-47
+2849;N # BRAILLE PATTERN DOTS-147
+284A;N # BRAILLE PATTERN DOTS-247
+284B;N # BRAILLE PATTERN DOTS-1247
+284C;N # BRAILLE PATTERN DOTS-347
+284D;N # BRAILLE PATTERN DOTS-1347
+284E;N # BRAILLE PATTERN DOTS-2347
+284F;N # BRAILLE PATTERN DOTS-12347
+2850;N # BRAILLE PATTERN DOTS-57
+2851;N # BRAILLE PATTERN DOTS-157
+2852;N # BRAILLE PATTERN DOTS-257
+2853;N # BRAILLE PATTERN DOTS-1257
+2854;N # BRAILLE PATTERN DOTS-357
+2855;N # BRAILLE PATTERN DOTS-1357
+2856;N # BRAILLE PATTERN DOTS-2357
+2857;N # BRAILLE PATTERN DOTS-12357
+2858;N # BRAILLE PATTERN DOTS-457
+2859;N # BRAILLE PATTERN DOTS-1457
+285A;N # BRAILLE PATTERN DOTS-2457
+285B;N # BRAILLE PATTERN DOTS-12457
+285C;N # BRAILLE PATTERN DOTS-3457
+285D;N # BRAILLE PATTERN DOTS-13457
+285E;N # BRAILLE PATTERN DOTS-23457
+285F;N # BRAILLE PATTERN DOTS-123457
+2860;N # BRAILLE PATTERN DOTS-67
+2861;N # BRAILLE PATTERN DOTS-167
+2862;N # BRAILLE PATTERN DOTS-267
+2863;N # BRAILLE PATTERN DOTS-1267
+2864;N # BRAILLE PATTERN DOTS-367
+2865;N # BRAILLE PATTERN DOTS-1367
+2866;N # BRAILLE PATTERN DOTS-2367
+2867;N # BRAILLE PATTERN DOTS-12367
+2868;N # BRAILLE PATTERN DOTS-467
+2869;N # BRAILLE PATTERN DOTS-1467
+286A;N # BRAILLE PATTERN DOTS-2467
+286B;N # BRAILLE PATTERN DOTS-12467
+286C;N # BRAILLE PATTERN DOTS-3467
+286D;N # BRAILLE PATTERN DOTS-13467
+286E;N # BRAILLE PATTERN DOTS-23467
+286F;N # BRAILLE PATTERN DOTS-123467
+2870;N # BRAILLE PATTERN DOTS-567
+2871;N # BRAILLE PATTERN DOTS-1567
+2872;N # BRAILLE PATTERN DOTS-2567
+2873;N # BRAILLE PATTERN DOTS-12567
+2874;N # BRAILLE PATTERN DOTS-3567
+2875;N # BRAILLE PATTERN DOTS-13567
+2876;N # BRAILLE PATTERN DOTS-23567
+2877;N # BRAILLE PATTERN DOTS-123567
+2878;N # BRAILLE PATTERN DOTS-4567
+2879;N # BRAILLE PATTERN DOTS-14567
+287A;N # BRAILLE PATTERN DOTS-24567
+287B;N # BRAILLE PATTERN DOTS-124567
+287C;N # BRAILLE PATTERN DOTS-34567
+287D;N # BRAILLE PATTERN DOTS-134567
+287E;N # BRAILLE PATTERN DOTS-234567
+287F;N # BRAILLE PATTERN DOTS-1234567
+2880;N # BRAILLE PATTERN DOTS-8
+2881;N # BRAILLE PATTERN DOTS-18
+2882;N # BRAILLE PATTERN DOTS-28
+2883;N # BRAILLE PATTERN DOTS-128
+2884;N # BRAILLE PATTERN DOTS-38
+2885;N # BRAILLE PATTERN DOTS-138
+2886;N # BRAILLE PATTERN DOTS-238
+2887;N # BRAILLE PATTERN DOTS-1238
+2888;N # BRAILLE PATTERN DOTS-48
+2889;N # BRAILLE PATTERN DOTS-148
+288A;N # BRAILLE PATTERN DOTS-248
+288B;N # BRAILLE PATTERN DOTS-1248
+288C;N # BRAILLE PATTERN DOTS-348
+288D;N # BRAILLE PATTERN DOTS-1348
+288E;N # BRAILLE PATTERN DOTS-2348
+288F;N # BRAILLE PATTERN DOTS-12348
+2890;N # BRAILLE PATTERN DOTS-58
+2891;N # BRAILLE PATTERN DOTS-158
+2892;N # BRAILLE PATTERN DOTS-258
+2893;N # BRAILLE PATTERN DOTS-1258
+2894;N # BRAILLE PATTERN DOTS-358
+2895;N # BRAILLE PATTERN DOTS-1358
+2896;N # BRAILLE PATTERN DOTS-2358
+2897;N # BRAILLE PATTERN DOTS-12358
+2898;N # BRAILLE PATTERN DOTS-458
+2899;N # BRAILLE PATTERN DOTS-1458
+289A;N # BRAILLE PATTERN DOTS-2458
+289B;N # BRAILLE PATTERN DOTS-12458
+289C;N # BRAILLE PATTERN DOTS-3458
+289D;N # BRAILLE PATTERN DOTS-13458
+289E;N # BRAILLE PATTERN DOTS-23458
+289F;N # BRAILLE PATTERN DOTS-123458
+28A0;N # BRAILLE PATTERN DOTS-68
+28A1;N # BRAILLE PATTERN DOTS-168
+28A2;N # BRAILLE PATTERN DOTS-268
+28A3;N # BRAILLE PATTERN DOTS-1268
+28A4;N # BRAILLE PATTERN DOTS-368
+28A5;N # BRAILLE PATTERN DOTS-1368
+28A6;N # BRAILLE PATTERN DOTS-2368
+28A7;N # BRAILLE PATTERN DOTS-12368
+28A8;N # BRAILLE PATTERN DOTS-468
+28A9;N # BRAILLE PATTERN DOTS-1468
+28AA;N # BRAILLE PATTERN DOTS-2468
+28AB;N # BRAILLE PATTERN DOTS-12468
+28AC;N # BRAILLE PATTERN DOTS-3468
+28AD;N # BRAILLE PATTERN DOTS-13468
+28AE;N # BRAILLE PATTERN DOTS-23468
+28AF;N # BRAILLE PATTERN DOTS-123468
+28B0;N # BRAILLE PATTERN DOTS-568
+28B1;N # BRAILLE PATTERN DOTS-1568
+28B2;N # BRAILLE PATTERN DOTS-2568
+28B3;N # BRAILLE PATTERN DOTS-12568
+28B4;N # BRAILLE PATTERN DOTS-3568
+28B5;N # BRAILLE PATTERN DOTS-13568
+28B6;N # BRAILLE PATTERN DOTS-23568
+28B7;N # BRAILLE PATTERN DOTS-123568
+28B8;N # BRAILLE PATTERN DOTS-4568
+28B9;N # BRAILLE PATTERN DOTS-14568
+28BA;N # BRAILLE PATTERN DOTS-24568
+28BB;N # BRAILLE PATTERN DOTS-124568
+28BC;N # BRAILLE PATTERN DOTS-34568
+28BD;N # BRAILLE PATTERN DOTS-134568
+28BE;N # BRAILLE PATTERN DOTS-234568
+28BF;N # BRAILLE PATTERN DOTS-1234568
+28C0;N # BRAILLE PATTERN DOTS-78
+28C1;N # BRAILLE PATTERN DOTS-178
+28C2;N # BRAILLE PATTERN DOTS-278
+28C3;N # BRAILLE PATTERN DOTS-1278
+28C4;N # BRAILLE PATTERN DOTS-378
+28C5;N # BRAILLE PATTERN DOTS-1378
+28C6;N # BRAILLE PATTERN DOTS-2378
+28C7;N # BRAILLE PATTERN DOTS-12378
+28C8;N # BRAILLE PATTERN DOTS-478
+28C9;N # BRAILLE PATTERN DOTS-1478
+28CA;N # BRAILLE PATTERN DOTS-2478
+28CB;N # BRAILLE PATTERN DOTS-12478
+28CC;N # BRAILLE PATTERN DOTS-3478
+28CD;N # BRAILLE PATTERN DOTS-13478
+28CE;N # BRAILLE PATTERN DOTS-23478
+28CF;N # BRAILLE PATTERN DOTS-123478
+28D0;N # BRAILLE PATTERN DOTS-578
+28D1;N # BRAILLE PATTERN DOTS-1578
+28D2;N # BRAILLE PATTERN DOTS-2578
+28D3;N # BRAILLE PATTERN DOTS-12578
+28D4;N # BRAILLE PATTERN DOTS-3578
+28D5;N # BRAILLE PATTERN DOTS-13578
+28D6;N # BRAILLE PATTERN DOTS-23578
+28D7;N # BRAILLE PATTERN DOTS-123578
+28D8;N # BRAILLE PATTERN DOTS-4578
+28D9;N # BRAILLE PATTERN DOTS-14578
+28DA;N # BRAILLE PATTERN DOTS-24578
+28DB;N # BRAILLE PATTERN DOTS-124578
+28DC;N # BRAILLE PATTERN DOTS-34578
+28DD;N # BRAILLE PATTERN DOTS-134578
+28DE;N # BRAILLE PATTERN DOTS-234578
+28DF;N # BRAILLE PATTERN DOTS-1234578
+28E0;N # BRAILLE PATTERN DOTS-678
+28E1;N # BRAILLE PATTERN DOTS-1678
+28E2;N # BRAILLE PATTERN DOTS-2678
+28E3;N # BRAILLE PATTERN DOTS-12678
+28E4;N # BRAILLE PATTERN DOTS-3678
+28E5;N # BRAILLE PATTERN DOTS-13678
+28E6;N # BRAILLE PATTERN DOTS-23678
+28E7;N # BRAILLE PATTERN DOTS-123678
+28E8;N # BRAILLE PATTERN DOTS-4678
+28E9;N # BRAILLE PATTERN DOTS-14678
+28EA;N # BRAILLE PATTERN DOTS-24678
+28EB;N # BRAILLE PATTERN DOTS-124678
+28EC;N # BRAILLE PATTERN DOTS-34678
+28ED;N # BRAILLE PATTERN DOTS-134678
+28EE;N # BRAILLE PATTERN DOTS-234678
+28EF;N # BRAILLE PATTERN DOTS-1234678
+28F0;N # BRAILLE PATTERN DOTS-5678
+28F1;N # BRAILLE PATTERN DOTS-15678
+28F2;N # BRAILLE PATTERN DOTS-25678
+28F3;N # BRAILLE PATTERN DOTS-125678
+28F4;N # BRAILLE PATTERN DOTS-35678
+28F5;N # BRAILLE PATTERN DOTS-135678
+28F6;N # BRAILLE PATTERN DOTS-235678
+28F7;N # BRAILLE PATTERN DOTS-1235678
+28F8;N # BRAILLE PATTERN DOTS-45678
+28F9;N # BRAILLE PATTERN DOTS-145678
+28FA;N # BRAILLE PATTERN DOTS-245678
+28FB;N # BRAILLE PATTERN DOTS-1245678
+28FC;N # BRAILLE PATTERN DOTS-345678
+28FD;N # BRAILLE PATTERN DOTS-1345678
+28FE;N # BRAILLE PATTERN DOTS-2345678
+28FF;N # BRAILLE PATTERN DOTS-12345678
+2900;N # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901;N # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902;N # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903;N # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904;N # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905;N # RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906;N # LEFTWARDS DOUBLE ARROW FROM BAR
+2907;N # RIGHTWARDS DOUBLE ARROW FROM BAR
+2908;N # DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909;N # UPWARDS ARROW WITH HORIZONTAL STROKE
+290A;N # UPWARDS TRIPLE ARROW
+290B;N # DOWNWARDS TRIPLE ARROW
+290C;N # LEFTWARDS DOUBLE DASH ARROW
+290D;N # RIGHTWARDS DOUBLE DASH ARROW
+290E;N # LEFTWARDS TRIPLE DASH ARROW
+290F;N # RIGHTWARDS TRIPLE DASH ARROW
+2910;N # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911;N # RIGHTWARDS ARROW WITH DOTTED STEM
+2912;N # UPWARDS ARROW TO BAR
+2913;N # DOWNWARDS ARROW TO BAR
+2914;N # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915;N # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918;N # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919;N # LEFTWARDS ARROW-TAIL
+291A;N # RIGHTWARDS ARROW-TAIL
+291B;N # LEFTWARDS DOUBLE ARROW-TAIL
+291C;N # RIGHTWARDS DOUBLE ARROW-TAIL
+291D;N # LEFTWARDS ARROW TO BLACK DIAMOND
+291E;N # RIGHTWARDS ARROW TO BLACK DIAMOND
+291F;N # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920;N # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921;N # NORTH WEST AND SOUTH EAST ARROW
+2922;N # NORTH EAST AND SOUTH WEST ARROW
+2923;N # NORTH WEST ARROW WITH HOOK
+2924;N # NORTH EAST ARROW WITH HOOK
+2925;N # SOUTH EAST ARROW WITH HOOK
+2926;N # SOUTH WEST ARROW WITH HOOK
+2927;N # NORTH WEST ARROW AND NORTH EAST ARROW
+2928;N # NORTH EAST ARROW AND SOUTH EAST ARROW
+2929;N # SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A;N # SOUTH WEST ARROW AND NORTH WEST ARROW
+292B;N # RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C;N # FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D;N # SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E;N # NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F;N # FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930;N # RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931;N # NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932;N # NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933;N # WAVE ARROW POINTING DIRECTLY RIGHT
+2934;N # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935;N # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936;N # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937;N # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938;N # RIGHT-SIDE ARC CLOCKWISE ARROW
+2939;N # LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A;N # TOP ARC ANTICLOCKWISE ARROW
+293B;N # BOTTOM ARC ANTICLOCKWISE ARROW
+293C;N # TOP ARC CLOCKWISE ARROW WITH MINUS
+293D;N # TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E;N # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F;N # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940;N # ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941;N # CLOCKWISE CLOSED CIRCLE ARROW
+2942;N # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943;N # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944;N # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945;N # RIGHTWARDS ARROW WITH PLUS BELOW
+2946;N # LEFTWARDS ARROW WITH PLUS BELOW
+2947;N # RIGHTWARDS ARROW THROUGH X
+2948;N # LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949;N # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A;N # LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B;N # LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C;N # UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D;N # UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E;N # LEFT BARB UP RIGHT BARB UP HARPOON
+294F;N # UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950;N # LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951;N # UP BARB LEFT DOWN BARB LEFT HARPOON
+2952;N # LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953;N # RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954;N # UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955;N # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956;N # LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957;N # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958;N # UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959;N # DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A;N # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B;N # RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C;N # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D;N # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E;N # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F;N # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960;N # UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961;N # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962;N # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963;N # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965;N # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966;N # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967;N # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969;N # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A;N # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B;N # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C;N # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D;N # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E;N # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F;N # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970;N # RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971;N # EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972;N # TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973;N # LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974;N # RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975;N # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976;N # LESS-THAN ABOVE LEFTWARDS ARROW
+2977;N # LEFTWARDS ARROW THROUGH LESS-THAN
+2978;N # GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979;N # SUBSET ABOVE RIGHTWARDS ARROW
+297A;N # LEFTWARDS ARROW THROUGH SUBSET
+297B;N # SUPERSET ABOVE LEFTWARDS ARROW
+297C;N # LEFT FISH TAIL
+297D;N # RIGHT FISH TAIL
+297E;N # UP FISH TAIL
+297F;N # DOWN FISH TAIL
+2980;N # TRIPLE VERTICAL BAR DELIMITER
+2981;N # Z NOTATION SPOT
+2982;N # Z NOTATION TYPE COLON
+2983;N # LEFT WHITE CURLY BRACKET
+2984;N # RIGHT WHITE CURLY BRACKET
+2985;Na # LEFT WHITE PARENTHESIS
+2986;Na # RIGHT WHITE PARENTHESIS
+2987;N # Z NOTATION LEFT IMAGE BRACKET
+2988;N # Z NOTATION RIGHT IMAGE BRACKET
+2989;N # Z NOTATION LEFT BINDING BRACKET
+298A;N # Z NOTATION RIGHT BINDING BRACKET
+298B;N # LEFT SQUARE BRACKET WITH UNDERBAR
+298C;N # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D;N # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E;N # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F;N # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990;N # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991;N # LEFT ANGLE BRACKET WITH DOT
+2992;N # RIGHT ANGLE BRACKET WITH DOT
+2993;N # LEFT ARC LESS-THAN BRACKET
+2994;N # RIGHT ARC GREATER-THAN BRACKET
+2995;N # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996;N # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997;N # LEFT BLACK TORTOISE SHELL BRACKET
+2998;N # RIGHT BLACK TORTOISE SHELL BRACKET
+2999;N # DOTTED FENCE
+299A;N # VERTICAL ZIGZAG LINE
+299B;N # MEASURED ANGLE OPENING LEFT
+299C;N # RIGHT ANGLE VARIANT WITH SQUARE
+299D;N # MEASURED RIGHT ANGLE WITH DOT
+299E;N # ANGLE WITH S INSIDE
+299F;N # ACUTE ANGLE
+29A0;N # SPHERICAL ANGLE OPENING LEFT
+29A1;N # SPHERICAL ANGLE OPENING UP
+29A2;N # TURNED ANGLE
+29A3;N # REVERSED ANGLE
+29A4;N # ANGLE WITH UNDERBAR
+29A5;N # REVERSED ANGLE WITH UNDERBAR
+29A6;N # OBLIQUE ANGLE OPENING UP
+29A7;N # OBLIQUE ANGLE OPENING DOWN
+29A8;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF;N # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0;N # REVERSED EMPTY SET
+29B1;N # EMPTY SET WITH OVERBAR
+29B2;N # EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3;N # EMPTY SET WITH RIGHT ARROW ABOVE
+29B4;N # EMPTY SET WITH LEFT ARROW ABOVE
+29B5;N # CIRCLE WITH HORIZONTAL BAR
+29B6;N # CIRCLED VERTICAL BAR
+29B7;N # CIRCLED PARALLEL
+29B8;N # CIRCLED REVERSE SOLIDUS
+29B9;N # CIRCLED PERPENDICULAR
+29BA;N # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB;N # CIRCLE WITH SUPERIMPOSED X
+29BC;N # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD;N # UP ARROW THROUGH CIRCLE
+29BE;N # CIRCLED WHITE BULLET
+29BF;N # CIRCLED BULLET
+29C0;N # CIRCLED LESS-THAN
+29C1;N # CIRCLED GREATER-THAN
+29C2;N # CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3;N # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4;N # SQUARED RISING DIAGONAL SLASH
+29C5;N # SQUARED FALLING DIAGONAL SLASH
+29C6;N # SQUARED ASTERISK
+29C7;N # SQUARED SMALL CIRCLE
+29C8;N # SQUARED SQUARE
+29C9;N # TWO JOINED SQUARES
+29CA;N # TRIANGLE WITH DOT ABOVE
+29CB;N # TRIANGLE WITH UNDERBAR
+29CC;N # S IN TRIANGLE
+29CD;N # TRIANGLE WITH SERIFS AT BOTTOM
+29CE;N # RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF;N # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0;N # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1;N # BOWTIE WITH LEFT HALF BLACK
+29D2;N # BOWTIE WITH RIGHT HALF BLACK
+29D3;N # BLACK BOWTIE
+29D4;N # TIMES WITH LEFT HALF BLACK
+29D5;N # TIMES WITH RIGHT HALF BLACK
+29D6;N # WHITE HOURGLASS
+29D7;N # BLACK HOURGLASS
+29D8;N # LEFT WIGGLY FENCE
+29D9;N # RIGHT WIGGLY FENCE
+29DA;N # LEFT DOUBLE WIGGLY FENCE
+29DB;N # RIGHT DOUBLE WIGGLY FENCE
+29DC;N # INCOMPLETE INFINITY
+29DD;N # TIE OVER INFINITY
+29DE;N # INFINITY NEGATED WITH VERTICAL BAR
+29DF;N # DOUBLE-ENDED MULTIMAP
+29E0;N # SQUARE WITH CONTOURED OUTLINE
+29E1;N # INCREASES AS
+29E2;N # SHUFFLE PRODUCT
+29E3;N # EQUALS SIGN AND SLANTED PARALLEL
+29E4;N # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5;N # IDENTICAL TO AND SLANTED PARALLEL
+29E6;N # GLEICH STARK
+29E7;N # THERMODYNAMIC
+29E8;N # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9;N # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA;N # BLACK DIAMOND WITH DOWN ARROW
+29EB;N # BLACK LOZENGE
+29EC;N # WHITE CIRCLE WITH DOWN ARROW
+29ED;N # BLACK CIRCLE WITH DOWN ARROW
+29EE;N # ERROR-BARRED WHITE SQUARE
+29EF;N # ERROR-BARRED BLACK SQUARE
+29F0;N # ERROR-BARRED WHITE DIAMOND
+29F1;N # ERROR-BARRED BLACK DIAMOND
+29F2;N # ERROR-BARRED WHITE CIRCLE
+29F3;N # ERROR-BARRED BLACK CIRCLE
+29F4;N # RULE-DELAYED
+29F5;N # REVERSE SOLIDUS OPERATOR
+29F6;N # SOLIDUS WITH OVERBAR
+29F7;N # REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8;N # BIG SOLIDUS
+29F9;N # BIG REVERSE SOLIDUS
+29FA;N # DOUBLE PLUS
+29FB;N # TRIPLE PLUS
+29FC;N # LEFT-POINTING CURVED ANGLE BRACKET
+29FD;N # RIGHT-POINTING CURVED ANGLE BRACKET
+29FE;N # TINY
+29FF;N # MINY
+2A00;N # N-ARY CIRCLED DOT OPERATOR
+2A01;N # N-ARY CIRCLED PLUS OPERATOR
+2A02;N # N-ARY CIRCLED TIMES OPERATOR
+2A03;N # N-ARY UNION OPERATOR WITH DOT
+2A04;N # N-ARY UNION OPERATOR WITH PLUS
+2A05;N # N-ARY SQUARE INTERSECTION OPERATOR
+2A06;N # N-ARY SQUARE UNION OPERATOR
+2A07;N # TWO LOGICAL AND OPERATOR
+2A08;N # TWO LOGICAL OR OPERATOR
+2A09;N # N-ARY TIMES OPERATOR
+2A0A;N # MODULO TWO SUM
+2A0B;N # SUMMATION WITH INTEGRAL
+2A0C;N # QUADRUPLE INTEGRAL OPERATOR
+2A0D;N # FINITE PART INTEGRAL
+2A0E;N # INTEGRAL WITH DOUBLE STROKE
+2A0F;N # INTEGRAL AVERAGE WITH SLASH
+2A10;N # CIRCULATION FUNCTION
+2A11;N # ANTICLOCKWISE INTEGRATION
+2A12;N # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13;N # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14;N # LINE INTEGRATION NOT INCLUDING THE POLE
+2A15;N # INTEGRAL AROUND A POINT OPERATOR
+2A16;N # QUATERNION INTEGRAL OPERATOR
+2A17;N # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18;N # INTEGRAL WITH TIMES SIGN
+2A19;N # INTEGRAL WITH INTERSECTION
+2A1A;N # INTEGRAL WITH UNION
+2A1B;N # INTEGRAL WITH OVERBAR
+2A1C;N # INTEGRAL WITH UNDERBAR
+2A1D;N # JOIN
+2A1E;N # LARGE LEFT TRIANGLE OPERATOR
+2A1F;N # Z NOTATION SCHEMA COMPOSITION
+2A20;N # Z NOTATION SCHEMA PIPING
+2A21;N # Z NOTATION SCHEMA PROJECTION
+2A22;N # PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23;N # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24;N # PLUS SIGN WITH TILDE ABOVE
+2A25;N # PLUS SIGN WITH DOT BELOW
+2A26;N # PLUS SIGN WITH TILDE BELOW
+2A27;N # PLUS SIGN WITH SUBSCRIPT TWO
+2A28;N # PLUS SIGN WITH BLACK TRIANGLE
+2A29;N # MINUS SIGN WITH COMMA ABOVE
+2A2A;N # MINUS SIGN WITH DOT BELOW
+2A2B;N # MINUS SIGN WITH FALLING DOTS
+2A2C;N # MINUS SIGN WITH RISING DOTS
+2A2D;N # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E;N # PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F;N # VECTOR OR CROSS PRODUCT
+2A30;N # MULTIPLICATION SIGN WITH DOT ABOVE
+2A31;N # MULTIPLICATION SIGN WITH UNDERBAR
+2A32;N # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33;N # SMASH PRODUCT
+2A34;N # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35;N # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36;N # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37;N # MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38;N # CIRCLED DIVISION SIGN
+2A39;N # PLUS SIGN IN TRIANGLE
+2A3A;N # MINUS SIGN IN TRIANGLE
+2A3B;N # MULTIPLICATION SIGN IN TRIANGLE
+2A3C;N # INTERIOR PRODUCT
+2A3D;N # RIGHTHAND INTERIOR PRODUCT
+2A3E;N # Z NOTATION RELATIONAL COMPOSITION
+2A3F;N # AMALGAMATION OR COPRODUCT
+2A40;N # INTERSECTION WITH DOT
+2A41;N # UNION WITH MINUS SIGN
+2A42;N # UNION WITH OVERBAR
+2A43;N # INTERSECTION WITH OVERBAR
+2A44;N # INTERSECTION WITH LOGICAL AND
+2A45;N # UNION WITH LOGICAL OR
+2A46;N # UNION ABOVE INTERSECTION
+2A47;N # INTERSECTION ABOVE UNION
+2A48;N # UNION ABOVE BAR ABOVE INTERSECTION
+2A49;N # INTERSECTION ABOVE BAR ABOVE UNION
+2A4A;N # UNION BESIDE AND JOINED WITH UNION
+2A4B;N # INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C;N # CLOSED UNION WITH SERIFS
+2A4D;N # CLOSED INTERSECTION WITH SERIFS
+2A4E;N # DOUBLE SQUARE INTERSECTION
+2A4F;N # DOUBLE SQUARE UNION
+2A50;N # CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51;N # LOGICAL AND WITH DOT ABOVE
+2A52;N # LOGICAL OR WITH DOT ABOVE
+2A53;N # DOUBLE LOGICAL AND
+2A54;N # DOUBLE LOGICAL OR
+2A55;N # TWO INTERSECTING LOGICAL AND
+2A56;N # TWO INTERSECTING LOGICAL OR
+2A57;N # SLOPING LARGE OR
+2A58;N # SLOPING LARGE AND
+2A59;N # LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A;N # LOGICAL AND WITH MIDDLE STEM
+2A5B;N # LOGICAL OR WITH MIDDLE STEM
+2A5C;N # LOGICAL AND WITH HORIZONTAL DASH
+2A5D;N # LOGICAL OR WITH HORIZONTAL DASH
+2A5E;N # LOGICAL AND WITH DOUBLE OVERBAR
+2A5F;N # LOGICAL AND WITH UNDERBAR
+2A60;N # LOGICAL AND WITH DOUBLE UNDERBAR
+2A61;N # SMALL VEE WITH UNDERBAR
+2A62;N # LOGICAL OR WITH DOUBLE OVERBAR
+2A63;N # LOGICAL OR WITH DOUBLE UNDERBAR
+2A64;N # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65;N # Z NOTATION RANGE ANTIRESTRICTION
+2A66;N # EQUALS SIGN WITH DOT BELOW
+2A67;N # IDENTICAL WITH DOT ABOVE
+2A68;N # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69;N # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A;N # TILDE OPERATOR WITH DOT ABOVE
+2A6B;N # TILDE OPERATOR WITH RISING DOTS
+2A6C;N # SIMILAR MINUS SIMILAR
+2A6D;N # CONGRUENT WITH DOT ABOVE
+2A6E;N # EQUALS WITH ASTERISK
+2A6F;N # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70;N # APPROXIMATELY EQUAL OR EQUAL TO
+2A71;N # EQUALS SIGN ABOVE PLUS SIGN
+2A72;N # PLUS SIGN ABOVE EQUALS SIGN
+2A73;N # EQUALS SIGN ABOVE TILDE OPERATOR
+2A74;N # DOUBLE COLON EQUAL
+2A75;N # TWO CONSECUTIVE EQUALS SIGNS
+2A76;N # THREE CONSECUTIVE EQUALS SIGNS
+2A77;N # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78;N # EQUIVALENT WITH FOUR DOTS ABOVE
+2A79;N # LESS-THAN WITH CIRCLE INSIDE
+2A7A;N # GREATER-THAN WITH CIRCLE INSIDE
+2A7B;N # LESS-THAN WITH QUESTION MARK ABOVE
+2A7C;N # GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D;N # LESS-THAN OR SLANTED EQUAL TO
+2A7E;N # GREATER-THAN OR SLANTED EQUAL TO
+2A7F;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83;N # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84;N # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85;N # LESS-THAN OR APPROXIMATE
+2A86;N # GREATER-THAN OR APPROXIMATE
+2A87;N # LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88;N # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89;N # LESS-THAN AND NOT APPROXIMATE
+2A8A;N # GREATER-THAN AND NOT APPROXIMATE
+2A8B;N # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C;N # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D;N # LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E;N # GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F;N # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90;N # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91;N # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92;N # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93;N # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94;N # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95;N # SLANTED EQUAL TO OR LESS-THAN
+2A96;N # SLANTED EQUAL TO OR GREATER-THAN
+2A97;N # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98;N # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99;N # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A;N # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B;N # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C;N # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D;N # SIMILAR OR LESS-THAN
+2A9E;N # SIMILAR OR GREATER-THAN
+2A9F;N # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0;N # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1;N # DOUBLE NESTED LESS-THAN
+2AA2;N # DOUBLE NESTED GREATER-THAN
+2AA3;N # DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4;N # GREATER-THAN OVERLAPPING LESS-THAN
+2AA5;N # GREATER-THAN BESIDE LESS-THAN
+2AA6;N # LESS-THAN CLOSED BY CURVE
+2AA7;N # GREATER-THAN CLOSED BY CURVE
+2AA8;N # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9;N # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA;N # SMALLER THAN
+2AAB;N # LARGER THAN
+2AAC;N # SMALLER THAN OR EQUAL TO
+2AAD;N # LARGER THAN OR EQUAL TO
+2AAE;N # EQUALS SIGN WITH BUMPY ABOVE
+2AAF;N # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0;N # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1;N # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2;N # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3;N # PRECEDES ABOVE EQUALS SIGN
+2AB4;N # SUCCEEDS ABOVE EQUALS SIGN
+2AB5;N # PRECEDES ABOVE NOT EQUAL TO
+2AB6;N # SUCCEEDS ABOVE NOT EQUAL TO
+2AB7;N # PRECEDES ABOVE ALMOST EQUAL TO
+2AB8;N # SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9;N # PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA;N # SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB;N # DOUBLE PRECEDES
+2ABC;N # DOUBLE SUCCEEDS
+2ABD;N # SUBSET WITH DOT
+2ABE;N # SUPERSET WITH DOT
+2ABF;N # SUBSET WITH PLUS SIGN BELOW
+2AC0;N # SUPERSET WITH PLUS SIGN BELOW
+2AC1;N # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2;N # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3;N # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4;N # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5;N # SUBSET OF ABOVE EQUALS SIGN
+2AC6;N # SUPERSET OF ABOVE EQUALS SIGN
+2AC7;N # SUBSET OF ABOVE TILDE OPERATOR
+2AC8;N # SUPERSET OF ABOVE TILDE OPERATOR
+2AC9;N # SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA;N # SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB;N # SUBSET OF ABOVE NOT EQUAL TO
+2ACC;N # SUPERSET OF ABOVE NOT EQUAL TO
+2ACD;N # SQUARE LEFT OPEN BOX OPERATOR
+2ACE;N # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF;N # CLOSED SUBSET
+2AD0;N # CLOSED SUPERSET
+2AD1;N # CLOSED SUBSET OR EQUAL TO
+2AD2;N # CLOSED SUPERSET OR EQUAL TO
+2AD3;N # SUBSET ABOVE SUPERSET
+2AD4;N # SUPERSET ABOVE SUBSET
+2AD5;N # SUBSET ABOVE SUBSET
+2AD6;N # SUPERSET ABOVE SUPERSET
+2AD7;N # SUPERSET BESIDE SUBSET
+2AD8;N # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9;N # ELEMENT OF OPENING DOWNWARDS
+2ADA;N # PITCHFORK WITH TEE TOP
+2ADB;N # TRANSVERSAL INTERSECTION
+2ADC;N # FORKING
+2ADD;N # NONFORKING
+2ADE;N # SHORT LEFT TACK
+2ADF;N # SHORT DOWN TACK
+2AE0;N # SHORT UP TACK
+2AE1;N # PERPENDICULAR WITH S
+2AE2;N # VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3;N # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4;N # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5;N # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6;N # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7;N # SHORT DOWN TACK WITH OVERBAR
+2AE8;N # SHORT UP TACK WITH UNDERBAR
+2AE9;N # SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA;N # DOUBLE DOWN TACK
+2AEB;N # DOUBLE UP TACK
+2AEC;N # DOUBLE STROKE NOT SIGN
+2AED;N # REVERSED DOUBLE STROKE NOT SIGN
+2AEE;N # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF;N # VERTICAL LINE WITH CIRCLE ABOVE
+2AF0;N # VERTICAL LINE WITH CIRCLE BELOW
+2AF1;N # DOWN TACK WITH CIRCLE BELOW
+2AF2;N # PARALLEL WITH HORIZONTAL STROKE
+2AF3;N # PARALLEL WITH TILDE OPERATOR
+2AF4;N # TRIPLE VERTICAL BAR BINARY RELATION
+2AF5;N # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6;N # TRIPLE COLON OPERATOR
+2AF7;N # TRIPLE NESTED LESS-THAN
+2AF8;N # TRIPLE NESTED GREATER-THAN
+2AF9;N # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA;N # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB;N # TRIPLE SOLIDUS BINARY RELATION
+2AFC;N # LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD;N # DOUBLE SOLIDUS OPERATOR
+2AFE;N # WHITE VERTICAL BAR
+2AFF;N # N-ARY WHITE VERTICAL BAR
+2B00;N # NORTH EAST WHITE ARROW
+2B01;N # NORTH WEST WHITE ARROW
+2B02;N # SOUTH EAST WHITE ARROW
+2B03;N # SOUTH WEST WHITE ARROW
+2B04;N # LEFT RIGHT WHITE ARROW
+2B05;N # LEFTWARDS BLACK ARROW
+2B06;N # UPWARDS BLACK ARROW
+2B07;N # DOWNWARDS BLACK ARROW
+2B08;N # NORTH EAST BLACK ARROW
+2B09;N # NORTH WEST BLACK ARROW
+2B0A;N # SOUTH EAST BLACK ARROW
+2B0B;N # SOUTH WEST BLACK ARROW
+2B0C;N # LEFT RIGHT BLACK ARROW
+2B0D;N # UP DOWN BLACK ARROW
+2B0E;N # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F;N # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10;N # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11;N # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12;N # SQUARE WITH TOP HALF BLACK
+2B13;N # SQUARE WITH BOTTOM HALF BLACK
+2C00;N # GLAGOLITIC CAPITAL LETTER AZU
+2C01;N # GLAGOLITIC CAPITAL LETTER BUKY
+2C02;N # GLAGOLITIC CAPITAL LETTER VEDE
+2C03;N # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04;N # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05;N # GLAGOLITIC CAPITAL LETTER YESTU
+2C06;N # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07;N # GLAGOLITIC CAPITAL LETTER DZELO
+2C08;N # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09;N # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A;N # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B;N # GLAGOLITIC CAPITAL LETTER I
+2C0C;N # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D;N # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E;N # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F;N # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10;N # GLAGOLITIC CAPITAL LETTER NASHI
+2C11;N # GLAGOLITIC CAPITAL LETTER ONU
+2C12;N # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13;N # GLAGOLITIC CAPITAL LETTER RITSI
+2C14;N # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15;N # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16;N # GLAGOLITIC CAPITAL LETTER UKU
+2C17;N # GLAGOLITIC CAPITAL LETTER FRITU
+2C18;N # GLAGOLITIC CAPITAL LETTER HERU
+2C19;N # GLAGOLITIC CAPITAL LETTER OTU
+2C1A;N # GLAGOLITIC CAPITAL LETTER PE
+2C1B;N # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C;N # GLAGOLITIC CAPITAL LETTER TSI
+2C1D;N # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E;N # GLAGOLITIC CAPITAL LETTER SHA
+2C1F;N # GLAGOLITIC CAPITAL LETTER YERU
+2C20;N # GLAGOLITIC CAPITAL LETTER YERI
+2C21;N # GLAGOLITIC CAPITAL LETTER YATI
+2C22;N # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23;N # GLAGOLITIC CAPITAL LETTER YU
+2C24;N # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25;N # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26;N # GLAGOLITIC CAPITAL LETTER YO
+2C27;N # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28;N # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29;N # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A;N # GLAGOLITIC CAPITAL LETTER FITA
+2C2B;N # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C;N # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D;N # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E;N # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30;N # GLAGOLITIC SMALL LETTER AZU
+2C31;N # GLAGOLITIC SMALL LETTER BUKY
+2C32;N # GLAGOLITIC SMALL LETTER VEDE
+2C33;N # GLAGOLITIC SMALL LETTER GLAGOLI
+2C34;N # GLAGOLITIC SMALL LETTER DOBRO
+2C35;N # GLAGOLITIC SMALL LETTER YESTU
+2C36;N # GLAGOLITIC SMALL LETTER ZHIVETE
+2C37;N # GLAGOLITIC SMALL LETTER DZELO
+2C38;N # GLAGOLITIC SMALL LETTER ZEMLJA
+2C39;N # GLAGOLITIC SMALL LETTER IZHE
+2C3A;N # GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B;N # GLAGOLITIC SMALL LETTER I
+2C3C;N # GLAGOLITIC SMALL LETTER DJERVI
+2C3D;N # GLAGOLITIC SMALL LETTER KAKO
+2C3E;N # GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F;N # GLAGOLITIC SMALL LETTER MYSLITE
+2C40;N # GLAGOLITIC SMALL LETTER NASHI
+2C41;N # GLAGOLITIC SMALL LETTER ONU
+2C42;N # GLAGOLITIC SMALL LETTER POKOJI
+2C43;N # GLAGOLITIC SMALL LETTER RITSI
+2C44;N # GLAGOLITIC SMALL LETTER SLOVO
+2C45;N # GLAGOLITIC SMALL LETTER TVRIDO
+2C46;N # GLAGOLITIC SMALL LETTER UKU
+2C47;N # GLAGOLITIC SMALL LETTER FRITU
+2C48;N # GLAGOLITIC SMALL LETTER HERU
+2C49;N # GLAGOLITIC SMALL LETTER OTU
+2C4A;N # GLAGOLITIC SMALL LETTER PE
+2C4B;N # GLAGOLITIC SMALL LETTER SHTA
+2C4C;N # GLAGOLITIC SMALL LETTER TSI
+2C4D;N # GLAGOLITIC SMALL LETTER CHRIVI
+2C4E;N # GLAGOLITIC SMALL LETTER SHA
+2C4F;N # GLAGOLITIC SMALL LETTER YERU
+2C50;N # GLAGOLITIC SMALL LETTER YERI
+2C51;N # GLAGOLITIC SMALL LETTER YATI
+2C52;N # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53;N # GLAGOLITIC SMALL LETTER YU
+2C54;N # GLAGOLITIC SMALL LETTER SMALL YUS
+2C55;N # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56;N # GLAGOLITIC SMALL LETTER YO
+2C57;N # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58;N # GLAGOLITIC SMALL LETTER BIG YUS
+2C59;N # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A;N # GLAGOLITIC SMALL LETTER FITA
+2C5B;N # GLAGOLITIC SMALL LETTER IZHITSA
+2C5C;N # GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D;N # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E;N # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80;N # COPTIC CAPITAL LETTER ALFA
+2C81;N # COPTIC SMALL LETTER ALFA
+2C82;N # COPTIC CAPITAL LETTER VIDA
+2C83;N # COPTIC SMALL LETTER VIDA
+2C84;N # COPTIC CAPITAL LETTER GAMMA
+2C85;N # COPTIC SMALL LETTER GAMMA
+2C86;N # COPTIC CAPITAL LETTER DALDA
+2C87;N # COPTIC SMALL LETTER DALDA
+2C88;N # COPTIC CAPITAL LETTER EIE
+2C89;N # COPTIC SMALL LETTER EIE
+2C8A;N # COPTIC CAPITAL LETTER SOU
+2C8B;N # COPTIC SMALL LETTER SOU
+2C8C;N # COPTIC CAPITAL LETTER ZATA
+2C8D;N # COPTIC SMALL LETTER ZATA
+2C8E;N # COPTIC CAPITAL LETTER HATE
+2C8F;N # COPTIC SMALL LETTER HATE
+2C90;N # COPTIC CAPITAL LETTER THETHE
+2C91;N # COPTIC SMALL LETTER THETHE
+2C92;N # COPTIC CAPITAL LETTER IAUDA
+2C93;N # COPTIC SMALL LETTER IAUDA
+2C94;N # COPTIC CAPITAL LETTER KAPA
+2C95;N # COPTIC SMALL LETTER KAPA
+2C96;N # COPTIC CAPITAL LETTER LAULA
+2C97;N # COPTIC SMALL LETTER LAULA
+2C98;N # COPTIC CAPITAL LETTER MI
+2C99;N # COPTIC SMALL LETTER MI
+2C9A;N # COPTIC CAPITAL LETTER NI
+2C9B;N # COPTIC SMALL LETTER NI
+2C9C;N # COPTIC CAPITAL LETTER KSI
+2C9D;N # COPTIC SMALL LETTER KSI
+2C9E;N # COPTIC CAPITAL LETTER O
+2C9F;N # COPTIC SMALL LETTER O
+2CA0;N # COPTIC CAPITAL LETTER PI
+2CA1;N # COPTIC SMALL LETTER PI
+2CA2;N # COPTIC CAPITAL LETTER RO
+2CA3;N # COPTIC SMALL LETTER RO
+2CA4;N # COPTIC CAPITAL LETTER SIMA
+2CA5;N # COPTIC SMALL LETTER SIMA
+2CA6;N # COPTIC CAPITAL LETTER TAU
+2CA7;N # COPTIC SMALL LETTER TAU
+2CA8;N # COPTIC CAPITAL LETTER UA
+2CA9;N # COPTIC SMALL LETTER UA
+2CAA;N # COPTIC CAPITAL LETTER FI
+2CAB;N # COPTIC SMALL LETTER FI
+2CAC;N # COPTIC CAPITAL LETTER KHI
+2CAD;N # COPTIC SMALL LETTER KHI
+2CAE;N # COPTIC CAPITAL LETTER PSI
+2CAF;N # COPTIC SMALL LETTER PSI
+2CB0;N # COPTIC CAPITAL LETTER OOU
+2CB1;N # COPTIC SMALL LETTER OOU
+2CB2;N # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3;N # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4;N # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5;N # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7;N # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8;N # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9;N # COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA;N # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB;N # COPTIC SMALL LETTER DIALECT-P NI
+2CBC;N # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD;N # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE;N # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF;N # COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0;N # COPTIC CAPITAL LETTER SAMPI
+2CC1;N # COPTIC SMALL LETTER SAMPI
+2CC2;N # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3;N # COPTIC SMALL LETTER CROSSED SHEI
+2CC4;N # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5;N # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6;N # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7;N # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8;N # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9;N # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA;N # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB;N # COPTIC SMALL LETTER DIALECT-P HORI
+2CCC;N # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD;N # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE;N # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF;N # COPTIC SMALL LETTER OLD COPTIC HA
+2CD0;N # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1;N # COPTIC SMALL LETTER L-SHAPED HA
+2CD2;N # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3;N # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4;N # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5;N # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6;N # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7;N # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8;N # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9;N # COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA;N # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB;N # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC;N # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD;N # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE;N # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF;N # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0;N # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1;N # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2;N # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3;N # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4;N # COPTIC SYMBOL KAI
+2CE5;N # COPTIC SYMBOL MI RO
+2CE6;N # COPTIC SYMBOL PI RO
+2CE7;N # COPTIC SYMBOL STAUROS
+2CE8;N # COPTIC SYMBOL TAU RO
+2CE9;N # COPTIC SYMBOL KHI RO
+2CEA;N # COPTIC SYMBOL SHIMA SIMA
+2CF9;N # COPTIC OLD NUBIAN FULL STOP
+2CFA;N # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB;N # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC;N # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;N # COPTIC FRACTION ONE HALF
+2CFE;N # COPTIC FULL STOP
+2CFF;N # COPTIC MORPHOLOGICAL DIVIDER
+2D00;N # GEORGIAN SMALL LETTER AN
+2D01;N # GEORGIAN SMALL LETTER BAN
+2D02;N # GEORGIAN SMALL LETTER GAN
+2D03;N # GEORGIAN SMALL LETTER DON
+2D04;N # GEORGIAN SMALL LETTER EN
+2D05;N # GEORGIAN SMALL LETTER VIN
+2D06;N # GEORGIAN SMALL LETTER ZEN
+2D07;N # GEORGIAN SMALL LETTER TAN
+2D08;N # GEORGIAN SMALL LETTER IN
+2D09;N # GEORGIAN SMALL LETTER KAN
+2D0A;N # GEORGIAN SMALL LETTER LAS
+2D0B;N # GEORGIAN SMALL LETTER MAN
+2D0C;N # GEORGIAN SMALL LETTER NAR
+2D0D;N # GEORGIAN SMALL LETTER ON
+2D0E;N # GEORGIAN SMALL LETTER PAR
+2D0F;N # GEORGIAN SMALL LETTER ZHAR
+2D10;N # GEORGIAN SMALL LETTER RAE
+2D11;N # GEORGIAN SMALL LETTER SAN
+2D12;N # GEORGIAN SMALL LETTER TAR
+2D13;N # GEORGIAN SMALL LETTER UN
+2D14;N # GEORGIAN SMALL LETTER PHAR
+2D15;N # GEORGIAN SMALL LETTER KHAR
+2D16;N # GEORGIAN SMALL LETTER GHAN
+2D17;N # GEORGIAN SMALL LETTER QAR
+2D18;N # GEORGIAN SMALL LETTER SHIN
+2D19;N # GEORGIAN SMALL LETTER CHIN
+2D1A;N # GEORGIAN SMALL LETTER CAN
+2D1B;N # GEORGIAN SMALL LETTER JIL
+2D1C;N # GEORGIAN SMALL LETTER CIL
+2D1D;N # GEORGIAN SMALL LETTER CHAR
+2D1E;N # GEORGIAN SMALL LETTER XAN
+2D1F;N # GEORGIAN SMALL LETTER JHAN
+2D20;N # GEORGIAN SMALL LETTER HAE
+2D21;N # GEORGIAN SMALL LETTER HE
+2D22;N # GEORGIAN SMALL LETTER HIE
+2D23;N # GEORGIAN SMALL LETTER WE
+2D24;N # GEORGIAN SMALL LETTER HAR
+2D25;N # GEORGIAN SMALL LETTER HOE
+2D30;N # TIFINAGH LETTER YA
+2D31;N # TIFINAGH LETTER YAB
+2D32;N # TIFINAGH LETTER YABH
+2D33;N # TIFINAGH LETTER YAG
+2D34;N # TIFINAGH LETTER YAGHH
+2D35;N # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36;N # TIFINAGH LETTER YAJ
+2D37;N # TIFINAGH LETTER YAD
+2D38;N # TIFINAGH LETTER YADH
+2D39;N # TIFINAGH LETTER YADD
+2D3A;N # TIFINAGH LETTER YADDH
+2D3B;N # TIFINAGH LETTER YEY
+2D3C;N # TIFINAGH LETTER YAF
+2D3D;N # TIFINAGH LETTER YAK
+2D3E;N # TIFINAGH LETTER TUAREG YAK
+2D3F;N # TIFINAGH LETTER YAKHH
+2D40;N # TIFINAGH LETTER YAH
+2D41;N # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42;N # TIFINAGH LETTER TUAREG YAH
+2D43;N # TIFINAGH LETTER YAHH
+2D44;N # TIFINAGH LETTER YAA
+2D45;N # TIFINAGH LETTER YAKH
+2D46;N # TIFINAGH LETTER TUAREG YAKH
+2D47;N # TIFINAGH LETTER YAQ
+2D48;N # TIFINAGH LETTER TUAREG YAQ
+2D49;N # TIFINAGH LETTER YI
+2D4A;N # TIFINAGH LETTER YAZH
+2D4B;N # TIFINAGH LETTER AHAGGAR YAZH
+2D4C;N # TIFINAGH LETTER TUAREG YAZH
+2D4D;N # TIFINAGH LETTER YAL
+2D4E;N # TIFINAGH LETTER YAM
+2D4F;N # TIFINAGH LETTER YAN
+2D50;N # TIFINAGH LETTER TUAREG YAGN
+2D51;N # TIFINAGH LETTER TUAREG YANG
+2D52;N # TIFINAGH LETTER YAP
+2D53;N # TIFINAGH LETTER YU
+2D54;N # TIFINAGH LETTER YAR
+2D55;N # TIFINAGH LETTER YARR
+2D56;N # TIFINAGH LETTER YAGH
+2D57;N # TIFINAGH LETTER TUAREG YAGH
+2D58;N # TIFINAGH LETTER AYER YAGH
+2D59;N # TIFINAGH LETTER YAS
+2D5A;N # TIFINAGH LETTER YASS
+2D5B;N # TIFINAGH LETTER YASH
+2D5C;N # TIFINAGH LETTER YAT
+2D5D;N # TIFINAGH LETTER YATH
+2D5E;N # TIFINAGH LETTER YACH
+2D5F;N # TIFINAGH LETTER YATT
+2D60;N # TIFINAGH LETTER YAV
+2D61;N # TIFINAGH LETTER YAW
+2D62;N # TIFINAGH LETTER YAY
+2D63;N # TIFINAGH LETTER YAZ
+2D64;N # TIFINAGH LETTER TAWELLEMET YAZ
+2D65;N # TIFINAGH LETTER YAZZ
+2D6F;N # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80;N # ETHIOPIC SYLLABLE LOA
+2D81;N # ETHIOPIC SYLLABLE MOA
+2D82;N # ETHIOPIC SYLLABLE ROA
+2D83;N # ETHIOPIC SYLLABLE SOA
+2D84;N # ETHIOPIC SYLLABLE SHOA
+2D85;N # ETHIOPIC SYLLABLE BOA
+2D86;N # ETHIOPIC SYLLABLE TOA
+2D87;N # ETHIOPIC SYLLABLE COA
+2D88;N # ETHIOPIC SYLLABLE NOA
+2D89;N # ETHIOPIC SYLLABLE NYOA
+2D8A;N # ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B;N # ETHIOPIC SYLLABLE ZOA
+2D8C;N # ETHIOPIC SYLLABLE DOA
+2D8D;N # ETHIOPIC SYLLABLE DDOA
+2D8E;N # ETHIOPIC SYLLABLE JOA
+2D8F;N # ETHIOPIC SYLLABLE THOA
+2D90;N # ETHIOPIC SYLLABLE CHOA
+2D91;N # ETHIOPIC SYLLABLE PHOA
+2D92;N # ETHIOPIC SYLLABLE POA
+2D93;N # ETHIOPIC SYLLABLE GGWA
+2D94;N # ETHIOPIC SYLLABLE GGWI
+2D95;N # ETHIOPIC SYLLABLE GGWEE
+2D96;N # ETHIOPIC SYLLABLE GGWE
+2DA0;N # ETHIOPIC SYLLABLE SSA
+2DA1;N # ETHIOPIC SYLLABLE SSU
+2DA2;N # ETHIOPIC SYLLABLE SSI
+2DA3;N # ETHIOPIC SYLLABLE SSAA
+2DA4;N # ETHIOPIC SYLLABLE SSEE
+2DA5;N # ETHIOPIC SYLLABLE SSE
+2DA6;N # ETHIOPIC SYLLABLE SSO
+2DA8;N # ETHIOPIC SYLLABLE CCA
+2DA9;N # ETHIOPIC SYLLABLE CCU
+2DAA;N # ETHIOPIC SYLLABLE CCI
+2DAB;N # ETHIOPIC SYLLABLE CCAA
+2DAC;N # ETHIOPIC SYLLABLE CCEE
+2DAD;N # ETHIOPIC SYLLABLE CCE
+2DAE;N # ETHIOPIC SYLLABLE CCO
+2DB0;N # ETHIOPIC SYLLABLE ZZA
+2DB1;N # ETHIOPIC SYLLABLE ZZU
+2DB2;N # ETHIOPIC SYLLABLE ZZI
+2DB3;N # ETHIOPIC SYLLABLE ZZAA
+2DB4;N # ETHIOPIC SYLLABLE ZZEE
+2DB5;N # ETHIOPIC SYLLABLE ZZE
+2DB6;N # ETHIOPIC SYLLABLE ZZO
+2DB8;N # ETHIOPIC SYLLABLE CCHA
+2DB9;N # ETHIOPIC SYLLABLE CCHU
+2DBA;N # ETHIOPIC SYLLABLE CCHI
+2DBB;N # ETHIOPIC SYLLABLE CCHAA
+2DBC;N # ETHIOPIC SYLLABLE CCHEE
+2DBD;N # ETHIOPIC SYLLABLE CCHE
+2DBE;N # ETHIOPIC SYLLABLE CCHO
+2DC0;N # ETHIOPIC SYLLABLE QYA
+2DC1;N # ETHIOPIC SYLLABLE QYU
+2DC2;N # ETHIOPIC SYLLABLE QYI
+2DC3;N # ETHIOPIC SYLLABLE QYAA
+2DC4;N # ETHIOPIC SYLLABLE QYEE
+2DC5;N # ETHIOPIC SYLLABLE QYE
+2DC6;N # ETHIOPIC SYLLABLE QYO
+2DC8;N # ETHIOPIC SYLLABLE KYA
+2DC9;N # ETHIOPIC SYLLABLE KYU
+2DCA;N # ETHIOPIC SYLLABLE KYI
+2DCB;N # ETHIOPIC SYLLABLE KYAA
+2DCC;N # ETHIOPIC SYLLABLE KYEE
+2DCD;N # ETHIOPIC SYLLABLE KYE
+2DCE;N # ETHIOPIC SYLLABLE KYO
+2DD0;N # ETHIOPIC SYLLABLE XYA
+2DD1;N # ETHIOPIC SYLLABLE XYU
+2DD2;N # ETHIOPIC SYLLABLE XYI
+2DD3;N # ETHIOPIC SYLLABLE XYAA
+2DD4;N # ETHIOPIC SYLLABLE XYEE
+2DD5;N # ETHIOPIC SYLLABLE XYE
+2DD6;N # ETHIOPIC SYLLABLE XYO
+2DD8;N # ETHIOPIC SYLLABLE GYA
+2DD9;N # ETHIOPIC SYLLABLE GYU
+2DDA;N # ETHIOPIC SYLLABLE GYI
+2DDB;N # ETHIOPIC SYLLABLE GYAA
+2DDC;N # ETHIOPIC SYLLABLE GYEE
+2DDD;N # ETHIOPIC SYLLABLE GYE
+2DDE;N # ETHIOPIC SYLLABLE GYO
+2E00;N # RIGHT ANGLE SUBSTITUTION MARKER
+2E01;N # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;N # LEFT SUBSTITUTION BRACKET
+2E03;N # RIGHT SUBSTITUTION BRACKET
+2E04;N # LEFT DOTTED SUBSTITUTION BRACKET
+2E05;N # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06;N # RAISED INTERPOLATION MARKER
+2E07;N # RAISED DOTTED INTERPOLATION MARKER
+2E08;N # DOTTED TRANSPOSITION MARKER
+2E09;N # LEFT TRANSPOSITION BRACKET
+2E0A;N # RIGHT TRANSPOSITION BRACKET
+2E0B;N # RAISED SQUARE
+2E0C;N # LEFT RAISED OMISSION BRACKET
+2E0D;N # RIGHT RAISED OMISSION BRACKET
+2E0E;N # EDITORIAL CORONIS
+2E0F;N # PARAGRAPHOS
+2E10;N # FORKED PARAGRAPHOS
+2E11;N # REVERSED FORKED PARAGRAPHOS
+2E12;N # HYPODIASTOLE
+2E13;N # DOTTED OBELOS
+2E14;N # DOWNWARDS ANCORA
+2E15;N # UPWARDS ANCORA
+2E16;N # DOTTED RIGHT-POINTING ANGLE
+2E17;N # DOUBLE OBLIQUE HYPHEN
+2E1C;N # LEFT LOW PARAPHRASE BRACKET
+2E1D;N # RIGHT LOW PARAPHRASE BRACKET
+2E80;W # CJK RADICAL REPEAT
+2E81;W # CJK RADICAL CLIFF
+2E82;W # CJK RADICAL SECOND ONE
+2E83;W # CJK RADICAL SECOND TWO
+2E84;W # CJK RADICAL SECOND THREE
+2E85;W # CJK RADICAL PERSON
+2E86;W # CJK RADICAL BOX
+2E87;W # CJK RADICAL TABLE
+2E88;W # CJK RADICAL KNIFE ONE
+2E89;W # CJK RADICAL KNIFE TWO
+2E8A;W # CJK RADICAL DIVINATION
+2E8B;W # CJK RADICAL SEAL
+2E8C;W # CJK RADICAL SMALL ONE
+2E8D;W # CJK RADICAL SMALL TWO
+2E8E;W # CJK RADICAL LAME ONE
+2E8F;W # CJK RADICAL LAME TWO
+2E90;W # CJK RADICAL LAME THREE
+2E91;W # CJK RADICAL LAME FOUR
+2E92;W # CJK RADICAL SNAKE
+2E93;W # CJK RADICAL THREAD
+2E94;W # CJK RADICAL SNOUT ONE
+2E95;W # CJK RADICAL SNOUT TWO
+2E96;W # CJK RADICAL HEART ONE
+2E97;W # CJK RADICAL HEART TWO
+2E98;W # CJK RADICAL HAND
+2E99;W # CJK RADICAL RAP
+2E9B;W # CJK RADICAL CHOKE
+2E9C;W # CJK RADICAL SUN
+2E9D;W # CJK RADICAL MOON
+2E9E;W # CJK RADICAL DEATH
+2E9F;W # CJK RADICAL MOTHER
+2EA0;W # CJK RADICAL CIVILIAN
+2EA1;W # CJK RADICAL WATER ONE
+2EA2;W # CJK RADICAL WATER TWO
+2EA3;W # CJK RADICAL FIRE
+2EA4;W # CJK RADICAL PAW ONE
+2EA5;W # CJK RADICAL PAW TWO
+2EA6;W # CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+2EA7;W # CJK RADICAL COW
+2EA8;W # CJK RADICAL DOG
+2EA9;W # CJK RADICAL JADE
+2EAA;W # CJK RADICAL BOLT OF CLOTH
+2EAB;W # CJK RADICAL EYE
+2EAC;W # CJK RADICAL SPIRIT ONE
+2EAD;W # CJK RADICAL SPIRIT TWO
+2EAE;W # CJK RADICAL BAMBOO
+2EAF;W # CJK RADICAL SILK
+2EB0;W # CJK RADICAL C-SIMPLIFIED SILK
+2EB1;W # CJK RADICAL NET ONE
+2EB2;W # CJK RADICAL NET TWO
+2EB3;W # CJK RADICAL NET THREE
+2EB4;W # CJK RADICAL NET FOUR
+2EB5;W # CJK RADICAL MESH
+2EB6;W # CJK RADICAL SHEEP
+2EB7;W # CJK RADICAL RAM
+2EB8;W # CJK RADICAL EWE
+2EB9;W # CJK RADICAL OLD
+2EBA;W # CJK RADICAL BRUSH ONE
+2EBB;W # CJK RADICAL BRUSH TWO
+2EBC;W # CJK RADICAL MEAT
+2EBD;W # CJK RADICAL MORTAR
+2EBE;W # CJK RADICAL GRASS ONE
+2EBF;W # CJK RADICAL GRASS TWO
+2EC0;W # CJK RADICAL GRASS THREE
+2EC1;W # CJK RADICAL TIGER
+2EC2;W # CJK RADICAL CLOTHES
+2EC3;W # CJK RADICAL WEST ONE
+2EC4;W # CJK RADICAL WEST TWO
+2EC5;W # CJK RADICAL C-SIMPLIFIED SEE
+2EC6;W # CJK RADICAL SIMPLIFIED HORN
+2EC7;W # CJK RADICAL HORN
+2EC8;W # CJK RADICAL C-SIMPLIFIED SPEECH
+2EC9;W # CJK RADICAL C-SIMPLIFIED SHELL
+2ECA;W # CJK RADICAL FOOT
+2ECB;W # CJK RADICAL C-SIMPLIFIED CART
+2ECC;W # CJK RADICAL SIMPLIFIED WALK
+2ECD;W # CJK RADICAL WALK ONE
+2ECE;W # CJK RADICAL WALK TWO
+2ECF;W # CJK RADICAL CITY
+2ED0;W # CJK RADICAL C-SIMPLIFIED GOLD
+2ED1;W # CJK RADICAL LONG ONE
+2ED2;W # CJK RADICAL LONG TWO
+2ED3;W # CJK RADICAL C-SIMPLIFIED LONG
+2ED4;W # CJK RADICAL C-SIMPLIFIED GATE
+2ED5;W # CJK RADICAL MOUND ONE
+2ED6;W # CJK RADICAL MOUND TWO
+2ED7;W # CJK RADICAL RAIN
+2ED8;W # CJK RADICAL BLUE
+2ED9;W # CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2EDA;W # CJK RADICAL C-SIMPLIFIED LEAF
+2EDB;W # CJK RADICAL C-SIMPLIFIED WIND
+2EDC;W # CJK RADICAL C-SIMPLIFIED FLY
+2EDD;W # CJK RADICAL EAT ONE
+2EDE;W # CJK RADICAL EAT TWO
+2EDF;W # CJK RADICAL EAT THREE
+2EE0;W # CJK RADICAL C-SIMPLIFIED EAT
+2EE1;W # CJK RADICAL HEAD
+2EE2;W # CJK RADICAL C-SIMPLIFIED HORSE
+2EE3;W # CJK RADICAL BONE
+2EE4;W # CJK RADICAL GHOST
+2EE5;W # CJK RADICAL C-SIMPLIFIED FISH
+2EE6;W # CJK RADICAL C-SIMPLIFIED BIRD
+2EE7;W # CJK RADICAL C-SIMPLIFIED SALT
+2EE8;W # CJK RADICAL SIMPLIFIED WHEAT
+2EE9;W # CJK RADICAL SIMPLIFIED YELLOW
+2EEA;W # CJK RADICAL C-SIMPLIFIED FROG
+2EEB;W # CJK RADICAL J-SIMPLIFIED EVEN
+2EEC;W # CJK RADICAL C-SIMPLIFIED EVEN
+2EED;W # CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE;W # CJK RADICAL C-SIMPLIFIED TOOTH
+2EEF;W # CJK RADICAL J-SIMPLIFIED DRAGON
+2EF0;W # CJK RADICAL C-SIMPLIFIED DRAGON
+2EF1;W # CJK RADICAL TURTLE
+2EF2;W # CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3;W # CJK RADICAL C-SIMPLIFIED TURTLE
+2F00;W # KANGXI RADICAL ONE
+2F01;W # KANGXI RADICAL LINE
+2F02;W # KANGXI RADICAL DOT
+2F03;W # KANGXI RADICAL SLASH
+2F04;W # KANGXI RADICAL SECOND
+2F05;W # KANGXI RADICAL HOOK
+2F06;W # KANGXI RADICAL TWO
+2F07;W # KANGXI RADICAL LID
+2F08;W # KANGXI RADICAL MAN
+2F09;W # KANGXI RADICAL LEGS
+2F0A;W # KANGXI RADICAL ENTER
+2F0B;W # KANGXI RADICAL EIGHT
+2F0C;W # KANGXI RADICAL DOWN BOX
+2F0D;W # KANGXI RADICAL COVER
+2F0E;W # KANGXI RADICAL ICE
+2F0F;W # KANGXI RADICAL TABLE
+2F10;W # KANGXI RADICAL OPEN BOX
+2F11;W # KANGXI RADICAL KNIFE
+2F12;W # KANGXI RADICAL POWER
+2F13;W # KANGXI RADICAL WRAP
+2F14;W # KANGXI RADICAL SPOON
+2F15;W # KANGXI RADICAL RIGHT OPEN BOX
+2F16;W # KANGXI RADICAL HIDING ENCLOSURE
+2F17;W # KANGXI RADICAL TEN
+2F18;W # KANGXI RADICAL DIVINATION
+2F19;W # KANGXI RADICAL SEAL
+2F1A;W # KANGXI RADICAL CLIFF
+2F1B;W # KANGXI RADICAL PRIVATE
+2F1C;W # KANGXI RADICAL AGAIN
+2F1D;W # KANGXI RADICAL MOUTH
+2F1E;W # KANGXI RADICAL ENCLOSURE
+2F1F;W # KANGXI RADICAL EARTH
+2F20;W # KANGXI RADICAL SCHOLAR
+2F21;W # KANGXI RADICAL GO
+2F22;W # KANGXI RADICAL GO SLOWLY
+2F23;W # KANGXI RADICAL EVENING
+2F24;W # KANGXI RADICAL BIG
+2F25;W # KANGXI RADICAL WOMAN
+2F26;W # KANGXI RADICAL CHILD
+2F27;W # KANGXI RADICAL ROOF
+2F28;W # KANGXI RADICAL INCH
+2F29;W # KANGXI RADICAL SMALL
+2F2A;W # KANGXI RADICAL LAME
+2F2B;W # KANGXI RADICAL CORPSE
+2F2C;W # KANGXI RADICAL SPROUT
+2F2D;W # KANGXI RADICAL MOUNTAIN
+2F2E;W # KANGXI RADICAL RIVER
+2F2F;W # KANGXI RADICAL WORK
+2F30;W # KANGXI RADICAL ONESELF
+2F31;W # KANGXI RADICAL TURBAN
+2F32;W # KANGXI RADICAL DRY
+2F33;W # KANGXI RADICAL SHORT THREAD
+2F34;W # KANGXI RADICAL DOTTED CLIFF
+2F35;W # KANGXI RADICAL LONG STRIDE
+2F36;W # KANGXI RADICAL TWO HANDS
+2F37;W # KANGXI RADICAL SHOOT
+2F38;W # KANGXI RADICAL BOW
+2F39;W # KANGXI RADICAL SNOUT
+2F3A;W # KANGXI RADICAL BRISTLE
+2F3B;W # KANGXI RADICAL STEP
+2F3C;W # KANGXI RADICAL HEART
+2F3D;W # KANGXI RADICAL HALBERD
+2F3E;W # KANGXI RADICAL DOOR
+2F3F;W # KANGXI RADICAL HAND
+2F40;W # KANGXI RADICAL BRANCH
+2F41;W # KANGXI RADICAL RAP
+2F42;W # KANGXI RADICAL SCRIPT
+2F43;W # KANGXI RADICAL DIPPER
+2F44;W # KANGXI RADICAL AXE
+2F45;W # KANGXI RADICAL SQUARE
+2F46;W # KANGXI RADICAL NOT
+2F47;W # KANGXI RADICAL SUN
+2F48;W # KANGXI RADICAL SAY
+2F49;W # KANGXI RADICAL MOON
+2F4A;W # KANGXI RADICAL TREE
+2F4B;W # KANGXI RADICAL LACK
+2F4C;W # KANGXI RADICAL STOP
+2F4D;W # KANGXI RADICAL DEATH
+2F4E;W # KANGXI RADICAL WEAPON
+2F4F;W # KANGXI RADICAL DO NOT
+2F50;W # KANGXI RADICAL COMPARE
+2F51;W # KANGXI RADICAL FUR
+2F52;W # KANGXI RADICAL CLAN
+2F53;W # KANGXI RADICAL STEAM
+2F54;W # KANGXI RADICAL WATER
+2F55;W # KANGXI RADICAL FIRE
+2F56;W # KANGXI RADICAL CLAW
+2F57;W # KANGXI RADICAL FATHER
+2F58;W # KANGXI RADICAL DOUBLE X
+2F59;W # KANGXI RADICAL HALF TREE TRUNK
+2F5A;W # KANGXI RADICAL SLICE
+2F5B;W # KANGXI RADICAL FANG
+2F5C;W # KANGXI RADICAL COW
+2F5D;W # KANGXI RADICAL DOG
+2F5E;W # KANGXI RADICAL PROFOUND
+2F5F;W # KANGXI RADICAL JADE
+2F60;W # KANGXI RADICAL MELON
+2F61;W # KANGXI RADICAL TILE
+2F62;W # KANGXI RADICAL SWEET
+2F63;W # KANGXI RADICAL LIFE
+2F64;W # KANGXI RADICAL USE
+2F65;W # KANGXI RADICAL FIELD
+2F66;W # KANGXI RADICAL BOLT OF CLOTH
+2F67;W # KANGXI RADICAL SICKNESS
+2F68;W # KANGXI RADICAL DOTTED TENT
+2F69;W # KANGXI RADICAL WHITE
+2F6A;W # KANGXI RADICAL SKIN
+2F6B;W # KANGXI RADICAL DISH
+2F6C;W # KANGXI RADICAL EYE
+2F6D;W # KANGXI RADICAL SPEAR
+2F6E;W # KANGXI RADICAL ARROW
+2F6F;W # KANGXI RADICAL STONE
+2F70;W # KANGXI RADICAL SPIRIT
+2F71;W # KANGXI RADICAL TRACK
+2F72;W # KANGXI RADICAL GRAIN
+2F73;W # KANGXI RADICAL CAVE
+2F74;W # KANGXI RADICAL STAND
+2F75;W # KANGXI RADICAL BAMBOO
+2F76;W # KANGXI RADICAL RICE
+2F77;W # KANGXI RADICAL SILK
+2F78;W # KANGXI RADICAL JAR
+2F79;W # KANGXI RADICAL NET
+2F7A;W # KANGXI RADICAL SHEEP
+2F7B;W # KANGXI RADICAL FEATHER
+2F7C;W # KANGXI RADICAL OLD
+2F7D;W # KANGXI RADICAL AND
+2F7E;W # KANGXI RADICAL PLOW
+2F7F;W # KANGXI RADICAL EAR
+2F80;W # KANGXI RADICAL BRUSH
+2F81;W # KANGXI RADICAL MEAT
+2F82;W # KANGXI RADICAL MINISTER
+2F83;W # KANGXI RADICAL SELF
+2F84;W # KANGXI RADICAL ARRIVE
+2F85;W # KANGXI RADICAL MORTAR
+2F86;W # KANGXI RADICAL TONGUE
+2F87;W # KANGXI RADICAL OPPOSE
+2F88;W # KANGXI RADICAL BOAT
+2F89;W # KANGXI RADICAL STOPPING
+2F8A;W # KANGXI RADICAL COLOR
+2F8B;W # KANGXI RADICAL GRASS
+2F8C;W # KANGXI RADICAL TIGER
+2F8D;W # KANGXI RADICAL INSECT
+2F8E;W # KANGXI RADICAL BLOOD
+2F8F;W # KANGXI RADICAL WALK ENCLOSURE
+2F90;W # KANGXI RADICAL CLOTHES
+2F91;W # KANGXI RADICAL WEST
+2F92;W # KANGXI RADICAL SEE
+2F93;W # KANGXI RADICAL HORN
+2F94;W # KANGXI RADICAL SPEECH
+2F95;W # KANGXI RADICAL VALLEY
+2F96;W # KANGXI RADICAL BEAN
+2F97;W # KANGXI RADICAL PIG
+2F98;W # KANGXI RADICAL BADGER
+2F99;W # KANGXI RADICAL SHELL
+2F9A;W # KANGXI RADICAL RED
+2F9B;W # KANGXI RADICAL RUN
+2F9C;W # KANGXI RADICAL FOOT
+2F9D;W # KANGXI RADICAL BODY
+2F9E;W # KANGXI RADICAL CART
+2F9F;W # KANGXI RADICAL BITTER
+2FA0;W # KANGXI RADICAL MORNING
+2FA1;W # KANGXI RADICAL WALK
+2FA2;W # KANGXI RADICAL CITY
+2FA3;W # KANGXI RADICAL WINE
+2FA4;W # KANGXI RADICAL DISTINGUISH
+2FA5;W # KANGXI RADICAL VILLAGE
+2FA6;W # KANGXI RADICAL GOLD
+2FA7;W # KANGXI RADICAL LONG
+2FA8;W # KANGXI RADICAL GATE
+2FA9;W # KANGXI RADICAL MOUND
+2FAA;W # KANGXI RADICAL SLAVE
+2FAB;W # KANGXI RADICAL SHORT TAILED BIRD
+2FAC;W # KANGXI RADICAL RAIN
+2FAD;W # KANGXI RADICAL BLUE
+2FAE;W # KANGXI RADICAL WRONG
+2FAF;W # KANGXI RADICAL FACE
+2FB0;W # KANGXI RADICAL LEATHER
+2FB1;W # KANGXI RADICAL TANNED LEATHER
+2FB2;W # KANGXI RADICAL LEEK
+2FB3;W # KANGXI RADICAL SOUND
+2FB4;W # KANGXI RADICAL LEAF
+2FB5;W # KANGXI RADICAL WIND
+2FB6;W # KANGXI RADICAL FLY
+2FB7;W # KANGXI RADICAL EAT
+2FB8;W # KANGXI RADICAL HEAD
+2FB9;W # KANGXI RADICAL FRAGRANT
+2FBA;W # KANGXI RADICAL HORSE
+2FBB;W # KANGXI RADICAL BONE
+2FBC;W # KANGXI RADICAL TALL
+2FBD;W # KANGXI RADICAL HAIR
+2FBE;W # KANGXI RADICAL FIGHT
+2FBF;W # KANGXI RADICAL SACRIFICIAL WINE
+2FC0;W # KANGXI RADICAL CAULDRON
+2FC1;W # KANGXI RADICAL GHOST
+2FC2;W # KANGXI RADICAL FISH
+2FC3;W # KANGXI RADICAL BIRD
+2FC4;W # KANGXI RADICAL SALT
+2FC5;W # KANGXI RADICAL DEER
+2FC6;W # KANGXI RADICAL WHEAT
+2FC7;W # KANGXI RADICAL HEMP
+2FC8;W # KANGXI RADICAL YELLOW
+2FC9;W # KANGXI RADICAL MILLET
+2FCA;W # KANGXI RADICAL BLACK
+2FCB;W # KANGXI RADICAL EMBROIDERY
+2FCC;W # KANGXI RADICAL FROG
+2FCD;W # KANGXI RADICAL TRIPOD
+2FCE;W # KANGXI RADICAL DRUM
+2FCF;W # KANGXI RADICAL RAT
+2FD0;W # KANGXI RADICAL NOSE
+2FD1;W # KANGXI RADICAL EVEN
+2FD2;W # KANGXI RADICAL TOOTH
+2FD3;W # KANGXI RADICAL DRAGON
+2FD4;W # KANGXI RADICAL TURTLE
+2FD5;W # KANGXI RADICAL FLUTE
+2FF0;W # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1;W # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2;W # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3;W # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4;W # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA;W # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB;W # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000;F # IDEOGRAPHIC SPACE
+3001;W # IDEOGRAPHIC COMMA
+3002;W # IDEOGRAPHIC FULL STOP
+3003;W # DITTO MARK
+3004;W # JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005;W # IDEOGRAPHIC ITERATION MARK
+3006;W # IDEOGRAPHIC CLOSING MARK
+3007;W # IDEOGRAPHIC NUMBER ZERO
+3008;W # LEFT ANGLE BRACKET
+3009;W # RIGHT ANGLE BRACKET
+300A;W # LEFT DOUBLE ANGLE BRACKET
+300B;W # RIGHT DOUBLE ANGLE BRACKET
+300C;W # LEFT CORNER BRACKET
+300D;W # RIGHT CORNER BRACKET
+300E;W # LEFT WHITE CORNER BRACKET
+300F;W # RIGHT WHITE CORNER BRACKET
+3010;W # LEFT BLACK LENTICULAR BRACKET
+3011;W # RIGHT BLACK LENTICULAR BRACKET
+3012;W # POSTAL MARK
+3013;W # GETA MARK
+3014;W # LEFT TORTOISE SHELL BRACKET
+3015;W # RIGHT TORTOISE SHELL BRACKET
+3016;W # LEFT WHITE LENTICULAR BRACKET
+3017;W # RIGHT WHITE LENTICULAR BRACKET
+3018;W # LEFT WHITE TORTOISE SHELL BRACKET
+3019;W # RIGHT WHITE TORTOISE SHELL BRACKET
+301A;W # LEFT WHITE SQUARE BRACKET
+301B;W # RIGHT WHITE SQUARE BRACKET
+301C;W # WAVE DASH
+301D;W # REVERSED DOUBLE PRIME QUOTATION MARK
+301E;W # DOUBLE PRIME QUOTATION MARK
+301F;W # LOW DOUBLE PRIME QUOTATION MARK
+3020;W # POSTAL MARK FACE
+3021;W # HANGZHOU NUMERAL ONE
+3022;W # HANGZHOU NUMERAL TWO
+3023;W # HANGZHOU NUMERAL THREE
+3024;W # HANGZHOU NUMERAL FOUR
+3025;W # HANGZHOU NUMERAL FIVE
+3026;W # HANGZHOU NUMERAL SIX
+3027;W # HANGZHOU NUMERAL SEVEN
+3028;W # HANGZHOU NUMERAL EIGHT
+3029;W # HANGZHOU NUMERAL NINE
+302A;W # IDEOGRAPHIC LEVEL TONE MARK
+302B;W # IDEOGRAPHIC RISING TONE MARK
+302C;W # IDEOGRAPHIC DEPARTING TONE MARK
+302D;W # IDEOGRAPHIC ENTERING TONE MARK
+302E;W # HANGUL SINGLE DOT TONE MARK
+302F;W # HANGUL DOUBLE DOT TONE MARK
+3030;W # WAVY DASH
+3031;W # VERTICAL KANA REPEAT MARK
+3032;W # VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033;W # VERTICAL KANA REPEAT MARK UPPER HALF
+3034;W # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035;W # VERTICAL KANA REPEAT MARK LOWER HALF
+3036;W # CIRCLED POSTAL MARK
+3037;W # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038;W # HANGZHOU NUMERAL TEN
+3039;W # HANGZHOU NUMERAL TWENTY
+303A;W # HANGZHOU NUMERAL THIRTY
+303B;W # VERTICAL IDEOGRAPHIC ITERATION MARK
+303C;W # MASU MARK
+303D;W # PART ALTERNATION MARK
+303E;W # IDEOGRAPHIC VARIATION INDICATOR
+303F;N # IDEOGRAPHIC HALF FILL SPACE
+3041;W # HIRAGANA LETTER SMALL A
+3042;W # HIRAGANA LETTER A
+3043;W # HIRAGANA LETTER SMALL I
+3044;W # HIRAGANA LETTER I
+3045;W # HIRAGANA LETTER SMALL U
+3046;W # HIRAGANA LETTER U
+3047;W # HIRAGANA LETTER SMALL E
+3048;W # HIRAGANA LETTER E
+3049;W # HIRAGANA LETTER SMALL O
+304A;W # HIRAGANA LETTER O
+304B;W # HIRAGANA LETTER KA
+304C;W # HIRAGANA LETTER GA
+304D;W # HIRAGANA LETTER KI
+304E;W # HIRAGANA LETTER GI
+304F;W # HIRAGANA LETTER KU
+3050;W # HIRAGANA LETTER GU
+3051;W # HIRAGANA LETTER KE
+3052;W # HIRAGANA LETTER GE
+3053;W # HIRAGANA LETTER KO
+3054;W # HIRAGANA LETTER GO
+3055;W # HIRAGANA LETTER SA
+3056;W # HIRAGANA LETTER ZA
+3057;W # HIRAGANA LETTER SI
+3058;W # HIRAGANA LETTER ZI
+3059;W # HIRAGANA LETTER SU
+305A;W # HIRAGANA LETTER ZU
+305B;W # HIRAGANA LETTER SE
+305C;W # HIRAGANA LETTER ZE
+305D;W # HIRAGANA LETTER SO
+305E;W # HIRAGANA LETTER ZO
+305F;W # HIRAGANA LETTER TA
+3060;W # HIRAGANA LETTER DA
+3061;W # HIRAGANA LETTER TI
+3062;W # HIRAGANA LETTER DI
+3063;W # HIRAGANA LETTER SMALL TU
+3064;W # HIRAGANA LETTER TU
+3065;W # HIRAGANA LETTER DU
+3066;W # HIRAGANA LETTER TE
+3067;W # HIRAGANA LETTER DE
+3068;W # HIRAGANA LETTER TO
+3069;W # HIRAGANA LETTER DO
+306A;W # HIRAGANA LETTER NA
+306B;W # HIRAGANA LETTER NI
+306C;W # HIRAGANA LETTER NU
+306D;W # HIRAGANA LETTER NE
+306E;W # HIRAGANA LETTER NO
+306F;W # HIRAGANA LETTER HA
+3070;W # HIRAGANA LETTER BA
+3071;W # HIRAGANA LETTER PA
+3072;W # HIRAGANA LETTER HI
+3073;W # HIRAGANA LETTER BI
+3074;W # HIRAGANA LETTER PI
+3075;W # HIRAGANA LETTER HU
+3076;W # HIRAGANA LETTER BU
+3077;W # HIRAGANA LETTER PU
+3078;W # HIRAGANA LETTER HE
+3079;W # HIRAGANA LETTER BE
+307A;W # HIRAGANA LETTER PE
+307B;W # HIRAGANA LETTER HO
+307C;W # HIRAGANA LETTER BO
+307D;W # HIRAGANA LETTER PO
+307E;W # HIRAGANA LETTER MA
+307F;W # HIRAGANA LETTER MI
+3080;W # HIRAGANA LETTER MU
+3081;W # HIRAGANA LETTER ME
+3082;W # HIRAGANA LETTER MO
+3083;W # HIRAGANA LETTER SMALL YA
+3084;W # HIRAGANA LETTER YA
+3085;W # HIRAGANA LETTER SMALL YU
+3086;W # HIRAGANA LETTER YU
+3087;W # HIRAGANA LETTER SMALL YO
+3088;W # HIRAGANA LETTER YO
+3089;W # HIRAGANA LETTER RA
+308A;W # HIRAGANA LETTER RI
+308B;W # HIRAGANA LETTER RU
+308C;W # HIRAGANA LETTER RE
+308D;W # HIRAGANA LETTER RO
+308E;W # HIRAGANA LETTER SMALL WA
+308F;W # HIRAGANA LETTER WA
+3090;W # HIRAGANA LETTER WI
+3091;W # HIRAGANA LETTER WE
+3092;W # HIRAGANA LETTER WO
+3093;W # HIRAGANA LETTER N
+3094;W # HIRAGANA LETTER VU
+3095;W # HIRAGANA LETTER SMALL KA
+3096;W # HIRAGANA LETTER SMALL KE
+3099;W # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A;W # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B;W # KATAKANA-HIRAGANA VOICED SOUND MARK
+309C;W # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D;W # HIRAGANA ITERATION MARK
+309E;W # HIRAGANA VOICED ITERATION MARK
+309F;W # HIRAGANA DIGRAPH YORI
+30A0;W # KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1;W # KATAKANA LETTER SMALL A
+30A2;W # KATAKANA LETTER A
+30A3;W # KATAKANA LETTER SMALL I
+30A4;W # KATAKANA LETTER I
+30A5;W # KATAKANA LETTER SMALL U
+30A6;W # KATAKANA LETTER U
+30A7;W # KATAKANA LETTER SMALL E
+30A8;W # KATAKANA LETTER E
+30A9;W # KATAKANA LETTER SMALL O
+30AA;W # KATAKANA LETTER O
+30AB;W # KATAKANA LETTER KA
+30AC;W # KATAKANA LETTER GA
+30AD;W # KATAKANA LETTER KI
+30AE;W # KATAKANA LETTER GI
+30AF;W # KATAKANA LETTER KU
+30B0;W # KATAKANA LETTER GU
+30B1;W # KATAKANA LETTER KE
+30B2;W # KATAKANA LETTER GE
+30B3;W # KATAKANA LETTER KO
+30B4;W # KATAKANA LETTER GO
+30B5;W # KATAKANA LETTER SA
+30B6;W # KATAKANA LETTER ZA
+30B7;W # KATAKANA LETTER SI
+30B8;W # KATAKANA LETTER ZI
+30B9;W # KATAKANA LETTER SU
+30BA;W # KATAKANA LETTER ZU
+30BB;W # KATAKANA LETTER SE
+30BC;W # KATAKANA LETTER ZE
+30BD;W # KATAKANA LETTER SO
+30BE;W # KATAKANA LETTER ZO
+30BF;W # KATAKANA LETTER TA
+30C0;W # KATAKANA LETTER DA
+30C1;W # KATAKANA LETTER TI
+30C2;W # KATAKANA LETTER DI
+30C3;W # KATAKANA LETTER SMALL TU
+30C4;W # KATAKANA LETTER TU
+30C5;W # KATAKANA LETTER DU
+30C6;W # KATAKANA LETTER TE
+30C7;W # KATAKANA LETTER DE
+30C8;W # KATAKANA LETTER TO
+30C9;W # KATAKANA LETTER DO
+30CA;W # KATAKANA LETTER NA
+30CB;W # KATAKANA LETTER NI
+30CC;W # KATAKANA LETTER NU
+30CD;W # KATAKANA LETTER NE
+30CE;W # KATAKANA LETTER NO
+30CF;W # KATAKANA LETTER HA
+30D0;W # KATAKANA LETTER BA
+30D1;W # KATAKANA LETTER PA
+30D2;W # KATAKANA LETTER HI
+30D3;W # KATAKANA LETTER BI
+30D4;W # KATAKANA LETTER PI
+30D5;W # KATAKANA LETTER HU
+30D6;W # KATAKANA LETTER BU
+30D7;W # KATAKANA LETTER PU
+30D8;W # KATAKANA LETTER HE
+30D9;W # KATAKANA LETTER BE
+30DA;W # KATAKANA LETTER PE
+30DB;W # KATAKANA LETTER HO
+30DC;W # KATAKANA LETTER BO
+30DD;W # KATAKANA LETTER PO
+30DE;W # KATAKANA LETTER MA
+30DF;W # KATAKANA LETTER MI
+30E0;W # KATAKANA LETTER MU
+30E1;W # KATAKANA LETTER ME
+30E2;W # KATAKANA LETTER MO
+30E3;W # KATAKANA LETTER SMALL YA
+30E4;W # KATAKANA LETTER YA
+30E5;W # KATAKANA LETTER SMALL YU
+30E6;W # KATAKANA LETTER YU
+30E7;W # KATAKANA LETTER SMALL YO
+30E8;W # KATAKANA LETTER YO
+30E9;W # KATAKANA LETTER RA
+30EA;W # KATAKANA LETTER RI
+30EB;W # KATAKANA LETTER RU
+30EC;W # KATAKANA LETTER RE
+30ED;W # KATAKANA LETTER RO
+30EE;W # KATAKANA LETTER SMALL WA
+30EF;W # KATAKANA LETTER WA
+30F0;W # KATAKANA LETTER WI
+30F1;W # KATAKANA LETTER WE
+30F2;W # KATAKANA LETTER WO
+30F3;W # KATAKANA LETTER N
+30F4;W # KATAKANA LETTER VU
+30F5;W # KATAKANA LETTER SMALL KA
+30F6;W # KATAKANA LETTER SMALL KE
+30F7;W # KATAKANA LETTER VA
+30F8;W # KATAKANA LETTER VI
+30F9;W # KATAKANA LETTER VE
+30FA;W # KATAKANA LETTER VO
+30FB;W # KATAKANA MIDDLE DOT
+30FC;W # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD;W # KATAKANA ITERATION MARK
+30FE;W # KATAKANA VOICED ITERATION MARK
+30FF;W # KATAKANA DIGRAPH KOTO
+3105;W # BOPOMOFO LETTER B
+3106;W # BOPOMOFO LETTER P
+3107;W # BOPOMOFO LETTER M
+3108;W # BOPOMOFO LETTER F
+3109;W # BOPOMOFO LETTER D
+310A;W # BOPOMOFO LETTER T
+310B;W # BOPOMOFO LETTER N
+310C;W # BOPOMOFO LETTER L
+310D;W # BOPOMOFO LETTER G
+310E;W # BOPOMOFO LETTER K
+310F;W # BOPOMOFO LETTER H
+3110;W # BOPOMOFO LETTER J
+3111;W # BOPOMOFO LETTER Q
+3112;W # BOPOMOFO LETTER X
+3113;W # BOPOMOFO LETTER ZH
+3114;W # BOPOMOFO LETTER CH
+3115;W # BOPOMOFO LETTER SH
+3116;W # BOPOMOFO LETTER R
+3117;W # BOPOMOFO LETTER Z
+3118;W # BOPOMOFO LETTER C
+3119;W # BOPOMOFO LETTER S
+311A;W # BOPOMOFO LETTER A
+311B;W # BOPOMOFO LETTER O
+311C;W # BOPOMOFO LETTER E
+311D;W # BOPOMOFO LETTER EH
+311E;W # BOPOMOFO LETTER AI
+311F;W # BOPOMOFO LETTER EI
+3120;W # BOPOMOFO LETTER AU
+3121;W # BOPOMOFO LETTER OU
+3122;W # BOPOMOFO LETTER AN
+3123;W # BOPOMOFO LETTER EN
+3124;W # BOPOMOFO LETTER ANG
+3125;W # BOPOMOFO LETTER ENG
+3126;W # BOPOMOFO LETTER ER
+3127;W # BOPOMOFO LETTER I
+3128;W # BOPOMOFO LETTER U
+3129;W # BOPOMOFO LETTER IU
+312A;W # BOPOMOFO LETTER V
+312B;W # BOPOMOFO LETTER NG
+312C;W # BOPOMOFO LETTER GN
+3131;W # HANGUL LETTER KIYEOK
+3132;W # HANGUL LETTER SSANGKIYEOK
+3133;W # HANGUL LETTER KIYEOK-SIOS
+3134;W # HANGUL LETTER NIEUN
+3135;W # HANGUL LETTER NIEUN-CIEUC
+3136;W # HANGUL LETTER NIEUN-HIEUH
+3137;W # HANGUL LETTER TIKEUT
+3138;W # HANGUL LETTER SSANGTIKEUT
+3139;W # HANGUL LETTER RIEUL
+313A;W # HANGUL LETTER RIEUL-KIYEOK
+313B;W # HANGUL LETTER RIEUL-MIEUM
+313C;W # HANGUL LETTER RIEUL-PIEUP
+313D;W # HANGUL LETTER RIEUL-SIOS
+313E;W # HANGUL LETTER RIEUL-THIEUTH
+313F;W # HANGUL LETTER RIEUL-PHIEUPH
+3140;W # HANGUL LETTER RIEUL-HIEUH
+3141;W # HANGUL LETTER MIEUM
+3142;W # HANGUL LETTER PIEUP
+3143;W # HANGUL LETTER SSANGPIEUP
+3144;W # HANGUL LETTER PIEUP-SIOS
+3145;W # HANGUL LETTER SIOS
+3146;W # HANGUL LETTER SSANGSIOS
+3147;W # HANGUL LETTER IEUNG
+3148;W # HANGUL LETTER CIEUC
+3149;W # HANGUL LETTER SSANGCIEUC
+314A;W # HANGUL LETTER CHIEUCH
+314B;W # HANGUL LETTER KHIEUKH
+314C;W # HANGUL LETTER THIEUTH
+314D;W # HANGUL LETTER PHIEUPH
+314E;W # HANGUL LETTER HIEUH
+314F;W # HANGUL LETTER A
+3150;W # HANGUL LETTER AE
+3151;W # HANGUL LETTER YA
+3152;W # HANGUL LETTER YAE
+3153;W # HANGUL LETTER EO
+3154;W # HANGUL LETTER E
+3155;W # HANGUL LETTER YEO
+3156;W # HANGUL LETTER YE
+3157;W # HANGUL LETTER O
+3158;W # HANGUL LETTER WA
+3159;W # HANGUL LETTER WAE
+315A;W # HANGUL LETTER OE
+315B;W # HANGUL LETTER YO
+315C;W # HANGUL LETTER U
+315D;W # HANGUL LETTER WEO
+315E;W # HANGUL LETTER WE
+315F;W # HANGUL LETTER WI
+3160;W # HANGUL LETTER YU
+3161;W # HANGUL LETTER EU
+3162;W # HANGUL LETTER YI
+3163;W # HANGUL LETTER I
+3164;W # HANGUL FILLER
+3165;W # HANGUL LETTER SSANGNIEUN
+3166;W # HANGUL LETTER NIEUN-TIKEUT
+3167;W # HANGUL LETTER NIEUN-SIOS
+3168;W # HANGUL LETTER NIEUN-PANSIOS
+3169;W # HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A;W # HANGUL LETTER RIEUL-TIKEUT
+316B;W # HANGUL LETTER RIEUL-PIEUP-SIOS
+316C;W # HANGUL LETTER RIEUL-PANSIOS
+316D;W # HANGUL LETTER RIEUL-YEORINHIEUH
+316E;W # HANGUL LETTER MIEUM-PIEUP
+316F;W # HANGUL LETTER MIEUM-SIOS
+3170;W # HANGUL LETTER MIEUM-PANSIOS
+3171;W # HANGUL LETTER KAPYEOUNMIEUM
+3172;W # HANGUL LETTER PIEUP-KIYEOK
+3173;W # HANGUL LETTER PIEUP-TIKEUT
+3174;W # HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175;W # HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176;W # HANGUL LETTER PIEUP-CIEUC
+3177;W # HANGUL LETTER PIEUP-THIEUTH
+3178;W # HANGUL LETTER KAPYEOUNPIEUP
+3179;W # HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A;W # HANGUL LETTER SIOS-KIYEOK
+317B;W # HANGUL LETTER SIOS-NIEUN
+317C;W # HANGUL LETTER SIOS-TIKEUT
+317D;W # HANGUL LETTER SIOS-PIEUP
+317E;W # HANGUL LETTER SIOS-CIEUC
+317F;W # HANGUL LETTER PANSIOS
+3180;W # HANGUL LETTER SSANGIEUNG
+3181;W # HANGUL LETTER YESIEUNG
+3182;W # HANGUL LETTER YESIEUNG-SIOS
+3183;W # HANGUL LETTER YESIEUNG-PANSIOS
+3184;W # HANGUL LETTER KAPYEOUNPHIEUPH
+3185;W # HANGUL LETTER SSANGHIEUH
+3186;W # HANGUL LETTER YEORINHIEUH
+3187;W # HANGUL LETTER YO-YA
+3188;W # HANGUL LETTER YO-YAE
+3189;W # HANGUL LETTER YO-I
+318A;W # HANGUL LETTER YU-YEO
+318B;W # HANGUL LETTER YU-YE
+318C;W # HANGUL LETTER YU-I
+318D;W # HANGUL LETTER ARAEA
+318E;W # HANGUL LETTER ARAEAE
+3190;W # IDEOGRAPHIC ANNOTATION LINKING MARK
+3191;W # IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192;W # IDEOGRAPHIC ANNOTATION ONE MARK
+3193;W # IDEOGRAPHIC ANNOTATION TWO MARK
+3194;W # IDEOGRAPHIC ANNOTATION THREE MARK
+3195;W # IDEOGRAPHIC ANNOTATION FOUR MARK
+3196;W # IDEOGRAPHIC ANNOTATION TOP MARK
+3197;W # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198;W # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199;W # IDEOGRAPHIC ANNOTATION FIRST MARK
+319A;W # IDEOGRAPHIC ANNOTATION SECOND MARK
+319B;W # IDEOGRAPHIC ANNOTATION THIRD MARK
+319C;W # IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D;W # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E;W # IDEOGRAPHIC ANNOTATION EARTH MARK
+319F;W # IDEOGRAPHIC ANNOTATION MAN MARK
+31A0;W # BOPOMOFO LETTER BU
+31A1;W # BOPOMOFO LETTER ZI
+31A2;W # BOPOMOFO LETTER JI
+31A3;W # BOPOMOFO LETTER GU
+31A4;W # BOPOMOFO LETTER EE
+31A5;W # BOPOMOFO LETTER ENN
+31A6;W # BOPOMOFO LETTER OO
+31A7;W # BOPOMOFO LETTER ONN
+31A8;W # BOPOMOFO LETTER IR
+31A9;W # BOPOMOFO LETTER ANN
+31AA;W # BOPOMOFO LETTER INN
+31AB;W # BOPOMOFO LETTER UNN
+31AC;W # BOPOMOFO LETTER IM
+31AD;W # BOPOMOFO LETTER NGG
+31AE;W # BOPOMOFO LETTER AINN
+31AF;W # BOPOMOFO LETTER AUNN
+31B0;W # BOPOMOFO LETTER AM
+31B1;W # BOPOMOFO LETTER OM
+31B2;W # BOPOMOFO LETTER ONG
+31B3;W # BOPOMOFO LETTER INNN
+31B4;W # BOPOMOFO FINAL LETTER P
+31B5;W # BOPOMOFO FINAL LETTER T
+31B6;W # BOPOMOFO FINAL LETTER K
+31B7;W # BOPOMOFO FINAL LETTER H
+31C0;W # CJK STROKE T
+31C1;W # CJK STROKE WG
+31C2;W # CJK STROKE XG
+31C3;W # CJK STROKE BXG
+31C4;W # CJK STROKE SW
+31C5;W # CJK STROKE HZZ
+31C6;W # CJK STROKE HZG
+31C7;W # CJK STROKE HP
+31C8;W # CJK STROKE HZWG
+31C9;W # CJK STROKE SZWG
+31CA;W # CJK STROKE HZT
+31CB;W # CJK STROKE HZZP
+31CC;W # CJK STROKE HPWG
+31CD;W # CJK STROKE HZW
+31CE;W # CJK STROKE HZZZ
+31CF;W # CJK STROKE N
+31F0;W # KATAKANA LETTER SMALL KU
+31F1;W # KATAKANA LETTER SMALL SI
+31F2;W # KATAKANA LETTER SMALL SU
+31F3;W # KATAKANA LETTER SMALL TO
+31F4;W # KATAKANA LETTER SMALL NU
+31F5;W # KATAKANA LETTER SMALL HA
+31F6;W # KATAKANA LETTER SMALL HI
+31F7;W # KATAKANA LETTER SMALL HU
+31F8;W # KATAKANA LETTER SMALL HE
+31F9;W # KATAKANA LETTER SMALL HO
+31FA;W # KATAKANA LETTER SMALL MU
+31FB;W # KATAKANA LETTER SMALL RA
+31FC;W # KATAKANA LETTER SMALL RI
+31FD;W # KATAKANA LETTER SMALL RU
+31FE;W # KATAKANA LETTER SMALL RE
+31FF;W # KATAKANA LETTER SMALL RO
+3200;W # PARENTHESIZED HANGUL KIYEOK
+3201;W # PARENTHESIZED HANGUL NIEUN
+3202;W # PARENTHESIZED HANGUL TIKEUT
+3203;W # PARENTHESIZED HANGUL RIEUL
+3204;W # PARENTHESIZED HANGUL MIEUM
+3205;W # PARENTHESIZED HANGUL PIEUP
+3206;W # PARENTHESIZED HANGUL SIOS
+3207;W # PARENTHESIZED HANGUL IEUNG
+3208;W # PARENTHESIZED HANGUL CIEUC
+3209;W # PARENTHESIZED HANGUL CHIEUCH
+320A;W # PARENTHESIZED HANGUL KHIEUKH
+320B;W # PARENTHESIZED HANGUL THIEUTH
+320C;W # PARENTHESIZED HANGUL PHIEUPH
+320D;W # PARENTHESIZED HANGUL HIEUH
+320E;W # PARENTHESIZED HANGUL KIYEOK A
+320F;W # PARENTHESIZED HANGUL NIEUN A
+3210;W # PARENTHESIZED HANGUL TIKEUT A
+3211;W # PARENTHESIZED HANGUL RIEUL A
+3212;W # PARENTHESIZED HANGUL MIEUM A
+3213;W # PARENTHESIZED HANGUL PIEUP A
+3214;W # PARENTHESIZED HANGUL SIOS A
+3215;W # PARENTHESIZED HANGUL IEUNG A
+3216;W # PARENTHESIZED HANGUL CIEUC A
+3217;W # PARENTHESIZED HANGUL CHIEUCH A
+3218;W # PARENTHESIZED HANGUL KHIEUKH A
+3219;W # PARENTHESIZED HANGUL THIEUTH A
+321A;W # PARENTHESIZED HANGUL PHIEUPH A
+321B;W # PARENTHESIZED HANGUL HIEUH A
+321C;W # PARENTHESIZED HANGUL CIEUC U
+321D;W # PARENTHESIZED KOREAN CHARACTER OJEON
+321E;W # PARENTHESIZED KOREAN CHARACTER O HU
+3220;W # PARENTHESIZED IDEOGRAPH ONE
+3221;W # PARENTHESIZED IDEOGRAPH TWO
+3222;W # PARENTHESIZED IDEOGRAPH THREE
+3223;W # PARENTHESIZED IDEOGRAPH FOUR
+3224;W # PARENTHESIZED IDEOGRAPH FIVE
+3225;W # PARENTHESIZED IDEOGRAPH SIX
+3226;W # PARENTHESIZED IDEOGRAPH SEVEN
+3227;W # PARENTHESIZED IDEOGRAPH EIGHT
+3228;W # PARENTHESIZED IDEOGRAPH NINE
+3229;W # PARENTHESIZED IDEOGRAPH TEN
+322A;W # PARENTHESIZED IDEOGRAPH MOON
+322B;W # PARENTHESIZED IDEOGRAPH FIRE
+322C;W # PARENTHESIZED IDEOGRAPH WATER
+322D;W # PARENTHESIZED IDEOGRAPH WOOD
+322E;W # PARENTHESIZED IDEOGRAPH METAL
+322F;W # PARENTHESIZED IDEOGRAPH EARTH
+3230;W # PARENTHESIZED IDEOGRAPH SUN
+3231;W # PARENTHESIZED IDEOGRAPH STOCK
+3232;W # PARENTHESIZED IDEOGRAPH HAVE
+3233;W # PARENTHESIZED IDEOGRAPH SOCIETY
+3234;W # PARENTHESIZED IDEOGRAPH NAME
+3235;W # PARENTHESIZED IDEOGRAPH SPECIAL
+3236;W # PARENTHESIZED IDEOGRAPH FINANCIAL
+3237;W # PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238;W # PARENTHESIZED IDEOGRAPH LABOR
+3239;W # PARENTHESIZED IDEOGRAPH REPRESENT
+323A;W # PARENTHESIZED IDEOGRAPH CALL
+323B;W # PARENTHESIZED IDEOGRAPH STUDY
+323C;W # PARENTHESIZED IDEOGRAPH SUPERVISE
+323D;W # PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E;W # PARENTHESIZED IDEOGRAPH RESOURCE
+323F;W # PARENTHESIZED IDEOGRAPH ALLIANCE
+3240;W # PARENTHESIZED IDEOGRAPH FESTIVAL
+3241;W # PARENTHESIZED IDEOGRAPH REST
+3242;W # PARENTHESIZED IDEOGRAPH SELF
+3243;W # PARENTHESIZED IDEOGRAPH REACH
+3250;W # PARTNERSHIP SIGN
+3251;W # CIRCLED NUMBER TWENTY ONE
+3252;W # CIRCLED NUMBER TWENTY TWO
+3253;W # CIRCLED NUMBER TWENTY THREE
+3254;W # CIRCLED NUMBER TWENTY FOUR
+3255;W # CIRCLED NUMBER TWENTY FIVE
+3256;W # CIRCLED NUMBER TWENTY SIX
+3257;W # CIRCLED NUMBER TWENTY SEVEN
+3258;W # CIRCLED NUMBER TWENTY EIGHT
+3259;W # CIRCLED NUMBER TWENTY NINE
+325A;W # CIRCLED NUMBER THIRTY
+325B;W # CIRCLED NUMBER THIRTY ONE
+325C;W # CIRCLED NUMBER THIRTY TWO
+325D;W # CIRCLED NUMBER THIRTY THREE
+325E;W # CIRCLED NUMBER THIRTY FOUR
+325F;W # CIRCLED NUMBER THIRTY FIVE
+3260;W # CIRCLED HANGUL KIYEOK
+3261;W # CIRCLED HANGUL NIEUN
+3262;W # CIRCLED HANGUL TIKEUT
+3263;W # CIRCLED HANGUL RIEUL
+3264;W # CIRCLED HANGUL MIEUM
+3265;W # CIRCLED HANGUL PIEUP
+3266;W # CIRCLED HANGUL SIOS
+3267;W # CIRCLED HANGUL IEUNG
+3268;W # CIRCLED HANGUL CIEUC
+3269;W # CIRCLED HANGUL CHIEUCH
+326A;W # CIRCLED HANGUL KHIEUKH
+326B;W # CIRCLED HANGUL THIEUTH
+326C;W # CIRCLED HANGUL PHIEUPH
+326D;W # CIRCLED HANGUL HIEUH
+326E;W # CIRCLED HANGUL KIYEOK A
+326F;W # CIRCLED HANGUL NIEUN A
+3270;W # CIRCLED HANGUL TIKEUT A
+3271;W # CIRCLED HANGUL RIEUL A
+3272;W # CIRCLED HANGUL MIEUM A
+3273;W # CIRCLED HANGUL PIEUP A
+3274;W # CIRCLED HANGUL SIOS A
+3275;W # CIRCLED HANGUL IEUNG A
+3276;W # CIRCLED HANGUL CIEUC A
+3277;W # CIRCLED HANGUL CHIEUCH A
+3278;W # CIRCLED HANGUL KHIEUKH A
+3279;W # CIRCLED HANGUL THIEUTH A
+327A;W # CIRCLED HANGUL PHIEUPH A
+327B;W # CIRCLED HANGUL HIEUH A
+327C;W # CIRCLED KOREAN CHARACTER CHAMKO
+327D;W # CIRCLED KOREAN CHARACTER JUEUI
+327E;W # CIRCLED HANGUL IEUNG U
+327F;W # KOREAN STANDARD SYMBOL
+3280;W # CIRCLED IDEOGRAPH ONE
+3281;W # CIRCLED IDEOGRAPH TWO
+3282;W # CIRCLED IDEOGRAPH THREE
+3283;W # CIRCLED IDEOGRAPH FOUR
+3284;W # CIRCLED IDEOGRAPH FIVE
+3285;W # CIRCLED IDEOGRAPH SIX
+3286;W # CIRCLED IDEOGRAPH SEVEN
+3287;W # CIRCLED IDEOGRAPH EIGHT
+3288;W # CIRCLED IDEOGRAPH NINE
+3289;W # CIRCLED IDEOGRAPH TEN
+328A;W # CIRCLED IDEOGRAPH MOON
+328B;W # CIRCLED IDEOGRAPH FIRE
+328C;W # CIRCLED IDEOGRAPH WATER
+328D;W # CIRCLED IDEOGRAPH WOOD
+328E;W # CIRCLED IDEOGRAPH METAL
+328F;W # CIRCLED IDEOGRAPH EARTH
+3290;W # CIRCLED IDEOGRAPH SUN
+3291;W # CIRCLED IDEOGRAPH STOCK
+3292;W # CIRCLED IDEOGRAPH HAVE
+3293;W # CIRCLED IDEOGRAPH SOCIETY
+3294;W # CIRCLED IDEOGRAPH NAME
+3295;W # CIRCLED IDEOGRAPH SPECIAL
+3296;W # CIRCLED IDEOGRAPH FINANCIAL
+3297;W # CIRCLED IDEOGRAPH CONGRATULATION
+3298;W # CIRCLED IDEOGRAPH LABOR
+3299;W # CIRCLED IDEOGRAPH SECRET
+329A;W # CIRCLED IDEOGRAPH MALE
+329B;W # CIRCLED IDEOGRAPH FEMALE
+329C;W # CIRCLED IDEOGRAPH SUITABLE
+329D;W # CIRCLED IDEOGRAPH EXCELLENT
+329E;W # CIRCLED IDEOGRAPH PRINT
+329F;W # CIRCLED IDEOGRAPH ATTENTION
+32A0;W # CIRCLED IDEOGRAPH ITEM
+32A1;W # CIRCLED IDEOGRAPH REST
+32A2;W # CIRCLED IDEOGRAPH COPY
+32A3;W # CIRCLED IDEOGRAPH CORRECT
+32A4;W # CIRCLED IDEOGRAPH HIGH
+32A5;W # CIRCLED IDEOGRAPH CENTRE
+32A6;W # CIRCLED IDEOGRAPH LOW
+32A7;W # CIRCLED IDEOGRAPH LEFT
+32A8;W # CIRCLED IDEOGRAPH RIGHT
+32A9;W # CIRCLED IDEOGRAPH MEDICINE
+32AA;W # CIRCLED IDEOGRAPH RELIGION
+32AB;W # CIRCLED IDEOGRAPH STUDY
+32AC;W # CIRCLED IDEOGRAPH SUPERVISE
+32AD;W # CIRCLED IDEOGRAPH ENTERPRISE
+32AE;W # CIRCLED IDEOGRAPH RESOURCE
+32AF;W # CIRCLED IDEOGRAPH ALLIANCE
+32B0;W # CIRCLED IDEOGRAPH NIGHT
+32B1;W # CIRCLED NUMBER THIRTY SIX
+32B2;W # CIRCLED NUMBER THIRTY SEVEN
+32B3;W # CIRCLED NUMBER THIRTY EIGHT
+32B4;W # CIRCLED NUMBER THIRTY NINE
+32B5;W # CIRCLED NUMBER FORTY
+32B6;W # CIRCLED NUMBER FORTY ONE
+32B7;W # CIRCLED NUMBER FORTY TWO
+32B8;W # CIRCLED NUMBER FORTY THREE
+32B9;W # CIRCLED NUMBER FORTY FOUR
+32BA;W # CIRCLED NUMBER FORTY FIVE
+32BB;W # CIRCLED NUMBER FORTY SIX
+32BC;W # CIRCLED NUMBER FORTY SEVEN
+32BD;W # CIRCLED NUMBER FORTY EIGHT
+32BE;W # CIRCLED NUMBER FORTY NINE
+32BF;W # CIRCLED NUMBER FIFTY
+32C0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC;W # SQUARE HG
+32CD;W # SQUARE ERG
+32CE;W # SQUARE EV
+32CF;W # LIMITED LIABILITY SIGN
+32D0;W # CIRCLED KATAKANA A
+32D1;W # CIRCLED KATAKANA I
+32D2;W # CIRCLED KATAKANA U
+32D3;W # CIRCLED KATAKANA E
+32D4;W # CIRCLED KATAKANA O
+32D5;W # CIRCLED KATAKANA KA
+32D6;W # CIRCLED KATAKANA KI
+32D7;W # CIRCLED KATAKANA KU
+32D8;W # CIRCLED KATAKANA KE
+32D9;W # CIRCLED KATAKANA KO
+32DA;W # CIRCLED KATAKANA SA
+32DB;W # CIRCLED KATAKANA SI
+32DC;W # CIRCLED KATAKANA SU
+32DD;W # CIRCLED KATAKANA SE
+32DE;W # CIRCLED KATAKANA SO
+32DF;W # CIRCLED KATAKANA TA
+32E0;W # CIRCLED KATAKANA TI
+32E1;W # CIRCLED KATAKANA TU
+32E2;W # CIRCLED KATAKANA TE
+32E3;W # CIRCLED KATAKANA TO
+32E4;W # CIRCLED KATAKANA NA
+32E5;W # CIRCLED KATAKANA NI
+32E6;W # CIRCLED KATAKANA NU
+32E7;W # CIRCLED KATAKANA NE
+32E8;W # CIRCLED KATAKANA NO
+32E9;W # CIRCLED KATAKANA HA
+32EA;W # CIRCLED KATAKANA HI
+32EB;W # CIRCLED KATAKANA HU
+32EC;W # CIRCLED KATAKANA HE
+32ED;W # CIRCLED KATAKANA HO
+32EE;W # CIRCLED KATAKANA MA
+32EF;W # CIRCLED KATAKANA MI
+32F0;W # CIRCLED KATAKANA MU
+32F1;W # CIRCLED KATAKANA ME
+32F2;W # CIRCLED KATAKANA MO
+32F3;W # CIRCLED KATAKANA YA
+32F4;W # CIRCLED KATAKANA YU
+32F5;W # CIRCLED KATAKANA YO
+32F6;W # CIRCLED KATAKANA RA
+32F7;W # CIRCLED KATAKANA RI
+32F8;W # CIRCLED KATAKANA RU
+32F9;W # CIRCLED KATAKANA RE
+32FA;W # CIRCLED KATAKANA RO
+32FB;W # CIRCLED KATAKANA WA
+32FC;W # CIRCLED KATAKANA WI
+32FD;W # CIRCLED KATAKANA WE
+32FE;W # CIRCLED KATAKANA WO
+3300;W # SQUARE APAATO
+3301;W # SQUARE ARUHUA
+3302;W # SQUARE ANPEA
+3303;W # SQUARE AARU
+3304;W # SQUARE ININGU
+3305;W # SQUARE INTI
+3306;W # SQUARE UON
+3307;W # SQUARE ESUKUUDO
+3308;W # SQUARE EEKAA
+3309;W # SQUARE ONSU
+330A;W # SQUARE OOMU
+330B;W # SQUARE KAIRI
+330C;W # SQUARE KARATTO
+330D;W # SQUARE KARORII
+330E;W # SQUARE GARON
+330F;W # SQUARE GANMA
+3310;W # SQUARE GIGA
+3311;W # SQUARE GINII
+3312;W # SQUARE KYURII
+3313;W # SQUARE GIRUDAA
+3314;W # SQUARE KIRO
+3315;W # SQUARE KIROGURAMU
+3316;W # SQUARE KIROMEETORU
+3317;W # SQUARE KIROWATTO
+3318;W # SQUARE GURAMU
+3319;W # SQUARE GURAMUTON
+331A;W # SQUARE KURUZEIRO
+331B;W # SQUARE KUROONE
+331C;W # SQUARE KEESU
+331D;W # SQUARE KORUNA
+331E;W # SQUARE KOOPO
+331F;W # SQUARE SAIKURU
+3320;W # SQUARE SANTIIMU
+3321;W # SQUARE SIRINGU
+3322;W # SQUARE SENTI
+3323;W # SQUARE SENTO
+3324;W # SQUARE DAASU
+3325;W # SQUARE DESI
+3326;W # SQUARE DORU
+3327;W # SQUARE TON
+3328;W # SQUARE NANO
+3329;W # SQUARE NOTTO
+332A;W # SQUARE HAITU
+332B;W # SQUARE PAASENTO
+332C;W # SQUARE PAATU
+332D;W # SQUARE BAARERU
+332E;W # SQUARE PIASUTORU
+332F;W # SQUARE PIKURU
+3330;W # SQUARE PIKO
+3331;W # SQUARE BIRU
+3332;W # SQUARE HUARADDO
+3333;W # SQUARE HUIITO
+3334;W # SQUARE BUSSYERU
+3335;W # SQUARE HURAN
+3336;W # SQUARE HEKUTAARU
+3337;W # SQUARE PESO
+3338;W # SQUARE PENIHI
+3339;W # SQUARE HERUTU
+333A;W # SQUARE PENSU
+333B;W # SQUARE PEEZI
+333C;W # SQUARE BEETA
+333D;W # SQUARE POINTO
+333E;W # SQUARE BORUTO
+333F;W # SQUARE HON
+3340;W # SQUARE PONDO
+3341;W # SQUARE HOORU
+3342;W # SQUARE HOON
+3343;W # SQUARE MAIKURO
+3344;W # SQUARE MAIRU
+3345;W # SQUARE MAHHA
+3346;W # SQUARE MARUKU
+3347;W # SQUARE MANSYON
+3348;W # SQUARE MIKURON
+3349;W # SQUARE MIRI
+334A;W # SQUARE MIRIBAARU
+334B;W # SQUARE MEGA
+334C;W # SQUARE MEGATON
+334D;W # SQUARE MEETORU
+334E;W # SQUARE YAADO
+334F;W # SQUARE YAARU
+3350;W # SQUARE YUAN
+3351;W # SQUARE RITTORU
+3352;W # SQUARE RIRA
+3353;W # SQUARE RUPII
+3354;W # SQUARE RUUBURU
+3355;W # SQUARE REMU
+3356;W # SQUARE RENTOGEN
+3357;W # SQUARE WATTO
+3358;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371;W # SQUARE HPA
+3372;W # SQUARE DA
+3373;W # SQUARE AU
+3374;W # SQUARE BAR
+3375;W # SQUARE OV
+3376;W # SQUARE PC
+3377;W # SQUARE DM
+3378;W # SQUARE DM SQUARED
+3379;W # SQUARE DM CUBED
+337A;W # SQUARE IU
+337B;W # SQUARE ERA NAME HEISEI
+337C;W # SQUARE ERA NAME SYOUWA
+337D;W # SQUARE ERA NAME TAISYOU
+337E;W # SQUARE ERA NAME MEIZI
+337F;W # SQUARE CORPORATION
+3380;W # SQUARE PA AMPS
+3381;W # SQUARE NA
+3382;W # SQUARE MU A
+3383;W # SQUARE MA
+3384;W # SQUARE KA
+3385;W # SQUARE KB
+3386;W # SQUARE MB
+3387;W # SQUARE GB
+3388;W # SQUARE CAL
+3389;W # SQUARE KCAL
+338A;W # SQUARE PF
+338B;W # SQUARE NF
+338C;W # SQUARE MU F
+338D;W # SQUARE MU G
+338E;W # SQUARE MG
+338F;W # SQUARE KG
+3390;W # SQUARE HZ
+3391;W # SQUARE KHZ
+3392;W # SQUARE MHZ
+3393;W # SQUARE GHZ
+3394;W # SQUARE THZ
+3395;W # SQUARE MU L
+3396;W # SQUARE ML
+3397;W # SQUARE DL
+3398;W # SQUARE KL
+3399;W # SQUARE FM
+339A;W # SQUARE NM
+339B;W # SQUARE MU M
+339C;W # SQUARE MM
+339D;W # SQUARE CM
+339E;W # SQUARE KM
+339F;W # SQUARE MM SQUARED
+33A0;W # SQUARE CM SQUARED
+33A1;W # SQUARE M SQUARED
+33A2;W # SQUARE KM SQUARED
+33A3;W # SQUARE MM CUBED
+33A4;W # SQUARE CM CUBED
+33A5;W # SQUARE M CUBED
+33A6;W # SQUARE KM CUBED
+33A7;W # SQUARE M OVER S
+33A8;W # SQUARE M OVER S SQUARED
+33A9;W # SQUARE PA
+33AA;W # SQUARE KPA
+33AB;W # SQUARE MPA
+33AC;W # SQUARE GPA
+33AD;W # SQUARE RAD
+33AE;W # SQUARE RAD OVER S
+33AF;W # SQUARE RAD OVER S SQUARED
+33B0;W # SQUARE PS
+33B1;W # SQUARE NS
+33B2;W # SQUARE MU S
+33B3;W # SQUARE MS
+33B4;W # SQUARE PV
+33B5;W # SQUARE NV
+33B6;W # SQUARE MU V
+33B7;W # SQUARE MV
+33B8;W # SQUARE KV
+33B9;W # SQUARE MV MEGA
+33BA;W # SQUARE PW
+33BB;W # SQUARE NW
+33BC;W # SQUARE MU W
+33BD;W # SQUARE MW
+33BE;W # SQUARE KW
+33BF;W # SQUARE MW MEGA
+33C0;W # SQUARE K OHM
+33C1;W # SQUARE M OHM
+33C2;W # SQUARE AM
+33C3;W # SQUARE BQ
+33C4;W # SQUARE CC
+33C5;W # SQUARE CD
+33C6;W # SQUARE C OVER KG
+33C7;W # SQUARE CO
+33C8;W # SQUARE DB
+33C9;W # SQUARE GY
+33CA;W # SQUARE HA
+33CB;W # SQUARE HP
+33CC;W # SQUARE IN
+33CD;W # SQUARE KK
+33CE;W # SQUARE KM CAPITAL
+33CF;W # SQUARE KT
+33D0;W # SQUARE LM
+33D1;W # SQUARE LN
+33D2;W # SQUARE LOG
+33D3;W # SQUARE LX
+33D4;W # SQUARE MB SMALL
+33D5;W # SQUARE MIL
+33D6;W # SQUARE MOL
+33D7;W # SQUARE PH
+33D8;W # SQUARE PM
+33D9;W # SQUARE PPM
+33DA;W # SQUARE PR
+33DB;W # SQUARE SR
+33DC;W # SQUARE SV
+33DD;W # SQUARE WB
+33DE;W # SQUARE V OVER M
+33DF;W # SQUARE A OVER M
+33E0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE;W # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF;W # SQUARE GAL
+3400..4DB5;W # <CJK Ideograph Extension A, First>..<CJK Ideograph Extension A, Last>
+4DC0;N # HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1;N # HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2;N # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3;N # HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4;N # HEXAGRAM FOR WAITING
+4DC5;N # HEXAGRAM FOR CONFLICT
+4DC6;N # HEXAGRAM FOR THE ARMY
+4DC7;N # HEXAGRAM FOR HOLDING TOGETHER
+4DC8;N # HEXAGRAM FOR SMALL TAMING
+4DC9;N # HEXAGRAM FOR TREADING
+4DCA;N # HEXAGRAM FOR PEACE
+4DCB;N # HEXAGRAM FOR STANDSTILL
+4DCC;N # HEXAGRAM FOR FELLOWSHIP
+4DCD;N # HEXAGRAM FOR GREAT POSSESSION
+4DCE;N # HEXAGRAM FOR MODESTY
+4DCF;N # HEXAGRAM FOR ENTHUSIASM
+4DD0;N # HEXAGRAM FOR FOLLOWING
+4DD1;N # HEXAGRAM FOR WORK ON THE DECAYED
+4DD2;N # HEXAGRAM FOR APPROACH
+4DD3;N # HEXAGRAM FOR CONTEMPLATION
+4DD4;N # HEXAGRAM FOR BITING THROUGH
+4DD5;N # HEXAGRAM FOR GRACE
+4DD6;N # HEXAGRAM FOR SPLITTING APART
+4DD7;N # HEXAGRAM FOR RETURN
+4DD8;N # HEXAGRAM FOR INNOCENCE
+4DD9;N # HEXAGRAM FOR GREAT TAMING
+4DDA;N # HEXAGRAM FOR MOUTH CORNERS
+4DDB;N # HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC;N # HEXAGRAM FOR THE ABYSMAL WATER
+4DDD;N # HEXAGRAM FOR THE CLINGING FIRE
+4DDE;N # HEXAGRAM FOR INFLUENCE
+4DDF;N # HEXAGRAM FOR DURATION
+4DE0;N # HEXAGRAM FOR RETREAT
+4DE1;N # HEXAGRAM FOR GREAT POWER
+4DE2;N # HEXAGRAM FOR PROGRESS
+4DE3;N # HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4;N # HEXAGRAM FOR THE FAMILY
+4DE5;N # HEXAGRAM FOR OPPOSITION
+4DE6;N # HEXAGRAM FOR OBSTRUCTION
+4DE7;N # HEXAGRAM FOR DELIVERANCE
+4DE8;N # HEXAGRAM FOR DECREASE
+4DE9;N # HEXAGRAM FOR INCREASE
+4DEA;N # HEXAGRAM FOR BREAKTHROUGH
+4DEB;N # HEXAGRAM FOR COMING TO MEET
+4DEC;N # HEXAGRAM FOR GATHERING TOGETHER
+4DED;N # HEXAGRAM FOR PUSHING UPWARD
+4DEE;N # HEXAGRAM FOR OPPRESSION
+4DEF;N # HEXAGRAM FOR THE WELL
+4DF0;N # HEXAGRAM FOR REVOLUTION
+4DF1;N # HEXAGRAM FOR THE CAULDRON
+4DF2;N # HEXAGRAM FOR THE AROUSING THUNDER
+4DF3;N # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4;N # HEXAGRAM FOR DEVELOPMENT
+4DF5;N # HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6;N # HEXAGRAM FOR ABUNDANCE
+4DF7;N # HEXAGRAM FOR THE WANDERER
+4DF8;N # HEXAGRAM FOR THE GENTLE WIND
+4DF9;N # HEXAGRAM FOR THE JOYOUS LAKE
+4DFA;N # HEXAGRAM FOR DISPERSION
+4DFB;N # HEXAGRAM FOR LIMITATION
+4DFC;N # HEXAGRAM FOR INNER TRUTH
+4DFD;N # HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE;N # HEXAGRAM FOR AFTER COMPLETION
+4DFF;N # HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FBB;W # <CJK Ideograph, First>..<CJK Ideograph, Last>
+A000;W # YI SYLLABLE IT
+A001;W # YI SYLLABLE IX
+A002;W # YI SYLLABLE I
+A003;W # YI SYLLABLE IP
+A004;W # YI SYLLABLE IET
+A005;W # YI SYLLABLE IEX
+A006;W # YI SYLLABLE IE
+A007;W # YI SYLLABLE IEP
+A008;W # YI SYLLABLE AT
+A009;W # YI SYLLABLE AX
+A00A;W # YI SYLLABLE A
+A00B;W # YI SYLLABLE AP
+A00C;W # YI SYLLABLE UOX
+A00D;W # YI SYLLABLE UO
+A00E;W # YI SYLLABLE UOP
+A00F;W # YI SYLLABLE OT
+A010;W # YI SYLLABLE OX
+A011;W # YI SYLLABLE O
+A012;W # YI SYLLABLE OP
+A013;W # YI SYLLABLE EX
+A014;W # YI SYLLABLE E
+A015;W # YI SYLLABLE WU
+A016;W # YI SYLLABLE BIT
+A017;W # YI SYLLABLE BIX
+A018;W # YI SYLLABLE BI
+A019;W # YI SYLLABLE BIP
+A01A;W # YI SYLLABLE BIET
+A01B;W # YI SYLLABLE BIEX
+A01C;W # YI SYLLABLE BIE
+A01D;W # YI SYLLABLE BIEP
+A01E;W # YI SYLLABLE BAT
+A01F;W # YI SYLLABLE BAX
+A020;W # YI SYLLABLE BA
+A021;W # YI SYLLABLE BAP
+A022;W # YI SYLLABLE BUOX
+A023;W # YI SYLLABLE BUO
+A024;W # YI SYLLABLE BUOP
+A025;W # YI SYLLABLE BOT
+A026;W # YI SYLLABLE BOX
+A027;W # YI SYLLABLE BO
+A028;W # YI SYLLABLE BOP
+A029;W # YI SYLLABLE BEX
+A02A;W # YI SYLLABLE BE
+A02B;W # YI SYLLABLE BEP
+A02C;W # YI SYLLABLE BUT
+A02D;W # YI SYLLABLE BUX
+A02E;W # YI SYLLABLE BU
+A02F;W # YI SYLLABLE BUP
+A030;W # YI SYLLABLE BURX
+A031;W # YI SYLLABLE BUR
+A032;W # YI SYLLABLE BYT
+A033;W # YI SYLLABLE BYX
+A034;W # YI SYLLABLE BY
+A035;W # YI SYLLABLE BYP
+A036;W # YI SYLLABLE BYRX
+A037;W # YI SYLLABLE BYR
+A038;W # YI SYLLABLE PIT
+A039;W # YI SYLLABLE PIX
+A03A;W # YI SYLLABLE PI
+A03B;W # YI SYLLABLE PIP
+A03C;W # YI SYLLABLE PIEX
+A03D;W # YI SYLLABLE PIE
+A03E;W # YI SYLLABLE PIEP
+A03F;W # YI SYLLABLE PAT
+A040;W # YI SYLLABLE PAX
+A041;W # YI SYLLABLE PA
+A042;W # YI SYLLABLE PAP
+A043;W # YI SYLLABLE PUOX
+A044;W # YI SYLLABLE PUO
+A045;W # YI SYLLABLE PUOP
+A046;W # YI SYLLABLE POT
+A047;W # YI SYLLABLE POX
+A048;W # YI SYLLABLE PO
+A049;W # YI SYLLABLE POP
+A04A;W # YI SYLLABLE PUT
+A04B;W # YI SYLLABLE PUX
+A04C;W # YI SYLLABLE PU
+A04D;W # YI SYLLABLE PUP
+A04E;W # YI SYLLABLE PURX
+A04F;W # YI SYLLABLE PUR
+A050;W # YI SYLLABLE PYT
+A051;W # YI SYLLABLE PYX
+A052;W # YI SYLLABLE PY
+A053;W # YI SYLLABLE PYP
+A054;W # YI SYLLABLE PYRX
+A055;W # YI SYLLABLE PYR
+A056;W # YI SYLLABLE BBIT
+A057;W # YI SYLLABLE BBIX
+A058;W # YI SYLLABLE BBI
+A059;W # YI SYLLABLE BBIP
+A05A;W # YI SYLLABLE BBIET
+A05B;W # YI SYLLABLE BBIEX
+A05C;W # YI SYLLABLE BBIE
+A05D;W # YI SYLLABLE BBIEP
+A05E;W # YI SYLLABLE BBAT
+A05F;W # YI SYLLABLE BBAX
+A060;W # YI SYLLABLE BBA
+A061;W # YI SYLLABLE BBAP
+A062;W # YI SYLLABLE BBUOX
+A063;W # YI SYLLABLE BBUO
+A064;W # YI SYLLABLE BBUOP
+A065;W # YI SYLLABLE BBOT
+A066;W # YI SYLLABLE BBOX
+A067;W # YI SYLLABLE BBO
+A068;W # YI SYLLABLE BBOP
+A069;W # YI SYLLABLE BBEX
+A06A;W # YI SYLLABLE BBE
+A06B;W # YI SYLLABLE BBEP
+A06C;W # YI SYLLABLE BBUT
+A06D;W # YI SYLLABLE BBUX
+A06E;W # YI SYLLABLE BBU
+A06F;W # YI SYLLABLE BBUP
+A070;W # YI SYLLABLE BBURX
+A071;W # YI SYLLABLE BBUR
+A072;W # YI SYLLABLE BBYT
+A073;W # YI SYLLABLE BBYX
+A074;W # YI SYLLABLE BBY
+A075;W # YI SYLLABLE BBYP
+A076;W # YI SYLLABLE NBIT
+A077;W # YI SYLLABLE NBIX
+A078;W # YI SYLLABLE NBI
+A079;W # YI SYLLABLE NBIP
+A07A;W # YI SYLLABLE NBIEX
+A07B;W # YI SYLLABLE NBIE
+A07C;W # YI SYLLABLE NBIEP
+A07D;W # YI SYLLABLE NBAT
+A07E;W # YI SYLLABLE NBAX
+A07F;W # YI SYLLABLE NBA
+A080;W # YI SYLLABLE NBAP
+A081;W # YI SYLLABLE NBOT
+A082;W # YI SYLLABLE NBOX
+A083;W # YI SYLLABLE NBO
+A084;W # YI SYLLABLE NBOP
+A085;W # YI SYLLABLE NBUT
+A086;W # YI SYLLABLE NBUX
+A087;W # YI SYLLABLE NBU
+A088;W # YI SYLLABLE NBUP
+A089;W # YI SYLLABLE NBURX
+A08A;W # YI SYLLABLE NBUR
+A08B;W # YI SYLLABLE NBYT
+A08C;W # YI SYLLABLE NBYX
+A08D;W # YI SYLLABLE NBY
+A08E;W # YI SYLLABLE NBYP
+A08F;W # YI SYLLABLE NBYRX
+A090;W # YI SYLLABLE NBYR
+A091;W # YI SYLLABLE HMIT
+A092;W # YI SYLLABLE HMIX
+A093;W # YI SYLLABLE HMI
+A094;W # YI SYLLABLE HMIP
+A095;W # YI SYLLABLE HMIEX
+A096;W # YI SYLLABLE HMIE
+A097;W # YI SYLLABLE HMIEP
+A098;W # YI SYLLABLE HMAT
+A099;W # YI SYLLABLE HMAX
+A09A;W # YI SYLLABLE HMA
+A09B;W # YI SYLLABLE HMAP
+A09C;W # YI SYLLABLE HMUOX
+A09D;W # YI SYLLABLE HMUO
+A09E;W # YI SYLLABLE HMUOP
+A09F;W # YI SYLLABLE HMOT
+A0A0;W # YI SYLLABLE HMOX
+A0A1;W # YI SYLLABLE HMO
+A0A2;W # YI SYLLABLE HMOP
+A0A3;W # YI SYLLABLE HMUT
+A0A4;W # YI SYLLABLE HMUX
+A0A5;W # YI SYLLABLE HMU
+A0A6;W # YI SYLLABLE HMUP
+A0A7;W # YI SYLLABLE HMURX
+A0A8;W # YI SYLLABLE HMUR
+A0A9;W # YI SYLLABLE HMYX
+A0AA;W # YI SYLLABLE HMY
+A0AB;W # YI SYLLABLE HMYP
+A0AC;W # YI SYLLABLE HMYRX
+A0AD;W # YI SYLLABLE HMYR
+A0AE;W # YI SYLLABLE MIT
+A0AF;W # YI SYLLABLE MIX
+A0B0;W # YI SYLLABLE MI
+A0B1;W # YI SYLLABLE MIP
+A0B2;W # YI SYLLABLE MIEX
+A0B3;W # YI SYLLABLE MIE
+A0B4;W # YI SYLLABLE MIEP
+A0B5;W # YI SYLLABLE MAT
+A0B6;W # YI SYLLABLE MAX
+A0B7;W # YI SYLLABLE MA
+A0B8;W # YI SYLLABLE MAP
+A0B9;W # YI SYLLABLE MUOT
+A0BA;W # YI SYLLABLE MUOX
+A0BB;W # YI SYLLABLE MUO
+A0BC;W # YI SYLLABLE MUOP
+A0BD;W # YI SYLLABLE MOT
+A0BE;W # YI SYLLABLE MOX
+A0BF;W # YI SYLLABLE MO
+A0C0;W # YI SYLLABLE MOP
+A0C1;W # YI SYLLABLE MEX
+A0C2;W # YI SYLLABLE ME
+A0C3;W # YI SYLLABLE MUT
+A0C4;W # YI SYLLABLE MUX
+A0C5;W # YI SYLLABLE MU
+A0C6;W # YI SYLLABLE MUP
+A0C7;W # YI SYLLABLE MURX
+A0C8;W # YI SYLLABLE MUR
+A0C9;W # YI SYLLABLE MYT
+A0CA;W # YI SYLLABLE MYX
+A0CB;W # YI SYLLABLE MY
+A0CC;W # YI SYLLABLE MYP
+A0CD;W # YI SYLLABLE FIT
+A0CE;W # YI SYLLABLE FIX
+A0CF;W # YI SYLLABLE FI
+A0D0;W # YI SYLLABLE FIP
+A0D1;W # YI SYLLABLE FAT
+A0D2;W # YI SYLLABLE FAX
+A0D3;W # YI SYLLABLE FA
+A0D4;W # YI SYLLABLE FAP
+A0D5;W # YI SYLLABLE FOX
+A0D6;W # YI SYLLABLE FO
+A0D7;W # YI SYLLABLE FOP
+A0D8;W # YI SYLLABLE FUT
+A0D9;W # YI SYLLABLE FUX
+A0DA;W # YI SYLLABLE FU
+A0DB;W # YI SYLLABLE FUP
+A0DC;W # YI SYLLABLE FURX
+A0DD;W # YI SYLLABLE FUR
+A0DE;W # YI SYLLABLE FYT
+A0DF;W # YI SYLLABLE FYX
+A0E0;W # YI SYLLABLE FY
+A0E1;W # YI SYLLABLE FYP
+A0E2;W # YI SYLLABLE VIT
+A0E3;W # YI SYLLABLE VIX
+A0E4;W # YI SYLLABLE VI
+A0E5;W # YI SYLLABLE VIP
+A0E6;W # YI SYLLABLE VIET
+A0E7;W # YI SYLLABLE VIEX
+A0E8;W # YI SYLLABLE VIE
+A0E9;W # YI SYLLABLE VIEP
+A0EA;W # YI SYLLABLE VAT
+A0EB;W # YI SYLLABLE VAX
+A0EC;W # YI SYLLABLE VA
+A0ED;W # YI SYLLABLE VAP
+A0EE;W # YI SYLLABLE VOT
+A0EF;W # YI SYLLABLE VOX
+A0F0;W # YI SYLLABLE VO
+A0F1;W # YI SYLLABLE VOP
+A0F2;W # YI SYLLABLE VEX
+A0F3;W # YI SYLLABLE VEP
+A0F4;W # YI SYLLABLE VUT
+A0F5;W # YI SYLLABLE VUX
+A0F6;W # YI SYLLABLE VU
+A0F7;W # YI SYLLABLE VUP
+A0F8;W # YI SYLLABLE VURX
+A0F9;W # YI SYLLABLE VUR
+A0FA;W # YI SYLLABLE VYT
+A0FB;W # YI SYLLABLE VYX
+A0FC;W # YI SYLLABLE VY
+A0FD;W # YI SYLLABLE VYP
+A0FE;W # YI SYLLABLE VYRX
+A0FF;W # YI SYLLABLE VYR
+A100;W # YI SYLLABLE DIT
+A101;W # YI SYLLABLE DIX
+A102;W # YI SYLLABLE DI
+A103;W # YI SYLLABLE DIP
+A104;W # YI SYLLABLE DIEX
+A105;W # YI SYLLABLE DIE
+A106;W # YI SYLLABLE DIEP
+A107;W # YI SYLLABLE DAT
+A108;W # YI SYLLABLE DAX
+A109;W # YI SYLLABLE DA
+A10A;W # YI SYLLABLE DAP
+A10B;W # YI SYLLABLE DUOX
+A10C;W # YI SYLLABLE DUO
+A10D;W # YI SYLLABLE DOT
+A10E;W # YI SYLLABLE DOX
+A10F;W # YI SYLLABLE DO
+A110;W # YI SYLLABLE DOP
+A111;W # YI SYLLABLE DEX
+A112;W # YI SYLLABLE DE
+A113;W # YI SYLLABLE DEP
+A114;W # YI SYLLABLE DUT
+A115;W # YI SYLLABLE DUX
+A116;W # YI SYLLABLE DU
+A117;W # YI SYLLABLE DUP
+A118;W # YI SYLLABLE DURX
+A119;W # YI SYLLABLE DUR
+A11A;W # YI SYLLABLE TIT
+A11B;W # YI SYLLABLE TIX
+A11C;W # YI SYLLABLE TI
+A11D;W # YI SYLLABLE TIP
+A11E;W # YI SYLLABLE TIEX
+A11F;W # YI SYLLABLE TIE
+A120;W # YI SYLLABLE TIEP
+A121;W # YI SYLLABLE TAT
+A122;W # YI SYLLABLE TAX
+A123;W # YI SYLLABLE TA
+A124;W # YI SYLLABLE TAP
+A125;W # YI SYLLABLE TUOT
+A126;W # YI SYLLABLE TUOX
+A127;W # YI SYLLABLE TUO
+A128;W # YI SYLLABLE TUOP
+A129;W # YI SYLLABLE TOT
+A12A;W # YI SYLLABLE TOX
+A12B;W # YI SYLLABLE TO
+A12C;W # YI SYLLABLE TOP
+A12D;W # YI SYLLABLE TEX
+A12E;W # YI SYLLABLE TE
+A12F;W # YI SYLLABLE TEP
+A130;W # YI SYLLABLE TUT
+A131;W # YI SYLLABLE TUX
+A132;W # YI SYLLABLE TU
+A133;W # YI SYLLABLE TUP
+A134;W # YI SYLLABLE TURX
+A135;W # YI SYLLABLE TUR
+A136;W # YI SYLLABLE DDIT
+A137;W # YI SYLLABLE DDIX
+A138;W # YI SYLLABLE DDI
+A139;W # YI SYLLABLE DDIP
+A13A;W # YI SYLLABLE DDIEX
+A13B;W # YI SYLLABLE DDIE
+A13C;W # YI SYLLABLE DDIEP
+A13D;W # YI SYLLABLE DDAT
+A13E;W # YI SYLLABLE DDAX
+A13F;W # YI SYLLABLE DDA
+A140;W # YI SYLLABLE DDAP
+A141;W # YI SYLLABLE DDUOX
+A142;W # YI SYLLABLE DDUO
+A143;W # YI SYLLABLE DDUOP
+A144;W # YI SYLLABLE DDOT
+A145;W # YI SYLLABLE DDOX
+A146;W # YI SYLLABLE DDO
+A147;W # YI SYLLABLE DDOP
+A148;W # YI SYLLABLE DDEX
+A149;W # YI SYLLABLE DDE
+A14A;W # YI SYLLABLE DDEP
+A14B;W # YI SYLLABLE DDUT
+A14C;W # YI SYLLABLE DDUX
+A14D;W # YI SYLLABLE DDU
+A14E;W # YI SYLLABLE DDUP
+A14F;W # YI SYLLABLE DDURX
+A150;W # YI SYLLABLE DDUR
+A151;W # YI SYLLABLE NDIT
+A152;W # YI SYLLABLE NDIX
+A153;W # YI SYLLABLE NDI
+A154;W # YI SYLLABLE NDIP
+A155;W # YI SYLLABLE NDIEX
+A156;W # YI SYLLABLE NDIE
+A157;W # YI SYLLABLE NDAT
+A158;W # YI SYLLABLE NDAX
+A159;W # YI SYLLABLE NDA
+A15A;W # YI SYLLABLE NDAP
+A15B;W # YI SYLLABLE NDOT
+A15C;W # YI SYLLABLE NDOX
+A15D;W # YI SYLLABLE NDO
+A15E;W # YI SYLLABLE NDOP
+A15F;W # YI SYLLABLE NDEX
+A160;W # YI SYLLABLE NDE
+A161;W # YI SYLLABLE NDEP
+A162;W # YI SYLLABLE NDUT
+A163;W # YI SYLLABLE NDUX
+A164;W # YI SYLLABLE NDU
+A165;W # YI SYLLABLE NDUP
+A166;W # YI SYLLABLE NDURX
+A167;W # YI SYLLABLE NDUR
+A168;W # YI SYLLABLE HNIT
+A169;W # YI SYLLABLE HNIX
+A16A;W # YI SYLLABLE HNI
+A16B;W # YI SYLLABLE HNIP
+A16C;W # YI SYLLABLE HNIET
+A16D;W # YI SYLLABLE HNIEX
+A16E;W # YI SYLLABLE HNIE
+A16F;W # YI SYLLABLE HNIEP
+A170;W # YI SYLLABLE HNAT
+A171;W # YI SYLLABLE HNAX
+A172;W # YI SYLLABLE HNA
+A173;W # YI SYLLABLE HNAP
+A174;W # YI SYLLABLE HNUOX
+A175;W # YI SYLLABLE HNUO
+A176;W # YI SYLLABLE HNOT
+A177;W # YI SYLLABLE HNOX
+A178;W # YI SYLLABLE HNOP
+A179;W # YI SYLLABLE HNEX
+A17A;W # YI SYLLABLE HNE
+A17B;W # YI SYLLABLE HNEP
+A17C;W # YI SYLLABLE HNUT
+A17D;W # YI SYLLABLE NIT
+A17E;W # YI SYLLABLE NIX
+A17F;W # YI SYLLABLE NI
+A180;W # YI SYLLABLE NIP
+A181;W # YI SYLLABLE NIEX
+A182;W # YI SYLLABLE NIE
+A183;W # YI SYLLABLE NIEP
+A184;W # YI SYLLABLE NAX
+A185;W # YI SYLLABLE NA
+A186;W # YI SYLLABLE NAP
+A187;W # YI SYLLABLE NUOX
+A188;W # YI SYLLABLE NUO
+A189;W # YI SYLLABLE NUOP
+A18A;W # YI SYLLABLE NOT
+A18B;W # YI SYLLABLE NOX
+A18C;W # YI SYLLABLE NO
+A18D;W # YI SYLLABLE NOP
+A18E;W # YI SYLLABLE NEX
+A18F;W # YI SYLLABLE NE
+A190;W # YI SYLLABLE NEP
+A191;W # YI SYLLABLE NUT
+A192;W # YI SYLLABLE NUX
+A193;W # YI SYLLABLE NU
+A194;W # YI SYLLABLE NUP
+A195;W # YI SYLLABLE NURX
+A196;W # YI SYLLABLE NUR
+A197;W # YI SYLLABLE HLIT
+A198;W # YI SYLLABLE HLIX
+A199;W # YI SYLLABLE HLI
+A19A;W # YI SYLLABLE HLIP
+A19B;W # YI SYLLABLE HLIEX
+A19C;W # YI SYLLABLE HLIE
+A19D;W # YI SYLLABLE HLIEP
+A19E;W # YI SYLLABLE HLAT
+A19F;W # YI SYLLABLE HLAX
+A1A0;W # YI SYLLABLE HLA
+A1A1;W # YI SYLLABLE HLAP
+A1A2;W # YI SYLLABLE HLUOX
+A1A3;W # YI SYLLABLE HLUO
+A1A4;W # YI SYLLABLE HLUOP
+A1A5;W # YI SYLLABLE HLOX
+A1A6;W # YI SYLLABLE HLO
+A1A7;W # YI SYLLABLE HLOP
+A1A8;W # YI SYLLABLE HLEX
+A1A9;W # YI SYLLABLE HLE
+A1AA;W # YI SYLLABLE HLEP
+A1AB;W # YI SYLLABLE HLUT
+A1AC;W # YI SYLLABLE HLUX
+A1AD;W # YI SYLLABLE HLU
+A1AE;W # YI SYLLABLE HLUP
+A1AF;W # YI SYLLABLE HLURX
+A1B0;W # YI SYLLABLE HLUR
+A1B1;W # YI SYLLABLE HLYT
+A1B2;W # YI SYLLABLE HLYX
+A1B3;W # YI SYLLABLE HLY
+A1B4;W # YI SYLLABLE HLYP
+A1B5;W # YI SYLLABLE HLYRX
+A1B6;W # YI SYLLABLE HLYR
+A1B7;W # YI SYLLABLE LIT
+A1B8;W # YI SYLLABLE LIX
+A1B9;W # YI SYLLABLE LI
+A1BA;W # YI SYLLABLE LIP
+A1BB;W # YI SYLLABLE LIET
+A1BC;W # YI SYLLABLE LIEX
+A1BD;W # YI SYLLABLE LIE
+A1BE;W # YI SYLLABLE LIEP
+A1BF;W # YI SYLLABLE LAT
+A1C0;W # YI SYLLABLE LAX
+A1C1;W # YI SYLLABLE LA
+A1C2;W # YI SYLLABLE LAP
+A1C3;W # YI SYLLABLE LUOT
+A1C4;W # YI SYLLABLE LUOX
+A1C5;W # YI SYLLABLE LUO
+A1C6;W # YI SYLLABLE LUOP
+A1C7;W # YI SYLLABLE LOT
+A1C8;W # YI SYLLABLE LOX
+A1C9;W # YI SYLLABLE LO
+A1CA;W # YI SYLLABLE LOP
+A1CB;W # YI SYLLABLE LEX
+A1CC;W # YI SYLLABLE LE
+A1CD;W # YI SYLLABLE LEP
+A1CE;W # YI SYLLABLE LUT
+A1CF;W # YI SYLLABLE LUX
+A1D0;W # YI SYLLABLE LU
+A1D1;W # YI SYLLABLE LUP
+A1D2;W # YI SYLLABLE LURX
+A1D3;W # YI SYLLABLE LUR
+A1D4;W # YI SYLLABLE LYT
+A1D5;W # YI SYLLABLE LYX
+A1D6;W # YI SYLLABLE LY
+A1D7;W # YI SYLLABLE LYP
+A1D8;W # YI SYLLABLE LYRX
+A1D9;W # YI SYLLABLE LYR
+A1DA;W # YI SYLLABLE GIT
+A1DB;W # YI SYLLABLE GIX
+A1DC;W # YI SYLLABLE GI
+A1DD;W # YI SYLLABLE GIP
+A1DE;W # YI SYLLABLE GIET
+A1DF;W # YI SYLLABLE GIEX
+A1E0;W # YI SYLLABLE GIE
+A1E1;W # YI SYLLABLE GIEP
+A1E2;W # YI SYLLABLE GAT
+A1E3;W # YI SYLLABLE GAX
+A1E4;W # YI SYLLABLE GA
+A1E5;W # YI SYLLABLE GAP
+A1E6;W # YI SYLLABLE GUOT
+A1E7;W # YI SYLLABLE GUOX
+A1E8;W # YI SYLLABLE GUO
+A1E9;W # YI SYLLABLE GUOP
+A1EA;W # YI SYLLABLE GOT
+A1EB;W # YI SYLLABLE GOX
+A1EC;W # YI SYLLABLE GO
+A1ED;W # YI SYLLABLE GOP
+A1EE;W # YI SYLLABLE GET
+A1EF;W # YI SYLLABLE GEX
+A1F0;W # YI SYLLABLE GE
+A1F1;W # YI SYLLABLE GEP
+A1F2;W # YI SYLLABLE GUT
+A1F3;W # YI SYLLABLE GUX
+A1F4;W # YI SYLLABLE GU
+A1F5;W # YI SYLLABLE GUP
+A1F6;W # YI SYLLABLE GURX
+A1F7;W # YI SYLLABLE GUR
+A1F8;W # YI SYLLABLE KIT
+A1F9;W # YI SYLLABLE KIX
+A1FA;W # YI SYLLABLE KI
+A1FB;W # YI SYLLABLE KIP
+A1FC;W # YI SYLLABLE KIEX
+A1FD;W # YI SYLLABLE KIE
+A1FE;W # YI SYLLABLE KIEP
+A1FF;W # YI SYLLABLE KAT
+A200;W # YI SYLLABLE KAX
+A201;W # YI SYLLABLE KA
+A202;W # YI SYLLABLE KAP
+A203;W # YI SYLLABLE KUOX
+A204;W # YI SYLLABLE KUO
+A205;W # YI SYLLABLE KUOP
+A206;W # YI SYLLABLE KOT
+A207;W # YI SYLLABLE KOX
+A208;W # YI SYLLABLE KO
+A209;W # YI SYLLABLE KOP
+A20A;W # YI SYLLABLE KET
+A20B;W # YI SYLLABLE KEX
+A20C;W # YI SYLLABLE KE
+A20D;W # YI SYLLABLE KEP
+A20E;W # YI SYLLABLE KUT
+A20F;W # YI SYLLABLE KUX
+A210;W # YI SYLLABLE KU
+A211;W # YI SYLLABLE KUP
+A212;W # YI SYLLABLE KURX
+A213;W # YI SYLLABLE KUR
+A214;W # YI SYLLABLE GGIT
+A215;W # YI SYLLABLE GGIX
+A216;W # YI SYLLABLE GGI
+A217;W # YI SYLLABLE GGIEX
+A218;W # YI SYLLABLE GGIE
+A219;W # YI SYLLABLE GGIEP
+A21A;W # YI SYLLABLE GGAT
+A21B;W # YI SYLLABLE GGAX
+A21C;W # YI SYLLABLE GGA
+A21D;W # YI SYLLABLE GGAP
+A21E;W # YI SYLLABLE GGUOT
+A21F;W # YI SYLLABLE GGUOX
+A220;W # YI SYLLABLE GGUO
+A221;W # YI SYLLABLE GGUOP
+A222;W # YI SYLLABLE GGOT
+A223;W # YI SYLLABLE GGOX
+A224;W # YI SYLLABLE GGO
+A225;W # YI SYLLABLE GGOP
+A226;W # YI SYLLABLE GGET
+A227;W # YI SYLLABLE GGEX
+A228;W # YI SYLLABLE GGE
+A229;W # YI SYLLABLE GGEP
+A22A;W # YI SYLLABLE GGUT
+A22B;W # YI SYLLABLE GGUX
+A22C;W # YI SYLLABLE GGU
+A22D;W # YI SYLLABLE GGUP
+A22E;W # YI SYLLABLE GGURX
+A22F;W # YI SYLLABLE GGUR
+A230;W # YI SYLLABLE MGIEX
+A231;W # YI SYLLABLE MGIE
+A232;W # YI SYLLABLE MGAT
+A233;W # YI SYLLABLE MGAX
+A234;W # YI SYLLABLE MGA
+A235;W # YI SYLLABLE MGAP
+A236;W # YI SYLLABLE MGUOX
+A237;W # YI SYLLABLE MGUO
+A238;W # YI SYLLABLE MGUOP
+A239;W # YI SYLLABLE MGOT
+A23A;W # YI SYLLABLE MGOX
+A23B;W # YI SYLLABLE MGO
+A23C;W # YI SYLLABLE MGOP
+A23D;W # YI SYLLABLE MGEX
+A23E;W # YI SYLLABLE MGE
+A23F;W # YI SYLLABLE MGEP
+A240;W # YI SYLLABLE MGUT
+A241;W # YI SYLLABLE MGUX
+A242;W # YI SYLLABLE MGU
+A243;W # YI SYLLABLE MGUP
+A244;W # YI SYLLABLE MGURX
+A245;W # YI SYLLABLE MGUR
+A246;W # YI SYLLABLE HXIT
+A247;W # YI SYLLABLE HXIX
+A248;W # YI SYLLABLE HXI
+A249;W # YI SYLLABLE HXIP
+A24A;W # YI SYLLABLE HXIET
+A24B;W # YI SYLLABLE HXIEX
+A24C;W # YI SYLLABLE HXIE
+A24D;W # YI SYLLABLE HXIEP
+A24E;W # YI SYLLABLE HXAT
+A24F;W # YI SYLLABLE HXAX
+A250;W # YI SYLLABLE HXA
+A251;W # YI SYLLABLE HXAP
+A252;W # YI SYLLABLE HXUOT
+A253;W # YI SYLLABLE HXUOX
+A254;W # YI SYLLABLE HXUO
+A255;W # YI SYLLABLE HXUOP
+A256;W # YI SYLLABLE HXOT
+A257;W # YI SYLLABLE HXOX
+A258;W # YI SYLLABLE HXO
+A259;W # YI SYLLABLE HXOP
+A25A;W # YI SYLLABLE HXEX
+A25B;W # YI SYLLABLE HXE
+A25C;W # YI SYLLABLE HXEP
+A25D;W # YI SYLLABLE NGIEX
+A25E;W # YI SYLLABLE NGIE
+A25F;W # YI SYLLABLE NGIEP
+A260;W # YI SYLLABLE NGAT
+A261;W # YI SYLLABLE NGAX
+A262;W # YI SYLLABLE NGA
+A263;W # YI SYLLABLE NGAP
+A264;W # YI SYLLABLE NGUOT
+A265;W # YI SYLLABLE NGUOX
+A266;W # YI SYLLABLE NGUO
+A267;W # YI SYLLABLE NGOT
+A268;W # YI SYLLABLE NGOX
+A269;W # YI SYLLABLE NGO
+A26A;W # YI SYLLABLE NGOP
+A26B;W # YI SYLLABLE NGEX
+A26C;W # YI SYLLABLE NGE
+A26D;W # YI SYLLABLE NGEP
+A26E;W # YI SYLLABLE HIT
+A26F;W # YI SYLLABLE HIEX
+A270;W # YI SYLLABLE HIE
+A271;W # YI SYLLABLE HAT
+A272;W # YI SYLLABLE HAX
+A273;W # YI SYLLABLE HA
+A274;W # YI SYLLABLE HAP
+A275;W # YI SYLLABLE HUOT
+A276;W # YI SYLLABLE HUOX
+A277;W # YI SYLLABLE HUO
+A278;W # YI SYLLABLE HUOP
+A279;W # YI SYLLABLE HOT
+A27A;W # YI SYLLABLE HOX
+A27B;W # YI SYLLABLE HO
+A27C;W # YI SYLLABLE HOP
+A27D;W # YI SYLLABLE HEX
+A27E;W # YI SYLLABLE HE
+A27F;W # YI SYLLABLE HEP
+A280;W # YI SYLLABLE WAT
+A281;W # YI SYLLABLE WAX
+A282;W # YI SYLLABLE WA
+A283;W # YI SYLLABLE WAP
+A284;W # YI SYLLABLE WUOX
+A285;W # YI SYLLABLE WUO
+A286;W # YI SYLLABLE WUOP
+A287;W # YI SYLLABLE WOX
+A288;W # YI SYLLABLE WO
+A289;W # YI SYLLABLE WOP
+A28A;W # YI SYLLABLE WEX
+A28B;W # YI SYLLABLE WE
+A28C;W # YI SYLLABLE WEP
+A28D;W # YI SYLLABLE ZIT
+A28E;W # YI SYLLABLE ZIX
+A28F;W # YI SYLLABLE ZI
+A290;W # YI SYLLABLE ZIP
+A291;W # YI SYLLABLE ZIEX
+A292;W # YI SYLLABLE ZIE
+A293;W # YI SYLLABLE ZIEP
+A294;W # YI SYLLABLE ZAT
+A295;W # YI SYLLABLE ZAX
+A296;W # YI SYLLABLE ZA
+A297;W # YI SYLLABLE ZAP
+A298;W # YI SYLLABLE ZUOX
+A299;W # YI SYLLABLE ZUO
+A29A;W # YI SYLLABLE ZUOP
+A29B;W # YI SYLLABLE ZOT
+A29C;W # YI SYLLABLE ZOX
+A29D;W # YI SYLLABLE ZO
+A29E;W # YI SYLLABLE ZOP
+A29F;W # YI SYLLABLE ZEX
+A2A0;W # YI SYLLABLE ZE
+A2A1;W # YI SYLLABLE ZEP
+A2A2;W # YI SYLLABLE ZUT
+A2A3;W # YI SYLLABLE ZUX
+A2A4;W # YI SYLLABLE ZU
+A2A5;W # YI SYLLABLE ZUP
+A2A6;W # YI SYLLABLE ZURX
+A2A7;W # YI SYLLABLE ZUR
+A2A8;W # YI SYLLABLE ZYT
+A2A9;W # YI SYLLABLE ZYX
+A2AA;W # YI SYLLABLE ZY
+A2AB;W # YI SYLLABLE ZYP
+A2AC;W # YI SYLLABLE ZYRX
+A2AD;W # YI SYLLABLE ZYR
+A2AE;W # YI SYLLABLE CIT
+A2AF;W # YI SYLLABLE CIX
+A2B0;W # YI SYLLABLE CI
+A2B1;W # YI SYLLABLE CIP
+A2B2;W # YI SYLLABLE CIET
+A2B3;W # YI SYLLABLE CIEX
+A2B4;W # YI SYLLABLE CIE
+A2B5;W # YI SYLLABLE CIEP
+A2B6;W # YI SYLLABLE CAT
+A2B7;W # YI SYLLABLE CAX
+A2B8;W # YI SYLLABLE CA
+A2B9;W # YI SYLLABLE CAP
+A2BA;W # YI SYLLABLE CUOX
+A2BB;W # YI SYLLABLE CUO
+A2BC;W # YI SYLLABLE CUOP
+A2BD;W # YI SYLLABLE COT
+A2BE;W # YI SYLLABLE COX
+A2BF;W # YI SYLLABLE CO
+A2C0;W # YI SYLLABLE COP
+A2C1;W # YI SYLLABLE CEX
+A2C2;W # YI SYLLABLE CE
+A2C3;W # YI SYLLABLE CEP
+A2C4;W # YI SYLLABLE CUT
+A2C5;W # YI SYLLABLE CUX
+A2C6;W # YI SYLLABLE CU
+A2C7;W # YI SYLLABLE CUP
+A2C8;W # YI SYLLABLE CURX
+A2C9;W # YI SYLLABLE CUR
+A2CA;W # YI SYLLABLE CYT
+A2CB;W # YI SYLLABLE CYX
+A2CC;W # YI SYLLABLE CY
+A2CD;W # YI SYLLABLE CYP
+A2CE;W # YI SYLLABLE CYRX
+A2CF;W # YI SYLLABLE CYR
+A2D0;W # YI SYLLABLE ZZIT
+A2D1;W # YI SYLLABLE ZZIX
+A2D2;W # YI SYLLABLE ZZI
+A2D3;W # YI SYLLABLE ZZIP
+A2D4;W # YI SYLLABLE ZZIET
+A2D5;W # YI SYLLABLE ZZIEX
+A2D6;W # YI SYLLABLE ZZIE
+A2D7;W # YI SYLLABLE ZZIEP
+A2D8;W # YI SYLLABLE ZZAT
+A2D9;W # YI SYLLABLE ZZAX
+A2DA;W # YI SYLLABLE ZZA
+A2DB;W # YI SYLLABLE ZZAP
+A2DC;W # YI SYLLABLE ZZOX
+A2DD;W # YI SYLLABLE ZZO
+A2DE;W # YI SYLLABLE ZZOP
+A2DF;W # YI SYLLABLE ZZEX
+A2E0;W # YI SYLLABLE ZZE
+A2E1;W # YI SYLLABLE ZZEP
+A2E2;W # YI SYLLABLE ZZUX
+A2E3;W # YI SYLLABLE ZZU
+A2E4;W # YI SYLLABLE ZZUP
+A2E5;W # YI SYLLABLE ZZURX
+A2E6;W # YI SYLLABLE ZZUR
+A2E7;W # YI SYLLABLE ZZYT
+A2E8;W # YI SYLLABLE ZZYX
+A2E9;W # YI SYLLABLE ZZY
+A2EA;W # YI SYLLABLE ZZYP
+A2EB;W # YI SYLLABLE ZZYRX
+A2EC;W # YI SYLLABLE ZZYR
+A2ED;W # YI SYLLABLE NZIT
+A2EE;W # YI SYLLABLE NZIX
+A2EF;W # YI SYLLABLE NZI
+A2F0;W # YI SYLLABLE NZIP
+A2F1;W # YI SYLLABLE NZIEX
+A2F2;W # YI SYLLABLE NZIE
+A2F3;W # YI SYLLABLE NZIEP
+A2F4;W # YI SYLLABLE NZAT
+A2F5;W # YI SYLLABLE NZAX
+A2F6;W # YI SYLLABLE NZA
+A2F7;W # YI SYLLABLE NZAP
+A2F8;W # YI SYLLABLE NZUOX
+A2F9;W # YI SYLLABLE NZUO
+A2FA;W # YI SYLLABLE NZOX
+A2FB;W # YI SYLLABLE NZOP
+A2FC;W # YI SYLLABLE NZEX
+A2FD;W # YI SYLLABLE NZE
+A2FE;W # YI SYLLABLE NZUX
+A2FF;W # YI SYLLABLE NZU
+A300;W # YI SYLLABLE NZUP
+A301;W # YI SYLLABLE NZURX
+A302;W # YI SYLLABLE NZUR
+A303;W # YI SYLLABLE NZYT
+A304;W # YI SYLLABLE NZYX
+A305;W # YI SYLLABLE NZY
+A306;W # YI SYLLABLE NZYP
+A307;W # YI SYLLABLE NZYRX
+A308;W # YI SYLLABLE NZYR
+A309;W # YI SYLLABLE SIT
+A30A;W # YI SYLLABLE SIX
+A30B;W # YI SYLLABLE SI
+A30C;W # YI SYLLABLE SIP
+A30D;W # YI SYLLABLE SIEX
+A30E;W # YI SYLLABLE SIE
+A30F;W # YI SYLLABLE SIEP
+A310;W # YI SYLLABLE SAT
+A311;W # YI SYLLABLE SAX
+A312;W # YI SYLLABLE SA
+A313;W # YI SYLLABLE SAP
+A314;W # YI SYLLABLE SUOX
+A315;W # YI SYLLABLE SUO
+A316;W # YI SYLLABLE SUOP
+A317;W # YI SYLLABLE SOT
+A318;W # YI SYLLABLE SOX
+A319;W # YI SYLLABLE SO
+A31A;W # YI SYLLABLE SOP
+A31B;W # YI SYLLABLE SEX
+A31C;W # YI SYLLABLE SE
+A31D;W # YI SYLLABLE SEP
+A31E;W # YI SYLLABLE SUT
+A31F;W # YI SYLLABLE SUX
+A320;W # YI SYLLABLE SU
+A321;W # YI SYLLABLE SUP
+A322;W # YI SYLLABLE SURX
+A323;W # YI SYLLABLE SUR
+A324;W # YI SYLLABLE SYT
+A325;W # YI SYLLABLE SYX
+A326;W # YI SYLLABLE SY
+A327;W # YI SYLLABLE SYP
+A328;W # YI SYLLABLE SYRX
+A329;W # YI SYLLABLE SYR
+A32A;W # YI SYLLABLE SSIT
+A32B;W # YI SYLLABLE SSIX
+A32C;W # YI SYLLABLE SSI
+A32D;W # YI SYLLABLE SSIP
+A32E;W # YI SYLLABLE SSIEX
+A32F;W # YI SYLLABLE SSIE
+A330;W # YI SYLLABLE SSIEP
+A331;W # YI SYLLABLE SSAT
+A332;W # YI SYLLABLE SSAX
+A333;W # YI SYLLABLE SSA
+A334;W # YI SYLLABLE SSAP
+A335;W # YI SYLLABLE SSOT
+A336;W # YI SYLLABLE SSOX
+A337;W # YI SYLLABLE SSO
+A338;W # YI SYLLABLE SSOP
+A339;W # YI SYLLABLE SSEX
+A33A;W # YI SYLLABLE SSE
+A33B;W # YI SYLLABLE SSEP
+A33C;W # YI SYLLABLE SSUT
+A33D;W # YI SYLLABLE SSUX
+A33E;W # YI SYLLABLE SSU
+A33F;W # YI SYLLABLE SSUP
+A340;W # YI SYLLABLE SSYT
+A341;W # YI SYLLABLE SSYX
+A342;W # YI SYLLABLE SSY
+A343;W # YI SYLLABLE SSYP
+A344;W # YI SYLLABLE SSYRX
+A345;W # YI SYLLABLE SSYR
+A346;W # YI SYLLABLE ZHAT
+A347;W # YI SYLLABLE ZHAX
+A348;W # YI SYLLABLE ZHA
+A349;W # YI SYLLABLE ZHAP
+A34A;W # YI SYLLABLE ZHUOX
+A34B;W # YI SYLLABLE ZHUO
+A34C;W # YI SYLLABLE ZHUOP
+A34D;W # YI SYLLABLE ZHOT
+A34E;W # YI SYLLABLE ZHOX
+A34F;W # YI SYLLABLE ZHO
+A350;W # YI SYLLABLE ZHOP
+A351;W # YI SYLLABLE ZHET
+A352;W # YI SYLLABLE ZHEX
+A353;W # YI SYLLABLE ZHE
+A354;W # YI SYLLABLE ZHEP
+A355;W # YI SYLLABLE ZHUT
+A356;W # YI SYLLABLE ZHUX
+A357;W # YI SYLLABLE ZHU
+A358;W # YI SYLLABLE ZHUP
+A359;W # YI SYLLABLE ZHURX
+A35A;W # YI SYLLABLE ZHUR
+A35B;W # YI SYLLABLE ZHYT
+A35C;W # YI SYLLABLE ZHYX
+A35D;W # YI SYLLABLE ZHY
+A35E;W # YI SYLLABLE ZHYP
+A35F;W # YI SYLLABLE ZHYRX
+A360;W # YI SYLLABLE ZHYR
+A361;W # YI SYLLABLE CHAT
+A362;W # YI SYLLABLE CHAX
+A363;W # YI SYLLABLE CHA
+A364;W # YI SYLLABLE CHAP
+A365;W # YI SYLLABLE CHUOT
+A366;W # YI SYLLABLE CHUOX
+A367;W # YI SYLLABLE CHUO
+A368;W # YI SYLLABLE CHUOP
+A369;W # YI SYLLABLE CHOT
+A36A;W # YI SYLLABLE CHOX
+A36B;W # YI SYLLABLE CHO
+A36C;W # YI SYLLABLE CHOP
+A36D;W # YI SYLLABLE CHET
+A36E;W # YI SYLLABLE CHEX
+A36F;W # YI SYLLABLE CHE
+A370;W # YI SYLLABLE CHEP
+A371;W # YI SYLLABLE CHUX
+A372;W # YI SYLLABLE CHU
+A373;W # YI SYLLABLE CHUP
+A374;W # YI SYLLABLE CHURX
+A375;W # YI SYLLABLE CHUR
+A376;W # YI SYLLABLE CHYT
+A377;W # YI SYLLABLE CHYX
+A378;W # YI SYLLABLE CHY
+A379;W # YI SYLLABLE CHYP
+A37A;W # YI SYLLABLE CHYRX
+A37B;W # YI SYLLABLE CHYR
+A37C;W # YI SYLLABLE RRAX
+A37D;W # YI SYLLABLE RRA
+A37E;W # YI SYLLABLE RRUOX
+A37F;W # YI SYLLABLE RRUO
+A380;W # YI SYLLABLE RROT
+A381;W # YI SYLLABLE RROX
+A382;W # YI SYLLABLE RRO
+A383;W # YI SYLLABLE RROP
+A384;W # YI SYLLABLE RRET
+A385;W # YI SYLLABLE RREX
+A386;W # YI SYLLABLE RRE
+A387;W # YI SYLLABLE RREP
+A388;W # YI SYLLABLE RRUT
+A389;W # YI SYLLABLE RRUX
+A38A;W # YI SYLLABLE RRU
+A38B;W # YI SYLLABLE RRUP
+A38C;W # YI SYLLABLE RRURX
+A38D;W # YI SYLLABLE RRUR
+A38E;W # YI SYLLABLE RRYT
+A38F;W # YI SYLLABLE RRYX
+A390;W # YI SYLLABLE RRY
+A391;W # YI SYLLABLE RRYP
+A392;W # YI SYLLABLE RRYRX
+A393;W # YI SYLLABLE RRYR
+A394;W # YI SYLLABLE NRAT
+A395;W # YI SYLLABLE NRAX
+A396;W # YI SYLLABLE NRA
+A397;W # YI SYLLABLE NRAP
+A398;W # YI SYLLABLE NROX
+A399;W # YI SYLLABLE NRO
+A39A;W # YI SYLLABLE NROP
+A39B;W # YI SYLLABLE NRET
+A39C;W # YI SYLLABLE NREX
+A39D;W # YI SYLLABLE NRE
+A39E;W # YI SYLLABLE NREP
+A39F;W # YI SYLLABLE NRUT
+A3A0;W # YI SYLLABLE NRUX
+A3A1;W # YI SYLLABLE NRU
+A3A2;W # YI SYLLABLE NRUP
+A3A3;W # YI SYLLABLE NRURX
+A3A4;W # YI SYLLABLE NRUR
+A3A5;W # YI SYLLABLE NRYT
+A3A6;W # YI SYLLABLE NRYX
+A3A7;W # YI SYLLABLE NRY
+A3A8;W # YI SYLLABLE NRYP
+A3A9;W # YI SYLLABLE NRYRX
+A3AA;W # YI SYLLABLE NRYR
+A3AB;W # YI SYLLABLE SHAT
+A3AC;W # YI SYLLABLE SHAX
+A3AD;W # YI SYLLABLE SHA
+A3AE;W # YI SYLLABLE SHAP
+A3AF;W # YI SYLLABLE SHUOX
+A3B0;W # YI SYLLABLE SHUO
+A3B1;W # YI SYLLABLE SHUOP
+A3B2;W # YI SYLLABLE SHOT
+A3B3;W # YI SYLLABLE SHOX
+A3B4;W # YI SYLLABLE SHO
+A3B5;W # YI SYLLABLE SHOP
+A3B6;W # YI SYLLABLE SHET
+A3B7;W # YI SYLLABLE SHEX
+A3B8;W # YI SYLLABLE SHE
+A3B9;W # YI SYLLABLE SHEP
+A3BA;W # YI SYLLABLE SHUT
+A3BB;W # YI SYLLABLE SHUX
+A3BC;W # YI SYLLABLE SHU
+A3BD;W # YI SYLLABLE SHUP
+A3BE;W # YI SYLLABLE SHURX
+A3BF;W # YI SYLLABLE SHUR
+A3C0;W # YI SYLLABLE SHYT
+A3C1;W # YI SYLLABLE SHYX
+A3C2;W # YI SYLLABLE SHY
+A3C3;W # YI SYLLABLE SHYP
+A3C4;W # YI SYLLABLE SHYRX
+A3C5;W # YI SYLLABLE SHYR
+A3C6;W # YI SYLLABLE RAT
+A3C7;W # YI SYLLABLE RAX
+A3C8;W # YI SYLLABLE RA
+A3C9;W # YI SYLLABLE RAP
+A3CA;W # YI SYLLABLE RUOX
+A3CB;W # YI SYLLABLE RUO
+A3CC;W # YI SYLLABLE RUOP
+A3CD;W # YI SYLLABLE ROT
+A3CE;W # YI SYLLABLE ROX
+A3CF;W # YI SYLLABLE RO
+A3D0;W # YI SYLLABLE ROP
+A3D1;W # YI SYLLABLE REX
+A3D2;W # YI SYLLABLE RE
+A3D3;W # YI SYLLABLE REP
+A3D4;W # YI SYLLABLE RUT
+A3D5;W # YI SYLLABLE RUX
+A3D6;W # YI SYLLABLE RU
+A3D7;W # YI SYLLABLE RUP
+A3D8;W # YI SYLLABLE RURX
+A3D9;W # YI SYLLABLE RUR
+A3DA;W # YI SYLLABLE RYT
+A3DB;W # YI SYLLABLE RYX
+A3DC;W # YI SYLLABLE RY
+A3DD;W # YI SYLLABLE RYP
+A3DE;W # YI SYLLABLE RYRX
+A3DF;W # YI SYLLABLE RYR
+A3E0;W # YI SYLLABLE JIT
+A3E1;W # YI SYLLABLE JIX
+A3E2;W # YI SYLLABLE JI
+A3E3;W # YI SYLLABLE JIP
+A3E4;W # YI SYLLABLE JIET
+A3E5;W # YI SYLLABLE JIEX
+A3E6;W # YI SYLLABLE JIE
+A3E7;W # YI SYLLABLE JIEP
+A3E8;W # YI SYLLABLE JUOT
+A3E9;W # YI SYLLABLE JUOX
+A3EA;W # YI SYLLABLE JUO
+A3EB;W # YI SYLLABLE JUOP
+A3EC;W # YI SYLLABLE JOT
+A3ED;W # YI SYLLABLE JOX
+A3EE;W # YI SYLLABLE JO
+A3EF;W # YI SYLLABLE JOP
+A3F0;W # YI SYLLABLE JUT
+A3F1;W # YI SYLLABLE JUX
+A3F2;W # YI SYLLABLE JU
+A3F3;W # YI SYLLABLE JUP
+A3F4;W # YI SYLLABLE JURX
+A3F5;W # YI SYLLABLE JUR
+A3F6;W # YI SYLLABLE JYT
+A3F7;W # YI SYLLABLE JYX
+A3F8;W # YI SYLLABLE JY
+A3F9;W # YI SYLLABLE JYP
+A3FA;W # YI SYLLABLE JYRX
+A3FB;W # YI SYLLABLE JYR
+A3FC;W # YI SYLLABLE QIT
+A3FD;W # YI SYLLABLE QIX
+A3FE;W # YI SYLLABLE QI
+A3FF;W # YI SYLLABLE QIP
+A400;W # YI SYLLABLE QIET
+A401;W # YI SYLLABLE QIEX
+A402;W # YI SYLLABLE QIE
+A403;W # YI SYLLABLE QIEP
+A404;W # YI SYLLABLE QUOT
+A405;W # YI SYLLABLE QUOX
+A406;W # YI SYLLABLE QUO
+A407;W # YI SYLLABLE QUOP
+A408;W # YI SYLLABLE QOT
+A409;W # YI SYLLABLE QOX
+A40A;W # YI SYLLABLE QO
+A40B;W # YI SYLLABLE QOP
+A40C;W # YI SYLLABLE QUT
+A40D;W # YI SYLLABLE QUX
+A40E;W # YI SYLLABLE QU
+A40F;W # YI SYLLABLE QUP
+A410;W # YI SYLLABLE QURX
+A411;W # YI SYLLABLE QUR
+A412;W # YI SYLLABLE QYT
+A413;W # YI SYLLABLE QYX
+A414;W # YI SYLLABLE QY
+A415;W # YI SYLLABLE QYP
+A416;W # YI SYLLABLE QYRX
+A417;W # YI SYLLABLE QYR
+A418;W # YI SYLLABLE JJIT
+A419;W # YI SYLLABLE JJIX
+A41A;W # YI SYLLABLE JJI
+A41B;W # YI SYLLABLE JJIP
+A41C;W # YI SYLLABLE JJIET
+A41D;W # YI SYLLABLE JJIEX
+A41E;W # YI SYLLABLE JJIE
+A41F;W # YI SYLLABLE JJIEP
+A420;W # YI SYLLABLE JJUOX
+A421;W # YI SYLLABLE JJUO
+A422;W # YI SYLLABLE JJUOP
+A423;W # YI SYLLABLE JJOT
+A424;W # YI SYLLABLE JJOX
+A425;W # YI SYLLABLE JJO
+A426;W # YI SYLLABLE JJOP
+A427;W # YI SYLLABLE JJUT
+A428;W # YI SYLLABLE JJUX
+A429;W # YI SYLLABLE JJU
+A42A;W # YI SYLLABLE JJUP
+A42B;W # YI SYLLABLE JJURX
+A42C;W # YI SYLLABLE JJUR
+A42D;W # YI SYLLABLE JJYT
+A42E;W # YI SYLLABLE JJYX
+A42F;W # YI SYLLABLE JJY
+A430;W # YI SYLLABLE JJYP
+A431;W # YI SYLLABLE NJIT
+A432;W # YI SYLLABLE NJIX
+A433;W # YI SYLLABLE NJI
+A434;W # YI SYLLABLE NJIP
+A435;W # YI SYLLABLE NJIET
+A436;W # YI SYLLABLE NJIEX
+A437;W # YI SYLLABLE NJIE
+A438;W # YI SYLLABLE NJIEP
+A439;W # YI SYLLABLE NJUOX
+A43A;W # YI SYLLABLE NJUO
+A43B;W # YI SYLLABLE NJOT
+A43C;W # YI SYLLABLE NJOX
+A43D;W # YI SYLLABLE NJO
+A43E;W # YI SYLLABLE NJOP
+A43F;W # YI SYLLABLE NJUX
+A440;W # YI SYLLABLE NJU
+A441;W # YI SYLLABLE NJUP
+A442;W # YI SYLLABLE NJURX
+A443;W # YI SYLLABLE NJUR
+A444;W # YI SYLLABLE NJYT
+A445;W # YI SYLLABLE NJYX
+A446;W # YI SYLLABLE NJY
+A447;W # YI SYLLABLE NJYP
+A448;W # YI SYLLABLE NJYRX
+A449;W # YI SYLLABLE NJYR
+A44A;W # YI SYLLABLE NYIT
+A44B;W # YI SYLLABLE NYIX
+A44C;W # YI SYLLABLE NYI
+A44D;W # YI SYLLABLE NYIP
+A44E;W # YI SYLLABLE NYIET
+A44F;W # YI SYLLABLE NYIEX
+A450;W # YI SYLLABLE NYIE
+A451;W # YI SYLLABLE NYIEP
+A452;W # YI SYLLABLE NYUOX
+A453;W # YI SYLLABLE NYUO
+A454;W # YI SYLLABLE NYUOP
+A455;W # YI SYLLABLE NYOT
+A456;W # YI SYLLABLE NYOX
+A457;W # YI SYLLABLE NYO
+A458;W # YI SYLLABLE NYOP
+A459;W # YI SYLLABLE NYUT
+A45A;W # YI SYLLABLE NYUX
+A45B;W # YI SYLLABLE NYU
+A45C;W # YI SYLLABLE NYUP
+A45D;W # YI SYLLABLE XIT
+A45E;W # YI SYLLABLE XIX
+A45F;W # YI SYLLABLE XI
+A460;W # YI SYLLABLE XIP
+A461;W # YI SYLLABLE XIET
+A462;W # YI SYLLABLE XIEX
+A463;W # YI SYLLABLE XIE
+A464;W # YI SYLLABLE XIEP
+A465;W # YI SYLLABLE XUOX
+A466;W # YI SYLLABLE XUO
+A467;W # YI SYLLABLE XOT
+A468;W # YI SYLLABLE XOX
+A469;W # YI SYLLABLE XO
+A46A;W # YI SYLLABLE XOP
+A46B;W # YI SYLLABLE XYT
+A46C;W # YI SYLLABLE XYX
+A46D;W # YI SYLLABLE XY
+A46E;W # YI SYLLABLE XYP
+A46F;W # YI SYLLABLE XYRX
+A470;W # YI SYLLABLE XYR
+A471;W # YI SYLLABLE YIT
+A472;W # YI SYLLABLE YIX
+A473;W # YI SYLLABLE YI
+A474;W # YI SYLLABLE YIP
+A475;W # YI SYLLABLE YIET
+A476;W # YI SYLLABLE YIEX
+A477;W # YI SYLLABLE YIE
+A478;W # YI SYLLABLE YIEP
+A479;W # YI SYLLABLE YUOT
+A47A;W # YI SYLLABLE YUOX
+A47B;W # YI SYLLABLE YUO
+A47C;W # YI SYLLABLE YUOP
+A47D;W # YI SYLLABLE YOT
+A47E;W # YI SYLLABLE YOX
+A47F;W # YI SYLLABLE YO
+A480;W # YI SYLLABLE YOP
+A481;W # YI SYLLABLE YUT
+A482;W # YI SYLLABLE YUX
+A483;W # YI SYLLABLE YU
+A484;W # YI SYLLABLE YUP
+A485;W # YI SYLLABLE YURX
+A486;W # YI SYLLABLE YUR
+A487;W # YI SYLLABLE YYT
+A488;W # YI SYLLABLE YYX
+A489;W # YI SYLLABLE YY
+A48A;W # YI SYLLABLE YYP
+A48B;W # YI SYLLABLE YYRX
+A48C;W # YI SYLLABLE YYR
+A490;W # YI RADICAL QOT
+A491;W # YI RADICAL LI
+A492;W # YI RADICAL KIT
+A493;W # YI RADICAL NYIP
+A494;W # YI RADICAL CYP
+A495;W # YI RADICAL SSI
+A496;W # YI RADICAL GGOP
+A497;W # YI RADICAL GEP
+A498;W # YI RADICAL MI
+A499;W # YI RADICAL HXIT
+A49A;W # YI RADICAL LYR
+A49B;W # YI RADICAL BBUT
+A49C;W # YI RADICAL MOP
+A49D;W # YI RADICAL YO
+A49E;W # YI RADICAL PUT
+A49F;W # YI RADICAL HXUO
+A4A0;W # YI RADICAL TAT
+A4A1;W # YI RADICAL GA
+A4A2;W # YI RADICAL ZUP
+A4A3;W # YI RADICAL CYT
+A4A4;W # YI RADICAL DDUR
+A4A5;W # YI RADICAL BUR
+A4A6;W # YI RADICAL GGUO
+A4A7;W # YI RADICAL NYOP
+A4A8;W # YI RADICAL TU
+A4A9;W # YI RADICAL OP
+A4AA;W # YI RADICAL JJUT
+A4AB;W # YI RADICAL ZOT
+A4AC;W # YI RADICAL PYT
+A4AD;W # YI RADICAL HMO
+A4AE;W # YI RADICAL YIT
+A4AF;W # YI RADICAL VUR
+A4B0;W # YI RADICAL SHY
+A4B1;W # YI RADICAL VEP
+A4B2;W # YI RADICAL ZA
+A4B3;W # YI RADICAL JO
+A4B4;W # YI RADICAL NZUP
+A4B5;W # YI RADICAL JJY
+A4B6;W # YI RADICAL GOT
+A4B7;W # YI RADICAL JJIE
+A4B8;W # YI RADICAL WO
+A4B9;W # YI RADICAL DU
+A4BA;W # YI RADICAL SHUR
+A4BB;W # YI RADICAL LIE
+A4BC;W # YI RADICAL CY
+A4BD;W # YI RADICAL CUOP
+A4BE;W # YI RADICAL CIP
+A4BF;W # YI RADICAL HXOP
+A4C0;W # YI RADICAL SHAT
+A4C1;W # YI RADICAL ZUR
+A4C2;W # YI RADICAL SHOP
+A4C3;W # YI RADICAL CHE
+A4C4;W # YI RADICAL ZZIET
+A4C5;W # YI RADICAL NBIE
+A4C6;W # YI RADICAL KE
+A700;N # MODIFIER LETTER CHINESE TONE YIN PING
+A701;N # MODIFIER LETTER CHINESE TONE YANG PING
+A702;N # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703;N # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704;N # MODIFIER LETTER CHINESE TONE YIN QU
+A705;N # MODIFIER LETTER CHINESE TONE YANG QU
+A706;N # MODIFIER LETTER CHINESE TONE YIN RU
+A707;N # MODIFIER LETTER CHINESE TONE YANG RU
+A708;N # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709;N # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A;N # MODIFIER LETTER MID DOTTED TONE BAR
+A70B;N # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C;N # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D;N # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E;N # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F;N # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710;N # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711;N # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712;N # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713;N # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714;N # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715;N # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716;N # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A800;N # SYLOTI NAGRI LETTER A
+A801;N # SYLOTI NAGRI LETTER I
+A802;N # SYLOTI NAGRI SIGN DVISVARA
+A803;N # SYLOTI NAGRI LETTER U
+A804;N # SYLOTI NAGRI LETTER E
+A805;N # SYLOTI NAGRI LETTER O
+A806;N # SYLOTI NAGRI SIGN HASANTA
+A807;N # SYLOTI NAGRI LETTER KO
+A808;N # SYLOTI NAGRI LETTER KHO
+A809;N # SYLOTI NAGRI LETTER GO
+A80A;N # SYLOTI NAGRI LETTER GHO
+A80B;N # SYLOTI NAGRI SIGN ANUSVARA
+A80C;N # SYLOTI NAGRI LETTER CO
+A80D;N # SYLOTI NAGRI LETTER CHO
+A80E;N # SYLOTI NAGRI LETTER JO
+A80F;N # SYLOTI NAGRI LETTER JHO
+A810;N # SYLOTI NAGRI LETTER TTO
+A811;N # SYLOTI NAGRI LETTER TTHO
+A812;N # SYLOTI NAGRI LETTER DDO
+A813;N # SYLOTI NAGRI LETTER DDHO
+A814;N # SYLOTI NAGRI LETTER TO
+A815;N # SYLOTI NAGRI LETTER THO
+A816;N # SYLOTI NAGRI LETTER DO
+A817;N # SYLOTI NAGRI LETTER DHO
+A818;N # SYLOTI NAGRI LETTER NO
+A819;N # SYLOTI NAGRI LETTER PO
+A81A;N # SYLOTI NAGRI LETTER PHO
+A81B;N # SYLOTI NAGRI LETTER BO
+A81C;N # SYLOTI NAGRI LETTER BHO
+A81D;N # SYLOTI NAGRI LETTER MO
+A81E;N # SYLOTI NAGRI LETTER RO
+A81F;N # SYLOTI NAGRI LETTER LO
+A820;N # SYLOTI NAGRI LETTER RRO
+A821;N # SYLOTI NAGRI LETTER SO
+A822;N # SYLOTI NAGRI LETTER HO
+A823;N # SYLOTI NAGRI VOWEL SIGN A
+A824;N # SYLOTI NAGRI VOWEL SIGN I
+A825;N # SYLOTI NAGRI VOWEL SIGN U
+A826;N # SYLOTI NAGRI VOWEL SIGN E
+A827;N # SYLOTI NAGRI VOWEL SIGN OO
+A828;N # SYLOTI NAGRI POETRY MARK-1
+A829;N # SYLOTI NAGRI POETRY MARK-2
+A82A;N # SYLOTI NAGRI POETRY MARK-3
+A82B;N # SYLOTI NAGRI POETRY MARK-4
+AC00..D7A3;W # <Hangul Syllable, First>..<Hangul Syllable, Last>
+D800..DB7F;N # <Non Private Use High Surrogate, First>..<Non Private Use High Surrogate, Last>
+DB80..DBFF;N # <Private Use High Surrogate, First>..<Private Use High Surrogate, Last>
+DC00..DFFF;N # <Low Surrogate, First>..<Low Surrogate, Last>
+E000..F8FF;A # <Private Use, First>..<Private Use, Last>
+F900;W # CJK COMPATIBILITY IDEOGRAPH-F900
+F901;W # CJK COMPATIBILITY IDEOGRAPH-F901
+F902;W # CJK COMPATIBILITY IDEOGRAPH-F902
+F903;W # CJK COMPATIBILITY IDEOGRAPH-F903
+F904;W # CJK COMPATIBILITY IDEOGRAPH-F904
+F905;W # CJK COMPATIBILITY IDEOGRAPH-F905
+F906;W # CJK COMPATIBILITY IDEOGRAPH-F906
+F907;W # CJK COMPATIBILITY IDEOGRAPH-F907
+F908;W # CJK COMPATIBILITY IDEOGRAPH-F908
+F909;W # CJK COMPATIBILITY IDEOGRAPH-F909
+F90A;W # CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B;W # CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C;W # CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D;W # CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E;W # CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F;W # CJK COMPATIBILITY IDEOGRAPH-F90F
+F910;W # CJK COMPATIBILITY IDEOGRAPH-F910
+F911;W # CJK COMPATIBILITY IDEOGRAPH-F911
+F912;W # CJK COMPATIBILITY IDEOGRAPH-F912
+F913;W # CJK COMPATIBILITY IDEOGRAPH-F913
+F914;W # CJK COMPATIBILITY IDEOGRAPH-F914
+F915;W # CJK COMPATIBILITY IDEOGRAPH-F915
+F916;W # CJK COMPATIBILITY IDEOGRAPH-F916
+F917;W # CJK COMPATIBILITY IDEOGRAPH-F917
+F918;W # CJK COMPATIBILITY IDEOGRAPH-F918
+F919;W # CJK COMPATIBILITY IDEOGRAPH-F919
+F91A;W # CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B;W # CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C;W # CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D;W # CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E;W # CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F;W # CJK COMPATIBILITY IDEOGRAPH-F91F
+F920;W # CJK COMPATIBILITY IDEOGRAPH-F920
+F921;W # CJK COMPATIBILITY IDEOGRAPH-F921
+F922;W # CJK COMPATIBILITY IDEOGRAPH-F922
+F923;W # CJK COMPATIBILITY IDEOGRAPH-F923
+F924;W # CJK COMPATIBILITY IDEOGRAPH-F924
+F925;W # CJK COMPATIBILITY IDEOGRAPH-F925
+F926;W # CJK COMPATIBILITY IDEOGRAPH-F926
+F927;W # CJK COMPATIBILITY IDEOGRAPH-F927
+F928;W # CJK COMPATIBILITY IDEOGRAPH-F928
+F929;W # CJK COMPATIBILITY IDEOGRAPH-F929
+F92A;W # CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B;W # CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C;W # CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D;W # CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E;W # CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F;W # CJK COMPATIBILITY IDEOGRAPH-F92F
+F930;W # CJK COMPATIBILITY IDEOGRAPH-F930
+F931;W # CJK COMPATIBILITY IDEOGRAPH-F931
+F932;W # CJK COMPATIBILITY IDEOGRAPH-F932
+F933;W # CJK COMPATIBILITY IDEOGRAPH-F933
+F934;W # CJK COMPATIBILITY IDEOGRAPH-F934
+F935;W # CJK COMPATIBILITY IDEOGRAPH-F935
+F936;W # CJK COMPATIBILITY IDEOGRAPH-F936
+F937;W # CJK COMPATIBILITY IDEOGRAPH-F937
+F938;W # CJK COMPATIBILITY IDEOGRAPH-F938
+F939;W # CJK COMPATIBILITY IDEOGRAPH-F939
+F93A;W # CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B;W # CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C;W # CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D;W # CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E;W # CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F;W # CJK COMPATIBILITY IDEOGRAPH-F93F
+F940;W # CJK COMPATIBILITY IDEOGRAPH-F940
+F941;W # CJK COMPATIBILITY IDEOGRAPH-F941
+F942;W # CJK COMPATIBILITY IDEOGRAPH-F942
+F943;W # CJK COMPATIBILITY IDEOGRAPH-F943
+F944;W # CJK COMPATIBILITY IDEOGRAPH-F944
+F945;W # CJK COMPATIBILITY IDEOGRAPH-F945
+F946;W # CJK COMPATIBILITY IDEOGRAPH-F946
+F947;W # CJK COMPATIBILITY IDEOGRAPH-F947
+F948;W # CJK COMPATIBILITY IDEOGRAPH-F948
+F949;W # CJK COMPATIBILITY IDEOGRAPH-F949
+F94A;W # CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B;W # CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C;W # CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D;W # CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E;W # CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F;W # CJK COMPATIBILITY IDEOGRAPH-F94F
+F950;W # CJK COMPATIBILITY IDEOGRAPH-F950
+F951;W # CJK COMPATIBILITY IDEOGRAPH-F951
+F952;W # CJK COMPATIBILITY IDEOGRAPH-F952
+F953;W # CJK COMPATIBILITY IDEOGRAPH-F953
+F954;W # CJK COMPATIBILITY IDEOGRAPH-F954
+F955;W # CJK COMPATIBILITY IDEOGRAPH-F955
+F956;W # CJK COMPATIBILITY IDEOGRAPH-F956
+F957;W # CJK COMPATIBILITY IDEOGRAPH-F957
+F958;W # CJK COMPATIBILITY IDEOGRAPH-F958
+F959;W # CJK COMPATIBILITY IDEOGRAPH-F959
+F95A;W # CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B;W # CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C;W # CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D;W # CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E;W # CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F;W # CJK COMPATIBILITY IDEOGRAPH-F95F
+F960;W # CJK COMPATIBILITY IDEOGRAPH-F960
+F961;W # CJK COMPATIBILITY IDEOGRAPH-F961
+F962;W # CJK COMPATIBILITY IDEOGRAPH-F962
+F963;W # CJK COMPATIBILITY IDEOGRAPH-F963
+F964;W # CJK COMPATIBILITY IDEOGRAPH-F964
+F965;W # CJK COMPATIBILITY IDEOGRAPH-F965
+F966;W # CJK COMPATIBILITY IDEOGRAPH-F966
+F967;W # CJK COMPATIBILITY IDEOGRAPH-F967
+F968;W # CJK COMPATIBILITY IDEOGRAPH-F968
+F969;W # CJK COMPATIBILITY IDEOGRAPH-F969
+F96A;W # CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B;W # CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C;W # CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D;W # CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E;W # CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F;W # CJK COMPATIBILITY IDEOGRAPH-F96F
+F970;W # CJK COMPATIBILITY IDEOGRAPH-F970
+F971;W # CJK COMPATIBILITY IDEOGRAPH-F971
+F972;W # CJK COMPATIBILITY IDEOGRAPH-F972
+F973;W # CJK COMPATIBILITY IDEOGRAPH-F973
+F974;W # CJK COMPATIBILITY IDEOGRAPH-F974
+F975;W # CJK COMPATIBILITY IDEOGRAPH-F975
+F976;W # CJK COMPATIBILITY IDEOGRAPH-F976
+F977;W # CJK COMPATIBILITY IDEOGRAPH-F977
+F978;W # CJK COMPATIBILITY IDEOGRAPH-F978
+F979;W # CJK COMPATIBILITY IDEOGRAPH-F979
+F97A;W # CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B;W # CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C;W # CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D;W # CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E;W # CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F;W # CJK COMPATIBILITY IDEOGRAPH-F97F
+F980;W # CJK COMPATIBILITY IDEOGRAPH-F980
+F981;W # CJK COMPATIBILITY IDEOGRAPH-F981
+F982;W # CJK COMPATIBILITY IDEOGRAPH-F982
+F983;W # CJK COMPATIBILITY IDEOGRAPH-F983
+F984;W # CJK COMPATIBILITY IDEOGRAPH-F984
+F985;W # CJK COMPATIBILITY IDEOGRAPH-F985
+F986;W # CJK COMPATIBILITY IDEOGRAPH-F986
+F987;W # CJK COMPATIBILITY IDEOGRAPH-F987
+F988;W # CJK COMPATIBILITY IDEOGRAPH-F988
+F989;W # CJK COMPATIBILITY IDEOGRAPH-F989
+F98A;W # CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B;W # CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C;W # CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D;W # CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E;W # CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F;W # CJK COMPATIBILITY IDEOGRAPH-F98F
+F990;W # CJK COMPATIBILITY IDEOGRAPH-F990
+F991;W # CJK COMPATIBILITY IDEOGRAPH-F991
+F992;W # CJK COMPATIBILITY IDEOGRAPH-F992
+F993;W # CJK COMPATIBILITY IDEOGRAPH-F993
+F994;W # CJK COMPATIBILITY IDEOGRAPH-F994
+F995;W # CJK COMPATIBILITY IDEOGRAPH-F995
+F996;W # CJK COMPATIBILITY IDEOGRAPH-F996
+F997;W # CJK COMPATIBILITY IDEOGRAPH-F997
+F998;W # CJK COMPATIBILITY IDEOGRAPH-F998
+F999;W # CJK COMPATIBILITY IDEOGRAPH-F999
+F99A;W # CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B;W # CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C;W # CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D;W # CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E;W # CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F;W # CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0;W # CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1;W # CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2;W # CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3;W # CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4;W # CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5;W # CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6;W # CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7;W # CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8;W # CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9;W # CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA;W # CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB;W # CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC;W # CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD;W # CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE;W # CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF;W # CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0;W # CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1;W # CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2;W # CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3;W # CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4;W # CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5;W # CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6;W # CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7;W # CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8;W # CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9;W # CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA;W # CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB;W # CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC;W # CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD;W # CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE;W # CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF;W # CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0;W # CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1;W # CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2;W # CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3;W # CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4;W # CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5;W # CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6;W # CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7;W # CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8;W # CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9;W # CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA;W # CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB;W # CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC;W # CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD;W # CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE;W # CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF;W # CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0;W # CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1;W # CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2;W # CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3;W # CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4;W # CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5;W # CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6;W # CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7;W # CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8;W # CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9;W # CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA;W # CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB;W # CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC;W # CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD;W # CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE;W # CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF;W # CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0;W # CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1;W # CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2;W # CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3;W # CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4;W # CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5;W # CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6;W # CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7;W # CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8;W # CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9;W # CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA;W # CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB;W # CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC;W # CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED;W # CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE;W # CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF;W # CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0;W # CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1;W # CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2;W # CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3;W # CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4;W # CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5;W # CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6;W # CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7;W # CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8;W # CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9;W # CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA;W # CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB;W # CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC;W # CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD;W # CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE;W # CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF;W # CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00;W # CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01;W # CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02;W # CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03;W # CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04;W # CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05;W # CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06;W # CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07;W # CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08;W # CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09;W # CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A;W # CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B;W # CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C;W # CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D;W # CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA0E;W # CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F;W # CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA10;W # CJK COMPATIBILITY IDEOGRAPH-FA10
+FA11;W # CJK COMPATIBILITY IDEOGRAPH-FA11
+FA12;W # CJK COMPATIBILITY IDEOGRAPH-FA12
+FA13;W # CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14;W # CJK COMPATIBILITY IDEOGRAPH-FA14
+FA15;W # CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16;W # CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17;W # CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18;W # CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19;W # CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A;W # CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B;W # CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C;W # CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D;W # CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E;W # CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA1F;W # CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA20;W # CJK COMPATIBILITY IDEOGRAPH-FA20
+FA21;W # CJK COMPATIBILITY IDEOGRAPH-FA21
+FA22;W # CJK COMPATIBILITY IDEOGRAPH-FA22
+FA23;W # CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24;W # CJK COMPATIBILITY IDEOGRAPH-FA24
+FA25;W # CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26;W # CJK COMPATIBILITY IDEOGRAPH-FA26
+FA27;W # CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28;W # CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29;W # CJK COMPATIBILITY IDEOGRAPH-FA29
+FA2A;W # CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B;W # CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C;W # CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D;W # CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30;W # CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31;W # CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32;W # CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33;W # CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34;W # CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35;W # CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36;W # CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37;W # CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38;W # CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39;W # CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A;W # CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B;W # CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C;W # CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D;W # CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E;W # CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F;W # CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40;W # CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41;W # CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42;W # CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43;W # CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44;W # CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45;W # CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46;W # CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47;W # CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48;W # CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49;W # CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A;W # CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B;W # CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C;W # CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D;W # CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E;W # CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F;W # CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50;W # CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51;W # CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52;W # CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53;W # CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54;W # CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55;W # CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56;W # CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57;W # CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58;W # CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59;W # CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A;W # CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B;W # CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C;W # CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D;W # CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E;W # CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F;W # CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60;W # CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61;W # CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62;W # CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63;W # CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64;W # CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65;W # CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66;W # CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67;W # CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68;W # CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69;W # CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A;W # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70;W # CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71;W # CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72;W # CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73;W # CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74;W # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75;W # CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76;W # CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77;W # CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78;W # CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79;W # CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A;W # CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B;W # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C;W # CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D;W # CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E;W # CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F;W # CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80;W # CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81;W # CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82;W # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83;W # CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84;W # CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85;W # CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86;W # CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87;W # CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88;W # CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89;W # CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A;W # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B;W # CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C;W # CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D;W # CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E;W # CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F;W # CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90;W # CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91;W # CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92;W # CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93;W # CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94;W # CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95;W # CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96;W # CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97;W # CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98;W # CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99;W # CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A;W # CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B;W # CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C;W # CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D;W # CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E;W # CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F;W # CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0;W # CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1;W # CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2;W # CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3;W # CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4;W # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5;W # CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6;W # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7;W # CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8;W # CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9;W # CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA;W # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB;W # CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC;W # CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD;W # CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE;W # CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF;W # CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0;W # CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1;W # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2;W # CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3;W # CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4;W # CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5;W # CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6;W # CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7;W # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8;W # CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9;W # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA;W # CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB;W # CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC;W # CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD;W # CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE;W # CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF;W # CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0;W # CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1;W # CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2;W # CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3;W # CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4;W # CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5;W # CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6;W # CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7;W # CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8;W # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9;W # CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA;W # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB;W # CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC;W # CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD;W # CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE;W # CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF;W # CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0;W # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1;W # CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2;W # CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3;W # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4;W # CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5;W # CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6;W # CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7;W # CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8;W # CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9;W # CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00;N # LATIN SMALL LIGATURE FF
+FB01;N # LATIN SMALL LIGATURE FI
+FB02;N # LATIN SMALL LIGATURE FL
+FB03;N # LATIN SMALL LIGATURE FFI
+FB04;N # LATIN SMALL LIGATURE FFL
+FB05;N # LATIN SMALL LIGATURE LONG S T
+FB06;N # LATIN SMALL LIGATURE ST
+FB13;N # ARMENIAN SMALL LIGATURE MEN NOW
+FB14;N # ARMENIAN SMALL LIGATURE MEN ECH
+FB15;N # ARMENIAN SMALL LIGATURE MEN INI
+FB16;N # ARMENIAN SMALL LIGATURE VEW NOW
+FB17;N # ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;N # HEBREW LETTER YOD WITH HIRIQ
+FB1E;N # HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F;N # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20;N # HEBREW LETTER ALTERNATIVE AYIN
+FB21;N # HEBREW LETTER WIDE ALEF
+FB22;N # HEBREW LETTER WIDE DALET
+FB23;N # HEBREW LETTER WIDE HE
+FB24;N # HEBREW LETTER WIDE KAF
+FB25;N # HEBREW LETTER WIDE LAMED
+FB26;N # HEBREW LETTER WIDE FINAL MEM
+FB27;N # HEBREW LETTER WIDE RESH
+FB28;N # HEBREW LETTER WIDE TAV
+FB29;N # HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A;N # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B;N # HEBREW LETTER SHIN WITH SIN DOT
+FB2C;N # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D;N # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E;N # HEBREW LETTER ALEF WITH PATAH
+FB2F;N # HEBREW LETTER ALEF WITH QAMATS
+FB30;N # HEBREW LETTER ALEF WITH MAPIQ
+FB31;N # HEBREW LETTER BET WITH DAGESH
+FB32;N # HEBREW LETTER GIMEL WITH DAGESH
+FB33;N # HEBREW LETTER DALET WITH DAGESH
+FB34;N # HEBREW LETTER HE WITH MAPIQ
+FB35;N # HEBREW LETTER VAV WITH DAGESH
+FB36;N # HEBREW LETTER ZAYIN WITH DAGESH
+FB38;N # HEBREW LETTER TET WITH DAGESH
+FB39;N # HEBREW LETTER YOD WITH DAGESH
+FB3A;N # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B;N # HEBREW LETTER KAF WITH DAGESH
+FB3C;N # HEBREW LETTER LAMED WITH DAGESH
+FB3E;N # HEBREW LETTER MEM WITH DAGESH
+FB40;N # HEBREW LETTER NUN WITH DAGESH
+FB41;N # HEBREW LETTER SAMEKH WITH DAGESH
+FB43;N # HEBREW LETTER FINAL PE WITH DAGESH
+FB44;N # HEBREW LETTER PE WITH DAGESH
+FB46;N # HEBREW LETTER TSADI WITH DAGESH
+FB47;N # HEBREW LETTER QOF WITH DAGESH
+FB48;N # HEBREW LETTER RESH WITH DAGESH
+FB49;N # HEBREW LETTER SHIN WITH DAGESH
+FB4A;N # HEBREW LETTER TAV WITH DAGESH
+FB4B;N # HEBREW LETTER VAV WITH HOLAM
+FB4C;N # HEBREW LETTER BET WITH RAFE
+FB4D;N # HEBREW LETTER KAF WITH RAFE
+FB4E;N # HEBREW LETTER PE WITH RAFE
+FB4F;N # HEBREW LIGATURE ALEF LAMED
+FB50;N # ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51;N # ARABIC LETTER ALEF WASLA FINAL FORM
+FB52;N # ARABIC LETTER BEEH ISOLATED FORM
+FB53;N # ARABIC LETTER BEEH FINAL FORM
+FB54;N # ARABIC LETTER BEEH INITIAL FORM
+FB55;N # ARABIC LETTER BEEH MEDIAL FORM
+FB56;N # ARABIC LETTER PEH ISOLATED FORM
+FB57;N # ARABIC LETTER PEH FINAL FORM
+FB58;N # ARABIC LETTER PEH INITIAL FORM
+FB59;N # ARABIC LETTER PEH MEDIAL FORM
+FB5A;N # ARABIC LETTER BEHEH ISOLATED FORM
+FB5B;N # ARABIC LETTER BEHEH FINAL FORM
+FB5C;N # ARABIC LETTER BEHEH INITIAL FORM
+FB5D;N # ARABIC LETTER BEHEH MEDIAL FORM
+FB5E;N # ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F;N # ARABIC LETTER TTEHEH FINAL FORM
+FB60;N # ARABIC LETTER TTEHEH INITIAL FORM
+FB61;N # ARABIC LETTER TTEHEH MEDIAL FORM
+FB62;N # ARABIC LETTER TEHEH ISOLATED FORM
+FB63;N # ARABIC LETTER TEHEH FINAL FORM
+FB64;N # ARABIC LETTER TEHEH INITIAL FORM
+FB65;N # ARABIC LETTER TEHEH MEDIAL FORM
+FB66;N # ARABIC LETTER TTEH ISOLATED FORM
+FB67;N # ARABIC LETTER TTEH FINAL FORM
+FB68;N # ARABIC LETTER TTEH INITIAL FORM
+FB69;N # ARABIC LETTER TTEH MEDIAL FORM
+FB6A;N # ARABIC LETTER VEH ISOLATED FORM
+FB6B;N # ARABIC LETTER VEH FINAL FORM
+FB6C;N # ARABIC LETTER VEH INITIAL FORM
+FB6D;N # ARABIC LETTER VEH MEDIAL FORM
+FB6E;N # ARABIC LETTER PEHEH ISOLATED FORM
+FB6F;N # ARABIC LETTER PEHEH FINAL FORM
+FB70;N # ARABIC LETTER PEHEH INITIAL FORM
+FB71;N # ARABIC LETTER PEHEH MEDIAL FORM
+FB72;N # ARABIC LETTER DYEH ISOLATED FORM
+FB73;N # ARABIC LETTER DYEH FINAL FORM
+FB74;N # ARABIC LETTER DYEH INITIAL FORM
+FB75;N # ARABIC LETTER DYEH MEDIAL FORM
+FB76;N # ARABIC LETTER NYEH ISOLATED FORM
+FB77;N # ARABIC LETTER NYEH FINAL FORM
+FB78;N # ARABIC LETTER NYEH INITIAL FORM
+FB79;N # ARABIC LETTER NYEH MEDIAL FORM
+FB7A;N # ARABIC LETTER TCHEH ISOLATED FORM
+FB7B;N # ARABIC LETTER TCHEH FINAL FORM
+FB7C;N # ARABIC LETTER TCHEH INITIAL FORM
+FB7D;N # ARABIC LETTER TCHEH MEDIAL FORM
+FB7E;N # ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F;N # ARABIC LETTER TCHEHEH FINAL FORM
+FB80;N # ARABIC LETTER TCHEHEH INITIAL FORM
+FB81;N # ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82;N # ARABIC LETTER DDAHAL ISOLATED FORM
+FB83;N # ARABIC LETTER DDAHAL FINAL FORM
+FB84;N # ARABIC LETTER DAHAL ISOLATED FORM
+FB85;N # ARABIC LETTER DAHAL FINAL FORM
+FB86;N # ARABIC LETTER DUL ISOLATED FORM
+FB87;N # ARABIC LETTER DUL FINAL FORM
+FB88;N # ARABIC LETTER DDAL ISOLATED FORM
+FB89;N # ARABIC LETTER DDAL FINAL FORM
+FB8A;N # ARABIC LETTER JEH ISOLATED FORM
+FB8B;N # ARABIC LETTER JEH FINAL FORM
+FB8C;N # ARABIC LETTER RREH ISOLATED FORM
+FB8D;N # ARABIC LETTER RREH FINAL FORM
+FB8E;N # ARABIC LETTER KEHEH ISOLATED FORM
+FB8F;N # ARABIC LETTER KEHEH FINAL FORM
+FB90;N # ARABIC LETTER KEHEH INITIAL FORM
+FB91;N # ARABIC LETTER KEHEH MEDIAL FORM
+FB92;N # ARABIC LETTER GAF ISOLATED FORM
+FB93;N # ARABIC LETTER GAF FINAL FORM
+FB94;N # ARABIC LETTER GAF INITIAL FORM
+FB95;N # ARABIC LETTER GAF MEDIAL FORM
+FB96;N # ARABIC LETTER GUEH ISOLATED FORM
+FB97;N # ARABIC LETTER GUEH FINAL FORM
+FB98;N # ARABIC LETTER GUEH INITIAL FORM
+FB99;N # ARABIC LETTER GUEH MEDIAL FORM
+FB9A;N # ARABIC LETTER NGOEH ISOLATED FORM
+FB9B;N # ARABIC LETTER NGOEH FINAL FORM
+FB9C;N # ARABIC LETTER NGOEH INITIAL FORM
+FB9D;N # ARABIC LETTER NGOEH MEDIAL FORM
+FB9E;N # ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F;N # ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0;N # ARABIC LETTER RNOON ISOLATED FORM
+FBA1;N # ARABIC LETTER RNOON FINAL FORM
+FBA2;N # ARABIC LETTER RNOON INITIAL FORM
+FBA3;N # ARABIC LETTER RNOON MEDIAL FORM
+FBA4;N # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5;N # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6;N # ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7;N # ARABIC LETTER HEH GOAL FINAL FORM
+FBA8;N # ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9;N # ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA;N # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB;N # ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC;N # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD;N # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE;N # ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF;N # ARABIC LETTER YEH BARREE FINAL FORM
+FBB0;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1;N # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3;N # ARABIC LETTER NG ISOLATED FORM
+FBD4;N # ARABIC LETTER NG FINAL FORM
+FBD5;N # ARABIC LETTER NG INITIAL FORM
+FBD6;N # ARABIC LETTER NG MEDIAL FORM
+FBD7;N # ARABIC LETTER U ISOLATED FORM
+FBD8;N # ARABIC LETTER U FINAL FORM
+FBD9;N # ARABIC LETTER OE ISOLATED FORM
+FBDA;N # ARABIC LETTER OE FINAL FORM
+FBDB;N # ARABIC LETTER YU ISOLATED FORM
+FBDC;N # ARABIC LETTER YU FINAL FORM
+FBDD;N # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE;N # ARABIC LETTER VE ISOLATED FORM
+FBDF;N # ARABIC LETTER VE FINAL FORM
+FBE0;N # ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1;N # ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2;N # ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3;N # ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4;N # ARABIC LETTER E ISOLATED FORM
+FBE5;N # ARABIC LETTER E FINAL FORM
+FBE6;N # ARABIC LETTER E INITIAL FORM
+FBE7;N # ARABIC LETTER E MEDIAL FORM
+FBE8;N # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9;N # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB;N # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC;N # ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD;N # ARABIC LETTER FARSI YEH FINAL FORM
+FBFE;N # ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF;N # ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05;N # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06;N # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07;N # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08;N # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09;N # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A;N # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B;N # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C;N # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D;N # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E;N # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F;N # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10;N # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11;N # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12;N # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13;N # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14;N # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15;N # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16;N # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17;N # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18;N # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19;N # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A;N # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B;N # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C;N # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D;N # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E;N # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F;N # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20;N # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21;N # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22;N # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23;N # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24;N # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25;N # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26;N # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27;N # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28;N # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29;N # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A;N # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B;N # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C;N # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D;N # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E;N # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F;N # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30;N # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31;N # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32;N # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33;N # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34;N # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35;N # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36;N # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37;N # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38;N # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39;N # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A;N # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B;N # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C;N # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D;N # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E;N # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F;N # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40;N # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41;N # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42;N # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43;N # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44;N # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45;N # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46;N # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47;N # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48;N # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49;N # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A;N # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B;N # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C;N # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D;N # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E;N # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F;N # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50;N # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51;N # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52;N # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53;N # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54;N # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55;N # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56;N # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57;N # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58;N # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59;N # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A;N # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B;N # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C;N # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D;N # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E;N # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F;N # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60;N # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61;N # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62;N # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63;N # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A;N # ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B;N # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C;N # ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D;N # ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E;N # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F;N # ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70;N # ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71;N # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72;N # ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73;N # ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74;N # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75;N # ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76;N # ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77;N # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78;N # ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79;N # ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A;N # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B;N # ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C;N # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D;N # ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E;N # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F;N # ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80;N # ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81;N # ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82;N # ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83;N # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84;N # ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85;N # ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86;N # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87;N # ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88;N # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89;N # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A;N # ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B;N # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C;N # ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D;N # ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E;N # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F;N # ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90;N # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91;N # ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92;N # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93;N # ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94;N # ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95;N # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96;N # ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C;N # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D;N # ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E;N # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F;N # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0;N # ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1;N # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2;N # ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3;N # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4;N # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5;N # ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6;N # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7;N # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8;N # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9;N # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA;N # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB;N # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC;N # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD;N # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE;N # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF;N # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0;N # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1;N # ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2;N # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3;N # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4;N # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5;N # ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6;N # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7;N # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8;N # ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9;N # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA;N # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB;N # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC;N # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD;N # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE;N # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF;N # ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0;N # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1;N # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2;N # ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3;N # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4;N # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5;N # ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6;N # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7;N # ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8;N # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9;N # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA;N # ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB;N # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC;N # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD;N # ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE;N # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF;N # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0;N # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1;N # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2;N # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3;N # ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4;N # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5;N # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6;N # ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7;N # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8;N # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9;N # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA;N # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB;N # ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC;N # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD;N # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE;N # ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0;N # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1;N # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2;N # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3;N # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4;N # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5;N # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6;N # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7;N # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8;N # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9;N # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA;N # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB;N # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC;N # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED;N # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE;N # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF;N # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0;N # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1;N # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2;N # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3;N # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4;N # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5;N # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6;N # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7;N # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8;N # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9;N # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA;N # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB;N # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC;N # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD;N # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE;N # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF;N # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00;N # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01;N # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02;N # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03;N # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04;N # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05;N # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06;N # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07;N # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08;N # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09;N # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A;N # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B;N # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C;N # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D;N # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E;N # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F;N # ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10;N # ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11;N # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12;N # ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13;N # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14;N # ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15;N # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16;N # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17;N # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18;N # ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19;N # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A;N # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B;N # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C;N # ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D;N # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E;N # ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F;N # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20;N # ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21;N # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22;N # ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23;N # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24;N # ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25;N # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26;N # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27;N # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28;N # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29;N # ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A;N # ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B;N # ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C;N # ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D;N # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E;N # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F;N # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30;N # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31;N # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32;N # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33;N # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34;N # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35;N # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36;N # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37;N # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38;N # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39;N # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A;N # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B;N # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C;N # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D;N # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E;N # ORNATE LEFT PARENTHESIS
+FD3F;N # ORNATE RIGHT PARENTHESIS
+FD50;N # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51;N # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52;N # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53;N # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54;N # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55;N # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56;N # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57;N # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58;N # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59;N # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A;N # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B;N # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C;N # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D;N # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E;N # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F;N # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60;N # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61;N # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62;N # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63;N # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64;N # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65;N # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66;N # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67;N # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68;N # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69;N # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A;N # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B;N # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C;N # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D;N # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E;N # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F;N # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70;N # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71;N # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72;N # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73;N # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74;N # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75;N # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76;N # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77;N # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78;N # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79;N # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A;N # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B;N # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C;N # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D;N # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E;N # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F;N # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80;N # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81;N # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82;N # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83;N # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84;N # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85;N # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86;N # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87;N # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88;N # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89;N # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A;N # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B;N # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C;N # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D;N # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E;N # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F;N # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92;N # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93;N # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94;N # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95;N # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96;N # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97;N # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98;N # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99;N # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A;N # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B;N # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C;N # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D;N # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E;N # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F;N # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0;N # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1;N # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2;N # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3;N # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4;N # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5;N # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6;N # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7;N # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8;N # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9;N # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA;N # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB;N # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC;N # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD;N # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE;N # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF;N # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0;N # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1;N # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2;N # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3;N # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4;N # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5;N # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6;N # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7;N # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8;N # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9;N # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA;N # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB;N # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC;N # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD;N # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE;N # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF;N # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0;N # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1;N # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2;N # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3;N # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4;N # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5;N # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6;N # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7;N # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0;N # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1;N # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2;N # ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3;N # ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4;N # ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5;N # ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6;N # ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7;N # ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8;N # ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9;N # ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA;N # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB;N # ARABIC LIGATURE JALLAJALALOUHOU
+FDFC;N # RIAL SIGN
+FDFD;N # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00;A # VARIATION SELECTOR-1
+FE01;A # VARIATION SELECTOR-2
+FE02;A # VARIATION SELECTOR-3
+FE03;A # VARIATION SELECTOR-4
+FE04;A # VARIATION SELECTOR-5
+FE05;A # VARIATION SELECTOR-6
+FE06;A # VARIATION SELECTOR-7
+FE07;A # VARIATION SELECTOR-8
+FE08;A # VARIATION SELECTOR-9
+FE09;A # VARIATION SELECTOR-10
+FE0A;A # VARIATION SELECTOR-11
+FE0B;A # VARIATION SELECTOR-12
+FE0C;A # VARIATION SELECTOR-13
+FE0D;A # VARIATION SELECTOR-14
+FE0E;A # VARIATION SELECTOR-15
+FE0F;A # VARIATION SELECTOR-16
+FE10;W # PRESENTATION FORM FOR VERTICAL COMMA
+FE11;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12;W # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13;W # PRESENTATION FORM FOR VERTICAL COLON
+FE14;W # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15;W # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16;W # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;W # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;W # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;W # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20;N # COMBINING LIGATURE LEFT HALF
+FE21;N # COMBINING LIGATURE RIGHT HALF
+FE22;N # COMBINING DOUBLE TILDE LEFT HALF
+FE23;N # COMBINING DOUBLE TILDE RIGHT HALF
+FE30;W # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31;W # PRESENTATION FORM FOR VERTICAL EM DASH
+FE32;W # PRESENTATION FORM FOR VERTICAL EN DASH
+FE33;W # PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34;W # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;W # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;W # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;W # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;W # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;W # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;W # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;W # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;W # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;W # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;W # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;W # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;W # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;W # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;W # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;W # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;W # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45;W # SESAME DOT
+FE46;W # WHITE SESAME DOT
+FE47;W # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48;W # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49;W # DASHED OVERLINE
+FE4A;W # CENTRELINE OVERLINE
+FE4B;W # WAVY OVERLINE
+FE4C;W # DOUBLE WAVY OVERLINE
+FE4D;W # DASHED LOW LINE
+FE4E;W # CENTRELINE LOW LINE
+FE4F;W # WAVY LOW LINE
+FE50;W # SMALL COMMA
+FE51;W # SMALL IDEOGRAPHIC COMMA
+FE52;W # SMALL FULL STOP
+FE54;W # SMALL SEMICOLON
+FE55;W # SMALL COLON
+FE56;W # SMALL QUESTION MARK
+FE57;W # SMALL EXCLAMATION MARK
+FE58;W # SMALL EM DASH
+FE59;W # SMALL LEFT PARENTHESIS
+FE5A;W # SMALL RIGHT PARENTHESIS
+FE5B;W # SMALL LEFT CURLY BRACKET
+FE5C;W # SMALL RIGHT CURLY BRACKET
+FE5D;W # SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;W # SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F;W # SMALL NUMBER SIGN
+FE60;W # SMALL AMPERSAND
+FE61;W # SMALL ASTERISK
+FE62;W # SMALL PLUS SIGN
+FE63;W # SMALL HYPHEN-MINUS
+FE64;W # SMALL LESS-THAN SIGN
+FE65;W # SMALL GREATER-THAN SIGN
+FE66;W # SMALL EQUALS SIGN
+FE68;W # SMALL REVERSE SOLIDUS
+FE69;W # SMALL DOLLAR SIGN
+FE6A;W # SMALL PERCENT SIGN
+FE6B;W # SMALL COMMERCIAL AT
+FE70;N # ARABIC FATHATAN ISOLATED FORM
+FE71;N # ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72;N # ARABIC DAMMATAN ISOLATED FORM
+FE73;N # ARABIC TAIL FRAGMENT
+FE74;N # ARABIC KASRATAN ISOLATED FORM
+FE76;N # ARABIC FATHA ISOLATED FORM
+FE77;N # ARABIC FATHA MEDIAL FORM
+FE78;N # ARABIC DAMMA ISOLATED FORM
+FE79;N # ARABIC DAMMA MEDIAL FORM
+FE7A;N # ARABIC KASRA ISOLATED FORM
+FE7B;N # ARABIC KASRA MEDIAL FORM
+FE7C;N # ARABIC SHADDA ISOLATED FORM
+FE7D;N # ARABIC SHADDA MEDIAL FORM
+FE7E;N # ARABIC SUKUN ISOLATED FORM
+FE7F;N # ARABIC SUKUN MEDIAL FORM
+FE80;N # ARABIC LETTER HAMZA ISOLATED FORM
+FE81;N # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82;N # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83;N # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84;N # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85;N # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86;N # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87;N # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88;N # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89;N # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A;N # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B;N # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C;N # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D;N # ARABIC LETTER ALEF ISOLATED FORM
+FE8E;N # ARABIC LETTER ALEF FINAL FORM
+FE8F;N # ARABIC LETTER BEH ISOLATED FORM
+FE90;N # ARABIC LETTER BEH FINAL FORM
+FE91;N # ARABIC LETTER BEH INITIAL FORM
+FE92;N # ARABIC LETTER BEH MEDIAL FORM
+FE93;N # ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94;N # ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95;N # ARABIC LETTER TEH ISOLATED FORM
+FE96;N # ARABIC LETTER TEH FINAL FORM
+FE97;N # ARABIC LETTER TEH INITIAL FORM
+FE98;N # ARABIC LETTER TEH MEDIAL FORM
+FE99;N # ARABIC LETTER THEH ISOLATED FORM
+FE9A;N # ARABIC LETTER THEH FINAL FORM
+FE9B;N # ARABIC LETTER THEH INITIAL FORM
+FE9C;N # ARABIC LETTER THEH MEDIAL FORM
+FE9D;N # ARABIC LETTER JEEM ISOLATED FORM
+FE9E;N # ARABIC LETTER JEEM FINAL FORM
+FE9F;N # ARABIC LETTER JEEM INITIAL FORM
+FEA0;N # ARABIC LETTER JEEM MEDIAL FORM
+FEA1;N # ARABIC LETTER HAH ISOLATED FORM
+FEA2;N # ARABIC LETTER HAH FINAL FORM
+FEA3;N # ARABIC LETTER HAH INITIAL FORM
+FEA4;N # ARABIC LETTER HAH MEDIAL FORM
+FEA5;N # ARABIC LETTER KHAH ISOLATED FORM
+FEA6;N # ARABIC LETTER KHAH FINAL FORM
+FEA7;N # ARABIC LETTER KHAH INITIAL FORM
+FEA8;N # ARABIC LETTER KHAH MEDIAL FORM
+FEA9;N # ARABIC LETTER DAL ISOLATED FORM
+FEAA;N # ARABIC LETTER DAL FINAL FORM
+FEAB;N # ARABIC LETTER THAL ISOLATED FORM
+FEAC;N # ARABIC LETTER THAL FINAL FORM
+FEAD;N # ARABIC LETTER REH ISOLATED FORM
+FEAE;N # ARABIC LETTER REH FINAL FORM
+FEAF;N # ARABIC LETTER ZAIN ISOLATED FORM
+FEB0;N # ARABIC LETTER ZAIN FINAL FORM
+FEB1;N # ARABIC LETTER SEEN ISOLATED FORM
+FEB2;N # ARABIC LETTER SEEN FINAL FORM
+FEB3;N # ARABIC LETTER SEEN INITIAL FORM
+FEB4;N # ARABIC LETTER SEEN MEDIAL FORM
+FEB5;N # ARABIC LETTER SHEEN ISOLATED FORM
+FEB6;N # ARABIC LETTER SHEEN FINAL FORM
+FEB7;N # ARABIC LETTER SHEEN INITIAL FORM
+FEB8;N # ARABIC LETTER SHEEN MEDIAL FORM
+FEB9;N # ARABIC LETTER SAD ISOLATED FORM
+FEBA;N # ARABIC LETTER SAD FINAL FORM
+FEBB;N # ARABIC LETTER SAD INITIAL FORM
+FEBC;N # ARABIC LETTER SAD MEDIAL FORM
+FEBD;N # ARABIC LETTER DAD ISOLATED FORM
+FEBE;N # ARABIC LETTER DAD FINAL FORM
+FEBF;N # ARABIC LETTER DAD INITIAL FORM
+FEC0;N # ARABIC LETTER DAD MEDIAL FORM
+FEC1;N # ARABIC LETTER TAH ISOLATED FORM
+FEC2;N # ARABIC LETTER TAH FINAL FORM
+FEC3;N # ARABIC LETTER TAH INITIAL FORM
+FEC4;N # ARABIC LETTER TAH MEDIAL FORM
+FEC5;N # ARABIC LETTER ZAH ISOLATED FORM
+FEC6;N # ARABIC LETTER ZAH FINAL FORM
+FEC7;N # ARABIC LETTER ZAH INITIAL FORM
+FEC8;N # ARABIC LETTER ZAH MEDIAL FORM
+FEC9;N # ARABIC LETTER AIN ISOLATED FORM
+FECA;N # ARABIC LETTER AIN FINAL FORM
+FECB;N # ARABIC LETTER AIN INITIAL FORM
+FECC;N # ARABIC LETTER AIN MEDIAL FORM
+FECD;N # ARABIC LETTER GHAIN ISOLATED FORM
+FECE;N # ARABIC LETTER GHAIN FINAL FORM
+FECF;N # ARABIC LETTER GHAIN INITIAL FORM
+FED0;N # ARABIC LETTER GHAIN MEDIAL FORM
+FED1;N # ARABIC LETTER FEH ISOLATED FORM
+FED2;N # ARABIC LETTER FEH FINAL FORM
+FED3;N # ARABIC LETTER FEH INITIAL FORM
+FED4;N # ARABIC LETTER FEH MEDIAL FORM
+FED5;N # ARABIC LETTER QAF ISOLATED FORM
+FED6;N # ARABIC LETTER QAF FINAL FORM
+FED7;N # ARABIC LETTER QAF INITIAL FORM
+FED8;N # ARABIC LETTER QAF MEDIAL FORM
+FED9;N # ARABIC LETTER KAF ISOLATED FORM
+FEDA;N # ARABIC LETTER KAF FINAL FORM
+FEDB;N # ARABIC LETTER KAF INITIAL FORM
+FEDC;N # ARABIC LETTER KAF MEDIAL FORM
+FEDD;N # ARABIC LETTER LAM ISOLATED FORM
+FEDE;N # ARABIC LETTER LAM FINAL FORM
+FEDF;N # ARABIC LETTER LAM INITIAL FORM
+FEE0;N # ARABIC LETTER LAM MEDIAL FORM
+FEE1;N # ARABIC LETTER MEEM ISOLATED FORM
+FEE2;N # ARABIC LETTER MEEM FINAL FORM
+FEE3;N # ARABIC LETTER MEEM INITIAL FORM
+FEE4;N # ARABIC LETTER MEEM MEDIAL FORM
+FEE5;N # ARABIC LETTER NOON ISOLATED FORM
+FEE6;N # ARABIC LETTER NOON FINAL FORM
+FEE7;N # ARABIC LETTER NOON INITIAL FORM
+FEE8;N # ARABIC LETTER NOON MEDIAL FORM
+FEE9;N # ARABIC LETTER HEH ISOLATED FORM
+FEEA;N # ARABIC LETTER HEH FINAL FORM
+FEEB;N # ARABIC LETTER HEH INITIAL FORM
+FEEC;N # ARABIC LETTER HEH MEDIAL FORM
+FEED;N # ARABIC LETTER WAW ISOLATED FORM
+FEEE;N # ARABIC LETTER WAW FINAL FORM
+FEEF;N # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0;N # ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1;N # ARABIC LETTER YEH ISOLATED FORM
+FEF2;N # ARABIC LETTER YEH FINAL FORM
+FEF3;N # ARABIC LETTER YEH INITIAL FORM
+FEF4;N # ARABIC LETTER YEH MEDIAL FORM
+FEF5;N # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6;N # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA;N # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB;N # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC;N # ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF;N # ZERO WIDTH NO-BREAK SPACE
+FF01;F # FULLWIDTH EXCLAMATION MARK
+FF02;F # FULLWIDTH QUOTATION MARK
+FF03;F # FULLWIDTH NUMBER SIGN
+FF04;F # FULLWIDTH DOLLAR SIGN
+FF05;F # FULLWIDTH PERCENT SIGN
+FF06;F # FULLWIDTH AMPERSAND
+FF07;F # FULLWIDTH APOSTROPHE
+FF08;F # FULLWIDTH LEFT PARENTHESIS
+FF09;F # FULLWIDTH RIGHT PARENTHESIS
+FF0A;F # FULLWIDTH ASTERISK
+FF0B;F # FULLWIDTH PLUS SIGN
+FF0C;F # FULLWIDTH COMMA
+FF0D;F # FULLWIDTH HYPHEN-MINUS
+FF0E;F # FULLWIDTH FULL STOP
+FF0F;F # FULLWIDTH SOLIDUS
+FF10;F # FULLWIDTH DIGIT ZERO
+FF11;F # FULLWIDTH DIGIT ONE
+FF12;F # FULLWIDTH DIGIT TWO
+FF13;F # FULLWIDTH DIGIT THREE
+FF14;F # FULLWIDTH DIGIT FOUR
+FF15;F # FULLWIDTH DIGIT FIVE
+FF16;F # FULLWIDTH DIGIT SIX
+FF17;F # FULLWIDTH DIGIT SEVEN
+FF18;F # FULLWIDTH DIGIT EIGHT
+FF19;F # FULLWIDTH DIGIT NINE
+FF1A;F # FULLWIDTH COLON
+FF1B;F # FULLWIDTH SEMICOLON
+FF1C;F # FULLWIDTH LESS-THAN SIGN
+FF1D;F # FULLWIDTH EQUALS SIGN
+FF1E;F # FULLWIDTH GREATER-THAN SIGN
+FF1F;F # FULLWIDTH QUESTION MARK
+FF20;F # FULLWIDTH COMMERCIAL AT
+FF21;F # FULLWIDTH LATIN CAPITAL LETTER A
+FF22;F # FULLWIDTH LATIN CAPITAL LETTER B
+FF23;F # FULLWIDTH LATIN CAPITAL LETTER C
+FF24;F # FULLWIDTH LATIN CAPITAL LETTER D
+FF25;F # FULLWIDTH LATIN CAPITAL LETTER E
+FF26;F # FULLWIDTH LATIN CAPITAL LETTER F
+FF27;F # FULLWIDTH LATIN CAPITAL LETTER G
+FF28;F # FULLWIDTH LATIN CAPITAL LETTER H
+FF29;F # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A;F # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B;F # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C;F # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D;F # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E;F # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F;F # FULLWIDTH LATIN CAPITAL LETTER O
+FF30;F # FULLWIDTH LATIN CAPITAL LETTER P
+FF31;F # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32;F # FULLWIDTH LATIN CAPITAL LETTER R
+FF33;F # FULLWIDTH LATIN CAPITAL LETTER S
+FF34;F # FULLWIDTH LATIN CAPITAL LETTER T
+FF35;F # FULLWIDTH LATIN CAPITAL LETTER U
+FF36;F # FULLWIDTH LATIN CAPITAL LETTER V
+FF37;F # FULLWIDTH LATIN CAPITAL LETTER W
+FF38;F # FULLWIDTH LATIN CAPITAL LETTER X
+FF39;F # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A;F # FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;F # FULLWIDTH LEFT SQUARE BRACKET
+FF3C;F # FULLWIDTH REVERSE SOLIDUS
+FF3D;F # FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;F # FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;F # FULLWIDTH LOW LINE
+FF40;F # FULLWIDTH GRAVE ACCENT
+FF41;F # FULLWIDTH LATIN SMALL LETTER A
+FF42;F # FULLWIDTH LATIN SMALL LETTER B
+FF43;F # FULLWIDTH LATIN SMALL LETTER C
+FF44;F # FULLWIDTH LATIN SMALL LETTER D
+FF45;F # FULLWIDTH LATIN SMALL LETTER E
+FF46;F # FULLWIDTH LATIN SMALL LETTER F
+FF47;F # FULLWIDTH LATIN SMALL LETTER G
+FF48;F # FULLWIDTH LATIN SMALL LETTER H
+FF49;F # FULLWIDTH LATIN SMALL LETTER I
+FF4A;F # FULLWIDTH LATIN SMALL LETTER J
+FF4B;F # FULLWIDTH LATIN SMALL LETTER K
+FF4C;F # FULLWIDTH LATIN SMALL LETTER L
+FF4D;F # FULLWIDTH LATIN SMALL LETTER M
+FF4E;F # FULLWIDTH LATIN SMALL LETTER N
+FF4F;F # FULLWIDTH LATIN SMALL LETTER O
+FF50;F # FULLWIDTH LATIN SMALL LETTER P
+FF51;F # FULLWIDTH LATIN SMALL LETTER Q
+FF52;F # FULLWIDTH LATIN SMALL LETTER R
+FF53;F # FULLWIDTH LATIN SMALL LETTER S
+FF54;F # FULLWIDTH LATIN SMALL LETTER T
+FF55;F # FULLWIDTH LATIN SMALL LETTER U
+FF56;F # FULLWIDTH LATIN SMALL LETTER V
+FF57;F # FULLWIDTH LATIN SMALL LETTER W
+FF58;F # FULLWIDTH LATIN SMALL LETTER X
+FF59;F # FULLWIDTH LATIN SMALL LETTER Y
+FF5A;F # FULLWIDTH LATIN SMALL LETTER Z
+FF5B;F # FULLWIDTH LEFT CURLY BRACKET
+FF5C;F # FULLWIDTH VERTICAL LINE
+FF5D;F # FULLWIDTH RIGHT CURLY BRACKET
+FF5E;F # FULLWIDTH TILDE
+FF5F;F # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60;F # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61;H # HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;H # HALFWIDTH LEFT CORNER BRACKET
+FF63;H # HALFWIDTH RIGHT CORNER BRACKET
+FF64;H # HALFWIDTH IDEOGRAPHIC COMMA
+FF65;H # HALFWIDTH KATAKANA MIDDLE DOT
+FF66;H # HALFWIDTH KATAKANA LETTER WO
+FF67;H # HALFWIDTH KATAKANA LETTER SMALL A
+FF68;H # HALFWIDTH KATAKANA LETTER SMALL I
+FF69;H # HALFWIDTH KATAKANA LETTER SMALL U
+FF6A;H # HALFWIDTH KATAKANA LETTER SMALL E
+FF6B;H # HALFWIDTH KATAKANA LETTER SMALL O
+FF6C;H # HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D;H # HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E;H # HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F;H # HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;H # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71;H # HALFWIDTH KATAKANA LETTER A
+FF72;H # HALFWIDTH KATAKANA LETTER I
+FF73;H # HALFWIDTH KATAKANA LETTER U
+FF74;H # HALFWIDTH KATAKANA LETTER E
+FF75;H # HALFWIDTH KATAKANA LETTER O
+FF76;H # HALFWIDTH KATAKANA LETTER KA
+FF77;H # HALFWIDTH KATAKANA LETTER KI
+FF78;H # HALFWIDTH KATAKANA LETTER KU
+FF79;H # HALFWIDTH KATAKANA LETTER KE
+FF7A;H # HALFWIDTH KATAKANA LETTER KO
+FF7B;H # HALFWIDTH KATAKANA LETTER SA
+FF7C;H # HALFWIDTH KATAKANA LETTER SI
+FF7D;H # HALFWIDTH KATAKANA LETTER SU
+FF7E;H # HALFWIDTH KATAKANA LETTER SE
+FF7F;H # HALFWIDTH KATAKANA LETTER SO
+FF80;H # HALFWIDTH KATAKANA LETTER TA
+FF81;H # HALFWIDTH KATAKANA LETTER TI
+FF82;H # HALFWIDTH KATAKANA LETTER TU
+FF83;H # HALFWIDTH KATAKANA LETTER TE
+FF84;H # HALFWIDTH KATAKANA LETTER TO
+FF85;H # HALFWIDTH KATAKANA LETTER NA
+FF86;H # HALFWIDTH KATAKANA LETTER NI
+FF87;H # HALFWIDTH KATAKANA LETTER NU
+FF88;H # HALFWIDTH KATAKANA LETTER NE
+FF89;H # HALFWIDTH KATAKANA LETTER NO
+FF8A;H # HALFWIDTH KATAKANA LETTER HA
+FF8B;H # HALFWIDTH KATAKANA LETTER HI
+FF8C;H # HALFWIDTH KATAKANA LETTER HU
+FF8D;H # HALFWIDTH KATAKANA LETTER HE
+FF8E;H # HALFWIDTH KATAKANA LETTER HO
+FF8F;H # HALFWIDTH KATAKANA LETTER MA
+FF90;H # HALFWIDTH KATAKANA LETTER MI
+FF91;H # HALFWIDTH KATAKANA LETTER MU
+FF92;H # HALFWIDTH KATAKANA LETTER ME
+FF93;H # HALFWIDTH KATAKANA LETTER MO
+FF94;H # HALFWIDTH KATAKANA LETTER YA
+FF95;H # HALFWIDTH KATAKANA LETTER YU
+FF96;H # HALFWIDTH KATAKANA LETTER YO
+FF97;H # HALFWIDTH KATAKANA LETTER RA
+FF98;H # HALFWIDTH KATAKANA LETTER RI
+FF99;H # HALFWIDTH KATAKANA LETTER RU
+FF9A;H # HALFWIDTH KATAKANA LETTER RE
+FF9B;H # HALFWIDTH KATAKANA LETTER RO
+FF9C;H # HALFWIDTH KATAKANA LETTER WA
+FF9D;H # HALFWIDTH KATAKANA LETTER N
+FF9E;H # HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F;H # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0;H # HALFWIDTH HANGUL FILLER
+FFA1;H # HALFWIDTH HANGUL LETTER KIYEOK
+FFA2;H # HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3;H # HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4;H # HALFWIDTH HANGUL LETTER NIEUN
+FFA5;H # HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6;H # HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7;H # HALFWIDTH HANGUL LETTER TIKEUT
+FFA8;H # HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9;H # HALFWIDTH HANGUL LETTER RIEUL
+FFAA;H # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB;H # HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC;H # HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD;H # HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE;H # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF;H # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0;H # HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1;H # HALFWIDTH HANGUL LETTER MIEUM
+FFB2;H # HALFWIDTH HANGUL LETTER PIEUP
+FFB3;H # HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4;H # HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5;H # HALFWIDTH HANGUL LETTER SIOS
+FFB6;H # HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7;H # HALFWIDTH HANGUL LETTER IEUNG
+FFB8;H # HALFWIDTH HANGUL LETTER CIEUC
+FFB9;H # HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA;H # HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB;H # HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC;H # HALFWIDTH HANGUL LETTER THIEUTH
+FFBD;H # HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE;H # HALFWIDTH HANGUL LETTER HIEUH
+FFC2;H # HALFWIDTH HANGUL LETTER A
+FFC3;H # HALFWIDTH HANGUL LETTER AE
+FFC4;H # HALFWIDTH HANGUL LETTER YA
+FFC5;H # HALFWIDTH HANGUL LETTER YAE
+FFC6;H # HALFWIDTH HANGUL LETTER EO
+FFC7;H # HALFWIDTH HANGUL LETTER E
+FFCA;H # HALFWIDTH HANGUL LETTER YEO
+FFCB;H # HALFWIDTH HANGUL LETTER YE
+FFCC;H # HALFWIDTH HANGUL LETTER O
+FFCD;H # HALFWIDTH HANGUL LETTER WA
+FFCE;H # HALFWIDTH HANGUL LETTER WAE
+FFCF;H # HALFWIDTH HANGUL LETTER OE
+FFD2;H # HALFWIDTH HANGUL LETTER YO
+FFD3;H # HALFWIDTH HANGUL LETTER U
+FFD4;H # HALFWIDTH HANGUL LETTER WEO
+FFD5;H # HALFWIDTH HANGUL LETTER WE
+FFD6;H # HALFWIDTH HANGUL LETTER WI
+FFD7;H # HALFWIDTH HANGUL LETTER YU
+FFDA;H # HALFWIDTH HANGUL LETTER EU
+FFDB;H # HALFWIDTH HANGUL LETTER YI
+FFDC;H # HALFWIDTH HANGUL LETTER I
+FFE0;F # FULLWIDTH CENT SIGN
+FFE1;F # FULLWIDTH POUND SIGN
+FFE2;F # FULLWIDTH NOT SIGN
+FFE3;F # FULLWIDTH MACRON
+FFE4;F # FULLWIDTH BROKEN BAR
+FFE5;F # FULLWIDTH YEN SIGN
+FFE6;F # FULLWIDTH WON SIGN
+FFE8;H # HALFWIDTH FORMS LIGHT VERTICAL
+FFE9;H # HALFWIDTH LEFTWARDS ARROW
+FFEA;H # HALFWIDTH UPWARDS ARROW
+FFEB;H # HALFWIDTH RIGHTWARDS ARROW
+FFEC;H # HALFWIDTH DOWNWARDS ARROW
+FFED;H # HALFWIDTH BLACK SQUARE
+FFEE;H # HALFWIDTH WHITE CIRCLE
+FFF9;N # INTERLINEAR ANNOTATION ANCHOR
+FFFA;N # INTERLINEAR ANNOTATION SEPARATOR
+FFFB;N # INTERLINEAR ANNOTATION TERMINATOR
+FFFC;N # OBJECT REPLACEMENT CHARACTER
+FFFD;A # REPLACEMENT CHARACTER
+10000;N # LINEAR B SYLLABLE B008 A
+10001;N # LINEAR B SYLLABLE B038 E
+10002;N # LINEAR B SYLLABLE B028 I
+10003;N # LINEAR B SYLLABLE B061 O
+10004;N # LINEAR B SYLLABLE B010 U
+10005;N # LINEAR B SYLLABLE B001 DA
+10006;N # LINEAR B SYLLABLE B045 DE
+10007;N # LINEAR B SYLLABLE B007 DI
+10008;N # LINEAR B SYLLABLE B014 DO
+10009;N # LINEAR B SYLLABLE B051 DU
+1000A;N # LINEAR B SYLLABLE B057 JA
+1000B;N # LINEAR B SYLLABLE B046 JE
+1000D;N # LINEAR B SYLLABLE B036 JO
+1000E;N # LINEAR B SYLLABLE B065 JU
+1000F;N # LINEAR B SYLLABLE B077 KA
+10010;N # LINEAR B SYLLABLE B044 KE
+10011;N # LINEAR B SYLLABLE B067 KI
+10012;N # LINEAR B SYLLABLE B070 KO
+10013;N # LINEAR B SYLLABLE B081 KU
+10014;N # LINEAR B SYLLABLE B080 MA
+10015;N # LINEAR B SYLLABLE B013 ME
+10016;N # LINEAR B SYLLABLE B073 MI
+10017;N # LINEAR B SYLLABLE B015 MO
+10018;N # LINEAR B SYLLABLE B023 MU
+10019;N # LINEAR B SYLLABLE B006 NA
+1001A;N # LINEAR B SYLLABLE B024 NE
+1001B;N # LINEAR B SYLLABLE B030 NI
+1001C;N # LINEAR B SYLLABLE B052 NO
+1001D;N # LINEAR B SYLLABLE B055 NU
+1001E;N # LINEAR B SYLLABLE B003 PA
+1001F;N # LINEAR B SYLLABLE B072 PE
+10020;N # LINEAR B SYLLABLE B039 PI
+10021;N # LINEAR B SYLLABLE B011 PO
+10022;N # LINEAR B SYLLABLE B050 PU
+10023;N # LINEAR B SYLLABLE B016 QA
+10024;N # LINEAR B SYLLABLE B078 QE
+10025;N # LINEAR B SYLLABLE B021 QI
+10026;N # LINEAR B SYLLABLE B032 QO
+10028;N # LINEAR B SYLLABLE B060 RA
+10029;N # LINEAR B SYLLABLE B027 RE
+1002A;N # LINEAR B SYLLABLE B053 RI
+1002B;N # LINEAR B SYLLABLE B002 RO
+1002C;N # LINEAR B SYLLABLE B026 RU
+1002D;N # LINEAR B SYLLABLE B031 SA
+1002E;N # LINEAR B SYLLABLE B009 SE
+1002F;N # LINEAR B SYLLABLE B041 SI
+10030;N # LINEAR B SYLLABLE B012 SO
+10031;N # LINEAR B SYLLABLE B058 SU
+10032;N # LINEAR B SYLLABLE B059 TA
+10033;N # LINEAR B SYLLABLE B004 TE
+10034;N # LINEAR B SYLLABLE B037 TI
+10035;N # LINEAR B SYLLABLE B005 TO
+10036;N # LINEAR B SYLLABLE B069 TU
+10037;N # LINEAR B SYLLABLE B054 WA
+10038;N # LINEAR B SYLLABLE B075 WE
+10039;N # LINEAR B SYLLABLE B040 WI
+1003A;N # LINEAR B SYLLABLE B042 WO
+1003C;N # LINEAR B SYLLABLE B017 ZA
+1003D;N # LINEAR B SYLLABLE B074 ZE
+1003F;N # LINEAR B SYLLABLE B020 ZO
+10040;N # LINEAR B SYLLABLE B025 A2
+10041;N # LINEAR B SYLLABLE B043 A3
+10042;N # LINEAR B SYLLABLE B085 AU
+10043;N # LINEAR B SYLLABLE B071 DWE
+10044;N # LINEAR B SYLLABLE B090 DWO
+10045;N # LINEAR B SYLLABLE B048 NWA
+10046;N # LINEAR B SYLLABLE B029 PU2
+10047;N # LINEAR B SYLLABLE B062 PTE
+10048;N # LINEAR B SYLLABLE B076 RA2
+10049;N # LINEAR B SYLLABLE B033 RA3
+1004A;N # LINEAR B SYLLABLE B068 RO2
+1004B;N # LINEAR B SYLLABLE B066 TA2
+1004C;N # LINEAR B SYLLABLE B087 TWE
+1004D;N # LINEAR B SYLLABLE B091 TWO
+10050;N # LINEAR B SYMBOL B018
+10051;N # LINEAR B SYMBOL B019
+10052;N # LINEAR B SYMBOL B022
+10053;N # LINEAR B SYMBOL B034
+10054;N # LINEAR B SYMBOL B047
+10055;N # LINEAR B SYMBOL B049
+10056;N # LINEAR B SYMBOL B056
+10057;N # LINEAR B SYMBOL B063
+10058;N # LINEAR B SYMBOL B064
+10059;N # LINEAR B SYMBOL B079
+1005A;N # LINEAR B SYMBOL B082
+1005B;N # LINEAR B SYMBOL B083
+1005C;N # LINEAR B SYMBOL B086
+1005D;N # LINEAR B SYMBOL B089
+10080;N # LINEAR B IDEOGRAM B100 MAN
+10081;N # LINEAR B IDEOGRAM B102 WOMAN
+10082;N # LINEAR B IDEOGRAM B104 DEER
+10083;N # LINEAR B IDEOGRAM B105 EQUID
+10084;N # LINEAR B IDEOGRAM B105F MARE
+10085;N # LINEAR B IDEOGRAM B105M STALLION
+10086;N # LINEAR B IDEOGRAM B106F EWE
+10087;N # LINEAR B IDEOGRAM B106M RAM
+10088;N # LINEAR B IDEOGRAM B107F SHE-GOAT
+10089;N # LINEAR B IDEOGRAM B107M HE-GOAT
+1008A;N # LINEAR B IDEOGRAM B108F SOW
+1008B;N # LINEAR B IDEOGRAM B108M BOAR
+1008C;N # LINEAR B IDEOGRAM B109F COW
+1008D;N # LINEAR B IDEOGRAM B109M BULL
+1008E;N # LINEAR B IDEOGRAM B120 WHEAT
+1008F;N # LINEAR B IDEOGRAM B121 BARLEY
+10090;N # LINEAR B IDEOGRAM B122 OLIVE
+10091;N # LINEAR B IDEOGRAM B123 SPICE
+10092;N # LINEAR B IDEOGRAM B125 CYPERUS
+10093;N # LINEAR B MONOGRAM B127 KAPO
+10094;N # LINEAR B MONOGRAM B128 KANAKO
+10095;N # LINEAR B IDEOGRAM B130 OIL
+10096;N # LINEAR B IDEOGRAM B131 WINE
+10097;N # LINEAR B IDEOGRAM B132
+10098;N # LINEAR B MONOGRAM B133 AREPA
+10099;N # LINEAR B MONOGRAM B135 MERI
+1009A;N # LINEAR B IDEOGRAM B140 BRONZE
+1009B;N # LINEAR B IDEOGRAM B141 GOLD
+1009C;N # LINEAR B IDEOGRAM B142
+1009D;N # LINEAR B IDEOGRAM B145 WOOL
+1009E;N # LINEAR B IDEOGRAM B146
+1009F;N # LINEAR B IDEOGRAM B150
+100A0;N # LINEAR B IDEOGRAM B151 HORN
+100A1;N # LINEAR B IDEOGRAM B152
+100A2;N # LINEAR B IDEOGRAM B153
+100A3;N # LINEAR B IDEOGRAM B154
+100A4;N # LINEAR B MONOGRAM B156 TURO2
+100A5;N # LINEAR B IDEOGRAM B157
+100A6;N # LINEAR B IDEOGRAM B158
+100A7;N # LINEAR B IDEOGRAM B159 CLOTH
+100A8;N # LINEAR B IDEOGRAM B160
+100A9;N # LINEAR B IDEOGRAM B161
+100AA;N # LINEAR B IDEOGRAM B162 GARMENT
+100AB;N # LINEAR B IDEOGRAM B163 ARMOUR
+100AC;N # LINEAR B IDEOGRAM B164
+100AD;N # LINEAR B IDEOGRAM B165
+100AE;N # LINEAR B IDEOGRAM B166
+100AF;N # LINEAR B IDEOGRAM B167
+100B0;N # LINEAR B IDEOGRAM B168
+100B1;N # LINEAR B IDEOGRAM B169
+100B2;N # LINEAR B IDEOGRAM B170
+100B3;N # LINEAR B IDEOGRAM B171
+100B4;N # LINEAR B IDEOGRAM B172
+100B5;N # LINEAR B IDEOGRAM B173 MONTH
+100B6;N # LINEAR B IDEOGRAM B174
+100B7;N # LINEAR B IDEOGRAM B176 TREE
+100B8;N # LINEAR B IDEOGRAM B177
+100B9;N # LINEAR B IDEOGRAM B178
+100BA;N # LINEAR B IDEOGRAM B179
+100BB;N # LINEAR B IDEOGRAM B180
+100BC;N # LINEAR B IDEOGRAM B181
+100BD;N # LINEAR B IDEOGRAM B182
+100BE;N # LINEAR B IDEOGRAM B183
+100BF;N # LINEAR B IDEOGRAM B184
+100C0;N # LINEAR B IDEOGRAM B185
+100C1;N # LINEAR B IDEOGRAM B189
+100C2;N # LINEAR B IDEOGRAM B190
+100C3;N # LINEAR B IDEOGRAM B191 HELMET
+100C4;N # LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5;N # LINEAR B IDEOGRAM B225 BATHTUB
+100C6;N # LINEAR B IDEOGRAM B230 SPEAR
+100C7;N # LINEAR B IDEOGRAM B231 ARROW
+100C8;N # LINEAR B IDEOGRAM B232
+100C9;N # LINEAR B IDEOGRAM B233 SWORD
+100CA;N # LINEAR B IDEOGRAM B234
+100CB;N # LINEAR B IDEOGRAM B236
+100CC;N # LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD;N # LINEAR B IDEOGRAM B241 CHARIOT
+100CE;N # LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF;N # LINEAR B IDEOGRAM B243 WHEEL
+100D0;N # LINEAR B IDEOGRAM B245
+100D1;N # LINEAR B IDEOGRAM B246
+100D2;N # LINEAR B MONOGRAM B247 DIPTE
+100D3;N # LINEAR B IDEOGRAM B248
+100D4;N # LINEAR B IDEOGRAM B249
+100D5;N # LINEAR B IDEOGRAM B251
+100D6;N # LINEAR B IDEOGRAM B252
+100D7;N # LINEAR B IDEOGRAM B253
+100D8;N # LINEAR B IDEOGRAM B254 DART
+100D9;N # LINEAR B IDEOGRAM B255
+100DA;N # LINEAR B IDEOGRAM B256
+100DB;N # LINEAR B IDEOGRAM B257
+100DC;N # LINEAR B IDEOGRAM B258
+100DD;N # LINEAR B IDEOGRAM B259
+100DE;N # LINEAR B IDEOGRAM VESSEL B155
+100DF;N # LINEAR B IDEOGRAM VESSEL B200
+100E0;N # LINEAR B IDEOGRAM VESSEL B201
+100E1;N # LINEAR B IDEOGRAM VESSEL B202
+100E2;N # LINEAR B IDEOGRAM VESSEL B203
+100E3;N # LINEAR B IDEOGRAM VESSEL B204
+100E4;N # LINEAR B IDEOGRAM VESSEL B205
+100E5;N # LINEAR B IDEOGRAM VESSEL B206
+100E6;N # LINEAR B IDEOGRAM VESSEL B207
+100E7;N # LINEAR B IDEOGRAM VESSEL B208
+100E8;N # LINEAR B IDEOGRAM VESSEL B209
+100E9;N # LINEAR B IDEOGRAM VESSEL B210
+100EA;N # LINEAR B IDEOGRAM VESSEL B211
+100EB;N # LINEAR B IDEOGRAM VESSEL B212
+100EC;N # LINEAR B IDEOGRAM VESSEL B213
+100ED;N # LINEAR B IDEOGRAM VESSEL B214
+100EE;N # LINEAR B IDEOGRAM VESSEL B215
+100EF;N # LINEAR B IDEOGRAM VESSEL B216
+100F0;N # LINEAR B IDEOGRAM VESSEL B217
+100F1;N # LINEAR B IDEOGRAM VESSEL B218
+100F2;N # LINEAR B IDEOGRAM VESSEL B219
+100F3;N # LINEAR B IDEOGRAM VESSEL B221
+100F4;N # LINEAR B IDEOGRAM VESSEL B222
+100F5;N # LINEAR B IDEOGRAM VESSEL B226
+100F6;N # LINEAR B IDEOGRAM VESSEL B227
+100F7;N # LINEAR B IDEOGRAM VESSEL B228
+100F8;N # LINEAR B IDEOGRAM VESSEL B229
+100F9;N # LINEAR B IDEOGRAM VESSEL B250
+100FA;N # LINEAR B IDEOGRAM VESSEL B305
+10100;N # AEGEAN WORD SEPARATOR LINE
+10101;N # AEGEAN WORD SEPARATOR DOT
+10102;N # AEGEAN CHECK MARK
+10107;N # AEGEAN NUMBER ONE
+10108;N # AEGEAN NUMBER TWO
+10109;N # AEGEAN NUMBER THREE
+1010A;N # AEGEAN NUMBER FOUR
+1010B;N # AEGEAN NUMBER FIVE
+1010C;N # AEGEAN NUMBER SIX
+1010D;N # AEGEAN NUMBER SEVEN
+1010E;N # AEGEAN NUMBER EIGHT
+1010F;N # AEGEAN NUMBER NINE
+10110;N # AEGEAN NUMBER TEN
+10111;N # AEGEAN NUMBER TWENTY
+10112;N # AEGEAN NUMBER THIRTY
+10113;N # AEGEAN NUMBER FORTY
+10114;N # AEGEAN NUMBER FIFTY
+10115;N # AEGEAN NUMBER SIXTY
+10116;N # AEGEAN NUMBER SEVENTY
+10117;N # AEGEAN NUMBER EIGHTY
+10118;N # AEGEAN NUMBER NINETY
+10119;N # AEGEAN NUMBER ONE HUNDRED
+1011A;N # AEGEAN NUMBER TWO HUNDRED
+1011B;N # AEGEAN NUMBER THREE HUNDRED
+1011C;N # AEGEAN NUMBER FOUR HUNDRED
+1011D;N # AEGEAN NUMBER FIVE HUNDRED
+1011E;N # AEGEAN NUMBER SIX HUNDRED
+1011F;N # AEGEAN NUMBER SEVEN HUNDRED
+10120;N # AEGEAN NUMBER EIGHT HUNDRED
+10121;N # AEGEAN NUMBER NINE HUNDRED
+10122;N # AEGEAN NUMBER ONE THOUSAND
+10123;N # AEGEAN NUMBER TWO THOUSAND
+10124;N # AEGEAN NUMBER THREE THOUSAND
+10125;N # AEGEAN NUMBER FOUR THOUSAND
+10126;N # AEGEAN NUMBER FIVE THOUSAND
+10127;N # AEGEAN NUMBER SIX THOUSAND
+10128;N # AEGEAN NUMBER SEVEN THOUSAND
+10129;N # AEGEAN NUMBER EIGHT THOUSAND
+1012A;N # AEGEAN NUMBER NINE THOUSAND
+1012B;N # AEGEAN NUMBER TEN THOUSAND
+1012C;N # AEGEAN NUMBER TWENTY THOUSAND
+1012D;N # AEGEAN NUMBER THIRTY THOUSAND
+1012E;N # AEGEAN NUMBER FORTY THOUSAND
+1012F;N # AEGEAN NUMBER FIFTY THOUSAND
+10130;N # AEGEAN NUMBER SIXTY THOUSAND
+10131;N # AEGEAN NUMBER SEVENTY THOUSAND
+10132;N # AEGEAN NUMBER EIGHTY THOUSAND
+10133;N # AEGEAN NUMBER NINETY THOUSAND
+10137;N # AEGEAN WEIGHT BASE UNIT
+10138;N # AEGEAN WEIGHT FIRST SUBUNIT
+10139;N # AEGEAN WEIGHT SECOND SUBUNIT
+1013A;N # AEGEAN WEIGHT THIRD SUBUNIT
+1013B;N # AEGEAN WEIGHT FOURTH SUBUNIT
+1013C;N # AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D;N # AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E;N # AEGEAN MEASURE SECOND SUBUNIT
+1013F;N # AEGEAN MEASURE THIRD SUBUNIT
+10140;N # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141;N # GREEK ACROPHONIC ATTIC ONE HALF
+10142;N # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143;N # GREEK ACROPHONIC ATTIC FIVE
+10144;N # GREEK ACROPHONIC ATTIC FIFTY
+10145;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148;N # GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149;N # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A;N # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B;N # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D;N # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E;N # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F;N # GREEK ACROPHONIC ATTIC FIVE STATERS
+10150;N # GREEK ACROPHONIC ATTIC TEN STATERS
+10151;N # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152;N # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153;N # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154;N # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155;N # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156;N # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157;N # GREEK ACROPHONIC ATTIC TEN MNAS
+10158;N # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159;N # GREEK ACROPHONIC THESPIAN ONE
+1015A;N # GREEK ACROPHONIC HERMIONIAN ONE
+1015B;N # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C;N # GREEK ACROPHONIC THESPIAN TWO
+1015D;N # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E;N # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F;N # GREEK ACROPHONIC TROEZENIAN FIVE
+10160;N # GREEK ACROPHONIC TROEZENIAN TEN
+10161;N # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162;N # GREEK ACROPHONIC HERMIONIAN TEN
+10163;N # GREEK ACROPHONIC MESSENIAN TEN
+10164;N # GREEK ACROPHONIC THESPIAN TEN
+10165;N # GREEK ACROPHONIC THESPIAN THIRTY
+10166;N # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167;N # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168;N # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169;N # GREEK ACROPHONIC THESPIAN FIFTY
+1016A;N # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B;N # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C;N # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D;N # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E;N # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F;N # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170;N # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171;N # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172;N # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173;N # GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174;N # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175;N # GREEK ONE HALF SIGN
+10176;N # GREEK ONE HALF SIGN ALTERNATE FORM
+10177;N # GREEK TWO THIRDS SIGN
+10178;N # GREEK THREE QUARTERS SIGN
+10179;N # GREEK YEAR SIGN
+1017A;N # GREEK TALENT SIGN
+1017B;N # GREEK DRACHMA SIGN
+1017C;N # GREEK OBOL SIGN
+1017D;N # GREEK TWO OBOLS SIGN
+1017E;N # GREEK THREE OBOLS SIGN
+1017F;N # GREEK FOUR OBOLS SIGN
+10180;N # GREEK FIVE OBOLS SIGN
+10181;N # GREEK METRETES SIGN
+10182;N # GREEK KYATHOS BASE SIGN
+10183;N # GREEK LITRA SIGN
+10184;N # GREEK OUNKIA SIGN
+10185;N # GREEK XESTES SIGN
+10186;N # GREEK ARTABE SIGN
+10187;N # GREEK AROURA SIGN
+10188;N # GREEK GRAMMA SIGN
+10189;N # GREEK TRYBLION BASE SIGN
+1018A;N # GREEK ZERO SIGN
+10300;N # OLD ITALIC LETTER A
+10301;N # OLD ITALIC LETTER BE
+10302;N # OLD ITALIC LETTER KE
+10303;N # OLD ITALIC LETTER DE
+10304;N # OLD ITALIC LETTER E
+10305;N # OLD ITALIC LETTER VE
+10306;N # OLD ITALIC LETTER ZE
+10307;N # OLD ITALIC LETTER HE
+10308;N # OLD ITALIC LETTER THE
+10309;N # OLD ITALIC LETTER I
+1030A;N # OLD ITALIC LETTER KA
+1030B;N # OLD ITALIC LETTER EL
+1030C;N # OLD ITALIC LETTER EM
+1030D;N # OLD ITALIC LETTER EN
+1030E;N # OLD ITALIC LETTER ESH
+1030F;N # OLD ITALIC LETTER O
+10310;N # OLD ITALIC LETTER PE
+10311;N # OLD ITALIC LETTER SHE
+10312;N # OLD ITALIC LETTER KU
+10313;N # OLD ITALIC LETTER ER
+10314;N # OLD ITALIC LETTER ES
+10315;N # OLD ITALIC LETTER TE
+10316;N # OLD ITALIC LETTER U
+10317;N # OLD ITALIC LETTER EKS
+10318;N # OLD ITALIC LETTER PHE
+10319;N # OLD ITALIC LETTER KHE
+1031A;N # OLD ITALIC LETTER EF
+1031B;N # OLD ITALIC LETTER ERS
+1031C;N # OLD ITALIC LETTER CHE
+1031D;N # OLD ITALIC LETTER II
+1031E;N # OLD ITALIC LETTER UU
+10320;N # OLD ITALIC NUMERAL ONE
+10321;N # OLD ITALIC NUMERAL FIVE
+10322;N # OLD ITALIC NUMERAL TEN
+10323;N # OLD ITALIC NUMERAL FIFTY
+10330;N # GOTHIC LETTER AHSA
+10331;N # GOTHIC LETTER BAIRKAN
+10332;N # GOTHIC LETTER GIBA
+10333;N # GOTHIC LETTER DAGS
+10334;N # GOTHIC LETTER AIHVUS
+10335;N # GOTHIC LETTER QAIRTHRA
+10336;N # GOTHIC LETTER IUJA
+10337;N # GOTHIC LETTER HAGL
+10338;N # GOTHIC LETTER THIUTH
+10339;N # GOTHIC LETTER EIS
+1033A;N # GOTHIC LETTER KUSMA
+1033B;N # GOTHIC LETTER LAGUS
+1033C;N # GOTHIC LETTER MANNA
+1033D;N # GOTHIC LETTER NAUTHS
+1033E;N # GOTHIC LETTER JER
+1033F;N # GOTHIC LETTER URUS
+10340;N # GOTHIC LETTER PAIRTHRA
+10341;N # GOTHIC LETTER NINETY
+10342;N # GOTHIC LETTER RAIDA
+10343;N # GOTHIC LETTER SAUIL
+10344;N # GOTHIC LETTER TEIWS
+10345;N # GOTHIC LETTER WINJA
+10346;N # GOTHIC LETTER FAIHU
+10347;N # GOTHIC LETTER IGGWS
+10348;N # GOTHIC LETTER HWAIR
+10349;N # GOTHIC LETTER OTHAL
+1034A;N # GOTHIC LETTER NINE HUNDRED
+10380;N # UGARITIC LETTER ALPA
+10381;N # UGARITIC LETTER BETA
+10382;N # UGARITIC LETTER GAMLA
+10383;N # UGARITIC LETTER KHA
+10384;N # UGARITIC LETTER DELTA
+10385;N # UGARITIC LETTER HO
+10386;N # UGARITIC LETTER WO
+10387;N # UGARITIC LETTER ZETA
+10388;N # UGARITIC LETTER HOTA
+10389;N # UGARITIC LETTER TET
+1038A;N # UGARITIC LETTER YOD
+1038B;N # UGARITIC LETTER KAF
+1038C;N # UGARITIC LETTER SHIN
+1038D;N # UGARITIC LETTER LAMDA
+1038E;N # UGARITIC LETTER MEM
+1038F;N # UGARITIC LETTER DHAL
+10390;N # UGARITIC LETTER NUN
+10391;N # UGARITIC LETTER ZU
+10392;N # UGARITIC LETTER SAMKA
+10393;N # UGARITIC LETTER AIN
+10394;N # UGARITIC LETTER PU
+10395;N # UGARITIC LETTER SADE
+10396;N # UGARITIC LETTER QOPA
+10397;N # UGARITIC LETTER RASHA
+10398;N # UGARITIC LETTER THANNA
+10399;N # UGARITIC LETTER GHAIN
+1039A;N # UGARITIC LETTER TO
+1039B;N # UGARITIC LETTER I
+1039C;N # UGARITIC LETTER U
+1039D;N # UGARITIC LETTER SSU
+1039F;N # UGARITIC WORD DIVIDER
+103A0;N # OLD PERSIAN SIGN A
+103A1;N # OLD PERSIAN SIGN I
+103A2;N # OLD PERSIAN SIGN U
+103A3;N # OLD PERSIAN SIGN KA
+103A4;N # OLD PERSIAN SIGN KU
+103A5;N # OLD PERSIAN SIGN GA
+103A6;N # OLD PERSIAN SIGN GU
+103A7;N # OLD PERSIAN SIGN XA
+103A8;N # OLD PERSIAN SIGN CA
+103A9;N # OLD PERSIAN SIGN JA
+103AA;N # OLD PERSIAN SIGN JI
+103AB;N # OLD PERSIAN SIGN TA
+103AC;N # OLD PERSIAN SIGN TU
+103AD;N # OLD PERSIAN SIGN DA
+103AE;N # OLD PERSIAN SIGN DI
+103AF;N # OLD PERSIAN SIGN DU
+103B0;N # OLD PERSIAN SIGN THA
+103B1;N # OLD PERSIAN SIGN PA
+103B2;N # OLD PERSIAN SIGN BA
+103B3;N # OLD PERSIAN SIGN FA
+103B4;N # OLD PERSIAN SIGN NA
+103B5;N # OLD PERSIAN SIGN NU
+103B6;N # OLD PERSIAN SIGN MA
+103B7;N # OLD PERSIAN SIGN MI
+103B8;N # OLD PERSIAN SIGN MU
+103B9;N # OLD PERSIAN SIGN YA
+103BA;N # OLD PERSIAN SIGN VA
+103BB;N # OLD PERSIAN SIGN VI
+103BC;N # OLD PERSIAN SIGN RA
+103BD;N # OLD PERSIAN SIGN RU
+103BE;N # OLD PERSIAN SIGN LA
+103BF;N # OLD PERSIAN SIGN SA
+103C0;N # OLD PERSIAN SIGN ZA
+103C1;N # OLD PERSIAN SIGN SHA
+103C2;N # OLD PERSIAN SIGN SSA
+103C3;N # OLD PERSIAN SIGN HA
+103C8;N # OLD PERSIAN SIGN AURAMAZDAA
+103C9;N # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA;N # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB;N # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC;N # OLD PERSIAN SIGN DAHYAAUSH
+103CD;N # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE;N # OLD PERSIAN SIGN BAGA
+103CF;N # OLD PERSIAN SIGN BUUMISH
+103D0;N # OLD PERSIAN WORD DIVIDER
+103D1;N # OLD PERSIAN NUMBER ONE
+103D2;N # OLD PERSIAN NUMBER TWO
+103D3;N # OLD PERSIAN NUMBER TEN
+103D4;N # OLD PERSIAN NUMBER TWENTY
+103D5;N # OLD PERSIAN NUMBER HUNDRED
+10400;N # DESERET CAPITAL LETTER LONG I
+10401;N # DESERET CAPITAL LETTER LONG E
+10402;N # DESERET CAPITAL LETTER LONG A
+10403;N # DESERET CAPITAL LETTER LONG AH
+10404;N # DESERET CAPITAL LETTER LONG O
+10405;N # DESERET CAPITAL LETTER LONG OO
+10406;N # DESERET CAPITAL LETTER SHORT I
+10407;N # DESERET CAPITAL LETTER SHORT E
+10408;N # DESERET CAPITAL LETTER SHORT A
+10409;N # DESERET CAPITAL LETTER SHORT AH
+1040A;N # DESERET CAPITAL LETTER SHORT O
+1040B;N # DESERET CAPITAL LETTER SHORT OO
+1040C;N # DESERET CAPITAL LETTER AY
+1040D;N # DESERET CAPITAL LETTER OW
+1040E;N # DESERET CAPITAL LETTER WU
+1040F;N # DESERET CAPITAL LETTER YEE
+10410;N # DESERET CAPITAL LETTER H
+10411;N # DESERET CAPITAL LETTER PEE
+10412;N # DESERET CAPITAL LETTER BEE
+10413;N # DESERET CAPITAL LETTER TEE
+10414;N # DESERET CAPITAL LETTER DEE
+10415;N # DESERET CAPITAL LETTER CHEE
+10416;N # DESERET CAPITAL LETTER JEE
+10417;N # DESERET CAPITAL LETTER KAY
+10418;N # DESERET CAPITAL LETTER GAY
+10419;N # DESERET CAPITAL LETTER EF
+1041A;N # DESERET CAPITAL LETTER VEE
+1041B;N # DESERET CAPITAL LETTER ETH
+1041C;N # DESERET CAPITAL LETTER THEE
+1041D;N # DESERET CAPITAL LETTER ES
+1041E;N # DESERET CAPITAL LETTER ZEE
+1041F;N # DESERET CAPITAL LETTER ESH
+10420;N # DESERET CAPITAL LETTER ZHEE
+10421;N # DESERET CAPITAL LETTER ER
+10422;N # DESERET CAPITAL LETTER EL
+10423;N # DESERET CAPITAL LETTER EM
+10424;N # DESERET CAPITAL LETTER EN
+10425;N # DESERET CAPITAL LETTER ENG
+10426;N # DESERET CAPITAL LETTER OI
+10427;N # DESERET CAPITAL LETTER EW
+10428;N # DESERET SMALL LETTER LONG I
+10429;N # DESERET SMALL LETTER LONG E
+1042A;N # DESERET SMALL LETTER LONG A
+1042B;N # DESERET SMALL LETTER LONG AH
+1042C;N # DESERET SMALL LETTER LONG O
+1042D;N # DESERET SMALL LETTER LONG OO
+1042E;N # DESERET SMALL LETTER SHORT I
+1042F;N # DESERET SMALL LETTER SHORT E
+10430;N # DESERET SMALL LETTER SHORT A
+10431;N # DESERET SMALL LETTER SHORT AH
+10432;N # DESERET SMALL LETTER SHORT O
+10433;N # DESERET SMALL LETTER SHORT OO
+10434;N # DESERET SMALL LETTER AY
+10435;N # DESERET SMALL LETTER OW
+10436;N # DESERET SMALL LETTER WU
+10437;N # DESERET SMALL LETTER YEE
+10438;N # DESERET SMALL LETTER H
+10439;N # DESERET SMALL LETTER PEE
+1043A;N # DESERET SMALL LETTER BEE
+1043B;N # DESERET SMALL LETTER TEE
+1043C;N # DESERET SMALL LETTER DEE
+1043D;N # DESERET SMALL LETTER CHEE
+1043E;N # DESERET SMALL LETTER JEE
+1043F;N # DESERET SMALL LETTER KAY
+10440;N # DESERET SMALL LETTER GAY
+10441;N # DESERET SMALL LETTER EF
+10442;N # DESERET SMALL LETTER VEE
+10443;N # DESERET SMALL LETTER ETH
+10444;N # DESERET SMALL LETTER THEE
+10445;N # DESERET SMALL LETTER ES
+10446;N # DESERET SMALL LETTER ZEE
+10447;N # DESERET SMALL LETTER ESH
+10448;N # DESERET SMALL LETTER ZHEE
+10449;N # DESERET SMALL LETTER ER
+1044A;N # DESERET SMALL LETTER EL
+1044B;N # DESERET SMALL LETTER EM
+1044C;N # DESERET SMALL LETTER EN
+1044D;N # DESERET SMALL LETTER ENG
+1044E;N # DESERET SMALL LETTER OI
+1044F;N # DESERET SMALL LETTER EW
+10450;N # SHAVIAN LETTER PEEP
+10451;N # SHAVIAN LETTER TOT
+10452;N # SHAVIAN LETTER KICK
+10453;N # SHAVIAN LETTER FEE
+10454;N # SHAVIAN LETTER THIGH
+10455;N # SHAVIAN LETTER SO
+10456;N # SHAVIAN LETTER SURE
+10457;N # SHAVIAN LETTER CHURCH
+10458;N # SHAVIAN LETTER YEA
+10459;N # SHAVIAN LETTER HUNG
+1045A;N # SHAVIAN LETTER BIB
+1045B;N # SHAVIAN LETTER DEAD
+1045C;N # SHAVIAN LETTER GAG
+1045D;N # SHAVIAN LETTER VOW
+1045E;N # SHAVIAN LETTER THEY
+1045F;N # SHAVIAN LETTER ZOO
+10460;N # SHAVIAN LETTER MEASURE
+10461;N # SHAVIAN LETTER JUDGE
+10462;N # SHAVIAN LETTER WOE
+10463;N # SHAVIAN LETTER HA-HA
+10464;N # SHAVIAN LETTER LOLL
+10465;N # SHAVIAN LETTER MIME
+10466;N # SHAVIAN LETTER IF
+10467;N # SHAVIAN LETTER EGG
+10468;N # SHAVIAN LETTER ASH
+10469;N # SHAVIAN LETTER ADO
+1046A;N # SHAVIAN LETTER ON
+1046B;N # SHAVIAN LETTER WOOL
+1046C;N # SHAVIAN LETTER OUT
+1046D;N # SHAVIAN LETTER AH
+1046E;N # SHAVIAN LETTER ROAR
+1046F;N # SHAVIAN LETTER NUN
+10470;N # SHAVIAN LETTER EAT
+10471;N # SHAVIAN LETTER AGE
+10472;N # SHAVIAN LETTER ICE
+10473;N # SHAVIAN LETTER UP
+10474;N # SHAVIAN LETTER OAK
+10475;N # SHAVIAN LETTER OOZE
+10476;N # SHAVIAN LETTER OIL
+10477;N # SHAVIAN LETTER AWE
+10478;N # SHAVIAN LETTER ARE
+10479;N # SHAVIAN LETTER OR
+1047A;N # SHAVIAN LETTER AIR
+1047B;N # SHAVIAN LETTER ERR
+1047C;N # SHAVIAN LETTER ARRAY
+1047D;N # SHAVIAN LETTER EAR
+1047E;N # SHAVIAN LETTER IAN
+1047F;N # SHAVIAN LETTER YEW
+10480;N # OSMANYA LETTER ALEF
+10481;N # OSMANYA LETTER BA
+10482;N # OSMANYA LETTER TA
+10483;N # OSMANYA LETTER JA
+10484;N # OSMANYA LETTER XA
+10485;N # OSMANYA LETTER KHA
+10486;N # OSMANYA LETTER DEEL
+10487;N # OSMANYA LETTER RA
+10488;N # OSMANYA LETTER SA
+10489;N # OSMANYA LETTER SHIIN
+1048A;N # OSMANYA LETTER DHA
+1048B;N # OSMANYA LETTER CAYN
+1048C;N # OSMANYA LETTER GA
+1048D;N # OSMANYA LETTER FA
+1048E;N # OSMANYA LETTER QAAF
+1048F;N # OSMANYA LETTER KAAF
+10490;N # OSMANYA LETTER LAAN
+10491;N # OSMANYA LETTER MIIN
+10492;N # OSMANYA LETTER NUUN
+10493;N # OSMANYA LETTER WAW
+10494;N # OSMANYA LETTER HA
+10495;N # OSMANYA LETTER YA
+10496;N # OSMANYA LETTER A
+10497;N # OSMANYA LETTER E
+10498;N # OSMANYA LETTER I
+10499;N # OSMANYA LETTER O
+1049A;N # OSMANYA LETTER U
+1049B;N # OSMANYA LETTER AA
+1049C;N # OSMANYA LETTER EE
+1049D;N # OSMANYA LETTER OO
+104A0;N # OSMANYA DIGIT ZERO
+104A1;N # OSMANYA DIGIT ONE
+104A2;N # OSMANYA DIGIT TWO
+104A3;N # OSMANYA DIGIT THREE
+104A4;N # OSMANYA DIGIT FOUR
+104A5;N # OSMANYA DIGIT FIVE
+104A6;N # OSMANYA DIGIT SIX
+104A7;N # OSMANYA DIGIT SEVEN
+104A8;N # OSMANYA DIGIT EIGHT
+104A9;N # OSMANYA DIGIT NINE
+10800;N # CYPRIOT SYLLABLE A
+10801;N # CYPRIOT SYLLABLE E
+10802;N # CYPRIOT SYLLABLE I
+10803;N # CYPRIOT SYLLABLE O
+10804;N # CYPRIOT SYLLABLE U
+10805;N # CYPRIOT SYLLABLE JA
+10808;N # CYPRIOT SYLLABLE JO
+1080A;N # CYPRIOT SYLLABLE KA
+1080B;N # CYPRIOT SYLLABLE KE
+1080C;N # CYPRIOT SYLLABLE KI
+1080D;N # CYPRIOT SYLLABLE KO
+1080E;N # CYPRIOT SYLLABLE KU
+1080F;N # CYPRIOT SYLLABLE LA
+10810;N # CYPRIOT SYLLABLE LE
+10811;N # CYPRIOT SYLLABLE LI
+10812;N # CYPRIOT SYLLABLE LO
+10813;N # CYPRIOT SYLLABLE LU
+10814;N # CYPRIOT SYLLABLE MA
+10815;N # CYPRIOT SYLLABLE ME
+10816;N # CYPRIOT SYLLABLE MI
+10817;N # CYPRIOT SYLLABLE MO
+10818;N # CYPRIOT SYLLABLE MU
+10819;N # CYPRIOT SYLLABLE NA
+1081A;N # CYPRIOT SYLLABLE NE
+1081B;N # CYPRIOT SYLLABLE NI
+1081C;N # CYPRIOT SYLLABLE NO
+1081D;N # CYPRIOT SYLLABLE NU
+1081E;N # CYPRIOT SYLLABLE PA
+1081F;N # CYPRIOT SYLLABLE PE
+10820;N # CYPRIOT SYLLABLE PI
+10821;N # CYPRIOT SYLLABLE PO
+10822;N # CYPRIOT SYLLABLE PU
+10823;N # CYPRIOT SYLLABLE RA
+10824;N # CYPRIOT SYLLABLE RE
+10825;N # CYPRIOT SYLLABLE RI
+10826;N # CYPRIOT SYLLABLE RO
+10827;N # CYPRIOT SYLLABLE RU
+10828;N # CYPRIOT SYLLABLE SA
+10829;N # CYPRIOT SYLLABLE SE
+1082A;N # CYPRIOT SYLLABLE SI
+1082B;N # CYPRIOT SYLLABLE SO
+1082C;N # CYPRIOT SYLLABLE SU
+1082D;N # CYPRIOT SYLLABLE TA
+1082E;N # CYPRIOT SYLLABLE TE
+1082F;N # CYPRIOT SYLLABLE TI
+10830;N # CYPRIOT SYLLABLE TO
+10831;N # CYPRIOT SYLLABLE TU
+10832;N # CYPRIOT SYLLABLE WA
+10833;N # CYPRIOT SYLLABLE WE
+10834;N # CYPRIOT SYLLABLE WI
+10835;N # CYPRIOT SYLLABLE WO
+10837;N # CYPRIOT SYLLABLE XA
+10838;N # CYPRIOT SYLLABLE XE
+1083C;N # CYPRIOT SYLLABLE ZA
+1083F;N # CYPRIOT SYLLABLE ZO
+10A00;N # KHAROSHTHI LETTER A
+10A01;N # KHAROSHTHI VOWEL SIGN I
+10A02;N # KHAROSHTHI VOWEL SIGN U
+10A03;N # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05;N # KHAROSHTHI VOWEL SIGN E
+10A06;N # KHAROSHTHI VOWEL SIGN O
+10A0C;N # KHAROSHTHI VOWEL LENGTH MARK
+10A0D;N # KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E;N # KHAROSHTHI SIGN ANUSVARA
+10A0F;N # KHAROSHTHI SIGN VISARGA
+10A10;N # KHAROSHTHI LETTER KA
+10A11;N # KHAROSHTHI LETTER KHA
+10A12;N # KHAROSHTHI LETTER GA
+10A13;N # KHAROSHTHI LETTER GHA
+10A15;N # KHAROSHTHI LETTER CA
+10A16;N # KHAROSHTHI LETTER CHA
+10A17;N # KHAROSHTHI LETTER JA
+10A19;N # KHAROSHTHI LETTER NYA
+10A1A;N # KHAROSHTHI LETTER TTA
+10A1B;N # KHAROSHTHI LETTER TTHA
+10A1C;N # KHAROSHTHI LETTER DDA
+10A1D;N # KHAROSHTHI LETTER DDHA
+10A1E;N # KHAROSHTHI LETTER NNA
+10A1F;N # KHAROSHTHI LETTER TA
+10A20;N # KHAROSHTHI LETTER THA
+10A21;N # KHAROSHTHI LETTER DA
+10A22;N # KHAROSHTHI LETTER DHA
+10A23;N # KHAROSHTHI LETTER NA
+10A24;N # KHAROSHTHI LETTER PA
+10A25;N # KHAROSHTHI LETTER PHA
+10A26;N # KHAROSHTHI LETTER BA
+10A27;N # KHAROSHTHI LETTER BHA
+10A28;N # KHAROSHTHI LETTER MA
+10A29;N # KHAROSHTHI LETTER YA
+10A2A;N # KHAROSHTHI LETTER RA
+10A2B;N # KHAROSHTHI LETTER LA
+10A2C;N # KHAROSHTHI LETTER VA
+10A2D;N # KHAROSHTHI LETTER SHA
+10A2E;N # KHAROSHTHI LETTER SSA
+10A2F;N # KHAROSHTHI LETTER SA
+10A30;N # KHAROSHTHI LETTER ZA
+10A31;N # KHAROSHTHI LETTER HA
+10A32;N # KHAROSHTHI LETTER KKA
+10A33;N # KHAROSHTHI LETTER TTTHA
+10A38;N # KHAROSHTHI SIGN BAR ABOVE
+10A39;N # KHAROSHTHI SIGN CAUDA
+10A3A;N # KHAROSHTHI SIGN DOT BELOW
+10A3F;N # KHAROSHTHI VIRAMA
+10A40;N # KHAROSHTHI DIGIT ONE
+10A41;N # KHAROSHTHI DIGIT TWO
+10A42;N # KHAROSHTHI DIGIT THREE
+10A43;N # KHAROSHTHI DIGIT FOUR
+10A44;N # KHAROSHTHI NUMBER TEN
+10A45;N # KHAROSHTHI NUMBER TWENTY
+10A46;N # KHAROSHTHI NUMBER ONE HUNDRED
+10A47;N # KHAROSHTHI NUMBER ONE THOUSAND
+10A50;N # KHAROSHTHI PUNCTUATION DOT
+10A51;N # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52;N # KHAROSHTHI PUNCTUATION CIRCLE
+10A53;N # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54;N # KHAROSHTHI PUNCTUATION MANGALAM
+10A55;N # KHAROSHTHI PUNCTUATION LOTUS
+10A56;N # KHAROSHTHI PUNCTUATION DANDA
+10A57;N # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;N # KHAROSHTHI PUNCTUATION LINES
+1D000;N # BYZANTINE MUSICAL SYMBOL PSILI
+1D001;N # BYZANTINE MUSICAL SYMBOL DASEIA
+1D002;N # BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003;N # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004;N # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005;N # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006;N # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007;N # BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008;N # BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A;N # BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B;N # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C;N # BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D;N # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E;N # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F;N # BYZANTINE MUSICAL SYMBOL TELEIA
+1D010;N # BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013;N # BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014;N # BYZANTINE MUSICAL SYMBOL THITA
+1D015;N # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016;N # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017;N # BYZANTINE MUSICAL SYMBOL PSILON
+1D018;N # BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019;N # BYZANTINE MUSICAL SYMBOL VATHY
+1D01A;N # BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B;N # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C;N # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D;N # BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E;N # BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F;N # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020;N # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021;N # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022;N # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023;N # BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024;N # BYZANTINE MUSICAL SYMBOL KLASMA
+1D025;N # BYZANTINE MUSICAL SYMBOL REVMA
+1D026;N # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027;N # BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028;N # BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029;N # BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A;N # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B;N # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C;N # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D;N # BYZANTINE MUSICAL SYMBOL THEMA
+1D02E;N # BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F;N # BYZANTINE MUSICAL SYMBOL DYO
+1D030;N # BYZANTINE MUSICAL SYMBOL TRIA
+1D031;N # BYZANTINE MUSICAL SYMBOL TESSERA
+1D032;N # BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033;N # BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034;N # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035;N # BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036;N # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037;N # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038;N # BYZANTINE MUSICAL SYMBOL PELASTON
+1D039;N # BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A;N # BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B;N # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C;N # BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D;N # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F;N # BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040;N # BYZANTINE MUSICAL SYMBOL NANA
+1D041;N # BYZANTINE MUSICAL SYMBOL PETASMA
+1D042;N # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043;N # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044;N # BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045;N # BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046;N # BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047;N # BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048;N # BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049;N # BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A;N # BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B;N # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C;N # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D;N # BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050;N # BYZANTINE MUSICAL SYMBOL YPSILI
+1D051;N # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052;N # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053;N # BYZANTINE MUSICAL SYMBOL YPORROI
+1D054;N # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055;N # BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056;N # BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057;N # BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058;N # BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059;N # BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A;N # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B;N # BYZANTINE MUSICAL SYMBOL OMALON
+1D05C;N # BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D;N # BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E;N # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F;N # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060;N # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061;N # BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062;N # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063;N # BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064;N # BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065;N # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066;N # BYZANTINE MUSICAL SYMBOL SYRMA
+1D067;N # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068;N # BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069;N # BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A;N # BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B;N # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C;N # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D;N # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E;N # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F;N # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070;N # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071;N # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072;N # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073;N # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074;N # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075;N # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076;N # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077;N # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078;N # BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079;N # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A;N # BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B;N # BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C;N # BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D;N # BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E;N # BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F;N # BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080;N # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081;N # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082;N # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083;N # BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084;N # BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085;N # BYZANTINE MUSICAL SYMBOL APLI
+1D086;N # BYZANTINE MUSICAL SYMBOL DIPLI
+1D087;N # BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088;N # BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089;N # BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A;N # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B;N # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C;N # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D;N # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E;N # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F;N # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090;N # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091;N # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092;N # BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095;N # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096;N # BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097;N # BYZANTINE MUSICAL SYMBOL ARGON
+1D098;N # BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099;N # BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A;N # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B;N # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C;N # BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D;N # BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E;N # BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F;N # BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0;N # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1;N # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3;N # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4;N # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5;N # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9;N # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA;N # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC;N # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD;N # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE;N # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF;N # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0;N # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1;N # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3;N # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4;N # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5;N # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6;N # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7;N # BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8;N # BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9;N # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC;N # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE;N # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2;N # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3;N # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4;N # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5;N # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6;N # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7;N # BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8;N # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9;N # BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA;N # BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB;N # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC;N # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD;N # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE;N # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF;N # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0;N # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1;N # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2;N # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3;N # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4;N # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5;N # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6;N # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7;N # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8;N # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9;N # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA;N # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB;N # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC;N # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD;N # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1;N # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5;N # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6;N # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7;N # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8;N # BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9;N # BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA;N # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB;N # BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC;N # BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED;N # BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE;N # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF;N # BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2;N # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3;N # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4;N # BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5;N # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100;N # MUSICAL SYMBOL SINGLE BARLINE
+1D101;N # MUSICAL SYMBOL DOUBLE BARLINE
+1D102;N # MUSICAL SYMBOL FINAL BARLINE
+1D103;N # MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104;N # MUSICAL SYMBOL DASHED BARLINE
+1D105;N # MUSICAL SYMBOL SHORT BARLINE
+1D106;N # MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107;N # MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108;N # MUSICAL SYMBOL REPEAT DOTS
+1D109;N # MUSICAL SYMBOL DAL SEGNO
+1D10A;N # MUSICAL SYMBOL DA CAPO
+1D10B;N # MUSICAL SYMBOL SEGNO
+1D10C;N # MUSICAL SYMBOL CODA
+1D10D;N # MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E;N # MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F;N # MUSICAL SYMBOL REPEATED FIGURE-3
+1D110;N # MUSICAL SYMBOL FERMATA
+1D111;N # MUSICAL SYMBOL FERMATA BELOW
+1D112;N # MUSICAL SYMBOL BREATH MARK
+1D113;N # MUSICAL SYMBOL CAESURA
+1D114;N # MUSICAL SYMBOL BRACE
+1D115;N # MUSICAL SYMBOL BRACKET
+1D116;N # MUSICAL SYMBOL ONE-LINE STAFF
+1D117;N # MUSICAL SYMBOL TWO-LINE STAFF
+1D118;N # MUSICAL SYMBOL THREE-LINE STAFF
+1D119;N # MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A;N # MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B;N # MUSICAL SYMBOL SIX-LINE STAFF
+1D11C;N # MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D;N # MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E;N # MUSICAL SYMBOL G CLEF
+1D11F;N # MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120;N # MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121;N # MUSICAL SYMBOL C CLEF
+1D122;N # MUSICAL SYMBOL F CLEF
+1D123;N # MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124;N # MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125;N # MUSICAL SYMBOL DRUM CLEF-1
+1D126;N # MUSICAL SYMBOL DRUM CLEF-2
+1D12A;N # MUSICAL SYMBOL DOUBLE SHARP
+1D12B;N # MUSICAL SYMBOL DOUBLE FLAT
+1D12C;N # MUSICAL SYMBOL FLAT UP
+1D12D;N # MUSICAL SYMBOL FLAT DOWN
+1D12E;N # MUSICAL SYMBOL NATURAL UP
+1D12F;N # MUSICAL SYMBOL NATURAL DOWN
+1D130;N # MUSICAL SYMBOL SHARP UP
+1D131;N # MUSICAL SYMBOL SHARP DOWN
+1D132;N # MUSICAL SYMBOL QUARTER TONE SHARP
+1D133;N # MUSICAL SYMBOL QUARTER TONE FLAT
+1D134;N # MUSICAL SYMBOL COMMON TIME
+1D135;N # MUSICAL SYMBOL CUT TIME
+1D136;N # MUSICAL SYMBOL OTTAVA ALTA
+1D137;N # MUSICAL SYMBOL OTTAVA BASSA
+1D138;N # MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139;N # MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A;N # MUSICAL SYMBOL MULTI REST
+1D13B;N # MUSICAL SYMBOL WHOLE REST
+1D13C;N # MUSICAL SYMBOL HALF REST
+1D13D;N # MUSICAL SYMBOL QUARTER REST
+1D13E;N # MUSICAL SYMBOL EIGHTH REST
+1D13F;N # MUSICAL SYMBOL SIXTEENTH REST
+1D140;N # MUSICAL SYMBOL THIRTY-SECOND REST
+1D141;N # MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142;N # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143;N # MUSICAL SYMBOL X NOTEHEAD
+1D144;N # MUSICAL SYMBOL PLUS NOTEHEAD
+1D145;N # MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146;N # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147;N # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151;N # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152;N # MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153;N # MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154;N # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155;N # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156;N # MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157;N # MUSICAL SYMBOL VOID NOTEHEAD
+1D158;N # MUSICAL SYMBOL NOTEHEAD BLACK
+1D159;N # MUSICAL SYMBOL NULL NOTEHEAD
+1D15A;N # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B;N # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C;N # MUSICAL SYMBOL BREVE
+1D15D;N # MUSICAL SYMBOL WHOLE NOTE
+1D15E;N # MUSICAL SYMBOL HALF NOTE
+1D15F;N # MUSICAL SYMBOL QUARTER NOTE
+1D160;N # MUSICAL SYMBOL EIGHTH NOTE
+1D161;N # MUSICAL SYMBOL SIXTEENTH NOTE
+1D162;N # MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163;N # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164;N # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165;N # MUSICAL SYMBOL COMBINING STEM
+1D166;N # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167;N # MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168;N # MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169;N # MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A;N # MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B;N # MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C;N # MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D;N # MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E;N # MUSICAL SYMBOL COMBINING FLAG-1
+1D16F;N # MUSICAL SYMBOL COMBINING FLAG-2
+1D170;N # MUSICAL SYMBOL COMBINING FLAG-3
+1D171;N # MUSICAL SYMBOL COMBINING FLAG-4
+1D172;N # MUSICAL SYMBOL COMBINING FLAG-5
+1D173;N # MUSICAL SYMBOL BEGIN BEAM
+1D174;N # MUSICAL SYMBOL END BEAM
+1D175;N # MUSICAL SYMBOL BEGIN TIE
+1D176;N # MUSICAL SYMBOL END TIE
+1D177;N # MUSICAL SYMBOL BEGIN SLUR
+1D178;N # MUSICAL SYMBOL END SLUR
+1D179;N # MUSICAL SYMBOL BEGIN PHRASE
+1D17A;N # MUSICAL SYMBOL END PHRASE
+1D17B;N # MUSICAL SYMBOL COMBINING ACCENT
+1D17C;N # MUSICAL SYMBOL COMBINING STACCATO
+1D17D;N # MUSICAL SYMBOL COMBINING TENUTO
+1D17E;N # MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F;N # MUSICAL SYMBOL COMBINING MARCATO
+1D180;N # MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181;N # MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182;N # MUSICAL SYMBOL COMBINING LOURE
+1D183;N # MUSICAL SYMBOL ARPEGGIATO UP
+1D184;N # MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185;N # MUSICAL SYMBOL COMBINING DOIT
+1D186;N # MUSICAL SYMBOL COMBINING RIP
+1D187;N # MUSICAL SYMBOL COMBINING FLIP
+1D188;N # MUSICAL SYMBOL COMBINING SMEAR
+1D189;N # MUSICAL SYMBOL COMBINING BEND
+1D18A;N # MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B;N # MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C;N # MUSICAL SYMBOL RINFORZANDO
+1D18D;N # MUSICAL SYMBOL SUBITO
+1D18E;N # MUSICAL SYMBOL Z
+1D18F;N # MUSICAL SYMBOL PIANO
+1D190;N # MUSICAL SYMBOL MEZZO
+1D191;N # MUSICAL SYMBOL FORTE
+1D192;N # MUSICAL SYMBOL CRESCENDO
+1D193;N # MUSICAL SYMBOL DECRESCENDO
+1D194;N # MUSICAL SYMBOL GRACE NOTE SLASH
+1D195;N # MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196;N # MUSICAL SYMBOL TR
+1D197;N # MUSICAL SYMBOL TURN
+1D198;N # MUSICAL SYMBOL INVERTED TURN
+1D199;N # MUSICAL SYMBOL TURN SLASH
+1D19A;N # MUSICAL SYMBOL TURN UP
+1D19B;N # MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C;N # MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D;N # MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E;N # MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F;N # MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0;N # MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1;N # MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2;N # MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3;N # MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4;N # MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5;N # MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6;N # MUSICAL SYMBOL HAUPTSTIMME
+1D1A7;N # MUSICAL SYMBOL NEBENSTIMME
+1D1A8;N # MUSICAL SYMBOL END OF STIMME
+1D1A9;N # MUSICAL SYMBOL DEGREE SLASH
+1D1AA;N # MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB;N # MUSICAL SYMBOL COMBINING UP BOW
+1D1AC;N # MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD;N # MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE;N # MUSICAL SYMBOL PEDAL MARK
+1D1AF;N # MUSICAL SYMBOL PEDAL UP MARK
+1D1B0;N # MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1;N # MUSICAL SYMBOL GLISSANDO UP
+1D1B2;N # MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3;N # MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4;N # MUSICAL SYMBOL DAMP
+1D1B5;N # MUSICAL SYMBOL DAMP ALL
+1D1B6;N # MUSICAL SYMBOL MAXIMA
+1D1B7;N # MUSICAL SYMBOL LONGA
+1D1B8;N # MUSICAL SYMBOL BREVIS
+1D1B9;N # MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA;N # MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB;N # MUSICAL SYMBOL MINIMA
+1D1BC;N # MUSICAL SYMBOL MINIMA BLACK
+1D1BD;N # MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE;N # MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF;N # MUSICAL SYMBOL FUSA WHITE
+1D1C0;N # MUSICAL SYMBOL FUSA BLACK
+1D1C1;N # MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2;N # MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3;N # MUSICAL SYMBOL BREVIS REST
+1D1C4;N # MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5;N # MUSICAL SYMBOL MINIMA REST
+1D1C6;N # MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9;N # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE;N # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF;N # MUSICAL SYMBOL CROIX
+1D1D0;N # MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1;N # MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2;N # MUSICAL SYMBOL SQUARE B
+1D1D3;N # MUSICAL SYMBOL VIRGA
+1D1D4;N # MUSICAL SYMBOL PODATUS
+1D1D5;N # MUSICAL SYMBOL CLIVIS
+1D1D6;N # MUSICAL SYMBOL SCANDICUS
+1D1D7;N # MUSICAL SYMBOL CLIMACUS
+1D1D8;N # MUSICAL SYMBOL TORCULUS
+1D1D9;N # MUSICAL SYMBOL PORRECTUS
+1D1DA;N # MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB;N # MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC;N # MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD;N # MUSICAL SYMBOL PES SUBPUNCTIS
+1D200;N # GREEK VOCAL NOTATION SYMBOL-1
+1D201;N # GREEK VOCAL NOTATION SYMBOL-2
+1D202;N # GREEK VOCAL NOTATION SYMBOL-3
+1D203;N # GREEK VOCAL NOTATION SYMBOL-4
+1D204;N # GREEK VOCAL NOTATION SYMBOL-5
+1D205;N # GREEK VOCAL NOTATION SYMBOL-6
+1D206;N # GREEK VOCAL NOTATION SYMBOL-7
+1D207;N # GREEK VOCAL NOTATION SYMBOL-8
+1D208;N # GREEK VOCAL NOTATION SYMBOL-9
+1D209;N # GREEK VOCAL NOTATION SYMBOL-10
+1D20A;N # GREEK VOCAL NOTATION SYMBOL-11
+1D20B;N # GREEK VOCAL NOTATION SYMBOL-12
+1D20C;N # GREEK VOCAL NOTATION SYMBOL-13
+1D20D;N # GREEK VOCAL NOTATION SYMBOL-14
+1D20E;N # GREEK VOCAL NOTATION SYMBOL-15
+1D20F;N # GREEK VOCAL NOTATION SYMBOL-16
+1D210;N # GREEK VOCAL NOTATION SYMBOL-17
+1D211;N # GREEK VOCAL NOTATION SYMBOL-18
+1D212;N # GREEK VOCAL NOTATION SYMBOL-19
+1D213;N # GREEK VOCAL NOTATION SYMBOL-20
+1D214;N # GREEK VOCAL NOTATION SYMBOL-21
+1D215;N # GREEK VOCAL NOTATION SYMBOL-22
+1D216;N # GREEK VOCAL NOTATION SYMBOL-23
+1D217;N # GREEK VOCAL NOTATION SYMBOL-24
+1D218;N # GREEK VOCAL NOTATION SYMBOL-50
+1D219;N # GREEK VOCAL NOTATION SYMBOL-51
+1D21A;N # GREEK VOCAL NOTATION SYMBOL-52
+1D21B;N # GREEK VOCAL NOTATION SYMBOL-53
+1D21C;N # GREEK VOCAL NOTATION SYMBOL-54
+1D21D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220;N # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221;N # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222;N # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223;N # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224;N # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225;N # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226;N # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227;N # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228;N # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229;N # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230;N # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231;N # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232;N # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233;N # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234;N # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235;N # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236;N # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237;N # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238;N # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239;N # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A;N # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B;N # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C;N # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D;N # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E;N # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F;N # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240;N # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241;N # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242;N # COMBINING GREEK MUSICAL TRISEME
+1D243;N # COMBINING GREEK MUSICAL TETRASEME
+1D244;N # COMBINING GREEK MUSICAL PENTASEME
+1D245;N # GREEK MUSICAL LEIMMA
+1D300;N # MONOGRAM FOR EARTH
+1D301;N # DIGRAM FOR HEAVENLY EARTH
+1D302;N # DIGRAM FOR HUMAN EARTH
+1D303;N # DIGRAM FOR EARTHLY HEAVEN
+1D304;N # DIGRAM FOR EARTHLY HUMAN
+1D305;N # DIGRAM FOR EARTH
+1D306;N # TETRAGRAM FOR CENTRE
+1D307;N # TETRAGRAM FOR FULL CIRCLE
+1D308;N # TETRAGRAM FOR MIRED
+1D309;N # TETRAGRAM FOR BARRIER
+1D30A;N # TETRAGRAM FOR KEEPING SMALL
+1D30B;N # TETRAGRAM FOR CONTRARIETY
+1D30C;N # TETRAGRAM FOR ASCENT
+1D30D;N # TETRAGRAM FOR OPPOSITION
+1D30E;N # TETRAGRAM FOR BRANCHING OUT
+1D30F;N # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310;N # TETRAGRAM FOR DIVERGENCE
+1D311;N # TETRAGRAM FOR YOUTHFULNESS
+1D312;N # TETRAGRAM FOR INCREASE
+1D313;N # TETRAGRAM FOR PENETRATION
+1D314;N # TETRAGRAM FOR REACH
+1D315;N # TETRAGRAM FOR CONTACT
+1D316;N # TETRAGRAM FOR HOLDING BACK
+1D317;N # TETRAGRAM FOR WAITING
+1D318;N # TETRAGRAM FOR FOLLOWING
+1D319;N # TETRAGRAM FOR ADVANCE
+1D31A;N # TETRAGRAM FOR RELEASE
+1D31B;N # TETRAGRAM FOR RESISTANCE
+1D31C;N # TETRAGRAM FOR EASE
+1D31D;N # TETRAGRAM FOR JOY
+1D31E;N # TETRAGRAM FOR CONTENTION
+1D31F;N # TETRAGRAM FOR ENDEAVOUR
+1D320;N # TETRAGRAM FOR DUTIES
+1D321;N # TETRAGRAM FOR CHANGE
+1D322;N # TETRAGRAM FOR DECISIVENESS
+1D323;N # TETRAGRAM FOR BOLD RESOLUTION
+1D324;N # TETRAGRAM FOR PACKING
+1D325;N # TETRAGRAM FOR LEGION
+1D326;N # TETRAGRAM FOR CLOSENESS
+1D327;N # TETRAGRAM FOR KINSHIP
+1D328;N # TETRAGRAM FOR GATHERING
+1D329;N # TETRAGRAM FOR STRENGTH
+1D32A;N # TETRAGRAM FOR PURITY
+1D32B;N # TETRAGRAM FOR FULLNESS
+1D32C;N # TETRAGRAM FOR RESIDENCE
+1D32D;N # TETRAGRAM FOR LAW OR MODEL
+1D32E;N # TETRAGRAM FOR RESPONSE
+1D32F;N # TETRAGRAM FOR GOING TO MEET
+1D330;N # TETRAGRAM FOR ENCOUNTERS
+1D331;N # TETRAGRAM FOR STOVE
+1D332;N # TETRAGRAM FOR GREATNESS
+1D333;N # TETRAGRAM FOR ENLARGEMENT
+1D334;N # TETRAGRAM FOR PATTERN
+1D335;N # TETRAGRAM FOR RITUAL
+1D336;N # TETRAGRAM FOR FLIGHT
+1D337;N # TETRAGRAM FOR VASTNESS OR WASTING
+1D338;N # TETRAGRAM FOR CONSTANCY
+1D339;N # TETRAGRAM FOR MEASURE
+1D33A;N # TETRAGRAM FOR ETERNITY
+1D33B;N # TETRAGRAM FOR UNITY
+1D33C;N # TETRAGRAM FOR DIMINISHMENT
+1D33D;N # TETRAGRAM FOR CLOSED MOUTH
+1D33E;N # TETRAGRAM FOR GUARDEDNESS
+1D33F;N # TETRAGRAM FOR GATHERING IN
+1D340;N # TETRAGRAM FOR MASSING
+1D341;N # TETRAGRAM FOR ACCUMULATION
+1D342;N # TETRAGRAM FOR EMBELLISHMENT
+1D343;N # TETRAGRAM FOR DOUBT
+1D344;N # TETRAGRAM FOR WATCH
+1D345;N # TETRAGRAM FOR SINKING
+1D346;N # TETRAGRAM FOR INNER
+1D347;N # TETRAGRAM FOR DEPARTURE
+1D348;N # TETRAGRAM FOR DARKENING
+1D349;N # TETRAGRAM FOR DIMMING
+1D34A;N # TETRAGRAM FOR EXHAUSTION
+1D34B;N # TETRAGRAM FOR SEVERANCE
+1D34C;N # TETRAGRAM FOR STOPPAGE
+1D34D;N # TETRAGRAM FOR HARDNESS
+1D34E;N # TETRAGRAM FOR COMPLETION
+1D34F;N # TETRAGRAM FOR CLOSURE
+1D350;N # TETRAGRAM FOR FAILURE
+1D351;N # TETRAGRAM FOR AGGRAVATION
+1D352;N # TETRAGRAM FOR COMPLIANCE
+1D353;N # TETRAGRAM FOR ON THE VERGE
+1D354;N # TETRAGRAM FOR DIFFICULTIES
+1D355;N # TETRAGRAM FOR LABOURING
+1D356;N # TETRAGRAM FOR FOSTERING
+1D400;N # MATHEMATICAL BOLD CAPITAL A
+1D401;N # MATHEMATICAL BOLD CAPITAL B
+1D402;N # MATHEMATICAL BOLD CAPITAL C
+1D403;N # MATHEMATICAL BOLD CAPITAL D
+1D404;N # MATHEMATICAL BOLD CAPITAL E
+1D405;N # MATHEMATICAL BOLD CAPITAL F
+1D406;N # MATHEMATICAL BOLD CAPITAL G
+1D407;N # MATHEMATICAL BOLD CAPITAL H
+1D408;N # MATHEMATICAL BOLD CAPITAL I
+1D409;N # MATHEMATICAL BOLD CAPITAL J
+1D40A;N # MATHEMATICAL BOLD CAPITAL K
+1D40B;N # MATHEMATICAL BOLD CAPITAL L
+1D40C;N # MATHEMATICAL BOLD CAPITAL M
+1D40D;N # MATHEMATICAL BOLD CAPITAL N
+1D40E;N # MATHEMATICAL BOLD CAPITAL O
+1D40F;N # MATHEMATICAL BOLD CAPITAL P
+1D410;N # MATHEMATICAL BOLD CAPITAL Q
+1D411;N # MATHEMATICAL BOLD CAPITAL R
+1D412;N # MATHEMATICAL BOLD CAPITAL S
+1D413;N # MATHEMATICAL BOLD CAPITAL T
+1D414;N # MATHEMATICAL BOLD CAPITAL U
+1D415;N # MATHEMATICAL BOLD CAPITAL V
+1D416;N # MATHEMATICAL BOLD CAPITAL W
+1D417;N # MATHEMATICAL BOLD CAPITAL X
+1D418;N # MATHEMATICAL BOLD CAPITAL Y
+1D419;N # MATHEMATICAL BOLD CAPITAL Z
+1D41A;N # MATHEMATICAL BOLD SMALL A
+1D41B;N # MATHEMATICAL BOLD SMALL B
+1D41C;N # MATHEMATICAL BOLD SMALL C
+1D41D;N # MATHEMATICAL BOLD SMALL D
+1D41E;N # MATHEMATICAL BOLD SMALL E
+1D41F;N # MATHEMATICAL BOLD SMALL F
+1D420;N # MATHEMATICAL BOLD SMALL G
+1D421;N # MATHEMATICAL BOLD SMALL H
+1D422;N # MATHEMATICAL BOLD SMALL I
+1D423;N # MATHEMATICAL BOLD SMALL J
+1D424;N # MATHEMATICAL BOLD SMALL K
+1D425;N # MATHEMATICAL BOLD SMALL L
+1D426;N # MATHEMATICAL BOLD SMALL M
+1D427;N # MATHEMATICAL BOLD SMALL N
+1D428;N # MATHEMATICAL BOLD SMALL O
+1D429;N # MATHEMATICAL BOLD SMALL P
+1D42A;N # MATHEMATICAL BOLD SMALL Q
+1D42B;N # MATHEMATICAL BOLD SMALL R
+1D42C;N # MATHEMATICAL BOLD SMALL S
+1D42D;N # MATHEMATICAL BOLD SMALL T
+1D42E;N # MATHEMATICAL BOLD SMALL U
+1D42F;N # MATHEMATICAL BOLD SMALL V
+1D430;N # MATHEMATICAL BOLD SMALL W
+1D431;N # MATHEMATICAL BOLD SMALL X
+1D432;N # MATHEMATICAL BOLD SMALL Y
+1D433;N # MATHEMATICAL BOLD SMALL Z
+1D434;N # MATHEMATICAL ITALIC CAPITAL A
+1D435;N # MATHEMATICAL ITALIC CAPITAL B
+1D436;N # MATHEMATICAL ITALIC CAPITAL C
+1D437;N # MATHEMATICAL ITALIC CAPITAL D
+1D438;N # MATHEMATICAL ITALIC CAPITAL E
+1D439;N # MATHEMATICAL ITALIC CAPITAL F
+1D43A;N # MATHEMATICAL ITALIC CAPITAL G
+1D43B;N # MATHEMATICAL ITALIC CAPITAL H
+1D43C;N # MATHEMATICAL ITALIC CAPITAL I
+1D43D;N # MATHEMATICAL ITALIC CAPITAL J
+1D43E;N # MATHEMATICAL ITALIC CAPITAL K
+1D43F;N # MATHEMATICAL ITALIC CAPITAL L
+1D440;N # MATHEMATICAL ITALIC CAPITAL M
+1D441;N # MATHEMATICAL ITALIC CAPITAL N
+1D442;N # MATHEMATICAL ITALIC CAPITAL O
+1D443;N # MATHEMATICAL ITALIC CAPITAL P
+1D444;N # MATHEMATICAL ITALIC CAPITAL Q
+1D445;N # MATHEMATICAL ITALIC CAPITAL R
+1D446;N # MATHEMATICAL ITALIC CAPITAL S
+1D447;N # MATHEMATICAL ITALIC CAPITAL T
+1D448;N # MATHEMATICAL ITALIC CAPITAL U
+1D449;N # MATHEMATICAL ITALIC CAPITAL V
+1D44A;N # MATHEMATICAL ITALIC CAPITAL W
+1D44B;N # MATHEMATICAL ITALIC CAPITAL X
+1D44C;N # MATHEMATICAL ITALIC CAPITAL Y
+1D44D;N # MATHEMATICAL ITALIC CAPITAL Z
+1D44E;N # MATHEMATICAL ITALIC SMALL A
+1D44F;N # MATHEMATICAL ITALIC SMALL B
+1D450;N # MATHEMATICAL ITALIC SMALL C
+1D451;N # MATHEMATICAL ITALIC SMALL D
+1D452;N # MATHEMATICAL ITALIC SMALL E
+1D453;N # MATHEMATICAL ITALIC SMALL F
+1D454;N # MATHEMATICAL ITALIC SMALL G
+1D456;N # MATHEMATICAL ITALIC SMALL I
+1D457;N # MATHEMATICAL ITALIC SMALL J
+1D458;N # MATHEMATICAL ITALIC SMALL K
+1D459;N # MATHEMATICAL ITALIC SMALL L
+1D45A;N # MATHEMATICAL ITALIC SMALL M
+1D45B;N # MATHEMATICAL ITALIC SMALL N
+1D45C;N # MATHEMATICAL ITALIC SMALL O
+1D45D;N # MATHEMATICAL ITALIC SMALL P
+1D45E;N # MATHEMATICAL ITALIC SMALL Q
+1D45F;N # MATHEMATICAL ITALIC SMALL R
+1D460;N # MATHEMATICAL ITALIC SMALL S
+1D461;N # MATHEMATICAL ITALIC SMALL T
+1D462;N # MATHEMATICAL ITALIC SMALL U
+1D463;N # MATHEMATICAL ITALIC SMALL V
+1D464;N # MATHEMATICAL ITALIC SMALL W
+1D465;N # MATHEMATICAL ITALIC SMALL X
+1D466;N # MATHEMATICAL ITALIC SMALL Y
+1D467;N # MATHEMATICAL ITALIC SMALL Z
+1D468;N # MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469;N # MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A;N # MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B;N # MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C;N # MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D;N # MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E;N # MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F;N # MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470;N # MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471;N # MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472;N # MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473;N # MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474;N # MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475;N # MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476;N # MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477;N # MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478;N # MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479;N # MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A;N # MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B;N # MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C;N # MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D;N # MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E;N # MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F;N # MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480;N # MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481;N # MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482;N # MATHEMATICAL BOLD ITALIC SMALL A
+1D483;N # MATHEMATICAL BOLD ITALIC SMALL B
+1D484;N # MATHEMATICAL BOLD ITALIC SMALL C
+1D485;N # MATHEMATICAL BOLD ITALIC SMALL D
+1D486;N # MATHEMATICAL BOLD ITALIC SMALL E
+1D487;N # MATHEMATICAL BOLD ITALIC SMALL F
+1D488;N # MATHEMATICAL BOLD ITALIC SMALL G
+1D489;N # MATHEMATICAL BOLD ITALIC SMALL H
+1D48A;N # MATHEMATICAL BOLD ITALIC SMALL I
+1D48B;N # MATHEMATICAL BOLD ITALIC SMALL J
+1D48C;N # MATHEMATICAL BOLD ITALIC SMALL K
+1D48D;N # MATHEMATICAL BOLD ITALIC SMALL L
+1D48E;N # MATHEMATICAL BOLD ITALIC SMALL M
+1D48F;N # MATHEMATICAL BOLD ITALIC SMALL N
+1D490;N # MATHEMATICAL BOLD ITALIC SMALL O
+1D491;N # MATHEMATICAL BOLD ITALIC SMALL P
+1D492;N # MATHEMATICAL BOLD ITALIC SMALL Q
+1D493;N # MATHEMATICAL BOLD ITALIC SMALL R
+1D494;N # MATHEMATICAL BOLD ITALIC SMALL S
+1D495;N # MATHEMATICAL BOLD ITALIC SMALL T
+1D496;N # MATHEMATICAL BOLD ITALIC SMALL U
+1D497;N # MATHEMATICAL BOLD ITALIC SMALL V
+1D498;N # MATHEMATICAL BOLD ITALIC SMALL W
+1D499;N # MATHEMATICAL BOLD ITALIC SMALL X
+1D49A;N # MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B;N # MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C;N # MATHEMATICAL SCRIPT CAPITAL A
+1D49E;N # MATHEMATICAL SCRIPT CAPITAL C
+1D49F;N # MATHEMATICAL SCRIPT CAPITAL D
+1D4A2;N # MATHEMATICAL SCRIPT CAPITAL G
+1D4A5;N # MATHEMATICAL SCRIPT CAPITAL J
+1D4A6;N # MATHEMATICAL SCRIPT CAPITAL K
+1D4A9;N # MATHEMATICAL SCRIPT CAPITAL N
+1D4AA;N # MATHEMATICAL SCRIPT CAPITAL O
+1D4AB;N # MATHEMATICAL SCRIPT CAPITAL P
+1D4AC;N # MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE;N # MATHEMATICAL SCRIPT CAPITAL S
+1D4AF;N # MATHEMATICAL SCRIPT CAPITAL T
+1D4B0;N # MATHEMATICAL SCRIPT CAPITAL U
+1D4B1;N # MATHEMATICAL SCRIPT CAPITAL V
+1D4B2;N # MATHEMATICAL SCRIPT CAPITAL W
+1D4B3;N # MATHEMATICAL SCRIPT CAPITAL X
+1D4B4;N # MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5;N # MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6;N # MATHEMATICAL SCRIPT SMALL A
+1D4B7;N # MATHEMATICAL SCRIPT SMALL B
+1D4B8;N # MATHEMATICAL SCRIPT SMALL C
+1D4B9;N # MATHEMATICAL SCRIPT SMALL D
+1D4BB;N # MATHEMATICAL SCRIPT SMALL F
+1D4BD;N # MATHEMATICAL SCRIPT SMALL H
+1D4BE;N # MATHEMATICAL SCRIPT SMALL I
+1D4BF;N # MATHEMATICAL SCRIPT SMALL J
+1D4C0;N # MATHEMATICAL SCRIPT SMALL K
+1D4C1;N # MATHEMATICAL SCRIPT SMALL L
+1D4C2;N # MATHEMATICAL SCRIPT SMALL M
+1D4C3;N # MATHEMATICAL SCRIPT SMALL N
+1D4C5;N # MATHEMATICAL SCRIPT SMALL P
+1D4C6;N # MATHEMATICAL SCRIPT SMALL Q
+1D4C7;N # MATHEMATICAL SCRIPT SMALL R
+1D4C8;N # MATHEMATICAL SCRIPT SMALL S
+1D4C9;N # MATHEMATICAL SCRIPT SMALL T
+1D4CA;N # MATHEMATICAL SCRIPT SMALL U
+1D4CB;N # MATHEMATICAL SCRIPT SMALL V
+1D4CC;N # MATHEMATICAL SCRIPT SMALL W
+1D4CD;N # MATHEMATICAL SCRIPT SMALL X
+1D4CE;N # MATHEMATICAL SCRIPT SMALL Y
+1D4CF;N # MATHEMATICAL SCRIPT SMALL Z
+1D4D0;N # MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1;N # MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2;N # MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3;N # MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4;N # MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5;N # MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6;N # MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7;N # MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8;N # MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9;N # MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA;N # MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB;N # MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC;N # MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD;N # MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE;N # MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF;N # MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0;N # MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1;N # MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2;N # MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3;N # MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4;N # MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5;N # MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6;N # MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7;N # MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8;N # MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9;N # MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA;N # MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB;N # MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC;N # MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED;N # MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE;N # MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF;N # MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0;N # MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1;N # MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2;N # MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3;N # MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4;N # MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5;N # MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6;N # MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7;N # MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8;N # MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9;N # MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA;N # MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB;N # MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC;N # MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD;N # MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE;N # MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF;N # MATHEMATICAL BOLD SCRIPT SMALL V
+1D500;N # MATHEMATICAL BOLD SCRIPT SMALL W
+1D501;N # MATHEMATICAL BOLD SCRIPT SMALL X
+1D502;N # MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503;N # MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504;N # MATHEMATICAL FRAKTUR CAPITAL A
+1D505;N # MATHEMATICAL FRAKTUR CAPITAL B
+1D507;N # MATHEMATICAL FRAKTUR CAPITAL D
+1D508;N # MATHEMATICAL FRAKTUR CAPITAL E
+1D509;N # MATHEMATICAL FRAKTUR CAPITAL F
+1D50A;N # MATHEMATICAL FRAKTUR CAPITAL G
+1D50D;N # MATHEMATICAL FRAKTUR CAPITAL J
+1D50E;N # MATHEMATICAL FRAKTUR CAPITAL K
+1D50F;N # MATHEMATICAL FRAKTUR CAPITAL L
+1D510;N # MATHEMATICAL FRAKTUR CAPITAL M
+1D511;N # MATHEMATICAL FRAKTUR CAPITAL N
+1D512;N # MATHEMATICAL FRAKTUR CAPITAL O
+1D513;N # MATHEMATICAL FRAKTUR CAPITAL P
+1D514;N # MATHEMATICAL FRAKTUR CAPITAL Q
+1D516;N # MATHEMATICAL FRAKTUR CAPITAL S
+1D517;N # MATHEMATICAL FRAKTUR CAPITAL T
+1D518;N # MATHEMATICAL FRAKTUR CAPITAL U
+1D519;N # MATHEMATICAL FRAKTUR CAPITAL V
+1D51A;N # MATHEMATICAL FRAKTUR CAPITAL W
+1D51B;N # MATHEMATICAL FRAKTUR CAPITAL X
+1D51C;N # MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E;N # MATHEMATICAL FRAKTUR SMALL A
+1D51F;N # MATHEMATICAL FRAKTUR SMALL B
+1D520;N # MATHEMATICAL FRAKTUR SMALL C
+1D521;N # MATHEMATICAL FRAKTUR SMALL D
+1D522;N # MATHEMATICAL FRAKTUR SMALL E
+1D523;N # MATHEMATICAL FRAKTUR SMALL F
+1D524;N # MATHEMATICAL FRAKTUR SMALL G
+1D525;N # MATHEMATICAL FRAKTUR SMALL H
+1D526;N # MATHEMATICAL FRAKTUR SMALL I
+1D527;N # MATHEMATICAL FRAKTUR SMALL J
+1D528;N # MATHEMATICAL FRAKTUR SMALL K
+1D529;N # MATHEMATICAL FRAKTUR SMALL L
+1D52A;N # MATHEMATICAL FRAKTUR SMALL M
+1D52B;N # MATHEMATICAL FRAKTUR SMALL N
+1D52C;N # MATHEMATICAL FRAKTUR SMALL O
+1D52D;N # MATHEMATICAL FRAKTUR SMALL P
+1D52E;N # MATHEMATICAL FRAKTUR SMALL Q
+1D52F;N # MATHEMATICAL FRAKTUR SMALL R
+1D530;N # MATHEMATICAL FRAKTUR SMALL S
+1D531;N # MATHEMATICAL FRAKTUR SMALL T
+1D532;N # MATHEMATICAL FRAKTUR SMALL U
+1D533;N # MATHEMATICAL FRAKTUR SMALL V
+1D534;N # MATHEMATICAL FRAKTUR SMALL W
+1D535;N # MATHEMATICAL FRAKTUR SMALL X
+1D536;N # MATHEMATICAL FRAKTUR SMALL Y
+1D537;N # MATHEMATICAL FRAKTUR SMALL Z
+1D538;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550;N # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552;N # MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553;N # MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554;N # MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555;N # MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556;N # MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557;N # MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558;N # MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559;N # MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A;N # MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B;N # MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C;N # MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D;N # MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E;N # MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F;N # MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560;N # MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561;N # MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562;N # MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563;N # MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564;N # MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565;N # MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566;N # MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567;N # MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568;N # MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569;N # MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A;N # MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B;N # MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C;N # MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D;N # MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E;N # MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F;N # MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570;N # MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571;N # MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572;N # MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573;N # MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574;N # MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575;N # MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576;N # MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577;N # MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578;N # MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579;N # MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A;N # MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B;N # MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D;N # MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E;N # MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F;N # MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580;N # MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581;N # MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582;N # MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583;N # MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585;N # MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586;N # MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587;N # MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588;N # MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589;N # MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A;N # MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B;N # MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C;N # MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D;N # MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E;N # MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F;N # MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590;N # MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591;N # MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592;N # MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593;N # MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594;N # MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595;N # MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596;N # MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597;N # MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598;N # MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599;N # MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A;N # MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B;N # MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C;N # MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D;N # MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E;N # MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F;N # MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0;N # MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1;N # MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2;N # MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3;N # MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4;N # MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5;N # MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6;N # MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7;N # MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8;N # MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9;N # MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA;N # MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB;N # MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC;N # MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD;N # MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE;N # MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF;N # MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0;N # MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1;N # MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2;N # MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3;N # MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4;N # MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5;N # MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6;N # MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7;N # MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8;N # MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9;N # MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA;N # MATHEMATICAL SANS-SERIF SMALL A
+1D5BB;N # MATHEMATICAL SANS-SERIF SMALL B
+1D5BC;N # MATHEMATICAL SANS-SERIF SMALL C
+1D5BD;N # MATHEMATICAL SANS-SERIF SMALL D
+1D5BE;N # MATHEMATICAL SANS-SERIF SMALL E
+1D5BF;N # MATHEMATICAL SANS-SERIF SMALL F
+1D5C0;N # MATHEMATICAL SANS-SERIF SMALL G
+1D5C1;N # MATHEMATICAL SANS-SERIF SMALL H
+1D5C2;N # MATHEMATICAL SANS-SERIF SMALL I
+1D5C3;N # MATHEMATICAL SANS-SERIF SMALL J
+1D5C4;N # MATHEMATICAL SANS-SERIF SMALL K
+1D5C5;N # MATHEMATICAL SANS-SERIF SMALL L
+1D5C6;N # MATHEMATICAL SANS-SERIF SMALL M
+1D5C7;N # MATHEMATICAL SANS-SERIF SMALL N
+1D5C8;N # MATHEMATICAL SANS-SERIF SMALL O
+1D5C9;N # MATHEMATICAL SANS-SERIF SMALL P
+1D5CA;N # MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB;N # MATHEMATICAL SANS-SERIF SMALL R
+1D5CC;N # MATHEMATICAL SANS-SERIF SMALL S
+1D5CD;N # MATHEMATICAL SANS-SERIF SMALL T
+1D5CE;N # MATHEMATICAL SANS-SERIF SMALL U
+1D5CF;N # MATHEMATICAL SANS-SERIF SMALL V
+1D5D0;N # MATHEMATICAL SANS-SERIF SMALL W
+1D5D1;N # MATHEMATICAL SANS-SERIF SMALL X
+1D5D2;N # MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3;N # MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE;N # MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF;N # MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0;N # MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1;N # MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2;N # MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3;N # MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4;N # MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5;N # MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6;N # MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7;N # MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8;N # MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9;N # MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA;N # MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB;N # MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC;N # MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD;N # MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE;N # MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF;N # MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600;N # MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601;N # MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602;N # MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603;N # MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604;N # MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605;N # MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606;N # MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607;N # MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621;N # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622;N # MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623;N # MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624;N # MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625;N # MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626;N # MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627;N # MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628;N # MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629;N # MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A;N # MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B;N # MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C;N # MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D;N # MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E;N # MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F;N # MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630;N # MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631;N # MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633;N # MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634;N # MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635;N # MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636;N # MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637;N # MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638;N # MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639;N # MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B;N # MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670;N # MATHEMATICAL MONOSPACE CAPITAL A
+1D671;N # MATHEMATICAL MONOSPACE CAPITAL B
+1D672;N # MATHEMATICAL MONOSPACE CAPITAL C
+1D673;N # MATHEMATICAL MONOSPACE CAPITAL D
+1D674;N # MATHEMATICAL MONOSPACE CAPITAL E
+1D675;N # MATHEMATICAL MONOSPACE CAPITAL F
+1D676;N # MATHEMATICAL MONOSPACE CAPITAL G
+1D677;N # MATHEMATICAL MONOSPACE CAPITAL H
+1D678;N # MATHEMATICAL MONOSPACE CAPITAL I
+1D679;N # MATHEMATICAL MONOSPACE CAPITAL J
+1D67A;N # MATHEMATICAL MONOSPACE CAPITAL K
+1D67B;N # MATHEMATICAL MONOSPACE CAPITAL L
+1D67C;N # MATHEMATICAL MONOSPACE CAPITAL M
+1D67D;N # MATHEMATICAL MONOSPACE CAPITAL N
+1D67E;N # MATHEMATICAL MONOSPACE CAPITAL O
+1D67F;N # MATHEMATICAL MONOSPACE CAPITAL P
+1D680;N # MATHEMATICAL MONOSPACE CAPITAL Q
+1D681;N # MATHEMATICAL MONOSPACE CAPITAL R
+1D682;N # MATHEMATICAL MONOSPACE CAPITAL S
+1D683;N # MATHEMATICAL MONOSPACE CAPITAL T
+1D684;N # MATHEMATICAL MONOSPACE CAPITAL U
+1D685;N # MATHEMATICAL MONOSPACE CAPITAL V
+1D686;N # MATHEMATICAL MONOSPACE CAPITAL W
+1D687;N # MATHEMATICAL MONOSPACE CAPITAL X
+1D688;N # MATHEMATICAL MONOSPACE CAPITAL Y
+1D689;N # MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A;N # MATHEMATICAL MONOSPACE SMALL A
+1D68B;N # MATHEMATICAL MONOSPACE SMALL B
+1D68C;N # MATHEMATICAL MONOSPACE SMALL C
+1D68D;N # MATHEMATICAL MONOSPACE SMALL D
+1D68E;N # MATHEMATICAL MONOSPACE SMALL E
+1D68F;N # MATHEMATICAL MONOSPACE SMALL F
+1D690;N # MATHEMATICAL MONOSPACE SMALL G
+1D691;N # MATHEMATICAL MONOSPACE SMALL H
+1D692;N # MATHEMATICAL MONOSPACE SMALL I
+1D693;N # MATHEMATICAL MONOSPACE SMALL J
+1D694;N # MATHEMATICAL MONOSPACE SMALL K
+1D695;N # MATHEMATICAL MONOSPACE SMALL L
+1D696;N # MATHEMATICAL MONOSPACE SMALL M
+1D697;N # MATHEMATICAL MONOSPACE SMALL N
+1D698;N # MATHEMATICAL MONOSPACE SMALL O
+1D699;N # MATHEMATICAL MONOSPACE SMALL P
+1D69A;N # MATHEMATICAL MONOSPACE SMALL Q
+1D69B;N # MATHEMATICAL MONOSPACE SMALL R
+1D69C;N # MATHEMATICAL MONOSPACE SMALL S
+1D69D;N # MATHEMATICAL MONOSPACE SMALL T
+1D69E;N # MATHEMATICAL MONOSPACE SMALL U
+1D69F;N # MATHEMATICAL MONOSPACE SMALL V
+1D6A0;N # MATHEMATICAL MONOSPACE SMALL W
+1D6A1;N # MATHEMATICAL MONOSPACE SMALL X
+1D6A2;N # MATHEMATICAL MONOSPACE SMALL Y
+1D6A3;N # MATHEMATICAL MONOSPACE SMALL Z
+1D6A4;N # MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5;N # MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8;N # MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9;N # MATHEMATICAL BOLD CAPITAL BETA
+1D6AA;N # MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB;N # MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC;N # MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD;N # MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE;N # MATHEMATICAL BOLD CAPITAL ETA
+1D6AF;N # MATHEMATICAL BOLD CAPITAL THETA
+1D6B0;N # MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1;N # MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2;N # MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3;N # MATHEMATICAL BOLD CAPITAL MU
+1D6B4;N # MATHEMATICAL BOLD CAPITAL NU
+1D6B5;N # MATHEMATICAL BOLD CAPITAL XI
+1D6B6;N # MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7;N # MATHEMATICAL BOLD CAPITAL PI
+1D6B8;N # MATHEMATICAL BOLD CAPITAL RHO
+1D6B9;N # MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA;N # MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB;N # MATHEMATICAL BOLD CAPITAL TAU
+1D6BC;N # MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD;N # MATHEMATICAL BOLD CAPITAL PHI
+1D6BE;N # MATHEMATICAL BOLD CAPITAL CHI
+1D6BF;N # MATHEMATICAL BOLD CAPITAL PSI
+1D6C0;N # MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1;N # MATHEMATICAL BOLD NABLA
+1D6C2;N # MATHEMATICAL BOLD SMALL ALPHA
+1D6C3;N # MATHEMATICAL BOLD SMALL BETA
+1D6C4;N # MATHEMATICAL BOLD SMALL GAMMA
+1D6C5;N # MATHEMATICAL BOLD SMALL DELTA
+1D6C6;N # MATHEMATICAL BOLD SMALL EPSILON
+1D6C7;N # MATHEMATICAL BOLD SMALL ZETA
+1D6C8;N # MATHEMATICAL BOLD SMALL ETA
+1D6C9;N # MATHEMATICAL BOLD SMALL THETA
+1D6CA;N # MATHEMATICAL BOLD SMALL IOTA
+1D6CB;N # MATHEMATICAL BOLD SMALL KAPPA
+1D6CC;N # MATHEMATICAL BOLD SMALL LAMDA
+1D6CD;N # MATHEMATICAL BOLD SMALL MU
+1D6CE;N # MATHEMATICAL BOLD SMALL NU
+1D6CF;N # MATHEMATICAL BOLD SMALL XI
+1D6D0;N # MATHEMATICAL BOLD SMALL OMICRON
+1D6D1;N # MATHEMATICAL BOLD SMALL PI
+1D6D2;N # MATHEMATICAL BOLD SMALL RHO
+1D6D3;N # MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4;N # MATHEMATICAL BOLD SMALL SIGMA
+1D6D5;N # MATHEMATICAL BOLD SMALL TAU
+1D6D6;N # MATHEMATICAL BOLD SMALL UPSILON
+1D6D7;N # MATHEMATICAL BOLD SMALL PHI
+1D6D8;N # MATHEMATICAL BOLD SMALL CHI
+1D6D9;N # MATHEMATICAL BOLD SMALL PSI
+1D6DA;N # MATHEMATICAL BOLD SMALL OMEGA
+1D6DB;N # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC;N # MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD;N # MATHEMATICAL BOLD THETA SYMBOL
+1D6DE;N # MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF;N # MATHEMATICAL BOLD PHI SYMBOL
+1D6E0;N # MATHEMATICAL BOLD RHO SYMBOL
+1D6E1;N # MATHEMATICAL BOLD PI SYMBOL
+1D6E2;N # MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3;N # MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4;N # MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5;N # MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6;N # MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7;N # MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8;N # MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9;N # MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA;N # MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB;N # MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC;N # MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED;N # MATHEMATICAL ITALIC CAPITAL MU
+1D6EE;N # MATHEMATICAL ITALIC CAPITAL NU
+1D6EF;N # MATHEMATICAL ITALIC CAPITAL XI
+1D6F0;N # MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1;N # MATHEMATICAL ITALIC CAPITAL PI
+1D6F2;N # MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3;N # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4;N # MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5;N # MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6;N # MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7;N # MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8;N # MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9;N # MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA;N # MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB;N # MATHEMATICAL ITALIC NABLA
+1D6FC;N # MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD;N # MATHEMATICAL ITALIC SMALL BETA
+1D6FE;N # MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF;N # MATHEMATICAL ITALIC SMALL DELTA
+1D700;N # MATHEMATICAL ITALIC SMALL EPSILON
+1D701;N # MATHEMATICAL ITALIC SMALL ZETA
+1D702;N # MATHEMATICAL ITALIC SMALL ETA
+1D703;N # MATHEMATICAL ITALIC SMALL THETA
+1D704;N # MATHEMATICAL ITALIC SMALL IOTA
+1D705;N # MATHEMATICAL ITALIC SMALL KAPPA
+1D706;N # MATHEMATICAL ITALIC SMALL LAMDA
+1D707;N # MATHEMATICAL ITALIC SMALL MU
+1D708;N # MATHEMATICAL ITALIC SMALL NU
+1D709;N # MATHEMATICAL ITALIC SMALL XI
+1D70A;N # MATHEMATICAL ITALIC SMALL OMICRON
+1D70B;N # MATHEMATICAL ITALIC SMALL PI
+1D70C;N # MATHEMATICAL ITALIC SMALL RHO
+1D70D;N # MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E;N # MATHEMATICAL ITALIC SMALL SIGMA
+1D70F;N # MATHEMATICAL ITALIC SMALL TAU
+1D710;N # MATHEMATICAL ITALIC SMALL UPSILON
+1D711;N # MATHEMATICAL ITALIC SMALL PHI
+1D712;N # MATHEMATICAL ITALIC SMALL CHI
+1D713;N # MATHEMATICAL ITALIC SMALL PSI
+1D714;N # MATHEMATICAL ITALIC SMALL OMEGA
+1D715;N # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716;N # MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717;N # MATHEMATICAL ITALIC THETA SYMBOL
+1D718;N # MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719;N # MATHEMATICAL ITALIC PHI SYMBOL
+1D71A;N # MATHEMATICAL ITALIC RHO SYMBOL
+1D71B;N # MATHEMATICAL ITALIC PI SYMBOL
+1D71C;N # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D;N # MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E;N # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F;N # MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720;N # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721;N # MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722;N # MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723;N # MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724;N # MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725;N # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726;N # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727;N # MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728;N # MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729;N # MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A;N # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B;N # MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C;N # MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D;N # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E;N # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F;N # MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730;N # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731;N # MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732;N # MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733;N # MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734;N # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735;N # MATHEMATICAL BOLD ITALIC NABLA
+1D736;N # MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737;N # MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738;N # MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739;N # MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A;N # MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B;N # MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C;N # MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D;N # MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E;N # MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F;N # MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740;N # MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741;N # MATHEMATICAL BOLD ITALIC SMALL MU
+1D742;N # MATHEMATICAL BOLD ITALIC SMALL NU
+1D743;N # MATHEMATICAL BOLD ITALIC SMALL XI
+1D744;N # MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745;N # MATHEMATICAL BOLD ITALIC SMALL PI
+1D746;N # MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747;N # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748;N # MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749;N # MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A;N # MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B;N # MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C;N # MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D;N # MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E;N # MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F;N # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750;N # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751;N # MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752;N # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753;N # MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754;N # MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755;N # MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E;N # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F;N # MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770;N # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771;N # MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772;N # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773;N # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774;N # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775;N # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776;N # MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777;N # MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778;N # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779;N # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A;N # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B;N # MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C;N # MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D;N # MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E;N # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F;N # MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780;N # MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781;N # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782;N # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783;N # MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784;N # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785;N # MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786;N # MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787;N # MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788;N # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789;N # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A;N # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B;N # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C;N # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D;N # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E;N # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F;N # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2;N # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4;N # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5;N # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6;N # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8;N # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9;N # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE;N # MATHEMATICAL BOLD DIGIT ZERO
+1D7CF;N # MATHEMATICAL BOLD DIGIT ONE
+1D7D0;N # MATHEMATICAL BOLD DIGIT TWO
+1D7D1;N # MATHEMATICAL BOLD DIGIT THREE
+1D7D2;N # MATHEMATICAL BOLD DIGIT FOUR
+1D7D3;N # MATHEMATICAL BOLD DIGIT FIVE
+1D7D4;N # MATHEMATICAL BOLD DIGIT SIX
+1D7D5;N # MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6;N # MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7;N # MATHEMATICAL BOLD DIGIT NINE
+1D7D8;N # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9;N # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA;N # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB;N # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC;N # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD;N # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE;N # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF;N # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0;N # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1;N # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2;N # MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3;N # MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4;N # MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5;N # MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6;N # MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7;N # MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8;N # MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9;N # MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA;N # MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB;N # MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC;N # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED;N # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE;N # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF;N # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0;N # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1;N # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2;N # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3;N # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4;N # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5;N # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6;N # MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7;N # MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8;N # MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9;N # MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA;N # MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB;N # MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC;N # MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD;N # MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE;N # MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF;N # MATHEMATICAL MONOSPACE DIGIT NINE
+20000..2A6D6;W # <CJK Ideograph Extension B, First>..<CJK Ideograph Extension B, Last>
+2A6D7..2F7FF;W # <reserved>
+2F800;W # CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801;W # CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802;W # CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803;W # CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804;W # CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805;W # CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806;W # CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807;W # CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808;W # CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809;W # CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A;W # CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B;W # CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C;W # CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D;W # CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E;W # CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F;W # CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810;W # CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811;W # CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812;W # CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813;W # CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814;W # CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815;W # CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816;W # CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817;W # CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818;W # CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819;W # CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A;W # CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B;W # CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C;W # CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D;W # CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E;W # CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F;W # CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820;W # CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821;W # CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822;W # CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823;W # CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824;W # CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825;W # CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826;W # CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827;W # CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828;W # CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829;W # CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A;W # CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B;W # CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C;W # CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D;W # CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E;W # CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F;W # CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830;W # CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831;W # CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832;W # CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833;W # CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834;W # CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835;W # CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836;W # CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837;W # CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838;W # CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839;W # CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A;W # CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B;W # CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C;W # CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D;W # CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E;W # CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F;W # CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840;W # CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841;W # CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842;W # CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843;W # CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844;W # CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845;W # CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846;W # CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847;W # CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848;W # CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849;W # CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A;W # CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B;W # CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C;W # CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D;W # CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E;W # CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F;W # CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850;W # CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851;W # CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852;W # CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853;W # CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854;W # CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855;W # CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856;W # CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857;W # CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858;W # CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859;W # CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A;W # CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B;W # CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C;W # CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D;W # CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E;W # CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F;W # CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860;W # CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861;W # CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862;W # CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863;W # CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864;W # CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865;W # CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866;W # CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867;W # CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868;W # CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869;W # CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A;W # CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B;W # CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C;W # CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D;W # CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E;W # CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F;W # CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870;W # CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871;W # CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872;W # CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873;W # CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874;W # CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875;W # CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876;W # CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877;W # CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878;W # CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879;W # CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A;W # CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B;W # CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C;W # CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D;W # CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E;W # CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F;W # CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880;W # CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881;W # CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882;W # CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883;W # CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884;W # CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885;W # CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886;W # CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887;W # CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888;W # CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889;W # CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A;W # CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B;W # CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C;W # CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D;W # CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E;W # CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F;W # CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890;W # CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891;W # CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892;W # CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893;W # CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894;W # CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895;W # CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896;W # CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897;W # CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898;W # CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899;W # CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A;W # CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B;W # CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C;W # CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D;W # CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E;W # CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F;W # CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0;W # CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1;W # CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2;W # CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3;W # CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4;W # CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5;W # CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6;W # CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7;W # CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8;W # CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9;W # CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA;W # CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB;W # CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC;W # CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD;W # CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE;W # CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF;W # CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0;W # CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1;W # CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2;W # CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3;W # CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4;W # CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5;W # CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6;W # CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7;W # CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8;W # CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9;W # CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA;W # CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB;W # CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC;W # CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD;W # CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE;W # CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF;W # CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0;W # CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1;W # CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2;W # CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3;W # CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4;W # CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5;W # CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6;W # CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7;W # CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8;W # CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9;W # CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA;W # CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB;W # CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC;W # CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD;W # CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE;W # CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF;W # CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0;W # CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1;W # CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2;W # CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3;W # CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4;W # CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5;W # CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6;W # CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7;W # CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8;W # CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9;W # CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA;W # CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB;W # CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC;W # CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD;W # CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE;W # CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF;W # CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0;W # CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1;W # CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2;W # CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3;W # CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4;W # CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5;W # CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6;W # CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7;W # CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8;W # CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9;W # CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA;W # CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB;W # CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC;W # CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED;W # CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE;W # CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF;W # CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0;W # CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1;W # CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2;W # CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3;W # CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4;W # CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5;W # CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6;W # CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7;W # CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8;W # CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9;W # CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA;W # CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB;W # CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC;W # CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD;W # CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE;W # CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF;W # CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900;W # CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901;W # CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902;W # CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903;W # CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904;W # CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905;W # CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906;W # CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907;W # CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908;W # CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909;W # CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A;W # CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B;W # CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C;W # CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D;W # CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E;W # CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F;W # CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910;W # CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911;W # CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912;W # CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913;W # CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914;W # CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915;W # CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916;W # CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917;W # CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918;W # CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919;W # CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A;W # CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B;W # CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C;W # CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D;W # CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E;W # CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F;W # CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920;W # CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921;W # CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922;W # CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923;W # CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924;W # CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925;W # CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926;W # CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927;W # CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928;W # CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929;W # CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A;W # CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B;W # CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C;W # CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D;W # CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E;W # CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F;W # CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930;W # CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931;W # CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932;W # CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933;W # CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934;W # CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935;W # CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936;W # CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937;W # CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938;W # CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939;W # CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A;W # CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B;W # CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C;W # CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D;W # CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E;W # CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F;W # CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940;W # CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941;W # CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942;W # CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943;W # CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944;W # CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945;W # CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946;W # CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947;W # CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948;W # CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949;W # CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A;W # CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B;W # CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C;W # CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D;W # CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E;W # CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F;W # CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950;W # CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951;W # CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952;W # CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953;W # CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954;W # CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955;W # CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956;W # CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957;W # CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958;W # CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959;W # CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A;W # CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B;W # CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C;W # CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D;W # CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E;W # CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F;W # CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960;W # CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961;W # CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962;W # CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963;W # CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964;W # CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965;W # CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966;W # CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967;W # CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968;W # CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969;W # CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A;W # CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B;W # CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C;W # CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D;W # CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E;W # CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F;W # CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970;W # CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971;W # CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972;W # CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973;W # CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974;W # CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975;W # CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976;W # CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977;W # CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978;W # CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979;W # CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A;W # CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B;W # CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C;W # CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D;W # CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E;W # CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F;W # CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980;W # CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981;W # CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982;W # CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983;W # CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984;W # CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985;W # CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986;W # CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987;W # CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988;W # CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989;W # CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A;W # CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B;W # CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C;W # CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D;W # CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E;W # CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F;W # CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990;W # CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991;W # CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992;W # CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993;W # CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994;W # CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995;W # CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996;W # CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997;W # CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998;W # CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999;W # CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A;W # CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B;W # CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C;W # CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D;W # CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E;W # CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F;W # CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0;W # CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1;W # CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2;W # CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3;W # CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4;W # CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5;W # CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6;W # CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7;W # CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8;W # CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9;W # CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA;W # CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB;W # CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC;W # CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD;W # CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE;W # CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF;W # CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0;W # CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1;W # CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2;W # CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3;W # CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4;W # CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5;W # CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6;W # CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7;W # CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8;W # CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9;W # CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA;W # CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB;W # CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC;W # CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD;W # CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE;W # CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF;W # CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0;W # CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1;W # CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2;W # CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3;W # CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4;W # CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5;W # CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6;W # CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7;W # CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8;W # CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9;W # CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA;W # CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB;W # CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC;W # CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD;W # CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE;W # CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF;W # CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0;W # CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1;W # CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2;W # CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3;W # CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4;W # CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5;W # CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6;W # CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7;W # CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8;W # CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9;W # CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA;W # CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB;W # CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC;W # CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD;W # CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE;W # CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF;W # CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0;W # CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1;W # CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2;W # CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3;W # CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4;W # CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5;W # CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6;W # CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7;W # CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8;W # CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9;W # CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA;W # CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB;W # CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC;W # CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED;W # CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE;W # CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF;W # CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0;W # CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1;W # CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2;W # CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3;W # CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4;W # CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5;W # CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6;W # CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7;W # CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8;W # CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9;W # CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA;W # CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB;W # CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC;W # CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD;W # CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE;W # CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF;W # CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00;W # CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01;W # CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02;W # CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03;W # CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04;W # CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05;W # CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06;W # CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07;W # CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08;W # CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09;W # CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A;W # CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B;W # CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C;W # CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D;W # CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E;W # CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F;W # CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10;W # CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11;W # CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12;W # CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13;W # CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14;W # CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15;W # CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16;W # CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17;W # CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18;W # CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19;W # CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A;W # CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B;W # CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C;W # CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D;W # CJK COMPATIBILITY IDEOGRAPH-2FA1D
+2FA1E..2FFFD;W # <reserved>
+30000..3FFFD;W # <reserved>
+E0001;N # LANGUAGE TAG
+E0020;N # TAG SPACE
+E0021;N # TAG EXCLAMATION MARK
+E0022;N # TAG QUOTATION MARK
+E0023;N # TAG NUMBER SIGN
+E0024;N # TAG DOLLAR SIGN
+E0025;N # TAG PERCENT SIGN
+E0026;N # TAG AMPERSAND
+E0027;N # TAG APOSTROPHE
+E0028;N # TAG LEFT PARENTHESIS
+E0029;N # TAG RIGHT PARENTHESIS
+E002A;N # TAG ASTERISK
+E002B;N # TAG PLUS SIGN
+E002C;N # TAG COMMA
+E002D;N # TAG HYPHEN-MINUS
+E002E;N # TAG FULL STOP
+E002F;N # TAG SOLIDUS
+E0030;N # TAG DIGIT ZERO
+E0031;N # TAG DIGIT ONE
+E0032;N # TAG DIGIT TWO
+E0033;N # TAG DIGIT THREE
+E0034;N # TAG DIGIT FOUR
+E0035;N # TAG DIGIT FIVE
+E0036;N # TAG DIGIT SIX
+E0037;N # TAG DIGIT SEVEN
+E0038;N # TAG DIGIT EIGHT
+E0039;N # TAG DIGIT NINE
+E003A;N # TAG COLON
+E003B;N # TAG SEMICOLON
+E003C;N # TAG LESS-THAN SIGN
+E003D;N # TAG EQUALS SIGN
+E003E;N # TAG GREATER-THAN SIGN
+E003F;N # TAG QUESTION MARK
+E0040;N # TAG COMMERCIAL AT
+E0041;N # TAG LATIN CAPITAL LETTER A
+E0042;N # TAG LATIN CAPITAL LETTER B
+E0043;N # TAG LATIN CAPITAL LETTER C
+E0044;N # TAG LATIN CAPITAL LETTER D
+E0045;N # TAG LATIN CAPITAL LETTER E
+E0046;N # TAG LATIN CAPITAL LETTER F
+E0047;N # TAG LATIN CAPITAL LETTER G
+E0048;N # TAG LATIN CAPITAL LETTER H
+E0049;N # TAG LATIN CAPITAL LETTER I
+E004A;N # TAG LATIN CAPITAL LETTER J
+E004B;N # TAG LATIN CAPITAL LETTER K
+E004C;N # TAG LATIN CAPITAL LETTER L
+E004D;N # TAG LATIN CAPITAL LETTER M
+E004E;N # TAG LATIN CAPITAL LETTER N
+E004F;N # TAG LATIN CAPITAL LETTER O
+E0050;N # TAG LATIN CAPITAL LETTER P
+E0051;N # TAG LATIN CAPITAL LETTER Q
+E0052;N # TAG LATIN CAPITAL LETTER R
+E0053;N # TAG LATIN CAPITAL LETTER S
+E0054;N # TAG LATIN CAPITAL LETTER T
+E0055;N # TAG LATIN CAPITAL LETTER U
+E0056;N # TAG LATIN CAPITAL LETTER V
+E0057;N # TAG LATIN CAPITAL LETTER W
+E0058;N # TAG LATIN CAPITAL LETTER X
+E0059;N # TAG LATIN CAPITAL LETTER Y
+E005A;N # TAG LATIN CAPITAL LETTER Z
+E005B;N # TAG LEFT SQUARE BRACKET
+E005C;N # TAG REVERSE SOLIDUS
+E005D;N # TAG RIGHT SQUARE BRACKET
+E005E;N # TAG CIRCUMFLEX ACCENT
+E005F;N # TAG LOW LINE
+E0060;N # TAG GRAVE ACCENT
+E0061;N # TAG LATIN SMALL LETTER A
+E0062;N # TAG LATIN SMALL LETTER B
+E0063;N # TAG LATIN SMALL LETTER C
+E0064;N # TAG LATIN SMALL LETTER D
+E0065;N # TAG LATIN SMALL LETTER E
+E0066;N # TAG LATIN SMALL LETTER F
+E0067;N # TAG LATIN SMALL LETTER G
+E0068;N # TAG LATIN SMALL LETTER H
+E0069;N # TAG LATIN SMALL LETTER I
+E006A;N # TAG LATIN SMALL LETTER J
+E006B;N # TAG LATIN SMALL LETTER K
+E006C;N # TAG LATIN SMALL LETTER L
+E006D;N # TAG LATIN SMALL LETTER M
+E006E;N # TAG LATIN SMALL LETTER N
+E006F;N # TAG LATIN SMALL LETTER O
+E0070;N # TAG LATIN SMALL LETTER P
+E0071;N # TAG LATIN SMALL LETTER Q
+E0072;N # TAG LATIN SMALL LETTER R
+E0073;N # TAG LATIN SMALL LETTER S
+E0074;N # TAG LATIN SMALL LETTER T
+E0075;N # TAG LATIN SMALL LETTER U
+E0076;N # TAG LATIN SMALL LETTER V
+E0077;N # TAG LATIN SMALL LETTER W
+E0078;N # TAG LATIN SMALL LETTER X
+E0079;N # TAG LATIN SMALL LETTER Y
+E007A;N # TAG LATIN SMALL LETTER Z
+E007B;N # TAG LEFT CURLY BRACKET
+E007C;N # TAG VERTICAL LINE
+E007D;N # TAG RIGHT CURLY BRACKET
+E007E;N # TAG TILDE
+E007F;N # CANCEL TAG
+E0100;A # VARIATION SELECTOR-17
+E0101;A # VARIATION SELECTOR-18
+E0102;A # VARIATION SELECTOR-19
+E0103;A # VARIATION SELECTOR-20
+E0104;A # VARIATION SELECTOR-21
+E0105;A # VARIATION SELECTOR-22
+E0106;A # VARIATION SELECTOR-23
+E0107;A # VARIATION SELECTOR-24
+E0108;A # VARIATION SELECTOR-25
+E0109;A # VARIATION SELECTOR-26
+E010A;A # VARIATION SELECTOR-27
+E010B;A # VARIATION SELECTOR-28
+E010C;A # VARIATION SELECTOR-29
+E010D;A # VARIATION SELECTOR-30
+E010E;A # VARIATION SELECTOR-31
+E010F;A # VARIATION SELECTOR-32
+E0110;A # VARIATION SELECTOR-33
+E0111;A # VARIATION SELECTOR-34
+E0112;A # VARIATION SELECTOR-35
+E0113;A # VARIATION SELECTOR-36
+E0114;A # VARIATION SELECTOR-37
+E0115;A # VARIATION SELECTOR-38
+E0116;A # VARIATION SELECTOR-39
+E0117;A # VARIATION SELECTOR-40
+E0118;A # VARIATION SELECTOR-41
+E0119;A # VARIATION SELECTOR-42
+E011A;A # VARIATION SELECTOR-43
+E011B;A # VARIATION SELECTOR-44
+E011C;A # VARIATION SELECTOR-45
+E011D;A # VARIATION SELECTOR-46
+E011E;A # VARIATION SELECTOR-47
+E011F;A # VARIATION SELECTOR-48
+E0120;A # VARIATION SELECTOR-49
+E0121;A # VARIATION SELECTOR-50
+E0122;A # VARIATION SELECTOR-51
+E0123;A # VARIATION SELECTOR-52
+E0124;A # VARIATION SELECTOR-53
+E0125;A # VARIATION SELECTOR-54
+E0126;A # VARIATION SELECTOR-55
+E0127;A # VARIATION SELECTOR-56
+E0128;A # VARIATION SELECTOR-57
+E0129;A # VARIATION SELECTOR-58
+E012A;A # VARIATION SELECTOR-59
+E012B;A # VARIATION SELECTOR-60
+E012C;A # VARIATION SELECTOR-61
+E012D;A # VARIATION SELECTOR-62
+E012E;A # VARIATION SELECTOR-63
+E012F;A # VARIATION SELECTOR-64
+E0130;A # VARIATION SELECTOR-65
+E0131;A # VARIATION SELECTOR-66
+E0132;A # VARIATION SELECTOR-67
+E0133;A # VARIATION SELECTOR-68
+E0134;A # VARIATION SELECTOR-69
+E0135;A # VARIATION SELECTOR-70
+E0136;A # VARIATION SELECTOR-71
+E0137;A # VARIATION SELECTOR-72
+E0138;A # VARIATION SELECTOR-73
+E0139;A # VARIATION SELECTOR-74
+E013A;A # VARIATION SELECTOR-75
+E013B;A # VARIATION SELECTOR-76
+E013C;A # VARIATION SELECTOR-77
+E013D;A # VARIATION SELECTOR-78
+E013E;A # VARIATION SELECTOR-79
+E013F;A # VARIATION SELECTOR-80
+E0140;A # VARIATION SELECTOR-81
+E0141;A # VARIATION SELECTOR-82
+E0142;A # VARIATION SELECTOR-83
+E0143;A # VARIATION SELECTOR-84
+E0144;A # VARIATION SELECTOR-85
+E0145;A # VARIATION SELECTOR-86
+E0146;A # VARIATION SELECTOR-87
+E0147;A # VARIATION SELECTOR-88
+E0148;A # VARIATION SELECTOR-89
+E0149;A # VARIATION SELECTOR-90
+E014A;A # VARIATION SELECTOR-91
+E014B;A # VARIATION SELECTOR-92
+E014C;A # VARIATION SELECTOR-93
+E014D;A # VARIATION SELECTOR-94
+E014E;A # VARIATION SELECTOR-95
+E014F;A # VARIATION SELECTOR-96
+E0150;A # VARIATION SELECTOR-97
+E0151;A # VARIATION SELECTOR-98
+E0152;A # VARIATION SELECTOR-99
+E0153;A # VARIATION SELECTOR-100
+E0154;A # VARIATION SELECTOR-101
+E0155;A # VARIATION SELECTOR-102
+E0156;A # VARIATION SELECTOR-103
+E0157;A # VARIATION SELECTOR-104
+E0158;A # VARIATION SELECTOR-105
+E0159;A # VARIATION SELECTOR-106
+E015A;A # VARIATION SELECTOR-107
+E015B;A # VARIATION SELECTOR-108
+E015C;A # VARIATION SELECTOR-109
+E015D;A # VARIATION SELECTOR-110
+E015E;A # VARIATION SELECTOR-111
+E015F;A # VARIATION SELECTOR-112
+E0160;A # VARIATION SELECTOR-113
+E0161;A # VARIATION SELECTOR-114
+E0162;A # VARIATION SELECTOR-115
+E0163;A # VARIATION SELECTOR-116
+E0164;A # VARIATION SELECTOR-117
+E0165;A # VARIATION SELECTOR-118
+E0166;A # VARIATION SELECTOR-119
+E0167;A # VARIATION SELECTOR-120
+E0168;A # VARIATION SELECTOR-121
+E0169;A # VARIATION SELECTOR-122
+E016A;A # VARIATION SELECTOR-123
+E016B;A # VARIATION SELECTOR-124
+E016C;A # VARIATION SELECTOR-125
+E016D;A # VARIATION SELECTOR-126
+E016E;A # VARIATION SELECTOR-127
+E016F;A # VARIATION SELECTOR-128
+E0170;A # VARIATION SELECTOR-129
+E0171;A # VARIATION SELECTOR-130
+E0172;A # VARIATION SELECTOR-131
+E0173;A # VARIATION SELECTOR-132
+E0174;A # VARIATION SELECTOR-133
+E0175;A # VARIATION SELECTOR-134
+E0176;A # VARIATION SELECTOR-135
+E0177;A # VARIATION SELECTOR-136
+E0178;A # VARIATION SELECTOR-137
+E0179;A # VARIATION SELECTOR-138
+E017A;A # VARIATION SELECTOR-139
+E017B;A # VARIATION SELECTOR-140
+E017C;A # VARIATION SELECTOR-141
+E017D;A # VARIATION SELECTOR-142
+E017E;A # VARIATION SELECTOR-143
+E017F;A # VARIATION SELECTOR-144
+E0180;A # VARIATION SELECTOR-145
+E0181;A # VARIATION SELECTOR-146
+E0182;A # VARIATION SELECTOR-147
+E0183;A # VARIATION SELECTOR-148
+E0184;A # VARIATION SELECTOR-149
+E0185;A # VARIATION SELECTOR-150
+E0186;A # VARIATION SELECTOR-151
+E0187;A # VARIATION SELECTOR-152
+E0188;A # VARIATION SELECTOR-153
+E0189;A # VARIATION SELECTOR-154
+E018A;A # VARIATION SELECTOR-155
+E018B;A # VARIATION SELECTOR-156
+E018C;A # VARIATION SELECTOR-157
+E018D;A # VARIATION SELECTOR-158
+E018E;A # VARIATION SELECTOR-159
+E018F;A # VARIATION SELECTOR-160
+E0190;A # VARIATION SELECTOR-161
+E0191;A # VARIATION SELECTOR-162
+E0192;A # VARIATION SELECTOR-163
+E0193;A # VARIATION SELECTOR-164
+E0194;A # VARIATION SELECTOR-165
+E0195;A # VARIATION SELECTOR-166
+E0196;A # VARIATION SELECTOR-167
+E0197;A # VARIATION SELECTOR-168
+E0198;A # VARIATION SELECTOR-169
+E0199;A # VARIATION SELECTOR-170
+E019A;A # VARIATION SELECTOR-171
+E019B;A # VARIATION SELECTOR-172
+E019C;A # VARIATION SELECTOR-173
+E019D;A # VARIATION SELECTOR-174
+E019E;A # VARIATION SELECTOR-175
+E019F;A # VARIATION SELECTOR-176
+E01A0;A # VARIATION SELECTOR-177
+E01A1;A # VARIATION SELECTOR-178
+E01A2;A # VARIATION SELECTOR-179
+E01A3;A # VARIATION SELECTOR-180
+E01A4;A # VARIATION SELECTOR-181
+E01A5;A # VARIATION SELECTOR-182
+E01A6;A # VARIATION SELECTOR-183
+E01A7;A # VARIATION SELECTOR-184
+E01A8;A # VARIATION SELECTOR-185
+E01A9;A # VARIATION SELECTOR-186
+E01AA;A # VARIATION SELECTOR-187
+E01AB;A # VARIATION SELECTOR-188
+E01AC;A # VARIATION SELECTOR-189
+E01AD;A # VARIATION SELECTOR-190
+E01AE;A # VARIATION SELECTOR-191
+E01AF;A # VARIATION SELECTOR-192
+E01B0;A # VARIATION SELECTOR-193
+E01B1;A # VARIATION SELECTOR-194
+E01B2;A # VARIATION SELECTOR-195
+E01B3;A # VARIATION SELECTOR-196
+E01B4;A # VARIATION SELECTOR-197
+E01B5;A # VARIATION SELECTOR-198
+E01B6;A # VARIATION SELECTOR-199
+E01B7;A # VARIATION SELECTOR-200
+E01B8;A # VARIATION SELECTOR-201
+E01B9;A # VARIATION SELECTOR-202
+E01BA;A # VARIATION SELECTOR-203
+E01BB;A # VARIATION SELECTOR-204
+E01BC;A # VARIATION SELECTOR-205
+E01BD;A # VARIATION SELECTOR-206
+E01BE;A # VARIATION SELECTOR-207
+E01BF;A # VARIATION SELECTOR-208
+E01C0;A # VARIATION SELECTOR-209
+E01C1;A # VARIATION SELECTOR-210
+E01C2;A # VARIATION SELECTOR-211
+E01C3;A # VARIATION SELECTOR-212
+E01C4;A # VARIATION SELECTOR-213
+E01C5;A # VARIATION SELECTOR-214
+E01C6;A # VARIATION SELECTOR-215
+E01C7;A # VARIATION SELECTOR-216
+E01C8;A # VARIATION SELECTOR-217
+E01C9;A # VARIATION SELECTOR-218
+E01CA;A # VARIATION SELECTOR-219
+E01CB;A # VARIATION SELECTOR-220
+E01CC;A # VARIATION SELECTOR-221
+E01CD;A # VARIATION SELECTOR-222
+E01CE;A # VARIATION SELECTOR-223
+E01CF;A # VARIATION SELECTOR-224
+E01D0;A # VARIATION SELECTOR-225
+E01D1;A # VARIATION SELECTOR-226
+E01D2;A # VARIATION SELECTOR-227
+E01D3;A # VARIATION SELECTOR-228
+E01D4;A # VARIATION SELECTOR-229
+E01D5;A # VARIATION SELECTOR-230
+E01D6;A # VARIATION SELECTOR-231
+E01D7;A # VARIATION SELECTOR-232
+E01D8;A # VARIATION SELECTOR-233
+E01D9;A # VARIATION SELECTOR-234
+E01DA;A # VARIATION SELECTOR-235
+E01DB;A # VARIATION SELECTOR-236
+E01DC;A # VARIATION SELECTOR-237
+E01DD;A # VARIATION SELECTOR-238
+E01DE;A # VARIATION SELECTOR-239
+E01DF;A # VARIATION SELECTOR-240
+E01E0;A # VARIATION SELECTOR-241
+E01E1;A # VARIATION SELECTOR-242
+E01E2;A # VARIATION SELECTOR-243
+E01E3;A # VARIATION SELECTOR-244
+E01E4;A # VARIATION SELECTOR-245
+E01E5;A # VARIATION SELECTOR-246
+E01E6;A # VARIATION SELECTOR-247
+E01E7;A # VARIATION SELECTOR-248
+E01E8;A # VARIATION SELECTOR-249
+E01E9;A # VARIATION SELECTOR-250
+E01EA;A # VARIATION SELECTOR-251
+E01EB;A # VARIATION SELECTOR-252
+E01EC;A # VARIATION SELECTOR-253
+E01ED;A # VARIATION SELECTOR-254
+E01EE;A # VARIATION SELECTOR-255
+E01EF;A # VARIATION SELECTOR-256
+F0000..FFFFD;A # <Plane 15 Private Use, First>..<Plane 15 Private Use, Last>
+100000..10FFFD;A # <Plane 16 Private Use, First>..<Plane 16 Private Use, Last>
diff --git a/Master/tlpkg/tlperl/lib/unicore/Exact.pl b/Master/tlpkg/tlperl/lib/unicore/Exact.pl
new file mode 100644
index 00000000000..42312b054cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Exact.pl
@@ -0,0 +1,73 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+##
+## Data in this file used by ../utf8_heavy.pl
+##
+
+## Mapping from name to filename in ./lib/gc_sc
+%utf8::Exact = (
+ ASCII => 'ASCII',
+ All => 'Any',
+ Alnum => 'Alnum',
+ Alpha => 'Alpha',
+ Any => 'Any',
+ Assigned => 'Assigned',
+ Blank => 'Blank',
+ C => 'C',
+ Cc => 'Cc',
+ Cf => 'Cf',
+ Cn => 'Cn',
+ Cntrl => 'Cntrl',
+ Co => 'Co',
+ Cs => 'Cs',
+ Digit => 'Digit',
+ Graph => 'Graph',
+ InGreek => 'InGreekA',
+ L => 'L',
+ LC => 'LC',
+ Ll => 'Ll',
+ Lm => 'Lm',
+ Lo => 'Lo',
+ Lower => 'Lower',
+ Lt => 'Lt',
+ Lu => 'Lu',
+ M => 'M',
+ Mc => 'Mc',
+ Me => 'Me',
+ Mn => 'Mn',
+ N => 'N',
+ Nd => 'Nd',
+ Nl => 'Nl',
+ No => 'No',
+ P => 'P',
+ Pc => 'Pc',
+ Pd => 'Pd',
+ Pe => 'Pe',
+ Pf => 'Pf',
+ Pi => 'Pi',
+ Po => 'Po',
+ Print => 'Print',
+ Ps => 'Ps',
+ Punct => 'Punct',
+ S => 'S',
+ Sc => 'Sc',
+ Sk => 'Sk',
+ Sm => 'Sm',
+ So => 'So',
+ Space => 'Space',
+ SpacePerl => 'SpacePer',
+ Title => 'Title',
+ Upper => 'Upper',
+ Word => 'Word',
+ XDigit => 'XDigit',
+ Z => 'Z',
+ Zl => 'Zl',
+ Zp => 'Zp',
+ Zs => 'Zs',
+ _CanonDCIJ => '_CanonDC',
+ _CaseIgnorable => '_CaseIgn',
+ _CombAbove => '_CombAbo',
+);
+1;
diff --git a/Master/tlpkg/tlperl/lib/unicore/HangulSyllableType.txt b/Master/tlpkg/tlperl/lib/unicore/HangulSyllableType.txt
new file mode 100644
index 00000000000..5c4b1f47116
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/HangulSyllableType.txt
@@ -0,0 +1,851 @@
+# HangulSyllableType-4.1.0.txt
+# Date: 2004-12-11, 05:44:43 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+# Property: Hangul_Syllable_Type
+
+# All code points not explicitly listed for Hangul_Syllable_Type
+# have the value Not_Applicable (NA).
+
+# ================================================
+
+# Hangul_Syllable_Type=Leading_Jamo
+
+1100..1159 ; L # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
+115F ; L # Lo HANGUL CHOSEONG FILLER
+
+# Total code points: 91
+
+# ================================================
+
+# Hangul_Syllable_Type=Vowel_Jamo
+
+1160..11A2 ; V # Lo [67] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA
+
+# Total code points: 67
+
+# ================================================
+
+# Hangul_Syllable_Type=Trailing_Jamo
+
+11A8..11F9 ; T # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
+
+# Total code points: 82
+
+# ================================================
+
+# Hangul_Syllable_Type=LV_Syllable
+
+AC00 ; LV # Lo HANGUL SYLLABLE GA
+AC1C ; LV # Lo HANGUL SYLLABLE GAE
+AC38 ; LV # Lo HANGUL SYLLABLE GYA
+AC54 ; LV # Lo HANGUL SYLLABLE GYAE
+AC70 ; LV # Lo HANGUL SYLLABLE GEO
+AC8C ; LV # Lo HANGUL SYLLABLE GE
+ACA8 ; LV # Lo HANGUL SYLLABLE GYEO
+ACC4 ; LV # Lo HANGUL SYLLABLE GYE
+ACE0 ; LV # Lo HANGUL SYLLABLE GO
+ACFC ; LV # Lo HANGUL SYLLABLE GWA
+AD18 ; LV # Lo HANGUL SYLLABLE GWAE
+AD34 ; LV # Lo HANGUL SYLLABLE GOE
+AD50 ; LV # Lo HANGUL SYLLABLE GYO
+AD6C ; LV # Lo HANGUL SYLLABLE GU
+AD88 ; LV # Lo HANGUL SYLLABLE GWEO
+ADA4 ; LV # Lo HANGUL SYLLABLE GWE
+ADC0 ; LV # Lo HANGUL SYLLABLE GWI
+ADDC ; LV # Lo HANGUL SYLLABLE GYU
+ADF8 ; LV # Lo HANGUL SYLLABLE GEU
+AE14 ; LV # Lo HANGUL SYLLABLE GYI
+AE30 ; LV # Lo HANGUL SYLLABLE GI
+AE4C ; LV # Lo HANGUL SYLLABLE GGA
+AE68 ; LV # Lo HANGUL SYLLABLE GGAE
+AE84 ; LV # Lo HANGUL SYLLABLE GGYA
+AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE
+AEBC ; LV # Lo HANGUL SYLLABLE GGEO
+AED8 ; LV # Lo HANGUL SYLLABLE GGE
+AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO
+AF10 ; LV # Lo HANGUL SYLLABLE GGYE
+AF2C ; LV # Lo HANGUL SYLLABLE GGO
+AF48 ; LV # Lo HANGUL SYLLABLE GGWA
+AF64 ; LV # Lo HANGUL SYLLABLE GGWAE
+AF80 ; LV # Lo HANGUL SYLLABLE GGOE
+AF9C ; LV # Lo HANGUL SYLLABLE GGYO
+AFB8 ; LV # Lo HANGUL SYLLABLE GGU
+AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO
+AFF0 ; LV # Lo HANGUL SYLLABLE GGWE
+B00C ; LV # Lo HANGUL SYLLABLE GGWI
+B028 ; LV # Lo HANGUL SYLLABLE GGYU
+B044 ; LV # Lo HANGUL SYLLABLE GGEU
+B060 ; LV # Lo HANGUL SYLLABLE GGYI
+B07C ; LV # Lo HANGUL SYLLABLE GGI
+B098 ; LV # Lo HANGUL SYLLABLE NA
+B0B4 ; LV # Lo HANGUL SYLLABLE NAE
+B0D0 ; LV # Lo HANGUL SYLLABLE NYA
+B0EC ; LV # Lo HANGUL SYLLABLE NYAE
+B108 ; LV # Lo HANGUL SYLLABLE NEO
+B124 ; LV # Lo HANGUL SYLLABLE NE
+B140 ; LV # Lo HANGUL SYLLABLE NYEO
+B15C ; LV # Lo HANGUL SYLLABLE NYE
+B178 ; LV # Lo HANGUL SYLLABLE NO
+B194 ; LV # Lo HANGUL SYLLABLE NWA
+B1B0 ; LV # Lo HANGUL SYLLABLE NWAE
+B1CC ; LV # Lo HANGUL SYLLABLE NOE
+B1E8 ; LV # Lo HANGUL SYLLABLE NYO
+B204 ; LV # Lo HANGUL SYLLABLE NU
+B220 ; LV # Lo HANGUL SYLLABLE NWEO
+B23C ; LV # Lo HANGUL SYLLABLE NWE
+B258 ; LV # Lo HANGUL SYLLABLE NWI
+B274 ; LV # Lo HANGUL SYLLABLE NYU
+B290 ; LV # Lo HANGUL SYLLABLE NEU
+B2AC ; LV # Lo HANGUL SYLLABLE NYI
+B2C8 ; LV # Lo HANGUL SYLLABLE NI
+B2E4 ; LV # Lo HANGUL SYLLABLE DA
+B300 ; LV # Lo HANGUL SYLLABLE DAE
+B31C ; LV # Lo HANGUL SYLLABLE DYA
+B338 ; LV # Lo HANGUL SYLLABLE DYAE
+B354 ; LV # Lo HANGUL SYLLABLE DEO
+B370 ; LV # Lo HANGUL SYLLABLE DE
+B38C ; LV # Lo HANGUL SYLLABLE DYEO
+B3A8 ; LV # Lo HANGUL SYLLABLE DYE
+B3C4 ; LV # Lo HANGUL SYLLABLE DO
+B3E0 ; LV # Lo HANGUL SYLLABLE DWA
+B3FC ; LV # Lo HANGUL SYLLABLE DWAE
+B418 ; LV # Lo HANGUL SYLLABLE DOE
+B434 ; LV # Lo HANGUL SYLLABLE DYO
+B450 ; LV # Lo HANGUL SYLLABLE DU
+B46C ; LV # Lo HANGUL SYLLABLE DWEO
+B488 ; LV # Lo HANGUL SYLLABLE DWE
+B4A4 ; LV # Lo HANGUL SYLLABLE DWI
+B4C0 ; LV # Lo HANGUL SYLLABLE DYU
+B4DC ; LV # Lo HANGUL SYLLABLE DEU
+B4F8 ; LV # Lo HANGUL SYLLABLE DYI
+B514 ; LV # Lo HANGUL SYLLABLE DI
+B530 ; LV # Lo HANGUL SYLLABLE DDA
+B54C ; LV # Lo HANGUL SYLLABLE DDAE
+B568 ; LV # Lo HANGUL SYLLABLE DDYA
+B584 ; LV # Lo HANGUL SYLLABLE DDYAE
+B5A0 ; LV # Lo HANGUL SYLLABLE DDEO
+B5BC ; LV # Lo HANGUL SYLLABLE DDE
+B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO
+B5F4 ; LV # Lo HANGUL SYLLABLE DDYE
+B610 ; LV # Lo HANGUL SYLLABLE DDO
+B62C ; LV # Lo HANGUL SYLLABLE DDWA
+B648 ; LV # Lo HANGUL SYLLABLE DDWAE
+B664 ; LV # Lo HANGUL SYLLABLE DDOE
+B680 ; LV # Lo HANGUL SYLLABLE DDYO
+B69C ; LV # Lo HANGUL SYLLABLE DDU
+B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO
+B6D4 ; LV # Lo HANGUL SYLLABLE DDWE
+B6F0 ; LV # Lo HANGUL SYLLABLE DDWI
+B70C ; LV # Lo HANGUL SYLLABLE DDYU
+B728 ; LV # Lo HANGUL SYLLABLE DDEU
+B744 ; LV # Lo HANGUL SYLLABLE DDYI
+B760 ; LV # Lo HANGUL SYLLABLE DDI
+B77C ; LV # Lo HANGUL SYLLABLE RA
+B798 ; LV # Lo HANGUL SYLLABLE RAE
+B7B4 ; LV # Lo HANGUL SYLLABLE RYA
+B7D0 ; LV # Lo HANGUL SYLLABLE RYAE
+B7EC ; LV # Lo HANGUL SYLLABLE REO
+B808 ; LV # Lo HANGUL SYLLABLE RE
+B824 ; LV # Lo HANGUL SYLLABLE RYEO
+B840 ; LV # Lo HANGUL SYLLABLE RYE
+B85C ; LV # Lo HANGUL SYLLABLE RO
+B878 ; LV # Lo HANGUL SYLLABLE RWA
+B894 ; LV # Lo HANGUL SYLLABLE RWAE
+B8B0 ; LV # Lo HANGUL SYLLABLE ROE
+B8CC ; LV # Lo HANGUL SYLLABLE RYO
+B8E8 ; LV # Lo HANGUL SYLLABLE RU
+B904 ; LV # Lo HANGUL SYLLABLE RWEO
+B920 ; LV # Lo HANGUL SYLLABLE RWE
+B93C ; LV # Lo HANGUL SYLLABLE RWI
+B958 ; LV # Lo HANGUL SYLLABLE RYU
+B974 ; LV # Lo HANGUL SYLLABLE REU
+B990 ; LV # Lo HANGUL SYLLABLE RYI
+B9AC ; LV # Lo HANGUL SYLLABLE RI
+B9C8 ; LV # Lo HANGUL SYLLABLE MA
+B9E4 ; LV # Lo HANGUL SYLLABLE MAE
+BA00 ; LV # Lo HANGUL SYLLABLE MYA
+BA1C ; LV # Lo HANGUL SYLLABLE MYAE
+BA38 ; LV # Lo HANGUL SYLLABLE MEO
+BA54 ; LV # Lo HANGUL SYLLABLE ME
+BA70 ; LV # Lo HANGUL SYLLABLE MYEO
+BA8C ; LV # Lo HANGUL SYLLABLE MYE
+BAA8 ; LV # Lo HANGUL SYLLABLE MO
+BAC4 ; LV # Lo HANGUL SYLLABLE MWA
+BAE0 ; LV # Lo HANGUL SYLLABLE MWAE
+BAFC ; LV # Lo HANGUL SYLLABLE MOE
+BB18 ; LV # Lo HANGUL SYLLABLE MYO
+BB34 ; LV # Lo HANGUL SYLLABLE MU
+BB50 ; LV # Lo HANGUL SYLLABLE MWEO
+BB6C ; LV # Lo HANGUL SYLLABLE MWE
+BB88 ; LV # Lo HANGUL SYLLABLE MWI
+BBA4 ; LV # Lo HANGUL SYLLABLE MYU
+BBC0 ; LV # Lo HANGUL SYLLABLE MEU
+BBDC ; LV # Lo HANGUL SYLLABLE MYI
+BBF8 ; LV # Lo HANGUL SYLLABLE MI
+BC14 ; LV # Lo HANGUL SYLLABLE BA
+BC30 ; LV # Lo HANGUL SYLLABLE BAE
+BC4C ; LV # Lo HANGUL SYLLABLE BYA
+BC68 ; LV # Lo HANGUL SYLLABLE BYAE
+BC84 ; LV # Lo HANGUL SYLLABLE BEO
+BCA0 ; LV # Lo HANGUL SYLLABLE BE
+BCBC ; LV # Lo HANGUL SYLLABLE BYEO
+BCD8 ; LV # Lo HANGUL SYLLABLE BYE
+BCF4 ; LV # Lo HANGUL SYLLABLE BO
+BD10 ; LV # Lo HANGUL SYLLABLE BWA
+BD2C ; LV # Lo HANGUL SYLLABLE BWAE
+BD48 ; LV # Lo HANGUL SYLLABLE BOE
+BD64 ; LV # Lo HANGUL SYLLABLE BYO
+BD80 ; LV # Lo HANGUL SYLLABLE BU
+BD9C ; LV # Lo HANGUL SYLLABLE BWEO
+BDB8 ; LV # Lo HANGUL SYLLABLE BWE
+BDD4 ; LV # Lo HANGUL SYLLABLE BWI
+BDF0 ; LV # Lo HANGUL SYLLABLE BYU
+BE0C ; LV # Lo HANGUL SYLLABLE BEU
+BE28 ; LV # Lo HANGUL SYLLABLE BYI
+BE44 ; LV # Lo HANGUL SYLLABLE BI
+BE60 ; LV # Lo HANGUL SYLLABLE BBA
+BE7C ; LV # Lo HANGUL SYLLABLE BBAE
+BE98 ; LV # Lo HANGUL SYLLABLE BBYA
+BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE
+BED0 ; LV # Lo HANGUL SYLLABLE BBEO
+BEEC ; LV # Lo HANGUL SYLLABLE BBE
+BF08 ; LV # Lo HANGUL SYLLABLE BBYEO
+BF24 ; LV # Lo HANGUL SYLLABLE BBYE
+BF40 ; LV # Lo HANGUL SYLLABLE BBO
+BF5C ; LV # Lo HANGUL SYLLABLE BBWA
+BF78 ; LV # Lo HANGUL SYLLABLE BBWAE
+BF94 ; LV # Lo HANGUL SYLLABLE BBOE
+BFB0 ; LV # Lo HANGUL SYLLABLE BBYO
+BFCC ; LV # Lo HANGUL SYLLABLE BBU
+BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO
+C004 ; LV # Lo HANGUL SYLLABLE BBWE
+C020 ; LV # Lo HANGUL SYLLABLE BBWI
+C03C ; LV # Lo HANGUL SYLLABLE BBYU
+C058 ; LV # Lo HANGUL SYLLABLE BBEU
+C074 ; LV # Lo HANGUL SYLLABLE BBYI
+C090 ; LV # Lo HANGUL SYLLABLE BBI
+C0AC ; LV # Lo HANGUL SYLLABLE SA
+C0C8 ; LV # Lo HANGUL SYLLABLE SAE
+C0E4 ; LV # Lo HANGUL SYLLABLE SYA
+C100 ; LV # Lo HANGUL SYLLABLE SYAE
+C11C ; LV # Lo HANGUL SYLLABLE SEO
+C138 ; LV # Lo HANGUL SYLLABLE SE
+C154 ; LV # Lo HANGUL SYLLABLE SYEO
+C170 ; LV # Lo HANGUL SYLLABLE SYE
+C18C ; LV # Lo HANGUL SYLLABLE SO
+C1A8 ; LV # Lo HANGUL SYLLABLE SWA
+C1C4 ; LV # Lo HANGUL SYLLABLE SWAE
+C1E0 ; LV # Lo HANGUL SYLLABLE SOE
+C1FC ; LV # Lo HANGUL SYLLABLE SYO
+C218 ; LV # Lo HANGUL SYLLABLE SU
+C234 ; LV # Lo HANGUL SYLLABLE SWEO
+C250 ; LV # Lo HANGUL SYLLABLE SWE
+C26C ; LV # Lo HANGUL SYLLABLE SWI
+C288 ; LV # Lo HANGUL SYLLABLE SYU
+C2A4 ; LV # Lo HANGUL SYLLABLE SEU
+C2C0 ; LV # Lo HANGUL SYLLABLE SYI
+C2DC ; LV # Lo HANGUL SYLLABLE SI
+C2F8 ; LV # Lo HANGUL SYLLABLE SSA
+C314 ; LV # Lo HANGUL SYLLABLE SSAE
+C330 ; LV # Lo HANGUL SYLLABLE SSYA
+C34C ; LV # Lo HANGUL SYLLABLE SSYAE
+C368 ; LV # Lo HANGUL SYLLABLE SSEO
+C384 ; LV # Lo HANGUL SYLLABLE SSE
+C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO
+C3BC ; LV # Lo HANGUL SYLLABLE SSYE
+C3D8 ; LV # Lo HANGUL SYLLABLE SSO
+C3F4 ; LV # Lo HANGUL SYLLABLE SSWA
+C410 ; LV # Lo HANGUL SYLLABLE SSWAE
+C42C ; LV # Lo HANGUL SYLLABLE SSOE
+C448 ; LV # Lo HANGUL SYLLABLE SSYO
+C464 ; LV # Lo HANGUL SYLLABLE SSU
+C480 ; LV # Lo HANGUL SYLLABLE SSWEO
+C49C ; LV # Lo HANGUL SYLLABLE SSWE
+C4B8 ; LV # Lo HANGUL SYLLABLE SSWI
+C4D4 ; LV # Lo HANGUL SYLLABLE SSYU
+C4F0 ; LV # Lo HANGUL SYLLABLE SSEU
+C50C ; LV # Lo HANGUL SYLLABLE SSYI
+C528 ; LV # Lo HANGUL SYLLABLE SSI
+C544 ; LV # Lo HANGUL SYLLABLE A
+C560 ; LV # Lo HANGUL SYLLABLE AE
+C57C ; LV # Lo HANGUL SYLLABLE YA
+C598 ; LV # Lo HANGUL SYLLABLE YAE
+C5B4 ; LV # Lo HANGUL SYLLABLE EO
+C5D0 ; LV # Lo HANGUL SYLLABLE E
+C5EC ; LV # Lo HANGUL SYLLABLE YEO
+C608 ; LV # Lo HANGUL SYLLABLE YE
+C624 ; LV # Lo HANGUL SYLLABLE O
+C640 ; LV # Lo HANGUL SYLLABLE WA
+C65C ; LV # Lo HANGUL SYLLABLE WAE
+C678 ; LV # Lo HANGUL SYLLABLE OE
+C694 ; LV # Lo HANGUL SYLLABLE YO
+C6B0 ; LV # Lo HANGUL SYLLABLE U
+C6CC ; LV # Lo HANGUL SYLLABLE WEO
+C6E8 ; LV # Lo HANGUL SYLLABLE WE
+C704 ; LV # Lo HANGUL SYLLABLE WI
+C720 ; LV # Lo HANGUL SYLLABLE YU
+C73C ; LV # Lo HANGUL SYLLABLE EU
+C758 ; LV # Lo HANGUL SYLLABLE YI
+C774 ; LV # Lo HANGUL SYLLABLE I
+C790 ; LV # Lo HANGUL SYLLABLE JA
+C7AC ; LV # Lo HANGUL SYLLABLE JAE
+C7C8 ; LV # Lo HANGUL SYLLABLE JYA
+C7E4 ; LV # Lo HANGUL SYLLABLE JYAE
+C800 ; LV # Lo HANGUL SYLLABLE JEO
+C81C ; LV # Lo HANGUL SYLLABLE JE
+C838 ; LV # Lo HANGUL SYLLABLE JYEO
+C854 ; LV # Lo HANGUL SYLLABLE JYE
+C870 ; LV # Lo HANGUL SYLLABLE JO
+C88C ; LV # Lo HANGUL SYLLABLE JWA
+C8A8 ; LV # Lo HANGUL SYLLABLE JWAE
+C8C4 ; LV # Lo HANGUL SYLLABLE JOE
+C8E0 ; LV # Lo HANGUL SYLLABLE JYO
+C8FC ; LV # Lo HANGUL SYLLABLE JU
+C918 ; LV # Lo HANGUL SYLLABLE JWEO
+C934 ; LV # Lo HANGUL SYLLABLE JWE
+C950 ; LV # Lo HANGUL SYLLABLE JWI
+C96C ; LV # Lo HANGUL SYLLABLE JYU
+C988 ; LV # Lo HANGUL SYLLABLE JEU
+C9A4 ; LV # Lo HANGUL SYLLABLE JYI
+C9C0 ; LV # Lo HANGUL SYLLABLE JI
+C9DC ; LV # Lo HANGUL SYLLABLE JJA
+C9F8 ; LV # Lo HANGUL SYLLABLE JJAE
+CA14 ; LV # Lo HANGUL SYLLABLE JJYA
+CA30 ; LV # Lo HANGUL SYLLABLE JJYAE
+CA4C ; LV # Lo HANGUL SYLLABLE JJEO
+CA68 ; LV # Lo HANGUL SYLLABLE JJE
+CA84 ; LV # Lo HANGUL SYLLABLE JJYEO
+CAA0 ; LV # Lo HANGUL SYLLABLE JJYE
+CABC ; LV # Lo HANGUL SYLLABLE JJO
+CAD8 ; LV # Lo HANGUL SYLLABLE JJWA
+CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE
+CB10 ; LV # Lo HANGUL SYLLABLE JJOE
+CB2C ; LV # Lo HANGUL SYLLABLE JJYO
+CB48 ; LV # Lo HANGUL SYLLABLE JJU
+CB64 ; LV # Lo HANGUL SYLLABLE JJWEO
+CB80 ; LV # Lo HANGUL SYLLABLE JJWE
+CB9C ; LV # Lo HANGUL SYLLABLE JJWI
+CBB8 ; LV # Lo HANGUL SYLLABLE JJYU
+CBD4 ; LV # Lo HANGUL SYLLABLE JJEU
+CBF0 ; LV # Lo HANGUL SYLLABLE JJYI
+CC0C ; LV # Lo HANGUL SYLLABLE JJI
+CC28 ; LV # Lo HANGUL SYLLABLE CA
+CC44 ; LV # Lo HANGUL SYLLABLE CAE
+CC60 ; LV # Lo HANGUL SYLLABLE CYA
+CC7C ; LV # Lo HANGUL SYLLABLE CYAE
+CC98 ; LV # Lo HANGUL SYLLABLE CEO
+CCB4 ; LV # Lo HANGUL SYLLABLE CE
+CCD0 ; LV # Lo HANGUL SYLLABLE CYEO
+CCEC ; LV # Lo HANGUL SYLLABLE CYE
+CD08 ; LV # Lo HANGUL SYLLABLE CO
+CD24 ; LV # Lo HANGUL SYLLABLE CWA
+CD40 ; LV # Lo HANGUL SYLLABLE CWAE
+CD5C ; LV # Lo HANGUL SYLLABLE COE
+CD78 ; LV # Lo HANGUL SYLLABLE CYO
+CD94 ; LV # Lo HANGUL SYLLABLE CU
+CDB0 ; LV # Lo HANGUL SYLLABLE CWEO
+CDCC ; LV # Lo HANGUL SYLLABLE CWE
+CDE8 ; LV # Lo HANGUL SYLLABLE CWI
+CE04 ; LV # Lo HANGUL SYLLABLE CYU
+CE20 ; LV # Lo HANGUL SYLLABLE CEU
+CE3C ; LV # Lo HANGUL SYLLABLE CYI
+CE58 ; LV # Lo HANGUL SYLLABLE CI
+CE74 ; LV # Lo HANGUL SYLLABLE KA
+CE90 ; LV # Lo HANGUL SYLLABLE KAE
+CEAC ; LV # Lo HANGUL SYLLABLE KYA
+CEC8 ; LV # Lo HANGUL SYLLABLE KYAE
+CEE4 ; LV # Lo HANGUL SYLLABLE KEO
+CF00 ; LV # Lo HANGUL SYLLABLE KE
+CF1C ; LV # Lo HANGUL SYLLABLE KYEO
+CF38 ; LV # Lo HANGUL SYLLABLE KYE
+CF54 ; LV # Lo HANGUL SYLLABLE KO
+CF70 ; LV # Lo HANGUL SYLLABLE KWA
+CF8C ; LV # Lo HANGUL SYLLABLE KWAE
+CFA8 ; LV # Lo HANGUL SYLLABLE KOE
+CFC4 ; LV # Lo HANGUL SYLLABLE KYO
+CFE0 ; LV # Lo HANGUL SYLLABLE KU
+CFFC ; LV # Lo HANGUL SYLLABLE KWEO
+D018 ; LV # Lo HANGUL SYLLABLE KWE
+D034 ; LV # Lo HANGUL SYLLABLE KWI
+D050 ; LV # Lo HANGUL SYLLABLE KYU
+D06C ; LV # Lo HANGUL SYLLABLE KEU
+D088 ; LV # Lo HANGUL SYLLABLE KYI
+D0A4 ; LV # Lo HANGUL SYLLABLE KI
+D0C0 ; LV # Lo HANGUL SYLLABLE TA
+D0DC ; LV # Lo HANGUL SYLLABLE TAE
+D0F8 ; LV # Lo HANGUL SYLLABLE TYA
+D114 ; LV # Lo HANGUL SYLLABLE TYAE
+D130 ; LV # Lo HANGUL SYLLABLE TEO
+D14C ; LV # Lo HANGUL SYLLABLE TE
+D168 ; LV # Lo HANGUL SYLLABLE TYEO
+D184 ; LV # Lo HANGUL SYLLABLE TYE
+D1A0 ; LV # Lo HANGUL SYLLABLE TO
+D1BC ; LV # Lo HANGUL SYLLABLE TWA
+D1D8 ; LV # Lo HANGUL SYLLABLE TWAE
+D1F4 ; LV # Lo HANGUL SYLLABLE TOE
+D210 ; LV # Lo HANGUL SYLLABLE TYO
+D22C ; LV # Lo HANGUL SYLLABLE TU
+D248 ; LV # Lo HANGUL SYLLABLE TWEO
+D264 ; LV # Lo HANGUL SYLLABLE TWE
+D280 ; LV # Lo HANGUL SYLLABLE TWI
+D29C ; LV # Lo HANGUL SYLLABLE TYU
+D2B8 ; LV # Lo HANGUL SYLLABLE TEU
+D2D4 ; LV # Lo HANGUL SYLLABLE TYI
+D2F0 ; LV # Lo HANGUL SYLLABLE TI
+D30C ; LV # Lo HANGUL SYLLABLE PA
+D328 ; LV # Lo HANGUL SYLLABLE PAE
+D344 ; LV # Lo HANGUL SYLLABLE PYA
+D360 ; LV # Lo HANGUL SYLLABLE PYAE
+D37C ; LV # Lo HANGUL SYLLABLE PEO
+D398 ; LV # Lo HANGUL SYLLABLE PE
+D3B4 ; LV # Lo HANGUL SYLLABLE PYEO
+D3D0 ; LV # Lo HANGUL SYLLABLE PYE
+D3EC ; LV # Lo HANGUL SYLLABLE PO
+D408 ; LV # Lo HANGUL SYLLABLE PWA
+D424 ; LV # Lo HANGUL SYLLABLE PWAE
+D440 ; LV # Lo HANGUL SYLLABLE POE
+D45C ; LV # Lo HANGUL SYLLABLE PYO
+D478 ; LV # Lo HANGUL SYLLABLE PU
+D494 ; LV # Lo HANGUL SYLLABLE PWEO
+D4B0 ; LV # Lo HANGUL SYLLABLE PWE
+D4CC ; LV # Lo HANGUL SYLLABLE PWI
+D4E8 ; LV # Lo HANGUL SYLLABLE PYU
+D504 ; LV # Lo HANGUL SYLLABLE PEU
+D520 ; LV # Lo HANGUL SYLLABLE PYI
+D53C ; LV # Lo HANGUL SYLLABLE PI
+D558 ; LV # Lo HANGUL SYLLABLE HA
+D574 ; LV # Lo HANGUL SYLLABLE HAE
+D590 ; LV # Lo HANGUL SYLLABLE HYA
+D5AC ; LV # Lo HANGUL SYLLABLE HYAE
+D5C8 ; LV # Lo HANGUL SYLLABLE HEO
+D5E4 ; LV # Lo HANGUL SYLLABLE HE
+D600 ; LV # Lo HANGUL SYLLABLE HYEO
+D61C ; LV # Lo HANGUL SYLLABLE HYE
+D638 ; LV # Lo HANGUL SYLLABLE HO
+D654 ; LV # Lo HANGUL SYLLABLE HWA
+D670 ; LV # Lo HANGUL SYLLABLE HWAE
+D68C ; LV # Lo HANGUL SYLLABLE HOE
+D6A8 ; LV # Lo HANGUL SYLLABLE HYO
+D6C4 ; LV # Lo HANGUL SYLLABLE HU
+D6E0 ; LV # Lo HANGUL SYLLABLE HWEO
+D6FC ; LV # Lo HANGUL SYLLABLE HWE
+D718 ; LV # Lo HANGUL SYLLABLE HWI
+D734 ; LV # Lo HANGUL SYLLABLE HYU
+D750 ; LV # Lo HANGUL SYLLABLE HEU
+D76C ; LV # Lo HANGUL SYLLABLE HYI
+D788 ; LV # Lo HANGUL SYLLABLE HI
+
+# Total code points: 399
+
+# ================================================
+
+# Hangul_Syllable_Type=LVT_Syllable
+
+AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
+AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
+AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
+AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
+AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
+AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
+ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
+ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
+ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
+ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
+AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
+AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
+AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
+AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
+AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
+ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
+ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
+ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
+ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
+AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
+AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
+AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
+AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
+AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
+AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
+AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
+AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
+AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
+AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
+AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
+AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
+AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
+AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
+AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
+AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
+AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
+AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
+B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
+B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
+B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
+B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
+B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
+B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
+B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
+B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
+B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
+B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
+B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
+B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
+B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
+B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
+B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
+B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
+B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
+B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
+B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
+B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
+B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
+B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
+B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
+B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
+B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
+B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
+B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
+B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
+B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
+B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
+B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
+B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
+B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
+B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
+B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
+B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
+B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
+B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
+B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
+B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
+B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
+B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
+B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
+B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
+B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
+B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
+B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
+B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
+B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
+B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
+B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
+B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
+B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
+B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
+B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
+B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
+B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
+B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
+B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
+B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
+B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
+B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
+B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
+B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
+B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
+B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
+B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
+B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
+B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
+B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
+B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
+B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
+B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
+B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
+B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
+B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
+B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
+B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
+B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
+B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
+B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
+B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
+B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
+B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
+B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
+B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
+B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
+B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
+B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
+B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
+B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
+BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
+BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
+BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
+BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
+BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
+BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
+BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
+BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
+BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
+BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
+BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
+BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
+BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
+BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
+BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
+BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
+BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
+BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
+BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
+BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
+BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
+BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
+BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
+BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
+BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
+BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
+BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
+BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
+BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
+BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
+BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
+BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
+BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
+BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
+BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
+BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
+BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
+BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
+BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
+BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
+BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
+BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
+BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
+BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
+BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
+BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
+BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
+BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
+BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
+BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
+BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
+BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
+BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
+BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
+BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
+C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
+C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
+C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
+C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
+C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
+C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
+C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
+C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
+C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
+C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
+C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
+C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
+C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
+C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
+C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
+C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
+C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
+C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
+C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
+C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
+C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
+C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
+C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
+C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
+C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
+C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
+C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
+C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
+C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
+C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
+C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
+C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
+C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
+C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
+C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
+C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
+C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
+C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
+C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
+C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
+C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
+C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
+C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
+C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
+C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
+C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
+C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
+C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
+C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
+C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
+C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
+C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
+C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
+C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
+C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
+C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
+C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
+C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
+C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
+C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
+C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
+C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
+C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
+C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
+C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
+C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
+C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
+C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
+C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
+C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
+C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
+C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
+C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
+C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
+C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
+C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
+C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
+C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
+C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
+C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
+C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
+C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
+C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
+C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
+C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
+C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
+C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
+C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
+C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
+C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
+C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
+C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
+CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
+CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
+CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
+CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
+CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
+CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
+CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
+CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
+CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
+CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
+CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
+CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
+CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
+CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
+CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
+CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
+CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
+CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
+CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
+CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
+CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
+CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
+CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
+CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
+CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
+CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
+CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
+CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
+CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
+CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
+CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
+CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
+CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
+CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
+CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
+CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
+CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
+CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
+CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
+CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
+CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
+CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
+CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
+CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
+CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
+CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
+CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
+CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
+CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
+CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
+CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
+CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
+CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
+CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
+CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
+D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
+D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
+D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
+D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
+D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
+D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
+D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
+D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
+D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
+D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
+D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
+D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
+D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
+D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
+D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
+D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
+D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
+D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
+D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
+D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
+D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
+D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
+D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
+D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
+D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
+D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
+D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
+D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
+D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
+D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
+D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
+D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
+D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
+D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
+D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
+D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
+D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
+D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
+D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
+D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
+D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
+D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
+D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
+D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
+D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
+D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
+D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
+D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
+D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
+D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
+D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
+D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
+D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
+D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
+D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
+D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
+D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
+D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
+D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
+D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
+D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
+D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
+D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
+D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
+D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
+D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
+D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
+D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
+D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
+
+# Total code points: 10773
diff --git a/Master/tlpkg/tlperl/lib/unicore/Index.txt b/Master/tlpkg/tlperl/lib/unicore/Index.txt
new file mode 100644
index 00000000000..c55a1f8bca4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Index.txt
@@ -0,0 +1,4307 @@
+8859-1 (Latin-1), Based on ISO 00A0
+8859-2, -3, -4, -9 (European Latin), Based on ISO 0100
+8859-5 (Cyrillic), Based on ISO 0400
+8859-6 (Arabic), Based on ISO 0600
+8859-7 (Greek), Based on ISO 0370
+8859-8 (Hebrew), Based on ISO 05D0
+A, COMBINING LATIN SMALL LETTER 0363
+a, latin small letter script 0251
+A, LATIN SMALL LETTER TURNED 0250
+ABBREVIATION MARK, ARMENIAN 055F
+ABBREVIATION MARK, SYRIAC 070F
+ABBREVIATION SIGN, DEVANAGARI 0970
+Abbreviations, Squared Latin 3371
+Aboriginal Syllabics, Unified Canadian 1400
+above, cedilla 0312
+ABOVE, COMBINING ALMOST EQUAL TO 034C
+ABOVE, COMBINING BRIDGE 0346
+ABOVE, COMBINING CLOCKWISE ARROW 20D5
+ABOVE, COMBINING COMMA 0313
+ABOVE, COMBINING DOT 0307
+ABOVE, COMBINING DOUBLE VERTICAL LINE 030E
+ABOVE, COMBINING FOUR DOTS 20DC
+ABOVE, COMBINING HOMOTHETIC 034B
+ABOVE, COMBINING HOOK 0309
+ABOVE, COMBINING LEFT ANGLE 031A
+ABOVE, COMBINING LEFT ARROW 20D6
+ABOVE, COMBINING LEFT HARPOON 20D0
+ABOVE, COMBINING LEFT RIGHT ARROW 20E1
+ABOVE, COMBINING NOT TILDE 034A
+ABOVE, COMBINING REVERSED COMMA 0314
+ABOVE, COMBINING RING 030A
+ABOVE, COMBINING THREE DOTS 20DB
+ABOVE, COMBINING TURNED COMMA 0312
+ABOVE, COMBINING VERTICAL LINE 030D
+ABOVE, COMBINING WIDE BRIDGE 20E9
+ABOVE, COMBINING X 033D
+ABOVE, DOT 02D9
+above, double dot 0308
+ABOVE, RING 02DA
+above, vee 030C
+ABOVE RIGHT, COMBINING COMMA 0315
+absolute continuity 2AA1
+ACCENT, ACUTE 00B4
+ACCENT, ALMOST EQUAL TO WITH CIRCUMFLEX 2A6F
+ACCENT, CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX 2A36
+ACCENT, CIRCUMFLEX 005E
+ACCENT, COMBINING ACUTE 0301
+ACCENT, COMBINING CIRCUMFLEX 0302
+ACCENT, COMBINING DOUBLE ACUTE 030B
+ACCENT, COMBINING DOUBLE GRAVE 030F
+ACCENT, COMBINING GRAVE 0300
+ACCENT, DOUBLE ACUTE 02DD
+ACCENT, GRAVE 0060
+ACCENT, MODIFIER LETTER ACUTE 02CA
+ACCENT, MODIFIER LETTER CIRCUMFLEX 02C6
+ACCENT, MODIFIER LETTER CROSS 02DF
+ACCENT, MODIFIER LETTER GRAVE 02CB
+ACCENT, MODIFIER LETTER LOW ACUTE 02CF
+ACCENT, MODIFIER LETTER LOW GRAVE 02CE
+accent, swedish grave 02DF
+ACCENT ABOVE, PLUS SIGN WITH CIRCUMFLEX 2A23
+ACCENT BELOW, COMBINING ACUTE 0317
+ACCENT BELOW, COMBINING CIRCUMFLEX 032D
+ACCENT BELOW, COMBINING GRAVE 0316
+ACCOUNT OF 2100
+acknowledge 0006
+acknowledge, graphic for negative 237B
+acknowledge, negative 0015
+ACKNOWLEDGE, SYMBOL FOR 2406
+ACKNOWLEDGE, SYMBOL FOR NEGATIVE 2415
+ACTIVATE ARABIC FORM SHAPING 206D
+ACTIVATE SYMMETRIC SWAPPING 206B
+actuarial bend 20E7
+acute, spacing 00B4
+ACUTE ACCENT 00B4
+ACUTE ACCENT, COMBINING 0301
+ACUTE ACCENT, COMBINING DOUBLE 030B
+ACUTE ACCENT, DEVANAGARI 0954
+ACUTE ACCENT, DOUBLE 02DD
+ACUTE ACCENT, MODIFIER LETTER 02CA
+ACUTE ACCENT, MODIFIER LETTER LOW 02CF
+ACUTE ACCENT BELOW, COMBINING 0317
+ACUTE ANGLE 299F
+ACUTE TONE MARK, COMBINING 0341
+ADDRESSED TO THE SUBJECT 2101
+Addu dialect, consonant for 0780
+AE, LATIN SMALL LETTER 00E6
+Aegean Numbers 10100
+AEGEAN CHECK MARK 10102
+AEGEAN WORD SEPARATOR DOT 10101
+AEGEAN WORD SEPARATOR LINE 10100
+Ainu, Phonetic Extensions For 31F0
+AIRPLANE 2708
+aldus leaf 2766
+ALEF SYMBOL 2135
+ALL, FOR 2200
+ALL AROUND-PROFILE 232E
+ALL EQUAL TO 224C
+ALMOST EQUAL TO 2248
+ALMOST EQUAL TO, PRECEDES ABOVE 2AB7
+ALMOST EQUAL TO, PRECEDES ABOVE NOT 2AB9
+ALMOST EQUAL TO, SUBSET OF ABOVE 2AC9
+ALMOST EQUAL TO, SUCCEEDS ABOVE 2AB8
+ALMOST EQUAL TO, SUCCEEDS ABOVE NOT 2ABA
+ALMOST EQUAL TO, SUPERSET OF ABOVE 2ACA
+ALMOST EQUAL TO ABOVE, COMBINING 034C
+ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT 2A6F
+ALPHA, LATIN SMALL LETTER 0251
+ALPHA, LATIN SMALL LETTER TURNED 0252
+Alphabetic Presentation Forms FB00
+Alphanumerics, Enclosed 2460
+alternating current 223F
+ALTERNATION MARK, PART 303D
+ALTERNATIVE KEY SYMBOL 2387
+ALVEOLAR CLICK, LATIN LETTER 01C2
+always (modal operator) 25FB
+always (modal operator), was 27E4
+always be (modal operator), will 27E5
+AMALGAMATION OR COPRODUCT 2A3F
+AMPERSAND 0026
+AMPERSAND, TURNED 214B
+AND, CURLY LOGICAL 22CF
+AND, LOGICAL 2227
+AND, N-ARY LOGICAL 22C0
+andrew's, cross st. 2613
+Ands and Ors, Logical 2A51
+ANGLE 2220
+ANGLE, ACUTE 299F
+ANGLE, MEASURED 2221
+ANGLE, RIGHT 221F
+ANGLE, SPHERICAL 2222
+ANGLE, TURNED 29A2
+ANGLE ABOVE, COMBINING LEFT 031A
+angle arc 2222
+ANGLE BELOW, COMBINING LEFT 0349
+ANGLE BRACKET, LEFT 3008
+ANGLE BRACKET, LEFT DOUBLE 300A
+ANGLE BRACKET, LEFT-POINTING 2329
+ANGLE BRACKET, MATHEMATICAL LEFT 27E8
+ANGLE BRACKET, MATHEMATICAL LEFT DOUBLE 27EA
+ANGLE BRACKET, RIGHT-POINTING 232A
+ANGLE OPENING LEFT, SPHERICAL 29A0
+ANGLE OPENING UP, SPHERICAL 29A1
+ANGLE QUOTATION MARK, LEFT-POINTING DOUBLE 00AB
+ANGLE QUOTATION MARK, RIGHT-POINTING DOUBLE 00BB
+ANGLE QUOTATION MARK, SINGLE LEFT-POINTING 2039
+ANGLE QUOTATION MARK, SINGLE RIGHT-POINTING 203A
+Angle Quotation Marks, Ornamental 276E
+ANGLE WITH ARC, RIGHT 22BE
+ANGLE WITH DOWNWARDS ZIGZAG ARROW, RIGHT 237C
+angled dash 00AC
+Angles and Measured Angles 299B
+ANGSTROM SIGN 212B
+ANKH 2625
+Annotation, Interlinear FFF9
+Annotation, Kanbun Ideographic 3190
+Annotation Signs, Koranic 06D6
+ANNUITY SYMBOL, COMBINING 20E7
+ano teleia 00B7
+ANTICLOCKWISE INTEGRATION 2A11
+ANTICLOCKWISE-ROTATED DIVISION SIGN, CIRCLED 29BC
+ANTIRESTRICTION, Z NOTATION DOMAIN 2A64
+ANTIRESTRICTION, Z NOTATION RANGE 2A65
+APL 2336
+APL Functional Symbols 2336
+apl jot 2218
+apl overbar 00AF
+apl quote 0022
+apl stile 2223
+apl tilde 223C
+apl upstile 2308
+APOSTROPHE 0027
+apostrophe 02BC
+apostrophe 2019
+APOSTROPHE, ARMENIAN 055A
+APOSTROPHE, MODIFIER LETTER 02BC
+APOSTROPHE, MODIFIER LETTER DOUBLE 02EE
+apostrophe-quote 0027
+APPLICATION, FUNCTION 2061
+application program command 009F
+APPROACHES THE LIMIT 2250
+APPROXIMATE, GREATER-THAN AND NOT 2A8A
+APPROXIMATE, GREATER-THAN OR 2A86
+APPROXIMATE, LESS-THAN AND NOT 2A89
+APPROXIMATE, LESS-THAN OR 2A85
+APPROXIMATELY EQUAL OR EQUAL TO 2A70
+APPROXIMATELY EQUAL TO 2245
+approximately equal to 2257
+AQUARIUS 2652
+Arabic 0600
+Arabic, Extended 0671
+ARABIC COMMA 060C
+ARABIC DECIMAL SEPARATOR 066B
+ARABIC END OF AYAH 06DD
+ARABIC FIVE POINTED STAR 066D
+ARABIC FOOTNOTE MARKER 0602
+ARABIC FORM SHAPING, ACTIVATE 206D
+ARABIC FORM SHAPING, INHIBIT 206C
+ARABIC FULL STOP 06D4
+Arabic Honorifics 0610
+ARABIC LETTER DOTLESS BEH 066E
+ARABIC LETTER DOTLESS QAF 066F
+Arabic Letters 0627
+ARABIC NUMBER SIGN 0600
+ARABIC PERCENT SIGN 066A
+Arabic Points 064B
+Arabic Presentation Forms-A FB50
+Arabic Presentation Forms-B FE70
+ARABIC QUESTION MARK 061F
+ARABIC SEMICOLON 061B
+ARABIC SIGN SAFHA 0603
+ARABIC SIGN SANAH 0601
+Arabic Poetic Marks 0610
+Arabic Subtending Marks 0600
+ARABIC TAIL FRAGMENT FE73
+ARABIC THOUSANDS SEPARATOR 066C
+Arabic-Indic Digits 0660
+Arabic-Indic Digits for Persian and Urdu, Eastern 06F0
+ARC 2312
+arc, angle 2222
+ARC, RIGHT ANGLE WITH 22BE
+ARCH BELOW, COMBINING INVERTED DOUBLE 032B
+Arcs 25DC
+area, end of guarded 0097
+area, end of selected 0087
+area, start of guarded 0096
+area, start of selected 0086
+ARIES 2648
+Armenian 0530
+ARMENIAN ABBREVIATION MARK 055F
+ARMENIAN APOSTROPHE 055A
+Armenian Capital Letters 0531
+ARMENIAN COMMA 055D
+ARMENIAN EMPHASIS MARK 055B
+ARMENIAN EXCLAMATION MARK 055C
+ARMENIAN FULL STOP 0589
+ARMENIAN HYPHEN 058A
+Armenian Ligatures FB13
+ARMENIAN QUESTION MARK 055E
+Armenian Small Letters 0561
+ARROW, BLACK CIRCLE WITH DOWN 29ED
+ARROW, BLACK DIAMOND WITH DOWN 29EA
+arrow, colon right 29F4
+ARROW, ELECTRIC 2301
+ARROW, RIGHT ANGLE WITH DOWNWARDS ZIGZAG 237C
+ARROW, WHITE CIRCLE WITH DOWN 29EC
+ARROW ABOVE, COMBINING CLOCKWISE 20D5
+ARROW ABOVE, COMBINING LEFT 20D6
+ARROW ABOVE, COMBINING LEFT RIGHT 20E1
+ARROW BELOW, COMBINING DOUBLE RIGHTWARDS 0362
+ARROW BELOW, COMBINING LEFT RIGHT 034D
+ARROW BELOW, COMBINING UPWARDS 034E
+Arrow Dingbats 2794
+ARROW OVERLAY, COMBINING LEFTWARDS 20EA
+ARROW THROUGH CIRCLE, UP 29BD
+ARROW WITH HOOK, INTEGRAL WITH LEFTWARDS 2A17
+ARROWHEAD, UP 2303
+Arrowheads, Modifier Letter 02C2
+Arrows 2190
+Arrows, Long 27F5
+Arrows, Other White and Black 2B00
+arrows extension 23AF
+Arrows-A, Supplemental 27F0
+Arrows-B, Supplemental 2900
+ASCENDING NODE 260A
+ASCII 0020
+ASCII C0 Control Codes 0000
+ASCII Digits 0030
+ASCII Variants, Fullwidth FF01
+ash 00E6
+ASSERTION 22A6
+ASTERISK 002A
+ASTERISK, EQUALS WITH 2A6E
+ASTERISK, LOW 204E
+ASTERISK, SQUARED 29C6
+Asterisk Dingbats 2722
+ASTERISK OPERATOR 2217
+ASTERISK OPERATOR, CIRCLED 229B
+ASTERISKS ALIGNED VERTICALLY, TWO 2051
+Asterisks and Snowflakes, Stars, 2721
+ASTERISM 2042
+Astrological Symbols 263D
+asymptotic to 2248
+ASYMPTOTICALLY EQUAL TO 2243
+AT, COMMERCIAL 0040
+AVERAGE WITH SLASH, INTEGRAL 2A0F
+AYAH, ARABIC END OF 06DD
+B, LATIN LETTER SMALL CAPITAL 0299
+B, SCRIPT CAPITAL 212C
+baby gamma, latin small letter 0264
+backslash 005C
+BACKSLASH, COMBINING ENCLOSING CIRCLE 20E0
+backspace 0008
+BACKSPACE, SYMBOL FOR 2408
+backward difference 2207
+bag bracket, z notation left 27E6
+BAG MEMBERSHIP, Z NOTATION 22FF
+bag subtraction, z notation 2A41
+BAHT, THAI CURRENCY SYMBOL 0E3F
+BALLOT BOX 2610
+BALLOT BOX WITH CHECK 2611
+BALLOT BOX WITH X 2612
+BALLOT X 2717
+BALLOT X, HEAVY 2718
+bang 0021
+bar, broken vertical 00A6
+BAR, CIRCLED VERTICAL 29B6
+BAR, HORIZONTAL 2015
+BAR, N-ARY WHITE VERTICAL 2AFF
+bar, vertical 007C
+BAR, WHITE VERTICAL 2AFE
+BAR BINARY RELATION, TRIPLE VERTICAL 2AF4
+BAR DELIMITER, TRIPLE VERTICAL 2980
+Bar Dingbats, Vertical 2758
+BAR OPERATOR, LARGE TRIPLE VERTICAL 2AFC
+Bar Symbols, Error 29EE
+BAR WITH DOUBLE VERTICAL STROKE, TRIPLE HORIZONTAL 2A68
+BAR WITH HORIZONTAL STROKE, TRIPLE VERTICAL 2AF5
+BAR WITH TRIPLE VERTICAL STROKE, TRIPLE HORIZONTAL 2A69
+barred o, latin capital letter 019F
+BARRED O, LATIN SMALL LETTER 0275
+Basic Latin, C0 Controls and 0000
+Basic Russian Alphabet 0410
+BEAMED EIGHTH NOTES 266B
+BEAMED SIXTEENTH NOTES 266C
+BECAUSE 2235
+beginning of line 2310
+bell 0007
+BELL, SYMBOL FOR 2407
+BELL SYMBOL 237E
+BELOW, COMBINING ACUTE ACCENT 0317
+BELOW, COMBINING BREVE 032E
+BELOW, COMBINING BRIDGE 032A
+BELOW, COMBINING CARON 032C
+BELOW, COMBINING CIRCUMFLEX ACCENT 032D
+BELOW, COMBINING COMMA 0326
+BELOW, COMBINING DIAERESIS 0324
+BELOW, COMBINING DOT 0323
+BELOW, COMBINING DOUBLE RIGHTWARDS ARROW 0362
+BELOW, COMBINING DOUBLE VERTICAL LINE 0348
+BELOW, COMBINING EQUALS SIGN 0347
+BELOW, COMBINING GRAVE ACCENT 0316
+BELOW, COMBINING INVERTED BREVE 032F
+BELOW, COMBINING INVERTED BRIDGE 033A
+BELOW, COMBINING INVERTED DOUBLE ARCH 032B
+BELOW, COMBINING LEFT ANGLE 0349
+BELOW, COMBINING LEFT HALF RING 031C
+BELOW, COMBINING LEFT RIGHT ARROW 034D
+BELOW, COMBINING LEFT TACK 0318
+BELOW, COMBINING MACRON 0331
+BELOW, COMBINING MINUS SIGN 0320
+BELOW, COMBINING PALATALIZED HOOK 0321
+BELOW, COMBINING PLUS SIGN 031F
+BELOW, COMBINING RETROFLEX HOOK 0322
+BELOW, COMBINING RIGHT HALF RING 0339
+BELOW, COMBINING RING 0325
+BELOW, COMBINING SEAGULL 033C
+BELOW, COMBINING SQUARE 033B
+BELOW, COMBINING TILDE 0330
+BELOW, COMBINING UP TACK 031D
+BELOW, COMBINING UPWARDS ARROW 034E
+BELOW, COMBINING VERTICAL LINE 0329
+below, greek non-spacing iota 0345
+bend, actuarial 20E7
+Bengali 0980
+Bengali Currency Signs 09F2
+Bengali Digits 09E6
+Bengali Letters 0985
+BENGALI RUPEE MARK 09F2
+BENGALI RUPEE SIGN 09F3
+BENZENE RING 232C
+bernoulli function 212C
+BET SYMBOL 2136
+Betty BOOP 263A
+BETWEEN 226C
+BEVERAGE, HOT 2615
+BIDENTAL PERCUSSIVE, LATIN LETTER 02AD
+Bidirectional Formatting Controls 202A
+Big 5, Duplicates from FA0C
+BIG REVERSE SOLIDUS 29F9
+BIG SOLIDUS 29F8
+bijection, z notation 2917
+bijective mapping 2916
+BILABIAL CLICK, LATIN LETTER 0298
+BILABIAL PERCUSSIVE, LATIN LETTER 02AC
+BINARY RELATION, TRIPLE SOLIDUS 2AFB
+BINARY RELATION, TRIPLE VERTICAL BAR 2AF4
+BIOHAZARD SIGN 2623
+BLACK, BOWTIE WITH LEFT HALF 29D1
+BLACK, BOWTIE WITH RIGHT HALF 29D2
+BLACK, DOWN-POINTING TRIANGLE WITH LEFT HALF 29E8
+BLACK, DOWN-POINTING TRIANGLE WITH RIGHT HALF 29E9
+BLACK, TIMES WITH LEFT HALF 29D4
+BLACK, TIMES WITH RIGHT HALF 29D5
+BLACK BOWTIE 29D3
+BLACK CIRCLE WITH DOWN ARROW 29ED
+BLACK CIRCLE WITH TWO WHITE DOTS 2689
+BLACK CIRCLE WITH WHITE DOT RIGHT 2688
+Black Circled Numbers, White On 24EB
+BLACK DIAMOND WITH DOWN ARROW 29EA
+BLACK FLAG 2691
+BLACK HOURGLASS 29D7
+BLACK LEFT POINTING INDEX 261A
+BLACK LEFTWARDS BULLET 204C
+BLACK LENTICULAR BRACKET, LEFT 3010
+BLACK LOZENGE 29EB
+BLACK MEDIUM SMALL SQUARE 25FE
+BLACK MEDIUM SQUARE 25FC
+BLACK NIB 2712
+BLACK PARALLELOGRAM 25B0
+BLACK SCISSORS 2702
+BLACK SHOGI PIECE 2617
+black small circle 2022
+BLACK SMILING FACE 263B
+BLACK STAR 2605
+BLACK SUN WITH RAYS 2600
+BLACK TELEPHONE 260E
+BLACK TRIANGLE, PLUS SIGN WITH 2A28
+BLACK UNIVERSAL RECYCLING SYMBOL 267B
+BLACK-LETTER CAPITAL C 212D
+BLACK-LETTER CAPITAL H 210C
+BLACK-LETTER CAPITAL I 2111
+BLACK-LETTER CAPITAL R 211C
+BLACK-LETTER CAPITAL Z 2128
+BLANK SYMBOL 2422
+block, end of transmission 0017
+BLOCK, SYMBOL FOR END OF TRANSMISSION 2417
+Block Elements 2580
+bom FEFF
+Bopomofo, Chinese 3100
+Bopomofo Extended for Minnan and Hakka, Chinese 31A0
+BOWTIE 22C8
+bowtie, large 2A1D
+Bowtie Symbols 29D1
+BOX, BALLOT 2610
+BOX, OPEN 2423
+BOX, SHOULDERED OPEN 237D
+BOX, X IN A RECTANGLE 2327
+Box Drawing 2500
+BOX LINE, LEFT VERTICAL 23B8
+BOX LINE, RIGHT VERTICAL 23B9
+BOX OPERATOR, SQUARE LEFT OPEN 2ACD
+BOX OPERATOR, SQUARE RIGHT OPEN 2ACE
+BOX WITH CHECK, BALLOT 2611
+BOX WITH X, BALLOT 2612
+bra 27E6
+brace, closing 007D
+brace, opening 007B
+bracket, z notation left bag 27E6
+bracket, closing curly 007D
+bracket, closing square 005D
+BRACKET, LEFT ANGLE 3008
+BRACKET, LEFT BLACK LENTICULAR 3010
+BRACKET, LEFT CORNER 300C
+BRACKET, LEFT CURLY 007B
+BRACKET, LEFT DOUBLE ANGLE 300A
+BRACKET, LEFT SQUARE 005B
+BRACKET, LEFT TORTOISE SHELL 3014
+BRACKET, LEFT WHITE CORNER 300E
+BRACKET, LEFT WHITE LENTICULAR 3016
+BRACKET, LEFT WHITE SQUARE 301A
+BRACKET, LEFT WHITE TORTOISE SHELL 3018
+BRACKET, LEFT-POINTING ANGLE 2329
+bracket, opening curly 007B
+bracket, opening square 005B
+BRACKET, RIGHT CURLY 007D
+BRACKET, RIGHT SQUARE 005D
+Bracket Pieces 239B
+Bracket Pieces 23B0
+BRACKET WITH QUILL, LEFT SQUARE 2045
+Brackets 2983
+Brackets, CJK Angle 3008
+Brackets, Corner 2308
+Brackets, CJK Corner 300C
+Brackets, CJK 3010
+Brackets, CJK 3014
+Brackets, Fullwidth FF5F
+Brackets, Mathematical 27E6
+Brackets, Ornamental 2768
+Brackets, Ornamental 2770
+Brackets, Vertical 23B4
+Braille Patterns 2800
+brazilian currency 20A2
+break here, no 0083
+break permitted here 0082
+breathing, rough 0314
+breathing, smooth 0313
+BREVE 02D8
+BREVE, COMBINING 0306
+BREVE, COMBINING DOUBLE INVERTED 0361
+BREVE, COMBINING INVERTED 0311
+BREVE BELOW, COMBINING 032E
+BREVE BELOW, COMBINING INVERTED 032F
+BRIDGE ABOVE, COMBINING 0346
+BRIDGE ABOVE, COMBINING WIDE 20E9
+BRIDGE BELOW, COMBINING 032A
+BRIDGE BELOW, COMBINING INVERTED 033A
+broken vertical bar 00A6
+Buhid 1740
+BULLET 2022
+BULLET, BLACK LEFTWARDS 204C
+BULLET, HYPHEN 2043
+BULLET, REVERSED ROTATED FLORAL HEART 2619
+bullet, tainome (japanese, a kind of) 25C9
+BULLET, TRIANGULAR 2023
+BULLET, WHITE 25E6
+BULLET OPERATOR 2219
+BULLSEYE 25CE
+bullseye, latin letter 0298
+BUMPY ABOVE, EQUALS SIGN WITH 2AAE
+BY, MEASURED 225E
+by definition, equal to 225C
+BY DEFINITION, EQUAL TO 225D
+byte order mark FEFF
+C, BLACK-LETTER CAPITAL 212D
+C, COMBINING LATIN SMALL LETTER 0368
+C, DOUBLE-STRUCK CAPITAL 2102
+C, LATIN LETTER STRETCHED 0297
+C0 Controls and Basic Latin 0000
+C1 Controls and Latin-1 Supplement 0080
+CADA UNA 2106
+CADUCEUS 2624
+Canadian Aboriginal Syllabics, Unified 1400
+cancel 0018
+CANCEL, SYMBOL FOR 2418
+cancel character 0094
+CANCER 264B
+CANDRABINDU, COMBINING 0310
+Cantillation Marks, Hebrew 0591
+cap 2229
+CAP, SQUARE 2293
+Capital Letters, Armenian 0531
+Capital Letters, Cyrillic 0401
+Capital Letters, Georgian 10A0
+Capital Letters, Greek 0391
+Capital Letters, Latin 0041
+CAPRICORN 2651
+caps lock 21EA
+caps lock 21EC
+Card Suits, Playing 2660
+cardinal (countable), first transfinite 2135
+cardinal (functions of a real variable), third transfinite 2137
+cardinal (the continuum), second transfinite 2136
+CARE OF 2105
+caret 028C
+CARET 2038
+CARET INSERTION POINT 2041
+CARON 02C7
+CARON, COMBINING 030C
+CARON BELOW, COMBINING 032C
+carriage return 000D
+carriage return 21B5
+CARRIAGE RETURN, SYMBOL FOR 240D
+CAUTION SIGN 2621
+CEDILLA 00B8
+CEDILLA, COMBINING 0327
+cedilla, spacing 00B8
+cedilla above 0312
+CEILING, LEFT 2308
+CELSIUS, DEGREE 2103
+CENT SIGN 00A2
+centigrade, degrees 2103
+CENTRE LINE SYMBOL 2104
+CENTRED LEFT HALF RING, MODIFIER LETTER 02D3
+CENTRELINE LOW LINE FE4E
+CENTRELINE OVERLINE FE4A
+cgj 034F
+character introducer, single 009A
+character tabulation set 0088
+character tabulation with justification 0089
+CHARACTER TIE 2040
+Chart Components, Form and 2500
+CHECK, BALLOT BOX WITH 2611
+CHECK MARK 2713
+CHECK MARK, AEGEAN 10102
+CHECK MARK, HEAVY 2714
+CHECK MARK, NOT 237B
+Cherokee 13A0
+Chess Pieces 2654
+Chess Symbols, Japanese 2616
+chevrons 00AB
+CHI RHO 2627
+Chinese Bopomofo 3100
+Chinese Bopomofo Extended for Minnan and Hakka 31A0
+choice, dijkstra 2AFE
+choice, n-ary dijkstra 2AFF
+CIRCLE, BLACK 25CF
+circle, black small 2022
+CIRCLE, COMBINING ENCLOSING 20DD
+CIRCLE, DOTTED 25CC
+circle, jis composition 20DD
+CIRCLE, LARGE 25EF
+CIRCLE, MULTIPLICATION SIGN IN DOUBLE 2A37
+CIRCLE, MULTIPLICATION SIGN IN LEFT HALF 2A34
+CIRCLE, MULTIPLICATION SIGN IN RIGHT HALF 2A35
+CIRCLE, PLUS SIGN IN LEFT HALF 2A2D
+CIRCLE, PLUS SIGN IN RIGHT HALF 2A2E
+CIRCLE, SQUARED SMALL 29C7
+CIRCLE ABOVE, PLUS SIGN WITH SMALL 2A22
+CIRCLE ABOVE, UP TACK WITH 27DF
+CIRCLE ABOVE, VERTICAL LINE WITH 2AEF
+CIRCLE BACKSLASH, COMBINING ENCLOSING 20E0
+CIRCLE BELOW, DOWN TACK WITH 2AF1
+CIRCLE BELOW, VERTICAL LINE WITH 2AF0
+CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR 29BA
+CIRCLE INSIDE, GREATER-THAN WITH 2A7A
+CIRCLE INSIDE, LESS-THAN WITH 2A79
+Circle Symbols 29B5
+CIRCLE WITH DOT RIGHT, WHITE 2686
+CIRCLE WITH DOWN ARROW, BLACK 29ED
+CIRCLE WITH DOWN ARROW, WHITE 29EC
+CIRCLE WITH TWO DOTS, WHITE 2687
+CIRCLE WITH TWO WHITE DOTS, BLACK 2689
+CIRCLE WITH WHITE DOT RIGHT, BLACK 2688
+CIRCLED ASTERISK OPERATOR 229B
+CIRCLED DASH 229D
+CIRCLED DIGIT ZERO 24EA
+Circled Digits, Dingbat 2776
+CIRCLED DIVISION SIGN 2A38
+CIRCLED DIVISION SLASH 2298
+CIRCLED DOT OPERATOR 2299
+CIRCLED DOT OPERATOR, N-ARY 2A00
+CIRCLED EQUALS 229C
+Circled Ideographs 3280
+Circled Inverse Numbers 2776
+Circled Japanese Katakana 32D0
+Circled Korean Hangul Elements 3260
+Circled Korean Hangul Syllables 326E
+Circled Latin Letters 24B6
+CIRCLED MINUS 2296
+CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT 2A36
+Circled Numbers 2460
+Circled Numbers 3251
+Circled Numbers 32B1
+Circled Numbers, Double 24F5
+Circled Numbers, White On Black 24EB
+CIRCLED PLUS 2295
+CIRCLED PLUS OPERATOR, N-ARY 2A01
+CIRCLED POSTAL MARK 3036
+CIRCLED RING OPERATOR 229A
+CIRCLED TIMES 2297
+CIRCLED TIMES OPERATOR, N-ARY 2A02
+Circles 25CB
+CIRCULATION FUNCTION 2A10
+circumflex, spacing 005E
+CIRCUMFLEX ACCENT 005E
+CIRCUMFLEX ACCENT, ALMOST EQUAL TO WITH 2A6F
+CIRCUMFLEX ACCENT, CIRCLED MULTIPLICATION SIGN WITH 2A36
+CIRCUMFLEX ACCENT, COMBINING 0302
+CIRCUMFLEX ACCENT, MODIFIER LETTER 02C6
+CIRCUMFLEX ACCENT ABOVE, PLUS SIGN WITH 2A23
+CIRCUMFLEX ACCENT BELOW, COMBINING 032D
+CJK Compatibility 3300
+CJK Compatibility Forms FE30
+CJK Compatibility Ideographs F900
+CJK Compatibility Ideographs, IBM FA0E
+CJK Ideographs Area 3400
+CJK Letters and Ideographs, Enclosed 3200
+CJK Phonetics and Symbols Area 2E00
+CJK Radicals Supplement 2E80
+CJK Symbols and Punctuation 3000
+CJK Unified Ideographs 4E00
+CJK Unified Ideographs Extension A 3400
+clear key 2327
+CLEAR SCREEN SYMBOL 239A
+clear weather 2600
+CLICK, LATIN LETTER ALVEOLAR 01C2
+CLICK, LATIN LETTER BILABIAL 0298
+CLICK, LATIN LETTER DENTAL 01C0
+CLICK, LATIN LETTER LATERAL 01C1
+CLICK, LATIN LETTER RETROFLEX 01C3
+CLOCKWISE ARROW ABOVE, COMBINING 20D5
+CLOCKWISE CONTOUR INTEGRAL 2232
+CLOCKWISE INTEGRAL 2231
+CLOCKWISE RING OVERLAY, COMBINING 20D9
+clone 2104
+Clones of Diacritics, Spacing 02D8
+CLOSE UP 2050
+closed epsilon, latin small letter 029A
+CLOSED INTERSECTION WITH SERIFS 2A4D
+CLOSED OMEGA, LATIN SMALL LETTER 0277
+CLOSED OPEN E, LATIN SMALL LETTER 029A
+closed reversed epsilon, latin small letter 025E
+CLOSED REVERSED OPEN E, LATIN SMALL LETTER 025E
+CLOSED SUBSET 2ACF
+CLOSED SUBSET OR EQUAL TO 2AD1
+CLOSED SUPERSET 2AD0
+CLOSED SUPERSET OR EQUAL TO 2AD2
+CLOSED UNION WITH SERIFS 2A4C
+CLOSED UNION WITH SERIFS AND SMASH PRODUCT 2A50
+closing brace 007D
+closing curly bracket 007D
+CLOSING MARK, IDEOGRAPHIC 3006
+closing parenthesis 0029
+closing square bracket 005D
+CLOUD 2601
+cloudy weather 2601
+Codes, Process Internal FDD0
+coffee 2615
+COLON 003A
+COLON, ETHIOPIC 1365
+COLON, MODIFIER LETTER HALF TRIANGULAR 02D1
+COLON, MODIFIER LETTER TRIANGULAR 02D0
+COLON, MONGOLIAN 1804
+COLON, Z NOTATION TYPE 2982
+COLON EQUAL, DOUBLE 2A74
+COLON EQUALS 2254
+COLON OPERATOR, TRIPLE 2AF6
+colon right arrow 29F4
+COLON SIGN 20A1
+COMBINING ACUTE ACCENT 0301
+COMBINING ACUTE ACCENT BELOW 0317
+COMBINING ACUTE TONE MARK 0341
+COMBINING ALMOST EQUAL TO ABOVE 034C
+Combining Alphabet, Korean Hangul Jamo 1100
+COMBINING ANNUITY SYMBOL 20E7
+COMBINING BREVE 0306
+COMBINING BREVE BELOW 032E
+COMBINING BRIDGE ABOVE 0346
+COMBINING BRIDGE BELOW 032A
+COMBINING CANDRABINDU 0310
+COMBINING CARON 030C
+COMBINING CARON BELOW 032C
+COMBINING CEDILLA 0327
+Combining Characters, Cyrillic 0483
+COMBINING CIRCUMFLEX ACCENT 0302
+COMBINING CIRCUMFLEX ACCENT BELOW 032D
+COMBINING CLOCKWISE ARROW ABOVE 20D5
+COMBINING CLOCKWISE RING OVERLAY 20D9
+COMBINING COMMA ABOVE 0313
+COMBINING COMMA ABOVE RIGHT 0315
+COMBINING COMMA BELOW 0326
+Combining Diacritical Marks 0300
+Combining Diacritical Marks for Symbols 20D0
+COMBINING DIAERESIS 0308
+COMBINING DIAERESIS BELOW 0324
+COMBINING DOT ABOVE 0307
+COMBINING DOT BELOW 0323
+COMBINING DOUBLE ACUTE ACCENT 030B
+COMBINING DOUBLE GRAVE ACCENT 030F
+COMBINING DOUBLE INVERTED BREVE 0361
+COMBINING DOUBLE LOW LINE 0333
+COMBINING DOUBLE OVERLINE 033F
+COMBINING DOUBLE RIGHTWARDS ARROW BELOW 0362
+COMBINING DOUBLE TILDE 0360
+COMBINING DOUBLE TILDE LEFT HALF FE22
+COMBINING DOUBLE VERTICAL LINE ABOVE 030E
+COMBINING DOUBLE VERTICAL LINE BELOW 0348
+COMBINING DOUBLE VERTICAL STROKE OVERLAY 20E6
+COMBINING DOWN TACK BELOW 031E
+COMBINING ENCLOSING CIRCLE 20DD
+COMBINING ENCLOSING CIRCLE BACKSLASH 20E0
+COMBINING ENCLOSING DIAMOND 20DF
+COMBINING ENCLOSING KEYCAP 20E3
+COMBINING ENCLOSING SCREEN 20E2
+COMBINING ENCLOSING SQUARE 20DE
+COMBINING ENCLOSING UPWARD POINTING TRIANGLE 20E4
+COMBINING EQUALS SIGN BELOW 0347
+COMBINING FOUR DOTS ABOVE 20DC
+COMBINING GRAPHEME JOINER 034F
+COMBINING GRAVE ACCENT 0300
+COMBINING GRAVE ACCENT BELOW 0316
+COMBINING GRAVE TONE MARK 0340
+COMBINING GREEK DIALYTIKA TONOS 0344
+COMBINING GREEK KORONIS 0343
+COMBINING GREEK PERISPOMENI 0342
+COMBINING GREEK YPOGEGRAMMENI 0345
+combining hacek 030C
+Combining Half Marks FE20
+COMBINING HOMOTHETIC ABOVE 034B
+COMBINING HOOK ABOVE 0309
+COMBINING HORN 031B
+COMBINING INVERTED BREVE 0311
+COMBINING INVERTED BREVE BELOW 032F
+COMBINING INVERTED BRIDGE BELOW 033A
+COMBINING INVERTED DOUBLE ARCH BELOW 032B
+COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK 3099
+Combining Latin Small Letters 0363
+COMBINING LEFT ANGLE ABOVE 031A
+COMBINING LEFT ANGLE BELOW 0349
+COMBINING LEFT ARROW ABOVE 20D6
+COMBINING LEFT HALF RING BELOW 031C
+COMBINING LEFT HARPOON ABOVE 20D0
+COMBINING LEFT RIGHT ARROW ABOVE 20E1
+COMBINING LEFT RIGHT ARROW BELOW 034D
+COMBINING LEFT TACK BELOW 0318
+COMBINING LEFTWARDS ARROW OVERLAY 20EA
+COMBINING LIGATURE LEFT HALF FE20
+COMBINING LONG SOLIDUS OVERLAY 0338
+COMBINING LONG STROKE OVERLAY 0336
+COMBINING LONG VERTICAL LINE OVERLAY 20D2
+COMBINING LOW LINE 0332
+COMBINING MACRON 0304
+COMBINING MACRON BELOW 0331
+COMBINING MINUS SIGN BELOW 0320
+COMBINING NOT TILDE ABOVE 034A
+COMBINING OGONEK 0328
+COMBINING OVERLINE 0305
+COMBINING PALATALIZED HOOK BELOW 0321
+COMBINING PLUS SIGN BELOW 031F
+COMBINING RETROFLEX HOOK BELOW 0322
+COMBINING REVERSE SOLIDUS OVERLAY 20E5
+COMBINING REVERSED COMMA ABOVE 0314
+COMBINING RIGHT HALF RING BELOW 0339
+COMBINING RING ABOVE 030A
+COMBINING RING BELOW 0325
+COMBINING RING OVERLAY 20D8
+COMBINING SEAGULL BELOW 033C
+COMBINING SHORT SOLIDUS OVERLAY 0337
+COMBINING SHORT STROKE OVERLAY 0335
+COMBINING SHORT VERTICAL LINE OVERLAY 20D3
+COMBINING SQUARE BELOW 033B
+COMBINING THREE DOTS ABOVE 20DB
+COMBINING TILDE 0303
+COMBINING TILDE BELOW 0330
+COMBINING TILDE OVERLAY 0334
+COMBINING TRIPLE UNDERDOT 20E8
+COMBINING TURNED COMMA ABOVE 0312
+COMBINING UP TACK BELOW 031D
+COMBINING UPWARDS ARROW BELOW 034E
+COMBINING VERTICAL LINE ABOVE 030D
+COMBINING VERTICAL LINE BELOW 0329
+COMBINING VERTICAL TILDE 033E
+COMBINING WIDE BRIDGE ABOVE 20E9
+COMBINING X ABOVE 033D
+COMET 2604
+COMMA 002C
+COMMA, ARABIC 060C
+COMMA, ARMENIAN 055D
+COMMA, ETHIOPIC 1363
+comma, georgian 00B7
+COMMA, IDEOGRAPHIC 3001
+comma, invisible 2063
+COMMA, MODIFIER LETTER REVERSED 02BD
+COMMA, MODIFIER LETTER TURNED 02BB
+COMMA, MONGOLIAN 1802
+COMMA ABOVE, COMBINING 0313
+COMMA ABOVE, COMBINING REVERSED 0314
+COMMA ABOVE, COMBINING TURNED 0312
+COMMA ABOVE, MINUS SIGN WITH 2A29
+COMMA ABOVE RIGHT, COMBINING 0315
+COMMA BELOW, COMBINING 0326
+comma quotation mark, double 201D
+comma quotation mark, double reversed 201F
+comma quotation mark, double turned 201C
+comma quotation mark, low double 201E
+comma quotation mark, low single 201A
+comma quotation mark, single 2019
+comma quotation mark, single reversed 201B
+comma quotation mark, single turned 2018
+command, application program 009F
+command, operating system 009D
+command key 2318
+COMMERCIAL AT 0040
+COMMERCIAL MINUS SIGN 2052
+compass 263C
+Compatibility, CJK 3300
+Compatibility and Specials Area F900
+Compatibility Forms, CJK FE30
+Compatibility Ideographs, CJK F900
+Compatibility Ideographs, IBM CJK FA0E
+Compatibility Jamo, Korean Hangul 3130
+COMPLEMENT 2201
+complex numbers, the set of 2102
+component, radial 27DF
+Components, Form and Chart 2500
+composite function 2218
+COMPOSITION, Z NOTATION RELATIONAL 2A3E
+COMPOSITION, Z NOTATION SCHEMA 2A1F
+composition circle, jis 20DD
+COMPOSITION SYMBOL 2384
+concatenation, z notation sequence 2040
+CONCAVE-SIDED DIAMOND, WHITE 27E1
+CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK, WHITE 27E2
+CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK, WHITE 27E3
+conductance 2127
+CONGRUENT WITH DOT ABOVE 2A6D
+CONICAL TAPER 2332
+CONJUGATE MATRIX, HERMITIAN 22B9
+conjunction 2227
+CONJUNCTION 260C
+CONSECUTIVE EQUALS SIGNS, THREE 2A76
+CONSECUTIVE EQUALS SIGNS, TWO 2A75
+consonant for Addu dialect 0780
+CONTAINS AS MEMBER 220B
+CONTAINS AS MEMBER, SMALL 220D
+CONTAINS AS NORMAL SUBGROUP 22B3
+CONTAINS WITH LONG HORIZONTAL STROKE 22FA
+CONTAINS WITH OVERBAR 22FD
+CONTAINS WITH OVERBAR, SMALL 22FE
+CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22FB
+CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE, SMALL 22FC
+continuity, absolute 2AA1
+CONTINUOUS UNDERLINE SYMBOL 2381
+continuum, second transfinite cardinal 2136
+CONTOUR INTEGRAL 222E
+CONTOUR INTEGRAL, CLOCKWISE 2232
+CONTOURED OUTLINE, SQUARE WITH 29E0
+contraction operator 20E9
+control, graphic for 2388
+Control, Syriac Format 070F
+Control Code Graphics 25F0
+Control Codes, ASCII C0 0000
+Control Codes, C1 0080
+Control Codes, Graphic Pictures for 2400
+Control Codes, Graphics for 237B
+control sequence introducer 009B
+control string, device 0090
+Controls, Bidirectional Formatting 202A
+Controls, Mongolian Format 180B
+Controls and Basic Latin, C0 0000
+Controls and Latin-1 Supplement, C1 0080
+COPRODUCT, AMALGAMATION OR 2A3F
+COPRODUCT, N-ARY 2210
+Coptic, Greek and 0370
+Coptic-unique Letters 03E2
+COPYRIGHT, SOUND RECORDING 2117
+COPYRIGHT SIGN 00A9
+CORNER, TOP LEFT 231C
+CORNER BRACKET, LEFT 300C
+CORNER BRACKET, LEFT WHITE 300E
+Corner brackets 2308
+Corner brackets, CJK 300C
+CORNER WITH DOT, LOWER RIGHT 27D3
+CORNER WITH DOT, UPPER LEFT 27D4
+corners, Quine 231C
+CORPORATION, SQUARE 337F
+CORRESPONDS TO 2258
+corresponds to 2259
+costa rican currency 20A1
+countable, first transfinite cardinal 2135
+COUNTERBORE 2334
+COUNTERSINK 2335
+cr 000D
+CRESCENT, STAR AND 262A
+Croatian, Additions for Slovenian and 0200
+Croatian Digraphs Matching Serbian Cyrillic Letters 01C4
+CROP, TOP LEFT 230F
+CROSS, EAST SYRIAC 2671
+CROSS, LATIN 271D
+cross, long 2020
+CROSS, MALTESE 2720
+CROSS, ORTHODOX 2626
+cross, st. andrew's 2613
+CROSS, WEST SYRIAC 2670
+CROSS ACCENT, MODIFIER LETTER 02DF
+Cross Dingbats 2719
+CROSS OF JERUSALEM 2629
+CROSS OF LORRAINE 2628
+CROSS PRODUCT, VECTOR OR 2A2F
+cross ratio 211E
+CROSSBONES, SKULL AND 2620
+crosshatch 0023
+CRUZEIRO SIGN 20A2
+CUBE ROOT 221B
+cubed 00B3
+cup 222A
+CUP, SQUARE 2294
+curly bracket, closing 007D
+CURLY BRACKET, LEFT 007B
+curly bracket, opening 007B
+CURLY BRACKET, RIGHT 007D
+CURLY LOGICAL AND 22CF
+CURLY LOGICAL OR 22CE
+currency, brazilian 20A2
+currency, costa rican 20A1
+currency, el salvadorian 20A1
+currency, euro european 20AC
+currency, french 20A3
+currency, greek 20AF
+currency, hebrew 20AA
+currency, indian 20A8
+currency, iranian FDFC
+currency, israeli 20AA
+currency, italian 20A4
+currency, korean 20A9
+currency, laotian 20AD
+currency, mongolian 20AE
+currency, nigerian 20A6
+currency, phillipine 20B1
+currency, spanish 20A7
+currency, turkish 20A4
+currency, vietnamese 20AB
+CURRENCY SIGN 00A4
+Currency Signs, Bengali 09F2
+currency symbol, florin 0192
+CURRENCY SYMBOL BAHT, THAI 0E3F
+Currency Symbols 20A0
+current, alternating 223F
+CURRENT SYMBOL FORM TWO, DIRECT 2393
+cycle 223C
+CYLINDRICITY 232D
+Cypriot Syllabary 10800
+Cyrillic 0400
+Cyrillic, Extended 048C
+Cyrillic Capital Letters 0401
+Cyrillic Combining Characters 0483
+Cyrillic Extensions 0450
+Cyrillic Historic Letters 0460
+Cyrillic Komi Letters 0500
+Cyrillic Small Letters 0430
+Cyrillic Supplementary 0500
+D, COMBINING LATIN SMALL LETTER 0369
+D, DOUBLE-STRUCK ITALIC CAPITAL 2145
+D, DOUBLE-STRUCK ITALIC SMALL 2146
+D, LATIN CAPITAL LETTER AFRICAN 0189
+d retroflex hook, latin small letter 0256
+D WITH TAIL, LATIN SMALL LETTER 0256
+DAGGER 2020
+DAGGER, DOUBLE 2021
+d'alembertian 29E0
+DALET SYMBOL 2138
+DANDA, DEVANAGARI 0964
+DANDA, DEVANAGARI DOUBLE 0965
+dash, angled 00AC
+DASH, CIRCLED 229D
+DASH, EM 2014
+DASH, EN 2013
+DASH, FIGURE 2012
+dash, long 2015
+dash, quotation 2015
+DASH, SWUNG 2053
+DASH, WAVE 301C
+DASH, WAVY 3030
+DASHED LOW LINE FE4D
+DASHED OVERLINE FE49
+Dashes 2010
+dasia 0314
+data link escape 0010
+DATA LINK ESCAPE, SYMBOL FOR 2410
+Database Theory Operators 27D5
+DAVID, STAR OF 2721
+Days, Telegraph Symbols for 33E0
+DAY SIGN, TAMIL 0BF3
+decimal point 002E
+decimal separator 002C
+DECIMAL SEPARATOR, ARABIC 066B
+DECIMAL SEPARATOR KEY SYMBOL 2396
+deergh viram 0965
+definition, equal to by 225C
+DEFINITION, EQUAL TO BY 225D
+DEGREE CELSIUS 2103
+DEGREE FAHRENHEIT 2109
+DEGREE SIGN 00B0
+degrees centigrade 2103
+degrees kelvin 212A
+del 2207
+delete 007F
+DELETE, SYMBOL FOR 2421
+delete, undoable 2425
+DELETE FORM TWO, SYMBOL FOR 2425
+delete to the left key 232B
+delete to the right key 2326
+DELIMITER, TRIPLE VERTICAL BAR 2980
+DELTA, LATIN SMALL LETTER TURNED 018D
+DELTA EQUAL TO 225C
+DENTAL CLICK, LATIN LETTER 01C0
+Dentistry Notation Symbols 23BE
+depth symbol 21A7
+derivative 0307
+derivative, double 0308
+derivative, fourth 20DC
+derivative, third 20DB
+DESCENDING NODE 260B
+Description Characters, Ideographic 2FF0
+Devanagari 0900
+DEVANAGARI DANDA 0964
+Devanagari Digits 0966
+DEVANAGARI DOUBLE DANDA 0965
+Devanagari Letters 0905
+DEVANAGARI OM 0950
+device control four 0014
+DEVICE CONTROL FOUR, SYMBOL FOR 2414
+device control one 0011
+DEVICE CONTROL ONE, SYMBOL FOR 2411
+device control string 0090
+device control three 0013
+DEVICE CONTROL THREE, SYMBOL FOR 2413
+device control two 0012
+DEVICE CONTROL TWO, SYMBOL FOR 2412
+DHARMA, WHEEL OF 2638
+Diacritic-vowel Combinations, Pinyin 01CD
+Diacritical Marks, Combining 0300
+Diacritical Marks for Symbols, Combining 20D0
+Diacritics, Double 0360
+Diacritics, Enclosing 20DD
+Diacritics, Medieval Superscript Letter 0363
+Diacritics, Overstruck 0334
+Diacritics, Spacing Clones of 02D8
+Diacritics for Greek 0342
+Diacritics for IPA 0346
+DIAERESIS 00A8
+DIAERESIS, COMBINING 0308
+diaeresis, greek capital letter upsilon hook 03D4
+diaeresis, spacing 00A8
+DIAERESIS AND HOOK SYMBOL, GREEK UPSILON WITH 03D4
+DIAERESIS BELOW, COMBINING 0324
+DIAGONAL ELLIPSIS, UP RIGHT 22F0
+DIAGONAL SLASH, SQUARED FALLING 29C5
+DIAGONAL SLASH, SQUARED RISING 29C4
+dialytika 0308
+DIALYTIKA TONOS, COMBINING GREEK 0344
+DIAMETER SIGN 2300
+diameter symbol 2205
+DIAMOND, COMBINING ENCLOSING 20DF
+DIAMOND, WHITE CONCAVE-SIDED 27E1
+DIAMOND OPERATOR 22C4
+DIAMOND WITH CENTRED DOT, WHITE 27D0
+DIAMOND WITH DOWN ARROW, BLACK 29EA
+DIAMOND WITH LEFTWARDS TICK, WHITE CONCAVE-SIDED 27E2
+DIAMOND WITH RIGHTWARDS TICK, WHITE CONCAVE-SIDED 27E3
+Diamonds 25C6
+Dice 2680
+diesis 2021
+difference, backward 2207
+difference, forward 2206
+difference, sum or positive 2A26
+difference, symmetric 2238
+difference, symmetric 2296
+difference between 223C
+DIFFERENCE BETWEEN 224F
+difference or sum, positive 2A24
+DIFFERENTIAL, PARTIAL 2202
+DIGIT SHAPES, NATIONAL 206E
+DIGIT SHAPES, NOMINAL 206F
+Digits, Arabic-Indic 0660
+Digits, ASCII 0030
+Digits, Bengali 09E6
+Digits, Devanagari 0966
+Digits, Dingbat Circled 2776
+Digits, Ethiopic 1369
+Digits, Gujarati 0AE6
+Digits, Gurmukhi 0A66
+Digits, Kannada 0CE6
+Digits, Khmer 17E0
+Digits, Lao 0ED0
+Digits, Malayalam 0D66
+Digits, Mongolian 1810
+Digits, Myanmar 1040
+Digits, Oriya 0B66
+Digits, Osmanya 104A0
+Digits, Subscript 2080
+Digits, Superscript 2070
+Digits, Tamil 0BE7
+Digits, Telugu 0C66
+Digits, Thai 0E50
+Digits, Tibetan 0F20
+Digits for Persian and Urdu, Eastern Arabic-Indic 06F0
+DIGRAPH KOTO, KATAKANA 30FF
+DIGRAPH YORI, HIRAGANA 309F
+Digraphs, Phonetic 02A3
+Digraphs, Yiddish 05F0
+Digraphs Matching Serbian Cyrillic Letters, Croatian 01C4
+Digram Symbols, Yijing Monogram and 268A
+Digram Symbols, Tai Xuan Jing 1D301
+dijkstra choice 2AFE
+dijkstra choice, n-ary 2AFF
+DIMENSION ORIGIN 2331
+Dingbat Circled Digits 2776
+Dingbats 2700
+Dingbats, Arrow 2794
+Dingbats, Asterisk 2722
+Dingbats, Cross 2719
+Dingbats, Drop-Shadowed 274D
+Dingbats, Hazard 2620
+Dingbats, Heart 2763
+Dingbats, Miscellaneous 2600
+Dingbats, Music 2669
+Dingbats, Pencil 270E
+Dingbats, Pointing Index Finger 261A
+Dingbats, Quotation Mark 275B
+Dingbats, Scissors 2701
+Dingbats, Snowflake 2744
+Dingbats, Star 2726
+Dingbats, Vertical Bar 2758
+Dingbats, Warning 2620
+Dingbats, Weather 2600
+Dingbats, Zapf 2700
+Dingbats Series 100, ITC Zapf 2700
+DIRECT CURRENT SYMBOL FORM TWO 2393
+direct product 2299
+direct sum 2295
+DIRECTIONAL FORMATTING, POP 202C
+Directional Formatting Controls 202A
+DISCONTINUOUS UNDERLINE SYMBOL 2382
+discretionary hyphen 00AD
+disjunction 2228
+DITTO MARK 3003
+DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR, CIRCLE 29BA
+DIVIDED BY HORIZONTAL RULE, LOZENGE 27E0
+DIVIDED BY VERTICAL BAR, CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF 29BA
+DIVIDES 2223
+Divination Lore, Khmer Symbols for 17F0
+DIVISION SIGN 00F7
+DIVISION SIGN, CIRCLED 2A38
+DIVISION SIGN, CIRCLED ANTICLOCKWISE-ROTATED 29BC
+Division Sign Operators, Multiplication and 2A2F
+DIVISION SLASH 2215
+DIVISION SLASH, CIRCLED 2298
+DIVISION TIMES 22C7
+DOES NOT DIVIDE WITH REVERSED NEGATION SLASH 2AEE
+does not yield 22A3
+DOLLAR SIGN 0024
+DOMAIN ANTIRESTRICTION, Z NOTATION 2A64
+DONG SIGN 20AB
+dot 002E
+DOT, AEGEAN LINE SEPARATOR 10101
+dot, greek middle 00B7
+DOT, KATAKANA MIDDLE 30FB
+DOT, MIDDLE 00B7
+DOT, SESAME FE45
+DOT, WHITE SESAME FE46
+DOT ABOVE 02D9
+DOT ABOVE, COMBINING 0307
+dot above, double 0308
+DOT ABOVE, LATIN CAPITAL LETTER I WITH 0130
+DOT BELOW, COMBINING 0323
+DOT MINUS 2238
+DOT OPERATOR 22C5
+DOT OPERATOR, CIRCLED 2299
+DOT OPERATOR, N-ARY CIRCLED 2A00
+DOT OPERATOR, SQUARED 22A1
+DOT PLUS 2214
+DOTLESS BEH, ARABIC LETTER 066E
+DOTLESS I, LATIN SMALL LETTER 0131
+DOTLESS QAF, ARABIC LETTER 066F
+DOTS ABOVE, COMBINING FOUR 20DC
+DOTS ABOVE, COMBINING THREE 20DB
+DOTTED CIRCLE 25CC
+DOTTED FENCE 2999
+DOUBLE ACUTE ACCENT 02DD
+DOUBLE ACUTE ACCENT, COMBINING 030B
+DOUBLE ANGLE BRACKET, LEFT 300A
+DOUBLE ANGLE QUOTATION MARK, LEFT-POINTING 00AB
+DOUBLE ANGLE QUOTATION MARK, RIGHT-POINTING 00BB
+DOUBLE APOSTROPHE, MODIFIER LETTER 02EE
+DOUBLE ARCH BELOW, COMBINING INVERTED 032B
+double bar, latin letter pipe 01C2
+DOUBLE CIRCLE, MULTIPLICATION SIGN IN 2A37
+Double Circled Numbers 24F5
+DOUBLE COLON EQUAL 2A74
+double comma quotation mark 201D
+double comma quotation mark, low 201E
+DOUBLE DAGGER 2021
+DOUBLE DANDA, DEVANAGARI 0965
+double derivative 0308
+Double Diacritics 0360
+double dot above 0308
+DOUBLE DOWN TACK 2AEA
+DOUBLE EXCLAMATION MARK 203C
+DOUBLE GRAVE ACCENT, COMBINING 030F
+DOUBLE HIGH-REVERSED-9 QUOTATION MARK 201F
+DOUBLE HYPHEN, KATAKANA-HIRAGANA 30A0
+DOUBLE INTEGRAL 222C
+DOUBLE INTERSECTION 22D2
+DOUBLE INVERTED BREVE, COMBINING 0361
+DOUBLE LEFT TURNSTILE, DOUBLE VERTICAL BAR 2AE5
+DOUBLE LEFT TURNSTILE, VERTICAL BAR 2AE4
+DOUBLE LOGICAL AND 2A53
+DOUBLE LOGICAL OR 2A54
+DOUBLE LOW LINE 2017
+DOUBLE LOW LINE, COMBINING 0333
+DOUBLE LOW-9 QUOTATION MARK 201E
+DOUBLE NESTED GREATER-THAN 2AA2
+DOUBLE NESTED LESS-THAN 2AA1
+DOUBLE NESTED LESS-THAN WITH UNDERBAR 2AA3
+double obelisk 2021
+DOUBLE OVERBAR, LOGICAL AND WITH 2A5E
+DOUBLE OVERBAR, LOGICAL OR WITH 2A62
+DOUBLE OVERLINE, COMBINING 033F
+double pipe 01C1
+DOUBLE PLUS 29FA
+DOUBLE PRECEDES 2ABB
+DOUBLE PRIME 2033
+DOUBLE PRIME, MODIFIER LETTER 02BA
+DOUBLE PRIME, REVERSED 2036
+DOUBLE PRIME QUOTATION MARK 301E
+DOUBLE PRIME QUOTATION MARK, LOW 301F
+DOUBLE PRIME QUOTATION MARK, REVERSED 301D
+DOUBLE PUNCTUATION, PHILIPPINE 1736
+Double punctuation for vertical text 2047
+DOUBLE QUESTION MARK 2047
+DOUBLE QUOTATION MARK, LEFT 201C
+DOUBLE QUOTATION MARK, RIGHT 201D
+double reversed comma quotation mark 201F
+DOUBLE RIGHTWARDS ARROW BELOW, COMBINING 0362
+DOUBLE SOLIDUS OPERATOR 2AFD
+DOUBLE SQUARE INTERSECTION 2A4E
+DOUBLE SQUARE UNION 2A4F
+DOUBLE STROKE, INTEGRAL WITH 2A0E
+DOUBLE STROKE NOT SIGN 2AEC
+DOUBLE STROKE NOT SIGN, REVERSED 2AED
+DOUBLE SUBSET 22D0
+DOUBLE SUCCEEDS 2ABC
+DOUBLE SUPERSET 22D1
+DOUBLE TILDE, COMBINING 0360
+DOUBLE TILDE LEFT HALF, COMBINING FE22
+double turned comma quotation mark 201C
+DOUBLE TURNSTILE, LEFT AND RIGHT 27DA
+DOUBLE UNDERBAR, LOGICAL AND WITH 2A60
+DOUBLE UNDERBAR, LOGICAL OR WITH 2A63
+double underline 0333
+double underscore 0333
+double underscore, spacing 2017
+DOUBLE UNION 22D3
+DOUBLE UP TACK 2AEB
+DOUBLE VERTICAL, LONG DASH FROM LEFT MEMBER OF 2AE6
+DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE 2AE5
+DOUBLE VERTICAL BAR LEFT TURNSTILE 2AE3
+DOUBLE VERTICAL LINE 2016
+DOUBLE VERTICAL LINE ABOVE, COMBINING 030E
+DOUBLE VERTICAL LINE BELOW, COMBINING 0348
+DOUBLE VERTICAL STROKE, RIGHTWARDS ARROW WITH TAIL WITH 2915
+DOUBLE VERTICAL STROKE, TRIPLE HORIZONTAL BAR WITH 2A68
+DOUBLE VERTICAL STROKE OVERLAY, COMBINING 20E6
+DOUBLE WAVY OVERLINE FE4C
+DOUBLE WIGGLY FENCE, LEFT 29DA
+DOUBLE WIGGLY FENCE, RIGHT 29DB
+double-barred pipe 01C2
+DOUBLE-ENDED MULTIMAP 29DF
+DOUBLE-STRUCK CAPITAL C 2102
+DOUBLE-STRUCK CAPITAL H 210D
+DOUBLE-STRUCK CAPITAL N 2115
+DOUBLE-STRUCK CAPITAL P 2119
+DOUBLE-STRUCK CAPITAL Q 211A
+DOUBLE-STRUCK CAPITAL R 211D
+DOUBLE-STRUCK CAPITAL Z 2124
+Double-struck Greek Letters 213D
+Double-Struck Italic Mathematical Symbols 2145
+DOUBLE-STRUCK N-ARY SUMMATION 2140
+down, page 21DF
+DOWN TACK 22A4
+DOWN TACK BELOW, COMBINING 031E
+DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK 29E8
+DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK 29E9
+DRACHMA SIGN 20AF
+Drafting Symbols 232D
+dram 0292
+drop 264F
+Duplicates from Big 5 FA0C
+E, COMBINING LATIN SMALL LETTER 0364
+E, DOUBLE-STRUCK ITALIC SMALL 2147
+E, LATIN CAPITAL LETTER OPEN 0190
+E, LATIN CAPITAL LETTER REVERSED 018E
+e, latin capital letter turned 018E
+E, LATIN SMALL LETTER CLOSED OPEN 029A
+E, LATIN SMALL LETTER CLOSED REVERSED OPEN 025E
+E, LATIN SMALL LETTER OPEN 025B
+E, LATIN SMALL LETTER REVERSED 0258
+E, LATIN SMALL LETTER REVERSED OPEN 025C
+E, LATIN SMALL LETTER TURNED 01DD
+E, SCRIPT CAPITAL 2130
+E, SCRIPT SMALL 212F
+EARTH 2641
+Eastern Arabic-Indic Digits for Persian and Urdu 06F0
+ecu 20A0
+EIGHTH NOTE 266A
+EIGHTH NOTES, BEAMED 266B
+Eighths, Fractions 215B
+EJECT SYMBOL 23CF
+EK ONKAR, GURMUKHI 0A74
+el salvadorian currency 20A1
+ELECTRIC ARROW 2301
+electro-magnetic force, emf 2130
+electrolysis 21AF
+Electrotechnical Symbols from IR 181 238D
+element, unique 2129
+ELEMENT OF 2208
+ELEMENT OF, NOT AN 2209
+ELEMENT OF, SMALL 220A
+ELEMENT OF OPENING DOWNWARDS 2AD9
+ELEMENT OF OPENING UPWARDS 27D2
+ELEMENT OF WITH DOT ABOVE 22F5
+ELEMENT OF WITH LONG HORIZONTAL STROKE 22F2
+ELEMENT OF WITH OVERBAR 22F6
+ELEMENT OF WITH OVERBAR, SMALL 22F7
+ELEMENT OF WITH TWO HORIZONTAL STROKES 22F9
+ELEMENT OF WITH UNDERBAR 22F8
+ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22F3
+ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE, SMALL 22F4
+ell, mathematical symbol 2113
+ELLIPSIS, HORIZONTAL 2026
+ELLIPSIS, MIDLINE HORIZONTAL 22EF
+ELLIPSIS, UP RIGHT DIAGONAL 22F0
+ELLIPSIS, VERTICAL 22EE
+elliptic function, weierstrass 2118
+EM DASH 2014
+EM QUAD 2001
+EM SPACE 2003
+EMBEDDING, LEFT-TO-RIGHT 202A
+EMBEDDING, RIGHT-TO-LEFT 202B
+emf 2130
+EMPHASIS MARK, ARMENIAN 055B
+Emphasis Marks, Sidelining FE45
+EMPHASIS SYMBOL 2383
+EMPTY SET 2205
+Empty Sets 29B0
+EN DASH 2013
+EN QUAD 2000
+EN SPACE 2002
+Enclosed Alphanumerics 2460
+Enclosed CJK Letters and Ideographs 3200
+ENCLOSING CIRCLE, COMBINING 20DD
+ENCLOSING CIRCLE BACKSLASH, COMBINING 20E0
+Enclosing Diacritics 20DD
+ENCLOSING DIAMOND, COMBINING 20DF
+ENCLOSING KEYCAP, COMBINING 20E3
+ENCLOSING SCREEN, COMBINING 20E2
+ENCLOSING SQUARE, COMBINING 20DE
+ENCLOSING UPWARD POINTING TRIANGLE, COMBINING 20E4
+end 21F2
+end of guarded area 0097
+end of medium 0019
+end of medium, graphic for 237F
+END OF MEDIUM, SYMBOL FOR 2419
+END OF PROOF 220E
+end of selected area 0087
+end of text 0003
+END OF TEXT, SYMBOL FOR 2403
+end of transmission 0004
+end of transmission, graphic for 2301
+END OF TRANSMISSION, SYMBOL FOR 2404
+end of transmission block 0017
+END OF TRANSMISSION BLOCK, SYMBOL FOR 2417
+ENG, LATIN SMALL LETTER 014B
+enotikon, greek 203F
+enquiry 0005
+ENQUIRY, SYMBOL FOR 2405
+enter key 2324
+ENTER SYMBOL 2386
+ENVELOPE 2709
+epsilon, latin capital letter 0190
+epsilon, latin small letter 025B
+epsilon, latin small letter closed 029A
+epsilon, latin small letter closed reversed 025E
+epsilon, reversed straight 03F6
+epsilon, reversed straight 220D
+epsilon, straight 03F5
+epsilon, straight 220A
+EPSILON SYMBOL, GREEK LUNATE 03F5
+EPSILON SYMBOL, GREEK REVERSED LUNATE 03F6
+EQUAL, DOUBLE COLON 2A74
+EQUAL, GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE 2A92
+EQUAL, GREATER-THAN ABOVE SIMILAR OR 2A8E
+EQUAL, GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED 2A94
+EQUAL, GREATER-THAN CLOSED BY CURVE ABOVE SLANTED 2AA9
+EQUAL, LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE 2A91
+EQUAL, LESS-THAN ABOVE SIMILAR OR 2A8D
+EQUAL, LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED 2A93
+EQUAL, LESS-THAN CLOSED BY CURVE ABOVE SLANTED 2AA8
+EQUAL ABOVE GREATER-THAN, LESS-THAN ABOVE DOUBLE-LINE 2A8B
+EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL, LESS-THAN ABOVE SLANTED 2A93
+EQUAL ABOVE LESS-THAN, GREATER-THAN ABOVE DOUBLE-LINE 2A8C
+EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL, GREATER-THAN ABOVE SLANTED 2A94
+EQUAL OR EQUAL TO, APPROXIMATELY 2A70
+EQUAL TO, ALL 224C
+EQUAL TO, ALMOST 2248
+EQUAL TO, APPROXIMATELY 2245
+equal to, approximately 2257
+EQUAL TO, APPROXIMATELY EQUAL OR 2A70
+EQUAL TO, ASYMPTOTICALLY 2243
+EQUAL TO, CLOSED SUBSET OR 2AD1
+EQUAL TO, CLOSED SUPERSET OR 2AD2
+EQUAL TO, DELTA 225C
+EQUAL TO, DOUBLE-LINE SLANTED GREATER-THAN OR 2AFA
+EQUAL TO, DOUBLE-LINE SLANTED LESS-THAN OR 2AF9
+EQUAL TO, GEOMETRICALLY 2251
+EQUAL TO, GREATER-THAN AND SINGLE-LINE NOT 2A88
+EQUAL TO, GREATER-THAN OR 2265
+EQUAL TO, GREATER-THAN OR SLANTED 2A7E
+EQUAL TO, LARGER THAN OR 2AAD
+EQUAL TO, LESS-THAN AND SINGLE-LINE NOT 2A87
+EQUAL TO, LESS-THAN OR 2264
+EQUAL TO, LESS-THAN OR SLANTED 2A7D
+EQUAL TO, NOT 2260
+EQUAL TO, PRECEDES ABOVE ALMOST 2AB7
+EQUAL TO, PRECEDES ABOVE NOT 2AB5
+EQUAL TO, PRECEDES ABOVE NOT ALMOST 2AB9
+EQUAL TO, PRECEDES ABOVE SINGLE-LINE NOT 2AB1
+EQUAL TO, QUESTIONED 225F
+EQUAL TO, RING 2257
+EQUAL TO, RING IN 2256
+EQUAL TO, SMALLER THAN OR 2AAC
+EQUAL TO, SUBSET OF ABOVE ALMOST 2AC9
+EQUAL TO, SUBSET OF ABOVE NOT 2ACB
+EQUAL TO, SUCCEEDS ABOVE ALMOST 2AB8
+EQUAL TO, SUCCEEDS ABOVE NOT 2AB6
+EQUAL TO, SUCCEEDS ABOVE NOT ALMOST 2ABA
+EQUAL TO, SUCCEEDS ABOVE SINGLE-LINE NOT 2AB2
+EQUAL TO, SUPERSET OF ABOVE ALMOST 2ACA
+EQUAL TO, SUPERSET OF ABOVE NOT 2ACC
+EQUAL TO ABOVE, COMBINING ALMOST 034C
+equal to by definition 225C
+EQUAL TO BY DEFINITION 225D
+EQUAL TO OR GREATER-THAN, DOUBLE-LINE 2A9A
+EQUAL TO OR GREATER-THAN, DOUBLE-LINE SLANTED 2A9C
+EQUAL TO OR GREATER-THAN, SLANTED 2A96
+EQUAL TO OR GREATER-THAN WITH DOT INSIDE, SLANTED 2A98
+EQUAL TO OR LESS-THAN, DOUBLE-LINE 2A99
+EQUAL TO OR LESS-THAN, DOUBLE-LINE SLANTED 2A9B
+EQUAL TO OR LESS-THAN, SLANTED 2A95
+EQUAL TO OR LESS-THAN WITH DOT INSIDE, SLANTED 2A97
+EQUAL TO WITH CIRCUMFLEX ACCENT, ALMOST 2A6F
+EQUAL TO WITH DOT ABOVE, GREATER-THAN OR SLANTED 2A82
+EQUAL TO WITH DOT ABOVE, LESS-THAN OR SLANTED 2A81
+EQUAL TO WITH DOT ABOVE, SUBSET OF OR 2AC3
+EQUAL TO WITH DOT ABOVE, SUPERSET OF OR 2AC4
+EQUAL TO WITH DOT ABOVE LEFT, GREATER-THAN OR SLANTED 2A84
+EQUAL TO WITH DOT ABOVE RIGHT, LESS-THAN OR SLANTED 2A83
+EQUAL TO WITH DOT INSIDE, GREATER-THAN OR SLANTED 2A80
+EQUAL TO WITH DOT INSIDE, LESS-THAN OR SLANTED 2A7F
+EQUALS, CIRCLED 229C
+EQUALS, REVERSED TILDE 22CD
+EQUALS, STAR 225B
+EQUALS COLON 2255
+EQUALS SIGN 003D
+EQUALS SIGN, PLUS SIGN ABOVE 2A72
+EQUALS SIGN, PRECEDES ABOVE 2AB3
+EQUALS SIGN, PRECEDES ABOVE SINGLE-LINE 2AAF
+EQUALS SIGN, SIMILAR ABOVE GREATER-THAN ABOVE 2AA0
+EQUALS SIGN, SIMILAR ABOVE LESS-THAN ABOVE 2A9F
+EQUALS SIGN, SUBSCRIPT 208C
+EQUALS SIGN, SUBSET OF ABOVE 2AC5
+EQUALS SIGN, SUCCEEDS ABOVE 2AB4
+EQUALS SIGN, SUCCEEDS ABOVE SINGLE-LINE 2AB0
+EQUALS SIGN, SUPERSCRIPT 207C
+EQUALS SIGN, SUPERSET OF ABOVE 2AC6
+EQUALS SIGN ABOVE PLUS SIGN 2A71
+EQUALS SIGN ABOVE TILDE OPERATOR 2A73
+EQUALS SIGN AND SLANTED PARALLEL 29E3
+EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE 29E4
+EQUALS SIGN BELOW, COMBINING 0347
+EQUALS SIGN WITH BUMPY ABOVE 2AAE
+EQUALS SIGN WITH DOT BELOW 2A66
+EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW 2A77
+EQUALS SIGNS, THREE CONSECUTIVE 2A76
+EQUALS SIGNS, TWO CONSECUTIVE 2A75
+EQUALS WITH ASTERISK 2A6E
+equiangular 225C
+EQUIANGULAR TO 225A
+equivalent, tautological 29E6
+EQUIVALENT TO 224D
+EQUIVALENT TO, GEOMETRICALLY 224E
+EQUIVALENT TO, STRICTLY 2263
+EQUIVALENT WITH FOUR DOTS ABOVE 2A78
+Era Names, Japanese 337B
+ERASE TO THE LEFT 232B
+ERASE TO THE RIGHT 2326
+error 212F
+Error Bar Symbols 29EE
+escape 001B
+escape, data link 0010
+ESCAPE, SYMBOL FOR 241B
+ESCAPE, SYMBOL FOR DATA LINK 2410
+escudo 0024
+ESH, LATIN CAPITAL LETTER 01A9
+ESH, LATIN SMALL LETTER 0283
+ESH, LATIN SMALL LETTER SQUAT REVERSED 0285
+ESH LOOP, LATIN LETTER REVERSED 01AA
+ESTIMATED SYMBOL 212E
+ESTIMATES 2259
+eszett 00DF
+ET, TIRONIAN SIGN 204A
+ETH, LATIN SMALL LETTER 00F0
+ethel 0153
+Ethiopic 1200
+ETHIOPIC COLON 1365
+ETHIOPIC COMMA 1363
+Ethiopic Digits 1369
+ETHIOPIC FULL STOP 1362
+ETHIOPIC QUESTION MARK 1367
+ETHIOPIC SEMICOLON 1364
+ETHIOPIC WORDSPACE 1361
+EULER CONSTANT 2107
+EURO SIGN 20AC
+European Latin 0100
+european paragraph sign 00A7
+european section sign 00B6
+EXCESS 2239
+EXCLAMATION MARK 0021
+EXCLAMATION MARK, ARMENIAN 055C
+EXCLAMATION MARK, DOUBLE 203C
+EXCLAMATION MARK, INVERTED 00A1
+exclamation mark, latin letter 01C3
+EXCLAMATION MARK, QUESTION 2048
+EXCLAMATION MARK ORNAMENT, HEAVY 2762
+EXCLAMATION QUESTION MARK 2049
+EXISTS, THERE 2203
+Extended Additional, Latin 1E00
+Extended Arabic 0671
+Extended Cyrillic 048C
+Extended for Minnan and Hakka, Chinese Bopomofo 31A0
+Extended Greek 1F00
+Extended-A, Latin 0100
+Extended-B, Latin 0180
+extension, arrows 23AF
+EXTENSION, HORIZONTAL LINE 23AF
+EXTENSION, INTEGRAL 23AE
+EXTENSION, VERTICAL LINE 23D0
+Extension A, CJK Unified Ideographs 3400
+Extensions, Cyrillic 0450
+Extensions, IPA 0250
+Extensions, Katakana Phonetic 31F0
+Extensions, Special Characters 23AE
+Extensions for Sanskrit and Tibetan, Mongolian 1880
+Extensions for Vietnamese, Latin 1EA0
+EZH, LATIN CAPITAL LETTER 01B7
+EZH, LATIN SMALL LETTER 0292
+EZH REVERSED, LATIN SMALL LETTER 01B9
+F, SCRIPT CAPITAL 2131
+F, TURNED CAPITAL 2132
+F WITH HOOK, LATIN SMALL LETTER 0192
+FACE, BLACK SMILING 263B
+FACE, POSTAL MARK 3020
+FACE, WHITE FROWNING 2639
+FACE, WHITE SMILING 263A
+FACSIMILE SIGN 213B
+factorial 0021
+FAHRENHEIT, DEGREE 2109
+FALLING DIAGONAL SLASH, SQUARED 29C5
+FALLING DOTS, MINUS SIGN WITH 2A2B
+feet 2032
+FEMALE SIGN 2640
+FEMININE ORDINAL INDICATOR 00AA
+FENCE, DOTTED 2999
+FENCE, LEFT DOUBLE WIGGLY 29DA
+FENCE, LEFT WIGGLY 29D8
+FENCE, RIGHT DOUBLE WIGGLY 29DB
+FENCE, RIGHT WIGGLY 29D9
+Fences 2999
+Fences 29D8
+Fifths, Fractions 2155
+FIGURE DASH 2012
+FIGURE SPACE 2007
+file separator 001C
+FILE SEPARATOR, SYMBOL FOR 241C
+Finger Dingbats, Pointing Index 261A
+finite function, z notation 20E6
+finite function, z notation 21FB
+finite injection, z notation 2915
+FINITE PART INTEGRAL 2A0D
+finite relation, z notation 21FC
+finite surjection, z notation 2901
+finite surjective injection, z notation 2918
+FIRST QUARTER MOON 263D
+first transfinite cardinal (countable) 2135
+Fish Tails 297C
+FISHEYE 25C9
+fist 261E
+FIVE, LATIN SMALL LETTER TONE 01BD
+FIVE POINTED STAR, ARABIC 066D
+FLAG, BLACK 2691
+FLAT SIGN, MUSIC 266D
+FLOOR, LEFT 230A
+FLORAL HEART BULLET, REVERSED ROTATED 2619
+florin currency symbol 0192
+folder 0192
+FOOT, SQUARE 23CD
+FOONOTE MARKER, ARABIC 0602
+FOR ALL 2200
+FORCES 22A9
+FORKING 2ADC
+Forks 2AD9
+Form and Chart Components 2500
+form feed 000C
+form feed 21A1
+FORM FEED, SYMBOL FOR 240C
+Format Control, Syriac 070F
+Format Controls, Mongolian 180B
+FORMATTING, POP DIRECTIONAL 202C
+Formatting Characters 200C
+Formatting Characters 2028
+Formatting Controls, Bidirectional 202A
+forward difference 2206
+FOUR DOTS ABOVE, COMBINING 20DC
+FOUR-PER-EM SPACE 2005
+fourier transform 2131
+fourth derivative 20DC
+FOURTH ROOT 221C
+fourth transfinite cardinal 2138
+Fourths, Fractions 00BC
+FRACTION NUMERATOR ONE 215F
+FRACTION ONE HALF, VULGAR 00BD
+FRACTION ONE QUARTER, VULGAR 00BC
+FRACTION SLASH 2044
+FRACTION THREE QUARTERS, VULGAR 00BE
+Fractions 2153
+FRAGMENT, ARABIC TAIL FE73
+framus, white 29D6
+FRANC SIGN, FRENCH 20A3
+FRICATIVE, LATIN LETTER PHARYNGEAL VOICED 0295
+FROWN 2322
+FROWNING FACE, WHITE 2639
+FULL BLOCK 2588
+FULL OUTER JOIN 27D7
+FULL STOP 002E
+FULL STOP, ARABIC 06D4
+FULL STOP, ARMENIAN 0589
+FULL STOP, ETHIOPIC 1362
+full stop, georgian 0589
+FULL STOP, IDEOGRAPHIC 3002
+FULL STOP, MONGOLIAN 1803
+Fullwidth ASCII Variants FF01
+Fullwidth Brackets FF5F
+Fullwidth Forms, Halfwidth and FF00
+Fullwidth Symbol Variants FFE0
+FUNCTION, CIRCULATION 2A10
+function, gamma 0393
+function, z notation finite 20E6
+function, z notation finite 21FB
+function, z notation partial 21F8
+FUNCTION APPLICATION 2061
+function symbol 0192
+fvs 180B
+G, LATIN LETTER SMALL CAPITAL 0262
+G, LATIN SMALL LETTER SCRIPT 0261
+G, SCRIPT SMALL 210A
+G, TURNED SANS-SERIF CAPITAL 2141
+game 2141
+GAMMA, DOUBLE-STRUCK CAPITAL 213E
+GAMMA, DOUBLE-STRUCK SMALL 213D
+GAMMA, LATIN CAPITAL LETTER 0194
+GAMMA, LATIN SMALL LETTER 0263
+gamma, latin small letter baby 0264
+GAMMA, MODIFIER LETTER SMALL 02E0
+gamma function 0393
+GB 2312 (Chinese), Based on 3100
+GEMINI 264A
+General Punctuation 2000
+General Scripts Area 0000
+GENERIC MATERIALS, RECYCLING SYMBOL FOR 267A
+Generic punctuation for Philippine scripts 1735
+GEOMETRIC PROPORTION 223A
+Geometric Shapes 25A0
+GEOMETRICALLY EQUAL TO 2251
+GEOMETRICALLY EQUIVALENT TO 224E
+Georgian 10A0
+Georgian Capital Letters 10A0
+georgian comma 00B7
+georgian full stop 0589
+GEORGIAN PARAGRAPH SEPARATOR 10FB
+Georgian Small Letters 10D0
+german mark 2133
+GERMAN PENNY SIGN 20B0
+GETA MARK 3013
+GIMEL SYMBOL 2137
+GLEICH STARK 29E6
+glottal stop 02BC
+GLOTTAL STOP, LATIN LETTER 0294
+GLOTTAL STOP, LATIN LETTER INVERTED 0296
+glottal stop, latin letter reversed 0295
+GLOTTAL STOP, MODIFIER LETTER 02C0
+GLOTTAL STOP, MODIFIER LETTER REVERSED 02C1
+GLOTTAL STOP, MODIFIER LETTER SMALL REVERSED 02E4
+Go Markers 2686
+Golden Number Runes 16EE
+GRAPHEME JOINER, COMBINING 034F
+Graphic Characters, Terminal 23B7
+Graphic Characters, Terminal 2596
+Graphic Pictures for Control Codes 2400
+Graphics, Control Code 25F0
+Graphics, Scan Lines For Terminal 23BA
+Graphics for Control Codes 237B
+grave, spacing 0060
+GRAVE ACCENT 0060
+GRAVE ACCENT, COMBINING 0300
+GRAVE ACCENT, COMBINING DOUBLE 030F
+GRAVE ACCENT, DEVANAGARI 0953
+GRAVE ACCENT, MODIFIER LETTER 02CB
+GRAVE ACCENT, MODIFIER LETTER LOW 02CE
+grave accent, swedish 02DF
+GRAVE ACCENT BELOW, COMBINING 0316
+GRAVE TONE MARK, COMBINING 0340
+GREATER-THAN, CIRCLED 29C1
+GREATER-THAN, DOUBLE NESTED 2AA2
+GREATER-THAN, DOUBLE-LINE EQUAL TO OR 2A9A
+GREATER-THAN, DOUBLE-LINE SLANTED EQUAL TO OR 2A9C
+GREATER-THAN, LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE 2A8B
+GREATER-THAN, LESS-THAN ABOVE SIMILAR ABOVE 2A8F
+GREATER-THAN, MUCH 226B
+GREATER-THAN, SIMILAR OR 2A9E
+GREATER-THAN, SLANTED EQUAL TO OR 2A96
+GREATER-THAN, TRIPLE NESTED 2AF8
+GREATER-THAN, VERY MUCH 22D9
+GREATER-THAN ABOVE DOUBLE-LINE EQUAL, LESS-THAN ABOVE 2A91
+GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN 2A8C
+GREATER-THAN ABOVE EQUALS SIGN, SIMILAR ABOVE 2AA0
+GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL 2A92
+GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN 2A90
+GREATER-THAN ABOVE SIMILAR OR EQUAL 2A8E
+GREATER-THAN ABOVE SLANTED EQUAL, LESS-THAN ABOVE SLANTED EQUAL ABOVE 2A93
+GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL 2A94
+GREATER-THAN AND NOT APPROXIMATE 2A8A
+GREATER-THAN AND SINGLE-LINE NOT EQUAL TO 2A88
+GREATER-THAN BESIDE LESS-THAN 2AA5
+GREATER-THAN CLOSED BY CURVE 2AA7
+GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL 2AA9
+GREATER-THAN OR APPROXIMATE 2A86
+GREATER-THAN OR EQUAL TO 2265
+GREATER-THAN OR EQUAL TO, DOUBLE-LINE SLANTED 2AFA
+GREATER-THAN OR SLANTED EQUAL TO 2A7E
+GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE 2A82
+GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT 2A84
+GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE 2A80
+GREATER-THAN OVERLAPPING LESS-THAN 2AA4
+GREATER-THAN SIGN 003E
+GREATER-THAN WITH CIRCLE INSIDE 2A7A
+GREATER-THAN WITH DOT INSIDE, SLANTED EQUAL TO OR 2A98
+GREATER-THAN WITH QUESTION MARK ABOVE 2A7C
+Greek, Diacritics for 0342
+Greek, Extended 1F00
+Greek and Coptic 0370
+Greek Capital Letters 0391
+greek currency 20AF
+GREEK DIALYTIKA TONOS, COMBINING 0344
+greek enotikon 203F
+GREEK KORONIS, COMBINING 0343
+greek middle dot 00B7
+greek non-spacing iota below 0345
+GREEK PERISPOMENI, COMBINING 0342
+GREEK QUESTION MARK 037E
+GREEK SMALL LETTER IOTA, TURNED 2129
+Greek Small Letters 03B1
+Greek Symbols 03D0
+GREEK YPOGEGRAMMENI, COMBINING 0345
+group lock 21F0
+group separator 001D
+GROUP SEPARATOR, SYMBOL FOR 241D
+guarded area, end of 0097
+guarded area, start of 0096
+gui icons 231A
+guillemet, left pointing 00AB
+guillemet, left pointing single 2039
+guillemet, right pointing 00BB
+guillemet, right pointing single 203A
+Gujarati 0A80
+Gujarati Digits 0AE6
+Gujarati Letters 0A85
+GUJARATI RUPEE SIGN 0AF1
+Gurmukhi 0A00
+Gurmukhi Digits 0A66
+Gurmukhi Letters 0A05
+H, BLACK-LETTER CAPITAL 210C
+H, COMBINING LATIN SMALL LETTER 036A
+H, DOUBLE-STRUCK CAPITAL 210D
+H, LATIN LETTER SMALL CAPITAL 029C
+H, LATIN SMALL LETTER TURNED 0265
+H, MODIFIER LETTER SMALL 02B0
+H, SCRIPT CAPITAL 210B
+hacek, combining 030C
+hacek, modifier letter 02C7
+HAIR SPACE 200A
+Hakka, Chinese Bopomofo Extended for Minnan and 31A0
+halant, bengali 09CD
+halant, devanagari 094D
+HALF, COMBINING DOUBLE TILDE LEFT FE22
+HALF, COMBINING LIGATURE LEFT FE20
+HALF, VULGAR FRACTION ONE 00BD
+HALF CIRCLE, MULTIPLICATION SIGN IN LEFT 2A34
+HALF CIRCLE, MULTIPLICATION SIGN IN RIGHT 2A35
+HALF CIRCLE, PLUS SIGN IN LEFT 2A2D
+HALF CIRCLE, PLUS SIGN IN RIGHT 2A2E
+HALF FILL SPACE, IDEOGRAPHIC 303F
+HALF INTEGRAL, TOP 2320
+Half Marks, Combining FE20
+HALF RING, MODIFIER LETTER CENTRED LEFT 02D3
+HALF RING, MODIFIER LETTER LEFT 02BF
+HALF RING BELOW, COMBINING LEFT 031C
+HALF RING BELOW, COMBINING RIGHT 0339
+HALF TRIANGULAR COLON, MODIFIER LETTER 02D1
+Halfwidth and Fullwidth Forms FF00
+Halfwidth Japanese Katakana Variants FF61
+Halfwidth Korean Hangul Variants FFA0
+hamiltonian function 210B
+HAMMER AND SICKLE 262D
+Han Ideographs 4E00
+HAND, VICTORY 270C
+HAND, WRITING 270D
+Hand Symbols, Pointing 261A
+Hangul, Based on KS C 5601 (Korean) 3130
+HANGUL CHOSEONG FILLER 115F
+Hangul Compatibility Jamo, Korean 3130
+Hangul Elements, Circled Korean 3260
+Hangul Elements, Parenthesized Korean 3200
+HANGUL FILLER 3164
+Hangul Jamo Combining Alphabet, Korean 1100
+HANGUL JUNGSEONG FILLER 1160
+Hangul Syllables, Circled Korean 326E
+Hangul Syllables, Parenthesized Korean 320E
+Hangul Syllables Area, Korean AC00
+Hangul Variants, Halfwidth Korean FFA0
+Hangzhou-style Numerals 3021
+Hanunoo 1720
+HANUNOO SIGN PAMUDPOD 1734
+Hanunóo-specific punctuation 1734
+HARPOON ABOVE, COMBINING LEFT 20D0
+hasant 09CD
+hash 0023
+hat 0302
+hat 2229
+have a nice day! 263A
+Hazard Dingbats 2620
+heading, start of 0001
+HEADING, SYMBOL FOR START OF 2401
+Heart Ornaments 2763
+HEAVY BALLOT X 2718
+HEAVY CHECK MARK 2714
+HEAVY MULTIPLICATION X 2716
+Hebrew 0590
+Hebrew Cantillation Marks 0591
+hebrew currency 20AA
+Hebrew Letters 05D0
+Hebrew Points 05B0
+Hebrew Presentation Forms FB1D
+HELM SYMBOL 2388
+HERMITIAN CONJUGATE MATRIX 22B9
+Hexagram Symbols, Yijing 4DC0
+hiding, z notation schema 29F9
+High Surrogates D800
+HIGH VOLTAGE SIGN 26A1
+HIGH-REVERSED-9 QUOTATION MARK, DOUBLE 201F
+HIGH-REVERSED-9 QUOTATION MARK, SINGLE 201B
+higher rank than 227B
+hilbert space 210C
+Hiragana, Based on JIS X 0208 (Japanese) 3040
+HIRAGANA DIGRAPH YORI 309F
+HIRAGANA ITERATION MARK 309D
+histogram marker 25AE
+Historic Letters, Cyrillic 0460
+home 21B8
+home 21F1
+HOMOTHETIC 223B
+HOMOTHETIC ABOVE, COMBINING 034B
+Honorific Signs, Arabic 0610
+HOOK, MODIFIER LETTER RHOTIC 02DE
+hook, nasal 0328
+HOOK ABOVE, COMBINING 0309
+HOOK BELOW, COMBINING PALATALIZED 0321
+HOOK BELOW, COMBINING RETROFLEX 0322
+HORIZONTAL BAR 2015
+HORIZONTAL BAR, CIRCLE WITH 29B5
+HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE, TRIPLE 2A68
+HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE, TRIPLE 2A69
+HORIZONTAL ELLIPSIS 2026
+HORIZONTAL ELLIPSIS, MIDLINE 22EF
+HORIZONTAL LINE EXTENSION 23AF
+HORIZONTAL RULE, LOZENGE DIVIDED BY 27E0
+horizontal tabulation 0009
+HORIZONTAL TABULATION, SYMBOL FOR 2409
+HORN, COMBINING 031B
+HORN, LATIN SMALL LETTER RAMS 0264
+HOT BEVERAGE 2615
+HOT SPRINGS 2668
+HOURGLASS 231B
+HOURGLASS, BLACK 29D7
+HOURGLASS, WHITE 29D6
+Hours, Telegraph Symbols for 3358
+HOUSE 2302
+HV, LATIN SMALL LETTER 0195
+HWAIR, LATIN CAPITAL LETTER 01F6
+HYPHEN 2010
+HYPHEN, ARMENIAN 058A
+hyphen, discretionary 00AD
+HYPHEN, KATAKANA-HIRAGANA DOUBLE 30A0
+HYPHEN, NON-BREAKING 2011
+HYPHEN, SOFT 00AD
+HYPHEN BULLET 2043
+hyphen or minus sign 002D
+HYPHEN-MINUS 002D
+HYPHENATION POINT 2027
+hyphus 002D
+HYSTERESIS SYMBOL 238E
+I, BLACK-LETTER CAPITAL 2111
+I, COMBINING LATIN SMALL LETTER 0365
+I, DOUBLE-STRUCK ITALIC SMALL 2148
+I, LATIN LETTER SMALL CAPITAL 026A
+I, LATIN SMALL LETTER DOTLESS 0131
+I, SCRIPT CAPITAL 2110
+I, SUPERSCRIPT LATIN SMALL LETTER 2071
+I WITH DOT ABOVE, LATIN CAPITAL LETTER 0130
+IBM CJK Compatibility Ideographs FA0E
+icons, gui 231A
+identical and parallel to 2A68
+IDENTICAL TO 2261
+IDENTICAL TO AND SLANTED PARALLEL 29E5
+IDENTICAL WITH DOT ABOVE 2A67
+Ideographic Annotation, Japanese Kanbun 3190
+IDEOGRAPHIC CLOSING MARK 3006
+IDEOGRAPHIC COMMA 3001
+Ideographic Description Characters 2FF0
+IDEOGRAPHIC FULL STOP 3002
+IDEOGRAPHIC HALF FILL SPACE 303F
+IDEOGRAPHIC ITERATION MARK 3005
+IDEOGRAPHIC ITERATION MARK, VERTICAL 303B
+IDEOGRAPHIC NUMBER ZERO 3007
+IDEOGRAPHIC SPACE 3000
+Ideographic Tone Marks 302A
+Ideographs, Circled 3280
+Ideographs, CJK Compatibility F900
+Ideographs, CJK Unified 4E00
+Ideographs, Enclosed CJK Letters and 3200
+Ideographs, Han 4E00
+Ideographs, IBM CJK Compatibility FA0E
+Ideographs, Parenthesized 3220
+Ideographs Area, CJK 3400
+Ideographs Extension A, CJK Unified 3400
+IDLE, SYMBOL FOR SYNCHRONOUS 2416
+idle, synchronous 0016
+IJ, LATIN SMALL LIGATURE 0133
+IMAGE OF 22B7
+IMAGE OF, SQUARE 228F
+imaginary part 2111
+implies 22A2
+inches 2033
+included in set 2282
+includes in set 2283
+INCOMPLETE INFINITY 29DC
+incorporated, japanese 337F
+INCREASES AS 29E1
+INCREMENT 2206
+independence 2AEB
+independent 2ADD
+independent, not 2ADC
+index 0084
+Index Finger Dingbats, Pointing 261A
+indian currency 20A8
+inferior order to, of 2134
+INFINITY 221E
+INFINITY, INCOMPLETE 29DC
+INFINITY, TIE OVER 29DD
+INFINITY NEGATED WITH VERTICAL BAR 29DE
+INFORMATION SOURCE 2139
+INHIBIT ARABIC FORM SHAPING 206C
+INHIBIT SYMMETRIC SWAPPING 206A
+injection, z notation finite 2915
+injection, z notation finite surjective 2918
+injection, z notation partial 2914
+injection, z notation surjective 2917
+INSERTION POINT, CARET 2041
+INSERTION SYMBOL 2380
+integers, the set of 2124
+INTEGRAL 222B
+INTEGRAL, CLOCKWISE 2231
+INTEGRAL, CLOCKWISE CONTOUR 2232
+INTEGRAL, CONTOUR 222E
+INTEGRAL, DOUBLE 222C
+integral, riemann 211B
+INTEGRAL, SURFACE 222F
+INTEGRAL, TOP HALF 2320
+INTEGRAL, TRIPLE 222D
+INTEGRAL, VOLUME 2230
+Integrals, Summations and 2A0A
+INTERCALATE 22BA
+INTERIOR PRODUCT 2A3C
+INTERIOR PRODUCT, RIGHTHAND 2A3D
+interleave 2AF4
+Interlinear Annotation FFF9
+Internal Codes, Process FDD0
+International Phonetic Alphabet 0250
+INTERROBANG 203D
+INTERSECTION 2229
+INTERSECTION, DOUBLE 22D2
+INTERSECTION, INTEGRAL WITH 2A19
+INTERSECTION, N-ARY 22C2
+intersection, proper 22D4
+INTERSECTION, TRANSVERSAL 2ADB
+INTERSECTION OPERATOR, N-ARY SQUARE 2A05
+INTERSECTION WITH DOT 2A40
+Intersections and Unions 2A40
+introducer, control sequence 009B
+introducer, single character 009A
+Inverse Numbers, Circled 2776
+INVERTED BREVE, COMBINING 0311
+INVERTED BREVE, COMBINING DOUBLE 0361
+INVERTED BREVE BELOW, COMBINING 032F
+INVERTED BRIDGE BELOW, COMBINING 033A
+INVERTED DOUBLE ARCH BELOW, COMBINING 032B
+INVERTED EXCLAMATION MARK 00A1
+INVERTED GLOTTAL STOP, LATIN LETTER 0296
+INVERTED LAZY S 223E
+INVERTED OHM SIGN 2127
+INVERTED QUESTION MARK 00BF
+INVERTED R, LATIN LETTER SMALL CAPITAL 0281
+INVERTED R, MODIFIER LETTER SMALL CAPITAL 02B6
+INVERTED UNDERTIE 2054
+Invisible Operators 2063
+IOTA, LATIN CAPITAL LETTER 0196
+IOTA, LATIN SMALL LETTER 0269
+IOTA, TURNED GREEK SMALL LETTER 2129
+iota below, greek non-spacing 0345
+IPA, Diacritics for 0346
+IPA Extensions 0250
+IR 181, Electrotechnical Symbols from 238D
+iran, symbol of 262B
+irish punt 00A3
+ISCII 1988 (Devanagari), Based on 0901
+ISO 8859-1 (Latin-1), Based on 00A0
+ISO 8859-2, -3, -4, -9 (European Latin), Based on 0100
+ISO 8859-5 (Cyrillic), Based on 0400
+ISO 8859-6 (Arabic), Based on 0600
+ISO 8859-7 (Greek), Based on 0370
+ISO 8859-8 (Hebrew), Based on 05D0
+ISO 9995-7, Keyboard Symbols from 2380
+ISO 9995-7, Keyboard Symbols from 2396
+israeli currency 20AA
+italian currency 20A4
+Italic Mathematical Symbols, Double-Struck 2145
+ITC Zapf Dingbats Series 100 2700
+ITERATION MARK, HIRAGANA 309D
+ITERATION MARK, IDEOGRAPHIC 3005
+ITERATION MARK, KATAKANA 30FD
+ITERATION MARK, VERTICAL IDEOGRAPHIC 303B
+ivy leaf 2767
+J, DOUBLE-STRUCK ITALIC SMALL 2149
+J, MODIFIER LETTER SMALL 02B2
+jack 2749
+Jamo, Korean Hangul Compatibility 3130
+Jamo Combining Alphabet, Korean Hangul 1100
+Japanese Chess Symbols 2616
+Japanese Era Names 337B
+Japanese Hiragana 3040
+japanese incorporated 337F
+JAPANESE INDUSTRIAL STANDARD SYMBOL 3004
+Japanese Kanbun (Ideographic Annotation) 3190
+Japanese Katakana 30A0
+Japanese Katakana, Circled 32D0
+Japanese Katakana Variants, Halfwidth FF61
+Japanese Katakana Words, Squared 3300
+japanese kome 203B
+JERUSALEM, CROSS OF 2629
+jis composition circle 20DD
+JIS X 0208, Based on 3040
+JIS X 0213 Compatibility Ideographs FA30
+JOIN 2A1D
+JOIN, FULL OUTER 27D7
+JOIN, LEFT OUTER 27D5
+JOIN, RIGHT OUTER 27D6
+JOINER, COMBINING GRAPHEME 034F
+JOINER, WORD 2060
+JOINER, ZERO WIDTH 200D
+jot, apl 2218
+JUPITER 2643
+justification, character tabulation with 0089
+K, LATIN SMALL LETTER TURNED 029E
+kabusiki-gaisya 337F
+Kana Repeat Marks 3031
+Kanbun (Ideographic Annotation), Japanese 3190
+Kangxi Radicals 2F00
+Kannada 0C80
+Kannada Digits 0CE6
+Kannada Letters 0C85
+Katakana, Circled Japanese 32D0
+Katakana, Japanese 30A0
+KATAKANA DIGRAPH KOTO 30FF
+KATAKANA ITERATION MARK 30FD
+KATAKANA MIDDLE DOT 30FB
+Katakana Phonetic Extensions 31F0
+Katakana Variants, Halfwidth Japanese FF61
+Katakana Words, Squared Japanese 3300
+KATAKANA-HIRAGANA DOUBLE HYPHEN 30A0
+KATAKANA-HIRAGANA PROLONGED SOUND MARK 30FC
+KATAKANA-HIRAGANA VOICED SOUND MARK 309B
+KATAKANA-HIRAGANA VOICED SOUND MARK, COMBINING 3099
+KELVIN SIGN 212A
+ket 27E7
+key, clear 2327
+key, command 2318
+key, delete to the left 232B
+key, delete to the right 2326
+key, enter 2324
+KEY, OPTION 2325
+KEY SYMBOL, ALTERNATIVE 2387
+KEY SYMBOL, DECIMAL SEPARATOR 2396
+KEYBOARD 2328
+Keyboard Symbols 2324
+Keyboard Symbols from ISO 9995-7 2380
+Keyboard Symbols from ISO 9995-7 2396
+Keyboard and UI Symbols 23CE
+KEYCAP, COMBINING ENCLOSING 20E3
+Khmer 1780
+Khmer Digits 17E0
+Khmer Lunar Date Symbols 19E0
+Khmer Symbols 19E0
+Khmer Symbols for Divination Lore 17F0
+KIP SIGN 20AD
+kome, japanese 203B
+Komi Letters, Cyrillic 0500
+Koranic Annotation Signs 06D6
+korean currency 20A9
+Korean Hangul Compatibility Jamo 3130
+Korean Hangul Elements, Circled 3260
+Korean Hangul Elements, Parenthesized 3200
+Korean Hangul Jamo Combining Alphabet 1100
+Korean Hangul Syllables, Circled 326E
+Korean Hangul Syllables, Parenthesized 320E
+Korean Hangul Syllables Area AC00
+Korean Hangul Variants, Halfwidth FFA0
+KOREAN STANDARD SYMBOL 327F
+KORONIS, COMBINING GREEK 0343
+KOTO, KATAKANA DIGRAPH 30FF
+KRA, LATIN SMALL LETTER 0138
+KS C 5601 (Korean Hangul), Based on 3130
+L, LATIN LETTER SMALL CAPITAL 029F
+L, MODIFIER LETTER SMALL 02E1
+L, REVERSED SANS-SERIF CAPITAL 2143
+L, SCRIPT CAPITAL 2112
+L, SCRIPT SMALL 2113
+L, TURNED SANS-SERIF CAPITAL 2142
+L B BAR SYMBOL 2114
+L WITH MIDDLE DOT, LATIN SMALL LETTER 0140
+L WITH MIDDLE TILDE, LATIN SMALL LETTER 026B
+lambda bar, latin letter 019B
+Lao 0E80
+Lao Digits 0ED0
+Lao Letters 0E81
+laotian currency 20AD
+laplace operator 2206
+laplace operator 2207
+laplace symbol 2112
+LARGE AND, SLOPING 2A58
+large bowtie 2A1D
+LARGE DOWN TACK 27D9
+LARGE LEFT TRIANGLE OPERATOR 2A1E
+LARGE OR, SLOPING 2A57
+LARGE TRIPLE VERTICAL BAR OPERATOR 2AFC
+LARGE UP TACK 27D8
+LARGER THAN 2AAB
+LARGER THAN OR EQUAL TO 2AAD
+LAST QUARTER MOON 263E
+LATERAL CLICK, LATIN LETTER 01C1
+Latin, Based on ISO 8859-2, -3, -4, -9 (European) 0100
+Latin, C0 Controls and Basic 0000
+Latin, European 0100
+Latin Abbreviations, Squared 3371
+LATIN CAPITAL LETTER N WITH LONG RIGHT LEG 0220
+Latin Capital Letters 0041
+LATIN CROSS 271D
+Latin Extended Additional 1E00
+Latin Extended-A 0100
+Latin Extended-B 0180
+Latin Extensions for Vietnamese 1EA0
+Latin Letters, Circled 24B6
+Latin Letters, Parenthesized 249C
+Latin Letters, Phonetic Modifiers Derived from 02B0
+Latin Ligatures FB00
+Latin Small Letters 0061
+Latin Small Letters, Combining 0363
+Latin-1, ISO 8859-1 aka 00A0
+Latin-1 Supplement, C1 Controls and 0080
+lazy s 223D
+LAZY S, INVERTED 223E
+LEADER, ONE DOT 2024
+leader, three dot 2026
+LEADER, TWO DOT 2025
+leaf, aldus 2766
+leaf, ivy 2767
+LEFT-TO-RIGHT EMBEDDING 202A
+LEFT-TO-RIGHT MARK 200E
+LEFT-TO-RIGHT OVERRIDE 202D
+leftward tab 21E4
+LEG, LATIN CAPITAL LETTER N WITH LONG RIGHT 0220
+LENTICULAR BRACKET, LEFT BLACK 3010
+LENTICULAR BRACKET, LEFT WHITE 3016
+LEO 264C
+LESS-THAN, CIRCLED 29C0
+LESS-THAN, DOUBLE NESTED 2AA1
+LESS-THAN, DOUBLE-LINE EQUAL TO OR 2A99
+LESS-THAN, DOUBLE-LINE SLANTED EQUAL TO OR 2A9B
+LESS-THAN, GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE 2A8C
+LESS-THAN, GREATER-THAN ABOVE SIMILAR ABOVE 2A90
+LESS-THAN, GREATER-THAN BESIDE 2AA5
+LESS-THAN, GREATER-THAN OVERLAPPING 2AA4
+LESS-THAN, MUCH 226A
+LESS-THAN, SIMILAR OR 2A9D
+LESS-THAN, SLANTED EQUAL TO OR 2A95
+LESS-THAN, TRIPLE NESTED 2AF7
+LESS-THAN, VERY MUCH 22D8
+LESS-THAN ABOVE DOUBLE-LINE EQUAL, GREATER-THAN ABOVE 2A92
+LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN 2A8B
+LESS-THAN ABOVE EQUALS SIGN, SIMILAR ABOVE 2A9F
+LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL 2A91
+LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN 2A8F
+LESS-THAN ABOVE SIMILAR OR EQUAL 2A8D
+LESS-THAN ABOVE SLANTED EQUAL, GREATER-THAN ABOVE SLANTED EQUAL ABOVE 2A94
+LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL 2A93
+LESS-THAN AND NOT APPROXIMATE 2A89
+LESS-THAN AND SINGLE-LINE NOT EQUAL TO 2A87
+LESS-THAN CLOSED BY CURVE 2AA6
+LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL 2AA8
+LESS-THAN OR APPROXIMATE 2A85
+LESS-THAN OR EQUAL TO 2264
+LESS-THAN OR EQUAL TO, DOUBLE-LINE SLANTED 2AF9
+LESS-THAN OR SLANTED EQUAL TO 2A7D
+LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE 2A81
+LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT 2A83
+LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE 2A7F
+LESS-THAN SIGN 003C
+LESS-THAN WITH CIRCLE INSIDE 2A79
+LESS-THAN WITH DOT INSIDE, SLANTED EQUAL TO OR 2A97
+LESS-THAN WITH QUESTION MARK ABOVE 2A7B
+LESS-THAN WITH UNDERBAR, DOUBLE NESTED 2AA3
+Letterlike Symbols 2100
+level 2 lock 21EB
+level 3 lock 21EF
+level 3 select 21EE
+LEZH, LATIN SMALL LETTER 026E
+lf 000A
+LIABILITY SIGN, LIMITED 32CF
+LIBRA 264E
+ligature ae, latin small 00E6
+LIGATURE IJ, LATIN SMALL 0133
+LIGATURE LEFT HALF, COMBINING FE20
+LIGATURE OE, LATIN SMALL 0153
+ligature tie 0361
+Ligatures, Armenian FB13
+Ligatures, Latin FB00
+LIGHTNING 2607
+LIMIT, APPROACHES THE 2250
+Limbu 1900
+Limbu Digits 1946
+LIMITED LIABILITY SIGN 32CF
+LINE, AEGEAN WORD SEPARATOR 10100
+line, beginning of 2310
+LINE, CENTRELINE LOW FE4E
+LINE, COMBINING DOUBLE LOW 0333
+LINE, COMBINING LOW 0332
+LINE, DASHED LOW FE4D
+LINE, DOUBLE LOW 2017
+LINE, DOUBLE VERTICAL 2016
+LINE, LOW 005F
+LINE, MODIFIER LETTER LOW VERTICAL 02CC
+LINE, MODIFIER LETTER VERTICAL 02C8
+line, new 21B5
+line, next 0085
+LINE, VERTICAL 007C
+LINE, WAVY 2307
+LINE, WAVY LOW FE4F
+LINE ABOVE, COMBINING DOUBLE VERTICAL 030E
+LINE ABOVE, COMBINING VERTICAL 030D
+LINE BELOW, COMBINING DOUBLE VERTICAL 0348
+LINE BELOW, COMBINING VERTICAL 0329
+line down, partial 008B
+line feed 000A
+line feed 21B4
+line feed, reverse 008D
+LINE FEED, SYMBOL FOR 240A
+line marker 2319
+LINE OVERLAY, COMBINING LONG VERTICAL 20D2
+LINE OVERLAY, COMBINING SHORT VERTICAL 20D3
+LINE SEPARATOR 2028
+LINE SYMBOL, CENTRE 2104
+line tabulation set 008A
+line up, partial 008C
+LINE WITH MIDDLE DOT, VERTICAL 237F
+Linear B Ideograms 10080
+Linear B Syllabary 10000
+Lines For Terminal Graphics, Scan 23BA
+Lira, Italian 00A3
+LIRA SIGN 20A4
+liter 2113
+Livonian, Additions for 022A
+LOCATION SIGN, TELEPHONE 2706
+lock, caps 21EA
+lock, caps 21EC
+lock, group 21F0
+lock, level 2 21EB
+lock, level 3 21EF
+lock, numerics 21ED
+Logic Operators, Modal 27E0
+LOGICAL AND 2227
+LOGICAL AND, CURLY 22CF
+LOGICAL AND, INTERSECTION WITH 2A44
+LOGICAL AND, N-ARY 22C0
+LOGICAL AND OPERATOR, TWO 2A07
+Logical Ands and Ors 2A51
+LOGICAL OR 2228
+LOGICAL OR, CURLY 22CE
+LOGICAL OR, N-ARY 22C1
+LOGICAL OR, UNION WITH 2A45
+LOGICAL OR OPERATOR, TWO 2A08
+long 0304
+Long Arrows 27F5
+long cross 2020
+long dash 2015
+LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL 2AE6
+LONG HORIZONTAL STROKE, CONTAINS WITH 22FA
+LONG HORIZONTAL STROKE, ELEMENT OF WITH 22F2
+LONG LEFT TACK 27DE
+LONG RIGHT LEG, LATIN CAPITAL LETTER N WITH 0220
+LONG RIGHT TACK 27DD
+LONG S, LATIN SMALL LETTER 017F
+long slash overlay 0338
+LONG SOLIDUS OVERLAY, COMBINING 0338
+LONG STROKE OVERLAY, COMBINING 0336
+LONG VERTICAL LINE OVERLAY, COMBINING 20D2
+LORRAINE, CROSS OF 2628
+LOW ACUTE ACCENT, MODIFIER LETTER 02CF
+LOW ASTERISK 204E
+low double comma quotation mark 201E
+LOW DOUBLE PRIME QUOTATION MARK 301F
+LOW GRAVE ACCENT, MODIFIER LETTER 02CE
+LOW LINE 005F
+LOW LINE, CENTRELINE FE4E
+LOW LINE, COMBINING 0332
+LOW LINE, COMBINING DOUBLE 0333
+LOW LINE, DASHED FE4D
+LOW LINE, DOUBLE 2017
+LOW LINE, WAVY FE4F
+LOW MACRON, MODIFIER LETTER 02CD
+low single comma quotation mark 201A
+Low Surrogates DC00
+LOW VERTICAL LINE, MODIFIER LETTER 02CC
+LOW-9 QUOTATION MARK, DOUBLE 201E
+LOW-9 QUOTATION MARK, SINGLE 201A
+lower rank than 227A
+LOZENGE 25CA
+LOZENGE, BLACK 29EB
+LOZENGE, SQUARE 2311
+LOZENGE DIVIDED BY HORIZONTAL RULE 27E0
+lre 202A
+lrm 200E
+lro 202D
+M, COMBINING LATIN SMALL LETTER 036B
+M, LATIN CAPITAL LETTER TURNED 019C
+M, LATIN SMALL LETTER TURNED 026F
+M, SCRIPT CAPITAL 2133
+m-matrix 2133
+MACRON 00AF
+MACRON, COMBINING 0304
+MACRON, MODIFIER LETTER 02C9
+MACRON, MODIFIER LETTER LOW 02CD
+macron, spacing 00AF
+MACRON BELOW, COMBINING 0331
+Malayalam 0D00
+Malayalam Digits 0D66
+Malayalam Letters 0D05
+MALE SIGN 2642
+MALTESE CROSS 2720
+Manchu Letters, Mongolian 1873
+Map Markers 2690
+mapping, bijective 2916
+maps from 27FB
+maps from 2906
+maps to 27FC
+maps to 2905
+maps to 2907
+mark, german 2133
+marker, histogram 25AE
+Markers, Go 2686
+Markers, Map 2690
+mars 2642
+MASCULINE ORDINAL INDICATOR 00BA
+MASU MARK 303C
+MATERIALS, RECYCLING SYMBOL FOR GENERIC 267A
+Mathematical Brackets 27E6
+Mathematical Operators 2200
+Mathematical Operators, Supplemental 2A00
+MATHEMATICAL SPACE, MEDIUM 205F
+Mathematical Symbols, Double-Struck Italic 2145
+Mathematical Symbols-A, Miscellaneous 27C0
+Mathematical Symbols-B, Miscellaneous 2980
+MATRIX, HERMITIAN CONJUGATE 22B9
+MEASURED ANGLE 2221
+Measured Angles, Angles and 299B
+MEASURED BY 225E
+Medieval Superscript Letter Diacritics 0363
+medium, end of 0019
+MEDIUM, SYMBOL FOR END OF 2419
+MEDIUM MATHEMATICAL SPACE 205F
+MEDIUM SMALL SQUARE, BLACK 25FE
+MEDIUM SMALL SQUARE, WHITE 25FD
+MEDIUM SQUARE, BLACK 25FC
+MEDIUM SQUARE, WHITE 25FB
+MEMBER, CONTAINS AS 220B
+MEMBER, SMALL CONTAINS AS 220D
+MEMBER OF DOUBLE VERTICAL, LONG DASH FROM LEFT 2AE6
+MEMBERSHIP, Z NOTATION BAG 22FF
+MERCURY 263F
+merge 2A07
+message, privacy 009E
+message waiting 0095
+mho 2127
+MICRO SIGN 00B5
+mid space 2005
+MIDDLE DOT 00B7
+middle dot, greek 00B7
+MIDDLE DOT, KATAKANA 30FB
+MIDDLE DOT, LATIN SMALL LETTER L WITH 0140
+MIDDLE DOT, VERTICAL LINE WITH 237F
+MIDDLE TILDE, LATIN CAPITAL LETTER O WITH 019F
+MIDDLE TILDE, LATIN SMALL LETTER L WITH 026B
+MIDLINE HORIZONTAL ELLIPSIS 22EF
+midpoint 00B7
+MILL SIGN 20A5
+MILLE SIGN, PER 2030
+milreis 0024
+minim 264F
+minim (alternate glyph) 264D
+Minnan and Hakka, Chinese Bopomofo Extended for 31A0
+MINUS, CIRCLED 2296
+MINUS, DOT 2238
+MINUS, SET 2216
+MINUS, SQUARED 229F
+MINUS, SUBSCRIPT 208B
+MINUS, SUPERSCRIPT 207B
+MINUS SIGN 2212
+MINUS SIGN, COMMERCIAL 2052
+minus sign, hyphen or 002D
+MINUS SIGN, MODIFIER LETTER 02D7
+MINUS SIGN, UNION WITH 2A41
+MINUS SIGN BELOW, COMBINING 0320
+MINUS SIGN IN TRIANGLE 2A3A
+Minus Sign Operators, Plus and 2A22
+MINUS SIMILAR, SIMILAR 2A6C
+MINUS TILDE 2242
+MINUS-OR-PLUS SIGN 2213
+minutes 2032
+MINY 29FF
+Miscellaneous Mathematical Symbols-A 27C0
+Miscellaneous Mathematical Symbols-B 2980
+Miscellaneous Symbols 2600
+Miscellaneous Symbols and Arrows 2B00
+Miscellaneous Technical 2300
+MISRA, ARABIC SIGN 060F
+mmsp 205F
+Modal Logic Operators 27E0
+MODELS 22A7
+Modifier Letters, Spacing 02B0
+MODULO TWO SUM 2A0A
+Mongolian 1800
+MONGOLIAN COLON 1804
+MONGOLIAN COMMA 1802
+mongolian currency 20AE
+Mongolian Digits 1810
+Mongolian Extensions for Sanskrit and Tibetan 1880
+Mongolian Format Controls 180B
+MONGOLIAN FULL STOP 1803
+Mongolian Manchu Letters 1873
+Mongolian Sibe Letters 185D
+Mongolian Todo Letters 1843
+Monogram and Digram Symbols, Yijing 268C
+Monogram Symbol, Tai Xuan Jing 1D300
+MONOSTABLE SYMBOL 238D
+MONTH SIGN, TAMIL 0BF4
+Months, Enclosed CJK Letters and 3200
+Months, Telegraph Symbols for 32C0
+MOON, FIRST QUARTER 263D
+MOON, LAST QUARTER 263E
+most positive 223E
+MUCH GREATER-THAN 226B
+MUCH GREATER-THAN, VERY 22D9
+MUCH LESS-THAN 226A
+MUCH LESS-THAN, VERY 22D8
+MULTIMAP 22B8
+MULTIMAP, DOUBLE-ENDED 29DF
+MULTIMAP, LEFT 27DC
+MULTIPLICATION, MULTISET 228D
+Multiplication and Division Sign Operators 2A2F
+MULTIPLICATION SIGN 00D7
+MULTIPLICATION SIGN BELOW, SUBSET WITH 2AC1
+MULTIPLICATION SIGN BELOW, SUPERSET WITH 2AC2
+MULTIPLICATION X 2715
+MULTIPLICATION X, HEAVY 2716
+MULTISET 228C
+MULTISET MULTIPLICATION 228D
+MULTISET UNION 228E
+MUSIC FLAT SIGN 266D
+MUSIC NATURAL SIGN 266E
+MUSIC SHARP SIGN 266F
+Musical Symbols 2669
+mutton 2003
+mutton quad 2001
+mvs 180E
+Myanmar 1000
+Myanmar Digits 1040
+N, DOUBLE-STRUCK CAPITAL 2115
+N, LATIN LETTER SMALL CAPITAL 0274
+N WITH LONG RIGHT LEG, LATIN CAPITAL LETTER 0220
+N-ARY COPRODUCT 2210
+n-ary dijkstra choice 2AFF
+N-ARY INTERSECTION 22C2
+N-ARY LOGICAL AND 22C0
+N-ARY LOGICAL OR 22C1
+N-ary Operators 2A00
+N-ARY PRODUCT 220F
+N-ARY SUMMATION 2211
+N-ARY SUMMATION, DOUBLE-STRUCK 2140
+N-ARY UNION 22C3
+N-ARY WHITE VERTICAL BAR 2AFF
+NABLA 2207
+NAIRA SIGN 20A6
+NAND 22BC
+nang 0323
+NARROW NO-BREAK SPACE 202F
+nasal hook 0328
+NATIONAL DIGIT SHAPES 206E
+natural number 2115
+NATURAL SIGN, MUSIC 266E
+nbsp 0080
+necessarily satisfies 2AF1
+NEGATED WITH VERTICAL BAR, INFINITY 29DE
+negation 20D3
+NEGATION SLASH, DOES NOT DIVIDE WITH REVERSED 2AEE
+negative acknowledge 0015
+negative acknowledge, graphic for 237B
+NEGATIVE ACKNOWLEDGE, SYMBOL FOR 2415
+NEPTUNE 2646
+never (modal operator) 27E1
+never (modal operator), was 27E2
+never be (modal operator), will 27E3
+new line 21B5
+NEW SHEQEL SIGN 20AA
+NEWLINE, SYMBOL FOR 2424
+next line 0085
+NEXT PAGE 2398
+NIB, BLACK 2712
+nigerian currency 20A6
+nim-addition 2A27
+nnbsp 202F
+no break here 0083
+no break space, graphic for 237D
+NO-BREAK SPACE 00A0
+NO-BREAK SPACE, NARROW 202F
+NO-BREAK SPACE, ZERO WIDTH FEFF
+NODE, ASCENDING 260A
+NODE, DESCENDING 260B
+NOMINAL DIGIT SHAPES 206F
+NON-BREAKING HYPHEN 2011
+non-breaking space 00A0
+NON-JOINER, ZERO WIDTH 200C
+non-theorem 22A3
+Noncharacters FDD0
+Noncharacters FFFE
+Noncharacters 1FFFE
+Noncharacters 2FFFE
+Noncharacters 3FFFE
+Noncharacters 4FFFE
+Noncharacters 5FFFE
+Noncharacters 6FFFE
+Noncharacters 7FFFE
+Noncharacters 8FFFE
+Noncharacters 9FFFE
+Noncharacters AFFFE
+Noncharacters BFFFE
+Noncharacters CFFFE
+Noncharacters DFFFE
+Noncharacters EFFFE
+Noncharacters FFFFE
+Noncharacters 10FFFE
+NONFORKING 2ADD
+NOR 22BD
+NORMAL SUBGROUP, CONTAINS AS 22B3
+NORMAL SUBGROUP OF 22B2
+not 223C
+Not a Character FFFE
+Not a Character FFFF
+NOT ALMOST EQUAL TO, PRECEDES ABOVE 2AB9
+NOT ALMOST EQUAL TO, SUCCEEDS ABOVE 2ABA
+NOT AN ELEMENT OF 2209
+NOT APPROXIMATE, GREATER-THAN AND 2A8A
+NOT APPROXIMATE, LESS-THAN AND 2A89
+NOT CHECK MARK 237B
+NOT DIVIDE WITH REVERSED NEGATION SLASH, DOES 2AEE
+NOT EQUAL TO 2260
+NOT EQUAL TO, GREATER-THAN AND SINGLE-LINE 2A88
+NOT EQUAL TO, LESS-THAN AND SINGLE-LINE 2A87
+NOT EQUAL TO, PRECEDES ABOVE 2AB5
+NOT EQUAL TO, PRECEDES ABOVE SINGLE-LINE 2AB1
+NOT EQUAL TO, SUBSET OF ABOVE 2ACB
+NOT EQUAL TO, SUCCEEDS ABOVE 2AB6
+NOT EQUAL TO, SUCCEEDS ABOVE SINGLE-LINE 2AB2
+NOT EQUAL TO, SUPERSET OF ABOVE 2ACC
+not independent 2ADC
+NOT SIGN 00AC
+NOT SIGN, DOUBLE STROKE 2AEC
+NOT SIGN, REVERSED 2310
+NOT SIGN, REVERSED DOUBLE STROKE 2AED
+NOT SIGN, TURNED 2319
+NOT TILDE ABOVE, COMBINING 034A
+not yield, does 22A3
+NOTE, EIGHTH 266A
+NOTE, QUARTER 2669
+NOTES, BEAMED EIGHTH 266B
+NOTES, BEAMED SIXTEENTH 266C
+null 0000
+NULL, SYMBOL FOR 2400
+null set 2205
+number, natural 2115
+Number Forms 2150
+Number Runes, Golden 16EE
+NUMBER SIGN 0023
+NUBMER SIGN, ARABIC 0600
+NUMBER SIGN, TAMIl 0BFA
+number symbol, real 210A
+NUMBER ZERO, IDEOGRAPHIC 3007
+Numbers, Aegean 10100
+Numbers, Circled 2460
+Numbers, Circled 3251
+Numbers, Circled 32B1
+Numbers, Circled Inverse 2776
+Numbers, Double Circled 24F5
+Numbers, Parenthesized 2474
+numbers, the set of complex 2102
+numbers, the set of rational 211A
+numbers, the set of real 211D
+Numbers, White On Black Circled 24EB
+Numbers Period 2488
+Numerals, Hangzhou-style 3021
+Numerals, Old Italic 10320
+Numerals, Roman 2160
+NUMERATOR ONE, FRACTION 215F
+numerics lock 21ED
+NUMERO SIGN 2116
+nut 2002
+O, COMBINING LATIN SMALL LETTER 0366
+o, latin capital letter barred 019F
+O, LATIN CAPITAL LETTER OPEN 0186
+O, LATIN SMALL LETTER BARRED 0275
+O, LATIN SMALL LETTER OPEN 0254
+O, SCRIPT SMALL 2134
+o bar 019F
+o bar 0275
+o e, latin small letter 0153
+O WITH MIDDLE TILDE, LATIN CAPITAL LETTER 019F
+obelisk 2020
+obelisk, double 2021
+OBJECT REPLACEMENT CHARACTER FFFC
+OCR, Optical Character Recognition 2440
+octothorpe 0023
+OE, LATIN LETTER SMALL CAPITAL 0276
+OE, LATIN SMALL LIGATURE 0153
+Ogham 1680
+OGHAM SPACE MARK 1680
+OGONEK 02DB
+OGONEK, COMBINING 0328
+OHM SIGN 2126
+OHM SIGN, INVERTED 2127
+OI, LATIN SMALL LETTER 01A3
+OM, DEVANAGARI 0950
+OMEGA, LATIN SMALL LETTER CLOSED 0277
+ONE, FRACTION NUMERATOR 215F
+ONE, SUPERSCRIPT 00B9
+ONE DOT LEADER 2024
+ONE HALF, VULGAR FRACTION 00BD
+ONE QUARTER, VULGAR FRACTION 00BC
+OPEN BOX 2423
+OPEN BOX, SHOULDERED 237D
+OPEN E, LATIN CAPITAL LETTER 0190
+OPEN E, LATIN SMALL LETTER 025B
+OPEN E, LATIN SMALL LETTER CLOSED 029A
+OPEN E, LATIN SMALL LETTER CLOSED REVERSED 025E
+OPEN E, LATIN SMALL LETTER REVERSED 025C
+OPEN O, LATIN CAPITAL LETTER 0186
+OPEN O, LATIN SMALL LETTER 0254
+opening brace 007B
+opening curly bracket 007B
+opening parenthesis 0028
+opening square bracket 005B
+operating system command 009D
+OPERATOR, ASTERISK 2217
+OPERATOR, BULLET 2219
+OPERATOR, CIRCLED ASTERISK 229B
+OPERATOR, CIRCLED DOT 2299
+OPERATOR, CIRCLED RING 229A
+OPERATOR, DIAMOND 22C4
+OPERATOR, DOT 22C5
+OPERATOR, RING 2218
+OPERATOR, SQUARED DOT 22A1
+OPERATOR, STAR 22C6
+OPERATOR, TILDE 223C
+Operators, Database Theory 27D5
+Operators, Invisible 2063
+Operators, Mathematical 2200
+Operators, Modal Logic 27E0
+Operators, Multiplication and Division Sign 2A2F
+Operators, N-Ary 2A00
+Operators, Plus and Minus Sign 2A22
+Operators, Relational 2A66
+Operators, Specialized plus sign 29FA
+Operators, Supplemental Mathematical 2A00
+Operators, Vertical Line 2AEE
+OPPOSITION 260D
+Optical Character Recognition (OCR) 2440
+OPTION KEY 2325
+OR, CURLY LOGICAL 22CE
+OR, DOUBLE LOGICAL 2A54
+OR, LOGICAL 2228
+OR, N-ARY LOGICAL 22C1
+OR, SLOPING LARGE 2A57
+OR, TWO INTERSECTING LOGICAL 2A56
+OR, UNION WITH LOGICAL 2A45
+OR OPERATOR, TWO LOGICAL 2A08
+OR WITH DOT ABOVE, LOGICAL 2A52
+OR WITH DOUBLE OVERBAR, LOGICAL 2A62
+OR WITH DOUBLE UNDERBAR, LOGICAL 2A63
+OR WITH HORIZONTAL DASH, LOGICAL 2A5D
+OR WITH MIDDLE STEM, LOGICAL 2A5B
+order 2134
+ORDINAL INDICATOR, FEMININE 00AA
+ORDINAL INDICATOR, MASCULINE 00BA
+ordinarily satisfies 2AE2
+ORIGIN, DIMENSION 2331
+ORIGINAL OF 22B6
+ORIGINAL OF, SQUARE 2290
+Oriya 0B00
+Oriya Digits 0B66
+Oriya Letters 0B05
+Ornamental Angle Quotation Marks 276E
+Ornamental Brackets 2768
+Ornamental Brackets 2770
+Ornaments, Heart 2763
+Ornaments, Punctuation 275B
+ORNATE LEFT PARENTHESIS FD3E
+ors, logical ands and 2A51
+ORTHODOX CROSS 2626
+orthogonal to 22A5
+Osmanya 10480
+Osmanya Digits 104A0
+OU, LATIN SMALL LETTER 0223
+OUNCE SIGN 2125
+OUTER JOIN, FULL 27D7
+OUTER JOIN, LEFT 27D5
+OUTER JOIN, RIGHT 27D6
+OUTLINE, SQUARE WITH CONTOURED 29E0
+OVER INFINITY, TIE 29DD
+OVER TOP SQUARE BRACKET, BOTTOM SQUARE BRACKET 23B6
+overbar, apl 00AF
+OVERLAPPING LESS-THAN, GREATER-THAN 2AA4
+OVERLAPPING LOGICAL AND, LOGICAL OR 2A59
+OVERLAY, COMBINING CLOCKWISE RING 20D9
+OVERLAY, COMBINING DOUBLE VERTICAL STROKE 20E6
+OVERLAY, COMBINING LEFTWARDS ARROW 20EA
+OVERLAY, COMBINING LONG SOLIDUS 0338
+OVERLAY, COMBINING LONG STROKE 0336
+OVERLAY, COMBINING LONG VERTICAL LINE 20D2
+OVERLAY, COMBINING REVERSE SOLIDUS 20E5
+OVERLAY, COMBINING RING 20D8
+OVERLAY, COMBINING SHORT SOLIDUS 0337
+OVERLAY, COMBINING SHORT STROKE 0335
+OVERLAY, COMBINING SHORT VERTICAL LINE 20D3
+OVERLAY, COMBINING TILDE 0334
+overlay, long slash 0338
+overlay, short slash 0337
+overline 00AF
+OVERLINE 203E
+OVERLINE, CENTRELINE FE4A
+OVERLINE, COMBINING 0305
+OVERLINE, COMBINING DOUBLE 033F
+OVERLINE, DASHED FE49
+OVERLINE, DOUBLE WAVY FE4C
+OVERLINE, WAVY FE4B
+OVERRIDE, LEFT-TO-RIGHT 202D
+OVERRIDE, RIGHT-TO-LEFT 202E
+overscore 0305
+overscore, spacing 203E
+Overscores and Underscores FE49
+Overstruck Diacritics 0334
+oxia 0301
+P, DOUBLE-STRUCK CAPITAL 2119
+P, SCRIPT CAPITAL 2118
+PAGE, NEXT 2398
+PAGE, PREVIOUS 2397
+page down 21DF
+page up 21DE
+PALATALIZED HOOK BELOW, COMBINING 0321
+PAMUDPOD, HANUNOO SIGN 1734
+PAPER SYMBOL, PARTIALLY-RECYCLED 267D
+PAPER SYMBOL, RECYCLED 267C
+PARAGRAPH SEPARATOR 2029
+PARAGRAPH SEPARATOR, GEORGIAN 10FB
+paragraph separator, urdu 203B
+paragraph sign 00B6
+paragraph sign, european 00A7
+PARAGRAPH SIGN ORNAMENT, CURVED STEM 2761
+PARALLEL, CIRCLED 29B7
+PARALLEL, EQUALS SIGN AND SLANTED 29E3
+PARALLEL, IDENTICAL TO AND SLANTED 29E5
+PARALLEL TO 2225
+parallel to, identical and 2A68
+PARALLEL WITH HORIZONTAL STROKE 2AF2
+PARALLEL WITH TILDE ABOVE, EQUALS SIGN AND SLANTED 29E4
+PARALLEL WITH TILDE OPERATOR 2AF3
+PARALLELOGRAM, BLACK 25B0
+parenthesis, closing 0029
+PARENTHESIS, LEFT 0028
+parenthesis, opening 0028
+PARENTHESIS, ORNATE LEFT FD3E
+PARENTHESIS, RIGHT 0029
+PARENTHESIS, SUBSCRIPT LEFT 208D
+PARENTHESIS, SUPERSCRIPT LEFT 207D
+Parenthesized Ideographs 3220
+Parenthesized Korean Hangul Elements 3200
+Parenthesized Korean Hangul Syllables 320E
+Parenthesized Latin Letters 249C
+Parenthesized Numbers 2474
+PART ALTERNATION MARK 303D
+PART INTEGRAL, FINITE 2A0D
+parted rule 00A6
+PARTIAL DIFFERENTIAL 2202
+partial function, z notation 21F8
+partial injection, z notation 2914
+partial line down 008B
+partial line up 008C
+partial relation, z notation 21F9
+partial surjection, z notation 2900
+PARTIALLY-RECYCLED PAPER SYMBOL 267D
+PARTNERSHIP SIGN 3250
+Parts, Summation Sign 23B2
+pdf 202C
+PEACE SYMBOL 262E
+PENCIL, UPPER RIGHT 2710
+Pencil Dingbats 270E
+PENNY SIGN, GERMAN 20B0
+per 2118
+PER MILLE SIGN 2030
+PER TEN THOUSAND SIGN 2031
+PERCENT SIGN 0025
+PERCENT SIGN, ARABIC 066A
+PERCUSSIVE, LATIN LETTER BIDENTAL 02AD
+PERCUSSIVE, LATIN LETTER BILABIAL 02AC
+period 002E
+PERISPOMENI, COMBINING GREEK 0342
+perpendicular 22A5
+PERPENDICULAR, CIRCLED 29B9
+PERPENDICULAR WITH S 2AE1
+Persian and Urdu, Eastern Arabic-Indic Digits for 06F0
+PERSPECTIVE 2306
+PESETA SIGN 20A7
+PESO SIGN 20B1
+PHARYNGEAL VOICED FRICATIVE, LATIN LETTER 0295
+PHI, LATIN SMALL LETTER 0278
+Philippine Scripts, Generic Punctuation For 1735
+Phonetic Alphabet, International 0250
+Phonetic Extensions 1D00
+Phonetic Extensions, Katakana 31F0
+Phonetic Extensions, non-IPA 1D00
+Phonetic Extensions for Ainu 31F0
+Phonetic Modifiers Derived from Latin Letters 02B0
+Phonetics and Symbols Area, CJK 2E00
+phonorecord sign 2117
+PI, DOUBLE-STRUCK CAPITAL 213F
+pi, mathematical constant 03C0
+Pictures for Control Codes, Graphic 2400
+Pieces, Bracket 239B
+Pieces, Bracket 23B0
+PILCROW SIGN 00B6
+PILCROW SIGN, REVERSED 204B
+Pinyin Diacritic-vowel Combinations 01CD
+pipe 01C0
+pipe, double 01C1
+pipe, double-barred 01C2
+PIPING, Z NOTATION SCHEMA 2A20
+PISCES 2653
+PITCHFORK 22D4
+PITCHFORK WITH TEE TOP 2ADA
+PLACE OF INTEREST SIGN 2318
+plaintiff 226C
+PLANCK CONSTANT 210E
+PLANCK CONSTANT OVER TWO PI 210F
+Planet Symbols 263F
+Playing Card Suits 2660
+PLUS, CIRCLED 2295
+PLUS, DOT 2214
+PLUS, DOUBLE 29FA
+PLUS, N-ARY UNION OPERATOR WITH 2A04
+PLUS, SQUARED 229E
+PLUS, TRIPLE 29FB
+Plus and Minus Sign Operators 2A22
+PLUS OPERATOR, N-ARY CIRCLED 2A01
+PLUS SIGN 002B
+PLUS SIGN, EQUALS SIGN ABOVE 2A71
+PLUS SIGN, MODIFIER LETTER 02D6
+PLUS SIGN, SUBSCRIPT 208A
+PLUS SIGN, SUPERSCRIPT 207A
+PLUS SIGN ABOVE EQUALS SIGN 2A72
+PLUS SIGN BELOW, COMBINING 031F
+PLUS SIGN BELOW, SUBSET WITH 2ABF
+PLUS SIGN BELOW, SUPERSET WITH 2AC0
+PLUS SIGN IN LEFT HALF CIRCLE 2A2D
+PLUS SIGN IN RIGHT HALF CIRCLE 2A2E
+PLUS SIGN IN TRIANGLE 2A39
+Plus Sign Operators, Specialized 29FA
+PLUS-MINUS SIGN 00B1
+PLUTO 2647
+POETIC VERSE SIGN, ARABIC 060E
+POINT OPERATOR, INTEGRAL AROUND A 2A15
+Pointers 25BA
+Points, Arabic 064B
+Points, Hebrew 05B0
+poison 2620
+Political Symbols, Religious and 2626
+POP DIRECTIONAL FORMATTING 202C
+POSITION INDICATOR 2316
+positive, most 223E
+positive difference, sum or 2A26
+positive difference or sum 2A24
+POSTAL MARK 3012
+POSTAL MARK, CIRCLED 3036
+POSTAL MARK FACE 3020
+pound sign 0023
+POUND SIGN 00A3
+pound sterling 00A3
+pounds 2114
+power set 2118
+PRECEDES 227A
+PRECEDES, DOUBLE 2ABB
+PRECEDES ABOVE ALMOST EQUAL TO 2AB7
+PRECEDES ABOVE EQUALS SIGN 2AB3
+PRECEDES ABOVE NOT ALMOST EQUAL TO 2AB9
+PRECEDES ABOVE NOT EQUAL TO 2AB5
+PRECEDES ABOVE SINGLE-LINE EQUALS SIGN 2AAF
+PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO 2AB1
+PRECEDES UNDER RELATION 22B0
+PRESCRIPTION TAKE 211E
+Presentation Forms, Alphabetic FB00
+Presentation Forms, Hebrew FB1D
+Presentation Forms-A, Arabic FB50
+Presentation Forms-B, Arabic FE70
+PREVIOUS PAGE 2397
+PRIME 2032
+PRIME, DOUBLE 2033
+PRIME, MODIFIER LETTER 02B9
+PRIME, MODIFIER LETTER DOUBLE 02BA
+PRIME, QUADRUPLE 2057
+PRIME, REVERSED 2035
+PRIME, REVERSED DOUBLE 2036
+PRIME, REVERSED TRIPLE 2037
+PRIME, TRIPLE 2034
+PRIME QUOTATION MARK, DOUBLE 301E
+PRIME QUOTATION MARK, LOW DOUBLE 301F
+PRIME QUOTATION MARK, REVERSED DOUBLE 301D
+PRINT SCREEN SYMBOL 2399
+privacy message 009E
+Private Use Area E000
+Private Use Area-A, Supplementary F0000
+Private Use Area-B, Supplementary 100000
+private use one 0091
+private use two 0092
+PRODUCT, CLOSED UNION WITH SERIFS AND SMASH 2A50
+product, direct 2299
+PRODUCT, INTERIOR 2A3C
+PRODUCT, LEFT SEMIDIRECT 22CB
+PRODUCT, N-ARY 220F
+PRODUCT, RIGHTHAND INTERIOR 2A3D
+PRODUCT, SHUFFLE 29E2
+PRODUCT, SMASH 2A33
+product, tensor 2297
+PRODUCT, VECTOR OR CROSS 2A2F
+PRODUCT, WREATH 2240
+PRODUCT WITH BOTTOM CLOSED, SEMIDIRECT 2A32
+PROFILE, ALL AROUND- 232E
+prohibition 20E0
+PROJECTION, Z NOTATION SCHEMA 2A21
+PROJECTIVE 2305
+PROOF, END OF 220E
+PROPERTY LINE 214A
+PROPORTION 2237
+PROPORTION, GEOMETRIC 223A
+PROPORTIONAL TO 221D
+proportional to, varies with 223C
+proves 22A2
+psili 0313
+published 2117
+pullback 27D3
+Punctuation, CJK Symbols and 3000
+Punctuation, General 2000
+Punctuation, Hanunóo-Specific 1734
+Punctuation, Katakana 30A0
+PUNCTUATION, PHILIPPINE DOUBLE 1736
+PUNCTUATION, PHILIPPINE SINGLE 1735
+Punctuation For Philippine Scripts, Generic 1735
+Punctuation For Vertical Text, Double 2047
+Punctuation Ornaments 275B
+PUNCTUATION SPACE 2008
+punt, irish 00A3
+purna viram 0964
+pushout 27D4
+Q, DOUBLE-STRUCK CAPITAL 211A
+Q, ROTATED CAPITAL 213A
+QAF, ARABIC LETTER DOTLESS 066F
+qed 220E
+QUAD, EM 2001
+QUAD, EN 2000
+quad, mutton 2001
+Quadrants 2596
+quadrature 25A1
+QUADRUPLE INTEGRAL OPERATOR 2A0C
+QUADRUPLE PRIME 2057
+quantic 226C
+QUARTER MOON, FIRST 263D
+QUARTER MOON, LAST 263E
+QUARTER NOTE 2669
+Quarters, Fractions 00BC
+QUATERNION INTEGRAL OPERATOR 2A16
+QUESTION EXCLAMATION MARK 2048
+QUESTION MARK 003F
+QUESTION MARK, ARABIC 061F
+QUESTION MARK, ARMENIAN 055E
+QUESTION MARK, DOUBLE 2047
+QUESTION MARK, ETHIOPIC 1367
+QUESTION MARK, EXCLAMATION 2049
+QUESTION MARK, GREEK 037E
+QUESTION MARK, INVERTED 00BF
+QUESTION MARK ABOVE, GREATER-THAN WITH 2A7C
+QUESTION MARK ABOVE, LESS-THAN WITH 2A7B
+QUESTIONED EQUAL TO 225F
+QUILL, LEFT SQUARE BRACKET WITH 2045
+Quine Corners 231C
+quotation dash 2015
+QUOTATION MARK 0022
+quotation mark, double comma 201D
+QUOTATION MARK, DOUBLE HIGH-REVERSED-9 201F
+QUOTATION MARK, DOUBLE LOW-9 201E
+QUOTATION MARK, DOUBLE PRIME 301E
+quotation mark, double reversed comma 201F
+quotation mark, double turned comma 201C
+QUOTATION MARK, LEFT DOUBLE 201C
+QUOTATION MARK, LEFT SINGLE 2018
+QUOTATION MARK, LEFT-POINTING DOUBLE ANGLE 00AB
+quotation mark, low double comma 201E
+QUOTATION MARK, LOW DOUBLE PRIME 301F
+quotation mark, low single comma 201A
+QUOTATION MARK, REVERSED DOUBLE PRIME 301D
+QUOTATION MARK, RIGHT DOUBLE 201D
+QUOTATION MARK, RIGHT SINGLE 2019
+QUOTATION MARK, RIGHT-POINTING DOUBLE ANGLE 00BB
+quotation mark, single comma 2019
+QUOTATION MARK, SINGLE HIGH-REVERSED-9 201B
+QUOTATION MARK, SINGLE LEFT-POINTING ANGLE 2039
+QUOTATION MARK, SINGLE LOW-9 201A
+quotation mark, single reversed comma 201B
+QUOTATION MARK, SINGLE RIGHT-POINTING ANGLE 203A
+quotation mark, single turned comma 2018
+Quotation Mark Ornaments 275B
+Quotation Marks, Ornamental Angle 276E
+quote, apl 0022
+R, BLACK-LETTER CAPITAL 211C
+R, COMBINING LATIN SMALL LETTER 036C
+R, DOUBLE-STRUCK CAPITAL 211D
+R, LATIN LETTER SMALL CAPITAL 0280
+R, LATIN LETTER SMALL CAPITAL INVERTED 0281
+R, LATIN SMALL LETTER TURNED 0279
+R, MODIFIER LETTER SMALL 02B3
+R, MODIFIER LETTER SMALL CAPITAL INVERTED 02B6
+R, MODIFIER LETTER SMALL TURNED 02B4
+R, SCRIPT CAPITAL 211B
+radial component 27DF
+radical sign 221A
+Radicals, Kangxi 2F00
+Radicals, Yi A490
+Radicals Supplement, CJK 2E80
+RADIOACTIVE SIGN 2622
+RAIN DROPS, UMBRELLA WITH 2614
+rainy weather 2602
+RAMS HORN, LATIN SMALL LETTER 0264
+RANGE ANTIRESTRICTION, Z NOTATION 2A65
+RATIO 2236
+ratio, cross 211E
+rational numbers, the set of 211A
+real number symbol 210A
+real numbers, the set of 211D
+real part 211C
+recipe 211E
+record separator 001E
+RECORD SEPARATOR, SYMBOL FOR 241E
+RECORDER, TELEPHONE 2315
+RECORDING COPYRIGHT, SOUND 2117
+Rectangles 25AC
+RECTANGULAR PATH AROUND POLE, LINE INTEGRATION WITH 2A12
+RECYCLED PAPER SYMBOL 267C
+RECYCLING SYMBOL, BLACK UNIVERSAL 267B
+RECYCLING SYMBOL, UNIVERSAL 2672
+RECYCLING SYMBOL FOR GENERIC MATERIALS 267A
+Recycling Symbols 2672
+Recycling Symbols For Plastics 2673
+reduces to 22A6
+reducible 22A2
+REFERENCE MARK 203B
+registered trade mark sign 00AE
+RELATION, TRIPLE SOLIDUS BINARY 2AFB
+RELATION, TRIPLE VERTICAL BAR BINARY 2AF4
+relation, z notation finite 21FC
+relation, z notation partial 21F9
+RELATIONAL COMPOSITION, Z NOTATION 2A3E
+Relational Operators 2A66
+Relations 29E3
+Relations 2AF7
+Relations, Subset and superset 2ABD
+Religious and Political Symbols 2626
+Repeat Marks, Kana 3031
+REPLACEMENT CHARACTER FFFD
+REPLACEMENT CHARACTER, OBJECT FFFC
+resistance 2126
+RESPONSE 211F
+results in 22A8
+RETROFLEX CLICK, LATIN LETTER 01C3
+retroflex hook, latin small letter d 0256
+RETROFLEX HOOK BELOW, COMBINING 0322
+return, carriage 000D
+return, carriage 21B5
+RETURN, SYMBOL FOR CARRIAGE 240D
+RETURN SYMBOL 23CE
+reverse line feed 008D
+REVERSE SOLIDUS 005C
+REVERSE SOLIDUS, BIG 29F9
+REVERSE SOLIDUS, CIRCLED 29B8
+REVERSE SOLIDUS OPERATOR 29F5
+REVERSE SOLIDUS OVERLAY, COMBINING 20E5
+REVERSE SOLIDUS WITH HORIZONTAL STROKE 29F7
+reverse turnstile 22A3
+REVERSED, LATIN SMALL LETTER EZH 01B9
+REVERSED COMMA, MODIFIER LETTER 02BD
+REVERSED COMMA ABOVE, COMBINING 0314
+reversed comma quotation mark, double 201F
+reversed comma quotation mark, single 201B
+REVERSED DOUBLE PRIME 2036
+REVERSED DOUBLE PRIME QUOTATION MARK 301D
+REVERSED DOUBLE STROKE NOT SIGN 2AED
+REVERSED E, LATIN CAPITAL LETTER 018E
+REVERSED E, LATIN SMALL LETTER 0258
+reversed epsilon, latin small letter closed 025E
+REVERSED ESH, LATIN SMALL LETTER SQUAT 0285
+REVERSED ESH LOOP, LATIN LETTER 01AA
+reversed glottal stop, latin letter 0295
+REVERSED GLOTTAL STOP, MODIFIER LETTER 02C1
+REVERSED GLOTTAL STOP, MODIFIER LETTER SMALL 02E4
+REVERSED NEGATION SLASH, DOES NOT DIVIDE WITH 2AEE
+REVERSED NOT SIGN 2310
+REVERSED OPEN E, LATIN SMALL LETTER 025C
+REVERSED OPEN E, LATIN SMALL LETTER CLOSED 025E
+REVERSED PILCROW SIGN 204B
+REVERSED PRIME 2035
+REVERSED SANS-SERIF CAPITAL L 2143
+REVERSED SEMICOLON 204F
+reversed straight epsilon 220D
+REVERSED TILDE 223D
+REVERSED TILDE EQUALS 22CD
+REVERSED TRIPLE PRIME 2037
+RHOTIC HOOK, MODIFIER LETTER 02DE
+riemann integral 211B
+RIGHT ANGLE 221F
+RIGHT ANGLE WITH ARC 22BE
+RIGHT TRIANGLE 22BF
+RIGHT-TO-LEFT EMBEDDING 202B
+RIGHT-TO-LEFT MARK 200F
+RIGHT-TO-LEFT OVERRIDE 202E
+RIGHTHAND INTERIOR PRODUCT 2A3D
+RING, BENZENE 232C
+RING, MODIFIER LETTER CENTRED LEFT HALF 02D3
+RING, MODIFIER LETTER LEFT HALF 02BF
+RING ABOVE 02DA
+RING ABOVE, COMBINING 030A
+RING BELOW, COMBINING 0325
+RING BELOW, COMBINING LEFT HALF 031C
+RING BELOW, COMBINING RIGHT HALF 0339
+RING EQUAL TO 2257
+RING IN EQUAL TO 2256
+RING OPERATOR 2218
+RING OPERATOR, CIRCLED 229A
+RING OVERLAY, COMBINING 20D8
+RING OVERLAY, COMBINING CLOCKWISE 20D9
+RISING DIAGONAL SLASH, SQUARED 29C4
+RISING DOTS, MINUS SIGN WITH 2A2C
+RISING DOTS, TILDE OPERATOR WITH 2A6B
+rle 202B
+rlm 200F
+rlo 202E
+Roman Numerals 2160
+Romanian, Additions for 0218
+ROOT, CUBE 221B
+ROOT, FOURTH 221C
+ROOT, SQUARE 221A
+ROTATED CAPITAL Q 213A
+rotation 20D5
+rough breathing 0314
+RULE, LOZENGE DIVIDED BY HORIZONTAL 27E0
+rule, parted 00A6
+RULE-DELAYED 29F4
+Runes, Golden Number 16EE
+Runic 16A0
+RUNOUT, TOTAL 2330
+RUPEE MARK, BENGALI 09F2
+RUPEE SIGN 20A8
+RUPEE SIGN, BENGALI 09F3
+RUPEE SIGN, GUJARATI 0AF1
+RUPEE SIGN, TAMIL 0BF9
+Russian Alphabet, Basic 0410
+S, INVERTED LAZY 223E
+S, LATIN SMALL LETTER LONG 017F
+S, LATIN SMALL LETTER SHARP 00DF
+s, lazy 223D
+S, MODIFIER LETTER SMALL 02E2
+S, PERPENDICULAR WITH 2AE1
+S IN TRIANGLE 29CC
+SAFHA, ARABIC SIGN 0603
+SAGITTARIUS 2650
+SALTIRE 2613
+sam 070F
+SANAH, ARABIC SIGN 0601
+SANS-SERIF CAPITAL G, TURNED 2141
+SANS-SERIF CAPITAL L, REVERSED 2143
+SANS-SERIF CAPITAL L, TURNED 2142
+SANS-SERIF CAPITAL Y, TURNED 2144
+Sanskrit and Tibetan, Mongolian Extensions for 1880
+satisfies 22A8
+satisfies, necessarily 2AF1
+satisfies, ordinarily 2AE2
+SATURN 2644
+SCHEMA COMPOSITION, Z NOTATION 2A1F
+schema hiding, z notation 29F9
+SCHEMA PIPING, Z NOTATION 2A20
+SCHEMA PROJECTION, Z NOTATION 2A21
+SCHWA, LATIN CAPITAL LETTER 018F
+SCHWA, LATIN SMALL LETTER 0259
+Scissors Dingbats 2701
+SCORPIUS 264F
+SCREEN, COMBINING ENCLOSING 20E2
+script a, latin small letter 0251
+SCRIPT CAPITAL B 212C
+SCRIPT CAPITAL E 2130
+SCRIPT CAPITAL F 2131
+SCRIPT CAPITAL H 210B
+SCRIPT CAPITAL I 2110
+SCRIPT CAPITAL L 2112
+SCRIPT CAPITAL M 2133
+SCRIPT CAPITAL P 2118
+SCRIPT CAPITAL R 211B
+script f, latin small letter 0192
+SCRIPT G, LATIN SMALL LETTER 0261
+SCRIPT SMALL E 212F
+SCRIPT SMALL G 210A
+SCRIPT SMALL L 2113
+SCRIPT SMALL O 2134
+script v, latin capital letter 01B2
+script v, latin small letter 028B
+Scripts Area, General 0000
+scrolling 21F3
+SCRUPLE 2108
+SEAGULL BELOW, COMBINING 033C
+second transfinite cardinal (the continuum) 2136
+seconds 2033
+SECTION SIGN 00A7
+section sign, european 00B6
+SECTOR 2314
+SEGMENT 2313
+selected area, end of 0087
+selected area, start of 0086
+Selectors, Variation FE00
+SEMICIRCULAR PATH AROUND POLE, LINE INTEGRATION WITH 2A13
+SEMICOLON 003B
+SEMICOLON, ARABIC 061B
+SEMICOLON, ETHIOPIC 1364
+SEMICOLON, REVERSED 204F
+SEMIDIRECT PRODUCT, LEFT 22CB
+SEMIDIRECT PRODUCT WITH BOTTOM CLOSED 2A32
+SEPARATOR DOT, AEGEAN WORD 10101
+SEPARATOR LINE, AEGEAN WORD 10100
+SEPARATOR, ARABIC DECIMAL 066B
+SEPARATOR, ARABIC THOUSANDS 066C
+separator, decimal 002C
+separator, devanagari phrase 0964
+separator, file 001C
+SEPARATOR, GEORGIAN PARAGRAPH 10FB
+separator, group 001D
+SEPARATOR, INVISIBLE 2063
+SEPARATOR, LINE 2028
+SEPARATOR, PARAGRAPH 2029
+separator, record 001E
+SEPARATOR, SYMBOL FOR FILE 241C
+SEPARATOR, SYMBOL FOR GROUP 241D
+SEPARATOR, SYMBOL FOR RECORD 241E
+SEPARATOR, SYMBOL FOR UNIT 241F
+separator, unit 001F
+separator, urdu paragraph 203B
+SEPARATOR KEY SYMBOL, DECIMAL 2396
+sequence concatenation, z notation 2040
+sequence introducer, control 009B
+Serbian Cyrillic Letters, Croatian Digraphs Matching 01C4
+SERIFS, CLOSED INTERSECTION WITH 2A4D
+SERIFS, CLOSED UNION WITH 2A4C
+SERIFS AND SMASH PRODUCT, CLOSED UNION WITH 2A50
+SERIFS AT BOTTOM, TRIANGLE WITH 29CD
+SERVICE MARK 2120
+SESAME DOT FE45
+SESAME DOT, WHITE FE46
+SET, EMPTY 2205
+set, included in 2282
+set, includes in 2283
+set, null 2205
+set, power 2118
+SET MINUS 2216
+set of complex numbers, the 2102
+set of integers, the 2124
+set of rational numbers, the 211A
+set of real numbers, the 211D
+set transmit state 0093
+Sets, Empty 29B0
+sextile 2736
+Shade Characters 2591
+shamrock 2663
+Shapes, Geometric 25A0
+SHARP S, LATIN SMALL LETTER 00DF
+SHARP SIGN, MUSIC 266F
+Shavian 10450
+SHEQEL SIGN, NEW 20AA
+shift 21E7
+shift in 000F
+SHIFT IN, SYMBOL FOR 240F
+shift out 000E
+SHIFT OUT, SYMBOL FOR 240E
+shilling 002F
+SHOGI PIECE, BLACK 2617
+SHOGI PIECE, WHITE 2616
+short 0306
+SHORT DOWN TACK 2ADF
+SHORT DOWN TACK, SHORT UP TACK ABOVE 2AE9
+SHORT DOWN TACK WITH OVERBAR 2AE7
+SHORT I WITH TAIL, CYRILLIC CAPITAL LETTER 048A
+SHORT I WITH TAIL, CYRILLIC SMALL LETTER 048B
+SHORT LEFT TACK 2ADE
+short slash overlay 0337
+SHORT SOLIDUS OVERLAY, COMBINING 0337
+SHORT STROKE OVERLAY, COMBINING 0335
+SHORT UP TACK 2AE0
+SHORT UP TACK ABOVE SHORT DOWN TACK 2AE9
+SHORT UP TACK WITH UNDERBAR 2AE8
+SHORT VERTICAL LINE OVERLAY, COMBINING 20D3
+SHOULDERED OPEN BOX 237D
+SHUFFLE PRODUCT 29E2
+shy 00AD
+Sibe Letters, Mongolian 185D
+Sidelining Emphasis Marks FE45
+SIMILAR, SIMILAR MINUS 2A6C
+SIMILAR ABOVE GREATER-THAN, LESS-THAN ABOVE 2A8F
+SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN 2AA0
+SIMILAR ABOVE LESS-THAN, GREATER-THAN ABOVE 2A90
+SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN 2A9F
+SIMILAR MINUS SIMILAR 2A6C
+SIMILAR OR EQUAL, GREATER-THAN ABOVE 2A8E
+SIMILAR OR EQUAL, LESS-THAN ABOVE 2A8D
+SIMILAR OR GREATER-THAN 2A9E
+SIMILAR OR LESS-THAN 2A9D
+similar to 223C
+SINE WAVE 223F
+single character introducer 009A
+single comma quotation mark 2019
+single comma quotation mark, low 201A
+single guillemet, left pointing 2039
+single guillemet, right pointing 203A
+SINGLE HIGH-REVERSED-9 QUOTATION MARK 201B
+SINGLE LEFT-POINTING ANGLE QUOTATION MARK 2039
+SINGLE LOW-9 QUOTATION MARK 201A
+SINGLE PUNCTUATION, PHILIPPINE 1735
+SINGLE QUOTATION MARK, LEFT 2018
+SINGLE QUOTATION MARK, RIGHT 2019
+single reversed comma quotation mark 201B
+SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 203A
+single shift three 008F
+single shift two 008E
+single turned comma quotation mark 2018
+Sinhala 0D80
+SIX-PER-EM SPACE 2006
+SIXTEENTH NOTES, BEAMED 266C
+Sixths, Fractions 2159
+SKULL AND CROSSBONES 2620
+slash 002F
+SLASH, CIRCLED DIVISION 2298
+SLASH, DIVISION 2215
+SLASH, DOES NOT DIVIDE WITH REVERSED NEGATION 2AEE
+SLASH, FRACTION 2044
+SLASH, INTEGRAL AVERAGE WITH 2A0F
+SLASH, SQUARED FALLING DIAGONAL 29C5
+SLASH, SQUARED RISING DIAGONAL 29C4
+slash overlay, long 0338
+slash overlay, short 0337
+SLOPE 2333
+SLOPING LARGE AND 2A58
+SLOPING LARGE OR 2A57
+Slovenian and Croatian, Additions for 0200
+SMALL CAPITAL B, LATIN LETTER 0299
+SMALL CAPITAL G, LATIN LETTER 0262
+SMALL CAPITAL H, LATIN LETTER 029C
+SMALL CAPITAL I, LATIN LETTER 026A
+SMALL CAPITAL INVERTED R, LATIN LETTER 0281
+SMALL CAPITAL INVERTED R, MODIFIER LETTER 02B6
+SMALL CAPITAL L, LATIN LETTER 029F
+SMALL CAPITAL N, LATIN LETTER 0274
+SMALL CAPITAL OE, LATIN LETTER 0276
+SMALL CAPITAL R, LATIN LETTER 0280
+SMALL CAPITAL Y, LATIN LETTER 028F
+small circle, black 2022
+SMALL CIRCLE, SQUARED 29C7
+SMALL CIRCLE ABOVE, PLUS SIGN WITH 2A22
+SMALL CIRCLE TO THE RIGHT, CIRCLE WITH 29C2
+SMALL CONTAINS AS MEMBER 220D
+SMALL CONTAINS WITH OVERBAR 22FE
+SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22FC
+SMALL D, DOUBLE-STRUCK ITALIC 2146
+SMALL E, DOUBLE-STRUCK ITALIC 2147
+SMALL ELEMENT OF 220A
+SMALL ELEMENT OF WITH OVERBAR 22F7
+SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE 22F4
+Small Form Variants FE50
+SMALL GAMMA, DOUBLE-STRUCK 213D
+SMALL I, DOUBLE-STRUCK ITALIC 2148
+SMALL J, DOUBLE-STRUCK ITALIC 2149
+Small Letters, Armenian 0561
+Small Letters, Combining Latin 0363
+Small Letters, Cyrillic 0430
+Small Letters, Georgian 10D0
+Small Letters, Greek 03B1
+Small Letters, Latin 0061
+SMALL SQUARE, BLACK MEDIUM 25FE
+SMALL SQUARE, WHITE MEDIUM 25FD
+SMALL VEE WITH UNDERBAR 2A61
+SMALLER THAN 2AAA
+SMALLER THAN OR EQUAL TO 2AAC
+SMASH PRODUCT 2A33
+SMASH PRODUCT, CLOSED UNION WITH SERIFS AND 2A50
+SMILE 2323
+SMILING FACE, BLACK 263B
+SMILING FACE, WHITE 263A
+smooth breathing 0313
+Snowflake Dingbats 2744
+Snowflakes, Stars, Asterisks and 2721
+SNOWMAN 2603
+snowy weather 2603
+SOFT HYPHEN 00AD
+SOFTWARE-FUNCTION SYMBOL 2394
+solid 2588
+SOLIDUS 002F
+solidus 2044
+SOLIDUS, BIG 29F8
+SOLIDUS, BIG REVERSE 29F9
+SOLIDUS, CIRCLED REVERSE 29B8
+SOLIDUS, REVERSE 005C
+SOLIDUS BINARY RELATION, TRIPLE 2AFB
+SOLIDUS OPERATOR, DOUBLE 2AFD
+SOLIDUS OPERATOR, REVERSE 29F5
+SOLIDUS OVERLAY, COMBINING LONG 0338
+SOLIDUS OVERLAY, COMBINING REVERSE 20E5
+SOLIDUS OVERLAY, COMBINING SHORT 0337
+SOLIDUS WITH HORIZONTAL STROKE, REVERSE 29F7
+SOLIDUS WITH OVERBAR 29F6
+SOUND RECORDING COPYRIGHT 2117
+SOURCE, INFORMATION 2139
+SPACE 0020
+SPACE, EM 2003
+SPACE, EN 2002
+SPACE, FIGURE 2007
+SPACE, FOUR-PER-EM 2005
+space, graphic for 2422
+space, graphic for 2423
+space, graphic for no break 237D
+SPACE, HAIR 200A
+SPACE, IDEOGRAPHIC 3000
+SPACE, MEDIUM MATHEMATICAL 205F
+space, mid 2005
+SPACE, NARROW NO-BREAK 202F
+SPACE, NO-BREAK 00A0
+SPACE, PUNCTUATION 2008
+SPACE, SIX-PER-EM 2006
+SPACE, SYMBOL FOR 2420
+space, thick 2004
+SPACE, THIN 2009
+SPACE, THREE-PER-EM 2004
+SPACE, ZERO WIDTH 200B
+SPACE, ZERO WIDTH NO-BREAK FEFF
+SPACE MARK, OGHAM 1680
+Spaces 2000
+spacing acute 00B4
+spacing cedilla 00B8
+spacing circumflex 005E
+Spacing Clones of Diacritics 02D8
+spacing diaeresis 00A8
+spacing double underscore 2017
+spacing grave 0060
+spacing macron 00AF
+Spacing Modifier Letters 02B0
+spacing overscore 203E
+spacing underscore 005F
+spanish currency 20A7
+Special character extensions 23AE
+Specialized plus sign operators 29FA
+Specials FFF0
+Specials Area, Compatibility and F900
+SPHERICAL ANGLE 2222
+SPHERICAL ANGLE OPENING LEFT 29A0
+SPHERICAL ANGLE OPENING UP 29A1
+SPOT, Z NOTATION 2981
+SQUARE, BLACK MEDIUM 25FC
+SQUARE, BLACK MEDIUM SMALL 25FE
+SQUARE, COMBINING ENCLOSING 20DE
+SQUARE, VIEWDATA 2317
+SQUARE, WHITE MEDIUM 25FB
+SQUARE, WHITE MEDIUM SMALL 25FD
+SQUARE BELOW, COMBINING 033B
+square bracket, closing 005D
+SQUARE BRACKET, LEFT 005B
+SQUARE BRACKET, LEFT WHITE 301A
+square bracket, opening 005B
+SQUARE BRACKET, RIGHT 005D
+SQUARE BRACKET WITH QUILL, LEFT 2045
+SQUARE CAP 2293
+SQUARE CORPORATION 337F
+SQUARE CUP 2294
+SQUARE FOOT 23CD
+SQUARE IMAGE OF 228F
+SQUARE INTERSECTION, DOUBLE 2A4E
+SQUARE INTERSECTION OPERATOR, N-ARY 2A05
+SQUARE LEFT OPEN BOX OPERATOR 2ACD
+SQUARE LOZENGE 2311
+SQUARE ORIGINAL OF 2290
+SQUARE RIGHT OPEN BOX OPERATOR 2ACE
+SQUARE ROOT 221A
+Square Symbols 29C4
+SQUARE UNION, DOUBLE 2A4F
+SQUARE UNION OPERATOR, N-ARY 2A06
+SQUARE WITH CONTOURED OUTLINE 29E0
+SQUARE WITH LEFTWARDS TICK, WHITE 27E4
+SQUARE WITH RIGHTWARDS TICK, WHITE 27E5
+squared 00B2
+SQUARED DOT OPERATOR 22A1
+Squared Japanese Katakana Words 3300
+Squared Latin Abbreviations 3371
+SQUARED MINUS 229F
+SQUARED PLUS 229E
+SQUARED TIMES 22A0
+Squares 25A0
+SQUAT REVERSED ESH, LATIN SMALL LETTER 0285
+st. andrew's cross 2613
+star 002A
+STAR, ARABIC FIVE POINTED 066D
+STAR, BLACK 2605
+STAR AND CRESCENT 262A
+Star Dingbats 2726
+STAR EQUALS 225B
+STAR OF DAVID 2721
+STAR OPERATOR 22C6
+starburst 273A
+STARK, GLEICH 29E6
+Stars, Asterisks and Snowflakes 2721
+start of guarded area 0096
+start of heading 0001
+START OF HEADING, SYMBOL FOR 2401
+start of selected area 0086
+start of string 0098
+start of text 0002
+START OF TEXT, SYMBOL FOR 2402
+statement is true 22A8
+sterling, pound 00A3
+stile, apl 2223
+straight epsilon 220A
+straight epsilon, reversed 220D
+stress mark 0301
+STRETCHED C, LATIN LETTER 0297
+STRICTLY EQUIVALENT TO 2263
+string, device control 0090
+string, start of 0098
+string terminator 009C
+STROKE OVERLAY, COMBINING LONG 0336
+STROKE OVERLAY, COMBINING SHORT 0335
+SUBGROUP, CONTAINS AS NORMAL 22B3
+SUBGROUP OF, NORMAL 22B2
+subscript, iota 0345
+Subscript Digits 2080
+SUBSCRIPT EQUALS SIGN 208C
+SUBSCRIPT LEFT PARENTHESIS 208D
+SUBSCRIPT MINUS 208B
+SUBSCRIPT PLUS SIGN 208A
+SUBSCRIPT TWO, PLUS SIGN WITH 2A27
+Subscripts 2080
+SUBSET, DOUBLE 22D0
+Subset and Superset Relations 2ABD
+SUBSET OF 2282
+substitute 001A
+SUBSTITUTE, SYMBOL FOR 241A
+SUBSTITUTE FORM TWO, SYMBOL FOR 2426
+Subtending Marks, Arabic 0600
+subtraction, z notation bag 2A41
+SUCCEEDS 227B
+SUCCEEDS, DOUBLE 2ABC
+SUCCEEDS ABOVE ALMOST EQUAL TO 2AB8
+SUCCEEDS ABOVE EQUALS SIGN 2AB4
+SUCCEEDS ABOVE NOT ALMOST EQUAL TO 2ABA
+SUCCEEDS ABOVE NOT EQUAL TO 2AB6
+SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN 2AB0
+SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO 2AB2
+SUCCEEDS UNDER RELATION 22B1
+such that 220B
+such that 2223
+Suits, Playing Card 2660
+sum, direct 2295
+SUM, MODULO TWO 2A0A
+sum, positive difference or 2A24
+sum or positive difference 2A26
+SUMMATION, DOUBLE-STRUCK N-ARY 2140
+SUMMATION, N-ARY 2211
+SUMMATION BOTTOM 23B3
+Summation Sign Parts 23B2
+SUMMATION TOP 23B2
+Summations and Integrals 2A0A
+SUN 2609
+SUN WITH RAYS, BLACK 2600
+SUPERIMPOSED X, CIRCLE WITH 29BB
+SUPERSCRIPT ALEF, ARABIC LETTER 0670
+Superscript Digits 2070
+SUPERSCRIPT EQUALS SIGN 207C
+SUPERSCRIPT LATIN SMALL LETTER I 2071
+SUPERSCRIPT LEFT PARENTHESIS 207D
+Superscript Letter Diacritics, Medieval 0363
+SUPERSCRIPT MINUS 207B
+SUPERSCRIPT ONE 00B9
+SUPERSCRIPT PLUS SIGN 207A
+SUPERSCRIPT THREE 00B3
+SUPERSCRIPT TWO 00B2
+SUPERSCRIPT ZERO 2070
+Superscripts 2070
+Superscripts and Subscripts 2070
+SUPERSET, DOUBLE 22D1
+SUPERSET OF 2283
+Superset Relations, Subset and 2ABD
+Supplemental Arrows-A 27F0
+Supplemental Arrows-B 2900
+Supplemental Mathematical Operators 2A00
+Supplementary, Cyrillic 0500
+Supplementary Private Use Area-A F0000
+Supplementary Private Use Area-B 100000
+SURFACE INTEGRAL 222F
+surjection, z notation finite 2901
+surjection, z notation partial 2900
+surjective injection, z notation 2917
+surjective injection, z notation finite 2918
+Surrogates, High D800
+Surrogates, Low DC00
+Surrogates Area D800
+swedish grave accent 02DF
+SWUNG DASH 2053
+Syllabics, Unified Canadian Aboriginal 1400
+Syllables, Yi A000
+Syllables Area, Korean Hangul AC00
+Symbol Variants, Fullwidth FFE0
+Symbols, Bowtie 29D1
+Symbols, Circle 29B5
+Symbols, Combining Diacritical Marks for 20D0
+Symbols, Dentistry Notation 23BE
+Symbols, Double-Struck Italic Mathematical 2145
+Symbols, Error Bar 29EE
+Symbols, Greek 03D0
+Symbols, Japanese Chess 2616
+Symbols, Letterlike 2100
+Symbols, Miscellaneous 2600
+Symbols, Recycling 2672
+Symbols, Square 29C4
+Symbols, Triangle 29CA
+Symbols and Arrows, Miscellaneous 2B00
+Symbols and Punctuation, CJK 3000
+Symbols Area 2000
+Symbols Area, CJK Phonetics and 2E00
+Symbols for Control Codes, Graphic 2400
+Symbols For Plastics, Recycling 2673
+Symbols-A, Miscellaneous Mathematical 27C0
+Symbols-B, Miscellaneous Mathematical 2980
+symmetric difference 2238
+symmetric difference 2296
+SYMMETRIC SWAPPING, ACTIVATE 206B
+SYMMETRIC SWAPPING, INHIBIT 206A
+SYMMETRY 232F
+synchronous idle 0016
+SYNCHRONOUS IDLE, SYMBOL FOR 2416
+Syriac 0700
+SYRIAC ABBREVIATION MARK 070F
+SYRIAC CROSS, EAST 2671
+SYRIAC CROSS, WEST 2670
+Syriac Format Control 070F
+T, COMBINING LATIN SMALL LETTER 036D
+T, LATIN SMALL LETTER TURNED 0287
+tab 0009
+tab, leftward 21E4
+tab, rightward 21E5
+tab, symbol for 2409
+tab with shift tab 21B9
+tabulation, horizontal 0009
+TABULATION, SYMBOL FOR HORIZONTAL 2409
+TABULATION, SYMBOL FOR VERTICAL 240B
+tabulation, vertical 000B
+tabulation set, character 0088
+tabulation set, line 008A
+tabulation with justification, character 0089
+TACK, LEFT 22A3
+TACK, MODIFIER LETTER UP 02D4
+TACK, RIGHT 22A2
+TACK, UP 22A5
+TACK BELOW, COMBINING LEFT 0318
+TACK BELOW, COMBINING UP 031D
+Tacks and Turnstiles 27D8
+Tacks and Turnstiles 2ADE
+Tagalog 1700
+TAGALOG SIGN VIRAMA 1714
+Tagbanwa 1760
+Tai Le 1950
+Tai Xuan Jing Symbols 1D300
+TAIL FRAGMENT, ARABIC FE73
+Tails, Fish 297C
+tainome (japanese, a kind of bullet) 25C9
+TAKE, PRESCRIPTION 211E
+Tamil 0B80
+Tamil Digits 0BE7
+Tamil Letters 0B85
+TAMIL RUPEE SIGN 0BF9
+TAMIL NUMBER SIGN 0BFA
+Tamil Symbols 0BF3
+TAPE DRIVE 2707
+TAPER, CONICAL 2332
+TAURUS 2649
+tautological equivalent 29E6
+tautology 22A8
+tea 2615
+Technical, Miscellaneous 2300
+TEE TOP, PITCHFORK WITH 2ADA
+Telegraph Symbols for Days 33E0
+Telegraph Symbols for Hours 3358
+Telegraph Symbols for Months 32C0
+TELEPHONE, BLACK 260E
+TELEPHONE LOCATION SIGN 2706
+TELEPHONE RECORDER 2315
+TELEPHONE SIGN 2121
+Telugu 0C00
+Telugu Digits 0C66
+Telugu Letters 0C05
+TEN THOUSAND SIGN, PER 2031
+tensor 20E1
+tensor product 2297
+Terminal graphic characters 23B7
+Terminal Graphic Characters 2596
+Terminal Graphics, Scan Lines For 23BA
+terminator, string 009C
+Tetragram Symbols, Tai Xuan Jing 1D306
+text, end of 0003
+text, start of 0002
+TEXT, SYMBOL FOR END OF 2403
+TEXT, SYMBOL FOR START OF 2402
+Thaana 0780
+Thai 0E00
+THAI CURRENCY SYMBOL BAHT 0E3F
+Thai Digits 0E50
+Thai Letters 0E01
+THERE EXISTS 2203
+THEREFORE 2234
+THERMODYNAMIC 29E7
+thick space 2004
+THIN SPACE 2009
+third derivative 20DB
+third transfinite cardinal (functions of a real variable) 2137
+Thirds, Fractions 2153
+THORN, LATIN CAPITAL LETTER 00DE
+THORN, LATIN SMALL LETTER 00FE
+THOUSANDS SEPARATOR, ARABIC 066C
+THOUSANDS SIGN, CYRILLIC 0482
+THREE, SUPERSCRIPT 00B3
+three dot leader 2026
+THREE DOTS ABOVE, COMBINING 20DB
+THREE QUARTERS, VULGAR FRACTION 00BE
+THREE-PER-EM SPACE 2004
+THUNDERSTORM 2608
+Tibetan 0F00
+Tibetan, Mongolian Extensions for Sanskrit and 1880
+Tibetan Digits 0F20
+Tibetan Letters 0F40
+TICK, WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS 27E2
+TICK, WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS 27E3
+TICK, WHITE SQUARE WITH LEFTWARDS 27E4
+TICK, WHITE SQUARE WITH RIGHTWARDS 27E5
+TIE, CHARACTER 2040
+tie, ligature 0361
+TIE OVER INFINITY 29DD
+TILDE 007E
+tilde, apl 223C
+TILDE, COMBINING 0303
+TILDE, COMBINING DOUBLE 0360
+TILDE, COMBINING VERTICAL 033E
+TILDE, MINUS 2242
+TILDE, REVERSED 223D
+TILDE, SMALL 02DC
+TILDE, TRIPLE 224B
+TILDE ABOVE, COMBINING NOT 034A
+TILDE BELOW, COMBINING 0330
+TILDE EQUALS, REVERSED 22CD
+TILDE LEFT HALF, COMBINING DOUBLE FE22
+TILDE OPERATOR 223C
+TILDE OPERATOR, EQUALS SIGN ABOVE 2A73
+TILDE OPERATOR, PARALLEL WITH 2AF3
+TILDE OPERATOR, SUBSET OF ABOVE 2AC7
+TILDE OPERATOR, SUPERSET OF ABOVE 2AC8
+TILDE OPERATOR WITH DOT ABOVE 2A6A
+TILDE OPERATOR WITH RISING DOTS 2A6B
+TILDE OVERLAY, COMBINING 0334
+TIMES, CIRCLED 2297
+TIMES, DIVISION 22C7
+TIMES, INVISIBLE 2062
+TIMES, SQUARED 22A0
+TIMES OPERATOR, N-ARY 2A09
+TIMES OPERATOR, N-ARY CIRCLED 2A02
+TIMES SIGN, INTEGRAL WITH 2A18
+TIMES WITH LEFT HALF BLACK 29D4
+TIMES WITH RIGHT HALF BLACK 29D5
+TINY 29FE
+TIRONIAN SIGN ET 204A
+TIS 620-2529 (Thai), Based on 0E01
+Todo Letters, Mongolian 1843
+Tone Bar Letters 02E5
+TONE FIVE, LATIN SMALL LETTER 01BD
+TONE MARK, COMBINING ACUTE 0341
+TONE MARK, COMBINING GRAVE 0340
+Tone Marks, Ideographic 302A
+Tone Marks, Vietnamese 0340
+TONE SIX, LATIN SMALL LETTER 0185
+TONE TWO, LATIN SMALL LETTER 01A8
+tonos 0301
+TONOS, COMBINING GREEK DIALYTIKA 0344
+TOP HALF INTEGRAL 2320
+TOP LEFT CORNER 231C
+TOP LEFT CROP 230F
+TORTOISE SHELL BRACKET, LEFT 3014
+TORTOISE SHELL BRACKET, LEFT WHITE 3018
+TOTAL RUNOUT 2330
+TRADE MARK SIGN 2122
+trade mark sign, registered 00AE
+transfinite cardinal, fourth 2138
+transfinite cardinal (countable), first 2135
+transfinite cardinal (functions of a real variable), third 2137
+transfinite cardinal (the continuum), second 2136
+transmission, end of 0004
+transmission, graphic for end of 2301
+TRANSMISSION, SYMBOL FOR END OF 2404
+transmission block, end of 0017
+TRANSMISSION BLOCK, SYMBOL FOR END OF 2417
+transmit state, set 0093
+TRANSVERSAL INTERSECTION 2ADB
+TRIANGLE, COMBINING ENCLOSING UPWARD POINTING 20E4
+TRIANGLE, LOWER LEFT 25FA
+TRIANGLE, LOWER RIGHT 25FF
+TRIANGLE, MINUS SIGN IN 2A3A
+TRIANGLE, MULTIPLICATION SIGN IN 2A3B
+TRIANGLE, PLUS SIGN IN 2A39
+TRIANGLE, PLUS SIGN WITH BLACK 2A28
+TRIANGLE, RIGHT 22BF
+TRIANGLE, UPPER LEFT 25F8
+TRIANGLE, UPPER RIGHT 25F9
+TRIANGLE, VERTICAL BAR BESIDE RIGHT 29D0
+TRIANGLE OPERATOR, LARGE LEFT 2A1E
+Triangle symbols 29CA
+TRIANGLE WITH LEFT HALF BLACK, DOWN-POINTING 29E8
+TRIANGLE WITH RIGHT HALF BLACK, DOWN-POINTING 29E9
+Triangles 25B2
+TRIANGULAR BULLET 2023
+TRIANGULAR COLON, MODIFIER LETTER 02D0
+TRIANGULAR COLON, MODIFIER LETTER HALF 02D1
+Trigram Symbols, Yijing 2630
+trine 25B3
+TRIPLE COLON OPERATOR 2AF6
+TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE 2A68
+TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE 2A69
+TRIPLE INTEGRAL 222D
+TRIPLE NESTED GREATER-THAN 2AF8
+TRIPLE NESTED LESS-THAN 2AF7
+TRIPLE PLUS 29FB
+TRIPLE PRIME 2034
+TRIPLE PRIME, REVERSED 2037
+TRIPLE RIGHT TURNSTILE, VERTICAL BAR 2AE2
+TRIPLE SOLIDUS BINARY RELATION 2AFB
+TRIPLE TILDE 224B
+TRIPLE UNDERDOT, COMBINING 20E8
+TRIPLE VERTICAL BAR BINARY RELATION 2AF4
+TRIPLE VERTICAL BAR DELIMITER 2980
+TRIPLE VERTICAL BAR OPERATOR, LARGE 2AFC
+TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE 2AF5
+TRIPLE VERTICAL STROKE, TRIPLE HORIZONTAL BAR WITH 2A69
+TRUE 22A8
+TUGRIK SIGN 20AE
+turbofan 274B
+turkish currency 20A4
+TURNED A, LATIN SMALL LETTER 0250
+TURNED ALPHA, LATIN SMALL LETTER 0252
+TURNED AMPERSAND 214B
+TURNED ANGLE 29A2
+TURNED CAPITAL F 2132
+TURNED COMMA, MODIFIER LETTER 02BB
+TURNED COMMA ABOVE, COMBINING 0312
+turned comma quotation mark, double 201C
+turned comma quotation mark, single 2018
+TURNED DELTA, LATIN SMALL LETTER 018D
+turned e, latin capital letter 018E
+TURNED E, LATIN SMALL LETTER 01DD
+TURNED GREEK SMALL LETTER IOTA 2129
+TURNED H, LATIN SMALL LETTER 0265
+TURNED K, LATIN SMALL LETTER 029E
+TURNED M, LATIN CAPITAL LETTER 019C
+TURNED M, LATIN SMALL LETTER 026F
+TURNED NOT SIGN 2319
+turned question mark 00BF
+TURNED R, LATIN SMALL LETTER 0279
+TURNED R, MODIFIER LETTER SMALL 02B4
+TURNED SANS-SERIF CAPITAL G 2141
+TURNED SANS-SERIF CAPITAL L 2142
+TURNED SANS-SERIF CAPITAL Y 2144
+TURNED T, LATIN SMALL LETTER 0287
+TURNED V, LATIN SMALL LETTER 028C
+TURNED W, LATIN SMALL LETTER 028D
+TURNED Y, LATIN SMALL LETTER 028E
+turnstile 22A2
+turnstile, reverse 22A3
+Turnstiles, Tacks and 27D8
+Turnstiles, Tacks and 2ADE
+TWO, SUPERSCRIPT 00B2
+TWO DOT LEADER 2025
+TWO-HEADED ARROW FROM BAR, RIGHTWARDS 2905
+TWO-HEADED ARROW WITH TAIL, RIGHTWARDS 2916
+TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE, RIGHTWARDS 2917
+TYPE COLON, Z NOTATION 2982
+U, COMBINING LATIN SMALL LETTER 0367
+Ugaritic 10380
+UMBRELLA 2602
+UMBRELLA WITH RAIN DROPS 2614
+umlaut 0308
+UNASPIRATED, MODIFIER LETTER 02ED
+UNDERDOT, COMBINING TRIPLE 20E8
+underline 0332
+underline, double 0333
+UNDERLINE SYMBOL, CONTINUOUS 2381
+UNDERLINE SYMBOL, DISCONTINUOUS 2382
+underscore 0332
+underscore, double 0333
+underscore, spacing 005F
+underscore, spacing double 2017
+Underscores, Overscores and FE49
+UNDERTIE 203F
+UNDERTIE, INVERTED 2054
+UNDO SYMBOL 238C
+undoable delete 2425
+UNION 222A
+UNION, DOUBLE 22D3
+UNION, DOUBLE SQUARE 2A4F
+UNION, INTEGRAL WITH 2A1A
+UNION, INTERSECTION ABOVE 2A47
+UNION, INTERSECTION ABOVE BAR ABOVE 2A49
+UNION, MULTISET 228E
+UNION, N-ARY 22C3
+UNION, UNION BESIDE AND JOINED WITH 2A4A
+UNION ABOVE BAR ABOVE INTERSECTION 2A48
+UNION ABOVE INTERSECTION 2A46
+UNION BESIDE AND JOINED WITH UNION 2A4A
+UNION OPERATOR, N-ARY SQUARE 2A06
+UNION OPERATOR WITH DOT, N-ARY 2A03
+UNION OPERATOR WITH PLUS, N-ARY 2A04
+UNION WITH LOGICAL OR 2A45
+UNION WITH MINUS SIGN 2A41
+UNION WITH OVERBAR 2A42
+UNION WITH SERIFS, CLOSED 2A4C
+UNION WITH SERIFS AND SMASH PRODUCT, CLOSED 2A50
+Unions, Intersections and 2A40
+unique element 2129
+unit separator 001F
+UNIT SEPARATOR, SYMBOL FOR 241F
+UNIVERSAL RECYCLING SYMBOL 2672
+UNIVERSAL RECYCLING SYMBOL, BLACK 267B
+up, page 21DE
+UP ARROWHEAD 2303
+UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS 2324
+UP RIGHT DIAGONAL ELLIPSIS 22F0
+UP TACK 22A5
+UP TACK, MODIFIER LETTER 02D4
+UP TACK BELOW, COMBINING 031D
+UPA Modifiers 02EF
+UPPER BLADE SCISSORS 2701
+UPPER RIGHT PENCIL 2710
+UPSILON, LATIN CAPITAL LETTER 01B1
+UPSILON, LATIN SMALL LETTER 028A
+upstile, apl 2308
+UPWARDS ARROW BELOW, COMBINING 034E
+URANUS 2645
+Urdu, Eastern Arabic-Indic Digits for Persian and 06F0
+urdu paragraph separator 203B
+V, COMBINING LATIN SMALL LETTER 036E
+v, latin capital letter script 01B2
+v, latin small letter script 028B
+V, LATIN SMALL LETTER TURNED 028C
+V WITH HOOK, LATIN CAPITAL LETTER 01B2
+valentine 2665
+valid 22A8
+varia 0300
+Variation Selectors FE00
+Variation Selectors Supplement E0100
+varies with (proportional to) 223C
+vector 20D0
+vector 20D6
+VECTOR OR CROSS PRODUCT 2A2F
+vector pointing into page 2295
+vector pointing into page 2297
+vector pointing out of page 2299
+vee 2228
+vee above 030C
+VEE WITH UNDERBAR, SMALL 2A61
+venus 2640
+VERSICLE 2123
+VERTICAL, LONG DASH FROM LEFT MEMBER OF DOUBLE 2AE6
+vertical bar 007C
+vertical bar, broken 00A6
+VERTICAL BAR, CIRCLED 29B6
+VERTICAL BAR, N-ARY WHITE 2AFF
+VERTICAL BAR, WHITE 2AFE
+VERTICAL BAR BINARY RELATION, TRIPLE 2AF4
+VERTICAL BAR DELIMITER, TRIPLE 2980
+Vertical Bar Dingbats 2758
+VERTICAL BAR OPERATOR, LARGE TRIPLE 2AFC
+VERTICAL BAR WITH HORIZONTAL STROKE, TRIPLE 2AF5
+vertical bowtie 29D6
+VERTICAL BOX LINE, LEFT 23B8
+VERTICAL BOX LINE, RIGHT 23B9
+Vertical brackets 23B4
+VERTICAL ELLIPSIS 22EE
+VERTICAL IDEOGRAPHIC ITERATION MARK 303B
+VERTICAL KANA REPEAT MARK 3031
+VERTICAL LINE 007C
+VERTICAL LINE, DOUBLE 2016
+VERTICAL LINE, MODIFIER LETTER 02C8
+VERTICAL LINE, MODIFIER LETTER LOW 02CC
+VERTICAL LINE ABOVE, COMBINING 030D
+VERTICAL LINE ABOVE, COMBINING DOUBLE 030E
+VERTICAL LINE BELOW, COMBINING 0329
+VERTICAL LINE BELOW, COMBINING DOUBLE 0348
+VERTICAL LINE EXTENSION 23D0
+Vertical Line Operators 2AEE
+VERTICAL LINE OVERLAY, COMBINING LONG 20D2
+VERTICAL LINE OVERLAY, COMBINING SHORT 20D3
+VERTICAL LINE WITH CIRCLE ABOVE 2AEF
+VERTICAL LINE WITH CIRCLE BELOW 2AF0
+VERTICAL LINE WITH MIDDLE DOT 237F
+VERTICAL STROKE OVERLAY, COMBINING DOUBLE 20E6
+vertical tabulation 000B
+VERTICAL TABULATION, SYMBOL FOR 240B
+Vertical Text, Double Punctuation For 2047
+VERTICAL TILDE, COMBINING 033E
+Vertical Variants, Glyphs for FE30
+VERTICAL ZIGZAG LINE 299A
+VERY MUCH GREATER-THAN 22D9
+VERY MUCH LESS-THAN 22D8
+VICTORY HAND 270C
+Vietnamese, Latin Extensions for 1EA0
+vietnamese currency 20AB
+Vietnamese Tone Marks 0340
+VIEWDATA SQUARE 2317
+vinculum 0305
+viram, deergh 0965
+viram, purna 0964
+VIRAMA, BENGALI SIGN 09CD
+VIRAMA, DEVANAGARI SIGN 094D
+VIRAMA, GUJARATI SIGN 0ACD
+VIRAMA, GURMUKHI SIGN 0A4D
+VIRAMA, KANNADA SIGN 0CCD
+VIRAMA, MALAYALAM SIGN 0D4D
+VIRAMA, ORIYA SIGN 0B4D
+VIRAMA, TAGALOG SIGN 1714
+VIRAMA, TAMIL SIGN 0BCD
+VIRAMA, TELUGU SIGN 0C4D
+VIRGO 264D
+virgule 002F
+VOICED FRICATIVE, LATIN LETTER PHARYNGEAL 0295
+VOICED SOUND MARK, COMBINING KATAKANA-HIRAGANA 3099
+VOICED SOUND MARK, KATAKANA-HIRAGANA 309B
+VOICING, MODIFIER LETTER 02EC
+VOLUME INTEGRAL 2230
+VOLTAGE SIGN, HIGH 26A1
+vrachy 0306
+VS1 FE00
+W, LATIN SMALL LETTER TURNED 028D
+W, MODIFIER LETTER SMALL 02B7
+WARNING SIGN 26A0
+Warning Signs 2620
+Warning Signs 26A0
+WATCH 231A
+WAVE, SINE 223F
+WAVE DASH 301C
+WAVY DASH 3030
+WAVY LINE 2307
+WAVY LOW LINE FE4F
+WAVY OVERLINE FE4B
+WAVY OVERLINE, DOUBLE FE4C
+Weather and Astrological Symbols 2600
+wedge 028C
+wedge 2227
+weierstrass elliptic function 2118
+WHEEL OF DHARMA 2638
+WHITE BULLET, CIRCLED 29BE
+WHITE CIRCLE WITH DOT RIGHT 2686
+WHITE CIRCLE WITH DOWN ARROW 29EC
+WHITE CIRCLE WITH TWO DOTS 2687
+WHITE CONCAVE-SIDED DIAMOND 27E1
+WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK 27E2
+WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK 27E3
+WHITE DIAMOND WITH CENTRED DOT 27D0
+WHITE DOT RIGHT, BLACK CIRCLE WITH 2688
+WHITE DOTS, BLACK CIRCLE WITH TWO 2689
+WHITE FLAG 2690
+white framus 29D6
+WHITE HOURGLASS 29D6
+WHITE MEDIUM SMALL SQUARE 25FD
+WHITE MEDIUM SQUARE 25FB
+White On Black Circled Numbers 24EB
+WHITE SESAME DOT FE46
+WHITE SHOGI PIECE 2616
+WHITE SQUARE WITH LEFTWARDS TICK 27E4
+WHITE SQUARE WITH RIGHTWARDS TICK 27E5
+WHITE VERTICAL BAR 2AFE
+WHITE VERTICAL BAR, N-ARY 2AFF
+WIDE BRIDGE ABOVE, COMBINING 20E9
+WIGGLY FENCE, LEFT 29D8
+WIGGLY FENCE, LEFT DOUBLE 29DA
+WIGGLY FENCE, RIGHT 29D9
+WIGGLY FENCE, RIGHT DOUBLE 29DB
+wj 2060
+WON SIGN 20A9
+WORD DIVIDER, UGARITIC 1039F
+WORD JOINER 2060
+Word Separators, Aegean 10100
+Words, Squared Japanese Katakana 3300
+WORDSPACE, ETHIOPIC 1361
+WREATH PRODUCT 2240
+WRITING HAND 270D
+WYNN, LATIN CAPITAL LETTER 01F7
+WYNN, LATIN LETTER 01BF
+X, BALLOT 2717
+X, BALLOT BOX WITH 2612
+X, CIRCLE WITH SUPERIMPOSED 29BB
+X, COMBINING LATIN SMALL LETTER 036F
+X, HEAVY BALLOT 2718
+X, HEAVY MULTIPLICATION 2716
+X, MODIFIER LETTER SMALL 02E3
+X, MULTIPLICATION 2715
+X ABOVE, COMBINING 033D
+X IN A RECTANGLE BOX 2327
+XOR 22BB
+Y, LATIN LETTER SMALL CAPITAL 028F
+Y, LATIN SMALL LETTER TURNED 028E
+Y, MODIFIER LETTER SMALL 02B8
+Y, TURNED SANS-SERIF CAPITAL 2144
+YANG, YIN 262F
+YEN SIGN 00A5
+Yi Radicals A490
+Yi Syllables A000
+Yiddish Digraphs 05F0
+yields 22A2
+Yijing Monogram and Digram Symbols 268A
+Yijing Hexagram Symbols 4DC0
+Yijing Trigram Symbols 2630
+YIN YANG 262F
+yogh, latin capital letter 01B7
+YOGH, LATIN SMALL LETTER 021D
+yogh, latin small letter 0292
+YPOGEGRAMMENI, COMBINING GREEK 0345
+YR, LATIN LETTER 01A6
+yuan sign 00A5
+Z, BLACK-LETTER CAPITAL 2128
+Z, DOUBLE-STRUCK CAPITAL 2124
+Z NOTATION BAG MEMBERSHIP 22FF
+z notation bag subtraction 2A41
+z notation bijection 2917
+Z Notation Binding Brackets 2989
+Z NOTATION DOMAIN ANTIRESTRICTION 2A64
+z notation finite function 20E6
+z notation finite function 21FB
+z notation finite injection 2915
+z notation finite relation 21FC
+z notation finite surjection 2901
+z notation finite surjective injection 2918
+Z Notation Image Brackets 2987
+z notation left bag bracket 27E6
+z notation partial function 21F8
+z notation partial injection 2914
+z notation partial relation 21F9
+z notation partial surjection 2900
+Z NOTATION RANGE ANTIRESTRICTION 2A65
+Z NOTATION RELATIONAL COMPOSITION 2A3E
+Z NOTATION SCHEMA COMPOSITION 2A1F
+z notation schema hiding 29F9
+Z NOTATION SCHEMA PIPING 2A20
+Z NOTATION SCHEMA PROJECTION 2A21
+z notations sequence concatenation 2040
+Z NOTATION SPOT 2981
+z notation surjective injection 2917
+Z NOTATION TYPE COLON 2982
+Zapf Dingbats Series 100, ITC 2700
+ZERO, CIRCLED DIGIT 24EA
+ZERO, IDEOGRAPHIC NUMBER 3007
+ZERO, SUPERSCRIPT 2070
+ZERO WIDTH JOINER 200D
+ZERO WIDTH NO-BREAK SPACE FEFF
+ZERO WIDTH NON-JOINER 200C
+ZERO WIDTH SPACE 200B
+ZIGZAG ARROW, RIGHT ANGLE WITH DOWNWARDS 237C
+ZIGZAG LINE, VERTICAL 299A
+Zodiacal Symbols 2648
+zwj 200D
+zwnbsp FEFF
+zwnj 200C
+zwsp 200B
+
diff --git a/Master/tlpkg/tlperl/lib/unicore/Jamo.txt b/Master/tlpkg/tlperl/lib/unicore/Jamo.txt
new file mode 100644
index 00000000000..84f54bea902
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Jamo.txt
@@ -0,0 +1,92 @@
+# Jamo-4.1.0.txt
+# Date: 2004-12-09, 17:48 PST [KW]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2004 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# This file defines the Jamo Short Name property.
+#
+# See Section 3.12 of The Unicode Standard, Version 4.0
+# for more information.
+#
+# Each line contains two fields, separated by a semicolon.
+#
+# The first field gives the code point, in 4-digit hexadecimal
+# form, of a combining jamo character that participates in
+# the algorithmic determination Hangul syllable character names.
+# The second field gives the Jamo Short Name as a one-, two-,
+# or three-character ASCII string (or in one case, for U+110B,
+# the null string).
+#
+# #############################################################
+
+1100; G # HANGUL CHOSEONG KIYEOK
+1101; GG # HANGUL CHOSEONG SSANGKIYEOK
+1102; N # HANGUL CHOSEONG NIEUN
+1103; D # HANGUL CHOSEONG TIKEUT
+1104; DD # HANGUL CHOSEONG SSANGTIKEUT
+1105; R # HANGUL CHOSEONG RIEUL
+1106; M # HANGUL CHOSEONG MIEUM
+1107; B # HANGUL CHOSEONG PIEUP
+1108; BB # HANGUL CHOSEONG SSANGPIEUP
+1109; S # HANGUL CHOSEONG SIOS
+110A; SS # HANGUL CHOSEONG SSANGSIOS
+110B; # HANGUL CHOSEONG IEUNG
+110C; J # HANGUL CHOSEONG CIEUC
+110D; JJ # HANGUL CHOSEONG SSANGCIEUC
+110E; C # HANGUL CHOSEONG CHIEUCH
+110F; K # HANGUL CHOSEONG KHIEUKH
+1110; T # HANGUL CHOSEONG THIEUTH
+1111; P # HANGUL CHOSEONG PHIEUPH
+1112; H # HANGUL CHOSEONG HIEUH
+1161; A # HANGUL JUNGSEONG A
+1162; AE # HANGUL JUNGSEONG AE
+1163; YA # HANGUL JUNGSEONG YA
+1164; YAE # HANGUL JUNGSEONG YAE
+1165; EO # HANGUL JUNGSEONG EO
+1166; E # HANGUL JUNGSEONG E
+1167; YEO # HANGUL JUNGSEONG YEO
+1168; YE # HANGUL JUNGSEONG YE
+1169; O # HANGUL JUNGSEONG O
+116A; WA # HANGUL JUNGSEONG WA
+116B; WAE # HANGUL JUNGSEONG WAE
+116C; OE # HANGUL JUNGSEONG OE
+116D; YO # HANGUL JUNGSEONG YO
+116E; U # HANGUL JUNGSEONG U
+116F; WEO # HANGUL JUNGSEONG WEO
+1170; WE # HANGUL JUNGSEONG WE
+1171; WI # HANGUL JUNGSEONG WI
+1172; YU # HANGUL JUNGSEONG YU
+1173; EU # HANGUL JUNGSEONG EU
+1174; YI # HANGUL JUNGSEONG YI
+1175; I # HANGUL JUNGSEONG I
+11A8; G # HANGUL JONGSEONG KIYEOK
+11A9; GG # HANGUL JONGSEONG SSANGKIYEOK
+11AA; GS # HANGUL JONGSEONG KIYEOK-SIOS
+11AB; N # HANGUL JONGSEONG NIEUN
+11AC; NJ # HANGUL JONGSEONG NIEUN-CIEUC
+11AD; NH # HANGUL JONGSEONG NIEUN-HIEUH
+11AE; D # HANGUL JONGSEONG TIKEUT
+11AF; L # HANGUL JONGSEONG RIEUL
+11B0; LG # HANGUL JONGSEONG RIEUL-KIYEOK
+11B1; LM # HANGUL JONGSEONG RIEUL-MIEUM
+11B2; LB # HANGUL JONGSEONG RIEUL-PIEUP
+11B3; LS # HANGUL JONGSEONG RIEUL-SIOS
+11B4; LT # HANGUL JONGSEONG RIEUL-THIEUTH
+11B5; LP # HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6; LH # HANGUL JONGSEONG RIEUL-HIEUH
+11B7; M # HANGUL JONGSEONG MIEUM
+11B8; B # HANGUL JONGSEONG PIEUP
+11B9; BS # HANGUL JONGSEONG PIEUP-SIOS
+11BA; S # HANGUL JONGSEONG SIOS
+11BB; SS # HANGUL JONGSEONG SSANGSIOS
+11BC; NG # HANGUL JONGSEONG IEUNG
+11BD; J # HANGUL JONGSEONG CIEUC
+11BE; C # HANGUL JONGSEONG CHIEUCH
+11BF; K # HANGUL JONGSEONG KHIEUKH
+11C0; T # HANGUL JONGSEONG THIEUTH
+11C1; P # HANGUL JONGSEONG PHIEUPH
+11C2; H # HANGUL JONGSEONG HIEUH
+
diff --git a/Master/tlpkg/tlperl/lib/unicore/LineBreak.txt b/Master/tlpkg/tlperl/lib/unicore/LineBreak.txt
new file mode 100644
index 00000000000..988f1caf866
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/LineBreak.txt
@@ -0,0 +1,17169 @@
+# LineBreak-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# Line Break Properties
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+# It contains both normative and informative data.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# The format is two fields separated by a semicolon.
+# Field 0: Unicode value
+# Field 1: LineBreak property, consisting of one of the following values:
+# Normative:
+# "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW",
+# "NL", "WJ", "JL", "JV", "JT", "H2", "H3"
+# Informative:
+# "XX", "OP", "CL", "QU", "NS", "EX", "SY",
+# "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY",
+# "BB", "BA", "SA", "AI", "B2"
+# - All code points, assigned and unassigned, that are not listed
+# explicitly are given the value "XX".
+# - Characters ranges are specified as for other property files in
+# the Unicode Character Database.
+#
+# The Unicode name of each character is provided in a comment for help
+# in identifying the characters.
+#
+# See UAX #14: Line Breaking Properties, for more information
+0000;CM # <control>
+0001;CM # <control>
+0002;CM # <control>
+0003;CM # <control>
+0004;CM # <control>
+0005;CM # <control>
+0006;CM # <control>
+0007;CM # <control>
+0008;CM # <control>
+0009;BA # <control>
+000A;LF # <control>
+000B;CM # <control>
+000C;BK # <control>
+000D;CR # <control>
+000E;CM # <control>
+000F;CM # <control>
+0010;CM # <control>
+0011;CM # <control>
+0012;CM # <control>
+0013;CM # <control>
+0014;CM # <control>
+0015;CM # <control>
+0016;CM # <control>
+0017;CM # <control>
+0018;CM # <control>
+0019;CM # <control>
+001A;CM # <control>
+001B;CM # <control>
+001C;CM # <control>
+001D;CM # <control>
+001E;CM # <control>
+001F;CM # <control>
+0020;SP # SPACE
+0021;EX # EXCLAMATION MARK
+0022;QU # QUOTATION MARK
+0023;AL # NUMBER SIGN
+0024;PR # DOLLAR SIGN
+0025;PO # PERCENT SIGN
+0026;AL # AMPERSAND
+0027;QU # APOSTROPHE
+0028;OP # LEFT PARENTHESIS
+0029;CL # RIGHT PARENTHESIS
+002A;AL # ASTERISK
+002B;PR # PLUS SIGN
+002C;IS # COMMA
+002D;HY # HYPHEN-MINUS
+002E;IS # FULL STOP
+002F;SY # SOLIDUS
+0030;NU # DIGIT ZERO
+0031;NU # DIGIT ONE
+0032;NU # DIGIT TWO
+0033;NU # DIGIT THREE
+0034;NU # DIGIT FOUR
+0035;NU # DIGIT FIVE
+0036;NU # DIGIT SIX
+0037;NU # DIGIT SEVEN
+0038;NU # DIGIT EIGHT
+0039;NU # DIGIT NINE
+003A;IS # COLON
+003B;IS # SEMICOLON
+003C;AL # LESS-THAN SIGN
+003D;AL # EQUALS SIGN
+003E;AL # GREATER-THAN SIGN
+003F;EX # QUESTION MARK
+0040;AL # COMMERCIAL AT
+0041;AL # LATIN CAPITAL LETTER A
+0042;AL # LATIN CAPITAL LETTER B
+0043;AL # LATIN CAPITAL LETTER C
+0044;AL # LATIN CAPITAL LETTER D
+0045;AL # LATIN CAPITAL LETTER E
+0046;AL # LATIN CAPITAL LETTER F
+0047;AL # LATIN CAPITAL LETTER G
+0048;AL # LATIN CAPITAL LETTER H
+0049;AL # LATIN CAPITAL LETTER I
+004A;AL # LATIN CAPITAL LETTER J
+004B;AL # LATIN CAPITAL LETTER K
+004C;AL # LATIN CAPITAL LETTER L
+004D;AL # LATIN CAPITAL LETTER M
+004E;AL # LATIN CAPITAL LETTER N
+004F;AL # LATIN CAPITAL LETTER O
+0050;AL # LATIN CAPITAL LETTER P
+0051;AL # LATIN CAPITAL LETTER Q
+0052;AL # LATIN CAPITAL LETTER R
+0053;AL # LATIN CAPITAL LETTER S
+0054;AL # LATIN CAPITAL LETTER T
+0055;AL # LATIN CAPITAL LETTER U
+0056;AL # LATIN CAPITAL LETTER V
+0057;AL # LATIN CAPITAL LETTER W
+0058;AL # LATIN CAPITAL LETTER X
+0059;AL # LATIN CAPITAL LETTER Y
+005A;AL # LATIN CAPITAL LETTER Z
+005B;OP # LEFT SQUARE BRACKET
+005C;PR # REVERSE SOLIDUS
+005D;CL # RIGHT SQUARE BRACKET
+005E;AL # CIRCUMFLEX ACCENT
+005F;AL # LOW LINE
+0060;AL # GRAVE ACCENT
+0061;AL # LATIN SMALL LETTER A
+0062;AL # LATIN SMALL LETTER B
+0063;AL # LATIN SMALL LETTER C
+0064;AL # LATIN SMALL LETTER D
+0065;AL # LATIN SMALL LETTER E
+0066;AL # LATIN SMALL LETTER F
+0067;AL # LATIN SMALL LETTER G
+0068;AL # LATIN SMALL LETTER H
+0069;AL # LATIN SMALL LETTER I
+006A;AL # LATIN SMALL LETTER J
+006B;AL # LATIN SMALL LETTER K
+006C;AL # LATIN SMALL LETTER L
+006D;AL # LATIN SMALL LETTER M
+006E;AL # LATIN SMALL LETTER N
+006F;AL # LATIN SMALL LETTER O
+0070;AL # LATIN SMALL LETTER P
+0071;AL # LATIN SMALL LETTER Q
+0072;AL # LATIN SMALL LETTER R
+0073;AL # LATIN SMALL LETTER S
+0074;AL # LATIN SMALL LETTER T
+0075;AL # LATIN SMALL LETTER U
+0076;AL # LATIN SMALL LETTER V
+0077;AL # LATIN SMALL LETTER W
+0078;AL # LATIN SMALL LETTER X
+0079;AL # LATIN SMALL LETTER Y
+007A;AL # LATIN SMALL LETTER Z
+007B;OP # LEFT CURLY BRACKET
+007C;BA # VERTICAL LINE
+007D;CL # RIGHT CURLY BRACKET
+007E;AL # TILDE
+007F;CM # <control>
+0080;CM # <control>
+0081;CM # <control>
+0082;CM # <control>
+0083;CM # <control>
+0084;CM # <control>
+0085;NL # <control>
+0086;CM # <control>
+0087;CM # <control>
+0088;CM # <control>
+0089;CM # <control>
+008A;CM # <control>
+008B;CM # <control>
+008C;CM # <control>
+008D;CM # <control>
+008E;CM # <control>
+008F;CM # <control>
+0090;CM # <control>
+0091;CM # <control>
+0092;CM # <control>
+0093;CM # <control>
+0094;CM # <control>
+0095;CM # <control>
+0096;CM # <control>
+0097;CM # <control>
+0098;CM # <control>
+0099;CM # <control>
+009A;CM # <control>
+009B;CM # <control>
+009C;CM # <control>
+009D;CM # <control>
+009E;CM # <control>
+009F;CM # <control>
+00A0;GL # NO-BREAK SPACE
+00A1;AI # INVERTED EXCLAMATION MARK
+00A2;PO # CENT SIGN
+00A3;PR # POUND SIGN
+00A4;PR # CURRENCY SIGN
+00A5;PR # YEN SIGN
+00A6;AL # BROKEN BAR
+00A7;AI # SECTION SIGN
+00A8;AI # DIAERESIS
+00A9;AL # COPYRIGHT SIGN
+00AA;AI # FEMININE ORDINAL INDICATOR
+00AB;QU # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC;AL # NOT SIGN
+00AD;BA # SOFT HYPHEN
+00AE;AL # REGISTERED SIGN
+00AF;AL # MACRON
+00B0;PO # DEGREE SIGN
+00B1;PR # PLUS-MINUS SIGN
+00B2;AI # SUPERSCRIPT TWO
+00B3;AI # SUPERSCRIPT THREE
+00B4;BB # ACUTE ACCENT
+00B5;AL # MICRO SIGN
+00B6;AI # PILCROW SIGN
+00B7;AI # MIDDLE DOT
+00B8;AI # CEDILLA
+00B9;AI # SUPERSCRIPT ONE
+00BA;AI # MASCULINE ORDINAL INDICATOR
+00BB;QU # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC;AI # VULGAR FRACTION ONE QUARTER
+00BD;AI # VULGAR FRACTION ONE HALF
+00BE;AI # VULGAR FRACTION THREE QUARTERS
+00BF;AI # INVERTED QUESTION MARK
+00C0;AL # LATIN CAPITAL LETTER A WITH GRAVE
+00C1;AL # LATIN CAPITAL LETTER A WITH ACUTE
+00C2;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3;AL # LATIN CAPITAL LETTER A WITH TILDE
+00C4;AL # LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5;AL # LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6;AL # LATIN CAPITAL LETTER AE
+00C7;AL # LATIN CAPITAL LETTER C WITH CEDILLA
+00C8;AL # LATIN CAPITAL LETTER E WITH GRAVE
+00C9;AL # LATIN CAPITAL LETTER E WITH ACUTE
+00CA;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB;AL # LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC;AL # LATIN CAPITAL LETTER I WITH GRAVE
+00CD;AL # LATIN CAPITAL LETTER I WITH ACUTE
+00CE;AL # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF;AL # LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0;AL # LATIN CAPITAL LETTER ETH
+00D1;AL # LATIN CAPITAL LETTER N WITH TILDE
+00D2;AL # LATIN CAPITAL LETTER O WITH GRAVE
+00D3;AL # LATIN CAPITAL LETTER O WITH ACUTE
+00D4;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5;AL # LATIN CAPITAL LETTER O WITH TILDE
+00D6;AL # LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7;AI # MULTIPLICATION SIGN
+00D8;AL # LATIN CAPITAL LETTER O WITH STROKE
+00D9;AL # LATIN CAPITAL LETTER U WITH GRAVE
+00DA;AL # LATIN CAPITAL LETTER U WITH ACUTE
+00DB;AL # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC;AL # LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD;AL # LATIN CAPITAL LETTER Y WITH ACUTE
+00DE;AL # LATIN CAPITAL LETTER THORN
+00DF;AL # LATIN SMALL LETTER SHARP S
+00E0;AL # LATIN SMALL LETTER A WITH GRAVE
+00E1;AL # LATIN SMALL LETTER A WITH ACUTE
+00E2;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3;AL # LATIN SMALL LETTER A WITH TILDE
+00E4;AL # LATIN SMALL LETTER A WITH DIAERESIS
+00E5;AL # LATIN SMALL LETTER A WITH RING ABOVE
+00E6;AL # LATIN SMALL LETTER AE
+00E7;AL # LATIN SMALL LETTER C WITH CEDILLA
+00E8;AL # LATIN SMALL LETTER E WITH GRAVE
+00E9;AL # LATIN SMALL LETTER E WITH ACUTE
+00EA;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB;AL # LATIN SMALL LETTER E WITH DIAERESIS
+00EC;AL # LATIN SMALL LETTER I WITH GRAVE
+00ED;AL # LATIN SMALL LETTER I WITH ACUTE
+00EE;AL # LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF;AL # LATIN SMALL LETTER I WITH DIAERESIS
+00F0;AL # LATIN SMALL LETTER ETH
+00F1;AL # LATIN SMALL LETTER N WITH TILDE
+00F2;AL # LATIN SMALL LETTER O WITH GRAVE
+00F3;AL # LATIN SMALL LETTER O WITH ACUTE
+00F4;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5;AL # LATIN SMALL LETTER O WITH TILDE
+00F6;AL # LATIN SMALL LETTER O WITH DIAERESIS
+00F7;AI # DIVISION SIGN
+00F8;AL # LATIN SMALL LETTER O WITH STROKE
+00F9;AL # LATIN SMALL LETTER U WITH GRAVE
+00FA;AL # LATIN SMALL LETTER U WITH ACUTE
+00FB;AL # LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC;AL # LATIN SMALL LETTER U WITH DIAERESIS
+00FD;AL # LATIN SMALL LETTER Y WITH ACUTE
+00FE;AL # LATIN SMALL LETTER THORN
+00FF;AL # LATIN SMALL LETTER Y WITH DIAERESIS
+0100;AL # LATIN CAPITAL LETTER A WITH MACRON
+0101;AL # LATIN SMALL LETTER A WITH MACRON
+0102;AL # LATIN CAPITAL LETTER A WITH BREVE
+0103;AL # LATIN SMALL LETTER A WITH BREVE
+0104;AL # LATIN CAPITAL LETTER A WITH OGONEK
+0105;AL # LATIN SMALL LETTER A WITH OGONEK
+0106;AL # LATIN CAPITAL LETTER C WITH ACUTE
+0107;AL # LATIN SMALL LETTER C WITH ACUTE
+0108;AL # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109;AL # LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A;AL # LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B;AL # LATIN SMALL LETTER C WITH DOT ABOVE
+010C;AL # LATIN CAPITAL LETTER C WITH CARON
+010D;AL # LATIN SMALL LETTER C WITH CARON
+010E;AL # LATIN CAPITAL LETTER D WITH CARON
+010F;AL # LATIN SMALL LETTER D WITH CARON
+0110;AL # LATIN CAPITAL LETTER D WITH STROKE
+0111;AL # LATIN SMALL LETTER D WITH STROKE
+0112;AL # LATIN CAPITAL LETTER E WITH MACRON
+0113;AL # LATIN SMALL LETTER E WITH MACRON
+0114;AL # LATIN CAPITAL LETTER E WITH BREVE
+0115;AL # LATIN SMALL LETTER E WITH BREVE
+0116;AL # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117;AL # LATIN SMALL LETTER E WITH DOT ABOVE
+0118;AL # LATIN CAPITAL LETTER E WITH OGONEK
+0119;AL # LATIN SMALL LETTER E WITH OGONEK
+011A;AL # LATIN CAPITAL LETTER E WITH CARON
+011B;AL # LATIN SMALL LETTER E WITH CARON
+011C;AL # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D;AL # LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E;AL # LATIN CAPITAL LETTER G WITH BREVE
+011F;AL # LATIN SMALL LETTER G WITH BREVE
+0120;AL # LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121;AL # LATIN SMALL LETTER G WITH DOT ABOVE
+0122;AL # LATIN CAPITAL LETTER G WITH CEDILLA
+0123;AL # LATIN SMALL LETTER G WITH CEDILLA
+0124;AL # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125;AL # LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126;AL # LATIN CAPITAL LETTER H WITH STROKE
+0127;AL # LATIN SMALL LETTER H WITH STROKE
+0128;AL # LATIN CAPITAL LETTER I WITH TILDE
+0129;AL # LATIN SMALL LETTER I WITH TILDE
+012A;AL # LATIN CAPITAL LETTER I WITH MACRON
+012B;AL # LATIN SMALL LETTER I WITH MACRON
+012C;AL # LATIN CAPITAL LETTER I WITH BREVE
+012D;AL # LATIN SMALL LETTER I WITH BREVE
+012E;AL # LATIN CAPITAL LETTER I WITH OGONEK
+012F;AL # LATIN SMALL LETTER I WITH OGONEK
+0130;AL # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131;AL # LATIN SMALL LETTER DOTLESS I
+0132;AL # LATIN CAPITAL LIGATURE IJ
+0133;AL # LATIN SMALL LIGATURE IJ
+0134;AL # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135;AL # LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136;AL # LATIN CAPITAL LETTER K WITH CEDILLA
+0137;AL # LATIN SMALL LETTER K WITH CEDILLA
+0138;AL # LATIN SMALL LETTER KRA
+0139;AL # LATIN CAPITAL LETTER L WITH ACUTE
+013A;AL # LATIN SMALL LETTER L WITH ACUTE
+013B;AL # LATIN CAPITAL LETTER L WITH CEDILLA
+013C;AL # LATIN SMALL LETTER L WITH CEDILLA
+013D;AL # LATIN CAPITAL LETTER L WITH CARON
+013E;AL # LATIN SMALL LETTER L WITH CARON
+013F;AL # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140;AL # LATIN SMALL LETTER L WITH MIDDLE DOT
+0141;AL # LATIN CAPITAL LETTER L WITH STROKE
+0142;AL # LATIN SMALL LETTER L WITH STROKE
+0143;AL # LATIN CAPITAL LETTER N WITH ACUTE
+0144;AL # LATIN SMALL LETTER N WITH ACUTE
+0145;AL # LATIN CAPITAL LETTER N WITH CEDILLA
+0146;AL # LATIN SMALL LETTER N WITH CEDILLA
+0147;AL # LATIN CAPITAL LETTER N WITH CARON
+0148;AL # LATIN SMALL LETTER N WITH CARON
+0149;AL # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A;AL # LATIN CAPITAL LETTER ENG
+014B;AL # LATIN SMALL LETTER ENG
+014C;AL # LATIN CAPITAL LETTER O WITH MACRON
+014D;AL # LATIN SMALL LETTER O WITH MACRON
+014E;AL # LATIN CAPITAL LETTER O WITH BREVE
+014F;AL # LATIN SMALL LETTER O WITH BREVE
+0150;AL # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151;AL # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152;AL # LATIN CAPITAL LIGATURE OE
+0153;AL # LATIN SMALL LIGATURE OE
+0154;AL # LATIN CAPITAL LETTER R WITH ACUTE
+0155;AL # LATIN SMALL LETTER R WITH ACUTE
+0156;AL # LATIN CAPITAL LETTER R WITH CEDILLA
+0157;AL # LATIN SMALL LETTER R WITH CEDILLA
+0158;AL # LATIN CAPITAL LETTER R WITH CARON
+0159;AL # LATIN SMALL LETTER R WITH CARON
+015A;AL # LATIN CAPITAL LETTER S WITH ACUTE
+015B;AL # LATIN SMALL LETTER S WITH ACUTE
+015C;AL # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D;AL # LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E;AL # LATIN CAPITAL LETTER S WITH CEDILLA
+015F;AL # LATIN SMALL LETTER S WITH CEDILLA
+0160;AL # LATIN CAPITAL LETTER S WITH CARON
+0161;AL # LATIN SMALL LETTER S WITH CARON
+0162;AL # LATIN CAPITAL LETTER T WITH CEDILLA
+0163;AL # LATIN SMALL LETTER T WITH CEDILLA
+0164;AL # LATIN CAPITAL LETTER T WITH CARON
+0165;AL # LATIN SMALL LETTER T WITH CARON
+0166;AL # LATIN CAPITAL LETTER T WITH STROKE
+0167;AL # LATIN SMALL LETTER T WITH STROKE
+0168;AL # LATIN CAPITAL LETTER U WITH TILDE
+0169;AL # LATIN SMALL LETTER U WITH TILDE
+016A;AL # LATIN CAPITAL LETTER U WITH MACRON
+016B;AL # LATIN SMALL LETTER U WITH MACRON
+016C;AL # LATIN CAPITAL LETTER U WITH BREVE
+016D;AL # LATIN SMALL LETTER U WITH BREVE
+016E;AL # LATIN CAPITAL LETTER U WITH RING ABOVE
+016F;AL # LATIN SMALL LETTER U WITH RING ABOVE
+0170;AL # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171;AL # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172;AL # LATIN CAPITAL LETTER U WITH OGONEK
+0173;AL # LATIN SMALL LETTER U WITH OGONEK
+0174;AL # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175;AL # LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176;AL # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177;AL # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178;AL # LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179;AL # LATIN CAPITAL LETTER Z WITH ACUTE
+017A;AL # LATIN SMALL LETTER Z WITH ACUTE
+017B;AL # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C;AL # LATIN SMALL LETTER Z WITH DOT ABOVE
+017D;AL # LATIN CAPITAL LETTER Z WITH CARON
+017E;AL # LATIN SMALL LETTER Z WITH CARON
+017F;AL # LATIN SMALL LETTER LONG S
+0180;AL # LATIN SMALL LETTER B WITH STROKE
+0181;AL # LATIN CAPITAL LETTER B WITH HOOK
+0182;AL # LATIN CAPITAL LETTER B WITH TOPBAR
+0183;AL # LATIN SMALL LETTER B WITH TOPBAR
+0184;AL # LATIN CAPITAL LETTER TONE SIX
+0185;AL # LATIN SMALL LETTER TONE SIX
+0186;AL # LATIN CAPITAL LETTER OPEN O
+0187;AL # LATIN CAPITAL LETTER C WITH HOOK
+0188;AL # LATIN SMALL LETTER C WITH HOOK
+0189;AL # LATIN CAPITAL LETTER AFRICAN D
+018A;AL # LATIN CAPITAL LETTER D WITH HOOK
+018B;AL # LATIN CAPITAL LETTER D WITH TOPBAR
+018C;AL # LATIN SMALL LETTER D WITH TOPBAR
+018D;AL # LATIN SMALL LETTER TURNED DELTA
+018E;AL # LATIN CAPITAL LETTER REVERSED E
+018F;AL # LATIN CAPITAL LETTER SCHWA
+0190;AL # LATIN CAPITAL LETTER OPEN E
+0191;AL # LATIN CAPITAL LETTER F WITH HOOK
+0192;AL # LATIN SMALL LETTER F WITH HOOK
+0193;AL # LATIN CAPITAL LETTER G WITH HOOK
+0194;AL # LATIN CAPITAL LETTER GAMMA
+0195;AL # LATIN SMALL LETTER HV
+0196;AL # LATIN CAPITAL LETTER IOTA
+0197;AL # LATIN CAPITAL LETTER I WITH STROKE
+0198;AL # LATIN CAPITAL LETTER K WITH HOOK
+0199;AL # LATIN SMALL LETTER K WITH HOOK
+019A;AL # LATIN SMALL LETTER L WITH BAR
+019B;AL # LATIN SMALL LETTER LAMBDA WITH STROKE
+019C;AL # LATIN CAPITAL LETTER TURNED M
+019D;AL # LATIN CAPITAL LETTER N WITH LEFT HOOK
+019E;AL # LATIN SMALL LETTER N WITH LONG RIGHT LEG
+019F;AL # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0;AL # LATIN CAPITAL LETTER O WITH HORN
+01A1;AL # LATIN SMALL LETTER O WITH HORN
+01A2;AL # LATIN CAPITAL LETTER OI
+01A3;AL # LATIN SMALL LETTER OI
+01A4;AL # LATIN CAPITAL LETTER P WITH HOOK
+01A5;AL # LATIN SMALL LETTER P WITH HOOK
+01A6;AL # LATIN LETTER YR
+01A7;AL # LATIN CAPITAL LETTER TONE TWO
+01A8;AL # LATIN SMALL LETTER TONE TWO
+01A9;AL # LATIN CAPITAL LETTER ESH
+01AA;AL # LATIN LETTER REVERSED ESH LOOP
+01AB;AL # LATIN SMALL LETTER T WITH PALATAL HOOK
+01AC;AL # LATIN CAPITAL LETTER T WITH HOOK
+01AD;AL # LATIN SMALL LETTER T WITH HOOK
+01AE;AL # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF;AL # LATIN CAPITAL LETTER U WITH HORN
+01B0;AL # LATIN SMALL LETTER U WITH HORN
+01B1;AL # LATIN CAPITAL LETTER UPSILON
+01B2;AL # LATIN CAPITAL LETTER V WITH HOOK
+01B3;AL # LATIN CAPITAL LETTER Y WITH HOOK
+01B4;AL # LATIN SMALL LETTER Y WITH HOOK
+01B5;AL # LATIN CAPITAL LETTER Z WITH STROKE
+01B6;AL # LATIN SMALL LETTER Z WITH STROKE
+01B7;AL # LATIN CAPITAL LETTER EZH
+01B8;AL # LATIN CAPITAL LETTER EZH REVERSED
+01B9;AL # LATIN SMALL LETTER EZH REVERSED
+01BA;AL # LATIN SMALL LETTER EZH WITH TAIL
+01BB;AL # LATIN LETTER TWO WITH STROKE
+01BC;AL # LATIN CAPITAL LETTER TONE FIVE
+01BD;AL # LATIN SMALL LETTER TONE FIVE
+01BE;AL # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+01BF;AL # LATIN LETTER WYNN
+01C0;AL # LATIN LETTER DENTAL CLICK
+01C1;AL # LATIN LETTER LATERAL CLICK
+01C2;AL # LATIN LETTER ALVEOLAR CLICK
+01C3;AL # LATIN LETTER RETROFLEX CLICK
+01C4;AL # LATIN CAPITAL LETTER DZ WITH CARON
+01C5;AL # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6;AL # LATIN SMALL LETTER DZ WITH CARON
+01C7;AL # LATIN CAPITAL LETTER LJ
+01C8;AL # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9;AL # LATIN SMALL LETTER LJ
+01CA;AL # LATIN CAPITAL LETTER NJ
+01CB;AL # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC;AL # LATIN SMALL LETTER NJ
+01CD;AL # LATIN CAPITAL LETTER A WITH CARON
+01CE;AL # LATIN SMALL LETTER A WITH CARON
+01CF;AL # LATIN CAPITAL LETTER I WITH CARON
+01D0;AL # LATIN SMALL LETTER I WITH CARON
+01D1;AL # LATIN CAPITAL LETTER O WITH CARON
+01D2;AL # LATIN SMALL LETTER O WITH CARON
+01D3;AL # LATIN CAPITAL LETTER U WITH CARON
+01D4;AL # LATIN SMALL LETTER U WITH CARON
+01D5;AL # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6;AL # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7;AL # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8;AL # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9;AL # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA;AL # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB;AL # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC;AL # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD;AL # LATIN SMALL LETTER TURNED E
+01DE;AL # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF;AL # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0;AL # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1;AL # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2;AL # LATIN CAPITAL LETTER AE WITH MACRON
+01E3;AL # LATIN SMALL LETTER AE WITH MACRON
+01E4;AL # LATIN CAPITAL LETTER G WITH STROKE
+01E5;AL # LATIN SMALL LETTER G WITH STROKE
+01E6;AL # LATIN CAPITAL LETTER G WITH CARON
+01E7;AL # LATIN SMALL LETTER G WITH CARON
+01E8;AL # LATIN CAPITAL LETTER K WITH CARON
+01E9;AL # LATIN SMALL LETTER K WITH CARON
+01EA;AL # LATIN CAPITAL LETTER O WITH OGONEK
+01EB;AL # LATIN SMALL LETTER O WITH OGONEK
+01EC;AL # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED;AL # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE;AL # LATIN CAPITAL LETTER EZH WITH CARON
+01EF;AL # LATIN SMALL LETTER EZH WITH CARON
+01F0;AL # LATIN SMALL LETTER J WITH CARON
+01F1;AL # LATIN CAPITAL LETTER DZ
+01F2;AL # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3;AL # LATIN SMALL LETTER DZ
+01F4;AL # LATIN CAPITAL LETTER G WITH ACUTE
+01F5;AL # LATIN SMALL LETTER G WITH ACUTE
+01F6;AL # LATIN CAPITAL LETTER HWAIR
+01F7;AL # LATIN CAPITAL LETTER WYNN
+01F8;AL # LATIN CAPITAL LETTER N WITH GRAVE
+01F9;AL # LATIN SMALL LETTER N WITH GRAVE
+01FA;AL # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB;AL # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC;AL # LATIN CAPITAL LETTER AE WITH ACUTE
+01FD;AL # LATIN SMALL LETTER AE WITH ACUTE
+01FE;AL # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF;AL # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200;AL # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201;AL # LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202;AL # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203;AL # LATIN SMALL LETTER A WITH INVERTED BREVE
+0204;AL # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205;AL # LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206;AL # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207;AL # LATIN SMALL LETTER E WITH INVERTED BREVE
+0208;AL # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209;AL # LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A;AL # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B;AL # LATIN SMALL LETTER I WITH INVERTED BREVE
+020C;AL # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D;AL # LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E;AL # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F;AL # LATIN SMALL LETTER O WITH INVERTED BREVE
+0210;AL # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211;AL # LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212;AL # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213;AL # LATIN SMALL LETTER R WITH INVERTED BREVE
+0214;AL # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215;AL # LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216;AL # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217;AL # LATIN SMALL LETTER U WITH INVERTED BREVE
+0218;AL # LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219;AL # LATIN SMALL LETTER S WITH COMMA BELOW
+021A;AL # LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B;AL # LATIN SMALL LETTER T WITH COMMA BELOW
+021C;AL # LATIN CAPITAL LETTER YOGH
+021D;AL # LATIN SMALL LETTER YOGH
+021E;AL # LATIN CAPITAL LETTER H WITH CARON
+021F;AL # LATIN SMALL LETTER H WITH CARON
+0220;AL # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0221;AL # LATIN SMALL LETTER D WITH CURL
+0222;AL # LATIN CAPITAL LETTER OU
+0223;AL # LATIN SMALL LETTER OU
+0224;AL # LATIN CAPITAL LETTER Z WITH HOOK
+0225;AL # LATIN SMALL LETTER Z WITH HOOK
+0226;AL # LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227;AL # LATIN SMALL LETTER A WITH DOT ABOVE
+0228;AL # LATIN CAPITAL LETTER E WITH CEDILLA
+0229;AL # LATIN SMALL LETTER E WITH CEDILLA
+022A;AL # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B;AL # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C;AL # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D;AL # LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E;AL # LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F;AL # LATIN SMALL LETTER O WITH DOT ABOVE
+0230;AL # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231;AL # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232;AL # LATIN CAPITAL LETTER Y WITH MACRON
+0233;AL # LATIN SMALL LETTER Y WITH MACRON
+0234;AL # LATIN SMALL LETTER L WITH CURL
+0235;AL # LATIN SMALL LETTER N WITH CURL
+0236;AL # LATIN SMALL LETTER T WITH CURL
+0237;AL # LATIN SMALL LETTER DOTLESS J
+0238;AL # LATIN SMALL LETTER DB DIGRAPH
+0239;AL # LATIN SMALL LETTER QP DIGRAPH
+023A;AL # LATIN CAPITAL LETTER A WITH STROKE
+023B;AL # LATIN CAPITAL LETTER C WITH STROKE
+023C;AL # LATIN SMALL LETTER C WITH STROKE
+023D;AL # LATIN CAPITAL LETTER L WITH BAR
+023E;AL # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F;AL # LATIN SMALL LETTER S WITH SWASH TAIL
+0240;AL # LATIN SMALL LETTER Z WITH SWASH TAIL
+0241;AL # LATIN CAPITAL LETTER GLOTTAL STOP
+0250;AL # LATIN SMALL LETTER TURNED A
+0251;AL # LATIN SMALL LETTER ALPHA
+0252;AL # LATIN SMALL LETTER TURNED ALPHA
+0253;AL # LATIN SMALL LETTER B WITH HOOK
+0254;AL # LATIN SMALL LETTER OPEN O
+0255;AL # LATIN SMALL LETTER C WITH CURL
+0256;AL # LATIN SMALL LETTER D WITH TAIL
+0257;AL # LATIN SMALL LETTER D WITH HOOK
+0258;AL # LATIN SMALL LETTER REVERSED E
+0259;AL # LATIN SMALL LETTER SCHWA
+025A;AL # LATIN SMALL LETTER SCHWA WITH HOOK
+025B;AL # LATIN SMALL LETTER OPEN E
+025C;AL # LATIN SMALL LETTER REVERSED OPEN E
+025D;AL # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E;AL # LATIN SMALL LETTER CLOSED REVERSED OPEN E
+025F;AL # LATIN SMALL LETTER DOTLESS J WITH STROKE
+0260;AL # LATIN SMALL LETTER G WITH HOOK
+0261;AL # LATIN SMALL LETTER SCRIPT G
+0262;AL # LATIN LETTER SMALL CAPITAL G
+0263;AL # LATIN SMALL LETTER GAMMA
+0264;AL # LATIN SMALL LETTER RAMS HORN
+0265;AL # LATIN SMALL LETTER TURNED H
+0266;AL # LATIN SMALL LETTER H WITH HOOK
+0267;AL # LATIN SMALL LETTER HENG WITH HOOK
+0268;AL # LATIN SMALL LETTER I WITH STROKE
+0269;AL # LATIN SMALL LETTER IOTA
+026A;AL # LATIN LETTER SMALL CAPITAL I
+026B;AL # LATIN SMALL LETTER L WITH MIDDLE TILDE
+026C;AL # LATIN SMALL LETTER L WITH BELT
+026D;AL # LATIN SMALL LETTER L WITH RETROFLEX HOOK
+026E;AL # LATIN SMALL LETTER LEZH
+026F;AL # LATIN SMALL LETTER TURNED M
+0270;AL # LATIN SMALL LETTER TURNED M WITH LONG LEG
+0271;AL # LATIN SMALL LETTER M WITH HOOK
+0272;AL # LATIN SMALL LETTER N WITH LEFT HOOK
+0273;AL # LATIN SMALL LETTER N WITH RETROFLEX HOOK
+0274;AL # LATIN LETTER SMALL CAPITAL N
+0275;AL # LATIN SMALL LETTER BARRED O
+0276;AL # LATIN LETTER SMALL CAPITAL OE
+0277;AL # LATIN SMALL LETTER CLOSED OMEGA
+0278;AL # LATIN SMALL LETTER PHI
+0279;AL # LATIN SMALL LETTER TURNED R
+027A;AL # LATIN SMALL LETTER TURNED R WITH LONG LEG
+027B;AL # LATIN SMALL LETTER TURNED R WITH HOOK
+027C;AL # LATIN SMALL LETTER R WITH LONG LEG
+027D;AL # LATIN SMALL LETTER R WITH TAIL
+027E;AL # LATIN SMALL LETTER R WITH FISHHOOK
+027F;AL # LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+0280;AL # LATIN LETTER SMALL CAPITAL R
+0281;AL # LATIN LETTER SMALL CAPITAL INVERTED R
+0282;AL # LATIN SMALL LETTER S WITH HOOK
+0283;AL # LATIN SMALL LETTER ESH
+0284;AL # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+0285;AL # LATIN SMALL LETTER SQUAT REVERSED ESH
+0286;AL # LATIN SMALL LETTER ESH WITH CURL
+0287;AL # LATIN SMALL LETTER TURNED T
+0288;AL # LATIN SMALL LETTER T WITH RETROFLEX HOOK
+0289;AL # LATIN SMALL LETTER U BAR
+028A;AL # LATIN SMALL LETTER UPSILON
+028B;AL # LATIN SMALL LETTER V WITH HOOK
+028C;AL # LATIN SMALL LETTER TURNED V
+028D;AL # LATIN SMALL LETTER TURNED W
+028E;AL # LATIN SMALL LETTER TURNED Y
+028F;AL # LATIN LETTER SMALL CAPITAL Y
+0290;AL # LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+0291;AL # LATIN SMALL LETTER Z WITH CURL
+0292;AL # LATIN SMALL LETTER EZH
+0293;AL # LATIN SMALL LETTER EZH WITH CURL
+0294;AL # LATIN LETTER GLOTTAL STOP
+0295;AL # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+0296;AL # LATIN LETTER INVERTED GLOTTAL STOP
+0297;AL # LATIN LETTER STRETCHED C
+0298;AL # LATIN LETTER BILABIAL CLICK
+0299;AL # LATIN LETTER SMALL CAPITAL B
+029A;AL # LATIN SMALL LETTER CLOSED OPEN E
+029B;AL # LATIN LETTER SMALL CAPITAL G WITH HOOK
+029C;AL # LATIN LETTER SMALL CAPITAL H
+029D;AL # LATIN SMALL LETTER J WITH CROSSED-TAIL
+029E;AL # LATIN SMALL LETTER TURNED K
+029F;AL # LATIN LETTER SMALL CAPITAL L
+02A0;AL # LATIN SMALL LETTER Q WITH HOOK
+02A1;AL # LATIN LETTER GLOTTAL STOP WITH STROKE
+02A2;AL # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+02A3;AL # LATIN SMALL LETTER DZ DIGRAPH
+02A4;AL # LATIN SMALL LETTER DEZH DIGRAPH
+02A5;AL # LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+02A6;AL # LATIN SMALL LETTER TS DIGRAPH
+02A7;AL # LATIN SMALL LETTER TESH DIGRAPH
+02A8;AL # LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9;AL # LATIN SMALL LETTER FENG DIGRAPH
+02AA;AL # LATIN SMALL LETTER LS DIGRAPH
+02AB;AL # LATIN SMALL LETTER LZ DIGRAPH
+02AC;AL # LATIN LETTER BILABIAL PERCUSSIVE
+02AD;AL # LATIN LETTER BIDENTAL PERCUSSIVE
+02AE;AL # LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF;AL # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0;AL # MODIFIER LETTER SMALL H
+02B1;AL # MODIFIER LETTER SMALL H WITH HOOK
+02B2;AL # MODIFIER LETTER SMALL J
+02B3;AL # MODIFIER LETTER SMALL R
+02B4;AL # MODIFIER LETTER SMALL TURNED R
+02B5;AL # MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6;AL # MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7;AL # MODIFIER LETTER SMALL W
+02B8;AL # MODIFIER LETTER SMALL Y
+02B9;AL # MODIFIER LETTER PRIME
+02BA;AL # MODIFIER LETTER DOUBLE PRIME
+02BB;AL # MODIFIER LETTER TURNED COMMA
+02BC;AL # MODIFIER LETTER APOSTROPHE
+02BD;AL # MODIFIER LETTER REVERSED COMMA
+02BE;AL # MODIFIER LETTER RIGHT HALF RING
+02BF;AL # MODIFIER LETTER LEFT HALF RING
+02C0;AL # MODIFIER LETTER GLOTTAL STOP
+02C1;AL # MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2;AL # MODIFIER LETTER LEFT ARROWHEAD
+02C3;AL # MODIFIER LETTER RIGHT ARROWHEAD
+02C4;AL # MODIFIER LETTER UP ARROWHEAD
+02C5;AL # MODIFIER LETTER DOWN ARROWHEAD
+02C6;AL # MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7;AI # CARON
+02C8;BB # MODIFIER LETTER VERTICAL LINE
+02C9;AI # MODIFIER LETTER MACRON
+02CA;AI # MODIFIER LETTER ACUTE ACCENT
+02CB;AI # MODIFIER LETTER GRAVE ACCENT
+02CC;BB # MODIFIER LETTER LOW VERTICAL LINE
+02CD;AI # MODIFIER LETTER LOW MACRON
+02CE;AL # MODIFIER LETTER LOW GRAVE ACCENT
+02CF;AL # MODIFIER LETTER LOW ACUTE ACCENT
+02D0;AI # MODIFIER LETTER TRIANGULAR COLON
+02D1;AL # MODIFIER LETTER HALF TRIANGULAR COLON
+02D2;AL # MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3;AL # MODIFIER LETTER CENTRED LEFT HALF RING
+02D4;AL # MODIFIER LETTER UP TACK
+02D5;AL # MODIFIER LETTER DOWN TACK
+02D6;AL # MODIFIER LETTER PLUS SIGN
+02D7;AL # MODIFIER LETTER MINUS SIGN
+02D8;AI # BREVE
+02D9;AI # DOT ABOVE
+02DA;AI # RING ABOVE
+02DB;AI # OGONEK
+02DC;AL # SMALL TILDE
+02DD;AI # DOUBLE ACUTE ACCENT
+02DE;AL # MODIFIER LETTER RHOTIC HOOK
+02DF;AL # MODIFIER LETTER CROSS ACCENT
+02E0;AL # MODIFIER LETTER SMALL GAMMA
+02E1;AL # MODIFIER LETTER SMALL L
+02E2;AL # MODIFIER LETTER SMALL S
+02E3;AL # MODIFIER LETTER SMALL X
+02E4;AL # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5;AL # MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6;AL # MODIFIER LETTER HIGH TONE BAR
+02E7;AL # MODIFIER LETTER MID TONE BAR
+02E8;AL # MODIFIER LETTER LOW TONE BAR
+02E9;AL # MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA;AL # MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB;AL # MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC;AL # MODIFIER LETTER VOICING
+02ED;AL # MODIFIER LETTER UNASPIRATED
+02EE;AL # MODIFIER LETTER DOUBLE APOSTROPHE
+02EF;AL # MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0;AL # MODIFIER LETTER LOW UP ARROWHEAD
+02F1;AL # MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2;AL # MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3;AL # MODIFIER LETTER LOW RING
+02F4;AL # MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5;AL # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6;AL # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7;AL # MODIFIER LETTER LOW TILDE
+02F8;AL # MODIFIER LETTER RAISED COLON
+02F9;AL # MODIFIER LETTER BEGIN HIGH TONE
+02FA;AL # MODIFIER LETTER END HIGH TONE
+02FB;AL # MODIFIER LETTER BEGIN LOW TONE
+02FC;AL # MODIFIER LETTER END LOW TONE
+02FD;AL # MODIFIER LETTER SHELF
+02FE;AL # MODIFIER LETTER OPEN SHELF
+02FF;AL # MODIFIER LETTER LOW LEFT ARROW
+0300;CM # COMBINING GRAVE ACCENT
+0301;CM # COMBINING ACUTE ACCENT
+0302;CM # COMBINING CIRCUMFLEX ACCENT
+0303;CM # COMBINING TILDE
+0304;CM # COMBINING MACRON
+0305;CM # COMBINING OVERLINE
+0306;CM # COMBINING BREVE
+0307;CM # COMBINING DOT ABOVE
+0308;CM # COMBINING DIAERESIS
+0309;CM # COMBINING HOOK ABOVE
+030A;CM # COMBINING RING ABOVE
+030B;CM # COMBINING DOUBLE ACUTE ACCENT
+030C;CM # COMBINING CARON
+030D;CM # COMBINING VERTICAL LINE ABOVE
+030E;CM # COMBINING DOUBLE VERTICAL LINE ABOVE
+030F;CM # COMBINING DOUBLE GRAVE ACCENT
+0310;CM # COMBINING CANDRABINDU
+0311;CM # COMBINING INVERTED BREVE
+0312;CM # COMBINING TURNED COMMA ABOVE
+0313;CM # COMBINING COMMA ABOVE
+0314;CM # COMBINING REVERSED COMMA ABOVE
+0315;CM # COMBINING COMMA ABOVE RIGHT
+0316;CM # COMBINING GRAVE ACCENT BELOW
+0317;CM # COMBINING ACUTE ACCENT BELOW
+0318;CM # COMBINING LEFT TACK BELOW
+0319;CM # COMBINING RIGHT TACK BELOW
+031A;CM # COMBINING LEFT ANGLE ABOVE
+031B;CM # COMBINING HORN
+031C;CM # COMBINING LEFT HALF RING BELOW
+031D;CM # COMBINING UP TACK BELOW
+031E;CM # COMBINING DOWN TACK BELOW
+031F;CM # COMBINING PLUS SIGN BELOW
+0320;CM # COMBINING MINUS SIGN BELOW
+0321;CM # COMBINING PALATALIZED HOOK BELOW
+0322;CM # COMBINING RETROFLEX HOOK BELOW
+0323;CM # COMBINING DOT BELOW
+0324;CM # COMBINING DIAERESIS BELOW
+0325;CM # COMBINING RING BELOW
+0326;CM # COMBINING COMMA BELOW
+0327;CM # COMBINING CEDILLA
+0328;CM # COMBINING OGONEK
+0329;CM # COMBINING VERTICAL LINE BELOW
+032A;CM # COMBINING BRIDGE BELOW
+032B;CM # COMBINING INVERTED DOUBLE ARCH BELOW
+032C;CM # COMBINING CARON BELOW
+032D;CM # COMBINING CIRCUMFLEX ACCENT BELOW
+032E;CM # COMBINING BREVE BELOW
+032F;CM # COMBINING INVERTED BREVE BELOW
+0330;CM # COMBINING TILDE BELOW
+0331;CM # COMBINING MACRON BELOW
+0332;CM # COMBINING LOW LINE
+0333;CM # COMBINING DOUBLE LOW LINE
+0334;CM # COMBINING TILDE OVERLAY
+0335;CM # COMBINING SHORT STROKE OVERLAY
+0336;CM # COMBINING LONG STROKE OVERLAY
+0337;CM # COMBINING SHORT SOLIDUS OVERLAY
+0338;CM # COMBINING LONG SOLIDUS OVERLAY
+0339;CM # COMBINING RIGHT HALF RING BELOW
+033A;CM # COMBINING INVERTED BRIDGE BELOW
+033B;CM # COMBINING SQUARE BELOW
+033C;CM # COMBINING SEAGULL BELOW
+033D;CM # COMBINING X ABOVE
+033E;CM # COMBINING VERTICAL TILDE
+033F;CM # COMBINING DOUBLE OVERLINE
+0340;CM # COMBINING GRAVE TONE MARK
+0341;CM # COMBINING ACUTE TONE MARK
+0342;CM # COMBINING GREEK PERISPOMENI
+0343;CM # COMBINING GREEK KORONIS
+0344;CM # COMBINING GREEK DIALYTIKA TONOS
+0345;CM # COMBINING GREEK YPOGEGRAMMENI
+0346;CM # COMBINING BRIDGE ABOVE
+0347;CM # COMBINING EQUALS SIGN BELOW
+0348;CM # COMBINING DOUBLE VERTICAL LINE BELOW
+0349;CM # COMBINING LEFT ANGLE BELOW
+034A;CM # COMBINING NOT TILDE ABOVE
+034B;CM # COMBINING HOMOTHETIC ABOVE
+034C;CM # COMBINING ALMOST EQUAL TO ABOVE
+034D;CM # COMBINING LEFT RIGHT ARROW BELOW
+034E;CM # COMBINING UPWARDS ARROW BELOW
+034F;GL # COMBINING GRAPHEME JOINER
+0350;CM # COMBINING RIGHT ARROWHEAD ABOVE
+0351;CM # COMBINING LEFT HALF RING ABOVE
+0352;CM # COMBINING FERMATA
+0353;CM # COMBINING X BELOW
+0354;CM # COMBINING LEFT ARROWHEAD BELOW
+0355;CM # COMBINING RIGHT ARROWHEAD BELOW
+0356;CM # COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0357;CM # COMBINING RIGHT HALF RING ABOVE
+0358;CM # COMBINING DOT ABOVE RIGHT
+0359;CM # COMBINING ASTERISK BELOW
+035A;CM # COMBINING DOUBLE RING BELOW
+035B;CM # COMBINING ZIGZAG ABOVE
+035C;CM # COMBINING DOUBLE BREVE BELOW
+035D;GL # COMBINING DOUBLE BREVE
+035E;GL # COMBINING DOUBLE MACRON
+035F;GL # COMBINING DOUBLE MACRON BELOW
+0360;GL # COMBINING DOUBLE TILDE
+0361;GL # COMBINING DOUBLE INVERTED BREVE
+0362;GL # COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363;CM # COMBINING LATIN SMALL LETTER A
+0364;CM # COMBINING LATIN SMALL LETTER E
+0365;CM # COMBINING LATIN SMALL LETTER I
+0366;CM # COMBINING LATIN SMALL LETTER O
+0367;CM # COMBINING LATIN SMALL LETTER U
+0368;CM # COMBINING LATIN SMALL LETTER C
+0369;CM # COMBINING LATIN SMALL LETTER D
+036A;CM # COMBINING LATIN SMALL LETTER H
+036B;CM # COMBINING LATIN SMALL LETTER M
+036C;CM # COMBINING LATIN SMALL LETTER R
+036D;CM # COMBINING LATIN SMALL LETTER T
+036E;CM # COMBINING LATIN SMALL LETTER V
+036F;CM # COMBINING LATIN SMALL LETTER X
+0374;AL # GREEK NUMERAL SIGN
+0375;AL # GREEK LOWER NUMERAL SIGN
+037A;AL # GREEK YPOGEGRAMMENI
+037E;IS # GREEK QUESTION MARK
+0384;AL # GREEK TONOS
+0385;AL # GREEK DIALYTIKA TONOS
+0386;AL # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387;AL # GREEK ANO TELEIA
+0388;AL # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389;AL # GREEK CAPITAL LETTER ETA WITH TONOS
+038A;AL # GREEK CAPITAL LETTER IOTA WITH TONOS
+038C;AL # GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E;AL # GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F;AL # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390;AL # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391;AL # GREEK CAPITAL LETTER ALPHA
+0392;AL # GREEK CAPITAL LETTER BETA
+0393;AL # GREEK CAPITAL LETTER GAMMA
+0394;AL # GREEK CAPITAL LETTER DELTA
+0395;AL # GREEK CAPITAL LETTER EPSILON
+0396;AL # GREEK CAPITAL LETTER ZETA
+0397;AL # GREEK CAPITAL LETTER ETA
+0398;AL # GREEK CAPITAL LETTER THETA
+0399;AL # GREEK CAPITAL LETTER IOTA
+039A;AL # GREEK CAPITAL LETTER KAPPA
+039B;AL # GREEK CAPITAL LETTER LAMDA
+039C;AL # GREEK CAPITAL LETTER MU
+039D;AL # GREEK CAPITAL LETTER NU
+039E;AL # GREEK CAPITAL LETTER XI
+039F;AL # GREEK CAPITAL LETTER OMICRON
+03A0;AL # GREEK CAPITAL LETTER PI
+03A1;AL # GREEK CAPITAL LETTER RHO
+03A3;AL # GREEK CAPITAL LETTER SIGMA
+03A4;AL # GREEK CAPITAL LETTER TAU
+03A5;AL # GREEK CAPITAL LETTER UPSILON
+03A6;AL # GREEK CAPITAL LETTER PHI
+03A7;AL # GREEK CAPITAL LETTER CHI
+03A8;AL # GREEK CAPITAL LETTER PSI
+03A9;AL # GREEK CAPITAL LETTER OMEGA
+03AA;AL # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB;AL # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC;AL # GREEK SMALL LETTER ALPHA WITH TONOS
+03AD;AL # GREEK SMALL LETTER EPSILON WITH TONOS
+03AE;AL # GREEK SMALL LETTER ETA WITH TONOS
+03AF;AL # GREEK SMALL LETTER IOTA WITH TONOS
+03B0;AL # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1;AL # GREEK SMALL LETTER ALPHA
+03B2;AL # GREEK SMALL LETTER BETA
+03B3;AL # GREEK SMALL LETTER GAMMA
+03B4;AL # GREEK SMALL LETTER DELTA
+03B5;AL # GREEK SMALL LETTER EPSILON
+03B6;AL # GREEK SMALL LETTER ZETA
+03B7;AL # GREEK SMALL LETTER ETA
+03B8;AL # GREEK SMALL LETTER THETA
+03B9;AL # GREEK SMALL LETTER IOTA
+03BA;AL # GREEK SMALL LETTER KAPPA
+03BB;AL # GREEK SMALL LETTER LAMDA
+03BC;AL # GREEK SMALL LETTER MU
+03BD;AL # GREEK SMALL LETTER NU
+03BE;AL # GREEK SMALL LETTER XI
+03BF;AL # GREEK SMALL LETTER OMICRON
+03C0;AL # GREEK SMALL LETTER PI
+03C1;AL # GREEK SMALL LETTER RHO
+03C2;AL # GREEK SMALL LETTER FINAL SIGMA
+03C3;AL # GREEK SMALL LETTER SIGMA
+03C4;AL # GREEK SMALL LETTER TAU
+03C5;AL # GREEK SMALL LETTER UPSILON
+03C6;AL # GREEK SMALL LETTER PHI
+03C7;AL # GREEK SMALL LETTER CHI
+03C8;AL # GREEK SMALL LETTER PSI
+03C9;AL # GREEK SMALL LETTER OMEGA
+03CA;AL # GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB;AL # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC;AL # GREEK SMALL LETTER OMICRON WITH TONOS
+03CD;AL # GREEK SMALL LETTER UPSILON WITH TONOS
+03CE;AL # GREEK SMALL LETTER OMEGA WITH TONOS
+03D0;AL # GREEK BETA SYMBOL
+03D1;AL # GREEK THETA SYMBOL
+03D2;AL # GREEK UPSILON WITH HOOK SYMBOL
+03D3;AL # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4;AL # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5;AL # GREEK PHI SYMBOL
+03D6;AL # GREEK PI SYMBOL
+03D7;AL # GREEK KAI SYMBOL
+03D8;AL # GREEK LETTER ARCHAIC KOPPA
+03D9;AL # GREEK SMALL LETTER ARCHAIC KOPPA
+03DA;AL # GREEK LETTER STIGMA
+03DB;AL # GREEK SMALL LETTER STIGMA
+03DC;AL # GREEK LETTER DIGAMMA
+03DD;AL # GREEK SMALL LETTER DIGAMMA
+03DE;AL # GREEK LETTER KOPPA
+03DF;AL # GREEK SMALL LETTER KOPPA
+03E0;AL # GREEK LETTER SAMPI
+03E1;AL # GREEK SMALL LETTER SAMPI
+03E2;AL # COPTIC CAPITAL LETTER SHEI
+03E3;AL # COPTIC SMALL LETTER SHEI
+03E4;AL # COPTIC CAPITAL LETTER FEI
+03E5;AL # COPTIC SMALL LETTER FEI
+03E6;AL # COPTIC CAPITAL LETTER KHEI
+03E7;AL # COPTIC SMALL LETTER KHEI
+03E8;AL # COPTIC CAPITAL LETTER HORI
+03E9;AL # COPTIC SMALL LETTER HORI
+03EA;AL # COPTIC CAPITAL LETTER GANGIA
+03EB;AL # COPTIC SMALL LETTER GANGIA
+03EC;AL # COPTIC CAPITAL LETTER SHIMA
+03ED;AL # COPTIC SMALL LETTER SHIMA
+03EE;AL # COPTIC CAPITAL LETTER DEI
+03EF;AL # COPTIC SMALL LETTER DEI
+03F0;AL # GREEK KAPPA SYMBOL
+03F1;AL # GREEK RHO SYMBOL
+03F2;AL # GREEK LUNATE SIGMA SYMBOL
+03F3;AL # GREEK LETTER YOT
+03F4;AL # GREEK CAPITAL THETA SYMBOL
+03F5;AL # GREEK LUNATE EPSILON SYMBOL
+03F6;AL # GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7;AL # GREEK CAPITAL LETTER SHO
+03F8;AL # GREEK SMALL LETTER SHO
+03F9;AL # GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA;AL # GREEK CAPITAL LETTER SAN
+03FB;AL # GREEK SMALL LETTER SAN
+03FC;AL # GREEK RHO WITH STROKE SYMBOL
+03FD;AL # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE;AL # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF;AL # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400;AL # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401;AL # CYRILLIC CAPITAL LETTER IO
+0402;AL # CYRILLIC CAPITAL LETTER DJE
+0403;AL # CYRILLIC CAPITAL LETTER GJE
+0404;AL # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405;AL # CYRILLIC CAPITAL LETTER DZE
+0406;AL # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407;AL # CYRILLIC CAPITAL LETTER YI
+0408;AL # CYRILLIC CAPITAL LETTER JE
+0409;AL # CYRILLIC CAPITAL LETTER LJE
+040A;AL # CYRILLIC CAPITAL LETTER NJE
+040B;AL # CYRILLIC CAPITAL LETTER TSHE
+040C;AL # CYRILLIC CAPITAL LETTER KJE
+040D;AL # CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E;AL # CYRILLIC CAPITAL LETTER SHORT U
+040F;AL # CYRILLIC CAPITAL LETTER DZHE
+0410;AL # CYRILLIC CAPITAL LETTER A
+0411;AL # CYRILLIC CAPITAL LETTER BE
+0412;AL # CYRILLIC CAPITAL LETTER VE
+0413;AL # CYRILLIC CAPITAL LETTER GHE
+0414;AL # CYRILLIC CAPITAL LETTER DE
+0415;AL # CYRILLIC CAPITAL LETTER IE
+0416;AL # CYRILLIC CAPITAL LETTER ZHE
+0417;AL # CYRILLIC CAPITAL LETTER ZE
+0418;AL # CYRILLIC CAPITAL LETTER I
+0419;AL # CYRILLIC CAPITAL LETTER SHORT I
+041A;AL # CYRILLIC CAPITAL LETTER KA
+041B;AL # CYRILLIC CAPITAL LETTER EL
+041C;AL # CYRILLIC CAPITAL LETTER EM
+041D;AL # CYRILLIC CAPITAL LETTER EN
+041E;AL # CYRILLIC CAPITAL LETTER O
+041F;AL # CYRILLIC CAPITAL LETTER PE
+0420;AL # CYRILLIC CAPITAL LETTER ER
+0421;AL # CYRILLIC CAPITAL LETTER ES
+0422;AL # CYRILLIC CAPITAL LETTER TE
+0423;AL # CYRILLIC CAPITAL LETTER U
+0424;AL # CYRILLIC CAPITAL LETTER EF
+0425;AL # CYRILLIC CAPITAL LETTER HA
+0426;AL # CYRILLIC CAPITAL LETTER TSE
+0427;AL # CYRILLIC CAPITAL LETTER CHE
+0428;AL # CYRILLIC CAPITAL LETTER SHA
+0429;AL # CYRILLIC CAPITAL LETTER SHCHA
+042A;AL # CYRILLIC CAPITAL LETTER HARD SIGN
+042B;AL # CYRILLIC CAPITAL LETTER YERU
+042C;AL # CYRILLIC CAPITAL LETTER SOFT SIGN
+042D;AL # CYRILLIC CAPITAL LETTER E
+042E;AL # CYRILLIC CAPITAL LETTER YU
+042F;AL # CYRILLIC CAPITAL LETTER YA
+0430;AL # CYRILLIC SMALL LETTER A
+0431;AL # CYRILLIC SMALL LETTER BE
+0432;AL # CYRILLIC SMALL LETTER VE
+0433;AL # CYRILLIC SMALL LETTER GHE
+0434;AL # CYRILLIC SMALL LETTER DE
+0435;AL # CYRILLIC SMALL LETTER IE
+0436;AL # CYRILLIC SMALL LETTER ZHE
+0437;AL # CYRILLIC SMALL LETTER ZE
+0438;AL # CYRILLIC SMALL LETTER I
+0439;AL # CYRILLIC SMALL LETTER SHORT I
+043A;AL # CYRILLIC SMALL LETTER KA
+043B;AL # CYRILLIC SMALL LETTER EL
+043C;AL # CYRILLIC SMALL LETTER EM
+043D;AL # CYRILLIC SMALL LETTER EN
+043E;AL # CYRILLIC SMALL LETTER O
+043F;AL # CYRILLIC SMALL LETTER PE
+0440;AL # CYRILLIC SMALL LETTER ER
+0441;AL # CYRILLIC SMALL LETTER ES
+0442;AL # CYRILLIC SMALL LETTER TE
+0443;AL # CYRILLIC SMALL LETTER U
+0444;AL # CYRILLIC SMALL LETTER EF
+0445;AL # CYRILLIC SMALL LETTER HA
+0446;AL # CYRILLIC SMALL LETTER TSE
+0447;AL # CYRILLIC SMALL LETTER CHE
+0448;AL # CYRILLIC SMALL LETTER SHA
+0449;AL # CYRILLIC SMALL LETTER SHCHA
+044A;AL # CYRILLIC SMALL LETTER HARD SIGN
+044B;AL # CYRILLIC SMALL LETTER YERU
+044C;AL # CYRILLIC SMALL LETTER SOFT SIGN
+044D;AL # CYRILLIC SMALL LETTER E
+044E;AL # CYRILLIC SMALL LETTER YU
+044F;AL # CYRILLIC SMALL LETTER YA
+0450;AL # CYRILLIC SMALL LETTER IE WITH GRAVE
+0451;AL # CYRILLIC SMALL LETTER IO
+0452;AL # CYRILLIC SMALL LETTER DJE
+0453;AL # CYRILLIC SMALL LETTER GJE
+0454;AL # CYRILLIC SMALL LETTER UKRAINIAN IE
+0455;AL # CYRILLIC SMALL LETTER DZE
+0456;AL # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457;AL # CYRILLIC SMALL LETTER YI
+0458;AL # CYRILLIC SMALL LETTER JE
+0459;AL # CYRILLIC SMALL LETTER LJE
+045A;AL # CYRILLIC SMALL LETTER NJE
+045B;AL # CYRILLIC SMALL LETTER TSHE
+045C;AL # CYRILLIC SMALL LETTER KJE
+045D;AL # CYRILLIC SMALL LETTER I WITH GRAVE
+045E;AL # CYRILLIC SMALL LETTER SHORT U
+045F;AL # CYRILLIC SMALL LETTER DZHE
+0460;AL # CYRILLIC CAPITAL LETTER OMEGA
+0461;AL # CYRILLIC SMALL LETTER OMEGA
+0462;AL # CYRILLIC CAPITAL LETTER YAT
+0463;AL # CYRILLIC SMALL LETTER YAT
+0464;AL # CYRILLIC CAPITAL LETTER IOTIFIED E
+0465;AL # CYRILLIC SMALL LETTER IOTIFIED E
+0466;AL # CYRILLIC CAPITAL LETTER LITTLE YUS
+0467;AL # CYRILLIC SMALL LETTER LITTLE YUS
+0468;AL # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469;AL # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A;AL # CYRILLIC CAPITAL LETTER BIG YUS
+046B;AL # CYRILLIC SMALL LETTER BIG YUS
+046C;AL # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D;AL # CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E;AL # CYRILLIC CAPITAL LETTER KSI
+046F;AL # CYRILLIC SMALL LETTER KSI
+0470;AL # CYRILLIC CAPITAL LETTER PSI
+0471;AL # CYRILLIC SMALL LETTER PSI
+0472;AL # CYRILLIC CAPITAL LETTER FITA
+0473;AL # CYRILLIC SMALL LETTER FITA
+0474;AL # CYRILLIC CAPITAL LETTER IZHITSA
+0475;AL # CYRILLIC SMALL LETTER IZHITSA
+0476;AL # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477;AL # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478;AL # CYRILLIC CAPITAL LETTER UK
+0479;AL # CYRILLIC SMALL LETTER UK
+047A;AL # CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B;AL # CYRILLIC SMALL LETTER ROUND OMEGA
+047C;AL # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D;AL # CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E;AL # CYRILLIC CAPITAL LETTER OT
+047F;AL # CYRILLIC SMALL LETTER OT
+0480;AL # CYRILLIC CAPITAL LETTER KOPPA
+0481;AL # CYRILLIC SMALL LETTER KOPPA
+0482;AL # CYRILLIC THOUSANDS SIGN
+0483;CM # COMBINING CYRILLIC TITLO
+0484;CM # COMBINING CYRILLIC PALATALIZATION
+0485;CM # COMBINING CYRILLIC DASIA PNEUMATA
+0486;CM # COMBINING CYRILLIC PSILI PNEUMATA
+0488;CM # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489;CM # COMBINING CYRILLIC MILLIONS SIGN
+048A;AL # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B;AL # CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C;AL # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D;AL # CYRILLIC SMALL LETTER SEMISOFT SIGN
+048E;AL # CYRILLIC CAPITAL LETTER ER WITH TICK
+048F;AL # CYRILLIC SMALL LETTER ER WITH TICK
+0490;AL # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491;AL # CYRILLIC SMALL LETTER GHE WITH UPTURN
+0492;AL # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493;AL # CYRILLIC SMALL LETTER GHE WITH STROKE
+0494;AL # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495;AL # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0496;AL # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497;AL # CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0498;AL # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499;AL # CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049A;AL # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B;AL # CYRILLIC SMALL LETTER KA WITH DESCENDER
+049C;AL # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D;AL # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049E;AL # CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F;AL # CYRILLIC SMALL LETTER KA WITH STROKE
+04A0;AL # CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1;AL # CYRILLIC SMALL LETTER BASHKIR KA
+04A2;AL # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3;AL # CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A4;AL # CYRILLIC CAPITAL LIGATURE EN GHE
+04A5;AL # CYRILLIC SMALL LIGATURE EN GHE
+04A6;AL # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A7;AL # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A8;AL # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9;AL # CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA;AL # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB;AL # CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AC;AL # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD;AL # CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AE;AL # CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF;AL # CYRILLIC SMALL LETTER STRAIGHT U
+04B0;AL # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1;AL # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B2;AL # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3;AL # CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B4;AL # CYRILLIC CAPITAL LIGATURE TE TSE
+04B5;AL # CYRILLIC SMALL LIGATURE TE TSE
+04B6;AL # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7;AL # CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B8;AL # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9;AL # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BA;AL # CYRILLIC CAPITAL LETTER SHHA
+04BB;AL # CYRILLIC SMALL LETTER SHHA
+04BC;AL # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD;AL # CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE;AL # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF;AL # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0;AL # CYRILLIC LETTER PALOCHKA
+04C1;AL # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2;AL # CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C3;AL # CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4;AL # CYRILLIC SMALL LETTER KA WITH HOOK
+04C5;AL # CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6;AL # CYRILLIC SMALL LETTER EL WITH TAIL
+04C7;AL # CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8;AL # CYRILLIC SMALL LETTER EN WITH HOOK
+04C9;AL # CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA;AL # CYRILLIC SMALL LETTER EN WITH TAIL
+04CB;AL # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC;AL # CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD;AL # CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE;AL # CYRILLIC SMALL LETTER EM WITH TAIL
+04D0;AL # CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1;AL # CYRILLIC SMALL LETTER A WITH BREVE
+04D2;AL # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3;AL # CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D4;AL # CYRILLIC CAPITAL LIGATURE A IE
+04D5;AL # CYRILLIC SMALL LIGATURE A IE
+04D6;AL # CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7;AL # CYRILLIC SMALL LETTER IE WITH BREVE
+04D8;AL # CYRILLIC CAPITAL LETTER SCHWA
+04D9;AL # CYRILLIC SMALL LETTER SCHWA
+04DA;AL # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB;AL # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC;AL # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD;AL # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE;AL # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF;AL # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E0;AL # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1;AL # CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E2;AL # CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3;AL # CYRILLIC SMALL LETTER I WITH MACRON
+04E4;AL # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5;AL # CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6;AL # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7;AL # CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E8;AL # CYRILLIC CAPITAL LETTER BARRED O
+04E9;AL # CYRILLIC SMALL LETTER BARRED O
+04EA;AL # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB;AL # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC;AL # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED;AL # CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE;AL # CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF;AL # CYRILLIC SMALL LETTER U WITH MACRON
+04F0;AL # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1;AL # CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2;AL # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3;AL # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4;AL # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5;AL # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6;AL # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7;AL # CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8;AL # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9;AL # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500;AL # CYRILLIC CAPITAL LETTER KOMI DE
+0501;AL # CYRILLIC SMALL LETTER KOMI DE
+0502;AL # CYRILLIC CAPITAL LETTER KOMI DJE
+0503;AL # CYRILLIC SMALL LETTER KOMI DJE
+0504;AL # CYRILLIC CAPITAL LETTER KOMI ZJE
+0505;AL # CYRILLIC SMALL LETTER KOMI ZJE
+0506;AL # CYRILLIC CAPITAL LETTER KOMI DZJE
+0507;AL # CYRILLIC SMALL LETTER KOMI DZJE
+0508;AL # CYRILLIC CAPITAL LETTER KOMI LJE
+0509;AL # CYRILLIC SMALL LETTER KOMI LJE
+050A;AL # CYRILLIC CAPITAL LETTER KOMI NJE
+050B;AL # CYRILLIC SMALL LETTER KOMI NJE
+050C;AL # CYRILLIC CAPITAL LETTER KOMI SJE
+050D;AL # CYRILLIC SMALL LETTER KOMI SJE
+050E;AL # CYRILLIC CAPITAL LETTER KOMI TJE
+050F;AL # CYRILLIC SMALL LETTER KOMI TJE
+0531;AL # ARMENIAN CAPITAL LETTER AYB
+0532;AL # ARMENIAN CAPITAL LETTER BEN
+0533;AL # ARMENIAN CAPITAL LETTER GIM
+0534;AL # ARMENIAN CAPITAL LETTER DA
+0535;AL # ARMENIAN CAPITAL LETTER ECH
+0536;AL # ARMENIAN CAPITAL LETTER ZA
+0537;AL # ARMENIAN CAPITAL LETTER EH
+0538;AL # ARMENIAN CAPITAL LETTER ET
+0539;AL # ARMENIAN CAPITAL LETTER TO
+053A;AL # ARMENIAN CAPITAL LETTER ZHE
+053B;AL # ARMENIAN CAPITAL LETTER INI
+053C;AL # ARMENIAN CAPITAL LETTER LIWN
+053D;AL # ARMENIAN CAPITAL LETTER XEH
+053E;AL # ARMENIAN CAPITAL LETTER CA
+053F;AL # ARMENIAN CAPITAL LETTER KEN
+0540;AL # ARMENIAN CAPITAL LETTER HO
+0541;AL # ARMENIAN CAPITAL LETTER JA
+0542;AL # ARMENIAN CAPITAL LETTER GHAD
+0543;AL # ARMENIAN CAPITAL LETTER CHEH
+0544;AL # ARMENIAN CAPITAL LETTER MEN
+0545;AL # ARMENIAN CAPITAL LETTER YI
+0546;AL # ARMENIAN CAPITAL LETTER NOW
+0547;AL # ARMENIAN CAPITAL LETTER SHA
+0548;AL # ARMENIAN CAPITAL LETTER VO
+0549;AL # ARMENIAN CAPITAL LETTER CHA
+054A;AL # ARMENIAN CAPITAL LETTER PEH
+054B;AL # ARMENIAN CAPITAL LETTER JHEH
+054C;AL # ARMENIAN CAPITAL LETTER RA
+054D;AL # ARMENIAN CAPITAL LETTER SEH
+054E;AL # ARMENIAN CAPITAL LETTER VEW
+054F;AL # ARMENIAN CAPITAL LETTER TIWN
+0550;AL # ARMENIAN CAPITAL LETTER REH
+0551;AL # ARMENIAN CAPITAL LETTER CO
+0552;AL # ARMENIAN CAPITAL LETTER YIWN
+0553;AL # ARMENIAN CAPITAL LETTER PIWR
+0554;AL # ARMENIAN CAPITAL LETTER KEH
+0555;AL # ARMENIAN CAPITAL LETTER OH
+0556;AL # ARMENIAN CAPITAL LETTER FEH
+0559;AL # ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A;AL # ARMENIAN APOSTROPHE
+055B;AL # ARMENIAN EMPHASIS MARK
+055C;AL # ARMENIAN EXCLAMATION MARK
+055D;AL # ARMENIAN COMMA
+055E;AL # ARMENIAN QUESTION MARK
+055F;AL # ARMENIAN ABBREVIATION MARK
+0561;AL # ARMENIAN SMALL LETTER AYB
+0562;AL # ARMENIAN SMALL LETTER BEN
+0563;AL # ARMENIAN SMALL LETTER GIM
+0564;AL # ARMENIAN SMALL LETTER DA
+0565;AL # ARMENIAN SMALL LETTER ECH
+0566;AL # ARMENIAN SMALL LETTER ZA
+0567;AL # ARMENIAN SMALL LETTER EH
+0568;AL # ARMENIAN SMALL LETTER ET
+0569;AL # ARMENIAN SMALL LETTER TO
+056A;AL # ARMENIAN SMALL LETTER ZHE
+056B;AL # ARMENIAN SMALL LETTER INI
+056C;AL # ARMENIAN SMALL LETTER LIWN
+056D;AL # ARMENIAN SMALL LETTER XEH
+056E;AL # ARMENIAN SMALL LETTER CA
+056F;AL # ARMENIAN SMALL LETTER KEN
+0570;AL # ARMENIAN SMALL LETTER HO
+0571;AL # ARMENIAN SMALL LETTER JA
+0572;AL # ARMENIAN SMALL LETTER GHAD
+0573;AL # ARMENIAN SMALL LETTER CHEH
+0574;AL # ARMENIAN SMALL LETTER MEN
+0575;AL # ARMENIAN SMALL LETTER YI
+0576;AL # ARMENIAN SMALL LETTER NOW
+0577;AL # ARMENIAN SMALL LETTER SHA
+0578;AL # ARMENIAN SMALL LETTER VO
+0579;AL # ARMENIAN SMALL LETTER CHA
+057A;AL # ARMENIAN SMALL LETTER PEH
+057B;AL # ARMENIAN SMALL LETTER JHEH
+057C;AL # ARMENIAN SMALL LETTER RA
+057D;AL # ARMENIAN SMALL LETTER SEH
+057E;AL # ARMENIAN SMALL LETTER VEW
+057F;AL # ARMENIAN SMALL LETTER TIWN
+0580;AL # ARMENIAN SMALL LETTER REH
+0581;AL # ARMENIAN SMALL LETTER CO
+0582;AL # ARMENIAN SMALL LETTER YIWN
+0583;AL # ARMENIAN SMALL LETTER PIWR
+0584;AL # ARMENIAN SMALL LETTER KEH
+0585;AL # ARMENIAN SMALL LETTER OH
+0586;AL # ARMENIAN SMALL LETTER FEH
+0587;AL # ARMENIAN SMALL LIGATURE ECH YIWN
+0589;IS # ARMENIAN FULL STOP
+058A;BA # ARMENIAN HYPHEN
+0591;CM # HEBREW ACCENT ETNAHTA
+0592;CM # HEBREW ACCENT SEGOL
+0593;CM # HEBREW ACCENT SHALSHELET
+0594;CM # HEBREW ACCENT ZAQEF QATAN
+0595;CM # HEBREW ACCENT ZAQEF GADOL
+0596;CM # HEBREW ACCENT TIPEHA
+0597;CM # HEBREW ACCENT REVIA
+0598;CM # HEBREW ACCENT ZARQA
+0599;CM # HEBREW ACCENT PASHTA
+059A;CM # HEBREW ACCENT YETIV
+059B;CM # HEBREW ACCENT TEVIR
+059C;CM # HEBREW ACCENT GERESH
+059D;CM # HEBREW ACCENT GERESH MUQDAM
+059E;CM # HEBREW ACCENT GERSHAYIM
+059F;CM # HEBREW ACCENT QARNEY PARA
+05A0;CM # HEBREW ACCENT TELISHA GEDOLA
+05A1;CM # HEBREW ACCENT PAZER
+05A2;CM # HEBREW ACCENT ATNAH HAFUKH
+05A3;CM # HEBREW ACCENT MUNAH
+05A4;CM # HEBREW ACCENT MAHAPAKH
+05A5;CM # HEBREW ACCENT MERKHA
+05A6;CM # HEBREW ACCENT MERKHA KEFULA
+05A7;CM # HEBREW ACCENT DARGA
+05A8;CM # HEBREW ACCENT QADMA
+05A9;CM # HEBREW ACCENT TELISHA QETANA
+05AA;CM # HEBREW ACCENT YERAH BEN YOMO
+05AB;CM # HEBREW ACCENT OLE
+05AC;CM # HEBREW ACCENT ILUY
+05AD;CM # HEBREW ACCENT DEHI
+05AE;CM # HEBREW ACCENT ZINOR
+05AF;CM # HEBREW MARK MASORA CIRCLE
+05B0;CM # HEBREW POINT SHEVA
+05B1;CM # HEBREW POINT HATAF SEGOL
+05B2;CM # HEBREW POINT HATAF PATAH
+05B3;CM # HEBREW POINT HATAF QAMATS
+05B4;CM # HEBREW POINT HIRIQ
+05B5;CM # HEBREW POINT TSERE
+05B6;CM # HEBREW POINT SEGOL
+05B7;CM # HEBREW POINT PATAH
+05B8;CM # HEBREW POINT QAMATS
+05B9;CM # HEBREW POINT HOLAM
+05BB;CM # HEBREW POINT QUBUTS
+05BC;CM # HEBREW POINT DAGESH OR MAPIQ
+05BD;CM # HEBREW POINT METEG
+05BE;AL # HEBREW PUNCTUATION MAQAF
+05BF;CM # HEBREW POINT RAFE
+05C0;AL # HEBREW PUNCTUATION PASEQ
+05C1;CM # HEBREW POINT SHIN DOT
+05C2;CM # HEBREW POINT SIN DOT
+05C3;AL # HEBREW PUNCTUATION SOF PASUQ
+05C4;CM # HEBREW MARK UPPER DOT
+05C5;CM # HEBREW MARK LOWER DOT
+05C6;EX # HEBREW PUNCTUATION NUN HAFUKHA
+05C7;CM # HEBREW POINT QAMATS QATAN
+05D0;AL # HEBREW LETTER ALEF
+05D1;AL # HEBREW LETTER BET
+05D2;AL # HEBREW LETTER GIMEL
+05D3;AL # HEBREW LETTER DALET
+05D4;AL # HEBREW LETTER HE
+05D5;AL # HEBREW LETTER VAV
+05D6;AL # HEBREW LETTER ZAYIN
+05D7;AL # HEBREW LETTER HET
+05D8;AL # HEBREW LETTER TET
+05D9;AL # HEBREW LETTER YOD
+05DA;AL # HEBREW LETTER FINAL KAF
+05DB;AL # HEBREW LETTER KAF
+05DC;AL # HEBREW LETTER LAMED
+05DD;AL # HEBREW LETTER FINAL MEM
+05DE;AL # HEBREW LETTER MEM
+05DF;AL # HEBREW LETTER FINAL NUN
+05E0;AL # HEBREW LETTER NUN
+05E1;AL # HEBREW LETTER SAMEKH
+05E2;AL # HEBREW LETTER AYIN
+05E3;AL # HEBREW LETTER FINAL PE
+05E4;AL # HEBREW LETTER PE
+05E5;AL # HEBREW LETTER FINAL TSADI
+05E6;AL # HEBREW LETTER TSADI
+05E7;AL # HEBREW LETTER QOF
+05E8;AL # HEBREW LETTER RESH
+05E9;AL # HEBREW LETTER SHIN
+05EA;AL # HEBREW LETTER TAV
+05F0;AL # HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1;AL # HEBREW LIGATURE YIDDISH VAV YOD
+05F2;AL # HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3;AL # HEBREW PUNCTUATION GERESH
+05F4;AL # HEBREW PUNCTUATION GERSHAYIM
+0600;AL # ARABIC NUMBER SIGN
+0601;AL # ARABIC SIGN SANAH
+0602;AL # ARABIC FOOTNOTE MARKER
+0603;AL # ARABIC SIGN SAFHA
+060B;PO # AFGHANI SIGN
+060C;EX # ARABIC COMMA
+060D;IS # ARABIC DATE SEPARATOR
+060E;AL # ARABIC POETIC VERSE SIGN
+060F;AL # ARABIC SIGN MISRA
+0610;CM # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+0611;CM # ARABIC SIGN ALAYHE ASSALLAM
+0612;CM # ARABIC SIGN RAHMATULLAH ALAYHE
+0613;CM # ARABIC SIGN RADI ALLAHOU ANHU
+0614;CM # ARABIC SIGN TAKHALLUS
+0615;CM # ARABIC SMALL HIGH TAH
+061B;EX # ARABIC SEMICOLON
+061E;EX # ARABIC TRIPLE DOT PUNCTUATION MARK
+061F;EX # ARABIC QUESTION MARK
+0621;AL # ARABIC LETTER HAMZA
+0622;AL # ARABIC LETTER ALEF WITH MADDA ABOVE
+0623;AL # ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624;AL # ARABIC LETTER WAW WITH HAMZA ABOVE
+0625;AL # ARABIC LETTER ALEF WITH HAMZA BELOW
+0626;AL # ARABIC LETTER YEH WITH HAMZA ABOVE
+0627;AL # ARABIC LETTER ALEF
+0628;AL # ARABIC LETTER BEH
+0629;AL # ARABIC LETTER TEH MARBUTA
+062A;AL # ARABIC LETTER TEH
+062B;AL # ARABIC LETTER THEH
+062C;AL # ARABIC LETTER JEEM
+062D;AL # ARABIC LETTER HAH
+062E;AL # ARABIC LETTER KHAH
+062F;AL # ARABIC LETTER DAL
+0630;AL # ARABIC LETTER THAL
+0631;AL # ARABIC LETTER REH
+0632;AL # ARABIC LETTER ZAIN
+0633;AL # ARABIC LETTER SEEN
+0634;AL # ARABIC LETTER SHEEN
+0635;AL # ARABIC LETTER SAD
+0636;AL # ARABIC LETTER DAD
+0637;AL # ARABIC LETTER TAH
+0638;AL # ARABIC LETTER ZAH
+0639;AL # ARABIC LETTER AIN
+063A;AL # ARABIC LETTER GHAIN
+0640;AL # ARABIC TATWEEL
+0641;AL # ARABIC LETTER FEH
+0642;AL # ARABIC LETTER QAF
+0643;AL # ARABIC LETTER KAF
+0644;AL # ARABIC LETTER LAM
+0645;AL # ARABIC LETTER MEEM
+0646;AL # ARABIC LETTER NOON
+0647;AL # ARABIC LETTER HEH
+0648;AL # ARABIC LETTER WAW
+0649;AL # ARABIC LETTER ALEF MAKSURA
+064A;AL # ARABIC LETTER YEH
+064B;CM # ARABIC FATHATAN
+064C;CM # ARABIC DAMMATAN
+064D;CM # ARABIC KASRATAN
+064E;CM # ARABIC FATHA
+064F;CM # ARABIC DAMMA
+0650;CM # ARABIC KASRA
+0651;CM # ARABIC SHADDA
+0652;CM # ARABIC SUKUN
+0653;CM # ARABIC MADDAH ABOVE
+0654;CM # ARABIC HAMZA ABOVE
+0655;CM # ARABIC HAMZA BELOW
+0656;CM # ARABIC SUBSCRIPT ALEF
+0657;CM # ARABIC INVERTED DAMMA
+0658;CM # ARABIC MARK NOON GHUNNA
+0659;CM # ARABIC ZWARAKAY
+065A;CM # ARABIC VOWEL SIGN SMALL V ABOVE
+065B;CM # ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C;CM # ARABIC VOWEL SIGN DOT BELOW
+065D;CM # ARABIC REVERSED DAMMA
+065E;CM # ARABIC FATHA WITH TWO DOTS
+0660;NU # ARABIC-INDIC DIGIT ZERO
+0661;NU # ARABIC-INDIC DIGIT ONE
+0662;NU # ARABIC-INDIC DIGIT TWO
+0663;NU # ARABIC-INDIC DIGIT THREE
+0664;NU # ARABIC-INDIC DIGIT FOUR
+0665;NU # ARABIC-INDIC DIGIT FIVE
+0666;NU # ARABIC-INDIC DIGIT SIX
+0667;NU # ARABIC-INDIC DIGIT SEVEN
+0668;NU # ARABIC-INDIC DIGIT EIGHT
+0669;NU # ARABIC-INDIC DIGIT NINE
+066A;EX # ARABIC PERCENT SIGN
+066B;NU # ARABIC DECIMAL SEPARATOR
+066C;NU # ARABIC THOUSANDS SEPARATOR
+066D;AL # ARABIC FIVE POINTED STAR
+066E;AL # ARABIC LETTER DOTLESS BEH
+066F;AL # ARABIC LETTER DOTLESS QAF
+0670;CM # ARABIC LETTER SUPERSCRIPT ALEF
+0671;AL # ARABIC LETTER ALEF WASLA
+0672;AL # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0673;AL # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0674;AL # ARABIC LETTER HIGH HAMZA
+0675;AL # ARABIC LETTER HIGH HAMZA ALEF
+0676;AL # ARABIC LETTER HIGH HAMZA WAW
+0677;AL # ARABIC LETTER U WITH HAMZA ABOVE
+0678;AL # ARABIC LETTER HIGH HAMZA YEH
+0679;AL # ARABIC LETTER TTEH
+067A;AL # ARABIC LETTER TTEHEH
+067B;AL # ARABIC LETTER BEEH
+067C;AL # ARABIC LETTER TEH WITH RING
+067D;AL # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067E;AL # ARABIC LETTER PEH
+067F;AL # ARABIC LETTER TEHEH
+0680;AL # ARABIC LETTER BEHEH
+0681;AL # ARABIC LETTER HAH WITH HAMZA ABOVE
+0682;AL # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0683;AL # ARABIC LETTER NYEH
+0684;AL # ARABIC LETTER DYEH
+0685;AL # ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0686;AL # ARABIC LETTER TCHEH
+0687;AL # ARABIC LETTER TCHEHEH
+0688;AL # ARABIC LETTER DDAL
+0689;AL # ARABIC LETTER DAL WITH RING
+068A;AL # ARABIC LETTER DAL WITH DOT BELOW
+068B;AL # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C;AL # ARABIC LETTER DAHAL
+068D;AL # ARABIC LETTER DDAHAL
+068E;AL # ARABIC LETTER DUL
+068F;AL # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690;AL # ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+0691;AL # ARABIC LETTER RREH
+0692;AL # ARABIC LETTER REH WITH SMALL V
+0693;AL # ARABIC LETTER REH WITH RING
+0694;AL # ARABIC LETTER REH WITH DOT BELOW
+0695;AL # ARABIC LETTER REH WITH SMALL V BELOW
+0696;AL # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697;AL # ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698;AL # ARABIC LETTER JEH
+0699;AL # ARABIC LETTER REH WITH FOUR DOTS ABOVE
+069A;AL # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B;AL # ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C;AL # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+069D;AL # ARABIC LETTER SAD WITH TWO DOTS BELOW
+069E;AL # ARABIC LETTER SAD WITH THREE DOTS ABOVE
+069F;AL # ARABIC LETTER TAH WITH THREE DOTS ABOVE
+06A0;AL # ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A1;AL # ARABIC LETTER DOTLESS FEH
+06A2;AL # ARABIC LETTER FEH WITH DOT MOVED BELOW
+06A3;AL # ARABIC LETTER FEH WITH DOT BELOW
+06A4;AL # ARABIC LETTER VEH
+06A5;AL # ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6;AL # ARABIC LETTER PEHEH
+06A7;AL # ARABIC LETTER QAF WITH DOT ABOVE
+06A8;AL # ARABIC LETTER QAF WITH THREE DOTS ABOVE
+06A9;AL # ARABIC LETTER KEHEH
+06AA;AL # ARABIC LETTER SWASH KAF
+06AB;AL # ARABIC LETTER KAF WITH RING
+06AC;AL # ARABIC LETTER KAF WITH DOT ABOVE
+06AD;AL # ARABIC LETTER NG
+06AE;AL # ARABIC LETTER KAF WITH THREE DOTS BELOW
+06AF;AL # ARABIC LETTER GAF
+06B0;AL # ARABIC LETTER GAF WITH RING
+06B1;AL # ARABIC LETTER NGOEH
+06B2;AL # ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3;AL # ARABIC LETTER GUEH
+06B4;AL # ARABIC LETTER GAF WITH THREE DOTS ABOVE
+06B5;AL # ARABIC LETTER LAM WITH SMALL V
+06B6;AL # ARABIC LETTER LAM WITH DOT ABOVE
+06B7;AL # ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8;AL # ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9;AL # ARABIC LETTER NOON WITH DOT BELOW
+06BA;AL # ARABIC LETTER NOON GHUNNA
+06BB;AL # ARABIC LETTER RNOON
+06BC;AL # ARABIC LETTER NOON WITH RING
+06BD;AL # ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06BE;AL # ARABIC LETTER HEH DOACHASHMEE
+06BF;AL # ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0;AL # ARABIC LETTER HEH WITH YEH ABOVE
+06C1;AL # ARABIC LETTER HEH GOAL
+06C2;AL # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3;AL # ARABIC LETTER TEH MARBUTA GOAL
+06C4;AL # ARABIC LETTER WAW WITH RING
+06C5;AL # ARABIC LETTER KIRGHIZ OE
+06C6;AL # ARABIC LETTER OE
+06C7;AL # ARABIC LETTER U
+06C8;AL # ARABIC LETTER YU
+06C9;AL # ARABIC LETTER KIRGHIZ YU
+06CA;AL # ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB;AL # ARABIC LETTER VE
+06CC;AL # ARABIC LETTER FARSI YEH
+06CD;AL # ARABIC LETTER YEH WITH TAIL
+06CE;AL # ARABIC LETTER YEH WITH SMALL V
+06CF;AL # ARABIC LETTER WAW WITH DOT ABOVE
+06D0;AL # ARABIC LETTER E
+06D1;AL # ARABIC LETTER YEH WITH THREE DOTS BELOW
+06D2;AL # ARABIC LETTER YEH BARREE
+06D3;AL # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4;EX # ARABIC FULL STOP
+06D5;AL # ARABIC LETTER AE
+06D6;CM # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7;CM # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8;CM # ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9;CM # ARABIC SMALL HIGH LAM ALEF
+06DA;CM # ARABIC SMALL HIGH JEEM
+06DB;CM # ARABIC SMALL HIGH THREE DOTS
+06DC;CM # ARABIC SMALL HIGH SEEN
+06DD;AL # ARABIC END OF AYAH
+06DE;CM # ARABIC START OF RUB EL HIZB
+06DF;CM # ARABIC SMALL HIGH ROUNDED ZERO
+06E0;CM # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1;CM # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2;CM # ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3;CM # ARABIC SMALL LOW SEEN
+06E4;CM # ARABIC SMALL HIGH MADDA
+06E5;AL # ARABIC SMALL WAW
+06E6;AL # ARABIC SMALL YEH
+06E7;CM # ARABIC SMALL HIGH YEH
+06E8;CM # ARABIC SMALL HIGH NOON
+06E9;AL # ARABIC PLACE OF SAJDAH
+06EA;CM # ARABIC EMPTY CENTRE LOW STOP
+06EB;CM # ARABIC EMPTY CENTRE HIGH STOP
+06EC;CM # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED;CM # ARABIC SMALL LOW MEEM
+06EE;AL # ARABIC LETTER DAL WITH INVERTED V
+06EF;AL # ARABIC LETTER REH WITH INVERTED V
+06F0;NU # EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1;NU # EXTENDED ARABIC-INDIC DIGIT ONE
+06F2;NU # EXTENDED ARABIC-INDIC DIGIT TWO
+06F3;NU # EXTENDED ARABIC-INDIC DIGIT THREE
+06F4;NU # EXTENDED ARABIC-INDIC DIGIT FOUR
+06F5;NU # EXTENDED ARABIC-INDIC DIGIT FIVE
+06F6;NU # EXTENDED ARABIC-INDIC DIGIT SIX
+06F7;NU # EXTENDED ARABIC-INDIC DIGIT SEVEN
+06F8;NU # EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9;NU # EXTENDED ARABIC-INDIC DIGIT NINE
+06FA;AL # ARABIC LETTER SHEEN WITH DOT BELOW
+06FB;AL # ARABIC LETTER DAD WITH DOT BELOW
+06FC;AL # ARABIC LETTER GHAIN WITH DOT BELOW
+06FD;AL # ARABIC SIGN SINDHI AMPERSAND
+06FE;AL # ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF;AL # ARABIC LETTER HEH WITH INVERTED V
+0700;AL # SYRIAC END OF PARAGRAPH
+0701;AL # SYRIAC SUPRALINEAR FULL STOP
+0702;AL # SYRIAC SUBLINEAR FULL STOP
+0703;AL # SYRIAC SUPRALINEAR COLON
+0704;AL # SYRIAC SUBLINEAR COLON
+0705;AL # SYRIAC HORIZONTAL COLON
+0706;AL # SYRIAC COLON SKEWED LEFT
+0707;AL # SYRIAC COLON SKEWED RIGHT
+0708;AL # SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709;AL # SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A;AL # SYRIAC CONTRACTION
+070B;AL # SYRIAC HARKLEAN OBELUS
+070C;AL # SYRIAC HARKLEAN METOBELUS
+070D;AL # SYRIAC HARKLEAN ASTERISCUS
+070F;AL # SYRIAC ABBREVIATION MARK
+0710;AL # SYRIAC LETTER ALAPH
+0711;CM # SYRIAC LETTER SUPERSCRIPT ALAPH
+0712;AL # SYRIAC LETTER BETH
+0713;AL # SYRIAC LETTER GAMAL
+0714;AL # SYRIAC LETTER GAMAL GARSHUNI
+0715;AL # SYRIAC LETTER DALATH
+0716;AL # SYRIAC LETTER DOTLESS DALATH RISH
+0717;AL # SYRIAC LETTER HE
+0718;AL # SYRIAC LETTER WAW
+0719;AL # SYRIAC LETTER ZAIN
+071A;AL # SYRIAC LETTER HETH
+071B;AL # SYRIAC LETTER TETH
+071C;AL # SYRIAC LETTER TETH GARSHUNI
+071D;AL # SYRIAC LETTER YUDH
+071E;AL # SYRIAC LETTER YUDH HE
+071F;AL # SYRIAC LETTER KAPH
+0720;AL # SYRIAC LETTER LAMADH
+0721;AL # SYRIAC LETTER MIM
+0722;AL # SYRIAC LETTER NUN
+0723;AL # SYRIAC LETTER SEMKATH
+0724;AL # SYRIAC LETTER FINAL SEMKATH
+0725;AL # SYRIAC LETTER E
+0726;AL # SYRIAC LETTER PE
+0727;AL # SYRIAC LETTER REVERSED PE
+0728;AL # SYRIAC LETTER SADHE
+0729;AL # SYRIAC LETTER QAPH
+072A;AL # SYRIAC LETTER RISH
+072B;AL # SYRIAC LETTER SHIN
+072C;AL # SYRIAC LETTER TAW
+072D;AL # SYRIAC LETTER PERSIAN BHETH
+072E;AL # SYRIAC LETTER PERSIAN GHAMAL
+072F;AL # SYRIAC LETTER PERSIAN DHALATH
+0730;CM # SYRIAC PTHAHA ABOVE
+0731;CM # SYRIAC PTHAHA BELOW
+0732;CM # SYRIAC PTHAHA DOTTED
+0733;CM # SYRIAC ZQAPHA ABOVE
+0734;CM # SYRIAC ZQAPHA BELOW
+0735;CM # SYRIAC ZQAPHA DOTTED
+0736;CM # SYRIAC RBASA ABOVE
+0737;CM # SYRIAC RBASA BELOW
+0738;CM # SYRIAC DOTTED ZLAMA HORIZONTAL
+0739;CM # SYRIAC DOTTED ZLAMA ANGULAR
+073A;CM # SYRIAC HBASA ABOVE
+073B;CM # SYRIAC HBASA BELOW
+073C;CM # SYRIAC HBASA-ESASA DOTTED
+073D;CM # SYRIAC ESASA ABOVE
+073E;CM # SYRIAC ESASA BELOW
+073F;CM # SYRIAC RWAHA
+0740;CM # SYRIAC FEMININE DOT
+0741;CM # SYRIAC QUSHSHAYA
+0742;CM # SYRIAC RUKKAKHA
+0743;CM # SYRIAC TWO VERTICAL DOTS ABOVE
+0744;CM # SYRIAC TWO VERTICAL DOTS BELOW
+0745;CM # SYRIAC THREE DOTS ABOVE
+0746;CM # SYRIAC THREE DOTS BELOW
+0747;CM # SYRIAC OBLIQUE LINE ABOVE
+0748;CM # SYRIAC OBLIQUE LINE BELOW
+0749;CM # SYRIAC MUSIC
+074A;CM # SYRIAC BARREKH
+074D;AL # SYRIAC LETTER SOGDIAN ZHAIN
+074E;AL # SYRIAC LETTER SOGDIAN KHAPH
+074F;AL # SYRIAC LETTER SOGDIAN FE
+0750;AL # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751;AL # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752;AL # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753;AL # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754;AL # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755;AL # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756;AL # ARABIC LETTER BEH WITH SMALL V
+0757;AL # ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758;AL # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759;AL # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A;AL # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B;AL # ARABIC LETTER REH WITH STROKE
+075C;AL # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D;AL # ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E;AL # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F;AL # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760;AL # ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761;AL # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762;AL # ARABIC LETTER KEHEH WITH DOT ABOVE
+0763;AL # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764;AL # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765;AL # ARABIC LETTER MEEM WITH DOT ABOVE
+0766;AL # ARABIC LETTER MEEM WITH DOT BELOW
+0767;AL # ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768;AL # ARABIC LETTER NOON WITH SMALL TAH
+0769;AL # ARABIC LETTER NOON WITH SMALL V
+076A;AL # ARABIC LETTER LAM WITH BAR
+076B;AL # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C;AL # ARABIC LETTER REH WITH HAMZA ABOVE
+076D;AL # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+0780;AL # THAANA LETTER HAA
+0781;AL # THAANA LETTER SHAVIYANI
+0782;AL # THAANA LETTER NOONU
+0783;AL # THAANA LETTER RAA
+0784;AL # THAANA LETTER BAA
+0785;AL # THAANA LETTER LHAVIYANI
+0786;AL # THAANA LETTER KAAFU
+0787;AL # THAANA LETTER ALIFU
+0788;AL # THAANA LETTER VAAVU
+0789;AL # THAANA LETTER MEEMU
+078A;AL # THAANA LETTER FAAFU
+078B;AL # THAANA LETTER DHAALU
+078C;AL # THAANA LETTER THAA
+078D;AL # THAANA LETTER LAAMU
+078E;AL # THAANA LETTER GAAFU
+078F;AL # THAANA LETTER GNAVIYANI
+0790;AL # THAANA LETTER SEENU
+0791;AL # THAANA LETTER DAVIYANI
+0792;AL # THAANA LETTER ZAVIYANI
+0793;AL # THAANA LETTER TAVIYANI
+0794;AL # THAANA LETTER YAA
+0795;AL # THAANA LETTER PAVIYANI
+0796;AL # THAANA LETTER JAVIYANI
+0797;AL # THAANA LETTER CHAVIYANI
+0798;AL # THAANA LETTER TTAA
+0799;AL # THAANA LETTER HHAA
+079A;AL # THAANA LETTER KHAA
+079B;AL # THAANA LETTER THAALU
+079C;AL # THAANA LETTER ZAA
+079D;AL # THAANA LETTER SHEENU
+079E;AL # THAANA LETTER SAADHU
+079F;AL # THAANA LETTER DAADHU
+07A0;AL # THAANA LETTER TO
+07A1;AL # THAANA LETTER ZO
+07A2;AL # THAANA LETTER AINU
+07A3;AL # THAANA LETTER GHAINU
+07A4;AL # THAANA LETTER QAAFU
+07A5;AL # THAANA LETTER WAAVU
+07A6;CM # THAANA ABAFILI
+07A7;CM # THAANA AABAAFILI
+07A8;CM # THAANA IBIFILI
+07A9;CM # THAANA EEBEEFILI
+07AA;CM # THAANA UBUFILI
+07AB;CM # THAANA OOBOOFILI
+07AC;CM # THAANA EBEFILI
+07AD;CM # THAANA EYBEYFILI
+07AE;CM # THAANA OBOFILI
+07AF;CM # THAANA OABOAFILI
+07B0;CM # THAANA SUKUN
+07B1;AL # THAANA LETTER NAA
+0901;CM # DEVANAGARI SIGN CANDRABINDU
+0902;CM # DEVANAGARI SIGN ANUSVARA
+0903;CM # DEVANAGARI SIGN VISARGA
+0904;AL # DEVANAGARI LETTER SHORT A
+0905;AL # DEVANAGARI LETTER A
+0906;AL # DEVANAGARI LETTER AA
+0907;AL # DEVANAGARI LETTER I
+0908;AL # DEVANAGARI LETTER II
+0909;AL # DEVANAGARI LETTER U
+090A;AL # DEVANAGARI LETTER UU
+090B;AL # DEVANAGARI LETTER VOCALIC R
+090C;AL # DEVANAGARI LETTER VOCALIC L
+090D;AL # DEVANAGARI LETTER CANDRA E
+090E;AL # DEVANAGARI LETTER SHORT E
+090F;AL # DEVANAGARI LETTER E
+0910;AL # DEVANAGARI LETTER AI
+0911;AL # DEVANAGARI LETTER CANDRA O
+0912;AL # DEVANAGARI LETTER SHORT O
+0913;AL # DEVANAGARI LETTER O
+0914;AL # DEVANAGARI LETTER AU
+0915;AL # DEVANAGARI LETTER KA
+0916;AL # DEVANAGARI LETTER KHA
+0917;AL # DEVANAGARI LETTER GA
+0918;AL # DEVANAGARI LETTER GHA
+0919;AL # DEVANAGARI LETTER NGA
+091A;AL # DEVANAGARI LETTER CA
+091B;AL # DEVANAGARI LETTER CHA
+091C;AL # DEVANAGARI LETTER JA
+091D;AL # DEVANAGARI LETTER JHA
+091E;AL # DEVANAGARI LETTER NYA
+091F;AL # DEVANAGARI LETTER TTA
+0920;AL # DEVANAGARI LETTER TTHA
+0921;AL # DEVANAGARI LETTER DDA
+0922;AL # DEVANAGARI LETTER DDHA
+0923;AL # DEVANAGARI LETTER NNA
+0924;AL # DEVANAGARI LETTER TA
+0925;AL # DEVANAGARI LETTER THA
+0926;AL # DEVANAGARI LETTER DA
+0927;AL # DEVANAGARI LETTER DHA
+0928;AL # DEVANAGARI LETTER NA
+0929;AL # DEVANAGARI LETTER NNNA
+092A;AL # DEVANAGARI LETTER PA
+092B;AL # DEVANAGARI LETTER PHA
+092C;AL # DEVANAGARI LETTER BA
+092D;AL # DEVANAGARI LETTER BHA
+092E;AL # DEVANAGARI LETTER MA
+092F;AL # DEVANAGARI LETTER YA
+0930;AL # DEVANAGARI LETTER RA
+0931;AL # DEVANAGARI LETTER RRA
+0932;AL # DEVANAGARI LETTER LA
+0933;AL # DEVANAGARI LETTER LLA
+0934;AL # DEVANAGARI LETTER LLLA
+0935;AL # DEVANAGARI LETTER VA
+0936;AL # DEVANAGARI LETTER SHA
+0937;AL # DEVANAGARI LETTER SSA
+0938;AL # DEVANAGARI LETTER SA
+0939;AL # DEVANAGARI LETTER HA
+093C;CM # DEVANAGARI SIGN NUKTA
+093D;AL # DEVANAGARI SIGN AVAGRAHA
+093E;CM # DEVANAGARI VOWEL SIGN AA
+093F;CM # DEVANAGARI VOWEL SIGN I
+0940;CM # DEVANAGARI VOWEL SIGN II
+0941;CM # DEVANAGARI VOWEL SIGN U
+0942;CM # DEVANAGARI VOWEL SIGN UU
+0943;CM # DEVANAGARI VOWEL SIGN VOCALIC R
+0944;CM # DEVANAGARI VOWEL SIGN VOCALIC RR
+0945;CM # DEVANAGARI VOWEL SIGN CANDRA E
+0946;CM # DEVANAGARI VOWEL SIGN SHORT E
+0947;CM # DEVANAGARI VOWEL SIGN E
+0948;CM # DEVANAGARI VOWEL SIGN AI
+0949;CM # DEVANAGARI VOWEL SIGN CANDRA O
+094A;CM # DEVANAGARI VOWEL SIGN SHORT O
+094B;CM # DEVANAGARI VOWEL SIGN O
+094C;CM # DEVANAGARI VOWEL SIGN AU
+094D;CM # DEVANAGARI SIGN VIRAMA
+0950;AL # DEVANAGARI OM
+0951;CM # DEVANAGARI STRESS SIGN UDATTA
+0952;CM # DEVANAGARI STRESS SIGN ANUDATTA
+0953;CM # DEVANAGARI GRAVE ACCENT
+0954;CM # DEVANAGARI ACUTE ACCENT
+0958;AL # DEVANAGARI LETTER QA
+0959;AL # DEVANAGARI LETTER KHHA
+095A;AL # DEVANAGARI LETTER GHHA
+095B;AL # DEVANAGARI LETTER ZA
+095C;AL # DEVANAGARI LETTER DDDHA
+095D;AL # DEVANAGARI LETTER RHA
+095E;AL # DEVANAGARI LETTER FA
+095F;AL # DEVANAGARI LETTER YYA
+0960;AL # DEVANAGARI LETTER VOCALIC RR
+0961;AL # DEVANAGARI LETTER VOCALIC LL
+0962;CM # DEVANAGARI VOWEL SIGN VOCALIC L
+0963;CM # DEVANAGARI VOWEL SIGN VOCALIC LL
+0964;BA # DEVANAGARI DANDA
+0965;BA # DEVANAGARI DOUBLE DANDA
+0966;NU # DEVANAGARI DIGIT ZERO
+0967;NU # DEVANAGARI DIGIT ONE
+0968;NU # DEVANAGARI DIGIT TWO
+0969;NU # DEVANAGARI DIGIT THREE
+096A;NU # DEVANAGARI DIGIT FOUR
+096B;NU # DEVANAGARI DIGIT FIVE
+096C;NU # DEVANAGARI DIGIT SIX
+096D;NU # DEVANAGARI DIGIT SEVEN
+096E;NU # DEVANAGARI DIGIT EIGHT
+096F;NU # DEVANAGARI DIGIT NINE
+0970;AL # DEVANAGARI ABBREVIATION SIGN
+097D;AL # DEVANAGARI LETTER GLOTTAL STOP
+0981;CM # BENGALI SIGN CANDRABINDU
+0982;CM # BENGALI SIGN ANUSVARA
+0983;CM # BENGALI SIGN VISARGA
+0985;AL # BENGALI LETTER A
+0986;AL # BENGALI LETTER AA
+0987;AL # BENGALI LETTER I
+0988;AL # BENGALI LETTER II
+0989;AL # BENGALI LETTER U
+098A;AL # BENGALI LETTER UU
+098B;AL # BENGALI LETTER VOCALIC R
+098C;AL # BENGALI LETTER VOCALIC L
+098F;AL # BENGALI LETTER E
+0990;AL # BENGALI LETTER AI
+0993;AL # BENGALI LETTER O
+0994;AL # BENGALI LETTER AU
+0995;AL # BENGALI LETTER KA
+0996;AL # BENGALI LETTER KHA
+0997;AL # BENGALI LETTER GA
+0998;AL # BENGALI LETTER GHA
+0999;AL # BENGALI LETTER NGA
+099A;AL # BENGALI LETTER CA
+099B;AL # BENGALI LETTER CHA
+099C;AL # BENGALI LETTER JA
+099D;AL # BENGALI LETTER JHA
+099E;AL # BENGALI LETTER NYA
+099F;AL # BENGALI LETTER TTA
+09A0;AL # BENGALI LETTER TTHA
+09A1;AL # BENGALI LETTER DDA
+09A2;AL # BENGALI LETTER DDHA
+09A3;AL # BENGALI LETTER NNA
+09A4;AL # BENGALI LETTER TA
+09A5;AL # BENGALI LETTER THA
+09A6;AL # BENGALI LETTER DA
+09A7;AL # BENGALI LETTER DHA
+09A8;AL # BENGALI LETTER NA
+09AA;AL # BENGALI LETTER PA
+09AB;AL # BENGALI LETTER PHA
+09AC;AL # BENGALI LETTER BA
+09AD;AL # BENGALI LETTER BHA
+09AE;AL # BENGALI LETTER MA
+09AF;AL # BENGALI LETTER YA
+09B0;AL # BENGALI LETTER RA
+09B2;AL # BENGALI LETTER LA
+09B6;AL # BENGALI LETTER SHA
+09B7;AL # BENGALI LETTER SSA
+09B8;AL # BENGALI LETTER SA
+09B9;AL # BENGALI LETTER HA
+09BC;CM # BENGALI SIGN NUKTA
+09BD;AL # BENGALI SIGN AVAGRAHA
+09BE;CM # BENGALI VOWEL SIGN AA
+09BF;CM # BENGALI VOWEL SIGN I
+09C0;CM # BENGALI VOWEL SIGN II
+09C1;CM # BENGALI VOWEL SIGN U
+09C2;CM # BENGALI VOWEL SIGN UU
+09C3;CM # BENGALI VOWEL SIGN VOCALIC R
+09C4;CM # BENGALI VOWEL SIGN VOCALIC RR
+09C7;CM # BENGALI VOWEL SIGN E
+09C8;CM # BENGALI VOWEL SIGN AI
+09CB;CM # BENGALI VOWEL SIGN O
+09CC;CM # BENGALI VOWEL SIGN AU
+09CD;CM # BENGALI SIGN VIRAMA
+09CE;AL # BENGALI LETTER KHANDA TA
+09D7;CM # BENGALI AU LENGTH MARK
+09DC;AL # BENGALI LETTER RRA
+09DD;AL # BENGALI LETTER RHA
+09DF;AL # BENGALI LETTER YYA
+09E0;AL # BENGALI LETTER VOCALIC RR
+09E1;AL # BENGALI LETTER VOCALIC LL
+09E2;CM # BENGALI VOWEL SIGN VOCALIC L
+09E3;CM # BENGALI VOWEL SIGN VOCALIC LL
+09E6;NU # BENGALI DIGIT ZERO
+09E7;NU # BENGALI DIGIT ONE
+09E8;NU # BENGALI DIGIT TWO
+09E9;NU # BENGALI DIGIT THREE
+09EA;NU # BENGALI DIGIT FOUR
+09EB;NU # BENGALI DIGIT FIVE
+09EC;NU # BENGALI DIGIT SIX
+09ED;NU # BENGALI DIGIT SEVEN
+09EE;NU # BENGALI DIGIT EIGHT
+09EF;NU # BENGALI DIGIT NINE
+09F0;AL # BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09F1;AL # BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2;PR # BENGALI RUPEE MARK
+09F3;PR # BENGALI RUPEE SIGN
+09F4;AL # BENGALI CURRENCY NUMERATOR ONE
+09F5;AL # BENGALI CURRENCY NUMERATOR TWO
+09F6;AL # BENGALI CURRENCY NUMERATOR THREE
+09F7;AL # BENGALI CURRENCY NUMERATOR FOUR
+09F8;AL # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9;AL # BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA;AL # BENGALI ISSHAR
+0A01;CM # GURMUKHI SIGN ADAK BINDI
+0A02;CM # GURMUKHI SIGN BINDI
+0A03;CM # GURMUKHI SIGN VISARGA
+0A05;AL # GURMUKHI LETTER A
+0A06;AL # GURMUKHI LETTER AA
+0A07;AL # GURMUKHI LETTER I
+0A08;AL # GURMUKHI LETTER II
+0A09;AL # GURMUKHI LETTER U
+0A0A;AL # GURMUKHI LETTER UU
+0A0F;AL # GURMUKHI LETTER EE
+0A10;AL # GURMUKHI LETTER AI
+0A13;AL # GURMUKHI LETTER OO
+0A14;AL # GURMUKHI LETTER AU
+0A15;AL # GURMUKHI LETTER KA
+0A16;AL # GURMUKHI LETTER KHA
+0A17;AL # GURMUKHI LETTER GA
+0A18;AL # GURMUKHI LETTER GHA
+0A19;AL # GURMUKHI LETTER NGA
+0A1A;AL # GURMUKHI LETTER CA
+0A1B;AL # GURMUKHI LETTER CHA
+0A1C;AL # GURMUKHI LETTER JA
+0A1D;AL # GURMUKHI LETTER JHA
+0A1E;AL # GURMUKHI LETTER NYA
+0A1F;AL # GURMUKHI LETTER TTA
+0A20;AL # GURMUKHI LETTER TTHA
+0A21;AL # GURMUKHI LETTER DDA
+0A22;AL # GURMUKHI LETTER DDHA
+0A23;AL # GURMUKHI LETTER NNA
+0A24;AL # GURMUKHI LETTER TA
+0A25;AL # GURMUKHI LETTER THA
+0A26;AL # GURMUKHI LETTER DA
+0A27;AL # GURMUKHI LETTER DHA
+0A28;AL # GURMUKHI LETTER NA
+0A2A;AL # GURMUKHI LETTER PA
+0A2B;AL # GURMUKHI LETTER PHA
+0A2C;AL # GURMUKHI LETTER BA
+0A2D;AL # GURMUKHI LETTER BHA
+0A2E;AL # GURMUKHI LETTER MA
+0A2F;AL # GURMUKHI LETTER YA
+0A30;AL # GURMUKHI LETTER RA
+0A32;AL # GURMUKHI LETTER LA
+0A33;AL # GURMUKHI LETTER LLA
+0A35;AL # GURMUKHI LETTER VA
+0A36;AL # GURMUKHI LETTER SHA
+0A38;AL # GURMUKHI LETTER SA
+0A39;AL # GURMUKHI LETTER HA
+0A3C;CM # GURMUKHI SIGN NUKTA
+0A3E;CM # GURMUKHI VOWEL SIGN AA
+0A3F;CM # GURMUKHI VOWEL SIGN I
+0A40;CM # GURMUKHI VOWEL SIGN II
+0A41;CM # GURMUKHI VOWEL SIGN U
+0A42;CM # GURMUKHI VOWEL SIGN UU
+0A47;CM # GURMUKHI VOWEL SIGN EE
+0A48;CM # GURMUKHI VOWEL SIGN AI
+0A4B;CM # GURMUKHI VOWEL SIGN OO
+0A4C;CM # GURMUKHI VOWEL SIGN AU
+0A4D;CM # GURMUKHI SIGN VIRAMA
+0A59;AL # GURMUKHI LETTER KHHA
+0A5A;AL # GURMUKHI LETTER GHHA
+0A5B;AL # GURMUKHI LETTER ZA
+0A5C;AL # GURMUKHI LETTER RRA
+0A5E;AL # GURMUKHI LETTER FA
+0A66;NU # GURMUKHI DIGIT ZERO
+0A67;NU # GURMUKHI DIGIT ONE
+0A68;NU # GURMUKHI DIGIT TWO
+0A69;NU # GURMUKHI DIGIT THREE
+0A6A;NU # GURMUKHI DIGIT FOUR
+0A6B;NU # GURMUKHI DIGIT FIVE
+0A6C;NU # GURMUKHI DIGIT SIX
+0A6D;NU # GURMUKHI DIGIT SEVEN
+0A6E;NU # GURMUKHI DIGIT EIGHT
+0A6F;NU # GURMUKHI DIGIT NINE
+0A70;CM # GURMUKHI TIPPI
+0A71;CM # GURMUKHI ADDAK
+0A72;AL # GURMUKHI IRI
+0A73;AL # GURMUKHI URA
+0A74;AL # GURMUKHI EK ONKAR
+0A81;CM # GUJARATI SIGN CANDRABINDU
+0A82;CM # GUJARATI SIGN ANUSVARA
+0A83;CM # GUJARATI SIGN VISARGA
+0A85;AL # GUJARATI LETTER A
+0A86;AL # GUJARATI LETTER AA
+0A87;AL # GUJARATI LETTER I
+0A88;AL # GUJARATI LETTER II
+0A89;AL # GUJARATI LETTER U
+0A8A;AL # GUJARATI LETTER UU
+0A8B;AL # GUJARATI LETTER VOCALIC R
+0A8C;AL # GUJARATI LETTER VOCALIC L
+0A8D;AL # GUJARATI VOWEL CANDRA E
+0A8F;AL # GUJARATI LETTER E
+0A90;AL # GUJARATI LETTER AI
+0A91;AL # GUJARATI VOWEL CANDRA O
+0A93;AL # GUJARATI LETTER O
+0A94;AL # GUJARATI LETTER AU
+0A95;AL # GUJARATI LETTER KA
+0A96;AL # GUJARATI LETTER KHA
+0A97;AL # GUJARATI LETTER GA
+0A98;AL # GUJARATI LETTER GHA
+0A99;AL # GUJARATI LETTER NGA
+0A9A;AL # GUJARATI LETTER CA
+0A9B;AL # GUJARATI LETTER CHA
+0A9C;AL # GUJARATI LETTER JA
+0A9D;AL # GUJARATI LETTER JHA
+0A9E;AL # GUJARATI LETTER NYA
+0A9F;AL # GUJARATI LETTER TTA
+0AA0;AL # GUJARATI LETTER TTHA
+0AA1;AL # GUJARATI LETTER DDA
+0AA2;AL # GUJARATI LETTER DDHA
+0AA3;AL # GUJARATI LETTER NNA
+0AA4;AL # GUJARATI LETTER TA
+0AA5;AL # GUJARATI LETTER THA
+0AA6;AL # GUJARATI LETTER DA
+0AA7;AL # GUJARATI LETTER DHA
+0AA8;AL # GUJARATI LETTER NA
+0AAA;AL # GUJARATI LETTER PA
+0AAB;AL # GUJARATI LETTER PHA
+0AAC;AL # GUJARATI LETTER BA
+0AAD;AL # GUJARATI LETTER BHA
+0AAE;AL # GUJARATI LETTER MA
+0AAF;AL # GUJARATI LETTER YA
+0AB0;AL # GUJARATI LETTER RA
+0AB2;AL # GUJARATI LETTER LA
+0AB3;AL # GUJARATI LETTER LLA
+0AB5;AL # GUJARATI LETTER VA
+0AB6;AL # GUJARATI LETTER SHA
+0AB7;AL # GUJARATI LETTER SSA
+0AB8;AL # GUJARATI LETTER SA
+0AB9;AL # GUJARATI LETTER HA
+0ABC;CM # GUJARATI SIGN NUKTA
+0ABD;AL # GUJARATI SIGN AVAGRAHA
+0ABE;CM # GUJARATI VOWEL SIGN AA
+0ABF;CM # GUJARATI VOWEL SIGN I
+0AC0;CM # GUJARATI VOWEL SIGN II
+0AC1;CM # GUJARATI VOWEL SIGN U
+0AC2;CM # GUJARATI VOWEL SIGN UU
+0AC3;CM # GUJARATI VOWEL SIGN VOCALIC R
+0AC4;CM # GUJARATI VOWEL SIGN VOCALIC RR
+0AC5;CM # GUJARATI VOWEL SIGN CANDRA E
+0AC7;CM # GUJARATI VOWEL SIGN E
+0AC8;CM # GUJARATI VOWEL SIGN AI
+0AC9;CM # GUJARATI VOWEL SIGN CANDRA O
+0ACB;CM # GUJARATI VOWEL SIGN O
+0ACC;CM # GUJARATI VOWEL SIGN AU
+0ACD;CM # GUJARATI SIGN VIRAMA
+0AD0;AL # GUJARATI OM
+0AE0;AL # GUJARATI LETTER VOCALIC RR
+0AE1;AL # GUJARATI LETTER VOCALIC LL
+0AE2;CM # GUJARATI VOWEL SIGN VOCALIC L
+0AE3;CM # GUJARATI VOWEL SIGN VOCALIC LL
+0AE6;NU # GUJARATI DIGIT ZERO
+0AE7;NU # GUJARATI DIGIT ONE
+0AE8;NU # GUJARATI DIGIT TWO
+0AE9;NU # GUJARATI DIGIT THREE
+0AEA;NU # GUJARATI DIGIT FOUR
+0AEB;NU # GUJARATI DIGIT FIVE
+0AEC;NU # GUJARATI DIGIT SIX
+0AED;NU # GUJARATI DIGIT SEVEN
+0AEE;NU # GUJARATI DIGIT EIGHT
+0AEF;NU # GUJARATI DIGIT NINE
+0AF1;PR # GUJARATI RUPEE SIGN
+0B01;CM # ORIYA SIGN CANDRABINDU
+0B02;CM # ORIYA SIGN ANUSVARA
+0B03;CM # ORIYA SIGN VISARGA
+0B05;AL # ORIYA LETTER A
+0B06;AL # ORIYA LETTER AA
+0B07;AL # ORIYA LETTER I
+0B08;AL # ORIYA LETTER II
+0B09;AL # ORIYA LETTER U
+0B0A;AL # ORIYA LETTER UU
+0B0B;AL # ORIYA LETTER VOCALIC R
+0B0C;AL # ORIYA LETTER VOCALIC L
+0B0F;AL # ORIYA LETTER E
+0B10;AL # ORIYA LETTER AI
+0B13;AL # ORIYA LETTER O
+0B14;AL # ORIYA LETTER AU
+0B15;AL # ORIYA LETTER KA
+0B16;AL # ORIYA LETTER KHA
+0B17;AL # ORIYA LETTER GA
+0B18;AL # ORIYA LETTER GHA
+0B19;AL # ORIYA LETTER NGA
+0B1A;AL # ORIYA LETTER CA
+0B1B;AL # ORIYA LETTER CHA
+0B1C;AL # ORIYA LETTER JA
+0B1D;AL # ORIYA LETTER JHA
+0B1E;AL # ORIYA LETTER NYA
+0B1F;AL # ORIYA LETTER TTA
+0B20;AL # ORIYA LETTER TTHA
+0B21;AL # ORIYA LETTER DDA
+0B22;AL # ORIYA LETTER DDHA
+0B23;AL # ORIYA LETTER NNA
+0B24;AL # ORIYA LETTER TA
+0B25;AL # ORIYA LETTER THA
+0B26;AL # ORIYA LETTER DA
+0B27;AL # ORIYA LETTER DHA
+0B28;AL # ORIYA LETTER NA
+0B2A;AL # ORIYA LETTER PA
+0B2B;AL # ORIYA LETTER PHA
+0B2C;AL # ORIYA LETTER BA
+0B2D;AL # ORIYA LETTER BHA
+0B2E;AL # ORIYA LETTER MA
+0B2F;AL # ORIYA LETTER YA
+0B30;AL # ORIYA LETTER RA
+0B32;AL # ORIYA LETTER LA
+0B33;AL # ORIYA LETTER LLA
+0B35;AL # ORIYA LETTER VA
+0B36;AL # ORIYA LETTER SHA
+0B37;AL # ORIYA LETTER SSA
+0B38;AL # ORIYA LETTER SA
+0B39;AL # ORIYA LETTER HA
+0B3C;CM # ORIYA SIGN NUKTA
+0B3D;AL # ORIYA SIGN AVAGRAHA
+0B3E;CM # ORIYA VOWEL SIGN AA
+0B3F;CM # ORIYA VOWEL SIGN I
+0B40;CM # ORIYA VOWEL SIGN II
+0B41;CM # ORIYA VOWEL SIGN U
+0B42;CM # ORIYA VOWEL SIGN UU
+0B43;CM # ORIYA VOWEL SIGN VOCALIC R
+0B47;CM # ORIYA VOWEL SIGN E
+0B48;CM # ORIYA VOWEL SIGN AI
+0B4B;CM # ORIYA VOWEL SIGN O
+0B4C;CM # ORIYA VOWEL SIGN AU
+0B4D;CM # ORIYA SIGN VIRAMA
+0B56;CM # ORIYA AI LENGTH MARK
+0B57;CM # ORIYA AU LENGTH MARK
+0B5C;AL # ORIYA LETTER RRA
+0B5D;AL # ORIYA LETTER RHA
+0B5F;AL # ORIYA LETTER YYA
+0B60;AL # ORIYA LETTER VOCALIC RR
+0B61;AL # ORIYA LETTER VOCALIC LL
+0B66;NU # ORIYA DIGIT ZERO
+0B67;NU # ORIYA DIGIT ONE
+0B68;NU # ORIYA DIGIT TWO
+0B69;NU # ORIYA DIGIT THREE
+0B6A;NU # ORIYA DIGIT FOUR
+0B6B;NU # ORIYA DIGIT FIVE
+0B6C;NU # ORIYA DIGIT SIX
+0B6D;NU # ORIYA DIGIT SEVEN
+0B6E;NU # ORIYA DIGIT EIGHT
+0B6F;NU # ORIYA DIGIT NINE
+0B70;AL # ORIYA ISSHAR
+0B71;AL # ORIYA LETTER WA
+0B82;CM # TAMIL SIGN ANUSVARA
+0B83;AL # TAMIL SIGN VISARGA
+0B85;AL # TAMIL LETTER A
+0B86;AL # TAMIL LETTER AA
+0B87;AL # TAMIL LETTER I
+0B88;AL # TAMIL LETTER II
+0B89;AL # TAMIL LETTER U
+0B8A;AL # TAMIL LETTER UU
+0B8E;AL # TAMIL LETTER E
+0B8F;AL # TAMIL LETTER EE
+0B90;AL # TAMIL LETTER AI
+0B92;AL # TAMIL LETTER O
+0B93;AL # TAMIL LETTER OO
+0B94;AL # TAMIL LETTER AU
+0B95;AL # TAMIL LETTER KA
+0B99;AL # TAMIL LETTER NGA
+0B9A;AL # TAMIL LETTER CA
+0B9C;AL # TAMIL LETTER JA
+0B9E;AL # TAMIL LETTER NYA
+0B9F;AL # TAMIL LETTER TTA
+0BA3;AL # TAMIL LETTER NNA
+0BA4;AL # TAMIL LETTER TA
+0BA8;AL # TAMIL LETTER NA
+0BA9;AL # TAMIL LETTER NNNA
+0BAA;AL # TAMIL LETTER PA
+0BAE;AL # TAMIL LETTER MA
+0BAF;AL # TAMIL LETTER YA
+0BB0;AL # TAMIL LETTER RA
+0BB1;AL # TAMIL LETTER RRA
+0BB2;AL # TAMIL LETTER LA
+0BB3;AL # TAMIL LETTER LLA
+0BB4;AL # TAMIL LETTER LLLA
+0BB5;AL # TAMIL LETTER VA
+0BB6;AL # TAMIL LETTER SHA
+0BB7;AL # TAMIL LETTER SSA
+0BB8;AL # TAMIL LETTER SA
+0BB9;AL # TAMIL LETTER HA
+0BBE;CM # TAMIL VOWEL SIGN AA
+0BBF;CM # TAMIL VOWEL SIGN I
+0BC0;CM # TAMIL VOWEL SIGN II
+0BC1;CM # TAMIL VOWEL SIGN U
+0BC2;CM # TAMIL VOWEL SIGN UU
+0BC6;CM # TAMIL VOWEL SIGN E
+0BC7;CM # TAMIL VOWEL SIGN EE
+0BC8;CM # TAMIL VOWEL SIGN AI
+0BCA;CM # TAMIL VOWEL SIGN O
+0BCB;CM # TAMIL VOWEL SIGN OO
+0BCC;CM # TAMIL VOWEL SIGN AU
+0BCD;CM # TAMIL SIGN VIRAMA
+0BD7;CM # TAMIL AU LENGTH MARK
+0BE6;NU # TAMIL DIGIT ZERO
+0BE7;NU # TAMIL DIGIT ONE
+0BE8;NU # TAMIL DIGIT TWO
+0BE9;NU # TAMIL DIGIT THREE
+0BEA;NU # TAMIL DIGIT FOUR
+0BEB;NU # TAMIL DIGIT FIVE
+0BEC;NU # TAMIL DIGIT SIX
+0BED;NU # TAMIL DIGIT SEVEN
+0BEE;NU # TAMIL DIGIT EIGHT
+0BEF;NU # TAMIL DIGIT NINE
+0BF0;AL # TAMIL NUMBER TEN
+0BF1;AL # TAMIL NUMBER ONE HUNDRED
+0BF2;AL # TAMIL NUMBER ONE THOUSAND
+0BF3;AL # TAMIL DAY SIGN
+0BF4;AL # TAMIL MONTH SIGN
+0BF5;AL # TAMIL YEAR SIGN
+0BF6;AL # TAMIL DEBIT SIGN
+0BF7;AL # TAMIL CREDIT SIGN
+0BF8;AL # TAMIL AS ABOVE SIGN
+0BF9;PR # TAMIL RUPEE SIGN
+0BFA;AL # TAMIL NUMBER SIGN
+0C01;CM # TELUGU SIGN CANDRABINDU
+0C02;CM # TELUGU SIGN ANUSVARA
+0C03;CM # TELUGU SIGN VISARGA
+0C05;AL # TELUGU LETTER A
+0C06;AL # TELUGU LETTER AA
+0C07;AL # TELUGU LETTER I
+0C08;AL # TELUGU LETTER II
+0C09;AL # TELUGU LETTER U
+0C0A;AL # TELUGU LETTER UU
+0C0B;AL # TELUGU LETTER VOCALIC R
+0C0C;AL # TELUGU LETTER VOCALIC L
+0C0E;AL # TELUGU LETTER E
+0C0F;AL # TELUGU LETTER EE
+0C10;AL # TELUGU LETTER AI
+0C12;AL # TELUGU LETTER O
+0C13;AL # TELUGU LETTER OO
+0C14;AL # TELUGU LETTER AU
+0C15;AL # TELUGU LETTER KA
+0C16;AL # TELUGU LETTER KHA
+0C17;AL # TELUGU LETTER GA
+0C18;AL # TELUGU LETTER GHA
+0C19;AL # TELUGU LETTER NGA
+0C1A;AL # TELUGU LETTER CA
+0C1B;AL # TELUGU LETTER CHA
+0C1C;AL # TELUGU LETTER JA
+0C1D;AL # TELUGU LETTER JHA
+0C1E;AL # TELUGU LETTER NYA
+0C1F;AL # TELUGU LETTER TTA
+0C20;AL # TELUGU LETTER TTHA
+0C21;AL # TELUGU LETTER DDA
+0C22;AL # TELUGU LETTER DDHA
+0C23;AL # TELUGU LETTER NNA
+0C24;AL # TELUGU LETTER TA
+0C25;AL # TELUGU LETTER THA
+0C26;AL # TELUGU LETTER DA
+0C27;AL # TELUGU LETTER DHA
+0C28;AL # TELUGU LETTER NA
+0C2A;AL # TELUGU LETTER PA
+0C2B;AL # TELUGU LETTER PHA
+0C2C;AL # TELUGU LETTER BA
+0C2D;AL # TELUGU LETTER BHA
+0C2E;AL # TELUGU LETTER MA
+0C2F;AL # TELUGU LETTER YA
+0C30;AL # TELUGU LETTER RA
+0C31;AL # TELUGU LETTER RRA
+0C32;AL # TELUGU LETTER LA
+0C33;AL # TELUGU LETTER LLA
+0C35;AL # TELUGU LETTER VA
+0C36;AL # TELUGU LETTER SHA
+0C37;AL # TELUGU LETTER SSA
+0C38;AL # TELUGU LETTER SA
+0C39;AL # TELUGU LETTER HA
+0C3E;CM # TELUGU VOWEL SIGN AA
+0C3F;CM # TELUGU VOWEL SIGN I
+0C40;CM # TELUGU VOWEL SIGN II
+0C41;CM # TELUGU VOWEL SIGN U
+0C42;CM # TELUGU VOWEL SIGN UU
+0C43;CM # TELUGU VOWEL SIGN VOCALIC R
+0C44;CM # TELUGU VOWEL SIGN VOCALIC RR
+0C46;CM # TELUGU VOWEL SIGN E
+0C47;CM # TELUGU VOWEL SIGN EE
+0C48;CM # TELUGU VOWEL SIGN AI
+0C4A;CM # TELUGU VOWEL SIGN O
+0C4B;CM # TELUGU VOWEL SIGN OO
+0C4C;CM # TELUGU VOWEL SIGN AU
+0C4D;CM # TELUGU SIGN VIRAMA
+0C55;CM # TELUGU LENGTH MARK
+0C56;CM # TELUGU AI LENGTH MARK
+0C60;AL # TELUGU LETTER VOCALIC RR
+0C61;AL # TELUGU LETTER VOCALIC LL
+0C66;NU # TELUGU DIGIT ZERO
+0C67;NU # TELUGU DIGIT ONE
+0C68;NU # TELUGU DIGIT TWO
+0C69;NU # TELUGU DIGIT THREE
+0C6A;NU # TELUGU DIGIT FOUR
+0C6B;NU # TELUGU DIGIT FIVE
+0C6C;NU # TELUGU DIGIT SIX
+0C6D;NU # TELUGU DIGIT SEVEN
+0C6E;NU # TELUGU DIGIT EIGHT
+0C6F;NU # TELUGU DIGIT NINE
+0C82;CM # KANNADA SIGN ANUSVARA
+0C83;CM # KANNADA SIGN VISARGA
+0C85;AL # KANNADA LETTER A
+0C86;AL # KANNADA LETTER AA
+0C87;AL # KANNADA LETTER I
+0C88;AL # KANNADA LETTER II
+0C89;AL # KANNADA LETTER U
+0C8A;AL # KANNADA LETTER UU
+0C8B;AL # KANNADA LETTER VOCALIC R
+0C8C;AL # KANNADA LETTER VOCALIC L
+0C8E;AL # KANNADA LETTER E
+0C8F;AL # KANNADA LETTER EE
+0C90;AL # KANNADA LETTER AI
+0C92;AL # KANNADA LETTER O
+0C93;AL # KANNADA LETTER OO
+0C94;AL # KANNADA LETTER AU
+0C95;AL # KANNADA LETTER KA
+0C96;AL # KANNADA LETTER KHA
+0C97;AL # KANNADA LETTER GA
+0C98;AL # KANNADA LETTER GHA
+0C99;AL # KANNADA LETTER NGA
+0C9A;AL # KANNADA LETTER CA
+0C9B;AL # KANNADA LETTER CHA
+0C9C;AL # KANNADA LETTER JA
+0C9D;AL # KANNADA LETTER JHA
+0C9E;AL # KANNADA LETTER NYA
+0C9F;AL # KANNADA LETTER TTA
+0CA0;AL # KANNADA LETTER TTHA
+0CA1;AL # KANNADA LETTER DDA
+0CA2;AL # KANNADA LETTER DDHA
+0CA3;AL # KANNADA LETTER NNA
+0CA4;AL # KANNADA LETTER TA
+0CA5;AL # KANNADA LETTER THA
+0CA6;AL # KANNADA LETTER DA
+0CA7;AL # KANNADA LETTER DHA
+0CA8;AL # KANNADA LETTER NA
+0CAA;AL # KANNADA LETTER PA
+0CAB;AL # KANNADA LETTER PHA
+0CAC;AL # KANNADA LETTER BA
+0CAD;AL # KANNADA LETTER BHA
+0CAE;AL # KANNADA LETTER MA
+0CAF;AL # KANNADA LETTER YA
+0CB0;AL # KANNADA LETTER RA
+0CB1;AL # KANNADA LETTER RRA
+0CB2;AL # KANNADA LETTER LA
+0CB3;AL # KANNADA LETTER LLA
+0CB5;AL # KANNADA LETTER VA
+0CB6;AL # KANNADA LETTER SHA
+0CB7;AL # KANNADA LETTER SSA
+0CB8;AL # KANNADA LETTER SA
+0CB9;AL # KANNADA LETTER HA
+0CBC;CM # KANNADA SIGN NUKTA
+0CBD;AL # KANNADA SIGN AVAGRAHA
+0CBE;CM # KANNADA VOWEL SIGN AA
+0CBF;CM # KANNADA VOWEL SIGN I
+0CC0;CM # KANNADA VOWEL SIGN II
+0CC1;CM # KANNADA VOWEL SIGN U
+0CC2;CM # KANNADA VOWEL SIGN UU
+0CC3;CM # KANNADA VOWEL SIGN VOCALIC R
+0CC4;CM # KANNADA VOWEL SIGN VOCALIC RR
+0CC6;CM # KANNADA VOWEL SIGN E
+0CC7;CM # KANNADA VOWEL SIGN EE
+0CC8;CM # KANNADA VOWEL SIGN AI
+0CCA;CM # KANNADA VOWEL SIGN O
+0CCB;CM # KANNADA VOWEL SIGN OO
+0CCC;CM # KANNADA VOWEL SIGN AU
+0CCD;CM # KANNADA SIGN VIRAMA
+0CD5;CM # KANNADA LENGTH MARK
+0CD6;CM # KANNADA AI LENGTH MARK
+0CDE;AL # KANNADA LETTER FA
+0CE0;AL # KANNADA LETTER VOCALIC RR
+0CE1;AL # KANNADA LETTER VOCALIC LL
+0CE6;NU # KANNADA DIGIT ZERO
+0CE7;NU # KANNADA DIGIT ONE
+0CE8;NU # KANNADA DIGIT TWO
+0CE9;NU # KANNADA DIGIT THREE
+0CEA;NU # KANNADA DIGIT FOUR
+0CEB;NU # KANNADA DIGIT FIVE
+0CEC;NU # KANNADA DIGIT SIX
+0CED;NU # KANNADA DIGIT SEVEN
+0CEE;NU # KANNADA DIGIT EIGHT
+0CEF;NU # KANNADA DIGIT NINE
+0D02;CM # MALAYALAM SIGN ANUSVARA
+0D03;CM # MALAYALAM SIGN VISARGA
+0D05;AL # MALAYALAM LETTER A
+0D06;AL # MALAYALAM LETTER AA
+0D07;AL # MALAYALAM LETTER I
+0D08;AL # MALAYALAM LETTER II
+0D09;AL # MALAYALAM LETTER U
+0D0A;AL # MALAYALAM LETTER UU
+0D0B;AL # MALAYALAM LETTER VOCALIC R
+0D0C;AL # MALAYALAM LETTER VOCALIC L
+0D0E;AL # MALAYALAM LETTER E
+0D0F;AL # MALAYALAM LETTER EE
+0D10;AL # MALAYALAM LETTER AI
+0D12;AL # MALAYALAM LETTER O
+0D13;AL # MALAYALAM LETTER OO
+0D14;AL # MALAYALAM LETTER AU
+0D15;AL # MALAYALAM LETTER KA
+0D16;AL # MALAYALAM LETTER KHA
+0D17;AL # MALAYALAM LETTER GA
+0D18;AL # MALAYALAM LETTER GHA
+0D19;AL # MALAYALAM LETTER NGA
+0D1A;AL # MALAYALAM LETTER CA
+0D1B;AL # MALAYALAM LETTER CHA
+0D1C;AL # MALAYALAM LETTER JA
+0D1D;AL # MALAYALAM LETTER JHA
+0D1E;AL # MALAYALAM LETTER NYA
+0D1F;AL # MALAYALAM LETTER TTA
+0D20;AL # MALAYALAM LETTER TTHA
+0D21;AL # MALAYALAM LETTER DDA
+0D22;AL # MALAYALAM LETTER DDHA
+0D23;AL # MALAYALAM LETTER NNA
+0D24;AL # MALAYALAM LETTER TA
+0D25;AL # MALAYALAM LETTER THA
+0D26;AL # MALAYALAM LETTER DA
+0D27;AL # MALAYALAM LETTER DHA
+0D28;AL # MALAYALAM LETTER NA
+0D2A;AL # MALAYALAM LETTER PA
+0D2B;AL # MALAYALAM LETTER PHA
+0D2C;AL # MALAYALAM LETTER BA
+0D2D;AL # MALAYALAM LETTER BHA
+0D2E;AL # MALAYALAM LETTER MA
+0D2F;AL # MALAYALAM LETTER YA
+0D30;AL # MALAYALAM LETTER RA
+0D31;AL # MALAYALAM LETTER RRA
+0D32;AL # MALAYALAM LETTER LA
+0D33;AL # MALAYALAM LETTER LLA
+0D34;AL # MALAYALAM LETTER LLLA
+0D35;AL # MALAYALAM LETTER VA
+0D36;AL # MALAYALAM LETTER SHA
+0D37;AL # MALAYALAM LETTER SSA
+0D38;AL # MALAYALAM LETTER SA
+0D39;AL # MALAYALAM LETTER HA
+0D3E;CM # MALAYALAM VOWEL SIGN AA
+0D3F;CM # MALAYALAM VOWEL SIGN I
+0D40;CM # MALAYALAM VOWEL SIGN II
+0D41;CM # MALAYALAM VOWEL SIGN U
+0D42;CM # MALAYALAM VOWEL SIGN UU
+0D43;CM # MALAYALAM VOWEL SIGN VOCALIC R
+0D46;CM # MALAYALAM VOWEL SIGN E
+0D47;CM # MALAYALAM VOWEL SIGN EE
+0D48;CM # MALAYALAM VOWEL SIGN AI
+0D4A;CM # MALAYALAM VOWEL SIGN O
+0D4B;CM # MALAYALAM VOWEL SIGN OO
+0D4C;CM # MALAYALAM VOWEL SIGN AU
+0D4D;CM # MALAYALAM SIGN VIRAMA
+0D57;CM # MALAYALAM AU LENGTH MARK
+0D60;AL # MALAYALAM LETTER VOCALIC RR
+0D61;AL # MALAYALAM LETTER VOCALIC LL
+0D66;NU # MALAYALAM DIGIT ZERO
+0D67;NU # MALAYALAM DIGIT ONE
+0D68;NU # MALAYALAM DIGIT TWO
+0D69;NU # MALAYALAM DIGIT THREE
+0D6A;NU # MALAYALAM DIGIT FOUR
+0D6B;NU # MALAYALAM DIGIT FIVE
+0D6C;NU # MALAYALAM DIGIT SIX
+0D6D;NU # MALAYALAM DIGIT SEVEN
+0D6E;NU # MALAYALAM DIGIT EIGHT
+0D6F;NU # MALAYALAM DIGIT NINE
+0D82;CM # SINHALA SIGN ANUSVARAYA
+0D83;CM # SINHALA SIGN VISARGAYA
+0D85;AL # SINHALA LETTER AYANNA
+0D86;AL # SINHALA LETTER AAYANNA
+0D87;AL # SINHALA LETTER AEYANNA
+0D88;AL # SINHALA LETTER AEEYANNA
+0D89;AL # SINHALA LETTER IYANNA
+0D8A;AL # SINHALA LETTER IIYANNA
+0D8B;AL # SINHALA LETTER UYANNA
+0D8C;AL # SINHALA LETTER UUYANNA
+0D8D;AL # SINHALA LETTER IRUYANNA
+0D8E;AL # SINHALA LETTER IRUUYANNA
+0D8F;AL # SINHALA LETTER ILUYANNA
+0D90;AL # SINHALA LETTER ILUUYANNA
+0D91;AL # SINHALA LETTER EYANNA
+0D92;AL # SINHALA LETTER EEYANNA
+0D93;AL # SINHALA LETTER AIYANNA
+0D94;AL # SINHALA LETTER OYANNA
+0D95;AL # SINHALA LETTER OOYANNA
+0D96;AL # SINHALA LETTER AUYANNA
+0D9A;AL # SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B;AL # SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C;AL # SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D;AL # SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E;AL # SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F;AL # SINHALA LETTER SANYAKA GAYANNA
+0DA0;AL # SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1;AL # SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2;AL # SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3;AL # SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4;AL # SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5;AL # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6;AL # SINHALA LETTER SANYAKA JAYANNA
+0DA7;AL # SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8;AL # SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9;AL # SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA;AL # SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB;AL # SINHALA LETTER MUURDHAJA NAYANNA
+0DAC;AL # SINHALA LETTER SANYAKA DDAYANNA
+0DAD;AL # SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE;AL # SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF;AL # SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0;AL # SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1;AL # SINHALA LETTER DANTAJA NAYANNA
+0DB3;AL # SINHALA LETTER SANYAKA DAYANNA
+0DB4;AL # SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5;AL # SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6;AL # SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7;AL # SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8;AL # SINHALA LETTER MAYANNA
+0DB9;AL # SINHALA LETTER AMBA BAYANNA
+0DBA;AL # SINHALA LETTER YAYANNA
+0DBB;AL # SINHALA LETTER RAYANNA
+0DBD;AL # SINHALA LETTER DANTAJA LAYANNA
+0DC0;AL # SINHALA LETTER VAYANNA
+0DC1;AL # SINHALA LETTER TAALUJA SAYANNA
+0DC2;AL # SINHALA LETTER MUURDHAJA SAYANNA
+0DC3;AL # SINHALA LETTER DANTAJA SAYANNA
+0DC4;AL # SINHALA LETTER HAYANNA
+0DC5;AL # SINHALA LETTER MUURDHAJA LAYANNA
+0DC6;AL # SINHALA LETTER FAYANNA
+0DCA;CM # SINHALA SIGN AL-LAKUNA
+0DCF;CM # SINHALA VOWEL SIGN AELA-PILLA
+0DD0;CM # SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1;CM # SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2;CM # SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3;CM # SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4;CM # SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6;CM # SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8;CM # SINHALA VOWEL SIGN GAETTA-PILLA
+0DD9;CM # SINHALA VOWEL SIGN KOMBUVA
+0DDA;CM # SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB;CM # SINHALA VOWEL SIGN KOMBU DEKA
+0DDC;CM # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD;CM # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE;CM # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DDF;CM # SINHALA VOWEL SIGN GAYANUKITTA
+0DF2;CM # SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DF3;CM # SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4;AL # SINHALA PUNCTUATION KUNDDALIYA
+0E01;SA # THAI CHARACTER KO KAI
+0E02;SA # THAI CHARACTER KHO KHAI
+0E03;SA # THAI CHARACTER KHO KHUAT
+0E04;SA # THAI CHARACTER KHO KHWAI
+0E05;SA # THAI CHARACTER KHO KHON
+0E06;SA # THAI CHARACTER KHO RAKHANG
+0E07;SA # THAI CHARACTER NGO NGU
+0E08;SA # THAI CHARACTER CHO CHAN
+0E09;SA # THAI CHARACTER CHO CHING
+0E0A;SA # THAI CHARACTER CHO CHANG
+0E0B;SA # THAI CHARACTER SO SO
+0E0C;SA # THAI CHARACTER CHO CHOE
+0E0D;SA # THAI CHARACTER YO YING
+0E0E;SA # THAI CHARACTER DO CHADA
+0E0F;SA # THAI CHARACTER TO PATAK
+0E10;SA # THAI CHARACTER THO THAN
+0E11;SA # THAI CHARACTER THO NANGMONTHO
+0E12;SA # THAI CHARACTER THO PHUTHAO
+0E13;SA # THAI CHARACTER NO NEN
+0E14;SA # THAI CHARACTER DO DEK
+0E15;SA # THAI CHARACTER TO TAO
+0E16;SA # THAI CHARACTER THO THUNG
+0E17;SA # THAI CHARACTER THO THAHAN
+0E18;SA # THAI CHARACTER THO THONG
+0E19;SA # THAI CHARACTER NO NU
+0E1A;SA # THAI CHARACTER BO BAIMAI
+0E1B;SA # THAI CHARACTER PO PLA
+0E1C;SA # THAI CHARACTER PHO PHUNG
+0E1D;SA # THAI CHARACTER FO FA
+0E1E;SA # THAI CHARACTER PHO PHAN
+0E1F;SA # THAI CHARACTER FO FAN
+0E20;SA # THAI CHARACTER PHO SAMPHAO
+0E21;SA # THAI CHARACTER MO MA
+0E22;SA # THAI CHARACTER YO YAK
+0E23;SA # THAI CHARACTER RO RUA
+0E24;SA # THAI CHARACTER RU
+0E25;SA # THAI CHARACTER LO LING
+0E26;SA # THAI CHARACTER LU
+0E27;SA # THAI CHARACTER WO WAEN
+0E28;SA # THAI CHARACTER SO SALA
+0E29;SA # THAI CHARACTER SO RUSI
+0E2A;SA # THAI CHARACTER SO SUA
+0E2B;SA # THAI CHARACTER HO HIP
+0E2C;SA # THAI CHARACTER LO CHULA
+0E2D;SA # THAI CHARACTER O ANG
+0E2E;SA # THAI CHARACTER HO NOKHUK
+0E2F;SA # THAI CHARACTER PAIYANNOI
+0E30;SA # THAI CHARACTER SARA A
+0E31;CM # THAI CHARACTER MAI HAN-AKAT
+0E32;SA # THAI CHARACTER SARA AA
+0E33;SA # THAI CHARACTER SARA AM
+0E34;CM # THAI CHARACTER SARA I
+0E35;CM # THAI CHARACTER SARA II
+0E36;CM # THAI CHARACTER SARA UE
+0E37;CM # THAI CHARACTER SARA UEE
+0E38;CM # THAI CHARACTER SARA U
+0E39;CM # THAI CHARACTER SARA UU
+0E3A;CM # THAI CHARACTER PHINTHU
+0E3F;PR # THAI CURRENCY SYMBOL BAHT
+0E40;SA # THAI CHARACTER SARA E
+0E41;SA # THAI CHARACTER SARA AE
+0E42;SA # THAI CHARACTER SARA O
+0E43;SA # THAI CHARACTER SARA AI MAIMUAN
+0E44;SA # THAI CHARACTER SARA AI MAIMALAI
+0E45;SA # THAI CHARACTER LAKKHANGYAO
+0E46;SA # THAI CHARACTER MAIYAMOK
+0E47;CM # THAI CHARACTER MAITAIKHU
+0E48;CM # THAI CHARACTER MAI EK
+0E49;CM # THAI CHARACTER MAI THO
+0E4A;CM # THAI CHARACTER MAI TRI
+0E4B;CM # THAI CHARACTER MAI CHATTAWA
+0E4C;CM # THAI CHARACTER THANTHAKHAT
+0E4D;CM # THAI CHARACTER NIKHAHIT
+0E4E;CM # THAI CHARACTER YAMAKKAN
+0E4F;AL # THAI CHARACTER FONGMAN
+0E50;NU # THAI DIGIT ZERO
+0E51;NU # THAI DIGIT ONE
+0E52;NU # THAI DIGIT TWO
+0E53;NU # THAI DIGIT THREE
+0E54;NU # THAI DIGIT FOUR
+0E55;NU # THAI DIGIT FIVE
+0E56;NU # THAI DIGIT SIX
+0E57;NU # THAI DIGIT SEVEN
+0E58;NU # THAI DIGIT EIGHT
+0E59;NU # THAI DIGIT NINE
+0E5A;BA # THAI CHARACTER ANGKHANKHU
+0E5B;BA # THAI CHARACTER KHOMUT
+0E81;SA # LAO LETTER KO
+0E82;SA # LAO LETTER KHO SUNG
+0E84;SA # LAO LETTER KHO TAM
+0E87;SA # LAO LETTER NGO
+0E88;SA # LAO LETTER CO
+0E8A;SA # LAO LETTER SO TAM
+0E8D;SA # LAO LETTER NYO
+0E94;SA # LAO LETTER DO
+0E95;SA # LAO LETTER TO
+0E96;SA # LAO LETTER THO SUNG
+0E97;SA # LAO LETTER THO TAM
+0E99;SA # LAO LETTER NO
+0E9A;SA # LAO LETTER BO
+0E9B;SA # LAO LETTER PO
+0E9C;SA # LAO LETTER PHO SUNG
+0E9D;SA # LAO LETTER FO TAM
+0E9E;SA # LAO LETTER PHO TAM
+0E9F;SA # LAO LETTER FO SUNG
+0EA1;SA # LAO LETTER MO
+0EA2;SA # LAO LETTER YO
+0EA3;SA # LAO LETTER LO LING
+0EA5;SA # LAO LETTER LO LOOT
+0EA7;SA # LAO LETTER WO
+0EAA;SA # LAO LETTER SO SUNG
+0EAB;SA # LAO LETTER HO SUNG
+0EAD;SA # LAO LETTER O
+0EAE;SA # LAO LETTER HO TAM
+0EAF;SA # LAO ELLIPSIS
+0EB0;SA # LAO VOWEL SIGN A
+0EB1;CM # LAO VOWEL SIGN MAI KAN
+0EB2;SA # LAO VOWEL SIGN AA
+0EB3;SA # LAO VOWEL SIGN AM
+0EB4;CM # LAO VOWEL SIGN I
+0EB5;CM # LAO VOWEL SIGN II
+0EB6;CM # LAO VOWEL SIGN Y
+0EB7;CM # LAO VOWEL SIGN YY
+0EB8;CM # LAO VOWEL SIGN U
+0EB9;CM # LAO VOWEL SIGN UU
+0EBB;CM # LAO VOWEL SIGN MAI KON
+0EBC;CM # LAO SEMIVOWEL SIGN LO
+0EBD;SA # LAO SEMIVOWEL SIGN NYO
+0EC0;SA # LAO VOWEL SIGN E
+0EC1;SA # LAO VOWEL SIGN EI
+0EC2;SA # LAO VOWEL SIGN O
+0EC3;SA # LAO VOWEL SIGN AY
+0EC4;SA # LAO VOWEL SIGN AI
+0EC6;SA # LAO KO LA
+0EC8;CM # LAO TONE MAI EK
+0EC9;CM # LAO TONE MAI THO
+0ECA;CM # LAO TONE MAI TI
+0ECB;CM # LAO TONE MAI CATAWA
+0ECC;CM # LAO CANCELLATION MARK
+0ECD;CM # LAO NIGGAHITA
+0ED0;NU # LAO DIGIT ZERO
+0ED1;NU # LAO DIGIT ONE
+0ED2;NU # LAO DIGIT TWO
+0ED3;NU # LAO DIGIT THREE
+0ED4;NU # LAO DIGIT FOUR
+0ED5;NU # LAO DIGIT FIVE
+0ED6;NU # LAO DIGIT SIX
+0ED7;NU # LAO DIGIT SEVEN
+0ED8;NU # LAO DIGIT EIGHT
+0ED9;NU # LAO DIGIT NINE
+0EDC;SA # LAO HO NO
+0EDD;SA # LAO HO MO
+0F00;AL # TIBETAN SYLLABLE OM
+0F01;BB # TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02;BB # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03;BB # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04;BB # TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05;AL # TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06;BB # TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07;BB # TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08;GL # TIBETAN MARK SBRUL SHAD
+0F09;BB # TIBETAN MARK BSKUR YIG MGO
+0F0A;BB # TIBETAN MARK BKA- SHOG YIG MGO
+0F0B;BA # TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C;GL # TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D;EX # TIBETAN MARK SHAD
+0F0E;EX # TIBETAN MARK NYIS SHAD
+0F0F;EX # TIBETAN MARK TSHEG SHAD
+0F10;EX # TIBETAN MARK NYIS TSHEG SHAD
+0F11;EX # TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12;GL # TIBETAN MARK RGYA GRAM SHAD
+0F13;AL # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14;EX # TIBETAN MARK GTER TSHEG
+0F15;AL # TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16;AL # TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17;AL # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18;CM # TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19;CM # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A;AL # TIBETAN SIGN RDEL DKAR GCIG
+0F1B;AL # TIBETAN SIGN RDEL DKAR GNYIS
+0F1C;AL # TIBETAN SIGN RDEL DKAR GSUM
+0F1D;AL # TIBETAN SIGN RDEL NAG GCIG
+0F1E;AL # TIBETAN SIGN RDEL NAG GNYIS
+0F1F;AL # TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20;NU # TIBETAN DIGIT ZERO
+0F21;NU # TIBETAN DIGIT ONE
+0F22;NU # TIBETAN DIGIT TWO
+0F23;NU # TIBETAN DIGIT THREE
+0F24;NU # TIBETAN DIGIT FOUR
+0F25;NU # TIBETAN DIGIT FIVE
+0F26;NU # TIBETAN DIGIT SIX
+0F27;NU # TIBETAN DIGIT SEVEN
+0F28;NU # TIBETAN DIGIT EIGHT
+0F29;NU # TIBETAN DIGIT NINE
+0F2A;AL # TIBETAN DIGIT HALF ONE
+0F2B;AL # TIBETAN DIGIT HALF TWO
+0F2C;AL # TIBETAN DIGIT HALF THREE
+0F2D;AL # TIBETAN DIGIT HALF FOUR
+0F2E;AL # TIBETAN DIGIT HALF FIVE
+0F2F;AL # TIBETAN DIGIT HALF SIX
+0F30;AL # TIBETAN DIGIT HALF SEVEN
+0F31;AL # TIBETAN DIGIT HALF EIGHT
+0F32;AL # TIBETAN DIGIT HALF NINE
+0F33;AL # TIBETAN DIGIT HALF ZERO
+0F34;BA # TIBETAN MARK BSDUS RTAGS
+0F35;CM # TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36;AL # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37;CM # TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38;AL # TIBETAN MARK CHE MGO
+0F39;CM # TIBETAN MARK TSA -PHRU
+0F3A;OP # TIBETAN MARK GUG RTAGS GYON
+0F3B;CL # TIBETAN MARK GUG RTAGS GYAS
+0F3C;OP # TIBETAN MARK ANG KHANG GYON
+0F3D;CL # TIBETAN MARK ANG KHANG GYAS
+0F3E;CM # TIBETAN SIGN YAR TSHES
+0F3F;CM # TIBETAN SIGN MAR TSHES
+0F40;AL # TIBETAN LETTER KA
+0F41;AL # TIBETAN LETTER KHA
+0F42;AL # TIBETAN LETTER GA
+0F43;AL # TIBETAN LETTER GHA
+0F44;AL # TIBETAN LETTER NGA
+0F45;AL # TIBETAN LETTER CA
+0F46;AL # TIBETAN LETTER CHA
+0F47;AL # TIBETAN LETTER JA
+0F49;AL # TIBETAN LETTER NYA
+0F4A;AL # TIBETAN LETTER TTA
+0F4B;AL # TIBETAN LETTER TTHA
+0F4C;AL # TIBETAN LETTER DDA
+0F4D;AL # TIBETAN LETTER DDHA
+0F4E;AL # TIBETAN LETTER NNA
+0F4F;AL # TIBETAN LETTER TA
+0F50;AL # TIBETAN LETTER THA
+0F51;AL # TIBETAN LETTER DA
+0F52;AL # TIBETAN LETTER DHA
+0F53;AL # TIBETAN LETTER NA
+0F54;AL # TIBETAN LETTER PA
+0F55;AL # TIBETAN LETTER PHA
+0F56;AL # TIBETAN LETTER BA
+0F57;AL # TIBETAN LETTER BHA
+0F58;AL # TIBETAN LETTER MA
+0F59;AL # TIBETAN LETTER TSA
+0F5A;AL # TIBETAN LETTER TSHA
+0F5B;AL # TIBETAN LETTER DZA
+0F5C;AL # TIBETAN LETTER DZHA
+0F5D;AL # TIBETAN LETTER WA
+0F5E;AL # TIBETAN LETTER ZHA
+0F5F;AL # TIBETAN LETTER ZA
+0F60;AL # TIBETAN LETTER -A
+0F61;AL # TIBETAN LETTER YA
+0F62;AL # TIBETAN LETTER RA
+0F63;AL # TIBETAN LETTER LA
+0F64;AL # TIBETAN LETTER SHA
+0F65;AL # TIBETAN LETTER SSA
+0F66;AL # TIBETAN LETTER SA
+0F67;AL # TIBETAN LETTER HA
+0F68;AL # TIBETAN LETTER A
+0F69;AL # TIBETAN LETTER KSSA
+0F6A;AL # TIBETAN LETTER FIXED-FORM RA
+0F71;CM # TIBETAN VOWEL SIGN AA
+0F72;CM # TIBETAN VOWEL SIGN I
+0F73;CM # TIBETAN VOWEL SIGN II
+0F74;CM # TIBETAN VOWEL SIGN U
+0F75;CM # TIBETAN VOWEL SIGN UU
+0F76;CM # TIBETAN VOWEL SIGN VOCALIC R
+0F77;CM # TIBETAN VOWEL SIGN VOCALIC RR
+0F78;CM # TIBETAN VOWEL SIGN VOCALIC L
+0F79;CM # TIBETAN VOWEL SIGN VOCALIC LL
+0F7A;CM # TIBETAN VOWEL SIGN E
+0F7B;CM # TIBETAN VOWEL SIGN EE
+0F7C;CM # TIBETAN VOWEL SIGN O
+0F7D;CM # TIBETAN VOWEL SIGN OO
+0F7E;CM # TIBETAN SIGN RJES SU NGA RO
+0F7F;BA # TIBETAN SIGN RNAM BCAD
+0F80;CM # TIBETAN VOWEL SIGN REVERSED I
+0F81;CM # TIBETAN VOWEL SIGN REVERSED II
+0F82;CM # TIBETAN SIGN NYI ZLA NAA DA
+0F83;CM # TIBETAN SIGN SNA LDAN
+0F84;CM # TIBETAN MARK HALANTA
+0F85;BA # TIBETAN MARK PALUTA
+0F86;CM # TIBETAN SIGN LCI RTAGS
+0F87;CM # TIBETAN SIGN YANG RTAGS
+0F88;AL # TIBETAN SIGN LCE TSA CAN
+0F89;AL # TIBETAN SIGN MCHU CAN
+0F8A;AL # TIBETAN SIGN GRU CAN RGYINGS
+0F8B;AL # TIBETAN SIGN GRU MED RGYINGS
+0F90;CM # TIBETAN SUBJOINED LETTER KA
+0F91;CM # TIBETAN SUBJOINED LETTER KHA
+0F92;CM # TIBETAN SUBJOINED LETTER GA
+0F93;CM # TIBETAN SUBJOINED LETTER GHA
+0F94;CM # TIBETAN SUBJOINED LETTER NGA
+0F95;CM # TIBETAN SUBJOINED LETTER CA
+0F96;CM # TIBETAN SUBJOINED LETTER CHA
+0F97;CM # TIBETAN SUBJOINED LETTER JA
+0F99;CM # TIBETAN SUBJOINED LETTER NYA
+0F9A;CM # TIBETAN SUBJOINED LETTER TTA
+0F9B;CM # TIBETAN SUBJOINED LETTER TTHA
+0F9C;CM # TIBETAN SUBJOINED LETTER DDA
+0F9D;CM # TIBETAN SUBJOINED LETTER DDHA
+0F9E;CM # TIBETAN SUBJOINED LETTER NNA
+0F9F;CM # TIBETAN SUBJOINED LETTER TA
+0FA0;CM # TIBETAN SUBJOINED LETTER THA
+0FA1;CM # TIBETAN SUBJOINED LETTER DA
+0FA2;CM # TIBETAN SUBJOINED LETTER DHA
+0FA3;CM # TIBETAN SUBJOINED LETTER NA
+0FA4;CM # TIBETAN SUBJOINED LETTER PA
+0FA5;CM # TIBETAN SUBJOINED LETTER PHA
+0FA6;CM # TIBETAN SUBJOINED LETTER BA
+0FA7;CM # TIBETAN SUBJOINED LETTER BHA
+0FA8;CM # TIBETAN SUBJOINED LETTER MA
+0FA9;CM # TIBETAN SUBJOINED LETTER TSA
+0FAA;CM # TIBETAN SUBJOINED LETTER TSHA
+0FAB;CM # TIBETAN SUBJOINED LETTER DZA
+0FAC;CM # TIBETAN SUBJOINED LETTER DZHA
+0FAD;CM # TIBETAN SUBJOINED LETTER WA
+0FAE;CM # TIBETAN SUBJOINED LETTER ZHA
+0FAF;CM # TIBETAN SUBJOINED LETTER ZA
+0FB0;CM # TIBETAN SUBJOINED LETTER -A
+0FB1;CM # TIBETAN SUBJOINED LETTER YA
+0FB2;CM # TIBETAN SUBJOINED LETTER RA
+0FB3;CM # TIBETAN SUBJOINED LETTER LA
+0FB4;CM # TIBETAN SUBJOINED LETTER SHA
+0FB5;CM # TIBETAN SUBJOINED LETTER SSA
+0FB6;CM # TIBETAN SUBJOINED LETTER SA
+0FB7;CM # TIBETAN SUBJOINED LETTER HA
+0FB8;CM # TIBETAN SUBJOINED LETTER A
+0FB9;CM # TIBETAN SUBJOINED LETTER KSSA
+0FBA;CM # TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0FBB;CM # TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0FBC;CM # TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE;BA # TIBETAN KU RU KHA
+0FBF;BA # TIBETAN KU RU KHA BZHI MIG CAN
+0FC0;AL # TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1;AL # TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2;AL # TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3;AL # TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4;AL # TIBETAN SYMBOL DRIL BU
+0FC5;AL # TIBETAN SYMBOL RDO RJE
+0FC6;CM # TIBETAN SYMBOL PADMA GDAN
+0FC7;AL # TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8;AL # TIBETAN SYMBOL PHUR PA
+0FC9;AL # TIBETAN SYMBOL NOR BU
+0FCA;AL # TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB;AL # TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC;AL # TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF;AL # TIBETAN SIGN RDEL NAG GSUM
+0FD0;BB # TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1;BB # TIBETAN MARK MNYAM YIG GI MGO RGYAN
+1000;SA # MYANMAR LETTER KA
+1001;SA # MYANMAR LETTER KHA
+1002;SA # MYANMAR LETTER GA
+1003;SA # MYANMAR LETTER GHA
+1004;SA # MYANMAR LETTER NGA
+1005;SA # MYANMAR LETTER CA
+1006;SA # MYANMAR LETTER CHA
+1007;SA # MYANMAR LETTER JA
+1008;SA # MYANMAR LETTER JHA
+1009;SA # MYANMAR LETTER NYA
+100A;SA # MYANMAR LETTER NNYA
+100B;SA # MYANMAR LETTER TTA
+100C;SA # MYANMAR LETTER TTHA
+100D;SA # MYANMAR LETTER DDA
+100E;SA # MYANMAR LETTER DDHA
+100F;SA # MYANMAR LETTER NNA
+1010;SA # MYANMAR LETTER TA
+1011;SA # MYANMAR LETTER THA
+1012;SA # MYANMAR LETTER DA
+1013;SA # MYANMAR LETTER DHA
+1014;SA # MYANMAR LETTER NA
+1015;SA # MYANMAR LETTER PA
+1016;SA # MYANMAR LETTER PHA
+1017;SA # MYANMAR LETTER BA
+1018;SA # MYANMAR LETTER BHA
+1019;SA # MYANMAR LETTER MA
+101A;SA # MYANMAR LETTER YA
+101B;SA # MYANMAR LETTER RA
+101C;SA # MYANMAR LETTER LA
+101D;SA # MYANMAR LETTER WA
+101E;SA # MYANMAR LETTER SA
+101F;SA # MYANMAR LETTER HA
+1020;SA # MYANMAR LETTER LLA
+1021;SA # MYANMAR LETTER A
+1023;SA # MYANMAR LETTER I
+1024;SA # MYANMAR LETTER II
+1025;SA # MYANMAR LETTER U
+1026;SA # MYANMAR LETTER UU
+1027;SA # MYANMAR LETTER E
+1029;SA # MYANMAR LETTER O
+102A;SA # MYANMAR LETTER AU
+102C;CM # MYANMAR VOWEL SIGN AA
+102D;CM # MYANMAR VOWEL SIGN I
+102E;CM # MYANMAR VOWEL SIGN II
+102F;CM # MYANMAR VOWEL SIGN U
+1030;CM # MYANMAR VOWEL SIGN UU
+1031;CM # MYANMAR VOWEL SIGN E
+1032;CM # MYANMAR VOWEL SIGN AI
+1036;CM # MYANMAR SIGN ANUSVARA
+1037;CM # MYANMAR SIGN DOT BELOW
+1038;CM # MYANMAR SIGN VISARGA
+1039;CM # MYANMAR SIGN VIRAMA
+1040;NU # MYANMAR DIGIT ZERO
+1041;NU # MYANMAR DIGIT ONE
+1042;NU # MYANMAR DIGIT TWO
+1043;NU # MYANMAR DIGIT THREE
+1044;NU # MYANMAR DIGIT FOUR
+1045;NU # MYANMAR DIGIT FIVE
+1046;NU # MYANMAR DIGIT SIX
+1047;NU # MYANMAR DIGIT SEVEN
+1048;NU # MYANMAR DIGIT EIGHT
+1049;NU # MYANMAR DIGIT NINE
+104A;BA # MYANMAR SIGN LITTLE SECTION
+104B;BA # MYANMAR SIGN SECTION
+104C;AL # MYANMAR SYMBOL LOCATIVE
+104D;AL # MYANMAR SYMBOL COMPLETED
+104E;AL # MYANMAR SYMBOL AFOREMENTIONED
+104F;AL # MYANMAR SYMBOL GENITIVE
+1050;SA # MYANMAR LETTER SHA
+1051;SA # MYANMAR LETTER SSA
+1052;SA # MYANMAR LETTER VOCALIC R
+1053;SA # MYANMAR LETTER VOCALIC RR
+1054;SA # MYANMAR LETTER VOCALIC L
+1055;SA # MYANMAR LETTER VOCALIC LL
+1056;CM # MYANMAR VOWEL SIGN VOCALIC R
+1057;CM # MYANMAR VOWEL SIGN VOCALIC RR
+1058;CM # MYANMAR VOWEL SIGN VOCALIC L
+1059;CM # MYANMAR VOWEL SIGN VOCALIC LL
+10A0;AL # GEORGIAN CAPITAL LETTER AN
+10A1;AL # GEORGIAN CAPITAL LETTER BAN
+10A2;AL # GEORGIAN CAPITAL LETTER GAN
+10A3;AL # GEORGIAN CAPITAL LETTER DON
+10A4;AL # GEORGIAN CAPITAL LETTER EN
+10A5;AL # GEORGIAN CAPITAL LETTER VIN
+10A6;AL # GEORGIAN CAPITAL LETTER ZEN
+10A7;AL # GEORGIAN CAPITAL LETTER TAN
+10A8;AL # GEORGIAN CAPITAL LETTER IN
+10A9;AL # GEORGIAN CAPITAL LETTER KAN
+10AA;AL # GEORGIAN CAPITAL LETTER LAS
+10AB;AL # GEORGIAN CAPITAL LETTER MAN
+10AC;AL # GEORGIAN CAPITAL LETTER NAR
+10AD;AL # GEORGIAN CAPITAL LETTER ON
+10AE;AL # GEORGIAN CAPITAL LETTER PAR
+10AF;AL # GEORGIAN CAPITAL LETTER ZHAR
+10B0;AL # GEORGIAN CAPITAL LETTER RAE
+10B1;AL # GEORGIAN CAPITAL LETTER SAN
+10B2;AL # GEORGIAN CAPITAL LETTER TAR
+10B3;AL # GEORGIAN CAPITAL LETTER UN
+10B4;AL # GEORGIAN CAPITAL LETTER PHAR
+10B5;AL # GEORGIAN CAPITAL LETTER KHAR
+10B6;AL # GEORGIAN CAPITAL LETTER GHAN
+10B7;AL # GEORGIAN CAPITAL LETTER QAR
+10B8;AL # GEORGIAN CAPITAL LETTER SHIN
+10B9;AL # GEORGIAN CAPITAL LETTER CHIN
+10BA;AL # GEORGIAN CAPITAL LETTER CAN
+10BB;AL # GEORGIAN CAPITAL LETTER JIL
+10BC;AL # GEORGIAN CAPITAL LETTER CIL
+10BD;AL # GEORGIAN CAPITAL LETTER CHAR
+10BE;AL # GEORGIAN CAPITAL LETTER XAN
+10BF;AL # GEORGIAN CAPITAL LETTER JHAN
+10C0;AL # GEORGIAN CAPITAL LETTER HAE
+10C1;AL # GEORGIAN CAPITAL LETTER HE
+10C2;AL # GEORGIAN CAPITAL LETTER HIE
+10C3;AL # GEORGIAN CAPITAL LETTER WE
+10C4;AL # GEORGIAN CAPITAL LETTER HAR
+10C5;AL # GEORGIAN CAPITAL LETTER HOE
+10D0;AL # GEORGIAN LETTER AN
+10D1;AL # GEORGIAN LETTER BAN
+10D2;AL # GEORGIAN LETTER GAN
+10D3;AL # GEORGIAN LETTER DON
+10D4;AL # GEORGIAN LETTER EN
+10D5;AL # GEORGIAN LETTER VIN
+10D6;AL # GEORGIAN LETTER ZEN
+10D7;AL # GEORGIAN LETTER TAN
+10D8;AL # GEORGIAN LETTER IN
+10D9;AL # GEORGIAN LETTER KAN
+10DA;AL # GEORGIAN LETTER LAS
+10DB;AL # GEORGIAN LETTER MAN
+10DC;AL # GEORGIAN LETTER NAR
+10DD;AL # GEORGIAN LETTER ON
+10DE;AL # GEORGIAN LETTER PAR
+10DF;AL # GEORGIAN LETTER ZHAR
+10E0;AL # GEORGIAN LETTER RAE
+10E1;AL # GEORGIAN LETTER SAN
+10E2;AL # GEORGIAN LETTER TAR
+10E3;AL # GEORGIAN LETTER UN
+10E4;AL # GEORGIAN LETTER PHAR
+10E5;AL # GEORGIAN LETTER KHAR
+10E6;AL # GEORGIAN LETTER GHAN
+10E7;AL # GEORGIAN LETTER QAR
+10E8;AL # GEORGIAN LETTER SHIN
+10E9;AL # GEORGIAN LETTER CHIN
+10EA;AL # GEORGIAN LETTER CAN
+10EB;AL # GEORGIAN LETTER JIL
+10EC;AL # GEORGIAN LETTER CIL
+10ED;AL # GEORGIAN LETTER CHAR
+10EE;AL # GEORGIAN LETTER XAN
+10EF;AL # GEORGIAN LETTER JHAN
+10F0;AL # GEORGIAN LETTER HAE
+10F1;AL # GEORGIAN LETTER HE
+10F2;AL # GEORGIAN LETTER HIE
+10F3;AL # GEORGIAN LETTER WE
+10F4;AL # GEORGIAN LETTER HAR
+10F5;AL # GEORGIAN LETTER HOE
+10F6;AL # GEORGIAN LETTER FI
+10F7;AL # GEORGIAN LETTER YN
+10F8;AL # GEORGIAN LETTER ELIFI
+10F9;AL # GEORGIAN LETTER TURNED GAN
+10FA;AL # GEORGIAN LETTER AIN
+10FB;AL # GEORGIAN PARAGRAPH SEPARATOR
+10FC;AL # MODIFIER LETTER GEORGIAN NAR
+1100;JL # HANGUL CHOSEONG KIYEOK
+1101;JL # HANGUL CHOSEONG SSANGKIYEOK
+1102;JL # HANGUL CHOSEONG NIEUN
+1103;JL # HANGUL CHOSEONG TIKEUT
+1104;JL # HANGUL CHOSEONG SSANGTIKEUT
+1105;JL # HANGUL CHOSEONG RIEUL
+1106;JL # HANGUL CHOSEONG MIEUM
+1107;JL # HANGUL CHOSEONG PIEUP
+1108;JL # HANGUL CHOSEONG SSANGPIEUP
+1109;JL # HANGUL CHOSEONG SIOS
+110A;JL # HANGUL CHOSEONG SSANGSIOS
+110B;JL # HANGUL CHOSEONG IEUNG
+110C;JL # HANGUL CHOSEONG CIEUC
+110D;JL # HANGUL CHOSEONG SSANGCIEUC
+110E;JL # HANGUL CHOSEONG CHIEUCH
+110F;JL # HANGUL CHOSEONG KHIEUKH
+1110;JL # HANGUL CHOSEONG THIEUTH
+1111;JL # HANGUL CHOSEONG PHIEUPH
+1112;JL # HANGUL CHOSEONG HIEUH
+1113;JL # HANGUL CHOSEONG NIEUN-KIYEOK
+1114;JL # HANGUL CHOSEONG SSANGNIEUN
+1115;JL # HANGUL CHOSEONG NIEUN-TIKEUT
+1116;JL # HANGUL CHOSEONG NIEUN-PIEUP
+1117;JL # HANGUL CHOSEONG TIKEUT-KIYEOK
+1118;JL # HANGUL CHOSEONG RIEUL-NIEUN
+1119;JL # HANGUL CHOSEONG SSANGRIEUL
+111A;JL # HANGUL CHOSEONG RIEUL-HIEUH
+111B;JL # HANGUL CHOSEONG KAPYEOUNRIEUL
+111C;JL # HANGUL CHOSEONG MIEUM-PIEUP
+111D;JL # HANGUL CHOSEONG KAPYEOUNMIEUM
+111E;JL # HANGUL CHOSEONG PIEUP-KIYEOK
+111F;JL # HANGUL CHOSEONG PIEUP-NIEUN
+1120;JL # HANGUL CHOSEONG PIEUP-TIKEUT
+1121;JL # HANGUL CHOSEONG PIEUP-SIOS
+1122;JL # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123;JL # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124;JL # HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125;JL # HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126;JL # HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127;JL # HANGUL CHOSEONG PIEUP-CIEUC
+1128;JL # HANGUL CHOSEONG PIEUP-CHIEUCH
+1129;JL # HANGUL CHOSEONG PIEUP-THIEUTH
+112A;JL # HANGUL CHOSEONG PIEUP-PHIEUPH
+112B;JL # HANGUL CHOSEONG KAPYEOUNPIEUP
+112C;JL # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D;JL # HANGUL CHOSEONG SIOS-KIYEOK
+112E;JL # HANGUL CHOSEONG SIOS-NIEUN
+112F;JL # HANGUL CHOSEONG SIOS-TIKEUT
+1130;JL # HANGUL CHOSEONG SIOS-RIEUL
+1131;JL # HANGUL CHOSEONG SIOS-MIEUM
+1132;JL # HANGUL CHOSEONG SIOS-PIEUP
+1133;JL # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134;JL # HANGUL CHOSEONG SIOS-SSANGSIOS
+1135;JL # HANGUL CHOSEONG SIOS-IEUNG
+1136;JL # HANGUL CHOSEONG SIOS-CIEUC
+1137;JL # HANGUL CHOSEONG SIOS-CHIEUCH
+1138;JL # HANGUL CHOSEONG SIOS-KHIEUKH
+1139;JL # HANGUL CHOSEONG SIOS-THIEUTH
+113A;JL # HANGUL CHOSEONG SIOS-PHIEUPH
+113B;JL # HANGUL CHOSEONG SIOS-HIEUH
+113C;JL # HANGUL CHOSEONG CHITUEUMSIOS
+113D;JL # HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E;JL # HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F;JL # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140;JL # HANGUL CHOSEONG PANSIOS
+1141;JL # HANGUL CHOSEONG IEUNG-KIYEOK
+1142;JL # HANGUL CHOSEONG IEUNG-TIKEUT
+1143;JL # HANGUL CHOSEONG IEUNG-MIEUM
+1144;JL # HANGUL CHOSEONG IEUNG-PIEUP
+1145;JL # HANGUL CHOSEONG IEUNG-SIOS
+1146;JL # HANGUL CHOSEONG IEUNG-PANSIOS
+1147;JL # HANGUL CHOSEONG SSANGIEUNG
+1148;JL # HANGUL CHOSEONG IEUNG-CIEUC
+1149;JL # HANGUL CHOSEONG IEUNG-CHIEUCH
+114A;JL # HANGUL CHOSEONG IEUNG-THIEUTH
+114B;JL # HANGUL CHOSEONG IEUNG-PHIEUPH
+114C;JL # HANGUL CHOSEONG YESIEUNG
+114D;JL # HANGUL CHOSEONG CIEUC-IEUNG
+114E;JL # HANGUL CHOSEONG CHITUEUMCIEUC
+114F;JL # HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150;JL # HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151;JL # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152;JL # HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153;JL # HANGUL CHOSEONG CHIEUCH-HIEUH
+1154;JL # HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155;JL # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156;JL # HANGUL CHOSEONG PHIEUPH-PIEUP
+1157;JL # HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158;JL # HANGUL CHOSEONG SSANGHIEUH
+1159;JL # HANGUL CHOSEONG YEORINHIEUH
+115F;JL # HANGUL CHOSEONG FILLER
+1160;JV # HANGUL JUNGSEONG FILLER
+1161;JV # HANGUL JUNGSEONG A
+1162;JV # HANGUL JUNGSEONG AE
+1163;JV # HANGUL JUNGSEONG YA
+1164;JV # HANGUL JUNGSEONG YAE
+1165;JV # HANGUL JUNGSEONG EO
+1166;JV # HANGUL JUNGSEONG E
+1167;JV # HANGUL JUNGSEONG YEO
+1168;JV # HANGUL JUNGSEONG YE
+1169;JV # HANGUL JUNGSEONG O
+116A;JV # HANGUL JUNGSEONG WA
+116B;JV # HANGUL JUNGSEONG WAE
+116C;JV # HANGUL JUNGSEONG OE
+116D;JV # HANGUL JUNGSEONG YO
+116E;JV # HANGUL JUNGSEONG U
+116F;JV # HANGUL JUNGSEONG WEO
+1170;JV # HANGUL JUNGSEONG WE
+1171;JV # HANGUL JUNGSEONG WI
+1172;JV # HANGUL JUNGSEONG YU
+1173;JV # HANGUL JUNGSEONG EU
+1174;JV # HANGUL JUNGSEONG YI
+1175;JV # HANGUL JUNGSEONG I
+1176;JV # HANGUL JUNGSEONG A-O
+1177;JV # HANGUL JUNGSEONG A-U
+1178;JV # HANGUL JUNGSEONG YA-O
+1179;JV # HANGUL JUNGSEONG YA-YO
+117A;JV # HANGUL JUNGSEONG EO-O
+117B;JV # HANGUL JUNGSEONG EO-U
+117C;JV # HANGUL JUNGSEONG EO-EU
+117D;JV # HANGUL JUNGSEONG YEO-O
+117E;JV # HANGUL JUNGSEONG YEO-U
+117F;JV # HANGUL JUNGSEONG O-EO
+1180;JV # HANGUL JUNGSEONG O-E
+1181;JV # HANGUL JUNGSEONG O-YE
+1182;JV # HANGUL JUNGSEONG O-O
+1183;JV # HANGUL JUNGSEONG O-U
+1184;JV # HANGUL JUNGSEONG YO-YA
+1185;JV # HANGUL JUNGSEONG YO-YAE
+1186;JV # HANGUL JUNGSEONG YO-YEO
+1187;JV # HANGUL JUNGSEONG YO-O
+1188;JV # HANGUL JUNGSEONG YO-I
+1189;JV # HANGUL JUNGSEONG U-A
+118A;JV # HANGUL JUNGSEONG U-AE
+118B;JV # HANGUL JUNGSEONG U-EO-EU
+118C;JV # HANGUL JUNGSEONG U-YE
+118D;JV # HANGUL JUNGSEONG U-U
+118E;JV # HANGUL JUNGSEONG YU-A
+118F;JV # HANGUL JUNGSEONG YU-EO
+1190;JV # HANGUL JUNGSEONG YU-E
+1191;JV # HANGUL JUNGSEONG YU-YEO
+1192;JV # HANGUL JUNGSEONG YU-YE
+1193;JV # HANGUL JUNGSEONG YU-U
+1194;JV # HANGUL JUNGSEONG YU-I
+1195;JV # HANGUL JUNGSEONG EU-U
+1196;JV # HANGUL JUNGSEONG EU-EU
+1197;JV # HANGUL JUNGSEONG YI-U
+1198;JV # HANGUL JUNGSEONG I-A
+1199;JV # HANGUL JUNGSEONG I-YA
+119A;JV # HANGUL JUNGSEONG I-O
+119B;JV # HANGUL JUNGSEONG I-U
+119C;JV # HANGUL JUNGSEONG I-EU
+119D;JV # HANGUL JUNGSEONG I-ARAEA
+119E;JV # HANGUL JUNGSEONG ARAEA
+119F;JV # HANGUL JUNGSEONG ARAEA-EO
+11A0;JV # HANGUL JUNGSEONG ARAEA-U
+11A1;JV # HANGUL JUNGSEONG ARAEA-I
+11A2;JV # HANGUL JUNGSEONG SSANGARAEA
+11A8;JT # HANGUL JONGSEONG KIYEOK
+11A9;JT # HANGUL JONGSEONG SSANGKIYEOK
+11AA;JT # HANGUL JONGSEONG KIYEOK-SIOS
+11AB;JT # HANGUL JONGSEONG NIEUN
+11AC;JT # HANGUL JONGSEONG NIEUN-CIEUC
+11AD;JT # HANGUL JONGSEONG NIEUN-HIEUH
+11AE;JT # HANGUL JONGSEONG TIKEUT
+11AF;JT # HANGUL JONGSEONG RIEUL
+11B0;JT # HANGUL JONGSEONG RIEUL-KIYEOK
+11B1;JT # HANGUL JONGSEONG RIEUL-MIEUM
+11B2;JT # HANGUL JONGSEONG RIEUL-PIEUP
+11B3;JT # HANGUL JONGSEONG RIEUL-SIOS
+11B4;JT # HANGUL JONGSEONG RIEUL-THIEUTH
+11B5;JT # HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6;JT # HANGUL JONGSEONG RIEUL-HIEUH
+11B7;JT # HANGUL JONGSEONG MIEUM
+11B8;JT # HANGUL JONGSEONG PIEUP
+11B9;JT # HANGUL JONGSEONG PIEUP-SIOS
+11BA;JT # HANGUL JONGSEONG SIOS
+11BB;JT # HANGUL JONGSEONG SSANGSIOS
+11BC;JT # HANGUL JONGSEONG IEUNG
+11BD;JT # HANGUL JONGSEONG CIEUC
+11BE;JT # HANGUL JONGSEONG CHIEUCH
+11BF;JT # HANGUL JONGSEONG KHIEUKH
+11C0;JT # HANGUL JONGSEONG THIEUTH
+11C1;JT # HANGUL JONGSEONG PHIEUPH
+11C2;JT # HANGUL JONGSEONG HIEUH
+11C3;JT # HANGUL JONGSEONG KIYEOK-RIEUL
+11C4;JT # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5;JT # HANGUL JONGSEONG NIEUN-KIYEOK
+11C6;JT # HANGUL JONGSEONG NIEUN-TIKEUT
+11C7;JT # HANGUL JONGSEONG NIEUN-SIOS
+11C8;JT # HANGUL JONGSEONG NIEUN-PANSIOS
+11C9;JT # HANGUL JONGSEONG NIEUN-THIEUTH
+11CA;JT # HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB;JT # HANGUL JONGSEONG TIKEUT-RIEUL
+11CC;JT # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD;JT # HANGUL JONGSEONG RIEUL-NIEUN
+11CE;JT # HANGUL JONGSEONG RIEUL-TIKEUT
+11CF;JT # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0;JT # HANGUL JONGSEONG SSANGRIEUL
+11D1;JT # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2;JT # HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3;JT # HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4;JT # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5;JT # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6;JT # HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7;JT # HANGUL JONGSEONG RIEUL-PANSIOS
+11D8;JT # HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9;JT # HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA;JT # HANGUL JONGSEONG MIEUM-KIYEOK
+11DB;JT # HANGUL JONGSEONG MIEUM-RIEUL
+11DC;JT # HANGUL JONGSEONG MIEUM-PIEUP
+11DD;JT # HANGUL JONGSEONG MIEUM-SIOS
+11DE;JT # HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF;JT # HANGUL JONGSEONG MIEUM-PANSIOS
+11E0;JT # HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1;JT # HANGUL JONGSEONG MIEUM-HIEUH
+11E2;JT # HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3;JT # HANGUL JONGSEONG PIEUP-RIEUL
+11E4;JT # HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5;JT # HANGUL JONGSEONG PIEUP-HIEUH
+11E6;JT # HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7;JT # HANGUL JONGSEONG SIOS-KIYEOK
+11E8;JT # HANGUL JONGSEONG SIOS-TIKEUT
+11E9;JT # HANGUL JONGSEONG SIOS-RIEUL
+11EA;JT # HANGUL JONGSEONG SIOS-PIEUP
+11EB;JT # HANGUL JONGSEONG PANSIOS
+11EC;JT # HANGUL JONGSEONG IEUNG-KIYEOK
+11ED;JT # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE;JT # HANGUL JONGSEONG SSANGIEUNG
+11EF;JT # HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0;JT # HANGUL JONGSEONG YESIEUNG
+11F1;JT # HANGUL JONGSEONG YESIEUNG-SIOS
+11F2;JT # HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3;JT # HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4;JT # HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5;JT # HANGUL JONGSEONG HIEUH-NIEUN
+11F6;JT # HANGUL JONGSEONG HIEUH-RIEUL
+11F7;JT # HANGUL JONGSEONG HIEUH-MIEUM
+11F8;JT # HANGUL JONGSEONG HIEUH-PIEUP
+11F9;JT # HANGUL JONGSEONG YEORINHIEUH
+1200;AL # ETHIOPIC SYLLABLE HA
+1201;AL # ETHIOPIC SYLLABLE HU
+1202;AL # ETHIOPIC SYLLABLE HI
+1203;AL # ETHIOPIC SYLLABLE HAA
+1204;AL # ETHIOPIC SYLLABLE HEE
+1205;AL # ETHIOPIC SYLLABLE HE
+1206;AL # ETHIOPIC SYLLABLE HO
+1207;AL # ETHIOPIC SYLLABLE HOA
+1208;AL # ETHIOPIC SYLLABLE LA
+1209;AL # ETHIOPIC SYLLABLE LU
+120A;AL # ETHIOPIC SYLLABLE LI
+120B;AL # ETHIOPIC SYLLABLE LAA
+120C;AL # ETHIOPIC SYLLABLE LEE
+120D;AL # ETHIOPIC SYLLABLE LE
+120E;AL # ETHIOPIC SYLLABLE LO
+120F;AL # ETHIOPIC SYLLABLE LWA
+1210;AL # ETHIOPIC SYLLABLE HHA
+1211;AL # ETHIOPIC SYLLABLE HHU
+1212;AL # ETHIOPIC SYLLABLE HHI
+1213;AL # ETHIOPIC SYLLABLE HHAA
+1214;AL # ETHIOPIC SYLLABLE HHEE
+1215;AL # ETHIOPIC SYLLABLE HHE
+1216;AL # ETHIOPIC SYLLABLE HHO
+1217;AL # ETHIOPIC SYLLABLE HHWA
+1218;AL # ETHIOPIC SYLLABLE MA
+1219;AL # ETHIOPIC SYLLABLE MU
+121A;AL # ETHIOPIC SYLLABLE MI
+121B;AL # ETHIOPIC SYLLABLE MAA
+121C;AL # ETHIOPIC SYLLABLE MEE
+121D;AL # ETHIOPIC SYLLABLE ME
+121E;AL # ETHIOPIC SYLLABLE MO
+121F;AL # ETHIOPIC SYLLABLE MWA
+1220;AL # ETHIOPIC SYLLABLE SZA
+1221;AL # ETHIOPIC SYLLABLE SZU
+1222;AL # ETHIOPIC SYLLABLE SZI
+1223;AL # ETHIOPIC SYLLABLE SZAA
+1224;AL # ETHIOPIC SYLLABLE SZEE
+1225;AL # ETHIOPIC SYLLABLE SZE
+1226;AL # ETHIOPIC SYLLABLE SZO
+1227;AL # ETHIOPIC SYLLABLE SZWA
+1228;AL # ETHIOPIC SYLLABLE RA
+1229;AL # ETHIOPIC SYLLABLE RU
+122A;AL # ETHIOPIC SYLLABLE RI
+122B;AL # ETHIOPIC SYLLABLE RAA
+122C;AL # ETHIOPIC SYLLABLE REE
+122D;AL # ETHIOPIC SYLLABLE RE
+122E;AL # ETHIOPIC SYLLABLE RO
+122F;AL # ETHIOPIC SYLLABLE RWA
+1230;AL # ETHIOPIC SYLLABLE SA
+1231;AL # ETHIOPIC SYLLABLE SU
+1232;AL # ETHIOPIC SYLLABLE SI
+1233;AL # ETHIOPIC SYLLABLE SAA
+1234;AL # ETHIOPIC SYLLABLE SEE
+1235;AL # ETHIOPIC SYLLABLE SE
+1236;AL # ETHIOPIC SYLLABLE SO
+1237;AL # ETHIOPIC SYLLABLE SWA
+1238;AL # ETHIOPIC SYLLABLE SHA
+1239;AL # ETHIOPIC SYLLABLE SHU
+123A;AL # ETHIOPIC SYLLABLE SHI
+123B;AL # ETHIOPIC SYLLABLE SHAA
+123C;AL # ETHIOPIC SYLLABLE SHEE
+123D;AL # ETHIOPIC SYLLABLE SHE
+123E;AL # ETHIOPIC SYLLABLE SHO
+123F;AL # ETHIOPIC SYLLABLE SHWA
+1240;AL # ETHIOPIC SYLLABLE QA
+1241;AL # ETHIOPIC SYLLABLE QU
+1242;AL # ETHIOPIC SYLLABLE QI
+1243;AL # ETHIOPIC SYLLABLE QAA
+1244;AL # ETHIOPIC SYLLABLE QEE
+1245;AL # ETHIOPIC SYLLABLE QE
+1246;AL # ETHIOPIC SYLLABLE QO
+1247;AL # ETHIOPIC SYLLABLE QOA
+1248;AL # ETHIOPIC SYLLABLE QWA
+124A;AL # ETHIOPIC SYLLABLE QWI
+124B;AL # ETHIOPIC SYLLABLE QWAA
+124C;AL # ETHIOPIC SYLLABLE QWEE
+124D;AL # ETHIOPIC SYLLABLE QWE
+1250;AL # ETHIOPIC SYLLABLE QHA
+1251;AL # ETHIOPIC SYLLABLE QHU
+1252;AL # ETHIOPIC SYLLABLE QHI
+1253;AL # ETHIOPIC SYLLABLE QHAA
+1254;AL # ETHIOPIC SYLLABLE QHEE
+1255;AL # ETHIOPIC SYLLABLE QHE
+1256;AL # ETHIOPIC SYLLABLE QHO
+1258;AL # ETHIOPIC SYLLABLE QHWA
+125A;AL # ETHIOPIC SYLLABLE QHWI
+125B;AL # ETHIOPIC SYLLABLE QHWAA
+125C;AL # ETHIOPIC SYLLABLE QHWEE
+125D;AL # ETHIOPIC SYLLABLE QHWE
+1260;AL # ETHIOPIC SYLLABLE BA
+1261;AL # ETHIOPIC SYLLABLE BU
+1262;AL # ETHIOPIC SYLLABLE BI
+1263;AL # ETHIOPIC SYLLABLE BAA
+1264;AL # ETHIOPIC SYLLABLE BEE
+1265;AL # ETHIOPIC SYLLABLE BE
+1266;AL # ETHIOPIC SYLLABLE BO
+1267;AL # ETHIOPIC SYLLABLE BWA
+1268;AL # ETHIOPIC SYLLABLE VA
+1269;AL # ETHIOPIC SYLLABLE VU
+126A;AL # ETHIOPIC SYLLABLE VI
+126B;AL # ETHIOPIC SYLLABLE VAA
+126C;AL # ETHIOPIC SYLLABLE VEE
+126D;AL # ETHIOPIC SYLLABLE VE
+126E;AL # ETHIOPIC SYLLABLE VO
+126F;AL # ETHIOPIC SYLLABLE VWA
+1270;AL # ETHIOPIC SYLLABLE TA
+1271;AL # ETHIOPIC SYLLABLE TU
+1272;AL # ETHIOPIC SYLLABLE TI
+1273;AL # ETHIOPIC SYLLABLE TAA
+1274;AL # ETHIOPIC SYLLABLE TEE
+1275;AL # ETHIOPIC SYLLABLE TE
+1276;AL # ETHIOPIC SYLLABLE TO
+1277;AL # ETHIOPIC SYLLABLE TWA
+1278;AL # ETHIOPIC SYLLABLE CA
+1279;AL # ETHIOPIC SYLLABLE CU
+127A;AL # ETHIOPIC SYLLABLE CI
+127B;AL # ETHIOPIC SYLLABLE CAA
+127C;AL # ETHIOPIC SYLLABLE CEE
+127D;AL # ETHIOPIC SYLLABLE CE
+127E;AL # ETHIOPIC SYLLABLE CO
+127F;AL # ETHIOPIC SYLLABLE CWA
+1280;AL # ETHIOPIC SYLLABLE XA
+1281;AL # ETHIOPIC SYLLABLE XU
+1282;AL # ETHIOPIC SYLLABLE XI
+1283;AL # ETHIOPIC SYLLABLE XAA
+1284;AL # ETHIOPIC SYLLABLE XEE
+1285;AL # ETHIOPIC SYLLABLE XE
+1286;AL # ETHIOPIC SYLLABLE XO
+1287;AL # ETHIOPIC SYLLABLE XOA
+1288;AL # ETHIOPIC SYLLABLE XWA
+128A;AL # ETHIOPIC SYLLABLE XWI
+128B;AL # ETHIOPIC SYLLABLE XWAA
+128C;AL # ETHIOPIC SYLLABLE XWEE
+128D;AL # ETHIOPIC SYLLABLE XWE
+1290;AL # ETHIOPIC SYLLABLE NA
+1291;AL # ETHIOPIC SYLLABLE NU
+1292;AL # ETHIOPIC SYLLABLE NI
+1293;AL # ETHIOPIC SYLLABLE NAA
+1294;AL # ETHIOPIC SYLLABLE NEE
+1295;AL # ETHIOPIC SYLLABLE NE
+1296;AL # ETHIOPIC SYLLABLE NO
+1297;AL # ETHIOPIC SYLLABLE NWA
+1298;AL # ETHIOPIC SYLLABLE NYA
+1299;AL # ETHIOPIC SYLLABLE NYU
+129A;AL # ETHIOPIC SYLLABLE NYI
+129B;AL # ETHIOPIC SYLLABLE NYAA
+129C;AL # ETHIOPIC SYLLABLE NYEE
+129D;AL # ETHIOPIC SYLLABLE NYE
+129E;AL # ETHIOPIC SYLLABLE NYO
+129F;AL # ETHIOPIC SYLLABLE NYWA
+12A0;AL # ETHIOPIC SYLLABLE GLOTTAL A
+12A1;AL # ETHIOPIC SYLLABLE GLOTTAL U
+12A2;AL # ETHIOPIC SYLLABLE GLOTTAL I
+12A3;AL # ETHIOPIC SYLLABLE GLOTTAL AA
+12A4;AL # ETHIOPIC SYLLABLE GLOTTAL EE
+12A5;AL # ETHIOPIC SYLLABLE GLOTTAL E
+12A6;AL # ETHIOPIC SYLLABLE GLOTTAL O
+12A7;AL # ETHIOPIC SYLLABLE GLOTTAL WA
+12A8;AL # ETHIOPIC SYLLABLE KA
+12A9;AL # ETHIOPIC SYLLABLE KU
+12AA;AL # ETHIOPIC SYLLABLE KI
+12AB;AL # ETHIOPIC SYLLABLE KAA
+12AC;AL # ETHIOPIC SYLLABLE KEE
+12AD;AL # ETHIOPIC SYLLABLE KE
+12AE;AL # ETHIOPIC SYLLABLE KO
+12AF;AL # ETHIOPIC SYLLABLE KOA
+12B0;AL # ETHIOPIC SYLLABLE KWA
+12B2;AL # ETHIOPIC SYLLABLE KWI
+12B3;AL # ETHIOPIC SYLLABLE KWAA
+12B4;AL # ETHIOPIC SYLLABLE KWEE
+12B5;AL # ETHIOPIC SYLLABLE KWE
+12B8;AL # ETHIOPIC SYLLABLE KXA
+12B9;AL # ETHIOPIC SYLLABLE KXU
+12BA;AL # ETHIOPIC SYLLABLE KXI
+12BB;AL # ETHIOPIC SYLLABLE KXAA
+12BC;AL # ETHIOPIC SYLLABLE KXEE
+12BD;AL # ETHIOPIC SYLLABLE KXE
+12BE;AL # ETHIOPIC SYLLABLE KXO
+12C0;AL # ETHIOPIC SYLLABLE KXWA
+12C2;AL # ETHIOPIC SYLLABLE KXWI
+12C3;AL # ETHIOPIC SYLLABLE KXWAA
+12C4;AL # ETHIOPIC SYLLABLE KXWEE
+12C5;AL # ETHIOPIC SYLLABLE KXWE
+12C8;AL # ETHIOPIC SYLLABLE WA
+12C9;AL # ETHIOPIC SYLLABLE WU
+12CA;AL # ETHIOPIC SYLLABLE WI
+12CB;AL # ETHIOPIC SYLLABLE WAA
+12CC;AL # ETHIOPIC SYLLABLE WEE
+12CD;AL # ETHIOPIC SYLLABLE WE
+12CE;AL # ETHIOPIC SYLLABLE WO
+12CF;AL # ETHIOPIC SYLLABLE WOA
+12D0;AL # ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1;AL # ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2;AL # ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3;AL # ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4;AL # ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5;AL # ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6;AL # ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8;AL # ETHIOPIC SYLLABLE ZA
+12D9;AL # ETHIOPIC SYLLABLE ZU
+12DA;AL # ETHIOPIC SYLLABLE ZI
+12DB;AL # ETHIOPIC SYLLABLE ZAA
+12DC;AL # ETHIOPIC SYLLABLE ZEE
+12DD;AL # ETHIOPIC SYLLABLE ZE
+12DE;AL # ETHIOPIC SYLLABLE ZO
+12DF;AL # ETHIOPIC SYLLABLE ZWA
+12E0;AL # ETHIOPIC SYLLABLE ZHA
+12E1;AL # ETHIOPIC SYLLABLE ZHU
+12E2;AL # ETHIOPIC SYLLABLE ZHI
+12E3;AL # ETHIOPIC SYLLABLE ZHAA
+12E4;AL # ETHIOPIC SYLLABLE ZHEE
+12E5;AL # ETHIOPIC SYLLABLE ZHE
+12E6;AL # ETHIOPIC SYLLABLE ZHO
+12E7;AL # ETHIOPIC SYLLABLE ZHWA
+12E8;AL # ETHIOPIC SYLLABLE YA
+12E9;AL # ETHIOPIC SYLLABLE YU
+12EA;AL # ETHIOPIC SYLLABLE YI
+12EB;AL # ETHIOPIC SYLLABLE YAA
+12EC;AL # ETHIOPIC SYLLABLE YEE
+12ED;AL # ETHIOPIC SYLLABLE YE
+12EE;AL # ETHIOPIC SYLLABLE YO
+12EF;AL # ETHIOPIC SYLLABLE YOA
+12F0;AL # ETHIOPIC SYLLABLE DA
+12F1;AL # ETHIOPIC SYLLABLE DU
+12F2;AL # ETHIOPIC SYLLABLE DI
+12F3;AL # ETHIOPIC SYLLABLE DAA
+12F4;AL # ETHIOPIC SYLLABLE DEE
+12F5;AL # ETHIOPIC SYLLABLE DE
+12F6;AL # ETHIOPIC SYLLABLE DO
+12F7;AL # ETHIOPIC SYLLABLE DWA
+12F8;AL # ETHIOPIC SYLLABLE DDA
+12F9;AL # ETHIOPIC SYLLABLE DDU
+12FA;AL # ETHIOPIC SYLLABLE DDI
+12FB;AL # ETHIOPIC SYLLABLE DDAA
+12FC;AL # ETHIOPIC SYLLABLE DDEE
+12FD;AL # ETHIOPIC SYLLABLE DDE
+12FE;AL # ETHIOPIC SYLLABLE DDO
+12FF;AL # ETHIOPIC SYLLABLE DDWA
+1300;AL # ETHIOPIC SYLLABLE JA
+1301;AL # ETHIOPIC SYLLABLE JU
+1302;AL # ETHIOPIC SYLLABLE JI
+1303;AL # ETHIOPIC SYLLABLE JAA
+1304;AL # ETHIOPIC SYLLABLE JEE
+1305;AL # ETHIOPIC SYLLABLE JE
+1306;AL # ETHIOPIC SYLLABLE JO
+1307;AL # ETHIOPIC SYLLABLE JWA
+1308;AL # ETHIOPIC SYLLABLE GA
+1309;AL # ETHIOPIC SYLLABLE GU
+130A;AL # ETHIOPIC SYLLABLE GI
+130B;AL # ETHIOPIC SYLLABLE GAA
+130C;AL # ETHIOPIC SYLLABLE GEE
+130D;AL # ETHIOPIC SYLLABLE GE
+130E;AL # ETHIOPIC SYLLABLE GO
+130F;AL # ETHIOPIC SYLLABLE GOA
+1310;AL # ETHIOPIC SYLLABLE GWA
+1312;AL # ETHIOPIC SYLLABLE GWI
+1313;AL # ETHIOPIC SYLLABLE GWAA
+1314;AL # ETHIOPIC SYLLABLE GWEE
+1315;AL # ETHIOPIC SYLLABLE GWE
+1318;AL # ETHIOPIC SYLLABLE GGA
+1319;AL # ETHIOPIC SYLLABLE GGU
+131A;AL # ETHIOPIC SYLLABLE GGI
+131B;AL # ETHIOPIC SYLLABLE GGAA
+131C;AL # ETHIOPIC SYLLABLE GGEE
+131D;AL # ETHIOPIC SYLLABLE GGE
+131E;AL # ETHIOPIC SYLLABLE GGO
+131F;AL # ETHIOPIC SYLLABLE GGWAA
+1320;AL # ETHIOPIC SYLLABLE THA
+1321;AL # ETHIOPIC SYLLABLE THU
+1322;AL # ETHIOPIC SYLLABLE THI
+1323;AL # ETHIOPIC SYLLABLE THAA
+1324;AL # ETHIOPIC SYLLABLE THEE
+1325;AL # ETHIOPIC SYLLABLE THE
+1326;AL # ETHIOPIC SYLLABLE THO
+1327;AL # ETHIOPIC SYLLABLE THWA
+1328;AL # ETHIOPIC SYLLABLE CHA
+1329;AL # ETHIOPIC SYLLABLE CHU
+132A;AL # ETHIOPIC SYLLABLE CHI
+132B;AL # ETHIOPIC SYLLABLE CHAA
+132C;AL # ETHIOPIC SYLLABLE CHEE
+132D;AL # ETHIOPIC SYLLABLE CHE
+132E;AL # ETHIOPIC SYLLABLE CHO
+132F;AL # ETHIOPIC SYLLABLE CHWA
+1330;AL # ETHIOPIC SYLLABLE PHA
+1331;AL # ETHIOPIC SYLLABLE PHU
+1332;AL # ETHIOPIC SYLLABLE PHI
+1333;AL # ETHIOPIC SYLLABLE PHAA
+1334;AL # ETHIOPIC SYLLABLE PHEE
+1335;AL # ETHIOPIC SYLLABLE PHE
+1336;AL # ETHIOPIC SYLLABLE PHO
+1337;AL # ETHIOPIC SYLLABLE PHWA
+1338;AL # ETHIOPIC SYLLABLE TSA
+1339;AL # ETHIOPIC SYLLABLE TSU
+133A;AL # ETHIOPIC SYLLABLE TSI
+133B;AL # ETHIOPIC SYLLABLE TSAA
+133C;AL # ETHIOPIC SYLLABLE TSEE
+133D;AL # ETHIOPIC SYLLABLE TSE
+133E;AL # ETHIOPIC SYLLABLE TSO
+133F;AL # ETHIOPIC SYLLABLE TSWA
+1340;AL # ETHIOPIC SYLLABLE TZA
+1341;AL # ETHIOPIC SYLLABLE TZU
+1342;AL # ETHIOPIC SYLLABLE TZI
+1343;AL # ETHIOPIC SYLLABLE TZAA
+1344;AL # ETHIOPIC SYLLABLE TZEE
+1345;AL # ETHIOPIC SYLLABLE TZE
+1346;AL # ETHIOPIC SYLLABLE TZO
+1347;AL # ETHIOPIC SYLLABLE TZOA
+1348;AL # ETHIOPIC SYLLABLE FA
+1349;AL # ETHIOPIC SYLLABLE FU
+134A;AL # ETHIOPIC SYLLABLE FI
+134B;AL # ETHIOPIC SYLLABLE FAA
+134C;AL # ETHIOPIC SYLLABLE FEE
+134D;AL # ETHIOPIC SYLLABLE FE
+134E;AL # ETHIOPIC SYLLABLE FO
+134F;AL # ETHIOPIC SYLLABLE FWA
+1350;AL # ETHIOPIC SYLLABLE PA
+1351;AL # ETHIOPIC SYLLABLE PU
+1352;AL # ETHIOPIC SYLLABLE PI
+1353;AL # ETHIOPIC SYLLABLE PAA
+1354;AL # ETHIOPIC SYLLABLE PEE
+1355;AL # ETHIOPIC SYLLABLE PE
+1356;AL # ETHIOPIC SYLLABLE PO
+1357;AL # ETHIOPIC SYLLABLE PWA
+1358;AL # ETHIOPIC SYLLABLE RYA
+1359;AL # ETHIOPIC SYLLABLE MYA
+135A;AL # ETHIOPIC SYLLABLE FYA
+135F;CM # ETHIOPIC COMBINING GEMINATION MARK
+1360;AL # ETHIOPIC SECTION MARK
+1361;BA # ETHIOPIC WORDSPACE
+1362;AL # ETHIOPIC FULL STOP
+1363;AL # ETHIOPIC COMMA
+1364;AL # ETHIOPIC SEMICOLON
+1365;AL # ETHIOPIC COLON
+1366;AL # ETHIOPIC PREFACE COLON
+1367;AL # ETHIOPIC QUESTION MARK
+1368;AL # ETHIOPIC PARAGRAPH SEPARATOR
+1369;AL # ETHIOPIC DIGIT ONE
+136A;AL # ETHIOPIC DIGIT TWO
+136B;AL # ETHIOPIC DIGIT THREE
+136C;AL # ETHIOPIC DIGIT FOUR
+136D;AL # ETHIOPIC DIGIT FIVE
+136E;AL # ETHIOPIC DIGIT SIX
+136F;AL # ETHIOPIC DIGIT SEVEN
+1370;AL # ETHIOPIC DIGIT EIGHT
+1371;AL # ETHIOPIC DIGIT NINE
+1372;AL # ETHIOPIC NUMBER TEN
+1373;AL # ETHIOPIC NUMBER TWENTY
+1374;AL # ETHIOPIC NUMBER THIRTY
+1375;AL # ETHIOPIC NUMBER FORTY
+1376;AL # ETHIOPIC NUMBER FIFTY
+1377;AL # ETHIOPIC NUMBER SIXTY
+1378;AL # ETHIOPIC NUMBER SEVENTY
+1379;AL # ETHIOPIC NUMBER EIGHTY
+137A;AL # ETHIOPIC NUMBER NINETY
+137B;AL # ETHIOPIC NUMBER HUNDRED
+137C;AL # ETHIOPIC NUMBER TEN THOUSAND
+1380;AL # ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381;AL # ETHIOPIC SYLLABLE MWI
+1382;AL # ETHIOPIC SYLLABLE MWEE
+1383;AL # ETHIOPIC SYLLABLE MWE
+1384;AL # ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385;AL # ETHIOPIC SYLLABLE BWI
+1386;AL # ETHIOPIC SYLLABLE BWEE
+1387;AL # ETHIOPIC SYLLABLE BWE
+1388;AL # ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389;AL # ETHIOPIC SYLLABLE FWI
+138A;AL # ETHIOPIC SYLLABLE FWEE
+138B;AL # ETHIOPIC SYLLABLE FWE
+138C;AL # ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D;AL # ETHIOPIC SYLLABLE PWI
+138E;AL # ETHIOPIC SYLLABLE PWEE
+138F;AL # ETHIOPIC SYLLABLE PWE
+1390;AL # ETHIOPIC TONAL MARK YIZET
+1391;AL # ETHIOPIC TONAL MARK DERET
+1392;AL # ETHIOPIC TONAL MARK RIKRIK
+1393;AL # ETHIOPIC TONAL MARK SHORT RIKRIK
+1394;AL # ETHIOPIC TONAL MARK DIFAT
+1395;AL # ETHIOPIC TONAL MARK KENAT
+1396;AL # ETHIOPIC TONAL MARK CHIRET
+1397;AL # ETHIOPIC TONAL MARK HIDET
+1398;AL # ETHIOPIC TONAL MARK DERET-HIDET
+1399;AL # ETHIOPIC TONAL MARK KURT
+13A0;AL # CHEROKEE LETTER A
+13A1;AL # CHEROKEE LETTER E
+13A2;AL # CHEROKEE LETTER I
+13A3;AL # CHEROKEE LETTER O
+13A4;AL # CHEROKEE LETTER U
+13A5;AL # CHEROKEE LETTER V
+13A6;AL # CHEROKEE LETTER GA
+13A7;AL # CHEROKEE LETTER KA
+13A8;AL # CHEROKEE LETTER GE
+13A9;AL # CHEROKEE LETTER GI
+13AA;AL # CHEROKEE LETTER GO
+13AB;AL # CHEROKEE LETTER GU
+13AC;AL # CHEROKEE LETTER GV
+13AD;AL # CHEROKEE LETTER HA
+13AE;AL # CHEROKEE LETTER HE
+13AF;AL # CHEROKEE LETTER HI
+13B0;AL # CHEROKEE LETTER HO
+13B1;AL # CHEROKEE LETTER HU
+13B2;AL # CHEROKEE LETTER HV
+13B3;AL # CHEROKEE LETTER LA
+13B4;AL # CHEROKEE LETTER LE
+13B5;AL # CHEROKEE LETTER LI
+13B6;AL # CHEROKEE LETTER LO
+13B7;AL # CHEROKEE LETTER LU
+13B8;AL # CHEROKEE LETTER LV
+13B9;AL # CHEROKEE LETTER MA
+13BA;AL # CHEROKEE LETTER ME
+13BB;AL # CHEROKEE LETTER MI
+13BC;AL # CHEROKEE LETTER MO
+13BD;AL # CHEROKEE LETTER MU
+13BE;AL # CHEROKEE LETTER NA
+13BF;AL # CHEROKEE LETTER HNA
+13C0;AL # CHEROKEE LETTER NAH
+13C1;AL # CHEROKEE LETTER NE
+13C2;AL # CHEROKEE LETTER NI
+13C3;AL # CHEROKEE LETTER NO
+13C4;AL # CHEROKEE LETTER NU
+13C5;AL # CHEROKEE LETTER NV
+13C6;AL # CHEROKEE LETTER QUA
+13C7;AL # CHEROKEE LETTER QUE
+13C8;AL # CHEROKEE LETTER QUI
+13C9;AL # CHEROKEE LETTER QUO
+13CA;AL # CHEROKEE LETTER QUU
+13CB;AL # CHEROKEE LETTER QUV
+13CC;AL # CHEROKEE LETTER SA
+13CD;AL # CHEROKEE LETTER S
+13CE;AL # CHEROKEE LETTER SE
+13CF;AL # CHEROKEE LETTER SI
+13D0;AL # CHEROKEE LETTER SO
+13D1;AL # CHEROKEE LETTER SU
+13D2;AL # CHEROKEE LETTER SV
+13D3;AL # CHEROKEE LETTER DA
+13D4;AL # CHEROKEE LETTER TA
+13D5;AL # CHEROKEE LETTER DE
+13D6;AL # CHEROKEE LETTER TE
+13D7;AL # CHEROKEE LETTER DI
+13D8;AL # CHEROKEE LETTER TI
+13D9;AL # CHEROKEE LETTER DO
+13DA;AL # CHEROKEE LETTER DU
+13DB;AL # CHEROKEE LETTER DV
+13DC;AL # CHEROKEE LETTER DLA
+13DD;AL # CHEROKEE LETTER TLA
+13DE;AL # CHEROKEE LETTER TLE
+13DF;AL # CHEROKEE LETTER TLI
+13E0;AL # CHEROKEE LETTER TLO
+13E1;AL # CHEROKEE LETTER TLU
+13E2;AL # CHEROKEE LETTER TLV
+13E3;AL # CHEROKEE LETTER TSA
+13E4;AL # CHEROKEE LETTER TSE
+13E5;AL # CHEROKEE LETTER TSI
+13E6;AL # CHEROKEE LETTER TSO
+13E7;AL # CHEROKEE LETTER TSU
+13E8;AL # CHEROKEE LETTER TSV
+13E9;AL # CHEROKEE LETTER WA
+13EA;AL # CHEROKEE LETTER WE
+13EB;AL # CHEROKEE LETTER WI
+13EC;AL # CHEROKEE LETTER WO
+13ED;AL # CHEROKEE LETTER WU
+13EE;AL # CHEROKEE LETTER WV
+13EF;AL # CHEROKEE LETTER YA
+13F0;AL # CHEROKEE LETTER YE
+13F1;AL # CHEROKEE LETTER YI
+13F2;AL # CHEROKEE LETTER YO
+13F3;AL # CHEROKEE LETTER YU
+13F4;AL # CHEROKEE LETTER YV
+1401;AL # CANADIAN SYLLABICS E
+1402;AL # CANADIAN SYLLABICS AAI
+1403;AL # CANADIAN SYLLABICS I
+1404;AL # CANADIAN SYLLABICS II
+1405;AL # CANADIAN SYLLABICS O
+1406;AL # CANADIAN SYLLABICS OO
+1407;AL # CANADIAN SYLLABICS Y-CREE OO
+1408;AL # CANADIAN SYLLABICS CARRIER EE
+1409;AL # CANADIAN SYLLABICS CARRIER I
+140A;AL # CANADIAN SYLLABICS A
+140B;AL # CANADIAN SYLLABICS AA
+140C;AL # CANADIAN SYLLABICS WE
+140D;AL # CANADIAN SYLLABICS WEST-CREE WE
+140E;AL # CANADIAN SYLLABICS WI
+140F;AL # CANADIAN SYLLABICS WEST-CREE WI
+1410;AL # CANADIAN SYLLABICS WII
+1411;AL # CANADIAN SYLLABICS WEST-CREE WII
+1412;AL # CANADIAN SYLLABICS WO
+1413;AL # CANADIAN SYLLABICS WEST-CREE WO
+1414;AL # CANADIAN SYLLABICS WOO
+1415;AL # CANADIAN SYLLABICS WEST-CREE WOO
+1416;AL # CANADIAN SYLLABICS NASKAPI WOO
+1417;AL # CANADIAN SYLLABICS WA
+1418;AL # CANADIAN SYLLABICS WEST-CREE WA
+1419;AL # CANADIAN SYLLABICS WAA
+141A;AL # CANADIAN SYLLABICS WEST-CREE WAA
+141B;AL # CANADIAN SYLLABICS NASKAPI WAA
+141C;AL # CANADIAN SYLLABICS AI
+141D;AL # CANADIAN SYLLABICS Y-CREE W
+141E;AL # CANADIAN SYLLABICS GLOTTAL STOP
+141F;AL # CANADIAN SYLLABICS FINAL ACUTE
+1420;AL # CANADIAN SYLLABICS FINAL GRAVE
+1421;AL # CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422;AL # CANADIAN SYLLABICS FINAL TOP HALF RING
+1423;AL # CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424;AL # CANADIAN SYLLABICS FINAL RING
+1425;AL # CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426;AL # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427;AL # CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428;AL # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429;AL # CANADIAN SYLLABICS FINAL PLUS
+142A;AL # CANADIAN SYLLABICS FINAL DOWN TACK
+142B;AL # CANADIAN SYLLABICS EN
+142C;AL # CANADIAN SYLLABICS IN
+142D;AL # CANADIAN SYLLABICS ON
+142E;AL # CANADIAN SYLLABICS AN
+142F;AL # CANADIAN SYLLABICS PE
+1430;AL # CANADIAN SYLLABICS PAAI
+1431;AL # CANADIAN SYLLABICS PI
+1432;AL # CANADIAN SYLLABICS PII
+1433;AL # CANADIAN SYLLABICS PO
+1434;AL # CANADIAN SYLLABICS POO
+1435;AL # CANADIAN SYLLABICS Y-CREE POO
+1436;AL # CANADIAN SYLLABICS CARRIER HEE
+1437;AL # CANADIAN SYLLABICS CARRIER HI
+1438;AL # CANADIAN SYLLABICS PA
+1439;AL # CANADIAN SYLLABICS PAA
+143A;AL # CANADIAN SYLLABICS PWE
+143B;AL # CANADIAN SYLLABICS WEST-CREE PWE
+143C;AL # CANADIAN SYLLABICS PWI
+143D;AL # CANADIAN SYLLABICS WEST-CREE PWI
+143E;AL # CANADIAN SYLLABICS PWII
+143F;AL # CANADIAN SYLLABICS WEST-CREE PWII
+1440;AL # CANADIAN SYLLABICS PWO
+1441;AL # CANADIAN SYLLABICS WEST-CREE PWO
+1442;AL # CANADIAN SYLLABICS PWOO
+1443;AL # CANADIAN SYLLABICS WEST-CREE PWOO
+1444;AL # CANADIAN SYLLABICS PWA
+1445;AL # CANADIAN SYLLABICS WEST-CREE PWA
+1446;AL # CANADIAN SYLLABICS PWAA
+1447;AL # CANADIAN SYLLABICS WEST-CREE PWAA
+1448;AL # CANADIAN SYLLABICS Y-CREE PWAA
+1449;AL # CANADIAN SYLLABICS P
+144A;AL # CANADIAN SYLLABICS WEST-CREE P
+144B;AL # CANADIAN SYLLABICS CARRIER H
+144C;AL # CANADIAN SYLLABICS TE
+144D;AL # CANADIAN SYLLABICS TAAI
+144E;AL # CANADIAN SYLLABICS TI
+144F;AL # CANADIAN SYLLABICS TII
+1450;AL # CANADIAN SYLLABICS TO
+1451;AL # CANADIAN SYLLABICS TOO
+1452;AL # CANADIAN SYLLABICS Y-CREE TOO
+1453;AL # CANADIAN SYLLABICS CARRIER DEE
+1454;AL # CANADIAN SYLLABICS CARRIER DI
+1455;AL # CANADIAN SYLLABICS TA
+1456;AL # CANADIAN SYLLABICS TAA
+1457;AL # CANADIAN SYLLABICS TWE
+1458;AL # CANADIAN SYLLABICS WEST-CREE TWE
+1459;AL # CANADIAN SYLLABICS TWI
+145A;AL # CANADIAN SYLLABICS WEST-CREE TWI
+145B;AL # CANADIAN SYLLABICS TWII
+145C;AL # CANADIAN SYLLABICS WEST-CREE TWII
+145D;AL # CANADIAN SYLLABICS TWO
+145E;AL # CANADIAN SYLLABICS WEST-CREE TWO
+145F;AL # CANADIAN SYLLABICS TWOO
+1460;AL # CANADIAN SYLLABICS WEST-CREE TWOO
+1461;AL # CANADIAN SYLLABICS TWA
+1462;AL # CANADIAN SYLLABICS WEST-CREE TWA
+1463;AL # CANADIAN SYLLABICS TWAA
+1464;AL # CANADIAN SYLLABICS WEST-CREE TWAA
+1465;AL # CANADIAN SYLLABICS NASKAPI TWAA
+1466;AL # CANADIAN SYLLABICS T
+1467;AL # CANADIAN SYLLABICS TTE
+1468;AL # CANADIAN SYLLABICS TTI
+1469;AL # CANADIAN SYLLABICS TTO
+146A;AL # CANADIAN SYLLABICS TTA
+146B;AL # CANADIAN SYLLABICS KE
+146C;AL # CANADIAN SYLLABICS KAAI
+146D;AL # CANADIAN SYLLABICS KI
+146E;AL # CANADIAN SYLLABICS KII
+146F;AL # CANADIAN SYLLABICS KO
+1470;AL # CANADIAN SYLLABICS KOO
+1471;AL # CANADIAN SYLLABICS Y-CREE KOO
+1472;AL # CANADIAN SYLLABICS KA
+1473;AL # CANADIAN SYLLABICS KAA
+1474;AL # CANADIAN SYLLABICS KWE
+1475;AL # CANADIAN SYLLABICS WEST-CREE KWE
+1476;AL # CANADIAN SYLLABICS KWI
+1477;AL # CANADIAN SYLLABICS WEST-CREE KWI
+1478;AL # CANADIAN SYLLABICS KWII
+1479;AL # CANADIAN SYLLABICS WEST-CREE KWII
+147A;AL # CANADIAN SYLLABICS KWO
+147B;AL # CANADIAN SYLLABICS WEST-CREE KWO
+147C;AL # CANADIAN SYLLABICS KWOO
+147D;AL # CANADIAN SYLLABICS WEST-CREE KWOO
+147E;AL # CANADIAN SYLLABICS KWA
+147F;AL # CANADIAN SYLLABICS WEST-CREE KWA
+1480;AL # CANADIAN SYLLABICS KWAA
+1481;AL # CANADIAN SYLLABICS WEST-CREE KWAA
+1482;AL # CANADIAN SYLLABICS NASKAPI KWAA
+1483;AL # CANADIAN SYLLABICS K
+1484;AL # CANADIAN SYLLABICS KW
+1485;AL # CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486;AL # CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487;AL # CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488;AL # CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489;AL # CANADIAN SYLLABICS CE
+148A;AL # CANADIAN SYLLABICS CAAI
+148B;AL # CANADIAN SYLLABICS CI
+148C;AL # CANADIAN SYLLABICS CII
+148D;AL # CANADIAN SYLLABICS CO
+148E;AL # CANADIAN SYLLABICS COO
+148F;AL # CANADIAN SYLLABICS Y-CREE COO
+1490;AL # CANADIAN SYLLABICS CA
+1491;AL # CANADIAN SYLLABICS CAA
+1492;AL # CANADIAN SYLLABICS CWE
+1493;AL # CANADIAN SYLLABICS WEST-CREE CWE
+1494;AL # CANADIAN SYLLABICS CWI
+1495;AL # CANADIAN SYLLABICS WEST-CREE CWI
+1496;AL # CANADIAN SYLLABICS CWII
+1497;AL # CANADIAN SYLLABICS WEST-CREE CWII
+1498;AL # CANADIAN SYLLABICS CWO
+1499;AL # CANADIAN SYLLABICS WEST-CREE CWO
+149A;AL # CANADIAN SYLLABICS CWOO
+149B;AL # CANADIAN SYLLABICS WEST-CREE CWOO
+149C;AL # CANADIAN SYLLABICS CWA
+149D;AL # CANADIAN SYLLABICS WEST-CREE CWA
+149E;AL # CANADIAN SYLLABICS CWAA
+149F;AL # CANADIAN SYLLABICS WEST-CREE CWAA
+14A0;AL # CANADIAN SYLLABICS NASKAPI CWAA
+14A1;AL # CANADIAN SYLLABICS C
+14A2;AL # CANADIAN SYLLABICS SAYISI TH
+14A3;AL # CANADIAN SYLLABICS ME
+14A4;AL # CANADIAN SYLLABICS MAAI
+14A5;AL # CANADIAN SYLLABICS MI
+14A6;AL # CANADIAN SYLLABICS MII
+14A7;AL # CANADIAN SYLLABICS MO
+14A8;AL # CANADIAN SYLLABICS MOO
+14A9;AL # CANADIAN SYLLABICS Y-CREE MOO
+14AA;AL # CANADIAN SYLLABICS MA
+14AB;AL # CANADIAN SYLLABICS MAA
+14AC;AL # CANADIAN SYLLABICS MWE
+14AD;AL # CANADIAN SYLLABICS WEST-CREE MWE
+14AE;AL # CANADIAN SYLLABICS MWI
+14AF;AL # CANADIAN SYLLABICS WEST-CREE MWI
+14B0;AL # CANADIAN SYLLABICS MWII
+14B1;AL # CANADIAN SYLLABICS WEST-CREE MWII
+14B2;AL # CANADIAN SYLLABICS MWO
+14B3;AL # CANADIAN SYLLABICS WEST-CREE MWO
+14B4;AL # CANADIAN SYLLABICS MWOO
+14B5;AL # CANADIAN SYLLABICS WEST-CREE MWOO
+14B6;AL # CANADIAN SYLLABICS MWA
+14B7;AL # CANADIAN SYLLABICS WEST-CREE MWA
+14B8;AL # CANADIAN SYLLABICS MWAA
+14B9;AL # CANADIAN SYLLABICS WEST-CREE MWAA
+14BA;AL # CANADIAN SYLLABICS NASKAPI MWAA
+14BB;AL # CANADIAN SYLLABICS M
+14BC;AL # CANADIAN SYLLABICS WEST-CREE M
+14BD;AL # CANADIAN SYLLABICS MH
+14BE;AL # CANADIAN SYLLABICS ATHAPASCAN M
+14BF;AL # CANADIAN SYLLABICS SAYISI M
+14C0;AL # CANADIAN SYLLABICS NE
+14C1;AL # CANADIAN SYLLABICS NAAI
+14C2;AL # CANADIAN SYLLABICS NI
+14C3;AL # CANADIAN SYLLABICS NII
+14C4;AL # CANADIAN SYLLABICS NO
+14C5;AL # CANADIAN SYLLABICS NOO
+14C6;AL # CANADIAN SYLLABICS Y-CREE NOO
+14C7;AL # CANADIAN SYLLABICS NA
+14C8;AL # CANADIAN SYLLABICS NAA
+14C9;AL # CANADIAN SYLLABICS NWE
+14CA;AL # CANADIAN SYLLABICS WEST-CREE NWE
+14CB;AL # CANADIAN SYLLABICS NWA
+14CC;AL # CANADIAN SYLLABICS WEST-CREE NWA
+14CD;AL # CANADIAN SYLLABICS NWAA
+14CE;AL # CANADIAN SYLLABICS WEST-CREE NWAA
+14CF;AL # CANADIAN SYLLABICS NASKAPI NWAA
+14D0;AL # CANADIAN SYLLABICS N
+14D1;AL # CANADIAN SYLLABICS CARRIER NG
+14D2;AL # CANADIAN SYLLABICS NH
+14D3;AL # CANADIAN SYLLABICS LE
+14D4;AL # CANADIAN SYLLABICS LAAI
+14D5;AL # CANADIAN SYLLABICS LI
+14D6;AL # CANADIAN SYLLABICS LII
+14D7;AL # CANADIAN SYLLABICS LO
+14D8;AL # CANADIAN SYLLABICS LOO
+14D9;AL # CANADIAN SYLLABICS Y-CREE LOO
+14DA;AL # CANADIAN SYLLABICS LA
+14DB;AL # CANADIAN SYLLABICS LAA
+14DC;AL # CANADIAN SYLLABICS LWE
+14DD;AL # CANADIAN SYLLABICS WEST-CREE LWE
+14DE;AL # CANADIAN SYLLABICS LWI
+14DF;AL # CANADIAN SYLLABICS WEST-CREE LWI
+14E0;AL # CANADIAN SYLLABICS LWII
+14E1;AL # CANADIAN SYLLABICS WEST-CREE LWII
+14E2;AL # CANADIAN SYLLABICS LWO
+14E3;AL # CANADIAN SYLLABICS WEST-CREE LWO
+14E4;AL # CANADIAN SYLLABICS LWOO
+14E5;AL # CANADIAN SYLLABICS WEST-CREE LWOO
+14E6;AL # CANADIAN SYLLABICS LWA
+14E7;AL # CANADIAN SYLLABICS WEST-CREE LWA
+14E8;AL # CANADIAN SYLLABICS LWAA
+14E9;AL # CANADIAN SYLLABICS WEST-CREE LWAA
+14EA;AL # CANADIAN SYLLABICS L
+14EB;AL # CANADIAN SYLLABICS WEST-CREE L
+14EC;AL # CANADIAN SYLLABICS MEDIAL L
+14ED;AL # CANADIAN SYLLABICS SE
+14EE;AL # CANADIAN SYLLABICS SAAI
+14EF;AL # CANADIAN SYLLABICS SI
+14F0;AL # CANADIAN SYLLABICS SII
+14F1;AL # CANADIAN SYLLABICS SO
+14F2;AL # CANADIAN SYLLABICS SOO
+14F3;AL # CANADIAN SYLLABICS Y-CREE SOO
+14F4;AL # CANADIAN SYLLABICS SA
+14F5;AL # CANADIAN SYLLABICS SAA
+14F6;AL # CANADIAN SYLLABICS SWE
+14F7;AL # CANADIAN SYLLABICS WEST-CREE SWE
+14F8;AL # CANADIAN SYLLABICS SWI
+14F9;AL # CANADIAN SYLLABICS WEST-CREE SWI
+14FA;AL # CANADIAN SYLLABICS SWII
+14FB;AL # CANADIAN SYLLABICS WEST-CREE SWII
+14FC;AL # CANADIAN SYLLABICS SWO
+14FD;AL # CANADIAN SYLLABICS WEST-CREE SWO
+14FE;AL # CANADIAN SYLLABICS SWOO
+14FF;AL # CANADIAN SYLLABICS WEST-CREE SWOO
+1500;AL # CANADIAN SYLLABICS SWA
+1501;AL # CANADIAN SYLLABICS WEST-CREE SWA
+1502;AL # CANADIAN SYLLABICS SWAA
+1503;AL # CANADIAN SYLLABICS WEST-CREE SWAA
+1504;AL # CANADIAN SYLLABICS NASKAPI SWAA
+1505;AL # CANADIAN SYLLABICS S
+1506;AL # CANADIAN SYLLABICS ATHAPASCAN S
+1507;AL # CANADIAN SYLLABICS SW
+1508;AL # CANADIAN SYLLABICS BLACKFOOT S
+1509;AL # CANADIAN SYLLABICS MOOSE-CREE SK
+150A;AL # CANADIAN SYLLABICS NASKAPI SKW
+150B;AL # CANADIAN SYLLABICS NASKAPI S-W
+150C;AL # CANADIAN SYLLABICS NASKAPI SPWA
+150D;AL # CANADIAN SYLLABICS NASKAPI STWA
+150E;AL # CANADIAN SYLLABICS NASKAPI SKWA
+150F;AL # CANADIAN SYLLABICS NASKAPI SCWA
+1510;AL # CANADIAN SYLLABICS SHE
+1511;AL # CANADIAN SYLLABICS SHI
+1512;AL # CANADIAN SYLLABICS SHII
+1513;AL # CANADIAN SYLLABICS SHO
+1514;AL # CANADIAN SYLLABICS SHOO
+1515;AL # CANADIAN SYLLABICS SHA
+1516;AL # CANADIAN SYLLABICS SHAA
+1517;AL # CANADIAN SYLLABICS SHWE
+1518;AL # CANADIAN SYLLABICS WEST-CREE SHWE
+1519;AL # CANADIAN SYLLABICS SHWI
+151A;AL # CANADIAN SYLLABICS WEST-CREE SHWI
+151B;AL # CANADIAN SYLLABICS SHWII
+151C;AL # CANADIAN SYLLABICS WEST-CREE SHWII
+151D;AL # CANADIAN SYLLABICS SHWO
+151E;AL # CANADIAN SYLLABICS WEST-CREE SHWO
+151F;AL # CANADIAN SYLLABICS SHWOO
+1520;AL # CANADIAN SYLLABICS WEST-CREE SHWOO
+1521;AL # CANADIAN SYLLABICS SHWA
+1522;AL # CANADIAN SYLLABICS WEST-CREE SHWA
+1523;AL # CANADIAN SYLLABICS SHWAA
+1524;AL # CANADIAN SYLLABICS WEST-CREE SHWAA
+1525;AL # CANADIAN SYLLABICS SH
+1526;AL # CANADIAN SYLLABICS YE
+1527;AL # CANADIAN SYLLABICS YAAI
+1528;AL # CANADIAN SYLLABICS YI
+1529;AL # CANADIAN SYLLABICS YII
+152A;AL # CANADIAN SYLLABICS YO
+152B;AL # CANADIAN SYLLABICS YOO
+152C;AL # CANADIAN SYLLABICS Y-CREE YOO
+152D;AL # CANADIAN SYLLABICS YA
+152E;AL # CANADIAN SYLLABICS YAA
+152F;AL # CANADIAN SYLLABICS YWE
+1530;AL # CANADIAN SYLLABICS WEST-CREE YWE
+1531;AL # CANADIAN SYLLABICS YWI
+1532;AL # CANADIAN SYLLABICS WEST-CREE YWI
+1533;AL # CANADIAN SYLLABICS YWII
+1534;AL # CANADIAN SYLLABICS WEST-CREE YWII
+1535;AL # CANADIAN SYLLABICS YWO
+1536;AL # CANADIAN SYLLABICS WEST-CREE YWO
+1537;AL # CANADIAN SYLLABICS YWOO
+1538;AL # CANADIAN SYLLABICS WEST-CREE YWOO
+1539;AL # CANADIAN SYLLABICS YWA
+153A;AL # CANADIAN SYLLABICS WEST-CREE YWA
+153B;AL # CANADIAN SYLLABICS YWAA
+153C;AL # CANADIAN SYLLABICS WEST-CREE YWAA
+153D;AL # CANADIAN SYLLABICS NASKAPI YWAA
+153E;AL # CANADIAN SYLLABICS Y
+153F;AL # CANADIAN SYLLABICS BIBLE-CREE Y
+1540;AL # CANADIAN SYLLABICS WEST-CREE Y
+1541;AL # CANADIAN SYLLABICS SAYISI YI
+1542;AL # CANADIAN SYLLABICS RE
+1543;AL # CANADIAN SYLLABICS R-CREE RE
+1544;AL # CANADIAN SYLLABICS WEST-CREE LE
+1545;AL # CANADIAN SYLLABICS RAAI
+1546;AL # CANADIAN SYLLABICS RI
+1547;AL # CANADIAN SYLLABICS RII
+1548;AL # CANADIAN SYLLABICS RO
+1549;AL # CANADIAN SYLLABICS ROO
+154A;AL # CANADIAN SYLLABICS WEST-CREE LO
+154B;AL # CANADIAN SYLLABICS RA
+154C;AL # CANADIAN SYLLABICS RAA
+154D;AL # CANADIAN SYLLABICS WEST-CREE LA
+154E;AL # CANADIAN SYLLABICS RWAA
+154F;AL # CANADIAN SYLLABICS WEST-CREE RWAA
+1550;AL # CANADIAN SYLLABICS R
+1551;AL # CANADIAN SYLLABICS WEST-CREE R
+1552;AL # CANADIAN SYLLABICS MEDIAL R
+1553;AL # CANADIAN SYLLABICS FE
+1554;AL # CANADIAN SYLLABICS FAAI
+1555;AL # CANADIAN SYLLABICS FI
+1556;AL # CANADIAN SYLLABICS FII
+1557;AL # CANADIAN SYLLABICS FO
+1558;AL # CANADIAN SYLLABICS FOO
+1559;AL # CANADIAN SYLLABICS FA
+155A;AL # CANADIAN SYLLABICS FAA
+155B;AL # CANADIAN SYLLABICS FWAA
+155C;AL # CANADIAN SYLLABICS WEST-CREE FWAA
+155D;AL # CANADIAN SYLLABICS F
+155E;AL # CANADIAN SYLLABICS THE
+155F;AL # CANADIAN SYLLABICS N-CREE THE
+1560;AL # CANADIAN SYLLABICS THI
+1561;AL # CANADIAN SYLLABICS N-CREE THI
+1562;AL # CANADIAN SYLLABICS THII
+1563;AL # CANADIAN SYLLABICS N-CREE THII
+1564;AL # CANADIAN SYLLABICS THO
+1565;AL # CANADIAN SYLLABICS THOO
+1566;AL # CANADIAN SYLLABICS THA
+1567;AL # CANADIAN SYLLABICS THAA
+1568;AL # CANADIAN SYLLABICS THWAA
+1569;AL # CANADIAN SYLLABICS WEST-CREE THWAA
+156A;AL # CANADIAN SYLLABICS TH
+156B;AL # CANADIAN SYLLABICS TTHE
+156C;AL # CANADIAN SYLLABICS TTHI
+156D;AL # CANADIAN SYLLABICS TTHO
+156E;AL # CANADIAN SYLLABICS TTHA
+156F;AL # CANADIAN SYLLABICS TTH
+1570;AL # CANADIAN SYLLABICS TYE
+1571;AL # CANADIAN SYLLABICS TYI
+1572;AL # CANADIAN SYLLABICS TYO
+1573;AL # CANADIAN SYLLABICS TYA
+1574;AL # CANADIAN SYLLABICS NUNAVIK HE
+1575;AL # CANADIAN SYLLABICS NUNAVIK HI
+1576;AL # CANADIAN SYLLABICS NUNAVIK HII
+1577;AL # CANADIAN SYLLABICS NUNAVIK HO
+1578;AL # CANADIAN SYLLABICS NUNAVIK HOO
+1579;AL # CANADIAN SYLLABICS NUNAVIK HA
+157A;AL # CANADIAN SYLLABICS NUNAVIK HAA
+157B;AL # CANADIAN SYLLABICS NUNAVIK H
+157C;AL # CANADIAN SYLLABICS NUNAVUT H
+157D;AL # CANADIAN SYLLABICS HK
+157E;AL # CANADIAN SYLLABICS QAAI
+157F;AL # CANADIAN SYLLABICS QI
+1580;AL # CANADIAN SYLLABICS QII
+1581;AL # CANADIAN SYLLABICS QO
+1582;AL # CANADIAN SYLLABICS QOO
+1583;AL # CANADIAN SYLLABICS QA
+1584;AL # CANADIAN SYLLABICS QAA
+1585;AL # CANADIAN SYLLABICS Q
+1586;AL # CANADIAN SYLLABICS TLHE
+1587;AL # CANADIAN SYLLABICS TLHI
+1588;AL # CANADIAN SYLLABICS TLHO
+1589;AL # CANADIAN SYLLABICS TLHA
+158A;AL # CANADIAN SYLLABICS WEST-CREE RE
+158B;AL # CANADIAN SYLLABICS WEST-CREE RI
+158C;AL # CANADIAN SYLLABICS WEST-CREE RO
+158D;AL # CANADIAN SYLLABICS WEST-CREE RA
+158E;AL # CANADIAN SYLLABICS NGAAI
+158F;AL # CANADIAN SYLLABICS NGI
+1590;AL # CANADIAN SYLLABICS NGII
+1591;AL # CANADIAN SYLLABICS NGO
+1592;AL # CANADIAN SYLLABICS NGOO
+1593;AL # CANADIAN SYLLABICS NGA
+1594;AL # CANADIAN SYLLABICS NGAA
+1595;AL # CANADIAN SYLLABICS NG
+1596;AL # CANADIAN SYLLABICS NNG
+1597;AL # CANADIAN SYLLABICS SAYISI SHE
+1598;AL # CANADIAN SYLLABICS SAYISI SHI
+1599;AL # CANADIAN SYLLABICS SAYISI SHO
+159A;AL # CANADIAN SYLLABICS SAYISI SHA
+159B;AL # CANADIAN SYLLABICS WOODS-CREE THE
+159C;AL # CANADIAN SYLLABICS WOODS-CREE THI
+159D;AL # CANADIAN SYLLABICS WOODS-CREE THO
+159E;AL # CANADIAN SYLLABICS WOODS-CREE THA
+159F;AL # CANADIAN SYLLABICS WOODS-CREE TH
+15A0;AL # CANADIAN SYLLABICS LHI
+15A1;AL # CANADIAN SYLLABICS LHII
+15A2;AL # CANADIAN SYLLABICS LHO
+15A3;AL # CANADIAN SYLLABICS LHOO
+15A4;AL # CANADIAN SYLLABICS LHA
+15A5;AL # CANADIAN SYLLABICS LHAA
+15A6;AL # CANADIAN SYLLABICS LH
+15A7;AL # CANADIAN SYLLABICS TH-CREE THE
+15A8;AL # CANADIAN SYLLABICS TH-CREE THI
+15A9;AL # CANADIAN SYLLABICS TH-CREE THII
+15AA;AL # CANADIAN SYLLABICS TH-CREE THO
+15AB;AL # CANADIAN SYLLABICS TH-CREE THOO
+15AC;AL # CANADIAN SYLLABICS TH-CREE THA
+15AD;AL # CANADIAN SYLLABICS TH-CREE THAA
+15AE;AL # CANADIAN SYLLABICS TH-CREE TH
+15AF;AL # CANADIAN SYLLABICS AIVILIK B
+15B0;AL # CANADIAN SYLLABICS BLACKFOOT E
+15B1;AL # CANADIAN SYLLABICS BLACKFOOT I
+15B2;AL # CANADIAN SYLLABICS BLACKFOOT O
+15B3;AL # CANADIAN SYLLABICS BLACKFOOT A
+15B4;AL # CANADIAN SYLLABICS BLACKFOOT WE
+15B5;AL # CANADIAN SYLLABICS BLACKFOOT WI
+15B6;AL # CANADIAN SYLLABICS BLACKFOOT WO
+15B7;AL # CANADIAN SYLLABICS BLACKFOOT WA
+15B8;AL # CANADIAN SYLLABICS BLACKFOOT NE
+15B9;AL # CANADIAN SYLLABICS BLACKFOOT NI
+15BA;AL # CANADIAN SYLLABICS BLACKFOOT NO
+15BB;AL # CANADIAN SYLLABICS BLACKFOOT NA
+15BC;AL # CANADIAN SYLLABICS BLACKFOOT KE
+15BD;AL # CANADIAN SYLLABICS BLACKFOOT KI
+15BE;AL # CANADIAN SYLLABICS BLACKFOOT KO
+15BF;AL # CANADIAN SYLLABICS BLACKFOOT KA
+15C0;AL # CANADIAN SYLLABICS SAYISI HE
+15C1;AL # CANADIAN SYLLABICS SAYISI HI
+15C2;AL # CANADIAN SYLLABICS SAYISI HO
+15C3;AL # CANADIAN SYLLABICS SAYISI HA
+15C4;AL # CANADIAN SYLLABICS CARRIER GHU
+15C5;AL # CANADIAN SYLLABICS CARRIER GHO
+15C6;AL # CANADIAN SYLLABICS CARRIER GHE
+15C7;AL # CANADIAN SYLLABICS CARRIER GHEE
+15C8;AL # CANADIAN SYLLABICS CARRIER GHI
+15C9;AL # CANADIAN SYLLABICS CARRIER GHA
+15CA;AL # CANADIAN SYLLABICS CARRIER RU
+15CB;AL # CANADIAN SYLLABICS CARRIER RO
+15CC;AL # CANADIAN SYLLABICS CARRIER RE
+15CD;AL # CANADIAN SYLLABICS CARRIER REE
+15CE;AL # CANADIAN SYLLABICS CARRIER RI
+15CF;AL # CANADIAN SYLLABICS CARRIER RA
+15D0;AL # CANADIAN SYLLABICS CARRIER WU
+15D1;AL # CANADIAN SYLLABICS CARRIER WO
+15D2;AL # CANADIAN SYLLABICS CARRIER WE
+15D3;AL # CANADIAN SYLLABICS CARRIER WEE
+15D4;AL # CANADIAN SYLLABICS CARRIER WI
+15D5;AL # CANADIAN SYLLABICS CARRIER WA
+15D6;AL # CANADIAN SYLLABICS CARRIER HWU
+15D7;AL # CANADIAN SYLLABICS CARRIER HWO
+15D8;AL # CANADIAN SYLLABICS CARRIER HWE
+15D9;AL # CANADIAN SYLLABICS CARRIER HWEE
+15DA;AL # CANADIAN SYLLABICS CARRIER HWI
+15DB;AL # CANADIAN SYLLABICS CARRIER HWA
+15DC;AL # CANADIAN SYLLABICS CARRIER THU
+15DD;AL # CANADIAN SYLLABICS CARRIER THO
+15DE;AL # CANADIAN SYLLABICS CARRIER THE
+15DF;AL # CANADIAN SYLLABICS CARRIER THEE
+15E0;AL # CANADIAN SYLLABICS CARRIER THI
+15E1;AL # CANADIAN SYLLABICS CARRIER THA
+15E2;AL # CANADIAN SYLLABICS CARRIER TTU
+15E3;AL # CANADIAN SYLLABICS CARRIER TTO
+15E4;AL # CANADIAN SYLLABICS CARRIER TTE
+15E5;AL # CANADIAN SYLLABICS CARRIER TTEE
+15E6;AL # CANADIAN SYLLABICS CARRIER TTI
+15E7;AL # CANADIAN SYLLABICS CARRIER TTA
+15E8;AL # CANADIAN SYLLABICS CARRIER PU
+15E9;AL # CANADIAN SYLLABICS CARRIER PO
+15EA;AL # CANADIAN SYLLABICS CARRIER PE
+15EB;AL # CANADIAN SYLLABICS CARRIER PEE
+15EC;AL # CANADIAN SYLLABICS CARRIER PI
+15ED;AL # CANADIAN SYLLABICS CARRIER PA
+15EE;AL # CANADIAN SYLLABICS CARRIER P
+15EF;AL # CANADIAN SYLLABICS CARRIER GU
+15F0;AL # CANADIAN SYLLABICS CARRIER GO
+15F1;AL # CANADIAN SYLLABICS CARRIER GE
+15F2;AL # CANADIAN SYLLABICS CARRIER GEE
+15F3;AL # CANADIAN SYLLABICS CARRIER GI
+15F4;AL # CANADIAN SYLLABICS CARRIER GA
+15F5;AL # CANADIAN SYLLABICS CARRIER KHU
+15F6;AL # CANADIAN SYLLABICS CARRIER KHO
+15F7;AL # CANADIAN SYLLABICS CARRIER KHE
+15F8;AL # CANADIAN SYLLABICS CARRIER KHEE
+15F9;AL # CANADIAN SYLLABICS CARRIER KHI
+15FA;AL # CANADIAN SYLLABICS CARRIER KHA
+15FB;AL # CANADIAN SYLLABICS CARRIER KKU
+15FC;AL # CANADIAN SYLLABICS CARRIER KKO
+15FD;AL # CANADIAN SYLLABICS CARRIER KKE
+15FE;AL # CANADIAN SYLLABICS CARRIER KKEE
+15FF;AL # CANADIAN SYLLABICS CARRIER KKI
+1600;AL # CANADIAN SYLLABICS CARRIER KKA
+1601;AL # CANADIAN SYLLABICS CARRIER KK
+1602;AL # CANADIAN SYLLABICS CARRIER NU
+1603;AL # CANADIAN SYLLABICS CARRIER NO
+1604;AL # CANADIAN SYLLABICS CARRIER NE
+1605;AL # CANADIAN SYLLABICS CARRIER NEE
+1606;AL # CANADIAN SYLLABICS CARRIER NI
+1607;AL # CANADIAN SYLLABICS CARRIER NA
+1608;AL # CANADIAN SYLLABICS CARRIER MU
+1609;AL # CANADIAN SYLLABICS CARRIER MO
+160A;AL # CANADIAN SYLLABICS CARRIER ME
+160B;AL # CANADIAN SYLLABICS CARRIER MEE
+160C;AL # CANADIAN SYLLABICS CARRIER MI
+160D;AL # CANADIAN SYLLABICS CARRIER MA
+160E;AL # CANADIAN SYLLABICS CARRIER YU
+160F;AL # CANADIAN SYLLABICS CARRIER YO
+1610;AL # CANADIAN SYLLABICS CARRIER YE
+1611;AL # CANADIAN SYLLABICS CARRIER YEE
+1612;AL # CANADIAN SYLLABICS CARRIER YI
+1613;AL # CANADIAN SYLLABICS CARRIER YA
+1614;AL # CANADIAN SYLLABICS CARRIER JU
+1615;AL # CANADIAN SYLLABICS SAYISI JU
+1616;AL # CANADIAN SYLLABICS CARRIER JO
+1617;AL # CANADIAN SYLLABICS CARRIER JE
+1618;AL # CANADIAN SYLLABICS CARRIER JEE
+1619;AL # CANADIAN SYLLABICS CARRIER JI
+161A;AL # CANADIAN SYLLABICS SAYISI JI
+161B;AL # CANADIAN SYLLABICS CARRIER JA
+161C;AL # CANADIAN SYLLABICS CARRIER JJU
+161D;AL # CANADIAN SYLLABICS CARRIER JJO
+161E;AL # CANADIAN SYLLABICS CARRIER JJE
+161F;AL # CANADIAN SYLLABICS CARRIER JJEE
+1620;AL # CANADIAN SYLLABICS CARRIER JJI
+1621;AL # CANADIAN SYLLABICS CARRIER JJA
+1622;AL # CANADIAN SYLLABICS CARRIER LU
+1623;AL # CANADIAN SYLLABICS CARRIER LO
+1624;AL # CANADIAN SYLLABICS CARRIER LE
+1625;AL # CANADIAN SYLLABICS CARRIER LEE
+1626;AL # CANADIAN SYLLABICS CARRIER LI
+1627;AL # CANADIAN SYLLABICS CARRIER LA
+1628;AL # CANADIAN SYLLABICS CARRIER DLU
+1629;AL # CANADIAN SYLLABICS CARRIER DLO
+162A;AL # CANADIAN SYLLABICS CARRIER DLE
+162B;AL # CANADIAN SYLLABICS CARRIER DLEE
+162C;AL # CANADIAN SYLLABICS CARRIER DLI
+162D;AL # CANADIAN SYLLABICS CARRIER DLA
+162E;AL # CANADIAN SYLLABICS CARRIER LHU
+162F;AL # CANADIAN SYLLABICS CARRIER LHO
+1630;AL # CANADIAN SYLLABICS CARRIER LHE
+1631;AL # CANADIAN SYLLABICS CARRIER LHEE
+1632;AL # CANADIAN SYLLABICS CARRIER LHI
+1633;AL # CANADIAN SYLLABICS CARRIER LHA
+1634;AL # CANADIAN SYLLABICS CARRIER TLHU
+1635;AL # CANADIAN SYLLABICS CARRIER TLHO
+1636;AL # CANADIAN SYLLABICS CARRIER TLHE
+1637;AL # CANADIAN SYLLABICS CARRIER TLHEE
+1638;AL # CANADIAN SYLLABICS CARRIER TLHI
+1639;AL # CANADIAN SYLLABICS CARRIER TLHA
+163A;AL # CANADIAN SYLLABICS CARRIER TLU
+163B;AL # CANADIAN SYLLABICS CARRIER TLO
+163C;AL # CANADIAN SYLLABICS CARRIER TLE
+163D;AL # CANADIAN SYLLABICS CARRIER TLEE
+163E;AL # CANADIAN SYLLABICS CARRIER TLI
+163F;AL # CANADIAN SYLLABICS CARRIER TLA
+1640;AL # CANADIAN SYLLABICS CARRIER ZU
+1641;AL # CANADIAN SYLLABICS CARRIER ZO
+1642;AL # CANADIAN SYLLABICS CARRIER ZE
+1643;AL # CANADIAN SYLLABICS CARRIER ZEE
+1644;AL # CANADIAN SYLLABICS CARRIER ZI
+1645;AL # CANADIAN SYLLABICS CARRIER ZA
+1646;AL # CANADIAN SYLLABICS CARRIER Z
+1647;AL # CANADIAN SYLLABICS CARRIER INITIAL Z
+1648;AL # CANADIAN SYLLABICS CARRIER DZU
+1649;AL # CANADIAN SYLLABICS CARRIER DZO
+164A;AL # CANADIAN SYLLABICS CARRIER DZE
+164B;AL # CANADIAN SYLLABICS CARRIER DZEE
+164C;AL # CANADIAN SYLLABICS CARRIER DZI
+164D;AL # CANADIAN SYLLABICS CARRIER DZA
+164E;AL # CANADIAN SYLLABICS CARRIER SU
+164F;AL # CANADIAN SYLLABICS CARRIER SO
+1650;AL # CANADIAN SYLLABICS CARRIER SE
+1651;AL # CANADIAN SYLLABICS CARRIER SEE
+1652;AL # CANADIAN SYLLABICS CARRIER SI
+1653;AL # CANADIAN SYLLABICS CARRIER SA
+1654;AL # CANADIAN SYLLABICS CARRIER SHU
+1655;AL # CANADIAN SYLLABICS CARRIER SHO
+1656;AL # CANADIAN SYLLABICS CARRIER SHE
+1657;AL # CANADIAN SYLLABICS CARRIER SHEE
+1658;AL # CANADIAN SYLLABICS CARRIER SHI
+1659;AL # CANADIAN SYLLABICS CARRIER SHA
+165A;AL # CANADIAN SYLLABICS CARRIER SH
+165B;AL # CANADIAN SYLLABICS CARRIER TSU
+165C;AL # CANADIAN SYLLABICS CARRIER TSO
+165D;AL # CANADIAN SYLLABICS CARRIER TSE
+165E;AL # CANADIAN SYLLABICS CARRIER TSEE
+165F;AL # CANADIAN SYLLABICS CARRIER TSI
+1660;AL # CANADIAN SYLLABICS CARRIER TSA
+1661;AL # CANADIAN SYLLABICS CARRIER CHU
+1662;AL # CANADIAN SYLLABICS CARRIER CHO
+1663;AL # CANADIAN SYLLABICS CARRIER CHE
+1664;AL # CANADIAN SYLLABICS CARRIER CHEE
+1665;AL # CANADIAN SYLLABICS CARRIER CHI
+1666;AL # CANADIAN SYLLABICS CARRIER CHA
+1667;AL # CANADIAN SYLLABICS CARRIER TTSU
+1668;AL # CANADIAN SYLLABICS CARRIER TTSO
+1669;AL # CANADIAN SYLLABICS CARRIER TTSE
+166A;AL # CANADIAN SYLLABICS CARRIER TTSEE
+166B;AL # CANADIAN SYLLABICS CARRIER TTSI
+166C;AL # CANADIAN SYLLABICS CARRIER TTSA
+166D;AL # CANADIAN SYLLABICS CHI SIGN
+166E;AL # CANADIAN SYLLABICS FULL STOP
+166F;AL # CANADIAN SYLLABICS QAI
+1670;AL # CANADIAN SYLLABICS NGAI
+1671;AL # CANADIAN SYLLABICS NNGI
+1672;AL # CANADIAN SYLLABICS NNGII
+1673;AL # CANADIAN SYLLABICS NNGO
+1674;AL # CANADIAN SYLLABICS NNGOO
+1675;AL # CANADIAN SYLLABICS NNGA
+1676;AL # CANADIAN SYLLABICS NNGAA
+1680;BA # OGHAM SPACE MARK
+1681;AL # OGHAM LETTER BEITH
+1682;AL # OGHAM LETTER LUIS
+1683;AL # OGHAM LETTER FEARN
+1684;AL # OGHAM LETTER SAIL
+1685;AL # OGHAM LETTER NION
+1686;AL # OGHAM LETTER UATH
+1687;AL # OGHAM LETTER DAIR
+1688;AL # OGHAM LETTER TINNE
+1689;AL # OGHAM LETTER COLL
+168A;AL # OGHAM LETTER CEIRT
+168B;AL # OGHAM LETTER MUIN
+168C;AL # OGHAM LETTER GORT
+168D;AL # OGHAM LETTER NGEADAL
+168E;AL # OGHAM LETTER STRAIF
+168F;AL # OGHAM LETTER RUIS
+1690;AL # OGHAM LETTER AILM
+1691;AL # OGHAM LETTER ONN
+1692;AL # OGHAM LETTER UR
+1693;AL # OGHAM LETTER EADHADH
+1694;AL # OGHAM LETTER IODHADH
+1695;AL # OGHAM LETTER EABHADH
+1696;AL # OGHAM LETTER OR
+1697;AL # OGHAM LETTER UILLEANN
+1698;AL # OGHAM LETTER IFIN
+1699;AL # OGHAM LETTER EAMHANCHOLL
+169A;AL # OGHAM LETTER PEITH
+169B;OP # OGHAM FEATHER MARK
+169C;CL # OGHAM REVERSED FEATHER MARK
+16A0;AL # RUNIC LETTER FEHU FEOH FE F
+16A1;AL # RUNIC LETTER V
+16A2;AL # RUNIC LETTER URUZ UR U
+16A3;AL # RUNIC LETTER YR
+16A4;AL # RUNIC LETTER Y
+16A5;AL # RUNIC LETTER W
+16A6;AL # RUNIC LETTER THURISAZ THURS THORN
+16A7;AL # RUNIC LETTER ETH
+16A8;AL # RUNIC LETTER ANSUZ A
+16A9;AL # RUNIC LETTER OS O
+16AA;AL # RUNIC LETTER AC A
+16AB;AL # RUNIC LETTER AESC
+16AC;AL # RUNIC LETTER LONG-BRANCH-OSS O
+16AD;AL # RUNIC LETTER SHORT-TWIG-OSS O
+16AE;AL # RUNIC LETTER O
+16AF;AL # RUNIC LETTER OE
+16B0;AL # RUNIC LETTER ON
+16B1;AL # RUNIC LETTER RAIDO RAD REID R
+16B2;AL # RUNIC LETTER KAUNA
+16B3;AL # RUNIC LETTER CEN
+16B4;AL # RUNIC LETTER KAUN K
+16B5;AL # RUNIC LETTER G
+16B6;AL # RUNIC LETTER ENG
+16B7;AL # RUNIC LETTER GEBO GYFU G
+16B8;AL # RUNIC LETTER GAR
+16B9;AL # RUNIC LETTER WUNJO WYNN W
+16BA;AL # RUNIC LETTER HAGLAZ H
+16BB;AL # RUNIC LETTER HAEGL H
+16BC;AL # RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD;AL # RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE;AL # RUNIC LETTER NAUDIZ NYD NAUD N
+16BF;AL # RUNIC LETTER SHORT-TWIG-NAUD N
+16C0;AL # RUNIC LETTER DOTTED-N
+16C1;AL # RUNIC LETTER ISAZ IS ISS I
+16C2;AL # RUNIC LETTER E
+16C3;AL # RUNIC LETTER JERAN J
+16C4;AL # RUNIC LETTER GER
+16C5;AL # RUNIC LETTER LONG-BRANCH-AR AE
+16C6;AL # RUNIC LETTER SHORT-TWIG-AR A
+16C7;AL # RUNIC LETTER IWAZ EOH
+16C8;AL # RUNIC LETTER PERTHO PEORTH P
+16C9;AL # RUNIC LETTER ALGIZ EOLHX
+16CA;AL # RUNIC LETTER SOWILO S
+16CB;AL # RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC;AL # RUNIC LETTER SHORT-TWIG-SOL S
+16CD;AL # RUNIC LETTER C
+16CE;AL # RUNIC LETTER Z
+16CF;AL # RUNIC LETTER TIWAZ TIR TYR T
+16D0;AL # RUNIC LETTER SHORT-TWIG-TYR T
+16D1;AL # RUNIC LETTER D
+16D2;AL # RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3;AL # RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4;AL # RUNIC LETTER DOTTED-P
+16D5;AL # RUNIC LETTER OPEN-P
+16D6;AL # RUNIC LETTER EHWAZ EH E
+16D7;AL # RUNIC LETTER MANNAZ MAN M
+16D8;AL # RUNIC LETTER LONG-BRANCH-MADR M
+16D9;AL # RUNIC LETTER SHORT-TWIG-MADR M
+16DA;AL # RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB;AL # RUNIC LETTER DOTTED-L
+16DC;AL # RUNIC LETTER INGWAZ
+16DD;AL # RUNIC LETTER ING
+16DE;AL # RUNIC LETTER DAGAZ DAEG D
+16DF;AL # RUNIC LETTER OTHALAN ETHEL O
+16E0;AL # RUNIC LETTER EAR
+16E1;AL # RUNIC LETTER IOR
+16E2;AL # RUNIC LETTER CWEORTH
+16E3;AL # RUNIC LETTER CALC
+16E4;AL # RUNIC LETTER CEALC
+16E5;AL # RUNIC LETTER STAN
+16E6;AL # RUNIC LETTER LONG-BRANCH-YR
+16E7;AL # RUNIC LETTER SHORT-TWIG-YR
+16E8;AL # RUNIC LETTER ICELANDIC-YR
+16E9;AL # RUNIC LETTER Q
+16EA;AL # RUNIC LETTER X
+16EB;BA # RUNIC SINGLE PUNCTUATION
+16EC;BA # RUNIC MULTIPLE PUNCTUATION
+16ED;BA # RUNIC CROSS PUNCTUATION
+16EE;AL # RUNIC ARLAUG SYMBOL
+16EF;AL # RUNIC TVIMADUR SYMBOL
+16F0;AL # RUNIC BELGTHOR SYMBOL
+1700;AL # TAGALOG LETTER A
+1701;AL # TAGALOG LETTER I
+1702;AL # TAGALOG LETTER U
+1703;AL # TAGALOG LETTER KA
+1704;AL # TAGALOG LETTER GA
+1705;AL # TAGALOG LETTER NGA
+1706;AL # TAGALOG LETTER TA
+1707;AL # TAGALOG LETTER DA
+1708;AL # TAGALOG LETTER NA
+1709;AL # TAGALOG LETTER PA
+170A;AL # TAGALOG LETTER BA
+170B;AL # TAGALOG LETTER MA
+170C;AL # TAGALOG LETTER YA
+170E;AL # TAGALOG LETTER LA
+170F;AL # TAGALOG LETTER WA
+1710;AL # TAGALOG LETTER SA
+1711;AL # TAGALOG LETTER HA
+1712;CM # TAGALOG VOWEL SIGN I
+1713;CM # TAGALOG VOWEL SIGN U
+1714;CM # TAGALOG SIGN VIRAMA
+1720;AL # HANUNOO LETTER A
+1721;AL # HANUNOO LETTER I
+1722;AL # HANUNOO LETTER U
+1723;AL # HANUNOO LETTER KA
+1724;AL # HANUNOO LETTER GA
+1725;AL # HANUNOO LETTER NGA
+1726;AL # HANUNOO LETTER TA
+1727;AL # HANUNOO LETTER DA
+1728;AL # HANUNOO LETTER NA
+1729;AL # HANUNOO LETTER PA
+172A;AL # HANUNOO LETTER BA
+172B;AL # HANUNOO LETTER MA
+172C;AL # HANUNOO LETTER YA
+172D;AL # HANUNOO LETTER RA
+172E;AL # HANUNOO LETTER LA
+172F;AL # HANUNOO LETTER WA
+1730;AL # HANUNOO LETTER SA
+1731;AL # HANUNOO LETTER HA
+1732;CM # HANUNOO VOWEL SIGN I
+1733;CM # HANUNOO VOWEL SIGN U
+1734;CM # HANUNOO SIGN PAMUDPOD
+1735;AL # PHILIPPINE SINGLE PUNCTUATION
+1736;AL # PHILIPPINE DOUBLE PUNCTUATION
+1740;AL # BUHID LETTER A
+1741;AL # BUHID LETTER I
+1742;AL # BUHID LETTER U
+1743;AL # BUHID LETTER KA
+1744;AL # BUHID LETTER GA
+1745;AL # BUHID LETTER NGA
+1746;AL # BUHID LETTER TA
+1747;AL # BUHID LETTER DA
+1748;AL # BUHID LETTER NA
+1749;AL # BUHID LETTER PA
+174A;AL # BUHID LETTER BA
+174B;AL # BUHID LETTER MA
+174C;AL # BUHID LETTER YA
+174D;AL # BUHID LETTER RA
+174E;AL # BUHID LETTER LA
+174F;AL # BUHID LETTER WA
+1750;AL # BUHID LETTER SA
+1751;AL # BUHID LETTER HA
+1752;CM # BUHID VOWEL SIGN I
+1753;CM # BUHID VOWEL SIGN U
+1760;AL # TAGBANWA LETTER A
+1761;AL # TAGBANWA LETTER I
+1762;AL # TAGBANWA LETTER U
+1763;AL # TAGBANWA LETTER KA
+1764;AL # TAGBANWA LETTER GA
+1765;AL # TAGBANWA LETTER NGA
+1766;AL # TAGBANWA LETTER TA
+1767;AL # TAGBANWA LETTER DA
+1768;AL # TAGBANWA LETTER NA
+1769;AL # TAGBANWA LETTER PA
+176A;AL # TAGBANWA LETTER BA
+176B;AL # TAGBANWA LETTER MA
+176C;AL # TAGBANWA LETTER YA
+176E;AL # TAGBANWA LETTER LA
+176F;AL # TAGBANWA LETTER WA
+1770;AL # TAGBANWA LETTER SA
+1772;CM # TAGBANWA VOWEL SIGN I
+1773;CM # TAGBANWA VOWEL SIGN U
+1780;SA # KHMER LETTER KA
+1781;SA # KHMER LETTER KHA
+1782;SA # KHMER LETTER KO
+1783;SA # KHMER LETTER KHO
+1784;SA # KHMER LETTER NGO
+1785;SA # KHMER LETTER CA
+1786;SA # KHMER LETTER CHA
+1787;SA # KHMER LETTER CO
+1788;SA # KHMER LETTER CHO
+1789;SA # KHMER LETTER NYO
+178A;SA # KHMER LETTER DA
+178B;SA # KHMER LETTER TTHA
+178C;SA # KHMER LETTER DO
+178D;SA # KHMER LETTER TTHO
+178E;SA # KHMER LETTER NNO
+178F;SA # KHMER LETTER TA
+1790;SA # KHMER LETTER THA
+1791;SA # KHMER LETTER TO
+1792;SA # KHMER LETTER THO
+1793;SA # KHMER LETTER NO
+1794;SA # KHMER LETTER BA
+1795;SA # KHMER LETTER PHA
+1796;SA # KHMER LETTER PO
+1797;SA # KHMER LETTER PHO
+1798;SA # KHMER LETTER MO
+1799;SA # KHMER LETTER YO
+179A;SA # KHMER LETTER RO
+179B;SA # KHMER LETTER LO
+179C;SA # KHMER LETTER VO
+179D;SA # KHMER LETTER SHA
+179E;SA # KHMER LETTER SSO
+179F;SA # KHMER LETTER SA
+17A0;SA # KHMER LETTER HA
+17A1;SA # KHMER LETTER LA
+17A2;SA # KHMER LETTER QA
+17A3;SA # KHMER INDEPENDENT VOWEL QAQ
+17A4;SA # KHMER INDEPENDENT VOWEL QAA
+17A5;SA # KHMER INDEPENDENT VOWEL QI
+17A6;SA # KHMER INDEPENDENT VOWEL QII
+17A7;SA # KHMER INDEPENDENT VOWEL QU
+17A8;SA # KHMER INDEPENDENT VOWEL QUK
+17A9;SA # KHMER INDEPENDENT VOWEL QUU
+17AA;SA # KHMER INDEPENDENT VOWEL QUUV
+17AB;SA # KHMER INDEPENDENT VOWEL RY
+17AC;SA # KHMER INDEPENDENT VOWEL RYY
+17AD;SA # KHMER INDEPENDENT VOWEL LY
+17AE;SA # KHMER INDEPENDENT VOWEL LYY
+17AF;SA # KHMER INDEPENDENT VOWEL QE
+17B0;SA # KHMER INDEPENDENT VOWEL QAI
+17B1;SA # KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2;SA # KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3;SA # KHMER INDEPENDENT VOWEL QAU
+17B4;SA # KHMER VOWEL INHERENT AQ
+17B5;SA # KHMER VOWEL INHERENT AA
+17B6;CM # KHMER VOWEL SIGN AA
+17B7;CM # KHMER VOWEL SIGN I
+17B8;CM # KHMER VOWEL SIGN II
+17B9;CM # KHMER VOWEL SIGN Y
+17BA;CM # KHMER VOWEL SIGN YY
+17BB;CM # KHMER VOWEL SIGN U
+17BC;CM # KHMER VOWEL SIGN UU
+17BD;CM # KHMER VOWEL SIGN UA
+17BE;CM # KHMER VOWEL SIGN OE
+17BF;CM # KHMER VOWEL SIGN YA
+17C0;CM # KHMER VOWEL SIGN IE
+17C1;CM # KHMER VOWEL SIGN E
+17C2;CM # KHMER VOWEL SIGN AE
+17C3;CM # KHMER VOWEL SIGN AI
+17C4;CM # KHMER VOWEL SIGN OO
+17C5;CM # KHMER VOWEL SIGN AU
+17C6;CM # KHMER SIGN NIKAHIT
+17C7;CM # KHMER SIGN REAHMUK
+17C8;CM # KHMER SIGN YUUKALEAPINTU
+17C9;CM # KHMER SIGN MUUSIKATOAN
+17CA;CM # KHMER SIGN TRIISAP
+17CB;CM # KHMER SIGN BANTOC
+17CC;CM # KHMER SIGN ROBAT
+17CD;CM # KHMER SIGN TOANDAKHIAT
+17CE;CM # KHMER SIGN KAKABAT
+17CF;CM # KHMER SIGN AHSDA
+17D0;CM # KHMER SIGN SAMYOK SANNYA
+17D1;CM # KHMER SIGN VIRIAM
+17D2;CM # KHMER SIGN COENG
+17D3;CM # KHMER SIGN BATHAMASAT
+17D4;BA # KHMER SIGN KHAN
+17D5;BA # KHMER SIGN BARIYOOSAN
+17D6;NS # KHMER SIGN CAMNUC PII KUUH
+17D7;NS # KHMER SIGN LEK TOO
+17D8;BA # KHMER SIGN BEYYAL
+17D9;NS # KHMER SIGN PHNAEK MUAN
+17DA;BA # KHMER SIGN KOOMUUT
+17DB;PR # KHMER CURRENCY SYMBOL RIEL
+17DC;AL # KHMER SIGN AVAKRAHASANYA
+17DD;CM # KHMER SIGN ATTHACAN
+17E0;NU # KHMER DIGIT ZERO
+17E1;NU # KHMER DIGIT ONE
+17E2;NU # KHMER DIGIT TWO
+17E3;NU # KHMER DIGIT THREE
+17E4;NU # KHMER DIGIT FOUR
+17E5;NU # KHMER DIGIT FIVE
+17E6;NU # KHMER DIGIT SIX
+17E7;NU # KHMER DIGIT SEVEN
+17E8;NU # KHMER DIGIT EIGHT
+17E9;NU # KHMER DIGIT NINE
+17F0;AL # KHMER SYMBOL LEK ATTAK SON
+17F1;AL # KHMER SYMBOL LEK ATTAK MUOY
+17F2;AL # KHMER SYMBOL LEK ATTAK PII
+17F3;AL # KHMER SYMBOL LEK ATTAK BEI
+17F4;AL # KHMER SYMBOL LEK ATTAK BUON
+17F5;AL # KHMER SYMBOL LEK ATTAK PRAM
+17F6;AL # KHMER SYMBOL LEK ATTAK PRAM-MUOY
+17F7;AL # KHMER SYMBOL LEK ATTAK PRAM-PII
+17F8;AL # KHMER SYMBOL LEK ATTAK PRAM-BEI
+17F9;AL # KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800;AL # MONGOLIAN BIRGA
+1801;AL # MONGOLIAN ELLIPSIS
+1802;BA # MONGOLIAN COMMA
+1803;BA # MONGOLIAN FULL STOP
+1804;BA # MONGOLIAN COLON
+1805;BA # MONGOLIAN FOUR DOTS
+1806;BB # MONGOLIAN TODO SOFT HYPHEN
+1807;AL # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808;BA # MONGOLIAN MANCHU COMMA
+1809;BA # MONGOLIAN MANCHU FULL STOP
+180A;AL # MONGOLIAN NIRUGU
+180B;CM # MONGOLIAN FREE VARIATION SELECTOR ONE
+180C;CM # MONGOLIAN FREE VARIATION SELECTOR TWO
+180D;CM # MONGOLIAN FREE VARIATION SELECTOR THREE
+180E;GL # MONGOLIAN VOWEL SEPARATOR
+1810;NU # MONGOLIAN DIGIT ZERO
+1811;NU # MONGOLIAN DIGIT ONE
+1812;NU # MONGOLIAN DIGIT TWO
+1813;NU # MONGOLIAN DIGIT THREE
+1814;NU # MONGOLIAN DIGIT FOUR
+1815;NU # MONGOLIAN DIGIT FIVE
+1816;NU # MONGOLIAN DIGIT SIX
+1817;NU # MONGOLIAN DIGIT SEVEN
+1818;NU # MONGOLIAN DIGIT EIGHT
+1819;NU # MONGOLIAN DIGIT NINE
+1820;AL # MONGOLIAN LETTER A
+1821;AL # MONGOLIAN LETTER E
+1822;AL # MONGOLIAN LETTER I
+1823;AL # MONGOLIAN LETTER O
+1824;AL # MONGOLIAN LETTER U
+1825;AL # MONGOLIAN LETTER OE
+1826;AL # MONGOLIAN LETTER UE
+1827;AL # MONGOLIAN LETTER EE
+1828;AL # MONGOLIAN LETTER NA
+1829;AL # MONGOLIAN LETTER ANG
+182A;AL # MONGOLIAN LETTER BA
+182B;AL # MONGOLIAN LETTER PA
+182C;AL # MONGOLIAN LETTER QA
+182D;AL # MONGOLIAN LETTER GA
+182E;AL # MONGOLIAN LETTER MA
+182F;AL # MONGOLIAN LETTER LA
+1830;AL # MONGOLIAN LETTER SA
+1831;AL # MONGOLIAN LETTER SHA
+1832;AL # MONGOLIAN LETTER TA
+1833;AL # MONGOLIAN LETTER DA
+1834;AL # MONGOLIAN LETTER CHA
+1835;AL # MONGOLIAN LETTER JA
+1836;AL # MONGOLIAN LETTER YA
+1837;AL # MONGOLIAN LETTER RA
+1838;AL # MONGOLIAN LETTER WA
+1839;AL # MONGOLIAN LETTER FA
+183A;AL # MONGOLIAN LETTER KA
+183B;AL # MONGOLIAN LETTER KHA
+183C;AL # MONGOLIAN LETTER TSA
+183D;AL # MONGOLIAN LETTER ZA
+183E;AL # MONGOLIAN LETTER HAA
+183F;AL # MONGOLIAN LETTER ZRA
+1840;AL # MONGOLIAN LETTER LHA
+1841;AL # MONGOLIAN LETTER ZHI
+1842;AL # MONGOLIAN LETTER CHI
+1843;AL # MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844;AL # MONGOLIAN LETTER TODO E
+1845;AL # MONGOLIAN LETTER TODO I
+1846;AL # MONGOLIAN LETTER TODO O
+1847;AL # MONGOLIAN LETTER TODO U
+1848;AL # MONGOLIAN LETTER TODO OE
+1849;AL # MONGOLIAN LETTER TODO UE
+184A;AL # MONGOLIAN LETTER TODO ANG
+184B;AL # MONGOLIAN LETTER TODO BA
+184C;AL # MONGOLIAN LETTER TODO PA
+184D;AL # MONGOLIAN LETTER TODO QA
+184E;AL # MONGOLIAN LETTER TODO GA
+184F;AL # MONGOLIAN LETTER TODO MA
+1850;AL # MONGOLIAN LETTER TODO TA
+1851;AL # MONGOLIAN LETTER TODO DA
+1852;AL # MONGOLIAN LETTER TODO CHA
+1853;AL # MONGOLIAN LETTER TODO JA
+1854;AL # MONGOLIAN LETTER TODO TSA
+1855;AL # MONGOLIAN LETTER TODO YA
+1856;AL # MONGOLIAN LETTER TODO WA
+1857;AL # MONGOLIAN LETTER TODO KA
+1858;AL # MONGOLIAN LETTER TODO GAA
+1859;AL # MONGOLIAN LETTER TODO HAA
+185A;AL # MONGOLIAN LETTER TODO JIA
+185B;AL # MONGOLIAN LETTER TODO NIA
+185C;AL # MONGOLIAN LETTER TODO DZA
+185D;AL # MONGOLIAN LETTER SIBE E
+185E;AL # MONGOLIAN LETTER SIBE I
+185F;AL # MONGOLIAN LETTER SIBE IY
+1860;AL # MONGOLIAN LETTER SIBE UE
+1861;AL # MONGOLIAN LETTER SIBE U
+1862;AL # MONGOLIAN LETTER SIBE ANG
+1863;AL # MONGOLIAN LETTER SIBE KA
+1864;AL # MONGOLIAN LETTER SIBE GA
+1865;AL # MONGOLIAN LETTER SIBE HA
+1866;AL # MONGOLIAN LETTER SIBE PA
+1867;AL # MONGOLIAN LETTER SIBE SHA
+1868;AL # MONGOLIAN LETTER SIBE TA
+1869;AL # MONGOLIAN LETTER SIBE DA
+186A;AL # MONGOLIAN LETTER SIBE JA
+186B;AL # MONGOLIAN LETTER SIBE FA
+186C;AL # MONGOLIAN LETTER SIBE GAA
+186D;AL # MONGOLIAN LETTER SIBE HAA
+186E;AL # MONGOLIAN LETTER SIBE TSA
+186F;AL # MONGOLIAN LETTER SIBE ZA
+1870;AL # MONGOLIAN LETTER SIBE RAA
+1871;AL # MONGOLIAN LETTER SIBE CHA
+1872;AL # MONGOLIAN LETTER SIBE ZHA
+1873;AL # MONGOLIAN LETTER MANCHU I
+1874;AL # MONGOLIAN LETTER MANCHU KA
+1875;AL # MONGOLIAN LETTER MANCHU RA
+1876;AL # MONGOLIAN LETTER MANCHU FA
+1877;AL # MONGOLIAN LETTER MANCHU ZHA
+1880;AL # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881;AL # MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882;AL # MONGOLIAN LETTER ALI GALI DAMARU
+1883;AL # MONGOLIAN LETTER ALI GALI UBADAMA
+1884;AL # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885;AL # MONGOLIAN LETTER ALI GALI BALUDA
+1886;AL # MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887;AL # MONGOLIAN LETTER ALI GALI A
+1888;AL # MONGOLIAN LETTER ALI GALI I
+1889;AL # MONGOLIAN LETTER ALI GALI KA
+188A;AL # MONGOLIAN LETTER ALI GALI NGA
+188B;AL # MONGOLIAN LETTER ALI GALI CA
+188C;AL # MONGOLIAN LETTER ALI GALI TTA
+188D;AL # MONGOLIAN LETTER ALI GALI TTHA
+188E;AL # MONGOLIAN LETTER ALI GALI DDA
+188F;AL # MONGOLIAN LETTER ALI GALI NNA
+1890;AL # MONGOLIAN LETTER ALI GALI TA
+1891;AL # MONGOLIAN LETTER ALI GALI DA
+1892;AL # MONGOLIAN LETTER ALI GALI PA
+1893;AL # MONGOLIAN LETTER ALI GALI PHA
+1894;AL # MONGOLIAN LETTER ALI GALI SSA
+1895;AL # MONGOLIAN LETTER ALI GALI ZHA
+1896;AL # MONGOLIAN LETTER ALI GALI ZA
+1897;AL # MONGOLIAN LETTER ALI GALI AH
+1898;AL # MONGOLIAN LETTER TODO ALI GALI TA
+1899;AL # MONGOLIAN LETTER TODO ALI GALI ZHA
+189A;AL # MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B;AL # MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C;AL # MONGOLIAN LETTER MANCHU ALI GALI CA
+189D;AL # MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E;AL # MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F;AL # MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0;AL # MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1;AL # MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2;AL # MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3;AL # MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4;AL # MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5;AL # MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6;AL # MONGOLIAN LETTER ALI GALI HALF U
+18A7;AL # MONGOLIAN LETTER ALI GALI HALF YA
+18A8;AL # MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9;CM # MONGOLIAN LETTER ALI GALI DAGALGA
+1900;AL # LIMBU VOWEL-CARRIER LETTER
+1901;AL # LIMBU LETTER KA
+1902;AL # LIMBU LETTER KHA
+1903;AL # LIMBU LETTER GA
+1904;AL # LIMBU LETTER GHA
+1905;AL # LIMBU LETTER NGA
+1906;AL # LIMBU LETTER CA
+1907;AL # LIMBU LETTER CHA
+1908;AL # LIMBU LETTER JA
+1909;AL # LIMBU LETTER JHA
+190A;AL # LIMBU LETTER YAN
+190B;AL # LIMBU LETTER TA
+190C;AL # LIMBU LETTER THA
+190D;AL # LIMBU LETTER DA
+190E;AL # LIMBU LETTER DHA
+190F;AL # LIMBU LETTER NA
+1910;AL # LIMBU LETTER PA
+1911;AL # LIMBU LETTER PHA
+1912;AL # LIMBU LETTER BA
+1913;AL # LIMBU LETTER BHA
+1914;AL # LIMBU LETTER MA
+1915;AL # LIMBU LETTER YA
+1916;AL # LIMBU LETTER RA
+1917;AL # LIMBU LETTER LA
+1918;AL # LIMBU LETTER WA
+1919;AL # LIMBU LETTER SHA
+191A;AL # LIMBU LETTER SSA
+191B;AL # LIMBU LETTER SA
+191C;AL # LIMBU LETTER HA
+1920;CM # LIMBU VOWEL SIGN A
+1921;CM # LIMBU VOWEL SIGN I
+1922;CM # LIMBU VOWEL SIGN U
+1923;CM # LIMBU VOWEL SIGN EE
+1924;CM # LIMBU VOWEL SIGN AI
+1925;CM # LIMBU VOWEL SIGN OO
+1926;CM # LIMBU VOWEL SIGN AU
+1927;CM # LIMBU VOWEL SIGN E
+1928;CM # LIMBU VOWEL SIGN O
+1929;CM # LIMBU SUBJOINED LETTER YA
+192A;CM # LIMBU SUBJOINED LETTER RA
+192B;CM # LIMBU SUBJOINED LETTER WA
+1930;CM # LIMBU SMALL LETTER KA
+1931;CM # LIMBU SMALL LETTER NGA
+1932;CM # LIMBU SMALL LETTER ANUSVARA
+1933;CM # LIMBU SMALL LETTER TA
+1934;CM # LIMBU SMALL LETTER NA
+1935;CM # LIMBU SMALL LETTER PA
+1936;CM # LIMBU SMALL LETTER MA
+1937;CM # LIMBU SMALL LETTER RA
+1938;CM # LIMBU SMALL LETTER LA
+1939;CM # LIMBU SIGN MUKPHRENG
+193A;CM # LIMBU SIGN KEMPHRENG
+193B;CM # LIMBU SIGN SA-I
+1940;AL # LIMBU SIGN LOO
+1944;EX # LIMBU EXCLAMATION MARK
+1945;EX # LIMBU QUESTION MARK
+1946;NU # LIMBU DIGIT ZERO
+1947;NU # LIMBU DIGIT ONE
+1948;NU # LIMBU DIGIT TWO
+1949;NU # LIMBU DIGIT THREE
+194A;NU # LIMBU DIGIT FOUR
+194B;NU # LIMBU DIGIT FIVE
+194C;NU # LIMBU DIGIT SIX
+194D;NU # LIMBU DIGIT SEVEN
+194E;NU # LIMBU DIGIT EIGHT
+194F;NU # LIMBU DIGIT NINE
+1950;AL # TAI LE LETTER KA
+1951;AL # TAI LE LETTER XA
+1952;AL # TAI LE LETTER NGA
+1953;AL # TAI LE LETTER TSA
+1954;AL # TAI LE LETTER SA
+1955;AL # TAI LE LETTER YA
+1956;AL # TAI LE LETTER TA
+1957;AL # TAI LE LETTER THA
+1958;AL # TAI LE LETTER LA
+1959;AL # TAI LE LETTER PA
+195A;AL # TAI LE LETTER PHA
+195B;AL # TAI LE LETTER MA
+195C;AL # TAI LE LETTER FA
+195D;AL # TAI LE LETTER VA
+195E;AL # TAI LE LETTER HA
+195F;AL # TAI LE LETTER QA
+1960;AL # TAI LE LETTER KHA
+1961;AL # TAI LE LETTER TSHA
+1962;AL # TAI LE LETTER NA
+1963;AL # TAI LE LETTER A
+1964;AL # TAI LE LETTER I
+1965;AL # TAI LE LETTER EE
+1966;AL # TAI LE LETTER EH
+1967;AL # TAI LE LETTER U
+1968;AL # TAI LE LETTER OO
+1969;AL # TAI LE LETTER O
+196A;AL # TAI LE LETTER UE
+196B;AL # TAI LE LETTER E
+196C;AL # TAI LE LETTER AUE
+196D;AL # TAI LE LETTER AI
+1970;AL # TAI LE LETTER TONE-2
+1971;AL # TAI LE LETTER TONE-3
+1972;AL # TAI LE LETTER TONE-4
+1973;AL # TAI LE LETTER TONE-5
+1974;AL # TAI LE LETTER TONE-6
+1980;AL # NEW TAI LUE LETTER HIGH QA
+1981;AL # NEW TAI LUE LETTER LOW QA
+1982;AL # NEW TAI LUE LETTER HIGH KA
+1983;AL # NEW TAI LUE LETTER HIGH XA
+1984;AL # NEW TAI LUE LETTER HIGH NGA
+1985;AL # NEW TAI LUE LETTER LOW KA
+1986;AL # NEW TAI LUE LETTER LOW XA
+1987;AL # NEW TAI LUE LETTER LOW NGA
+1988;AL # NEW TAI LUE LETTER HIGH TSA
+1989;AL # NEW TAI LUE LETTER HIGH SA
+198A;AL # NEW TAI LUE LETTER HIGH YA
+198B;AL # NEW TAI LUE LETTER LOW TSA
+198C;AL # NEW TAI LUE LETTER LOW SA
+198D;AL # NEW TAI LUE LETTER LOW YA
+198E;AL # NEW TAI LUE LETTER HIGH TA
+198F;AL # NEW TAI LUE LETTER HIGH THA
+1990;AL # NEW TAI LUE LETTER HIGH NA
+1991;AL # NEW TAI LUE LETTER LOW TA
+1992;AL # NEW TAI LUE LETTER LOW THA
+1993;AL # NEW TAI LUE LETTER LOW NA
+1994;AL # NEW TAI LUE LETTER HIGH PA
+1995;AL # NEW TAI LUE LETTER HIGH PHA
+1996;AL # NEW TAI LUE LETTER HIGH MA
+1997;AL # NEW TAI LUE LETTER LOW PA
+1998;AL # NEW TAI LUE LETTER LOW PHA
+1999;AL # NEW TAI LUE LETTER LOW MA
+199A;AL # NEW TAI LUE LETTER HIGH FA
+199B;AL # NEW TAI LUE LETTER HIGH VA
+199C;AL # NEW TAI LUE LETTER HIGH LA
+199D;AL # NEW TAI LUE LETTER LOW FA
+199E;AL # NEW TAI LUE LETTER LOW VA
+199F;AL # NEW TAI LUE LETTER LOW LA
+19A0;AL # NEW TAI LUE LETTER HIGH HA
+19A1;AL # NEW TAI LUE LETTER HIGH DA
+19A2;AL # NEW TAI LUE LETTER HIGH BA
+19A3;AL # NEW TAI LUE LETTER LOW HA
+19A4;AL # NEW TAI LUE LETTER LOW DA
+19A5;AL # NEW TAI LUE LETTER LOW BA
+19A6;AL # NEW TAI LUE LETTER HIGH KVA
+19A7;AL # NEW TAI LUE LETTER HIGH XVA
+19A8;AL # NEW TAI LUE LETTER LOW KVA
+19A9;AL # NEW TAI LUE LETTER LOW XVA
+19B0;CM # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1;CM # NEW TAI LUE VOWEL SIGN AA
+19B2;CM # NEW TAI LUE VOWEL SIGN II
+19B3;CM # NEW TAI LUE VOWEL SIGN U
+19B4;CM # NEW TAI LUE VOWEL SIGN UU
+19B5;CM # NEW TAI LUE VOWEL SIGN E
+19B6;CM # NEW TAI LUE VOWEL SIGN AE
+19B7;CM # NEW TAI LUE VOWEL SIGN O
+19B8;CM # NEW TAI LUE VOWEL SIGN OA
+19B9;CM # NEW TAI LUE VOWEL SIGN UE
+19BA;CM # NEW TAI LUE VOWEL SIGN AY
+19BB;CM # NEW TAI LUE VOWEL SIGN AAY
+19BC;CM # NEW TAI LUE VOWEL SIGN UY
+19BD;CM # NEW TAI LUE VOWEL SIGN OY
+19BE;CM # NEW TAI LUE VOWEL SIGN OAY
+19BF;CM # NEW TAI LUE VOWEL SIGN UEY
+19C0;CM # NEW TAI LUE VOWEL SIGN IY
+19C1;AL # NEW TAI LUE LETTER FINAL V
+19C2;AL # NEW TAI LUE LETTER FINAL NG
+19C3;AL # NEW TAI LUE LETTER FINAL N
+19C4;AL # NEW TAI LUE LETTER FINAL M
+19C5;AL # NEW TAI LUE LETTER FINAL K
+19C6;AL # NEW TAI LUE LETTER FINAL D
+19C7;AL # NEW TAI LUE LETTER FINAL B
+19C8;CM # NEW TAI LUE TONE MARK-1
+19C9;CM # NEW TAI LUE TONE MARK-2
+19D0;NU # NEW TAI LUE DIGIT ZERO
+19D1;NU # NEW TAI LUE DIGIT ONE
+19D2;NU # NEW TAI LUE DIGIT TWO
+19D3;NU # NEW TAI LUE DIGIT THREE
+19D4;NU # NEW TAI LUE DIGIT FOUR
+19D5;NU # NEW TAI LUE DIGIT FIVE
+19D6;NU # NEW TAI LUE DIGIT SIX
+19D7;NU # NEW TAI LUE DIGIT SEVEN
+19D8;NU # NEW TAI LUE DIGIT EIGHT
+19D9;NU # NEW TAI LUE DIGIT NINE
+19DE;AL # NEW TAI LUE SIGN LAE
+19DF;AL # NEW TAI LUE SIGN LAEV
+19E0;AL # KHMER SYMBOL PATHAMASAT
+19E1;AL # KHMER SYMBOL MUOY KOET
+19E2;AL # KHMER SYMBOL PII KOET
+19E3;AL # KHMER SYMBOL BEI KOET
+19E4;AL # KHMER SYMBOL BUON KOET
+19E5;AL # KHMER SYMBOL PRAM KOET
+19E6;AL # KHMER SYMBOL PRAM-MUOY KOET
+19E7;AL # KHMER SYMBOL PRAM-PII KOET
+19E8;AL # KHMER SYMBOL PRAM-BEI KOET
+19E9;AL # KHMER SYMBOL PRAM-BUON KOET
+19EA;AL # KHMER SYMBOL DAP KOET
+19EB;AL # KHMER SYMBOL DAP-MUOY KOET
+19EC;AL # KHMER SYMBOL DAP-PII KOET
+19ED;AL # KHMER SYMBOL DAP-BEI KOET
+19EE;AL # KHMER SYMBOL DAP-BUON KOET
+19EF;AL # KHMER SYMBOL DAP-PRAM KOET
+19F0;AL # KHMER SYMBOL TUTEYASAT
+19F1;AL # KHMER SYMBOL MUOY ROC
+19F2;AL # KHMER SYMBOL PII ROC
+19F3;AL # KHMER SYMBOL BEI ROC
+19F4;AL # KHMER SYMBOL BUON ROC
+19F5;AL # KHMER SYMBOL PRAM ROC
+19F6;AL # KHMER SYMBOL PRAM-MUOY ROC
+19F7;AL # KHMER SYMBOL PRAM-PII ROC
+19F8;AL # KHMER SYMBOL PRAM-BEI ROC
+19F9;AL # KHMER SYMBOL PRAM-BUON ROC
+19FA;AL # KHMER SYMBOL DAP ROC
+19FB;AL # KHMER SYMBOL DAP-MUOY ROC
+19FC;AL # KHMER SYMBOL DAP-PII ROC
+19FD;AL # KHMER SYMBOL DAP-BEI ROC
+19FE;AL # KHMER SYMBOL DAP-BUON ROC
+19FF;AL # KHMER SYMBOL DAP-PRAM ROC
+1A00;AL # BUGINESE LETTER KA
+1A01;AL # BUGINESE LETTER GA
+1A02;AL # BUGINESE LETTER NGA
+1A03;AL # BUGINESE LETTER NGKA
+1A04;AL # BUGINESE LETTER PA
+1A05;AL # BUGINESE LETTER BA
+1A06;AL # BUGINESE LETTER MA
+1A07;AL # BUGINESE LETTER MPA
+1A08;AL # BUGINESE LETTER TA
+1A09;AL # BUGINESE LETTER DA
+1A0A;AL # BUGINESE LETTER NA
+1A0B;AL # BUGINESE LETTER NRA
+1A0C;AL # BUGINESE LETTER CA
+1A0D;AL # BUGINESE LETTER JA
+1A0E;AL # BUGINESE LETTER NYA
+1A0F;AL # BUGINESE LETTER NYCA
+1A10;AL # BUGINESE LETTER YA
+1A11;AL # BUGINESE LETTER RA
+1A12;AL # BUGINESE LETTER LA
+1A13;AL # BUGINESE LETTER VA
+1A14;AL # BUGINESE LETTER SA
+1A15;AL # BUGINESE LETTER A
+1A16;AL # BUGINESE LETTER HA
+1A17;CM # BUGINESE VOWEL SIGN I
+1A18;CM # BUGINESE VOWEL SIGN U
+1A19;CM # BUGINESE VOWEL SIGN E
+1A1A;CM # BUGINESE VOWEL SIGN O
+1A1B;CM # BUGINESE VOWEL SIGN AE
+1A1E;BA # BUGINESE PALLAWA
+1A1F;AL # BUGINESE END OF SECTION
+1D00;AL # LATIN LETTER SMALL CAPITAL A
+1D01;AL # LATIN LETTER SMALL CAPITAL AE
+1D02;AL # LATIN SMALL LETTER TURNED AE
+1D03;AL # LATIN LETTER SMALL CAPITAL BARRED B
+1D04;AL # LATIN LETTER SMALL CAPITAL C
+1D05;AL # LATIN LETTER SMALL CAPITAL D
+1D06;AL # LATIN LETTER SMALL CAPITAL ETH
+1D07;AL # LATIN LETTER SMALL CAPITAL E
+1D08;AL # LATIN SMALL LETTER TURNED OPEN E
+1D09;AL # LATIN SMALL LETTER TURNED I
+1D0A;AL # LATIN LETTER SMALL CAPITAL J
+1D0B;AL # LATIN LETTER SMALL CAPITAL K
+1D0C;AL # LATIN LETTER SMALL CAPITAL L WITH STROKE
+1D0D;AL # LATIN LETTER SMALL CAPITAL M
+1D0E;AL # LATIN LETTER SMALL CAPITAL REVERSED N
+1D0F;AL # LATIN LETTER SMALL CAPITAL O
+1D10;AL # LATIN LETTER SMALL CAPITAL OPEN O
+1D11;AL # LATIN SMALL LETTER SIDEWAYS O
+1D12;AL # LATIN SMALL LETTER SIDEWAYS OPEN O
+1D13;AL # LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+1D14;AL # LATIN SMALL LETTER TURNED OE
+1D15;AL # LATIN LETTER SMALL CAPITAL OU
+1D16;AL # LATIN SMALL LETTER TOP HALF O
+1D17;AL # LATIN SMALL LETTER BOTTOM HALF O
+1D18;AL # LATIN LETTER SMALL CAPITAL P
+1D19;AL # LATIN LETTER SMALL CAPITAL REVERSED R
+1D1A;AL # LATIN LETTER SMALL CAPITAL TURNED R
+1D1B;AL # LATIN LETTER SMALL CAPITAL T
+1D1C;AL # LATIN LETTER SMALL CAPITAL U
+1D1D;AL # LATIN SMALL LETTER SIDEWAYS U
+1D1E;AL # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+1D1F;AL # LATIN SMALL LETTER SIDEWAYS TURNED M
+1D20;AL # LATIN LETTER SMALL CAPITAL V
+1D21;AL # LATIN LETTER SMALL CAPITAL W
+1D22;AL # LATIN LETTER SMALL CAPITAL Z
+1D23;AL # LATIN LETTER SMALL CAPITAL EZH
+1D24;AL # LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25;AL # LATIN LETTER AIN
+1D26;AL # GREEK LETTER SMALL CAPITAL GAMMA
+1D27;AL # GREEK LETTER SMALL CAPITAL LAMDA
+1D28;AL # GREEK LETTER SMALL CAPITAL PI
+1D29;AL # GREEK LETTER SMALL CAPITAL RHO
+1D2A;AL # GREEK LETTER SMALL CAPITAL PSI
+1D2B;AL # CYRILLIC LETTER SMALL CAPITAL EL
+1D2C;AL # MODIFIER LETTER CAPITAL A
+1D2D;AL # MODIFIER LETTER CAPITAL AE
+1D2E;AL # MODIFIER LETTER CAPITAL B
+1D2F;AL # MODIFIER LETTER CAPITAL BARRED B
+1D30;AL # MODIFIER LETTER CAPITAL D
+1D31;AL # MODIFIER LETTER CAPITAL E
+1D32;AL # MODIFIER LETTER CAPITAL REVERSED E
+1D33;AL # MODIFIER LETTER CAPITAL G
+1D34;AL # MODIFIER LETTER CAPITAL H
+1D35;AL # MODIFIER LETTER CAPITAL I
+1D36;AL # MODIFIER LETTER CAPITAL J
+1D37;AL # MODIFIER LETTER CAPITAL K
+1D38;AL # MODIFIER LETTER CAPITAL L
+1D39;AL # MODIFIER LETTER CAPITAL M
+1D3A;AL # MODIFIER LETTER CAPITAL N
+1D3B;AL # MODIFIER LETTER CAPITAL REVERSED N
+1D3C;AL # MODIFIER LETTER CAPITAL O
+1D3D;AL # MODIFIER LETTER CAPITAL OU
+1D3E;AL # MODIFIER LETTER CAPITAL P
+1D3F;AL # MODIFIER LETTER CAPITAL R
+1D40;AL # MODIFIER LETTER CAPITAL T
+1D41;AL # MODIFIER LETTER CAPITAL U
+1D42;AL # MODIFIER LETTER CAPITAL W
+1D43;AL # MODIFIER LETTER SMALL A
+1D44;AL # MODIFIER LETTER SMALL TURNED A
+1D45;AL # MODIFIER LETTER SMALL ALPHA
+1D46;AL # MODIFIER LETTER SMALL TURNED AE
+1D47;AL # MODIFIER LETTER SMALL B
+1D48;AL # MODIFIER LETTER SMALL D
+1D49;AL # MODIFIER LETTER SMALL E
+1D4A;AL # MODIFIER LETTER SMALL SCHWA
+1D4B;AL # MODIFIER LETTER SMALL OPEN E
+1D4C;AL # MODIFIER LETTER SMALL TURNED OPEN E
+1D4D;AL # MODIFIER LETTER SMALL G
+1D4E;AL # MODIFIER LETTER SMALL TURNED I
+1D4F;AL # MODIFIER LETTER SMALL K
+1D50;AL # MODIFIER LETTER SMALL M
+1D51;AL # MODIFIER LETTER SMALL ENG
+1D52;AL # MODIFIER LETTER SMALL O
+1D53;AL # MODIFIER LETTER SMALL OPEN O
+1D54;AL # MODIFIER LETTER SMALL TOP HALF O
+1D55;AL # MODIFIER LETTER SMALL BOTTOM HALF O
+1D56;AL # MODIFIER LETTER SMALL P
+1D57;AL # MODIFIER LETTER SMALL T
+1D58;AL # MODIFIER LETTER SMALL U
+1D59;AL # MODIFIER LETTER SMALL SIDEWAYS U
+1D5A;AL # MODIFIER LETTER SMALL TURNED M
+1D5B;AL # MODIFIER LETTER SMALL V
+1D5C;AL # MODIFIER LETTER SMALL AIN
+1D5D;AL # MODIFIER LETTER SMALL BETA
+1D5E;AL # MODIFIER LETTER SMALL GREEK GAMMA
+1D5F;AL # MODIFIER LETTER SMALL DELTA
+1D60;AL # MODIFIER LETTER SMALL GREEK PHI
+1D61;AL # MODIFIER LETTER SMALL CHI
+1D62;AL # LATIN SUBSCRIPT SMALL LETTER I
+1D63;AL # LATIN SUBSCRIPT SMALL LETTER R
+1D64;AL # LATIN SUBSCRIPT SMALL LETTER U
+1D65;AL # LATIN SUBSCRIPT SMALL LETTER V
+1D66;AL # GREEK SUBSCRIPT SMALL LETTER BETA
+1D67;AL # GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D68;AL # GREEK SUBSCRIPT SMALL LETTER RHO
+1D69;AL # GREEK SUBSCRIPT SMALL LETTER PHI
+1D6A;AL # GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B;AL # LATIN SMALL LETTER UE
+1D6C;AL # LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D;AL # LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E;AL # LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F;AL # LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70;AL # LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71;AL # LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72;AL # LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73;AL # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74;AL # LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75;AL # LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76;AL # LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77;AL # LATIN SMALL LETTER TURNED G
+1D78;AL # MODIFIER LETTER CYRILLIC EN
+1D79;AL # LATIN SMALL LETTER INSULAR G
+1D7A;AL # LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B;AL # LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C;AL # LATIN SMALL LETTER IOTA WITH STROKE
+1D7D;AL # LATIN SMALL LETTER P WITH STROKE
+1D7E;AL # LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F;AL # LATIN SMALL LETTER UPSILON WITH STROKE
+1D80;AL # LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81;AL # LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82;AL # LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83;AL # LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84;AL # LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85;AL # LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86;AL # LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87;AL # LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88;AL # LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89;AL # LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A;AL # LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B;AL # LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C;AL # LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D;AL # LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E;AL # LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F;AL # LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90;AL # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91;AL # LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92;AL # LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93;AL # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94;AL # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95;AL # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96;AL # LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97;AL # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98;AL # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99;AL # LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A;AL # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B;AL # MODIFIER LETTER SMALL TURNED ALPHA
+1D9C;AL # MODIFIER LETTER SMALL C
+1D9D;AL # MODIFIER LETTER SMALL C WITH CURL
+1D9E;AL # MODIFIER LETTER SMALL ETH
+1D9F;AL # MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0;AL # MODIFIER LETTER SMALL F
+1DA1;AL # MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2;AL # MODIFIER LETTER SMALL SCRIPT G
+1DA3;AL # MODIFIER LETTER SMALL TURNED H
+1DA4;AL # MODIFIER LETTER SMALL I WITH STROKE
+1DA5;AL # MODIFIER LETTER SMALL IOTA
+1DA6;AL # MODIFIER LETTER SMALL CAPITAL I
+1DA7;AL # MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8;AL # MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9;AL # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA;AL # MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB;AL # MODIFIER LETTER SMALL CAPITAL L
+1DAC;AL # MODIFIER LETTER SMALL M WITH HOOK
+1DAD;AL # MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE;AL # MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF;AL # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0;AL # MODIFIER LETTER SMALL CAPITAL N
+1DB1;AL # MODIFIER LETTER SMALL BARRED O
+1DB2;AL # MODIFIER LETTER SMALL PHI
+1DB3;AL # MODIFIER LETTER SMALL S WITH HOOK
+1DB4;AL # MODIFIER LETTER SMALL ESH
+1DB5;AL # MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6;AL # MODIFIER LETTER SMALL U BAR
+1DB7;AL # MODIFIER LETTER SMALL UPSILON
+1DB8;AL # MODIFIER LETTER SMALL CAPITAL U
+1DB9;AL # MODIFIER LETTER SMALL V WITH HOOK
+1DBA;AL # MODIFIER LETTER SMALL TURNED V
+1DBB;AL # MODIFIER LETTER SMALL Z
+1DBC;AL # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD;AL # MODIFIER LETTER SMALL Z WITH CURL
+1DBE;AL # MODIFIER LETTER SMALL EZH
+1DBF;AL # MODIFIER LETTER SMALL THETA
+1DC0;CM # COMBINING DOTTED GRAVE ACCENT
+1DC1;CM # COMBINING DOTTED ACUTE ACCENT
+1DC2;CM # COMBINING SNAKE BELOW
+1DC3;CM # COMBINING SUSPENSION MARK
+1E00;AL # LATIN CAPITAL LETTER A WITH RING BELOW
+1E01;AL # LATIN SMALL LETTER A WITH RING BELOW
+1E02;AL # LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03;AL # LATIN SMALL LETTER B WITH DOT ABOVE
+1E04;AL # LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05;AL # LATIN SMALL LETTER B WITH DOT BELOW
+1E06;AL # LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07;AL # LATIN SMALL LETTER B WITH LINE BELOW
+1E08;AL # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09;AL # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A;AL # LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B;AL # LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C;AL # LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D;AL # LATIN SMALL LETTER D WITH DOT BELOW
+1E0E;AL # LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F;AL # LATIN SMALL LETTER D WITH LINE BELOW
+1E10;AL # LATIN CAPITAL LETTER D WITH CEDILLA
+1E11;AL # LATIN SMALL LETTER D WITH CEDILLA
+1E12;AL # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13;AL # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14;AL # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15;AL # LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16;AL # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17;AL # LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A;AL # LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B;AL # LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C;AL # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D;AL # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E;AL # LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F;AL # LATIN SMALL LETTER F WITH DOT ABOVE
+1E20;AL # LATIN CAPITAL LETTER G WITH MACRON
+1E21;AL # LATIN SMALL LETTER G WITH MACRON
+1E22;AL # LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23;AL # LATIN SMALL LETTER H WITH DOT ABOVE
+1E24;AL # LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25;AL # LATIN SMALL LETTER H WITH DOT BELOW
+1E26;AL # LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27;AL # LATIN SMALL LETTER H WITH DIAERESIS
+1E28;AL # LATIN CAPITAL LETTER H WITH CEDILLA
+1E29;AL # LATIN SMALL LETTER H WITH CEDILLA
+1E2A;AL # LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B;AL # LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C;AL # LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D;AL # LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E;AL # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F;AL # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30;AL # LATIN CAPITAL LETTER K WITH ACUTE
+1E31;AL # LATIN SMALL LETTER K WITH ACUTE
+1E32;AL # LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33;AL # LATIN SMALL LETTER K WITH DOT BELOW
+1E34;AL # LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35;AL # LATIN SMALL LETTER K WITH LINE BELOW
+1E36;AL # LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37;AL # LATIN SMALL LETTER L WITH DOT BELOW
+1E38;AL # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39;AL # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A;AL # LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B;AL # LATIN SMALL LETTER L WITH LINE BELOW
+1E3C;AL # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D;AL # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E;AL # LATIN CAPITAL LETTER M WITH ACUTE
+1E3F;AL # LATIN SMALL LETTER M WITH ACUTE
+1E40;AL # LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41;AL # LATIN SMALL LETTER M WITH DOT ABOVE
+1E42;AL # LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43;AL # LATIN SMALL LETTER M WITH DOT BELOW
+1E44;AL # LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45;AL # LATIN SMALL LETTER N WITH DOT ABOVE
+1E46;AL # LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47;AL # LATIN SMALL LETTER N WITH DOT BELOW
+1E48;AL # LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49;AL # LATIN SMALL LETTER N WITH LINE BELOW
+1E4A;AL # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B;AL # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C;AL # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D;AL # LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E;AL # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F;AL # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50;AL # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51;AL # LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52;AL # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53;AL # LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54;AL # LATIN CAPITAL LETTER P WITH ACUTE
+1E55;AL # LATIN SMALL LETTER P WITH ACUTE
+1E56;AL # LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57;AL # LATIN SMALL LETTER P WITH DOT ABOVE
+1E58;AL # LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59;AL # LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A;AL # LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B;AL # LATIN SMALL LETTER R WITH DOT BELOW
+1E5C;AL # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D;AL # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E;AL # LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F;AL # LATIN SMALL LETTER R WITH LINE BELOW
+1E60;AL # LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61;AL # LATIN SMALL LETTER S WITH DOT ABOVE
+1E62;AL # LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63;AL # LATIN SMALL LETTER S WITH DOT BELOW
+1E64;AL # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65;AL # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66;AL # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67;AL # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68;AL # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69;AL # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A;AL # LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B;AL # LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C;AL # LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D;AL # LATIN SMALL LETTER T WITH DOT BELOW
+1E6E;AL # LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F;AL # LATIN SMALL LETTER T WITH LINE BELOW
+1E70;AL # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71;AL # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72;AL # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73;AL # LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74;AL # LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75;AL # LATIN SMALL LETTER U WITH TILDE BELOW
+1E76;AL # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77;AL # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78;AL # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79;AL # LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A;AL # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B;AL # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C;AL # LATIN CAPITAL LETTER V WITH TILDE
+1E7D;AL # LATIN SMALL LETTER V WITH TILDE
+1E7E;AL # LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F;AL # LATIN SMALL LETTER V WITH DOT BELOW
+1E80;AL # LATIN CAPITAL LETTER W WITH GRAVE
+1E81;AL # LATIN SMALL LETTER W WITH GRAVE
+1E82;AL # LATIN CAPITAL LETTER W WITH ACUTE
+1E83;AL # LATIN SMALL LETTER W WITH ACUTE
+1E84;AL # LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85;AL # LATIN SMALL LETTER W WITH DIAERESIS
+1E86;AL # LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87;AL # LATIN SMALL LETTER W WITH DOT ABOVE
+1E88;AL # LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89;AL # LATIN SMALL LETTER W WITH DOT BELOW
+1E8A;AL # LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B;AL # LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C;AL # LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D;AL # LATIN SMALL LETTER X WITH DIAERESIS
+1E8E;AL # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F;AL # LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90;AL # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91;AL # LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92;AL # LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93;AL # LATIN SMALL LETTER Z WITH DOT BELOW
+1E94;AL # LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95;AL # LATIN SMALL LETTER Z WITH LINE BELOW
+1E96;AL # LATIN SMALL LETTER H WITH LINE BELOW
+1E97;AL # LATIN SMALL LETTER T WITH DIAERESIS
+1E98;AL # LATIN SMALL LETTER W WITH RING ABOVE
+1E99;AL # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A;AL # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B;AL # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0;AL # LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1;AL # LATIN SMALL LETTER A WITH DOT BELOW
+1EA2;AL # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3;AL # LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC;AL # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD;AL # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE;AL # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF;AL # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0;AL # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1;AL # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2;AL # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3;AL # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4;AL # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5;AL # LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6;AL # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7;AL # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8;AL # LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9;AL # LATIN SMALL LETTER E WITH DOT BELOW
+1EBA;AL # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB;AL # LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC;AL # LATIN CAPITAL LETTER E WITH TILDE
+1EBD;AL # LATIN SMALL LETTER E WITH TILDE
+1EBE;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6;AL # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7;AL # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8;AL # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9;AL # LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA;AL # LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB;AL # LATIN SMALL LETTER I WITH DOT BELOW
+1ECC;AL # LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD;AL # LATIN SMALL LETTER O WITH DOT BELOW
+1ECE;AL # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF;AL # LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8;AL # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9;AL # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA;AL # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB;AL # LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC;AL # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD;AL # LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE;AL # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF;AL # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0;AL # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1;AL # LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2;AL # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3;AL # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4;AL # LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5;AL # LATIN SMALL LETTER U WITH DOT BELOW
+1EE6;AL # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7;AL # LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8;AL # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9;AL # LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA;AL # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB;AL # LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC;AL # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED;AL # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE;AL # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF;AL # LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0;AL # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1;AL # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2;AL # LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3;AL # LATIN SMALL LETTER Y WITH GRAVE
+1EF4;AL # LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5;AL # LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6;AL # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7;AL # LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8;AL # LATIN CAPITAL LETTER Y WITH TILDE
+1EF9;AL # LATIN SMALL LETTER Y WITH TILDE
+1F00;AL # GREEK SMALL LETTER ALPHA WITH PSILI
+1F01;AL # GREEK SMALL LETTER ALPHA WITH DASIA
+1F02;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10;AL # GREEK SMALL LETTER EPSILON WITH PSILI
+1F11;AL # GREEK SMALL LETTER EPSILON WITH DASIA
+1F12;AL # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13;AL # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14;AL # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15;AL # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18;AL # GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19;AL # GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A;AL # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B;AL # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C;AL # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D;AL # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20;AL # GREEK SMALL LETTER ETA WITH PSILI
+1F21;AL # GREEK SMALL LETTER ETA WITH DASIA
+1F22;AL # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23;AL # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24;AL # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25;AL # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26;AL # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27;AL # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28;AL # GREEK CAPITAL LETTER ETA WITH PSILI
+1F29;AL # GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30;AL # GREEK SMALL LETTER IOTA WITH PSILI
+1F31;AL # GREEK SMALL LETTER IOTA WITH DASIA
+1F32;AL # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33;AL # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34;AL # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35;AL # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36;AL # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37;AL # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38;AL # GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39;AL # GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A;AL # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B;AL # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C;AL # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D;AL # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E;AL # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F;AL # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40;AL # GREEK SMALL LETTER OMICRON WITH PSILI
+1F41;AL # GREEK SMALL LETTER OMICRON WITH DASIA
+1F42;AL # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43;AL # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44;AL # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45;AL # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48;AL # GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49;AL # GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A;AL # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B;AL # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C;AL # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D;AL # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50;AL # GREEK SMALL LETTER UPSILON WITH PSILI
+1F51;AL # GREEK SMALL LETTER UPSILON WITH DASIA
+1F52;AL # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53;AL # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54;AL # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55;AL # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56;AL # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57;AL # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59;AL # GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B;AL # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D;AL # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F;AL # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60;AL # GREEK SMALL LETTER OMEGA WITH PSILI
+1F61;AL # GREEK SMALL LETTER OMEGA WITH DASIA
+1F62;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70;AL # GREEK SMALL LETTER ALPHA WITH VARIA
+1F71;AL # GREEK SMALL LETTER ALPHA WITH OXIA
+1F72;AL # GREEK SMALL LETTER EPSILON WITH VARIA
+1F73;AL # GREEK SMALL LETTER EPSILON WITH OXIA
+1F74;AL # GREEK SMALL LETTER ETA WITH VARIA
+1F75;AL # GREEK SMALL LETTER ETA WITH OXIA
+1F76;AL # GREEK SMALL LETTER IOTA WITH VARIA
+1F77;AL # GREEK SMALL LETTER IOTA WITH OXIA
+1F78;AL # GREEK SMALL LETTER OMICRON WITH VARIA
+1F79;AL # GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A;AL # GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B;AL # GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C;AL # GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D;AL # GREEK SMALL LETTER OMEGA WITH OXIA
+1F80;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86;AL # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87;AL # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E;AL # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F;AL # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90;AL # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91;AL # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92;AL # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93;AL # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94;AL # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95;AL # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96;AL # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97;AL # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E;AL # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F;AL # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6;AL # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7;AL # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE;AL # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF;AL # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0;AL # GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1;AL # GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2;AL # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3;AL # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4;AL # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6;AL # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7;AL # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8;AL # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9;AL # GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA;AL # GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB;AL # GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC;AL # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD;AL # GREEK KORONIS
+1FBE;AL # GREEK PROSGEGRAMMENI
+1FBF;AL # GREEK PSILI
+1FC0;AL # GREEK PERISPOMENI
+1FC1;AL # GREEK DIALYTIKA AND PERISPOMENI
+1FC2;AL # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3;AL # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4;AL # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6;AL # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7;AL # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8;AL # GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9;AL # GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA;AL # GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB;AL # GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC;AL # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD;AL # GREEK PSILI AND VARIA
+1FCE;AL # GREEK PSILI AND OXIA
+1FCF;AL # GREEK PSILI AND PERISPOMENI
+1FD0;AL # GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1;AL # GREEK SMALL LETTER IOTA WITH MACRON
+1FD2;AL # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3;AL # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6;AL # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7;AL # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8;AL # GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9;AL # GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA;AL # GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB;AL # GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD;AL # GREEK DASIA AND VARIA
+1FDE;AL # GREEK DASIA AND OXIA
+1FDF;AL # GREEK DASIA AND PERISPOMENI
+1FE0;AL # GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1;AL # GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2;AL # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3;AL # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4;AL # GREEK SMALL LETTER RHO WITH PSILI
+1FE5;AL # GREEK SMALL LETTER RHO WITH DASIA
+1FE6;AL # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7;AL # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8;AL # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9;AL # GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA;AL # GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB;AL # GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC;AL # GREEK CAPITAL LETTER RHO WITH DASIA
+1FED;AL # GREEK DIALYTIKA AND VARIA
+1FEE;AL # GREEK DIALYTIKA AND OXIA
+1FEF;AL # GREEK VARIA
+1FF2;AL # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3;AL # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4;AL # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6;AL # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7;AL # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8;AL # GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9;AL # GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA;AL # GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB;AL # GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC;AL # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD;AL # GREEK OXIA
+1FFE;AL # GREEK DASIA
+2000;BA # EN QUAD
+2001;BA # EM QUAD
+2002;BA # EN SPACE
+2003;BA # EM SPACE
+2004;BA # THREE-PER-EM SPACE
+2005;BA # FOUR-PER-EM SPACE
+2006;BA # SIX-PER-EM SPACE
+2007;GL # FIGURE SPACE
+2008;BA # PUNCTUATION SPACE
+2009;BA # THIN SPACE
+200A;BA # HAIR SPACE
+200B;ZW # ZERO WIDTH SPACE
+200C;CM # ZERO WIDTH NON-JOINER
+200D;CM # ZERO WIDTH JOINER
+200E;CM # LEFT-TO-RIGHT MARK
+200F;CM # RIGHT-TO-LEFT MARK
+2010;BA # HYPHEN
+2011;GL # NON-BREAKING HYPHEN
+2012;BA # FIGURE DASH
+2013;BA # EN DASH
+2014;B2 # EM DASH
+2015;AI # HORIZONTAL BAR
+2016;AI # DOUBLE VERTICAL LINE
+2017;AL # DOUBLE LOW LINE
+2018;QU # LEFT SINGLE QUOTATION MARK
+2019;QU # RIGHT SINGLE QUOTATION MARK
+201A;OP # SINGLE LOW-9 QUOTATION MARK
+201B;QU # SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C;QU # LEFT DOUBLE QUOTATION MARK
+201D;QU # RIGHT DOUBLE QUOTATION MARK
+201E;OP # DOUBLE LOW-9 QUOTATION MARK
+201F;QU # DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020;AI # DAGGER
+2021;AI # DOUBLE DAGGER
+2022;AL # BULLET
+2023;AL # TRIANGULAR BULLET
+2024;IN # ONE DOT LEADER
+2025;IN # TWO DOT LEADER
+2026;IN # HORIZONTAL ELLIPSIS
+2027;BA # HYPHENATION POINT
+2028;BK # LINE SEPARATOR
+2029;BK # PARAGRAPH SEPARATOR
+202A;CM # LEFT-TO-RIGHT EMBEDDING
+202B;CM # RIGHT-TO-LEFT EMBEDDING
+202C;CM # POP DIRECTIONAL FORMATTING
+202D;CM # LEFT-TO-RIGHT OVERRIDE
+202E;CM # RIGHT-TO-LEFT OVERRIDE
+202F;GL # NARROW NO-BREAK SPACE
+2030;PO # PER MILLE SIGN
+2031;PO # PER TEN THOUSAND SIGN
+2032;PO # PRIME
+2033;PO # DOUBLE PRIME
+2034;PO # TRIPLE PRIME
+2035;PO # REVERSED PRIME
+2036;PO # REVERSED DOUBLE PRIME
+2037;PO # REVERSED TRIPLE PRIME
+2038;AL # CARET
+2039;QU # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A;QU # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B;AI # REFERENCE MARK
+203C;NS # DOUBLE EXCLAMATION MARK
+203D;AL # INTERROBANG
+203E;AL # OVERLINE
+203F;AL # UNDERTIE
+2040;AL # CHARACTER TIE
+2041;AL # CARET INSERTION POINT
+2042;AL # ASTERISM
+2043;AL # HYPHEN BULLET
+2044;IS # FRACTION SLASH
+2045;OP # LEFT SQUARE BRACKET WITH QUILL
+2046;CL # RIGHT SQUARE BRACKET WITH QUILL
+2047;AL # DOUBLE QUESTION MARK
+2048;AL # QUESTION EXCLAMATION MARK
+2049;AL # EXCLAMATION QUESTION MARK
+204A;AL # TIRONIAN SIGN ET
+204B;AL # REVERSED PILCROW SIGN
+204C;AL # BLACK LEFTWARDS BULLET
+204D;AL # BLACK RIGHTWARDS BULLET
+204E;AL # LOW ASTERISK
+204F;AL # REVERSED SEMICOLON
+2050;AL # CLOSE UP
+2051;AL # TWO ASTERISKS ALIGNED VERTICALLY
+2052;AL # COMMERCIAL MINUS SIGN
+2053;AL # SWUNG DASH
+2054;AL # INVERTED UNDERTIE
+2055;AL # FLOWER PUNCTUATION MARK
+2056;BA # THREE DOT PUNCTUATION
+2057;AL # QUADRUPLE PRIME
+2058;BA # FOUR DOT PUNCTUATION
+2059;BA # FIVE DOT PUNCTUATION
+205A;BA # TWO DOT PUNCTUATION
+205B;BA # FOUR DOT MARK
+205C;AL # DOTTED CROSS
+205D;BA # TRICOLON
+205E;BA # VERTICAL FOUR DOTS
+205F;BA # MEDIUM MATHEMATICAL SPACE
+2060;WJ # WORD JOINER
+2061;AL # FUNCTION APPLICATION
+2062;AL # INVISIBLE TIMES
+2063;AL # INVISIBLE SEPARATOR
+206A;CM # INHIBIT SYMMETRIC SWAPPING
+206B;CM # ACTIVATE SYMMETRIC SWAPPING
+206C;CM # INHIBIT ARABIC FORM SHAPING
+206D;CM # ACTIVATE ARABIC FORM SHAPING
+206E;CM # NATIONAL DIGIT SHAPES
+206F;CM # NOMINAL DIGIT SHAPES
+2070;AL # SUPERSCRIPT ZERO
+2071;AL # SUPERSCRIPT LATIN SMALL LETTER I
+2074;AI # SUPERSCRIPT FOUR
+2075;AL # SUPERSCRIPT FIVE
+2076;AL # SUPERSCRIPT SIX
+2077;AL # SUPERSCRIPT SEVEN
+2078;AL # SUPERSCRIPT EIGHT
+2079;AL # SUPERSCRIPT NINE
+207A;AL # SUPERSCRIPT PLUS SIGN
+207B;AL # SUPERSCRIPT MINUS
+207C;AL # SUPERSCRIPT EQUALS SIGN
+207D;OP # SUPERSCRIPT LEFT PARENTHESIS
+207E;CL # SUPERSCRIPT RIGHT PARENTHESIS
+207F;AI # SUPERSCRIPT LATIN SMALL LETTER N
+2080;AL # SUBSCRIPT ZERO
+2081;AI # SUBSCRIPT ONE
+2082;AI # SUBSCRIPT TWO
+2083;AI # SUBSCRIPT THREE
+2084;AI # SUBSCRIPT FOUR
+2085;AL # SUBSCRIPT FIVE
+2086;AL # SUBSCRIPT SIX
+2087;AL # SUBSCRIPT SEVEN
+2088;AL # SUBSCRIPT EIGHT
+2089;AL # SUBSCRIPT NINE
+208A;AL # SUBSCRIPT PLUS SIGN
+208B;AL # SUBSCRIPT MINUS
+208C;AL # SUBSCRIPT EQUALS SIGN
+208D;OP # SUBSCRIPT LEFT PARENTHESIS
+208E;CL # SUBSCRIPT RIGHT PARENTHESIS
+2090;AL # LATIN SUBSCRIPT SMALL LETTER A
+2091;AL # LATIN SUBSCRIPT SMALL LETTER E
+2092;AL # LATIN SUBSCRIPT SMALL LETTER O
+2093;AL # LATIN SUBSCRIPT SMALL LETTER X
+2094;AL # LATIN SUBSCRIPT SMALL LETTER SCHWA
+20A0;PR # EURO-CURRENCY SIGN
+20A1;PR # COLON SIGN
+20A2;PR # CRUZEIRO SIGN
+20A3;PR # FRENCH FRANC SIGN
+20A4;PR # LIRA SIGN
+20A5;PR # MILL SIGN
+20A6;PR # NAIRA SIGN
+20A7;PO # PESETA SIGN
+20A8;PR # RUPEE SIGN
+20A9;PR # WON SIGN
+20AA;PR # NEW SHEQEL SIGN
+20AB;PR # DONG SIGN
+20AC;PR # EURO SIGN
+20AD;PR # KIP SIGN
+20AE;PR # TUGRIK SIGN
+20AF;PR # DRACHMA SIGN
+20B0;PR # GERMAN PENNY SIGN
+20B1;PR # PESO SIGN
+20B2;PR # GUARANI SIGN
+20B3;PR # AUSTRAL SIGN
+20B4;PR # HRYVNIA SIGN
+20B5;PR # CEDI SIGN
+20D0;CM # COMBINING LEFT HARPOON ABOVE
+20D1;CM # COMBINING RIGHT HARPOON ABOVE
+20D2;CM # COMBINING LONG VERTICAL LINE OVERLAY
+20D3;CM # COMBINING SHORT VERTICAL LINE OVERLAY
+20D4;CM # COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5;CM # COMBINING CLOCKWISE ARROW ABOVE
+20D6;CM # COMBINING LEFT ARROW ABOVE
+20D7;CM # COMBINING RIGHT ARROW ABOVE
+20D8;CM # COMBINING RING OVERLAY
+20D9;CM # COMBINING CLOCKWISE RING OVERLAY
+20DA;CM # COMBINING ANTICLOCKWISE RING OVERLAY
+20DB;CM # COMBINING THREE DOTS ABOVE
+20DC;CM # COMBINING FOUR DOTS ABOVE
+20DD;CM # COMBINING ENCLOSING CIRCLE
+20DE;CM # COMBINING ENCLOSING SQUARE
+20DF;CM # COMBINING ENCLOSING DIAMOND
+20E0;CM # COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1;CM # COMBINING LEFT RIGHT ARROW ABOVE
+20E2;CM # COMBINING ENCLOSING SCREEN
+20E3;CM # COMBINING ENCLOSING KEYCAP
+20E4;CM # COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5;CM # COMBINING REVERSE SOLIDUS OVERLAY
+20E6;CM # COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7;CM # COMBINING ANNUITY SYMBOL
+20E8;CM # COMBINING TRIPLE UNDERDOT
+20E9;CM # COMBINING WIDE BRIDGE ABOVE
+20EA;CM # COMBINING LEFTWARDS ARROW OVERLAY
+20EB;CM # COMBINING LONG DOUBLE SOLIDUS OVERLAY
+2100;AL # ACCOUNT OF
+2101;AL # ADDRESSED TO THE SUBJECT
+2102;AL # DOUBLE-STRUCK CAPITAL C
+2103;PO # DEGREE CELSIUS
+2104;AL # CENTRE LINE SYMBOL
+2105;AI # CARE OF
+2106;AL # CADA UNA
+2107;AL # EULER CONSTANT
+2108;AL # SCRUPLE
+2109;PO # DEGREE FAHRENHEIT
+210A;AL # SCRIPT SMALL G
+210B;AL # SCRIPT CAPITAL H
+210C;AL # BLACK-LETTER CAPITAL H
+210D;AL # DOUBLE-STRUCK CAPITAL H
+210E;AL # PLANCK CONSTANT
+210F;AL # PLANCK CONSTANT OVER TWO PI
+2110;AL # SCRIPT CAPITAL I
+2111;AL # BLACK-LETTER CAPITAL I
+2112;AL # SCRIPT CAPITAL L
+2113;AI # SCRIPT SMALL L
+2114;AL # L B BAR SYMBOL
+2115;AL # DOUBLE-STRUCK CAPITAL N
+2116;PR # NUMERO SIGN
+2117;AL # SOUND RECORDING COPYRIGHT
+2118;AL # SCRIPT CAPITAL P
+2119;AL # DOUBLE-STRUCK CAPITAL P
+211A;AL # DOUBLE-STRUCK CAPITAL Q
+211B;AL # SCRIPT CAPITAL R
+211C;AL # BLACK-LETTER CAPITAL R
+211D;AL # DOUBLE-STRUCK CAPITAL R
+211E;AL # PRESCRIPTION TAKE
+211F;AL # RESPONSE
+2120;AL # SERVICE MARK
+2121;AI # TELEPHONE SIGN
+2122;AI # TRADE MARK SIGN
+2123;AL # VERSICLE
+2124;AL # DOUBLE-STRUCK CAPITAL Z
+2125;AL # OUNCE SIGN
+2126;AL # OHM SIGN
+2127;AL # INVERTED OHM SIGN
+2128;AL # BLACK-LETTER CAPITAL Z
+2129;AL # TURNED GREEK SMALL LETTER IOTA
+212A;AL # KELVIN SIGN
+212B;AI # ANGSTROM SIGN
+212C;AL # SCRIPT CAPITAL B
+212D;AL # BLACK-LETTER CAPITAL C
+212E;AL # ESTIMATED SYMBOL
+212F;AL # SCRIPT SMALL E
+2130;AL # SCRIPT CAPITAL E
+2131;AL # SCRIPT CAPITAL F
+2132;AL # TURNED CAPITAL F
+2133;AL # SCRIPT CAPITAL M
+2134;AL # SCRIPT SMALL O
+2135;AL # ALEF SYMBOL
+2136;AL # BET SYMBOL
+2137;AL # GIMEL SYMBOL
+2138;AL # DALET SYMBOL
+2139;AL # INFORMATION SOURCE
+213A;AL # ROTATED CAPITAL Q
+213B;AL # FACSIMILE SIGN
+213C;AL # DOUBLE-STRUCK SMALL PI
+213D;AL # DOUBLE-STRUCK SMALL GAMMA
+213E;AL # DOUBLE-STRUCK CAPITAL GAMMA
+213F;AL # DOUBLE-STRUCK CAPITAL PI
+2140;AL # DOUBLE-STRUCK N-ARY SUMMATION
+2141;AL # TURNED SANS-SERIF CAPITAL G
+2142;AL # TURNED SANS-SERIF CAPITAL L
+2143;AL # REVERSED SANS-SERIF CAPITAL L
+2144;AL # TURNED SANS-SERIF CAPITAL Y
+2145;AL # DOUBLE-STRUCK ITALIC CAPITAL D
+2146;AL # DOUBLE-STRUCK ITALIC SMALL D
+2147;AL # DOUBLE-STRUCK ITALIC SMALL E
+2148;AL # DOUBLE-STRUCK ITALIC SMALL I
+2149;AL # DOUBLE-STRUCK ITALIC SMALL J
+214A;AL # PROPERTY LINE
+214B;AL # TURNED AMPERSAND
+214C;AL # PER SIGN
+2153;AL # VULGAR FRACTION ONE THIRD
+2154;AI # VULGAR FRACTION TWO THIRDS
+2155;AI # VULGAR FRACTION ONE FIFTH
+2156;AL # VULGAR FRACTION TWO FIFTHS
+2157;AL # VULGAR FRACTION THREE FIFTHS
+2158;AL # VULGAR FRACTION FOUR FIFTHS
+2159;AL # VULGAR FRACTION ONE SIXTH
+215A;AL # VULGAR FRACTION FIVE SIXTHS
+215B;AI # VULGAR FRACTION ONE EIGHTH
+215C;AL # VULGAR FRACTION THREE EIGHTHS
+215D;AL # VULGAR FRACTION FIVE EIGHTHS
+215E;AI # VULGAR FRACTION SEVEN EIGHTHS
+215F;AL # FRACTION NUMERATOR ONE
+2160;AI # ROMAN NUMERAL ONE
+2161;AI # ROMAN NUMERAL TWO
+2162;AI # ROMAN NUMERAL THREE
+2163;AI # ROMAN NUMERAL FOUR
+2164;AI # ROMAN NUMERAL FIVE
+2165;AI # ROMAN NUMERAL SIX
+2166;AI # ROMAN NUMERAL SEVEN
+2167;AI # ROMAN NUMERAL EIGHT
+2168;AI # ROMAN NUMERAL NINE
+2169;AI # ROMAN NUMERAL TEN
+216A;AI # ROMAN NUMERAL ELEVEN
+216B;AI # ROMAN NUMERAL TWELVE
+216C;AL # ROMAN NUMERAL FIFTY
+216D;AL # ROMAN NUMERAL ONE HUNDRED
+216E;AL # ROMAN NUMERAL FIVE HUNDRED
+216F;AL # ROMAN NUMERAL ONE THOUSAND
+2170;AI # SMALL ROMAN NUMERAL ONE
+2171;AI # SMALL ROMAN NUMERAL TWO
+2172;AI # SMALL ROMAN NUMERAL THREE
+2173;AI # SMALL ROMAN NUMERAL FOUR
+2174;AI # SMALL ROMAN NUMERAL FIVE
+2175;AI # SMALL ROMAN NUMERAL SIX
+2176;AI # SMALL ROMAN NUMERAL SEVEN
+2177;AI # SMALL ROMAN NUMERAL EIGHT
+2178;AI # SMALL ROMAN NUMERAL NINE
+2179;AI # SMALL ROMAN NUMERAL TEN
+217A;AL # SMALL ROMAN NUMERAL ELEVEN
+217B;AL # SMALL ROMAN NUMERAL TWELVE
+217C;AL # SMALL ROMAN NUMERAL FIFTY
+217D;AL # SMALL ROMAN NUMERAL ONE HUNDRED
+217E;AL # SMALL ROMAN NUMERAL FIVE HUNDRED
+217F;AL # SMALL ROMAN NUMERAL ONE THOUSAND
+2180;AL # ROMAN NUMERAL ONE THOUSAND C D
+2181;AL # ROMAN NUMERAL FIVE THOUSAND
+2182;AL # ROMAN NUMERAL TEN THOUSAND
+2183;AL # ROMAN NUMERAL REVERSED ONE HUNDRED
+2190;AI # LEFTWARDS ARROW
+2191;AI # UPWARDS ARROW
+2192;AI # RIGHTWARDS ARROW
+2193;AI # DOWNWARDS ARROW
+2194;AI # LEFT RIGHT ARROW
+2195;AI # UP DOWN ARROW
+2196;AI # NORTH WEST ARROW
+2197;AI # NORTH EAST ARROW
+2198;AI # SOUTH EAST ARROW
+2199;AI # SOUTH WEST ARROW
+219A;AL # LEFTWARDS ARROW WITH STROKE
+219B;AL # RIGHTWARDS ARROW WITH STROKE
+219C;AL # LEFTWARDS WAVE ARROW
+219D;AL # RIGHTWARDS WAVE ARROW
+219E;AL # LEFTWARDS TWO HEADED ARROW
+219F;AL # UPWARDS TWO HEADED ARROW
+21A0;AL # RIGHTWARDS TWO HEADED ARROW
+21A1;AL # DOWNWARDS TWO HEADED ARROW
+21A2;AL # LEFTWARDS ARROW WITH TAIL
+21A3;AL # RIGHTWARDS ARROW WITH TAIL
+21A4;AL # LEFTWARDS ARROW FROM BAR
+21A5;AL # UPWARDS ARROW FROM BAR
+21A6;AL # RIGHTWARDS ARROW FROM BAR
+21A7;AL # DOWNWARDS ARROW FROM BAR
+21A8;AL # UP DOWN ARROW WITH BASE
+21A9;AL # LEFTWARDS ARROW WITH HOOK
+21AA;AL # RIGHTWARDS ARROW WITH HOOK
+21AB;AL # LEFTWARDS ARROW WITH LOOP
+21AC;AL # RIGHTWARDS ARROW WITH LOOP
+21AD;AL # LEFT RIGHT WAVE ARROW
+21AE;AL # LEFT RIGHT ARROW WITH STROKE
+21AF;AL # DOWNWARDS ZIGZAG ARROW
+21B0;AL # UPWARDS ARROW WITH TIP LEFTWARDS
+21B1;AL # UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2;AL # DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3;AL # DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4;AL # RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5;AL # DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6;AL # ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7;AL # CLOCKWISE TOP SEMICIRCLE ARROW
+21B8;AL # NORTH WEST ARROW TO LONG BAR
+21B9;AL # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA;AL # ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB;AL # CLOCKWISE OPEN CIRCLE ARROW
+21BC;AL # LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD;AL # LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE;AL # UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF;AL # UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0;AL # RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1;AL # RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2;AL # DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3;AL # DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4;AL # RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5;AL # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6;AL # LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7;AL # LEFTWARDS PAIRED ARROWS
+21C8;AL # UPWARDS PAIRED ARROWS
+21C9;AL # RIGHTWARDS PAIRED ARROWS
+21CA;AL # DOWNWARDS PAIRED ARROWS
+21CB;AL # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC;AL # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD;AL # LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE;AL # LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF;AL # RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0;AL # LEFTWARDS DOUBLE ARROW
+21D1;AL # UPWARDS DOUBLE ARROW
+21D2;AI # RIGHTWARDS DOUBLE ARROW
+21D3;AL # DOWNWARDS DOUBLE ARROW
+21D4;AI # LEFT RIGHT DOUBLE ARROW
+21D5;AL # UP DOWN DOUBLE ARROW
+21D6;AL # NORTH WEST DOUBLE ARROW
+21D7;AL # NORTH EAST DOUBLE ARROW
+21D8;AL # SOUTH EAST DOUBLE ARROW
+21D9;AL # SOUTH WEST DOUBLE ARROW
+21DA;AL # LEFTWARDS TRIPLE ARROW
+21DB;AL # RIGHTWARDS TRIPLE ARROW
+21DC;AL # LEFTWARDS SQUIGGLE ARROW
+21DD;AL # RIGHTWARDS SQUIGGLE ARROW
+21DE;AL # UPWARDS ARROW WITH DOUBLE STROKE
+21DF;AL # DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0;AL # LEFTWARDS DASHED ARROW
+21E1;AL # UPWARDS DASHED ARROW
+21E2;AL # RIGHTWARDS DASHED ARROW
+21E3;AL # DOWNWARDS DASHED ARROW
+21E4;AL # LEFTWARDS ARROW TO BAR
+21E5;AL # RIGHTWARDS ARROW TO BAR
+21E6;AL # LEFTWARDS WHITE ARROW
+21E7;AL # UPWARDS WHITE ARROW
+21E8;AL # RIGHTWARDS WHITE ARROW
+21E9;AL # DOWNWARDS WHITE ARROW
+21EA;AL # UPWARDS WHITE ARROW FROM BAR
+21EB;AL # UPWARDS WHITE ARROW ON PEDESTAL
+21EC;AL # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED;AL # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE;AL # UPWARDS WHITE DOUBLE ARROW
+21EF;AL # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0;AL # RIGHTWARDS WHITE ARROW FROM WALL
+21F1;AL # NORTH WEST ARROW TO CORNER
+21F2;AL # SOUTH EAST ARROW TO CORNER
+21F3;AL # UP DOWN WHITE ARROW
+21F4;AL # RIGHT ARROW WITH SMALL CIRCLE
+21F5;AL # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6;AL # THREE RIGHTWARDS ARROWS
+21F7;AL # LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8;AL # RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9;AL # LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA;AL # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB;AL # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC;AL # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD;AL # LEFTWARDS OPEN-HEADED ARROW
+21FE;AL # RIGHTWARDS OPEN-HEADED ARROW
+21FF;AL # LEFT RIGHT OPEN-HEADED ARROW
+2200;AI # FOR ALL
+2201;AL # COMPLEMENT
+2202;AI # PARTIAL DIFFERENTIAL
+2203;AI # THERE EXISTS
+2204;AL # THERE DOES NOT EXIST
+2205;AL # EMPTY SET
+2206;AL # INCREMENT
+2207;AI # NABLA
+2208;AI # ELEMENT OF
+2209;AL # NOT AN ELEMENT OF
+220A;AL # SMALL ELEMENT OF
+220B;AI # CONTAINS AS MEMBER
+220C;AL # DOES NOT CONTAIN AS MEMBER
+220D;AL # SMALL CONTAINS AS MEMBER
+220E;AL # END OF PROOF
+220F;AI # N-ARY PRODUCT
+2210;AL # N-ARY COPRODUCT
+2211;AI # N-ARY SUMMATION
+2212;PR # MINUS SIGN
+2213;PR # MINUS-OR-PLUS SIGN
+2214;AL # DOT PLUS
+2215;AI # DIVISION SLASH
+2216;AL # SET MINUS
+2217;AL # ASTERISK OPERATOR
+2218;AL # RING OPERATOR
+2219;AL # BULLET OPERATOR
+221A;AI # SQUARE ROOT
+221B;AL # CUBE ROOT
+221C;AL # FOURTH ROOT
+221D;AI # PROPORTIONAL TO
+221E;AI # INFINITY
+221F;AI # RIGHT ANGLE
+2220;AI # ANGLE
+2221;AL # MEASURED ANGLE
+2222;AL # SPHERICAL ANGLE
+2223;AI # DIVIDES
+2224;AL # DOES NOT DIVIDE
+2225;AI # PARALLEL TO
+2226;AL # NOT PARALLEL TO
+2227;AI # LOGICAL AND
+2228;AI # LOGICAL OR
+2229;AI # INTERSECTION
+222A;AI # UNION
+222B;AI # INTEGRAL
+222C;AI # DOUBLE INTEGRAL
+222D;AL # TRIPLE INTEGRAL
+222E;AI # CONTOUR INTEGRAL
+222F;AL # SURFACE INTEGRAL
+2230;AL # VOLUME INTEGRAL
+2231;AL # CLOCKWISE INTEGRAL
+2232;AL # CLOCKWISE CONTOUR INTEGRAL
+2233;AL # ANTICLOCKWISE CONTOUR INTEGRAL
+2234;AI # THEREFORE
+2235;AI # BECAUSE
+2236;AI # RATIO
+2237;AI # PROPORTION
+2238;AL # DOT MINUS
+2239;AL # EXCESS
+223A;AL # GEOMETRIC PROPORTION
+223B;AL # HOMOTHETIC
+223C;AI # TILDE OPERATOR
+223D;AI # REVERSED TILDE
+223E;AL # INVERTED LAZY S
+223F;AL # SINE WAVE
+2240;AL # WREATH PRODUCT
+2241;AL # NOT TILDE
+2242;AL # MINUS TILDE
+2243;AL # ASYMPTOTICALLY EQUAL TO
+2244;AL # NOT ASYMPTOTICALLY EQUAL TO
+2245;AL # APPROXIMATELY EQUAL TO
+2246;AL # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247;AL # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248;AI # ALMOST EQUAL TO
+2249;AL # NOT ALMOST EQUAL TO
+224A;AL # ALMOST EQUAL OR EQUAL TO
+224B;AL # TRIPLE TILDE
+224C;AI # ALL EQUAL TO
+224D;AL # EQUIVALENT TO
+224E;AL # GEOMETRICALLY EQUIVALENT TO
+224F;AL # DIFFERENCE BETWEEN
+2250;AL # APPROACHES THE LIMIT
+2251;AL # GEOMETRICALLY EQUAL TO
+2252;AI # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253;AL # IMAGE OF OR APPROXIMATELY EQUAL TO
+2254;AL # COLON EQUALS
+2255;AL # EQUALS COLON
+2256;AL # RING IN EQUAL TO
+2257;AL # RING EQUAL TO
+2258;AL # CORRESPONDS TO
+2259;AL # ESTIMATES
+225A;AL # EQUIANGULAR TO
+225B;AL # STAR EQUALS
+225C;AL # DELTA EQUAL TO
+225D;AL # EQUAL TO BY DEFINITION
+225E;AL # MEASURED BY
+225F;AL # QUESTIONED EQUAL TO
+2260;AI # NOT EQUAL TO
+2261;AI # IDENTICAL TO
+2262;AL # NOT IDENTICAL TO
+2263;AL # STRICTLY EQUIVALENT TO
+2264;AI # LESS-THAN OR EQUAL TO
+2265;AI # GREATER-THAN OR EQUAL TO
+2266;AI # LESS-THAN OVER EQUAL TO
+2267;AI # GREATER-THAN OVER EQUAL TO
+2268;AL # LESS-THAN BUT NOT EQUAL TO
+2269;AL # GREATER-THAN BUT NOT EQUAL TO
+226A;AI # MUCH LESS-THAN
+226B;AI # MUCH GREATER-THAN
+226C;AL # BETWEEN
+226D;AL # NOT EQUIVALENT TO
+226E;AI # NOT LESS-THAN
+226F;AI # NOT GREATER-THAN
+2270;AL # NEITHER LESS-THAN NOR EQUAL TO
+2271;AL # NEITHER GREATER-THAN NOR EQUAL TO
+2272;AL # LESS-THAN OR EQUIVALENT TO
+2273;AL # GREATER-THAN OR EQUIVALENT TO
+2274;AL # NEITHER LESS-THAN NOR EQUIVALENT TO
+2275;AL # NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276;AL # LESS-THAN OR GREATER-THAN
+2277;AL # GREATER-THAN OR LESS-THAN
+2278;AL # NEITHER LESS-THAN NOR GREATER-THAN
+2279;AL # NEITHER GREATER-THAN NOR LESS-THAN
+227A;AL # PRECEDES
+227B;AL # SUCCEEDS
+227C;AL # PRECEDES OR EQUAL TO
+227D;AL # SUCCEEDS OR EQUAL TO
+227E;AL # PRECEDES OR EQUIVALENT TO
+227F;AL # SUCCEEDS OR EQUIVALENT TO
+2280;AL # DOES NOT PRECEDE
+2281;AL # DOES NOT SUCCEED
+2282;AI # SUBSET OF
+2283;AI # SUPERSET OF
+2284;AL # NOT A SUBSET OF
+2285;AL # NOT A SUPERSET OF
+2286;AI # SUBSET OF OR EQUAL TO
+2287;AI # SUPERSET OF OR EQUAL TO
+2288;AL # NEITHER A SUBSET OF NOR EQUAL TO
+2289;AL # NEITHER A SUPERSET OF NOR EQUAL TO
+228A;AL # SUBSET OF WITH NOT EQUAL TO
+228B;AL # SUPERSET OF WITH NOT EQUAL TO
+228C;AL # MULTISET
+228D;AL # MULTISET MULTIPLICATION
+228E;AL # MULTISET UNION
+228F;AL # SQUARE IMAGE OF
+2290;AL # SQUARE ORIGINAL OF
+2291;AL # SQUARE IMAGE OF OR EQUAL TO
+2292;AL # SQUARE ORIGINAL OF OR EQUAL TO
+2293;AL # SQUARE CAP
+2294;AL # SQUARE CUP
+2295;AI # CIRCLED PLUS
+2296;AL # CIRCLED MINUS
+2297;AL # CIRCLED TIMES
+2298;AL # CIRCLED DIVISION SLASH
+2299;AI # CIRCLED DOT OPERATOR
+229A;AL # CIRCLED RING OPERATOR
+229B;AL # CIRCLED ASTERISK OPERATOR
+229C;AL # CIRCLED EQUALS
+229D;AL # CIRCLED DASH
+229E;AL # SQUARED PLUS
+229F;AL # SQUARED MINUS
+22A0;AL # SQUARED TIMES
+22A1;AL # SQUARED DOT OPERATOR
+22A2;AL # RIGHT TACK
+22A3;AL # LEFT TACK
+22A4;AL # DOWN TACK
+22A5;AI # UP TACK
+22A6;AL # ASSERTION
+22A7;AL # MODELS
+22A8;AL # TRUE
+22A9;AL # FORCES
+22AA;AL # TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB;AL # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC;AL # DOES NOT PROVE
+22AD;AL # NOT TRUE
+22AE;AL # DOES NOT FORCE
+22AF;AL # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0;AL # PRECEDES UNDER RELATION
+22B1;AL # SUCCEEDS UNDER RELATION
+22B2;AL # NORMAL SUBGROUP OF
+22B3;AL # CONTAINS AS NORMAL SUBGROUP
+22B4;AL # NORMAL SUBGROUP OF OR EQUAL TO
+22B5;AL # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6;AL # ORIGINAL OF
+22B7;AL # IMAGE OF
+22B8;AL # MULTIMAP
+22B9;AL # HERMITIAN CONJUGATE MATRIX
+22BA;AL # INTERCALATE
+22BB;AL # XOR
+22BC;AL # NAND
+22BD;AL # NOR
+22BE;AL # RIGHT ANGLE WITH ARC
+22BF;AI # RIGHT TRIANGLE
+22C0;AL # N-ARY LOGICAL AND
+22C1;AL # N-ARY LOGICAL OR
+22C2;AL # N-ARY INTERSECTION
+22C3;AL # N-ARY UNION
+22C4;AL # DIAMOND OPERATOR
+22C5;AL # DOT OPERATOR
+22C6;AL # STAR OPERATOR
+22C7;AL # DIVISION TIMES
+22C8;AL # BOWTIE
+22C9;AL # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA;AL # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB;AL # LEFT SEMIDIRECT PRODUCT
+22CC;AL # RIGHT SEMIDIRECT PRODUCT
+22CD;AL # REVERSED TILDE EQUALS
+22CE;AL # CURLY LOGICAL OR
+22CF;AL # CURLY LOGICAL AND
+22D0;AL # DOUBLE SUBSET
+22D1;AL # DOUBLE SUPERSET
+22D2;AL # DOUBLE INTERSECTION
+22D3;AL # DOUBLE UNION
+22D4;AL # PITCHFORK
+22D5;AL # EQUAL AND PARALLEL TO
+22D6;AL # LESS-THAN WITH DOT
+22D7;AL # GREATER-THAN WITH DOT
+22D8;AL # VERY MUCH LESS-THAN
+22D9;AL # VERY MUCH GREATER-THAN
+22DA;AL # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB;AL # GREATER-THAN EQUAL TO OR LESS-THAN
+22DC;AL # EQUAL TO OR LESS-THAN
+22DD;AL # EQUAL TO OR GREATER-THAN
+22DE;AL # EQUAL TO OR PRECEDES
+22DF;AL # EQUAL TO OR SUCCEEDS
+22E0;AL # DOES NOT PRECEDE OR EQUAL
+22E1;AL # DOES NOT SUCCEED OR EQUAL
+22E2;AL # NOT SQUARE IMAGE OF OR EQUAL TO
+22E3;AL # NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4;AL # SQUARE IMAGE OF OR NOT EQUAL TO
+22E5;AL # SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6;AL # LESS-THAN BUT NOT EQUIVALENT TO
+22E7;AL # GREATER-THAN BUT NOT EQUIVALENT TO
+22E8;AL # PRECEDES BUT NOT EQUIVALENT TO
+22E9;AL # SUCCEEDS BUT NOT EQUIVALENT TO
+22EA;AL # NOT NORMAL SUBGROUP OF
+22EB;AL # DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC;AL # NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED;AL # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE;AL # VERTICAL ELLIPSIS
+22EF;AL # MIDLINE HORIZONTAL ELLIPSIS
+22F0;AL # UP RIGHT DIAGONAL ELLIPSIS
+22F1;AL # DOWN RIGHT DIAGONAL ELLIPSIS
+22F2;AL # ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3;AL # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4;AL # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5;AL # ELEMENT OF WITH DOT ABOVE
+22F6;AL # ELEMENT OF WITH OVERBAR
+22F7;AL # SMALL ELEMENT OF WITH OVERBAR
+22F8;AL # ELEMENT OF WITH UNDERBAR
+22F9;AL # ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA;AL # CONTAINS WITH LONG HORIZONTAL STROKE
+22FB;AL # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC;AL # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD;AL # CONTAINS WITH OVERBAR
+22FE;AL # SMALL CONTAINS WITH OVERBAR
+22FF;AL # Z NOTATION BAG MEMBERSHIP
+2300;AL # DIAMETER SIGN
+2301;AL # ELECTRIC ARROW
+2302;AL # HOUSE
+2303;AL # UP ARROWHEAD
+2304;AL # DOWN ARROWHEAD
+2305;AL # PROJECTIVE
+2306;AL # PERSPECTIVE
+2307;AL # WAVY LINE
+2308;AL # LEFT CEILING
+2309;AL # RIGHT CEILING
+230A;AL # LEFT FLOOR
+230B;AL # RIGHT FLOOR
+230C;AL # BOTTOM RIGHT CROP
+230D;AL # BOTTOM LEFT CROP
+230E;AL # TOP RIGHT CROP
+230F;AL # TOP LEFT CROP
+2310;AL # REVERSED NOT SIGN
+2311;AL # SQUARE LOZENGE
+2312;AI # ARC
+2313;AL # SEGMENT
+2314;AL # SECTOR
+2315;AL # TELEPHONE RECORDER
+2316;AL # POSITION INDICATOR
+2317;AL # VIEWDATA SQUARE
+2318;AL # PLACE OF INTEREST SIGN
+2319;AL # TURNED NOT SIGN
+231A;AL # WATCH
+231B;AL # HOURGLASS
+231C;AL # TOP LEFT CORNER
+231D;AL # TOP RIGHT CORNER
+231E;AL # BOTTOM LEFT CORNER
+231F;AL # BOTTOM RIGHT CORNER
+2320;AL # TOP HALF INTEGRAL
+2321;AL # BOTTOM HALF INTEGRAL
+2322;AL # FROWN
+2323;AL # SMILE
+2324;AL # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325;AL # OPTION KEY
+2326;AL # ERASE TO THE RIGHT
+2327;AL # X IN A RECTANGLE BOX
+2328;AL # KEYBOARD
+2329;OP # LEFT-POINTING ANGLE BRACKET
+232A;CL # RIGHT-POINTING ANGLE BRACKET
+232B;AL # ERASE TO THE LEFT
+232C;AL # BENZENE RING
+232D;AL # CYLINDRICITY
+232E;AL # ALL AROUND-PROFILE
+232F;AL # SYMMETRY
+2330;AL # TOTAL RUNOUT
+2331;AL # DIMENSION ORIGIN
+2332;AL # CONICAL TAPER
+2333;AL # SLOPE
+2334;AL # COUNTERBORE
+2335;AL # COUNTERSINK
+2336;AL # APL FUNCTIONAL SYMBOL I-BEAM
+2337;AL # APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338;AL # APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339;AL # APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A;AL # APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B;AL # APL FUNCTIONAL SYMBOL QUAD JOT
+233C;AL # APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D;AL # APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E;AL # APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F;AL # APL FUNCTIONAL SYMBOL SLASH BAR
+2340;AL # APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341;AL # APL FUNCTIONAL SYMBOL QUAD SLASH
+2342;AL # APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343;AL # APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344;AL # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345;AL # APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346;AL # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347;AL # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348;AL # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349;AL # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A;AL # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B;AL # APL FUNCTIONAL SYMBOL DELTA STILE
+234C;AL # APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D;AL # APL FUNCTIONAL SYMBOL QUAD DELTA
+234E;AL # APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F;AL # APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350;AL # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351;AL # APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352;AL # APL FUNCTIONAL SYMBOL DEL STILE
+2353;AL # APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354;AL # APL FUNCTIONAL SYMBOL QUAD DEL
+2355;AL # APL FUNCTIONAL SYMBOL UP TACK JOT
+2356;AL # APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357;AL # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358;AL # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359;AL # APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A;AL # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B;AL # APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C;AL # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D;AL # APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E;AL # APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F;AL # APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360;AL # APL FUNCTIONAL SYMBOL QUAD COLON
+2361;AL # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362;AL # APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363;AL # APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364;AL # APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365;AL # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366;AL # APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367;AL # APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368;AL # APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369;AL # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A;AL # APL FUNCTIONAL SYMBOL COMMA BAR
+236B;AL # APL FUNCTIONAL SYMBOL DEL TILDE
+236C;AL # APL FUNCTIONAL SYMBOL ZILDE
+236D;AL # APL FUNCTIONAL SYMBOL STILE TILDE
+236E;AL # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F;AL # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370;AL # APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371;AL # APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372;AL # APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373;AL # APL FUNCTIONAL SYMBOL IOTA
+2374;AL # APL FUNCTIONAL SYMBOL RHO
+2375;AL # APL FUNCTIONAL SYMBOL OMEGA
+2376;AL # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377;AL # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378;AL # APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379;AL # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A;AL # APL FUNCTIONAL SYMBOL ALPHA
+237B;AL # NOT CHECK MARK
+237C;AL # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D;AL # SHOULDERED OPEN BOX
+237E;AL # BELL SYMBOL
+237F;AL # VERTICAL LINE WITH MIDDLE DOT
+2380;AL # INSERTION SYMBOL
+2381;AL # CONTINUOUS UNDERLINE SYMBOL
+2382;AL # DISCONTINUOUS UNDERLINE SYMBOL
+2383;AL # EMPHASIS SYMBOL
+2384;AL # COMPOSITION SYMBOL
+2385;AL # WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386;AL # ENTER SYMBOL
+2387;AL # ALTERNATIVE KEY SYMBOL
+2388;AL # HELM SYMBOL
+2389;AL # CIRCLED HORIZONTAL BAR WITH NOTCH
+238A;AL # CIRCLED TRIANGLE DOWN
+238B;AL # BROKEN CIRCLE WITH NORTHWEST ARROW
+238C;AL # UNDO SYMBOL
+238D;AL # MONOSTABLE SYMBOL
+238E;AL # HYSTERESIS SYMBOL
+238F;AL # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390;AL # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391;AL # PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392;AL # PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393;AL # DIRECT CURRENT SYMBOL FORM TWO
+2394;AL # SOFTWARE-FUNCTION SYMBOL
+2395;AL # APL FUNCTIONAL SYMBOL QUAD
+2396;AL # DECIMAL SEPARATOR KEY SYMBOL
+2397;AL # PREVIOUS PAGE
+2398;AL # NEXT PAGE
+2399;AL # PRINT SCREEN SYMBOL
+239A;AL # CLEAR SCREEN SYMBOL
+239B;AL # LEFT PARENTHESIS UPPER HOOK
+239C;AL # LEFT PARENTHESIS EXTENSION
+239D;AL # LEFT PARENTHESIS LOWER HOOK
+239E;AL # RIGHT PARENTHESIS UPPER HOOK
+239F;AL # RIGHT PARENTHESIS EXTENSION
+23A0;AL # RIGHT PARENTHESIS LOWER HOOK
+23A1;AL # LEFT SQUARE BRACKET UPPER CORNER
+23A2;AL # LEFT SQUARE BRACKET EXTENSION
+23A3;AL # LEFT SQUARE BRACKET LOWER CORNER
+23A4;AL # RIGHT SQUARE BRACKET UPPER CORNER
+23A5;AL # RIGHT SQUARE BRACKET EXTENSION
+23A6;AL # RIGHT SQUARE BRACKET LOWER CORNER
+23A7;AL # LEFT CURLY BRACKET UPPER HOOK
+23A8;AL # LEFT CURLY BRACKET MIDDLE PIECE
+23A9;AL # LEFT CURLY BRACKET LOWER HOOK
+23AA;AL # CURLY BRACKET EXTENSION
+23AB;AL # RIGHT CURLY BRACKET UPPER HOOK
+23AC;AL # RIGHT CURLY BRACKET MIDDLE PIECE
+23AD;AL # RIGHT CURLY BRACKET LOWER HOOK
+23AE;AL # INTEGRAL EXTENSION
+23AF;AL # HORIZONTAL LINE EXTENSION
+23B0;AL # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1;AL # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2;AL # SUMMATION TOP
+23B3;AL # SUMMATION BOTTOM
+23B4;OP # TOP SQUARE BRACKET
+23B5;CL # BOTTOM SQUARE BRACKET
+23B6;QU # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7;AL # RADICAL SYMBOL BOTTOM
+23B8;AL # LEFT VERTICAL BOX LINE
+23B9;AL # RIGHT VERTICAL BOX LINE
+23BA;AL # HORIZONTAL SCAN LINE-1
+23BB;AL # HORIZONTAL SCAN LINE-3
+23BC;AL # HORIZONTAL SCAN LINE-7
+23BD;AL # HORIZONTAL SCAN LINE-9
+23BE;AL # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF;AL # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0;AL # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1;AL # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2;AL # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3;AL # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4;AL # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5;AL # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6;AL # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7;AL # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8;AL # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9;AL # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA;AL # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB;AL # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC;AL # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD;AL # SQUARE FOOT
+23CE;AL # RETURN SYMBOL
+23CF;AL # EJECT SYMBOL
+23D0;AL # VERTICAL LINE EXTENSION
+23D1;AL # METRICAL BREVE
+23D2;AL # METRICAL LONG OVER SHORT
+23D3;AL # METRICAL SHORT OVER LONG
+23D4;AL # METRICAL LONG OVER TWO SHORTS
+23D5;AL # METRICAL TWO SHORTS OVER LONG
+23D6;AL # METRICAL TWO SHORTS JOINED
+23D7;AL # METRICAL TRISEME
+23D8;AL # METRICAL TETRASEME
+23D9;AL # METRICAL PENTASEME
+23DA;AL # EARTH GROUND
+23DB;AL # FUSE
+2400;AL # SYMBOL FOR NULL
+2401;AL # SYMBOL FOR START OF HEADING
+2402;AL # SYMBOL FOR START OF TEXT
+2403;AL # SYMBOL FOR END OF TEXT
+2404;AL # SYMBOL FOR END OF TRANSMISSION
+2405;AL # SYMBOL FOR ENQUIRY
+2406;AL # SYMBOL FOR ACKNOWLEDGE
+2407;AL # SYMBOL FOR BELL
+2408;AL # SYMBOL FOR BACKSPACE
+2409;AL # SYMBOL FOR HORIZONTAL TABULATION
+240A;AL # SYMBOL FOR LINE FEED
+240B;AL # SYMBOL FOR VERTICAL TABULATION
+240C;AL # SYMBOL FOR FORM FEED
+240D;AL # SYMBOL FOR CARRIAGE RETURN
+240E;AL # SYMBOL FOR SHIFT OUT
+240F;AL # SYMBOL FOR SHIFT IN
+2410;AL # SYMBOL FOR DATA LINK ESCAPE
+2411;AL # SYMBOL FOR DEVICE CONTROL ONE
+2412;AL # SYMBOL FOR DEVICE CONTROL TWO
+2413;AL # SYMBOL FOR DEVICE CONTROL THREE
+2414;AL # SYMBOL FOR DEVICE CONTROL FOUR
+2415;AL # SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416;AL # SYMBOL FOR SYNCHRONOUS IDLE
+2417;AL # SYMBOL FOR END OF TRANSMISSION BLOCK
+2418;AL # SYMBOL FOR CANCEL
+2419;AL # SYMBOL FOR END OF MEDIUM
+241A;AL # SYMBOL FOR SUBSTITUTE
+241B;AL # SYMBOL FOR ESCAPE
+241C;AL # SYMBOL FOR FILE SEPARATOR
+241D;AL # SYMBOL FOR GROUP SEPARATOR
+241E;AL # SYMBOL FOR RECORD SEPARATOR
+241F;AL # SYMBOL FOR UNIT SEPARATOR
+2420;AL # SYMBOL FOR SPACE
+2421;AL # SYMBOL FOR DELETE
+2422;AL # BLANK SYMBOL
+2423;AL # OPEN BOX
+2424;AL # SYMBOL FOR NEWLINE
+2425;AL # SYMBOL FOR DELETE FORM TWO
+2426;AL # SYMBOL FOR SUBSTITUTE FORM TWO
+2440;AL # OCR HOOK
+2441;AL # OCR CHAIR
+2442;AL # OCR FORK
+2443;AL # OCR INVERTED FORK
+2444;AL # OCR BELT BUCKLE
+2445;AL # OCR BOW TIE
+2446;AL # OCR BRANCH BANK IDENTIFICATION
+2447;AL # OCR AMOUNT OF CHECK
+2448;AL # OCR DASH
+2449;AL # OCR CUSTOMER ACCOUNT NUMBER
+244A;AL # OCR DOUBLE BACKSLASH
+2460;AI # CIRCLED DIGIT ONE
+2461;AI # CIRCLED DIGIT TWO
+2462;AI # CIRCLED DIGIT THREE
+2463;AI # CIRCLED DIGIT FOUR
+2464;AI # CIRCLED DIGIT FIVE
+2465;AI # CIRCLED DIGIT SIX
+2466;AI # CIRCLED DIGIT SEVEN
+2467;AI # CIRCLED DIGIT EIGHT
+2468;AI # CIRCLED DIGIT NINE
+2469;AI # CIRCLED NUMBER TEN
+246A;AI # CIRCLED NUMBER ELEVEN
+246B;AI # CIRCLED NUMBER TWELVE
+246C;AI # CIRCLED NUMBER THIRTEEN
+246D;AI # CIRCLED NUMBER FOURTEEN
+246E;AI # CIRCLED NUMBER FIFTEEN
+246F;AI # CIRCLED NUMBER SIXTEEN
+2470;AI # CIRCLED NUMBER SEVENTEEN
+2471;AI # CIRCLED NUMBER EIGHTEEN
+2472;AI # CIRCLED NUMBER NINETEEN
+2473;AI # CIRCLED NUMBER TWENTY
+2474;AI # PARENTHESIZED DIGIT ONE
+2475;AI # PARENTHESIZED DIGIT TWO
+2476;AI # PARENTHESIZED DIGIT THREE
+2477;AI # PARENTHESIZED DIGIT FOUR
+2478;AI # PARENTHESIZED DIGIT FIVE
+2479;AI # PARENTHESIZED DIGIT SIX
+247A;AI # PARENTHESIZED DIGIT SEVEN
+247B;AI # PARENTHESIZED DIGIT EIGHT
+247C;AI # PARENTHESIZED DIGIT NINE
+247D;AI # PARENTHESIZED NUMBER TEN
+247E;AI # PARENTHESIZED NUMBER ELEVEN
+247F;AI # PARENTHESIZED NUMBER TWELVE
+2480;AI # PARENTHESIZED NUMBER THIRTEEN
+2481;AI # PARENTHESIZED NUMBER FOURTEEN
+2482;AI # PARENTHESIZED NUMBER FIFTEEN
+2483;AI # PARENTHESIZED NUMBER SIXTEEN
+2484;AI # PARENTHESIZED NUMBER SEVENTEEN
+2485;AI # PARENTHESIZED NUMBER EIGHTEEN
+2486;AI # PARENTHESIZED NUMBER NINETEEN
+2487;AI # PARENTHESIZED NUMBER TWENTY
+2488;AI # DIGIT ONE FULL STOP
+2489;AI # DIGIT TWO FULL STOP
+248A;AI # DIGIT THREE FULL STOP
+248B;AI # DIGIT FOUR FULL STOP
+248C;AI # DIGIT FIVE FULL STOP
+248D;AI # DIGIT SIX FULL STOP
+248E;AI # DIGIT SEVEN FULL STOP
+248F;AI # DIGIT EIGHT FULL STOP
+2490;AI # DIGIT NINE FULL STOP
+2491;AI # NUMBER TEN FULL STOP
+2492;AI # NUMBER ELEVEN FULL STOP
+2493;AI # NUMBER TWELVE FULL STOP
+2494;AI # NUMBER THIRTEEN FULL STOP
+2495;AI # NUMBER FOURTEEN FULL STOP
+2496;AI # NUMBER FIFTEEN FULL STOP
+2497;AI # NUMBER SIXTEEN FULL STOP
+2498;AI # NUMBER SEVENTEEN FULL STOP
+2499;AI # NUMBER EIGHTEEN FULL STOP
+249A;AI # NUMBER NINETEEN FULL STOP
+249B;AI # NUMBER TWENTY FULL STOP
+249C;AI # PARENTHESIZED LATIN SMALL LETTER A
+249D;AI # PARENTHESIZED LATIN SMALL LETTER B
+249E;AI # PARENTHESIZED LATIN SMALL LETTER C
+249F;AI # PARENTHESIZED LATIN SMALL LETTER D
+24A0;AI # PARENTHESIZED LATIN SMALL LETTER E
+24A1;AI # PARENTHESIZED LATIN SMALL LETTER F
+24A2;AI # PARENTHESIZED LATIN SMALL LETTER G
+24A3;AI # PARENTHESIZED LATIN SMALL LETTER H
+24A4;AI # PARENTHESIZED LATIN SMALL LETTER I
+24A5;AI # PARENTHESIZED LATIN SMALL LETTER J
+24A6;AI # PARENTHESIZED LATIN SMALL LETTER K
+24A7;AI # PARENTHESIZED LATIN SMALL LETTER L
+24A8;AI # PARENTHESIZED LATIN SMALL LETTER M
+24A9;AI # PARENTHESIZED LATIN SMALL LETTER N
+24AA;AI # PARENTHESIZED LATIN SMALL LETTER O
+24AB;AI # PARENTHESIZED LATIN SMALL LETTER P
+24AC;AI # PARENTHESIZED LATIN SMALL LETTER Q
+24AD;AI # PARENTHESIZED LATIN SMALL LETTER R
+24AE;AI # PARENTHESIZED LATIN SMALL LETTER S
+24AF;AI # PARENTHESIZED LATIN SMALL LETTER T
+24B0;AI # PARENTHESIZED LATIN SMALL LETTER U
+24B1;AI # PARENTHESIZED LATIN SMALL LETTER V
+24B2;AI # PARENTHESIZED LATIN SMALL LETTER W
+24B3;AI # PARENTHESIZED LATIN SMALL LETTER X
+24B4;AI # PARENTHESIZED LATIN SMALL LETTER Y
+24B5;AI # PARENTHESIZED LATIN SMALL LETTER Z
+24B6;AI # CIRCLED LATIN CAPITAL LETTER A
+24B7;AI # CIRCLED LATIN CAPITAL LETTER B
+24B8;AI # CIRCLED LATIN CAPITAL LETTER C
+24B9;AI # CIRCLED LATIN CAPITAL LETTER D
+24BA;AI # CIRCLED LATIN CAPITAL LETTER E
+24BB;AI # CIRCLED LATIN CAPITAL LETTER F
+24BC;AI # CIRCLED LATIN CAPITAL LETTER G
+24BD;AI # CIRCLED LATIN CAPITAL LETTER H
+24BE;AI # CIRCLED LATIN CAPITAL LETTER I
+24BF;AI # CIRCLED LATIN CAPITAL LETTER J
+24C0;AI # CIRCLED LATIN CAPITAL LETTER K
+24C1;AI # CIRCLED LATIN CAPITAL LETTER L
+24C2;AI # CIRCLED LATIN CAPITAL LETTER M
+24C3;AI # CIRCLED LATIN CAPITAL LETTER N
+24C4;AI # CIRCLED LATIN CAPITAL LETTER O
+24C5;AI # CIRCLED LATIN CAPITAL LETTER P
+24C6;AI # CIRCLED LATIN CAPITAL LETTER Q
+24C7;AI # CIRCLED LATIN CAPITAL LETTER R
+24C8;AI # CIRCLED LATIN CAPITAL LETTER S
+24C9;AI # CIRCLED LATIN CAPITAL LETTER T
+24CA;AI # CIRCLED LATIN CAPITAL LETTER U
+24CB;AI # CIRCLED LATIN CAPITAL LETTER V
+24CC;AI # CIRCLED LATIN CAPITAL LETTER W
+24CD;AI # CIRCLED LATIN CAPITAL LETTER X
+24CE;AI # CIRCLED LATIN CAPITAL LETTER Y
+24CF;AI # CIRCLED LATIN CAPITAL LETTER Z
+24D0;AI # CIRCLED LATIN SMALL LETTER A
+24D1;AI # CIRCLED LATIN SMALL LETTER B
+24D2;AI # CIRCLED LATIN SMALL LETTER C
+24D3;AI # CIRCLED LATIN SMALL LETTER D
+24D4;AI # CIRCLED LATIN SMALL LETTER E
+24D5;AI # CIRCLED LATIN SMALL LETTER F
+24D6;AI # CIRCLED LATIN SMALL LETTER G
+24D7;AI # CIRCLED LATIN SMALL LETTER H
+24D8;AI # CIRCLED LATIN SMALL LETTER I
+24D9;AI # CIRCLED LATIN SMALL LETTER J
+24DA;AI # CIRCLED LATIN SMALL LETTER K
+24DB;AI # CIRCLED LATIN SMALL LETTER L
+24DC;AI # CIRCLED LATIN SMALL LETTER M
+24DD;AI # CIRCLED LATIN SMALL LETTER N
+24DE;AI # CIRCLED LATIN SMALL LETTER O
+24DF;AI # CIRCLED LATIN SMALL LETTER P
+24E0;AI # CIRCLED LATIN SMALL LETTER Q
+24E1;AI # CIRCLED LATIN SMALL LETTER R
+24E2;AI # CIRCLED LATIN SMALL LETTER S
+24E3;AI # CIRCLED LATIN SMALL LETTER T
+24E4;AI # CIRCLED LATIN SMALL LETTER U
+24E5;AI # CIRCLED LATIN SMALL LETTER V
+24E6;AI # CIRCLED LATIN SMALL LETTER W
+24E7;AI # CIRCLED LATIN SMALL LETTER X
+24E8;AI # CIRCLED LATIN SMALL LETTER Y
+24E9;AI # CIRCLED LATIN SMALL LETTER Z
+24EA;AI # CIRCLED DIGIT ZERO
+24EB;AI # NEGATIVE CIRCLED NUMBER ELEVEN
+24EC;AI # NEGATIVE CIRCLED NUMBER TWELVE
+24ED;AI # NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE;AI # NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF;AI # NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0;AI # NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1;AI # NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2;AI # NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3;AI # NEGATIVE CIRCLED NUMBER NINETEEN
+24F4;AI # NEGATIVE CIRCLED NUMBER TWENTY
+24F5;AI # DOUBLE CIRCLED DIGIT ONE
+24F6;AI # DOUBLE CIRCLED DIGIT TWO
+24F7;AI # DOUBLE CIRCLED DIGIT THREE
+24F8;AI # DOUBLE CIRCLED DIGIT FOUR
+24F9;AI # DOUBLE CIRCLED DIGIT FIVE
+24FA;AI # DOUBLE CIRCLED DIGIT SIX
+24FB;AI # DOUBLE CIRCLED DIGIT SEVEN
+24FC;AI # DOUBLE CIRCLED DIGIT EIGHT
+24FD;AI # DOUBLE CIRCLED DIGIT NINE
+24FE;AI # DOUBLE CIRCLED NUMBER TEN
+24FF;AL # NEGATIVE CIRCLED DIGIT ZERO
+2500;AI # BOX DRAWINGS LIGHT HORIZONTAL
+2501;AI # BOX DRAWINGS HEAVY HORIZONTAL
+2502;AI # BOX DRAWINGS LIGHT VERTICAL
+2503;AI # BOX DRAWINGS HEAVY VERTICAL
+2504;AI # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505;AI # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506;AI # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507;AI # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508;AI # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509;AI # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A;AI # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B;AI # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C;AI # BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D;AI # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E;AI # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F;AI # BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510;AI # BOX DRAWINGS LIGHT DOWN AND LEFT
+2511;AI # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512;AI # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513;AI # BOX DRAWINGS HEAVY DOWN AND LEFT
+2514;AI # BOX DRAWINGS LIGHT UP AND RIGHT
+2515;AI # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516;AI # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517;AI # BOX DRAWINGS HEAVY UP AND RIGHT
+2518;AI # BOX DRAWINGS LIGHT UP AND LEFT
+2519;AI # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A;AI # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B;AI # BOX DRAWINGS HEAVY UP AND LEFT
+251C;AI # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D;AI # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E;AI # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F;AI # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520;AI # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521;AI # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522;AI # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523;AI # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524;AI # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525;AI # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526;AI # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527;AI # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528;AI # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529;AI # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A;AI # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B;AI # BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C;AI # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D;AI # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E;AI # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F;AI # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530;AI # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531;AI # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532;AI # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533;AI # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534;AI # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535;AI # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536;AI # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537;AI # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538;AI # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539;AI # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A;AI # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B;AI # BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C;AI # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D;AI # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E;AI # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F;AI # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540;AI # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541;AI # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542;AI # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543;AI # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544;AI # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545;AI # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546;AI # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547;AI # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548;AI # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549;AI # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A;AI # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B;AI # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C;AL # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D;AL # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E;AL # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F;AL # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550;AI # BOX DRAWINGS DOUBLE HORIZONTAL
+2551;AI # BOX DRAWINGS DOUBLE VERTICAL
+2552;AI # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553;AI # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554;AI # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555;AI # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556;AI # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557;AI # BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558;AI # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559;AI # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A;AI # BOX DRAWINGS DOUBLE UP AND RIGHT
+255B;AI # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C;AI # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D;AI # BOX DRAWINGS DOUBLE UP AND LEFT
+255E;AI # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F;AI # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560;AI # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561;AI # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562;AI # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563;AI # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564;AI # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565;AI # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566;AI # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567;AI # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568;AI # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569;AI # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A;AI # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B;AI # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C;AI # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D;AI # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E;AI # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F;AI # BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570;AI # BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571;AI # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572;AI # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573;AI # BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574;AI # BOX DRAWINGS LIGHT LEFT
+2575;AL # BOX DRAWINGS LIGHT UP
+2576;AL # BOX DRAWINGS LIGHT RIGHT
+2577;AL # BOX DRAWINGS LIGHT DOWN
+2578;AL # BOX DRAWINGS HEAVY LEFT
+2579;AL # BOX DRAWINGS HEAVY UP
+257A;AL # BOX DRAWINGS HEAVY RIGHT
+257B;AL # BOX DRAWINGS HEAVY DOWN
+257C;AL # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D;AL # BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E;AL # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F;AL # BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580;AI # UPPER HALF BLOCK
+2581;AI # LOWER ONE EIGHTH BLOCK
+2582;AI # LOWER ONE QUARTER BLOCK
+2583;AI # LOWER THREE EIGHTHS BLOCK
+2584;AI # LOWER HALF BLOCK
+2585;AI # LOWER FIVE EIGHTHS BLOCK
+2586;AI # LOWER THREE QUARTERS BLOCK
+2587;AI # LOWER SEVEN EIGHTHS BLOCK
+2588;AI # FULL BLOCK
+2589;AI # LEFT SEVEN EIGHTHS BLOCK
+258A;AI # LEFT THREE QUARTERS BLOCK
+258B;AI # LEFT FIVE EIGHTHS BLOCK
+258C;AI # LEFT HALF BLOCK
+258D;AI # LEFT THREE EIGHTHS BLOCK
+258E;AI # LEFT ONE QUARTER BLOCK
+258F;AI # LEFT ONE EIGHTH BLOCK
+2590;AL # RIGHT HALF BLOCK
+2591;AL # LIGHT SHADE
+2592;AI # MEDIUM SHADE
+2593;AI # DARK SHADE
+2594;AI # UPPER ONE EIGHTH BLOCK
+2595;AI # RIGHT ONE EIGHTH BLOCK
+2596;AL # QUADRANT LOWER LEFT
+2597;AL # QUADRANT LOWER RIGHT
+2598;AL # QUADRANT UPPER LEFT
+2599;AL # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A;AL # QUADRANT UPPER LEFT AND LOWER RIGHT
+259B;AL # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C;AL # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D;AL # QUADRANT UPPER RIGHT
+259E;AL # QUADRANT UPPER RIGHT AND LOWER LEFT
+259F;AL # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0;AI # BLACK SQUARE
+25A1;AI # WHITE SQUARE
+25A2;AL # WHITE SQUARE WITH ROUNDED CORNERS
+25A3;AI # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4;AI # SQUARE WITH HORIZONTAL FILL
+25A5;AI # SQUARE WITH VERTICAL FILL
+25A6;AI # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7;AI # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8;AI # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9;AI # SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA;AL # BLACK SMALL SQUARE
+25AB;AL # WHITE SMALL SQUARE
+25AC;AL # BLACK RECTANGLE
+25AD;AL # WHITE RECTANGLE
+25AE;AL # BLACK VERTICAL RECTANGLE
+25AF;AL # WHITE VERTICAL RECTANGLE
+25B0;AL # BLACK PARALLELOGRAM
+25B1;AL # WHITE PARALLELOGRAM
+25B2;AI # BLACK UP-POINTING TRIANGLE
+25B3;AI # WHITE UP-POINTING TRIANGLE
+25B4;AL # BLACK UP-POINTING SMALL TRIANGLE
+25B5;AL # WHITE UP-POINTING SMALL TRIANGLE
+25B6;AI # BLACK RIGHT-POINTING TRIANGLE
+25B7;AI # WHITE RIGHT-POINTING TRIANGLE
+25B8;AL # BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9;AL # WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA;AL # BLACK RIGHT-POINTING POINTER
+25BB;AL # WHITE RIGHT-POINTING POINTER
+25BC;AI # BLACK DOWN-POINTING TRIANGLE
+25BD;AI # WHITE DOWN-POINTING TRIANGLE
+25BE;AL # BLACK DOWN-POINTING SMALL TRIANGLE
+25BF;AL # WHITE DOWN-POINTING SMALL TRIANGLE
+25C0;AI # BLACK LEFT-POINTING TRIANGLE
+25C1;AI # WHITE LEFT-POINTING TRIANGLE
+25C2;AL # BLACK LEFT-POINTING SMALL TRIANGLE
+25C3;AL # WHITE LEFT-POINTING SMALL TRIANGLE
+25C4;AL # BLACK LEFT-POINTING POINTER
+25C5;AL # WHITE LEFT-POINTING POINTER
+25C6;AI # BLACK DIAMOND
+25C7;AI # WHITE DIAMOND
+25C8;AI # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9;AL # FISHEYE
+25CA;AL # LOZENGE
+25CB;AI # WHITE CIRCLE
+25CC;AL # DOTTED CIRCLE
+25CD;AL # CIRCLE WITH VERTICAL FILL
+25CE;AI # BULLSEYE
+25CF;AI # BLACK CIRCLE
+25D0;AI # CIRCLE WITH LEFT HALF BLACK
+25D1;AI # CIRCLE WITH RIGHT HALF BLACK
+25D2;AL # CIRCLE WITH LOWER HALF BLACK
+25D3;AL # CIRCLE WITH UPPER HALF BLACK
+25D4;AL # CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5;AL # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6;AL # LEFT HALF BLACK CIRCLE
+25D7;AL # RIGHT HALF BLACK CIRCLE
+25D8;AL # INVERSE BULLET
+25D9;AL # INVERSE WHITE CIRCLE
+25DA;AL # UPPER HALF INVERSE WHITE CIRCLE
+25DB;AL # LOWER HALF INVERSE WHITE CIRCLE
+25DC;AL # UPPER LEFT QUADRANT CIRCULAR ARC
+25DD;AL # UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE;AL # LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF;AL # LOWER LEFT QUADRANT CIRCULAR ARC
+25E0;AL # UPPER HALF CIRCLE
+25E1;AL # LOWER HALF CIRCLE
+25E2;AI # BLACK LOWER RIGHT TRIANGLE
+25E3;AI # BLACK LOWER LEFT TRIANGLE
+25E4;AI # BLACK UPPER LEFT TRIANGLE
+25E5;AI # BLACK UPPER RIGHT TRIANGLE
+25E6;AL # WHITE BULLET
+25E7;AL # SQUARE WITH LEFT HALF BLACK
+25E8;AL # SQUARE WITH RIGHT HALF BLACK
+25E9;AL # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA;AL # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB;AL # WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC;AL # WHITE UP-POINTING TRIANGLE WITH DOT
+25ED;AL # UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE;AL # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF;AI # LARGE CIRCLE
+25F0;AL # WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1;AL # WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2;AL # WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3;AL # WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4;AL # WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5;AL # WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6;AL # WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7;AL # WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8;AL # UPPER LEFT TRIANGLE
+25F9;AL # UPPER RIGHT TRIANGLE
+25FA;AL # LOWER LEFT TRIANGLE
+25FB;AL # WHITE MEDIUM SQUARE
+25FC;AL # BLACK MEDIUM SQUARE
+25FD;AL # WHITE MEDIUM SMALL SQUARE
+25FE;AL # BLACK MEDIUM SMALL SQUARE
+25FF;AL # LOWER RIGHT TRIANGLE
+2600;AL # BLACK SUN WITH RAYS
+2601;AL # CLOUD
+2602;AL # UMBRELLA
+2603;AL # SNOWMAN
+2604;AL # COMET
+2605;AI # BLACK STAR
+2606;AI # WHITE STAR
+2607;AL # LIGHTNING
+2608;AL # THUNDERSTORM
+2609;AI # SUN
+260A;AL # ASCENDING NODE
+260B;AL # DESCENDING NODE
+260C;AL # CONJUNCTION
+260D;AL # OPPOSITION
+260E;AI # BLACK TELEPHONE
+260F;AI # WHITE TELEPHONE
+2610;AL # BALLOT BOX
+2611;AL # BALLOT BOX WITH CHECK
+2612;AL # BALLOT BOX WITH X
+2613;AL # SALTIRE
+2614;AI # UMBRELLA WITH RAIN DROPS
+2615;AI # HOT BEVERAGE
+2616;AI # WHITE SHOGI PIECE
+2617;AI # BLACK SHOGI PIECE
+2618;AL # SHAMROCK
+2619;AL # REVERSED ROTATED FLORAL HEART BULLET
+261A;AL # BLACK LEFT POINTING INDEX
+261B;AL # BLACK RIGHT POINTING INDEX
+261C;AI # WHITE LEFT POINTING INDEX
+261D;AL # WHITE UP POINTING INDEX
+261E;AI # WHITE RIGHT POINTING INDEX
+261F;AL # WHITE DOWN POINTING INDEX
+2620;AL # SKULL AND CROSSBONES
+2621;AL # CAUTION SIGN
+2622;AL # RADIOACTIVE SIGN
+2623;AL # BIOHAZARD SIGN
+2624;AL # CADUCEUS
+2625;AL # ANKH
+2626;AL # ORTHODOX CROSS
+2627;AL # CHI RHO
+2628;AL # CROSS OF LORRAINE
+2629;AL # CROSS OF JERUSALEM
+262A;AL # STAR AND CRESCENT
+262B;AL # FARSI SYMBOL
+262C;AL # ADI SHAKTI
+262D;AL # HAMMER AND SICKLE
+262E;AL # PEACE SYMBOL
+262F;AL # YIN YANG
+2630;AL # TRIGRAM FOR HEAVEN
+2631;AL # TRIGRAM FOR LAKE
+2632;AL # TRIGRAM FOR FIRE
+2633;AL # TRIGRAM FOR THUNDER
+2634;AL # TRIGRAM FOR WIND
+2635;AL # TRIGRAM FOR WATER
+2636;AL # TRIGRAM FOR MOUNTAIN
+2637;AL # TRIGRAM FOR EARTH
+2638;AL # WHEEL OF DHARMA
+2639;AL # WHITE FROWNING FACE
+263A;AL # WHITE SMILING FACE
+263B;AL # BLACK SMILING FACE
+263C;AL # WHITE SUN WITH RAYS
+263D;AL # FIRST QUARTER MOON
+263E;AL # LAST QUARTER MOON
+263F;AL # MERCURY
+2640;AI # FEMALE SIGN
+2641;AL # EARTH
+2642;AI # MALE SIGN
+2643;AL # JUPITER
+2644;AL # SATURN
+2645;AL # URANUS
+2646;AL # NEPTUNE
+2647;AL # PLUTO
+2648;AL # ARIES
+2649;AL # TAURUS
+264A;AL # GEMINI
+264B;AL # CANCER
+264C;AL # LEO
+264D;AL # VIRGO
+264E;AL # LIBRA
+264F;AL # SCORPIUS
+2650;AL # SAGITTARIUS
+2651;AL # CAPRICORN
+2652;AL # AQUARIUS
+2653;AL # PISCES
+2654;AL # WHITE CHESS KING
+2655;AL # WHITE CHESS QUEEN
+2656;AL # WHITE CHESS ROOK
+2657;AL # WHITE CHESS BISHOP
+2658;AL # WHITE CHESS KNIGHT
+2659;AL # WHITE CHESS PAWN
+265A;AL # BLACK CHESS KING
+265B;AL # BLACK CHESS QUEEN
+265C;AL # BLACK CHESS ROOK
+265D;AL # BLACK CHESS BISHOP
+265E;AL # BLACK CHESS KNIGHT
+265F;AL # BLACK CHESS PAWN
+2660;AI # BLACK SPADE SUIT
+2661;AI # WHITE HEART SUIT
+2662;AL # WHITE DIAMOND SUIT
+2663;AI # BLACK CLUB SUIT
+2664;AI # WHITE SPADE SUIT
+2665;AI # BLACK HEART SUIT
+2666;AL # BLACK DIAMOND SUIT
+2667;AI # WHITE CLUB SUIT
+2668;AI # HOT SPRINGS
+2669;AI # QUARTER NOTE
+266A;AI # EIGHTH NOTE
+266B;AL # BEAMED EIGHTH NOTES
+266C;AI # BEAMED SIXTEENTH NOTES
+266D;AI # MUSIC FLAT SIGN
+266E;AL # MUSIC NATURAL SIGN
+266F;AI # MUSIC SHARP SIGN
+2670;AL # WEST SYRIAC CROSS
+2671;AL # EAST SYRIAC CROSS
+2672;AL # UNIVERSAL RECYCLING SYMBOL
+2673;AL # RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674;AL # RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675;AL # RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676;AL # RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677;AL # RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678;AL # RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679;AL # RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A;AL # RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B;AL # BLACK UNIVERSAL RECYCLING SYMBOL
+267C;AL # RECYCLED PAPER SYMBOL
+267D;AL # PARTIALLY-RECYCLED PAPER SYMBOL
+267E;AL # PERMANENT PAPER SIGN
+267F;AL # WHEELCHAIR SYMBOL
+2680;AL # DIE FACE-1
+2681;AL # DIE FACE-2
+2682;AL # DIE FACE-3
+2683;AL # DIE FACE-4
+2684;AL # DIE FACE-5
+2685;AL # DIE FACE-6
+2686;AL # WHITE CIRCLE WITH DOT RIGHT
+2687;AL # WHITE CIRCLE WITH TWO DOTS
+2688;AL # BLACK CIRCLE WITH WHITE DOT RIGHT
+2689;AL # BLACK CIRCLE WITH TWO WHITE DOTS
+268A;AL # MONOGRAM FOR YANG
+268B;AL # MONOGRAM FOR YIN
+268C;AL # DIGRAM FOR GREATER YANG
+268D;AL # DIGRAM FOR LESSER YIN
+268E;AL # DIGRAM FOR LESSER YANG
+268F;AL # DIGRAM FOR GREATER YIN
+2690;AL # WHITE FLAG
+2691;AL # BLACK FLAG
+2692;AL # HAMMER AND PICK
+2693;AL # ANCHOR
+2694;AL # CROSSED SWORDS
+2695;AL # STAFF OF AESCULAPIUS
+2696;AL # SCALES
+2697;AL # ALEMBIC
+2698;AL # FLOWER
+2699;AL # GEAR
+269A;AL # STAFF OF HERMES
+269B;AL # ATOM SYMBOL
+269C;AL # FLEUR-DE-LIS
+26A0;AL # WARNING SIGN
+26A1;AL # HIGH VOLTAGE SIGN
+26A2;AL # DOUBLED FEMALE SIGN
+26A3;AL # DOUBLED MALE SIGN
+26A4;AL # INTERLOCKED FEMALE AND MALE SIGN
+26A5;AL # MALE AND FEMALE SIGN
+26A6;AL # MALE WITH STROKE SIGN
+26A7;AL # MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8;AL # VERTICAL MALE WITH STROKE SIGN
+26A9;AL # HORIZONTAL MALE WITH STROKE SIGN
+26AA;AL # MEDIUM WHITE CIRCLE
+26AB;AL # MEDIUM BLACK CIRCLE
+26AC;AL # MEDIUM SMALL WHITE CIRCLE
+26AD;AL # MARRIAGE SYMBOL
+26AE;AL # DIVORCE SYMBOL
+26AF;AL # UNMARRIED PARTNERSHIP SYMBOL
+26B0;AL # COFFIN
+26B1;AL # FUNERAL URN
+2701;AL # UPPER BLADE SCISSORS
+2702;AL # BLACK SCISSORS
+2703;AL # LOWER BLADE SCISSORS
+2704;AL # WHITE SCISSORS
+2706;AL # TELEPHONE LOCATION SIGN
+2707;AL # TAPE DRIVE
+2708;AL # AIRPLANE
+2709;AL # ENVELOPE
+270C;AL # VICTORY HAND
+270D;AL # WRITING HAND
+270E;AL # LOWER RIGHT PENCIL
+270F;AL # PENCIL
+2710;AL # UPPER RIGHT PENCIL
+2711;AL # WHITE NIB
+2712;AL # BLACK NIB
+2713;AL # CHECK MARK
+2714;AL # HEAVY CHECK MARK
+2715;AL # MULTIPLICATION X
+2716;AL # HEAVY MULTIPLICATION X
+2717;AL # BALLOT X
+2718;AL # HEAVY BALLOT X
+2719;AL # OUTLINED GREEK CROSS
+271A;AL # HEAVY GREEK CROSS
+271B;AL # OPEN CENTRE CROSS
+271C;AL # HEAVY OPEN CENTRE CROSS
+271D;AL # LATIN CROSS
+271E;AL # SHADOWED WHITE LATIN CROSS
+271F;AL # OUTLINED LATIN CROSS
+2720;AL # MALTESE CROSS
+2721;AL # STAR OF DAVID
+2722;AL # FOUR TEARDROP-SPOKED ASTERISK
+2723;AL # FOUR BALLOON-SPOKED ASTERISK
+2724;AL # HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725;AL # FOUR CLUB-SPOKED ASTERISK
+2726;AL # BLACK FOUR POINTED STAR
+2727;AL # WHITE FOUR POINTED STAR
+2729;AL # STRESS OUTLINED WHITE STAR
+272A;AL # CIRCLED WHITE STAR
+272B;AL # OPEN CENTRE BLACK STAR
+272C;AL # BLACK CENTRE WHITE STAR
+272D;AL # OUTLINED BLACK STAR
+272E;AL # HEAVY OUTLINED BLACK STAR
+272F;AL # PINWHEEL STAR
+2730;AL # SHADOWED WHITE STAR
+2731;AL # HEAVY ASTERISK
+2732;AL # OPEN CENTRE ASTERISK
+2733;AL # EIGHT SPOKED ASTERISK
+2734;AL # EIGHT POINTED BLACK STAR
+2735;AL # EIGHT POINTED PINWHEEL STAR
+2736;AL # SIX POINTED BLACK STAR
+2737;AL # EIGHT POINTED RECTILINEAR BLACK STAR
+2738;AL # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739;AL # TWELVE POINTED BLACK STAR
+273A;AL # SIXTEEN POINTED ASTERISK
+273B;AL # TEARDROP-SPOKED ASTERISK
+273C;AL # OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D;AL # HEAVY TEARDROP-SPOKED ASTERISK
+273E;AL # SIX PETALLED BLACK AND WHITE FLORETTE
+273F;AL # BLACK FLORETTE
+2740;AL # WHITE FLORETTE
+2741;AL # EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742;AL # CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743;AL # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744;AL # SNOWFLAKE
+2745;AL # TIGHT TRIFOLIATE SNOWFLAKE
+2746;AL # HEAVY CHEVRON SNOWFLAKE
+2747;AL # SPARKLE
+2748;AL # HEAVY SPARKLE
+2749;AL # BALLOON-SPOKED ASTERISK
+274A;AL # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B;AL # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D;AL # SHADOWED WHITE CIRCLE
+274F;AL # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750;AL # UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751;AL # LOWER RIGHT SHADOWED WHITE SQUARE
+2752;AL # UPPER RIGHT SHADOWED WHITE SQUARE
+2756;AL # BLACK DIAMOND MINUS WHITE X
+2758;AL # LIGHT VERTICAL BAR
+2759;AL # MEDIUM VERTICAL BAR
+275A;AL # HEAVY VERTICAL BAR
+275B;QU # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C;QU # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D;QU # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E;QU # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761;AL # CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762;EX # HEAVY EXCLAMATION MARK ORNAMENT
+2763;EX # HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764;AL # HEAVY BLACK HEART
+2765;AL # ROTATED HEAVY BLACK HEART BULLET
+2766;AL # FLORAL HEART
+2767;AL # ROTATED FLORAL HEART BULLET
+2768;OP # MEDIUM LEFT PARENTHESIS ORNAMENT
+2769;CL # MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A;OP # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B;CL # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C;OP # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D;CL # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E;OP # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F;CL # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770;OP # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771;CL # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772;OP # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773;CL # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774;OP # MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775;CL # MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776;AI # DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777;AI # DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778;AI # DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779;AI # DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A;AI # DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B;AI # DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C;AI # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D;AI # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E;AI # DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F;AI # DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780;AI # DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781;AI # DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782;AI # DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783;AI # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784;AI # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785;AI # DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786;AI # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787;AI # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788;AI # DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789;AI # DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793;AI # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794;AL # HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798;AL # HEAVY SOUTH EAST ARROW
+2799;AL # HEAVY RIGHTWARDS ARROW
+279A;AL # HEAVY NORTH EAST ARROW
+279B;AL # DRAFTING POINT RIGHTWARDS ARROW
+279C;AL # HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D;AL # TRIANGLE-HEADED RIGHTWARDS ARROW
+279E;AL # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F;AL # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0;AL # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1;AL # BLACK RIGHTWARDS ARROW
+27A2;AL # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3;AL # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4;AL # BLACK RIGHTWARDS ARROWHEAD
+27A5;AL # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6;AL # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7;AL # SQUAT BLACK RIGHTWARDS ARROW
+27A8;AL # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9;AL # RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA;AL # LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB;AL # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC;AL # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD;AL # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE;AL # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF;AL # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1;AL # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2;AL # CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3;AL # WHITE-FEATHERED RIGHTWARDS ARROW
+27B4;AL # BLACK-FEATHERED SOUTH EAST ARROW
+27B5;AL # BLACK-FEATHERED RIGHTWARDS ARROW
+27B6;AL # BLACK-FEATHERED NORTH EAST ARROW
+27B7;AL # HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8;AL # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9;AL # HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA;AL # TEARDROP-BARBED RIGHTWARDS ARROW
+27BB;AL # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC;AL # WEDGE-TAILED RIGHTWARDS ARROW
+27BD;AL # HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE;AL # OPEN-OUTLINED RIGHTWARDS ARROW
+27C0;AL # THREE DIMENSIONAL ANGLE
+27C1;AL # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2;AL # PERPENDICULAR
+27C3;AL # OPEN SUBSET
+27C4;AL # OPEN SUPERSET
+27C5;OP # LEFT S-SHAPED BAG DELIMITER
+27C6;CL # RIGHT S-SHAPED BAG DELIMITER
+27D0;AL # WHITE DIAMOND WITH CENTRED DOT
+27D1;AL # AND WITH DOT
+27D2;AL # ELEMENT OF OPENING UPWARDS
+27D3;AL # LOWER RIGHT CORNER WITH DOT
+27D4;AL # UPPER LEFT CORNER WITH DOT
+27D5;AL # LEFT OUTER JOIN
+27D6;AL # RIGHT OUTER JOIN
+27D7;AL # FULL OUTER JOIN
+27D8;AL # LARGE UP TACK
+27D9;AL # LARGE DOWN TACK
+27DA;AL # LEFT AND RIGHT DOUBLE TURNSTILE
+27DB;AL # LEFT AND RIGHT TACK
+27DC;AL # LEFT MULTIMAP
+27DD;AL # LONG RIGHT TACK
+27DE;AL # LONG LEFT TACK
+27DF;AL # UP TACK WITH CIRCLE ABOVE
+27E0;AL # LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1;AL # WHITE CONCAVE-SIDED DIAMOND
+27E2;AL # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3;AL # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4;AL # WHITE SQUARE WITH LEFTWARDS TICK
+27E5;AL # WHITE SQUARE WITH RIGHTWARDS TICK
+27E6;OP # MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7;CL # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8;OP # MATHEMATICAL LEFT ANGLE BRACKET
+27E9;CL # MATHEMATICAL RIGHT ANGLE BRACKET
+27EA;OP # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB;CL # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0;AL # UPWARDS QUADRUPLE ARROW
+27F1;AL # DOWNWARDS QUADRUPLE ARROW
+27F2;AL # ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3;AL # CLOCKWISE GAPPED CIRCLE ARROW
+27F4;AL # RIGHT ARROW WITH CIRCLED PLUS
+27F5;AL # LONG LEFTWARDS ARROW
+27F6;AL # LONG RIGHTWARDS ARROW
+27F7;AL # LONG LEFT RIGHT ARROW
+27F8;AL # LONG LEFTWARDS DOUBLE ARROW
+27F9;AL # LONG RIGHTWARDS DOUBLE ARROW
+27FA;AL # LONG LEFT RIGHT DOUBLE ARROW
+27FB;AL # LONG LEFTWARDS ARROW FROM BAR
+27FC;AL # LONG RIGHTWARDS ARROW FROM BAR
+27FD;AL # LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE;AL # LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF;AL # LONG RIGHTWARDS SQUIGGLE ARROW
+2800;AL # BRAILLE PATTERN BLANK
+2801;AL # BRAILLE PATTERN DOTS-1
+2802;AL # BRAILLE PATTERN DOTS-2
+2803;AL # BRAILLE PATTERN DOTS-12
+2804;AL # BRAILLE PATTERN DOTS-3
+2805;AL # BRAILLE PATTERN DOTS-13
+2806;AL # BRAILLE PATTERN DOTS-23
+2807;AL # BRAILLE PATTERN DOTS-123
+2808;AL # BRAILLE PATTERN DOTS-4
+2809;AL # BRAILLE PATTERN DOTS-14
+280A;AL # BRAILLE PATTERN DOTS-24
+280B;AL # BRAILLE PATTERN DOTS-124
+280C;AL # BRAILLE PATTERN DOTS-34
+280D;AL # BRAILLE PATTERN DOTS-134
+280E;AL # BRAILLE PATTERN DOTS-234
+280F;AL # BRAILLE PATTERN DOTS-1234
+2810;AL # BRAILLE PATTERN DOTS-5
+2811;AL # BRAILLE PATTERN DOTS-15
+2812;AL # BRAILLE PATTERN DOTS-25
+2813;AL # BRAILLE PATTERN DOTS-125
+2814;AL # BRAILLE PATTERN DOTS-35
+2815;AL # BRAILLE PATTERN DOTS-135
+2816;AL # BRAILLE PATTERN DOTS-235
+2817;AL # BRAILLE PATTERN DOTS-1235
+2818;AL # BRAILLE PATTERN DOTS-45
+2819;AL # BRAILLE PATTERN DOTS-145
+281A;AL # BRAILLE PATTERN DOTS-245
+281B;AL # BRAILLE PATTERN DOTS-1245
+281C;AL # BRAILLE PATTERN DOTS-345
+281D;AL # BRAILLE PATTERN DOTS-1345
+281E;AL # BRAILLE PATTERN DOTS-2345
+281F;AL # BRAILLE PATTERN DOTS-12345
+2820;AL # BRAILLE PATTERN DOTS-6
+2821;AL # BRAILLE PATTERN DOTS-16
+2822;AL # BRAILLE PATTERN DOTS-26
+2823;AL # BRAILLE PATTERN DOTS-126
+2824;AL # BRAILLE PATTERN DOTS-36
+2825;AL # BRAILLE PATTERN DOTS-136
+2826;AL # BRAILLE PATTERN DOTS-236
+2827;AL # BRAILLE PATTERN DOTS-1236
+2828;AL # BRAILLE PATTERN DOTS-46
+2829;AL # BRAILLE PATTERN DOTS-146
+282A;AL # BRAILLE PATTERN DOTS-246
+282B;AL # BRAILLE PATTERN DOTS-1246
+282C;AL # BRAILLE PATTERN DOTS-346
+282D;AL # BRAILLE PATTERN DOTS-1346
+282E;AL # BRAILLE PATTERN DOTS-2346
+282F;AL # BRAILLE PATTERN DOTS-12346
+2830;AL # BRAILLE PATTERN DOTS-56
+2831;AL # BRAILLE PATTERN DOTS-156
+2832;AL # BRAILLE PATTERN DOTS-256
+2833;AL # BRAILLE PATTERN DOTS-1256
+2834;AL # BRAILLE PATTERN DOTS-356
+2835;AL # BRAILLE PATTERN DOTS-1356
+2836;AL # BRAILLE PATTERN DOTS-2356
+2837;AL # BRAILLE PATTERN DOTS-12356
+2838;AL # BRAILLE PATTERN DOTS-456
+2839;AL # BRAILLE PATTERN DOTS-1456
+283A;AL # BRAILLE PATTERN DOTS-2456
+283B;AL # BRAILLE PATTERN DOTS-12456
+283C;AL # BRAILLE PATTERN DOTS-3456
+283D;AL # BRAILLE PATTERN DOTS-13456
+283E;AL # BRAILLE PATTERN DOTS-23456
+283F;AL # BRAILLE PATTERN DOTS-123456
+2840;AL # BRAILLE PATTERN DOTS-7
+2841;AL # BRAILLE PATTERN DOTS-17
+2842;AL # BRAILLE PATTERN DOTS-27
+2843;AL # BRAILLE PATTERN DOTS-127
+2844;AL # BRAILLE PATTERN DOTS-37
+2845;AL # BRAILLE PATTERN DOTS-137
+2846;AL # BRAILLE PATTERN DOTS-237
+2847;AL # BRAILLE PATTERN DOTS-1237
+2848;AL # BRAILLE PATTERN DOTS-47
+2849;AL # BRAILLE PATTERN DOTS-147
+284A;AL # BRAILLE PATTERN DOTS-247
+284B;AL # BRAILLE PATTERN DOTS-1247
+284C;AL # BRAILLE PATTERN DOTS-347
+284D;AL # BRAILLE PATTERN DOTS-1347
+284E;AL # BRAILLE PATTERN DOTS-2347
+284F;AL # BRAILLE PATTERN DOTS-12347
+2850;AL # BRAILLE PATTERN DOTS-57
+2851;AL # BRAILLE PATTERN DOTS-157
+2852;AL # BRAILLE PATTERN DOTS-257
+2853;AL # BRAILLE PATTERN DOTS-1257
+2854;AL # BRAILLE PATTERN DOTS-357
+2855;AL # BRAILLE PATTERN DOTS-1357
+2856;AL # BRAILLE PATTERN DOTS-2357
+2857;AL # BRAILLE PATTERN DOTS-12357
+2858;AL # BRAILLE PATTERN DOTS-457
+2859;AL # BRAILLE PATTERN DOTS-1457
+285A;AL # BRAILLE PATTERN DOTS-2457
+285B;AL # BRAILLE PATTERN DOTS-12457
+285C;AL # BRAILLE PATTERN DOTS-3457
+285D;AL # BRAILLE PATTERN DOTS-13457
+285E;AL # BRAILLE PATTERN DOTS-23457
+285F;AL # BRAILLE PATTERN DOTS-123457
+2860;AL # BRAILLE PATTERN DOTS-67
+2861;AL # BRAILLE PATTERN DOTS-167
+2862;AL # BRAILLE PATTERN DOTS-267
+2863;AL # BRAILLE PATTERN DOTS-1267
+2864;AL # BRAILLE PATTERN DOTS-367
+2865;AL # BRAILLE PATTERN DOTS-1367
+2866;AL # BRAILLE PATTERN DOTS-2367
+2867;AL # BRAILLE PATTERN DOTS-12367
+2868;AL # BRAILLE PATTERN DOTS-467
+2869;AL # BRAILLE PATTERN DOTS-1467
+286A;AL # BRAILLE PATTERN DOTS-2467
+286B;AL # BRAILLE PATTERN DOTS-12467
+286C;AL # BRAILLE PATTERN DOTS-3467
+286D;AL # BRAILLE PATTERN DOTS-13467
+286E;AL # BRAILLE PATTERN DOTS-23467
+286F;AL # BRAILLE PATTERN DOTS-123467
+2870;AL # BRAILLE PATTERN DOTS-567
+2871;AL # BRAILLE PATTERN DOTS-1567
+2872;AL # BRAILLE PATTERN DOTS-2567
+2873;AL # BRAILLE PATTERN DOTS-12567
+2874;AL # BRAILLE PATTERN DOTS-3567
+2875;AL # BRAILLE PATTERN DOTS-13567
+2876;AL # BRAILLE PATTERN DOTS-23567
+2877;AL # BRAILLE PATTERN DOTS-123567
+2878;AL # BRAILLE PATTERN DOTS-4567
+2879;AL # BRAILLE PATTERN DOTS-14567
+287A;AL # BRAILLE PATTERN DOTS-24567
+287B;AL # BRAILLE PATTERN DOTS-124567
+287C;AL # BRAILLE PATTERN DOTS-34567
+287D;AL # BRAILLE PATTERN DOTS-134567
+287E;AL # BRAILLE PATTERN DOTS-234567
+287F;AL # BRAILLE PATTERN DOTS-1234567
+2880;AL # BRAILLE PATTERN DOTS-8
+2881;AL # BRAILLE PATTERN DOTS-18
+2882;AL # BRAILLE PATTERN DOTS-28
+2883;AL # BRAILLE PATTERN DOTS-128
+2884;AL # BRAILLE PATTERN DOTS-38
+2885;AL # BRAILLE PATTERN DOTS-138
+2886;AL # BRAILLE PATTERN DOTS-238
+2887;AL # BRAILLE PATTERN DOTS-1238
+2888;AL # BRAILLE PATTERN DOTS-48
+2889;AL # BRAILLE PATTERN DOTS-148
+288A;AL # BRAILLE PATTERN DOTS-248
+288B;AL # BRAILLE PATTERN DOTS-1248
+288C;AL # BRAILLE PATTERN DOTS-348
+288D;AL # BRAILLE PATTERN DOTS-1348
+288E;AL # BRAILLE PATTERN DOTS-2348
+288F;AL # BRAILLE PATTERN DOTS-12348
+2890;AL # BRAILLE PATTERN DOTS-58
+2891;AL # BRAILLE PATTERN DOTS-158
+2892;AL # BRAILLE PATTERN DOTS-258
+2893;AL # BRAILLE PATTERN DOTS-1258
+2894;AL # BRAILLE PATTERN DOTS-358
+2895;AL # BRAILLE PATTERN DOTS-1358
+2896;AL # BRAILLE PATTERN DOTS-2358
+2897;AL # BRAILLE PATTERN DOTS-12358
+2898;AL # BRAILLE PATTERN DOTS-458
+2899;AL # BRAILLE PATTERN DOTS-1458
+289A;AL # BRAILLE PATTERN DOTS-2458
+289B;AL # BRAILLE PATTERN DOTS-12458
+289C;AL # BRAILLE PATTERN DOTS-3458
+289D;AL # BRAILLE PATTERN DOTS-13458
+289E;AL # BRAILLE PATTERN DOTS-23458
+289F;AL # BRAILLE PATTERN DOTS-123458
+28A0;AL # BRAILLE PATTERN DOTS-68
+28A1;AL # BRAILLE PATTERN DOTS-168
+28A2;AL # BRAILLE PATTERN DOTS-268
+28A3;AL # BRAILLE PATTERN DOTS-1268
+28A4;AL # BRAILLE PATTERN DOTS-368
+28A5;AL # BRAILLE PATTERN DOTS-1368
+28A6;AL # BRAILLE PATTERN DOTS-2368
+28A7;AL # BRAILLE PATTERN DOTS-12368
+28A8;AL # BRAILLE PATTERN DOTS-468
+28A9;AL # BRAILLE PATTERN DOTS-1468
+28AA;AL # BRAILLE PATTERN DOTS-2468
+28AB;AL # BRAILLE PATTERN DOTS-12468
+28AC;AL # BRAILLE PATTERN DOTS-3468
+28AD;AL # BRAILLE PATTERN DOTS-13468
+28AE;AL # BRAILLE PATTERN DOTS-23468
+28AF;AL # BRAILLE PATTERN DOTS-123468
+28B0;AL # BRAILLE PATTERN DOTS-568
+28B1;AL # BRAILLE PATTERN DOTS-1568
+28B2;AL # BRAILLE PATTERN DOTS-2568
+28B3;AL # BRAILLE PATTERN DOTS-12568
+28B4;AL # BRAILLE PATTERN DOTS-3568
+28B5;AL # BRAILLE PATTERN DOTS-13568
+28B6;AL # BRAILLE PATTERN DOTS-23568
+28B7;AL # BRAILLE PATTERN DOTS-123568
+28B8;AL # BRAILLE PATTERN DOTS-4568
+28B9;AL # BRAILLE PATTERN DOTS-14568
+28BA;AL # BRAILLE PATTERN DOTS-24568
+28BB;AL # BRAILLE PATTERN DOTS-124568
+28BC;AL # BRAILLE PATTERN DOTS-34568
+28BD;AL # BRAILLE PATTERN DOTS-134568
+28BE;AL # BRAILLE PATTERN DOTS-234568
+28BF;AL # BRAILLE PATTERN DOTS-1234568
+28C0;AL # BRAILLE PATTERN DOTS-78
+28C1;AL # BRAILLE PATTERN DOTS-178
+28C2;AL # BRAILLE PATTERN DOTS-278
+28C3;AL # BRAILLE PATTERN DOTS-1278
+28C4;AL # BRAILLE PATTERN DOTS-378
+28C5;AL # BRAILLE PATTERN DOTS-1378
+28C6;AL # BRAILLE PATTERN DOTS-2378
+28C7;AL # BRAILLE PATTERN DOTS-12378
+28C8;AL # BRAILLE PATTERN DOTS-478
+28C9;AL # BRAILLE PATTERN DOTS-1478
+28CA;AL # BRAILLE PATTERN DOTS-2478
+28CB;AL # BRAILLE PATTERN DOTS-12478
+28CC;AL # BRAILLE PATTERN DOTS-3478
+28CD;AL # BRAILLE PATTERN DOTS-13478
+28CE;AL # BRAILLE PATTERN DOTS-23478
+28CF;AL # BRAILLE PATTERN DOTS-123478
+28D0;AL # BRAILLE PATTERN DOTS-578
+28D1;AL # BRAILLE PATTERN DOTS-1578
+28D2;AL # BRAILLE PATTERN DOTS-2578
+28D3;AL # BRAILLE PATTERN DOTS-12578
+28D4;AL # BRAILLE PATTERN DOTS-3578
+28D5;AL # BRAILLE PATTERN DOTS-13578
+28D6;AL # BRAILLE PATTERN DOTS-23578
+28D7;AL # BRAILLE PATTERN DOTS-123578
+28D8;AL # BRAILLE PATTERN DOTS-4578
+28D9;AL # BRAILLE PATTERN DOTS-14578
+28DA;AL # BRAILLE PATTERN DOTS-24578
+28DB;AL # BRAILLE PATTERN DOTS-124578
+28DC;AL # BRAILLE PATTERN DOTS-34578
+28DD;AL # BRAILLE PATTERN DOTS-134578
+28DE;AL # BRAILLE PATTERN DOTS-234578
+28DF;AL # BRAILLE PATTERN DOTS-1234578
+28E0;AL # BRAILLE PATTERN DOTS-678
+28E1;AL # BRAILLE PATTERN DOTS-1678
+28E2;AL # BRAILLE PATTERN DOTS-2678
+28E3;AL # BRAILLE PATTERN DOTS-12678
+28E4;AL # BRAILLE PATTERN DOTS-3678
+28E5;AL # BRAILLE PATTERN DOTS-13678
+28E6;AL # BRAILLE PATTERN DOTS-23678
+28E7;AL # BRAILLE PATTERN DOTS-123678
+28E8;AL # BRAILLE PATTERN DOTS-4678
+28E9;AL # BRAILLE PATTERN DOTS-14678
+28EA;AL # BRAILLE PATTERN DOTS-24678
+28EB;AL # BRAILLE PATTERN DOTS-124678
+28EC;AL # BRAILLE PATTERN DOTS-34678
+28ED;AL # BRAILLE PATTERN DOTS-134678
+28EE;AL # BRAILLE PATTERN DOTS-234678
+28EF;AL # BRAILLE PATTERN DOTS-1234678
+28F0;AL # BRAILLE PATTERN DOTS-5678
+28F1;AL # BRAILLE PATTERN DOTS-15678
+28F2;AL # BRAILLE PATTERN DOTS-25678
+28F3;AL # BRAILLE PATTERN DOTS-125678
+28F4;AL # BRAILLE PATTERN DOTS-35678
+28F5;AL # BRAILLE PATTERN DOTS-135678
+28F6;AL # BRAILLE PATTERN DOTS-235678
+28F7;AL # BRAILLE PATTERN DOTS-1235678
+28F8;AL # BRAILLE PATTERN DOTS-45678
+28F9;AL # BRAILLE PATTERN DOTS-145678
+28FA;AL # BRAILLE PATTERN DOTS-245678
+28FB;AL # BRAILLE PATTERN DOTS-1245678
+28FC;AL # BRAILLE PATTERN DOTS-345678
+28FD;AL # BRAILLE PATTERN DOTS-1345678
+28FE;AL # BRAILLE PATTERN DOTS-2345678
+28FF;AL # BRAILLE PATTERN DOTS-12345678
+2900;AL # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901;AL # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902;AL # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903;AL # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904;AL # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905;AL # RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906;AL # LEFTWARDS DOUBLE ARROW FROM BAR
+2907;AL # RIGHTWARDS DOUBLE ARROW FROM BAR
+2908;AL # DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909;AL # UPWARDS ARROW WITH HORIZONTAL STROKE
+290A;AL # UPWARDS TRIPLE ARROW
+290B;AL # DOWNWARDS TRIPLE ARROW
+290C;AL # LEFTWARDS DOUBLE DASH ARROW
+290D;AL # RIGHTWARDS DOUBLE DASH ARROW
+290E;AL # LEFTWARDS TRIPLE DASH ARROW
+290F;AL # RIGHTWARDS TRIPLE DASH ARROW
+2910;AL # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911;AL # RIGHTWARDS ARROW WITH DOTTED STEM
+2912;AL # UPWARDS ARROW TO BAR
+2913;AL # DOWNWARDS ARROW TO BAR
+2914;AL # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915;AL # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916;AL # RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917;AL # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918;AL # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919;AL # LEFTWARDS ARROW-TAIL
+291A;AL # RIGHTWARDS ARROW-TAIL
+291B;AL # LEFTWARDS DOUBLE ARROW-TAIL
+291C;AL # RIGHTWARDS DOUBLE ARROW-TAIL
+291D;AL # LEFTWARDS ARROW TO BLACK DIAMOND
+291E;AL # RIGHTWARDS ARROW TO BLACK DIAMOND
+291F;AL # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920;AL # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921;AL # NORTH WEST AND SOUTH EAST ARROW
+2922;AL # NORTH EAST AND SOUTH WEST ARROW
+2923;AL # NORTH WEST ARROW WITH HOOK
+2924;AL # NORTH EAST ARROW WITH HOOK
+2925;AL # SOUTH EAST ARROW WITH HOOK
+2926;AL # SOUTH WEST ARROW WITH HOOK
+2927;AL # NORTH WEST ARROW AND NORTH EAST ARROW
+2928;AL # NORTH EAST ARROW AND SOUTH EAST ARROW
+2929;AL # SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A;AL # SOUTH WEST ARROW AND NORTH WEST ARROW
+292B;AL # RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C;AL # FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D;AL # SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E;AL # NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F;AL # FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930;AL # RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931;AL # NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932;AL # NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933;AL # WAVE ARROW POINTING DIRECTLY RIGHT
+2934;AL # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935;AL # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936;AL # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937;AL # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938;AL # RIGHT-SIDE ARC CLOCKWISE ARROW
+2939;AL # LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A;AL # TOP ARC ANTICLOCKWISE ARROW
+293B;AL # BOTTOM ARC ANTICLOCKWISE ARROW
+293C;AL # TOP ARC CLOCKWISE ARROW WITH MINUS
+293D;AL # TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E;AL # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F;AL # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940;AL # ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941;AL # CLOCKWISE CLOSED CIRCLE ARROW
+2942;AL # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943;AL # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944;AL # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945;AL # RIGHTWARDS ARROW WITH PLUS BELOW
+2946;AL # LEFTWARDS ARROW WITH PLUS BELOW
+2947;AL # RIGHTWARDS ARROW THROUGH X
+2948;AL # LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949;AL # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A;AL # LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B;AL # LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C;AL # UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D;AL # UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E;AL # LEFT BARB UP RIGHT BARB UP HARPOON
+294F;AL # UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950;AL # LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951;AL # UP BARB LEFT DOWN BARB LEFT HARPOON
+2952;AL # LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953;AL # RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954;AL # UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955;AL # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956;AL # LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957;AL # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958;AL # UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959;AL # DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A;AL # LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B;AL # RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C;AL # UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D;AL # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E;AL # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F;AL # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960;AL # UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961;AL # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962;AL # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963;AL # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964;AL # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965;AL # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966;AL # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967;AL # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968;AL # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969;AL # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A;AL # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B;AL # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C;AL # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D;AL # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E;AL # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F;AL # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970;AL # RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971;AL # EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972;AL # TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973;AL # LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974;AL # RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975;AL # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976;AL # LESS-THAN ABOVE LEFTWARDS ARROW
+2977;AL # LEFTWARDS ARROW THROUGH LESS-THAN
+2978;AL # GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979;AL # SUBSET ABOVE RIGHTWARDS ARROW
+297A;AL # LEFTWARDS ARROW THROUGH SUBSET
+297B;AL # SUPERSET ABOVE LEFTWARDS ARROW
+297C;AL # LEFT FISH TAIL
+297D;AL # RIGHT FISH TAIL
+297E;AL # UP FISH TAIL
+297F;AL # DOWN FISH TAIL
+2980;AL # TRIPLE VERTICAL BAR DELIMITER
+2981;AL # Z NOTATION SPOT
+2982;AL # Z NOTATION TYPE COLON
+2983;OP # LEFT WHITE CURLY BRACKET
+2984;CL # RIGHT WHITE CURLY BRACKET
+2985;OP # LEFT WHITE PARENTHESIS
+2986;CL # RIGHT WHITE PARENTHESIS
+2987;OP # Z NOTATION LEFT IMAGE BRACKET
+2988;CL # Z NOTATION RIGHT IMAGE BRACKET
+2989;OP # Z NOTATION LEFT BINDING BRACKET
+298A;CL # Z NOTATION RIGHT BINDING BRACKET
+298B;OP # LEFT SQUARE BRACKET WITH UNDERBAR
+298C;CL # RIGHT SQUARE BRACKET WITH UNDERBAR
+298D;OP # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E;CL # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F;OP # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990;CL # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991;OP # LEFT ANGLE BRACKET WITH DOT
+2992;CL # RIGHT ANGLE BRACKET WITH DOT
+2993;OP # LEFT ARC LESS-THAN BRACKET
+2994;CL # RIGHT ARC GREATER-THAN BRACKET
+2995;OP # DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996;CL # DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997;OP # LEFT BLACK TORTOISE SHELL BRACKET
+2998;CL # RIGHT BLACK TORTOISE SHELL BRACKET
+2999;AL # DOTTED FENCE
+299A;AL # VERTICAL ZIGZAG LINE
+299B;AL # MEASURED ANGLE OPENING LEFT
+299C;AL # RIGHT ANGLE VARIANT WITH SQUARE
+299D;AL # MEASURED RIGHT ANGLE WITH DOT
+299E;AL # ANGLE WITH S INSIDE
+299F;AL # ACUTE ANGLE
+29A0;AL # SPHERICAL ANGLE OPENING LEFT
+29A1;AL # SPHERICAL ANGLE OPENING UP
+29A2;AL # TURNED ANGLE
+29A3;AL # REVERSED ANGLE
+29A4;AL # ANGLE WITH UNDERBAR
+29A5;AL # REVERSED ANGLE WITH UNDERBAR
+29A6;AL # OBLIQUE ANGLE OPENING UP
+29A7;AL # OBLIQUE ANGLE OPENING DOWN
+29A8;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF;AL # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0;AL # REVERSED EMPTY SET
+29B1;AL # EMPTY SET WITH OVERBAR
+29B2;AL # EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3;AL # EMPTY SET WITH RIGHT ARROW ABOVE
+29B4;AL # EMPTY SET WITH LEFT ARROW ABOVE
+29B5;AL # CIRCLE WITH HORIZONTAL BAR
+29B6;AL # CIRCLED VERTICAL BAR
+29B7;AL # CIRCLED PARALLEL
+29B8;AL # CIRCLED REVERSE SOLIDUS
+29B9;AL # CIRCLED PERPENDICULAR
+29BA;AL # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB;AL # CIRCLE WITH SUPERIMPOSED X
+29BC;AL # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD;AL # UP ARROW THROUGH CIRCLE
+29BE;AL # CIRCLED WHITE BULLET
+29BF;AL # CIRCLED BULLET
+29C0;AL # CIRCLED LESS-THAN
+29C1;AL # CIRCLED GREATER-THAN
+29C2;AL # CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3;AL # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4;AL # SQUARED RISING DIAGONAL SLASH
+29C5;AL # SQUARED FALLING DIAGONAL SLASH
+29C6;AL # SQUARED ASTERISK
+29C7;AL # SQUARED SMALL CIRCLE
+29C8;AL # SQUARED SQUARE
+29C9;AL # TWO JOINED SQUARES
+29CA;AL # TRIANGLE WITH DOT ABOVE
+29CB;AL # TRIANGLE WITH UNDERBAR
+29CC;AL # S IN TRIANGLE
+29CD;AL # TRIANGLE WITH SERIFS AT BOTTOM
+29CE;AL # RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF;AL # LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0;AL # VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1;AL # BOWTIE WITH LEFT HALF BLACK
+29D2;AL # BOWTIE WITH RIGHT HALF BLACK
+29D3;AL # BLACK BOWTIE
+29D4;AL # TIMES WITH LEFT HALF BLACK
+29D5;AL # TIMES WITH RIGHT HALF BLACK
+29D6;AL # WHITE HOURGLASS
+29D7;AL # BLACK HOURGLASS
+29D8;OP # LEFT WIGGLY FENCE
+29D9;CL # RIGHT WIGGLY FENCE
+29DA;OP # LEFT DOUBLE WIGGLY FENCE
+29DB;CL # RIGHT DOUBLE WIGGLY FENCE
+29DC;AL # INCOMPLETE INFINITY
+29DD;AL # TIE OVER INFINITY
+29DE;AL # INFINITY NEGATED WITH VERTICAL BAR
+29DF;AL # DOUBLE-ENDED MULTIMAP
+29E0;AL # SQUARE WITH CONTOURED OUTLINE
+29E1;AL # INCREASES AS
+29E2;AL # SHUFFLE PRODUCT
+29E3;AL # EQUALS SIGN AND SLANTED PARALLEL
+29E4;AL # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5;AL # IDENTICAL TO AND SLANTED PARALLEL
+29E6;AL # GLEICH STARK
+29E7;AL # THERMODYNAMIC
+29E8;AL # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9;AL # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA;AL # BLACK DIAMOND WITH DOWN ARROW
+29EB;AL # BLACK LOZENGE
+29EC;AL # WHITE CIRCLE WITH DOWN ARROW
+29ED;AL # BLACK CIRCLE WITH DOWN ARROW
+29EE;AL # ERROR-BARRED WHITE SQUARE
+29EF;AL # ERROR-BARRED BLACK SQUARE
+29F0;AL # ERROR-BARRED WHITE DIAMOND
+29F1;AL # ERROR-BARRED BLACK DIAMOND
+29F2;AL # ERROR-BARRED WHITE CIRCLE
+29F3;AL # ERROR-BARRED BLACK CIRCLE
+29F4;AL # RULE-DELAYED
+29F5;AL # REVERSE SOLIDUS OPERATOR
+29F6;AL # SOLIDUS WITH OVERBAR
+29F7;AL # REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8;AL # BIG SOLIDUS
+29F9;AL # BIG REVERSE SOLIDUS
+29FA;AL # DOUBLE PLUS
+29FB;AL # TRIPLE PLUS
+29FC;OP # LEFT-POINTING CURVED ANGLE BRACKET
+29FD;CL # RIGHT-POINTING CURVED ANGLE BRACKET
+29FE;AL # TINY
+29FF;AL # MINY
+2A00;AL # N-ARY CIRCLED DOT OPERATOR
+2A01;AL # N-ARY CIRCLED PLUS OPERATOR
+2A02;AL # N-ARY CIRCLED TIMES OPERATOR
+2A03;AL # N-ARY UNION OPERATOR WITH DOT
+2A04;AL # N-ARY UNION OPERATOR WITH PLUS
+2A05;AL # N-ARY SQUARE INTERSECTION OPERATOR
+2A06;AL # N-ARY SQUARE UNION OPERATOR
+2A07;AL # TWO LOGICAL AND OPERATOR
+2A08;AL # TWO LOGICAL OR OPERATOR
+2A09;AL # N-ARY TIMES OPERATOR
+2A0A;AL # MODULO TWO SUM
+2A0B;AL # SUMMATION WITH INTEGRAL
+2A0C;AL # QUADRUPLE INTEGRAL OPERATOR
+2A0D;AL # FINITE PART INTEGRAL
+2A0E;AL # INTEGRAL WITH DOUBLE STROKE
+2A0F;AL # INTEGRAL AVERAGE WITH SLASH
+2A10;AL # CIRCULATION FUNCTION
+2A11;AL # ANTICLOCKWISE INTEGRATION
+2A12;AL # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13;AL # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14;AL # LINE INTEGRATION NOT INCLUDING THE POLE
+2A15;AL # INTEGRAL AROUND A POINT OPERATOR
+2A16;AL # QUATERNION INTEGRAL OPERATOR
+2A17;AL # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18;AL # INTEGRAL WITH TIMES SIGN
+2A19;AL # INTEGRAL WITH INTERSECTION
+2A1A;AL # INTEGRAL WITH UNION
+2A1B;AL # INTEGRAL WITH OVERBAR
+2A1C;AL # INTEGRAL WITH UNDERBAR
+2A1D;AL # JOIN
+2A1E;AL # LARGE LEFT TRIANGLE OPERATOR
+2A1F;AL # Z NOTATION SCHEMA COMPOSITION
+2A20;AL # Z NOTATION SCHEMA PIPING
+2A21;AL # Z NOTATION SCHEMA PROJECTION
+2A22;AL # PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23;AL # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24;AL # PLUS SIGN WITH TILDE ABOVE
+2A25;AL # PLUS SIGN WITH DOT BELOW
+2A26;AL # PLUS SIGN WITH TILDE BELOW
+2A27;AL # PLUS SIGN WITH SUBSCRIPT TWO
+2A28;AL # PLUS SIGN WITH BLACK TRIANGLE
+2A29;AL # MINUS SIGN WITH COMMA ABOVE
+2A2A;AL # MINUS SIGN WITH DOT BELOW
+2A2B;AL # MINUS SIGN WITH FALLING DOTS
+2A2C;AL # MINUS SIGN WITH RISING DOTS
+2A2D;AL # PLUS SIGN IN LEFT HALF CIRCLE
+2A2E;AL # PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F;AL # VECTOR OR CROSS PRODUCT
+2A30;AL # MULTIPLICATION SIGN WITH DOT ABOVE
+2A31;AL # MULTIPLICATION SIGN WITH UNDERBAR
+2A32;AL # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33;AL # SMASH PRODUCT
+2A34;AL # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35;AL # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36;AL # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37;AL # MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38;AL # CIRCLED DIVISION SIGN
+2A39;AL # PLUS SIGN IN TRIANGLE
+2A3A;AL # MINUS SIGN IN TRIANGLE
+2A3B;AL # MULTIPLICATION SIGN IN TRIANGLE
+2A3C;AL # INTERIOR PRODUCT
+2A3D;AL # RIGHTHAND INTERIOR PRODUCT
+2A3E;AL # Z NOTATION RELATIONAL COMPOSITION
+2A3F;AL # AMALGAMATION OR COPRODUCT
+2A40;AL # INTERSECTION WITH DOT
+2A41;AL # UNION WITH MINUS SIGN
+2A42;AL # UNION WITH OVERBAR
+2A43;AL # INTERSECTION WITH OVERBAR
+2A44;AL # INTERSECTION WITH LOGICAL AND
+2A45;AL # UNION WITH LOGICAL OR
+2A46;AL # UNION ABOVE INTERSECTION
+2A47;AL # INTERSECTION ABOVE UNION
+2A48;AL # UNION ABOVE BAR ABOVE INTERSECTION
+2A49;AL # INTERSECTION ABOVE BAR ABOVE UNION
+2A4A;AL # UNION BESIDE AND JOINED WITH UNION
+2A4B;AL # INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C;AL # CLOSED UNION WITH SERIFS
+2A4D;AL # CLOSED INTERSECTION WITH SERIFS
+2A4E;AL # DOUBLE SQUARE INTERSECTION
+2A4F;AL # DOUBLE SQUARE UNION
+2A50;AL # CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51;AL # LOGICAL AND WITH DOT ABOVE
+2A52;AL # LOGICAL OR WITH DOT ABOVE
+2A53;AL # DOUBLE LOGICAL AND
+2A54;AL # DOUBLE LOGICAL OR
+2A55;AL # TWO INTERSECTING LOGICAL AND
+2A56;AL # TWO INTERSECTING LOGICAL OR
+2A57;AL # SLOPING LARGE OR
+2A58;AL # SLOPING LARGE AND
+2A59;AL # LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A;AL # LOGICAL AND WITH MIDDLE STEM
+2A5B;AL # LOGICAL OR WITH MIDDLE STEM
+2A5C;AL # LOGICAL AND WITH HORIZONTAL DASH
+2A5D;AL # LOGICAL OR WITH HORIZONTAL DASH
+2A5E;AL # LOGICAL AND WITH DOUBLE OVERBAR
+2A5F;AL # LOGICAL AND WITH UNDERBAR
+2A60;AL # LOGICAL AND WITH DOUBLE UNDERBAR
+2A61;AL # SMALL VEE WITH UNDERBAR
+2A62;AL # LOGICAL OR WITH DOUBLE OVERBAR
+2A63;AL # LOGICAL OR WITH DOUBLE UNDERBAR
+2A64;AL # Z NOTATION DOMAIN ANTIRESTRICTION
+2A65;AL # Z NOTATION RANGE ANTIRESTRICTION
+2A66;AL # EQUALS SIGN WITH DOT BELOW
+2A67;AL # IDENTICAL WITH DOT ABOVE
+2A68;AL # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69;AL # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A;AL # TILDE OPERATOR WITH DOT ABOVE
+2A6B;AL # TILDE OPERATOR WITH RISING DOTS
+2A6C;AL # SIMILAR MINUS SIMILAR
+2A6D;AL # CONGRUENT WITH DOT ABOVE
+2A6E;AL # EQUALS WITH ASTERISK
+2A6F;AL # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70;AL # APPROXIMATELY EQUAL OR EQUAL TO
+2A71;AL # EQUALS SIGN ABOVE PLUS SIGN
+2A72;AL # PLUS SIGN ABOVE EQUALS SIGN
+2A73;AL # EQUALS SIGN ABOVE TILDE OPERATOR
+2A74;AL # DOUBLE COLON EQUAL
+2A75;AL # TWO CONSECUTIVE EQUALS SIGNS
+2A76;AL # THREE CONSECUTIVE EQUALS SIGNS
+2A77;AL # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78;AL # EQUIVALENT WITH FOUR DOTS ABOVE
+2A79;AL # LESS-THAN WITH CIRCLE INSIDE
+2A7A;AL # GREATER-THAN WITH CIRCLE INSIDE
+2A7B;AL # LESS-THAN WITH QUESTION MARK ABOVE
+2A7C;AL # GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D;AL # LESS-THAN OR SLANTED EQUAL TO
+2A7E;AL # GREATER-THAN OR SLANTED EQUAL TO
+2A7F;AL # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80;AL # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81;AL # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82;AL # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83;AL # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84;AL # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85;AL # LESS-THAN OR APPROXIMATE
+2A86;AL # GREATER-THAN OR APPROXIMATE
+2A87;AL # LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88;AL # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89;AL # LESS-THAN AND NOT APPROXIMATE
+2A8A;AL # GREATER-THAN AND NOT APPROXIMATE
+2A8B;AL # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C;AL # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D;AL # LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E;AL # GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F;AL # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90;AL # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91;AL # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92;AL # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93;AL # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94;AL # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95;AL # SLANTED EQUAL TO OR LESS-THAN
+2A96;AL # SLANTED EQUAL TO OR GREATER-THAN
+2A97;AL # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98;AL # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99;AL # DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A;AL # DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B;AL # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C;AL # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D;AL # SIMILAR OR LESS-THAN
+2A9E;AL # SIMILAR OR GREATER-THAN
+2A9F;AL # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0;AL # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1;AL # DOUBLE NESTED LESS-THAN
+2AA2;AL # DOUBLE NESTED GREATER-THAN
+2AA3;AL # DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4;AL # GREATER-THAN OVERLAPPING LESS-THAN
+2AA5;AL # GREATER-THAN BESIDE LESS-THAN
+2AA6;AL # LESS-THAN CLOSED BY CURVE
+2AA7;AL # GREATER-THAN CLOSED BY CURVE
+2AA8;AL # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9;AL # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA;AL # SMALLER THAN
+2AAB;AL # LARGER THAN
+2AAC;AL # SMALLER THAN OR EQUAL TO
+2AAD;AL # LARGER THAN OR EQUAL TO
+2AAE;AL # EQUALS SIGN WITH BUMPY ABOVE
+2AAF;AL # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0;AL # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1;AL # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2;AL # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3;AL # PRECEDES ABOVE EQUALS SIGN
+2AB4;AL # SUCCEEDS ABOVE EQUALS SIGN
+2AB5;AL # PRECEDES ABOVE NOT EQUAL TO
+2AB6;AL # SUCCEEDS ABOVE NOT EQUAL TO
+2AB7;AL # PRECEDES ABOVE ALMOST EQUAL TO
+2AB8;AL # SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9;AL # PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA;AL # SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB;AL # DOUBLE PRECEDES
+2ABC;AL # DOUBLE SUCCEEDS
+2ABD;AL # SUBSET WITH DOT
+2ABE;AL # SUPERSET WITH DOT
+2ABF;AL # SUBSET WITH PLUS SIGN BELOW
+2AC0;AL # SUPERSET WITH PLUS SIGN BELOW
+2AC1;AL # SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2;AL # SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3;AL # SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4;AL # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5;AL # SUBSET OF ABOVE EQUALS SIGN
+2AC6;AL # SUPERSET OF ABOVE EQUALS SIGN
+2AC7;AL # SUBSET OF ABOVE TILDE OPERATOR
+2AC8;AL # SUPERSET OF ABOVE TILDE OPERATOR
+2AC9;AL # SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA;AL # SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB;AL # SUBSET OF ABOVE NOT EQUAL TO
+2ACC;AL # SUPERSET OF ABOVE NOT EQUAL TO
+2ACD;AL # SQUARE LEFT OPEN BOX OPERATOR
+2ACE;AL # SQUARE RIGHT OPEN BOX OPERATOR
+2ACF;AL # CLOSED SUBSET
+2AD0;AL # CLOSED SUPERSET
+2AD1;AL # CLOSED SUBSET OR EQUAL TO
+2AD2;AL # CLOSED SUPERSET OR EQUAL TO
+2AD3;AL # SUBSET ABOVE SUPERSET
+2AD4;AL # SUPERSET ABOVE SUBSET
+2AD5;AL # SUBSET ABOVE SUBSET
+2AD6;AL # SUPERSET ABOVE SUPERSET
+2AD7;AL # SUPERSET BESIDE SUBSET
+2AD8;AL # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9;AL # ELEMENT OF OPENING DOWNWARDS
+2ADA;AL # PITCHFORK WITH TEE TOP
+2ADB;AL # TRANSVERSAL INTERSECTION
+2ADC;AL # FORKING
+2ADD;AL # NONFORKING
+2ADE;AL # SHORT LEFT TACK
+2ADF;AL # SHORT DOWN TACK
+2AE0;AL # SHORT UP TACK
+2AE1;AL # PERPENDICULAR WITH S
+2AE2;AL # VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3;AL # DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4;AL # VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5;AL # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6;AL # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7;AL # SHORT DOWN TACK WITH OVERBAR
+2AE8;AL # SHORT UP TACK WITH UNDERBAR
+2AE9;AL # SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA;AL # DOUBLE DOWN TACK
+2AEB;AL # DOUBLE UP TACK
+2AEC;AL # DOUBLE STROKE NOT SIGN
+2AED;AL # REVERSED DOUBLE STROKE NOT SIGN
+2AEE;AL # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF;AL # VERTICAL LINE WITH CIRCLE ABOVE
+2AF0;AL # VERTICAL LINE WITH CIRCLE BELOW
+2AF1;AL # DOWN TACK WITH CIRCLE BELOW
+2AF2;AL # PARALLEL WITH HORIZONTAL STROKE
+2AF3;AL # PARALLEL WITH TILDE OPERATOR
+2AF4;AL # TRIPLE VERTICAL BAR BINARY RELATION
+2AF5;AL # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6;AL # TRIPLE COLON OPERATOR
+2AF7;AL # TRIPLE NESTED LESS-THAN
+2AF8;AL # TRIPLE NESTED GREATER-THAN
+2AF9;AL # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA;AL # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB;AL # TRIPLE SOLIDUS BINARY RELATION
+2AFC;AL # LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD;AL # DOUBLE SOLIDUS OPERATOR
+2AFE;AL # WHITE VERTICAL BAR
+2AFF;AL # N-ARY WHITE VERTICAL BAR
+2B00;AL # NORTH EAST WHITE ARROW
+2B01;AL # NORTH WEST WHITE ARROW
+2B02;AL # SOUTH EAST WHITE ARROW
+2B03;AL # SOUTH WEST WHITE ARROW
+2B04;AL # LEFT RIGHT WHITE ARROW
+2B05;AL # LEFTWARDS BLACK ARROW
+2B06;AL # UPWARDS BLACK ARROW
+2B07;AL # DOWNWARDS BLACK ARROW
+2B08;AL # NORTH EAST BLACK ARROW
+2B09;AL # NORTH WEST BLACK ARROW
+2B0A;AL # SOUTH EAST BLACK ARROW
+2B0B;AL # SOUTH WEST BLACK ARROW
+2B0C;AL # LEFT RIGHT BLACK ARROW
+2B0D;AL # UP DOWN BLACK ARROW
+2B0E;AL # RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F;AL # RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10;AL # LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11;AL # LEFTWARDS ARROW WITH TIP UPWARDS
+2B12;AL # SQUARE WITH TOP HALF BLACK
+2B13;AL # SQUARE WITH BOTTOM HALF BLACK
+2C00;AL # GLAGOLITIC CAPITAL LETTER AZU
+2C01;AL # GLAGOLITIC CAPITAL LETTER BUKY
+2C02;AL # GLAGOLITIC CAPITAL LETTER VEDE
+2C03;AL # GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04;AL # GLAGOLITIC CAPITAL LETTER DOBRO
+2C05;AL # GLAGOLITIC CAPITAL LETTER YESTU
+2C06;AL # GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07;AL # GLAGOLITIC CAPITAL LETTER DZELO
+2C08;AL # GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09;AL # GLAGOLITIC CAPITAL LETTER IZHE
+2C0A;AL # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B;AL # GLAGOLITIC CAPITAL LETTER I
+2C0C;AL # GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D;AL # GLAGOLITIC CAPITAL LETTER KAKO
+2C0E;AL # GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F;AL # GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10;AL # GLAGOLITIC CAPITAL LETTER NASHI
+2C11;AL # GLAGOLITIC CAPITAL LETTER ONU
+2C12;AL # GLAGOLITIC CAPITAL LETTER POKOJI
+2C13;AL # GLAGOLITIC CAPITAL LETTER RITSI
+2C14;AL # GLAGOLITIC CAPITAL LETTER SLOVO
+2C15;AL # GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16;AL # GLAGOLITIC CAPITAL LETTER UKU
+2C17;AL # GLAGOLITIC CAPITAL LETTER FRITU
+2C18;AL # GLAGOLITIC CAPITAL LETTER HERU
+2C19;AL # GLAGOLITIC CAPITAL LETTER OTU
+2C1A;AL # GLAGOLITIC CAPITAL LETTER PE
+2C1B;AL # GLAGOLITIC CAPITAL LETTER SHTA
+2C1C;AL # GLAGOLITIC CAPITAL LETTER TSI
+2C1D;AL # GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E;AL # GLAGOLITIC CAPITAL LETTER SHA
+2C1F;AL # GLAGOLITIC CAPITAL LETTER YERU
+2C20;AL # GLAGOLITIC CAPITAL LETTER YERI
+2C21;AL # GLAGOLITIC CAPITAL LETTER YATI
+2C22;AL # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23;AL # GLAGOLITIC CAPITAL LETTER YU
+2C24;AL # GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25;AL # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26;AL # GLAGOLITIC CAPITAL LETTER YO
+2C27;AL # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28;AL # GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29;AL # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A;AL # GLAGOLITIC CAPITAL LETTER FITA
+2C2B;AL # GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C;AL # GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D;AL # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E;AL # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30;AL # GLAGOLITIC SMALL LETTER AZU
+2C31;AL # GLAGOLITIC SMALL LETTER BUKY
+2C32;AL # GLAGOLITIC SMALL LETTER VEDE
+2C33;AL # GLAGOLITIC SMALL LETTER GLAGOLI
+2C34;AL # GLAGOLITIC SMALL LETTER DOBRO
+2C35;AL # GLAGOLITIC SMALL LETTER YESTU
+2C36;AL # GLAGOLITIC SMALL LETTER ZHIVETE
+2C37;AL # GLAGOLITIC SMALL LETTER DZELO
+2C38;AL # GLAGOLITIC SMALL LETTER ZEMLJA
+2C39;AL # GLAGOLITIC SMALL LETTER IZHE
+2C3A;AL # GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B;AL # GLAGOLITIC SMALL LETTER I
+2C3C;AL # GLAGOLITIC SMALL LETTER DJERVI
+2C3D;AL # GLAGOLITIC SMALL LETTER KAKO
+2C3E;AL # GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F;AL # GLAGOLITIC SMALL LETTER MYSLITE
+2C40;AL # GLAGOLITIC SMALL LETTER NASHI
+2C41;AL # GLAGOLITIC SMALL LETTER ONU
+2C42;AL # GLAGOLITIC SMALL LETTER POKOJI
+2C43;AL # GLAGOLITIC SMALL LETTER RITSI
+2C44;AL # GLAGOLITIC SMALL LETTER SLOVO
+2C45;AL # GLAGOLITIC SMALL LETTER TVRIDO
+2C46;AL # GLAGOLITIC SMALL LETTER UKU
+2C47;AL # GLAGOLITIC SMALL LETTER FRITU
+2C48;AL # GLAGOLITIC SMALL LETTER HERU
+2C49;AL # GLAGOLITIC SMALL LETTER OTU
+2C4A;AL # GLAGOLITIC SMALL LETTER PE
+2C4B;AL # GLAGOLITIC SMALL LETTER SHTA
+2C4C;AL # GLAGOLITIC SMALL LETTER TSI
+2C4D;AL # GLAGOLITIC SMALL LETTER CHRIVI
+2C4E;AL # GLAGOLITIC SMALL LETTER SHA
+2C4F;AL # GLAGOLITIC SMALL LETTER YERU
+2C50;AL # GLAGOLITIC SMALL LETTER YERI
+2C51;AL # GLAGOLITIC SMALL LETTER YATI
+2C52;AL # GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53;AL # GLAGOLITIC SMALL LETTER YU
+2C54;AL # GLAGOLITIC SMALL LETTER SMALL YUS
+2C55;AL # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56;AL # GLAGOLITIC SMALL LETTER YO
+2C57;AL # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58;AL # GLAGOLITIC SMALL LETTER BIG YUS
+2C59;AL # GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A;AL # GLAGOLITIC SMALL LETTER FITA
+2C5B;AL # GLAGOLITIC SMALL LETTER IZHITSA
+2C5C;AL # GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D;AL # GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E;AL # GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80;AL # COPTIC CAPITAL LETTER ALFA
+2C81;AL # COPTIC SMALL LETTER ALFA
+2C82;AL # COPTIC CAPITAL LETTER VIDA
+2C83;AL # COPTIC SMALL LETTER VIDA
+2C84;AL # COPTIC CAPITAL LETTER GAMMA
+2C85;AL # COPTIC SMALL LETTER GAMMA
+2C86;AL # COPTIC CAPITAL LETTER DALDA
+2C87;AL # COPTIC SMALL LETTER DALDA
+2C88;AL # COPTIC CAPITAL LETTER EIE
+2C89;AL # COPTIC SMALL LETTER EIE
+2C8A;AL # COPTIC CAPITAL LETTER SOU
+2C8B;AL # COPTIC SMALL LETTER SOU
+2C8C;AL # COPTIC CAPITAL LETTER ZATA
+2C8D;AL # COPTIC SMALL LETTER ZATA
+2C8E;AL # COPTIC CAPITAL LETTER HATE
+2C8F;AL # COPTIC SMALL LETTER HATE
+2C90;AL # COPTIC CAPITAL LETTER THETHE
+2C91;AL # COPTIC SMALL LETTER THETHE
+2C92;AL # COPTIC CAPITAL LETTER IAUDA
+2C93;AL # COPTIC SMALL LETTER IAUDA
+2C94;AL # COPTIC CAPITAL LETTER KAPA
+2C95;AL # COPTIC SMALL LETTER KAPA
+2C96;AL # COPTIC CAPITAL LETTER LAULA
+2C97;AL # COPTIC SMALL LETTER LAULA
+2C98;AL # COPTIC CAPITAL LETTER MI
+2C99;AL # COPTIC SMALL LETTER MI
+2C9A;AL # COPTIC CAPITAL LETTER NI
+2C9B;AL # COPTIC SMALL LETTER NI
+2C9C;AL # COPTIC CAPITAL LETTER KSI
+2C9D;AL # COPTIC SMALL LETTER KSI
+2C9E;AL # COPTIC CAPITAL LETTER O
+2C9F;AL # COPTIC SMALL LETTER O
+2CA0;AL # COPTIC CAPITAL LETTER PI
+2CA1;AL # COPTIC SMALL LETTER PI
+2CA2;AL # COPTIC CAPITAL LETTER RO
+2CA3;AL # COPTIC SMALL LETTER RO
+2CA4;AL # COPTIC CAPITAL LETTER SIMA
+2CA5;AL # COPTIC SMALL LETTER SIMA
+2CA6;AL # COPTIC CAPITAL LETTER TAU
+2CA7;AL # COPTIC SMALL LETTER TAU
+2CA8;AL # COPTIC CAPITAL LETTER UA
+2CA9;AL # COPTIC SMALL LETTER UA
+2CAA;AL # COPTIC CAPITAL LETTER FI
+2CAB;AL # COPTIC SMALL LETTER FI
+2CAC;AL # COPTIC CAPITAL LETTER KHI
+2CAD;AL # COPTIC SMALL LETTER KHI
+2CAE;AL # COPTIC CAPITAL LETTER PSI
+2CAF;AL # COPTIC SMALL LETTER PSI
+2CB0;AL # COPTIC CAPITAL LETTER OOU
+2CB1;AL # COPTIC SMALL LETTER OOU
+2CB2;AL # COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3;AL # COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4;AL # COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5;AL # COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6;AL # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7;AL # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8;AL # COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9;AL # COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA;AL # COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB;AL # COPTIC SMALL LETTER DIALECT-P NI
+2CBC;AL # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD;AL # COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE;AL # COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF;AL # COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0;AL # COPTIC CAPITAL LETTER SAMPI
+2CC1;AL # COPTIC SMALL LETTER SAMPI
+2CC2;AL # COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3;AL # COPTIC SMALL LETTER CROSSED SHEI
+2CC4;AL # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5;AL # COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6;AL # COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7;AL # COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8;AL # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9;AL # COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA;AL # COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB;AL # COPTIC SMALL LETTER DIALECT-P HORI
+2CCC;AL # COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD;AL # COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE;AL # COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF;AL # COPTIC SMALL LETTER OLD COPTIC HA
+2CD0;AL # COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1;AL # COPTIC SMALL LETTER L-SHAPED HA
+2CD2;AL # COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3;AL # COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4;AL # COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5;AL # COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6;AL # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7;AL # COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8;AL # COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9;AL # COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA;AL # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB;AL # COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC;AL # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD;AL # COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE;AL # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF;AL # COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0;AL # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1;AL # COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2;AL # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3;AL # COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4;AL # COPTIC SYMBOL KAI
+2CE5;AL # COPTIC SYMBOL MI RO
+2CE6;AL # COPTIC SYMBOL PI RO
+2CE7;AL # COPTIC SYMBOL STAUROS
+2CE8;AL # COPTIC SYMBOL TAU RO
+2CE9;AL # COPTIC SYMBOL KHI RO
+2CEA;AL # COPTIC SYMBOL SHIMA SIMA
+2CF9;BA # COPTIC OLD NUBIAN FULL STOP
+2CFA;BA # COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB;BA # COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC;BA # COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD;AL # COPTIC FRACTION ONE HALF
+2CFE;BA # COPTIC FULL STOP
+2CFF;BA # COPTIC MORPHOLOGICAL DIVIDER
+2D00;AL # GEORGIAN SMALL LETTER AN
+2D01;AL # GEORGIAN SMALL LETTER BAN
+2D02;AL # GEORGIAN SMALL LETTER GAN
+2D03;AL # GEORGIAN SMALL LETTER DON
+2D04;AL # GEORGIAN SMALL LETTER EN
+2D05;AL # GEORGIAN SMALL LETTER VIN
+2D06;AL # GEORGIAN SMALL LETTER ZEN
+2D07;AL # GEORGIAN SMALL LETTER TAN
+2D08;AL # GEORGIAN SMALL LETTER IN
+2D09;AL # GEORGIAN SMALL LETTER KAN
+2D0A;AL # GEORGIAN SMALL LETTER LAS
+2D0B;AL # GEORGIAN SMALL LETTER MAN
+2D0C;AL # GEORGIAN SMALL LETTER NAR
+2D0D;AL # GEORGIAN SMALL LETTER ON
+2D0E;AL # GEORGIAN SMALL LETTER PAR
+2D0F;AL # GEORGIAN SMALL LETTER ZHAR
+2D10;AL # GEORGIAN SMALL LETTER RAE
+2D11;AL # GEORGIAN SMALL LETTER SAN
+2D12;AL # GEORGIAN SMALL LETTER TAR
+2D13;AL # GEORGIAN SMALL LETTER UN
+2D14;AL # GEORGIAN SMALL LETTER PHAR
+2D15;AL # GEORGIAN SMALL LETTER KHAR
+2D16;AL # GEORGIAN SMALL LETTER GHAN
+2D17;AL # GEORGIAN SMALL LETTER QAR
+2D18;AL # GEORGIAN SMALL LETTER SHIN
+2D19;AL # GEORGIAN SMALL LETTER CHIN
+2D1A;AL # GEORGIAN SMALL LETTER CAN
+2D1B;AL # GEORGIAN SMALL LETTER JIL
+2D1C;AL # GEORGIAN SMALL LETTER CIL
+2D1D;AL # GEORGIAN SMALL LETTER CHAR
+2D1E;AL # GEORGIAN SMALL LETTER XAN
+2D1F;AL # GEORGIAN SMALL LETTER JHAN
+2D20;AL # GEORGIAN SMALL LETTER HAE
+2D21;AL # GEORGIAN SMALL LETTER HE
+2D22;AL # GEORGIAN SMALL LETTER HIE
+2D23;AL # GEORGIAN SMALL LETTER WE
+2D24;AL # GEORGIAN SMALL LETTER HAR
+2D25;AL # GEORGIAN SMALL LETTER HOE
+2D30;AL # TIFINAGH LETTER YA
+2D31;AL # TIFINAGH LETTER YAB
+2D32;AL # TIFINAGH LETTER YABH
+2D33;AL # TIFINAGH LETTER YAG
+2D34;AL # TIFINAGH LETTER YAGHH
+2D35;AL # TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36;AL # TIFINAGH LETTER YAJ
+2D37;AL # TIFINAGH LETTER YAD
+2D38;AL # TIFINAGH LETTER YADH
+2D39;AL # TIFINAGH LETTER YADD
+2D3A;AL # TIFINAGH LETTER YADDH
+2D3B;AL # TIFINAGH LETTER YEY
+2D3C;AL # TIFINAGH LETTER YAF
+2D3D;AL # TIFINAGH LETTER YAK
+2D3E;AL # TIFINAGH LETTER TUAREG YAK
+2D3F;AL # TIFINAGH LETTER YAKHH
+2D40;AL # TIFINAGH LETTER YAH
+2D41;AL # TIFINAGH LETTER BERBER ACADEMY YAH
+2D42;AL # TIFINAGH LETTER TUAREG YAH
+2D43;AL # TIFINAGH LETTER YAHH
+2D44;AL # TIFINAGH LETTER YAA
+2D45;AL # TIFINAGH LETTER YAKH
+2D46;AL # TIFINAGH LETTER TUAREG YAKH
+2D47;AL # TIFINAGH LETTER YAQ
+2D48;AL # TIFINAGH LETTER TUAREG YAQ
+2D49;AL # TIFINAGH LETTER YI
+2D4A;AL # TIFINAGH LETTER YAZH
+2D4B;AL # TIFINAGH LETTER AHAGGAR YAZH
+2D4C;AL # TIFINAGH LETTER TUAREG YAZH
+2D4D;AL # TIFINAGH LETTER YAL
+2D4E;AL # TIFINAGH LETTER YAM
+2D4F;AL # TIFINAGH LETTER YAN
+2D50;AL # TIFINAGH LETTER TUAREG YAGN
+2D51;AL # TIFINAGH LETTER TUAREG YANG
+2D52;AL # TIFINAGH LETTER YAP
+2D53;AL # TIFINAGH LETTER YU
+2D54;AL # TIFINAGH LETTER YAR
+2D55;AL # TIFINAGH LETTER YARR
+2D56;AL # TIFINAGH LETTER YAGH
+2D57;AL # TIFINAGH LETTER TUAREG YAGH
+2D58;AL # TIFINAGH LETTER AYER YAGH
+2D59;AL # TIFINAGH LETTER YAS
+2D5A;AL # TIFINAGH LETTER YASS
+2D5B;AL # TIFINAGH LETTER YASH
+2D5C;AL # TIFINAGH LETTER YAT
+2D5D;AL # TIFINAGH LETTER YATH
+2D5E;AL # TIFINAGH LETTER YACH
+2D5F;AL # TIFINAGH LETTER YATT
+2D60;AL # TIFINAGH LETTER YAV
+2D61;AL # TIFINAGH LETTER YAW
+2D62;AL # TIFINAGH LETTER YAY
+2D63;AL # TIFINAGH LETTER YAZ
+2D64;AL # TIFINAGH LETTER TAWELLEMET YAZ
+2D65;AL # TIFINAGH LETTER YAZZ
+2D6F;AL # TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80;AL # ETHIOPIC SYLLABLE LOA
+2D81;AL # ETHIOPIC SYLLABLE MOA
+2D82;AL # ETHIOPIC SYLLABLE ROA
+2D83;AL # ETHIOPIC SYLLABLE SOA
+2D84;AL # ETHIOPIC SYLLABLE SHOA
+2D85;AL # ETHIOPIC SYLLABLE BOA
+2D86;AL # ETHIOPIC SYLLABLE TOA
+2D87;AL # ETHIOPIC SYLLABLE COA
+2D88;AL # ETHIOPIC SYLLABLE NOA
+2D89;AL # ETHIOPIC SYLLABLE NYOA
+2D8A;AL # ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B;AL # ETHIOPIC SYLLABLE ZOA
+2D8C;AL # ETHIOPIC SYLLABLE DOA
+2D8D;AL # ETHIOPIC SYLLABLE DDOA
+2D8E;AL # ETHIOPIC SYLLABLE JOA
+2D8F;AL # ETHIOPIC SYLLABLE THOA
+2D90;AL # ETHIOPIC SYLLABLE CHOA
+2D91;AL # ETHIOPIC SYLLABLE PHOA
+2D92;AL # ETHIOPIC SYLLABLE POA
+2D93;AL # ETHIOPIC SYLLABLE GGWA
+2D94;AL # ETHIOPIC SYLLABLE GGWI
+2D95;AL # ETHIOPIC SYLLABLE GGWEE
+2D96;AL # ETHIOPIC SYLLABLE GGWE
+2DA0;AL # ETHIOPIC SYLLABLE SSA
+2DA1;AL # ETHIOPIC SYLLABLE SSU
+2DA2;AL # ETHIOPIC SYLLABLE SSI
+2DA3;AL # ETHIOPIC SYLLABLE SSAA
+2DA4;AL # ETHIOPIC SYLLABLE SSEE
+2DA5;AL # ETHIOPIC SYLLABLE SSE
+2DA6;AL # ETHIOPIC SYLLABLE SSO
+2DA8;AL # ETHIOPIC SYLLABLE CCA
+2DA9;AL # ETHIOPIC SYLLABLE CCU
+2DAA;AL # ETHIOPIC SYLLABLE CCI
+2DAB;AL # ETHIOPIC SYLLABLE CCAA
+2DAC;AL # ETHIOPIC SYLLABLE CCEE
+2DAD;AL # ETHIOPIC SYLLABLE CCE
+2DAE;AL # ETHIOPIC SYLLABLE CCO
+2DB0;AL # ETHIOPIC SYLLABLE ZZA
+2DB1;AL # ETHIOPIC SYLLABLE ZZU
+2DB2;AL # ETHIOPIC SYLLABLE ZZI
+2DB3;AL # ETHIOPIC SYLLABLE ZZAA
+2DB4;AL # ETHIOPIC SYLLABLE ZZEE
+2DB5;AL # ETHIOPIC SYLLABLE ZZE
+2DB6;AL # ETHIOPIC SYLLABLE ZZO
+2DB8;AL # ETHIOPIC SYLLABLE CCHA
+2DB9;AL # ETHIOPIC SYLLABLE CCHU
+2DBA;AL # ETHIOPIC SYLLABLE CCHI
+2DBB;AL # ETHIOPIC SYLLABLE CCHAA
+2DBC;AL # ETHIOPIC SYLLABLE CCHEE
+2DBD;AL # ETHIOPIC SYLLABLE CCHE
+2DBE;AL # ETHIOPIC SYLLABLE CCHO
+2DC0;AL # ETHIOPIC SYLLABLE QYA
+2DC1;AL # ETHIOPIC SYLLABLE QYU
+2DC2;AL # ETHIOPIC SYLLABLE QYI
+2DC3;AL # ETHIOPIC SYLLABLE QYAA
+2DC4;AL # ETHIOPIC SYLLABLE QYEE
+2DC5;AL # ETHIOPIC SYLLABLE QYE
+2DC6;AL # ETHIOPIC SYLLABLE QYO
+2DC8;AL # ETHIOPIC SYLLABLE KYA
+2DC9;AL # ETHIOPIC SYLLABLE KYU
+2DCA;AL # ETHIOPIC SYLLABLE KYI
+2DCB;AL # ETHIOPIC SYLLABLE KYAA
+2DCC;AL # ETHIOPIC SYLLABLE KYEE
+2DCD;AL # ETHIOPIC SYLLABLE KYE
+2DCE;AL # ETHIOPIC SYLLABLE KYO
+2DD0;AL # ETHIOPIC SYLLABLE XYA
+2DD1;AL # ETHIOPIC SYLLABLE XYU
+2DD2;AL # ETHIOPIC SYLLABLE XYI
+2DD3;AL # ETHIOPIC SYLLABLE XYAA
+2DD4;AL # ETHIOPIC SYLLABLE XYEE
+2DD5;AL # ETHIOPIC SYLLABLE XYE
+2DD6;AL # ETHIOPIC SYLLABLE XYO
+2DD8;AL # ETHIOPIC SYLLABLE GYA
+2DD9;AL # ETHIOPIC SYLLABLE GYU
+2DDA;AL # ETHIOPIC SYLLABLE GYI
+2DDB;AL # ETHIOPIC SYLLABLE GYAA
+2DDC;AL # ETHIOPIC SYLLABLE GYEE
+2DDD;AL # ETHIOPIC SYLLABLE GYE
+2DDE;AL # ETHIOPIC SYLLABLE GYO
+2E00;QU # RIGHT ANGLE SUBSTITUTION MARKER
+2E01;QU # RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02;QU # LEFT SUBSTITUTION BRACKET
+2E03;QU # RIGHT SUBSTITUTION BRACKET
+2E04;QU # LEFT DOTTED SUBSTITUTION BRACKET
+2E05;QU # RIGHT DOTTED SUBSTITUTION BRACKET
+2E06;QU # RAISED INTERPOLATION MARKER
+2E07;QU # RAISED DOTTED INTERPOLATION MARKER
+2E08;QU # DOTTED TRANSPOSITION MARKER
+2E09;QU # LEFT TRANSPOSITION BRACKET
+2E0A;QU # RIGHT TRANSPOSITION BRACKET
+2E0B;QU # RAISED SQUARE
+2E0C;QU # LEFT RAISED OMISSION BRACKET
+2E0D;QU # RIGHT RAISED OMISSION BRACKET
+2E0E;BA # EDITORIAL CORONIS
+2E0F;BA # PARAGRAPHOS
+2E10;BA # FORKED PARAGRAPHOS
+2E11;BA # REVERSED FORKED PARAGRAPHOS
+2E12;BA # HYPODIASTOLE
+2E13;BA # DOTTED OBELOS
+2E14;BA # DOWNWARDS ANCORA
+2E15;BA # UPWARDS ANCORA
+2E16;AL # DOTTED RIGHT-POINTING ANGLE
+2E17;BA # DOUBLE OBLIQUE HYPHEN
+2E1C;QU # LEFT LOW PARAPHRASE BRACKET
+2E1D;QU # RIGHT LOW PARAPHRASE BRACKET
+2E80;ID # CJK RADICAL REPEAT
+2E81;ID # CJK RADICAL CLIFF
+2E82;ID # CJK RADICAL SECOND ONE
+2E83;ID # CJK RADICAL SECOND TWO
+2E84;ID # CJK RADICAL SECOND THREE
+2E85;ID # CJK RADICAL PERSON
+2E86;ID # CJK RADICAL BOX
+2E87;ID # CJK RADICAL TABLE
+2E88;ID # CJK RADICAL KNIFE ONE
+2E89;ID # CJK RADICAL KNIFE TWO
+2E8A;ID # CJK RADICAL DIVINATION
+2E8B;ID # CJK RADICAL SEAL
+2E8C;ID # CJK RADICAL SMALL ONE
+2E8D;ID # CJK RADICAL SMALL TWO
+2E8E;ID # CJK RADICAL LAME ONE
+2E8F;ID # CJK RADICAL LAME TWO
+2E90;ID # CJK RADICAL LAME THREE
+2E91;ID # CJK RADICAL LAME FOUR
+2E92;ID # CJK RADICAL SNAKE
+2E93;ID # CJK RADICAL THREAD
+2E94;ID # CJK RADICAL SNOUT ONE
+2E95;ID # CJK RADICAL SNOUT TWO
+2E96;ID # CJK RADICAL HEART ONE
+2E97;ID # CJK RADICAL HEART TWO
+2E98;ID # CJK RADICAL HAND
+2E99;ID # CJK RADICAL RAP
+2E9B;ID # CJK RADICAL CHOKE
+2E9C;ID # CJK RADICAL SUN
+2E9D;ID # CJK RADICAL MOON
+2E9E;ID # CJK RADICAL DEATH
+2E9F;ID # CJK RADICAL MOTHER
+2EA0;ID # CJK RADICAL CIVILIAN
+2EA1;ID # CJK RADICAL WATER ONE
+2EA2;ID # CJK RADICAL WATER TWO
+2EA3;ID # CJK RADICAL FIRE
+2EA4;ID # CJK RADICAL PAW ONE
+2EA5;ID # CJK RADICAL PAW TWO
+2EA6;ID # CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+2EA7;ID # CJK RADICAL COW
+2EA8;ID # CJK RADICAL DOG
+2EA9;ID # CJK RADICAL JADE
+2EAA;ID # CJK RADICAL BOLT OF CLOTH
+2EAB;ID # CJK RADICAL EYE
+2EAC;ID # CJK RADICAL SPIRIT ONE
+2EAD;ID # CJK RADICAL SPIRIT TWO
+2EAE;ID # CJK RADICAL BAMBOO
+2EAF;ID # CJK RADICAL SILK
+2EB0;ID # CJK RADICAL C-SIMPLIFIED SILK
+2EB1;ID # CJK RADICAL NET ONE
+2EB2;ID # CJK RADICAL NET TWO
+2EB3;ID # CJK RADICAL NET THREE
+2EB4;ID # CJK RADICAL NET FOUR
+2EB5;ID # CJK RADICAL MESH
+2EB6;ID # CJK RADICAL SHEEP
+2EB7;ID # CJK RADICAL RAM
+2EB8;ID # CJK RADICAL EWE
+2EB9;ID # CJK RADICAL OLD
+2EBA;ID # CJK RADICAL BRUSH ONE
+2EBB;ID # CJK RADICAL BRUSH TWO
+2EBC;ID # CJK RADICAL MEAT
+2EBD;ID # CJK RADICAL MORTAR
+2EBE;ID # CJK RADICAL GRASS ONE
+2EBF;ID # CJK RADICAL GRASS TWO
+2EC0;ID # CJK RADICAL GRASS THREE
+2EC1;ID # CJK RADICAL TIGER
+2EC2;ID # CJK RADICAL CLOTHES
+2EC3;ID # CJK RADICAL WEST ONE
+2EC4;ID # CJK RADICAL WEST TWO
+2EC5;ID # CJK RADICAL C-SIMPLIFIED SEE
+2EC6;ID # CJK RADICAL SIMPLIFIED HORN
+2EC7;ID # CJK RADICAL HORN
+2EC8;ID # CJK RADICAL C-SIMPLIFIED SPEECH
+2EC9;ID # CJK RADICAL C-SIMPLIFIED SHELL
+2ECA;ID # CJK RADICAL FOOT
+2ECB;ID # CJK RADICAL C-SIMPLIFIED CART
+2ECC;ID # CJK RADICAL SIMPLIFIED WALK
+2ECD;ID # CJK RADICAL WALK ONE
+2ECE;ID # CJK RADICAL WALK TWO
+2ECF;ID # CJK RADICAL CITY
+2ED0;ID # CJK RADICAL C-SIMPLIFIED GOLD
+2ED1;ID # CJK RADICAL LONG ONE
+2ED2;ID # CJK RADICAL LONG TWO
+2ED3;ID # CJK RADICAL C-SIMPLIFIED LONG
+2ED4;ID # CJK RADICAL C-SIMPLIFIED GATE
+2ED5;ID # CJK RADICAL MOUND ONE
+2ED6;ID # CJK RADICAL MOUND TWO
+2ED7;ID # CJK RADICAL RAIN
+2ED8;ID # CJK RADICAL BLUE
+2ED9;ID # CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2EDA;ID # CJK RADICAL C-SIMPLIFIED LEAF
+2EDB;ID # CJK RADICAL C-SIMPLIFIED WIND
+2EDC;ID # CJK RADICAL C-SIMPLIFIED FLY
+2EDD;ID # CJK RADICAL EAT ONE
+2EDE;ID # CJK RADICAL EAT TWO
+2EDF;ID # CJK RADICAL EAT THREE
+2EE0;ID # CJK RADICAL C-SIMPLIFIED EAT
+2EE1;ID # CJK RADICAL HEAD
+2EE2;ID # CJK RADICAL C-SIMPLIFIED HORSE
+2EE3;ID # CJK RADICAL BONE
+2EE4;ID # CJK RADICAL GHOST
+2EE5;ID # CJK RADICAL C-SIMPLIFIED FISH
+2EE6;ID # CJK RADICAL C-SIMPLIFIED BIRD
+2EE7;ID # CJK RADICAL C-SIMPLIFIED SALT
+2EE8;ID # CJK RADICAL SIMPLIFIED WHEAT
+2EE9;ID # CJK RADICAL SIMPLIFIED YELLOW
+2EEA;ID # CJK RADICAL C-SIMPLIFIED FROG
+2EEB;ID # CJK RADICAL J-SIMPLIFIED EVEN
+2EEC;ID # CJK RADICAL C-SIMPLIFIED EVEN
+2EED;ID # CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE;ID # CJK RADICAL C-SIMPLIFIED TOOTH
+2EEF;ID # CJK RADICAL J-SIMPLIFIED DRAGON
+2EF0;ID # CJK RADICAL C-SIMPLIFIED DRAGON
+2EF1;ID # CJK RADICAL TURTLE
+2EF2;ID # CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3;ID # CJK RADICAL C-SIMPLIFIED TURTLE
+2F00;ID # KANGXI RADICAL ONE
+2F01;ID # KANGXI RADICAL LINE
+2F02;ID # KANGXI RADICAL DOT
+2F03;ID # KANGXI RADICAL SLASH
+2F04;ID # KANGXI RADICAL SECOND
+2F05;ID # KANGXI RADICAL HOOK
+2F06;ID # KANGXI RADICAL TWO
+2F07;ID # KANGXI RADICAL LID
+2F08;ID # KANGXI RADICAL MAN
+2F09;ID # KANGXI RADICAL LEGS
+2F0A;ID # KANGXI RADICAL ENTER
+2F0B;ID # KANGXI RADICAL EIGHT
+2F0C;ID # KANGXI RADICAL DOWN BOX
+2F0D;ID # KANGXI RADICAL COVER
+2F0E;ID # KANGXI RADICAL ICE
+2F0F;ID # KANGXI RADICAL TABLE
+2F10;ID # KANGXI RADICAL OPEN BOX
+2F11;ID # KANGXI RADICAL KNIFE
+2F12;ID # KANGXI RADICAL POWER
+2F13;ID # KANGXI RADICAL WRAP
+2F14;ID # KANGXI RADICAL SPOON
+2F15;ID # KANGXI RADICAL RIGHT OPEN BOX
+2F16;ID # KANGXI RADICAL HIDING ENCLOSURE
+2F17;ID # KANGXI RADICAL TEN
+2F18;ID # KANGXI RADICAL DIVINATION
+2F19;ID # KANGXI RADICAL SEAL
+2F1A;ID # KANGXI RADICAL CLIFF
+2F1B;ID # KANGXI RADICAL PRIVATE
+2F1C;ID # KANGXI RADICAL AGAIN
+2F1D;ID # KANGXI RADICAL MOUTH
+2F1E;ID # KANGXI RADICAL ENCLOSURE
+2F1F;ID # KANGXI RADICAL EARTH
+2F20;ID # KANGXI RADICAL SCHOLAR
+2F21;ID # KANGXI RADICAL GO
+2F22;ID # KANGXI RADICAL GO SLOWLY
+2F23;ID # KANGXI RADICAL EVENING
+2F24;ID # KANGXI RADICAL BIG
+2F25;ID # KANGXI RADICAL WOMAN
+2F26;ID # KANGXI RADICAL CHILD
+2F27;ID # KANGXI RADICAL ROOF
+2F28;ID # KANGXI RADICAL INCH
+2F29;ID # KANGXI RADICAL SMALL
+2F2A;ID # KANGXI RADICAL LAME
+2F2B;ID # KANGXI RADICAL CORPSE
+2F2C;ID # KANGXI RADICAL SPROUT
+2F2D;ID # KANGXI RADICAL MOUNTAIN
+2F2E;ID # KANGXI RADICAL RIVER
+2F2F;ID # KANGXI RADICAL WORK
+2F30;ID # KANGXI RADICAL ONESELF
+2F31;ID # KANGXI RADICAL TURBAN
+2F32;ID # KANGXI RADICAL DRY
+2F33;ID # KANGXI RADICAL SHORT THREAD
+2F34;ID # KANGXI RADICAL DOTTED CLIFF
+2F35;ID # KANGXI RADICAL LONG STRIDE
+2F36;ID # KANGXI RADICAL TWO HANDS
+2F37;ID # KANGXI RADICAL SHOOT
+2F38;ID # KANGXI RADICAL BOW
+2F39;ID # KANGXI RADICAL SNOUT
+2F3A;ID # KANGXI RADICAL BRISTLE
+2F3B;ID # KANGXI RADICAL STEP
+2F3C;ID # KANGXI RADICAL HEART
+2F3D;ID # KANGXI RADICAL HALBERD
+2F3E;ID # KANGXI RADICAL DOOR
+2F3F;ID # KANGXI RADICAL HAND
+2F40;ID # KANGXI RADICAL BRANCH
+2F41;ID # KANGXI RADICAL RAP
+2F42;ID # KANGXI RADICAL SCRIPT
+2F43;ID # KANGXI RADICAL DIPPER
+2F44;ID # KANGXI RADICAL AXE
+2F45;ID # KANGXI RADICAL SQUARE
+2F46;ID # KANGXI RADICAL NOT
+2F47;ID # KANGXI RADICAL SUN
+2F48;ID # KANGXI RADICAL SAY
+2F49;ID # KANGXI RADICAL MOON
+2F4A;ID # KANGXI RADICAL TREE
+2F4B;ID # KANGXI RADICAL LACK
+2F4C;ID # KANGXI RADICAL STOP
+2F4D;ID # KANGXI RADICAL DEATH
+2F4E;ID # KANGXI RADICAL WEAPON
+2F4F;ID # KANGXI RADICAL DO NOT
+2F50;ID # KANGXI RADICAL COMPARE
+2F51;ID # KANGXI RADICAL FUR
+2F52;ID # KANGXI RADICAL CLAN
+2F53;ID # KANGXI RADICAL STEAM
+2F54;ID # KANGXI RADICAL WATER
+2F55;ID # KANGXI RADICAL FIRE
+2F56;ID # KANGXI RADICAL CLAW
+2F57;ID # KANGXI RADICAL FATHER
+2F58;ID # KANGXI RADICAL DOUBLE X
+2F59;ID # KANGXI RADICAL HALF TREE TRUNK
+2F5A;ID # KANGXI RADICAL SLICE
+2F5B;ID # KANGXI RADICAL FANG
+2F5C;ID # KANGXI RADICAL COW
+2F5D;ID # KANGXI RADICAL DOG
+2F5E;ID # KANGXI RADICAL PROFOUND
+2F5F;ID # KANGXI RADICAL JADE
+2F60;ID # KANGXI RADICAL MELON
+2F61;ID # KANGXI RADICAL TILE
+2F62;ID # KANGXI RADICAL SWEET
+2F63;ID # KANGXI RADICAL LIFE
+2F64;ID # KANGXI RADICAL USE
+2F65;ID # KANGXI RADICAL FIELD
+2F66;ID # KANGXI RADICAL BOLT OF CLOTH
+2F67;ID # KANGXI RADICAL SICKNESS
+2F68;ID # KANGXI RADICAL DOTTED TENT
+2F69;ID # KANGXI RADICAL WHITE
+2F6A;ID # KANGXI RADICAL SKIN
+2F6B;ID # KANGXI RADICAL DISH
+2F6C;ID # KANGXI RADICAL EYE
+2F6D;ID # KANGXI RADICAL SPEAR
+2F6E;ID # KANGXI RADICAL ARROW
+2F6F;ID # KANGXI RADICAL STONE
+2F70;ID # KANGXI RADICAL SPIRIT
+2F71;ID # KANGXI RADICAL TRACK
+2F72;ID # KANGXI RADICAL GRAIN
+2F73;ID # KANGXI RADICAL CAVE
+2F74;ID # KANGXI RADICAL STAND
+2F75;ID # KANGXI RADICAL BAMBOO
+2F76;ID # KANGXI RADICAL RICE
+2F77;ID # KANGXI RADICAL SILK
+2F78;ID # KANGXI RADICAL JAR
+2F79;ID # KANGXI RADICAL NET
+2F7A;ID # KANGXI RADICAL SHEEP
+2F7B;ID # KANGXI RADICAL FEATHER
+2F7C;ID # KANGXI RADICAL OLD
+2F7D;ID # KANGXI RADICAL AND
+2F7E;ID # KANGXI RADICAL PLOW
+2F7F;ID # KANGXI RADICAL EAR
+2F80;ID # KANGXI RADICAL BRUSH
+2F81;ID # KANGXI RADICAL MEAT
+2F82;ID # KANGXI RADICAL MINISTER
+2F83;ID # KANGXI RADICAL SELF
+2F84;ID # KANGXI RADICAL ARRIVE
+2F85;ID # KANGXI RADICAL MORTAR
+2F86;ID # KANGXI RADICAL TONGUE
+2F87;ID # KANGXI RADICAL OPPOSE
+2F88;ID # KANGXI RADICAL BOAT
+2F89;ID # KANGXI RADICAL STOPPING
+2F8A;ID # KANGXI RADICAL COLOR
+2F8B;ID # KANGXI RADICAL GRASS
+2F8C;ID # KANGXI RADICAL TIGER
+2F8D;ID # KANGXI RADICAL INSECT
+2F8E;ID # KANGXI RADICAL BLOOD
+2F8F;ID # KANGXI RADICAL WALK ENCLOSURE
+2F90;ID # KANGXI RADICAL CLOTHES
+2F91;ID # KANGXI RADICAL WEST
+2F92;ID # KANGXI RADICAL SEE
+2F93;ID # KANGXI RADICAL HORN
+2F94;ID # KANGXI RADICAL SPEECH
+2F95;ID # KANGXI RADICAL VALLEY
+2F96;ID # KANGXI RADICAL BEAN
+2F97;ID # KANGXI RADICAL PIG
+2F98;ID # KANGXI RADICAL BADGER
+2F99;ID # KANGXI RADICAL SHELL
+2F9A;ID # KANGXI RADICAL RED
+2F9B;ID # KANGXI RADICAL RUN
+2F9C;ID # KANGXI RADICAL FOOT
+2F9D;ID # KANGXI RADICAL BODY
+2F9E;ID # KANGXI RADICAL CART
+2F9F;ID # KANGXI RADICAL BITTER
+2FA0;ID # KANGXI RADICAL MORNING
+2FA1;ID # KANGXI RADICAL WALK
+2FA2;ID # KANGXI RADICAL CITY
+2FA3;ID # KANGXI RADICAL WINE
+2FA4;ID # KANGXI RADICAL DISTINGUISH
+2FA5;ID # KANGXI RADICAL VILLAGE
+2FA6;ID # KANGXI RADICAL GOLD
+2FA7;ID # KANGXI RADICAL LONG
+2FA8;ID # KANGXI RADICAL GATE
+2FA9;ID # KANGXI RADICAL MOUND
+2FAA;ID # KANGXI RADICAL SLAVE
+2FAB;ID # KANGXI RADICAL SHORT TAILED BIRD
+2FAC;ID # KANGXI RADICAL RAIN
+2FAD;ID # KANGXI RADICAL BLUE
+2FAE;ID # KANGXI RADICAL WRONG
+2FAF;ID # KANGXI RADICAL FACE
+2FB0;ID # KANGXI RADICAL LEATHER
+2FB1;ID # KANGXI RADICAL TANNED LEATHER
+2FB2;ID # KANGXI RADICAL LEEK
+2FB3;ID # KANGXI RADICAL SOUND
+2FB4;ID # KANGXI RADICAL LEAF
+2FB5;ID # KANGXI RADICAL WIND
+2FB6;ID # KANGXI RADICAL FLY
+2FB7;ID # KANGXI RADICAL EAT
+2FB8;ID # KANGXI RADICAL HEAD
+2FB9;ID # KANGXI RADICAL FRAGRANT
+2FBA;ID # KANGXI RADICAL HORSE
+2FBB;ID # KANGXI RADICAL BONE
+2FBC;ID # KANGXI RADICAL TALL
+2FBD;ID # KANGXI RADICAL HAIR
+2FBE;ID # KANGXI RADICAL FIGHT
+2FBF;ID # KANGXI RADICAL SACRIFICIAL WINE
+2FC0;ID # KANGXI RADICAL CAULDRON
+2FC1;ID # KANGXI RADICAL GHOST
+2FC2;ID # KANGXI RADICAL FISH
+2FC3;ID # KANGXI RADICAL BIRD
+2FC4;ID # KANGXI RADICAL SALT
+2FC5;ID # KANGXI RADICAL DEER
+2FC6;ID # KANGXI RADICAL WHEAT
+2FC7;ID # KANGXI RADICAL HEMP
+2FC8;ID # KANGXI RADICAL YELLOW
+2FC9;ID # KANGXI RADICAL MILLET
+2FCA;ID # KANGXI RADICAL BLACK
+2FCB;ID # KANGXI RADICAL EMBROIDERY
+2FCC;ID # KANGXI RADICAL FROG
+2FCD;ID # KANGXI RADICAL TRIPOD
+2FCE;ID # KANGXI RADICAL DRUM
+2FCF;ID # KANGXI RADICAL RAT
+2FD0;ID # KANGXI RADICAL NOSE
+2FD1;ID # KANGXI RADICAL EVEN
+2FD2;ID # KANGXI RADICAL TOOTH
+2FD3;ID # KANGXI RADICAL DRAGON
+2FD4;ID # KANGXI RADICAL TURTLE
+2FD5;ID # KANGXI RADICAL FLUTE
+2FF0;ID # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1;ID # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2;ID # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3;ID # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4;ID # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA;ID # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB;ID # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000;ID # IDEOGRAPHIC SPACE
+3001;CL # IDEOGRAPHIC COMMA
+3002;CL # IDEOGRAPHIC FULL STOP
+3003;ID # DITTO MARK
+3004;ID # JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005;NS # IDEOGRAPHIC ITERATION MARK
+3006;ID # IDEOGRAPHIC CLOSING MARK
+3007;ID # IDEOGRAPHIC NUMBER ZERO
+3008;OP # LEFT ANGLE BRACKET
+3009;CL # RIGHT ANGLE BRACKET
+300A;OP # LEFT DOUBLE ANGLE BRACKET
+300B;CL # RIGHT DOUBLE ANGLE BRACKET
+300C;OP # LEFT CORNER BRACKET
+300D;CL # RIGHT CORNER BRACKET
+300E;OP # LEFT WHITE CORNER BRACKET
+300F;CL # RIGHT WHITE CORNER BRACKET
+3010;OP # LEFT BLACK LENTICULAR BRACKET
+3011;CL # RIGHT BLACK LENTICULAR BRACKET
+3012;ID # POSTAL MARK
+3013;ID # GETA MARK
+3014;OP # LEFT TORTOISE SHELL BRACKET
+3015;CL # RIGHT TORTOISE SHELL BRACKET
+3016;OP # LEFT WHITE LENTICULAR BRACKET
+3017;CL # RIGHT WHITE LENTICULAR BRACKET
+3018;OP # LEFT WHITE TORTOISE SHELL BRACKET
+3019;CL # RIGHT WHITE TORTOISE SHELL BRACKET
+301A;OP # LEFT WHITE SQUARE BRACKET
+301B;CL # RIGHT WHITE SQUARE BRACKET
+301C;NS # WAVE DASH
+301D;OP # REVERSED DOUBLE PRIME QUOTATION MARK
+301E;CL # DOUBLE PRIME QUOTATION MARK
+301F;CL # LOW DOUBLE PRIME QUOTATION MARK
+3020;ID # POSTAL MARK FACE
+3021;ID # HANGZHOU NUMERAL ONE
+3022;ID # HANGZHOU NUMERAL TWO
+3023;ID # HANGZHOU NUMERAL THREE
+3024;ID # HANGZHOU NUMERAL FOUR
+3025;ID # HANGZHOU NUMERAL FIVE
+3026;ID # HANGZHOU NUMERAL SIX
+3027;ID # HANGZHOU NUMERAL SEVEN
+3028;ID # HANGZHOU NUMERAL EIGHT
+3029;ID # HANGZHOU NUMERAL NINE
+302A;CM # IDEOGRAPHIC LEVEL TONE MARK
+302B;CM # IDEOGRAPHIC RISING TONE MARK
+302C;CM # IDEOGRAPHIC DEPARTING TONE MARK
+302D;CM # IDEOGRAPHIC ENTERING TONE MARK
+302E;CM # HANGUL SINGLE DOT TONE MARK
+302F;CM # HANGUL DOUBLE DOT TONE MARK
+3030;ID # WAVY DASH
+3031;ID # VERTICAL KANA REPEAT MARK
+3032;ID # VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033;ID # VERTICAL KANA REPEAT MARK UPPER HALF
+3034;ID # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035;ID # VERTICAL KANA REPEAT MARK LOWER HALF
+3036;ID # CIRCLED POSTAL MARK
+3037;ID # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038;ID # HANGZHOU NUMERAL TEN
+3039;ID # HANGZHOU NUMERAL TWENTY
+303A;ID # HANGZHOU NUMERAL THIRTY
+303B;NS # VERTICAL IDEOGRAPHIC ITERATION MARK
+303C;NS # MASU MARK
+303D;ID # PART ALTERNATION MARK
+303E;ID # IDEOGRAPHIC VARIATION INDICATOR
+303F;ID # IDEOGRAPHIC HALF FILL SPACE
+3041;NS # HIRAGANA LETTER SMALL A
+3042;ID # HIRAGANA LETTER A
+3043;NS # HIRAGANA LETTER SMALL I
+3044;ID # HIRAGANA LETTER I
+3045;NS # HIRAGANA LETTER SMALL U
+3046;ID # HIRAGANA LETTER U
+3047;NS # HIRAGANA LETTER SMALL E
+3048;ID # HIRAGANA LETTER E
+3049;NS # HIRAGANA LETTER SMALL O
+304A;ID # HIRAGANA LETTER O
+304B;ID # HIRAGANA LETTER KA
+304C;ID # HIRAGANA LETTER GA
+304D;ID # HIRAGANA LETTER KI
+304E;ID # HIRAGANA LETTER GI
+304F;ID # HIRAGANA LETTER KU
+3050;ID # HIRAGANA LETTER GU
+3051;ID # HIRAGANA LETTER KE
+3052;ID # HIRAGANA LETTER GE
+3053;ID # HIRAGANA LETTER KO
+3054;ID # HIRAGANA LETTER GO
+3055;ID # HIRAGANA LETTER SA
+3056;ID # HIRAGANA LETTER ZA
+3057;ID # HIRAGANA LETTER SI
+3058;ID # HIRAGANA LETTER ZI
+3059;ID # HIRAGANA LETTER SU
+305A;ID # HIRAGANA LETTER ZU
+305B;ID # HIRAGANA LETTER SE
+305C;ID # HIRAGANA LETTER ZE
+305D;ID # HIRAGANA LETTER SO
+305E;ID # HIRAGANA LETTER ZO
+305F;ID # HIRAGANA LETTER TA
+3060;ID # HIRAGANA LETTER DA
+3061;ID # HIRAGANA LETTER TI
+3062;ID # HIRAGANA LETTER DI
+3063;NS # HIRAGANA LETTER SMALL TU
+3064;ID # HIRAGANA LETTER TU
+3065;ID # HIRAGANA LETTER DU
+3066;ID # HIRAGANA LETTER TE
+3067;ID # HIRAGANA LETTER DE
+3068;ID # HIRAGANA LETTER TO
+3069;ID # HIRAGANA LETTER DO
+306A;ID # HIRAGANA LETTER NA
+306B;ID # HIRAGANA LETTER NI
+306C;ID # HIRAGANA LETTER NU
+306D;ID # HIRAGANA LETTER NE
+306E;ID # HIRAGANA LETTER NO
+306F;ID # HIRAGANA LETTER HA
+3070;ID # HIRAGANA LETTER BA
+3071;ID # HIRAGANA LETTER PA
+3072;ID # HIRAGANA LETTER HI
+3073;ID # HIRAGANA LETTER BI
+3074;ID # HIRAGANA LETTER PI
+3075;ID # HIRAGANA LETTER HU
+3076;ID # HIRAGANA LETTER BU
+3077;ID # HIRAGANA LETTER PU
+3078;ID # HIRAGANA LETTER HE
+3079;ID # HIRAGANA LETTER BE
+307A;ID # HIRAGANA LETTER PE
+307B;ID # HIRAGANA LETTER HO
+307C;ID # HIRAGANA LETTER BO
+307D;ID # HIRAGANA LETTER PO
+307E;ID # HIRAGANA LETTER MA
+307F;ID # HIRAGANA LETTER MI
+3080;ID # HIRAGANA LETTER MU
+3081;ID # HIRAGANA LETTER ME
+3082;ID # HIRAGANA LETTER MO
+3083;NS # HIRAGANA LETTER SMALL YA
+3084;ID # HIRAGANA LETTER YA
+3085;NS # HIRAGANA LETTER SMALL YU
+3086;ID # HIRAGANA LETTER YU
+3087;NS # HIRAGANA LETTER SMALL YO
+3088;ID # HIRAGANA LETTER YO
+3089;ID # HIRAGANA LETTER RA
+308A;ID # HIRAGANA LETTER RI
+308B;ID # HIRAGANA LETTER RU
+308C;ID # HIRAGANA LETTER RE
+308D;ID # HIRAGANA LETTER RO
+308E;NS # HIRAGANA LETTER SMALL WA
+308F;ID # HIRAGANA LETTER WA
+3090;ID # HIRAGANA LETTER WI
+3091;ID # HIRAGANA LETTER WE
+3092;ID # HIRAGANA LETTER WO
+3093;ID # HIRAGANA LETTER N
+3094;ID # HIRAGANA LETTER VU
+3095;NS # HIRAGANA LETTER SMALL KA
+3096;NS # HIRAGANA LETTER SMALL KE
+3099;CM # COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A;CM # COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B;NS # KATAKANA-HIRAGANA VOICED SOUND MARK
+309C;NS # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D;NS # HIRAGANA ITERATION MARK
+309E;NS # HIRAGANA VOICED ITERATION MARK
+309F;ID # HIRAGANA DIGRAPH YORI
+30A0;NS # KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1;NS # KATAKANA LETTER SMALL A
+30A2;ID # KATAKANA LETTER A
+30A3;NS # KATAKANA LETTER SMALL I
+30A4;ID # KATAKANA LETTER I
+30A5;NS # KATAKANA LETTER SMALL U
+30A6;ID # KATAKANA LETTER U
+30A7;NS # KATAKANA LETTER SMALL E
+30A8;ID # KATAKANA LETTER E
+30A9;NS # KATAKANA LETTER SMALL O
+30AA;ID # KATAKANA LETTER O
+30AB;ID # KATAKANA LETTER KA
+30AC;ID # KATAKANA LETTER GA
+30AD;ID # KATAKANA LETTER KI
+30AE;ID # KATAKANA LETTER GI
+30AF;ID # KATAKANA LETTER KU
+30B0;ID # KATAKANA LETTER GU
+30B1;ID # KATAKANA LETTER KE
+30B2;ID # KATAKANA LETTER GE
+30B3;ID # KATAKANA LETTER KO
+30B4;ID # KATAKANA LETTER GO
+30B5;ID # KATAKANA LETTER SA
+30B6;ID # KATAKANA LETTER ZA
+30B7;ID # KATAKANA LETTER SI
+30B8;ID # KATAKANA LETTER ZI
+30B9;ID # KATAKANA LETTER SU
+30BA;ID # KATAKANA LETTER ZU
+30BB;ID # KATAKANA LETTER SE
+30BC;ID # KATAKANA LETTER ZE
+30BD;ID # KATAKANA LETTER SO
+30BE;ID # KATAKANA LETTER ZO
+30BF;ID # KATAKANA LETTER TA
+30C0;ID # KATAKANA LETTER DA
+30C1;ID # KATAKANA LETTER TI
+30C2;ID # KATAKANA LETTER DI
+30C3;NS # KATAKANA LETTER SMALL TU
+30C4;ID # KATAKANA LETTER TU
+30C5;ID # KATAKANA LETTER DU
+30C6;ID # KATAKANA LETTER TE
+30C7;ID # KATAKANA LETTER DE
+30C8;ID # KATAKANA LETTER TO
+30C9;ID # KATAKANA LETTER DO
+30CA;ID # KATAKANA LETTER NA
+30CB;ID # KATAKANA LETTER NI
+30CC;ID # KATAKANA LETTER NU
+30CD;ID # KATAKANA LETTER NE
+30CE;ID # KATAKANA LETTER NO
+30CF;ID # KATAKANA LETTER HA
+30D0;ID # KATAKANA LETTER BA
+30D1;ID # KATAKANA LETTER PA
+30D2;ID # KATAKANA LETTER HI
+30D3;ID # KATAKANA LETTER BI
+30D4;ID # KATAKANA LETTER PI
+30D5;ID # KATAKANA LETTER HU
+30D6;ID # KATAKANA LETTER BU
+30D7;ID # KATAKANA LETTER PU
+30D8;ID # KATAKANA LETTER HE
+30D9;ID # KATAKANA LETTER BE
+30DA;ID # KATAKANA LETTER PE
+30DB;ID # KATAKANA LETTER HO
+30DC;ID # KATAKANA LETTER BO
+30DD;ID # KATAKANA LETTER PO
+30DE;ID # KATAKANA LETTER MA
+30DF;ID # KATAKANA LETTER MI
+30E0;ID # KATAKANA LETTER MU
+30E1;ID # KATAKANA LETTER ME
+30E2;ID # KATAKANA LETTER MO
+30E3;NS # KATAKANA LETTER SMALL YA
+30E4;ID # KATAKANA LETTER YA
+30E5;NS # KATAKANA LETTER SMALL YU
+30E6;ID # KATAKANA LETTER YU
+30E7;NS # KATAKANA LETTER SMALL YO
+30E8;ID # KATAKANA LETTER YO
+30E9;ID # KATAKANA LETTER RA
+30EA;ID # KATAKANA LETTER RI
+30EB;ID # KATAKANA LETTER RU
+30EC;ID # KATAKANA LETTER RE
+30ED;ID # KATAKANA LETTER RO
+30EE;NS # KATAKANA LETTER SMALL WA
+30EF;ID # KATAKANA LETTER WA
+30F0;ID # KATAKANA LETTER WI
+30F1;ID # KATAKANA LETTER WE
+30F2;ID # KATAKANA LETTER WO
+30F3;ID # KATAKANA LETTER N
+30F4;ID # KATAKANA LETTER VU
+30F5;NS # KATAKANA LETTER SMALL KA
+30F6;NS # KATAKANA LETTER SMALL KE
+30F7;ID # KATAKANA LETTER VA
+30F8;ID # KATAKANA LETTER VI
+30F9;ID # KATAKANA LETTER VE
+30FA;ID # KATAKANA LETTER VO
+30FB;NS # KATAKANA MIDDLE DOT
+30FC;NS # KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD;NS # KATAKANA ITERATION MARK
+30FE;NS # KATAKANA VOICED ITERATION MARK
+30FF;ID # KATAKANA DIGRAPH KOTO
+3105;ID # BOPOMOFO LETTER B
+3106;ID # BOPOMOFO LETTER P
+3107;ID # BOPOMOFO LETTER M
+3108;ID # BOPOMOFO LETTER F
+3109;ID # BOPOMOFO LETTER D
+310A;ID # BOPOMOFO LETTER T
+310B;ID # BOPOMOFO LETTER N
+310C;ID # BOPOMOFO LETTER L
+310D;ID # BOPOMOFO LETTER G
+310E;ID # BOPOMOFO LETTER K
+310F;ID # BOPOMOFO LETTER H
+3110;ID # BOPOMOFO LETTER J
+3111;ID # BOPOMOFO LETTER Q
+3112;ID # BOPOMOFO LETTER X
+3113;ID # BOPOMOFO LETTER ZH
+3114;ID # BOPOMOFO LETTER CH
+3115;ID # BOPOMOFO LETTER SH
+3116;ID # BOPOMOFO LETTER R
+3117;ID # BOPOMOFO LETTER Z
+3118;ID # BOPOMOFO LETTER C
+3119;ID # BOPOMOFO LETTER S
+311A;ID # BOPOMOFO LETTER A
+311B;ID # BOPOMOFO LETTER O
+311C;ID # BOPOMOFO LETTER E
+311D;ID # BOPOMOFO LETTER EH
+311E;ID # BOPOMOFO LETTER AI
+311F;ID # BOPOMOFO LETTER EI
+3120;ID # BOPOMOFO LETTER AU
+3121;ID # BOPOMOFO LETTER OU
+3122;ID # BOPOMOFO LETTER AN
+3123;ID # BOPOMOFO LETTER EN
+3124;ID # BOPOMOFO LETTER ANG
+3125;ID # BOPOMOFO LETTER ENG
+3126;ID # BOPOMOFO LETTER ER
+3127;ID # BOPOMOFO LETTER I
+3128;ID # BOPOMOFO LETTER U
+3129;ID # BOPOMOFO LETTER IU
+312A;ID # BOPOMOFO LETTER V
+312B;ID # BOPOMOFO LETTER NG
+312C;ID # BOPOMOFO LETTER GN
+3131;ID # HANGUL LETTER KIYEOK
+3132;ID # HANGUL LETTER SSANGKIYEOK
+3133;ID # HANGUL LETTER KIYEOK-SIOS
+3134;ID # HANGUL LETTER NIEUN
+3135;ID # HANGUL LETTER NIEUN-CIEUC
+3136;ID # HANGUL LETTER NIEUN-HIEUH
+3137;ID # HANGUL LETTER TIKEUT
+3138;ID # HANGUL LETTER SSANGTIKEUT
+3139;ID # HANGUL LETTER RIEUL
+313A;ID # HANGUL LETTER RIEUL-KIYEOK
+313B;ID # HANGUL LETTER RIEUL-MIEUM
+313C;ID # HANGUL LETTER RIEUL-PIEUP
+313D;ID # HANGUL LETTER RIEUL-SIOS
+313E;ID # HANGUL LETTER RIEUL-THIEUTH
+313F;ID # HANGUL LETTER RIEUL-PHIEUPH
+3140;ID # HANGUL LETTER RIEUL-HIEUH
+3141;ID # HANGUL LETTER MIEUM
+3142;ID # HANGUL LETTER PIEUP
+3143;ID # HANGUL LETTER SSANGPIEUP
+3144;ID # HANGUL LETTER PIEUP-SIOS
+3145;ID # HANGUL LETTER SIOS
+3146;ID # HANGUL LETTER SSANGSIOS
+3147;ID # HANGUL LETTER IEUNG
+3148;ID # HANGUL LETTER CIEUC
+3149;ID # HANGUL LETTER SSANGCIEUC
+314A;ID # HANGUL LETTER CHIEUCH
+314B;ID # HANGUL LETTER KHIEUKH
+314C;ID # HANGUL LETTER THIEUTH
+314D;ID # HANGUL LETTER PHIEUPH
+314E;ID # HANGUL LETTER HIEUH
+314F;ID # HANGUL LETTER A
+3150;ID # HANGUL LETTER AE
+3151;ID # HANGUL LETTER YA
+3152;ID # HANGUL LETTER YAE
+3153;ID # HANGUL LETTER EO
+3154;ID # HANGUL LETTER E
+3155;ID # HANGUL LETTER YEO
+3156;ID # HANGUL LETTER YE
+3157;ID # HANGUL LETTER O
+3158;ID # HANGUL LETTER WA
+3159;ID # HANGUL LETTER WAE
+315A;ID # HANGUL LETTER OE
+315B;ID # HANGUL LETTER YO
+315C;ID # HANGUL LETTER U
+315D;ID # HANGUL LETTER WEO
+315E;ID # HANGUL LETTER WE
+315F;ID # HANGUL LETTER WI
+3160;ID # HANGUL LETTER YU
+3161;ID # HANGUL LETTER EU
+3162;ID # HANGUL LETTER YI
+3163;ID # HANGUL LETTER I
+3164;ID # HANGUL FILLER
+3165;ID # HANGUL LETTER SSANGNIEUN
+3166;ID # HANGUL LETTER NIEUN-TIKEUT
+3167;ID # HANGUL LETTER NIEUN-SIOS
+3168;ID # HANGUL LETTER NIEUN-PANSIOS
+3169;ID # HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A;ID # HANGUL LETTER RIEUL-TIKEUT
+316B;ID # HANGUL LETTER RIEUL-PIEUP-SIOS
+316C;ID # HANGUL LETTER RIEUL-PANSIOS
+316D;ID # HANGUL LETTER RIEUL-YEORINHIEUH
+316E;ID # HANGUL LETTER MIEUM-PIEUP
+316F;ID # HANGUL LETTER MIEUM-SIOS
+3170;ID # HANGUL LETTER MIEUM-PANSIOS
+3171;ID # HANGUL LETTER KAPYEOUNMIEUM
+3172;ID # HANGUL LETTER PIEUP-KIYEOK
+3173;ID # HANGUL LETTER PIEUP-TIKEUT
+3174;ID # HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175;ID # HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176;ID # HANGUL LETTER PIEUP-CIEUC
+3177;ID # HANGUL LETTER PIEUP-THIEUTH
+3178;ID # HANGUL LETTER KAPYEOUNPIEUP
+3179;ID # HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A;ID # HANGUL LETTER SIOS-KIYEOK
+317B;ID # HANGUL LETTER SIOS-NIEUN
+317C;ID # HANGUL LETTER SIOS-TIKEUT
+317D;ID # HANGUL LETTER SIOS-PIEUP
+317E;ID # HANGUL LETTER SIOS-CIEUC
+317F;ID # HANGUL LETTER PANSIOS
+3180;ID # HANGUL LETTER SSANGIEUNG
+3181;ID # HANGUL LETTER YESIEUNG
+3182;ID # HANGUL LETTER YESIEUNG-SIOS
+3183;ID # HANGUL LETTER YESIEUNG-PANSIOS
+3184;ID # HANGUL LETTER KAPYEOUNPHIEUPH
+3185;ID # HANGUL LETTER SSANGHIEUH
+3186;ID # HANGUL LETTER YEORINHIEUH
+3187;ID # HANGUL LETTER YO-YA
+3188;ID # HANGUL LETTER YO-YAE
+3189;ID # HANGUL LETTER YO-I
+318A;ID # HANGUL LETTER YU-YEO
+318B;ID # HANGUL LETTER YU-YE
+318C;ID # HANGUL LETTER YU-I
+318D;ID # HANGUL LETTER ARAEA
+318E;ID # HANGUL LETTER ARAEAE
+3190;ID # IDEOGRAPHIC ANNOTATION LINKING MARK
+3191;ID # IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192;ID # IDEOGRAPHIC ANNOTATION ONE MARK
+3193;ID # IDEOGRAPHIC ANNOTATION TWO MARK
+3194;ID # IDEOGRAPHIC ANNOTATION THREE MARK
+3195;ID # IDEOGRAPHIC ANNOTATION FOUR MARK
+3196;ID # IDEOGRAPHIC ANNOTATION TOP MARK
+3197;ID # IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198;ID # IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199;ID # IDEOGRAPHIC ANNOTATION FIRST MARK
+319A;ID # IDEOGRAPHIC ANNOTATION SECOND MARK
+319B;ID # IDEOGRAPHIC ANNOTATION THIRD MARK
+319C;ID # IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D;ID # IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E;ID # IDEOGRAPHIC ANNOTATION EARTH MARK
+319F;ID # IDEOGRAPHIC ANNOTATION MAN MARK
+31A0;ID # BOPOMOFO LETTER BU
+31A1;ID # BOPOMOFO LETTER ZI
+31A2;ID # BOPOMOFO LETTER JI
+31A3;ID # BOPOMOFO LETTER GU
+31A4;ID # BOPOMOFO LETTER EE
+31A5;ID # BOPOMOFO LETTER ENN
+31A6;ID # BOPOMOFO LETTER OO
+31A7;ID # BOPOMOFO LETTER ONN
+31A8;ID # BOPOMOFO LETTER IR
+31A9;ID # BOPOMOFO LETTER ANN
+31AA;ID # BOPOMOFO LETTER INN
+31AB;ID # BOPOMOFO LETTER UNN
+31AC;ID # BOPOMOFO LETTER IM
+31AD;ID # BOPOMOFO LETTER NGG
+31AE;ID # BOPOMOFO LETTER AINN
+31AF;ID # BOPOMOFO LETTER AUNN
+31B0;ID # BOPOMOFO LETTER AM
+31B1;ID # BOPOMOFO LETTER OM
+31B2;ID # BOPOMOFO LETTER ONG
+31B3;ID # BOPOMOFO LETTER INNN
+31B4;ID # BOPOMOFO FINAL LETTER P
+31B5;ID # BOPOMOFO FINAL LETTER T
+31B6;ID # BOPOMOFO FINAL LETTER K
+31B7;ID # BOPOMOFO FINAL LETTER H
+31C0;ID # CJK STROKE T
+31C1;ID # CJK STROKE WG
+31C2;ID # CJK STROKE XG
+31C3;ID # CJK STROKE BXG
+31C4;ID # CJK STROKE SW
+31C5;ID # CJK STROKE HZZ
+31C6;ID # CJK STROKE HZG
+31C7;ID # CJK STROKE HP
+31C8;ID # CJK STROKE HZWG
+31C9;ID # CJK STROKE SZWG
+31CA;ID # CJK STROKE HZT
+31CB;ID # CJK STROKE HZZP
+31CC;ID # CJK STROKE HPWG
+31CD;ID # CJK STROKE HZW
+31CE;ID # CJK STROKE HZZZ
+31CF;ID # CJK STROKE N
+31F0;NS # KATAKANA LETTER SMALL KU
+31F1;NS # KATAKANA LETTER SMALL SI
+31F2;NS # KATAKANA LETTER SMALL SU
+31F3;NS # KATAKANA LETTER SMALL TO
+31F4;NS # KATAKANA LETTER SMALL NU
+31F5;NS # KATAKANA LETTER SMALL HA
+31F6;NS # KATAKANA LETTER SMALL HI
+31F7;NS # KATAKANA LETTER SMALL HU
+31F8;NS # KATAKANA LETTER SMALL HE
+31F9;NS # KATAKANA LETTER SMALL HO
+31FA;NS # KATAKANA LETTER SMALL MU
+31FB;NS # KATAKANA LETTER SMALL RA
+31FC;NS # KATAKANA LETTER SMALL RI
+31FD;NS # KATAKANA LETTER SMALL RU
+31FE;NS # KATAKANA LETTER SMALL RE
+31FF;NS # KATAKANA LETTER SMALL RO
+3200;ID # PARENTHESIZED HANGUL KIYEOK
+3201;ID # PARENTHESIZED HANGUL NIEUN
+3202;ID # PARENTHESIZED HANGUL TIKEUT
+3203;ID # PARENTHESIZED HANGUL RIEUL
+3204;ID # PARENTHESIZED HANGUL MIEUM
+3205;ID # PARENTHESIZED HANGUL PIEUP
+3206;ID # PARENTHESIZED HANGUL SIOS
+3207;ID # PARENTHESIZED HANGUL IEUNG
+3208;ID # PARENTHESIZED HANGUL CIEUC
+3209;ID # PARENTHESIZED HANGUL CHIEUCH
+320A;ID # PARENTHESIZED HANGUL KHIEUKH
+320B;ID # PARENTHESIZED HANGUL THIEUTH
+320C;ID # PARENTHESIZED HANGUL PHIEUPH
+320D;ID # PARENTHESIZED HANGUL HIEUH
+320E;ID # PARENTHESIZED HANGUL KIYEOK A
+320F;ID # PARENTHESIZED HANGUL NIEUN A
+3210;ID # PARENTHESIZED HANGUL TIKEUT A
+3211;ID # PARENTHESIZED HANGUL RIEUL A
+3212;ID # PARENTHESIZED HANGUL MIEUM A
+3213;ID # PARENTHESIZED HANGUL PIEUP A
+3214;ID # PARENTHESIZED HANGUL SIOS A
+3215;ID # PARENTHESIZED HANGUL IEUNG A
+3216;ID # PARENTHESIZED HANGUL CIEUC A
+3217;ID # PARENTHESIZED HANGUL CHIEUCH A
+3218;ID # PARENTHESIZED HANGUL KHIEUKH A
+3219;ID # PARENTHESIZED HANGUL THIEUTH A
+321A;ID # PARENTHESIZED HANGUL PHIEUPH A
+321B;ID # PARENTHESIZED HANGUL HIEUH A
+321C;ID # PARENTHESIZED HANGUL CIEUC U
+321D;ID # PARENTHESIZED KOREAN CHARACTER OJEON
+321E;ID # PARENTHESIZED KOREAN CHARACTER O HU
+3220;ID # PARENTHESIZED IDEOGRAPH ONE
+3221;ID # PARENTHESIZED IDEOGRAPH TWO
+3222;ID # PARENTHESIZED IDEOGRAPH THREE
+3223;ID # PARENTHESIZED IDEOGRAPH FOUR
+3224;ID # PARENTHESIZED IDEOGRAPH FIVE
+3225;ID # PARENTHESIZED IDEOGRAPH SIX
+3226;ID # PARENTHESIZED IDEOGRAPH SEVEN
+3227;ID # PARENTHESIZED IDEOGRAPH EIGHT
+3228;ID # PARENTHESIZED IDEOGRAPH NINE
+3229;ID # PARENTHESIZED IDEOGRAPH TEN
+322A;ID # PARENTHESIZED IDEOGRAPH MOON
+322B;ID # PARENTHESIZED IDEOGRAPH FIRE
+322C;ID # PARENTHESIZED IDEOGRAPH WATER
+322D;ID # PARENTHESIZED IDEOGRAPH WOOD
+322E;ID # PARENTHESIZED IDEOGRAPH METAL
+322F;ID # PARENTHESIZED IDEOGRAPH EARTH
+3230;ID # PARENTHESIZED IDEOGRAPH SUN
+3231;ID # PARENTHESIZED IDEOGRAPH STOCK
+3232;ID # PARENTHESIZED IDEOGRAPH HAVE
+3233;ID # PARENTHESIZED IDEOGRAPH SOCIETY
+3234;ID # PARENTHESIZED IDEOGRAPH NAME
+3235;ID # PARENTHESIZED IDEOGRAPH SPECIAL
+3236;ID # PARENTHESIZED IDEOGRAPH FINANCIAL
+3237;ID # PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238;ID # PARENTHESIZED IDEOGRAPH LABOR
+3239;ID # PARENTHESIZED IDEOGRAPH REPRESENT
+323A;ID # PARENTHESIZED IDEOGRAPH CALL
+323B;ID # PARENTHESIZED IDEOGRAPH STUDY
+323C;ID # PARENTHESIZED IDEOGRAPH SUPERVISE
+323D;ID # PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E;ID # PARENTHESIZED IDEOGRAPH RESOURCE
+323F;ID # PARENTHESIZED IDEOGRAPH ALLIANCE
+3240;ID # PARENTHESIZED IDEOGRAPH FESTIVAL
+3241;ID # PARENTHESIZED IDEOGRAPH REST
+3242;ID # PARENTHESIZED IDEOGRAPH SELF
+3243;ID # PARENTHESIZED IDEOGRAPH REACH
+3250;ID # PARTNERSHIP SIGN
+3251;ID # CIRCLED NUMBER TWENTY ONE
+3252;ID # CIRCLED NUMBER TWENTY TWO
+3253;ID # CIRCLED NUMBER TWENTY THREE
+3254;ID # CIRCLED NUMBER TWENTY FOUR
+3255;ID # CIRCLED NUMBER TWENTY FIVE
+3256;ID # CIRCLED NUMBER TWENTY SIX
+3257;ID # CIRCLED NUMBER TWENTY SEVEN
+3258;ID # CIRCLED NUMBER TWENTY EIGHT
+3259;ID # CIRCLED NUMBER TWENTY NINE
+325A;ID # CIRCLED NUMBER THIRTY
+325B;ID # CIRCLED NUMBER THIRTY ONE
+325C;ID # CIRCLED NUMBER THIRTY TWO
+325D;ID # CIRCLED NUMBER THIRTY THREE
+325E;ID # CIRCLED NUMBER THIRTY FOUR
+325F;ID # CIRCLED NUMBER THIRTY FIVE
+3260;ID # CIRCLED HANGUL KIYEOK
+3261;ID # CIRCLED HANGUL NIEUN
+3262;ID # CIRCLED HANGUL TIKEUT
+3263;ID # CIRCLED HANGUL RIEUL
+3264;ID # CIRCLED HANGUL MIEUM
+3265;ID # CIRCLED HANGUL PIEUP
+3266;ID # CIRCLED HANGUL SIOS
+3267;ID # CIRCLED HANGUL IEUNG
+3268;ID # CIRCLED HANGUL CIEUC
+3269;ID # CIRCLED HANGUL CHIEUCH
+326A;ID # CIRCLED HANGUL KHIEUKH
+326B;ID # CIRCLED HANGUL THIEUTH
+326C;ID # CIRCLED HANGUL PHIEUPH
+326D;ID # CIRCLED HANGUL HIEUH
+326E;ID # CIRCLED HANGUL KIYEOK A
+326F;ID # CIRCLED HANGUL NIEUN A
+3270;ID # CIRCLED HANGUL TIKEUT A
+3271;ID # CIRCLED HANGUL RIEUL A
+3272;ID # CIRCLED HANGUL MIEUM A
+3273;ID # CIRCLED HANGUL PIEUP A
+3274;ID # CIRCLED HANGUL SIOS A
+3275;ID # CIRCLED HANGUL IEUNG A
+3276;ID # CIRCLED HANGUL CIEUC A
+3277;ID # CIRCLED HANGUL CHIEUCH A
+3278;ID # CIRCLED HANGUL KHIEUKH A
+3279;ID # CIRCLED HANGUL THIEUTH A
+327A;ID # CIRCLED HANGUL PHIEUPH A
+327B;ID # CIRCLED HANGUL HIEUH A
+327C;ID # CIRCLED KOREAN CHARACTER CHAMKO
+327D;ID # CIRCLED KOREAN CHARACTER JUEUI
+327E;ID # CIRCLED HANGUL IEUNG U
+327F;ID # KOREAN STANDARD SYMBOL
+3280;ID # CIRCLED IDEOGRAPH ONE
+3281;ID # CIRCLED IDEOGRAPH TWO
+3282;ID # CIRCLED IDEOGRAPH THREE
+3283;ID # CIRCLED IDEOGRAPH FOUR
+3284;ID # CIRCLED IDEOGRAPH FIVE
+3285;ID # CIRCLED IDEOGRAPH SIX
+3286;ID # CIRCLED IDEOGRAPH SEVEN
+3287;ID # CIRCLED IDEOGRAPH EIGHT
+3288;ID # CIRCLED IDEOGRAPH NINE
+3289;ID # CIRCLED IDEOGRAPH TEN
+328A;ID # CIRCLED IDEOGRAPH MOON
+328B;ID # CIRCLED IDEOGRAPH FIRE
+328C;ID # CIRCLED IDEOGRAPH WATER
+328D;ID # CIRCLED IDEOGRAPH WOOD
+328E;ID # CIRCLED IDEOGRAPH METAL
+328F;ID # CIRCLED IDEOGRAPH EARTH
+3290;ID # CIRCLED IDEOGRAPH SUN
+3291;ID # CIRCLED IDEOGRAPH STOCK
+3292;ID # CIRCLED IDEOGRAPH HAVE
+3293;ID # CIRCLED IDEOGRAPH SOCIETY
+3294;ID # CIRCLED IDEOGRAPH NAME
+3295;ID # CIRCLED IDEOGRAPH SPECIAL
+3296;ID # CIRCLED IDEOGRAPH FINANCIAL
+3297;ID # CIRCLED IDEOGRAPH CONGRATULATION
+3298;ID # CIRCLED IDEOGRAPH LABOR
+3299;ID # CIRCLED IDEOGRAPH SECRET
+329A;ID # CIRCLED IDEOGRAPH MALE
+329B;ID # CIRCLED IDEOGRAPH FEMALE
+329C;ID # CIRCLED IDEOGRAPH SUITABLE
+329D;ID # CIRCLED IDEOGRAPH EXCELLENT
+329E;ID # CIRCLED IDEOGRAPH PRINT
+329F;ID # CIRCLED IDEOGRAPH ATTENTION
+32A0;ID # CIRCLED IDEOGRAPH ITEM
+32A1;ID # CIRCLED IDEOGRAPH REST
+32A2;ID # CIRCLED IDEOGRAPH COPY
+32A3;ID # CIRCLED IDEOGRAPH CORRECT
+32A4;ID # CIRCLED IDEOGRAPH HIGH
+32A5;ID # CIRCLED IDEOGRAPH CENTRE
+32A6;ID # CIRCLED IDEOGRAPH LOW
+32A7;ID # CIRCLED IDEOGRAPH LEFT
+32A8;ID # CIRCLED IDEOGRAPH RIGHT
+32A9;ID # CIRCLED IDEOGRAPH MEDICINE
+32AA;ID # CIRCLED IDEOGRAPH RELIGION
+32AB;ID # CIRCLED IDEOGRAPH STUDY
+32AC;ID # CIRCLED IDEOGRAPH SUPERVISE
+32AD;ID # CIRCLED IDEOGRAPH ENTERPRISE
+32AE;ID # CIRCLED IDEOGRAPH RESOURCE
+32AF;ID # CIRCLED IDEOGRAPH ALLIANCE
+32B0;ID # CIRCLED IDEOGRAPH NIGHT
+32B1;ID # CIRCLED NUMBER THIRTY SIX
+32B2;ID # CIRCLED NUMBER THIRTY SEVEN
+32B3;ID # CIRCLED NUMBER THIRTY EIGHT
+32B4;ID # CIRCLED NUMBER THIRTY NINE
+32B5;ID # CIRCLED NUMBER FORTY
+32B6;ID # CIRCLED NUMBER FORTY ONE
+32B7;ID # CIRCLED NUMBER FORTY TWO
+32B8;ID # CIRCLED NUMBER FORTY THREE
+32B9;ID # CIRCLED NUMBER FORTY FOUR
+32BA;ID # CIRCLED NUMBER FORTY FIVE
+32BB;ID # CIRCLED NUMBER FORTY SIX
+32BC;ID # CIRCLED NUMBER FORTY SEVEN
+32BD;ID # CIRCLED NUMBER FORTY EIGHT
+32BE;ID # CIRCLED NUMBER FORTY NINE
+32BF;ID # CIRCLED NUMBER FIFTY
+32C0;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC;ID # SQUARE HG
+32CD;ID # SQUARE ERG
+32CE;ID # SQUARE EV
+32CF;ID # LIMITED LIABILITY SIGN
+32D0;ID # CIRCLED KATAKANA A
+32D1;ID # CIRCLED KATAKANA I
+32D2;ID # CIRCLED KATAKANA U
+32D3;ID # CIRCLED KATAKANA E
+32D4;ID # CIRCLED KATAKANA O
+32D5;ID # CIRCLED KATAKANA KA
+32D6;ID # CIRCLED KATAKANA KI
+32D7;ID # CIRCLED KATAKANA KU
+32D8;ID # CIRCLED KATAKANA KE
+32D9;ID # CIRCLED KATAKANA KO
+32DA;ID # CIRCLED KATAKANA SA
+32DB;ID # CIRCLED KATAKANA SI
+32DC;ID # CIRCLED KATAKANA SU
+32DD;ID # CIRCLED KATAKANA SE
+32DE;ID # CIRCLED KATAKANA SO
+32DF;ID # CIRCLED KATAKANA TA
+32E0;ID # CIRCLED KATAKANA TI
+32E1;ID # CIRCLED KATAKANA TU
+32E2;ID # CIRCLED KATAKANA TE
+32E3;ID # CIRCLED KATAKANA TO
+32E4;ID # CIRCLED KATAKANA NA
+32E5;ID # CIRCLED KATAKANA NI
+32E6;ID # CIRCLED KATAKANA NU
+32E7;ID # CIRCLED KATAKANA NE
+32E8;ID # CIRCLED KATAKANA NO
+32E9;ID # CIRCLED KATAKANA HA
+32EA;ID # CIRCLED KATAKANA HI
+32EB;ID # CIRCLED KATAKANA HU
+32EC;ID # CIRCLED KATAKANA HE
+32ED;ID # CIRCLED KATAKANA HO
+32EE;ID # CIRCLED KATAKANA MA
+32EF;ID # CIRCLED KATAKANA MI
+32F0;ID # CIRCLED KATAKANA MU
+32F1;ID # CIRCLED KATAKANA ME
+32F2;ID # CIRCLED KATAKANA MO
+32F3;ID # CIRCLED KATAKANA YA
+32F4;ID # CIRCLED KATAKANA YU
+32F5;ID # CIRCLED KATAKANA YO
+32F6;ID # CIRCLED KATAKANA RA
+32F7;ID # CIRCLED KATAKANA RI
+32F8;ID # CIRCLED KATAKANA RU
+32F9;ID # CIRCLED KATAKANA RE
+32FA;ID # CIRCLED KATAKANA RO
+32FB;ID # CIRCLED KATAKANA WA
+32FC;ID # CIRCLED KATAKANA WI
+32FD;ID # CIRCLED KATAKANA WE
+32FE;ID # CIRCLED KATAKANA WO
+3300;ID # SQUARE APAATO
+3301;ID # SQUARE ARUHUA
+3302;ID # SQUARE ANPEA
+3303;ID # SQUARE AARU
+3304;ID # SQUARE ININGU
+3305;ID # SQUARE INTI
+3306;ID # SQUARE UON
+3307;ID # SQUARE ESUKUUDO
+3308;ID # SQUARE EEKAA
+3309;ID # SQUARE ONSU
+330A;ID # SQUARE OOMU
+330B;ID # SQUARE KAIRI
+330C;ID # SQUARE KARATTO
+330D;ID # SQUARE KARORII
+330E;ID # SQUARE GARON
+330F;ID # SQUARE GANMA
+3310;ID # SQUARE GIGA
+3311;ID # SQUARE GINII
+3312;ID # SQUARE KYURII
+3313;ID # SQUARE GIRUDAA
+3314;ID # SQUARE KIRO
+3315;ID # SQUARE KIROGURAMU
+3316;ID # SQUARE KIROMEETORU
+3317;ID # SQUARE KIROWATTO
+3318;ID # SQUARE GURAMU
+3319;ID # SQUARE GURAMUTON
+331A;ID # SQUARE KURUZEIRO
+331B;ID # SQUARE KUROONE
+331C;ID # SQUARE KEESU
+331D;ID # SQUARE KORUNA
+331E;ID # SQUARE KOOPO
+331F;ID # SQUARE SAIKURU
+3320;ID # SQUARE SANTIIMU
+3321;ID # SQUARE SIRINGU
+3322;ID # SQUARE SENTI
+3323;ID # SQUARE SENTO
+3324;ID # SQUARE DAASU
+3325;ID # SQUARE DESI
+3326;ID # SQUARE DORU
+3327;ID # SQUARE TON
+3328;ID # SQUARE NANO
+3329;ID # SQUARE NOTTO
+332A;ID # SQUARE HAITU
+332B;ID # SQUARE PAASENTO
+332C;ID # SQUARE PAATU
+332D;ID # SQUARE BAARERU
+332E;ID # SQUARE PIASUTORU
+332F;ID # SQUARE PIKURU
+3330;ID # SQUARE PIKO
+3331;ID # SQUARE BIRU
+3332;ID # SQUARE HUARADDO
+3333;ID # SQUARE HUIITO
+3334;ID # SQUARE BUSSYERU
+3335;ID # SQUARE HURAN
+3336;ID # SQUARE HEKUTAARU
+3337;ID # SQUARE PESO
+3338;ID # SQUARE PENIHI
+3339;ID # SQUARE HERUTU
+333A;ID # SQUARE PENSU
+333B;ID # SQUARE PEEZI
+333C;ID # SQUARE BEETA
+333D;ID # SQUARE POINTO
+333E;ID # SQUARE BORUTO
+333F;ID # SQUARE HON
+3340;ID # SQUARE PONDO
+3341;ID # SQUARE HOORU
+3342;ID # SQUARE HOON
+3343;ID # SQUARE MAIKURO
+3344;ID # SQUARE MAIRU
+3345;ID # SQUARE MAHHA
+3346;ID # SQUARE MARUKU
+3347;ID # SQUARE MANSYON
+3348;ID # SQUARE MIKURON
+3349;ID # SQUARE MIRI
+334A;ID # SQUARE MIRIBAARU
+334B;ID # SQUARE MEGA
+334C;ID # SQUARE MEGATON
+334D;ID # SQUARE MEETORU
+334E;ID # SQUARE YAADO
+334F;ID # SQUARE YAARU
+3350;ID # SQUARE YUAN
+3351;ID # SQUARE RITTORU
+3352;ID # SQUARE RIRA
+3353;ID # SQUARE RUPII
+3354;ID # SQUARE RUUBURU
+3355;ID # SQUARE REMU
+3356;ID # SQUARE RENTOGEN
+3357;ID # SQUARE WATTO
+3358;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371;ID # SQUARE HPA
+3372;ID # SQUARE DA
+3373;ID # SQUARE AU
+3374;ID # SQUARE BAR
+3375;ID # SQUARE OV
+3376;ID # SQUARE PC
+3377;ID # SQUARE DM
+3378;ID # SQUARE DM SQUARED
+3379;ID # SQUARE DM CUBED
+337A;ID # SQUARE IU
+337B;ID # SQUARE ERA NAME HEISEI
+337C;ID # SQUARE ERA NAME SYOUWA
+337D;ID # SQUARE ERA NAME TAISYOU
+337E;ID # SQUARE ERA NAME MEIZI
+337F;ID # SQUARE CORPORATION
+3380;ID # SQUARE PA AMPS
+3381;ID # SQUARE NA
+3382;ID # SQUARE MU A
+3383;ID # SQUARE MA
+3384;ID # SQUARE KA
+3385;ID # SQUARE KB
+3386;ID # SQUARE MB
+3387;ID # SQUARE GB
+3388;ID # SQUARE CAL
+3389;ID # SQUARE KCAL
+338A;ID # SQUARE PF
+338B;ID # SQUARE NF
+338C;ID # SQUARE MU F
+338D;ID # SQUARE MU G
+338E;ID # SQUARE MG
+338F;ID # SQUARE KG
+3390;ID # SQUARE HZ
+3391;ID # SQUARE KHZ
+3392;ID # SQUARE MHZ
+3393;ID # SQUARE GHZ
+3394;ID # SQUARE THZ
+3395;ID # SQUARE MU L
+3396;ID # SQUARE ML
+3397;ID # SQUARE DL
+3398;ID # SQUARE KL
+3399;ID # SQUARE FM
+339A;ID # SQUARE NM
+339B;ID # SQUARE MU M
+339C;ID # SQUARE MM
+339D;ID # SQUARE CM
+339E;ID # SQUARE KM
+339F;ID # SQUARE MM SQUARED
+33A0;ID # SQUARE CM SQUARED
+33A1;ID # SQUARE M SQUARED
+33A2;ID # SQUARE KM SQUARED
+33A3;ID # SQUARE MM CUBED
+33A4;ID # SQUARE CM CUBED
+33A5;ID # SQUARE M CUBED
+33A6;ID # SQUARE KM CUBED
+33A7;ID # SQUARE M OVER S
+33A8;ID # SQUARE M OVER S SQUARED
+33A9;ID # SQUARE PA
+33AA;ID # SQUARE KPA
+33AB;ID # SQUARE MPA
+33AC;ID # SQUARE GPA
+33AD;ID # SQUARE RAD
+33AE;ID # SQUARE RAD OVER S
+33AF;ID # SQUARE RAD OVER S SQUARED
+33B0;ID # SQUARE PS
+33B1;ID # SQUARE NS
+33B2;ID # SQUARE MU S
+33B3;ID # SQUARE MS
+33B4;ID # SQUARE PV
+33B5;ID # SQUARE NV
+33B6;ID # SQUARE MU V
+33B7;ID # SQUARE MV
+33B8;ID # SQUARE KV
+33B9;ID # SQUARE MV MEGA
+33BA;ID # SQUARE PW
+33BB;ID # SQUARE NW
+33BC;ID # SQUARE MU W
+33BD;ID # SQUARE MW
+33BE;ID # SQUARE KW
+33BF;ID # SQUARE MW MEGA
+33C0;ID # SQUARE K OHM
+33C1;ID # SQUARE M OHM
+33C2;ID # SQUARE AM
+33C3;ID # SQUARE BQ
+33C4;ID # SQUARE CC
+33C5;ID # SQUARE CD
+33C6;ID # SQUARE C OVER KG
+33C7;ID # SQUARE CO
+33C8;ID # SQUARE DB
+33C9;ID # SQUARE GY
+33CA;ID # SQUARE HA
+33CB;ID # SQUARE HP
+33CC;ID # SQUARE IN
+33CD;ID # SQUARE KK
+33CE;ID # SQUARE KM CAPITAL
+33CF;ID # SQUARE KT
+33D0;ID # SQUARE LM
+33D1;ID # SQUARE LN
+33D2;ID # SQUARE LOG
+33D3;ID # SQUARE LX
+33D4;ID # SQUARE MB SMALL
+33D5;ID # SQUARE MIL
+33D6;ID # SQUARE MOL
+33D7;ID # SQUARE PH
+33D8;ID # SQUARE PM
+33D9;ID # SQUARE PPM
+33DA;ID # SQUARE PR
+33DB;ID # SQUARE SR
+33DC;ID # SQUARE SV
+33DD;ID # SQUARE WB
+33DE;ID # SQUARE V OVER M
+33DF;ID # SQUARE A OVER M
+33E0;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE;ID # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF;ID # SQUARE GAL
+3400..4DB5;ID # <CJK Ideograph Extension A, First>..<CJK Ideograph Extension A, Last>
+4DC0;AL # HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1;AL # HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2;AL # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3;AL # HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4;AL # HEXAGRAM FOR WAITING
+4DC5;AL # HEXAGRAM FOR CONFLICT
+4DC6;AL # HEXAGRAM FOR THE ARMY
+4DC7;AL # HEXAGRAM FOR HOLDING TOGETHER
+4DC8;AL # HEXAGRAM FOR SMALL TAMING
+4DC9;AL # HEXAGRAM FOR TREADING
+4DCA;AL # HEXAGRAM FOR PEACE
+4DCB;AL # HEXAGRAM FOR STANDSTILL
+4DCC;AL # HEXAGRAM FOR FELLOWSHIP
+4DCD;AL # HEXAGRAM FOR GREAT POSSESSION
+4DCE;AL # HEXAGRAM FOR MODESTY
+4DCF;AL # HEXAGRAM FOR ENTHUSIASM
+4DD0;AL # HEXAGRAM FOR FOLLOWING
+4DD1;AL # HEXAGRAM FOR WORK ON THE DECAYED
+4DD2;AL # HEXAGRAM FOR APPROACH
+4DD3;AL # HEXAGRAM FOR CONTEMPLATION
+4DD4;AL # HEXAGRAM FOR BITING THROUGH
+4DD5;AL # HEXAGRAM FOR GRACE
+4DD6;AL # HEXAGRAM FOR SPLITTING APART
+4DD7;AL # HEXAGRAM FOR RETURN
+4DD8;AL # HEXAGRAM FOR INNOCENCE
+4DD9;AL # HEXAGRAM FOR GREAT TAMING
+4DDA;AL # HEXAGRAM FOR MOUTH CORNERS
+4DDB;AL # HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC;AL # HEXAGRAM FOR THE ABYSMAL WATER
+4DDD;AL # HEXAGRAM FOR THE CLINGING FIRE
+4DDE;AL # HEXAGRAM FOR INFLUENCE
+4DDF;AL # HEXAGRAM FOR DURATION
+4DE0;AL # HEXAGRAM FOR RETREAT
+4DE1;AL # HEXAGRAM FOR GREAT POWER
+4DE2;AL # HEXAGRAM FOR PROGRESS
+4DE3;AL # HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4;AL # HEXAGRAM FOR THE FAMILY
+4DE5;AL # HEXAGRAM FOR OPPOSITION
+4DE6;AL # HEXAGRAM FOR OBSTRUCTION
+4DE7;AL # HEXAGRAM FOR DELIVERANCE
+4DE8;AL # HEXAGRAM FOR DECREASE
+4DE9;AL # HEXAGRAM FOR INCREASE
+4DEA;AL # HEXAGRAM FOR BREAKTHROUGH
+4DEB;AL # HEXAGRAM FOR COMING TO MEET
+4DEC;AL # HEXAGRAM FOR GATHERING TOGETHER
+4DED;AL # HEXAGRAM FOR PUSHING UPWARD
+4DEE;AL # HEXAGRAM FOR OPPRESSION
+4DEF;AL # HEXAGRAM FOR THE WELL
+4DF0;AL # HEXAGRAM FOR REVOLUTION
+4DF1;AL # HEXAGRAM FOR THE CAULDRON
+4DF2;AL # HEXAGRAM FOR THE AROUSING THUNDER
+4DF3;AL # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4;AL # HEXAGRAM FOR DEVELOPMENT
+4DF5;AL # HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6;AL # HEXAGRAM FOR ABUNDANCE
+4DF7;AL # HEXAGRAM FOR THE WANDERER
+4DF8;AL # HEXAGRAM FOR THE GENTLE WIND
+4DF9;AL # HEXAGRAM FOR THE JOYOUS LAKE
+4DFA;AL # HEXAGRAM FOR DISPERSION
+4DFB;AL # HEXAGRAM FOR LIMITATION
+4DFC;AL # HEXAGRAM FOR INNER TRUTH
+4DFD;AL # HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE;AL # HEXAGRAM FOR AFTER COMPLETION
+4DFF;AL # HEXAGRAM FOR BEFORE COMPLETION
+4E00..9FBB;ID # <CJK Ideograph, First>..<CJK Ideograph, Last>
+A000;ID # YI SYLLABLE IT
+A001;ID # YI SYLLABLE IX
+A002;ID # YI SYLLABLE I
+A003;ID # YI SYLLABLE IP
+A004;ID # YI SYLLABLE IET
+A005;ID # YI SYLLABLE IEX
+A006;ID # YI SYLLABLE IE
+A007;ID # YI SYLLABLE IEP
+A008;ID # YI SYLLABLE AT
+A009;ID # YI SYLLABLE AX
+A00A;ID # YI SYLLABLE A
+A00B;ID # YI SYLLABLE AP
+A00C;ID # YI SYLLABLE UOX
+A00D;ID # YI SYLLABLE UO
+A00E;ID # YI SYLLABLE UOP
+A00F;ID # YI SYLLABLE OT
+A010;ID # YI SYLLABLE OX
+A011;ID # YI SYLLABLE O
+A012;ID # YI SYLLABLE OP
+A013;ID # YI SYLLABLE EX
+A014;ID # YI SYLLABLE E
+A015;NS # YI SYLLABLE WU
+A016;ID # YI SYLLABLE BIT
+A017;ID # YI SYLLABLE BIX
+A018;ID # YI SYLLABLE BI
+A019;ID # YI SYLLABLE BIP
+A01A;ID # YI SYLLABLE BIET
+A01B;ID # YI SYLLABLE BIEX
+A01C;ID # YI SYLLABLE BIE
+A01D;ID # YI SYLLABLE BIEP
+A01E;ID # YI SYLLABLE BAT
+A01F;ID # YI SYLLABLE BAX
+A020;ID # YI SYLLABLE BA
+A021;ID # YI SYLLABLE BAP
+A022;ID # YI SYLLABLE BUOX
+A023;ID # YI SYLLABLE BUO
+A024;ID # YI SYLLABLE BUOP
+A025;ID # YI SYLLABLE BOT
+A026;ID # YI SYLLABLE BOX
+A027;ID # YI SYLLABLE BO
+A028;ID # YI SYLLABLE BOP
+A029;ID # YI SYLLABLE BEX
+A02A;ID # YI SYLLABLE BE
+A02B;ID # YI SYLLABLE BEP
+A02C;ID # YI SYLLABLE BUT
+A02D;ID # YI SYLLABLE BUX
+A02E;ID # YI SYLLABLE BU
+A02F;ID # YI SYLLABLE BUP
+A030;ID # YI SYLLABLE BURX
+A031;ID # YI SYLLABLE BUR
+A032;ID # YI SYLLABLE BYT
+A033;ID # YI SYLLABLE BYX
+A034;ID # YI SYLLABLE BY
+A035;ID # YI SYLLABLE BYP
+A036;ID # YI SYLLABLE BYRX
+A037;ID # YI SYLLABLE BYR
+A038;ID # YI SYLLABLE PIT
+A039;ID # YI SYLLABLE PIX
+A03A;ID # YI SYLLABLE PI
+A03B;ID # YI SYLLABLE PIP
+A03C;ID # YI SYLLABLE PIEX
+A03D;ID # YI SYLLABLE PIE
+A03E;ID # YI SYLLABLE PIEP
+A03F;ID # YI SYLLABLE PAT
+A040;ID # YI SYLLABLE PAX
+A041;ID # YI SYLLABLE PA
+A042;ID # YI SYLLABLE PAP
+A043;ID # YI SYLLABLE PUOX
+A044;ID # YI SYLLABLE PUO
+A045;ID # YI SYLLABLE PUOP
+A046;ID # YI SYLLABLE POT
+A047;ID # YI SYLLABLE POX
+A048;ID # YI SYLLABLE PO
+A049;ID # YI SYLLABLE POP
+A04A;ID # YI SYLLABLE PUT
+A04B;ID # YI SYLLABLE PUX
+A04C;ID # YI SYLLABLE PU
+A04D;ID # YI SYLLABLE PUP
+A04E;ID # YI SYLLABLE PURX
+A04F;ID # YI SYLLABLE PUR
+A050;ID # YI SYLLABLE PYT
+A051;ID # YI SYLLABLE PYX
+A052;ID # YI SYLLABLE PY
+A053;ID # YI SYLLABLE PYP
+A054;ID # YI SYLLABLE PYRX
+A055;ID # YI SYLLABLE PYR
+A056;ID # YI SYLLABLE BBIT
+A057;ID # YI SYLLABLE BBIX
+A058;ID # YI SYLLABLE BBI
+A059;ID # YI SYLLABLE BBIP
+A05A;ID # YI SYLLABLE BBIET
+A05B;ID # YI SYLLABLE BBIEX
+A05C;ID # YI SYLLABLE BBIE
+A05D;ID # YI SYLLABLE BBIEP
+A05E;ID # YI SYLLABLE BBAT
+A05F;ID # YI SYLLABLE BBAX
+A060;ID # YI SYLLABLE BBA
+A061;ID # YI SYLLABLE BBAP
+A062;ID # YI SYLLABLE BBUOX
+A063;ID # YI SYLLABLE BBUO
+A064;ID # YI SYLLABLE BBUOP
+A065;ID # YI SYLLABLE BBOT
+A066;ID # YI SYLLABLE BBOX
+A067;ID # YI SYLLABLE BBO
+A068;ID # YI SYLLABLE BBOP
+A069;ID # YI SYLLABLE BBEX
+A06A;ID # YI SYLLABLE BBE
+A06B;ID # YI SYLLABLE BBEP
+A06C;ID # YI SYLLABLE BBUT
+A06D;ID # YI SYLLABLE BBUX
+A06E;ID # YI SYLLABLE BBU
+A06F;ID # YI SYLLABLE BBUP
+A070;ID # YI SYLLABLE BBURX
+A071;ID # YI SYLLABLE BBUR
+A072;ID # YI SYLLABLE BBYT
+A073;ID # YI SYLLABLE BBYX
+A074;ID # YI SYLLABLE BBY
+A075;ID # YI SYLLABLE BBYP
+A076;ID # YI SYLLABLE NBIT
+A077;ID # YI SYLLABLE NBIX
+A078;ID # YI SYLLABLE NBI
+A079;ID # YI SYLLABLE NBIP
+A07A;ID # YI SYLLABLE NBIEX
+A07B;ID # YI SYLLABLE NBIE
+A07C;ID # YI SYLLABLE NBIEP
+A07D;ID # YI SYLLABLE NBAT
+A07E;ID # YI SYLLABLE NBAX
+A07F;ID # YI SYLLABLE NBA
+A080;ID # YI SYLLABLE NBAP
+A081;ID # YI SYLLABLE NBOT
+A082;ID # YI SYLLABLE NBOX
+A083;ID # YI SYLLABLE NBO
+A084;ID # YI SYLLABLE NBOP
+A085;ID # YI SYLLABLE NBUT
+A086;ID # YI SYLLABLE NBUX
+A087;ID # YI SYLLABLE NBU
+A088;ID # YI SYLLABLE NBUP
+A089;ID # YI SYLLABLE NBURX
+A08A;ID # YI SYLLABLE NBUR
+A08B;ID # YI SYLLABLE NBYT
+A08C;ID # YI SYLLABLE NBYX
+A08D;ID # YI SYLLABLE NBY
+A08E;ID # YI SYLLABLE NBYP
+A08F;ID # YI SYLLABLE NBYRX
+A090;ID # YI SYLLABLE NBYR
+A091;ID # YI SYLLABLE HMIT
+A092;ID # YI SYLLABLE HMIX
+A093;ID # YI SYLLABLE HMI
+A094;ID # YI SYLLABLE HMIP
+A095;ID # YI SYLLABLE HMIEX
+A096;ID # YI SYLLABLE HMIE
+A097;ID # YI SYLLABLE HMIEP
+A098;ID # YI SYLLABLE HMAT
+A099;ID # YI SYLLABLE HMAX
+A09A;ID # YI SYLLABLE HMA
+A09B;ID # YI SYLLABLE HMAP
+A09C;ID # YI SYLLABLE HMUOX
+A09D;ID # YI SYLLABLE HMUO
+A09E;ID # YI SYLLABLE HMUOP
+A09F;ID # YI SYLLABLE HMOT
+A0A0;ID # YI SYLLABLE HMOX
+A0A1;ID # YI SYLLABLE HMO
+A0A2;ID # YI SYLLABLE HMOP
+A0A3;ID # YI SYLLABLE HMUT
+A0A4;ID # YI SYLLABLE HMUX
+A0A5;ID # YI SYLLABLE HMU
+A0A6;ID # YI SYLLABLE HMUP
+A0A7;ID # YI SYLLABLE HMURX
+A0A8;ID # YI SYLLABLE HMUR
+A0A9;ID # YI SYLLABLE HMYX
+A0AA;ID # YI SYLLABLE HMY
+A0AB;ID # YI SYLLABLE HMYP
+A0AC;ID # YI SYLLABLE HMYRX
+A0AD;ID # YI SYLLABLE HMYR
+A0AE;ID # YI SYLLABLE MIT
+A0AF;ID # YI SYLLABLE MIX
+A0B0;ID # YI SYLLABLE MI
+A0B1;ID # YI SYLLABLE MIP
+A0B2;ID # YI SYLLABLE MIEX
+A0B3;ID # YI SYLLABLE MIE
+A0B4;ID # YI SYLLABLE MIEP
+A0B5;ID # YI SYLLABLE MAT
+A0B6;ID # YI SYLLABLE MAX
+A0B7;ID # YI SYLLABLE MA
+A0B8;ID # YI SYLLABLE MAP
+A0B9;ID # YI SYLLABLE MUOT
+A0BA;ID # YI SYLLABLE MUOX
+A0BB;ID # YI SYLLABLE MUO
+A0BC;ID # YI SYLLABLE MUOP
+A0BD;ID # YI SYLLABLE MOT
+A0BE;ID # YI SYLLABLE MOX
+A0BF;ID # YI SYLLABLE MO
+A0C0;ID # YI SYLLABLE MOP
+A0C1;ID # YI SYLLABLE MEX
+A0C2;ID # YI SYLLABLE ME
+A0C3;ID # YI SYLLABLE MUT
+A0C4;ID # YI SYLLABLE MUX
+A0C5;ID # YI SYLLABLE MU
+A0C6;ID # YI SYLLABLE MUP
+A0C7;ID # YI SYLLABLE MURX
+A0C8;ID # YI SYLLABLE MUR
+A0C9;ID # YI SYLLABLE MYT
+A0CA;ID # YI SYLLABLE MYX
+A0CB;ID # YI SYLLABLE MY
+A0CC;ID # YI SYLLABLE MYP
+A0CD;ID # YI SYLLABLE FIT
+A0CE;ID # YI SYLLABLE FIX
+A0CF;ID # YI SYLLABLE FI
+A0D0;ID # YI SYLLABLE FIP
+A0D1;ID # YI SYLLABLE FAT
+A0D2;ID # YI SYLLABLE FAX
+A0D3;ID # YI SYLLABLE FA
+A0D4;ID # YI SYLLABLE FAP
+A0D5;ID # YI SYLLABLE FOX
+A0D6;ID # YI SYLLABLE FO
+A0D7;ID # YI SYLLABLE FOP
+A0D8;ID # YI SYLLABLE FUT
+A0D9;ID # YI SYLLABLE FUX
+A0DA;ID # YI SYLLABLE FU
+A0DB;ID # YI SYLLABLE FUP
+A0DC;ID # YI SYLLABLE FURX
+A0DD;ID # YI SYLLABLE FUR
+A0DE;ID # YI SYLLABLE FYT
+A0DF;ID # YI SYLLABLE FYX
+A0E0;ID # YI SYLLABLE FY
+A0E1;ID # YI SYLLABLE FYP
+A0E2;ID # YI SYLLABLE VIT
+A0E3;ID # YI SYLLABLE VIX
+A0E4;ID # YI SYLLABLE VI
+A0E5;ID # YI SYLLABLE VIP
+A0E6;ID # YI SYLLABLE VIET
+A0E7;ID # YI SYLLABLE VIEX
+A0E8;ID # YI SYLLABLE VIE
+A0E9;ID # YI SYLLABLE VIEP
+A0EA;ID # YI SYLLABLE VAT
+A0EB;ID # YI SYLLABLE VAX
+A0EC;ID # YI SYLLABLE VA
+A0ED;ID # YI SYLLABLE VAP
+A0EE;ID # YI SYLLABLE VOT
+A0EF;ID # YI SYLLABLE VOX
+A0F0;ID # YI SYLLABLE VO
+A0F1;ID # YI SYLLABLE VOP
+A0F2;ID # YI SYLLABLE VEX
+A0F3;ID # YI SYLLABLE VEP
+A0F4;ID # YI SYLLABLE VUT
+A0F5;ID # YI SYLLABLE VUX
+A0F6;ID # YI SYLLABLE VU
+A0F7;ID # YI SYLLABLE VUP
+A0F8;ID # YI SYLLABLE VURX
+A0F9;ID # YI SYLLABLE VUR
+A0FA;ID # YI SYLLABLE VYT
+A0FB;ID # YI SYLLABLE VYX
+A0FC;ID # YI SYLLABLE VY
+A0FD;ID # YI SYLLABLE VYP
+A0FE;ID # YI SYLLABLE VYRX
+A0FF;ID # YI SYLLABLE VYR
+A100;ID # YI SYLLABLE DIT
+A101;ID # YI SYLLABLE DIX
+A102;ID # YI SYLLABLE DI
+A103;ID # YI SYLLABLE DIP
+A104;ID # YI SYLLABLE DIEX
+A105;ID # YI SYLLABLE DIE
+A106;ID # YI SYLLABLE DIEP
+A107;ID # YI SYLLABLE DAT
+A108;ID # YI SYLLABLE DAX
+A109;ID # YI SYLLABLE DA
+A10A;ID # YI SYLLABLE DAP
+A10B;ID # YI SYLLABLE DUOX
+A10C;ID # YI SYLLABLE DUO
+A10D;ID # YI SYLLABLE DOT
+A10E;ID # YI SYLLABLE DOX
+A10F;ID # YI SYLLABLE DO
+A110;ID # YI SYLLABLE DOP
+A111;ID # YI SYLLABLE DEX
+A112;ID # YI SYLLABLE DE
+A113;ID # YI SYLLABLE DEP
+A114;ID # YI SYLLABLE DUT
+A115;ID # YI SYLLABLE DUX
+A116;ID # YI SYLLABLE DU
+A117;ID # YI SYLLABLE DUP
+A118;ID # YI SYLLABLE DURX
+A119;ID # YI SYLLABLE DUR
+A11A;ID # YI SYLLABLE TIT
+A11B;ID # YI SYLLABLE TIX
+A11C;ID # YI SYLLABLE TI
+A11D;ID # YI SYLLABLE TIP
+A11E;ID # YI SYLLABLE TIEX
+A11F;ID # YI SYLLABLE TIE
+A120;ID # YI SYLLABLE TIEP
+A121;ID # YI SYLLABLE TAT
+A122;ID # YI SYLLABLE TAX
+A123;ID # YI SYLLABLE TA
+A124;ID # YI SYLLABLE TAP
+A125;ID # YI SYLLABLE TUOT
+A126;ID # YI SYLLABLE TUOX
+A127;ID # YI SYLLABLE TUO
+A128;ID # YI SYLLABLE TUOP
+A129;ID # YI SYLLABLE TOT
+A12A;ID # YI SYLLABLE TOX
+A12B;ID # YI SYLLABLE TO
+A12C;ID # YI SYLLABLE TOP
+A12D;ID # YI SYLLABLE TEX
+A12E;ID # YI SYLLABLE TE
+A12F;ID # YI SYLLABLE TEP
+A130;ID # YI SYLLABLE TUT
+A131;ID # YI SYLLABLE TUX
+A132;ID # YI SYLLABLE TU
+A133;ID # YI SYLLABLE TUP
+A134;ID # YI SYLLABLE TURX
+A135;ID # YI SYLLABLE TUR
+A136;ID # YI SYLLABLE DDIT
+A137;ID # YI SYLLABLE DDIX
+A138;ID # YI SYLLABLE DDI
+A139;ID # YI SYLLABLE DDIP
+A13A;ID # YI SYLLABLE DDIEX
+A13B;ID # YI SYLLABLE DDIE
+A13C;ID # YI SYLLABLE DDIEP
+A13D;ID # YI SYLLABLE DDAT
+A13E;ID # YI SYLLABLE DDAX
+A13F;ID # YI SYLLABLE DDA
+A140;ID # YI SYLLABLE DDAP
+A141;ID # YI SYLLABLE DDUOX
+A142;ID # YI SYLLABLE DDUO
+A143;ID # YI SYLLABLE DDUOP
+A144;ID # YI SYLLABLE DDOT
+A145;ID # YI SYLLABLE DDOX
+A146;ID # YI SYLLABLE DDO
+A147;ID # YI SYLLABLE DDOP
+A148;ID # YI SYLLABLE DDEX
+A149;ID # YI SYLLABLE DDE
+A14A;ID # YI SYLLABLE DDEP
+A14B;ID # YI SYLLABLE DDUT
+A14C;ID # YI SYLLABLE DDUX
+A14D;ID # YI SYLLABLE DDU
+A14E;ID # YI SYLLABLE DDUP
+A14F;ID # YI SYLLABLE DDURX
+A150;ID # YI SYLLABLE DDUR
+A151;ID # YI SYLLABLE NDIT
+A152;ID # YI SYLLABLE NDIX
+A153;ID # YI SYLLABLE NDI
+A154;ID # YI SYLLABLE NDIP
+A155;ID # YI SYLLABLE NDIEX
+A156;ID # YI SYLLABLE NDIE
+A157;ID # YI SYLLABLE NDAT
+A158;ID # YI SYLLABLE NDAX
+A159;ID # YI SYLLABLE NDA
+A15A;ID # YI SYLLABLE NDAP
+A15B;ID # YI SYLLABLE NDOT
+A15C;ID # YI SYLLABLE NDOX
+A15D;ID # YI SYLLABLE NDO
+A15E;ID # YI SYLLABLE NDOP
+A15F;ID # YI SYLLABLE NDEX
+A160;ID # YI SYLLABLE NDE
+A161;ID # YI SYLLABLE NDEP
+A162;ID # YI SYLLABLE NDUT
+A163;ID # YI SYLLABLE NDUX
+A164;ID # YI SYLLABLE NDU
+A165;ID # YI SYLLABLE NDUP
+A166;ID # YI SYLLABLE NDURX
+A167;ID # YI SYLLABLE NDUR
+A168;ID # YI SYLLABLE HNIT
+A169;ID # YI SYLLABLE HNIX
+A16A;ID # YI SYLLABLE HNI
+A16B;ID # YI SYLLABLE HNIP
+A16C;ID # YI SYLLABLE HNIET
+A16D;ID # YI SYLLABLE HNIEX
+A16E;ID # YI SYLLABLE HNIE
+A16F;ID # YI SYLLABLE HNIEP
+A170;ID # YI SYLLABLE HNAT
+A171;ID # YI SYLLABLE HNAX
+A172;ID # YI SYLLABLE HNA
+A173;ID # YI SYLLABLE HNAP
+A174;ID # YI SYLLABLE HNUOX
+A175;ID # YI SYLLABLE HNUO
+A176;ID # YI SYLLABLE HNOT
+A177;ID # YI SYLLABLE HNOX
+A178;ID # YI SYLLABLE HNOP
+A179;ID # YI SYLLABLE HNEX
+A17A;ID # YI SYLLABLE HNE
+A17B;ID # YI SYLLABLE HNEP
+A17C;ID # YI SYLLABLE HNUT
+A17D;ID # YI SYLLABLE NIT
+A17E;ID # YI SYLLABLE NIX
+A17F;ID # YI SYLLABLE NI
+A180;ID # YI SYLLABLE NIP
+A181;ID # YI SYLLABLE NIEX
+A182;ID # YI SYLLABLE NIE
+A183;ID # YI SYLLABLE NIEP
+A184;ID # YI SYLLABLE NAX
+A185;ID # YI SYLLABLE NA
+A186;ID # YI SYLLABLE NAP
+A187;ID # YI SYLLABLE NUOX
+A188;ID # YI SYLLABLE NUO
+A189;ID # YI SYLLABLE NUOP
+A18A;ID # YI SYLLABLE NOT
+A18B;ID # YI SYLLABLE NOX
+A18C;ID # YI SYLLABLE NO
+A18D;ID # YI SYLLABLE NOP
+A18E;ID # YI SYLLABLE NEX
+A18F;ID # YI SYLLABLE NE
+A190;ID # YI SYLLABLE NEP
+A191;ID # YI SYLLABLE NUT
+A192;ID # YI SYLLABLE NUX
+A193;ID # YI SYLLABLE NU
+A194;ID # YI SYLLABLE NUP
+A195;ID # YI SYLLABLE NURX
+A196;ID # YI SYLLABLE NUR
+A197;ID # YI SYLLABLE HLIT
+A198;ID # YI SYLLABLE HLIX
+A199;ID # YI SYLLABLE HLI
+A19A;ID # YI SYLLABLE HLIP
+A19B;ID # YI SYLLABLE HLIEX
+A19C;ID # YI SYLLABLE HLIE
+A19D;ID # YI SYLLABLE HLIEP
+A19E;ID # YI SYLLABLE HLAT
+A19F;ID # YI SYLLABLE HLAX
+A1A0;ID # YI SYLLABLE HLA
+A1A1;ID # YI SYLLABLE HLAP
+A1A2;ID # YI SYLLABLE HLUOX
+A1A3;ID # YI SYLLABLE HLUO
+A1A4;ID # YI SYLLABLE HLUOP
+A1A5;ID # YI SYLLABLE HLOX
+A1A6;ID # YI SYLLABLE HLO
+A1A7;ID # YI SYLLABLE HLOP
+A1A8;ID # YI SYLLABLE HLEX
+A1A9;ID # YI SYLLABLE HLE
+A1AA;ID # YI SYLLABLE HLEP
+A1AB;ID # YI SYLLABLE HLUT
+A1AC;ID # YI SYLLABLE HLUX
+A1AD;ID # YI SYLLABLE HLU
+A1AE;ID # YI SYLLABLE HLUP
+A1AF;ID # YI SYLLABLE HLURX
+A1B0;ID # YI SYLLABLE HLUR
+A1B1;ID # YI SYLLABLE HLYT
+A1B2;ID # YI SYLLABLE HLYX
+A1B3;ID # YI SYLLABLE HLY
+A1B4;ID # YI SYLLABLE HLYP
+A1B5;ID # YI SYLLABLE HLYRX
+A1B6;ID # YI SYLLABLE HLYR
+A1B7;ID # YI SYLLABLE LIT
+A1B8;ID # YI SYLLABLE LIX
+A1B9;ID # YI SYLLABLE LI
+A1BA;ID # YI SYLLABLE LIP
+A1BB;ID # YI SYLLABLE LIET
+A1BC;ID # YI SYLLABLE LIEX
+A1BD;ID # YI SYLLABLE LIE
+A1BE;ID # YI SYLLABLE LIEP
+A1BF;ID # YI SYLLABLE LAT
+A1C0;ID # YI SYLLABLE LAX
+A1C1;ID # YI SYLLABLE LA
+A1C2;ID # YI SYLLABLE LAP
+A1C3;ID # YI SYLLABLE LUOT
+A1C4;ID # YI SYLLABLE LUOX
+A1C5;ID # YI SYLLABLE LUO
+A1C6;ID # YI SYLLABLE LUOP
+A1C7;ID # YI SYLLABLE LOT
+A1C8;ID # YI SYLLABLE LOX
+A1C9;ID # YI SYLLABLE LO
+A1CA;ID # YI SYLLABLE LOP
+A1CB;ID # YI SYLLABLE LEX
+A1CC;ID # YI SYLLABLE LE
+A1CD;ID # YI SYLLABLE LEP
+A1CE;ID # YI SYLLABLE LUT
+A1CF;ID # YI SYLLABLE LUX
+A1D0;ID # YI SYLLABLE LU
+A1D1;ID # YI SYLLABLE LUP
+A1D2;ID # YI SYLLABLE LURX
+A1D3;ID # YI SYLLABLE LUR
+A1D4;ID # YI SYLLABLE LYT
+A1D5;ID # YI SYLLABLE LYX
+A1D6;ID # YI SYLLABLE LY
+A1D7;ID # YI SYLLABLE LYP
+A1D8;ID # YI SYLLABLE LYRX
+A1D9;ID # YI SYLLABLE LYR
+A1DA;ID # YI SYLLABLE GIT
+A1DB;ID # YI SYLLABLE GIX
+A1DC;ID # YI SYLLABLE GI
+A1DD;ID # YI SYLLABLE GIP
+A1DE;ID # YI SYLLABLE GIET
+A1DF;ID # YI SYLLABLE GIEX
+A1E0;ID # YI SYLLABLE GIE
+A1E1;ID # YI SYLLABLE GIEP
+A1E2;ID # YI SYLLABLE GAT
+A1E3;ID # YI SYLLABLE GAX
+A1E4;ID # YI SYLLABLE GA
+A1E5;ID # YI SYLLABLE GAP
+A1E6;ID # YI SYLLABLE GUOT
+A1E7;ID # YI SYLLABLE GUOX
+A1E8;ID # YI SYLLABLE GUO
+A1E9;ID # YI SYLLABLE GUOP
+A1EA;ID # YI SYLLABLE GOT
+A1EB;ID # YI SYLLABLE GOX
+A1EC;ID # YI SYLLABLE GO
+A1ED;ID # YI SYLLABLE GOP
+A1EE;ID # YI SYLLABLE GET
+A1EF;ID # YI SYLLABLE GEX
+A1F0;ID # YI SYLLABLE GE
+A1F1;ID # YI SYLLABLE GEP
+A1F2;ID # YI SYLLABLE GUT
+A1F3;ID # YI SYLLABLE GUX
+A1F4;ID # YI SYLLABLE GU
+A1F5;ID # YI SYLLABLE GUP
+A1F6;ID # YI SYLLABLE GURX
+A1F7;ID # YI SYLLABLE GUR
+A1F8;ID # YI SYLLABLE KIT
+A1F9;ID # YI SYLLABLE KIX
+A1FA;ID # YI SYLLABLE KI
+A1FB;ID # YI SYLLABLE KIP
+A1FC;ID # YI SYLLABLE KIEX
+A1FD;ID # YI SYLLABLE KIE
+A1FE;ID # YI SYLLABLE KIEP
+A1FF;ID # YI SYLLABLE KAT
+A200;ID # YI SYLLABLE KAX
+A201;ID # YI SYLLABLE KA
+A202;ID # YI SYLLABLE KAP
+A203;ID # YI SYLLABLE KUOX
+A204;ID # YI SYLLABLE KUO
+A205;ID # YI SYLLABLE KUOP
+A206;ID # YI SYLLABLE KOT
+A207;ID # YI SYLLABLE KOX
+A208;ID # YI SYLLABLE KO
+A209;ID # YI SYLLABLE KOP
+A20A;ID # YI SYLLABLE KET
+A20B;ID # YI SYLLABLE KEX
+A20C;ID # YI SYLLABLE KE
+A20D;ID # YI SYLLABLE KEP
+A20E;ID # YI SYLLABLE KUT
+A20F;ID # YI SYLLABLE KUX
+A210;ID # YI SYLLABLE KU
+A211;ID # YI SYLLABLE KUP
+A212;ID # YI SYLLABLE KURX
+A213;ID # YI SYLLABLE KUR
+A214;ID # YI SYLLABLE GGIT
+A215;ID # YI SYLLABLE GGIX
+A216;ID # YI SYLLABLE GGI
+A217;ID # YI SYLLABLE GGIEX
+A218;ID # YI SYLLABLE GGIE
+A219;ID # YI SYLLABLE GGIEP
+A21A;ID # YI SYLLABLE GGAT
+A21B;ID # YI SYLLABLE GGAX
+A21C;ID # YI SYLLABLE GGA
+A21D;ID # YI SYLLABLE GGAP
+A21E;ID # YI SYLLABLE GGUOT
+A21F;ID # YI SYLLABLE GGUOX
+A220;ID # YI SYLLABLE GGUO
+A221;ID # YI SYLLABLE GGUOP
+A222;ID # YI SYLLABLE GGOT
+A223;ID # YI SYLLABLE GGOX
+A224;ID # YI SYLLABLE GGO
+A225;ID # YI SYLLABLE GGOP
+A226;ID # YI SYLLABLE GGET
+A227;ID # YI SYLLABLE GGEX
+A228;ID # YI SYLLABLE GGE
+A229;ID # YI SYLLABLE GGEP
+A22A;ID # YI SYLLABLE GGUT
+A22B;ID # YI SYLLABLE GGUX
+A22C;ID # YI SYLLABLE GGU
+A22D;ID # YI SYLLABLE GGUP
+A22E;ID # YI SYLLABLE GGURX
+A22F;ID # YI SYLLABLE GGUR
+A230;ID # YI SYLLABLE MGIEX
+A231;ID # YI SYLLABLE MGIE
+A232;ID # YI SYLLABLE MGAT
+A233;ID # YI SYLLABLE MGAX
+A234;ID # YI SYLLABLE MGA
+A235;ID # YI SYLLABLE MGAP
+A236;ID # YI SYLLABLE MGUOX
+A237;ID # YI SYLLABLE MGUO
+A238;ID # YI SYLLABLE MGUOP
+A239;ID # YI SYLLABLE MGOT
+A23A;ID # YI SYLLABLE MGOX
+A23B;ID # YI SYLLABLE MGO
+A23C;ID # YI SYLLABLE MGOP
+A23D;ID # YI SYLLABLE MGEX
+A23E;ID # YI SYLLABLE MGE
+A23F;ID # YI SYLLABLE MGEP
+A240;ID # YI SYLLABLE MGUT
+A241;ID # YI SYLLABLE MGUX
+A242;ID # YI SYLLABLE MGU
+A243;ID # YI SYLLABLE MGUP
+A244;ID # YI SYLLABLE MGURX
+A245;ID # YI SYLLABLE MGUR
+A246;ID # YI SYLLABLE HXIT
+A247;ID # YI SYLLABLE HXIX
+A248;ID # YI SYLLABLE HXI
+A249;ID # YI SYLLABLE HXIP
+A24A;ID # YI SYLLABLE HXIET
+A24B;ID # YI SYLLABLE HXIEX
+A24C;ID # YI SYLLABLE HXIE
+A24D;ID # YI SYLLABLE HXIEP
+A24E;ID # YI SYLLABLE HXAT
+A24F;ID # YI SYLLABLE HXAX
+A250;ID # YI SYLLABLE HXA
+A251;ID # YI SYLLABLE HXAP
+A252;ID # YI SYLLABLE HXUOT
+A253;ID # YI SYLLABLE HXUOX
+A254;ID # YI SYLLABLE HXUO
+A255;ID # YI SYLLABLE HXUOP
+A256;ID # YI SYLLABLE HXOT
+A257;ID # YI SYLLABLE HXOX
+A258;ID # YI SYLLABLE HXO
+A259;ID # YI SYLLABLE HXOP
+A25A;ID # YI SYLLABLE HXEX
+A25B;ID # YI SYLLABLE HXE
+A25C;ID # YI SYLLABLE HXEP
+A25D;ID # YI SYLLABLE NGIEX
+A25E;ID # YI SYLLABLE NGIE
+A25F;ID # YI SYLLABLE NGIEP
+A260;ID # YI SYLLABLE NGAT
+A261;ID # YI SYLLABLE NGAX
+A262;ID # YI SYLLABLE NGA
+A263;ID # YI SYLLABLE NGAP
+A264;ID # YI SYLLABLE NGUOT
+A265;ID # YI SYLLABLE NGUOX
+A266;ID # YI SYLLABLE NGUO
+A267;ID # YI SYLLABLE NGOT
+A268;ID # YI SYLLABLE NGOX
+A269;ID # YI SYLLABLE NGO
+A26A;ID # YI SYLLABLE NGOP
+A26B;ID # YI SYLLABLE NGEX
+A26C;ID # YI SYLLABLE NGE
+A26D;ID # YI SYLLABLE NGEP
+A26E;ID # YI SYLLABLE HIT
+A26F;ID # YI SYLLABLE HIEX
+A270;ID # YI SYLLABLE HIE
+A271;ID # YI SYLLABLE HAT
+A272;ID # YI SYLLABLE HAX
+A273;ID # YI SYLLABLE HA
+A274;ID # YI SYLLABLE HAP
+A275;ID # YI SYLLABLE HUOT
+A276;ID # YI SYLLABLE HUOX
+A277;ID # YI SYLLABLE HUO
+A278;ID # YI SYLLABLE HUOP
+A279;ID # YI SYLLABLE HOT
+A27A;ID # YI SYLLABLE HOX
+A27B;ID # YI SYLLABLE HO
+A27C;ID # YI SYLLABLE HOP
+A27D;ID # YI SYLLABLE HEX
+A27E;ID # YI SYLLABLE HE
+A27F;ID # YI SYLLABLE HEP
+A280;ID # YI SYLLABLE WAT
+A281;ID # YI SYLLABLE WAX
+A282;ID # YI SYLLABLE WA
+A283;ID # YI SYLLABLE WAP
+A284;ID # YI SYLLABLE WUOX
+A285;ID # YI SYLLABLE WUO
+A286;ID # YI SYLLABLE WUOP
+A287;ID # YI SYLLABLE WOX
+A288;ID # YI SYLLABLE WO
+A289;ID # YI SYLLABLE WOP
+A28A;ID # YI SYLLABLE WEX
+A28B;ID # YI SYLLABLE WE
+A28C;ID # YI SYLLABLE WEP
+A28D;ID # YI SYLLABLE ZIT
+A28E;ID # YI SYLLABLE ZIX
+A28F;ID # YI SYLLABLE ZI
+A290;ID # YI SYLLABLE ZIP
+A291;ID # YI SYLLABLE ZIEX
+A292;ID # YI SYLLABLE ZIE
+A293;ID # YI SYLLABLE ZIEP
+A294;ID # YI SYLLABLE ZAT
+A295;ID # YI SYLLABLE ZAX
+A296;ID # YI SYLLABLE ZA
+A297;ID # YI SYLLABLE ZAP
+A298;ID # YI SYLLABLE ZUOX
+A299;ID # YI SYLLABLE ZUO
+A29A;ID # YI SYLLABLE ZUOP
+A29B;ID # YI SYLLABLE ZOT
+A29C;ID # YI SYLLABLE ZOX
+A29D;ID # YI SYLLABLE ZO
+A29E;ID # YI SYLLABLE ZOP
+A29F;ID # YI SYLLABLE ZEX
+A2A0;ID # YI SYLLABLE ZE
+A2A1;ID # YI SYLLABLE ZEP
+A2A2;ID # YI SYLLABLE ZUT
+A2A3;ID # YI SYLLABLE ZUX
+A2A4;ID # YI SYLLABLE ZU
+A2A5;ID # YI SYLLABLE ZUP
+A2A6;ID # YI SYLLABLE ZURX
+A2A7;ID # YI SYLLABLE ZUR
+A2A8;ID # YI SYLLABLE ZYT
+A2A9;ID # YI SYLLABLE ZYX
+A2AA;ID # YI SYLLABLE ZY
+A2AB;ID # YI SYLLABLE ZYP
+A2AC;ID # YI SYLLABLE ZYRX
+A2AD;ID # YI SYLLABLE ZYR
+A2AE;ID # YI SYLLABLE CIT
+A2AF;ID # YI SYLLABLE CIX
+A2B0;ID # YI SYLLABLE CI
+A2B1;ID # YI SYLLABLE CIP
+A2B2;ID # YI SYLLABLE CIET
+A2B3;ID # YI SYLLABLE CIEX
+A2B4;ID # YI SYLLABLE CIE
+A2B5;ID # YI SYLLABLE CIEP
+A2B6;ID # YI SYLLABLE CAT
+A2B7;ID # YI SYLLABLE CAX
+A2B8;ID # YI SYLLABLE CA
+A2B9;ID # YI SYLLABLE CAP
+A2BA;ID # YI SYLLABLE CUOX
+A2BB;ID # YI SYLLABLE CUO
+A2BC;ID # YI SYLLABLE CUOP
+A2BD;ID # YI SYLLABLE COT
+A2BE;ID # YI SYLLABLE COX
+A2BF;ID # YI SYLLABLE CO
+A2C0;ID # YI SYLLABLE COP
+A2C1;ID # YI SYLLABLE CEX
+A2C2;ID # YI SYLLABLE CE
+A2C3;ID # YI SYLLABLE CEP
+A2C4;ID # YI SYLLABLE CUT
+A2C5;ID # YI SYLLABLE CUX
+A2C6;ID # YI SYLLABLE CU
+A2C7;ID # YI SYLLABLE CUP
+A2C8;ID # YI SYLLABLE CURX
+A2C9;ID # YI SYLLABLE CUR
+A2CA;ID # YI SYLLABLE CYT
+A2CB;ID # YI SYLLABLE CYX
+A2CC;ID # YI SYLLABLE CY
+A2CD;ID # YI SYLLABLE CYP
+A2CE;ID # YI SYLLABLE CYRX
+A2CF;ID # YI SYLLABLE CYR
+A2D0;ID # YI SYLLABLE ZZIT
+A2D1;ID # YI SYLLABLE ZZIX
+A2D2;ID # YI SYLLABLE ZZI
+A2D3;ID # YI SYLLABLE ZZIP
+A2D4;ID # YI SYLLABLE ZZIET
+A2D5;ID # YI SYLLABLE ZZIEX
+A2D6;ID # YI SYLLABLE ZZIE
+A2D7;ID # YI SYLLABLE ZZIEP
+A2D8;ID # YI SYLLABLE ZZAT
+A2D9;ID # YI SYLLABLE ZZAX
+A2DA;ID # YI SYLLABLE ZZA
+A2DB;ID # YI SYLLABLE ZZAP
+A2DC;ID # YI SYLLABLE ZZOX
+A2DD;ID # YI SYLLABLE ZZO
+A2DE;ID # YI SYLLABLE ZZOP
+A2DF;ID # YI SYLLABLE ZZEX
+A2E0;ID # YI SYLLABLE ZZE
+A2E1;ID # YI SYLLABLE ZZEP
+A2E2;ID # YI SYLLABLE ZZUX
+A2E3;ID # YI SYLLABLE ZZU
+A2E4;ID # YI SYLLABLE ZZUP
+A2E5;ID # YI SYLLABLE ZZURX
+A2E6;ID # YI SYLLABLE ZZUR
+A2E7;ID # YI SYLLABLE ZZYT
+A2E8;ID # YI SYLLABLE ZZYX
+A2E9;ID # YI SYLLABLE ZZY
+A2EA;ID # YI SYLLABLE ZZYP
+A2EB;ID # YI SYLLABLE ZZYRX
+A2EC;ID # YI SYLLABLE ZZYR
+A2ED;ID # YI SYLLABLE NZIT
+A2EE;ID # YI SYLLABLE NZIX
+A2EF;ID # YI SYLLABLE NZI
+A2F0;ID # YI SYLLABLE NZIP
+A2F1;ID # YI SYLLABLE NZIEX
+A2F2;ID # YI SYLLABLE NZIE
+A2F3;ID # YI SYLLABLE NZIEP
+A2F4;ID # YI SYLLABLE NZAT
+A2F5;ID # YI SYLLABLE NZAX
+A2F6;ID # YI SYLLABLE NZA
+A2F7;ID # YI SYLLABLE NZAP
+A2F8;ID # YI SYLLABLE NZUOX
+A2F9;ID # YI SYLLABLE NZUO
+A2FA;ID # YI SYLLABLE NZOX
+A2FB;ID # YI SYLLABLE NZOP
+A2FC;ID # YI SYLLABLE NZEX
+A2FD;ID # YI SYLLABLE NZE
+A2FE;ID # YI SYLLABLE NZUX
+A2FF;ID # YI SYLLABLE NZU
+A300;ID # YI SYLLABLE NZUP
+A301;ID # YI SYLLABLE NZURX
+A302;ID # YI SYLLABLE NZUR
+A303;ID # YI SYLLABLE NZYT
+A304;ID # YI SYLLABLE NZYX
+A305;ID # YI SYLLABLE NZY
+A306;ID # YI SYLLABLE NZYP
+A307;ID # YI SYLLABLE NZYRX
+A308;ID # YI SYLLABLE NZYR
+A309;ID # YI SYLLABLE SIT
+A30A;ID # YI SYLLABLE SIX
+A30B;ID # YI SYLLABLE SI
+A30C;ID # YI SYLLABLE SIP
+A30D;ID # YI SYLLABLE SIEX
+A30E;ID # YI SYLLABLE SIE
+A30F;ID # YI SYLLABLE SIEP
+A310;ID # YI SYLLABLE SAT
+A311;ID # YI SYLLABLE SAX
+A312;ID # YI SYLLABLE SA
+A313;ID # YI SYLLABLE SAP
+A314;ID # YI SYLLABLE SUOX
+A315;ID # YI SYLLABLE SUO
+A316;ID # YI SYLLABLE SUOP
+A317;ID # YI SYLLABLE SOT
+A318;ID # YI SYLLABLE SOX
+A319;ID # YI SYLLABLE SO
+A31A;ID # YI SYLLABLE SOP
+A31B;ID # YI SYLLABLE SEX
+A31C;ID # YI SYLLABLE SE
+A31D;ID # YI SYLLABLE SEP
+A31E;ID # YI SYLLABLE SUT
+A31F;ID # YI SYLLABLE SUX
+A320;ID # YI SYLLABLE SU
+A321;ID # YI SYLLABLE SUP
+A322;ID # YI SYLLABLE SURX
+A323;ID # YI SYLLABLE SUR
+A324;ID # YI SYLLABLE SYT
+A325;ID # YI SYLLABLE SYX
+A326;ID # YI SYLLABLE SY
+A327;ID # YI SYLLABLE SYP
+A328;ID # YI SYLLABLE SYRX
+A329;ID # YI SYLLABLE SYR
+A32A;ID # YI SYLLABLE SSIT
+A32B;ID # YI SYLLABLE SSIX
+A32C;ID # YI SYLLABLE SSI
+A32D;ID # YI SYLLABLE SSIP
+A32E;ID # YI SYLLABLE SSIEX
+A32F;ID # YI SYLLABLE SSIE
+A330;ID # YI SYLLABLE SSIEP
+A331;ID # YI SYLLABLE SSAT
+A332;ID # YI SYLLABLE SSAX
+A333;ID # YI SYLLABLE SSA
+A334;ID # YI SYLLABLE SSAP
+A335;ID # YI SYLLABLE SSOT
+A336;ID # YI SYLLABLE SSOX
+A337;ID # YI SYLLABLE SSO
+A338;ID # YI SYLLABLE SSOP
+A339;ID # YI SYLLABLE SSEX
+A33A;ID # YI SYLLABLE SSE
+A33B;ID # YI SYLLABLE SSEP
+A33C;ID # YI SYLLABLE SSUT
+A33D;ID # YI SYLLABLE SSUX
+A33E;ID # YI SYLLABLE SSU
+A33F;ID # YI SYLLABLE SSUP
+A340;ID # YI SYLLABLE SSYT
+A341;ID # YI SYLLABLE SSYX
+A342;ID # YI SYLLABLE SSY
+A343;ID # YI SYLLABLE SSYP
+A344;ID # YI SYLLABLE SSYRX
+A345;ID # YI SYLLABLE SSYR
+A346;ID # YI SYLLABLE ZHAT
+A347;ID # YI SYLLABLE ZHAX
+A348;ID # YI SYLLABLE ZHA
+A349;ID # YI SYLLABLE ZHAP
+A34A;ID # YI SYLLABLE ZHUOX
+A34B;ID # YI SYLLABLE ZHUO
+A34C;ID # YI SYLLABLE ZHUOP
+A34D;ID # YI SYLLABLE ZHOT
+A34E;ID # YI SYLLABLE ZHOX
+A34F;ID # YI SYLLABLE ZHO
+A350;ID # YI SYLLABLE ZHOP
+A351;ID # YI SYLLABLE ZHET
+A352;ID # YI SYLLABLE ZHEX
+A353;ID # YI SYLLABLE ZHE
+A354;ID # YI SYLLABLE ZHEP
+A355;ID # YI SYLLABLE ZHUT
+A356;ID # YI SYLLABLE ZHUX
+A357;ID # YI SYLLABLE ZHU
+A358;ID # YI SYLLABLE ZHUP
+A359;ID # YI SYLLABLE ZHURX
+A35A;ID # YI SYLLABLE ZHUR
+A35B;ID # YI SYLLABLE ZHYT
+A35C;ID # YI SYLLABLE ZHYX
+A35D;ID # YI SYLLABLE ZHY
+A35E;ID # YI SYLLABLE ZHYP
+A35F;ID # YI SYLLABLE ZHYRX
+A360;ID # YI SYLLABLE ZHYR
+A361;ID # YI SYLLABLE CHAT
+A362;ID # YI SYLLABLE CHAX
+A363;ID # YI SYLLABLE CHA
+A364;ID # YI SYLLABLE CHAP
+A365;ID # YI SYLLABLE CHUOT
+A366;ID # YI SYLLABLE CHUOX
+A367;ID # YI SYLLABLE CHUO
+A368;ID # YI SYLLABLE CHUOP
+A369;ID # YI SYLLABLE CHOT
+A36A;ID # YI SYLLABLE CHOX
+A36B;ID # YI SYLLABLE CHO
+A36C;ID # YI SYLLABLE CHOP
+A36D;ID # YI SYLLABLE CHET
+A36E;ID # YI SYLLABLE CHEX
+A36F;ID # YI SYLLABLE CHE
+A370;ID # YI SYLLABLE CHEP
+A371;ID # YI SYLLABLE CHUX
+A372;ID # YI SYLLABLE CHU
+A373;ID # YI SYLLABLE CHUP
+A374;ID # YI SYLLABLE CHURX
+A375;ID # YI SYLLABLE CHUR
+A376;ID # YI SYLLABLE CHYT
+A377;ID # YI SYLLABLE CHYX
+A378;ID # YI SYLLABLE CHY
+A379;ID # YI SYLLABLE CHYP
+A37A;ID # YI SYLLABLE CHYRX
+A37B;ID # YI SYLLABLE CHYR
+A37C;ID # YI SYLLABLE RRAX
+A37D;ID # YI SYLLABLE RRA
+A37E;ID # YI SYLLABLE RRUOX
+A37F;ID # YI SYLLABLE RRUO
+A380;ID # YI SYLLABLE RROT
+A381;ID # YI SYLLABLE RROX
+A382;ID # YI SYLLABLE RRO
+A383;ID # YI SYLLABLE RROP
+A384;ID # YI SYLLABLE RRET
+A385;ID # YI SYLLABLE RREX
+A386;ID # YI SYLLABLE RRE
+A387;ID # YI SYLLABLE RREP
+A388;ID # YI SYLLABLE RRUT
+A389;ID # YI SYLLABLE RRUX
+A38A;ID # YI SYLLABLE RRU
+A38B;ID # YI SYLLABLE RRUP
+A38C;ID # YI SYLLABLE RRURX
+A38D;ID # YI SYLLABLE RRUR
+A38E;ID # YI SYLLABLE RRYT
+A38F;ID # YI SYLLABLE RRYX
+A390;ID # YI SYLLABLE RRY
+A391;ID # YI SYLLABLE RRYP
+A392;ID # YI SYLLABLE RRYRX
+A393;ID # YI SYLLABLE RRYR
+A394;ID # YI SYLLABLE NRAT
+A395;ID # YI SYLLABLE NRAX
+A396;ID # YI SYLLABLE NRA
+A397;ID # YI SYLLABLE NRAP
+A398;ID # YI SYLLABLE NROX
+A399;ID # YI SYLLABLE NRO
+A39A;ID # YI SYLLABLE NROP
+A39B;ID # YI SYLLABLE NRET
+A39C;ID # YI SYLLABLE NREX
+A39D;ID # YI SYLLABLE NRE
+A39E;ID # YI SYLLABLE NREP
+A39F;ID # YI SYLLABLE NRUT
+A3A0;ID # YI SYLLABLE NRUX
+A3A1;ID # YI SYLLABLE NRU
+A3A2;ID # YI SYLLABLE NRUP
+A3A3;ID # YI SYLLABLE NRURX
+A3A4;ID # YI SYLLABLE NRUR
+A3A5;ID # YI SYLLABLE NRYT
+A3A6;ID # YI SYLLABLE NRYX
+A3A7;ID # YI SYLLABLE NRY
+A3A8;ID # YI SYLLABLE NRYP
+A3A9;ID # YI SYLLABLE NRYRX
+A3AA;ID # YI SYLLABLE NRYR
+A3AB;ID # YI SYLLABLE SHAT
+A3AC;ID # YI SYLLABLE SHAX
+A3AD;ID # YI SYLLABLE SHA
+A3AE;ID # YI SYLLABLE SHAP
+A3AF;ID # YI SYLLABLE SHUOX
+A3B0;ID # YI SYLLABLE SHUO
+A3B1;ID # YI SYLLABLE SHUOP
+A3B2;ID # YI SYLLABLE SHOT
+A3B3;ID # YI SYLLABLE SHOX
+A3B4;ID # YI SYLLABLE SHO
+A3B5;ID # YI SYLLABLE SHOP
+A3B6;ID # YI SYLLABLE SHET
+A3B7;ID # YI SYLLABLE SHEX
+A3B8;ID # YI SYLLABLE SHE
+A3B9;ID # YI SYLLABLE SHEP
+A3BA;ID # YI SYLLABLE SHUT
+A3BB;ID # YI SYLLABLE SHUX
+A3BC;ID # YI SYLLABLE SHU
+A3BD;ID # YI SYLLABLE SHUP
+A3BE;ID # YI SYLLABLE SHURX
+A3BF;ID # YI SYLLABLE SHUR
+A3C0;ID # YI SYLLABLE SHYT
+A3C1;ID # YI SYLLABLE SHYX
+A3C2;ID # YI SYLLABLE SHY
+A3C3;ID # YI SYLLABLE SHYP
+A3C4;ID # YI SYLLABLE SHYRX
+A3C5;ID # YI SYLLABLE SHYR
+A3C6;ID # YI SYLLABLE RAT
+A3C7;ID # YI SYLLABLE RAX
+A3C8;ID # YI SYLLABLE RA
+A3C9;ID # YI SYLLABLE RAP
+A3CA;ID # YI SYLLABLE RUOX
+A3CB;ID # YI SYLLABLE RUO
+A3CC;ID # YI SYLLABLE RUOP
+A3CD;ID # YI SYLLABLE ROT
+A3CE;ID # YI SYLLABLE ROX
+A3CF;ID # YI SYLLABLE RO
+A3D0;ID # YI SYLLABLE ROP
+A3D1;ID # YI SYLLABLE REX
+A3D2;ID # YI SYLLABLE RE
+A3D3;ID # YI SYLLABLE REP
+A3D4;ID # YI SYLLABLE RUT
+A3D5;ID # YI SYLLABLE RUX
+A3D6;ID # YI SYLLABLE RU
+A3D7;ID # YI SYLLABLE RUP
+A3D8;ID # YI SYLLABLE RURX
+A3D9;ID # YI SYLLABLE RUR
+A3DA;ID # YI SYLLABLE RYT
+A3DB;ID # YI SYLLABLE RYX
+A3DC;ID # YI SYLLABLE RY
+A3DD;ID # YI SYLLABLE RYP
+A3DE;ID # YI SYLLABLE RYRX
+A3DF;ID # YI SYLLABLE RYR
+A3E0;ID # YI SYLLABLE JIT
+A3E1;ID # YI SYLLABLE JIX
+A3E2;ID # YI SYLLABLE JI
+A3E3;ID # YI SYLLABLE JIP
+A3E4;ID # YI SYLLABLE JIET
+A3E5;ID # YI SYLLABLE JIEX
+A3E6;ID # YI SYLLABLE JIE
+A3E7;ID # YI SYLLABLE JIEP
+A3E8;ID # YI SYLLABLE JUOT
+A3E9;ID # YI SYLLABLE JUOX
+A3EA;ID # YI SYLLABLE JUO
+A3EB;ID # YI SYLLABLE JUOP
+A3EC;ID # YI SYLLABLE JOT
+A3ED;ID # YI SYLLABLE JOX
+A3EE;ID # YI SYLLABLE JO
+A3EF;ID # YI SYLLABLE JOP
+A3F0;ID # YI SYLLABLE JUT
+A3F1;ID # YI SYLLABLE JUX
+A3F2;ID # YI SYLLABLE JU
+A3F3;ID # YI SYLLABLE JUP
+A3F4;ID # YI SYLLABLE JURX
+A3F5;ID # YI SYLLABLE JUR
+A3F6;ID # YI SYLLABLE JYT
+A3F7;ID # YI SYLLABLE JYX
+A3F8;ID # YI SYLLABLE JY
+A3F9;ID # YI SYLLABLE JYP
+A3FA;ID # YI SYLLABLE JYRX
+A3FB;ID # YI SYLLABLE JYR
+A3FC;ID # YI SYLLABLE QIT
+A3FD;ID # YI SYLLABLE QIX
+A3FE;ID # YI SYLLABLE QI
+A3FF;ID # YI SYLLABLE QIP
+A400;ID # YI SYLLABLE QIET
+A401;ID # YI SYLLABLE QIEX
+A402;ID # YI SYLLABLE QIE
+A403;ID # YI SYLLABLE QIEP
+A404;ID # YI SYLLABLE QUOT
+A405;ID # YI SYLLABLE QUOX
+A406;ID # YI SYLLABLE QUO
+A407;ID # YI SYLLABLE QUOP
+A408;ID # YI SYLLABLE QOT
+A409;ID # YI SYLLABLE QOX
+A40A;ID # YI SYLLABLE QO
+A40B;ID # YI SYLLABLE QOP
+A40C;ID # YI SYLLABLE QUT
+A40D;ID # YI SYLLABLE QUX
+A40E;ID # YI SYLLABLE QU
+A40F;ID # YI SYLLABLE QUP
+A410;ID # YI SYLLABLE QURX
+A411;ID # YI SYLLABLE QUR
+A412;ID # YI SYLLABLE QYT
+A413;ID # YI SYLLABLE QYX
+A414;ID # YI SYLLABLE QY
+A415;ID # YI SYLLABLE QYP
+A416;ID # YI SYLLABLE QYRX
+A417;ID # YI SYLLABLE QYR
+A418;ID # YI SYLLABLE JJIT
+A419;ID # YI SYLLABLE JJIX
+A41A;ID # YI SYLLABLE JJI
+A41B;ID # YI SYLLABLE JJIP
+A41C;ID # YI SYLLABLE JJIET
+A41D;ID # YI SYLLABLE JJIEX
+A41E;ID # YI SYLLABLE JJIE
+A41F;ID # YI SYLLABLE JJIEP
+A420;ID # YI SYLLABLE JJUOX
+A421;ID # YI SYLLABLE JJUO
+A422;ID # YI SYLLABLE JJUOP
+A423;ID # YI SYLLABLE JJOT
+A424;ID # YI SYLLABLE JJOX
+A425;ID # YI SYLLABLE JJO
+A426;ID # YI SYLLABLE JJOP
+A427;ID # YI SYLLABLE JJUT
+A428;ID # YI SYLLABLE JJUX
+A429;ID # YI SYLLABLE JJU
+A42A;ID # YI SYLLABLE JJUP
+A42B;ID # YI SYLLABLE JJURX
+A42C;ID # YI SYLLABLE JJUR
+A42D;ID # YI SYLLABLE JJYT
+A42E;ID # YI SYLLABLE JJYX
+A42F;ID # YI SYLLABLE JJY
+A430;ID # YI SYLLABLE JJYP
+A431;ID # YI SYLLABLE NJIT
+A432;ID # YI SYLLABLE NJIX
+A433;ID # YI SYLLABLE NJI
+A434;ID # YI SYLLABLE NJIP
+A435;ID # YI SYLLABLE NJIET
+A436;ID # YI SYLLABLE NJIEX
+A437;ID # YI SYLLABLE NJIE
+A438;ID # YI SYLLABLE NJIEP
+A439;ID # YI SYLLABLE NJUOX
+A43A;ID # YI SYLLABLE NJUO
+A43B;ID # YI SYLLABLE NJOT
+A43C;ID # YI SYLLABLE NJOX
+A43D;ID # YI SYLLABLE NJO
+A43E;ID # YI SYLLABLE NJOP
+A43F;ID # YI SYLLABLE NJUX
+A440;ID # YI SYLLABLE NJU
+A441;ID # YI SYLLABLE NJUP
+A442;ID # YI SYLLABLE NJURX
+A443;ID # YI SYLLABLE NJUR
+A444;ID # YI SYLLABLE NJYT
+A445;ID # YI SYLLABLE NJYX
+A446;ID # YI SYLLABLE NJY
+A447;ID # YI SYLLABLE NJYP
+A448;ID # YI SYLLABLE NJYRX
+A449;ID # YI SYLLABLE NJYR
+A44A;ID # YI SYLLABLE NYIT
+A44B;ID # YI SYLLABLE NYIX
+A44C;ID # YI SYLLABLE NYI
+A44D;ID # YI SYLLABLE NYIP
+A44E;ID # YI SYLLABLE NYIET
+A44F;ID # YI SYLLABLE NYIEX
+A450;ID # YI SYLLABLE NYIE
+A451;ID # YI SYLLABLE NYIEP
+A452;ID # YI SYLLABLE NYUOX
+A453;ID # YI SYLLABLE NYUO
+A454;ID # YI SYLLABLE NYUOP
+A455;ID # YI SYLLABLE NYOT
+A456;ID # YI SYLLABLE NYOX
+A457;ID # YI SYLLABLE NYO
+A458;ID # YI SYLLABLE NYOP
+A459;ID # YI SYLLABLE NYUT
+A45A;ID # YI SYLLABLE NYUX
+A45B;ID # YI SYLLABLE NYU
+A45C;ID # YI SYLLABLE NYUP
+A45D;ID # YI SYLLABLE XIT
+A45E;ID # YI SYLLABLE XIX
+A45F;ID # YI SYLLABLE XI
+A460;ID # YI SYLLABLE XIP
+A461;ID # YI SYLLABLE XIET
+A462;ID # YI SYLLABLE XIEX
+A463;ID # YI SYLLABLE XIE
+A464;ID # YI SYLLABLE XIEP
+A465;ID # YI SYLLABLE XUOX
+A466;ID # YI SYLLABLE XUO
+A467;ID # YI SYLLABLE XOT
+A468;ID # YI SYLLABLE XOX
+A469;ID # YI SYLLABLE XO
+A46A;ID # YI SYLLABLE XOP
+A46B;ID # YI SYLLABLE XYT
+A46C;ID # YI SYLLABLE XYX
+A46D;ID # YI SYLLABLE XY
+A46E;ID # YI SYLLABLE XYP
+A46F;ID # YI SYLLABLE XYRX
+A470;ID # YI SYLLABLE XYR
+A471;ID # YI SYLLABLE YIT
+A472;ID # YI SYLLABLE YIX
+A473;ID # YI SYLLABLE YI
+A474;ID # YI SYLLABLE YIP
+A475;ID # YI SYLLABLE YIET
+A476;ID # YI SYLLABLE YIEX
+A477;ID # YI SYLLABLE YIE
+A478;ID # YI SYLLABLE YIEP
+A479;ID # YI SYLLABLE YUOT
+A47A;ID # YI SYLLABLE YUOX
+A47B;ID # YI SYLLABLE YUO
+A47C;ID # YI SYLLABLE YUOP
+A47D;ID # YI SYLLABLE YOT
+A47E;ID # YI SYLLABLE YOX
+A47F;ID # YI SYLLABLE YO
+A480;ID # YI SYLLABLE YOP
+A481;ID # YI SYLLABLE YUT
+A482;ID # YI SYLLABLE YUX
+A483;ID # YI SYLLABLE YU
+A484;ID # YI SYLLABLE YUP
+A485;ID # YI SYLLABLE YURX
+A486;ID # YI SYLLABLE YUR
+A487;ID # YI SYLLABLE YYT
+A488;ID # YI SYLLABLE YYX
+A489;ID # YI SYLLABLE YY
+A48A;ID # YI SYLLABLE YYP
+A48B;ID # YI SYLLABLE YYRX
+A48C;ID # YI SYLLABLE YYR
+A490;ID # YI RADICAL QOT
+A491;ID # YI RADICAL LI
+A492;ID # YI RADICAL KIT
+A493;ID # YI RADICAL NYIP
+A494;ID # YI RADICAL CYP
+A495;ID # YI RADICAL SSI
+A496;ID # YI RADICAL GGOP
+A497;ID # YI RADICAL GEP
+A498;ID # YI RADICAL MI
+A499;ID # YI RADICAL HXIT
+A49A;ID # YI RADICAL LYR
+A49B;ID # YI RADICAL BBUT
+A49C;ID # YI RADICAL MOP
+A49D;ID # YI RADICAL YO
+A49E;ID # YI RADICAL PUT
+A49F;ID # YI RADICAL HXUO
+A4A0;ID # YI RADICAL TAT
+A4A1;ID # YI RADICAL GA
+A4A2;ID # YI RADICAL ZUP
+A4A3;ID # YI RADICAL CYT
+A4A4;ID # YI RADICAL DDUR
+A4A5;ID # YI RADICAL BUR
+A4A6;ID # YI RADICAL GGUO
+A4A7;ID # YI RADICAL NYOP
+A4A8;ID # YI RADICAL TU
+A4A9;ID # YI RADICAL OP
+A4AA;ID # YI RADICAL JJUT
+A4AB;ID # YI RADICAL ZOT
+A4AC;ID # YI RADICAL PYT
+A4AD;ID # YI RADICAL HMO
+A4AE;ID # YI RADICAL YIT
+A4AF;ID # YI RADICAL VUR
+A4B0;ID # YI RADICAL SHY
+A4B1;ID # YI RADICAL VEP
+A4B2;ID # YI RADICAL ZA
+A4B3;ID # YI RADICAL JO
+A4B4;ID # YI RADICAL NZUP
+A4B5;ID # YI RADICAL JJY
+A4B6;ID # YI RADICAL GOT
+A4B7;ID # YI RADICAL JJIE
+A4B8;ID # YI RADICAL WO
+A4B9;ID # YI RADICAL DU
+A4BA;ID # YI RADICAL SHUR
+A4BB;ID # YI RADICAL LIE
+A4BC;ID # YI RADICAL CY
+A4BD;ID # YI RADICAL CUOP
+A4BE;ID # YI RADICAL CIP
+A4BF;ID # YI RADICAL HXOP
+A4C0;ID # YI RADICAL SHAT
+A4C1;ID # YI RADICAL ZUR
+A4C2;ID # YI RADICAL SHOP
+A4C3;ID # YI RADICAL CHE
+A4C4;ID # YI RADICAL ZZIET
+A4C5;ID # YI RADICAL NBIE
+A4C6;ID # YI RADICAL KE
+A700;AL # MODIFIER LETTER CHINESE TONE YIN PING
+A701;AL # MODIFIER LETTER CHINESE TONE YANG PING
+A702;AL # MODIFIER LETTER CHINESE TONE YIN SHANG
+A703;AL # MODIFIER LETTER CHINESE TONE YANG SHANG
+A704;AL # MODIFIER LETTER CHINESE TONE YIN QU
+A705;AL # MODIFIER LETTER CHINESE TONE YANG QU
+A706;AL # MODIFIER LETTER CHINESE TONE YIN RU
+A707;AL # MODIFIER LETTER CHINESE TONE YANG RU
+A708;AL # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709;AL # MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A;AL # MODIFIER LETTER MID DOTTED TONE BAR
+A70B;AL # MODIFIER LETTER LOW DOTTED TONE BAR
+A70C;AL # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D;AL # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E;AL # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F;AL # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710;AL # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711;AL # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712;AL # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713;AL # MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714;AL # MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715;AL # MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716;AL # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A800;AL # SYLOTI NAGRI LETTER A
+A801;AL # SYLOTI NAGRI LETTER I
+A802;CM # SYLOTI NAGRI SIGN DVISVARA
+A803;AL # SYLOTI NAGRI LETTER U
+A804;AL # SYLOTI NAGRI LETTER E
+A805;AL # SYLOTI NAGRI LETTER O
+A806;CM # SYLOTI NAGRI SIGN HASANTA
+A807;AL # SYLOTI NAGRI LETTER KO
+A808;AL # SYLOTI NAGRI LETTER KHO
+A809;AL # SYLOTI NAGRI LETTER GO
+A80A;AL # SYLOTI NAGRI LETTER GHO
+A80B;CM # SYLOTI NAGRI SIGN ANUSVARA
+A80C;AL # SYLOTI NAGRI LETTER CO
+A80D;AL # SYLOTI NAGRI LETTER CHO
+A80E;AL # SYLOTI NAGRI LETTER JO
+A80F;AL # SYLOTI NAGRI LETTER JHO
+A810;AL # SYLOTI NAGRI LETTER TTO
+A811;AL # SYLOTI NAGRI LETTER TTHO
+A812;AL # SYLOTI NAGRI LETTER DDO
+A813;AL # SYLOTI NAGRI LETTER DDHO
+A814;AL # SYLOTI NAGRI LETTER TO
+A815;AL # SYLOTI NAGRI LETTER THO
+A816;AL # SYLOTI NAGRI LETTER DO
+A817;AL # SYLOTI NAGRI LETTER DHO
+A818;AL # SYLOTI NAGRI LETTER NO
+A819;AL # SYLOTI NAGRI LETTER PO
+A81A;AL # SYLOTI NAGRI LETTER PHO
+A81B;AL # SYLOTI NAGRI LETTER BO
+A81C;AL # SYLOTI NAGRI LETTER BHO
+A81D;AL # SYLOTI NAGRI LETTER MO
+A81E;AL # SYLOTI NAGRI LETTER RO
+A81F;AL # SYLOTI NAGRI LETTER LO
+A820;AL # SYLOTI NAGRI LETTER RRO
+A821;AL # SYLOTI NAGRI LETTER SO
+A822;AL # SYLOTI NAGRI LETTER HO
+A823;CM # SYLOTI NAGRI VOWEL SIGN A
+A824;CM # SYLOTI NAGRI VOWEL SIGN I
+A825;CM # SYLOTI NAGRI VOWEL SIGN U
+A826;CM # SYLOTI NAGRI VOWEL SIGN E
+A827;CM # SYLOTI NAGRI VOWEL SIGN OO
+A828;AL # SYLOTI NAGRI POETRY MARK-1
+A829;AL # SYLOTI NAGRI POETRY MARK-2
+A82A;AL # SYLOTI NAGRI POETRY MARK-3
+A82B;AL # SYLOTI NAGRI POETRY MARK-4
+AC00;H2 # HANGUL SYLLABLE GA
+AC01..AC1B;H3 # HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
+AC1C;H2 # HANGUL SYLLABLE GAE
+AC1D..AC37;H3 # HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
+AC38;H2 # HANGUL SYLLABLE GYA
+AC39..AC53;H3 # HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
+AC54;H2 # HANGUL SYLLABLE GYAE
+AC55..AC6F;H3 # HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
+AC70;H2 # HANGUL SYLLABLE GEO
+AC71..AC8B;H3 # HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
+AC8C;H2 # HANGUL SYLLABLE GE
+AC8D..ACA7;H3 # HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
+ACA8;H2 # HANGUL SYLLABLE GYEO
+ACA9..ACC3;H3 # HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
+ACC4;H2 # HANGUL SYLLABLE GYE
+ACC5..ACDF;H3 # HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
+ACE0;H2 # HANGUL SYLLABLE GO
+ACE1..ACFB;H3 # HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
+ACFC;H2 # HANGUL SYLLABLE GWA
+ACFD..AD17;H3 # HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
+AD18;H2 # HANGUL SYLLABLE GWAE
+AD19..AD33;H3 # HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
+AD34;H2 # HANGUL SYLLABLE GOE
+AD35..AD4F;H3 # HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
+AD50;H2 # HANGUL SYLLABLE GYO
+AD51..AD6B;H3 # HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
+AD6C;H2 # HANGUL SYLLABLE GU
+AD6D..AD87;H3 # HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
+AD88;H2 # HANGUL SYLLABLE GWEO
+AD89..ADA3;H3 # HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
+ADA4;H2 # HANGUL SYLLABLE GWE
+ADA5..ADBF;H3 # HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
+ADC0;H2 # HANGUL SYLLABLE GWI
+ADC1..ADDB;H3 # HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
+ADDC;H2 # HANGUL SYLLABLE GYU
+ADDD..ADF7;H3 # HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
+ADF8;H2 # HANGUL SYLLABLE GEU
+ADF9..AE13;H3 # HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
+AE14;H2 # HANGUL SYLLABLE GYI
+AE15..AE2F;H3 # HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
+AE30;H2 # HANGUL SYLLABLE GI
+AE31..AE4B;H3 # HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
+AE4C;H2 # HANGUL SYLLABLE GGA
+AE4D..AE67;H3 # HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
+AE68;H2 # HANGUL SYLLABLE GGAE
+AE69..AE83;H3 # HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
+AE84;H2 # HANGUL SYLLABLE GGYA
+AE85..AE9F;H3 # HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
+AEA0;H2 # HANGUL SYLLABLE GGYAE
+AEA1..AEBB;H3 # HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
+AEBC;H2 # HANGUL SYLLABLE GGEO
+AEBD..AED7;H3 # HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
+AED8;H2 # HANGUL SYLLABLE GGE
+AED9..AEF3;H3 # HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
+AEF4;H2 # HANGUL SYLLABLE GGYEO
+AEF5..AF0F;H3 # HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
+AF10;H2 # HANGUL SYLLABLE GGYE
+AF11..AF2B;H3 # HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
+AF2C;H2 # HANGUL SYLLABLE GGO
+AF2D..AF47;H3 # HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
+AF48;H2 # HANGUL SYLLABLE GGWA
+AF49..AF63;H3 # HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
+AF64;H2 # HANGUL SYLLABLE GGWAE
+AF65..AF7F;H3 # HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
+AF80;H2 # HANGUL SYLLABLE GGOE
+AF81..AF9B;H3 # HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
+AF9C;H2 # HANGUL SYLLABLE GGYO
+AF9D..AFB7;H3 # HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
+AFB8;H2 # HANGUL SYLLABLE GGU
+AFB9..AFD3;H3 # HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
+AFD4;H2 # HANGUL SYLLABLE GGWEO
+AFD5..AFEF;H3 # HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
+AFF0;H2 # HANGUL SYLLABLE GGWE
+AFF1..B00B;H3 # HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
+B00C;H2 # HANGUL SYLLABLE GGWI
+B00D..B027;H3 # HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
+B028;H2 # HANGUL SYLLABLE GGYU
+B029..B043;H3 # HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
+B044;H2 # HANGUL SYLLABLE GGEU
+B045..B05F;H3 # HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
+B060;H2 # HANGUL SYLLABLE GGYI
+B061..B07B;H3 # HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
+B07C;H2 # HANGUL SYLLABLE GGI
+B07D..B097;H3 # HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
+B098;H2 # HANGUL SYLLABLE NA
+B099..B0B3;H3 # HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
+B0B4;H2 # HANGUL SYLLABLE NAE
+B0B5..B0CF;H3 # HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
+B0D0;H2 # HANGUL SYLLABLE NYA
+B0D1..B0EB;H3 # HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
+B0EC;H2 # HANGUL SYLLABLE NYAE
+B0ED..B107;H3 # HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
+B108;H2 # HANGUL SYLLABLE NEO
+B109..B123;H3 # HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
+B124;H2 # HANGUL SYLLABLE NE
+B125..B13F;H3 # HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
+B140;H2 # HANGUL SYLLABLE NYEO
+B141..B15B;H3 # HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
+B15C;H2 # HANGUL SYLLABLE NYE
+B15D..B177;H3 # HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
+B178;H2 # HANGUL SYLLABLE NO
+B179..B193;H3 # HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
+B194;H2 # HANGUL SYLLABLE NWA
+B195..B1AF;H3 # HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
+B1B0;H2 # HANGUL SYLLABLE NWAE
+B1B1..B1CB;H3 # HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
+B1CC;H2 # HANGUL SYLLABLE NOE
+B1CD..B1E7;H3 # HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
+B1E8;H2 # HANGUL SYLLABLE NYO
+B1E9..B203;H3 # HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
+B204;H2 # HANGUL SYLLABLE NU
+B205..B21F;H3 # HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
+B220;H2 # HANGUL SYLLABLE NWEO
+B221..B23B;H3 # HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
+B23C;H2 # HANGUL SYLLABLE NWE
+B23D..B257;H3 # HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
+B258;H2 # HANGUL SYLLABLE NWI
+B259..B273;H3 # HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
+B274;H2 # HANGUL SYLLABLE NYU
+B275..B28F;H3 # HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
+B290;H2 # HANGUL SYLLABLE NEU
+B291..B2AB;H3 # HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
+B2AC;H2 # HANGUL SYLLABLE NYI
+B2AD..B2C7;H3 # HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
+B2C8;H2 # HANGUL SYLLABLE NI
+B2C9..B2E3;H3 # HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
+B2E4;H2 # HANGUL SYLLABLE DA
+B2E5..B2FF;H3 # HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
+B300;H2 # HANGUL SYLLABLE DAE
+B301..B31B;H3 # HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
+B31C;H2 # HANGUL SYLLABLE DYA
+B31D..B337;H3 # HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
+B338;H2 # HANGUL SYLLABLE DYAE
+B339..B353;H3 # HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
+B354;H2 # HANGUL SYLLABLE DEO
+B355..B36F;H3 # HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
+B370;H2 # HANGUL SYLLABLE DE
+B371..B38B;H3 # HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
+B38C;H2 # HANGUL SYLLABLE DYEO
+B38D..B3A7;H3 # HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
+B3A8;H2 # HANGUL SYLLABLE DYE
+B3A9..B3C3;H3 # HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
+B3C4;H2 # HANGUL SYLLABLE DO
+B3C5..B3DF;H3 # HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
+B3E0;H2 # HANGUL SYLLABLE DWA
+B3E1..B3FB;H3 # HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
+B3FC;H2 # HANGUL SYLLABLE DWAE
+B3FD..B417;H3 # HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
+B418;H2 # HANGUL SYLLABLE DOE
+B419..B433;H3 # HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
+B434;H2 # HANGUL SYLLABLE DYO
+B435..B44F;H3 # HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
+B450;H2 # HANGUL SYLLABLE DU
+B451..B46B;H3 # HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
+B46C;H2 # HANGUL SYLLABLE DWEO
+B46D..B487;H3 # HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
+B488;H2 # HANGUL SYLLABLE DWE
+B489..B4A3;H3 # HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
+B4A4;H2 # HANGUL SYLLABLE DWI
+B4A5..B4BF;H3 # HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
+B4C0;H2 # HANGUL SYLLABLE DYU
+B4C1..B4DB;H3 # HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
+B4DC;H2 # HANGUL SYLLABLE DEU
+B4DD..B4F7;H3 # HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
+B4F8;H2 # HANGUL SYLLABLE DYI
+B4F9..B513;H3 # HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
+B514;H2 # HANGUL SYLLABLE DI
+B515..B52F;H3 # HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
+B530;H2 # HANGUL SYLLABLE DDA
+B531..B54B;H3 # HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
+B54C;H2 # HANGUL SYLLABLE DDAE
+B54D..B567;H3 # HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
+B568;H2 # HANGUL SYLLABLE DDYA
+B569..B583;H3 # HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
+B584;H2 # HANGUL SYLLABLE DDYAE
+B585..B59F;H3 # HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
+B5A0;H2 # HANGUL SYLLABLE DDEO
+B5A1..B5BB;H3 # HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
+B5BC;H2 # HANGUL SYLLABLE DDE
+B5BD..B5D7;H3 # HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
+B5D8;H2 # HANGUL SYLLABLE DDYEO
+B5D9..B5F3;H3 # HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
+B5F4;H2 # HANGUL SYLLABLE DDYE
+B5F5..B60F;H3 # HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
+B610;H2 # HANGUL SYLLABLE DDO
+B611..B62B;H3 # HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
+B62C;H2 # HANGUL SYLLABLE DDWA
+B62D..B647;H3 # HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
+B648;H2 # HANGUL SYLLABLE DDWAE
+B649..B663;H3 # HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
+B664;H2 # HANGUL SYLLABLE DDOE
+B665..B67F;H3 # HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
+B680;H2 # HANGUL SYLLABLE DDYO
+B681..B69B;H3 # HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
+B69C;H2 # HANGUL SYLLABLE DDU
+B69D..B6B7;H3 # HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
+B6B8;H2 # HANGUL SYLLABLE DDWEO
+B6B9..B6D3;H3 # HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
+B6D4;H2 # HANGUL SYLLABLE DDWE
+B6D5..B6EF;H3 # HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
+B6F0;H2 # HANGUL SYLLABLE DDWI
+B6F1..B70B;H3 # HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
+B70C;H2 # HANGUL SYLLABLE DDYU
+B70D..B727;H3 # HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
+B728;H2 # HANGUL SYLLABLE DDEU
+B729..B743;H3 # HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
+B744;H2 # HANGUL SYLLABLE DDYI
+B745..B75F;H3 # HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
+B760;H2 # HANGUL SYLLABLE DDI
+B761..B77B;H3 # HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
+B77C;H2 # HANGUL SYLLABLE RA
+B77D..B797;H3 # HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
+B798;H2 # HANGUL SYLLABLE RAE
+B799..B7B3;H3 # HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
+B7B4;H2 # HANGUL SYLLABLE RYA
+B7B5..B7CF;H3 # HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
+B7D0;H2 # HANGUL SYLLABLE RYAE
+B7D1..B7EB;H3 # HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
+B7EC;H2 # HANGUL SYLLABLE REO
+B7ED..B807;H3 # HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
+B808;H2 # HANGUL SYLLABLE RE
+B809..B823;H3 # HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
+B824;H2 # HANGUL SYLLABLE RYEO
+B825..B83F;H3 # HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
+B840;H2 # HANGUL SYLLABLE RYE
+B841..B85B;H3 # HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
+B85C;H2 # HANGUL SYLLABLE RO
+B85D..B877;H3 # HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
+B878;H2 # HANGUL SYLLABLE RWA
+B879..B893;H3 # HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
+B894;H2 # HANGUL SYLLABLE RWAE
+B895..B8AF;H3 # HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
+B8B0;H2 # HANGUL SYLLABLE ROE
+B8B1..B8CB;H3 # HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
+B8CC;H2 # HANGUL SYLLABLE RYO
+B8CD..B8E7;H3 # HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
+B8E8;H2 # HANGUL SYLLABLE RU
+B8E9..B903;H3 # HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
+B904;H2 # HANGUL SYLLABLE RWEO
+B905..B91F;H3 # HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
+B920;H2 # HANGUL SYLLABLE RWE
+B921..B93B;H3 # HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
+B93C;H2 # HANGUL SYLLABLE RWI
+B93D..B957;H3 # HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
+B958;H2 # HANGUL SYLLABLE RYU
+B959..B973;H3 # HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
+B974;H2 # HANGUL SYLLABLE REU
+B975..B98F;H3 # HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
+B990;H2 # HANGUL SYLLABLE RYI
+B991..B9AB;H3 # HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
+B9AC;H2 # HANGUL SYLLABLE RI
+B9AD..B9C7;H3 # HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
+B9C8;H2 # HANGUL SYLLABLE MA
+B9C9..B9E3;H3 # HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
+B9E4;H2 # HANGUL SYLLABLE MAE
+B9E5..B9FF;H3 # HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
+BA00;H2 # HANGUL SYLLABLE MYA
+BA01..BA1B;H3 # HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
+BA1C;H2 # HANGUL SYLLABLE MYAE
+BA1D..BA37;H3 # HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
+BA38;H2 # HANGUL SYLLABLE MEO
+BA39..BA53;H3 # HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
+BA54;H2 # HANGUL SYLLABLE ME
+BA55..BA6F;H3 # HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
+BA70;H2 # HANGUL SYLLABLE MYEO
+BA71..BA8B;H3 # HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
+BA8C;H2 # HANGUL SYLLABLE MYE
+BA8D..BAA7;H3 # HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
+BAA8;H2 # HANGUL SYLLABLE MO
+BAA9..BAC3;H3 # HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
+BAC4;H2 # HANGUL SYLLABLE MWA
+BAC5..BADF;H3 # HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
+BAE0;H2 # HANGUL SYLLABLE MWAE
+BAE1..BAFB;H3 # HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
+BAFC;H2 # HANGUL SYLLABLE MOE
+BAFD..BB17;H3 # HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
+BB18;H2 # HANGUL SYLLABLE MYO
+BB19..BB33;H3 # HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
+BB34;H2 # HANGUL SYLLABLE MU
+BB35..BB4F;H3 # HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
+BB50;H2 # HANGUL SYLLABLE MWEO
+BB51..BB6B;H3 # HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
+BB6C;H2 # HANGUL SYLLABLE MWE
+BB6D..BB87;H3 # HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
+BB88;H2 # HANGUL SYLLABLE MWI
+BB89..BBA3;H3 # HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
+BBA4;H2 # HANGUL SYLLABLE MYU
+BBA5..BBBF;H3 # HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
+BBC0;H2 # HANGUL SYLLABLE MEU
+BBC1..BBDB;H3 # HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
+BBDC;H2 # HANGUL SYLLABLE MYI
+BBDD..BBF7;H3 # HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
+BBF8;H2 # HANGUL SYLLABLE MI
+BBF9..BC13;H3 # HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
+BC14;H2 # HANGUL SYLLABLE BA
+BC15..BC2F;H3 # HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
+BC30;H2 # HANGUL SYLLABLE BAE
+BC31..BC4B;H3 # HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
+BC4C;H2 # HANGUL SYLLABLE BYA
+BC4D..BC67;H3 # HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
+BC68;H2 # HANGUL SYLLABLE BYAE
+BC69..BC83;H3 # HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
+BC84;H2 # HANGUL SYLLABLE BEO
+BC85..BC9F;H3 # HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
+BCA0;H2 # HANGUL SYLLABLE BE
+BCA1..BCBB;H3 # HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
+BCBC;H2 # HANGUL SYLLABLE BYEO
+BCBD..BCD7;H3 # HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
+BCD8;H2 # HANGUL SYLLABLE BYE
+BCD9..BCF3;H3 # HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
+BCF4;H2 # HANGUL SYLLABLE BO
+BCF5..BD0F;H3 # HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
+BD10;H2 # HANGUL SYLLABLE BWA
+BD11..BD2B;H3 # HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
+BD2C;H2 # HANGUL SYLLABLE BWAE
+BD2D..BD47;H3 # HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
+BD48;H2 # HANGUL SYLLABLE BOE
+BD49..BD63;H3 # HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
+BD64;H2 # HANGUL SYLLABLE BYO
+BD65..BD7F;H3 # HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
+BD80;H2 # HANGUL SYLLABLE BU
+BD81..BD9B;H3 # HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
+BD9C;H2 # HANGUL SYLLABLE BWEO
+BD9D..BDB7;H3 # HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
+BDB8;H2 # HANGUL SYLLABLE BWE
+BDB9..BDD3;H3 # HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
+BDD4;H2 # HANGUL SYLLABLE BWI
+BDD5..BDEF;H3 # HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
+BDF0;H2 # HANGUL SYLLABLE BYU
+BDF1..BE0B;H3 # HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
+BE0C;H2 # HANGUL SYLLABLE BEU
+BE0D..BE27;H3 # HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
+BE28;H2 # HANGUL SYLLABLE BYI
+BE29..BE43;H3 # HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
+BE44;H2 # HANGUL SYLLABLE BI
+BE45..BE5F;H3 # HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
+BE60;H2 # HANGUL SYLLABLE BBA
+BE61..BE7B;H3 # HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
+BE7C;H2 # HANGUL SYLLABLE BBAE
+BE7D..BE97;H3 # HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
+BE98;H2 # HANGUL SYLLABLE BBYA
+BE99..BEB3;H3 # HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
+BEB4;H2 # HANGUL SYLLABLE BBYAE
+BEB5..BECF;H3 # HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
+BED0;H2 # HANGUL SYLLABLE BBEO
+BED1..BEEB;H3 # HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
+BEEC;H2 # HANGUL SYLLABLE BBE
+BEED..BF07;H3 # HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
+BF08;H2 # HANGUL SYLLABLE BBYEO
+BF09..BF23;H3 # HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
+BF24;H2 # HANGUL SYLLABLE BBYE
+BF25..BF3F;H3 # HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
+BF40;H2 # HANGUL SYLLABLE BBO
+BF41..BF5B;H3 # HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
+BF5C;H2 # HANGUL SYLLABLE BBWA
+BF5D..BF77;H3 # HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
+BF78;H2 # HANGUL SYLLABLE BBWAE
+BF79..BF93;H3 # HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
+BF94;H2 # HANGUL SYLLABLE BBOE
+BF95..BFAF;H3 # HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
+BFB0;H2 # HANGUL SYLLABLE BBYO
+BFB1..BFCB;H3 # HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
+BFCC;H2 # HANGUL SYLLABLE BBU
+BFCD..BFE7;H3 # HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
+BFE8;H2 # HANGUL SYLLABLE BBWEO
+BFE9..C003;H3 # HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
+C004;H2 # HANGUL SYLLABLE BBWE
+C005..C01F;H3 # HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
+C020;H2 # HANGUL SYLLABLE BBWI
+C021..C03B;H3 # HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
+C03C;H2 # HANGUL SYLLABLE BBYU
+C03D..C057;H3 # HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
+C058;H2 # HANGUL SYLLABLE BBEU
+C059..C073;H3 # HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
+C074;H2 # HANGUL SYLLABLE BBYI
+C075..C08F;H3 # HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
+C090;H2 # HANGUL SYLLABLE BBI
+C091..C0AB;H3 # HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
+C0AC;H2 # HANGUL SYLLABLE SA
+C0AD..C0C7;H3 # HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
+C0C8;H2 # HANGUL SYLLABLE SAE
+C0C9..C0E3;H3 # HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
+C0E4;H2 # HANGUL SYLLABLE SYA
+C0E5..C0FF;H3 # HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
+C100;H2 # HANGUL SYLLABLE SYAE
+C101..C11B;H3 # HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
+C11C;H2 # HANGUL SYLLABLE SEO
+C11D..C137;H3 # HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
+C138;H2 # HANGUL SYLLABLE SE
+C139..C153;H3 # HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
+C154;H2 # HANGUL SYLLABLE SYEO
+C155..C16F;H3 # HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
+C170;H2 # HANGUL SYLLABLE SYE
+C171..C18B;H3 # HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
+C18C;H2 # HANGUL SYLLABLE SO
+C18D..C1A7;H3 # HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
+C1A8;H2 # HANGUL SYLLABLE SWA
+C1A9..C1C3;H3 # HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
+C1C4;H2 # HANGUL SYLLABLE SWAE
+C1C5..C1DF;H3 # HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
+C1E0;H2 # HANGUL SYLLABLE SOE
+C1E1..C1FB;H3 # HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
+C1FC;H2 # HANGUL SYLLABLE SYO
+C1FD..C217;H3 # HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
+C218;H2 # HANGUL SYLLABLE SU
+C219..C233;H3 # HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
+C234;H2 # HANGUL SYLLABLE SWEO
+C235..C24F;H3 # HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
+C250;H2 # HANGUL SYLLABLE SWE
+C251..C26B;H3 # HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
+C26C;H2 # HANGUL SYLLABLE SWI
+C26D..C287;H3 # HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
+C288;H2 # HANGUL SYLLABLE SYU
+C289..C2A3;H3 # HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
+C2A4;H2 # HANGUL SYLLABLE SEU
+C2A5..C2BF;H3 # HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
+C2C0;H2 # HANGUL SYLLABLE SYI
+C2C1..C2DB;H3 # HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
+C2DC;H2 # HANGUL SYLLABLE SI
+C2DD..C2F7;H3 # HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
+C2F8;H2 # HANGUL SYLLABLE SSA
+C2F9..C313;H3 # HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
+C314;H2 # HANGUL SYLLABLE SSAE
+C315..C32F;H3 # HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
+C330;H2 # HANGUL SYLLABLE SSYA
+C331..C34B;H3 # HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
+C34C;H2 # HANGUL SYLLABLE SSYAE
+C34D..C367;H3 # HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
+C368;H2 # HANGUL SYLLABLE SSEO
+C369..C383;H3 # HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
+C384;H2 # HANGUL SYLLABLE SSE
+C385..C39F;H3 # HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
+C3A0;H2 # HANGUL SYLLABLE SSYEO
+C3A1..C3BB;H3 # HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
+C3BC;H2 # HANGUL SYLLABLE SSYE
+C3BD..C3D7;H3 # HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
+C3D8;H2 # HANGUL SYLLABLE SSO
+C3D9..C3F3;H3 # HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
+C3F4;H2 # HANGUL SYLLABLE SSWA
+C3F5..C40F;H3 # HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
+C410;H2 # HANGUL SYLLABLE SSWAE
+C411..C42B;H3 # HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
+C42C;H2 # HANGUL SYLLABLE SSOE
+C42D..C447;H3 # HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
+C448;H2 # HANGUL SYLLABLE SSYO
+C449..C463;H3 # HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
+C464;H2 # HANGUL SYLLABLE SSU
+C465..C47F;H3 # HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
+C480;H2 # HANGUL SYLLABLE SSWEO
+C481..C49B;H3 # HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
+C49C;H2 # HANGUL SYLLABLE SSWE
+C49D..C4B7;H3 # HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
+C4B8;H2 # HANGUL SYLLABLE SSWI
+C4B9..C4D3;H3 # HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
+C4D4;H2 # HANGUL SYLLABLE SSYU
+C4D5..C4EF;H3 # HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
+C4F0;H2 # HANGUL SYLLABLE SSEU
+C4F1..C50B;H3 # HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
+C50C;H2 # HANGUL SYLLABLE SSYI
+C50D..C527;H3 # HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
+C528;H2 # HANGUL SYLLABLE SSI
+C529..C543;H3 # HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
+C544;H2 # HANGUL SYLLABLE A
+C545..C55F;H3 # HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
+C560;H2 # HANGUL SYLLABLE AE
+C561..C57B;H3 # HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
+C57C;H2 # HANGUL SYLLABLE YA
+C57D..C597;H3 # HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
+C598;H2 # HANGUL SYLLABLE YAE
+C599..C5B3;H3 # HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
+C5B4;H2 # HANGUL SYLLABLE EO
+C5B5..C5CF;H3 # HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
+C5D0;H2 # HANGUL SYLLABLE E
+C5D1..C5EB;H3 # HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
+C5EC;H2 # HANGUL SYLLABLE YEO
+C5ED..C607;H3 # HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
+C608;H2 # HANGUL SYLLABLE YE
+C609..C623;H3 # HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
+C624;H2 # HANGUL SYLLABLE O
+C625..C63F;H3 # HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
+C640;H2 # HANGUL SYLLABLE WA
+C641..C65B;H3 # HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
+C65C;H2 # HANGUL SYLLABLE WAE
+C65D..C677;H3 # HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
+C678;H2 # HANGUL SYLLABLE OE
+C679..C693;H3 # HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
+C694;H2 # HANGUL SYLLABLE YO
+C695..C6AF;H3 # HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
+C6B0;H2 # HANGUL SYLLABLE U
+C6B1..C6CB;H3 # HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
+C6CC;H2 # HANGUL SYLLABLE WEO
+C6CD..C6E7;H3 # HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
+C6E8;H2 # HANGUL SYLLABLE WE
+C6E9..C703;H3 # HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
+C704;H2 # HANGUL SYLLABLE WI
+C705..C71F;H3 # HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
+C720;H2 # HANGUL SYLLABLE YU
+C721..C73B;H3 # HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
+C73C;H2 # HANGUL SYLLABLE EU
+C73D..C757;H3 # HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
+C758;H2 # HANGUL SYLLABLE YI
+C759..C773;H3 # HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
+C774;H2 # HANGUL SYLLABLE I
+C775..C78F;H3 # HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
+C790;H2 # HANGUL SYLLABLE JA
+C791..C7AB;H3 # HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
+C7AC;H2 # HANGUL SYLLABLE JAE
+C7AD..C7C7;H3 # HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
+C7C8;H2 # HANGUL SYLLABLE JYA
+C7C9..C7E3;H3 # HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
+C7E4;H2 # HANGUL SYLLABLE JYAE
+C7E5..C7FF;H3 # HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
+C800;H2 # HANGUL SYLLABLE JEO
+C801..C81B;H3 # HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
+C81C;H2 # HANGUL SYLLABLE JE
+C81D..C837;H3 # HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
+C838;H2 # HANGUL SYLLABLE JYEO
+C839..C853;H3 # HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
+C854;H2 # HANGUL SYLLABLE JYE
+C855..C86F;H3 # HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
+C870;H2 # HANGUL SYLLABLE JO
+C871..C88B;H3 # HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
+C88C;H2 # HANGUL SYLLABLE JWA
+C88D..C8A7;H3 # HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
+C8A8;H2 # HANGUL SYLLABLE JWAE
+C8A9..C8C3;H3 # HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
+C8C4;H2 # HANGUL SYLLABLE JOE
+C8C5..C8DF;H3 # HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
+C8E0;H2 # HANGUL SYLLABLE JYO
+C8E1..C8FB;H3 # HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
+C8FC;H2 # HANGUL SYLLABLE JU
+C8FD..C917;H3 # HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
+C918;H2 # HANGUL SYLLABLE JWEO
+C919..C933;H3 # HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
+C934;H2 # HANGUL SYLLABLE JWE
+C935..C94F;H3 # HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
+C950;H2 # HANGUL SYLLABLE JWI
+C951..C96B;H3 # HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
+C96C;H2 # HANGUL SYLLABLE JYU
+C96D..C987;H3 # HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
+C988;H2 # HANGUL SYLLABLE JEU
+C989..C9A3;H3 # HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
+C9A4;H2 # HANGUL SYLLABLE JYI
+C9A5..C9BF;H3 # HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
+C9C0;H2 # HANGUL SYLLABLE JI
+C9C1..C9DB;H3 # HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
+C9DC;H2 # HANGUL SYLLABLE JJA
+C9DD..C9F7;H3 # HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
+C9F8;H2 # HANGUL SYLLABLE JJAE
+C9F9..CA13;H3 # HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
+CA14;H2 # HANGUL SYLLABLE JJYA
+CA15..CA2F;H3 # HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
+CA30;H2 # HANGUL SYLLABLE JJYAE
+CA31..CA4B;H3 # HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
+CA4C;H2 # HANGUL SYLLABLE JJEO
+CA4D..CA67;H3 # HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
+CA68;H2 # HANGUL SYLLABLE JJE
+CA69..CA83;H3 # HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
+CA84;H2 # HANGUL SYLLABLE JJYEO
+CA85..CA9F;H3 # HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
+CAA0;H2 # HANGUL SYLLABLE JJYE
+CAA1..CABB;H3 # HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
+CABC;H2 # HANGUL SYLLABLE JJO
+CABD..CAD7;H3 # HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
+CAD8;H2 # HANGUL SYLLABLE JJWA
+CAD9..CAF3;H3 # HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
+CAF4;H2 # HANGUL SYLLABLE JJWAE
+CAF5..CB0F;H3 # HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
+CB10;H2 # HANGUL SYLLABLE JJOE
+CB11..CB2B;H3 # HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
+CB2C;H2 # HANGUL SYLLABLE JJYO
+CB2D..CB47;H3 # HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
+CB48;H2 # HANGUL SYLLABLE JJU
+CB49..CB63;H3 # HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
+CB64;H2 # HANGUL SYLLABLE JJWEO
+CB65..CB7F;H3 # HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
+CB80;H2 # HANGUL SYLLABLE JJWE
+CB81..CB9B;H3 # HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
+CB9C;H2 # HANGUL SYLLABLE JJWI
+CB9D..CBB7;H3 # HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
+CBB8;H2 # HANGUL SYLLABLE JJYU
+CBB9..CBD3;H3 # HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
+CBD4;H2 # HANGUL SYLLABLE JJEU
+CBD5..CBEF;H3 # HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
+CBF0;H2 # HANGUL SYLLABLE JJYI
+CBF1..CC0B;H3 # HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
+CC0C;H2 # HANGUL SYLLABLE JJI
+CC0D..CC27;H3 # HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
+CC28;H2 # HANGUL SYLLABLE CA
+CC29..CC43;H3 # HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
+CC44;H2 # HANGUL SYLLABLE CAE
+CC45..CC5F;H3 # HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
+CC60;H2 # HANGUL SYLLABLE CYA
+CC61..CC7B;H3 # HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
+CC7C;H2 # HANGUL SYLLABLE CYAE
+CC7D..CC97;H3 # HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
+CC98;H2 # HANGUL SYLLABLE CEO
+CC99..CCB3;H3 # HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
+CCB4;H2 # HANGUL SYLLABLE CE
+CCB5..CCCF;H3 # HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
+CCD0;H2 # HANGUL SYLLABLE CYEO
+CCD1..CCEB;H3 # HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
+CCEC;H2 # HANGUL SYLLABLE CYE
+CCED..CD07;H3 # HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
+CD08;H2 # HANGUL SYLLABLE CO
+CD09..CD23;H3 # HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
+CD24;H2 # HANGUL SYLLABLE CWA
+CD25..CD3F;H3 # HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
+CD40;H2 # HANGUL SYLLABLE CWAE
+CD41..CD5B;H3 # HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
+CD5C;H2 # HANGUL SYLLABLE COE
+CD5D..CD77;H3 # HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
+CD78;H2 # HANGUL SYLLABLE CYO
+CD79..CD93;H3 # HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
+CD94;H2 # HANGUL SYLLABLE CU
+CD95..CDAF;H3 # HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
+CDB0;H2 # HANGUL SYLLABLE CWEO
+CDB1..CDCB;H3 # HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
+CDCC;H2 # HANGUL SYLLABLE CWE
+CDCD..CDE7;H3 # HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
+CDE8;H2 # HANGUL SYLLABLE CWI
+CDE9..CE03;H3 # HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
+CE04;H2 # HANGUL SYLLABLE CYU
+CE05..CE1F;H3 # HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
+CE20;H2 # HANGUL SYLLABLE CEU
+CE21..CE3B;H3 # HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
+CE3C;H2 # HANGUL SYLLABLE CYI
+CE3D..CE57;H3 # HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
+CE58;H2 # HANGUL SYLLABLE CI
+CE59..CE73;H3 # HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
+CE74;H2 # HANGUL SYLLABLE KA
+CE75..CE8F;H3 # HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
+CE90;H2 # HANGUL SYLLABLE KAE
+CE91..CEAB;H3 # HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
+CEAC;H2 # HANGUL SYLLABLE KYA
+CEAD..CEC7;H3 # HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
+CEC8;H2 # HANGUL SYLLABLE KYAE
+CEC9..CEE3;H3 # HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
+CEE4;H2 # HANGUL SYLLABLE KEO
+CEE5..CEFF;H3 # HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
+CF00;H2 # HANGUL SYLLABLE KE
+CF01..CF1B;H3 # HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
+CF1C;H2 # HANGUL SYLLABLE KYEO
+CF1D..CF37;H3 # HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
+CF38;H2 # HANGUL SYLLABLE KYE
+CF39..CF53;H3 # HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
+CF54;H2 # HANGUL SYLLABLE KO
+CF55..CF6F;H3 # HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
+CF70;H2 # HANGUL SYLLABLE KWA
+CF71..CF8B;H3 # HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
+CF8C;H2 # HANGUL SYLLABLE KWAE
+CF8D..CFA7;H3 # HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
+CFA8;H2 # HANGUL SYLLABLE KOE
+CFA9..CFC3;H3 # HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
+CFC4;H2 # HANGUL SYLLABLE KYO
+CFC5..CFDF;H3 # HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
+CFE0;H2 # HANGUL SYLLABLE KU
+CFE1..CFFB;H3 # HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
+CFFC;H2 # HANGUL SYLLABLE KWEO
+CFFD..D017;H3 # HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
+D018;H2 # HANGUL SYLLABLE KWE
+D019..D033;H3 # HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
+D034;H2 # HANGUL SYLLABLE KWI
+D035..D04F;H3 # HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
+D050;H2 # HANGUL SYLLABLE KYU
+D051..D06B;H3 # HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
+D06C;H2 # HANGUL SYLLABLE KEU
+D06D..D087;H3 # HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
+D088;H2 # HANGUL SYLLABLE KYI
+D089..D0A3;H3 # HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
+D0A4;H2 # HANGUL SYLLABLE KI
+D0A5..D0BF;H3 # HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
+D0C0;H2 # HANGUL SYLLABLE TA
+D0C1..D0DB;H3 # HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
+D0DC;H2 # HANGUL SYLLABLE TAE
+D0DD..D0F7;H3 # HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
+D0F8;H2 # HANGUL SYLLABLE TYA
+D0F9..D113;H3 # HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
+D114;H2 # HANGUL SYLLABLE TYAE
+D115..D12F;H3 # HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
+D130;H2 # HANGUL SYLLABLE TEO
+D131..D14B;H3 # HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
+D14C;H2 # HANGUL SYLLABLE TE
+D14D..D167;H3 # HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
+D168;H2 # HANGUL SYLLABLE TYEO
+D169..D183;H3 # HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
+D184;H2 # HANGUL SYLLABLE TYE
+D185..D19F;H3 # HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
+D1A0;H2 # HANGUL SYLLABLE TO
+D1A1..D1BB;H3 # HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
+D1BC;H2 # HANGUL SYLLABLE TWA
+D1BD..D1D7;H3 # HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
+D1D8;H2 # HANGUL SYLLABLE TWAE
+D1D9..D1F3;H3 # HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
+D1F4;H2 # HANGUL SYLLABLE TOE
+D1F5..D20F;H3 # HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
+D210;H2 # HANGUL SYLLABLE TYO
+D211..D22B;H3 # HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
+D22C;H2 # HANGUL SYLLABLE TU
+D22D..D247;H3 # HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
+D248;H2 # HANGUL SYLLABLE TWEO
+D249..D263;H3 # HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
+D264;H2 # HANGUL SYLLABLE TWE
+D265..D27F;H3 # HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
+D280;H2 # HANGUL SYLLABLE TWI
+D281..D29B;H3 # HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
+D29C;H2 # HANGUL SYLLABLE TYU
+D29D..D2B7;H3 # HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
+D2B8;H2 # HANGUL SYLLABLE TEU
+D2B9..D2D3;H3 # HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
+D2D4;H2 # HANGUL SYLLABLE TYI
+D2D5..D2EF;H3 # HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
+D2F0;H2 # HANGUL SYLLABLE TI
+D2F1..D30B;H3 # HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
+D30C;H2 # HANGUL SYLLABLE PA
+D30D..D327;H3 # HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
+D328;H2 # HANGUL SYLLABLE PAE
+D329..D343;H3 # HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
+D344;H2 # HANGUL SYLLABLE PYA
+D345..D35F;H3 # HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
+D360;H2 # HANGUL SYLLABLE PYAE
+D361..D37B;H3 # HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
+D37C;H2 # HANGUL SYLLABLE PEO
+D37D..D397;H3 # HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
+D398;H2 # HANGUL SYLLABLE PE
+D399..D3B3;H3 # HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
+D3B4;H2 # HANGUL SYLLABLE PYEO
+D3B5..D3CF;H3 # HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
+D3D0;H2 # HANGUL SYLLABLE PYE
+D3D1..D3EB;H3 # HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
+D3EC;H2 # HANGUL SYLLABLE PO
+D3ED..D407;H3 # HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
+D408;H2 # HANGUL SYLLABLE PWA
+D409..D423;H3 # HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
+D424;H2 # HANGUL SYLLABLE PWAE
+D425..D43F;H3 # HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
+D440;H2 # HANGUL SYLLABLE POE
+D441..D45B;H3 # HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
+D45C;H2 # HANGUL SYLLABLE PYO
+D45D..D477;H3 # HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
+D478;H2 # HANGUL SYLLABLE PU
+D479..D493;H3 # HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
+D494;H2 # HANGUL SYLLABLE PWEO
+D495..D4AF;H3 # HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
+D4B0;H2 # HANGUL SYLLABLE PWE
+D4B1..D4CB;H3 # HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
+D4CC;H2 # HANGUL SYLLABLE PWI
+D4CD..D4E7;H3 # HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
+D4E8;H2 # HANGUL SYLLABLE PYU
+D4E9..D503;H3 # HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
+D504;H2 # HANGUL SYLLABLE PEU
+D505..D51F;H3 # HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
+D520;H2 # HANGUL SYLLABLE PYI
+D521..D53B;H3 # HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
+D53C;H2 # HANGUL SYLLABLE PI
+D53D..D557;H3 # HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
+D558;H2 # HANGUL SYLLABLE HA
+D559..D573;H3 # HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
+D574;H2 # HANGUL SYLLABLE HAE
+D575..D58F;H3 # HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
+D590;H2 # HANGUL SYLLABLE HYA
+D591..D5AB;H3 # HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
+D5AC;H2 # HANGUL SYLLABLE HYAE
+D5AD..D5C7;H3 # HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
+D5C8;H2 # HANGUL SYLLABLE HEO
+D5C9..D5E3;H3 # HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
+D5E4;H2 # HANGUL SYLLABLE HE
+D5E5..D5FF;H3 # HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
+D600;H2 # HANGUL SYLLABLE HYEO
+D601..D61B;H3 # HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
+D61C;H2 # HANGUL SYLLABLE HYE
+D61D..D637;H3 # HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
+D638;H2 # HANGUL SYLLABLE HO
+D639..D653;H3 # HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
+D654;H2 # HANGUL SYLLABLE HWA
+D655..D66F;H3 # HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
+D670;H2 # HANGUL SYLLABLE HWAE
+D671..D68B;H3 # HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
+D68C;H2 # HANGUL SYLLABLE HOE
+D68D..D6A7;H3 # HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
+D6A8;H2 # HANGUL SYLLABLE HYO
+D6A9..D6C3;H3 # HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
+D6C4;H2 # HANGUL SYLLABLE HU
+D6C5..D6DF;H3 # HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
+D6E0;H2 # HANGUL SYLLABLE HWEO
+D6E1..D6FB;H3 # HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
+D6FC;H2 # HANGUL SYLLABLE HWE
+D6FD..D717;H3 # HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
+D718;H2 # HANGUL SYLLABLE HWI
+D719..D733;H3 # HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
+D734;H2 # HANGUL SYLLABLE HYU
+D735..D74F;H3 # HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
+D750;H2 # HANGUL SYLLABLE HEU
+D751..D76B;H3 # HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
+D76C;H2 # HANGUL SYLLABLE HYI
+D76D..D787;H3 # HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
+D788;H2 # HANGUL SYLLABLE HI
+D789..D7A3;H3 # HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
+D800..DB7F;SG # <Non Private Use High Surrogate, First>..<Non Private Use High Surrogate, Last>
+DB80..DBFF;SG # <Private Use High Surrogate, First>..<Private Use High Surrogate, Last>
+DC00..DFFF;SG # <Low Surrogate, First>..<Low Surrogate, Last>
+E000..F8FF;XX # <Private Use, First>..<Private Use, Last>
+F900;ID # CJK COMPATIBILITY IDEOGRAPH-F900
+F901;ID # CJK COMPATIBILITY IDEOGRAPH-F901
+F902;ID # CJK COMPATIBILITY IDEOGRAPH-F902
+F903;ID # CJK COMPATIBILITY IDEOGRAPH-F903
+F904;ID # CJK COMPATIBILITY IDEOGRAPH-F904
+F905;ID # CJK COMPATIBILITY IDEOGRAPH-F905
+F906;ID # CJK COMPATIBILITY IDEOGRAPH-F906
+F907;ID # CJK COMPATIBILITY IDEOGRAPH-F907
+F908;ID # CJK COMPATIBILITY IDEOGRAPH-F908
+F909;ID # CJK COMPATIBILITY IDEOGRAPH-F909
+F90A;ID # CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B;ID # CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C;ID # CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D;ID # CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E;ID # CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F;ID # CJK COMPATIBILITY IDEOGRAPH-F90F
+F910;ID # CJK COMPATIBILITY IDEOGRAPH-F910
+F911;ID # CJK COMPATIBILITY IDEOGRAPH-F911
+F912;ID # CJK COMPATIBILITY IDEOGRAPH-F912
+F913;ID # CJK COMPATIBILITY IDEOGRAPH-F913
+F914;ID # CJK COMPATIBILITY IDEOGRAPH-F914
+F915;ID # CJK COMPATIBILITY IDEOGRAPH-F915
+F916;ID # CJK COMPATIBILITY IDEOGRAPH-F916
+F917;ID # CJK COMPATIBILITY IDEOGRAPH-F917
+F918;ID # CJK COMPATIBILITY IDEOGRAPH-F918
+F919;ID # CJK COMPATIBILITY IDEOGRAPH-F919
+F91A;ID # CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B;ID # CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C;ID # CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D;ID # CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E;ID # CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F;ID # CJK COMPATIBILITY IDEOGRAPH-F91F
+F920;ID # CJK COMPATIBILITY IDEOGRAPH-F920
+F921;ID # CJK COMPATIBILITY IDEOGRAPH-F921
+F922;ID # CJK COMPATIBILITY IDEOGRAPH-F922
+F923;ID # CJK COMPATIBILITY IDEOGRAPH-F923
+F924;ID # CJK COMPATIBILITY IDEOGRAPH-F924
+F925;ID # CJK COMPATIBILITY IDEOGRAPH-F925
+F926;ID # CJK COMPATIBILITY IDEOGRAPH-F926
+F927;ID # CJK COMPATIBILITY IDEOGRAPH-F927
+F928;ID # CJK COMPATIBILITY IDEOGRAPH-F928
+F929;ID # CJK COMPATIBILITY IDEOGRAPH-F929
+F92A;ID # CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B;ID # CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C;ID # CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D;ID # CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E;ID # CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F;ID # CJK COMPATIBILITY IDEOGRAPH-F92F
+F930;ID # CJK COMPATIBILITY IDEOGRAPH-F930
+F931;ID # CJK COMPATIBILITY IDEOGRAPH-F931
+F932;ID # CJK COMPATIBILITY IDEOGRAPH-F932
+F933;ID # CJK COMPATIBILITY IDEOGRAPH-F933
+F934;ID # CJK COMPATIBILITY IDEOGRAPH-F934
+F935;ID # CJK COMPATIBILITY IDEOGRAPH-F935
+F936;ID # CJK COMPATIBILITY IDEOGRAPH-F936
+F937;ID # CJK COMPATIBILITY IDEOGRAPH-F937
+F938;ID # CJK COMPATIBILITY IDEOGRAPH-F938
+F939;ID # CJK COMPATIBILITY IDEOGRAPH-F939
+F93A;ID # CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B;ID # CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C;ID # CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D;ID # CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E;ID # CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F;ID # CJK COMPATIBILITY IDEOGRAPH-F93F
+F940;ID # CJK COMPATIBILITY IDEOGRAPH-F940
+F941;ID # CJK COMPATIBILITY IDEOGRAPH-F941
+F942;ID # CJK COMPATIBILITY IDEOGRAPH-F942
+F943;ID # CJK COMPATIBILITY IDEOGRAPH-F943
+F944;ID # CJK COMPATIBILITY IDEOGRAPH-F944
+F945;ID # CJK COMPATIBILITY IDEOGRAPH-F945
+F946;ID # CJK COMPATIBILITY IDEOGRAPH-F946
+F947;ID # CJK COMPATIBILITY IDEOGRAPH-F947
+F948;ID # CJK COMPATIBILITY IDEOGRAPH-F948
+F949;ID # CJK COMPATIBILITY IDEOGRAPH-F949
+F94A;ID # CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B;ID # CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C;ID # CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D;ID # CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E;ID # CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F;ID # CJK COMPATIBILITY IDEOGRAPH-F94F
+F950;ID # CJK COMPATIBILITY IDEOGRAPH-F950
+F951;ID # CJK COMPATIBILITY IDEOGRAPH-F951
+F952;ID # CJK COMPATIBILITY IDEOGRAPH-F952
+F953;ID # CJK COMPATIBILITY IDEOGRAPH-F953
+F954;ID # CJK COMPATIBILITY IDEOGRAPH-F954
+F955;ID # CJK COMPATIBILITY IDEOGRAPH-F955
+F956;ID # CJK COMPATIBILITY IDEOGRAPH-F956
+F957;ID # CJK COMPATIBILITY IDEOGRAPH-F957
+F958;ID # CJK COMPATIBILITY IDEOGRAPH-F958
+F959;ID # CJK COMPATIBILITY IDEOGRAPH-F959
+F95A;ID # CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B;ID # CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C;ID # CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D;ID # CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E;ID # CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F;ID # CJK COMPATIBILITY IDEOGRAPH-F95F
+F960;ID # CJK COMPATIBILITY IDEOGRAPH-F960
+F961;ID # CJK COMPATIBILITY IDEOGRAPH-F961
+F962;ID # CJK COMPATIBILITY IDEOGRAPH-F962
+F963;ID # CJK COMPATIBILITY IDEOGRAPH-F963
+F964;ID # CJK COMPATIBILITY IDEOGRAPH-F964
+F965;ID # CJK COMPATIBILITY IDEOGRAPH-F965
+F966;ID # CJK COMPATIBILITY IDEOGRAPH-F966
+F967;ID # CJK COMPATIBILITY IDEOGRAPH-F967
+F968;ID # CJK COMPATIBILITY IDEOGRAPH-F968
+F969;ID # CJK COMPATIBILITY IDEOGRAPH-F969
+F96A;ID # CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B;ID # CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C;ID # CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D;ID # CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E;ID # CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F;ID # CJK COMPATIBILITY IDEOGRAPH-F96F
+F970;ID # CJK COMPATIBILITY IDEOGRAPH-F970
+F971;ID # CJK COMPATIBILITY IDEOGRAPH-F971
+F972;ID # CJK COMPATIBILITY IDEOGRAPH-F972
+F973;ID # CJK COMPATIBILITY IDEOGRAPH-F973
+F974;ID # CJK COMPATIBILITY IDEOGRAPH-F974
+F975;ID # CJK COMPATIBILITY IDEOGRAPH-F975
+F976;ID # CJK COMPATIBILITY IDEOGRAPH-F976
+F977;ID # CJK COMPATIBILITY IDEOGRAPH-F977
+F978;ID # CJK COMPATIBILITY IDEOGRAPH-F978
+F979;ID # CJK COMPATIBILITY IDEOGRAPH-F979
+F97A;ID # CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B;ID # CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C;ID # CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D;ID # CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E;ID # CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F;ID # CJK COMPATIBILITY IDEOGRAPH-F97F
+F980;ID # CJK COMPATIBILITY IDEOGRAPH-F980
+F981;ID # CJK COMPATIBILITY IDEOGRAPH-F981
+F982;ID # CJK COMPATIBILITY IDEOGRAPH-F982
+F983;ID # CJK COMPATIBILITY IDEOGRAPH-F983
+F984;ID # CJK COMPATIBILITY IDEOGRAPH-F984
+F985;ID # CJK COMPATIBILITY IDEOGRAPH-F985
+F986;ID # CJK COMPATIBILITY IDEOGRAPH-F986
+F987;ID # CJK COMPATIBILITY IDEOGRAPH-F987
+F988;ID # CJK COMPATIBILITY IDEOGRAPH-F988
+F989;ID # CJK COMPATIBILITY IDEOGRAPH-F989
+F98A;ID # CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B;ID # CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C;ID # CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D;ID # CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E;ID # CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F;ID # CJK COMPATIBILITY IDEOGRAPH-F98F
+F990;ID # CJK COMPATIBILITY IDEOGRAPH-F990
+F991;ID # CJK COMPATIBILITY IDEOGRAPH-F991
+F992;ID # CJK COMPATIBILITY IDEOGRAPH-F992
+F993;ID # CJK COMPATIBILITY IDEOGRAPH-F993
+F994;ID # CJK COMPATIBILITY IDEOGRAPH-F994
+F995;ID # CJK COMPATIBILITY IDEOGRAPH-F995
+F996;ID # CJK COMPATIBILITY IDEOGRAPH-F996
+F997;ID # CJK COMPATIBILITY IDEOGRAPH-F997
+F998;ID # CJK COMPATIBILITY IDEOGRAPH-F998
+F999;ID # CJK COMPATIBILITY IDEOGRAPH-F999
+F99A;ID # CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B;ID # CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C;ID # CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D;ID # CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E;ID # CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F;ID # CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0;ID # CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1;ID # CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2;ID # CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3;ID # CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4;ID # CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5;ID # CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6;ID # CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7;ID # CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8;ID # CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9;ID # CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA;ID # CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB;ID # CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC;ID # CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD;ID # CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE;ID # CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF;ID # CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0;ID # CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1;ID # CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2;ID # CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3;ID # CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4;ID # CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5;ID # CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6;ID # CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7;ID # CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8;ID # CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9;ID # CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA;ID # CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB;ID # CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC;ID # CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD;ID # CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE;ID # CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF;ID # CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0;ID # CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1;ID # CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2;ID # CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3;ID # CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4;ID # CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5;ID # CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6;ID # CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7;ID # CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8;ID # CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9;ID # CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA;ID # CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB;ID # CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC;ID # CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD;ID # CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE;ID # CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF;ID # CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0;ID # CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1;ID # CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2;ID # CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3;ID # CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4;ID # CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5;ID # CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6;ID # CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7;ID # CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8;ID # CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9;ID # CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA;ID # CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB;ID # CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC;ID # CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD;ID # CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE;ID # CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF;ID # CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0;ID # CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1;ID # CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2;ID # CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3;ID # CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4;ID # CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5;ID # CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6;ID # CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7;ID # CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8;ID # CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9;ID # CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA;ID # CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB;ID # CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC;ID # CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED;ID # CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE;ID # CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF;ID # CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0;ID # CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1;ID # CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2;ID # CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3;ID # CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4;ID # CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5;ID # CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6;ID # CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7;ID # CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8;ID # CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9;ID # CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA;ID # CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB;ID # CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC;ID # CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD;ID # CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE;ID # CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF;ID # CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00;ID # CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01;ID # CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02;ID # CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03;ID # CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04;ID # CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05;ID # CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06;ID # CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07;ID # CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08;ID # CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09;ID # CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A;ID # CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B;ID # CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C;ID # CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D;ID # CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA0E;ID # CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F;ID # CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA10;ID # CJK COMPATIBILITY IDEOGRAPH-FA10
+FA11;ID # CJK COMPATIBILITY IDEOGRAPH-FA11
+FA12;ID # CJK COMPATIBILITY IDEOGRAPH-FA12
+FA13;ID # CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14;ID # CJK COMPATIBILITY IDEOGRAPH-FA14
+FA15;ID # CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16;ID # CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17;ID # CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18;ID # CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19;ID # CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A;ID # CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B;ID # CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C;ID # CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D;ID # CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E;ID # CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA1F;ID # CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA20;ID # CJK COMPATIBILITY IDEOGRAPH-FA20
+FA21;ID # CJK COMPATIBILITY IDEOGRAPH-FA21
+FA22;ID # CJK COMPATIBILITY IDEOGRAPH-FA22
+FA23;ID # CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24;ID # CJK COMPATIBILITY IDEOGRAPH-FA24
+FA25;ID # CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26;ID # CJK COMPATIBILITY IDEOGRAPH-FA26
+FA27;ID # CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28;ID # CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29;ID # CJK COMPATIBILITY IDEOGRAPH-FA29
+FA2A;ID # CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B;ID # CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C;ID # CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D;ID # CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30;ID # CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31;ID # CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32;ID # CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33;ID # CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34;ID # CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35;ID # CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36;ID # CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37;ID # CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38;ID # CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39;ID # CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A;ID # CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B;ID # CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C;ID # CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D;ID # CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E;ID # CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F;ID # CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40;ID # CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41;ID # CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42;ID # CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43;ID # CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44;ID # CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45;ID # CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46;ID # CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47;ID # CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48;ID # CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49;ID # CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A;ID # CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B;ID # CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C;ID # CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D;ID # CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E;ID # CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F;ID # CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50;ID # CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51;ID # CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52;ID # CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53;ID # CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54;ID # CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55;ID # CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56;ID # CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57;ID # CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58;ID # CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59;ID # CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A;ID # CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B;ID # CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C;ID # CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D;ID # CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E;ID # CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F;ID # CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60;ID # CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61;ID # CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62;ID # CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63;ID # CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64;ID # CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65;ID # CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66;ID # CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67;ID # CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68;ID # CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69;ID # CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A;ID # CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70;ID # CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71;ID # CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72;ID # CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73;ID # CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74;ID # CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75;ID # CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76;ID # CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77;ID # CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78;ID # CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79;ID # CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A;ID # CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B;ID # CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C;ID # CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D;ID # CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E;ID # CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F;ID # CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80;ID # CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81;ID # CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82;ID # CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83;ID # CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84;ID # CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85;ID # CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86;ID # CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87;ID # CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88;ID # CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89;ID # CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A;ID # CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B;ID # CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C;ID # CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D;ID # CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E;ID # CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F;ID # CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90;ID # CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91;ID # CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92;ID # CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93;ID # CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94;ID # CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95;ID # CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96;ID # CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97;ID # CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98;ID # CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99;ID # CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A;ID # CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B;ID # CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C;ID # CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D;ID # CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E;ID # CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F;ID # CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0;ID # CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1;ID # CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2;ID # CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3;ID # CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4;ID # CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5;ID # CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6;ID # CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7;ID # CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8;ID # CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9;ID # CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA;ID # CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB;ID # CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC;ID # CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD;ID # CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE;ID # CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF;ID # CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0;ID # CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1;ID # CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2;ID # CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3;ID # CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4;ID # CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5;ID # CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6;ID # CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7;ID # CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8;ID # CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9;ID # CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA;ID # CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB;ID # CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC;ID # CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD;ID # CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE;ID # CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF;ID # CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0;ID # CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1;ID # CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2;ID # CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3;ID # CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4;ID # CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5;ID # CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6;ID # CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7;ID # CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8;ID # CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9;ID # CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA;ID # CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB;ID # CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC;ID # CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD;ID # CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE;ID # CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF;ID # CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0;ID # CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1;ID # CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2;ID # CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3;ID # CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4;ID # CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5;ID # CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6;ID # CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7;ID # CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8;ID # CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9;ID # CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00;AL # LATIN SMALL LIGATURE FF
+FB01;AL # LATIN SMALL LIGATURE FI
+FB02;AL # LATIN SMALL LIGATURE FL
+FB03;AL # LATIN SMALL LIGATURE FFI
+FB04;AL # LATIN SMALL LIGATURE FFL
+FB05;AL # LATIN SMALL LIGATURE LONG S T
+FB06;AL # LATIN SMALL LIGATURE ST
+FB13;AL # ARMENIAN SMALL LIGATURE MEN NOW
+FB14;AL # ARMENIAN SMALL LIGATURE MEN ECH
+FB15;AL # ARMENIAN SMALL LIGATURE MEN INI
+FB16;AL # ARMENIAN SMALL LIGATURE VEW NOW
+FB17;AL # ARMENIAN SMALL LIGATURE MEN XEH
+FB1D;AL # HEBREW LETTER YOD WITH HIRIQ
+FB1E;CM # HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F;AL # HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20;AL # HEBREW LETTER ALTERNATIVE AYIN
+FB21;AL # HEBREW LETTER WIDE ALEF
+FB22;AL # HEBREW LETTER WIDE DALET
+FB23;AL # HEBREW LETTER WIDE HE
+FB24;AL # HEBREW LETTER WIDE KAF
+FB25;AL # HEBREW LETTER WIDE LAMED
+FB26;AL # HEBREW LETTER WIDE FINAL MEM
+FB27;AL # HEBREW LETTER WIDE RESH
+FB28;AL # HEBREW LETTER WIDE TAV
+FB29;AL # HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A;AL # HEBREW LETTER SHIN WITH SHIN DOT
+FB2B;AL # HEBREW LETTER SHIN WITH SIN DOT
+FB2C;AL # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D;AL # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E;AL # HEBREW LETTER ALEF WITH PATAH
+FB2F;AL # HEBREW LETTER ALEF WITH QAMATS
+FB30;AL # HEBREW LETTER ALEF WITH MAPIQ
+FB31;AL # HEBREW LETTER BET WITH DAGESH
+FB32;AL # HEBREW LETTER GIMEL WITH DAGESH
+FB33;AL # HEBREW LETTER DALET WITH DAGESH
+FB34;AL # HEBREW LETTER HE WITH MAPIQ
+FB35;AL # HEBREW LETTER VAV WITH DAGESH
+FB36;AL # HEBREW LETTER ZAYIN WITH DAGESH
+FB38;AL # HEBREW LETTER TET WITH DAGESH
+FB39;AL # HEBREW LETTER YOD WITH DAGESH
+FB3A;AL # HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B;AL # HEBREW LETTER KAF WITH DAGESH
+FB3C;AL # HEBREW LETTER LAMED WITH DAGESH
+FB3E;AL # HEBREW LETTER MEM WITH DAGESH
+FB40;AL # HEBREW LETTER NUN WITH DAGESH
+FB41;AL # HEBREW LETTER SAMEKH WITH DAGESH
+FB43;AL # HEBREW LETTER FINAL PE WITH DAGESH
+FB44;AL # HEBREW LETTER PE WITH DAGESH
+FB46;AL # HEBREW LETTER TSADI WITH DAGESH
+FB47;AL # HEBREW LETTER QOF WITH DAGESH
+FB48;AL # HEBREW LETTER RESH WITH DAGESH
+FB49;AL # HEBREW LETTER SHIN WITH DAGESH
+FB4A;AL # HEBREW LETTER TAV WITH DAGESH
+FB4B;AL # HEBREW LETTER VAV WITH HOLAM
+FB4C;AL # HEBREW LETTER BET WITH RAFE
+FB4D;AL # HEBREW LETTER KAF WITH RAFE
+FB4E;AL # HEBREW LETTER PE WITH RAFE
+FB4F;AL # HEBREW LIGATURE ALEF LAMED
+FB50;AL # ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51;AL # ARABIC LETTER ALEF WASLA FINAL FORM
+FB52;AL # ARABIC LETTER BEEH ISOLATED FORM
+FB53;AL # ARABIC LETTER BEEH FINAL FORM
+FB54;AL # ARABIC LETTER BEEH INITIAL FORM
+FB55;AL # ARABIC LETTER BEEH MEDIAL FORM
+FB56;AL # ARABIC LETTER PEH ISOLATED FORM
+FB57;AL # ARABIC LETTER PEH FINAL FORM
+FB58;AL # ARABIC LETTER PEH INITIAL FORM
+FB59;AL # ARABIC LETTER PEH MEDIAL FORM
+FB5A;AL # ARABIC LETTER BEHEH ISOLATED FORM
+FB5B;AL # ARABIC LETTER BEHEH FINAL FORM
+FB5C;AL # ARABIC LETTER BEHEH INITIAL FORM
+FB5D;AL # ARABIC LETTER BEHEH MEDIAL FORM
+FB5E;AL # ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F;AL # ARABIC LETTER TTEHEH FINAL FORM
+FB60;AL # ARABIC LETTER TTEHEH INITIAL FORM
+FB61;AL # ARABIC LETTER TTEHEH MEDIAL FORM
+FB62;AL # ARABIC LETTER TEHEH ISOLATED FORM
+FB63;AL # ARABIC LETTER TEHEH FINAL FORM
+FB64;AL # ARABIC LETTER TEHEH INITIAL FORM
+FB65;AL # ARABIC LETTER TEHEH MEDIAL FORM
+FB66;AL # ARABIC LETTER TTEH ISOLATED FORM
+FB67;AL # ARABIC LETTER TTEH FINAL FORM
+FB68;AL # ARABIC LETTER TTEH INITIAL FORM
+FB69;AL # ARABIC LETTER TTEH MEDIAL FORM
+FB6A;AL # ARABIC LETTER VEH ISOLATED FORM
+FB6B;AL # ARABIC LETTER VEH FINAL FORM
+FB6C;AL # ARABIC LETTER VEH INITIAL FORM
+FB6D;AL # ARABIC LETTER VEH MEDIAL FORM
+FB6E;AL # ARABIC LETTER PEHEH ISOLATED FORM
+FB6F;AL # ARABIC LETTER PEHEH FINAL FORM
+FB70;AL # ARABIC LETTER PEHEH INITIAL FORM
+FB71;AL # ARABIC LETTER PEHEH MEDIAL FORM
+FB72;AL # ARABIC LETTER DYEH ISOLATED FORM
+FB73;AL # ARABIC LETTER DYEH FINAL FORM
+FB74;AL # ARABIC LETTER DYEH INITIAL FORM
+FB75;AL # ARABIC LETTER DYEH MEDIAL FORM
+FB76;AL # ARABIC LETTER NYEH ISOLATED FORM
+FB77;AL # ARABIC LETTER NYEH FINAL FORM
+FB78;AL # ARABIC LETTER NYEH INITIAL FORM
+FB79;AL # ARABIC LETTER NYEH MEDIAL FORM
+FB7A;AL # ARABIC LETTER TCHEH ISOLATED FORM
+FB7B;AL # ARABIC LETTER TCHEH FINAL FORM
+FB7C;AL # ARABIC LETTER TCHEH INITIAL FORM
+FB7D;AL # ARABIC LETTER TCHEH MEDIAL FORM
+FB7E;AL # ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F;AL # ARABIC LETTER TCHEHEH FINAL FORM
+FB80;AL # ARABIC LETTER TCHEHEH INITIAL FORM
+FB81;AL # ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82;AL # ARABIC LETTER DDAHAL ISOLATED FORM
+FB83;AL # ARABIC LETTER DDAHAL FINAL FORM
+FB84;AL # ARABIC LETTER DAHAL ISOLATED FORM
+FB85;AL # ARABIC LETTER DAHAL FINAL FORM
+FB86;AL # ARABIC LETTER DUL ISOLATED FORM
+FB87;AL # ARABIC LETTER DUL FINAL FORM
+FB88;AL # ARABIC LETTER DDAL ISOLATED FORM
+FB89;AL # ARABIC LETTER DDAL FINAL FORM
+FB8A;AL # ARABIC LETTER JEH ISOLATED FORM
+FB8B;AL # ARABIC LETTER JEH FINAL FORM
+FB8C;AL # ARABIC LETTER RREH ISOLATED FORM
+FB8D;AL # ARABIC LETTER RREH FINAL FORM
+FB8E;AL # ARABIC LETTER KEHEH ISOLATED FORM
+FB8F;AL # ARABIC LETTER KEHEH FINAL FORM
+FB90;AL # ARABIC LETTER KEHEH INITIAL FORM
+FB91;AL # ARABIC LETTER KEHEH MEDIAL FORM
+FB92;AL # ARABIC LETTER GAF ISOLATED FORM
+FB93;AL # ARABIC LETTER GAF FINAL FORM
+FB94;AL # ARABIC LETTER GAF INITIAL FORM
+FB95;AL # ARABIC LETTER GAF MEDIAL FORM
+FB96;AL # ARABIC LETTER GUEH ISOLATED FORM
+FB97;AL # ARABIC LETTER GUEH FINAL FORM
+FB98;AL # ARABIC LETTER GUEH INITIAL FORM
+FB99;AL # ARABIC LETTER GUEH MEDIAL FORM
+FB9A;AL # ARABIC LETTER NGOEH ISOLATED FORM
+FB9B;AL # ARABIC LETTER NGOEH FINAL FORM
+FB9C;AL # ARABIC LETTER NGOEH INITIAL FORM
+FB9D;AL # ARABIC LETTER NGOEH MEDIAL FORM
+FB9E;AL # ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F;AL # ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0;AL # ARABIC LETTER RNOON ISOLATED FORM
+FBA1;AL # ARABIC LETTER RNOON FINAL FORM
+FBA2;AL # ARABIC LETTER RNOON INITIAL FORM
+FBA3;AL # ARABIC LETTER RNOON MEDIAL FORM
+FBA4;AL # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5;AL # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6;AL # ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7;AL # ARABIC LETTER HEH GOAL FINAL FORM
+FBA8;AL # ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9;AL # ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA;AL # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB;AL # ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC;AL # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD;AL # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE;AL # ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF;AL # ARABIC LETTER YEH BARREE FINAL FORM
+FBB0;AL # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1;AL # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3;AL # ARABIC LETTER NG ISOLATED FORM
+FBD4;AL # ARABIC LETTER NG FINAL FORM
+FBD5;AL # ARABIC LETTER NG INITIAL FORM
+FBD6;AL # ARABIC LETTER NG MEDIAL FORM
+FBD7;AL # ARABIC LETTER U ISOLATED FORM
+FBD8;AL # ARABIC LETTER U FINAL FORM
+FBD9;AL # ARABIC LETTER OE ISOLATED FORM
+FBDA;AL # ARABIC LETTER OE FINAL FORM
+FBDB;AL # ARABIC LETTER YU ISOLATED FORM
+FBDC;AL # ARABIC LETTER YU FINAL FORM
+FBDD;AL # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE;AL # ARABIC LETTER VE ISOLATED FORM
+FBDF;AL # ARABIC LETTER VE FINAL FORM
+FBE0;AL # ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1;AL # ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2;AL # ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3;AL # ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4;AL # ARABIC LETTER E ISOLATED FORM
+FBE5;AL # ARABIC LETTER E FINAL FORM
+FBE6;AL # ARABIC LETTER E INITIAL FORM
+FBE7;AL # ARABIC LETTER E MEDIAL FORM
+FBE8;AL # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9;AL # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9;AL # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA;AL # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB;AL # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC;AL # ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD;AL # ARABIC LETTER FARSI YEH FINAL FORM
+FBFE;AL # ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF;AL # ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05;AL # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06;AL # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07;AL # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08;AL # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09;AL # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A;AL # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B;AL # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C;AL # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D;AL # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E;AL # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F;AL # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10;AL # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11;AL # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12;AL # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13;AL # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14;AL # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15;AL # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16;AL # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17;AL # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18;AL # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19;AL # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A;AL # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B;AL # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C;AL # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D;AL # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E;AL # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F;AL # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20;AL # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21;AL # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22;AL # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23;AL # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24;AL # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25;AL # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26;AL # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27;AL # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28;AL # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29;AL # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A;AL # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B;AL # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C;AL # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D;AL # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E;AL # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F;AL # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30;AL # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31;AL # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32;AL # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33;AL # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34;AL # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35;AL # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36;AL # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37;AL # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38;AL # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39;AL # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A;AL # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B;AL # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C;AL # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D;AL # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E;AL # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F;AL # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40;AL # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41;AL # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42;AL # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43;AL # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44;AL # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45;AL # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46;AL # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47;AL # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48;AL # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49;AL # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A;AL # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B;AL # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C;AL # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D;AL # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E;AL # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F;AL # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50;AL # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51;AL # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52;AL # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53;AL # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54;AL # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55;AL # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56;AL # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57;AL # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58;AL # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59;AL # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A;AL # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B;AL # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C;AL # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D;AL # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E;AL # ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F;AL # ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60;AL # ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61;AL # ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62;AL # ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63;AL # ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A;AL # ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B;AL # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C;AL # ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D;AL # ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E;AL # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F;AL # ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70;AL # ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71;AL # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72;AL # ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73;AL # ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74;AL # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75;AL # ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76;AL # ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77;AL # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78;AL # ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79;AL # ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A;AL # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B;AL # ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C;AL # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D;AL # ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E;AL # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F;AL # ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80;AL # ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81;AL # ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82;AL # ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83;AL # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84;AL # ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85;AL # ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86;AL # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87;AL # ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88;AL # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89;AL # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A;AL # ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B;AL # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C;AL # ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D;AL # ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E;AL # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F;AL # ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90;AL # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91;AL # ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92;AL # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93;AL # ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94;AL # ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95;AL # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96;AL # ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C;AL # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D;AL # ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E;AL # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F;AL # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0;AL # ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1;AL # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2;AL # ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3;AL # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4;AL # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5;AL # ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6;AL # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7;AL # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8;AL # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9;AL # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA;AL # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB;AL # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC;AL # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD;AL # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE;AL # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF;AL # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0;AL # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1;AL # ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2;AL # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3;AL # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4;AL # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5;AL # ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6;AL # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7;AL # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8;AL # ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9;AL # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA;AL # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB;AL # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC;AL # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD;AL # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE;AL # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF;AL # ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0;AL # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1;AL # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2;AL # ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3;AL # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4;AL # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5;AL # ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6;AL # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7;AL # ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8;AL # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9;AL # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA;AL # ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB;AL # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC;AL # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD;AL # ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE;AL # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF;AL # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0;AL # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1;AL # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2;AL # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3;AL # ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4;AL # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5;AL # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6;AL # ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7;AL # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8;AL # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9;AL # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA;AL # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB;AL # ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC;AL # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD;AL # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE;AL # ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0;AL # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1;AL # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2;AL # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3;AL # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4;AL # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5;AL # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6;AL # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7;AL # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8;AL # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9;AL # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA;AL # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB;AL # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC;AL # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED;AL # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE;AL # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF;AL # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0;AL # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1;AL # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2;AL # ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3;AL # ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4;AL # ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5;AL # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6;AL # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7;AL # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8;AL # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9;AL # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA;AL # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB;AL # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC;AL # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD;AL # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE;AL # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF;AL # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00;AL # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01;AL # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02;AL # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03;AL # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04;AL # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05;AL # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06;AL # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07;AL # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08;AL # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09;AL # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A;AL # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B;AL # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C;AL # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D;AL # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E;AL # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F;AL # ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10;AL # ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11;AL # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12;AL # ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13;AL # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14;AL # ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15;AL # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16;AL # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17;AL # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18;AL # ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19;AL # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A;AL # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B;AL # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C;AL # ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D;AL # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E;AL # ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F;AL # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20;AL # ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21;AL # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22;AL # ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23;AL # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24;AL # ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25;AL # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26;AL # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27;AL # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28;AL # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29;AL # ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A;AL # ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B;AL # ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C;AL # ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D;AL # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E;AL # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F;AL # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30;AL # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31;AL # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32;AL # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33;AL # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34;AL # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35;AL # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36;AL # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37;AL # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38;AL # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39;AL # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A;AL # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B;AL # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C;AL # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D;AL # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E;OP # ORNATE LEFT PARENTHESIS
+FD3F;CL # ORNATE RIGHT PARENTHESIS
+FD50;AL # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51;AL # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52;AL # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53;AL # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54;AL # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55;AL # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56;AL # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57;AL # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58;AL # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59;AL # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A;AL # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B;AL # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C;AL # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D;AL # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E;AL # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F;AL # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60;AL # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61;AL # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62;AL # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63;AL # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64;AL # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65;AL # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66;AL # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67;AL # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68;AL # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69;AL # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A;AL # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B;AL # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C;AL # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D;AL # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E;AL # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F;AL # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70;AL # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71;AL # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72;AL # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73;AL # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74;AL # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75;AL # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76;AL # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77;AL # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78;AL # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79;AL # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A;AL # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B;AL # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C;AL # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D;AL # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E;AL # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F;AL # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80;AL # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81;AL # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82;AL # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83;AL # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84;AL # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85;AL # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86;AL # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87;AL # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88;AL # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89;AL # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A;AL # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B;AL # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C;AL # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D;AL # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E;AL # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F;AL # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92;AL # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93;AL # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94;AL # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95;AL # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96;AL # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97;AL # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98;AL # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99;AL # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A;AL # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B;AL # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C;AL # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D;AL # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E;AL # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F;AL # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0;AL # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1;AL # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2;AL # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3;AL # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4;AL # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5;AL # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6;AL # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7;AL # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8;AL # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9;AL # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA;AL # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB;AL # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC;AL # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD;AL # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE;AL # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF;AL # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0;AL # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1;AL # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2;AL # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3;AL # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4;AL # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5;AL # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6;AL # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7;AL # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8;AL # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9;AL # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA;AL # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB;AL # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC;AL # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD;AL # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE;AL # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF;AL # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0;AL # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1;AL # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2;AL # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3;AL # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4;AL # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5;AL # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6;AL # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7;AL # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0;AL # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1;AL # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2;AL # ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3;AL # ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4;AL # ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5;AL # ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6;AL # ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7;AL # ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8;AL # ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9;AL # ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA;AL # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB;AL # ARABIC LIGATURE JALLAJALALOUHOU
+FDFC;PO # RIAL SIGN
+FDFD;AL # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00;CM # VARIATION SELECTOR-1
+FE01;CM # VARIATION SELECTOR-2
+FE02;CM # VARIATION SELECTOR-3
+FE03;CM # VARIATION SELECTOR-4
+FE04;CM # VARIATION SELECTOR-5
+FE05;CM # VARIATION SELECTOR-6
+FE06;CM # VARIATION SELECTOR-7
+FE07;CM # VARIATION SELECTOR-8
+FE08;CM # VARIATION SELECTOR-9
+FE09;CM # VARIATION SELECTOR-10
+FE0A;CM # VARIATION SELECTOR-11
+FE0B;CM # VARIATION SELECTOR-12
+FE0C;CM # VARIATION SELECTOR-13
+FE0D;CM # VARIATION SELECTOR-14
+FE0E;CM # VARIATION SELECTOR-15
+FE0F;CM # VARIATION SELECTOR-16
+FE10;IS # PRESENTATION FORM FOR VERTICAL COMMA
+FE11;CL # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12;CL # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13;IS # PRESENTATION FORM FOR VERTICAL COLON
+FE14;IS # PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15;EX # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16;EX # PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17;OP # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18;CL # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19;IN # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20;CM # COMBINING LIGATURE LEFT HALF
+FE21;CM # COMBINING LIGATURE RIGHT HALF
+FE22;CM # COMBINING DOUBLE TILDE LEFT HALF
+FE23;CM # COMBINING DOUBLE TILDE RIGHT HALF
+FE30;ID # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31;ID # PRESENTATION FORM FOR VERTICAL EM DASH
+FE32;ID # PRESENTATION FORM FOR VERTICAL EN DASH
+FE33;ID # PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34;ID # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35;OP # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36;CL # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37;OP # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38;CL # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39;OP # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A;CL # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B;OP # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C;CL # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D;OP # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E;CL # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F;OP # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40;CL # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41;OP # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42;CL # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43;OP # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44;CL # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45;ID # SESAME DOT
+FE46;ID # WHITE SESAME DOT
+FE47;OP # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48;CL # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49;ID # DASHED OVERLINE
+FE4A;ID # CENTRELINE OVERLINE
+FE4B;ID # WAVY OVERLINE
+FE4C;ID # DOUBLE WAVY OVERLINE
+FE4D;ID # DASHED LOW LINE
+FE4E;ID # CENTRELINE LOW LINE
+FE4F;ID # WAVY LOW LINE
+FE50;CL # SMALL COMMA
+FE51;ID # SMALL IDEOGRAPHIC COMMA
+FE52;CL # SMALL FULL STOP
+FE54;NS # SMALL SEMICOLON
+FE55;NS # SMALL COLON
+FE56;EX # SMALL QUESTION MARK
+FE57;EX # SMALL EXCLAMATION MARK
+FE58;ID # SMALL EM DASH
+FE59;OP # SMALL LEFT PARENTHESIS
+FE5A;CL # SMALL RIGHT PARENTHESIS
+FE5B;OP # SMALL LEFT CURLY BRACKET
+FE5C;CL # SMALL RIGHT CURLY BRACKET
+FE5D;OP # SMALL LEFT TORTOISE SHELL BRACKET
+FE5E;CL # SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F;ID # SMALL NUMBER SIGN
+FE60;ID # SMALL AMPERSAND
+FE61;ID # SMALL ASTERISK
+FE62;ID # SMALL PLUS SIGN
+FE63;ID # SMALL HYPHEN-MINUS
+FE64;ID # SMALL LESS-THAN SIGN
+FE65;ID # SMALL GREATER-THAN SIGN
+FE66;ID # SMALL EQUALS SIGN
+FE68;ID # SMALL REVERSE SOLIDUS
+FE69;PR # SMALL DOLLAR SIGN
+FE6A;PO # SMALL PERCENT SIGN
+FE6B;ID # SMALL COMMERCIAL AT
+FE70;AL # ARABIC FATHATAN ISOLATED FORM
+FE71;AL # ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72;AL # ARABIC DAMMATAN ISOLATED FORM
+FE73;AL # ARABIC TAIL FRAGMENT
+FE74;AL # ARABIC KASRATAN ISOLATED FORM
+FE76;AL # ARABIC FATHA ISOLATED FORM
+FE77;AL # ARABIC FATHA MEDIAL FORM
+FE78;AL # ARABIC DAMMA ISOLATED FORM
+FE79;AL # ARABIC DAMMA MEDIAL FORM
+FE7A;AL # ARABIC KASRA ISOLATED FORM
+FE7B;AL # ARABIC KASRA MEDIAL FORM
+FE7C;AL # ARABIC SHADDA ISOLATED FORM
+FE7D;AL # ARABIC SHADDA MEDIAL FORM
+FE7E;AL # ARABIC SUKUN ISOLATED FORM
+FE7F;AL # ARABIC SUKUN MEDIAL FORM
+FE80;AL # ARABIC LETTER HAMZA ISOLATED FORM
+FE81;AL # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82;AL # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83;AL # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84;AL # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85;AL # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86;AL # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87;AL # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88;AL # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89;AL # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A;AL # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B;AL # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C;AL # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D;AL # ARABIC LETTER ALEF ISOLATED FORM
+FE8E;AL # ARABIC LETTER ALEF FINAL FORM
+FE8F;AL # ARABIC LETTER BEH ISOLATED FORM
+FE90;AL # ARABIC LETTER BEH FINAL FORM
+FE91;AL # ARABIC LETTER BEH INITIAL FORM
+FE92;AL # ARABIC LETTER BEH MEDIAL FORM
+FE93;AL # ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94;AL # ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95;AL # ARABIC LETTER TEH ISOLATED FORM
+FE96;AL # ARABIC LETTER TEH FINAL FORM
+FE97;AL # ARABIC LETTER TEH INITIAL FORM
+FE98;AL # ARABIC LETTER TEH MEDIAL FORM
+FE99;AL # ARABIC LETTER THEH ISOLATED FORM
+FE9A;AL # ARABIC LETTER THEH FINAL FORM
+FE9B;AL # ARABIC LETTER THEH INITIAL FORM
+FE9C;AL # ARABIC LETTER THEH MEDIAL FORM
+FE9D;AL # ARABIC LETTER JEEM ISOLATED FORM
+FE9E;AL # ARABIC LETTER JEEM FINAL FORM
+FE9F;AL # ARABIC LETTER JEEM INITIAL FORM
+FEA0;AL # ARABIC LETTER JEEM MEDIAL FORM
+FEA1;AL # ARABIC LETTER HAH ISOLATED FORM
+FEA2;AL # ARABIC LETTER HAH FINAL FORM
+FEA3;AL # ARABIC LETTER HAH INITIAL FORM
+FEA4;AL # ARABIC LETTER HAH MEDIAL FORM
+FEA5;AL # ARABIC LETTER KHAH ISOLATED FORM
+FEA6;AL # ARABIC LETTER KHAH FINAL FORM
+FEA7;AL # ARABIC LETTER KHAH INITIAL FORM
+FEA8;AL # ARABIC LETTER KHAH MEDIAL FORM
+FEA9;AL # ARABIC LETTER DAL ISOLATED FORM
+FEAA;AL # ARABIC LETTER DAL FINAL FORM
+FEAB;AL # ARABIC LETTER THAL ISOLATED FORM
+FEAC;AL # ARABIC LETTER THAL FINAL FORM
+FEAD;AL # ARABIC LETTER REH ISOLATED FORM
+FEAE;AL # ARABIC LETTER REH FINAL FORM
+FEAF;AL # ARABIC LETTER ZAIN ISOLATED FORM
+FEB0;AL # ARABIC LETTER ZAIN FINAL FORM
+FEB1;AL # ARABIC LETTER SEEN ISOLATED FORM
+FEB2;AL # ARABIC LETTER SEEN FINAL FORM
+FEB3;AL # ARABIC LETTER SEEN INITIAL FORM
+FEB4;AL # ARABIC LETTER SEEN MEDIAL FORM
+FEB5;AL # ARABIC LETTER SHEEN ISOLATED FORM
+FEB6;AL # ARABIC LETTER SHEEN FINAL FORM
+FEB7;AL # ARABIC LETTER SHEEN INITIAL FORM
+FEB8;AL # ARABIC LETTER SHEEN MEDIAL FORM
+FEB9;AL # ARABIC LETTER SAD ISOLATED FORM
+FEBA;AL # ARABIC LETTER SAD FINAL FORM
+FEBB;AL # ARABIC LETTER SAD INITIAL FORM
+FEBC;AL # ARABIC LETTER SAD MEDIAL FORM
+FEBD;AL # ARABIC LETTER DAD ISOLATED FORM
+FEBE;AL # ARABIC LETTER DAD FINAL FORM
+FEBF;AL # ARABIC LETTER DAD INITIAL FORM
+FEC0;AL # ARABIC LETTER DAD MEDIAL FORM
+FEC1;AL # ARABIC LETTER TAH ISOLATED FORM
+FEC2;AL # ARABIC LETTER TAH FINAL FORM
+FEC3;AL # ARABIC LETTER TAH INITIAL FORM
+FEC4;AL # ARABIC LETTER TAH MEDIAL FORM
+FEC5;AL # ARABIC LETTER ZAH ISOLATED FORM
+FEC6;AL # ARABIC LETTER ZAH FINAL FORM
+FEC7;AL # ARABIC LETTER ZAH INITIAL FORM
+FEC8;AL # ARABIC LETTER ZAH MEDIAL FORM
+FEC9;AL # ARABIC LETTER AIN ISOLATED FORM
+FECA;AL # ARABIC LETTER AIN FINAL FORM
+FECB;AL # ARABIC LETTER AIN INITIAL FORM
+FECC;AL # ARABIC LETTER AIN MEDIAL FORM
+FECD;AL # ARABIC LETTER GHAIN ISOLATED FORM
+FECE;AL # ARABIC LETTER GHAIN FINAL FORM
+FECF;AL # ARABIC LETTER GHAIN INITIAL FORM
+FED0;AL # ARABIC LETTER GHAIN MEDIAL FORM
+FED1;AL # ARABIC LETTER FEH ISOLATED FORM
+FED2;AL # ARABIC LETTER FEH FINAL FORM
+FED3;AL # ARABIC LETTER FEH INITIAL FORM
+FED4;AL # ARABIC LETTER FEH MEDIAL FORM
+FED5;AL # ARABIC LETTER QAF ISOLATED FORM
+FED6;AL # ARABIC LETTER QAF FINAL FORM
+FED7;AL # ARABIC LETTER QAF INITIAL FORM
+FED8;AL # ARABIC LETTER QAF MEDIAL FORM
+FED9;AL # ARABIC LETTER KAF ISOLATED FORM
+FEDA;AL # ARABIC LETTER KAF FINAL FORM
+FEDB;AL # ARABIC LETTER KAF INITIAL FORM
+FEDC;AL # ARABIC LETTER KAF MEDIAL FORM
+FEDD;AL # ARABIC LETTER LAM ISOLATED FORM
+FEDE;AL # ARABIC LETTER LAM FINAL FORM
+FEDF;AL # ARABIC LETTER LAM INITIAL FORM
+FEE0;AL # ARABIC LETTER LAM MEDIAL FORM
+FEE1;AL # ARABIC LETTER MEEM ISOLATED FORM
+FEE2;AL # ARABIC LETTER MEEM FINAL FORM
+FEE3;AL # ARABIC LETTER MEEM INITIAL FORM
+FEE4;AL # ARABIC LETTER MEEM MEDIAL FORM
+FEE5;AL # ARABIC LETTER NOON ISOLATED FORM
+FEE6;AL # ARABIC LETTER NOON FINAL FORM
+FEE7;AL # ARABIC LETTER NOON INITIAL FORM
+FEE8;AL # ARABIC LETTER NOON MEDIAL FORM
+FEE9;AL # ARABIC LETTER HEH ISOLATED FORM
+FEEA;AL # ARABIC LETTER HEH FINAL FORM
+FEEB;AL # ARABIC LETTER HEH INITIAL FORM
+FEEC;AL # ARABIC LETTER HEH MEDIAL FORM
+FEED;AL # ARABIC LETTER WAW ISOLATED FORM
+FEEE;AL # ARABIC LETTER WAW FINAL FORM
+FEEF;AL # ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0;AL # ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1;AL # ARABIC LETTER YEH ISOLATED FORM
+FEF2;AL # ARABIC LETTER YEH FINAL FORM
+FEF3;AL # ARABIC LETTER YEH INITIAL FORM
+FEF4;AL # ARABIC LETTER YEH MEDIAL FORM
+FEF5;AL # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6;AL # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7;AL # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8;AL # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9;AL # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA;AL # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB;AL # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC;AL # ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF;WJ # ZERO WIDTH NO-BREAK SPACE
+FF01;EX # FULLWIDTH EXCLAMATION MARK
+FF02;ID # FULLWIDTH QUOTATION MARK
+FF03;ID # FULLWIDTH NUMBER SIGN
+FF04;PR # FULLWIDTH DOLLAR SIGN
+FF05;PO # FULLWIDTH PERCENT SIGN
+FF06;ID # FULLWIDTH AMPERSAND
+FF07;ID # FULLWIDTH APOSTROPHE
+FF08;OP # FULLWIDTH LEFT PARENTHESIS
+FF09;CL # FULLWIDTH RIGHT PARENTHESIS
+FF0A;ID # FULLWIDTH ASTERISK
+FF0B;ID # FULLWIDTH PLUS SIGN
+FF0C;CL # FULLWIDTH COMMA
+FF0D;ID # FULLWIDTH HYPHEN-MINUS
+FF0E;CL # FULLWIDTH FULL STOP
+FF0F;ID # FULLWIDTH SOLIDUS
+FF10;ID # FULLWIDTH DIGIT ZERO
+FF11;ID # FULLWIDTH DIGIT ONE
+FF12;ID # FULLWIDTH DIGIT TWO
+FF13;ID # FULLWIDTH DIGIT THREE
+FF14;ID # FULLWIDTH DIGIT FOUR
+FF15;ID # FULLWIDTH DIGIT FIVE
+FF16;ID # FULLWIDTH DIGIT SIX
+FF17;ID # FULLWIDTH DIGIT SEVEN
+FF18;ID # FULLWIDTH DIGIT EIGHT
+FF19;ID # FULLWIDTH DIGIT NINE
+FF1A;NS # FULLWIDTH COLON
+FF1B;NS # FULLWIDTH SEMICOLON
+FF1C;ID # FULLWIDTH LESS-THAN SIGN
+FF1D;ID # FULLWIDTH EQUALS SIGN
+FF1E;ID # FULLWIDTH GREATER-THAN SIGN
+FF1F;EX # FULLWIDTH QUESTION MARK
+FF20;ID # FULLWIDTH COMMERCIAL AT
+FF21;ID # FULLWIDTH LATIN CAPITAL LETTER A
+FF22;ID # FULLWIDTH LATIN CAPITAL LETTER B
+FF23;ID # FULLWIDTH LATIN CAPITAL LETTER C
+FF24;ID # FULLWIDTH LATIN CAPITAL LETTER D
+FF25;ID # FULLWIDTH LATIN CAPITAL LETTER E
+FF26;ID # FULLWIDTH LATIN CAPITAL LETTER F
+FF27;ID # FULLWIDTH LATIN CAPITAL LETTER G
+FF28;ID # FULLWIDTH LATIN CAPITAL LETTER H
+FF29;ID # FULLWIDTH LATIN CAPITAL LETTER I
+FF2A;ID # FULLWIDTH LATIN CAPITAL LETTER J
+FF2B;ID # FULLWIDTH LATIN CAPITAL LETTER K
+FF2C;ID # FULLWIDTH LATIN CAPITAL LETTER L
+FF2D;ID # FULLWIDTH LATIN CAPITAL LETTER M
+FF2E;ID # FULLWIDTH LATIN CAPITAL LETTER N
+FF2F;ID # FULLWIDTH LATIN CAPITAL LETTER O
+FF30;ID # FULLWIDTH LATIN CAPITAL LETTER P
+FF31;ID # FULLWIDTH LATIN CAPITAL LETTER Q
+FF32;ID # FULLWIDTH LATIN CAPITAL LETTER R
+FF33;ID # FULLWIDTH LATIN CAPITAL LETTER S
+FF34;ID # FULLWIDTH LATIN CAPITAL LETTER T
+FF35;ID # FULLWIDTH LATIN CAPITAL LETTER U
+FF36;ID # FULLWIDTH LATIN CAPITAL LETTER V
+FF37;ID # FULLWIDTH LATIN CAPITAL LETTER W
+FF38;ID # FULLWIDTH LATIN CAPITAL LETTER X
+FF39;ID # FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A;ID # FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B;OP # FULLWIDTH LEFT SQUARE BRACKET
+FF3C;ID # FULLWIDTH REVERSE SOLIDUS
+FF3D;CL # FULLWIDTH RIGHT SQUARE BRACKET
+FF3E;ID # FULLWIDTH CIRCUMFLEX ACCENT
+FF3F;ID # FULLWIDTH LOW LINE
+FF40;ID # FULLWIDTH GRAVE ACCENT
+FF41;ID # FULLWIDTH LATIN SMALL LETTER A
+FF42;ID # FULLWIDTH LATIN SMALL LETTER B
+FF43;ID # FULLWIDTH LATIN SMALL LETTER C
+FF44;ID # FULLWIDTH LATIN SMALL LETTER D
+FF45;ID # FULLWIDTH LATIN SMALL LETTER E
+FF46;ID # FULLWIDTH LATIN SMALL LETTER F
+FF47;ID # FULLWIDTH LATIN SMALL LETTER G
+FF48;ID # FULLWIDTH LATIN SMALL LETTER H
+FF49;ID # FULLWIDTH LATIN SMALL LETTER I
+FF4A;ID # FULLWIDTH LATIN SMALL LETTER J
+FF4B;ID # FULLWIDTH LATIN SMALL LETTER K
+FF4C;ID # FULLWIDTH LATIN SMALL LETTER L
+FF4D;ID # FULLWIDTH LATIN SMALL LETTER M
+FF4E;ID # FULLWIDTH LATIN SMALL LETTER N
+FF4F;ID # FULLWIDTH LATIN SMALL LETTER O
+FF50;ID # FULLWIDTH LATIN SMALL LETTER P
+FF51;ID # FULLWIDTH LATIN SMALL LETTER Q
+FF52;ID # FULLWIDTH LATIN SMALL LETTER R
+FF53;ID # FULLWIDTH LATIN SMALL LETTER S
+FF54;ID # FULLWIDTH LATIN SMALL LETTER T
+FF55;ID # FULLWIDTH LATIN SMALL LETTER U
+FF56;ID # FULLWIDTH LATIN SMALL LETTER V
+FF57;ID # FULLWIDTH LATIN SMALL LETTER W
+FF58;ID # FULLWIDTH LATIN SMALL LETTER X
+FF59;ID # FULLWIDTH LATIN SMALL LETTER Y
+FF5A;ID # FULLWIDTH LATIN SMALL LETTER Z
+FF5B;OP # FULLWIDTH LEFT CURLY BRACKET
+FF5C;ID # FULLWIDTH VERTICAL LINE
+FF5D;CL # FULLWIDTH RIGHT CURLY BRACKET
+FF5E;ID # FULLWIDTH TILDE
+FF5F;OP # FULLWIDTH LEFT WHITE PARENTHESIS
+FF60;CL # FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61;CL # HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62;OP # HALFWIDTH LEFT CORNER BRACKET
+FF63;CL # HALFWIDTH RIGHT CORNER BRACKET
+FF64;CL # HALFWIDTH IDEOGRAPHIC COMMA
+FF65;NS # HALFWIDTH KATAKANA MIDDLE DOT
+FF66;AL # HALFWIDTH KATAKANA LETTER WO
+FF67;NS # HALFWIDTH KATAKANA LETTER SMALL A
+FF68;NS # HALFWIDTH KATAKANA LETTER SMALL I
+FF69;NS # HALFWIDTH KATAKANA LETTER SMALL U
+FF6A;NS # HALFWIDTH KATAKANA LETTER SMALL E
+FF6B;NS # HALFWIDTH KATAKANA LETTER SMALL O
+FF6C;NS # HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D;NS # HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E;NS # HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F;NS # HALFWIDTH KATAKANA LETTER SMALL TU
+FF70;NS # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71;AL # HALFWIDTH KATAKANA LETTER A
+FF72;AL # HALFWIDTH KATAKANA LETTER I
+FF73;AL # HALFWIDTH KATAKANA LETTER U
+FF74;AL # HALFWIDTH KATAKANA LETTER E
+FF75;AL # HALFWIDTH KATAKANA LETTER O
+FF76;AL # HALFWIDTH KATAKANA LETTER KA
+FF77;AL # HALFWIDTH KATAKANA LETTER KI
+FF78;AL # HALFWIDTH KATAKANA LETTER KU
+FF79;AL # HALFWIDTH KATAKANA LETTER KE
+FF7A;AL # HALFWIDTH KATAKANA LETTER KO
+FF7B;AL # HALFWIDTH KATAKANA LETTER SA
+FF7C;AL # HALFWIDTH KATAKANA LETTER SI
+FF7D;AL # HALFWIDTH KATAKANA LETTER SU
+FF7E;AL # HALFWIDTH KATAKANA LETTER SE
+FF7F;AL # HALFWIDTH KATAKANA LETTER SO
+FF80;AL # HALFWIDTH KATAKANA LETTER TA
+FF81;AL # HALFWIDTH KATAKANA LETTER TI
+FF82;AL # HALFWIDTH KATAKANA LETTER TU
+FF83;AL # HALFWIDTH KATAKANA LETTER TE
+FF84;AL # HALFWIDTH KATAKANA LETTER TO
+FF85;AL # HALFWIDTH KATAKANA LETTER NA
+FF86;AL # HALFWIDTH KATAKANA LETTER NI
+FF87;AL # HALFWIDTH KATAKANA LETTER NU
+FF88;AL # HALFWIDTH KATAKANA LETTER NE
+FF89;AL # HALFWIDTH KATAKANA LETTER NO
+FF8A;AL # HALFWIDTH KATAKANA LETTER HA
+FF8B;AL # HALFWIDTH KATAKANA LETTER HI
+FF8C;AL # HALFWIDTH KATAKANA LETTER HU
+FF8D;AL # HALFWIDTH KATAKANA LETTER HE
+FF8E;AL # HALFWIDTH KATAKANA LETTER HO
+FF8F;AL # HALFWIDTH KATAKANA LETTER MA
+FF90;AL # HALFWIDTH KATAKANA LETTER MI
+FF91;AL # HALFWIDTH KATAKANA LETTER MU
+FF92;AL # HALFWIDTH KATAKANA LETTER ME
+FF93;AL # HALFWIDTH KATAKANA LETTER MO
+FF94;AL # HALFWIDTH KATAKANA LETTER YA
+FF95;AL # HALFWIDTH KATAKANA LETTER YU
+FF96;AL # HALFWIDTH KATAKANA LETTER YO
+FF97;AL # HALFWIDTH KATAKANA LETTER RA
+FF98;AL # HALFWIDTH KATAKANA LETTER RI
+FF99;AL # HALFWIDTH KATAKANA LETTER RU
+FF9A;AL # HALFWIDTH KATAKANA LETTER RE
+FF9B;AL # HALFWIDTH KATAKANA LETTER RO
+FF9C;AL # HALFWIDTH KATAKANA LETTER WA
+FF9D;AL # HALFWIDTH KATAKANA LETTER N
+FF9E;NS # HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F;NS # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0;AL # HALFWIDTH HANGUL FILLER
+FFA1;AL # HALFWIDTH HANGUL LETTER KIYEOK
+FFA2;AL # HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3;AL # HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4;AL # HALFWIDTH HANGUL LETTER NIEUN
+FFA5;AL # HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6;AL # HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7;AL # HALFWIDTH HANGUL LETTER TIKEUT
+FFA8;AL # HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9;AL # HALFWIDTH HANGUL LETTER RIEUL
+FFAA;AL # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB;AL # HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC;AL # HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD;AL # HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE;AL # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF;AL # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0;AL # HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1;AL # HALFWIDTH HANGUL LETTER MIEUM
+FFB2;AL # HALFWIDTH HANGUL LETTER PIEUP
+FFB3;AL # HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4;AL # HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5;AL # HALFWIDTH HANGUL LETTER SIOS
+FFB6;AL # HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7;AL # HALFWIDTH HANGUL LETTER IEUNG
+FFB8;AL # HALFWIDTH HANGUL LETTER CIEUC
+FFB9;AL # HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA;AL # HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB;AL # HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC;AL # HALFWIDTH HANGUL LETTER THIEUTH
+FFBD;AL # HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE;AL # HALFWIDTH HANGUL LETTER HIEUH
+FFC2;AL # HALFWIDTH HANGUL LETTER A
+FFC3;AL # HALFWIDTH HANGUL LETTER AE
+FFC4;AL # HALFWIDTH HANGUL LETTER YA
+FFC5;AL # HALFWIDTH HANGUL LETTER YAE
+FFC6;AL # HALFWIDTH HANGUL LETTER EO
+FFC7;AL # HALFWIDTH HANGUL LETTER E
+FFCA;AL # HALFWIDTH HANGUL LETTER YEO
+FFCB;AL # HALFWIDTH HANGUL LETTER YE
+FFCC;AL # HALFWIDTH HANGUL LETTER O
+FFCD;AL # HALFWIDTH HANGUL LETTER WA
+FFCE;AL # HALFWIDTH HANGUL LETTER WAE
+FFCF;AL # HALFWIDTH HANGUL LETTER OE
+FFD2;AL # HALFWIDTH HANGUL LETTER YO
+FFD3;AL # HALFWIDTH HANGUL LETTER U
+FFD4;AL # HALFWIDTH HANGUL LETTER WEO
+FFD5;AL # HALFWIDTH HANGUL LETTER WE
+FFD6;AL # HALFWIDTH HANGUL LETTER WI
+FFD7;AL # HALFWIDTH HANGUL LETTER YU
+FFDA;AL # HALFWIDTH HANGUL LETTER EU
+FFDB;AL # HALFWIDTH HANGUL LETTER YI
+FFDC;AL # HALFWIDTH HANGUL LETTER I
+FFE0;PO # FULLWIDTH CENT SIGN
+FFE1;PR # FULLWIDTH POUND SIGN
+FFE2;ID # FULLWIDTH NOT SIGN
+FFE3;ID # FULLWIDTH MACRON
+FFE4;ID # FULLWIDTH BROKEN BAR
+FFE5;PR # FULLWIDTH YEN SIGN
+FFE6;PR # FULLWIDTH WON SIGN
+FFE8;AL # HALFWIDTH FORMS LIGHT VERTICAL
+FFE9;AL # HALFWIDTH LEFTWARDS ARROW
+FFEA;AL # HALFWIDTH UPWARDS ARROW
+FFEB;AL # HALFWIDTH RIGHTWARDS ARROW
+FFEC;AL # HALFWIDTH DOWNWARDS ARROW
+FFED;AL # HALFWIDTH BLACK SQUARE
+FFEE;AL # HALFWIDTH WHITE CIRCLE
+FFF9;CM # INTERLINEAR ANNOTATION ANCHOR
+FFFA;CM # INTERLINEAR ANNOTATION SEPARATOR
+FFFB;CM # INTERLINEAR ANNOTATION TERMINATOR
+FFFC;CB # OBJECT REPLACEMENT CHARACTER
+FFFD;AI # REPLACEMENT CHARACTER
+10000;AL # LINEAR B SYLLABLE B008 A
+10001;AL # LINEAR B SYLLABLE B038 E
+10002;AL # LINEAR B SYLLABLE B028 I
+10003;AL # LINEAR B SYLLABLE B061 O
+10004;AL # LINEAR B SYLLABLE B010 U
+10005;AL # LINEAR B SYLLABLE B001 DA
+10006;AL # LINEAR B SYLLABLE B045 DE
+10007;AL # LINEAR B SYLLABLE B007 DI
+10008;AL # LINEAR B SYLLABLE B014 DO
+10009;AL # LINEAR B SYLLABLE B051 DU
+1000A;AL # LINEAR B SYLLABLE B057 JA
+1000B;AL # LINEAR B SYLLABLE B046 JE
+1000D;AL # LINEAR B SYLLABLE B036 JO
+1000E;AL # LINEAR B SYLLABLE B065 JU
+1000F;AL # LINEAR B SYLLABLE B077 KA
+10010;AL # LINEAR B SYLLABLE B044 KE
+10011;AL # LINEAR B SYLLABLE B067 KI
+10012;AL # LINEAR B SYLLABLE B070 KO
+10013;AL # LINEAR B SYLLABLE B081 KU
+10014;AL # LINEAR B SYLLABLE B080 MA
+10015;AL # LINEAR B SYLLABLE B013 ME
+10016;AL # LINEAR B SYLLABLE B073 MI
+10017;AL # LINEAR B SYLLABLE B015 MO
+10018;AL # LINEAR B SYLLABLE B023 MU
+10019;AL # LINEAR B SYLLABLE B006 NA
+1001A;AL # LINEAR B SYLLABLE B024 NE
+1001B;AL # LINEAR B SYLLABLE B030 NI
+1001C;AL # LINEAR B SYLLABLE B052 NO
+1001D;AL # LINEAR B SYLLABLE B055 NU
+1001E;AL # LINEAR B SYLLABLE B003 PA
+1001F;AL # LINEAR B SYLLABLE B072 PE
+10020;AL # LINEAR B SYLLABLE B039 PI
+10021;AL # LINEAR B SYLLABLE B011 PO
+10022;AL # LINEAR B SYLLABLE B050 PU
+10023;AL # LINEAR B SYLLABLE B016 QA
+10024;AL # LINEAR B SYLLABLE B078 QE
+10025;AL # LINEAR B SYLLABLE B021 QI
+10026;AL # LINEAR B SYLLABLE B032 QO
+10028;AL # LINEAR B SYLLABLE B060 RA
+10029;AL # LINEAR B SYLLABLE B027 RE
+1002A;AL # LINEAR B SYLLABLE B053 RI
+1002B;AL # LINEAR B SYLLABLE B002 RO
+1002C;AL # LINEAR B SYLLABLE B026 RU
+1002D;AL # LINEAR B SYLLABLE B031 SA
+1002E;AL # LINEAR B SYLLABLE B009 SE
+1002F;AL # LINEAR B SYLLABLE B041 SI
+10030;AL # LINEAR B SYLLABLE B012 SO
+10031;AL # LINEAR B SYLLABLE B058 SU
+10032;AL # LINEAR B SYLLABLE B059 TA
+10033;AL # LINEAR B SYLLABLE B004 TE
+10034;AL # LINEAR B SYLLABLE B037 TI
+10035;AL # LINEAR B SYLLABLE B005 TO
+10036;AL # LINEAR B SYLLABLE B069 TU
+10037;AL # LINEAR B SYLLABLE B054 WA
+10038;AL # LINEAR B SYLLABLE B075 WE
+10039;AL # LINEAR B SYLLABLE B040 WI
+1003A;AL # LINEAR B SYLLABLE B042 WO
+1003C;AL # LINEAR B SYLLABLE B017 ZA
+1003D;AL # LINEAR B SYLLABLE B074 ZE
+1003F;AL # LINEAR B SYLLABLE B020 ZO
+10040;AL # LINEAR B SYLLABLE B025 A2
+10041;AL # LINEAR B SYLLABLE B043 A3
+10042;AL # LINEAR B SYLLABLE B085 AU
+10043;AL # LINEAR B SYLLABLE B071 DWE
+10044;AL # LINEAR B SYLLABLE B090 DWO
+10045;AL # LINEAR B SYLLABLE B048 NWA
+10046;AL # LINEAR B SYLLABLE B029 PU2
+10047;AL # LINEAR B SYLLABLE B062 PTE
+10048;AL # LINEAR B SYLLABLE B076 RA2
+10049;AL # LINEAR B SYLLABLE B033 RA3
+1004A;AL # LINEAR B SYLLABLE B068 RO2
+1004B;AL # LINEAR B SYLLABLE B066 TA2
+1004C;AL # LINEAR B SYLLABLE B087 TWE
+1004D;AL # LINEAR B SYLLABLE B091 TWO
+10050;AL # LINEAR B SYMBOL B018
+10051;AL # LINEAR B SYMBOL B019
+10052;AL # LINEAR B SYMBOL B022
+10053;AL # LINEAR B SYMBOL B034
+10054;AL # LINEAR B SYMBOL B047
+10055;AL # LINEAR B SYMBOL B049
+10056;AL # LINEAR B SYMBOL B056
+10057;AL # LINEAR B SYMBOL B063
+10058;AL # LINEAR B SYMBOL B064
+10059;AL # LINEAR B SYMBOL B079
+1005A;AL # LINEAR B SYMBOL B082
+1005B;AL # LINEAR B SYMBOL B083
+1005C;AL # LINEAR B SYMBOL B086
+1005D;AL # LINEAR B SYMBOL B089
+10080;AL # LINEAR B IDEOGRAM B100 MAN
+10081;AL # LINEAR B IDEOGRAM B102 WOMAN
+10082;AL # LINEAR B IDEOGRAM B104 DEER
+10083;AL # LINEAR B IDEOGRAM B105 EQUID
+10084;AL # LINEAR B IDEOGRAM B105F MARE
+10085;AL # LINEAR B IDEOGRAM B105M STALLION
+10086;AL # LINEAR B IDEOGRAM B106F EWE
+10087;AL # LINEAR B IDEOGRAM B106M RAM
+10088;AL # LINEAR B IDEOGRAM B107F SHE-GOAT
+10089;AL # LINEAR B IDEOGRAM B107M HE-GOAT
+1008A;AL # LINEAR B IDEOGRAM B108F SOW
+1008B;AL # LINEAR B IDEOGRAM B108M BOAR
+1008C;AL # LINEAR B IDEOGRAM B109F COW
+1008D;AL # LINEAR B IDEOGRAM B109M BULL
+1008E;AL # LINEAR B IDEOGRAM B120 WHEAT
+1008F;AL # LINEAR B IDEOGRAM B121 BARLEY
+10090;AL # LINEAR B IDEOGRAM B122 OLIVE
+10091;AL # LINEAR B IDEOGRAM B123 SPICE
+10092;AL # LINEAR B IDEOGRAM B125 CYPERUS
+10093;AL # LINEAR B MONOGRAM B127 KAPO
+10094;AL # LINEAR B MONOGRAM B128 KANAKO
+10095;AL # LINEAR B IDEOGRAM B130 OIL
+10096;AL # LINEAR B IDEOGRAM B131 WINE
+10097;AL # LINEAR B IDEOGRAM B132
+10098;AL # LINEAR B MONOGRAM B133 AREPA
+10099;AL # LINEAR B MONOGRAM B135 MERI
+1009A;AL # LINEAR B IDEOGRAM B140 BRONZE
+1009B;AL # LINEAR B IDEOGRAM B141 GOLD
+1009C;AL # LINEAR B IDEOGRAM B142
+1009D;AL # LINEAR B IDEOGRAM B145 WOOL
+1009E;AL # LINEAR B IDEOGRAM B146
+1009F;AL # LINEAR B IDEOGRAM B150
+100A0;AL # LINEAR B IDEOGRAM B151 HORN
+100A1;AL # LINEAR B IDEOGRAM B152
+100A2;AL # LINEAR B IDEOGRAM B153
+100A3;AL # LINEAR B IDEOGRAM B154
+100A4;AL # LINEAR B MONOGRAM B156 TURO2
+100A5;AL # LINEAR B IDEOGRAM B157
+100A6;AL # LINEAR B IDEOGRAM B158
+100A7;AL # LINEAR B IDEOGRAM B159 CLOTH
+100A8;AL # LINEAR B IDEOGRAM B160
+100A9;AL # LINEAR B IDEOGRAM B161
+100AA;AL # LINEAR B IDEOGRAM B162 GARMENT
+100AB;AL # LINEAR B IDEOGRAM B163 ARMOUR
+100AC;AL # LINEAR B IDEOGRAM B164
+100AD;AL # LINEAR B IDEOGRAM B165
+100AE;AL # LINEAR B IDEOGRAM B166
+100AF;AL # LINEAR B IDEOGRAM B167
+100B0;AL # LINEAR B IDEOGRAM B168
+100B1;AL # LINEAR B IDEOGRAM B169
+100B2;AL # LINEAR B IDEOGRAM B170
+100B3;AL # LINEAR B IDEOGRAM B171
+100B4;AL # LINEAR B IDEOGRAM B172
+100B5;AL # LINEAR B IDEOGRAM B173 MONTH
+100B6;AL # LINEAR B IDEOGRAM B174
+100B7;AL # LINEAR B IDEOGRAM B176 TREE
+100B8;AL # LINEAR B IDEOGRAM B177
+100B9;AL # LINEAR B IDEOGRAM B178
+100BA;AL # LINEAR B IDEOGRAM B179
+100BB;AL # LINEAR B IDEOGRAM B180
+100BC;AL # LINEAR B IDEOGRAM B181
+100BD;AL # LINEAR B IDEOGRAM B182
+100BE;AL # LINEAR B IDEOGRAM B183
+100BF;AL # LINEAR B IDEOGRAM B184
+100C0;AL # LINEAR B IDEOGRAM B185
+100C1;AL # LINEAR B IDEOGRAM B189
+100C2;AL # LINEAR B IDEOGRAM B190
+100C3;AL # LINEAR B IDEOGRAM B191 HELMET
+100C4;AL # LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5;AL # LINEAR B IDEOGRAM B225 BATHTUB
+100C6;AL # LINEAR B IDEOGRAM B230 SPEAR
+100C7;AL # LINEAR B IDEOGRAM B231 ARROW
+100C8;AL # LINEAR B IDEOGRAM B232
+100C9;AL # LINEAR B IDEOGRAM B233 SWORD
+100CA;AL # LINEAR B IDEOGRAM B234
+100CB;AL # LINEAR B IDEOGRAM B236
+100CC;AL # LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD;AL # LINEAR B IDEOGRAM B241 CHARIOT
+100CE;AL # LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF;AL # LINEAR B IDEOGRAM B243 WHEEL
+100D0;AL # LINEAR B IDEOGRAM B245
+100D1;AL # LINEAR B IDEOGRAM B246
+100D2;AL # LINEAR B MONOGRAM B247 DIPTE
+100D3;AL # LINEAR B IDEOGRAM B248
+100D4;AL # LINEAR B IDEOGRAM B249
+100D5;AL # LINEAR B IDEOGRAM B251
+100D6;AL # LINEAR B IDEOGRAM B252
+100D7;AL # LINEAR B IDEOGRAM B253
+100D8;AL # LINEAR B IDEOGRAM B254 DART
+100D9;AL # LINEAR B IDEOGRAM B255
+100DA;AL # LINEAR B IDEOGRAM B256
+100DB;AL # LINEAR B IDEOGRAM B257
+100DC;AL # LINEAR B IDEOGRAM B258
+100DD;AL # LINEAR B IDEOGRAM B259
+100DE;AL # LINEAR B IDEOGRAM VESSEL B155
+100DF;AL # LINEAR B IDEOGRAM VESSEL B200
+100E0;AL # LINEAR B IDEOGRAM VESSEL B201
+100E1;AL # LINEAR B IDEOGRAM VESSEL B202
+100E2;AL # LINEAR B IDEOGRAM VESSEL B203
+100E3;AL # LINEAR B IDEOGRAM VESSEL B204
+100E4;AL # LINEAR B IDEOGRAM VESSEL B205
+100E5;AL # LINEAR B IDEOGRAM VESSEL B206
+100E6;AL # LINEAR B IDEOGRAM VESSEL B207
+100E7;AL # LINEAR B IDEOGRAM VESSEL B208
+100E8;AL # LINEAR B IDEOGRAM VESSEL B209
+100E9;AL # LINEAR B IDEOGRAM VESSEL B210
+100EA;AL # LINEAR B IDEOGRAM VESSEL B211
+100EB;AL # LINEAR B IDEOGRAM VESSEL B212
+100EC;AL # LINEAR B IDEOGRAM VESSEL B213
+100ED;AL # LINEAR B IDEOGRAM VESSEL B214
+100EE;AL # LINEAR B IDEOGRAM VESSEL B215
+100EF;AL # LINEAR B IDEOGRAM VESSEL B216
+100F0;AL # LINEAR B IDEOGRAM VESSEL B217
+100F1;AL # LINEAR B IDEOGRAM VESSEL B218
+100F2;AL # LINEAR B IDEOGRAM VESSEL B219
+100F3;AL # LINEAR B IDEOGRAM VESSEL B221
+100F4;AL # LINEAR B IDEOGRAM VESSEL B222
+100F5;AL # LINEAR B IDEOGRAM VESSEL B226
+100F6;AL # LINEAR B IDEOGRAM VESSEL B227
+100F7;AL # LINEAR B IDEOGRAM VESSEL B228
+100F8;AL # LINEAR B IDEOGRAM VESSEL B229
+100F9;AL # LINEAR B IDEOGRAM VESSEL B250
+100FA;AL # LINEAR B IDEOGRAM VESSEL B305
+10100;BA # AEGEAN WORD SEPARATOR LINE
+10101;BA # AEGEAN WORD SEPARATOR DOT
+10102;BA # AEGEAN CHECK MARK
+10107;AL # AEGEAN NUMBER ONE
+10108;AL # AEGEAN NUMBER TWO
+10109;AL # AEGEAN NUMBER THREE
+1010A;AL # AEGEAN NUMBER FOUR
+1010B;AL # AEGEAN NUMBER FIVE
+1010C;AL # AEGEAN NUMBER SIX
+1010D;AL # AEGEAN NUMBER SEVEN
+1010E;AL # AEGEAN NUMBER EIGHT
+1010F;AL # AEGEAN NUMBER NINE
+10110;AL # AEGEAN NUMBER TEN
+10111;AL # AEGEAN NUMBER TWENTY
+10112;AL # AEGEAN NUMBER THIRTY
+10113;AL # AEGEAN NUMBER FORTY
+10114;AL # AEGEAN NUMBER FIFTY
+10115;AL # AEGEAN NUMBER SIXTY
+10116;AL # AEGEAN NUMBER SEVENTY
+10117;AL # AEGEAN NUMBER EIGHTY
+10118;AL # AEGEAN NUMBER NINETY
+10119;AL # AEGEAN NUMBER ONE HUNDRED
+1011A;AL # AEGEAN NUMBER TWO HUNDRED
+1011B;AL # AEGEAN NUMBER THREE HUNDRED
+1011C;AL # AEGEAN NUMBER FOUR HUNDRED
+1011D;AL # AEGEAN NUMBER FIVE HUNDRED
+1011E;AL # AEGEAN NUMBER SIX HUNDRED
+1011F;AL # AEGEAN NUMBER SEVEN HUNDRED
+10120;AL # AEGEAN NUMBER EIGHT HUNDRED
+10121;AL # AEGEAN NUMBER NINE HUNDRED
+10122;AL # AEGEAN NUMBER ONE THOUSAND
+10123;AL # AEGEAN NUMBER TWO THOUSAND
+10124;AL # AEGEAN NUMBER THREE THOUSAND
+10125;AL # AEGEAN NUMBER FOUR THOUSAND
+10126;AL # AEGEAN NUMBER FIVE THOUSAND
+10127;AL # AEGEAN NUMBER SIX THOUSAND
+10128;AL # AEGEAN NUMBER SEVEN THOUSAND
+10129;AL # AEGEAN NUMBER EIGHT THOUSAND
+1012A;AL # AEGEAN NUMBER NINE THOUSAND
+1012B;AL # AEGEAN NUMBER TEN THOUSAND
+1012C;AL # AEGEAN NUMBER TWENTY THOUSAND
+1012D;AL # AEGEAN NUMBER THIRTY THOUSAND
+1012E;AL # AEGEAN NUMBER FORTY THOUSAND
+1012F;AL # AEGEAN NUMBER FIFTY THOUSAND
+10130;AL # AEGEAN NUMBER SIXTY THOUSAND
+10131;AL # AEGEAN NUMBER SEVENTY THOUSAND
+10132;AL # AEGEAN NUMBER EIGHTY THOUSAND
+10133;AL # AEGEAN NUMBER NINETY THOUSAND
+10137;AL # AEGEAN WEIGHT BASE UNIT
+10138;AL # AEGEAN WEIGHT FIRST SUBUNIT
+10139;AL # AEGEAN WEIGHT SECOND SUBUNIT
+1013A;AL # AEGEAN WEIGHT THIRD SUBUNIT
+1013B;AL # AEGEAN WEIGHT FOURTH SUBUNIT
+1013C;AL # AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D;AL # AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E;AL # AEGEAN MEASURE SECOND SUBUNIT
+1013F;AL # AEGEAN MEASURE THIRD SUBUNIT
+10140;AL # GREEK ACROPHONIC ATTIC ONE QUARTER
+10141;AL # GREEK ACROPHONIC ATTIC ONE HALF
+10142;AL # GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143;AL # GREEK ACROPHONIC ATTIC FIVE
+10144;AL # GREEK ACROPHONIC ATTIC FIFTY
+10145;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146;AL # GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147;AL # GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148;AL # GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149;AL # GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A;AL # GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B;AL # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D;AL # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E;AL # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F;AL # GREEK ACROPHONIC ATTIC FIVE STATERS
+10150;AL # GREEK ACROPHONIC ATTIC TEN STATERS
+10151;AL # GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152;AL # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153;AL # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154;AL # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155;AL # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156;AL # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157;AL # GREEK ACROPHONIC ATTIC TEN MNAS
+10158;AL # GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159;AL # GREEK ACROPHONIC THESPIAN ONE
+1015A;AL # GREEK ACROPHONIC HERMIONIAN ONE
+1015B;AL # GREEK ACROPHONIC EPIDAUREAN TWO
+1015C;AL # GREEK ACROPHONIC THESPIAN TWO
+1015D;AL # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E;AL # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F;AL # GREEK ACROPHONIC TROEZENIAN FIVE
+10160;AL # GREEK ACROPHONIC TROEZENIAN TEN
+10161;AL # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162;AL # GREEK ACROPHONIC HERMIONIAN TEN
+10163;AL # GREEK ACROPHONIC MESSENIAN TEN
+10164;AL # GREEK ACROPHONIC THESPIAN TEN
+10165;AL # GREEK ACROPHONIC THESPIAN THIRTY
+10166;AL # GREEK ACROPHONIC TROEZENIAN FIFTY
+10167;AL # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168;AL # GREEK ACROPHONIC HERMIONIAN FIFTY
+10169;AL # GREEK ACROPHONIC THESPIAN FIFTY
+1016A;AL # GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B;AL # GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C;AL # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D;AL # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E;AL # GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F;AL # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170;AL # GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171;AL # GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172;AL # GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173;AL # GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174;AL # GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175;AL # GREEK ONE HALF SIGN
+10176;AL # GREEK ONE HALF SIGN ALTERNATE FORM
+10177;AL # GREEK TWO THIRDS SIGN
+10178;AL # GREEK THREE QUARTERS SIGN
+10179;AL # GREEK YEAR SIGN
+1017A;AL # GREEK TALENT SIGN
+1017B;AL # GREEK DRACHMA SIGN
+1017C;AL # GREEK OBOL SIGN
+1017D;AL # GREEK TWO OBOLS SIGN
+1017E;AL # GREEK THREE OBOLS SIGN
+1017F;AL # GREEK FOUR OBOLS SIGN
+10180;AL # GREEK FIVE OBOLS SIGN
+10181;AL # GREEK METRETES SIGN
+10182;AL # GREEK KYATHOS BASE SIGN
+10183;AL # GREEK LITRA SIGN
+10184;AL # GREEK OUNKIA SIGN
+10185;AL # GREEK XESTES SIGN
+10186;AL # GREEK ARTABE SIGN
+10187;AL # GREEK AROURA SIGN
+10188;AL # GREEK GRAMMA SIGN
+10189;AL # GREEK TRYBLION BASE SIGN
+1018A;AL # GREEK ZERO SIGN
+10300;AL # OLD ITALIC LETTER A
+10301;AL # OLD ITALIC LETTER BE
+10302;AL # OLD ITALIC LETTER KE
+10303;AL # OLD ITALIC LETTER DE
+10304;AL # OLD ITALIC LETTER E
+10305;AL # OLD ITALIC LETTER VE
+10306;AL # OLD ITALIC LETTER ZE
+10307;AL # OLD ITALIC LETTER HE
+10308;AL # OLD ITALIC LETTER THE
+10309;AL # OLD ITALIC LETTER I
+1030A;AL # OLD ITALIC LETTER KA
+1030B;AL # OLD ITALIC LETTER EL
+1030C;AL # OLD ITALIC LETTER EM
+1030D;AL # OLD ITALIC LETTER EN
+1030E;AL # OLD ITALIC LETTER ESH
+1030F;AL # OLD ITALIC LETTER O
+10310;AL # OLD ITALIC LETTER PE
+10311;AL # OLD ITALIC LETTER SHE
+10312;AL # OLD ITALIC LETTER KU
+10313;AL # OLD ITALIC LETTER ER
+10314;AL # OLD ITALIC LETTER ES
+10315;AL # OLD ITALIC LETTER TE
+10316;AL # OLD ITALIC LETTER U
+10317;AL # OLD ITALIC LETTER EKS
+10318;AL # OLD ITALIC LETTER PHE
+10319;AL # OLD ITALIC LETTER KHE
+1031A;AL # OLD ITALIC LETTER EF
+1031B;AL # OLD ITALIC LETTER ERS
+1031C;AL # OLD ITALIC LETTER CHE
+1031D;AL # OLD ITALIC LETTER II
+1031E;AL # OLD ITALIC LETTER UU
+10320;AL # OLD ITALIC NUMERAL ONE
+10321;AL # OLD ITALIC NUMERAL FIVE
+10322;AL # OLD ITALIC NUMERAL TEN
+10323;AL # OLD ITALIC NUMERAL FIFTY
+10330;AL # GOTHIC LETTER AHSA
+10331;AL # GOTHIC LETTER BAIRKAN
+10332;AL # GOTHIC LETTER GIBA
+10333;AL # GOTHIC LETTER DAGS
+10334;AL # GOTHIC LETTER AIHVUS
+10335;AL # GOTHIC LETTER QAIRTHRA
+10336;AL # GOTHIC LETTER IUJA
+10337;AL # GOTHIC LETTER HAGL
+10338;AL # GOTHIC LETTER THIUTH
+10339;AL # GOTHIC LETTER EIS
+1033A;AL # GOTHIC LETTER KUSMA
+1033B;AL # GOTHIC LETTER LAGUS
+1033C;AL # GOTHIC LETTER MANNA
+1033D;AL # GOTHIC LETTER NAUTHS
+1033E;AL # GOTHIC LETTER JER
+1033F;AL # GOTHIC LETTER URUS
+10340;AL # GOTHIC LETTER PAIRTHRA
+10341;AL # GOTHIC LETTER NINETY
+10342;AL # GOTHIC LETTER RAIDA
+10343;AL # GOTHIC LETTER SAUIL
+10344;AL # GOTHIC LETTER TEIWS
+10345;AL # GOTHIC LETTER WINJA
+10346;AL # GOTHIC LETTER FAIHU
+10347;AL # GOTHIC LETTER IGGWS
+10348;AL # GOTHIC LETTER HWAIR
+10349;AL # GOTHIC LETTER OTHAL
+1034A;AL # GOTHIC LETTER NINE HUNDRED
+10380;AL # UGARITIC LETTER ALPA
+10381;AL # UGARITIC LETTER BETA
+10382;AL # UGARITIC LETTER GAMLA
+10383;AL # UGARITIC LETTER KHA
+10384;AL # UGARITIC LETTER DELTA
+10385;AL # UGARITIC LETTER HO
+10386;AL # UGARITIC LETTER WO
+10387;AL # UGARITIC LETTER ZETA
+10388;AL # UGARITIC LETTER HOTA
+10389;AL # UGARITIC LETTER TET
+1038A;AL # UGARITIC LETTER YOD
+1038B;AL # UGARITIC LETTER KAF
+1038C;AL # UGARITIC LETTER SHIN
+1038D;AL # UGARITIC LETTER LAMDA
+1038E;AL # UGARITIC LETTER MEM
+1038F;AL # UGARITIC LETTER DHAL
+10390;AL # UGARITIC LETTER NUN
+10391;AL # UGARITIC LETTER ZU
+10392;AL # UGARITIC LETTER SAMKA
+10393;AL # UGARITIC LETTER AIN
+10394;AL # UGARITIC LETTER PU
+10395;AL # UGARITIC LETTER SADE
+10396;AL # UGARITIC LETTER QOPA
+10397;AL # UGARITIC LETTER RASHA
+10398;AL # UGARITIC LETTER THANNA
+10399;AL # UGARITIC LETTER GHAIN
+1039A;AL # UGARITIC LETTER TO
+1039B;AL # UGARITIC LETTER I
+1039C;AL # UGARITIC LETTER U
+1039D;AL # UGARITIC LETTER SSU
+1039F;BA # UGARITIC WORD DIVIDER
+103A0;AL # OLD PERSIAN SIGN A
+103A1;AL # OLD PERSIAN SIGN I
+103A2;AL # OLD PERSIAN SIGN U
+103A3;AL # OLD PERSIAN SIGN KA
+103A4;AL # OLD PERSIAN SIGN KU
+103A5;AL # OLD PERSIAN SIGN GA
+103A6;AL # OLD PERSIAN SIGN GU
+103A7;AL # OLD PERSIAN SIGN XA
+103A8;AL # OLD PERSIAN SIGN CA
+103A9;AL # OLD PERSIAN SIGN JA
+103AA;AL # OLD PERSIAN SIGN JI
+103AB;AL # OLD PERSIAN SIGN TA
+103AC;AL # OLD PERSIAN SIGN TU
+103AD;AL # OLD PERSIAN SIGN DA
+103AE;AL # OLD PERSIAN SIGN DI
+103AF;AL # OLD PERSIAN SIGN DU
+103B0;AL # OLD PERSIAN SIGN THA
+103B1;AL # OLD PERSIAN SIGN PA
+103B2;AL # OLD PERSIAN SIGN BA
+103B3;AL # OLD PERSIAN SIGN FA
+103B4;AL # OLD PERSIAN SIGN NA
+103B5;AL # OLD PERSIAN SIGN NU
+103B6;AL # OLD PERSIAN SIGN MA
+103B7;AL # OLD PERSIAN SIGN MI
+103B8;AL # OLD PERSIAN SIGN MU
+103B9;AL # OLD PERSIAN SIGN YA
+103BA;AL # OLD PERSIAN SIGN VA
+103BB;AL # OLD PERSIAN SIGN VI
+103BC;AL # OLD PERSIAN SIGN RA
+103BD;AL # OLD PERSIAN SIGN RU
+103BE;AL # OLD PERSIAN SIGN LA
+103BF;AL # OLD PERSIAN SIGN SA
+103C0;AL # OLD PERSIAN SIGN ZA
+103C1;AL # OLD PERSIAN SIGN SHA
+103C2;AL # OLD PERSIAN SIGN SSA
+103C3;AL # OLD PERSIAN SIGN HA
+103C8;AL # OLD PERSIAN SIGN AURAMAZDAA
+103C9;AL # OLD PERSIAN SIGN AURAMAZDAA-2
+103CA;AL # OLD PERSIAN SIGN AURAMAZDAAHA
+103CB;AL # OLD PERSIAN SIGN XSHAAYATHIYA
+103CC;AL # OLD PERSIAN SIGN DAHYAAUSH
+103CD;AL # OLD PERSIAN SIGN DAHYAAUSH-2
+103CE;AL # OLD PERSIAN SIGN BAGA
+103CF;AL # OLD PERSIAN SIGN BUUMISH
+103D0;AL # OLD PERSIAN WORD DIVIDER
+103D1;AL # OLD PERSIAN NUMBER ONE
+103D2;AL # OLD PERSIAN NUMBER TWO
+103D3;AL # OLD PERSIAN NUMBER TEN
+103D4;AL # OLD PERSIAN NUMBER TWENTY
+103D5;AL # OLD PERSIAN NUMBER HUNDRED
+10400;AL # DESERET CAPITAL LETTER LONG I
+10401;AL # DESERET CAPITAL LETTER LONG E
+10402;AL # DESERET CAPITAL LETTER LONG A
+10403;AL # DESERET CAPITAL LETTER LONG AH
+10404;AL # DESERET CAPITAL LETTER LONG O
+10405;AL # DESERET CAPITAL LETTER LONG OO
+10406;AL # DESERET CAPITAL LETTER SHORT I
+10407;AL # DESERET CAPITAL LETTER SHORT E
+10408;AL # DESERET CAPITAL LETTER SHORT A
+10409;AL # DESERET CAPITAL LETTER SHORT AH
+1040A;AL # DESERET CAPITAL LETTER SHORT O
+1040B;AL # DESERET CAPITAL LETTER SHORT OO
+1040C;AL # DESERET CAPITAL LETTER AY
+1040D;AL # DESERET CAPITAL LETTER OW
+1040E;AL # DESERET CAPITAL LETTER WU
+1040F;AL # DESERET CAPITAL LETTER YEE
+10410;AL # DESERET CAPITAL LETTER H
+10411;AL # DESERET CAPITAL LETTER PEE
+10412;AL # DESERET CAPITAL LETTER BEE
+10413;AL # DESERET CAPITAL LETTER TEE
+10414;AL # DESERET CAPITAL LETTER DEE
+10415;AL # DESERET CAPITAL LETTER CHEE
+10416;AL # DESERET CAPITAL LETTER JEE
+10417;AL # DESERET CAPITAL LETTER KAY
+10418;AL # DESERET CAPITAL LETTER GAY
+10419;AL # DESERET CAPITAL LETTER EF
+1041A;AL # DESERET CAPITAL LETTER VEE
+1041B;AL # DESERET CAPITAL LETTER ETH
+1041C;AL # DESERET CAPITAL LETTER THEE
+1041D;AL # DESERET CAPITAL LETTER ES
+1041E;AL # DESERET CAPITAL LETTER ZEE
+1041F;AL # DESERET CAPITAL LETTER ESH
+10420;AL # DESERET CAPITAL LETTER ZHEE
+10421;AL # DESERET CAPITAL LETTER ER
+10422;AL # DESERET CAPITAL LETTER EL
+10423;AL # DESERET CAPITAL LETTER EM
+10424;AL # DESERET CAPITAL LETTER EN
+10425;AL # DESERET CAPITAL LETTER ENG
+10426;AL # DESERET CAPITAL LETTER OI
+10427;AL # DESERET CAPITAL LETTER EW
+10428;AL # DESERET SMALL LETTER LONG I
+10429;AL # DESERET SMALL LETTER LONG E
+1042A;AL # DESERET SMALL LETTER LONG A
+1042B;AL # DESERET SMALL LETTER LONG AH
+1042C;AL # DESERET SMALL LETTER LONG O
+1042D;AL # DESERET SMALL LETTER LONG OO
+1042E;AL # DESERET SMALL LETTER SHORT I
+1042F;AL # DESERET SMALL LETTER SHORT E
+10430;AL # DESERET SMALL LETTER SHORT A
+10431;AL # DESERET SMALL LETTER SHORT AH
+10432;AL # DESERET SMALL LETTER SHORT O
+10433;AL # DESERET SMALL LETTER SHORT OO
+10434;AL # DESERET SMALL LETTER AY
+10435;AL # DESERET SMALL LETTER OW
+10436;AL # DESERET SMALL LETTER WU
+10437;AL # DESERET SMALL LETTER YEE
+10438;AL # DESERET SMALL LETTER H
+10439;AL # DESERET SMALL LETTER PEE
+1043A;AL # DESERET SMALL LETTER BEE
+1043B;AL # DESERET SMALL LETTER TEE
+1043C;AL # DESERET SMALL LETTER DEE
+1043D;AL # DESERET SMALL LETTER CHEE
+1043E;AL # DESERET SMALL LETTER JEE
+1043F;AL # DESERET SMALL LETTER KAY
+10440;AL # DESERET SMALL LETTER GAY
+10441;AL # DESERET SMALL LETTER EF
+10442;AL # DESERET SMALL LETTER VEE
+10443;AL # DESERET SMALL LETTER ETH
+10444;AL # DESERET SMALL LETTER THEE
+10445;AL # DESERET SMALL LETTER ES
+10446;AL # DESERET SMALL LETTER ZEE
+10447;AL # DESERET SMALL LETTER ESH
+10448;AL # DESERET SMALL LETTER ZHEE
+10449;AL # DESERET SMALL LETTER ER
+1044A;AL # DESERET SMALL LETTER EL
+1044B;AL # DESERET SMALL LETTER EM
+1044C;AL # DESERET SMALL LETTER EN
+1044D;AL # DESERET SMALL LETTER ENG
+1044E;AL # DESERET SMALL LETTER OI
+1044F;AL # DESERET SMALL LETTER EW
+10450;AL # SHAVIAN LETTER PEEP
+10451;AL # SHAVIAN LETTER TOT
+10452;AL # SHAVIAN LETTER KICK
+10453;AL # SHAVIAN LETTER FEE
+10454;AL # SHAVIAN LETTER THIGH
+10455;AL # SHAVIAN LETTER SO
+10456;AL # SHAVIAN LETTER SURE
+10457;AL # SHAVIAN LETTER CHURCH
+10458;AL # SHAVIAN LETTER YEA
+10459;AL # SHAVIAN LETTER HUNG
+1045A;AL # SHAVIAN LETTER BIB
+1045B;AL # SHAVIAN LETTER DEAD
+1045C;AL # SHAVIAN LETTER GAG
+1045D;AL # SHAVIAN LETTER VOW
+1045E;AL # SHAVIAN LETTER THEY
+1045F;AL # SHAVIAN LETTER ZOO
+10460;AL # SHAVIAN LETTER MEASURE
+10461;AL # SHAVIAN LETTER JUDGE
+10462;AL # SHAVIAN LETTER WOE
+10463;AL # SHAVIAN LETTER HA-HA
+10464;AL # SHAVIAN LETTER LOLL
+10465;AL # SHAVIAN LETTER MIME
+10466;AL # SHAVIAN LETTER IF
+10467;AL # SHAVIAN LETTER EGG
+10468;AL # SHAVIAN LETTER ASH
+10469;AL # SHAVIAN LETTER ADO
+1046A;AL # SHAVIAN LETTER ON
+1046B;AL # SHAVIAN LETTER WOOL
+1046C;AL # SHAVIAN LETTER OUT
+1046D;AL # SHAVIAN LETTER AH
+1046E;AL # SHAVIAN LETTER ROAR
+1046F;AL # SHAVIAN LETTER NUN
+10470;AL # SHAVIAN LETTER EAT
+10471;AL # SHAVIAN LETTER AGE
+10472;AL # SHAVIAN LETTER ICE
+10473;AL # SHAVIAN LETTER UP
+10474;AL # SHAVIAN LETTER OAK
+10475;AL # SHAVIAN LETTER OOZE
+10476;AL # SHAVIAN LETTER OIL
+10477;AL # SHAVIAN LETTER AWE
+10478;AL # SHAVIAN LETTER ARE
+10479;AL # SHAVIAN LETTER OR
+1047A;AL # SHAVIAN LETTER AIR
+1047B;AL # SHAVIAN LETTER ERR
+1047C;AL # SHAVIAN LETTER ARRAY
+1047D;AL # SHAVIAN LETTER EAR
+1047E;AL # SHAVIAN LETTER IAN
+1047F;AL # SHAVIAN LETTER YEW
+10480;AL # OSMANYA LETTER ALEF
+10481;AL # OSMANYA LETTER BA
+10482;AL # OSMANYA LETTER TA
+10483;AL # OSMANYA LETTER JA
+10484;AL # OSMANYA LETTER XA
+10485;AL # OSMANYA LETTER KHA
+10486;AL # OSMANYA LETTER DEEL
+10487;AL # OSMANYA LETTER RA
+10488;AL # OSMANYA LETTER SA
+10489;AL # OSMANYA LETTER SHIIN
+1048A;AL # OSMANYA LETTER DHA
+1048B;AL # OSMANYA LETTER CAYN
+1048C;AL # OSMANYA LETTER GA
+1048D;AL # OSMANYA LETTER FA
+1048E;AL # OSMANYA LETTER QAAF
+1048F;AL # OSMANYA LETTER KAAF
+10490;AL # OSMANYA LETTER LAAN
+10491;AL # OSMANYA LETTER MIIN
+10492;AL # OSMANYA LETTER NUUN
+10493;AL # OSMANYA LETTER WAW
+10494;AL # OSMANYA LETTER HA
+10495;AL # OSMANYA LETTER YA
+10496;AL # OSMANYA LETTER A
+10497;AL # OSMANYA LETTER E
+10498;AL # OSMANYA LETTER I
+10499;AL # OSMANYA LETTER O
+1049A;AL # OSMANYA LETTER U
+1049B;AL # OSMANYA LETTER AA
+1049C;AL # OSMANYA LETTER EE
+1049D;AL # OSMANYA LETTER OO
+104A0;NU # OSMANYA DIGIT ZERO
+104A1;NU # OSMANYA DIGIT ONE
+104A2;NU # OSMANYA DIGIT TWO
+104A3;NU # OSMANYA DIGIT THREE
+104A4;NU # OSMANYA DIGIT FOUR
+104A5;NU # OSMANYA DIGIT FIVE
+104A6;NU # OSMANYA DIGIT SIX
+104A7;NU # OSMANYA DIGIT SEVEN
+104A8;NU # OSMANYA DIGIT EIGHT
+104A9;NU # OSMANYA DIGIT NINE
+10800;AL # CYPRIOT SYLLABLE A
+10801;AL # CYPRIOT SYLLABLE E
+10802;AL # CYPRIOT SYLLABLE I
+10803;AL # CYPRIOT SYLLABLE O
+10804;AL # CYPRIOT SYLLABLE U
+10805;AL # CYPRIOT SYLLABLE JA
+10808;AL # CYPRIOT SYLLABLE JO
+1080A;AL # CYPRIOT SYLLABLE KA
+1080B;AL # CYPRIOT SYLLABLE KE
+1080C;AL # CYPRIOT SYLLABLE KI
+1080D;AL # CYPRIOT SYLLABLE KO
+1080E;AL # CYPRIOT SYLLABLE KU
+1080F;AL # CYPRIOT SYLLABLE LA
+10810;AL # CYPRIOT SYLLABLE LE
+10811;AL # CYPRIOT SYLLABLE LI
+10812;AL # CYPRIOT SYLLABLE LO
+10813;AL # CYPRIOT SYLLABLE LU
+10814;AL # CYPRIOT SYLLABLE MA
+10815;AL # CYPRIOT SYLLABLE ME
+10816;AL # CYPRIOT SYLLABLE MI
+10817;AL # CYPRIOT SYLLABLE MO
+10818;AL # CYPRIOT SYLLABLE MU
+10819;AL # CYPRIOT SYLLABLE NA
+1081A;AL # CYPRIOT SYLLABLE NE
+1081B;AL # CYPRIOT SYLLABLE NI
+1081C;AL # CYPRIOT SYLLABLE NO
+1081D;AL # CYPRIOT SYLLABLE NU
+1081E;AL # CYPRIOT SYLLABLE PA
+1081F;AL # CYPRIOT SYLLABLE PE
+10820;AL # CYPRIOT SYLLABLE PI
+10821;AL # CYPRIOT SYLLABLE PO
+10822;AL # CYPRIOT SYLLABLE PU
+10823;AL # CYPRIOT SYLLABLE RA
+10824;AL # CYPRIOT SYLLABLE RE
+10825;AL # CYPRIOT SYLLABLE RI
+10826;AL # CYPRIOT SYLLABLE RO
+10827;AL # CYPRIOT SYLLABLE RU
+10828;AL # CYPRIOT SYLLABLE SA
+10829;AL # CYPRIOT SYLLABLE SE
+1082A;AL # CYPRIOT SYLLABLE SI
+1082B;AL # CYPRIOT SYLLABLE SO
+1082C;AL # CYPRIOT SYLLABLE SU
+1082D;AL # CYPRIOT SYLLABLE TA
+1082E;AL # CYPRIOT SYLLABLE TE
+1082F;AL # CYPRIOT SYLLABLE TI
+10830;AL # CYPRIOT SYLLABLE TO
+10831;AL # CYPRIOT SYLLABLE TU
+10832;AL # CYPRIOT SYLLABLE WA
+10833;AL # CYPRIOT SYLLABLE WE
+10834;AL # CYPRIOT SYLLABLE WI
+10835;AL # CYPRIOT SYLLABLE WO
+10837;AL # CYPRIOT SYLLABLE XA
+10838;AL # CYPRIOT SYLLABLE XE
+1083C;AL # CYPRIOT SYLLABLE ZA
+1083F;AL # CYPRIOT SYLLABLE ZO
+10A00;AL # KHAROSHTHI LETTER A
+10A01;CM # KHAROSHTHI VOWEL SIGN I
+10A02;CM # KHAROSHTHI VOWEL SIGN U
+10A03;CM # KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05;CM # KHAROSHTHI VOWEL SIGN E
+10A06;CM # KHAROSHTHI VOWEL SIGN O
+10A0C;CM # KHAROSHTHI VOWEL LENGTH MARK
+10A0D;CM # KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E;CM # KHAROSHTHI SIGN ANUSVARA
+10A0F;CM # KHAROSHTHI SIGN VISARGA
+10A10;AL # KHAROSHTHI LETTER KA
+10A11;AL # KHAROSHTHI LETTER KHA
+10A12;AL # KHAROSHTHI LETTER GA
+10A13;AL # KHAROSHTHI LETTER GHA
+10A15;AL # KHAROSHTHI LETTER CA
+10A16;AL # KHAROSHTHI LETTER CHA
+10A17;AL # KHAROSHTHI LETTER JA
+10A19;AL # KHAROSHTHI LETTER NYA
+10A1A;AL # KHAROSHTHI LETTER TTA
+10A1B;AL # KHAROSHTHI LETTER TTHA
+10A1C;AL # KHAROSHTHI LETTER DDA
+10A1D;AL # KHAROSHTHI LETTER DDHA
+10A1E;AL # KHAROSHTHI LETTER NNA
+10A1F;AL # KHAROSHTHI LETTER TA
+10A20;AL # KHAROSHTHI LETTER THA
+10A21;AL # KHAROSHTHI LETTER DA
+10A22;AL # KHAROSHTHI LETTER DHA
+10A23;AL # KHAROSHTHI LETTER NA
+10A24;AL # KHAROSHTHI LETTER PA
+10A25;AL # KHAROSHTHI LETTER PHA
+10A26;AL # KHAROSHTHI LETTER BA
+10A27;AL # KHAROSHTHI LETTER BHA
+10A28;AL # KHAROSHTHI LETTER MA
+10A29;AL # KHAROSHTHI LETTER YA
+10A2A;AL # KHAROSHTHI LETTER RA
+10A2B;AL # KHAROSHTHI LETTER LA
+10A2C;AL # KHAROSHTHI LETTER VA
+10A2D;AL # KHAROSHTHI LETTER SHA
+10A2E;AL # KHAROSHTHI LETTER SSA
+10A2F;AL # KHAROSHTHI LETTER SA
+10A30;AL # KHAROSHTHI LETTER ZA
+10A31;AL # KHAROSHTHI LETTER HA
+10A32;AL # KHAROSHTHI LETTER KKA
+10A33;AL # KHAROSHTHI LETTER TTTHA
+10A38;CM # KHAROSHTHI SIGN BAR ABOVE
+10A39;CM # KHAROSHTHI SIGN CAUDA
+10A3A;CM # KHAROSHTHI SIGN DOT BELOW
+10A3F;CM # KHAROSHTHI VIRAMA
+10A40;AL # KHAROSHTHI DIGIT ONE
+10A41;AL # KHAROSHTHI DIGIT TWO
+10A42;AL # KHAROSHTHI DIGIT THREE
+10A43;AL # KHAROSHTHI DIGIT FOUR
+10A44;AL # KHAROSHTHI NUMBER TEN
+10A45;AL # KHAROSHTHI NUMBER TWENTY
+10A46;AL # KHAROSHTHI NUMBER ONE HUNDRED
+10A47;AL # KHAROSHTHI NUMBER ONE THOUSAND
+10A50;BA # KHAROSHTHI PUNCTUATION DOT
+10A51;BA # KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52;BA # KHAROSHTHI PUNCTUATION CIRCLE
+10A53;BA # KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54;BA # KHAROSHTHI PUNCTUATION MANGALAM
+10A55;BA # KHAROSHTHI PUNCTUATION LOTUS
+10A56;BA # KHAROSHTHI PUNCTUATION DANDA
+10A57;BA # KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58;AL # KHAROSHTHI PUNCTUATION LINES
+1D000;AL # BYZANTINE MUSICAL SYMBOL PSILI
+1D001;AL # BYZANTINE MUSICAL SYMBOL DASEIA
+1D002;AL # BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003;AL # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004;AL # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005;AL # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006;AL # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007;AL # BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008;AL # BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009;AL # BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A;AL # BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B;AL # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C;AL # BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D;AL # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E;AL # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F;AL # BYZANTINE MUSICAL SYMBOL TELEIA
+1D010;AL # BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011;AL # BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012;AL # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013;AL # BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014;AL # BYZANTINE MUSICAL SYMBOL THITA
+1D015;AL # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016;AL # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017;AL # BYZANTINE MUSICAL SYMBOL PSILON
+1D018;AL # BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019;AL # BYZANTINE MUSICAL SYMBOL VATHY
+1D01A;AL # BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B;AL # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C;AL # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D;AL # BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E;AL # BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F;AL # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020;AL # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021;AL # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022;AL # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023;AL # BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024;AL # BYZANTINE MUSICAL SYMBOL KLASMA
+1D025;AL # BYZANTINE MUSICAL SYMBOL REVMA
+1D026;AL # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027;AL # BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028;AL # BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029;AL # BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A;AL # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B;AL # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C;AL # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D;AL # BYZANTINE MUSICAL SYMBOL THEMA
+1D02E;AL # BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F;AL # BYZANTINE MUSICAL SYMBOL DYO
+1D030;AL # BYZANTINE MUSICAL SYMBOL TRIA
+1D031;AL # BYZANTINE MUSICAL SYMBOL TESSERA
+1D032;AL # BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033;AL # BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034;AL # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035;AL # BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036;AL # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037;AL # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038;AL # BYZANTINE MUSICAL SYMBOL PELASTON
+1D039;AL # BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A;AL # BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B;AL # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C;AL # BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D;AL # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E;AL # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F;AL # BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040;AL # BYZANTINE MUSICAL SYMBOL NANA
+1D041;AL # BYZANTINE MUSICAL SYMBOL PETASMA
+1D042;AL # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043;AL # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044;AL # BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045;AL # BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046;AL # BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047;AL # BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048;AL # BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049;AL # BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A;AL # BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B;AL # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C;AL # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D;AL # BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E;AL # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F;AL # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050;AL # BYZANTINE MUSICAL SYMBOL YPSILI
+1D051;AL # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052;AL # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053;AL # BYZANTINE MUSICAL SYMBOL YPORROI
+1D054;AL # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055;AL # BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056;AL # BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057;AL # BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058;AL # BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059;AL # BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A;AL # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B;AL # BYZANTINE MUSICAL SYMBOL OMALON
+1D05C;AL # BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D;AL # BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E;AL # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F;AL # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060;AL # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061;AL # BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062;AL # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063;AL # BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064;AL # BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065;AL # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066;AL # BYZANTINE MUSICAL SYMBOL SYRMA
+1D067;AL # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068;AL # BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069;AL # BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A;AL # BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B;AL # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C;AL # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D;AL # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E;AL # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F;AL # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070;AL # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071;AL # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072;AL # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073;AL # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074;AL # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075;AL # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076;AL # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077;AL # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078;AL # BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079;AL # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A;AL # BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B;AL # BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C;AL # BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D;AL # BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E;AL # BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F;AL # BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080;AL # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081;AL # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082;AL # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083;AL # BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084;AL # BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085;AL # BYZANTINE MUSICAL SYMBOL APLI
+1D086;AL # BYZANTINE MUSICAL SYMBOL DIPLI
+1D087;AL # BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088;AL # BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089;AL # BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A;AL # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B;AL # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C;AL # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D;AL # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E;AL # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F;AL # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090;AL # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091;AL # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092;AL # BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093;AL # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094;AL # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095;AL # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096;AL # BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097;AL # BYZANTINE MUSICAL SYMBOL ARGON
+1D098;AL # BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099;AL # BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A;AL # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B;AL # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C;AL # BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D;AL # BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E;AL # BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F;AL # BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0;AL # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1;AL # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC;AL # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD;AL # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE;AL # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF;AL # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0;AL # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3;AL # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4;AL # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5;AL # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6;AL # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7;AL # BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8;AL # BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9;AL # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC;AL # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE;AL # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2;AL # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3;AL # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4;AL # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5;AL # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6;AL # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7;AL # BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8;AL # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9;AL # BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA;AL # BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB;AL # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC;AL # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD;AL # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE;AL # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF;AL # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0;AL # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1;AL # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2;AL # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3;AL # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4;AL # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5;AL # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6;AL # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7;AL # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8;AL # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9;AL # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA;AL # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB;AL # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC;AL # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD;AL # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5;AL # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6;AL # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7;AL # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8;AL # BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF;AL # BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0;AL # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1;AL # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2;AL # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3;AL # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4;AL # BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5;AL # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100;AL # MUSICAL SYMBOL SINGLE BARLINE
+1D101;AL # MUSICAL SYMBOL DOUBLE BARLINE
+1D102;AL # MUSICAL SYMBOL FINAL BARLINE
+1D103;AL # MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104;AL # MUSICAL SYMBOL DASHED BARLINE
+1D105;AL # MUSICAL SYMBOL SHORT BARLINE
+1D106;AL # MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107;AL # MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108;AL # MUSICAL SYMBOL REPEAT DOTS
+1D109;AL # MUSICAL SYMBOL DAL SEGNO
+1D10A;AL # MUSICAL SYMBOL DA CAPO
+1D10B;AL # MUSICAL SYMBOL SEGNO
+1D10C;AL # MUSICAL SYMBOL CODA
+1D10D;AL # MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E;AL # MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F;AL # MUSICAL SYMBOL REPEATED FIGURE-3
+1D110;AL # MUSICAL SYMBOL FERMATA
+1D111;AL # MUSICAL SYMBOL FERMATA BELOW
+1D112;AL # MUSICAL SYMBOL BREATH MARK
+1D113;AL # MUSICAL SYMBOL CAESURA
+1D114;AL # MUSICAL SYMBOL BRACE
+1D115;AL # MUSICAL SYMBOL BRACKET
+1D116;AL # MUSICAL SYMBOL ONE-LINE STAFF
+1D117;AL # MUSICAL SYMBOL TWO-LINE STAFF
+1D118;AL # MUSICAL SYMBOL THREE-LINE STAFF
+1D119;AL # MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A;AL # MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B;AL # MUSICAL SYMBOL SIX-LINE STAFF
+1D11C;AL # MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D;AL # MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E;AL # MUSICAL SYMBOL G CLEF
+1D11F;AL # MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120;AL # MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121;AL # MUSICAL SYMBOL C CLEF
+1D122;AL # MUSICAL SYMBOL F CLEF
+1D123;AL # MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124;AL # MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125;AL # MUSICAL SYMBOL DRUM CLEF-1
+1D126;AL # MUSICAL SYMBOL DRUM CLEF-2
+1D12A;AL # MUSICAL SYMBOL DOUBLE SHARP
+1D12B;AL # MUSICAL SYMBOL DOUBLE FLAT
+1D12C;AL # MUSICAL SYMBOL FLAT UP
+1D12D;AL # MUSICAL SYMBOL FLAT DOWN
+1D12E;AL # MUSICAL SYMBOL NATURAL UP
+1D12F;AL # MUSICAL SYMBOL NATURAL DOWN
+1D130;AL # MUSICAL SYMBOL SHARP UP
+1D131;AL # MUSICAL SYMBOL SHARP DOWN
+1D132;AL # MUSICAL SYMBOL QUARTER TONE SHARP
+1D133;AL # MUSICAL SYMBOL QUARTER TONE FLAT
+1D134;AL # MUSICAL SYMBOL COMMON TIME
+1D135;AL # MUSICAL SYMBOL CUT TIME
+1D136;AL # MUSICAL SYMBOL OTTAVA ALTA
+1D137;AL # MUSICAL SYMBOL OTTAVA BASSA
+1D138;AL # MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139;AL # MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A;AL # MUSICAL SYMBOL MULTI REST
+1D13B;AL # MUSICAL SYMBOL WHOLE REST
+1D13C;AL # MUSICAL SYMBOL HALF REST
+1D13D;AL # MUSICAL SYMBOL QUARTER REST
+1D13E;AL # MUSICAL SYMBOL EIGHTH REST
+1D13F;AL # MUSICAL SYMBOL SIXTEENTH REST
+1D140;AL # MUSICAL SYMBOL THIRTY-SECOND REST
+1D141;AL # MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142;AL # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143;AL # MUSICAL SYMBOL X NOTEHEAD
+1D144;AL # MUSICAL SYMBOL PLUS NOTEHEAD
+1D145;AL # MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146;AL # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147;AL # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151;AL # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152;AL # MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153;AL # MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154;AL # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155;AL # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156;AL # MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157;AL # MUSICAL SYMBOL VOID NOTEHEAD
+1D158;AL # MUSICAL SYMBOL NOTEHEAD BLACK
+1D159;AL # MUSICAL SYMBOL NULL NOTEHEAD
+1D15A;AL # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B;AL # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C;AL # MUSICAL SYMBOL BREVE
+1D15D;AL # MUSICAL SYMBOL WHOLE NOTE
+1D15E;AL # MUSICAL SYMBOL HALF NOTE
+1D15F;AL # MUSICAL SYMBOL QUARTER NOTE
+1D160;AL # MUSICAL SYMBOL EIGHTH NOTE
+1D161;AL # MUSICAL SYMBOL SIXTEENTH NOTE
+1D162;AL # MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163;AL # MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164;AL # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165;CM # MUSICAL SYMBOL COMBINING STEM
+1D166;CM # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167;CM # MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168;CM # MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169;CM # MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A;AL # MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B;AL # MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C;AL # MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D;CM # MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E;CM # MUSICAL SYMBOL COMBINING FLAG-1
+1D16F;CM # MUSICAL SYMBOL COMBINING FLAG-2
+1D170;CM # MUSICAL SYMBOL COMBINING FLAG-3
+1D171;CM # MUSICAL SYMBOL COMBINING FLAG-4
+1D172;CM # MUSICAL SYMBOL COMBINING FLAG-5
+1D173;CM # MUSICAL SYMBOL BEGIN BEAM
+1D174;CM # MUSICAL SYMBOL END BEAM
+1D175;CM # MUSICAL SYMBOL BEGIN TIE
+1D176;CM # MUSICAL SYMBOL END TIE
+1D177;CM # MUSICAL SYMBOL BEGIN SLUR
+1D178;CM # MUSICAL SYMBOL END SLUR
+1D179;CM # MUSICAL SYMBOL BEGIN PHRASE
+1D17A;CM # MUSICAL SYMBOL END PHRASE
+1D17B;CM # MUSICAL SYMBOL COMBINING ACCENT
+1D17C;CM # MUSICAL SYMBOL COMBINING STACCATO
+1D17D;CM # MUSICAL SYMBOL COMBINING TENUTO
+1D17E;CM # MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F;CM # MUSICAL SYMBOL COMBINING MARCATO
+1D180;CM # MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181;CM # MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182;CM # MUSICAL SYMBOL COMBINING LOURE
+1D183;AL # MUSICAL SYMBOL ARPEGGIATO UP
+1D184;AL # MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185;CM # MUSICAL SYMBOL COMBINING DOIT
+1D186;CM # MUSICAL SYMBOL COMBINING RIP
+1D187;CM # MUSICAL SYMBOL COMBINING FLIP
+1D188;CM # MUSICAL SYMBOL COMBINING SMEAR
+1D189;CM # MUSICAL SYMBOL COMBINING BEND
+1D18A;CM # MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B;CM # MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C;AL # MUSICAL SYMBOL RINFORZANDO
+1D18D;AL # MUSICAL SYMBOL SUBITO
+1D18E;AL # MUSICAL SYMBOL Z
+1D18F;AL # MUSICAL SYMBOL PIANO
+1D190;AL # MUSICAL SYMBOL MEZZO
+1D191;AL # MUSICAL SYMBOL FORTE
+1D192;AL # MUSICAL SYMBOL CRESCENDO
+1D193;AL # MUSICAL SYMBOL DECRESCENDO
+1D194;AL # MUSICAL SYMBOL GRACE NOTE SLASH
+1D195;AL # MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196;AL # MUSICAL SYMBOL TR
+1D197;AL # MUSICAL SYMBOL TURN
+1D198;AL # MUSICAL SYMBOL INVERTED TURN
+1D199;AL # MUSICAL SYMBOL TURN SLASH
+1D19A;AL # MUSICAL SYMBOL TURN UP
+1D19B;AL # MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C;AL # MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D;AL # MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E;AL # MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F;AL # MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0;AL # MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1;AL # MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2;AL # MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3;AL # MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4;AL # MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5;AL # MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6;AL # MUSICAL SYMBOL HAUPTSTIMME
+1D1A7;AL # MUSICAL SYMBOL NEBENSTIMME
+1D1A8;AL # MUSICAL SYMBOL END OF STIMME
+1D1A9;AL # MUSICAL SYMBOL DEGREE SLASH
+1D1AA;CM # MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB;CM # MUSICAL SYMBOL COMBINING UP BOW
+1D1AC;CM # MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD;CM # MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE;AL # MUSICAL SYMBOL PEDAL MARK
+1D1AF;AL # MUSICAL SYMBOL PEDAL UP MARK
+1D1B0;AL # MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1;AL # MUSICAL SYMBOL GLISSANDO UP
+1D1B2;AL # MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3;AL # MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4;AL # MUSICAL SYMBOL DAMP
+1D1B5;AL # MUSICAL SYMBOL DAMP ALL
+1D1B6;AL # MUSICAL SYMBOL MAXIMA
+1D1B7;AL # MUSICAL SYMBOL LONGA
+1D1B8;AL # MUSICAL SYMBOL BREVIS
+1D1B9;AL # MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA;AL # MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB;AL # MUSICAL SYMBOL MINIMA
+1D1BC;AL # MUSICAL SYMBOL MINIMA BLACK
+1D1BD;AL # MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE;AL # MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF;AL # MUSICAL SYMBOL FUSA WHITE
+1D1C0;AL # MUSICAL SYMBOL FUSA BLACK
+1D1C1;AL # MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2;AL # MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3;AL # MUSICAL SYMBOL BREVIS REST
+1D1C4;AL # MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5;AL # MUSICAL SYMBOL MINIMA REST
+1D1C6;AL # MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7;AL # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8;AL # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9;AL # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA;AL # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB;AL # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC;AL # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD;AL # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE;AL # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF;AL # MUSICAL SYMBOL CROIX
+1D1D0;AL # MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1;AL # MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2;AL # MUSICAL SYMBOL SQUARE B
+1D1D3;AL # MUSICAL SYMBOL VIRGA
+1D1D4;AL # MUSICAL SYMBOL PODATUS
+1D1D5;AL # MUSICAL SYMBOL CLIVIS
+1D1D6;AL # MUSICAL SYMBOL SCANDICUS
+1D1D7;AL # MUSICAL SYMBOL CLIMACUS
+1D1D8;AL # MUSICAL SYMBOL TORCULUS
+1D1D9;AL # MUSICAL SYMBOL PORRECTUS
+1D1DA;AL # MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB;AL # MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC;AL # MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD;AL # MUSICAL SYMBOL PES SUBPUNCTIS
+1D200;AL # GREEK VOCAL NOTATION SYMBOL-1
+1D201;AL # GREEK VOCAL NOTATION SYMBOL-2
+1D202;AL # GREEK VOCAL NOTATION SYMBOL-3
+1D203;AL # GREEK VOCAL NOTATION SYMBOL-4
+1D204;AL # GREEK VOCAL NOTATION SYMBOL-5
+1D205;AL # GREEK VOCAL NOTATION SYMBOL-6
+1D206;AL # GREEK VOCAL NOTATION SYMBOL-7
+1D207;AL # GREEK VOCAL NOTATION SYMBOL-8
+1D208;AL # GREEK VOCAL NOTATION SYMBOL-9
+1D209;AL # GREEK VOCAL NOTATION SYMBOL-10
+1D20A;AL # GREEK VOCAL NOTATION SYMBOL-11
+1D20B;AL # GREEK VOCAL NOTATION SYMBOL-12
+1D20C;AL # GREEK VOCAL NOTATION SYMBOL-13
+1D20D;AL # GREEK VOCAL NOTATION SYMBOL-14
+1D20E;AL # GREEK VOCAL NOTATION SYMBOL-15
+1D20F;AL # GREEK VOCAL NOTATION SYMBOL-16
+1D210;AL # GREEK VOCAL NOTATION SYMBOL-17
+1D211;AL # GREEK VOCAL NOTATION SYMBOL-18
+1D212;AL # GREEK VOCAL NOTATION SYMBOL-19
+1D213;AL # GREEK VOCAL NOTATION SYMBOL-20
+1D214;AL # GREEK VOCAL NOTATION SYMBOL-21
+1D215;AL # GREEK VOCAL NOTATION SYMBOL-22
+1D216;AL # GREEK VOCAL NOTATION SYMBOL-23
+1D217;AL # GREEK VOCAL NOTATION SYMBOL-24
+1D218;AL # GREEK VOCAL NOTATION SYMBOL-50
+1D219;AL # GREEK VOCAL NOTATION SYMBOL-51
+1D21A;AL # GREEK VOCAL NOTATION SYMBOL-52
+1D21B;AL # GREEK VOCAL NOTATION SYMBOL-53
+1D21C;AL # GREEK VOCAL NOTATION SYMBOL-54
+1D21D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241;AL # GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242;CM # COMBINING GREEK MUSICAL TRISEME
+1D243;CM # COMBINING GREEK MUSICAL TETRASEME
+1D244;CM # COMBINING GREEK MUSICAL PENTASEME
+1D245;AL # GREEK MUSICAL LEIMMA
+1D300;AL # MONOGRAM FOR EARTH
+1D301;AL # DIGRAM FOR HEAVENLY EARTH
+1D302;AL # DIGRAM FOR HUMAN EARTH
+1D303;AL # DIGRAM FOR EARTHLY HEAVEN
+1D304;AL # DIGRAM FOR EARTHLY HUMAN
+1D305;AL # DIGRAM FOR EARTH
+1D306;AL # TETRAGRAM FOR CENTRE
+1D307;AL # TETRAGRAM FOR FULL CIRCLE
+1D308;AL # TETRAGRAM FOR MIRED
+1D309;AL # TETRAGRAM FOR BARRIER
+1D30A;AL # TETRAGRAM FOR KEEPING SMALL
+1D30B;AL # TETRAGRAM FOR CONTRARIETY
+1D30C;AL # TETRAGRAM FOR ASCENT
+1D30D;AL # TETRAGRAM FOR OPPOSITION
+1D30E;AL # TETRAGRAM FOR BRANCHING OUT
+1D30F;AL # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310;AL # TETRAGRAM FOR DIVERGENCE
+1D311;AL # TETRAGRAM FOR YOUTHFULNESS
+1D312;AL # TETRAGRAM FOR INCREASE
+1D313;AL # TETRAGRAM FOR PENETRATION
+1D314;AL # TETRAGRAM FOR REACH
+1D315;AL # TETRAGRAM FOR CONTACT
+1D316;AL # TETRAGRAM FOR HOLDING BACK
+1D317;AL # TETRAGRAM FOR WAITING
+1D318;AL # TETRAGRAM FOR FOLLOWING
+1D319;AL # TETRAGRAM FOR ADVANCE
+1D31A;AL # TETRAGRAM FOR RELEASE
+1D31B;AL # TETRAGRAM FOR RESISTANCE
+1D31C;AL # TETRAGRAM FOR EASE
+1D31D;AL # TETRAGRAM FOR JOY
+1D31E;AL # TETRAGRAM FOR CONTENTION
+1D31F;AL # TETRAGRAM FOR ENDEAVOUR
+1D320;AL # TETRAGRAM FOR DUTIES
+1D321;AL # TETRAGRAM FOR CHANGE
+1D322;AL # TETRAGRAM FOR DECISIVENESS
+1D323;AL # TETRAGRAM FOR BOLD RESOLUTION
+1D324;AL # TETRAGRAM FOR PACKING
+1D325;AL # TETRAGRAM FOR LEGION
+1D326;AL # TETRAGRAM FOR CLOSENESS
+1D327;AL # TETRAGRAM FOR KINSHIP
+1D328;AL # TETRAGRAM FOR GATHERING
+1D329;AL # TETRAGRAM FOR STRENGTH
+1D32A;AL # TETRAGRAM FOR PURITY
+1D32B;AL # TETRAGRAM FOR FULLNESS
+1D32C;AL # TETRAGRAM FOR RESIDENCE
+1D32D;AL # TETRAGRAM FOR LAW OR MODEL
+1D32E;AL # TETRAGRAM FOR RESPONSE
+1D32F;AL # TETRAGRAM FOR GOING TO MEET
+1D330;AL # TETRAGRAM FOR ENCOUNTERS
+1D331;AL # TETRAGRAM FOR STOVE
+1D332;AL # TETRAGRAM FOR GREATNESS
+1D333;AL # TETRAGRAM FOR ENLARGEMENT
+1D334;AL # TETRAGRAM FOR PATTERN
+1D335;AL # TETRAGRAM FOR RITUAL
+1D336;AL # TETRAGRAM FOR FLIGHT
+1D337;AL # TETRAGRAM FOR VASTNESS OR WASTING
+1D338;AL # TETRAGRAM FOR CONSTANCY
+1D339;AL # TETRAGRAM FOR MEASURE
+1D33A;AL # TETRAGRAM FOR ETERNITY
+1D33B;AL # TETRAGRAM FOR UNITY
+1D33C;AL # TETRAGRAM FOR DIMINISHMENT
+1D33D;AL # TETRAGRAM FOR CLOSED MOUTH
+1D33E;AL # TETRAGRAM FOR GUARDEDNESS
+1D33F;AL # TETRAGRAM FOR GATHERING IN
+1D340;AL # TETRAGRAM FOR MASSING
+1D341;AL # TETRAGRAM FOR ACCUMULATION
+1D342;AL # TETRAGRAM FOR EMBELLISHMENT
+1D343;AL # TETRAGRAM FOR DOUBT
+1D344;AL # TETRAGRAM FOR WATCH
+1D345;AL # TETRAGRAM FOR SINKING
+1D346;AL # TETRAGRAM FOR INNER
+1D347;AL # TETRAGRAM FOR DEPARTURE
+1D348;AL # TETRAGRAM FOR DARKENING
+1D349;AL # TETRAGRAM FOR DIMMING
+1D34A;AL # TETRAGRAM FOR EXHAUSTION
+1D34B;AL # TETRAGRAM FOR SEVERANCE
+1D34C;AL # TETRAGRAM FOR STOPPAGE
+1D34D;AL # TETRAGRAM FOR HARDNESS
+1D34E;AL # TETRAGRAM FOR COMPLETION
+1D34F;AL # TETRAGRAM FOR CLOSURE
+1D350;AL # TETRAGRAM FOR FAILURE
+1D351;AL # TETRAGRAM FOR AGGRAVATION
+1D352;AL # TETRAGRAM FOR COMPLIANCE
+1D353;AL # TETRAGRAM FOR ON THE VERGE
+1D354;AL # TETRAGRAM FOR DIFFICULTIES
+1D355;AL # TETRAGRAM FOR LABOURING
+1D356;AL # TETRAGRAM FOR FOSTERING
+1D400;AL # MATHEMATICAL BOLD CAPITAL A
+1D401;AL # MATHEMATICAL BOLD CAPITAL B
+1D402;AL # MATHEMATICAL BOLD CAPITAL C
+1D403;AL # MATHEMATICAL BOLD CAPITAL D
+1D404;AL # MATHEMATICAL BOLD CAPITAL E
+1D405;AL # MATHEMATICAL BOLD CAPITAL F
+1D406;AL # MATHEMATICAL BOLD CAPITAL G
+1D407;AL # MATHEMATICAL BOLD CAPITAL H
+1D408;AL # MATHEMATICAL BOLD CAPITAL I
+1D409;AL # MATHEMATICAL BOLD CAPITAL J
+1D40A;AL # MATHEMATICAL BOLD CAPITAL K
+1D40B;AL # MATHEMATICAL BOLD CAPITAL L
+1D40C;AL # MATHEMATICAL BOLD CAPITAL M
+1D40D;AL # MATHEMATICAL BOLD CAPITAL N
+1D40E;AL # MATHEMATICAL BOLD CAPITAL O
+1D40F;AL # MATHEMATICAL BOLD CAPITAL P
+1D410;AL # MATHEMATICAL BOLD CAPITAL Q
+1D411;AL # MATHEMATICAL BOLD CAPITAL R
+1D412;AL # MATHEMATICAL BOLD CAPITAL S
+1D413;AL # MATHEMATICAL BOLD CAPITAL T
+1D414;AL # MATHEMATICAL BOLD CAPITAL U
+1D415;AL # MATHEMATICAL BOLD CAPITAL V
+1D416;AL # MATHEMATICAL BOLD CAPITAL W
+1D417;AL # MATHEMATICAL BOLD CAPITAL X
+1D418;AL # MATHEMATICAL BOLD CAPITAL Y
+1D419;AL # MATHEMATICAL BOLD CAPITAL Z
+1D41A;AL # MATHEMATICAL BOLD SMALL A
+1D41B;AL # MATHEMATICAL BOLD SMALL B
+1D41C;AL # MATHEMATICAL BOLD SMALL C
+1D41D;AL # MATHEMATICAL BOLD SMALL D
+1D41E;AL # MATHEMATICAL BOLD SMALL E
+1D41F;AL # MATHEMATICAL BOLD SMALL F
+1D420;AL # MATHEMATICAL BOLD SMALL G
+1D421;AL # MATHEMATICAL BOLD SMALL H
+1D422;AL # MATHEMATICAL BOLD SMALL I
+1D423;AL # MATHEMATICAL BOLD SMALL J
+1D424;AL # MATHEMATICAL BOLD SMALL K
+1D425;AL # MATHEMATICAL BOLD SMALL L
+1D426;AL # MATHEMATICAL BOLD SMALL M
+1D427;AL # MATHEMATICAL BOLD SMALL N
+1D428;AL # MATHEMATICAL BOLD SMALL O
+1D429;AL # MATHEMATICAL BOLD SMALL P
+1D42A;AL # MATHEMATICAL BOLD SMALL Q
+1D42B;AL # MATHEMATICAL BOLD SMALL R
+1D42C;AL # MATHEMATICAL BOLD SMALL S
+1D42D;AL # MATHEMATICAL BOLD SMALL T
+1D42E;AL # MATHEMATICAL BOLD SMALL U
+1D42F;AL # MATHEMATICAL BOLD SMALL V
+1D430;AL # MATHEMATICAL BOLD SMALL W
+1D431;AL # MATHEMATICAL BOLD SMALL X
+1D432;AL # MATHEMATICAL BOLD SMALL Y
+1D433;AL # MATHEMATICAL BOLD SMALL Z
+1D434;AL # MATHEMATICAL ITALIC CAPITAL A
+1D435;AL # MATHEMATICAL ITALIC CAPITAL B
+1D436;AL # MATHEMATICAL ITALIC CAPITAL C
+1D437;AL # MATHEMATICAL ITALIC CAPITAL D
+1D438;AL # MATHEMATICAL ITALIC CAPITAL E
+1D439;AL # MATHEMATICAL ITALIC CAPITAL F
+1D43A;AL # MATHEMATICAL ITALIC CAPITAL G
+1D43B;AL # MATHEMATICAL ITALIC CAPITAL H
+1D43C;AL # MATHEMATICAL ITALIC CAPITAL I
+1D43D;AL # MATHEMATICAL ITALIC CAPITAL J
+1D43E;AL # MATHEMATICAL ITALIC CAPITAL K
+1D43F;AL # MATHEMATICAL ITALIC CAPITAL L
+1D440;AL # MATHEMATICAL ITALIC CAPITAL M
+1D441;AL # MATHEMATICAL ITALIC CAPITAL N
+1D442;AL # MATHEMATICAL ITALIC CAPITAL O
+1D443;AL # MATHEMATICAL ITALIC CAPITAL P
+1D444;AL # MATHEMATICAL ITALIC CAPITAL Q
+1D445;AL # MATHEMATICAL ITALIC CAPITAL R
+1D446;AL # MATHEMATICAL ITALIC CAPITAL S
+1D447;AL # MATHEMATICAL ITALIC CAPITAL T
+1D448;AL # MATHEMATICAL ITALIC CAPITAL U
+1D449;AL # MATHEMATICAL ITALIC CAPITAL V
+1D44A;AL # MATHEMATICAL ITALIC CAPITAL W
+1D44B;AL # MATHEMATICAL ITALIC CAPITAL X
+1D44C;AL # MATHEMATICAL ITALIC CAPITAL Y
+1D44D;AL # MATHEMATICAL ITALIC CAPITAL Z
+1D44E;AL # MATHEMATICAL ITALIC SMALL A
+1D44F;AL # MATHEMATICAL ITALIC SMALL B
+1D450;AL # MATHEMATICAL ITALIC SMALL C
+1D451;AL # MATHEMATICAL ITALIC SMALL D
+1D452;AL # MATHEMATICAL ITALIC SMALL E
+1D453;AL # MATHEMATICAL ITALIC SMALL F
+1D454;AL # MATHEMATICAL ITALIC SMALL G
+1D456;AL # MATHEMATICAL ITALIC SMALL I
+1D457;AL # MATHEMATICAL ITALIC SMALL J
+1D458;AL # MATHEMATICAL ITALIC SMALL K
+1D459;AL # MATHEMATICAL ITALIC SMALL L
+1D45A;AL # MATHEMATICAL ITALIC SMALL M
+1D45B;AL # MATHEMATICAL ITALIC SMALL N
+1D45C;AL # MATHEMATICAL ITALIC SMALL O
+1D45D;AL # MATHEMATICAL ITALIC SMALL P
+1D45E;AL # MATHEMATICAL ITALIC SMALL Q
+1D45F;AL # MATHEMATICAL ITALIC SMALL R
+1D460;AL # MATHEMATICAL ITALIC SMALL S
+1D461;AL # MATHEMATICAL ITALIC SMALL T
+1D462;AL # MATHEMATICAL ITALIC SMALL U
+1D463;AL # MATHEMATICAL ITALIC SMALL V
+1D464;AL # MATHEMATICAL ITALIC SMALL W
+1D465;AL # MATHEMATICAL ITALIC SMALL X
+1D466;AL # MATHEMATICAL ITALIC SMALL Y
+1D467;AL # MATHEMATICAL ITALIC SMALL Z
+1D468;AL # MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469;AL # MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A;AL # MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B;AL # MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C;AL # MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D;AL # MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E;AL # MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F;AL # MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470;AL # MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471;AL # MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472;AL # MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473;AL # MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474;AL # MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475;AL # MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476;AL # MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477;AL # MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478;AL # MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479;AL # MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A;AL # MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B;AL # MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C;AL # MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D;AL # MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E;AL # MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F;AL # MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480;AL # MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481;AL # MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482;AL # MATHEMATICAL BOLD ITALIC SMALL A
+1D483;AL # MATHEMATICAL BOLD ITALIC SMALL B
+1D484;AL # MATHEMATICAL BOLD ITALIC SMALL C
+1D485;AL # MATHEMATICAL BOLD ITALIC SMALL D
+1D486;AL # MATHEMATICAL BOLD ITALIC SMALL E
+1D487;AL # MATHEMATICAL BOLD ITALIC SMALL F
+1D488;AL # MATHEMATICAL BOLD ITALIC SMALL G
+1D489;AL # MATHEMATICAL BOLD ITALIC SMALL H
+1D48A;AL # MATHEMATICAL BOLD ITALIC SMALL I
+1D48B;AL # MATHEMATICAL BOLD ITALIC SMALL J
+1D48C;AL # MATHEMATICAL BOLD ITALIC SMALL K
+1D48D;AL # MATHEMATICAL BOLD ITALIC SMALL L
+1D48E;AL # MATHEMATICAL BOLD ITALIC SMALL M
+1D48F;AL # MATHEMATICAL BOLD ITALIC SMALL N
+1D490;AL # MATHEMATICAL BOLD ITALIC SMALL O
+1D491;AL # MATHEMATICAL BOLD ITALIC SMALL P
+1D492;AL # MATHEMATICAL BOLD ITALIC SMALL Q
+1D493;AL # MATHEMATICAL BOLD ITALIC SMALL R
+1D494;AL # MATHEMATICAL BOLD ITALIC SMALL S
+1D495;AL # MATHEMATICAL BOLD ITALIC SMALL T
+1D496;AL # MATHEMATICAL BOLD ITALIC SMALL U
+1D497;AL # MATHEMATICAL BOLD ITALIC SMALL V
+1D498;AL # MATHEMATICAL BOLD ITALIC SMALL W
+1D499;AL # MATHEMATICAL BOLD ITALIC SMALL X
+1D49A;AL # MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B;AL # MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C;AL # MATHEMATICAL SCRIPT CAPITAL A
+1D49E;AL # MATHEMATICAL SCRIPT CAPITAL C
+1D49F;AL # MATHEMATICAL SCRIPT CAPITAL D
+1D4A2;AL # MATHEMATICAL SCRIPT CAPITAL G
+1D4A5;AL # MATHEMATICAL SCRIPT CAPITAL J
+1D4A6;AL # MATHEMATICAL SCRIPT CAPITAL K
+1D4A9;AL # MATHEMATICAL SCRIPT CAPITAL N
+1D4AA;AL # MATHEMATICAL SCRIPT CAPITAL O
+1D4AB;AL # MATHEMATICAL SCRIPT CAPITAL P
+1D4AC;AL # MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE;AL # MATHEMATICAL SCRIPT CAPITAL S
+1D4AF;AL # MATHEMATICAL SCRIPT CAPITAL T
+1D4B0;AL # MATHEMATICAL SCRIPT CAPITAL U
+1D4B1;AL # MATHEMATICAL SCRIPT CAPITAL V
+1D4B2;AL # MATHEMATICAL SCRIPT CAPITAL W
+1D4B3;AL # MATHEMATICAL SCRIPT CAPITAL X
+1D4B4;AL # MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5;AL # MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6;AL # MATHEMATICAL SCRIPT SMALL A
+1D4B7;AL # MATHEMATICAL SCRIPT SMALL B
+1D4B8;AL # MATHEMATICAL SCRIPT SMALL C
+1D4B9;AL # MATHEMATICAL SCRIPT SMALL D
+1D4BB;AL # MATHEMATICAL SCRIPT SMALL F
+1D4BD;AL # MATHEMATICAL SCRIPT SMALL H
+1D4BE;AL # MATHEMATICAL SCRIPT SMALL I
+1D4BF;AL # MATHEMATICAL SCRIPT SMALL J
+1D4C0;AL # MATHEMATICAL SCRIPT SMALL K
+1D4C1;AL # MATHEMATICAL SCRIPT SMALL L
+1D4C2;AL # MATHEMATICAL SCRIPT SMALL M
+1D4C3;AL # MATHEMATICAL SCRIPT SMALL N
+1D4C5;AL # MATHEMATICAL SCRIPT SMALL P
+1D4C6;AL # MATHEMATICAL SCRIPT SMALL Q
+1D4C7;AL # MATHEMATICAL SCRIPT SMALL R
+1D4C8;AL # MATHEMATICAL SCRIPT SMALL S
+1D4C9;AL # MATHEMATICAL SCRIPT SMALL T
+1D4CA;AL # MATHEMATICAL SCRIPT SMALL U
+1D4CB;AL # MATHEMATICAL SCRIPT SMALL V
+1D4CC;AL # MATHEMATICAL SCRIPT SMALL W
+1D4CD;AL # MATHEMATICAL SCRIPT SMALL X
+1D4CE;AL # MATHEMATICAL SCRIPT SMALL Y
+1D4CF;AL # MATHEMATICAL SCRIPT SMALL Z
+1D4D0;AL # MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1;AL # MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2;AL # MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3;AL # MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4;AL # MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5;AL # MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6;AL # MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7;AL # MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8;AL # MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9;AL # MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA;AL # MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB;AL # MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC;AL # MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD;AL # MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE;AL # MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF;AL # MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0;AL # MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1;AL # MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2;AL # MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3;AL # MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4;AL # MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5;AL # MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6;AL # MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7;AL # MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8;AL # MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9;AL # MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA;AL # MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB;AL # MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC;AL # MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED;AL # MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE;AL # MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF;AL # MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0;AL # MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1;AL # MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2;AL # MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3;AL # MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4;AL # MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5;AL # MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6;AL # MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7;AL # MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8;AL # MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9;AL # MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA;AL # MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB;AL # MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC;AL # MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD;AL # MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE;AL # MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF;AL # MATHEMATICAL BOLD SCRIPT SMALL V
+1D500;AL # MATHEMATICAL BOLD SCRIPT SMALL W
+1D501;AL # MATHEMATICAL BOLD SCRIPT SMALL X
+1D502;AL # MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503;AL # MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504;AL # MATHEMATICAL FRAKTUR CAPITAL A
+1D505;AL # MATHEMATICAL FRAKTUR CAPITAL B
+1D507;AL # MATHEMATICAL FRAKTUR CAPITAL D
+1D508;AL # MATHEMATICAL FRAKTUR CAPITAL E
+1D509;AL # MATHEMATICAL FRAKTUR CAPITAL F
+1D50A;AL # MATHEMATICAL FRAKTUR CAPITAL G
+1D50D;AL # MATHEMATICAL FRAKTUR CAPITAL J
+1D50E;AL # MATHEMATICAL FRAKTUR CAPITAL K
+1D50F;AL # MATHEMATICAL FRAKTUR CAPITAL L
+1D510;AL # MATHEMATICAL FRAKTUR CAPITAL M
+1D511;AL # MATHEMATICAL FRAKTUR CAPITAL N
+1D512;AL # MATHEMATICAL FRAKTUR CAPITAL O
+1D513;AL # MATHEMATICAL FRAKTUR CAPITAL P
+1D514;AL # MATHEMATICAL FRAKTUR CAPITAL Q
+1D516;AL # MATHEMATICAL FRAKTUR CAPITAL S
+1D517;AL # MATHEMATICAL FRAKTUR CAPITAL T
+1D518;AL # MATHEMATICAL FRAKTUR CAPITAL U
+1D519;AL # MATHEMATICAL FRAKTUR CAPITAL V
+1D51A;AL # MATHEMATICAL FRAKTUR CAPITAL W
+1D51B;AL # MATHEMATICAL FRAKTUR CAPITAL X
+1D51C;AL # MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E;AL # MATHEMATICAL FRAKTUR SMALL A
+1D51F;AL # MATHEMATICAL FRAKTUR SMALL B
+1D520;AL # MATHEMATICAL FRAKTUR SMALL C
+1D521;AL # MATHEMATICAL FRAKTUR SMALL D
+1D522;AL # MATHEMATICAL FRAKTUR SMALL E
+1D523;AL # MATHEMATICAL FRAKTUR SMALL F
+1D524;AL # MATHEMATICAL FRAKTUR SMALL G
+1D525;AL # MATHEMATICAL FRAKTUR SMALL H
+1D526;AL # MATHEMATICAL FRAKTUR SMALL I
+1D527;AL # MATHEMATICAL FRAKTUR SMALL J
+1D528;AL # MATHEMATICAL FRAKTUR SMALL K
+1D529;AL # MATHEMATICAL FRAKTUR SMALL L
+1D52A;AL # MATHEMATICAL FRAKTUR SMALL M
+1D52B;AL # MATHEMATICAL FRAKTUR SMALL N
+1D52C;AL # MATHEMATICAL FRAKTUR SMALL O
+1D52D;AL # MATHEMATICAL FRAKTUR SMALL P
+1D52E;AL # MATHEMATICAL FRAKTUR SMALL Q
+1D52F;AL # MATHEMATICAL FRAKTUR SMALL R
+1D530;AL # MATHEMATICAL FRAKTUR SMALL S
+1D531;AL # MATHEMATICAL FRAKTUR SMALL T
+1D532;AL # MATHEMATICAL FRAKTUR SMALL U
+1D533;AL # MATHEMATICAL FRAKTUR SMALL V
+1D534;AL # MATHEMATICAL FRAKTUR SMALL W
+1D535;AL # MATHEMATICAL FRAKTUR SMALL X
+1D536;AL # MATHEMATICAL FRAKTUR SMALL Y
+1D537;AL # MATHEMATICAL FRAKTUR SMALL Z
+1D538;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550;AL # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552;AL # MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553;AL # MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554;AL # MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555;AL # MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556;AL # MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557;AL # MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558;AL # MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559;AL # MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A;AL # MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B;AL # MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C;AL # MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D;AL # MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E;AL # MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F;AL # MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560;AL # MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561;AL # MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562;AL # MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563;AL # MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564;AL # MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565;AL # MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566;AL # MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567;AL # MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568;AL # MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569;AL # MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A;AL # MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B;AL # MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585;AL # MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586;AL # MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587;AL # MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588;AL # MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589;AL # MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A;AL # MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B;AL # MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C;AL # MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D;AL # MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E;AL # MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F;AL # MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590;AL # MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591;AL # MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592;AL # MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593;AL # MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594;AL # MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595;AL # MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596;AL # MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597;AL # MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598;AL # MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599;AL # MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A;AL # MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B;AL # MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C;AL # MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D;AL # MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E;AL # MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F;AL # MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0;AL # MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1;AL # MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2;AL # MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3;AL # MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4;AL # MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5;AL # MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6;AL # MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7;AL # MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8;AL # MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9;AL # MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA;AL # MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB;AL # MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC;AL # MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD;AL # MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE;AL # MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF;AL # MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0;AL # MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1;AL # MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2;AL # MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3;AL # MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4;AL # MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5;AL # MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6;AL # MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7;AL # MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8;AL # MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9;AL # MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA;AL # MATHEMATICAL SANS-SERIF SMALL A
+1D5BB;AL # MATHEMATICAL SANS-SERIF SMALL B
+1D5BC;AL # MATHEMATICAL SANS-SERIF SMALL C
+1D5BD;AL # MATHEMATICAL SANS-SERIF SMALL D
+1D5BE;AL # MATHEMATICAL SANS-SERIF SMALL E
+1D5BF;AL # MATHEMATICAL SANS-SERIF SMALL F
+1D5C0;AL # MATHEMATICAL SANS-SERIF SMALL G
+1D5C1;AL # MATHEMATICAL SANS-SERIF SMALL H
+1D5C2;AL # MATHEMATICAL SANS-SERIF SMALL I
+1D5C3;AL # MATHEMATICAL SANS-SERIF SMALL J
+1D5C4;AL # MATHEMATICAL SANS-SERIF SMALL K
+1D5C5;AL # MATHEMATICAL SANS-SERIF SMALL L
+1D5C6;AL # MATHEMATICAL SANS-SERIF SMALL M
+1D5C7;AL # MATHEMATICAL SANS-SERIF SMALL N
+1D5C8;AL # MATHEMATICAL SANS-SERIF SMALL O
+1D5C9;AL # MATHEMATICAL SANS-SERIF SMALL P
+1D5CA;AL # MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB;AL # MATHEMATICAL SANS-SERIF SMALL R
+1D5CC;AL # MATHEMATICAL SANS-SERIF SMALL S
+1D5CD;AL # MATHEMATICAL SANS-SERIF SMALL T
+1D5CE;AL # MATHEMATICAL SANS-SERIF SMALL U
+1D5CF;AL # MATHEMATICAL SANS-SERIF SMALL V
+1D5D0;AL # MATHEMATICAL SANS-SERIF SMALL W
+1D5D1;AL # MATHEMATICAL SANS-SERIF SMALL X
+1D5D2;AL # MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3;AL # MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE;AL # MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF;AL # MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0;AL # MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1;AL # MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2;AL # MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3;AL # MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4;AL # MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5;AL # MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6;AL # MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7;AL # MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8;AL # MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9;AL # MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA;AL # MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB;AL # MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC;AL # MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD;AL # MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE;AL # MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF;AL # MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600;AL # MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601;AL # MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602;AL # MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603;AL # MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604;AL # MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605;AL # MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606;AL # MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607;AL # MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621;AL # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B;AL # MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670;AL # MATHEMATICAL MONOSPACE CAPITAL A
+1D671;AL # MATHEMATICAL MONOSPACE CAPITAL B
+1D672;AL # MATHEMATICAL MONOSPACE CAPITAL C
+1D673;AL # MATHEMATICAL MONOSPACE CAPITAL D
+1D674;AL # MATHEMATICAL MONOSPACE CAPITAL E
+1D675;AL # MATHEMATICAL MONOSPACE CAPITAL F
+1D676;AL # MATHEMATICAL MONOSPACE CAPITAL G
+1D677;AL # MATHEMATICAL MONOSPACE CAPITAL H
+1D678;AL # MATHEMATICAL MONOSPACE CAPITAL I
+1D679;AL # MATHEMATICAL MONOSPACE CAPITAL J
+1D67A;AL # MATHEMATICAL MONOSPACE CAPITAL K
+1D67B;AL # MATHEMATICAL MONOSPACE CAPITAL L
+1D67C;AL # MATHEMATICAL MONOSPACE CAPITAL M
+1D67D;AL # MATHEMATICAL MONOSPACE CAPITAL N
+1D67E;AL # MATHEMATICAL MONOSPACE CAPITAL O
+1D67F;AL # MATHEMATICAL MONOSPACE CAPITAL P
+1D680;AL # MATHEMATICAL MONOSPACE CAPITAL Q
+1D681;AL # MATHEMATICAL MONOSPACE CAPITAL R
+1D682;AL # MATHEMATICAL MONOSPACE CAPITAL S
+1D683;AL # MATHEMATICAL MONOSPACE CAPITAL T
+1D684;AL # MATHEMATICAL MONOSPACE CAPITAL U
+1D685;AL # MATHEMATICAL MONOSPACE CAPITAL V
+1D686;AL # MATHEMATICAL MONOSPACE CAPITAL W
+1D687;AL # MATHEMATICAL MONOSPACE CAPITAL X
+1D688;AL # MATHEMATICAL MONOSPACE CAPITAL Y
+1D689;AL # MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A;AL # MATHEMATICAL MONOSPACE SMALL A
+1D68B;AL # MATHEMATICAL MONOSPACE SMALL B
+1D68C;AL # MATHEMATICAL MONOSPACE SMALL C
+1D68D;AL # MATHEMATICAL MONOSPACE SMALL D
+1D68E;AL # MATHEMATICAL MONOSPACE SMALL E
+1D68F;AL # MATHEMATICAL MONOSPACE SMALL F
+1D690;AL # MATHEMATICAL MONOSPACE SMALL G
+1D691;AL # MATHEMATICAL MONOSPACE SMALL H
+1D692;AL # MATHEMATICAL MONOSPACE SMALL I
+1D693;AL # MATHEMATICAL MONOSPACE SMALL J
+1D694;AL # MATHEMATICAL MONOSPACE SMALL K
+1D695;AL # MATHEMATICAL MONOSPACE SMALL L
+1D696;AL # MATHEMATICAL MONOSPACE SMALL M
+1D697;AL # MATHEMATICAL MONOSPACE SMALL N
+1D698;AL # MATHEMATICAL MONOSPACE SMALL O
+1D699;AL # MATHEMATICAL MONOSPACE SMALL P
+1D69A;AL # MATHEMATICAL MONOSPACE SMALL Q
+1D69B;AL # MATHEMATICAL MONOSPACE SMALL R
+1D69C;AL # MATHEMATICAL MONOSPACE SMALL S
+1D69D;AL # MATHEMATICAL MONOSPACE SMALL T
+1D69E;AL # MATHEMATICAL MONOSPACE SMALL U
+1D69F;AL # MATHEMATICAL MONOSPACE SMALL V
+1D6A0;AL # MATHEMATICAL MONOSPACE SMALL W
+1D6A1;AL # MATHEMATICAL MONOSPACE SMALL X
+1D6A2;AL # MATHEMATICAL MONOSPACE SMALL Y
+1D6A3;AL # MATHEMATICAL MONOSPACE SMALL Z
+1D6A4;AL # MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5;AL # MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8;AL # MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9;AL # MATHEMATICAL BOLD CAPITAL BETA
+1D6AA;AL # MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB;AL # MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC;AL # MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD;AL # MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE;AL # MATHEMATICAL BOLD CAPITAL ETA
+1D6AF;AL # MATHEMATICAL BOLD CAPITAL THETA
+1D6B0;AL # MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1;AL # MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2;AL # MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3;AL # MATHEMATICAL BOLD CAPITAL MU
+1D6B4;AL # MATHEMATICAL BOLD CAPITAL NU
+1D6B5;AL # MATHEMATICAL BOLD CAPITAL XI
+1D6B6;AL # MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7;AL # MATHEMATICAL BOLD CAPITAL PI
+1D6B8;AL # MATHEMATICAL BOLD CAPITAL RHO
+1D6B9;AL # MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA;AL # MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB;AL # MATHEMATICAL BOLD CAPITAL TAU
+1D6BC;AL # MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD;AL # MATHEMATICAL BOLD CAPITAL PHI
+1D6BE;AL # MATHEMATICAL BOLD CAPITAL CHI
+1D6BF;AL # MATHEMATICAL BOLD CAPITAL PSI
+1D6C0;AL # MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1;AL # MATHEMATICAL BOLD NABLA
+1D6C2;AL # MATHEMATICAL BOLD SMALL ALPHA
+1D6C3;AL # MATHEMATICAL BOLD SMALL BETA
+1D6C4;AL # MATHEMATICAL BOLD SMALL GAMMA
+1D6C5;AL # MATHEMATICAL BOLD SMALL DELTA
+1D6C6;AL # MATHEMATICAL BOLD SMALL EPSILON
+1D6C7;AL # MATHEMATICAL BOLD SMALL ZETA
+1D6C8;AL # MATHEMATICAL BOLD SMALL ETA
+1D6C9;AL # MATHEMATICAL BOLD SMALL THETA
+1D6CA;AL # MATHEMATICAL BOLD SMALL IOTA
+1D6CB;AL # MATHEMATICAL BOLD SMALL KAPPA
+1D6CC;AL # MATHEMATICAL BOLD SMALL LAMDA
+1D6CD;AL # MATHEMATICAL BOLD SMALL MU
+1D6CE;AL # MATHEMATICAL BOLD SMALL NU
+1D6CF;AL # MATHEMATICAL BOLD SMALL XI
+1D6D0;AL # MATHEMATICAL BOLD SMALL OMICRON
+1D6D1;AL # MATHEMATICAL BOLD SMALL PI
+1D6D2;AL # MATHEMATICAL BOLD SMALL RHO
+1D6D3;AL # MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4;AL # MATHEMATICAL BOLD SMALL SIGMA
+1D6D5;AL # MATHEMATICAL BOLD SMALL TAU
+1D6D6;AL # MATHEMATICAL BOLD SMALL UPSILON
+1D6D7;AL # MATHEMATICAL BOLD SMALL PHI
+1D6D8;AL # MATHEMATICAL BOLD SMALL CHI
+1D6D9;AL # MATHEMATICAL BOLD SMALL PSI
+1D6DA;AL # MATHEMATICAL BOLD SMALL OMEGA
+1D6DB;AL # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC;AL # MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD;AL # MATHEMATICAL BOLD THETA SYMBOL
+1D6DE;AL # MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF;AL # MATHEMATICAL BOLD PHI SYMBOL
+1D6E0;AL # MATHEMATICAL BOLD RHO SYMBOL
+1D6E1;AL # MATHEMATICAL BOLD PI SYMBOL
+1D6E2;AL # MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3;AL # MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4;AL # MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5;AL # MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6;AL # MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7;AL # MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8;AL # MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9;AL # MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA;AL # MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB;AL # MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC;AL # MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED;AL # MATHEMATICAL ITALIC CAPITAL MU
+1D6EE;AL # MATHEMATICAL ITALIC CAPITAL NU
+1D6EF;AL # MATHEMATICAL ITALIC CAPITAL XI
+1D6F0;AL # MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1;AL # MATHEMATICAL ITALIC CAPITAL PI
+1D6F2;AL # MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3;AL # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4;AL # MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5;AL # MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6;AL # MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7;AL # MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8;AL # MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9;AL # MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA;AL # MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB;AL # MATHEMATICAL ITALIC NABLA
+1D6FC;AL # MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD;AL # MATHEMATICAL ITALIC SMALL BETA
+1D6FE;AL # MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF;AL # MATHEMATICAL ITALIC SMALL DELTA
+1D700;AL # MATHEMATICAL ITALIC SMALL EPSILON
+1D701;AL # MATHEMATICAL ITALIC SMALL ZETA
+1D702;AL # MATHEMATICAL ITALIC SMALL ETA
+1D703;AL # MATHEMATICAL ITALIC SMALL THETA
+1D704;AL # MATHEMATICAL ITALIC SMALL IOTA
+1D705;AL # MATHEMATICAL ITALIC SMALL KAPPA
+1D706;AL # MATHEMATICAL ITALIC SMALL LAMDA
+1D707;AL # MATHEMATICAL ITALIC SMALL MU
+1D708;AL # MATHEMATICAL ITALIC SMALL NU
+1D709;AL # MATHEMATICAL ITALIC SMALL XI
+1D70A;AL # MATHEMATICAL ITALIC SMALL OMICRON
+1D70B;AL # MATHEMATICAL ITALIC SMALL PI
+1D70C;AL # MATHEMATICAL ITALIC SMALL RHO
+1D70D;AL # MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E;AL # MATHEMATICAL ITALIC SMALL SIGMA
+1D70F;AL # MATHEMATICAL ITALIC SMALL TAU
+1D710;AL # MATHEMATICAL ITALIC SMALL UPSILON
+1D711;AL # MATHEMATICAL ITALIC SMALL PHI
+1D712;AL # MATHEMATICAL ITALIC SMALL CHI
+1D713;AL # MATHEMATICAL ITALIC SMALL PSI
+1D714;AL # MATHEMATICAL ITALIC SMALL OMEGA
+1D715;AL # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716;AL # MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717;AL # MATHEMATICAL ITALIC THETA SYMBOL
+1D718;AL # MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719;AL # MATHEMATICAL ITALIC PHI SYMBOL
+1D71A;AL # MATHEMATICAL ITALIC RHO SYMBOL
+1D71B;AL # MATHEMATICAL ITALIC PI SYMBOL
+1D71C;AL # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D;AL # MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E;AL # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F;AL # MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720;AL # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721;AL # MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722;AL # MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723;AL # MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724;AL # MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725;AL # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726;AL # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727;AL # MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728;AL # MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729;AL # MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A;AL # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B;AL # MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C;AL # MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D;AL # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E;AL # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F;AL # MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730;AL # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731;AL # MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732;AL # MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733;AL # MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734;AL # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735;AL # MATHEMATICAL BOLD ITALIC NABLA
+1D736;AL # MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737;AL # MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738;AL # MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739;AL # MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A;AL # MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B;AL # MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C;AL # MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D;AL # MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E;AL # MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F;AL # MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740;AL # MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741;AL # MATHEMATICAL BOLD ITALIC SMALL MU
+1D742;AL # MATHEMATICAL BOLD ITALIC SMALL NU
+1D743;AL # MATHEMATICAL BOLD ITALIC SMALL XI
+1D744;AL # MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745;AL # MATHEMATICAL BOLD ITALIC SMALL PI
+1D746;AL # MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747;AL # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748;AL # MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749;AL # MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A;AL # MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B;AL # MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C;AL # MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D;AL # MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E;AL # MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F;AL # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750;AL # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751;AL # MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752;AL # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753;AL # MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754;AL # MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755;AL # MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E;AL # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F;AL # MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770;AL # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771;AL # MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772;AL # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773;AL # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774;AL # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775;AL # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776;AL # MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777;AL # MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778;AL # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779;AL # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A;AL # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B;AL # MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C;AL # MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D;AL # MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E;AL # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F;AL # MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780;AL # MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781;AL # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782;AL # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783;AL # MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784;AL # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785;AL # MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786;AL # MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787;AL # MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788;AL # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789;AL # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A;AL # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B;AL # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C;AL # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D;AL # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E;AL # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F;AL # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9;AL # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE;NU # MATHEMATICAL BOLD DIGIT ZERO
+1D7CF;NU # MATHEMATICAL BOLD DIGIT ONE
+1D7D0;NU # MATHEMATICAL BOLD DIGIT TWO
+1D7D1;NU # MATHEMATICAL BOLD DIGIT THREE
+1D7D2;NU # MATHEMATICAL BOLD DIGIT FOUR
+1D7D3;NU # MATHEMATICAL BOLD DIGIT FIVE
+1D7D4;NU # MATHEMATICAL BOLD DIGIT SIX
+1D7D5;NU # MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6;NU # MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7;NU # MATHEMATICAL BOLD DIGIT NINE
+1D7D8;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1;NU # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2;NU # MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3;NU # MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4;NU # MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5;NU # MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6;NU # MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7;NU # MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8;NU # MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9;NU # MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA;NU # MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB;NU # MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5;NU # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6;NU # MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7;NU # MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8;NU # MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9;NU # MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA;NU # MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB;NU # MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC;NU # MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD;NU # MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE;NU # MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF;NU # MATHEMATICAL MONOSPACE DIGIT NINE
+20000..2A6D6;ID # <CJK Ideograph Extension B, First>..<CJK Ideograph Extension B, Last>
+2F800;ID # CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801;ID # CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802;ID # CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803;ID # CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804;ID # CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805;ID # CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806;ID # CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807;ID # CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808;ID # CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809;ID # CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A;ID # CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B;ID # CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C;ID # CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D;ID # CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E;ID # CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F;ID # CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810;ID # CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811;ID # CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812;ID # CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813;ID # CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814;ID # CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815;ID # CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816;ID # CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817;ID # CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818;ID # CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819;ID # CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A;ID # CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B;ID # CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C;ID # CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D;ID # CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E;ID # CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F;ID # CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820;ID # CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821;ID # CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822;ID # CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823;ID # CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824;ID # CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825;ID # CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826;ID # CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827;ID # CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828;ID # CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829;ID # CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A;ID # CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B;ID # CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C;ID # CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D;ID # CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E;ID # CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F;ID # CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830;ID # CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831;ID # CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832;ID # CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833;ID # CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834;ID # CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835;ID # CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836;ID # CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837;ID # CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838;ID # CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839;ID # CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A;ID # CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B;ID # CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C;ID # CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D;ID # CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E;ID # CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F;ID # CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840;ID # CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841;ID # CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842;ID # CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843;ID # CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844;ID # CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845;ID # CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846;ID # CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847;ID # CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848;ID # CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849;ID # CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A;ID # CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B;ID # CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C;ID # CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D;ID # CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E;ID # CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F;ID # CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850;ID # CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851;ID # CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852;ID # CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853;ID # CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854;ID # CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855;ID # CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856;ID # CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857;ID # CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858;ID # CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859;ID # CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A;ID # CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B;ID # CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C;ID # CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D;ID # CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E;ID # CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F;ID # CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860;ID # CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861;ID # CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862;ID # CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863;ID # CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864;ID # CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865;ID # CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866;ID # CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867;ID # CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868;ID # CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869;ID # CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A;ID # CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B;ID # CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C;ID # CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D;ID # CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E;ID # CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F;ID # CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870;ID # CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871;ID # CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872;ID # CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873;ID # CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874;ID # CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875;ID # CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876;ID # CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877;ID # CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878;ID # CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879;ID # CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A;ID # CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B;ID # CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C;ID # CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D;ID # CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E;ID # CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F;ID # CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880;ID # CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881;ID # CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882;ID # CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883;ID # CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884;ID # CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885;ID # CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886;ID # CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887;ID # CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888;ID # CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889;ID # CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A;ID # CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B;ID # CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C;ID # CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D;ID # CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E;ID # CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F;ID # CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890;ID # CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891;ID # CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892;ID # CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893;ID # CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894;ID # CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895;ID # CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896;ID # CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897;ID # CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898;ID # CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899;ID # CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A;ID # CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B;ID # CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C;ID # CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D;ID # CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E;ID # CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F;ID # CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED;ID # CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9;ID # CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF;ID # CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900;ID # CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901;ID # CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902;ID # CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903;ID # CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904;ID # CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905;ID # CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906;ID # CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907;ID # CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908;ID # CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909;ID # CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A;ID # CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B;ID # CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C;ID # CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D;ID # CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E;ID # CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F;ID # CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910;ID # CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911;ID # CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912;ID # CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913;ID # CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914;ID # CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915;ID # CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916;ID # CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917;ID # CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918;ID # CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919;ID # CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A;ID # CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B;ID # CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C;ID # CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D;ID # CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E;ID # CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F;ID # CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920;ID # CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921;ID # CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922;ID # CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923;ID # CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924;ID # CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925;ID # CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926;ID # CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927;ID # CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928;ID # CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929;ID # CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A;ID # CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B;ID # CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C;ID # CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D;ID # CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E;ID # CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F;ID # CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930;ID # CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931;ID # CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932;ID # CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933;ID # CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934;ID # CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935;ID # CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936;ID # CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937;ID # CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938;ID # CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939;ID # CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A;ID # CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B;ID # CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C;ID # CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D;ID # CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E;ID # CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F;ID # CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940;ID # CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941;ID # CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942;ID # CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943;ID # CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944;ID # CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945;ID # CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946;ID # CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947;ID # CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948;ID # CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949;ID # CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A;ID # CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B;ID # CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C;ID # CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D;ID # CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E;ID # CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F;ID # CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950;ID # CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951;ID # CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952;ID # CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953;ID # CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954;ID # CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955;ID # CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956;ID # CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957;ID # CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958;ID # CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959;ID # CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A;ID # CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B;ID # CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C;ID # CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D;ID # CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E;ID # CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F;ID # CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960;ID # CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961;ID # CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962;ID # CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963;ID # CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964;ID # CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965;ID # CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966;ID # CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967;ID # CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968;ID # CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969;ID # CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A;ID # CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B;ID # CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C;ID # CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D;ID # CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E;ID # CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F;ID # CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970;ID # CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971;ID # CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972;ID # CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973;ID # CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974;ID # CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975;ID # CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976;ID # CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977;ID # CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978;ID # CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979;ID # CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A;ID # CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B;ID # CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C;ID # CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D;ID # CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E;ID # CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F;ID # CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980;ID # CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981;ID # CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982;ID # CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983;ID # CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984;ID # CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985;ID # CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986;ID # CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987;ID # CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988;ID # CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989;ID # CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A;ID # CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B;ID # CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C;ID # CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D;ID # CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E;ID # CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F;ID # CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990;ID # CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991;ID # CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992;ID # CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993;ID # CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994;ID # CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995;ID # CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996;ID # CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997;ID # CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998;ID # CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999;ID # CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A;ID # CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B;ID # CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C;ID # CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D;ID # CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E;ID # CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F;ID # CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED;ID # CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9;ID # CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF;ID # CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00;ID # CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01;ID # CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02;ID # CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03;ID # CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04;ID # CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05;ID # CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06;ID # CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07;ID # CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08;ID # CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09;ID # CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F;ID # CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10;ID # CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11;ID # CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12;ID # CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13;ID # CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14;ID # CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15;ID # CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16;ID # CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17;ID # CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18;ID # CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19;ID # CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A;ID # CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B;ID # CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C;ID # CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D;ID # CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0001;CM # LANGUAGE TAG
+E0020;CM # TAG SPACE
+E0021;CM # TAG EXCLAMATION MARK
+E0022;CM # TAG QUOTATION MARK
+E0023;CM # TAG NUMBER SIGN
+E0024;CM # TAG DOLLAR SIGN
+E0025;CM # TAG PERCENT SIGN
+E0026;CM # TAG AMPERSAND
+E0027;CM # TAG APOSTROPHE
+E0028;CM # TAG LEFT PARENTHESIS
+E0029;CM # TAG RIGHT PARENTHESIS
+E002A;CM # TAG ASTERISK
+E002B;CM # TAG PLUS SIGN
+E002C;CM # TAG COMMA
+E002D;CM # TAG HYPHEN-MINUS
+E002E;CM # TAG FULL STOP
+E002F;CM # TAG SOLIDUS
+E0030;CM # TAG DIGIT ZERO
+E0031;CM # TAG DIGIT ONE
+E0032;CM # TAG DIGIT TWO
+E0033;CM # TAG DIGIT THREE
+E0034;CM # TAG DIGIT FOUR
+E0035;CM # TAG DIGIT FIVE
+E0036;CM # TAG DIGIT SIX
+E0037;CM # TAG DIGIT SEVEN
+E0038;CM # TAG DIGIT EIGHT
+E0039;CM # TAG DIGIT NINE
+E003A;CM # TAG COLON
+E003B;CM # TAG SEMICOLON
+E003C;CM # TAG LESS-THAN SIGN
+E003D;CM # TAG EQUALS SIGN
+E003E;CM # TAG GREATER-THAN SIGN
+E003F;CM # TAG QUESTION MARK
+E0040;CM # TAG COMMERCIAL AT
+E0041;CM # TAG LATIN CAPITAL LETTER A
+E0042;CM # TAG LATIN CAPITAL LETTER B
+E0043;CM # TAG LATIN CAPITAL LETTER C
+E0044;CM # TAG LATIN CAPITAL LETTER D
+E0045;CM # TAG LATIN CAPITAL LETTER E
+E0046;CM # TAG LATIN CAPITAL LETTER F
+E0047;CM # TAG LATIN CAPITAL LETTER G
+E0048;CM # TAG LATIN CAPITAL LETTER H
+E0049;CM # TAG LATIN CAPITAL LETTER I
+E004A;CM # TAG LATIN CAPITAL LETTER J
+E004B;CM # TAG LATIN CAPITAL LETTER K
+E004C;CM # TAG LATIN CAPITAL LETTER L
+E004D;CM # TAG LATIN CAPITAL LETTER M
+E004E;CM # TAG LATIN CAPITAL LETTER N
+E004F;CM # TAG LATIN CAPITAL LETTER O
+E0050;CM # TAG LATIN CAPITAL LETTER P
+E0051;CM # TAG LATIN CAPITAL LETTER Q
+E0052;CM # TAG LATIN CAPITAL LETTER R
+E0053;CM # TAG LATIN CAPITAL LETTER S
+E0054;CM # TAG LATIN CAPITAL LETTER T
+E0055;CM # TAG LATIN CAPITAL LETTER U
+E0056;CM # TAG LATIN CAPITAL LETTER V
+E0057;CM # TAG LATIN CAPITAL LETTER W
+E0058;CM # TAG LATIN CAPITAL LETTER X
+E0059;CM # TAG LATIN CAPITAL LETTER Y
+E005A;CM # TAG LATIN CAPITAL LETTER Z
+E005B;CM # TAG LEFT SQUARE BRACKET
+E005C;CM # TAG REVERSE SOLIDUS
+E005D;CM # TAG RIGHT SQUARE BRACKET
+E005E;CM # TAG CIRCUMFLEX ACCENT
+E005F;CM # TAG LOW LINE
+E0060;CM # TAG GRAVE ACCENT
+E0061;CM # TAG LATIN SMALL LETTER A
+E0062;CM # TAG LATIN SMALL LETTER B
+E0063;CM # TAG LATIN SMALL LETTER C
+E0064;CM # TAG LATIN SMALL LETTER D
+E0065;CM # TAG LATIN SMALL LETTER E
+E0066;CM # TAG LATIN SMALL LETTER F
+E0067;CM # TAG LATIN SMALL LETTER G
+E0068;CM # TAG LATIN SMALL LETTER H
+E0069;CM # TAG LATIN SMALL LETTER I
+E006A;CM # TAG LATIN SMALL LETTER J
+E006B;CM # TAG LATIN SMALL LETTER K
+E006C;CM # TAG LATIN SMALL LETTER L
+E006D;CM # TAG LATIN SMALL LETTER M
+E006E;CM # TAG LATIN SMALL LETTER N
+E006F;CM # TAG LATIN SMALL LETTER O
+E0070;CM # TAG LATIN SMALL LETTER P
+E0071;CM # TAG LATIN SMALL LETTER Q
+E0072;CM # TAG LATIN SMALL LETTER R
+E0073;CM # TAG LATIN SMALL LETTER S
+E0074;CM # TAG LATIN SMALL LETTER T
+E0075;CM # TAG LATIN SMALL LETTER U
+E0076;CM # TAG LATIN SMALL LETTER V
+E0077;CM # TAG LATIN SMALL LETTER W
+E0078;CM # TAG LATIN SMALL LETTER X
+E0079;CM # TAG LATIN SMALL LETTER Y
+E007A;CM # TAG LATIN SMALL LETTER Z
+E007B;CM # TAG LEFT CURLY BRACKET
+E007C;CM # TAG VERTICAL LINE
+E007D;CM # TAG RIGHT CURLY BRACKET
+E007E;CM # TAG TILDE
+E007F;CM # CANCEL TAG
+E0100;CM # VARIATION SELECTOR-17
+E0101;CM # VARIATION SELECTOR-18
+E0102;CM # VARIATION SELECTOR-19
+E0103;CM # VARIATION SELECTOR-20
+E0104;CM # VARIATION SELECTOR-21
+E0105;CM # VARIATION SELECTOR-22
+E0106;CM # VARIATION SELECTOR-23
+E0107;CM # VARIATION SELECTOR-24
+E0108;CM # VARIATION SELECTOR-25
+E0109;CM # VARIATION SELECTOR-26
+E010A;CM # VARIATION SELECTOR-27
+E010B;CM # VARIATION SELECTOR-28
+E010C;CM # VARIATION SELECTOR-29
+E010D;CM # VARIATION SELECTOR-30
+E010E;CM # VARIATION SELECTOR-31
+E010F;CM # VARIATION SELECTOR-32
+E0110;CM # VARIATION SELECTOR-33
+E0111;CM # VARIATION SELECTOR-34
+E0112;CM # VARIATION SELECTOR-35
+E0113;CM # VARIATION SELECTOR-36
+E0114;CM # VARIATION SELECTOR-37
+E0115;CM # VARIATION SELECTOR-38
+E0116;CM # VARIATION SELECTOR-39
+E0117;CM # VARIATION SELECTOR-40
+E0118;CM # VARIATION SELECTOR-41
+E0119;CM # VARIATION SELECTOR-42
+E011A;CM # VARIATION SELECTOR-43
+E011B;CM # VARIATION SELECTOR-44
+E011C;CM # VARIATION SELECTOR-45
+E011D;CM # VARIATION SELECTOR-46
+E011E;CM # VARIATION SELECTOR-47
+E011F;CM # VARIATION SELECTOR-48
+E0120;CM # VARIATION SELECTOR-49
+E0121;CM # VARIATION SELECTOR-50
+E0122;CM # VARIATION SELECTOR-51
+E0123;CM # VARIATION SELECTOR-52
+E0124;CM # VARIATION SELECTOR-53
+E0125;CM # VARIATION SELECTOR-54
+E0126;CM # VARIATION SELECTOR-55
+E0127;CM # VARIATION SELECTOR-56
+E0128;CM # VARIATION SELECTOR-57
+E0129;CM # VARIATION SELECTOR-58
+E012A;CM # VARIATION SELECTOR-59
+E012B;CM # VARIATION SELECTOR-60
+E012C;CM # VARIATION SELECTOR-61
+E012D;CM # VARIATION SELECTOR-62
+E012E;CM # VARIATION SELECTOR-63
+E012F;CM # VARIATION SELECTOR-64
+E0130;CM # VARIATION SELECTOR-65
+E0131;CM # VARIATION SELECTOR-66
+E0132;CM # VARIATION SELECTOR-67
+E0133;CM # VARIATION SELECTOR-68
+E0134;CM # VARIATION SELECTOR-69
+E0135;CM # VARIATION SELECTOR-70
+E0136;CM # VARIATION SELECTOR-71
+E0137;CM # VARIATION SELECTOR-72
+E0138;CM # VARIATION SELECTOR-73
+E0139;CM # VARIATION SELECTOR-74
+E013A;CM # VARIATION SELECTOR-75
+E013B;CM # VARIATION SELECTOR-76
+E013C;CM # VARIATION SELECTOR-77
+E013D;CM # VARIATION SELECTOR-78
+E013E;CM # VARIATION SELECTOR-79
+E013F;CM # VARIATION SELECTOR-80
+E0140;CM # VARIATION SELECTOR-81
+E0141;CM # VARIATION SELECTOR-82
+E0142;CM # VARIATION SELECTOR-83
+E0143;CM # VARIATION SELECTOR-84
+E0144;CM # VARIATION SELECTOR-85
+E0145;CM # VARIATION SELECTOR-86
+E0146;CM # VARIATION SELECTOR-87
+E0147;CM # VARIATION SELECTOR-88
+E0148;CM # VARIATION SELECTOR-89
+E0149;CM # VARIATION SELECTOR-90
+E014A;CM # VARIATION SELECTOR-91
+E014B;CM # VARIATION SELECTOR-92
+E014C;CM # VARIATION SELECTOR-93
+E014D;CM # VARIATION SELECTOR-94
+E014E;CM # VARIATION SELECTOR-95
+E014F;CM # VARIATION SELECTOR-96
+E0150;CM # VARIATION SELECTOR-97
+E0151;CM # VARIATION SELECTOR-98
+E0152;CM # VARIATION SELECTOR-99
+E0153;CM # VARIATION SELECTOR-100
+E0154;CM # VARIATION SELECTOR-101
+E0155;CM # VARIATION SELECTOR-102
+E0156;CM # VARIATION SELECTOR-103
+E0157;CM # VARIATION SELECTOR-104
+E0158;CM # VARIATION SELECTOR-105
+E0159;CM # VARIATION SELECTOR-106
+E015A;CM # VARIATION SELECTOR-107
+E015B;CM # VARIATION SELECTOR-108
+E015C;CM # VARIATION SELECTOR-109
+E015D;CM # VARIATION SELECTOR-110
+E015E;CM # VARIATION SELECTOR-111
+E015F;CM # VARIATION SELECTOR-112
+E0160;CM # VARIATION SELECTOR-113
+E0161;CM # VARIATION SELECTOR-114
+E0162;CM # VARIATION SELECTOR-115
+E0163;CM # VARIATION SELECTOR-116
+E0164;CM # VARIATION SELECTOR-117
+E0165;CM # VARIATION SELECTOR-118
+E0166;CM # VARIATION SELECTOR-119
+E0167;CM # VARIATION SELECTOR-120
+E0168;CM # VARIATION SELECTOR-121
+E0169;CM # VARIATION SELECTOR-122
+E016A;CM # VARIATION SELECTOR-123
+E016B;CM # VARIATION SELECTOR-124
+E016C;CM # VARIATION SELECTOR-125
+E016D;CM # VARIATION SELECTOR-126
+E016E;CM # VARIATION SELECTOR-127
+E016F;CM # VARIATION SELECTOR-128
+E0170;CM # VARIATION SELECTOR-129
+E0171;CM # VARIATION SELECTOR-130
+E0172;CM # VARIATION SELECTOR-131
+E0173;CM # VARIATION SELECTOR-132
+E0174;CM # VARIATION SELECTOR-133
+E0175;CM # VARIATION SELECTOR-134
+E0176;CM # VARIATION SELECTOR-135
+E0177;CM # VARIATION SELECTOR-136
+E0178;CM # VARIATION SELECTOR-137
+E0179;CM # VARIATION SELECTOR-138
+E017A;CM # VARIATION SELECTOR-139
+E017B;CM # VARIATION SELECTOR-140
+E017C;CM # VARIATION SELECTOR-141
+E017D;CM # VARIATION SELECTOR-142
+E017E;CM # VARIATION SELECTOR-143
+E017F;CM # VARIATION SELECTOR-144
+E0180;CM # VARIATION SELECTOR-145
+E0181;CM # VARIATION SELECTOR-146
+E0182;CM # VARIATION SELECTOR-147
+E0183;CM # VARIATION SELECTOR-148
+E0184;CM # VARIATION SELECTOR-149
+E0185;CM # VARIATION SELECTOR-150
+E0186;CM # VARIATION SELECTOR-151
+E0187;CM # VARIATION SELECTOR-152
+E0188;CM # VARIATION SELECTOR-153
+E0189;CM # VARIATION SELECTOR-154
+E018A;CM # VARIATION SELECTOR-155
+E018B;CM # VARIATION SELECTOR-156
+E018C;CM # VARIATION SELECTOR-157
+E018D;CM # VARIATION SELECTOR-158
+E018E;CM # VARIATION SELECTOR-159
+E018F;CM # VARIATION SELECTOR-160
+E0190;CM # VARIATION SELECTOR-161
+E0191;CM # VARIATION SELECTOR-162
+E0192;CM # VARIATION SELECTOR-163
+E0193;CM # VARIATION SELECTOR-164
+E0194;CM # VARIATION SELECTOR-165
+E0195;CM # VARIATION SELECTOR-166
+E0196;CM # VARIATION SELECTOR-167
+E0197;CM # VARIATION SELECTOR-168
+E0198;CM # VARIATION SELECTOR-169
+E0199;CM # VARIATION SELECTOR-170
+E019A;CM # VARIATION SELECTOR-171
+E019B;CM # VARIATION SELECTOR-172
+E019C;CM # VARIATION SELECTOR-173
+E019D;CM # VARIATION SELECTOR-174
+E019E;CM # VARIATION SELECTOR-175
+E019F;CM # VARIATION SELECTOR-176
+E01A0;CM # VARIATION SELECTOR-177
+E01A1;CM # VARIATION SELECTOR-178
+E01A2;CM # VARIATION SELECTOR-179
+E01A3;CM # VARIATION SELECTOR-180
+E01A4;CM # VARIATION SELECTOR-181
+E01A5;CM # VARIATION SELECTOR-182
+E01A6;CM # VARIATION SELECTOR-183
+E01A7;CM # VARIATION SELECTOR-184
+E01A8;CM # VARIATION SELECTOR-185
+E01A9;CM # VARIATION SELECTOR-186
+E01AA;CM # VARIATION SELECTOR-187
+E01AB;CM # VARIATION SELECTOR-188
+E01AC;CM # VARIATION SELECTOR-189
+E01AD;CM # VARIATION SELECTOR-190
+E01AE;CM # VARIATION SELECTOR-191
+E01AF;CM # VARIATION SELECTOR-192
+E01B0;CM # VARIATION SELECTOR-193
+E01B1;CM # VARIATION SELECTOR-194
+E01B2;CM # VARIATION SELECTOR-195
+E01B3;CM # VARIATION SELECTOR-196
+E01B4;CM # VARIATION SELECTOR-197
+E01B5;CM # VARIATION SELECTOR-198
+E01B6;CM # VARIATION SELECTOR-199
+E01B7;CM # VARIATION SELECTOR-200
+E01B8;CM # VARIATION SELECTOR-201
+E01B9;CM # VARIATION SELECTOR-202
+E01BA;CM # VARIATION SELECTOR-203
+E01BB;CM # VARIATION SELECTOR-204
+E01BC;CM # VARIATION SELECTOR-205
+E01BD;CM # VARIATION SELECTOR-206
+E01BE;CM # VARIATION SELECTOR-207
+E01BF;CM # VARIATION SELECTOR-208
+E01C0;CM # VARIATION SELECTOR-209
+E01C1;CM # VARIATION SELECTOR-210
+E01C2;CM # VARIATION SELECTOR-211
+E01C3;CM # VARIATION SELECTOR-212
+E01C4;CM # VARIATION SELECTOR-213
+E01C5;CM # VARIATION SELECTOR-214
+E01C6;CM # VARIATION SELECTOR-215
+E01C7;CM # VARIATION SELECTOR-216
+E01C8;CM # VARIATION SELECTOR-217
+E01C9;CM # VARIATION SELECTOR-218
+E01CA;CM # VARIATION SELECTOR-219
+E01CB;CM # VARIATION SELECTOR-220
+E01CC;CM # VARIATION SELECTOR-221
+E01CD;CM # VARIATION SELECTOR-222
+E01CE;CM # VARIATION SELECTOR-223
+E01CF;CM # VARIATION SELECTOR-224
+E01D0;CM # VARIATION SELECTOR-225
+E01D1;CM # VARIATION SELECTOR-226
+E01D2;CM # VARIATION SELECTOR-227
+E01D3;CM # VARIATION SELECTOR-228
+E01D4;CM # VARIATION SELECTOR-229
+E01D5;CM # VARIATION SELECTOR-230
+E01D6;CM # VARIATION SELECTOR-231
+E01D7;CM # VARIATION SELECTOR-232
+E01D8;CM # VARIATION SELECTOR-233
+E01D9;CM # VARIATION SELECTOR-234
+E01DA;CM # VARIATION SELECTOR-235
+E01DB;CM # VARIATION SELECTOR-236
+E01DC;CM # VARIATION SELECTOR-237
+E01DD;CM # VARIATION SELECTOR-238
+E01DE;CM # VARIATION SELECTOR-239
+E01DF;CM # VARIATION SELECTOR-240
+E01E0;CM # VARIATION SELECTOR-241
+E01E1;CM # VARIATION SELECTOR-242
+E01E2;CM # VARIATION SELECTOR-243
+E01E3;CM # VARIATION SELECTOR-244
+E01E4;CM # VARIATION SELECTOR-245
+E01E5;CM # VARIATION SELECTOR-246
+E01E6;CM # VARIATION SELECTOR-247
+E01E7;CM # VARIATION SELECTOR-248
+E01E8;CM # VARIATION SELECTOR-249
+E01E9;CM # VARIATION SELECTOR-250
+E01EA;CM # VARIATION SELECTOR-251
+E01EB;CM # VARIATION SELECTOR-252
+E01EC;CM # VARIATION SELECTOR-253
+E01ED;CM # VARIATION SELECTOR-254
+E01EE;CM # VARIATION SELECTOR-255
+E01EF;CM # VARIATION SELECTOR-256
+F0000..FFFFD;XX # <Plane 15 Private Use, First>..<Plane 15 Private Use, Last>
+100000..10FFFD;XX # <Plane 16 Private Use, First>..<Plane 16 Private Use, Last>
diff --git a/Master/tlpkg/tlperl/lib/unicore/Name.pl b/Master/tlpkg/tlperl/lib/unicore/Name.pl
new file mode 100644
index 00000000000..6074a8ae3c7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Name.pl
@@ -0,0 +1,16346 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0000 NULL
+0001 START OF HEADING
+0002 START OF TEXT
+0003 END OF TEXT
+0004 END OF TRANSMISSION
+0005 ENQUIRY
+0006 ACKNOWLEDGE
+0007 BELL
+0008 BACKSPACE
+0009 CHARACTER TABULATION
+000A LINE FEED (LF)
+000B LINE TABULATION
+000C FORM FEED (FF)
+000D CARRIAGE RETURN (CR)
+000E SHIFT OUT
+000F SHIFT IN
+0010 DATA LINK ESCAPE
+0011 DEVICE CONTROL ONE
+0012 DEVICE CONTROL TWO
+0013 DEVICE CONTROL THREE
+0014 DEVICE CONTROL FOUR
+0015 NEGATIVE ACKNOWLEDGE
+0016 SYNCHRONOUS IDLE
+0017 END OF TRANSMISSION BLOCK
+0018 CANCEL
+0019 END OF MEDIUM
+001A SUBSTITUTE
+001B ESCAPE
+001C INFORMATION SEPARATOR FOUR
+001D INFORMATION SEPARATOR THREE
+001E INFORMATION SEPARATOR TWO
+001F INFORMATION SEPARATOR ONE
+0020 SPACE
+0021 EXCLAMATION MARK
+0022 QUOTATION MARK
+0023 NUMBER SIGN
+0024 DOLLAR SIGN
+0025 PERCENT SIGN
+0026 AMPERSAND
+0027 APOSTROPHE
+0028 LEFT PARENTHESIS
+0029 RIGHT PARENTHESIS
+002A ASTERISK
+002B PLUS SIGN
+002C COMMA
+002D HYPHEN-MINUS
+002E FULL STOP
+002F SOLIDUS
+0030 DIGIT ZERO
+0031 DIGIT ONE
+0032 DIGIT TWO
+0033 DIGIT THREE
+0034 DIGIT FOUR
+0035 DIGIT FIVE
+0036 DIGIT SIX
+0037 DIGIT SEVEN
+0038 DIGIT EIGHT
+0039 DIGIT NINE
+003A COLON
+003B SEMICOLON
+003C LESS-THAN SIGN
+003D EQUALS SIGN
+003E GREATER-THAN SIGN
+003F QUESTION MARK
+0040 COMMERCIAL AT
+0041 LATIN CAPITAL LETTER A
+0042 LATIN CAPITAL LETTER B
+0043 LATIN CAPITAL LETTER C
+0044 LATIN CAPITAL LETTER D
+0045 LATIN CAPITAL LETTER E
+0046 LATIN CAPITAL LETTER F
+0047 LATIN CAPITAL LETTER G
+0048 LATIN CAPITAL LETTER H
+0049 LATIN CAPITAL LETTER I
+004A LATIN CAPITAL LETTER J
+004B LATIN CAPITAL LETTER K
+004C LATIN CAPITAL LETTER L
+004D LATIN CAPITAL LETTER M
+004E LATIN CAPITAL LETTER N
+004F LATIN CAPITAL LETTER O
+0050 LATIN CAPITAL LETTER P
+0051 LATIN CAPITAL LETTER Q
+0052 LATIN CAPITAL LETTER R
+0053 LATIN CAPITAL LETTER S
+0054 LATIN CAPITAL LETTER T
+0055 LATIN CAPITAL LETTER U
+0056 LATIN CAPITAL LETTER V
+0057 LATIN CAPITAL LETTER W
+0058 LATIN CAPITAL LETTER X
+0059 LATIN CAPITAL LETTER Y
+005A LATIN CAPITAL LETTER Z
+005B LEFT SQUARE BRACKET
+005C REVERSE SOLIDUS
+005D RIGHT SQUARE BRACKET
+005E CIRCUMFLEX ACCENT
+005F LOW LINE
+0060 GRAVE ACCENT
+0061 LATIN SMALL LETTER A
+0062 LATIN SMALL LETTER B
+0063 LATIN SMALL LETTER C
+0064 LATIN SMALL LETTER D
+0065 LATIN SMALL LETTER E
+0066 LATIN SMALL LETTER F
+0067 LATIN SMALL LETTER G
+0068 LATIN SMALL LETTER H
+0069 LATIN SMALL LETTER I
+006A LATIN SMALL LETTER J
+006B LATIN SMALL LETTER K
+006C LATIN SMALL LETTER L
+006D LATIN SMALL LETTER M
+006E LATIN SMALL LETTER N
+006F LATIN SMALL LETTER O
+0070 LATIN SMALL LETTER P
+0071 LATIN SMALL LETTER Q
+0072 LATIN SMALL LETTER R
+0073 LATIN SMALL LETTER S
+0074 LATIN SMALL LETTER T
+0075 LATIN SMALL LETTER U
+0076 LATIN SMALL LETTER V
+0077 LATIN SMALL LETTER W
+0078 LATIN SMALL LETTER X
+0079 LATIN SMALL LETTER Y
+007A LATIN SMALL LETTER Z
+007B LEFT CURLY BRACKET
+007C VERTICAL LINE
+007D RIGHT CURLY BRACKET
+007E TILDE
+007F DELETE
+0080 0081 <control>
+0082 BREAK PERMITTED HERE
+0083 NO BREAK HERE
+0084 <control>
+0085 NEXT LINE (NEL)
+0086 START OF SELECTED AREA
+0087 END OF SELECTED AREA
+0088 CHARACTER TABULATION SET
+0089 CHARACTER TABULATION WITH JUSTIFICATION
+008A LINE TABULATION SET
+008B PARTIAL LINE FORWARD
+008C PARTIAL LINE BACKWARD
+008D REVERSE LINE FEED
+008E SINGLE SHIFT TWO
+008F SINGLE SHIFT THREE
+0090 DEVICE CONTROL STRING
+0091 PRIVATE USE ONE
+0092 PRIVATE USE TWO
+0093 SET TRANSMIT STATE
+0094 CANCEL CHARACTER
+0095 MESSAGE WAITING
+0096 START OF GUARDED AREA
+0097 END OF GUARDED AREA
+0098 START OF STRING
+0099 <control>
+009A SINGLE CHARACTER INTRODUCER
+009B CONTROL SEQUENCE INTRODUCER
+009C STRING TERMINATOR
+009D OPERATING SYSTEM COMMAND
+009E PRIVACY MESSAGE
+009F APPLICATION PROGRAM COMMAND
+00A0 NO-BREAK SPACE
+00A1 INVERTED EXCLAMATION MARK
+00A2 CENT SIGN
+00A3 POUND SIGN
+00A4 CURRENCY SIGN
+00A5 YEN SIGN
+00A6 BROKEN BAR
+00A7 SECTION SIGN
+00A8 DIAERESIS
+00A9 COPYRIGHT SIGN
+00AA FEMININE ORDINAL INDICATOR
+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC NOT SIGN
+00AD SOFT HYPHEN
+00AE REGISTERED SIGN
+00AF MACRON
+00B0 DEGREE SIGN
+00B1 PLUS-MINUS SIGN
+00B2 SUPERSCRIPT TWO
+00B3 SUPERSCRIPT THREE
+00B4 ACUTE ACCENT
+00B5 MICRO SIGN
+00B6 PILCROW SIGN
+00B7 MIDDLE DOT
+00B8 CEDILLA
+00B9 SUPERSCRIPT ONE
+00BA MASCULINE ORDINAL INDICATOR
+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC VULGAR FRACTION ONE QUARTER
+00BD VULGAR FRACTION ONE HALF
+00BE VULGAR FRACTION THREE QUARTERS
+00BF INVERTED QUESTION MARK
+00C0 LATIN CAPITAL LETTER A WITH GRAVE
+00C1 LATIN CAPITAL LETTER A WITH ACUTE
+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3 LATIN CAPITAL LETTER A WITH TILDE
+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6 LATIN CAPITAL LETTER AE
+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
+00C8 LATIN CAPITAL LETTER E WITH GRAVE
+00C9 LATIN CAPITAL LETTER E WITH ACUTE
+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC LATIN CAPITAL LETTER I WITH GRAVE
+00CD LATIN CAPITAL LETTER I WITH ACUTE
+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0 LATIN CAPITAL LETTER ETH
+00D1 LATIN CAPITAL LETTER N WITH TILDE
+00D2 LATIN CAPITAL LETTER O WITH GRAVE
+00D3 LATIN CAPITAL LETTER O WITH ACUTE
+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5 LATIN CAPITAL LETTER O WITH TILDE
+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7 MULTIPLICATION SIGN
+00D8 LATIN CAPITAL LETTER O WITH STROKE
+00D9 LATIN CAPITAL LETTER U WITH GRAVE
+00DA LATIN CAPITAL LETTER U WITH ACUTE
+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD LATIN CAPITAL LETTER Y WITH ACUTE
+00DE LATIN CAPITAL LETTER THORN
+00DF LATIN SMALL LETTER SHARP S
+00E0 LATIN SMALL LETTER A WITH GRAVE
+00E1 LATIN SMALL LETTER A WITH ACUTE
+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+00E3 LATIN SMALL LETTER A WITH TILDE
+00E4 LATIN SMALL LETTER A WITH DIAERESIS
+00E5 LATIN SMALL LETTER A WITH RING ABOVE
+00E6 LATIN SMALL LETTER AE
+00E7 LATIN SMALL LETTER C WITH CEDILLA
+00E8 LATIN SMALL LETTER E WITH GRAVE
+00E9 LATIN SMALL LETTER E WITH ACUTE
+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
+00EB LATIN SMALL LETTER E WITH DIAERESIS
+00EC LATIN SMALL LETTER I WITH GRAVE
+00ED LATIN SMALL LETTER I WITH ACUTE
+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
+00EF LATIN SMALL LETTER I WITH DIAERESIS
+00F0 LATIN SMALL LETTER ETH
+00F1 LATIN SMALL LETTER N WITH TILDE
+00F2 LATIN SMALL LETTER O WITH GRAVE
+00F3 LATIN SMALL LETTER O WITH ACUTE
+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
+00F5 LATIN SMALL LETTER O WITH TILDE
+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+00F7 DIVISION SIGN
+00F8 LATIN SMALL LETTER O WITH STROKE
+00F9 LATIN SMALL LETTER U WITH GRAVE
+00FA LATIN SMALL LETTER U WITH ACUTE
+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+00FD LATIN SMALL LETTER Y WITH ACUTE
+00FE LATIN SMALL LETTER THORN
+00FF LATIN SMALL LETTER Y WITH DIAERESIS
+0100 LATIN CAPITAL LETTER A WITH MACRON
+0101 LATIN SMALL LETTER A WITH MACRON
+0102 LATIN CAPITAL LETTER A WITH BREVE
+0103 LATIN SMALL LETTER A WITH BREVE
+0104 LATIN CAPITAL LETTER A WITH OGONEK
+0105 LATIN SMALL LETTER A WITH OGONEK
+0106 LATIN CAPITAL LETTER C WITH ACUTE
+0107 LATIN SMALL LETTER C WITH ACUTE
+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+010B LATIN SMALL LETTER C WITH DOT ABOVE
+010C LATIN CAPITAL LETTER C WITH CARON
+010D LATIN SMALL LETTER C WITH CARON
+010E LATIN CAPITAL LETTER D WITH CARON
+010F LATIN SMALL LETTER D WITH CARON
+0110 LATIN CAPITAL LETTER D WITH STROKE
+0111 LATIN SMALL LETTER D WITH STROKE
+0112 LATIN CAPITAL LETTER E WITH MACRON
+0113 LATIN SMALL LETTER E WITH MACRON
+0114 LATIN CAPITAL LETTER E WITH BREVE
+0115 LATIN SMALL LETTER E WITH BREVE
+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+0117 LATIN SMALL LETTER E WITH DOT ABOVE
+0118 LATIN CAPITAL LETTER E WITH OGONEK
+0119 LATIN SMALL LETTER E WITH OGONEK
+011A LATIN CAPITAL LETTER E WITH CARON
+011B LATIN SMALL LETTER E WITH CARON
+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+011E LATIN CAPITAL LETTER G WITH BREVE
+011F LATIN SMALL LETTER G WITH BREVE
+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+0121 LATIN SMALL LETTER G WITH DOT ABOVE
+0122 LATIN CAPITAL LETTER G WITH CEDILLA
+0123 LATIN SMALL LETTER G WITH CEDILLA
+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+0126 LATIN CAPITAL LETTER H WITH STROKE
+0127 LATIN SMALL LETTER H WITH STROKE
+0128 LATIN CAPITAL LETTER I WITH TILDE
+0129 LATIN SMALL LETTER I WITH TILDE
+012A LATIN CAPITAL LETTER I WITH MACRON
+012B LATIN SMALL LETTER I WITH MACRON
+012C LATIN CAPITAL LETTER I WITH BREVE
+012D LATIN SMALL LETTER I WITH BREVE
+012E LATIN CAPITAL LETTER I WITH OGONEK
+012F LATIN SMALL LETTER I WITH OGONEK
+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+0131 LATIN SMALL LETTER DOTLESS I
+0132 LATIN CAPITAL LIGATURE IJ
+0133 LATIN SMALL LIGATURE IJ
+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+0136 LATIN CAPITAL LETTER K WITH CEDILLA
+0137 LATIN SMALL LETTER K WITH CEDILLA
+0138 LATIN SMALL LETTER KRA
+0139 LATIN CAPITAL LETTER L WITH ACUTE
+013A LATIN SMALL LETTER L WITH ACUTE
+013B LATIN CAPITAL LETTER L WITH CEDILLA
+013C LATIN SMALL LETTER L WITH CEDILLA
+013D LATIN CAPITAL LETTER L WITH CARON
+013E LATIN SMALL LETTER L WITH CARON
+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+0141 LATIN CAPITAL LETTER L WITH STROKE
+0142 LATIN SMALL LETTER L WITH STROKE
+0143 LATIN CAPITAL LETTER N WITH ACUTE
+0144 LATIN SMALL LETTER N WITH ACUTE
+0145 LATIN CAPITAL LETTER N WITH CEDILLA
+0146 LATIN SMALL LETTER N WITH CEDILLA
+0147 LATIN CAPITAL LETTER N WITH CARON
+0148 LATIN SMALL LETTER N WITH CARON
+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A LATIN CAPITAL LETTER ENG
+014B LATIN SMALL LETTER ENG
+014C LATIN CAPITAL LETTER O WITH MACRON
+014D LATIN SMALL LETTER O WITH MACRON
+014E LATIN CAPITAL LETTER O WITH BREVE
+014F LATIN SMALL LETTER O WITH BREVE
+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0152 LATIN CAPITAL LIGATURE OE
+0153 LATIN SMALL LIGATURE OE
+0154 LATIN CAPITAL LETTER R WITH ACUTE
+0155 LATIN SMALL LETTER R WITH ACUTE
+0156 LATIN CAPITAL LETTER R WITH CEDILLA
+0157 LATIN SMALL LETTER R WITH CEDILLA
+0158 LATIN CAPITAL LETTER R WITH CARON
+0159 LATIN SMALL LETTER R WITH CARON
+015A LATIN CAPITAL LETTER S WITH ACUTE
+015B LATIN SMALL LETTER S WITH ACUTE
+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+015E LATIN CAPITAL LETTER S WITH CEDILLA
+015F LATIN SMALL LETTER S WITH CEDILLA
+0160 LATIN CAPITAL LETTER S WITH CARON
+0161 LATIN SMALL LETTER S WITH CARON
+0162 LATIN CAPITAL LETTER T WITH CEDILLA
+0163 LATIN SMALL LETTER T WITH CEDILLA
+0164 LATIN CAPITAL LETTER T WITH CARON
+0165 LATIN SMALL LETTER T WITH CARON
+0166 LATIN CAPITAL LETTER T WITH STROKE
+0167 LATIN SMALL LETTER T WITH STROKE
+0168 LATIN CAPITAL LETTER U WITH TILDE
+0169 LATIN SMALL LETTER U WITH TILDE
+016A LATIN CAPITAL LETTER U WITH MACRON
+016B LATIN SMALL LETTER U WITH MACRON
+016C LATIN CAPITAL LETTER U WITH BREVE
+016D LATIN SMALL LETTER U WITH BREVE
+016E LATIN CAPITAL LETTER U WITH RING ABOVE
+016F LATIN SMALL LETTER U WITH RING ABOVE
+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0172 LATIN CAPITAL LETTER U WITH OGONEK
+0173 LATIN SMALL LETTER U WITH OGONEK
+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179 LATIN CAPITAL LETTER Z WITH ACUTE
+017A LATIN SMALL LETTER Z WITH ACUTE
+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017C LATIN SMALL LETTER Z WITH DOT ABOVE
+017D LATIN CAPITAL LETTER Z WITH CARON
+017E LATIN SMALL LETTER Z WITH CARON
+017F LATIN SMALL LETTER LONG S
+0180 LATIN SMALL LETTER B WITH STROKE
+0181 LATIN CAPITAL LETTER B WITH HOOK
+0182 LATIN CAPITAL LETTER B WITH TOPBAR
+0183 LATIN SMALL LETTER B WITH TOPBAR
+0184 LATIN CAPITAL LETTER TONE SIX
+0185 LATIN SMALL LETTER TONE SIX
+0186 LATIN CAPITAL LETTER OPEN O
+0187 LATIN CAPITAL LETTER C WITH HOOK
+0188 LATIN SMALL LETTER C WITH HOOK
+0189 LATIN CAPITAL LETTER AFRICAN D
+018A LATIN CAPITAL LETTER D WITH HOOK
+018B LATIN CAPITAL LETTER D WITH TOPBAR
+018C LATIN SMALL LETTER D WITH TOPBAR
+018D LATIN SMALL LETTER TURNED DELTA
+018E LATIN CAPITAL LETTER REVERSED E
+018F LATIN CAPITAL LETTER SCHWA
+0190 LATIN CAPITAL LETTER OPEN E
+0191 LATIN CAPITAL LETTER F WITH HOOK
+0192 LATIN SMALL LETTER F WITH HOOK
+0193 LATIN CAPITAL LETTER G WITH HOOK
+0194 LATIN CAPITAL LETTER GAMMA
+0195 LATIN SMALL LETTER HV
+0196 LATIN CAPITAL LETTER IOTA
+0197 LATIN CAPITAL LETTER I WITH STROKE
+0198 LATIN CAPITAL LETTER K WITH HOOK
+0199 LATIN SMALL LETTER K WITH HOOK
+019A LATIN SMALL LETTER L WITH BAR
+019B LATIN SMALL LETTER LAMBDA WITH STROKE
+019C LATIN CAPITAL LETTER TURNED M
+019D LATIN CAPITAL LETTER N WITH LEFT HOOK
+019E LATIN SMALL LETTER N WITH LONG RIGHT LEG
+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0 LATIN CAPITAL LETTER O WITH HORN
+01A1 LATIN SMALL LETTER O WITH HORN
+01A2 LATIN CAPITAL LETTER OI
+01A3 LATIN SMALL LETTER OI
+01A4 LATIN CAPITAL LETTER P WITH HOOK
+01A5 LATIN SMALL LETTER P WITH HOOK
+01A6 LATIN LETTER YR
+01A7 LATIN CAPITAL LETTER TONE TWO
+01A8 LATIN SMALL LETTER TONE TWO
+01A9 LATIN CAPITAL LETTER ESH
+01AA LATIN LETTER REVERSED ESH LOOP
+01AB LATIN SMALL LETTER T WITH PALATAL HOOK
+01AC LATIN CAPITAL LETTER T WITH HOOK
+01AD LATIN SMALL LETTER T WITH HOOK
+01AE LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF LATIN CAPITAL LETTER U WITH HORN
+01B0 LATIN SMALL LETTER U WITH HORN
+01B1 LATIN CAPITAL LETTER UPSILON
+01B2 LATIN CAPITAL LETTER V WITH HOOK
+01B3 LATIN CAPITAL LETTER Y WITH HOOK
+01B4 LATIN SMALL LETTER Y WITH HOOK
+01B5 LATIN CAPITAL LETTER Z WITH STROKE
+01B6 LATIN SMALL LETTER Z WITH STROKE
+01B7 LATIN CAPITAL LETTER EZH
+01B8 LATIN CAPITAL LETTER EZH REVERSED
+01B9 LATIN SMALL LETTER EZH REVERSED
+01BA LATIN SMALL LETTER EZH WITH TAIL
+01BB LATIN LETTER TWO WITH STROKE
+01BC LATIN CAPITAL LETTER TONE FIVE
+01BD LATIN SMALL LETTER TONE FIVE
+01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+01BF LATIN LETTER WYNN
+01C0 LATIN LETTER DENTAL CLICK
+01C1 LATIN LETTER LATERAL CLICK
+01C2 LATIN LETTER ALVEOLAR CLICK
+01C3 LATIN LETTER RETROFLEX CLICK
+01C4 LATIN CAPITAL LETTER DZ WITH CARON
+01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C6 LATIN SMALL LETTER DZ WITH CARON
+01C7 LATIN CAPITAL LETTER LJ
+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01C9 LATIN SMALL LETTER LJ
+01CA LATIN CAPITAL LETTER NJ
+01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CC LATIN SMALL LETTER NJ
+01CD LATIN CAPITAL LETTER A WITH CARON
+01CE LATIN SMALL LETTER A WITH CARON
+01CF LATIN CAPITAL LETTER I WITH CARON
+01D0 LATIN SMALL LETTER I WITH CARON
+01D1 LATIN CAPITAL LETTER O WITH CARON
+01D2 LATIN SMALL LETTER O WITH CARON
+01D3 LATIN CAPITAL LETTER U WITH CARON
+01D4 LATIN SMALL LETTER U WITH CARON
+01D5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01D9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DB LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DD LATIN SMALL LETTER TURNED E
+01DE LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01DF LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E2 LATIN CAPITAL LETTER AE WITH MACRON
+01E3 LATIN SMALL LETTER AE WITH MACRON
+01E4 LATIN CAPITAL LETTER G WITH STROKE
+01E5 LATIN SMALL LETTER G WITH STROKE
+01E6 LATIN CAPITAL LETTER G WITH CARON
+01E7 LATIN SMALL LETTER G WITH CARON
+01E8 LATIN CAPITAL LETTER K WITH CARON
+01E9 LATIN SMALL LETTER K WITH CARON
+01EA LATIN CAPITAL LETTER O WITH OGONEK
+01EB LATIN SMALL LETTER O WITH OGONEK
+01EC LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01ED LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EE LATIN CAPITAL LETTER EZH WITH CARON
+01EF LATIN SMALL LETTER EZH WITH CARON
+01F0 LATIN SMALL LETTER J WITH CARON
+01F1 LATIN CAPITAL LETTER DZ
+01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F3 LATIN SMALL LETTER DZ
+01F4 LATIN CAPITAL LETTER G WITH ACUTE
+01F5 LATIN SMALL LETTER G WITH ACUTE
+01F6 LATIN CAPITAL LETTER HWAIR
+01F7 LATIN CAPITAL LETTER WYNN
+01F8 LATIN CAPITAL LETTER N WITH GRAVE
+01F9 LATIN SMALL LETTER N WITH GRAVE
+01FA LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FB LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FC LATIN CAPITAL LETTER AE WITH ACUTE
+01FD LATIN SMALL LETTER AE WITH ACUTE
+01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0202 LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0203 LATIN SMALL LETTER A WITH INVERTED BREVE
+0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0207 LATIN SMALL LETTER E WITH INVERTED BREVE
+0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020A LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020B LATIN SMALL LETTER I WITH INVERTED BREVE
+020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020D LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020E LATIN CAPITAL LETTER O WITH INVERTED BREVE
+020F LATIN SMALL LETTER O WITH INVERTED BREVE
+0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0212 LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0213 LATIN SMALL LETTER R WITH INVERTED BREVE
+0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0217 LATIN SMALL LETTER U WITH INVERTED BREVE
+0218 LATIN CAPITAL LETTER S WITH COMMA BELOW
+0219 LATIN SMALL LETTER S WITH COMMA BELOW
+021A LATIN CAPITAL LETTER T WITH COMMA BELOW
+021B LATIN SMALL LETTER T WITH COMMA BELOW
+021C LATIN CAPITAL LETTER YOGH
+021D LATIN SMALL LETTER YOGH
+021E LATIN CAPITAL LETTER H WITH CARON
+021F LATIN SMALL LETTER H WITH CARON
+0220 LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0221 LATIN SMALL LETTER D WITH CURL
+0222 LATIN CAPITAL LETTER OU
+0223 LATIN SMALL LETTER OU
+0224 LATIN CAPITAL LETTER Z WITH HOOK
+0225 LATIN SMALL LETTER Z WITH HOOK
+0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
+0227 LATIN SMALL LETTER A WITH DOT ABOVE
+0228 LATIN CAPITAL LETTER E WITH CEDILLA
+0229 LATIN SMALL LETTER E WITH CEDILLA
+022A LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022C LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022D LATIN SMALL LETTER O WITH TILDE AND MACRON
+022E LATIN CAPITAL LETTER O WITH DOT ABOVE
+022F LATIN SMALL LETTER O WITH DOT ABOVE
+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0232 LATIN CAPITAL LETTER Y WITH MACRON
+0233 LATIN SMALL LETTER Y WITH MACRON
+0234 LATIN SMALL LETTER L WITH CURL
+0235 LATIN SMALL LETTER N WITH CURL
+0236 LATIN SMALL LETTER T WITH CURL
+0237 LATIN SMALL LETTER DOTLESS J
+0238 LATIN SMALL LETTER DB DIGRAPH
+0239 LATIN SMALL LETTER QP DIGRAPH
+023A LATIN CAPITAL LETTER A WITH STROKE
+023B LATIN CAPITAL LETTER C WITH STROKE
+023C LATIN SMALL LETTER C WITH STROKE
+023D LATIN CAPITAL LETTER L WITH BAR
+023E LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+023F LATIN SMALL LETTER S WITH SWASH TAIL
+0240 LATIN SMALL LETTER Z WITH SWASH TAIL
+0241 LATIN CAPITAL LETTER GLOTTAL STOP
+0250 LATIN SMALL LETTER TURNED A
+0251 LATIN SMALL LETTER ALPHA
+0252 LATIN SMALL LETTER TURNED ALPHA
+0253 LATIN SMALL LETTER B WITH HOOK
+0254 LATIN SMALL LETTER OPEN O
+0255 LATIN SMALL LETTER C WITH CURL
+0256 LATIN SMALL LETTER D WITH TAIL
+0257 LATIN SMALL LETTER D WITH HOOK
+0258 LATIN SMALL LETTER REVERSED E
+0259 LATIN SMALL LETTER SCHWA
+025A LATIN SMALL LETTER SCHWA WITH HOOK
+025B LATIN SMALL LETTER OPEN E
+025C LATIN SMALL LETTER REVERSED OPEN E
+025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+025E LATIN SMALL LETTER CLOSED REVERSED OPEN E
+025F LATIN SMALL LETTER DOTLESS J WITH STROKE
+0260 LATIN SMALL LETTER G WITH HOOK
+0261 LATIN SMALL LETTER SCRIPT G
+0262 LATIN LETTER SMALL CAPITAL G
+0263 LATIN SMALL LETTER GAMMA
+0264 LATIN SMALL LETTER RAMS HORN
+0265 LATIN SMALL LETTER TURNED H
+0266 LATIN SMALL LETTER H WITH HOOK
+0267 LATIN SMALL LETTER HENG WITH HOOK
+0268 LATIN SMALL LETTER I WITH STROKE
+0269 LATIN SMALL LETTER IOTA
+026A LATIN LETTER SMALL CAPITAL I
+026B LATIN SMALL LETTER L WITH MIDDLE TILDE
+026C LATIN SMALL LETTER L WITH BELT
+026D LATIN SMALL LETTER L WITH RETROFLEX HOOK
+026E LATIN SMALL LETTER LEZH
+026F LATIN SMALL LETTER TURNED M
+0270 LATIN SMALL LETTER TURNED M WITH LONG LEG
+0271 LATIN SMALL LETTER M WITH HOOK
+0272 LATIN SMALL LETTER N WITH LEFT HOOK
+0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK
+0274 LATIN LETTER SMALL CAPITAL N
+0275 LATIN SMALL LETTER BARRED O
+0276 LATIN LETTER SMALL CAPITAL OE
+0277 LATIN SMALL LETTER CLOSED OMEGA
+0278 LATIN SMALL LETTER PHI
+0279 LATIN SMALL LETTER TURNED R
+027A LATIN SMALL LETTER TURNED R WITH LONG LEG
+027B LATIN SMALL LETTER TURNED R WITH HOOK
+027C LATIN SMALL LETTER R WITH LONG LEG
+027D LATIN SMALL LETTER R WITH TAIL
+027E LATIN SMALL LETTER R WITH FISHHOOK
+027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+0280 LATIN LETTER SMALL CAPITAL R
+0281 LATIN LETTER SMALL CAPITAL INVERTED R
+0282 LATIN SMALL LETTER S WITH HOOK
+0283 LATIN SMALL LETTER ESH
+0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+0285 LATIN SMALL LETTER SQUAT REVERSED ESH
+0286 LATIN SMALL LETTER ESH WITH CURL
+0287 LATIN SMALL LETTER TURNED T
+0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK
+0289 LATIN SMALL LETTER U BAR
+028A LATIN SMALL LETTER UPSILON
+028B LATIN SMALL LETTER V WITH HOOK
+028C LATIN SMALL LETTER TURNED V
+028D LATIN SMALL LETTER TURNED W
+028E LATIN SMALL LETTER TURNED Y
+028F LATIN LETTER SMALL CAPITAL Y
+0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+0291 LATIN SMALL LETTER Z WITH CURL
+0292 LATIN SMALL LETTER EZH
+0293 LATIN SMALL LETTER EZH WITH CURL
+0294 LATIN LETTER GLOTTAL STOP
+0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+0296 LATIN LETTER INVERTED GLOTTAL STOP
+0297 LATIN LETTER STRETCHED C
+0298 LATIN LETTER BILABIAL CLICK
+0299 LATIN LETTER SMALL CAPITAL B
+029A LATIN SMALL LETTER CLOSED OPEN E
+029B LATIN LETTER SMALL CAPITAL G WITH HOOK
+029C LATIN LETTER SMALL CAPITAL H
+029D LATIN SMALL LETTER J WITH CROSSED-TAIL
+029E LATIN SMALL LETTER TURNED K
+029F LATIN LETTER SMALL CAPITAL L
+02A0 LATIN SMALL LETTER Q WITH HOOK
+02A1 LATIN LETTER GLOTTAL STOP WITH STROKE
+02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+02A3 LATIN SMALL LETTER DZ DIGRAPH
+02A4 LATIN SMALL LETTER DEZH DIGRAPH
+02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+02A6 LATIN SMALL LETTER TS DIGRAPH
+02A7 LATIN SMALL LETTER TESH DIGRAPH
+02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9 LATIN SMALL LETTER FENG DIGRAPH
+02AA LATIN SMALL LETTER LS DIGRAPH
+02AB LATIN SMALL LETTER LZ DIGRAPH
+02AC LATIN LETTER BILABIAL PERCUSSIVE
+02AD LATIN LETTER BIDENTAL PERCUSSIVE
+02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0 MODIFIER LETTER SMALL H
+02B1 MODIFIER LETTER SMALL H WITH HOOK
+02B2 MODIFIER LETTER SMALL J
+02B3 MODIFIER LETTER SMALL R
+02B4 MODIFIER LETTER SMALL TURNED R
+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7 MODIFIER LETTER SMALL W
+02B8 MODIFIER LETTER SMALL Y
+02B9 MODIFIER LETTER PRIME
+02BA MODIFIER LETTER DOUBLE PRIME
+02BB MODIFIER LETTER TURNED COMMA
+02BC MODIFIER LETTER APOSTROPHE
+02BD MODIFIER LETTER REVERSED COMMA
+02BE MODIFIER LETTER RIGHT HALF RING
+02BF MODIFIER LETTER LEFT HALF RING
+02C0 MODIFIER LETTER GLOTTAL STOP
+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2 MODIFIER LETTER LEFT ARROWHEAD
+02C3 MODIFIER LETTER RIGHT ARROWHEAD
+02C4 MODIFIER LETTER UP ARROWHEAD
+02C5 MODIFIER LETTER DOWN ARROWHEAD
+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
+02C7 CARON
+02C8 MODIFIER LETTER VERTICAL LINE
+02C9 MODIFIER LETTER MACRON
+02CA MODIFIER LETTER ACUTE ACCENT
+02CB MODIFIER LETTER GRAVE ACCENT
+02CC MODIFIER LETTER LOW VERTICAL LINE
+02CD MODIFIER LETTER LOW MACRON
+02CE MODIFIER LETTER LOW GRAVE ACCENT
+02CF MODIFIER LETTER LOW ACUTE ACCENT
+02D0 MODIFIER LETTER TRIANGULAR COLON
+02D1 MODIFIER LETTER HALF TRIANGULAR COLON
+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING
+02D3 MODIFIER LETTER CENTRED LEFT HALF RING
+02D4 MODIFIER LETTER UP TACK
+02D5 MODIFIER LETTER DOWN TACK
+02D6 MODIFIER LETTER PLUS SIGN
+02D7 MODIFIER LETTER MINUS SIGN
+02D8 BREVE
+02D9 DOT ABOVE
+02DA RING ABOVE
+02DB OGONEK
+02DC SMALL TILDE
+02DD DOUBLE ACUTE ACCENT
+02DE MODIFIER LETTER RHOTIC HOOK
+02DF MODIFIER LETTER CROSS ACCENT
+02E0 MODIFIER LETTER SMALL GAMMA
+02E1 MODIFIER LETTER SMALL L
+02E2 MODIFIER LETTER SMALL S
+02E3 MODIFIER LETTER SMALL X
+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6 MODIFIER LETTER HIGH TONE BAR
+02E7 MODIFIER LETTER MID TONE BAR
+02E8 MODIFIER LETTER LOW TONE BAR
+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC MODIFIER LETTER VOICING
+02ED MODIFIER LETTER UNASPIRATED
+02EE MODIFIER LETTER DOUBLE APOSTROPHE
+02EF MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0 MODIFIER LETTER LOW UP ARROWHEAD
+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3 MODIFIER LETTER LOW RING
+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7 MODIFIER LETTER LOW TILDE
+02F8 MODIFIER LETTER RAISED COLON
+02F9 MODIFIER LETTER BEGIN HIGH TONE
+02FA MODIFIER LETTER END HIGH TONE
+02FB MODIFIER LETTER BEGIN LOW TONE
+02FC MODIFIER LETTER END LOW TONE
+02FD MODIFIER LETTER SHELF
+02FE MODIFIER LETTER OPEN SHELF
+02FF MODIFIER LETTER LOW LEFT ARROW
+0300 COMBINING GRAVE ACCENT
+0301 COMBINING ACUTE ACCENT
+0302 COMBINING CIRCUMFLEX ACCENT
+0303 COMBINING TILDE
+0304 COMBINING MACRON
+0305 COMBINING OVERLINE
+0306 COMBINING BREVE
+0307 COMBINING DOT ABOVE
+0308 COMBINING DIAERESIS
+0309 COMBINING HOOK ABOVE
+030A COMBINING RING ABOVE
+030B COMBINING DOUBLE ACUTE ACCENT
+030C COMBINING CARON
+030D COMBINING VERTICAL LINE ABOVE
+030E COMBINING DOUBLE VERTICAL LINE ABOVE
+030F COMBINING DOUBLE GRAVE ACCENT
+0310 COMBINING CANDRABINDU
+0311 COMBINING INVERTED BREVE
+0312 COMBINING TURNED COMMA ABOVE
+0313 COMBINING COMMA ABOVE
+0314 COMBINING REVERSED COMMA ABOVE
+0315 COMBINING COMMA ABOVE RIGHT
+0316 COMBINING GRAVE ACCENT BELOW
+0317 COMBINING ACUTE ACCENT BELOW
+0318 COMBINING LEFT TACK BELOW
+0319 COMBINING RIGHT TACK BELOW
+031A COMBINING LEFT ANGLE ABOVE
+031B COMBINING HORN
+031C COMBINING LEFT HALF RING BELOW
+031D COMBINING UP TACK BELOW
+031E COMBINING DOWN TACK BELOW
+031F COMBINING PLUS SIGN BELOW
+0320 COMBINING MINUS SIGN BELOW
+0321 COMBINING PALATALIZED HOOK BELOW
+0322 COMBINING RETROFLEX HOOK BELOW
+0323 COMBINING DOT BELOW
+0324 COMBINING DIAERESIS BELOW
+0325 COMBINING RING BELOW
+0326 COMBINING COMMA BELOW
+0327 COMBINING CEDILLA
+0328 COMBINING OGONEK
+0329 COMBINING VERTICAL LINE BELOW
+032A COMBINING BRIDGE BELOW
+032B COMBINING INVERTED DOUBLE ARCH BELOW
+032C COMBINING CARON BELOW
+032D COMBINING CIRCUMFLEX ACCENT BELOW
+032E COMBINING BREVE BELOW
+032F COMBINING INVERTED BREVE BELOW
+0330 COMBINING TILDE BELOW
+0331 COMBINING MACRON BELOW
+0332 COMBINING LOW LINE
+0333 COMBINING DOUBLE LOW LINE
+0334 COMBINING TILDE OVERLAY
+0335 COMBINING SHORT STROKE OVERLAY
+0336 COMBINING LONG STROKE OVERLAY
+0337 COMBINING SHORT SOLIDUS OVERLAY
+0338 COMBINING LONG SOLIDUS OVERLAY
+0339 COMBINING RIGHT HALF RING BELOW
+033A COMBINING INVERTED BRIDGE BELOW
+033B COMBINING SQUARE BELOW
+033C COMBINING SEAGULL BELOW
+033D COMBINING X ABOVE
+033E COMBINING VERTICAL TILDE
+033F COMBINING DOUBLE OVERLINE
+0340 COMBINING GRAVE TONE MARK
+0341 COMBINING ACUTE TONE MARK
+0342 COMBINING GREEK PERISPOMENI
+0343 COMBINING GREEK KORONIS
+0344 COMBINING GREEK DIALYTIKA TONOS
+0345 COMBINING GREEK YPOGEGRAMMENI
+0346 COMBINING BRIDGE ABOVE
+0347 COMBINING EQUALS SIGN BELOW
+0348 COMBINING DOUBLE VERTICAL LINE BELOW
+0349 COMBINING LEFT ANGLE BELOW
+034A COMBINING NOT TILDE ABOVE
+034B COMBINING HOMOTHETIC ABOVE
+034C COMBINING ALMOST EQUAL TO ABOVE
+034D COMBINING LEFT RIGHT ARROW BELOW
+034E COMBINING UPWARDS ARROW BELOW
+034F COMBINING GRAPHEME JOINER
+0350 COMBINING RIGHT ARROWHEAD ABOVE
+0351 COMBINING LEFT HALF RING ABOVE
+0352 COMBINING FERMATA
+0353 COMBINING X BELOW
+0354 COMBINING LEFT ARROWHEAD BELOW
+0355 COMBINING RIGHT ARROWHEAD BELOW
+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0357 COMBINING RIGHT HALF RING ABOVE
+0358 COMBINING DOT ABOVE RIGHT
+0359 COMBINING ASTERISK BELOW
+035A COMBINING DOUBLE RING BELOW
+035B COMBINING ZIGZAG ABOVE
+035C COMBINING DOUBLE BREVE BELOW
+035D COMBINING DOUBLE BREVE
+035E COMBINING DOUBLE MACRON
+035F COMBINING DOUBLE MACRON BELOW
+0360 COMBINING DOUBLE TILDE
+0361 COMBINING DOUBLE INVERTED BREVE
+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0363 COMBINING LATIN SMALL LETTER A
+0364 COMBINING LATIN SMALL LETTER E
+0365 COMBINING LATIN SMALL LETTER I
+0366 COMBINING LATIN SMALL LETTER O
+0367 COMBINING LATIN SMALL LETTER U
+0368 COMBINING LATIN SMALL LETTER C
+0369 COMBINING LATIN SMALL LETTER D
+036A COMBINING LATIN SMALL LETTER H
+036B COMBINING LATIN SMALL LETTER M
+036C COMBINING LATIN SMALL LETTER R
+036D COMBINING LATIN SMALL LETTER T
+036E COMBINING LATIN SMALL LETTER V
+036F COMBINING LATIN SMALL LETTER X
+0374 GREEK NUMERAL SIGN
+0375 GREEK LOWER NUMERAL SIGN
+037A GREEK YPOGEGRAMMENI
+037E GREEK QUESTION MARK
+0384 GREEK TONOS
+0385 GREEK DIALYTIKA TONOS
+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 GREEK ANO TELEIA
+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389 GREEK CAPITAL LETTER ETA WITH TONOS
+038A GREEK CAPITAL LETTER IOTA WITH TONOS
+038C GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F GREEK CAPITAL LETTER OMEGA WITH TONOS
+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+0391 GREEK CAPITAL LETTER ALPHA
+0392 GREEK CAPITAL LETTER BETA
+0393 GREEK CAPITAL LETTER GAMMA
+0394 GREEK CAPITAL LETTER DELTA
+0395 GREEK CAPITAL LETTER EPSILON
+0396 GREEK CAPITAL LETTER ZETA
+0397 GREEK CAPITAL LETTER ETA
+0398 GREEK CAPITAL LETTER THETA
+0399 GREEK CAPITAL LETTER IOTA
+039A GREEK CAPITAL LETTER KAPPA
+039B GREEK CAPITAL LETTER LAMDA
+039C GREEK CAPITAL LETTER MU
+039D GREEK CAPITAL LETTER NU
+039E GREEK CAPITAL LETTER XI
+039F GREEK CAPITAL LETTER OMICRON
+03A0 GREEK CAPITAL LETTER PI
+03A1 GREEK CAPITAL LETTER RHO
+03A3 GREEK CAPITAL LETTER SIGMA
+03A4 GREEK CAPITAL LETTER TAU
+03A5 GREEK CAPITAL LETTER UPSILON
+03A6 GREEK CAPITAL LETTER PHI
+03A7 GREEK CAPITAL LETTER CHI
+03A8 GREEK CAPITAL LETTER PSI
+03A9 GREEK CAPITAL LETTER OMEGA
+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03AC GREEK SMALL LETTER ALPHA WITH TONOS
+03AD GREEK SMALL LETTER EPSILON WITH TONOS
+03AE GREEK SMALL LETTER ETA WITH TONOS
+03AF GREEK SMALL LETTER IOTA WITH TONOS
+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03B1 GREEK SMALL LETTER ALPHA
+03B2 GREEK SMALL LETTER BETA
+03B3 GREEK SMALL LETTER GAMMA
+03B4 GREEK SMALL LETTER DELTA
+03B5 GREEK SMALL LETTER EPSILON
+03B6 GREEK SMALL LETTER ZETA
+03B7 GREEK SMALL LETTER ETA
+03B8 GREEK SMALL LETTER THETA
+03B9 GREEK SMALL LETTER IOTA
+03BA GREEK SMALL LETTER KAPPA
+03BB GREEK SMALL LETTER LAMDA
+03BC GREEK SMALL LETTER MU
+03BD GREEK SMALL LETTER NU
+03BE GREEK SMALL LETTER XI
+03BF GREEK SMALL LETTER OMICRON
+03C0 GREEK SMALL LETTER PI
+03C1 GREEK SMALL LETTER RHO
+03C2 GREEK SMALL LETTER FINAL SIGMA
+03C3 GREEK SMALL LETTER SIGMA
+03C4 GREEK SMALL LETTER TAU
+03C5 GREEK SMALL LETTER UPSILON
+03C6 GREEK SMALL LETTER PHI
+03C7 GREEK SMALL LETTER CHI
+03C8 GREEK SMALL LETTER PSI
+03C9 GREEK SMALL LETTER OMEGA
+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA
+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+03CC GREEK SMALL LETTER OMICRON WITH TONOS
+03CD GREEK SMALL LETTER UPSILON WITH TONOS
+03CE GREEK SMALL LETTER OMEGA WITH TONOS
+03D0 GREEK BETA SYMBOL
+03D1 GREEK THETA SYMBOL
+03D2 GREEK UPSILON WITH HOOK SYMBOL
+03D3 GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4 GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5 GREEK PHI SYMBOL
+03D6 GREEK PI SYMBOL
+03D7 GREEK KAI SYMBOL
+03D8 GREEK LETTER ARCHAIC KOPPA
+03D9 GREEK SMALL LETTER ARCHAIC KOPPA
+03DA GREEK LETTER STIGMA
+03DB GREEK SMALL LETTER STIGMA
+03DC GREEK LETTER DIGAMMA
+03DD GREEK SMALL LETTER DIGAMMA
+03DE GREEK LETTER KOPPA
+03DF GREEK SMALL LETTER KOPPA
+03E0 GREEK LETTER SAMPI
+03E1 GREEK SMALL LETTER SAMPI
+03E2 COPTIC CAPITAL LETTER SHEI
+03E3 COPTIC SMALL LETTER SHEI
+03E4 COPTIC CAPITAL LETTER FEI
+03E5 COPTIC SMALL LETTER FEI
+03E6 COPTIC CAPITAL LETTER KHEI
+03E7 COPTIC SMALL LETTER KHEI
+03E8 COPTIC CAPITAL LETTER HORI
+03E9 COPTIC SMALL LETTER HORI
+03EA COPTIC CAPITAL LETTER GANGIA
+03EB COPTIC SMALL LETTER GANGIA
+03EC COPTIC CAPITAL LETTER SHIMA
+03ED COPTIC SMALL LETTER SHIMA
+03EE COPTIC CAPITAL LETTER DEI
+03EF COPTIC SMALL LETTER DEI
+03F0 GREEK KAPPA SYMBOL
+03F1 GREEK RHO SYMBOL
+03F2 GREEK LUNATE SIGMA SYMBOL
+03F3 GREEK LETTER YOT
+03F4 GREEK CAPITAL THETA SYMBOL
+03F5 GREEK LUNATE EPSILON SYMBOL
+03F6 GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7 GREEK CAPITAL LETTER SHO
+03F8 GREEK SMALL LETTER SHO
+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA GREEK CAPITAL LETTER SAN
+03FB GREEK SMALL LETTER SAN
+03FC GREEK RHO WITH STROKE SYMBOL
+03FD GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401 CYRILLIC CAPITAL LETTER IO
+0402 CYRILLIC CAPITAL LETTER DJE
+0403 CYRILLIC CAPITAL LETTER GJE
+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405 CYRILLIC CAPITAL LETTER DZE
+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407 CYRILLIC CAPITAL LETTER YI
+0408 CYRILLIC CAPITAL LETTER JE
+0409 CYRILLIC CAPITAL LETTER LJE
+040A CYRILLIC CAPITAL LETTER NJE
+040B CYRILLIC CAPITAL LETTER TSHE
+040C CYRILLIC CAPITAL LETTER KJE
+040D CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E CYRILLIC CAPITAL LETTER SHORT U
+040F CYRILLIC CAPITAL LETTER DZHE
+0410 CYRILLIC CAPITAL LETTER A
+0411 CYRILLIC CAPITAL LETTER BE
+0412 CYRILLIC CAPITAL LETTER VE
+0413 CYRILLIC CAPITAL LETTER GHE
+0414 CYRILLIC CAPITAL LETTER DE
+0415 CYRILLIC CAPITAL LETTER IE
+0416 CYRILLIC CAPITAL LETTER ZHE
+0417 CYRILLIC CAPITAL LETTER ZE
+0418 CYRILLIC CAPITAL LETTER I
+0419 CYRILLIC CAPITAL LETTER SHORT I
+041A CYRILLIC CAPITAL LETTER KA
+041B CYRILLIC CAPITAL LETTER EL
+041C CYRILLIC CAPITAL LETTER EM
+041D CYRILLIC CAPITAL LETTER EN
+041E CYRILLIC CAPITAL LETTER O
+041F CYRILLIC CAPITAL LETTER PE
+0420 CYRILLIC CAPITAL LETTER ER
+0421 CYRILLIC CAPITAL LETTER ES
+0422 CYRILLIC CAPITAL LETTER TE
+0423 CYRILLIC CAPITAL LETTER U
+0424 CYRILLIC CAPITAL LETTER EF
+0425 CYRILLIC CAPITAL LETTER HA
+0426 CYRILLIC CAPITAL LETTER TSE
+0427 CYRILLIC CAPITAL LETTER CHE
+0428 CYRILLIC CAPITAL LETTER SHA
+0429 CYRILLIC CAPITAL LETTER SHCHA
+042A CYRILLIC CAPITAL LETTER HARD SIGN
+042B CYRILLIC CAPITAL LETTER YERU
+042C CYRILLIC CAPITAL LETTER SOFT SIGN
+042D CYRILLIC CAPITAL LETTER E
+042E CYRILLIC CAPITAL LETTER YU
+042F CYRILLIC CAPITAL LETTER YA
+0430 CYRILLIC SMALL LETTER A
+0431 CYRILLIC SMALL LETTER BE
+0432 CYRILLIC SMALL LETTER VE
+0433 CYRILLIC SMALL LETTER GHE
+0434 CYRILLIC SMALL LETTER DE
+0435 CYRILLIC SMALL LETTER IE
+0436 CYRILLIC SMALL LETTER ZHE
+0437 CYRILLIC SMALL LETTER ZE
+0438 CYRILLIC SMALL LETTER I
+0439 CYRILLIC SMALL LETTER SHORT I
+043A CYRILLIC SMALL LETTER KA
+043B CYRILLIC SMALL LETTER EL
+043C CYRILLIC SMALL LETTER EM
+043D CYRILLIC SMALL LETTER EN
+043E CYRILLIC SMALL LETTER O
+043F CYRILLIC SMALL LETTER PE
+0440 CYRILLIC SMALL LETTER ER
+0441 CYRILLIC SMALL LETTER ES
+0442 CYRILLIC SMALL LETTER TE
+0443 CYRILLIC SMALL LETTER U
+0444 CYRILLIC SMALL LETTER EF
+0445 CYRILLIC SMALL LETTER HA
+0446 CYRILLIC SMALL LETTER TSE
+0447 CYRILLIC SMALL LETTER CHE
+0448 CYRILLIC SMALL LETTER SHA
+0449 CYRILLIC SMALL LETTER SHCHA
+044A CYRILLIC SMALL LETTER HARD SIGN
+044B CYRILLIC SMALL LETTER YERU
+044C CYRILLIC SMALL LETTER SOFT SIGN
+044D CYRILLIC SMALL LETTER E
+044E CYRILLIC SMALL LETTER YU
+044F CYRILLIC SMALL LETTER YA
+0450 CYRILLIC SMALL LETTER IE WITH GRAVE
+0451 CYRILLIC SMALL LETTER IO
+0452 CYRILLIC SMALL LETTER DJE
+0453 CYRILLIC SMALL LETTER GJE
+0454 CYRILLIC SMALL LETTER UKRAINIAN IE
+0455 CYRILLIC SMALL LETTER DZE
+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0457 CYRILLIC SMALL LETTER YI
+0458 CYRILLIC SMALL LETTER JE
+0459 CYRILLIC SMALL LETTER LJE
+045A CYRILLIC SMALL LETTER NJE
+045B CYRILLIC SMALL LETTER TSHE
+045C CYRILLIC SMALL LETTER KJE
+045D CYRILLIC SMALL LETTER I WITH GRAVE
+045E CYRILLIC SMALL LETTER SHORT U
+045F CYRILLIC SMALL LETTER DZHE
+0460 CYRILLIC CAPITAL LETTER OMEGA
+0461 CYRILLIC SMALL LETTER OMEGA
+0462 CYRILLIC CAPITAL LETTER YAT
+0463 CYRILLIC SMALL LETTER YAT
+0464 CYRILLIC CAPITAL LETTER IOTIFIED E
+0465 CYRILLIC SMALL LETTER IOTIFIED E
+0466 CYRILLIC CAPITAL LETTER LITTLE YUS
+0467 CYRILLIC SMALL LETTER LITTLE YUS
+0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A CYRILLIC CAPITAL LETTER BIG YUS
+046B CYRILLIC SMALL LETTER BIG YUS
+046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E CYRILLIC CAPITAL LETTER KSI
+046F CYRILLIC SMALL LETTER KSI
+0470 CYRILLIC CAPITAL LETTER PSI
+0471 CYRILLIC SMALL LETTER PSI
+0472 CYRILLIC CAPITAL LETTER FITA
+0473 CYRILLIC SMALL LETTER FITA
+0474 CYRILLIC CAPITAL LETTER IZHITSA
+0475 CYRILLIC SMALL LETTER IZHITSA
+0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 CYRILLIC CAPITAL LETTER UK
+0479 CYRILLIC SMALL LETTER UK
+047A CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B CYRILLIC SMALL LETTER ROUND OMEGA
+047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E CYRILLIC CAPITAL LETTER OT
+047F CYRILLIC SMALL LETTER OT
+0480 CYRILLIC CAPITAL LETTER KOPPA
+0481 CYRILLIC SMALL LETTER KOPPA
+0482 CYRILLIC THOUSANDS SIGN
+0483 COMBINING CYRILLIC TITLO
+0484 COMBINING CYRILLIC PALATALIZATION
+0485 COMBINING CYRILLIC DASIA PNEUMATA
+0486 COMBINING CYRILLIC PSILI PNEUMATA
+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489 COMBINING CYRILLIC MILLIONS SIGN
+048A CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D CYRILLIC SMALL LETTER SEMISOFT SIGN
+048E CYRILLIC CAPITAL LETTER ER WITH TICK
+048F CYRILLIC SMALL LETTER ER WITH TICK
+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493 CYRILLIC SMALL LETTER GHE WITH STROKE
+0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B CYRILLIC SMALL LETTER KA WITH DESCENDER
+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049E CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F CYRILLIC SMALL LETTER KA WITH STROKE
+04A0 CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1 CYRILLIC SMALL LETTER BASHKIR KA
+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A4 CYRILLIC CAPITAL LIGATURE EN GHE
+04A5 CYRILLIC SMALL LIGATURE EN GHE
+04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9 CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AE CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF CYRILLIC SMALL LETTER STRAIGHT U
+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B4 CYRILLIC CAPITAL LIGATURE TE TSE
+04B5 CYRILLIC SMALL LIGATURE TE TSE
+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BA CYRILLIC CAPITAL LETTER SHHA
+04BB CYRILLIC SMALL LETTER SHHA
+04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0 CYRILLIC LETTER PALOCHKA
+04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4 CYRILLIC SMALL LETTER KA WITH HOOK
+04C5 CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6 CYRILLIC SMALL LETTER EL WITH TAIL
+04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8 CYRILLIC SMALL LETTER EN WITH HOOK
+04C9 CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA CYRILLIC SMALL LETTER EN WITH TAIL
+04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE CYRILLIC SMALL LETTER EM WITH TAIL
+04D0 CYRILLIC CAPITAL LETTER A WITH BREVE
+04D1 CYRILLIC SMALL LETTER A WITH BREVE
+04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D4 CYRILLIC CAPITAL LIGATURE A IE
+04D5 CYRILLIC SMALL LIGATURE A IE
+04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D7 CYRILLIC SMALL LETTER IE WITH BREVE
+04D8 CYRILLIC CAPITAL LETTER SCHWA
+04D9 CYRILLIC SMALL LETTER SCHWA
+04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON
+04E3 CYRILLIC SMALL LETTER I WITH MACRON
+04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E8 CYRILLIC CAPITAL LETTER BARRED O
+04E9 CYRILLIC SMALL LETTER BARRED O
+04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE CYRILLIC CAPITAL LETTER U WITH MACRON
+04EF CYRILLIC SMALL LETTER U WITH MACRON
+04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6 CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7 CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500 CYRILLIC CAPITAL LETTER KOMI DE
+0501 CYRILLIC SMALL LETTER KOMI DE
+0502 CYRILLIC CAPITAL LETTER KOMI DJE
+0503 CYRILLIC SMALL LETTER KOMI DJE
+0504 CYRILLIC CAPITAL LETTER KOMI ZJE
+0505 CYRILLIC SMALL LETTER KOMI ZJE
+0506 CYRILLIC CAPITAL LETTER KOMI DZJE
+0507 CYRILLIC SMALL LETTER KOMI DZJE
+0508 CYRILLIC CAPITAL LETTER KOMI LJE
+0509 CYRILLIC SMALL LETTER KOMI LJE
+050A CYRILLIC CAPITAL LETTER KOMI NJE
+050B CYRILLIC SMALL LETTER KOMI NJE
+050C CYRILLIC CAPITAL LETTER KOMI SJE
+050D CYRILLIC SMALL LETTER KOMI SJE
+050E CYRILLIC CAPITAL LETTER KOMI TJE
+050F CYRILLIC SMALL LETTER KOMI TJE
+0531 ARMENIAN CAPITAL LETTER AYB
+0532 ARMENIAN CAPITAL LETTER BEN
+0533 ARMENIAN CAPITAL LETTER GIM
+0534 ARMENIAN CAPITAL LETTER DA
+0535 ARMENIAN CAPITAL LETTER ECH
+0536 ARMENIAN CAPITAL LETTER ZA
+0537 ARMENIAN CAPITAL LETTER EH
+0538 ARMENIAN CAPITAL LETTER ET
+0539 ARMENIAN CAPITAL LETTER TO
+053A ARMENIAN CAPITAL LETTER ZHE
+053B ARMENIAN CAPITAL LETTER INI
+053C ARMENIAN CAPITAL LETTER LIWN
+053D ARMENIAN CAPITAL LETTER XEH
+053E ARMENIAN CAPITAL LETTER CA
+053F ARMENIAN CAPITAL LETTER KEN
+0540 ARMENIAN CAPITAL LETTER HO
+0541 ARMENIAN CAPITAL LETTER JA
+0542 ARMENIAN CAPITAL LETTER GHAD
+0543 ARMENIAN CAPITAL LETTER CHEH
+0544 ARMENIAN CAPITAL LETTER MEN
+0545 ARMENIAN CAPITAL LETTER YI
+0546 ARMENIAN CAPITAL LETTER NOW
+0547 ARMENIAN CAPITAL LETTER SHA
+0548 ARMENIAN CAPITAL LETTER VO
+0549 ARMENIAN CAPITAL LETTER CHA
+054A ARMENIAN CAPITAL LETTER PEH
+054B ARMENIAN CAPITAL LETTER JHEH
+054C ARMENIAN CAPITAL LETTER RA
+054D ARMENIAN CAPITAL LETTER SEH
+054E ARMENIAN CAPITAL LETTER VEW
+054F ARMENIAN CAPITAL LETTER TIWN
+0550 ARMENIAN CAPITAL LETTER REH
+0551 ARMENIAN CAPITAL LETTER CO
+0552 ARMENIAN CAPITAL LETTER YIWN
+0553 ARMENIAN CAPITAL LETTER PIWR
+0554 ARMENIAN CAPITAL LETTER KEH
+0555 ARMENIAN CAPITAL LETTER OH
+0556 ARMENIAN CAPITAL LETTER FEH
+0559 ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A ARMENIAN APOSTROPHE
+055B ARMENIAN EMPHASIS MARK
+055C ARMENIAN EXCLAMATION MARK
+055D ARMENIAN COMMA
+055E ARMENIAN QUESTION MARK
+055F ARMENIAN ABBREVIATION MARK
+0561 ARMENIAN SMALL LETTER AYB
+0562 ARMENIAN SMALL LETTER BEN
+0563 ARMENIAN SMALL LETTER GIM
+0564 ARMENIAN SMALL LETTER DA
+0565 ARMENIAN SMALL LETTER ECH
+0566 ARMENIAN SMALL LETTER ZA
+0567 ARMENIAN SMALL LETTER EH
+0568 ARMENIAN SMALL LETTER ET
+0569 ARMENIAN SMALL LETTER TO
+056A ARMENIAN SMALL LETTER ZHE
+056B ARMENIAN SMALL LETTER INI
+056C ARMENIAN SMALL LETTER LIWN
+056D ARMENIAN SMALL LETTER XEH
+056E ARMENIAN SMALL LETTER CA
+056F ARMENIAN SMALL LETTER KEN
+0570 ARMENIAN SMALL LETTER HO
+0571 ARMENIAN SMALL LETTER JA
+0572 ARMENIAN SMALL LETTER GHAD
+0573 ARMENIAN SMALL LETTER CHEH
+0574 ARMENIAN SMALL LETTER MEN
+0575 ARMENIAN SMALL LETTER YI
+0576 ARMENIAN SMALL LETTER NOW
+0577 ARMENIAN SMALL LETTER SHA
+0578 ARMENIAN SMALL LETTER VO
+0579 ARMENIAN SMALL LETTER CHA
+057A ARMENIAN SMALL LETTER PEH
+057B ARMENIAN SMALL LETTER JHEH
+057C ARMENIAN SMALL LETTER RA
+057D ARMENIAN SMALL LETTER SEH
+057E ARMENIAN SMALL LETTER VEW
+057F ARMENIAN SMALL LETTER TIWN
+0580 ARMENIAN SMALL LETTER REH
+0581 ARMENIAN SMALL LETTER CO
+0582 ARMENIAN SMALL LETTER YIWN
+0583 ARMENIAN SMALL LETTER PIWR
+0584 ARMENIAN SMALL LETTER KEH
+0585 ARMENIAN SMALL LETTER OH
+0586 ARMENIAN SMALL LETTER FEH
+0587 ARMENIAN SMALL LIGATURE ECH YIWN
+0589 ARMENIAN FULL STOP
+058A ARMENIAN HYPHEN
+0591 HEBREW ACCENT ETNAHTA
+0592 HEBREW ACCENT SEGOL
+0593 HEBREW ACCENT SHALSHELET
+0594 HEBREW ACCENT ZAQEF QATAN
+0595 HEBREW ACCENT ZAQEF GADOL
+0596 HEBREW ACCENT TIPEHA
+0597 HEBREW ACCENT REVIA
+0598 HEBREW ACCENT ZARQA
+0599 HEBREW ACCENT PASHTA
+059A HEBREW ACCENT YETIV
+059B HEBREW ACCENT TEVIR
+059C HEBREW ACCENT GERESH
+059D HEBREW ACCENT GERESH MUQDAM
+059E HEBREW ACCENT GERSHAYIM
+059F HEBREW ACCENT QARNEY PARA
+05A0 HEBREW ACCENT TELISHA GEDOLA
+05A1 HEBREW ACCENT PAZER
+05A2 HEBREW ACCENT ATNAH HAFUKH
+05A3 HEBREW ACCENT MUNAH
+05A4 HEBREW ACCENT MAHAPAKH
+05A5 HEBREW ACCENT MERKHA
+05A6 HEBREW ACCENT MERKHA KEFULA
+05A7 HEBREW ACCENT DARGA
+05A8 HEBREW ACCENT QADMA
+05A9 HEBREW ACCENT TELISHA QETANA
+05AA HEBREW ACCENT YERAH BEN YOMO
+05AB HEBREW ACCENT OLE
+05AC HEBREW ACCENT ILUY
+05AD HEBREW ACCENT DEHI
+05AE HEBREW ACCENT ZINOR
+05AF HEBREW MARK MASORA CIRCLE
+05B0 HEBREW POINT SHEVA
+05B1 HEBREW POINT HATAF SEGOL
+05B2 HEBREW POINT HATAF PATAH
+05B3 HEBREW POINT HATAF QAMATS
+05B4 HEBREW POINT HIRIQ
+05B5 HEBREW POINT TSERE
+05B6 HEBREW POINT SEGOL
+05B7 HEBREW POINT PATAH
+05B8 HEBREW POINT QAMATS
+05B9 HEBREW POINT HOLAM
+05BB HEBREW POINT QUBUTS
+05BC HEBREW POINT DAGESH OR MAPIQ
+05BD HEBREW POINT METEG
+05BE HEBREW PUNCTUATION MAQAF
+05BF HEBREW POINT RAFE
+05C0 HEBREW PUNCTUATION PASEQ
+05C1 HEBREW POINT SHIN DOT
+05C2 HEBREW POINT SIN DOT
+05C3 HEBREW PUNCTUATION SOF PASUQ
+05C4 HEBREW MARK UPPER DOT
+05C5 HEBREW MARK LOWER DOT
+05C6 HEBREW PUNCTUATION NUN HAFUKHA
+05C7 HEBREW POINT QAMATS QATAN
+05D0 HEBREW LETTER ALEF
+05D1 HEBREW LETTER BET
+05D2 HEBREW LETTER GIMEL
+05D3 HEBREW LETTER DALET
+05D4 HEBREW LETTER HE
+05D5 HEBREW LETTER VAV
+05D6 HEBREW LETTER ZAYIN
+05D7 HEBREW LETTER HET
+05D8 HEBREW LETTER TET
+05D9 HEBREW LETTER YOD
+05DA HEBREW LETTER FINAL KAF
+05DB HEBREW LETTER KAF
+05DC HEBREW LETTER LAMED
+05DD HEBREW LETTER FINAL MEM
+05DE HEBREW LETTER MEM
+05DF HEBREW LETTER FINAL NUN
+05E0 HEBREW LETTER NUN
+05E1 HEBREW LETTER SAMEKH
+05E2 HEBREW LETTER AYIN
+05E3 HEBREW LETTER FINAL PE
+05E4 HEBREW LETTER PE
+05E5 HEBREW LETTER FINAL TSADI
+05E6 HEBREW LETTER TSADI
+05E7 HEBREW LETTER QOF
+05E8 HEBREW LETTER RESH
+05E9 HEBREW LETTER SHIN
+05EA HEBREW LETTER TAV
+05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
+05F1 HEBREW LIGATURE YIDDISH VAV YOD
+05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3 HEBREW PUNCTUATION GERESH
+05F4 HEBREW PUNCTUATION GERSHAYIM
+0600 ARABIC NUMBER SIGN
+0601 ARABIC SIGN SANAH
+0602 ARABIC FOOTNOTE MARKER
+0603 ARABIC SIGN SAFHA
+060B AFGHANI SIGN
+060C ARABIC COMMA
+060D ARABIC DATE SEPARATOR
+060E ARABIC POETIC VERSE SIGN
+060F ARABIC SIGN MISRA
+0610 ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+0611 ARABIC SIGN ALAYHE ASSALLAM
+0612 ARABIC SIGN RAHMATULLAH ALAYHE
+0613 ARABIC SIGN RADI ALLAHOU ANHU
+0614 ARABIC SIGN TAKHALLUS
+0615 ARABIC SMALL HIGH TAH
+061B ARABIC SEMICOLON
+061E ARABIC TRIPLE DOT PUNCTUATION MARK
+061F ARABIC QUESTION MARK
+0621 ARABIC LETTER HAMZA
+0622 ARABIC LETTER ALEF WITH MADDA ABOVE
+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
+0624 ARABIC LETTER WAW WITH HAMZA ABOVE
+0625 ARABIC LETTER ALEF WITH HAMZA BELOW
+0626 ARABIC LETTER YEH WITH HAMZA ABOVE
+0627 ARABIC LETTER ALEF
+0628 ARABIC LETTER BEH
+0629 ARABIC LETTER TEH MARBUTA
+062A ARABIC LETTER TEH
+062B ARABIC LETTER THEH
+062C ARABIC LETTER JEEM
+062D ARABIC LETTER HAH
+062E ARABIC LETTER KHAH
+062F ARABIC LETTER DAL
+0630 ARABIC LETTER THAL
+0631 ARABIC LETTER REH
+0632 ARABIC LETTER ZAIN
+0633 ARABIC LETTER SEEN
+0634 ARABIC LETTER SHEEN
+0635 ARABIC LETTER SAD
+0636 ARABIC LETTER DAD
+0637 ARABIC LETTER TAH
+0638 ARABIC LETTER ZAH
+0639 ARABIC LETTER AIN
+063A ARABIC LETTER GHAIN
+0640 ARABIC TATWEEL
+0641 ARABIC LETTER FEH
+0642 ARABIC LETTER QAF
+0643 ARABIC LETTER KAF
+0644 ARABIC LETTER LAM
+0645 ARABIC LETTER MEEM
+0646 ARABIC LETTER NOON
+0647 ARABIC LETTER HEH
+0648 ARABIC LETTER WAW
+0649 ARABIC LETTER ALEF MAKSURA
+064A ARABIC LETTER YEH
+064B ARABIC FATHATAN
+064C ARABIC DAMMATAN
+064D ARABIC KASRATAN
+064E ARABIC FATHA
+064F ARABIC DAMMA
+0650 ARABIC KASRA
+0651 ARABIC SHADDA
+0652 ARABIC SUKUN
+0653 ARABIC MADDAH ABOVE
+0654 ARABIC HAMZA ABOVE
+0655 ARABIC HAMZA BELOW
+0656 ARABIC SUBSCRIPT ALEF
+0657 ARABIC INVERTED DAMMA
+0658 ARABIC MARK NOON GHUNNA
+0659 ARABIC ZWARAKAY
+065A ARABIC VOWEL SIGN SMALL V ABOVE
+065B ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+065C ARABIC VOWEL SIGN DOT BELOW
+065D ARABIC REVERSED DAMMA
+065E ARABIC FATHA WITH TWO DOTS
+0660 ARABIC-INDIC DIGIT ZERO
+0661 ARABIC-INDIC DIGIT ONE
+0662 ARABIC-INDIC DIGIT TWO
+0663 ARABIC-INDIC DIGIT THREE
+0664 ARABIC-INDIC DIGIT FOUR
+0665 ARABIC-INDIC DIGIT FIVE
+0666 ARABIC-INDIC DIGIT SIX
+0667 ARABIC-INDIC DIGIT SEVEN
+0668 ARABIC-INDIC DIGIT EIGHT
+0669 ARABIC-INDIC DIGIT NINE
+066A ARABIC PERCENT SIGN
+066B ARABIC DECIMAL SEPARATOR
+066C ARABIC THOUSANDS SEPARATOR
+066D ARABIC FIVE POINTED STAR
+066E ARABIC LETTER DOTLESS BEH
+066F ARABIC LETTER DOTLESS QAF
+0670 ARABIC LETTER SUPERSCRIPT ALEF
+0671 ARABIC LETTER ALEF WASLA
+0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0674 ARABIC LETTER HIGH HAMZA
+0675 ARABIC LETTER HIGH HAMZA ALEF
+0676 ARABIC LETTER HIGH HAMZA WAW
+0677 ARABIC LETTER U WITH HAMZA ABOVE
+0678 ARABIC LETTER HIGH HAMZA YEH
+0679 ARABIC LETTER TTEH
+067A ARABIC LETTER TTEHEH
+067B ARABIC LETTER BEEH
+067C ARABIC LETTER TEH WITH RING
+067D ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+067E ARABIC LETTER PEH
+067F ARABIC LETTER TEHEH
+0680 ARABIC LETTER BEHEH
+0681 ARABIC LETTER HAH WITH HAMZA ABOVE
+0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+0683 ARABIC LETTER NYEH
+0684 ARABIC LETTER DYEH
+0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
+0686 ARABIC LETTER TCHEH
+0687 ARABIC LETTER TCHEHEH
+0688 ARABIC LETTER DDAL
+0689 ARABIC LETTER DAL WITH RING
+068A ARABIC LETTER DAL WITH DOT BELOW
+068B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+068C ARABIC LETTER DAHAL
+068D ARABIC LETTER DDAHAL
+068E ARABIC LETTER DUL
+068F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+0690 ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+0691 ARABIC LETTER RREH
+0692 ARABIC LETTER REH WITH SMALL V
+0693 ARABIC LETTER REH WITH RING
+0694 ARABIC LETTER REH WITH DOT BELOW
+0695 ARABIC LETTER REH WITH SMALL V BELOW
+0696 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+0697 ARABIC LETTER REH WITH TWO DOTS ABOVE
+0698 ARABIC LETTER JEH
+0699 ARABIC LETTER REH WITH FOUR DOTS ABOVE
+069A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+069B ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+069D ARABIC LETTER SAD WITH TWO DOTS BELOW
+069E ARABIC LETTER SAD WITH THREE DOTS ABOVE
+069F ARABIC LETTER TAH WITH THREE DOTS ABOVE
+06A0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A1 ARABIC LETTER DOTLESS FEH
+06A2 ARABIC LETTER FEH WITH DOT MOVED BELOW
+06A3 ARABIC LETTER FEH WITH DOT BELOW
+06A4 ARABIC LETTER VEH
+06A5 ARABIC LETTER FEH WITH THREE DOTS BELOW
+06A6 ARABIC LETTER PEHEH
+06A7 ARABIC LETTER QAF WITH DOT ABOVE
+06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE
+06A9 ARABIC LETTER KEHEH
+06AA ARABIC LETTER SWASH KAF
+06AB ARABIC LETTER KAF WITH RING
+06AC ARABIC LETTER KAF WITH DOT ABOVE
+06AD ARABIC LETTER NG
+06AE ARABIC LETTER KAF WITH THREE DOTS BELOW
+06AF ARABIC LETTER GAF
+06B0 ARABIC LETTER GAF WITH RING
+06B1 ARABIC LETTER NGOEH
+06B2 ARABIC LETTER GAF WITH TWO DOTS BELOW
+06B3 ARABIC LETTER GUEH
+06B4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
+06B5 ARABIC LETTER LAM WITH SMALL V
+06B6 ARABIC LETTER LAM WITH DOT ABOVE
+06B7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8 ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9 ARABIC LETTER NOON WITH DOT BELOW
+06BA ARABIC LETTER NOON GHUNNA
+06BB ARABIC LETTER RNOON
+06BC ARABIC LETTER NOON WITH RING
+06BD ARABIC LETTER NOON WITH THREE DOTS ABOVE
+06BE ARABIC LETTER HEH DOACHASHMEE
+06BF ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0 ARABIC LETTER HEH WITH YEH ABOVE
+06C1 ARABIC LETTER HEH GOAL
+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06C3 ARABIC LETTER TEH MARBUTA GOAL
+06C4 ARABIC LETTER WAW WITH RING
+06C5 ARABIC LETTER KIRGHIZ OE
+06C6 ARABIC LETTER OE
+06C7 ARABIC LETTER U
+06C8 ARABIC LETTER YU
+06C9 ARABIC LETTER KIRGHIZ YU
+06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE
+06CB ARABIC LETTER VE
+06CC ARABIC LETTER FARSI YEH
+06CD ARABIC LETTER YEH WITH TAIL
+06CE ARABIC LETTER YEH WITH SMALL V
+06CF ARABIC LETTER WAW WITH DOT ABOVE
+06D0 ARABIC LETTER E
+06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW
+06D2 ARABIC LETTER YEH BARREE
+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ARABIC FULL STOP
+06D5 ARABIC LETTER AE
+06D6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8 ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9 ARABIC SMALL HIGH LAM ALEF
+06DA ARABIC SMALL HIGH JEEM
+06DB ARABIC SMALL HIGH THREE DOTS
+06DC ARABIC SMALL HIGH SEEN
+06DD ARABIC END OF AYAH
+06DE ARABIC START OF RUB EL HIZB
+06DF ARABIC SMALL HIGH ROUNDED ZERO
+06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3 ARABIC SMALL LOW SEEN
+06E4 ARABIC SMALL HIGH MADDA
+06E5 ARABIC SMALL WAW
+06E6 ARABIC SMALL YEH
+06E7 ARABIC SMALL HIGH YEH
+06E8 ARABIC SMALL HIGH NOON
+06E9 ARABIC PLACE OF SAJDAH
+06EA ARABIC EMPTY CENTRE LOW STOP
+06EB ARABIC EMPTY CENTRE HIGH STOP
+06EC ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED ARABIC SMALL LOW MEEM
+06EE ARABIC LETTER DAL WITH INVERTED V
+06EF ARABIC LETTER REH WITH INVERTED V
+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1 EXTENDED ARABIC-INDIC DIGIT ONE
+06F2 EXTENDED ARABIC-INDIC DIGIT TWO
+06F3 EXTENDED ARABIC-INDIC DIGIT THREE
+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
+06F6 EXTENDED ARABIC-INDIC DIGIT SIX
+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9 EXTENDED ARABIC-INDIC DIGIT NINE
+06FA ARABIC LETTER SHEEN WITH DOT BELOW
+06FB ARABIC LETTER DAD WITH DOT BELOW
+06FC ARABIC LETTER GHAIN WITH DOT BELOW
+06FD ARABIC SIGN SINDHI AMPERSAND
+06FE ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF ARABIC LETTER HEH WITH INVERTED V
+0700 SYRIAC END OF PARAGRAPH
+0701 SYRIAC SUPRALINEAR FULL STOP
+0702 SYRIAC SUBLINEAR FULL STOP
+0703 SYRIAC SUPRALINEAR COLON
+0704 SYRIAC SUBLINEAR COLON
+0705 SYRIAC HORIZONTAL COLON
+0706 SYRIAC COLON SKEWED LEFT
+0707 SYRIAC COLON SKEWED RIGHT
+0708 SYRIAC SUPRALINEAR COLON SKEWED LEFT
+0709 SYRIAC SUBLINEAR COLON SKEWED RIGHT
+070A SYRIAC CONTRACTION
+070B SYRIAC HARKLEAN OBELUS
+070C SYRIAC HARKLEAN METOBELUS
+070D SYRIAC HARKLEAN ASTERISCUS
+070F SYRIAC ABBREVIATION MARK
+0710 SYRIAC LETTER ALAPH
+0711 SYRIAC LETTER SUPERSCRIPT ALAPH
+0712 SYRIAC LETTER BETH
+0713 SYRIAC LETTER GAMAL
+0714 SYRIAC LETTER GAMAL GARSHUNI
+0715 SYRIAC LETTER DALATH
+0716 SYRIAC LETTER DOTLESS DALATH RISH
+0717 SYRIAC LETTER HE
+0718 SYRIAC LETTER WAW
+0719 SYRIAC LETTER ZAIN
+071A SYRIAC LETTER HETH
+071B SYRIAC LETTER TETH
+071C SYRIAC LETTER TETH GARSHUNI
+071D SYRIAC LETTER YUDH
+071E SYRIAC LETTER YUDH HE
+071F SYRIAC LETTER KAPH
+0720 SYRIAC LETTER LAMADH
+0721 SYRIAC LETTER MIM
+0722 SYRIAC LETTER NUN
+0723 SYRIAC LETTER SEMKATH
+0724 SYRIAC LETTER FINAL SEMKATH
+0725 SYRIAC LETTER E
+0726 SYRIAC LETTER PE
+0727 SYRIAC LETTER REVERSED PE
+0728 SYRIAC LETTER SADHE
+0729 SYRIAC LETTER QAPH
+072A SYRIAC LETTER RISH
+072B SYRIAC LETTER SHIN
+072C SYRIAC LETTER TAW
+072D SYRIAC LETTER PERSIAN BHETH
+072E SYRIAC LETTER PERSIAN GHAMAL
+072F SYRIAC LETTER PERSIAN DHALATH
+0730 SYRIAC PTHAHA ABOVE
+0731 SYRIAC PTHAHA BELOW
+0732 SYRIAC PTHAHA DOTTED
+0733 SYRIAC ZQAPHA ABOVE
+0734 SYRIAC ZQAPHA BELOW
+0735 SYRIAC ZQAPHA DOTTED
+0736 SYRIAC RBASA ABOVE
+0737 SYRIAC RBASA BELOW
+0738 SYRIAC DOTTED ZLAMA HORIZONTAL
+0739 SYRIAC DOTTED ZLAMA ANGULAR
+073A SYRIAC HBASA ABOVE
+073B SYRIAC HBASA BELOW
+073C SYRIAC HBASA-ESASA DOTTED
+073D SYRIAC ESASA ABOVE
+073E SYRIAC ESASA BELOW
+073F SYRIAC RWAHA
+0740 SYRIAC FEMININE DOT
+0741 SYRIAC QUSHSHAYA
+0742 SYRIAC RUKKAKHA
+0743 SYRIAC TWO VERTICAL DOTS ABOVE
+0744 SYRIAC TWO VERTICAL DOTS BELOW
+0745 SYRIAC THREE DOTS ABOVE
+0746 SYRIAC THREE DOTS BELOW
+0747 SYRIAC OBLIQUE LINE ABOVE
+0748 SYRIAC OBLIQUE LINE BELOW
+0749 SYRIAC MUSIC
+074A SYRIAC BARREKH
+074D SYRIAC LETTER SOGDIAN ZHAIN
+074E SYRIAC LETTER SOGDIAN KHAPH
+074F SYRIAC LETTER SOGDIAN FE
+0750 ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751 ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754 ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755 ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756 ARABIC LETTER BEH WITH SMALL V
+0757 ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758 ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759 ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+075A ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B ARABIC LETTER REH WITH STROKE
+075C ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+075D ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760 ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761 ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762 ARABIC LETTER KEHEH WITH DOT ABOVE
+0763 ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+0764 ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765 ARABIC LETTER MEEM WITH DOT ABOVE
+0766 ARABIC LETTER MEEM WITH DOT BELOW
+0767 ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768 ARABIC LETTER NOON WITH SMALL TAH
+0769 ARABIC LETTER NOON WITH SMALL V
+076A ARABIC LETTER LAM WITH BAR
+076B ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+076C ARABIC LETTER REH WITH HAMZA ABOVE
+076D ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+0780 THAANA LETTER HAA
+0781 THAANA LETTER SHAVIYANI
+0782 THAANA LETTER NOONU
+0783 THAANA LETTER RAA
+0784 THAANA LETTER BAA
+0785 THAANA LETTER LHAVIYANI
+0786 THAANA LETTER KAAFU
+0787 THAANA LETTER ALIFU
+0788 THAANA LETTER VAAVU
+0789 THAANA LETTER MEEMU
+078A THAANA LETTER FAAFU
+078B THAANA LETTER DHAALU
+078C THAANA LETTER THAA
+078D THAANA LETTER LAAMU
+078E THAANA LETTER GAAFU
+078F THAANA LETTER GNAVIYANI
+0790 THAANA LETTER SEENU
+0791 THAANA LETTER DAVIYANI
+0792 THAANA LETTER ZAVIYANI
+0793 THAANA LETTER TAVIYANI
+0794 THAANA LETTER YAA
+0795 THAANA LETTER PAVIYANI
+0796 THAANA LETTER JAVIYANI
+0797 THAANA LETTER CHAVIYANI
+0798 THAANA LETTER TTAA
+0799 THAANA LETTER HHAA
+079A THAANA LETTER KHAA
+079B THAANA LETTER THAALU
+079C THAANA LETTER ZAA
+079D THAANA LETTER SHEENU
+079E THAANA LETTER SAADHU
+079F THAANA LETTER DAADHU
+07A0 THAANA LETTER TO
+07A1 THAANA LETTER ZO
+07A2 THAANA LETTER AINU
+07A3 THAANA LETTER GHAINU
+07A4 THAANA LETTER QAAFU
+07A5 THAANA LETTER WAAVU
+07A6 THAANA ABAFILI
+07A7 THAANA AABAAFILI
+07A8 THAANA IBIFILI
+07A9 THAANA EEBEEFILI
+07AA THAANA UBUFILI
+07AB THAANA OOBOOFILI
+07AC THAANA EBEFILI
+07AD THAANA EYBEYFILI
+07AE THAANA OBOFILI
+07AF THAANA OABOAFILI
+07B0 THAANA SUKUN
+07B1 THAANA LETTER NAA
+0901 DEVANAGARI SIGN CANDRABINDU
+0902 DEVANAGARI SIGN ANUSVARA
+0903 DEVANAGARI SIGN VISARGA
+0904 DEVANAGARI LETTER SHORT A
+0905 DEVANAGARI LETTER A
+0906 DEVANAGARI LETTER AA
+0907 DEVANAGARI LETTER I
+0908 DEVANAGARI LETTER II
+0909 DEVANAGARI LETTER U
+090A DEVANAGARI LETTER UU
+090B DEVANAGARI LETTER VOCALIC R
+090C DEVANAGARI LETTER VOCALIC L
+090D DEVANAGARI LETTER CANDRA E
+090E DEVANAGARI LETTER SHORT E
+090F DEVANAGARI LETTER E
+0910 DEVANAGARI LETTER AI
+0911 DEVANAGARI LETTER CANDRA O
+0912 DEVANAGARI LETTER SHORT O
+0913 DEVANAGARI LETTER O
+0914 DEVANAGARI LETTER AU
+0915 DEVANAGARI LETTER KA
+0916 DEVANAGARI LETTER KHA
+0917 DEVANAGARI LETTER GA
+0918 DEVANAGARI LETTER GHA
+0919 DEVANAGARI LETTER NGA
+091A DEVANAGARI LETTER CA
+091B DEVANAGARI LETTER CHA
+091C DEVANAGARI LETTER JA
+091D DEVANAGARI LETTER JHA
+091E DEVANAGARI LETTER NYA
+091F DEVANAGARI LETTER TTA
+0920 DEVANAGARI LETTER TTHA
+0921 DEVANAGARI LETTER DDA
+0922 DEVANAGARI LETTER DDHA
+0923 DEVANAGARI LETTER NNA
+0924 DEVANAGARI LETTER TA
+0925 DEVANAGARI LETTER THA
+0926 DEVANAGARI LETTER DA
+0927 DEVANAGARI LETTER DHA
+0928 DEVANAGARI LETTER NA
+0929 DEVANAGARI LETTER NNNA
+092A DEVANAGARI LETTER PA
+092B DEVANAGARI LETTER PHA
+092C DEVANAGARI LETTER BA
+092D DEVANAGARI LETTER BHA
+092E DEVANAGARI LETTER MA
+092F DEVANAGARI LETTER YA
+0930 DEVANAGARI LETTER RA
+0931 DEVANAGARI LETTER RRA
+0932 DEVANAGARI LETTER LA
+0933 DEVANAGARI LETTER LLA
+0934 DEVANAGARI LETTER LLLA
+0935 DEVANAGARI LETTER VA
+0936 DEVANAGARI LETTER SHA
+0937 DEVANAGARI LETTER SSA
+0938 DEVANAGARI LETTER SA
+0939 DEVANAGARI LETTER HA
+093C DEVANAGARI SIGN NUKTA
+093D DEVANAGARI SIGN AVAGRAHA
+093E DEVANAGARI VOWEL SIGN AA
+093F DEVANAGARI VOWEL SIGN I
+0940 DEVANAGARI VOWEL SIGN II
+0941 DEVANAGARI VOWEL SIGN U
+0942 DEVANAGARI VOWEL SIGN UU
+0943 DEVANAGARI VOWEL SIGN VOCALIC R
+0944 DEVANAGARI VOWEL SIGN VOCALIC RR
+0945 DEVANAGARI VOWEL SIGN CANDRA E
+0946 DEVANAGARI VOWEL SIGN SHORT E
+0947 DEVANAGARI VOWEL SIGN E
+0948 DEVANAGARI VOWEL SIGN AI
+0949 DEVANAGARI VOWEL SIGN CANDRA O
+094A DEVANAGARI VOWEL SIGN SHORT O
+094B DEVANAGARI VOWEL SIGN O
+094C DEVANAGARI VOWEL SIGN AU
+094D DEVANAGARI SIGN VIRAMA
+0950 DEVANAGARI OM
+0951 DEVANAGARI STRESS SIGN UDATTA
+0952 DEVANAGARI STRESS SIGN ANUDATTA
+0953 DEVANAGARI GRAVE ACCENT
+0954 DEVANAGARI ACUTE ACCENT
+0958 DEVANAGARI LETTER QA
+0959 DEVANAGARI LETTER KHHA
+095A DEVANAGARI LETTER GHHA
+095B DEVANAGARI LETTER ZA
+095C DEVANAGARI LETTER DDDHA
+095D DEVANAGARI LETTER RHA
+095E DEVANAGARI LETTER FA
+095F DEVANAGARI LETTER YYA
+0960 DEVANAGARI LETTER VOCALIC RR
+0961 DEVANAGARI LETTER VOCALIC LL
+0962 DEVANAGARI VOWEL SIGN VOCALIC L
+0963 DEVANAGARI VOWEL SIGN VOCALIC LL
+0964 DEVANAGARI DANDA
+0965 DEVANAGARI DOUBLE DANDA
+0966 DEVANAGARI DIGIT ZERO
+0967 DEVANAGARI DIGIT ONE
+0968 DEVANAGARI DIGIT TWO
+0969 DEVANAGARI DIGIT THREE
+096A DEVANAGARI DIGIT FOUR
+096B DEVANAGARI DIGIT FIVE
+096C DEVANAGARI DIGIT SIX
+096D DEVANAGARI DIGIT SEVEN
+096E DEVANAGARI DIGIT EIGHT
+096F DEVANAGARI DIGIT NINE
+0970 DEVANAGARI ABBREVIATION SIGN
+097D DEVANAGARI LETTER GLOTTAL STOP
+0981 BENGALI SIGN CANDRABINDU
+0982 BENGALI SIGN ANUSVARA
+0983 BENGALI SIGN VISARGA
+0985 BENGALI LETTER A
+0986 BENGALI LETTER AA
+0987 BENGALI LETTER I
+0988 BENGALI LETTER II
+0989 BENGALI LETTER U
+098A BENGALI LETTER UU
+098B BENGALI LETTER VOCALIC R
+098C BENGALI LETTER VOCALIC L
+098F BENGALI LETTER E
+0990 BENGALI LETTER AI
+0993 BENGALI LETTER O
+0994 BENGALI LETTER AU
+0995 BENGALI LETTER KA
+0996 BENGALI LETTER KHA
+0997 BENGALI LETTER GA
+0998 BENGALI LETTER GHA
+0999 BENGALI LETTER NGA
+099A BENGALI LETTER CA
+099B BENGALI LETTER CHA
+099C BENGALI LETTER JA
+099D BENGALI LETTER JHA
+099E BENGALI LETTER NYA
+099F BENGALI LETTER TTA
+09A0 BENGALI LETTER TTHA
+09A1 BENGALI LETTER DDA
+09A2 BENGALI LETTER DDHA
+09A3 BENGALI LETTER NNA
+09A4 BENGALI LETTER TA
+09A5 BENGALI LETTER THA
+09A6 BENGALI LETTER DA
+09A7 BENGALI LETTER DHA
+09A8 BENGALI LETTER NA
+09AA BENGALI LETTER PA
+09AB BENGALI LETTER PHA
+09AC BENGALI LETTER BA
+09AD BENGALI LETTER BHA
+09AE BENGALI LETTER MA
+09AF BENGALI LETTER YA
+09B0 BENGALI LETTER RA
+09B2 BENGALI LETTER LA
+09B6 BENGALI LETTER SHA
+09B7 BENGALI LETTER SSA
+09B8 BENGALI LETTER SA
+09B9 BENGALI LETTER HA
+09BC BENGALI SIGN NUKTA
+09BD BENGALI SIGN AVAGRAHA
+09BE BENGALI VOWEL SIGN AA
+09BF BENGALI VOWEL SIGN I
+09C0 BENGALI VOWEL SIGN II
+09C1 BENGALI VOWEL SIGN U
+09C2 BENGALI VOWEL SIGN UU
+09C3 BENGALI VOWEL SIGN VOCALIC R
+09C4 BENGALI VOWEL SIGN VOCALIC RR
+09C7 BENGALI VOWEL SIGN E
+09C8 BENGALI VOWEL SIGN AI
+09CB BENGALI VOWEL SIGN O
+09CC BENGALI VOWEL SIGN AU
+09CD BENGALI SIGN VIRAMA
+09CE BENGALI LETTER KHANDA TA
+09D7 BENGALI AU LENGTH MARK
+09DC BENGALI LETTER RRA
+09DD BENGALI LETTER RHA
+09DF BENGALI LETTER YYA
+09E0 BENGALI LETTER VOCALIC RR
+09E1 BENGALI LETTER VOCALIC LL
+09E2 BENGALI VOWEL SIGN VOCALIC L
+09E3 BENGALI VOWEL SIGN VOCALIC LL
+09E6 BENGALI DIGIT ZERO
+09E7 BENGALI DIGIT ONE
+09E8 BENGALI DIGIT TWO
+09E9 BENGALI DIGIT THREE
+09EA BENGALI DIGIT FOUR
+09EB BENGALI DIGIT FIVE
+09EC BENGALI DIGIT SIX
+09ED BENGALI DIGIT SEVEN
+09EE BENGALI DIGIT EIGHT
+09EF BENGALI DIGIT NINE
+09F0 BENGALI LETTER RA WITH MIDDLE DIAGONAL
+09F1 BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2 BENGALI RUPEE MARK
+09F3 BENGALI RUPEE SIGN
+09F4 BENGALI CURRENCY NUMERATOR ONE
+09F5 BENGALI CURRENCY NUMERATOR TWO
+09F6 BENGALI CURRENCY NUMERATOR THREE
+09F7 BENGALI CURRENCY NUMERATOR FOUR
+09F8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9 BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA BENGALI ISSHAR
+0A01 GURMUKHI SIGN ADAK BINDI
+0A02 GURMUKHI SIGN BINDI
+0A03 GURMUKHI SIGN VISARGA
+0A05 GURMUKHI LETTER A
+0A06 GURMUKHI LETTER AA
+0A07 GURMUKHI LETTER I
+0A08 GURMUKHI LETTER II
+0A09 GURMUKHI LETTER U
+0A0A GURMUKHI LETTER UU
+0A0F GURMUKHI LETTER EE
+0A10 GURMUKHI LETTER AI
+0A13 GURMUKHI LETTER OO
+0A14 GURMUKHI LETTER AU
+0A15 GURMUKHI LETTER KA
+0A16 GURMUKHI LETTER KHA
+0A17 GURMUKHI LETTER GA
+0A18 GURMUKHI LETTER GHA
+0A19 GURMUKHI LETTER NGA
+0A1A GURMUKHI LETTER CA
+0A1B GURMUKHI LETTER CHA
+0A1C GURMUKHI LETTER JA
+0A1D GURMUKHI LETTER JHA
+0A1E GURMUKHI LETTER NYA
+0A1F GURMUKHI LETTER TTA
+0A20 GURMUKHI LETTER TTHA
+0A21 GURMUKHI LETTER DDA
+0A22 GURMUKHI LETTER DDHA
+0A23 GURMUKHI LETTER NNA
+0A24 GURMUKHI LETTER TA
+0A25 GURMUKHI LETTER THA
+0A26 GURMUKHI LETTER DA
+0A27 GURMUKHI LETTER DHA
+0A28 GURMUKHI LETTER NA
+0A2A GURMUKHI LETTER PA
+0A2B GURMUKHI LETTER PHA
+0A2C GURMUKHI LETTER BA
+0A2D GURMUKHI LETTER BHA
+0A2E GURMUKHI LETTER MA
+0A2F GURMUKHI LETTER YA
+0A30 GURMUKHI LETTER RA
+0A32 GURMUKHI LETTER LA
+0A33 GURMUKHI LETTER LLA
+0A35 GURMUKHI LETTER VA
+0A36 GURMUKHI LETTER SHA
+0A38 GURMUKHI LETTER SA
+0A39 GURMUKHI LETTER HA
+0A3C GURMUKHI SIGN NUKTA
+0A3E GURMUKHI VOWEL SIGN AA
+0A3F GURMUKHI VOWEL SIGN I
+0A40 GURMUKHI VOWEL SIGN II
+0A41 GURMUKHI VOWEL SIGN U
+0A42 GURMUKHI VOWEL SIGN UU
+0A47 GURMUKHI VOWEL SIGN EE
+0A48 GURMUKHI VOWEL SIGN AI
+0A4B GURMUKHI VOWEL SIGN OO
+0A4C GURMUKHI VOWEL SIGN AU
+0A4D GURMUKHI SIGN VIRAMA
+0A59 GURMUKHI LETTER KHHA
+0A5A GURMUKHI LETTER GHHA
+0A5B GURMUKHI LETTER ZA
+0A5C GURMUKHI LETTER RRA
+0A5E GURMUKHI LETTER FA
+0A66 GURMUKHI DIGIT ZERO
+0A67 GURMUKHI DIGIT ONE
+0A68 GURMUKHI DIGIT TWO
+0A69 GURMUKHI DIGIT THREE
+0A6A GURMUKHI DIGIT FOUR
+0A6B GURMUKHI DIGIT FIVE
+0A6C GURMUKHI DIGIT SIX
+0A6D GURMUKHI DIGIT SEVEN
+0A6E GURMUKHI DIGIT EIGHT
+0A6F GURMUKHI DIGIT NINE
+0A70 GURMUKHI TIPPI
+0A71 GURMUKHI ADDAK
+0A72 GURMUKHI IRI
+0A73 GURMUKHI URA
+0A74 GURMUKHI EK ONKAR
+0A81 GUJARATI SIGN CANDRABINDU
+0A82 GUJARATI SIGN ANUSVARA
+0A83 GUJARATI SIGN VISARGA
+0A85 GUJARATI LETTER A
+0A86 GUJARATI LETTER AA
+0A87 GUJARATI LETTER I
+0A88 GUJARATI LETTER II
+0A89 GUJARATI LETTER U
+0A8A GUJARATI LETTER UU
+0A8B GUJARATI LETTER VOCALIC R
+0A8C GUJARATI LETTER VOCALIC L
+0A8D GUJARATI VOWEL CANDRA E
+0A8F GUJARATI LETTER E
+0A90 GUJARATI LETTER AI
+0A91 GUJARATI VOWEL CANDRA O
+0A93 GUJARATI LETTER O
+0A94 GUJARATI LETTER AU
+0A95 GUJARATI LETTER KA
+0A96 GUJARATI LETTER KHA
+0A97 GUJARATI LETTER GA
+0A98 GUJARATI LETTER GHA
+0A99 GUJARATI LETTER NGA
+0A9A GUJARATI LETTER CA
+0A9B GUJARATI LETTER CHA
+0A9C GUJARATI LETTER JA
+0A9D GUJARATI LETTER JHA
+0A9E GUJARATI LETTER NYA
+0A9F GUJARATI LETTER TTA
+0AA0 GUJARATI LETTER TTHA
+0AA1 GUJARATI LETTER DDA
+0AA2 GUJARATI LETTER DDHA
+0AA3 GUJARATI LETTER NNA
+0AA4 GUJARATI LETTER TA
+0AA5 GUJARATI LETTER THA
+0AA6 GUJARATI LETTER DA
+0AA7 GUJARATI LETTER DHA
+0AA8 GUJARATI LETTER NA
+0AAA GUJARATI LETTER PA
+0AAB GUJARATI LETTER PHA
+0AAC GUJARATI LETTER BA
+0AAD GUJARATI LETTER BHA
+0AAE GUJARATI LETTER MA
+0AAF GUJARATI LETTER YA
+0AB0 GUJARATI LETTER RA
+0AB2 GUJARATI LETTER LA
+0AB3 GUJARATI LETTER LLA
+0AB5 GUJARATI LETTER VA
+0AB6 GUJARATI LETTER SHA
+0AB7 GUJARATI LETTER SSA
+0AB8 GUJARATI LETTER SA
+0AB9 GUJARATI LETTER HA
+0ABC GUJARATI SIGN NUKTA
+0ABD GUJARATI SIGN AVAGRAHA
+0ABE GUJARATI VOWEL SIGN AA
+0ABF GUJARATI VOWEL SIGN I
+0AC0 GUJARATI VOWEL SIGN II
+0AC1 GUJARATI VOWEL SIGN U
+0AC2 GUJARATI VOWEL SIGN UU
+0AC3 GUJARATI VOWEL SIGN VOCALIC R
+0AC4 GUJARATI VOWEL SIGN VOCALIC RR
+0AC5 GUJARATI VOWEL SIGN CANDRA E
+0AC7 GUJARATI VOWEL SIGN E
+0AC8 GUJARATI VOWEL SIGN AI
+0AC9 GUJARATI VOWEL SIGN CANDRA O
+0ACB GUJARATI VOWEL SIGN O
+0ACC GUJARATI VOWEL SIGN AU
+0ACD GUJARATI SIGN VIRAMA
+0AD0 GUJARATI OM
+0AE0 GUJARATI LETTER VOCALIC RR
+0AE1 GUJARATI LETTER VOCALIC LL
+0AE2 GUJARATI VOWEL SIGN VOCALIC L
+0AE3 GUJARATI VOWEL SIGN VOCALIC LL
+0AE6 GUJARATI DIGIT ZERO
+0AE7 GUJARATI DIGIT ONE
+0AE8 GUJARATI DIGIT TWO
+0AE9 GUJARATI DIGIT THREE
+0AEA GUJARATI DIGIT FOUR
+0AEB GUJARATI DIGIT FIVE
+0AEC GUJARATI DIGIT SIX
+0AED GUJARATI DIGIT SEVEN
+0AEE GUJARATI DIGIT EIGHT
+0AEF GUJARATI DIGIT NINE
+0AF1 GUJARATI RUPEE SIGN
+0B01 ORIYA SIGN CANDRABINDU
+0B02 ORIYA SIGN ANUSVARA
+0B03 ORIYA SIGN VISARGA
+0B05 ORIYA LETTER A
+0B06 ORIYA LETTER AA
+0B07 ORIYA LETTER I
+0B08 ORIYA LETTER II
+0B09 ORIYA LETTER U
+0B0A ORIYA LETTER UU
+0B0B ORIYA LETTER VOCALIC R
+0B0C ORIYA LETTER VOCALIC L
+0B0F ORIYA LETTER E
+0B10 ORIYA LETTER AI
+0B13 ORIYA LETTER O
+0B14 ORIYA LETTER AU
+0B15 ORIYA LETTER KA
+0B16 ORIYA LETTER KHA
+0B17 ORIYA LETTER GA
+0B18 ORIYA LETTER GHA
+0B19 ORIYA LETTER NGA
+0B1A ORIYA LETTER CA
+0B1B ORIYA LETTER CHA
+0B1C ORIYA LETTER JA
+0B1D ORIYA LETTER JHA
+0B1E ORIYA LETTER NYA
+0B1F ORIYA LETTER TTA
+0B20 ORIYA LETTER TTHA
+0B21 ORIYA LETTER DDA
+0B22 ORIYA LETTER DDHA
+0B23 ORIYA LETTER NNA
+0B24 ORIYA LETTER TA
+0B25 ORIYA LETTER THA
+0B26 ORIYA LETTER DA
+0B27 ORIYA LETTER DHA
+0B28 ORIYA LETTER NA
+0B2A ORIYA LETTER PA
+0B2B ORIYA LETTER PHA
+0B2C ORIYA LETTER BA
+0B2D ORIYA LETTER BHA
+0B2E ORIYA LETTER MA
+0B2F ORIYA LETTER YA
+0B30 ORIYA LETTER RA
+0B32 ORIYA LETTER LA
+0B33 ORIYA LETTER LLA
+0B35 ORIYA LETTER VA
+0B36 ORIYA LETTER SHA
+0B37 ORIYA LETTER SSA
+0B38 ORIYA LETTER SA
+0B39 ORIYA LETTER HA
+0B3C ORIYA SIGN NUKTA
+0B3D ORIYA SIGN AVAGRAHA
+0B3E ORIYA VOWEL SIGN AA
+0B3F ORIYA VOWEL SIGN I
+0B40 ORIYA VOWEL SIGN II
+0B41 ORIYA VOWEL SIGN U
+0B42 ORIYA VOWEL SIGN UU
+0B43 ORIYA VOWEL SIGN VOCALIC R
+0B47 ORIYA VOWEL SIGN E
+0B48 ORIYA VOWEL SIGN AI
+0B4B ORIYA VOWEL SIGN O
+0B4C ORIYA VOWEL SIGN AU
+0B4D ORIYA SIGN VIRAMA
+0B56 ORIYA AI LENGTH MARK
+0B57 ORIYA AU LENGTH MARK
+0B5C ORIYA LETTER RRA
+0B5D ORIYA LETTER RHA
+0B5F ORIYA LETTER YYA
+0B60 ORIYA LETTER VOCALIC RR
+0B61 ORIYA LETTER VOCALIC LL
+0B66 ORIYA DIGIT ZERO
+0B67 ORIYA DIGIT ONE
+0B68 ORIYA DIGIT TWO
+0B69 ORIYA DIGIT THREE
+0B6A ORIYA DIGIT FOUR
+0B6B ORIYA DIGIT FIVE
+0B6C ORIYA DIGIT SIX
+0B6D ORIYA DIGIT SEVEN
+0B6E ORIYA DIGIT EIGHT
+0B6F ORIYA DIGIT NINE
+0B70 ORIYA ISSHAR
+0B71 ORIYA LETTER WA
+0B82 TAMIL SIGN ANUSVARA
+0B83 TAMIL SIGN VISARGA
+0B85 TAMIL LETTER A
+0B86 TAMIL LETTER AA
+0B87 TAMIL LETTER I
+0B88 TAMIL LETTER II
+0B89 TAMIL LETTER U
+0B8A TAMIL LETTER UU
+0B8E TAMIL LETTER E
+0B8F TAMIL LETTER EE
+0B90 TAMIL LETTER AI
+0B92 TAMIL LETTER O
+0B93 TAMIL LETTER OO
+0B94 TAMIL LETTER AU
+0B95 TAMIL LETTER KA
+0B99 TAMIL LETTER NGA
+0B9A TAMIL LETTER CA
+0B9C TAMIL LETTER JA
+0B9E TAMIL LETTER NYA
+0B9F TAMIL LETTER TTA
+0BA3 TAMIL LETTER NNA
+0BA4 TAMIL LETTER TA
+0BA8 TAMIL LETTER NA
+0BA9 TAMIL LETTER NNNA
+0BAA TAMIL LETTER PA
+0BAE TAMIL LETTER MA
+0BAF TAMIL LETTER YA
+0BB0 TAMIL LETTER RA
+0BB1 TAMIL LETTER RRA
+0BB2 TAMIL LETTER LA
+0BB3 TAMIL LETTER LLA
+0BB4 TAMIL LETTER LLLA
+0BB5 TAMIL LETTER VA
+0BB6 TAMIL LETTER SHA
+0BB7 TAMIL LETTER SSA
+0BB8 TAMIL LETTER SA
+0BB9 TAMIL LETTER HA
+0BBE TAMIL VOWEL SIGN AA
+0BBF TAMIL VOWEL SIGN I
+0BC0 TAMIL VOWEL SIGN II
+0BC1 TAMIL VOWEL SIGN U
+0BC2 TAMIL VOWEL SIGN UU
+0BC6 TAMIL VOWEL SIGN E
+0BC7 TAMIL VOWEL SIGN EE
+0BC8 TAMIL VOWEL SIGN AI
+0BCA TAMIL VOWEL SIGN O
+0BCB TAMIL VOWEL SIGN OO
+0BCC TAMIL VOWEL SIGN AU
+0BCD TAMIL SIGN VIRAMA
+0BD7 TAMIL AU LENGTH MARK
+0BE6 TAMIL DIGIT ZERO
+0BE7 TAMIL DIGIT ONE
+0BE8 TAMIL DIGIT TWO
+0BE9 TAMIL DIGIT THREE
+0BEA TAMIL DIGIT FOUR
+0BEB TAMIL DIGIT FIVE
+0BEC TAMIL DIGIT SIX
+0BED TAMIL DIGIT SEVEN
+0BEE TAMIL DIGIT EIGHT
+0BEF TAMIL DIGIT NINE
+0BF0 TAMIL NUMBER TEN
+0BF1 TAMIL NUMBER ONE HUNDRED
+0BF2 TAMIL NUMBER ONE THOUSAND
+0BF3 TAMIL DAY SIGN
+0BF4 TAMIL MONTH SIGN
+0BF5 TAMIL YEAR SIGN
+0BF6 TAMIL DEBIT SIGN
+0BF7 TAMIL CREDIT SIGN
+0BF8 TAMIL AS ABOVE SIGN
+0BF9 TAMIL RUPEE SIGN
+0BFA TAMIL NUMBER SIGN
+0C01 TELUGU SIGN CANDRABINDU
+0C02 TELUGU SIGN ANUSVARA
+0C03 TELUGU SIGN VISARGA
+0C05 TELUGU LETTER A
+0C06 TELUGU LETTER AA
+0C07 TELUGU LETTER I
+0C08 TELUGU LETTER II
+0C09 TELUGU LETTER U
+0C0A TELUGU LETTER UU
+0C0B TELUGU LETTER VOCALIC R
+0C0C TELUGU LETTER VOCALIC L
+0C0E TELUGU LETTER E
+0C0F TELUGU LETTER EE
+0C10 TELUGU LETTER AI
+0C12 TELUGU LETTER O
+0C13 TELUGU LETTER OO
+0C14 TELUGU LETTER AU
+0C15 TELUGU LETTER KA
+0C16 TELUGU LETTER KHA
+0C17 TELUGU LETTER GA
+0C18 TELUGU LETTER GHA
+0C19 TELUGU LETTER NGA
+0C1A TELUGU LETTER CA
+0C1B TELUGU LETTER CHA
+0C1C TELUGU LETTER JA
+0C1D TELUGU LETTER JHA
+0C1E TELUGU LETTER NYA
+0C1F TELUGU LETTER TTA
+0C20 TELUGU LETTER TTHA
+0C21 TELUGU LETTER DDA
+0C22 TELUGU LETTER DDHA
+0C23 TELUGU LETTER NNA
+0C24 TELUGU LETTER TA
+0C25 TELUGU LETTER THA
+0C26 TELUGU LETTER DA
+0C27 TELUGU LETTER DHA
+0C28 TELUGU LETTER NA
+0C2A TELUGU LETTER PA
+0C2B TELUGU LETTER PHA
+0C2C TELUGU LETTER BA
+0C2D TELUGU LETTER BHA
+0C2E TELUGU LETTER MA
+0C2F TELUGU LETTER YA
+0C30 TELUGU LETTER RA
+0C31 TELUGU LETTER RRA
+0C32 TELUGU LETTER LA
+0C33 TELUGU LETTER LLA
+0C35 TELUGU LETTER VA
+0C36 TELUGU LETTER SHA
+0C37 TELUGU LETTER SSA
+0C38 TELUGU LETTER SA
+0C39 TELUGU LETTER HA
+0C3E TELUGU VOWEL SIGN AA
+0C3F TELUGU VOWEL SIGN I
+0C40 TELUGU VOWEL SIGN II
+0C41 TELUGU VOWEL SIGN U
+0C42 TELUGU VOWEL SIGN UU
+0C43 TELUGU VOWEL SIGN VOCALIC R
+0C44 TELUGU VOWEL SIGN VOCALIC RR
+0C46 TELUGU VOWEL SIGN E
+0C47 TELUGU VOWEL SIGN EE
+0C48 TELUGU VOWEL SIGN AI
+0C4A TELUGU VOWEL SIGN O
+0C4B TELUGU VOWEL SIGN OO
+0C4C TELUGU VOWEL SIGN AU
+0C4D TELUGU SIGN VIRAMA
+0C55 TELUGU LENGTH MARK
+0C56 TELUGU AI LENGTH MARK
+0C60 TELUGU LETTER VOCALIC RR
+0C61 TELUGU LETTER VOCALIC LL
+0C66 TELUGU DIGIT ZERO
+0C67 TELUGU DIGIT ONE
+0C68 TELUGU DIGIT TWO
+0C69 TELUGU DIGIT THREE
+0C6A TELUGU DIGIT FOUR
+0C6B TELUGU DIGIT FIVE
+0C6C TELUGU DIGIT SIX
+0C6D TELUGU DIGIT SEVEN
+0C6E TELUGU DIGIT EIGHT
+0C6F TELUGU DIGIT NINE
+0C82 KANNADA SIGN ANUSVARA
+0C83 KANNADA SIGN VISARGA
+0C85 KANNADA LETTER A
+0C86 KANNADA LETTER AA
+0C87 KANNADA LETTER I
+0C88 KANNADA LETTER II
+0C89 KANNADA LETTER U
+0C8A KANNADA LETTER UU
+0C8B KANNADA LETTER VOCALIC R
+0C8C KANNADA LETTER VOCALIC L
+0C8E KANNADA LETTER E
+0C8F KANNADA LETTER EE
+0C90 KANNADA LETTER AI
+0C92 KANNADA LETTER O
+0C93 KANNADA LETTER OO
+0C94 KANNADA LETTER AU
+0C95 KANNADA LETTER KA
+0C96 KANNADA LETTER KHA
+0C97 KANNADA LETTER GA
+0C98 KANNADA LETTER GHA
+0C99 KANNADA LETTER NGA
+0C9A KANNADA LETTER CA
+0C9B KANNADA LETTER CHA
+0C9C KANNADA LETTER JA
+0C9D KANNADA LETTER JHA
+0C9E KANNADA LETTER NYA
+0C9F KANNADA LETTER TTA
+0CA0 KANNADA LETTER TTHA
+0CA1 KANNADA LETTER DDA
+0CA2 KANNADA LETTER DDHA
+0CA3 KANNADA LETTER NNA
+0CA4 KANNADA LETTER TA
+0CA5 KANNADA LETTER THA
+0CA6 KANNADA LETTER DA
+0CA7 KANNADA LETTER DHA
+0CA8 KANNADA LETTER NA
+0CAA KANNADA LETTER PA
+0CAB KANNADA LETTER PHA
+0CAC KANNADA LETTER BA
+0CAD KANNADA LETTER BHA
+0CAE KANNADA LETTER MA
+0CAF KANNADA LETTER YA
+0CB0 KANNADA LETTER RA
+0CB1 KANNADA LETTER RRA
+0CB2 KANNADA LETTER LA
+0CB3 KANNADA LETTER LLA
+0CB5 KANNADA LETTER VA
+0CB6 KANNADA LETTER SHA
+0CB7 KANNADA LETTER SSA
+0CB8 KANNADA LETTER SA
+0CB9 KANNADA LETTER HA
+0CBC KANNADA SIGN NUKTA
+0CBD KANNADA SIGN AVAGRAHA
+0CBE KANNADA VOWEL SIGN AA
+0CBF KANNADA VOWEL SIGN I
+0CC0 KANNADA VOWEL SIGN II
+0CC1 KANNADA VOWEL SIGN U
+0CC2 KANNADA VOWEL SIGN UU
+0CC3 KANNADA VOWEL SIGN VOCALIC R
+0CC4 KANNADA VOWEL SIGN VOCALIC RR
+0CC6 KANNADA VOWEL SIGN E
+0CC7 KANNADA VOWEL SIGN EE
+0CC8 KANNADA VOWEL SIGN AI
+0CCA KANNADA VOWEL SIGN O
+0CCB KANNADA VOWEL SIGN OO
+0CCC KANNADA VOWEL SIGN AU
+0CCD KANNADA SIGN VIRAMA
+0CD5 KANNADA LENGTH MARK
+0CD6 KANNADA AI LENGTH MARK
+0CDE KANNADA LETTER FA
+0CE0 KANNADA LETTER VOCALIC RR
+0CE1 KANNADA LETTER VOCALIC LL
+0CE6 KANNADA DIGIT ZERO
+0CE7 KANNADA DIGIT ONE
+0CE8 KANNADA DIGIT TWO
+0CE9 KANNADA DIGIT THREE
+0CEA KANNADA DIGIT FOUR
+0CEB KANNADA DIGIT FIVE
+0CEC KANNADA DIGIT SIX
+0CED KANNADA DIGIT SEVEN
+0CEE KANNADA DIGIT EIGHT
+0CEF KANNADA DIGIT NINE
+0D02 MALAYALAM SIGN ANUSVARA
+0D03 MALAYALAM SIGN VISARGA
+0D05 MALAYALAM LETTER A
+0D06 MALAYALAM LETTER AA
+0D07 MALAYALAM LETTER I
+0D08 MALAYALAM LETTER II
+0D09 MALAYALAM LETTER U
+0D0A MALAYALAM LETTER UU
+0D0B MALAYALAM LETTER VOCALIC R
+0D0C MALAYALAM LETTER VOCALIC L
+0D0E MALAYALAM LETTER E
+0D0F MALAYALAM LETTER EE
+0D10 MALAYALAM LETTER AI
+0D12 MALAYALAM LETTER O
+0D13 MALAYALAM LETTER OO
+0D14 MALAYALAM LETTER AU
+0D15 MALAYALAM LETTER KA
+0D16 MALAYALAM LETTER KHA
+0D17 MALAYALAM LETTER GA
+0D18 MALAYALAM LETTER GHA
+0D19 MALAYALAM LETTER NGA
+0D1A MALAYALAM LETTER CA
+0D1B MALAYALAM LETTER CHA
+0D1C MALAYALAM LETTER JA
+0D1D MALAYALAM LETTER JHA
+0D1E MALAYALAM LETTER NYA
+0D1F MALAYALAM LETTER TTA
+0D20 MALAYALAM LETTER TTHA
+0D21 MALAYALAM LETTER DDA
+0D22 MALAYALAM LETTER DDHA
+0D23 MALAYALAM LETTER NNA
+0D24 MALAYALAM LETTER TA
+0D25 MALAYALAM LETTER THA
+0D26 MALAYALAM LETTER DA
+0D27 MALAYALAM LETTER DHA
+0D28 MALAYALAM LETTER NA
+0D2A MALAYALAM LETTER PA
+0D2B MALAYALAM LETTER PHA
+0D2C MALAYALAM LETTER BA
+0D2D MALAYALAM LETTER BHA
+0D2E MALAYALAM LETTER MA
+0D2F MALAYALAM LETTER YA
+0D30 MALAYALAM LETTER RA
+0D31 MALAYALAM LETTER RRA
+0D32 MALAYALAM LETTER LA
+0D33 MALAYALAM LETTER LLA
+0D34 MALAYALAM LETTER LLLA
+0D35 MALAYALAM LETTER VA
+0D36 MALAYALAM LETTER SHA
+0D37 MALAYALAM LETTER SSA
+0D38 MALAYALAM LETTER SA
+0D39 MALAYALAM LETTER HA
+0D3E MALAYALAM VOWEL SIGN AA
+0D3F MALAYALAM VOWEL SIGN I
+0D40 MALAYALAM VOWEL SIGN II
+0D41 MALAYALAM VOWEL SIGN U
+0D42 MALAYALAM VOWEL SIGN UU
+0D43 MALAYALAM VOWEL SIGN VOCALIC R
+0D46 MALAYALAM VOWEL SIGN E
+0D47 MALAYALAM VOWEL SIGN EE
+0D48 MALAYALAM VOWEL SIGN AI
+0D4A MALAYALAM VOWEL SIGN O
+0D4B MALAYALAM VOWEL SIGN OO
+0D4C MALAYALAM VOWEL SIGN AU
+0D4D MALAYALAM SIGN VIRAMA
+0D57 MALAYALAM AU LENGTH MARK
+0D60 MALAYALAM LETTER VOCALIC RR
+0D61 MALAYALAM LETTER VOCALIC LL
+0D66 MALAYALAM DIGIT ZERO
+0D67 MALAYALAM DIGIT ONE
+0D68 MALAYALAM DIGIT TWO
+0D69 MALAYALAM DIGIT THREE
+0D6A MALAYALAM DIGIT FOUR
+0D6B MALAYALAM DIGIT FIVE
+0D6C MALAYALAM DIGIT SIX
+0D6D MALAYALAM DIGIT SEVEN
+0D6E MALAYALAM DIGIT EIGHT
+0D6F MALAYALAM DIGIT NINE
+0D82 SINHALA SIGN ANUSVARAYA
+0D83 SINHALA SIGN VISARGAYA
+0D85 SINHALA LETTER AYANNA
+0D86 SINHALA LETTER AAYANNA
+0D87 SINHALA LETTER AEYANNA
+0D88 SINHALA LETTER AEEYANNA
+0D89 SINHALA LETTER IYANNA
+0D8A SINHALA LETTER IIYANNA
+0D8B SINHALA LETTER UYANNA
+0D8C SINHALA LETTER UUYANNA
+0D8D SINHALA LETTER IRUYANNA
+0D8E SINHALA LETTER IRUUYANNA
+0D8F SINHALA LETTER ILUYANNA
+0D90 SINHALA LETTER ILUUYANNA
+0D91 SINHALA LETTER EYANNA
+0D92 SINHALA LETTER EEYANNA
+0D93 SINHALA LETTER AIYANNA
+0D94 SINHALA LETTER OYANNA
+0D95 SINHALA LETTER OOYANNA
+0D96 SINHALA LETTER AUYANNA
+0D9A SINHALA LETTER ALPAPRAANA KAYANNA
+0D9B SINHALA LETTER MAHAAPRAANA KAYANNA
+0D9C SINHALA LETTER ALPAPRAANA GAYANNA
+0D9D SINHALA LETTER MAHAAPRAANA GAYANNA
+0D9E SINHALA LETTER KANTAJA NAASIKYAYA
+0D9F SINHALA LETTER SANYAKA GAYANNA
+0DA0 SINHALA LETTER ALPAPRAANA CAYANNA
+0DA1 SINHALA LETTER MAHAAPRAANA CAYANNA
+0DA2 SINHALA LETTER ALPAPRAANA JAYANNA
+0DA3 SINHALA LETTER MAHAAPRAANA JAYANNA
+0DA4 SINHALA LETTER TAALUJA NAASIKYAYA
+0DA5 SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA6 SINHALA LETTER SANYAKA JAYANNA
+0DA7 SINHALA LETTER ALPAPRAANA TTAYANNA
+0DA8 SINHALA LETTER MAHAAPRAANA TTAYANNA
+0DA9 SINHALA LETTER ALPAPRAANA DDAYANNA
+0DAA SINHALA LETTER MAHAAPRAANA DDAYANNA
+0DAB SINHALA LETTER MUURDHAJA NAYANNA
+0DAC SINHALA LETTER SANYAKA DDAYANNA
+0DAD SINHALA LETTER ALPAPRAANA TAYANNA
+0DAE SINHALA LETTER MAHAAPRAANA TAYANNA
+0DAF SINHALA LETTER ALPAPRAANA DAYANNA
+0DB0 SINHALA LETTER MAHAAPRAANA DAYANNA
+0DB1 SINHALA LETTER DANTAJA NAYANNA
+0DB3 SINHALA LETTER SANYAKA DAYANNA
+0DB4 SINHALA LETTER ALPAPRAANA PAYANNA
+0DB5 SINHALA LETTER MAHAAPRAANA PAYANNA
+0DB6 SINHALA LETTER ALPAPRAANA BAYANNA
+0DB7 SINHALA LETTER MAHAAPRAANA BAYANNA
+0DB8 SINHALA LETTER MAYANNA
+0DB9 SINHALA LETTER AMBA BAYANNA
+0DBA SINHALA LETTER YAYANNA
+0DBB SINHALA LETTER RAYANNA
+0DBD SINHALA LETTER DANTAJA LAYANNA
+0DC0 SINHALA LETTER VAYANNA
+0DC1 SINHALA LETTER TAALUJA SAYANNA
+0DC2 SINHALA LETTER MUURDHAJA SAYANNA
+0DC3 SINHALA LETTER DANTAJA SAYANNA
+0DC4 SINHALA LETTER HAYANNA
+0DC5 SINHALA LETTER MUURDHAJA LAYANNA
+0DC6 SINHALA LETTER FAYANNA
+0DCA SINHALA SIGN AL-LAKUNA
+0DCF SINHALA VOWEL SIGN AELA-PILLA
+0DD0 SINHALA VOWEL SIGN KETTI AEDA-PILLA
+0DD1 SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2 SINHALA VOWEL SIGN KETTI IS-PILLA
+0DD3 SINHALA VOWEL SIGN DIGA IS-PILLA
+0DD4 SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8 SINHALA VOWEL SIGN GAETTA-PILLA
+0DD9 SINHALA VOWEL SIGN KOMBUVA
+0DDA SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDB SINHALA VOWEL SIGN KOMBU DEKA
+0DDC SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+0DDD SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+0DDE SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DDF SINHALA VOWEL SIGN GAYANUKITTA
+0DF2 SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0DF3 SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 SINHALA PUNCTUATION KUNDDALIYA
+0E01 THAI CHARACTER KO KAI
+0E02 THAI CHARACTER KHO KHAI
+0E03 THAI CHARACTER KHO KHUAT
+0E04 THAI CHARACTER KHO KHWAI
+0E05 THAI CHARACTER KHO KHON
+0E06 THAI CHARACTER KHO RAKHANG
+0E07 THAI CHARACTER NGO NGU
+0E08 THAI CHARACTER CHO CHAN
+0E09 THAI CHARACTER CHO CHING
+0E0A THAI CHARACTER CHO CHANG
+0E0B THAI CHARACTER SO SO
+0E0C THAI CHARACTER CHO CHOE
+0E0D THAI CHARACTER YO YING
+0E0E THAI CHARACTER DO CHADA
+0E0F THAI CHARACTER TO PATAK
+0E10 THAI CHARACTER THO THAN
+0E11 THAI CHARACTER THO NANGMONTHO
+0E12 THAI CHARACTER THO PHUTHAO
+0E13 THAI CHARACTER NO NEN
+0E14 THAI CHARACTER DO DEK
+0E15 THAI CHARACTER TO TAO
+0E16 THAI CHARACTER THO THUNG
+0E17 THAI CHARACTER THO THAHAN
+0E18 THAI CHARACTER THO THONG
+0E19 THAI CHARACTER NO NU
+0E1A THAI CHARACTER BO BAIMAI
+0E1B THAI CHARACTER PO PLA
+0E1C THAI CHARACTER PHO PHUNG
+0E1D THAI CHARACTER FO FA
+0E1E THAI CHARACTER PHO PHAN
+0E1F THAI CHARACTER FO FAN
+0E20 THAI CHARACTER PHO SAMPHAO
+0E21 THAI CHARACTER MO MA
+0E22 THAI CHARACTER YO YAK
+0E23 THAI CHARACTER RO RUA
+0E24 THAI CHARACTER RU
+0E25 THAI CHARACTER LO LING
+0E26 THAI CHARACTER LU
+0E27 THAI CHARACTER WO WAEN
+0E28 THAI CHARACTER SO SALA
+0E29 THAI CHARACTER SO RUSI
+0E2A THAI CHARACTER SO SUA
+0E2B THAI CHARACTER HO HIP
+0E2C THAI CHARACTER LO CHULA
+0E2D THAI CHARACTER O ANG
+0E2E THAI CHARACTER HO NOKHUK
+0E2F THAI CHARACTER PAIYANNOI
+0E30 THAI CHARACTER SARA A
+0E31 THAI CHARACTER MAI HAN-AKAT
+0E32 THAI CHARACTER SARA AA
+0E33 THAI CHARACTER SARA AM
+0E34 THAI CHARACTER SARA I
+0E35 THAI CHARACTER SARA II
+0E36 THAI CHARACTER SARA UE
+0E37 THAI CHARACTER SARA UEE
+0E38 THAI CHARACTER SARA U
+0E39 THAI CHARACTER SARA UU
+0E3A THAI CHARACTER PHINTHU
+0E3F THAI CURRENCY SYMBOL BAHT
+0E40 THAI CHARACTER SARA E
+0E41 THAI CHARACTER SARA AE
+0E42 THAI CHARACTER SARA O
+0E43 THAI CHARACTER SARA AI MAIMUAN
+0E44 THAI CHARACTER SARA AI MAIMALAI
+0E45 THAI CHARACTER LAKKHANGYAO
+0E46 THAI CHARACTER MAIYAMOK
+0E47 THAI CHARACTER MAITAIKHU
+0E48 THAI CHARACTER MAI EK
+0E49 THAI CHARACTER MAI THO
+0E4A THAI CHARACTER MAI TRI
+0E4B THAI CHARACTER MAI CHATTAWA
+0E4C THAI CHARACTER THANTHAKHAT
+0E4D THAI CHARACTER NIKHAHIT
+0E4E THAI CHARACTER YAMAKKAN
+0E4F THAI CHARACTER FONGMAN
+0E50 THAI DIGIT ZERO
+0E51 THAI DIGIT ONE
+0E52 THAI DIGIT TWO
+0E53 THAI DIGIT THREE
+0E54 THAI DIGIT FOUR
+0E55 THAI DIGIT FIVE
+0E56 THAI DIGIT SIX
+0E57 THAI DIGIT SEVEN
+0E58 THAI DIGIT EIGHT
+0E59 THAI DIGIT NINE
+0E5A THAI CHARACTER ANGKHANKHU
+0E5B THAI CHARACTER KHOMUT
+0E81 LAO LETTER KO
+0E82 LAO LETTER KHO SUNG
+0E84 LAO LETTER KHO TAM
+0E87 LAO LETTER NGO
+0E88 LAO LETTER CO
+0E8A LAO LETTER SO TAM
+0E8D LAO LETTER NYO
+0E94 LAO LETTER DO
+0E95 LAO LETTER TO
+0E96 LAO LETTER THO SUNG
+0E97 LAO LETTER THO TAM
+0E99 LAO LETTER NO
+0E9A LAO LETTER BO
+0E9B LAO LETTER PO
+0E9C LAO LETTER PHO SUNG
+0E9D LAO LETTER FO TAM
+0E9E LAO LETTER PHO TAM
+0E9F LAO LETTER FO SUNG
+0EA1 LAO LETTER MO
+0EA2 LAO LETTER YO
+0EA3 LAO LETTER LO LING
+0EA5 LAO LETTER LO LOOT
+0EA7 LAO LETTER WO
+0EAA LAO LETTER SO SUNG
+0EAB LAO LETTER HO SUNG
+0EAD LAO LETTER O
+0EAE LAO LETTER HO TAM
+0EAF LAO ELLIPSIS
+0EB0 LAO VOWEL SIGN A
+0EB1 LAO VOWEL SIGN MAI KAN
+0EB2 LAO VOWEL SIGN AA
+0EB3 LAO VOWEL SIGN AM
+0EB4 LAO VOWEL SIGN I
+0EB5 LAO VOWEL SIGN II
+0EB6 LAO VOWEL SIGN Y
+0EB7 LAO VOWEL SIGN YY
+0EB8 LAO VOWEL SIGN U
+0EB9 LAO VOWEL SIGN UU
+0EBB LAO VOWEL SIGN MAI KON
+0EBC LAO SEMIVOWEL SIGN LO
+0EBD LAO SEMIVOWEL SIGN NYO
+0EC0 LAO VOWEL SIGN E
+0EC1 LAO VOWEL SIGN EI
+0EC2 LAO VOWEL SIGN O
+0EC3 LAO VOWEL SIGN AY
+0EC4 LAO VOWEL SIGN AI
+0EC6 LAO KO LA
+0EC8 LAO TONE MAI EK
+0EC9 LAO TONE MAI THO
+0ECA LAO TONE MAI TI
+0ECB LAO TONE MAI CATAWA
+0ECC LAO CANCELLATION MARK
+0ECD LAO NIGGAHITA
+0ED0 LAO DIGIT ZERO
+0ED1 LAO DIGIT ONE
+0ED2 LAO DIGIT TWO
+0ED3 LAO DIGIT THREE
+0ED4 LAO DIGIT FOUR
+0ED5 LAO DIGIT FIVE
+0ED6 LAO DIGIT SIX
+0ED7 LAO DIGIT SEVEN
+0ED8 LAO DIGIT EIGHT
+0ED9 LAO DIGIT NINE
+0EDC LAO HO NO
+0EDD LAO HO MO
+0F00 TIBETAN SYLLABLE OM
+0F01 TIBETAN MARK GTER YIG MGO TRUNCATED A
+0F02 TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+0F03 TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04 TIBETAN MARK INITIAL YIG MGO MDUN MA
+0F05 TIBETAN MARK CLOSING YIG MGO SGAB MA
+0F06 TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+0F07 TIBETAN MARK YIG MGO TSHEG SHAD MA
+0F08 TIBETAN MARK SBRUL SHAD
+0F09 TIBETAN MARK BSKUR YIG MGO
+0F0A TIBETAN MARK BKA- SHOG YIG MGO
+0F0B TIBETAN MARK INTERSYLLABIC TSHEG
+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR
+0F0D TIBETAN MARK SHAD
+0F0E TIBETAN MARK NYIS SHAD
+0F0F TIBETAN MARK TSHEG SHAD
+0F10 TIBETAN MARK NYIS TSHEG SHAD
+0F11 TIBETAN MARK RIN CHEN SPUNGS SHAD
+0F12 TIBETAN MARK RGYA GRAM SHAD
+0F13 TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 TIBETAN MARK GTER TSHEG
+0F15 TIBETAN LOGOTYPE SIGN CHAD RTAGS
+0F16 TIBETAN LOGOTYPE SIGN LHAG RTAGS
+0F17 TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18 TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+0F19 TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A TIBETAN SIGN RDEL DKAR GCIG
+0F1B TIBETAN SIGN RDEL DKAR GNYIS
+0F1C TIBETAN SIGN RDEL DKAR GSUM
+0F1D TIBETAN SIGN RDEL NAG GCIG
+0F1E TIBETAN SIGN RDEL NAG GNYIS
+0F1F TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20 TIBETAN DIGIT ZERO
+0F21 TIBETAN DIGIT ONE
+0F22 TIBETAN DIGIT TWO
+0F23 TIBETAN DIGIT THREE
+0F24 TIBETAN DIGIT FOUR
+0F25 TIBETAN DIGIT FIVE
+0F26 TIBETAN DIGIT SIX
+0F27 TIBETAN DIGIT SEVEN
+0F28 TIBETAN DIGIT EIGHT
+0F29 TIBETAN DIGIT NINE
+0F2A TIBETAN DIGIT HALF ONE
+0F2B TIBETAN DIGIT HALF TWO
+0F2C TIBETAN DIGIT HALF THREE
+0F2D TIBETAN DIGIT HALF FOUR
+0F2E TIBETAN DIGIT HALF FIVE
+0F2F TIBETAN DIGIT HALF SIX
+0F30 TIBETAN DIGIT HALF SEVEN
+0F31 TIBETAN DIGIT HALF EIGHT
+0F32 TIBETAN DIGIT HALF NINE
+0F33 TIBETAN DIGIT HALF ZERO
+0F34 TIBETAN MARK BSDUS RTAGS
+0F35 TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36 TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37 TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38 TIBETAN MARK CHE MGO
+0F39 TIBETAN MARK TSA -PHRU
+0F3A TIBETAN MARK GUG RTAGS GYON
+0F3B TIBETAN MARK GUG RTAGS GYAS
+0F3C TIBETAN MARK ANG KHANG GYON
+0F3D TIBETAN MARK ANG KHANG GYAS
+0F3E TIBETAN SIGN YAR TSHES
+0F3F TIBETAN SIGN MAR TSHES
+0F40 TIBETAN LETTER KA
+0F41 TIBETAN LETTER KHA
+0F42 TIBETAN LETTER GA
+0F43 TIBETAN LETTER GHA
+0F44 TIBETAN LETTER NGA
+0F45 TIBETAN LETTER CA
+0F46 TIBETAN LETTER CHA
+0F47 TIBETAN LETTER JA
+0F49 TIBETAN LETTER NYA
+0F4A TIBETAN LETTER TTA
+0F4B TIBETAN LETTER TTHA
+0F4C TIBETAN LETTER DDA
+0F4D TIBETAN LETTER DDHA
+0F4E TIBETAN LETTER NNA
+0F4F TIBETAN LETTER TA
+0F50 TIBETAN LETTER THA
+0F51 TIBETAN LETTER DA
+0F52 TIBETAN LETTER DHA
+0F53 TIBETAN LETTER NA
+0F54 TIBETAN LETTER PA
+0F55 TIBETAN LETTER PHA
+0F56 TIBETAN LETTER BA
+0F57 TIBETAN LETTER BHA
+0F58 TIBETAN LETTER MA
+0F59 TIBETAN LETTER TSA
+0F5A TIBETAN LETTER TSHA
+0F5B TIBETAN LETTER DZA
+0F5C TIBETAN LETTER DZHA
+0F5D TIBETAN LETTER WA
+0F5E TIBETAN LETTER ZHA
+0F5F TIBETAN LETTER ZA
+0F60 TIBETAN LETTER -A
+0F61 TIBETAN LETTER YA
+0F62 TIBETAN LETTER RA
+0F63 TIBETAN LETTER LA
+0F64 TIBETAN LETTER SHA
+0F65 TIBETAN LETTER SSA
+0F66 TIBETAN LETTER SA
+0F67 TIBETAN LETTER HA
+0F68 TIBETAN LETTER A
+0F69 TIBETAN LETTER KSSA
+0F6A TIBETAN LETTER FIXED-FORM RA
+0F71 TIBETAN VOWEL SIGN AA
+0F72 TIBETAN VOWEL SIGN I
+0F73 TIBETAN VOWEL SIGN II
+0F74 TIBETAN VOWEL SIGN U
+0F75 TIBETAN VOWEL SIGN UU
+0F76 TIBETAN VOWEL SIGN VOCALIC R
+0F77 TIBETAN VOWEL SIGN VOCALIC RR
+0F78 TIBETAN VOWEL SIGN VOCALIC L
+0F79 TIBETAN VOWEL SIGN VOCALIC LL
+0F7A TIBETAN VOWEL SIGN E
+0F7B TIBETAN VOWEL SIGN EE
+0F7C TIBETAN VOWEL SIGN O
+0F7D TIBETAN VOWEL SIGN OO
+0F7E TIBETAN SIGN RJES SU NGA RO
+0F7F TIBETAN SIGN RNAM BCAD
+0F80 TIBETAN VOWEL SIGN REVERSED I
+0F81 TIBETAN VOWEL SIGN REVERSED II
+0F82 TIBETAN SIGN NYI ZLA NAA DA
+0F83 TIBETAN SIGN SNA LDAN
+0F84 TIBETAN MARK HALANTA
+0F85 TIBETAN MARK PALUTA
+0F86 TIBETAN SIGN LCI RTAGS
+0F87 TIBETAN SIGN YANG RTAGS
+0F88 TIBETAN SIGN LCE TSA CAN
+0F89 TIBETAN SIGN MCHU CAN
+0F8A TIBETAN SIGN GRU CAN RGYINGS
+0F8B TIBETAN SIGN GRU MED RGYINGS
+0F90 TIBETAN SUBJOINED LETTER KA
+0F91 TIBETAN SUBJOINED LETTER KHA
+0F92 TIBETAN SUBJOINED LETTER GA
+0F93 TIBETAN SUBJOINED LETTER GHA
+0F94 TIBETAN SUBJOINED LETTER NGA
+0F95 TIBETAN SUBJOINED LETTER CA
+0F96 TIBETAN SUBJOINED LETTER CHA
+0F97 TIBETAN SUBJOINED LETTER JA
+0F99 TIBETAN SUBJOINED LETTER NYA
+0F9A TIBETAN SUBJOINED LETTER TTA
+0F9B TIBETAN SUBJOINED LETTER TTHA
+0F9C TIBETAN SUBJOINED LETTER DDA
+0F9D TIBETAN SUBJOINED LETTER DDHA
+0F9E TIBETAN SUBJOINED LETTER NNA
+0F9F TIBETAN SUBJOINED LETTER TA
+0FA0 TIBETAN SUBJOINED LETTER THA
+0FA1 TIBETAN SUBJOINED LETTER DA
+0FA2 TIBETAN SUBJOINED LETTER DHA
+0FA3 TIBETAN SUBJOINED LETTER NA
+0FA4 TIBETAN SUBJOINED LETTER PA
+0FA5 TIBETAN SUBJOINED LETTER PHA
+0FA6 TIBETAN SUBJOINED LETTER BA
+0FA7 TIBETAN SUBJOINED LETTER BHA
+0FA8 TIBETAN SUBJOINED LETTER MA
+0FA9 TIBETAN SUBJOINED LETTER TSA
+0FAA TIBETAN SUBJOINED LETTER TSHA
+0FAB TIBETAN SUBJOINED LETTER DZA
+0FAC TIBETAN SUBJOINED LETTER DZHA
+0FAD TIBETAN SUBJOINED LETTER WA
+0FAE TIBETAN SUBJOINED LETTER ZHA
+0FAF TIBETAN SUBJOINED LETTER ZA
+0FB0 TIBETAN SUBJOINED LETTER -A
+0FB1 TIBETAN SUBJOINED LETTER YA
+0FB2 TIBETAN SUBJOINED LETTER RA
+0FB3 TIBETAN SUBJOINED LETTER LA
+0FB4 TIBETAN SUBJOINED LETTER SHA
+0FB5 TIBETAN SUBJOINED LETTER SSA
+0FB6 TIBETAN SUBJOINED LETTER SA
+0FB7 TIBETAN SUBJOINED LETTER HA
+0FB8 TIBETAN SUBJOINED LETTER A
+0FB9 TIBETAN SUBJOINED LETTER KSSA
+0FBA TIBETAN SUBJOINED LETTER FIXED-FORM WA
+0FBB TIBETAN SUBJOINED LETTER FIXED-FORM YA
+0FBC TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE TIBETAN KU RU KHA
+0FBF TIBETAN KU RU KHA BZHI MIG CAN
+0FC0 TIBETAN CANTILLATION SIGN HEAVY BEAT
+0FC1 TIBETAN CANTILLATION SIGN LIGHT BEAT
+0FC2 TIBETAN CANTILLATION SIGN CANG TE-U
+0FC3 TIBETAN CANTILLATION SIGN SBUB -CHAL
+0FC4 TIBETAN SYMBOL DRIL BU
+0FC5 TIBETAN SYMBOL RDO RJE
+0FC6 TIBETAN SYMBOL PADMA GDAN
+0FC7 TIBETAN SYMBOL RDO RJE RGYA GRAM
+0FC8 TIBETAN SYMBOL PHUR PA
+0FC9 TIBETAN SYMBOL NOR BU
+0FCA TIBETAN SYMBOL NOR BU NYIS -KHYIL
+0FCB TIBETAN SYMBOL NOR BU GSUM -KHYIL
+0FCC TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF TIBETAN SIGN RDEL NAG GSUM
+0FD0 TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+0FD1 TIBETAN MARK MNYAM YIG GI MGO RGYAN
+1000 MYANMAR LETTER KA
+1001 MYANMAR LETTER KHA
+1002 MYANMAR LETTER GA
+1003 MYANMAR LETTER GHA
+1004 MYANMAR LETTER NGA
+1005 MYANMAR LETTER CA
+1006 MYANMAR LETTER CHA
+1007 MYANMAR LETTER JA
+1008 MYANMAR LETTER JHA
+1009 MYANMAR LETTER NYA
+100A MYANMAR LETTER NNYA
+100B MYANMAR LETTER TTA
+100C MYANMAR LETTER TTHA
+100D MYANMAR LETTER DDA
+100E MYANMAR LETTER DDHA
+100F MYANMAR LETTER NNA
+1010 MYANMAR LETTER TA
+1011 MYANMAR LETTER THA
+1012 MYANMAR LETTER DA
+1013 MYANMAR LETTER DHA
+1014 MYANMAR LETTER NA
+1015 MYANMAR LETTER PA
+1016 MYANMAR LETTER PHA
+1017 MYANMAR LETTER BA
+1018 MYANMAR LETTER BHA
+1019 MYANMAR LETTER MA
+101A MYANMAR LETTER YA
+101B MYANMAR LETTER RA
+101C MYANMAR LETTER LA
+101D MYANMAR LETTER WA
+101E MYANMAR LETTER SA
+101F MYANMAR LETTER HA
+1020 MYANMAR LETTER LLA
+1021 MYANMAR LETTER A
+1023 MYANMAR LETTER I
+1024 MYANMAR LETTER II
+1025 MYANMAR LETTER U
+1026 MYANMAR LETTER UU
+1027 MYANMAR LETTER E
+1029 MYANMAR LETTER O
+102A MYANMAR LETTER AU
+102C MYANMAR VOWEL SIGN AA
+102D MYANMAR VOWEL SIGN I
+102E MYANMAR VOWEL SIGN II
+102F MYANMAR VOWEL SIGN U
+1030 MYANMAR VOWEL SIGN UU
+1031 MYANMAR VOWEL SIGN E
+1032 MYANMAR VOWEL SIGN AI
+1036 MYANMAR SIGN ANUSVARA
+1037 MYANMAR SIGN DOT BELOW
+1038 MYANMAR SIGN VISARGA
+1039 MYANMAR SIGN VIRAMA
+1040 MYANMAR DIGIT ZERO
+1041 MYANMAR DIGIT ONE
+1042 MYANMAR DIGIT TWO
+1043 MYANMAR DIGIT THREE
+1044 MYANMAR DIGIT FOUR
+1045 MYANMAR DIGIT FIVE
+1046 MYANMAR DIGIT SIX
+1047 MYANMAR DIGIT SEVEN
+1048 MYANMAR DIGIT EIGHT
+1049 MYANMAR DIGIT NINE
+104A MYANMAR SIGN LITTLE SECTION
+104B MYANMAR SIGN SECTION
+104C MYANMAR SYMBOL LOCATIVE
+104D MYANMAR SYMBOL COMPLETED
+104E MYANMAR SYMBOL AFOREMENTIONED
+104F MYANMAR SYMBOL GENITIVE
+1050 MYANMAR LETTER SHA
+1051 MYANMAR LETTER SSA
+1052 MYANMAR LETTER VOCALIC R
+1053 MYANMAR LETTER VOCALIC RR
+1054 MYANMAR LETTER VOCALIC L
+1055 MYANMAR LETTER VOCALIC LL
+1056 MYANMAR VOWEL SIGN VOCALIC R
+1057 MYANMAR VOWEL SIGN VOCALIC RR
+1058 MYANMAR VOWEL SIGN VOCALIC L
+1059 MYANMAR VOWEL SIGN VOCALIC LL
+10A0 GEORGIAN CAPITAL LETTER AN
+10A1 GEORGIAN CAPITAL LETTER BAN
+10A2 GEORGIAN CAPITAL LETTER GAN
+10A3 GEORGIAN CAPITAL LETTER DON
+10A4 GEORGIAN CAPITAL LETTER EN
+10A5 GEORGIAN CAPITAL LETTER VIN
+10A6 GEORGIAN CAPITAL LETTER ZEN
+10A7 GEORGIAN CAPITAL LETTER TAN
+10A8 GEORGIAN CAPITAL LETTER IN
+10A9 GEORGIAN CAPITAL LETTER KAN
+10AA GEORGIAN CAPITAL LETTER LAS
+10AB GEORGIAN CAPITAL LETTER MAN
+10AC GEORGIAN CAPITAL LETTER NAR
+10AD GEORGIAN CAPITAL LETTER ON
+10AE GEORGIAN CAPITAL LETTER PAR
+10AF GEORGIAN CAPITAL LETTER ZHAR
+10B0 GEORGIAN CAPITAL LETTER RAE
+10B1 GEORGIAN CAPITAL LETTER SAN
+10B2 GEORGIAN CAPITAL LETTER TAR
+10B3 GEORGIAN CAPITAL LETTER UN
+10B4 GEORGIAN CAPITAL LETTER PHAR
+10B5 GEORGIAN CAPITAL LETTER KHAR
+10B6 GEORGIAN CAPITAL LETTER GHAN
+10B7 GEORGIAN CAPITAL LETTER QAR
+10B8 GEORGIAN CAPITAL LETTER SHIN
+10B9 GEORGIAN CAPITAL LETTER CHIN
+10BA GEORGIAN CAPITAL LETTER CAN
+10BB GEORGIAN CAPITAL LETTER JIL
+10BC GEORGIAN CAPITAL LETTER CIL
+10BD GEORGIAN CAPITAL LETTER CHAR
+10BE GEORGIAN CAPITAL LETTER XAN
+10BF GEORGIAN CAPITAL LETTER JHAN
+10C0 GEORGIAN CAPITAL LETTER HAE
+10C1 GEORGIAN CAPITAL LETTER HE
+10C2 GEORGIAN CAPITAL LETTER HIE
+10C3 GEORGIAN CAPITAL LETTER WE
+10C4 GEORGIAN CAPITAL LETTER HAR
+10C5 GEORGIAN CAPITAL LETTER HOE
+10D0 GEORGIAN LETTER AN
+10D1 GEORGIAN LETTER BAN
+10D2 GEORGIAN LETTER GAN
+10D3 GEORGIAN LETTER DON
+10D4 GEORGIAN LETTER EN
+10D5 GEORGIAN LETTER VIN
+10D6 GEORGIAN LETTER ZEN
+10D7 GEORGIAN LETTER TAN
+10D8 GEORGIAN LETTER IN
+10D9 GEORGIAN LETTER KAN
+10DA GEORGIAN LETTER LAS
+10DB GEORGIAN LETTER MAN
+10DC GEORGIAN LETTER NAR
+10DD GEORGIAN LETTER ON
+10DE GEORGIAN LETTER PAR
+10DF GEORGIAN LETTER ZHAR
+10E0 GEORGIAN LETTER RAE
+10E1 GEORGIAN LETTER SAN
+10E2 GEORGIAN LETTER TAR
+10E3 GEORGIAN LETTER UN
+10E4 GEORGIAN LETTER PHAR
+10E5 GEORGIAN LETTER KHAR
+10E6 GEORGIAN LETTER GHAN
+10E7 GEORGIAN LETTER QAR
+10E8 GEORGIAN LETTER SHIN
+10E9 GEORGIAN LETTER CHIN
+10EA GEORGIAN LETTER CAN
+10EB GEORGIAN LETTER JIL
+10EC GEORGIAN LETTER CIL
+10ED GEORGIAN LETTER CHAR
+10EE GEORGIAN LETTER XAN
+10EF GEORGIAN LETTER JHAN
+10F0 GEORGIAN LETTER HAE
+10F1 GEORGIAN LETTER HE
+10F2 GEORGIAN LETTER HIE
+10F3 GEORGIAN LETTER WE
+10F4 GEORGIAN LETTER HAR
+10F5 GEORGIAN LETTER HOE
+10F6 GEORGIAN LETTER FI
+10F7 GEORGIAN LETTER YN
+10F8 GEORGIAN LETTER ELIFI
+10F9 GEORGIAN LETTER TURNED GAN
+10FA GEORGIAN LETTER AIN
+10FB GEORGIAN PARAGRAPH SEPARATOR
+10FC MODIFIER LETTER GEORGIAN NAR
+1100 HANGUL CHOSEONG KIYEOK
+1101 HANGUL CHOSEONG SSANGKIYEOK
+1102 HANGUL CHOSEONG NIEUN
+1103 HANGUL CHOSEONG TIKEUT
+1104 HANGUL CHOSEONG SSANGTIKEUT
+1105 HANGUL CHOSEONG RIEUL
+1106 HANGUL CHOSEONG MIEUM
+1107 HANGUL CHOSEONG PIEUP
+1108 HANGUL CHOSEONG SSANGPIEUP
+1109 HANGUL CHOSEONG SIOS
+110A HANGUL CHOSEONG SSANGSIOS
+110B HANGUL CHOSEONG IEUNG
+110C HANGUL CHOSEONG CIEUC
+110D HANGUL CHOSEONG SSANGCIEUC
+110E HANGUL CHOSEONG CHIEUCH
+110F HANGUL CHOSEONG KHIEUKH
+1110 HANGUL CHOSEONG THIEUTH
+1111 HANGUL CHOSEONG PHIEUPH
+1112 HANGUL CHOSEONG HIEUH
+1113 HANGUL CHOSEONG NIEUN-KIYEOK
+1114 HANGUL CHOSEONG SSANGNIEUN
+1115 HANGUL CHOSEONG NIEUN-TIKEUT
+1116 HANGUL CHOSEONG NIEUN-PIEUP
+1117 HANGUL CHOSEONG TIKEUT-KIYEOK
+1118 HANGUL CHOSEONG RIEUL-NIEUN
+1119 HANGUL CHOSEONG SSANGRIEUL
+111A HANGUL CHOSEONG RIEUL-HIEUH
+111B HANGUL CHOSEONG KAPYEOUNRIEUL
+111C HANGUL CHOSEONG MIEUM-PIEUP
+111D HANGUL CHOSEONG KAPYEOUNMIEUM
+111E HANGUL CHOSEONG PIEUP-KIYEOK
+111F HANGUL CHOSEONG PIEUP-NIEUN
+1120 HANGUL CHOSEONG PIEUP-TIKEUT
+1121 HANGUL CHOSEONG PIEUP-SIOS
+1122 HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123 HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124 HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125 HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126 HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127 HANGUL CHOSEONG PIEUP-CIEUC
+1128 HANGUL CHOSEONG PIEUP-CHIEUCH
+1129 HANGUL CHOSEONG PIEUP-THIEUTH
+112A HANGUL CHOSEONG PIEUP-PHIEUPH
+112B HANGUL CHOSEONG KAPYEOUNPIEUP
+112C HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D HANGUL CHOSEONG SIOS-KIYEOK
+112E HANGUL CHOSEONG SIOS-NIEUN
+112F HANGUL CHOSEONG SIOS-TIKEUT
+1130 HANGUL CHOSEONG SIOS-RIEUL
+1131 HANGUL CHOSEONG SIOS-MIEUM
+1132 HANGUL CHOSEONG SIOS-PIEUP
+1133 HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134 HANGUL CHOSEONG SIOS-SSANGSIOS
+1135 HANGUL CHOSEONG SIOS-IEUNG
+1136 HANGUL CHOSEONG SIOS-CIEUC
+1137 HANGUL CHOSEONG SIOS-CHIEUCH
+1138 HANGUL CHOSEONG SIOS-KHIEUKH
+1139 HANGUL CHOSEONG SIOS-THIEUTH
+113A HANGUL CHOSEONG SIOS-PHIEUPH
+113B HANGUL CHOSEONG SIOS-HIEUH
+113C HANGUL CHOSEONG CHITUEUMSIOS
+113D HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140 HANGUL CHOSEONG PANSIOS
+1141 HANGUL CHOSEONG IEUNG-KIYEOK
+1142 HANGUL CHOSEONG IEUNG-TIKEUT
+1143 HANGUL CHOSEONG IEUNG-MIEUM
+1144 HANGUL CHOSEONG IEUNG-PIEUP
+1145 HANGUL CHOSEONG IEUNG-SIOS
+1146 HANGUL CHOSEONG IEUNG-PANSIOS
+1147 HANGUL CHOSEONG SSANGIEUNG
+1148 HANGUL CHOSEONG IEUNG-CIEUC
+1149 HANGUL CHOSEONG IEUNG-CHIEUCH
+114A HANGUL CHOSEONG IEUNG-THIEUTH
+114B HANGUL CHOSEONG IEUNG-PHIEUPH
+114C HANGUL CHOSEONG YESIEUNG
+114D HANGUL CHOSEONG CIEUC-IEUNG
+114E HANGUL CHOSEONG CHITUEUMCIEUC
+114F HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150 HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151 HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152 HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153 HANGUL CHOSEONG CHIEUCH-HIEUH
+1154 HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155 HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156 HANGUL CHOSEONG PHIEUPH-PIEUP
+1157 HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158 HANGUL CHOSEONG SSANGHIEUH
+1159 HANGUL CHOSEONG YEORINHIEUH
+115F HANGUL CHOSEONG FILLER
+1160 HANGUL JUNGSEONG FILLER
+1161 HANGUL JUNGSEONG A
+1162 HANGUL JUNGSEONG AE
+1163 HANGUL JUNGSEONG YA
+1164 HANGUL JUNGSEONG YAE
+1165 HANGUL JUNGSEONG EO
+1166 HANGUL JUNGSEONG E
+1167 HANGUL JUNGSEONG YEO
+1168 HANGUL JUNGSEONG YE
+1169 HANGUL JUNGSEONG O
+116A HANGUL JUNGSEONG WA
+116B HANGUL JUNGSEONG WAE
+116C HANGUL JUNGSEONG OE
+116D HANGUL JUNGSEONG YO
+116E HANGUL JUNGSEONG U
+116F HANGUL JUNGSEONG WEO
+1170 HANGUL JUNGSEONG WE
+1171 HANGUL JUNGSEONG WI
+1172 HANGUL JUNGSEONG YU
+1173 HANGUL JUNGSEONG EU
+1174 HANGUL JUNGSEONG YI
+1175 HANGUL JUNGSEONG I
+1176 HANGUL JUNGSEONG A-O
+1177 HANGUL JUNGSEONG A-U
+1178 HANGUL JUNGSEONG YA-O
+1179 HANGUL JUNGSEONG YA-YO
+117A HANGUL JUNGSEONG EO-O
+117B HANGUL JUNGSEONG EO-U
+117C HANGUL JUNGSEONG EO-EU
+117D HANGUL JUNGSEONG YEO-O
+117E HANGUL JUNGSEONG YEO-U
+117F HANGUL JUNGSEONG O-EO
+1180 HANGUL JUNGSEONG O-E
+1181 HANGUL JUNGSEONG O-YE
+1182 HANGUL JUNGSEONG O-O
+1183 HANGUL JUNGSEONG O-U
+1184 HANGUL JUNGSEONG YO-YA
+1185 HANGUL JUNGSEONG YO-YAE
+1186 HANGUL JUNGSEONG YO-YEO
+1187 HANGUL JUNGSEONG YO-O
+1188 HANGUL JUNGSEONG YO-I
+1189 HANGUL JUNGSEONG U-A
+118A HANGUL JUNGSEONG U-AE
+118B HANGUL JUNGSEONG U-EO-EU
+118C HANGUL JUNGSEONG U-YE
+118D HANGUL JUNGSEONG U-U
+118E HANGUL JUNGSEONG YU-A
+118F HANGUL JUNGSEONG YU-EO
+1190 HANGUL JUNGSEONG YU-E
+1191 HANGUL JUNGSEONG YU-YEO
+1192 HANGUL JUNGSEONG YU-YE
+1193 HANGUL JUNGSEONG YU-U
+1194 HANGUL JUNGSEONG YU-I
+1195 HANGUL JUNGSEONG EU-U
+1196 HANGUL JUNGSEONG EU-EU
+1197 HANGUL JUNGSEONG YI-U
+1198 HANGUL JUNGSEONG I-A
+1199 HANGUL JUNGSEONG I-YA
+119A HANGUL JUNGSEONG I-O
+119B HANGUL JUNGSEONG I-U
+119C HANGUL JUNGSEONG I-EU
+119D HANGUL JUNGSEONG I-ARAEA
+119E HANGUL JUNGSEONG ARAEA
+119F HANGUL JUNGSEONG ARAEA-EO
+11A0 HANGUL JUNGSEONG ARAEA-U
+11A1 HANGUL JUNGSEONG ARAEA-I
+11A2 HANGUL JUNGSEONG SSANGARAEA
+11A8 HANGUL JONGSEONG KIYEOK
+11A9 HANGUL JONGSEONG SSANGKIYEOK
+11AA HANGUL JONGSEONG KIYEOK-SIOS
+11AB HANGUL JONGSEONG NIEUN
+11AC HANGUL JONGSEONG NIEUN-CIEUC
+11AD HANGUL JONGSEONG NIEUN-HIEUH
+11AE HANGUL JONGSEONG TIKEUT
+11AF HANGUL JONGSEONG RIEUL
+11B0 HANGUL JONGSEONG RIEUL-KIYEOK
+11B1 HANGUL JONGSEONG RIEUL-MIEUM
+11B2 HANGUL JONGSEONG RIEUL-PIEUP
+11B3 HANGUL JONGSEONG RIEUL-SIOS
+11B4 HANGUL JONGSEONG RIEUL-THIEUTH
+11B5 HANGUL JONGSEONG RIEUL-PHIEUPH
+11B6 HANGUL JONGSEONG RIEUL-HIEUH
+11B7 HANGUL JONGSEONG MIEUM
+11B8 HANGUL JONGSEONG PIEUP
+11B9 HANGUL JONGSEONG PIEUP-SIOS
+11BA HANGUL JONGSEONG SIOS
+11BB HANGUL JONGSEONG SSANGSIOS
+11BC HANGUL JONGSEONG IEUNG
+11BD HANGUL JONGSEONG CIEUC
+11BE HANGUL JONGSEONG CHIEUCH
+11BF HANGUL JONGSEONG KHIEUKH
+11C0 HANGUL JONGSEONG THIEUTH
+11C1 HANGUL JONGSEONG PHIEUPH
+11C2 HANGUL JONGSEONG HIEUH
+11C3 HANGUL JONGSEONG KIYEOK-RIEUL
+11C4 HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5 HANGUL JONGSEONG NIEUN-KIYEOK
+11C6 HANGUL JONGSEONG NIEUN-TIKEUT
+11C7 HANGUL JONGSEONG NIEUN-SIOS
+11C8 HANGUL JONGSEONG NIEUN-PANSIOS
+11C9 HANGUL JONGSEONG NIEUN-THIEUTH
+11CA HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB HANGUL JONGSEONG TIKEUT-RIEUL
+11CC HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD HANGUL JONGSEONG RIEUL-NIEUN
+11CE HANGUL JONGSEONG RIEUL-TIKEUT
+11CF HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0 HANGUL JONGSEONG SSANGRIEUL
+11D1 HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2 HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3 HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4 HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5 HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6 HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7 HANGUL JONGSEONG RIEUL-PANSIOS
+11D8 HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9 HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA HANGUL JONGSEONG MIEUM-KIYEOK
+11DB HANGUL JONGSEONG MIEUM-RIEUL
+11DC HANGUL JONGSEONG MIEUM-PIEUP
+11DD HANGUL JONGSEONG MIEUM-SIOS
+11DE HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF HANGUL JONGSEONG MIEUM-PANSIOS
+11E0 HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1 HANGUL JONGSEONG MIEUM-HIEUH
+11E2 HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3 HANGUL JONGSEONG PIEUP-RIEUL
+11E4 HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5 HANGUL JONGSEONG PIEUP-HIEUH
+11E6 HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7 HANGUL JONGSEONG SIOS-KIYEOK
+11E8 HANGUL JONGSEONG SIOS-TIKEUT
+11E9 HANGUL JONGSEONG SIOS-RIEUL
+11EA HANGUL JONGSEONG SIOS-PIEUP
+11EB HANGUL JONGSEONG PANSIOS
+11EC HANGUL JONGSEONG IEUNG-KIYEOK
+11ED HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE HANGUL JONGSEONG SSANGIEUNG
+11EF HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0 HANGUL JONGSEONG YESIEUNG
+11F1 HANGUL JONGSEONG YESIEUNG-SIOS
+11F2 HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3 HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4 HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5 HANGUL JONGSEONG HIEUH-NIEUN
+11F6 HANGUL JONGSEONG HIEUH-RIEUL
+11F7 HANGUL JONGSEONG HIEUH-MIEUM
+11F8 HANGUL JONGSEONG HIEUH-PIEUP
+11F9 HANGUL JONGSEONG YEORINHIEUH
+1200 ETHIOPIC SYLLABLE HA
+1201 ETHIOPIC SYLLABLE HU
+1202 ETHIOPIC SYLLABLE HI
+1203 ETHIOPIC SYLLABLE HAA
+1204 ETHIOPIC SYLLABLE HEE
+1205 ETHIOPIC SYLLABLE HE
+1206 ETHIOPIC SYLLABLE HO
+1207 ETHIOPIC SYLLABLE HOA
+1208 ETHIOPIC SYLLABLE LA
+1209 ETHIOPIC SYLLABLE LU
+120A ETHIOPIC SYLLABLE LI
+120B ETHIOPIC SYLLABLE LAA
+120C ETHIOPIC SYLLABLE LEE
+120D ETHIOPIC SYLLABLE LE
+120E ETHIOPIC SYLLABLE LO
+120F ETHIOPIC SYLLABLE LWA
+1210 ETHIOPIC SYLLABLE HHA
+1211 ETHIOPIC SYLLABLE HHU
+1212 ETHIOPIC SYLLABLE HHI
+1213 ETHIOPIC SYLLABLE HHAA
+1214 ETHIOPIC SYLLABLE HHEE
+1215 ETHIOPIC SYLLABLE HHE
+1216 ETHIOPIC SYLLABLE HHO
+1217 ETHIOPIC SYLLABLE HHWA
+1218 ETHIOPIC SYLLABLE MA
+1219 ETHIOPIC SYLLABLE MU
+121A ETHIOPIC SYLLABLE MI
+121B ETHIOPIC SYLLABLE MAA
+121C ETHIOPIC SYLLABLE MEE
+121D ETHIOPIC SYLLABLE ME
+121E ETHIOPIC SYLLABLE MO
+121F ETHIOPIC SYLLABLE MWA
+1220 ETHIOPIC SYLLABLE SZA
+1221 ETHIOPIC SYLLABLE SZU
+1222 ETHIOPIC SYLLABLE SZI
+1223 ETHIOPIC SYLLABLE SZAA
+1224 ETHIOPIC SYLLABLE SZEE
+1225 ETHIOPIC SYLLABLE SZE
+1226 ETHIOPIC SYLLABLE SZO
+1227 ETHIOPIC SYLLABLE SZWA
+1228 ETHIOPIC SYLLABLE RA
+1229 ETHIOPIC SYLLABLE RU
+122A ETHIOPIC SYLLABLE RI
+122B ETHIOPIC SYLLABLE RAA
+122C ETHIOPIC SYLLABLE REE
+122D ETHIOPIC SYLLABLE RE
+122E ETHIOPIC SYLLABLE RO
+122F ETHIOPIC SYLLABLE RWA
+1230 ETHIOPIC SYLLABLE SA
+1231 ETHIOPIC SYLLABLE SU
+1232 ETHIOPIC SYLLABLE SI
+1233 ETHIOPIC SYLLABLE SAA
+1234 ETHIOPIC SYLLABLE SEE
+1235 ETHIOPIC SYLLABLE SE
+1236 ETHIOPIC SYLLABLE SO
+1237 ETHIOPIC SYLLABLE SWA
+1238 ETHIOPIC SYLLABLE SHA
+1239 ETHIOPIC SYLLABLE SHU
+123A ETHIOPIC SYLLABLE SHI
+123B ETHIOPIC SYLLABLE SHAA
+123C ETHIOPIC SYLLABLE SHEE
+123D ETHIOPIC SYLLABLE SHE
+123E ETHIOPIC SYLLABLE SHO
+123F ETHIOPIC SYLLABLE SHWA
+1240 ETHIOPIC SYLLABLE QA
+1241 ETHIOPIC SYLLABLE QU
+1242 ETHIOPIC SYLLABLE QI
+1243 ETHIOPIC SYLLABLE QAA
+1244 ETHIOPIC SYLLABLE QEE
+1245 ETHIOPIC SYLLABLE QE
+1246 ETHIOPIC SYLLABLE QO
+1247 ETHIOPIC SYLLABLE QOA
+1248 ETHIOPIC SYLLABLE QWA
+124A ETHIOPIC SYLLABLE QWI
+124B ETHIOPIC SYLLABLE QWAA
+124C ETHIOPIC SYLLABLE QWEE
+124D ETHIOPIC SYLLABLE QWE
+1250 ETHIOPIC SYLLABLE QHA
+1251 ETHIOPIC SYLLABLE QHU
+1252 ETHIOPIC SYLLABLE QHI
+1253 ETHIOPIC SYLLABLE QHAA
+1254 ETHIOPIC SYLLABLE QHEE
+1255 ETHIOPIC SYLLABLE QHE
+1256 ETHIOPIC SYLLABLE QHO
+1258 ETHIOPIC SYLLABLE QHWA
+125A ETHIOPIC SYLLABLE QHWI
+125B ETHIOPIC SYLLABLE QHWAA
+125C ETHIOPIC SYLLABLE QHWEE
+125D ETHIOPIC SYLLABLE QHWE
+1260 ETHIOPIC SYLLABLE BA
+1261 ETHIOPIC SYLLABLE BU
+1262 ETHIOPIC SYLLABLE BI
+1263 ETHIOPIC SYLLABLE BAA
+1264 ETHIOPIC SYLLABLE BEE
+1265 ETHIOPIC SYLLABLE BE
+1266 ETHIOPIC SYLLABLE BO
+1267 ETHIOPIC SYLLABLE BWA
+1268 ETHIOPIC SYLLABLE VA
+1269 ETHIOPIC SYLLABLE VU
+126A ETHIOPIC SYLLABLE VI
+126B ETHIOPIC SYLLABLE VAA
+126C ETHIOPIC SYLLABLE VEE
+126D ETHIOPIC SYLLABLE VE
+126E ETHIOPIC SYLLABLE VO
+126F ETHIOPIC SYLLABLE VWA
+1270 ETHIOPIC SYLLABLE TA
+1271 ETHIOPIC SYLLABLE TU
+1272 ETHIOPIC SYLLABLE TI
+1273 ETHIOPIC SYLLABLE TAA
+1274 ETHIOPIC SYLLABLE TEE
+1275 ETHIOPIC SYLLABLE TE
+1276 ETHIOPIC SYLLABLE TO
+1277 ETHIOPIC SYLLABLE TWA
+1278 ETHIOPIC SYLLABLE CA
+1279 ETHIOPIC SYLLABLE CU
+127A ETHIOPIC SYLLABLE CI
+127B ETHIOPIC SYLLABLE CAA
+127C ETHIOPIC SYLLABLE CEE
+127D ETHIOPIC SYLLABLE CE
+127E ETHIOPIC SYLLABLE CO
+127F ETHIOPIC SYLLABLE CWA
+1280 ETHIOPIC SYLLABLE XA
+1281 ETHIOPIC SYLLABLE XU
+1282 ETHIOPIC SYLLABLE XI
+1283 ETHIOPIC SYLLABLE XAA
+1284 ETHIOPIC SYLLABLE XEE
+1285 ETHIOPIC SYLLABLE XE
+1286 ETHIOPIC SYLLABLE XO
+1287 ETHIOPIC SYLLABLE XOA
+1288 ETHIOPIC SYLLABLE XWA
+128A ETHIOPIC SYLLABLE XWI
+128B ETHIOPIC SYLLABLE XWAA
+128C ETHIOPIC SYLLABLE XWEE
+128D ETHIOPIC SYLLABLE XWE
+1290 ETHIOPIC SYLLABLE NA
+1291 ETHIOPIC SYLLABLE NU
+1292 ETHIOPIC SYLLABLE NI
+1293 ETHIOPIC SYLLABLE NAA
+1294 ETHIOPIC SYLLABLE NEE
+1295 ETHIOPIC SYLLABLE NE
+1296 ETHIOPIC SYLLABLE NO
+1297 ETHIOPIC SYLLABLE NWA
+1298 ETHIOPIC SYLLABLE NYA
+1299 ETHIOPIC SYLLABLE NYU
+129A ETHIOPIC SYLLABLE NYI
+129B ETHIOPIC SYLLABLE NYAA
+129C ETHIOPIC SYLLABLE NYEE
+129D ETHIOPIC SYLLABLE NYE
+129E ETHIOPIC SYLLABLE NYO
+129F ETHIOPIC SYLLABLE NYWA
+12A0 ETHIOPIC SYLLABLE GLOTTAL A
+12A1 ETHIOPIC SYLLABLE GLOTTAL U
+12A2 ETHIOPIC SYLLABLE GLOTTAL I
+12A3 ETHIOPIC SYLLABLE GLOTTAL AA
+12A4 ETHIOPIC SYLLABLE GLOTTAL EE
+12A5 ETHIOPIC SYLLABLE GLOTTAL E
+12A6 ETHIOPIC SYLLABLE GLOTTAL O
+12A7 ETHIOPIC SYLLABLE GLOTTAL WA
+12A8 ETHIOPIC SYLLABLE KA
+12A9 ETHIOPIC SYLLABLE KU
+12AA ETHIOPIC SYLLABLE KI
+12AB ETHIOPIC SYLLABLE KAA
+12AC ETHIOPIC SYLLABLE KEE
+12AD ETHIOPIC SYLLABLE KE
+12AE ETHIOPIC SYLLABLE KO
+12AF ETHIOPIC SYLLABLE KOA
+12B0 ETHIOPIC SYLLABLE KWA
+12B2 ETHIOPIC SYLLABLE KWI
+12B3 ETHIOPIC SYLLABLE KWAA
+12B4 ETHIOPIC SYLLABLE KWEE
+12B5 ETHIOPIC SYLLABLE KWE
+12B8 ETHIOPIC SYLLABLE KXA
+12B9 ETHIOPIC SYLLABLE KXU
+12BA ETHIOPIC SYLLABLE KXI
+12BB ETHIOPIC SYLLABLE KXAA
+12BC ETHIOPIC SYLLABLE KXEE
+12BD ETHIOPIC SYLLABLE KXE
+12BE ETHIOPIC SYLLABLE KXO
+12C0 ETHIOPIC SYLLABLE KXWA
+12C2 ETHIOPIC SYLLABLE KXWI
+12C3 ETHIOPIC SYLLABLE KXWAA
+12C4 ETHIOPIC SYLLABLE KXWEE
+12C5 ETHIOPIC SYLLABLE KXWE
+12C8 ETHIOPIC SYLLABLE WA
+12C9 ETHIOPIC SYLLABLE WU
+12CA ETHIOPIC SYLLABLE WI
+12CB ETHIOPIC SYLLABLE WAA
+12CC ETHIOPIC SYLLABLE WEE
+12CD ETHIOPIC SYLLABLE WE
+12CE ETHIOPIC SYLLABLE WO
+12CF ETHIOPIC SYLLABLE WOA
+12D0 ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1 ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2 ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3 ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4 ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5 ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6 ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8 ETHIOPIC SYLLABLE ZA
+12D9 ETHIOPIC SYLLABLE ZU
+12DA ETHIOPIC SYLLABLE ZI
+12DB ETHIOPIC SYLLABLE ZAA
+12DC ETHIOPIC SYLLABLE ZEE
+12DD ETHIOPIC SYLLABLE ZE
+12DE ETHIOPIC SYLLABLE ZO
+12DF ETHIOPIC SYLLABLE ZWA
+12E0 ETHIOPIC SYLLABLE ZHA
+12E1 ETHIOPIC SYLLABLE ZHU
+12E2 ETHIOPIC SYLLABLE ZHI
+12E3 ETHIOPIC SYLLABLE ZHAA
+12E4 ETHIOPIC SYLLABLE ZHEE
+12E5 ETHIOPIC SYLLABLE ZHE
+12E6 ETHIOPIC SYLLABLE ZHO
+12E7 ETHIOPIC SYLLABLE ZHWA
+12E8 ETHIOPIC SYLLABLE YA
+12E9 ETHIOPIC SYLLABLE YU
+12EA ETHIOPIC SYLLABLE YI
+12EB ETHIOPIC SYLLABLE YAA
+12EC ETHIOPIC SYLLABLE YEE
+12ED ETHIOPIC SYLLABLE YE
+12EE ETHIOPIC SYLLABLE YO
+12EF ETHIOPIC SYLLABLE YOA
+12F0 ETHIOPIC SYLLABLE DA
+12F1 ETHIOPIC SYLLABLE DU
+12F2 ETHIOPIC SYLLABLE DI
+12F3 ETHIOPIC SYLLABLE DAA
+12F4 ETHIOPIC SYLLABLE DEE
+12F5 ETHIOPIC SYLLABLE DE
+12F6 ETHIOPIC SYLLABLE DO
+12F7 ETHIOPIC SYLLABLE DWA
+12F8 ETHIOPIC SYLLABLE DDA
+12F9 ETHIOPIC SYLLABLE DDU
+12FA ETHIOPIC SYLLABLE DDI
+12FB ETHIOPIC SYLLABLE DDAA
+12FC ETHIOPIC SYLLABLE DDEE
+12FD ETHIOPIC SYLLABLE DDE
+12FE ETHIOPIC SYLLABLE DDO
+12FF ETHIOPIC SYLLABLE DDWA
+1300 ETHIOPIC SYLLABLE JA
+1301 ETHIOPIC SYLLABLE JU
+1302 ETHIOPIC SYLLABLE JI
+1303 ETHIOPIC SYLLABLE JAA
+1304 ETHIOPIC SYLLABLE JEE
+1305 ETHIOPIC SYLLABLE JE
+1306 ETHIOPIC SYLLABLE JO
+1307 ETHIOPIC SYLLABLE JWA
+1308 ETHIOPIC SYLLABLE GA
+1309 ETHIOPIC SYLLABLE GU
+130A ETHIOPIC SYLLABLE GI
+130B ETHIOPIC SYLLABLE GAA
+130C ETHIOPIC SYLLABLE GEE
+130D ETHIOPIC SYLLABLE GE
+130E ETHIOPIC SYLLABLE GO
+130F ETHIOPIC SYLLABLE GOA
+1310 ETHIOPIC SYLLABLE GWA
+1312 ETHIOPIC SYLLABLE GWI
+1313 ETHIOPIC SYLLABLE GWAA
+1314 ETHIOPIC SYLLABLE GWEE
+1315 ETHIOPIC SYLLABLE GWE
+1318 ETHIOPIC SYLLABLE GGA
+1319 ETHIOPIC SYLLABLE GGU
+131A ETHIOPIC SYLLABLE GGI
+131B ETHIOPIC SYLLABLE GGAA
+131C ETHIOPIC SYLLABLE GGEE
+131D ETHIOPIC SYLLABLE GGE
+131E ETHIOPIC SYLLABLE GGO
+131F ETHIOPIC SYLLABLE GGWAA
+1320 ETHIOPIC SYLLABLE THA
+1321 ETHIOPIC SYLLABLE THU
+1322 ETHIOPIC SYLLABLE THI
+1323 ETHIOPIC SYLLABLE THAA
+1324 ETHIOPIC SYLLABLE THEE
+1325 ETHIOPIC SYLLABLE THE
+1326 ETHIOPIC SYLLABLE THO
+1327 ETHIOPIC SYLLABLE THWA
+1328 ETHIOPIC SYLLABLE CHA
+1329 ETHIOPIC SYLLABLE CHU
+132A ETHIOPIC SYLLABLE CHI
+132B ETHIOPIC SYLLABLE CHAA
+132C ETHIOPIC SYLLABLE CHEE
+132D ETHIOPIC SYLLABLE CHE
+132E ETHIOPIC SYLLABLE CHO
+132F ETHIOPIC SYLLABLE CHWA
+1330 ETHIOPIC SYLLABLE PHA
+1331 ETHIOPIC SYLLABLE PHU
+1332 ETHIOPIC SYLLABLE PHI
+1333 ETHIOPIC SYLLABLE PHAA
+1334 ETHIOPIC SYLLABLE PHEE
+1335 ETHIOPIC SYLLABLE PHE
+1336 ETHIOPIC SYLLABLE PHO
+1337 ETHIOPIC SYLLABLE PHWA
+1338 ETHIOPIC SYLLABLE TSA
+1339 ETHIOPIC SYLLABLE TSU
+133A ETHIOPIC SYLLABLE TSI
+133B ETHIOPIC SYLLABLE TSAA
+133C ETHIOPIC SYLLABLE TSEE
+133D ETHIOPIC SYLLABLE TSE
+133E ETHIOPIC SYLLABLE TSO
+133F ETHIOPIC SYLLABLE TSWA
+1340 ETHIOPIC SYLLABLE TZA
+1341 ETHIOPIC SYLLABLE TZU
+1342 ETHIOPIC SYLLABLE TZI
+1343 ETHIOPIC SYLLABLE TZAA
+1344 ETHIOPIC SYLLABLE TZEE
+1345 ETHIOPIC SYLLABLE TZE
+1346 ETHIOPIC SYLLABLE TZO
+1347 ETHIOPIC SYLLABLE TZOA
+1348 ETHIOPIC SYLLABLE FA
+1349 ETHIOPIC SYLLABLE FU
+134A ETHIOPIC SYLLABLE FI
+134B ETHIOPIC SYLLABLE FAA
+134C ETHIOPIC SYLLABLE FEE
+134D ETHIOPIC SYLLABLE FE
+134E ETHIOPIC SYLLABLE FO
+134F ETHIOPIC SYLLABLE FWA
+1350 ETHIOPIC SYLLABLE PA
+1351 ETHIOPIC SYLLABLE PU
+1352 ETHIOPIC SYLLABLE PI
+1353 ETHIOPIC SYLLABLE PAA
+1354 ETHIOPIC SYLLABLE PEE
+1355 ETHIOPIC SYLLABLE PE
+1356 ETHIOPIC SYLLABLE PO
+1357 ETHIOPIC SYLLABLE PWA
+1358 ETHIOPIC SYLLABLE RYA
+1359 ETHIOPIC SYLLABLE MYA
+135A ETHIOPIC SYLLABLE FYA
+135F ETHIOPIC COMBINING GEMINATION MARK
+1360 ETHIOPIC SECTION MARK
+1361 ETHIOPIC WORDSPACE
+1362 ETHIOPIC FULL STOP
+1363 ETHIOPIC COMMA
+1364 ETHIOPIC SEMICOLON
+1365 ETHIOPIC COLON
+1366 ETHIOPIC PREFACE COLON
+1367 ETHIOPIC QUESTION MARK
+1368 ETHIOPIC PARAGRAPH SEPARATOR
+1369 ETHIOPIC DIGIT ONE
+136A ETHIOPIC DIGIT TWO
+136B ETHIOPIC DIGIT THREE
+136C ETHIOPIC DIGIT FOUR
+136D ETHIOPIC DIGIT FIVE
+136E ETHIOPIC DIGIT SIX
+136F ETHIOPIC DIGIT SEVEN
+1370 ETHIOPIC DIGIT EIGHT
+1371 ETHIOPIC DIGIT NINE
+1372 ETHIOPIC NUMBER TEN
+1373 ETHIOPIC NUMBER TWENTY
+1374 ETHIOPIC NUMBER THIRTY
+1375 ETHIOPIC NUMBER FORTY
+1376 ETHIOPIC NUMBER FIFTY
+1377 ETHIOPIC NUMBER SIXTY
+1378 ETHIOPIC NUMBER SEVENTY
+1379 ETHIOPIC NUMBER EIGHTY
+137A ETHIOPIC NUMBER NINETY
+137B ETHIOPIC NUMBER HUNDRED
+137C ETHIOPIC NUMBER TEN THOUSAND
+1380 ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381 ETHIOPIC SYLLABLE MWI
+1382 ETHIOPIC SYLLABLE MWEE
+1383 ETHIOPIC SYLLABLE MWE
+1384 ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385 ETHIOPIC SYLLABLE BWI
+1386 ETHIOPIC SYLLABLE BWEE
+1387 ETHIOPIC SYLLABLE BWE
+1388 ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389 ETHIOPIC SYLLABLE FWI
+138A ETHIOPIC SYLLABLE FWEE
+138B ETHIOPIC SYLLABLE FWE
+138C ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D ETHIOPIC SYLLABLE PWI
+138E ETHIOPIC SYLLABLE PWEE
+138F ETHIOPIC SYLLABLE PWE
+1390 ETHIOPIC TONAL MARK YIZET
+1391 ETHIOPIC TONAL MARK DERET
+1392 ETHIOPIC TONAL MARK RIKRIK
+1393 ETHIOPIC TONAL MARK SHORT RIKRIK
+1394 ETHIOPIC TONAL MARK DIFAT
+1395 ETHIOPIC TONAL MARK KENAT
+1396 ETHIOPIC TONAL MARK CHIRET
+1397 ETHIOPIC TONAL MARK HIDET
+1398 ETHIOPIC TONAL MARK DERET-HIDET
+1399 ETHIOPIC TONAL MARK KURT
+13A0 CHEROKEE LETTER A
+13A1 CHEROKEE LETTER E
+13A2 CHEROKEE LETTER I
+13A3 CHEROKEE LETTER O
+13A4 CHEROKEE LETTER U
+13A5 CHEROKEE LETTER V
+13A6 CHEROKEE LETTER GA
+13A7 CHEROKEE LETTER KA
+13A8 CHEROKEE LETTER GE
+13A9 CHEROKEE LETTER GI
+13AA CHEROKEE LETTER GO
+13AB CHEROKEE LETTER GU
+13AC CHEROKEE LETTER GV
+13AD CHEROKEE LETTER HA
+13AE CHEROKEE LETTER HE
+13AF CHEROKEE LETTER HI
+13B0 CHEROKEE LETTER HO
+13B1 CHEROKEE LETTER HU
+13B2 CHEROKEE LETTER HV
+13B3 CHEROKEE LETTER LA
+13B4 CHEROKEE LETTER LE
+13B5 CHEROKEE LETTER LI
+13B6 CHEROKEE LETTER LO
+13B7 CHEROKEE LETTER LU
+13B8 CHEROKEE LETTER LV
+13B9 CHEROKEE LETTER MA
+13BA CHEROKEE LETTER ME
+13BB CHEROKEE LETTER MI
+13BC CHEROKEE LETTER MO
+13BD CHEROKEE LETTER MU
+13BE CHEROKEE LETTER NA
+13BF CHEROKEE LETTER HNA
+13C0 CHEROKEE LETTER NAH
+13C1 CHEROKEE LETTER NE
+13C2 CHEROKEE LETTER NI
+13C3 CHEROKEE LETTER NO
+13C4 CHEROKEE LETTER NU
+13C5 CHEROKEE LETTER NV
+13C6 CHEROKEE LETTER QUA
+13C7 CHEROKEE LETTER QUE
+13C8 CHEROKEE LETTER QUI
+13C9 CHEROKEE LETTER QUO
+13CA CHEROKEE LETTER QUU
+13CB CHEROKEE LETTER QUV
+13CC CHEROKEE LETTER SA
+13CD CHEROKEE LETTER S
+13CE CHEROKEE LETTER SE
+13CF CHEROKEE LETTER SI
+13D0 CHEROKEE LETTER SO
+13D1 CHEROKEE LETTER SU
+13D2 CHEROKEE LETTER SV
+13D3 CHEROKEE LETTER DA
+13D4 CHEROKEE LETTER TA
+13D5 CHEROKEE LETTER DE
+13D6 CHEROKEE LETTER TE
+13D7 CHEROKEE LETTER DI
+13D8 CHEROKEE LETTER TI
+13D9 CHEROKEE LETTER DO
+13DA CHEROKEE LETTER DU
+13DB CHEROKEE LETTER DV
+13DC CHEROKEE LETTER DLA
+13DD CHEROKEE LETTER TLA
+13DE CHEROKEE LETTER TLE
+13DF CHEROKEE LETTER TLI
+13E0 CHEROKEE LETTER TLO
+13E1 CHEROKEE LETTER TLU
+13E2 CHEROKEE LETTER TLV
+13E3 CHEROKEE LETTER TSA
+13E4 CHEROKEE LETTER TSE
+13E5 CHEROKEE LETTER TSI
+13E6 CHEROKEE LETTER TSO
+13E7 CHEROKEE LETTER TSU
+13E8 CHEROKEE LETTER TSV
+13E9 CHEROKEE LETTER WA
+13EA CHEROKEE LETTER WE
+13EB CHEROKEE LETTER WI
+13EC CHEROKEE LETTER WO
+13ED CHEROKEE LETTER WU
+13EE CHEROKEE LETTER WV
+13EF CHEROKEE LETTER YA
+13F0 CHEROKEE LETTER YE
+13F1 CHEROKEE LETTER YI
+13F2 CHEROKEE LETTER YO
+13F3 CHEROKEE LETTER YU
+13F4 CHEROKEE LETTER YV
+1401 CANADIAN SYLLABICS E
+1402 CANADIAN SYLLABICS AAI
+1403 CANADIAN SYLLABICS I
+1404 CANADIAN SYLLABICS II
+1405 CANADIAN SYLLABICS O
+1406 CANADIAN SYLLABICS OO
+1407 CANADIAN SYLLABICS Y-CREE OO
+1408 CANADIAN SYLLABICS CARRIER EE
+1409 CANADIAN SYLLABICS CARRIER I
+140A CANADIAN SYLLABICS A
+140B CANADIAN SYLLABICS AA
+140C CANADIAN SYLLABICS WE
+140D CANADIAN SYLLABICS WEST-CREE WE
+140E CANADIAN SYLLABICS WI
+140F CANADIAN SYLLABICS WEST-CREE WI
+1410 CANADIAN SYLLABICS WII
+1411 CANADIAN SYLLABICS WEST-CREE WII
+1412 CANADIAN SYLLABICS WO
+1413 CANADIAN SYLLABICS WEST-CREE WO
+1414 CANADIAN SYLLABICS WOO
+1415 CANADIAN SYLLABICS WEST-CREE WOO
+1416 CANADIAN SYLLABICS NASKAPI WOO
+1417 CANADIAN SYLLABICS WA
+1418 CANADIAN SYLLABICS WEST-CREE WA
+1419 CANADIAN SYLLABICS WAA
+141A CANADIAN SYLLABICS WEST-CREE WAA
+141B CANADIAN SYLLABICS NASKAPI WAA
+141C CANADIAN SYLLABICS AI
+141D CANADIAN SYLLABICS Y-CREE W
+141E CANADIAN SYLLABICS GLOTTAL STOP
+141F CANADIAN SYLLABICS FINAL ACUTE
+1420 CANADIAN SYLLABICS FINAL GRAVE
+1421 CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+1422 CANADIAN SYLLABICS FINAL TOP HALF RING
+1423 CANADIAN SYLLABICS FINAL RIGHT HALF RING
+1424 CANADIAN SYLLABICS FINAL RING
+1425 CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+1426 CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+1427 CANADIAN SYLLABICS FINAL MIDDLE DOT
+1428 CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+1429 CANADIAN SYLLABICS FINAL PLUS
+142A CANADIAN SYLLABICS FINAL DOWN TACK
+142B CANADIAN SYLLABICS EN
+142C CANADIAN SYLLABICS IN
+142D CANADIAN SYLLABICS ON
+142E CANADIAN SYLLABICS AN
+142F CANADIAN SYLLABICS PE
+1430 CANADIAN SYLLABICS PAAI
+1431 CANADIAN SYLLABICS PI
+1432 CANADIAN SYLLABICS PII
+1433 CANADIAN SYLLABICS PO
+1434 CANADIAN SYLLABICS POO
+1435 CANADIAN SYLLABICS Y-CREE POO
+1436 CANADIAN SYLLABICS CARRIER HEE
+1437 CANADIAN SYLLABICS CARRIER HI
+1438 CANADIAN SYLLABICS PA
+1439 CANADIAN SYLLABICS PAA
+143A CANADIAN SYLLABICS PWE
+143B CANADIAN SYLLABICS WEST-CREE PWE
+143C CANADIAN SYLLABICS PWI
+143D CANADIAN SYLLABICS WEST-CREE PWI
+143E CANADIAN SYLLABICS PWII
+143F CANADIAN SYLLABICS WEST-CREE PWII
+1440 CANADIAN SYLLABICS PWO
+1441 CANADIAN SYLLABICS WEST-CREE PWO
+1442 CANADIAN SYLLABICS PWOO
+1443 CANADIAN SYLLABICS WEST-CREE PWOO
+1444 CANADIAN SYLLABICS PWA
+1445 CANADIAN SYLLABICS WEST-CREE PWA
+1446 CANADIAN SYLLABICS PWAA
+1447 CANADIAN SYLLABICS WEST-CREE PWAA
+1448 CANADIAN SYLLABICS Y-CREE PWAA
+1449 CANADIAN SYLLABICS P
+144A CANADIAN SYLLABICS WEST-CREE P
+144B CANADIAN SYLLABICS CARRIER H
+144C CANADIAN SYLLABICS TE
+144D CANADIAN SYLLABICS TAAI
+144E CANADIAN SYLLABICS TI
+144F CANADIAN SYLLABICS TII
+1450 CANADIAN SYLLABICS TO
+1451 CANADIAN SYLLABICS TOO
+1452 CANADIAN SYLLABICS Y-CREE TOO
+1453 CANADIAN SYLLABICS CARRIER DEE
+1454 CANADIAN SYLLABICS CARRIER DI
+1455 CANADIAN SYLLABICS TA
+1456 CANADIAN SYLLABICS TAA
+1457 CANADIAN SYLLABICS TWE
+1458 CANADIAN SYLLABICS WEST-CREE TWE
+1459 CANADIAN SYLLABICS TWI
+145A CANADIAN SYLLABICS WEST-CREE TWI
+145B CANADIAN SYLLABICS TWII
+145C CANADIAN SYLLABICS WEST-CREE TWII
+145D CANADIAN SYLLABICS TWO
+145E CANADIAN SYLLABICS WEST-CREE TWO
+145F CANADIAN SYLLABICS TWOO
+1460 CANADIAN SYLLABICS WEST-CREE TWOO
+1461 CANADIAN SYLLABICS TWA
+1462 CANADIAN SYLLABICS WEST-CREE TWA
+1463 CANADIAN SYLLABICS TWAA
+1464 CANADIAN SYLLABICS WEST-CREE TWAA
+1465 CANADIAN SYLLABICS NASKAPI TWAA
+1466 CANADIAN SYLLABICS T
+1467 CANADIAN SYLLABICS TTE
+1468 CANADIAN SYLLABICS TTI
+1469 CANADIAN SYLLABICS TTO
+146A CANADIAN SYLLABICS TTA
+146B CANADIAN SYLLABICS KE
+146C CANADIAN SYLLABICS KAAI
+146D CANADIAN SYLLABICS KI
+146E CANADIAN SYLLABICS KII
+146F CANADIAN SYLLABICS KO
+1470 CANADIAN SYLLABICS KOO
+1471 CANADIAN SYLLABICS Y-CREE KOO
+1472 CANADIAN SYLLABICS KA
+1473 CANADIAN SYLLABICS KAA
+1474 CANADIAN SYLLABICS KWE
+1475 CANADIAN SYLLABICS WEST-CREE KWE
+1476 CANADIAN SYLLABICS KWI
+1477 CANADIAN SYLLABICS WEST-CREE KWI
+1478 CANADIAN SYLLABICS KWII
+1479 CANADIAN SYLLABICS WEST-CREE KWII
+147A CANADIAN SYLLABICS KWO
+147B CANADIAN SYLLABICS WEST-CREE KWO
+147C CANADIAN SYLLABICS KWOO
+147D CANADIAN SYLLABICS WEST-CREE KWOO
+147E CANADIAN SYLLABICS KWA
+147F CANADIAN SYLLABICS WEST-CREE KWA
+1480 CANADIAN SYLLABICS KWAA
+1481 CANADIAN SYLLABICS WEST-CREE KWAA
+1482 CANADIAN SYLLABICS NASKAPI KWAA
+1483 CANADIAN SYLLABICS K
+1484 CANADIAN SYLLABICS KW
+1485 CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486 CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487 CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488 CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489 CANADIAN SYLLABICS CE
+148A CANADIAN SYLLABICS CAAI
+148B CANADIAN SYLLABICS CI
+148C CANADIAN SYLLABICS CII
+148D CANADIAN SYLLABICS CO
+148E CANADIAN SYLLABICS COO
+148F CANADIAN SYLLABICS Y-CREE COO
+1490 CANADIAN SYLLABICS CA
+1491 CANADIAN SYLLABICS CAA
+1492 CANADIAN SYLLABICS CWE
+1493 CANADIAN SYLLABICS WEST-CREE CWE
+1494 CANADIAN SYLLABICS CWI
+1495 CANADIAN SYLLABICS WEST-CREE CWI
+1496 CANADIAN SYLLABICS CWII
+1497 CANADIAN SYLLABICS WEST-CREE CWII
+1498 CANADIAN SYLLABICS CWO
+1499 CANADIAN SYLLABICS WEST-CREE CWO
+149A CANADIAN SYLLABICS CWOO
+149B CANADIAN SYLLABICS WEST-CREE CWOO
+149C CANADIAN SYLLABICS CWA
+149D CANADIAN SYLLABICS WEST-CREE CWA
+149E CANADIAN SYLLABICS CWAA
+149F CANADIAN SYLLABICS WEST-CREE CWAA
+14A0 CANADIAN SYLLABICS NASKAPI CWAA
+14A1 CANADIAN SYLLABICS C
+14A2 CANADIAN SYLLABICS SAYISI TH
+14A3 CANADIAN SYLLABICS ME
+14A4 CANADIAN SYLLABICS MAAI
+14A5 CANADIAN SYLLABICS MI
+14A6 CANADIAN SYLLABICS MII
+14A7 CANADIAN SYLLABICS MO
+14A8 CANADIAN SYLLABICS MOO
+14A9 CANADIAN SYLLABICS Y-CREE MOO
+14AA CANADIAN SYLLABICS MA
+14AB CANADIAN SYLLABICS MAA
+14AC CANADIAN SYLLABICS MWE
+14AD CANADIAN SYLLABICS WEST-CREE MWE
+14AE CANADIAN SYLLABICS MWI
+14AF CANADIAN SYLLABICS WEST-CREE MWI
+14B0 CANADIAN SYLLABICS MWII
+14B1 CANADIAN SYLLABICS WEST-CREE MWII
+14B2 CANADIAN SYLLABICS MWO
+14B3 CANADIAN SYLLABICS WEST-CREE MWO
+14B4 CANADIAN SYLLABICS MWOO
+14B5 CANADIAN SYLLABICS WEST-CREE MWOO
+14B6 CANADIAN SYLLABICS MWA
+14B7 CANADIAN SYLLABICS WEST-CREE MWA
+14B8 CANADIAN SYLLABICS MWAA
+14B9 CANADIAN SYLLABICS WEST-CREE MWAA
+14BA CANADIAN SYLLABICS NASKAPI MWAA
+14BB CANADIAN SYLLABICS M
+14BC CANADIAN SYLLABICS WEST-CREE M
+14BD CANADIAN SYLLABICS MH
+14BE CANADIAN SYLLABICS ATHAPASCAN M
+14BF CANADIAN SYLLABICS SAYISI M
+14C0 CANADIAN SYLLABICS NE
+14C1 CANADIAN SYLLABICS NAAI
+14C2 CANADIAN SYLLABICS NI
+14C3 CANADIAN SYLLABICS NII
+14C4 CANADIAN SYLLABICS NO
+14C5 CANADIAN SYLLABICS NOO
+14C6 CANADIAN SYLLABICS Y-CREE NOO
+14C7 CANADIAN SYLLABICS NA
+14C8 CANADIAN SYLLABICS NAA
+14C9 CANADIAN SYLLABICS NWE
+14CA CANADIAN SYLLABICS WEST-CREE NWE
+14CB CANADIAN SYLLABICS NWA
+14CC CANADIAN SYLLABICS WEST-CREE NWA
+14CD CANADIAN SYLLABICS NWAA
+14CE CANADIAN SYLLABICS WEST-CREE NWAA
+14CF CANADIAN SYLLABICS NASKAPI NWAA
+14D0 CANADIAN SYLLABICS N
+14D1 CANADIAN SYLLABICS CARRIER NG
+14D2 CANADIAN SYLLABICS NH
+14D3 CANADIAN SYLLABICS LE
+14D4 CANADIAN SYLLABICS LAAI
+14D5 CANADIAN SYLLABICS LI
+14D6 CANADIAN SYLLABICS LII
+14D7 CANADIAN SYLLABICS LO
+14D8 CANADIAN SYLLABICS LOO
+14D9 CANADIAN SYLLABICS Y-CREE LOO
+14DA CANADIAN SYLLABICS LA
+14DB CANADIAN SYLLABICS LAA
+14DC CANADIAN SYLLABICS LWE
+14DD CANADIAN SYLLABICS WEST-CREE LWE
+14DE CANADIAN SYLLABICS LWI
+14DF CANADIAN SYLLABICS WEST-CREE LWI
+14E0 CANADIAN SYLLABICS LWII
+14E1 CANADIAN SYLLABICS WEST-CREE LWII
+14E2 CANADIAN SYLLABICS LWO
+14E3 CANADIAN SYLLABICS WEST-CREE LWO
+14E4 CANADIAN SYLLABICS LWOO
+14E5 CANADIAN SYLLABICS WEST-CREE LWOO
+14E6 CANADIAN SYLLABICS LWA
+14E7 CANADIAN SYLLABICS WEST-CREE LWA
+14E8 CANADIAN SYLLABICS LWAA
+14E9 CANADIAN SYLLABICS WEST-CREE LWAA
+14EA CANADIAN SYLLABICS L
+14EB CANADIAN SYLLABICS WEST-CREE L
+14EC CANADIAN SYLLABICS MEDIAL L
+14ED CANADIAN SYLLABICS SE
+14EE CANADIAN SYLLABICS SAAI
+14EF CANADIAN SYLLABICS SI
+14F0 CANADIAN SYLLABICS SII
+14F1 CANADIAN SYLLABICS SO
+14F2 CANADIAN SYLLABICS SOO
+14F3 CANADIAN SYLLABICS Y-CREE SOO
+14F4 CANADIAN SYLLABICS SA
+14F5 CANADIAN SYLLABICS SAA
+14F6 CANADIAN SYLLABICS SWE
+14F7 CANADIAN SYLLABICS WEST-CREE SWE
+14F8 CANADIAN SYLLABICS SWI
+14F9 CANADIAN SYLLABICS WEST-CREE SWI
+14FA CANADIAN SYLLABICS SWII
+14FB CANADIAN SYLLABICS WEST-CREE SWII
+14FC CANADIAN SYLLABICS SWO
+14FD CANADIAN SYLLABICS WEST-CREE SWO
+14FE CANADIAN SYLLABICS SWOO
+14FF CANADIAN SYLLABICS WEST-CREE SWOO
+1500 CANADIAN SYLLABICS SWA
+1501 CANADIAN SYLLABICS WEST-CREE SWA
+1502 CANADIAN SYLLABICS SWAA
+1503 CANADIAN SYLLABICS WEST-CREE SWAA
+1504 CANADIAN SYLLABICS NASKAPI SWAA
+1505 CANADIAN SYLLABICS S
+1506 CANADIAN SYLLABICS ATHAPASCAN S
+1507 CANADIAN SYLLABICS SW
+1508 CANADIAN SYLLABICS BLACKFOOT S
+1509 CANADIAN SYLLABICS MOOSE-CREE SK
+150A CANADIAN SYLLABICS NASKAPI SKW
+150B CANADIAN SYLLABICS NASKAPI S-W
+150C CANADIAN SYLLABICS NASKAPI SPWA
+150D CANADIAN SYLLABICS NASKAPI STWA
+150E CANADIAN SYLLABICS NASKAPI SKWA
+150F CANADIAN SYLLABICS NASKAPI SCWA
+1510 CANADIAN SYLLABICS SHE
+1511 CANADIAN SYLLABICS SHI
+1512 CANADIAN SYLLABICS SHII
+1513 CANADIAN SYLLABICS SHO
+1514 CANADIAN SYLLABICS SHOO
+1515 CANADIAN SYLLABICS SHA
+1516 CANADIAN SYLLABICS SHAA
+1517 CANADIAN SYLLABICS SHWE
+1518 CANADIAN SYLLABICS WEST-CREE SHWE
+1519 CANADIAN SYLLABICS SHWI
+151A CANADIAN SYLLABICS WEST-CREE SHWI
+151B CANADIAN SYLLABICS SHWII
+151C CANADIAN SYLLABICS WEST-CREE SHWII
+151D CANADIAN SYLLABICS SHWO
+151E CANADIAN SYLLABICS WEST-CREE SHWO
+151F CANADIAN SYLLABICS SHWOO
+1520 CANADIAN SYLLABICS WEST-CREE SHWOO
+1521 CANADIAN SYLLABICS SHWA
+1522 CANADIAN SYLLABICS WEST-CREE SHWA
+1523 CANADIAN SYLLABICS SHWAA
+1524 CANADIAN SYLLABICS WEST-CREE SHWAA
+1525 CANADIAN SYLLABICS SH
+1526 CANADIAN SYLLABICS YE
+1527 CANADIAN SYLLABICS YAAI
+1528 CANADIAN SYLLABICS YI
+1529 CANADIAN SYLLABICS YII
+152A CANADIAN SYLLABICS YO
+152B CANADIAN SYLLABICS YOO
+152C CANADIAN SYLLABICS Y-CREE YOO
+152D CANADIAN SYLLABICS YA
+152E CANADIAN SYLLABICS YAA
+152F CANADIAN SYLLABICS YWE
+1530 CANADIAN SYLLABICS WEST-CREE YWE
+1531 CANADIAN SYLLABICS YWI
+1532 CANADIAN SYLLABICS WEST-CREE YWI
+1533 CANADIAN SYLLABICS YWII
+1534 CANADIAN SYLLABICS WEST-CREE YWII
+1535 CANADIAN SYLLABICS YWO
+1536 CANADIAN SYLLABICS WEST-CREE YWO
+1537 CANADIAN SYLLABICS YWOO
+1538 CANADIAN SYLLABICS WEST-CREE YWOO
+1539 CANADIAN SYLLABICS YWA
+153A CANADIAN SYLLABICS WEST-CREE YWA
+153B CANADIAN SYLLABICS YWAA
+153C CANADIAN SYLLABICS WEST-CREE YWAA
+153D CANADIAN SYLLABICS NASKAPI YWAA
+153E CANADIAN SYLLABICS Y
+153F CANADIAN SYLLABICS BIBLE-CREE Y
+1540 CANADIAN SYLLABICS WEST-CREE Y
+1541 CANADIAN SYLLABICS SAYISI YI
+1542 CANADIAN SYLLABICS RE
+1543 CANADIAN SYLLABICS R-CREE RE
+1544 CANADIAN SYLLABICS WEST-CREE LE
+1545 CANADIAN SYLLABICS RAAI
+1546 CANADIAN SYLLABICS RI
+1547 CANADIAN SYLLABICS RII
+1548 CANADIAN SYLLABICS RO
+1549 CANADIAN SYLLABICS ROO
+154A CANADIAN SYLLABICS WEST-CREE LO
+154B CANADIAN SYLLABICS RA
+154C CANADIAN SYLLABICS RAA
+154D CANADIAN SYLLABICS WEST-CREE LA
+154E CANADIAN SYLLABICS RWAA
+154F CANADIAN SYLLABICS WEST-CREE RWAA
+1550 CANADIAN SYLLABICS R
+1551 CANADIAN SYLLABICS WEST-CREE R
+1552 CANADIAN SYLLABICS MEDIAL R
+1553 CANADIAN SYLLABICS FE
+1554 CANADIAN SYLLABICS FAAI
+1555 CANADIAN SYLLABICS FI
+1556 CANADIAN SYLLABICS FII
+1557 CANADIAN SYLLABICS FO
+1558 CANADIAN SYLLABICS FOO
+1559 CANADIAN SYLLABICS FA
+155A CANADIAN SYLLABICS FAA
+155B CANADIAN SYLLABICS FWAA
+155C CANADIAN SYLLABICS WEST-CREE FWAA
+155D CANADIAN SYLLABICS F
+155E CANADIAN SYLLABICS THE
+155F CANADIAN SYLLABICS N-CREE THE
+1560 CANADIAN SYLLABICS THI
+1561 CANADIAN SYLLABICS N-CREE THI
+1562 CANADIAN SYLLABICS THII
+1563 CANADIAN SYLLABICS N-CREE THII
+1564 CANADIAN SYLLABICS THO
+1565 CANADIAN SYLLABICS THOO
+1566 CANADIAN SYLLABICS THA
+1567 CANADIAN SYLLABICS THAA
+1568 CANADIAN SYLLABICS THWAA
+1569 CANADIAN SYLLABICS WEST-CREE THWAA
+156A CANADIAN SYLLABICS TH
+156B CANADIAN SYLLABICS TTHE
+156C CANADIAN SYLLABICS TTHI
+156D CANADIAN SYLLABICS TTHO
+156E CANADIAN SYLLABICS TTHA
+156F CANADIAN SYLLABICS TTH
+1570 CANADIAN SYLLABICS TYE
+1571 CANADIAN SYLLABICS TYI
+1572 CANADIAN SYLLABICS TYO
+1573 CANADIAN SYLLABICS TYA
+1574 CANADIAN SYLLABICS NUNAVIK HE
+1575 CANADIAN SYLLABICS NUNAVIK HI
+1576 CANADIAN SYLLABICS NUNAVIK HII
+1577 CANADIAN SYLLABICS NUNAVIK HO
+1578 CANADIAN SYLLABICS NUNAVIK HOO
+1579 CANADIAN SYLLABICS NUNAVIK HA
+157A CANADIAN SYLLABICS NUNAVIK HAA
+157B CANADIAN SYLLABICS NUNAVIK H
+157C CANADIAN SYLLABICS NUNAVUT H
+157D CANADIAN SYLLABICS HK
+157E CANADIAN SYLLABICS QAAI
+157F CANADIAN SYLLABICS QI
+1580 CANADIAN SYLLABICS QII
+1581 CANADIAN SYLLABICS QO
+1582 CANADIAN SYLLABICS QOO
+1583 CANADIAN SYLLABICS QA
+1584 CANADIAN SYLLABICS QAA
+1585 CANADIAN SYLLABICS Q
+1586 CANADIAN SYLLABICS TLHE
+1587 CANADIAN SYLLABICS TLHI
+1588 CANADIAN SYLLABICS TLHO
+1589 CANADIAN SYLLABICS TLHA
+158A CANADIAN SYLLABICS WEST-CREE RE
+158B CANADIAN SYLLABICS WEST-CREE RI
+158C CANADIAN SYLLABICS WEST-CREE RO
+158D CANADIAN SYLLABICS WEST-CREE RA
+158E CANADIAN SYLLABICS NGAAI
+158F CANADIAN SYLLABICS NGI
+1590 CANADIAN SYLLABICS NGII
+1591 CANADIAN SYLLABICS NGO
+1592 CANADIAN SYLLABICS NGOO
+1593 CANADIAN SYLLABICS NGA
+1594 CANADIAN SYLLABICS NGAA
+1595 CANADIAN SYLLABICS NG
+1596 CANADIAN SYLLABICS NNG
+1597 CANADIAN SYLLABICS SAYISI SHE
+1598 CANADIAN SYLLABICS SAYISI SHI
+1599 CANADIAN SYLLABICS SAYISI SHO
+159A CANADIAN SYLLABICS SAYISI SHA
+159B CANADIAN SYLLABICS WOODS-CREE THE
+159C CANADIAN SYLLABICS WOODS-CREE THI
+159D CANADIAN SYLLABICS WOODS-CREE THO
+159E CANADIAN SYLLABICS WOODS-CREE THA
+159F CANADIAN SYLLABICS WOODS-CREE TH
+15A0 CANADIAN SYLLABICS LHI
+15A1 CANADIAN SYLLABICS LHII
+15A2 CANADIAN SYLLABICS LHO
+15A3 CANADIAN SYLLABICS LHOO
+15A4 CANADIAN SYLLABICS LHA
+15A5 CANADIAN SYLLABICS LHAA
+15A6 CANADIAN SYLLABICS LH
+15A7 CANADIAN SYLLABICS TH-CREE THE
+15A8 CANADIAN SYLLABICS TH-CREE THI
+15A9 CANADIAN SYLLABICS TH-CREE THII
+15AA CANADIAN SYLLABICS TH-CREE THO
+15AB CANADIAN SYLLABICS TH-CREE THOO
+15AC CANADIAN SYLLABICS TH-CREE THA
+15AD CANADIAN SYLLABICS TH-CREE THAA
+15AE CANADIAN SYLLABICS TH-CREE TH
+15AF CANADIAN SYLLABICS AIVILIK B
+15B0 CANADIAN SYLLABICS BLACKFOOT E
+15B1 CANADIAN SYLLABICS BLACKFOOT I
+15B2 CANADIAN SYLLABICS BLACKFOOT O
+15B3 CANADIAN SYLLABICS BLACKFOOT A
+15B4 CANADIAN SYLLABICS BLACKFOOT WE
+15B5 CANADIAN SYLLABICS BLACKFOOT WI
+15B6 CANADIAN SYLLABICS BLACKFOOT WO
+15B7 CANADIAN SYLLABICS BLACKFOOT WA
+15B8 CANADIAN SYLLABICS BLACKFOOT NE
+15B9 CANADIAN SYLLABICS BLACKFOOT NI
+15BA CANADIAN SYLLABICS BLACKFOOT NO
+15BB CANADIAN SYLLABICS BLACKFOOT NA
+15BC CANADIAN SYLLABICS BLACKFOOT KE
+15BD CANADIAN SYLLABICS BLACKFOOT KI
+15BE CANADIAN SYLLABICS BLACKFOOT KO
+15BF CANADIAN SYLLABICS BLACKFOOT KA
+15C0 CANADIAN SYLLABICS SAYISI HE
+15C1 CANADIAN SYLLABICS SAYISI HI
+15C2 CANADIAN SYLLABICS SAYISI HO
+15C3 CANADIAN SYLLABICS SAYISI HA
+15C4 CANADIAN SYLLABICS CARRIER GHU
+15C5 CANADIAN SYLLABICS CARRIER GHO
+15C6 CANADIAN SYLLABICS CARRIER GHE
+15C7 CANADIAN SYLLABICS CARRIER GHEE
+15C8 CANADIAN SYLLABICS CARRIER GHI
+15C9 CANADIAN SYLLABICS CARRIER GHA
+15CA CANADIAN SYLLABICS CARRIER RU
+15CB CANADIAN SYLLABICS CARRIER RO
+15CC CANADIAN SYLLABICS CARRIER RE
+15CD CANADIAN SYLLABICS CARRIER REE
+15CE CANADIAN SYLLABICS CARRIER RI
+15CF CANADIAN SYLLABICS CARRIER RA
+15D0 CANADIAN SYLLABICS CARRIER WU
+15D1 CANADIAN SYLLABICS CARRIER WO
+15D2 CANADIAN SYLLABICS CARRIER WE
+15D3 CANADIAN SYLLABICS CARRIER WEE
+15D4 CANADIAN SYLLABICS CARRIER WI
+15D5 CANADIAN SYLLABICS CARRIER WA
+15D6 CANADIAN SYLLABICS CARRIER HWU
+15D7 CANADIAN SYLLABICS CARRIER HWO
+15D8 CANADIAN SYLLABICS CARRIER HWE
+15D9 CANADIAN SYLLABICS CARRIER HWEE
+15DA CANADIAN SYLLABICS CARRIER HWI
+15DB CANADIAN SYLLABICS CARRIER HWA
+15DC CANADIAN SYLLABICS CARRIER THU
+15DD CANADIAN SYLLABICS CARRIER THO
+15DE CANADIAN SYLLABICS CARRIER THE
+15DF CANADIAN SYLLABICS CARRIER THEE
+15E0 CANADIAN SYLLABICS CARRIER THI
+15E1 CANADIAN SYLLABICS CARRIER THA
+15E2 CANADIAN SYLLABICS CARRIER TTU
+15E3 CANADIAN SYLLABICS CARRIER TTO
+15E4 CANADIAN SYLLABICS CARRIER TTE
+15E5 CANADIAN SYLLABICS CARRIER TTEE
+15E6 CANADIAN SYLLABICS CARRIER TTI
+15E7 CANADIAN SYLLABICS CARRIER TTA
+15E8 CANADIAN SYLLABICS CARRIER PU
+15E9 CANADIAN SYLLABICS CARRIER PO
+15EA CANADIAN SYLLABICS CARRIER PE
+15EB CANADIAN SYLLABICS CARRIER PEE
+15EC CANADIAN SYLLABICS CARRIER PI
+15ED CANADIAN SYLLABICS CARRIER PA
+15EE CANADIAN SYLLABICS CARRIER P
+15EF CANADIAN SYLLABICS CARRIER GU
+15F0 CANADIAN SYLLABICS CARRIER GO
+15F1 CANADIAN SYLLABICS CARRIER GE
+15F2 CANADIAN SYLLABICS CARRIER GEE
+15F3 CANADIAN SYLLABICS CARRIER GI
+15F4 CANADIAN SYLLABICS CARRIER GA
+15F5 CANADIAN SYLLABICS CARRIER KHU
+15F6 CANADIAN SYLLABICS CARRIER KHO
+15F7 CANADIAN SYLLABICS CARRIER KHE
+15F8 CANADIAN SYLLABICS CARRIER KHEE
+15F9 CANADIAN SYLLABICS CARRIER KHI
+15FA CANADIAN SYLLABICS CARRIER KHA
+15FB CANADIAN SYLLABICS CARRIER KKU
+15FC CANADIAN SYLLABICS CARRIER KKO
+15FD CANADIAN SYLLABICS CARRIER KKE
+15FE CANADIAN SYLLABICS CARRIER KKEE
+15FF CANADIAN SYLLABICS CARRIER KKI
+1600 CANADIAN SYLLABICS CARRIER KKA
+1601 CANADIAN SYLLABICS CARRIER KK
+1602 CANADIAN SYLLABICS CARRIER NU
+1603 CANADIAN SYLLABICS CARRIER NO
+1604 CANADIAN SYLLABICS CARRIER NE
+1605 CANADIAN SYLLABICS CARRIER NEE
+1606 CANADIAN SYLLABICS CARRIER NI
+1607 CANADIAN SYLLABICS CARRIER NA
+1608 CANADIAN SYLLABICS CARRIER MU
+1609 CANADIAN SYLLABICS CARRIER MO
+160A CANADIAN SYLLABICS CARRIER ME
+160B CANADIAN SYLLABICS CARRIER MEE
+160C CANADIAN SYLLABICS CARRIER MI
+160D CANADIAN SYLLABICS CARRIER MA
+160E CANADIAN SYLLABICS CARRIER YU
+160F CANADIAN SYLLABICS CARRIER YO
+1610 CANADIAN SYLLABICS CARRIER YE
+1611 CANADIAN SYLLABICS CARRIER YEE
+1612 CANADIAN SYLLABICS CARRIER YI
+1613 CANADIAN SYLLABICS CARRIER YA
+1614 CANADIAN SYLLABICS CARRIER JU
+1615 CANADIAN SYLLABICS SAYISI JU
+1616 CANADIAN SYLLABICS CARRIER JO
+1617 CANADIAN SYLLABICS CARRIER JE
+1618 CANADIAN SYLLABICS CARRIER JEE
+1619 CANADIAN SYLLABICS CARRIER JI
+161A CANADIAN SYLLABICS SAYISI JI
+161B CANADIAN SYLLABICS CARRIER JA
+161C CANADIAN SYLLABICS CARRIER JJU
+161D CANADIAN SYLLABICS CARRIER JJO
+161E CANADIAN SYLLABICS CARRIER JJE
+161F CANADIAN SYLLABICS CARRIER JJEE
+1620 CANADIAN SYLLABICS CARRIER JJI
+1621 CANADIAN SYLLABICS CARRIER JJA
+1622 CANADIAN SYLLABICS CARRIER LU
+1623 CANADIAN SYLLABICS CARRIER LO
+1624 CANADIAN SYLLABICS CARRIER LE
+1625 CANADIAN SYLLABICS CARRIER LEE
+1626 CANADIAN SYLLABICS CARRIER LI
+1627 CANADIAN SYLLABICS CARRIER LA
+1628 CANADIAN SYLLABICS CARRIER DLU
+1629 CANADIAN SYLLABICS CARRIER DLO
+162A CANADIAN SYLLABICS CARRIER DLE
+162B CANADIAN SYLLABICS CARRIER DLEE
+162C CANADIAN SYLLABICS CARRIER DLI
+162D CANADIAN SYLLABICS CARRIER DLA
+162E CANADIAN SYLLABICS CARRIER LHU
+162F CANADIAN SYLLABICS CARRIER LHO
+1630 CANADIAN SYLLABICS CARRIER LHE
+1631 CANADIAN SYLLABICS CARRIER LHEE
+1632 CANADIAN SYLLABICS CARRIER LHI
+1633 CANADIAN SYLLABICS CARRIER LHA
+1634 CANADIAN SYLLABICS CARRIER TLHU
+1635 CANADIAN SYLLABICS CARRIER TLHO
+1636 CANADIAN SYLLABICS CARRIER TLHE
+1637 CANADIAN SYLLABICS CARRIER TLHEE
+1638 CANADIAN SYLLABICS CARRIER TLHI
+1639 CANADIAN SYLLABICS CARRIER TLHA
+163A CANADIAN SYLLABICS CARRIER TLU
+163B CANADIAN SYLLABICS CARRIER TLO
+163C CANADIAN SYLLABICS CARRIER TLE
+163D CANADIAN SYLLABICS CARRIER TLEE
+163E CANADIAN SYLLABICS CARRIER TLI
+163F CANADIAN SYLLABICS CARRIER TLA
+1640 CANADIAN SYLLABICS CARRIER ZU
+1641 CANADIAN SYLLABICS CARRIER ZO
+1642 CANADIAN SYLLABICS CARRIER ZE
+1643 CANADIAN SYLLABICS CARRIER ZEE
+1644 CANADIAN SYLLABICS CARRIER ZI
+1645 CANADIAN SYLLABICS CARRIER ZA
+1646 CANADIAN SYLLABICS CARRIER Z
+1647 CANADIAN SYLLABICS CARRIER INITIAL Z
+1648 CANADIAN SYLLABICS CARRIER DZU
+1649 CANADIAN SYLLABICS CARRIER DZO
+164A CANADIAN SYLLABICS CARRIER DZE
+164B CANADIAN SYLLABICS CARRIER DZEE
+164C CANADIAN SYLLABICS CARRIER DZI
+164D CANADIAN SYLLABICS CARRIER DZA
+164E CANADIAN SYLLABICS CARRIER SU
+164F CANADIAN SYLLABICS CARRIER SO
+1650 CANADIAN SYLLABICS CARRIER SE
+1651 CANADIAN SYLLABICS CARRIER SEE
+1652 CANADIAN SYLLABICS CARRIER SI
+1653 CANADIAN SYLLABICS CARRIER SA
+1654 CANADIAN SYLLABICS CARRIER SHU
+1655 CANADIAN SYLLABICS CARRIER SHO
+1656 CANADIAN SYLLABICS CARRIER SHE
+1657 CANADIAN SYLLABICS CARRIER SHEE
+1658 CANADIAN SYLLABICS CARRIER SHI
+1659 CANADIAN SYLLABICS CARRIER SHA
+165A CANADIAN SYLLABICS CARRIER SH
+165B CANADIAN SYLLABICS CARRIER TSU
+165C CANADIAN SYLLABICS CARRIER TSO
+165D CANADIAN SYLLABICS CARRIER TSE
+165E CANADIAN SYLLABICS CARRIER TSEE
+165F CANADIAN SYLLABICS CARRIER TSI
+1660 CANADIAN SYLLABICS CARRIER TSA
+1661 CANADIAN SYLLABICS CARRIER CHU
+1662 CANADIAN SYLLABICS CARRIER CHO
+1663 CANADIAN SYLLABICS CARRIER CHE
+1664 CANADIAN SYLLABICS CARRIER CHEE
+1665 CANADIAN SYLLABICS CARRIER CHI
+1666 CANADIAN SYLLABICS CARRIER CHA
+1667 CANADIAN SYLLABICS CARRIER TTSU
+1668 CANADIAN SYLLABICS CARRIER TTSO
+1669 CANADIAN SYLLABICS CARRIER TTSE
+166A CANADIAN SYLLABICS CARRIER TTSEE
+166B CANADIAN SYLLABICS CARRIER TTSI
+166C CANADIAN SYLLABICS CARRIER TTSA
+166D CANADIAN SYLLABICS CHI SIGN
+166E CANADIAN SYLLABICS FULL STOP
+166F CANADIAN SYLLABICS QAI
+1670 CANADIAN SYLLABICS NGAI
+1671 CANADIAN SYLLABICS NNGI
+1672 CANADIAN SYLLABICS NNGII
+1673 CANADIAN SYLLABICS NNGO
+1674 CANADIAN SYLLABICS NNGOO
+1675 CANADIAN SYLLABICS NNGA
+1676 CANADIAN SYLLABICS NNGAA
+1680 OGHAM SPACE MARK
+1681 OGHAM LETTER BEITH
+1682 OGHAM LETTER LUIS
+1683 OGHAM LETTER FEARN
+1684 OGHAM LETTER SAIL
+1685 OGHAM LETTER NION
+1686 OGHAM LETTER UATH
+1687 OGHAM LETTER DAIR
+1688 OGHAM LETTER TINNE
+1689 OGHAM LETTER COLL
+168A OGHAM LETTER CEIRT
+168B OGHAM LETTER MUIN
+168C OGHAM LETTER GORT
+168D OGHAM LETTER NGEADAL
+168E OGHAM LETTER STRAIF
+168F OGHAM LETTER RUIS
+1690 OGHAM LETTER AILM
+1691 OGHAM LETTER ONN
+1692 OGHAM LETTER UR
+1693 OGHAM LETTER EADHADH
+1694 OGHAM LETTER IODHADH
+1695 OGHAM LETTER EABHADH
+1696 OGHAM LETTER OR
+1697 OGHAM LETTER UILLEANN
+1698 OGHAM LETTER IFIN
+1699 OGHAM LETTER EAMHANCHOLL
+169A OGHAM LETTER PEITH
+169B OGHAM FEATHER MARK
+169C OGHAM REVERSED FEATHER MARK
+16A0 RUNIC LETTER FEHU FEOH FE F
+16A1 RUNIC LETTER V
+16A2 RUNIC LETTER URUZ UR U
+16A3 RUNIC LETTER YR
+16A4 RUNIC LETTER Y
+16A5 RUNIC LETTER W
+16A6 RUNIC LETTER THURISAZ THURS THORN
+16A7 RUNIC LETTER ETH
+16A8 RUNIC LETTER ANSUZ A
+16A9 RUNIC LETTER OS O
+16AA RUNIC LETTER AC A
+16AB RUNIC LETTER AESC
+16AC RUNIC LETTER LONG-BRANCH-OSS O
+16AD RUNIC LETTER SHORT-TWIG-OSS O
+16AE RUNIC LETTER O
+16AF RUNIC LETTER OE
+16B0 RUNIC LETTER ON
+16B1 RUNIC LETTER RAIDO RAD REID R
+16B2 RUNIC LETTER KAUNA
+16B3 RUNIC LETTER CEN
+16B4 RUNIC LETTER KAUN K
+16B5 RUNIC LETTER G
+16B6 RUNIC LETTER ENG
+16B7 RUNIC LETTER GEBO GYFU G
+16B8 RUNIC LETTER GAR
+16B9 RUNIC LETTER WUNJO WYNN W
+16BA RUNIC LETTER HAGLAZ H
+16BB RUNIC LETTER HAEGL H
+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE RUNIC LETTER NAUDIZ NYD NAUD N
+16BF RUNIC LETTER SHORT-TWIG-NAUD N
+16C0 RUNIC LETTER DOTTED-N
+16C1 RUNIC LETTER ISAZ IS ISS I
+16C2 RUNIC LETTER E
+16C3 RUNIC LETTER JERAN J
+16C4 RUNIC LETTER GER
+16C5 RUNIC LETTER LONG-BRANCH-AR AE
+16C6 RUNIC LETTER SHORT-TWIG-AR A
+16C7 RUNIC LETTER IWAZ EOH
+16C8 RUNIC LETTER PERTHO PEORTH P
+16C9 RUNIC LETTER ALGIZ EOLHX
+16CA RUNIC LETTER SOWILO S
+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC RUNIC LETTER SHORT-TWIG-SOL S
+16CD RUNIC LETTER C
+16CE RUNIC LETTER Z
+16CF RUNIC LETTER TIWAZ TIR TYR T
+16D0 RUNIC LETTER SHORT-TWIG-TYR T
+16D1 RUNIC LETTER D
+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4 RUNIC LETTER DOTTED-P
+16D5 RUNIC LETTER OPEN-P
+16D6 RUNIC LETTER EHWAZ EH E
+16D7 RUNIC LETTER MANNAZ MAN M
+16D8 RUNIC LETTER LONG-BRANCH-MADR M
+16D9 RUNIC LETTER SHORT-TWIG-MADR M
+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB RUNIC LETTER DOTTED-L
+16DC RUNIC LETTER INGWAZ
+16DD RUNIC LETTER ING
+16DE RUNIC LETTER DAGAZ DAEG D
+16DF RUNIC LETTER OTHALAN ETHEL O
+16E0 RUNIC LETTER EAR
+16E1 RUNIC LETTER IOR
+16E2 RUNIC LETTER CWEORTH
+16E3 RUNIC LETTER CALC
+16E4 RUNIC LETTER CEALC
+16E5 RUNIC LETTER STAN
+16E6 RUNIC LETTER LONG-BRANCH-YR
+16E7 RUNIC LETTER SHORT-TWIG-YR
+16E8 RUNIC LETTER ICELANDIC-YR
+16E9 RUNIC LETTER Q
+16EA RUNIC LETTER X
+16EB RUNIC SINGLE PUNCTUATION
+16EC RUNIC MULTIPLE PUNCTUATION
+16ED RUNIC CROSS PUNCTUATION
+16EE RUNIC ARLAUG SYMBOL
+16EF RUNIC TVIMADUR SYMBOL
+16F0 RUNIC BELGTHOR SYMBOL
+1700 TAGALOG LETTER A
+1701 TAGALOG LETTER I
+1702 TAGALOG LETTER U
+1703 TAGALOG LETTER KA
+1704 TAGALOG LETTER GA
+1705 TAGALOG LETTER NGA
+1706 TAGALOG LETTER TA
+1707 TAGALOG LETTER DA
+1708 TAGALOG LETTER NA
+1709 TAGALOG LETTER PA
+170A TAGALOG LETTER BA
+170B TAGALOG LETTER MA
+170C TAGALOG LETTER YA
+170E TAGALOG LETTER LA
+170F TAGALOG LETTER WA
+1710 TAGALOG LETTER SA
+1711 TAGALOG LETTER HA
+1712 TAGALOG VOWEL SIGN I
+1713 TAGALOG VOWEL SIGN U
+1714 TAGALOG SIGN VIRAMA
+1720 HANUNOO LETTER A
+1721 HANUNOO LETTER I
+1722 HANUNOO LETTER U
+1723 HANUNOO LETTER KA
+1724 HANUNOO LETTER GA
+1725 HANUNOO LETTER NGA
+1726 HANUNOO LETTER TA
+1727 HANUNOO LETTER DA
+1728 HANUNOO LETTER NA
+1729 HANUNOO LETTER PA
+172A HANUNOO LETTER BA
+172B HANUNOO LETTER MA
+172C HANUNOO LETTER YA
+172D HANUNOO LETTER RA
+172E HANUNOO LETTER LA
+172F HANUNOO LETTER WA
+1730 HANUNOO LETTER SA
+1731 HANUNOO LETTER HA
+1732 HANUNOO VOWEL SIGN I
+1733 HANUNOO VOWEL SIGN U
+1734 HANUNOO SIGN PAMUDPOD
+1735 PHILIPPINE SINGLE PUNCTUATION
+1736 PHILIPPINE DOUBLE PUNCTUATION
+1740 BUHID LETTER A
+1741 BUHID LETTER I
+1742 BUHID LETTER U
+1743 BUHID LETTER KA
+1744 BUHID LETTER GA
+1745 BUHID LETTER NGA
+1746 BUHID LETTER TA
+1747 BUHID LETTER DA
+1748 BUHID LETTER NA
+1749 BUHID LETTER PA
+174A BUHID LETTER BA
+174B BUHID LETTER MA
+174C BUHID LETTER YA
+174D BUHID LETTER RA
+174E BUHID LETTER LA
+174F BUHID LETTER WA
+1750 BUHID LETTER SA
+1751 BUHID LETTER HA
+1752 BUHID VOWEL SIGN I
+1753 BUHID VOWEL SIGN U
+1760 TAGBANWA LETTER A
+1761 TAGBANWA LETTER I
+1762 TAGBANWA LETTER U
+1763 TAGBANWA LETTER KA
+1764 TAGBANWA LETTER GA
+1765 TAGBANWA LETTER NGA
+1766 TAGBANWA LETTER TA
+1767 TAGBANWA LETTER DA
+1768 TAGBANWA LETTER NA
+1769 TAGBANWA LETTER PA
+176A TAGBANWA LETTER BA
+176B TAGBANWA LETTER MA
+176C TAGBANWA LETTER YA
+176E TAGBANWA LETTER LA
+176F TAGBANWA LETTER WA
+1770 TAGBANWA LETTER SA
+1772 TAGBANWA VOWEL SIGN I
+1773 TAGBANWA VOWEL SIGN U
+1780 KHMER LETTER KA
+1781 KHMER LETTER KHA
+1782 KHMER LETTER KO
+1783 KHMER LETTER KHO
+1784 KHMER LETTER NGO
+1785 KHMER LETTER CA
+1786 KHMER LETTER CHA
+1787 KHMER LETTER CO
+1788 KHMER LETTER CHO
+1789 KHMER LETTER NYO
+178A KHMER LETTER DA
+178B KHMER LETTER TTHA
+178C KHMER LETTER DO
+178D KHMER LETTER TTHO
+178E KHMER LETTER NNO
+178F KHMER LETTER TA
+1790 KHMER LETTER THA
+1791 KHMER LETTER TO
+1792 KHMER LETTER THO
+1793 KHMER LETTER NO
+1794 KHMER LETTER BA
+1795 KHMER LETTER PHA
+1796 KHMER LETTER PO
+1797 KHMER LETTER PHO
+1798 KHMER LETTER MO
+1799 KHMER LETTER YO
+179A KHMER LETTER RO
+179B KHMER LETTER LO
+179C KHMER LETTER VO
+179D KHMER LETTER SHA
+179E KHMER LETTER SSO
+179F KHMER LETTER SA
+17A0 KHMER LETTER HA
+17A1 KHMER LETTER LA
+17A2 KHMER LETTER QA
+17A3 KHMER INDEPENDENT VOWEL QAQ
+17A4 KHMER INDEPENDENT VOWEL QAA
+17A5 KHMER INDEPENDENT VOWEL QI
+17A6 KHMER INDEPENDENT VOWEL QII
+17A7 KHMER INDEPENDENT VOWEL QU
+17A8 KHMER INDEPENDENT VOWEL QUK
+17A9 KHMER INDEPENDENT VOWEL QUU
+17AA KHMER INDEPENDENT VOWEL QUUV
+17AB KHMER INDEPENDENT VOWEL RY
+17AC KHMER INDEPENDENT VOWEL RYY
+17AD KHMER INDEPENDENT VOWEL LY
+17AE KHMER INDEPENDENT VOWEL LYY
+17AF KHMER INDEPENDENT VOWEL QE
+17B0 KHMER INDEPENDENT VOWEL QAI
+17B1 KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2 KHMER INDEPENDENT VOWEL QOO TYPE TWO
+17B3 KHMER INDEPENDENT VOWEL QAU
+17B4 KHMER VOWEL INHERENT AQ
+17B5 KHMER VOWEL INHERENT AA
+17B6 KHMER VOWEL SIGN AA
+17B7 KHMER VOWEL SIGN I
+17B8 KHMER VOWEL SIGN II
+17B9 KHMER VOWEL SIGN Y
+17BA KHMER VOWEL SIGN YY
+17BB KHMER VOWEL SIGN U
+17BC KHMER VOWEL SIGN UU
+17BD KHMER VOWEL SIGN UA
+17BE KHMER VOWEL SIGN OE
+17BF KHMER VOWEL SIGN YA
+17C0 KHMER VOWEL SIGN IE
+17C1 KHMER VOWEL SIGN E
+17C2 KHMER VOWEL SIGN AE
+17C3 KHMER VOWEL SIGN AI
+17C4 KHMER VOWEL SIGN OO
+17C5 KHMER VOWEL SIGN AU
+17C6 KHMER SIGN NIKAHIT
+17C7 KHMER SIGN REAHMUK
+17C8 KHMER SIGN YUUKALEAPINTU
+17C9 KHMER SIGN MUUSIKATOAN
+17CA KHMER SIGN TRIISAP
+17CB KHMER SIGN BANTOC
+17CC KHMER SIGN ROBAT
+17CD KHMER SIGN TOANDAKHIAT
+17CE KHMER SIGN KAKABAT
+17CF KHMER SIGN AHSDA
+17D0 KHMER SIGN SAMYOK SANNYA
+17D1 KHMER SIGN VIRIAM
+17D2 KHMER SIGN COENG
+17D3 KHMER SIGN BATHAMASAT
+17D4 KHMER SIGN KHAN
+17D5 KHMER SIGN BARIYOOSAN
+17D6 KHMER SIGN CAMNUC PII KUUH
+17D7 KHMER SIGN LEK TOO
+17D8 KHMER SIGN BEYYAL
+17D9 KHMER SIGN PHNAEK MUAN
+17DA KHMER SIGN KOOMUUT
+17DB KHMER CURRENCY SYMBOL RIEL
+17DC KHMER SIGN AVAKRAHASANYA
+17DD KHMER SIGN ATTHACAN
+17E0 KHMER DIGIT ZERO
+17E1 KHMER DIGIT ONE
+17E2 KHMER DIGIT TWO
+17E3 KHMER DIGIT THREE
+17E4 KHMER DIGIT FOUR
+17E5 KHMER DIGIT FIVE
+17E6 KHMER DIGIT SIX
+17E7 KHMER DIGIT SEVEN
+17E8 KHMER DIGIT EIGHT
+17E9 KHMER DIGIT NINE
+17F0 KHMER SYMBOL LEK ATTAK SON
+17F1 KHMER SYMBOL LEK ATTAK MUOY
+17F2 KHMER SYMBOL LEK ATTAK PII
+17F3 KHMER SYMBOL LEK ATTAK BEI
+17F4 KHMER SYMBOL LEK ATTAK BUON
+17F5 KHMER SYMBOL LEK ATTAK PRAM
+17F6 KHMER SYMBOL LEK ATTAK PRAM-MUOY
+17F7 KHMER SYMBOL LEK ATTAK PRAM-PII
+17F8 KHMER SYMBOL LEK ATTAK PRAM-BEI
+17F9 KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800 MONGOLIAN BIRGA
+1801 MONGOLIAN ELLIPSIS
+1802 MONGOLIAN COMMA
+1803 MONGOLIAN FULL STOP
+1804 MONGOLIAN COLON
+1805 MONGOLIAN FOUR DOTS
+1806 MONGOLIAN TODO SOFT HYPHEN
+1807 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808 MONGOLIAN MANCHU COMMA
+1809 MONGOLIAN MANCHU FULL STOP
+180A MONGOLIAN NIRUGU
+180B MONGOLIAN FREE VARIATION SELECTOR ONE
+180C MONGOLIAN FREE VARIATION SELECTOR TWO
+180D MONGOLIAN FREE VARIATION SELECTOR THREE
+180E MONGOLIAN VOWEL SEPARATOR
+1810 MONGOLIAN DIGIT ZERO
+1811 MONGOLIAN DIGIT ONE
+1812 MONGOLIAN DIGIT TWO
+1813 MONGOLIAN DIGIT THREE
+1814 MONGOLIAN DIGIT FOUR
+1815 MONGOLIAN DIGIT FIVE
+1816 MONGOLIAN DIGIT SIX
+1817 MONGOLIAN DIGIT SEVEN
+1818 MONGOLIAN DIGIT EIGHT
+1819 MONGOLIAN DIGIT NINE
+1820 MONGOLIAN LETTER A
+1821 MONGOLIAN LETTER E
+1822 MONGOLIAN LETTER I
+1823 MONGOLIAN LETTER O
+1824 MONGOLIAN LETTER U
+1825 MONGOLIAN LETTER OE
+1826 MONGOLIAN LETTER UE
+1827 MONGOLIAN LETTER EE
+1828 MONGOLIAN LETTER NA
+1829 MONGOLIAN LETTER ANG
+182A MONGOLIAN LETTER BA
+182B MONGOLIAN LETTER PA
+182C MONGOLIAN LETTER QA
+182D MONGOLIAN LETTER GA
+182E MONGOLIAN LETTER MA
+182F MONGOLIAN LETTER LA
+1830 MONGOLIAN LETTER SA
+1831 MONGOLIAN LETTER SHA
+1832 MONGOLIAN LETTER TA
+1833 MONGOLIAN LETTER DA
+1834 MONGOLIAN LETTER CHA
+1835 MONGOLIAN LETTER JA
+1836 MONGOLIAN LETTER YA
+1837 MONGOLIAN LETTER RA
+1838 MONGOLIAN LETTER WA
+1839 MONGOLIAN LETTER FA
+183A MONGOLIAN LETTER KA
+183B MONGOLIAN LETTER KHA
+183C MONGOLIAN LETTER TSA
+183D MONGOLIAN LETTER ZA
+183E MONGOLIAN LETTER HAA
+183F MONGOLIAN LETTER ZRA
+1840 MONGOLIAN LETTER LHA
+1841 MONGOLIAN LETTER ZHI
+1842 MONGOLIAN LETTER CHI
+1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844 MONGOLIAN LETTER TODO E
+1845 MONGOLIAN LETTER TODO I
+1846 MONGOLIAN LETTER TODO O
+1847 MONGOLIAN LETTER TODO U
+1848 MONGOLIAN LETTER TODO OE
+1849 MONGOLIAN LETTER TODO UE
+184A MONGOLIAN LETTER TODO ANG
+184B MONGOLIAN LETTER TODO BA
+184C MONGOLIAN LETTER TODO PA
+184D MONGOLIAN LETTER TODO QA
+184E MONGOLIAN LETTER TODO GA
+184F MONGOLIAN LETTER TODO MA
+1850 MONGOLIAN LETTER TODO TA
+1851 MONGOLIAN LETTER TODO DA
+1852 MONGOLIAN LETTER TODO CHA
+1853 MONGOLIAN LETTER TODO JA
+1854 MONGOLIAN LETTER TODO TSA
+1855 MONGOLIAN LETTER TODO YA
+1856 MONGOLIAN LETTER TODO WA
+1857 MONGOLIAN LETTER TODO KA
+1858 MONGOLIAN LETTER TODO GAA
+1859 MONGOLIAN LETTER TODO HAA
+185A MONGOLIAN LETTER TODO JIA
+185B MONGOLIAN LETTER TODO NIA
+185C MONGOLIAN LETTER TODO DZA
+185D MONGOLIAN LETTER SIBE E
+185E MONGOLIAN LETTER SIBE I
+185F MONGOLIAN LETTER SIBE IY
+1860 MONGOLIAN LETTER SIBE UE
+1861 MONGOLIAN LETTER SIBE U
+1862 MONGOLIAN LETTER SIBE ANG
+1863 MONGOLIAN LETTER SIBE KA
+1864 MONGOLIAN LETTER SIBE GA
+1865 MONGOLIAN LETTER SIBE HA
+1866 MONGOLIAN LETTER SIBE PA
+1867 MONGOLIAN LETTER SIBE SHA
+1868 MONGOLIAN LETTER SIBE TA
+1869 MONGOLIAN LETTER SIBE DA
+186A MONGOLIAN LETTER SIBE JA
+186B MONGOLIAN LETTER SIBE FA
+186C MONGOLIAN LETTER SIBE GAA
+186D MONGOLIAN LETTER SIBE HAA
+186E MONGOLIAN LETTER SIBE TSA
+186F MONGOLIAN LETTER SIBE ZA
+1870 MONGOLIAN LETTER SIBE RAA
+1871 MONGOLIAN LETTER SIBE CHA
+1872 MONGOLIAN LETTER SIBE ZHA
+1873 MONGOLIAN LETTER MANCHU I
+1874 MONGOLIAN LETTER MANCHU KA
+1875 MONGOLIAN LETTER MANCHU RA
+1876 MONGOLIAN LETTER MANCHU FA
+1877 MONGOLIAN LETTER MANCHU ZHA
+1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
+1882 MONGOLIAN LETTER ALI GALI DAMARU
+1883 MONGOLIAN LETTER ALI GALI UBADAMA
+1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885 MONGOLIAN LETTER ALI GALI BALUDA
+1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887 MONGOLIAN LETTER ALI GALI A
+1888 MONGOLIAN LETTER ALI GALI I
+1889 MONGOLIAN LETTER ALI GALI KA
+188A MONGOLIAN LETTER ALI GALI NGA
+188B MONGOLIAN LETTER ALI GALI CA
+188C MONGOLIAN LETTER ALI GALI TTA
+188D MONGOLIAN LETTER ALI GALI TTHA
+188E MONGOLIAN LETTER ALI GALI DDA
+188F MONGOLIAN LETTER ALI GALI NNA
+1890 MONGOLIAN LETTER ALI GALI TA
+1891 MONGOLIAN LETTER ALI GALI DA
+1892 MONGOLIAN LETTER ALI GALI PA
+1893 MONGOLIAN LETTER ALI GALI PHA
+1894 MONGOLIAN LETTER ALI GALI SSA
+1895 MONGOLIAN LETTER ALI GALI ZHA
+1896 MONGOLIAN LETTER ALI GALI ZA
+1897 MONGOLIAN LETTER ALI GALI AH
+1898 MONGOLIAN LETTER TODO ALI GALI TA
+1899 MONGOLIAN LETTER TODO ALI GALI ZHA
+189A MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C MONGOLIAN LETTER MANCHU ALI GALI CA
+189D MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0 MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6 MONGOLIAN LETTER ALI GALI HALF U
+18A7 MONGOLIAN LETTER ALI GALI HALF YA
+18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 MONGOLIAN LETTER ALI GALI DAGALGA
+1900 LIMBU VOWEL-CARRIER LETTER
+1901 LIMBU LETTER KA
+1902 LIMBU LETTER KHA
+1903 LIMBU LETTER GA
+1904 LIMBU LETTER GHA
+1905 LIMBU LETTER NGA
+1906 LIMBU LETTER CA
+1907 LIMBU LETTER CHA
+1908 LIMBU LETTER JA
+1909 LIMBU LETTER JHA
+190A LIMBU LETTER YAN
+190B LIMBU LETTER TA
+190C LIMBU LETTER THA
+190D LIMBU LETTER DA
+190E LIMBU LETTER DHA
+190F LIMBU LETTER NA
+1910 LIMBU LETTER PA
+1911 LIMBU LETTER PHA
+1912 LIMBU LETTER BA
+1913 LIMBU LETTER BHA
+1914 LIMBU LETTER MA
+1915 LIMBU LETTER YA
+1916 LIMBU LETTER RA
+1917 LIMBU LETTER LA
+1918 LIMBU LETTER WA
+1919 LIMBU LETTER SHA
+191A LIMBU LETTER SSA
+191B LIMBU LETTER SA
+191C LIMBU LETTER HA
+1920 LIMBU VOWEL SIGN A
+1921 LIMBU VOWEL SIGN I
+1922 LIMBU VOWEL SIGN U
+1923 LIMBU VOWEL SIGN EE
+1924 LIMBU VOWEL SIGN AI
+1925 LIMBU VOWEL SIGN OO
+1926 LIMBU VOWEL SIGN AU
+1927 LIMBU VOWEL SIGN E
+1928 LIMBU VOWEL SIGN O
+1929 LIMBU SUBJOINED LETTER YA
+192A LIMBU SUBJOINED LETTER RA
+192B LIMBU SUBJOINED LETTER WA
+1930 LIMBU SMALL LETTER KA
+1931 LIMBU SMALL LETTER NGA
+1932 LIMBU SMALL LETTER ANUSVARA
+1933 LIMBU SMALL LETTER TA
+1934 LIMBU SMALL LETTER NA
+1935 LIMBU SMALL LETTER PA
+1936 LIMBU SMALL LETTER MA
+1937 LIMBU SMALL LETTER RA
+1938 LIMBU SMALL LETTER LA
+1939 LIMBU SIGN MUKPHRENG
+193A LIMBU SIGN KEMPHRENG
+193B LIMBU SIGN SA-I
+1940 LIMBU SIGN LOO
+1944 LIMBU EXCLAMATION MARK
+1945 LIMBU QUESTION MARK
+1946 LIMBU DIGIT ZERO
+1947 LIMBU DIGIT ONE
+1948 LIMBU DIGIT TWO
+1949 LIMBU DIGIT THREE
+194A LIMBU DIGIT FOUR
+194B LIMBU DIGIT FIVE
+194C LIMBU DIGIT SIX
+194D LIMBU DIGIT SEVEN
+194E LIMBU DIGIT EIGHT
+194F LIMBU DIGIT NINE
+1950 TAI LE LETTER KA
+1951 TAI LE LETTER XA
+1952 TAI LE LETTER NGA
+1953 TAI LE LETTER TSA
+1954 TAI LE LETTER SA
+1955 TAI LE LETTER YA
+1956 TAI LE LETTER TA
+1957 TAI LE LETTER THA
+1958 TAI LE LETTER LA
+1959 TAI LE LETTER PA
+195A TAI LE LETTER PHA
+195B TAI LE LETTER MA
+195C TAI LE LETTER FA
+195D TAI LE LETTER VA
+195E TAI LE LETTER HA
+195F TAI LE LETTER QA
+1960 TAI LE LETTER KHA
+1961 TAI LE LETTER TSHA
+1962 TAI LE LETTER NA
+1963 TAI LE LETTER A
+1964 TAI LE LETTER I
+1965 TAI LE LETTER EE
+1966 TAI LE LETTER EH
+1967 TAI LE LETTER U
+1968 TAI LE LETTER OO
+1969 TAI LE LETTER O
+196A TAI LE LETTER UE
+196B TAI LE LETTER E
+196C TAI LE LETTER AUE
+196D TAI LE LETTER AI
+1970 TAI LE LETTER TONE-2
+1971 TAI LE LETTER TONE-3
+1972 TAI LE LETTER TONE-4
+1973 TAI LE LETTER TONE-5
+1974 TAI LE LETTER TONE-6
+1980 NEW TAI LUE LETTER HIGH QA
+1981 NEW TAI LUE LETTER LOW QA
+1982 NEW TAI LUE LETTER HIGH KA
+1983 NEW TAI LUE LETTER HIGH XA
+1984 NEW TAI LUE LETTER HIGH NGA
+1985 NEW TAI LUE LETTER LOW KA
+1986 NEW TAI LUE LETTER LOW XA
+1987 NEW TAI LUE LETTER LOW NGA
+1988 NEW TAI LUE LETTER HIGH TSA
+1989 NEW TAI LUE LETTER HIGH SA
+198A NEW TAI LUE LETTER HIGH YA
+198B NEW TAI LUE LETTER LOW TSA
+198C NEW TAI LUE LETTER LOW SA
+198D NEW TAI LUE LETTER LOW YA
+198E NEW TAI LUE LETTER HIGH TA
+198F NEW TAI LUE LETTER HIGH THA
+1990 NEW TAI LUE LETTER HIGH NA
+1991 NEW TAI LUE LETTER LOW TA
+1992 NEW TAI LUE LETTER LOW THA
+1993 NEW TAI LUE LETTER LOW NA
+1994 NEW TAI LUE LETTER HIGH PA
+1995 NEW TAI LUE LETTER HIGH PHA
+1996 NEW TAI LUE LETTER HIGH MA
+1997 NEW TAI LUE LETTER LOW PA
+1998 NEW TAI LUE LETTER LOW PHA
+1999 NEW TAI LUE LETTER LOW MA
+199A NEW TAI LUE LETTER HIGH FA
+199B NEW TAI LUE LETTER HIGH VA
+199C NEW TAI LUE LETTER HIGH LA
+199D NEW TAI LUE LETTER LOW FA
+199E NEW TAI LUE LETTER LOW VA
+199F NEW TAI LUE LETTER LOW LA
+19A0 NEW TAI LUE LETTER HIGH HA
+19A1 NEW TAI LUE LETTER HIGH DA
+19A2 NEW TAI LUE LETTER HIGH BA
+19A3 NEW TAI LUE LETTER LOW HA
+19A4 NEW TAI LUE LETTER LOW DA
+19A5 NEW TAI LUE LETTER LOW BA
+19A6 NEW TAI LUE LETTER HIGH KVA
+19A7 NEW TAI LUE LETTER HIGH XVA
+19A8 NEW TAI LUE LETTER LOW KVA
+19A9 NEW TAI LUE LETTER LOW XVA
+19B0 NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1 NEW TAI LUE VOWEL SIGN AA
+19B2 NEW TAI LUE VOWEL SIGN II
+19B3 NEW TAI LUE VOWEL SIGN U
+19B4 NEW TAI LUE VOWEL SIGN UU
+19B5 NEW TAI LUE VOWEL SIGN E
+19B6 NEW TAI LUE VOWEL SIGN AE
+19B7 NEW TAI LUE VOWEL SIGN O
+19B8 NEW TAI LUE VOWEL SIGN OA
+19B9 NEW TAI LUE VOWEL SIGN UE
+19BA NEW TAI LUE VOWEL SIGN AY
+19BB NEW TAI LUE VOWEL SIGN AAY
+19BC NEW TAI LUE VOWEL SIGN UY
+19BD NEW TAI LUE VOWEL SIGN OY
+19BE NEW TAI LUE VOWEL SIGN OAY
+19BF NEW TAI LUE VOWEL SIGN UEY
+19C0 NEW TAI LUE VOWEL SIGN IY
+19C1 NEW TAI LUE LETTER FINAL V
+19C2 NEW TAI LUE LETTER FINAL NG
+19C3 NEW TAI LUE LETTER FINAL N
+19C4 NEW TAI LUE LETTER FINAL M
+19C5 NEW TAI LUE LETTER FINAL K
+19C6 NEW TAI LUE LETTER FINAL D
+19C7 NEW TAI LUE LETTER FINAL B
+19C8 NEW TAI LUE TONE MARK-1
+19C9 NEW TAI LUE TONE MARK-2
+19D0 NEW TAI LUE DIGIT ZERO
+19D1 NEW TAI LUE DIGIT ONE
+19D2 NEW TAI LUE DIGIT TWO
+19D3 NEW TAI LUE DIGIT THREE
+19D4 NEW TAI LUE DIGIT FOUR
+19D5 NEW TAI LUE DIGIT FIVE
+19D6 NEW TAI LUE DIGIT SIX
+19D7 NEW TAI LUE DIGIT SEVEN
+19D8 NEW TAI LUE DIGIT EIGHT
+19D9 NEW TAI LUE DIGIT NINE
+19DE NEW TAI LUE SIGN LAE
+19DF NEW TAI LUE SIGN LAEV
+19E0 KHMER SYMBOL PATHAMASAT
+19E1 KHMER SYMBOL MUOY KOET
+19E2 KHMER SYMBOL PII KOET
+19E3 KHMER SYMBOL BEI KOET
+19E4 KHMER SYMBOL BUON KOET
+19E5 KHMER SYMBOL PRAM KOET
+19E6 KHMER SYMBOL PRAM-MUOY KOET
+19E7 KHMER SYMBOL PRAM-PII KOET
+19E8 KHMER SYMBOL PRAM-BEI KOET
+19E9 KHMER SYMBOL PRAM-BUON KOET
+19EA KHMER SYMBOL DAP KOET
+19EB KHMER SYMBOL DAP-MUOY KOET
+19EC KHMER SYMBOL DAP-PII KOET
+19ED KHMER SYMBOL DAP-BEI KOET
+19EE KHMER SYMBOL DAP-BUON KOET
+19EF KHMER SYMBOL DAP-PRAM KOET
+19F0 KHMER SYMBOL TUTEYASAT
+19F1 KHMER SYMBOL MUOY ROC
+19F2 KHMER SYMBOL PII ROC
+19F3 KHMER SYMBOL BEI ROC
+19F4 KHMER SYMBOL BUON ROC
+19F5 KHMER SYMBOL PRAM ROC
+19F6 KHMER SYMBOL PRAM-MUOY ROC
+19F7 KHMER SYMBOL PRAM-PII ROC
+19F8 KHMER SYMBOL PRAM-BEI ROC
+19F9 KHMER SYMBOL PRAM-BUON ROC
+19FA KHMER SYMBOL DAP ROC
+19FB KHMER SYMBOL DAP-MUOY ROC
+19FC KHMER SYMBOL DAP-PII ROC
+19FD KHMER SYMBOL DAP-BEI ROC
+19FE KHMER SYMBOL DAP-BUON ROC
+19FF KHMER SYMBOL DAP-PRAM ROC
+1A00 BUGINESE LETTER KA
+1A01 BUGINESE LETTER GA
+1A02 BUGINESE LETTER NGA
+1A03 BUGINESE LETTER NGKA
+1A04 BUGINESE LETTER PA
+1A05 BUGINESE LETTER BA
+1A06 BUGINESE LETTER MA
+1A07 BUGINESE LETTER MPA
+1A08 BUGINESE LETTER TA
+1A09 BUGINESE LETTER DA
+1A0A BUGINESE LETTER NA
+1A0B BUGINESE LETTER NRA
+1A0C BUGINESE LETTER CA
+1A0D BUGINESE LETTER JA
+1A0E BUGINESE LETTER NYA
+1A0F BUGINESE LETTER NYCA
+1A10 BUGINESE LETTER YA
+1A11 BUGINESE LETTER RA
+1A12 BUGINESE LETTER LA
+1A13 BUGINESE LETTER VA
+1A14 BUGINESE LETTER SA
+1A15 BUGINESE LETTER A
+1A16 BUGINESE LETTER HA
+1A17 BUGINESE VOWEL SIGN I
+1A18 BUGINESE VOWEL SIGN U
+1A19 BUGINESE VOWEL SIGN E
+1A1A BUGINESE VOWEL SIGN O
+1A1B BUGINESE VOWEL SIGN AE
+1A1E BUGINESE PALLAWA
+1A1F BUGINESE END OF SECTION
+1D00 LATIN LETTER SMALL CAPITAL A
+1D01 LATIN LETTER SMALL CAPITAL AE
+1D02 LATIN SMALL LETTER TURNED AE
+1D03 LATIN LETTER SMALL CAPITAL BARRED B
+1D04 LATIN LETTER SMALL CAPITAL C
+1D05 LATIN LETTER SMALL CAPITAL D
+1D06 LATIN LETTER SMALL CAPITAL ETH
+1D07 LATIN LETTER SMALL CAPITAL E
+1D08 LATIN SMALL LETTER TURNED OPEN E
+1D09 LATIN SMALL LETTER TURNED I
+1D0A LATIN LETTER SMALL CAPITAL J
+1D0B LATIN LETTER SMALL CAPITAL K
+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE
+1D0D LATIN LETTER SMALL CAPITAL M
+1D0E LATIN LETTER SMALL CAPITAL REVERSED N
+1D0F LATIN LETTER SMALL CAPITAL O
+1D10 LATIN LETTER SMALL CAPITAL OPEN O
+1D11 LATIN SMALL LETTER SIDEWAYS O
+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O
+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+1D14 LATIN SMALL LETTER TURNED OE
+1D15 LATIN LETTER SMALL CAPITAL OU
+1D16 LATIN SMALL LETTER TOP HALF O
+1D17 LATIN SMALL LETTER BOTTOM HALF O
+1D18 LATIN LETTER SMALL CAPITAL P
+1D19 LATIN LETTER SMALL CAPITAL REVERSED R
+1D1A LATIN LETTER SMALL CAPITAL TURNED R
+1D1B LATIN LETTER SMALL CAPITAL T
+1D1C LATIN LETTER SMALL CAPITAL U
+1D1D LATIN SMALL LETTER SIDEWAYS U
+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M
+1D20 LATIN LETTER SMALL CAPITAL V
+1D21 LATIN LETTER SMALL CAPITAL W
+1D22 LATIN LETTER SMALL CAPITAL Z
+1D23 LATIN LETTER SMALL CAPITAL EZH
+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25 LATIN LETTER AIN
+1D26 GREEK LETTER SMALL CAPITAL GAMMA
+1D27 GREEK LETTER SMALL CAPITAL LAMDA
+1D28 GREEK LETTER SMALL CAPITAL PI
+1D29 GREEK LETTER SMALL CAPITAL RHO
+1D2A GREEK LETTER SMALL CAPITAL PSI
+1D2B CYRILLIC LETTER SMALL CAPITAL EL
+1D2C MODIFIER LETTER CAPITAL A
+1D2D MODIFIER LETTER CAPITAL AE
+1D2E MODIFIER LETTER CAPITAL B
+1D2F MODIFIER LETTER CAPITAL BARRED B
+1D30 MODIFIER LETTER CAPITAL D
+1D31 MODIFIER LETTER CAPITAL E
+1D32 MODIFIER LETTER CAPITAL REVERSED E
+1D33 MODIFIER LETTER CAPITAL G
+1D34 MODIFIER LETTER CAPITAL H
+1D35 MODIFIER LETTER CAPITAL I
+1D36 MODIFIER LETTER CAPITAL J
+1D37 MODIFIER LETTER CAPITAL K
+1D38 MODIFIER LETTER CAPITAL L
+1D39 MODIFIER LETTER CAPITAL M
+1D3A MODIFIER LETTER CAPITAL N
+1D3B MODIFIER LETTER CAPITAL REVERSED N
+1D3C MODIFIER LETTER CAPITAL O
+1D3D MODIFIER LETTER CAPITAL OU
+1D3E MODIFIER LETTER CAPITAL P
+1D3F MODIFIER LETTER CAPITAL R
+1D40 MODIFIER LETTER CAPITAL T
+1D41 MODIFIER LETTER CAPITAL U
+1D42 MODIFIER LETTER CAPITAL W
+1D43 MODIFIER LETTER SMALL A
+1D44 MODIFIER LETTER SMALL TURNED A
+1D45 MODIFIER LETTER SMALL ALPHA
+1D46 MODIFIER LETTER SMALL TURNED AE
+1D47 MODIFIER LETTER SMALL B
+1D48 MODIFIER LETTER SMALL D
+1D49 MODIFIER LETTER SMALL E
+1D4A MODIFIER LETTER SMALL SCHWA
+1D4B MODIFIER LETTER SMALL OPEN E
+1D4C MODIFIER LETTER SMALL TURNED OPEN E
+1D4D MODIFIER LETTER SMALL G
+1D4E MODIFIER LETTER SMALL TURNED I
+1D4F MODIFIER LETTER SMALL K
+1D50 MODIFIER LETTER SMALL M
+1D51 MODIFIER LETTER SMALL ENG
+1D52 MODIFIER LETTER SMALL O
+1D53 MODIFIER LETTER SMALL OPEN O
+1D54 MODIFIER LETTER SMALL TOP HALF O
+1D55 MODIFIER LETTER SMALL BOTTOM HALF O
+1D56 MODIFIER LETTER SMALL P
+1D57 MODIFIER LETTER SMALL T
+1D58 MODIFIER LETTER SMALL U
+1D59 MODIFIER LETTER SMALL SIDEWAYS U
+1D5A MODIFIER LETTER SMALL TURNED M
+1D5B MODIFIER LETTER SMALL V
+1D5C MODIFIER LETTER SMALL AIN
+1D5D MODIFIER LETTER SMALL BETA
+1D5E MODIFIER LETTER SMALL GREEK GAMMA
+1D5F MODIFIER LETTER SMALL DELTA
+1D60 MODIFIER LETTER SMALL GREEK PHI
+1D61 MODIFIER LETTER SMALL CHI
+1D62 LATIN SUBSCRIPT SMALL LETTER I
+1D63 LATIN SUBSCRIPT SMALL LETTER R
+1D64 LATIN SUBSCRIPT SMALL LETTER U
+1D65 LATIN SUBSCRIPT SMALL LETTER V
+1D66 GREEK SUBSCRIPT SMALL LETTER BETA
+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D68 GREEK SUBSCRIPT SMALL LETTER RHO
+1D69 GREEK SUBSCRIPT SMALL LETTER PHI
+1D6A GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B LATIN SMALL LETTER UE
+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE
+1D77 LATIN SMALL LETTER TURNED G
+1D78 MODIFIER LETTER CYRILLIC EN
+1D79 LATIN SMALL LETTER INSULAR G
+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH
+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE
+1D7C LATIN SMALL LETTER IOTA WITH STROKE
+1D7D LATIN SMALL LETTER P WITH STROKE
+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE
+1D7F LATIN SMALL LETTER UPSILON WITH STROKE
+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK
+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B MODIFIER LETTER SMALL TURNED ALPHA
+1D9C MODIFIER LETTER SMALL C
+1D9D MODIFIER LETTER SMALL C WITH CURL
+1D9E MODIFIER LETTER SMALL ETH
+1D9F MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0 MODIFIER LETTER SMALL F
+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2 MODIFIER LETTER SMALL SCRIPT G
+1DA3 MODIFIER LETTER SMALL TURNED H
+1DA4 MODIFIER LETTER SMALL I WITH STROKE
+1DA5 MODIFIER LETTER SMALL IOTA
+1DA6 MODIFIER LETTER SMALL CAPITAL I
+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB MODIFIER LETTER SMALL CAPITAL L
+1DAC MODIFIER LETTER SMALL M WITH HOOK
+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0 MODIFIER LETTER SMALL CAPITAL N
+1DB1 MODIFIER LETTER SMALL BARRED O
+1DB2 MODIFIER LETTER SMALL PHI
+1DB3 MODIFIER LETTER SMALL S WITH HOOK
+1DB4 MODIFIER LETTER SMALL ESH
+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6 MODIFIER LETTER SMALL U BAR
+1DB7 MODIFIER LETTER SMALL UPSILON
+1DB8 MODIFIER LETTER SMALL CAPITAL U
+1DB9 MODIFIER LETTER SMALL V WITH HOOK
+1DBA MODIFIER LETTER SMALL TURNED V
+1DBB MODIFIER LETTER SMALL Z
+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD MODIFIER LETTER SMALL Z WITH CURL
+1DBE MODIFIER LETTER SMALL EZH
+1DBF MODIFIER LETTER SMALL THETA
+1DC0 COMBINING DOTTED GRAVE ACCENT
+1DC1 COMBINING DOTTED ACUTE ACCENT
+1DC2 COMBINING SNAKE BELOW
+1DC3 COMBINING SUSPENSION MARK
+1E00 LATIN CAPITAL LETTER A WITH RING BELOW
+1E01 LATIN SMALL LETTER A WITH RING BELOW
+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E03 LATIN SMALL LETTER B WITH DOT ABOVE
+1E04 LATIN CAPITAL LETTER B WITH DOT BELOW
+1E05 LATIN SMALL LETTER B WITH DOT BELOW
+1E06 LATIN CAPITAL LETTER B WITH LINE BELOW
+1E07 LATIN SMALL LETTER B WITH LINE BELOW
+1E08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0B LATIN SMALL LETTER D WITH DOT ABOVE
+1E0C LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0D LATIN SMALL LETTER D WITH DOT BELOW
+1E0E LATIN CAPITAL LETTER D WITH LINE BELOW
+1E0F LATIN SMALL LETTER D WITH LINE BELOW
+1E10 LATIN CAPITAL LETTER D WITH CEDILLA
+1E11 LATIN SMALL LETTER D WITH CEDILLA
+1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1B LATIN SMALL LETTER E WITH TILDE BELOW
+1E1C LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1D LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E1F LATIN SMALL LETTER F WITH DOT ABOVE
+1E20 LATIN CAPITAL LETTER G WITH MACRON
+1E21 LATIN SMALL LETTER G WITH MACRON
+1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E23 LATIN SMALL LETTER H WITH DOT ABOVE
+1E24 LATIN CAPITAL LETTER H WITH DOT BELOW
+1E25 LATIN SMALL LETTER H WITH DOT BELOW
+1E26 LATIN CAPITAL LETTER H WITH DIAERESIS
+1E27 LATIN SMALL LETTER H WITH DIAERESIS
+1E28 LATIN CAPITAL LETTER H WITH CEDILLA
+1E29 LATIN SMALL LETTER H WITH CEDILLA
+1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2B LATIN SMALL LETTER H WITH BREVE BELOW
+1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2D LATIN SMALL LETTER I WITH TILDE BELOW
+1E2E LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E2F LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E30 LATIN CAPITAL LETTER K WITH ACUTE
+1E31 LATIN SMALL LETTER K WITH ACUTE
+1E32 LATIN CAPITAL LETTER K WITH DOT BELOW
+1E33 LATIN SMALL LETTER K WITH DOT BELOW
+1E34 LATIN CAPITAL LETTER K WITH LINE BELOW
+1E35 LATIN SMALL LETTER K WITH LINE BELOW
+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW
+1E37 LATIN SMALL LETTER L WITH DOT BELOW
+1E38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3A LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3B LATIN SMALL LETTER L WITH LINE BELOW
+1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3E LATIN CAPITAL LETTER M WITH ACUTE
+1E3F LATIN SMALL LETTER M WITH ACUTE
+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E41 LATIN SMALL LETTER M WITH DOT ABOVE
+1E42 LATIN CAPITAL LETTER M WITH DOT BELOW
+1E43 LATIN SMALL LETTER M WITH DOT BELOW
+1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E45 LATIN SMALL LETTER N WITH DOT ABOVE
+1E46 LATIN CAPITAL LETTER N WITH DOT BELOW
+1E47 LATIN SMALL LETTER N WITH DOT BELOW
+1E48 LATIN CAPITAL LETTER N WITH LINE BELOW
+1E49 LATIN SMALL LETTER N WITH LINE BELOW
+1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4C LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4D LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4E LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E4F LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E54 LATIN CAPITAL LETTER P WITH ACUTE
+1E55 LATIN SMALL LETTER P WITH ACUTE
+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E57 LATIN SMALL LETTER P WITH DOT ABOVE
+1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E59 LATIN SMALL LETTER R WITH DOT ABOVE
+1E5A LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5B LATIN SMALL LETTER R WITH DOT BELOW
+1E5C LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5D LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5E LATIN CAPITAL LETTER R WITH LINE BELOW
+1E5F LATIN SMALL LETTER R WITH LINE BELOW
+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E61 LATIN SMALL LETTER S WITH DOT ABOVE
+1E62 LATIN CAPITAL LETTER S WITH DOT BELOW
+1E63 LATIN SMALL LETTER S WITH DOT BELOW
+1E64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6B LATIN SMALL LETTER T WITH DOT ABOVE
+1E6C LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6D LATIN SMALL LETTER T WITH DOT BELOW
+1E6E LATIN CAPITAL LETTER T WITH LINE BELOW
+1E6F LATIN SMALL LETTER T WITH LINE BELOW
+1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E75 LATIN SMALL LETTER U WITH TILDE BELOW
+1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7A LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7B LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7C LATIN CAPITAL LETTER V WITH TILDE
+1E7D LATIN SMALL LETTER V WITH TILDE
+1E7E LATIN CAPITAL LETTER V WITH DOT BELOW
+1E7F LATIN SMALL LETTER V WITH DOT BELOW
+1E80 LATIN CAPITAL LETTER W WITH GRAVE
+1E81 LATIN SMALL LETTER W WITH GRAVE
+1E82 LATIN CAPITAL LETTER W WITH ACUTE
+1E83 LATIN SMALL LETTER W WITH ACUTE
+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS
+1E85 LATIN SMALL LETTER W WITH DIAERESIS
+1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E87 LATIN SMALL LETTER W WITH DOT ABOVE
+1E88 LATIN CAPITAL LETTER W WITH DOT BELOW
+1E89 LATIN SMALL LETTER W WITH DOT BELOW
+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8B LATIN SMALL LETTER X WITH DOT ABOVE
+1E8C LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8D LATIN SMALL LETTER X WITH DIAERESIS
+1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E8F LATIN SMALL LETTER Y WITH DOT ABOVE
+1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E93 LATIN SMALL LETTER Z WITH DOT BELOW
+1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E95 LATIN SMALL LETTER Z WITH LINE BELOW
+1E96 LATIN SMALL LETTER H WITH LINE BELOW
+1E97 LATIN SMALL LETTER T WITH DIAERESIS
+1E98 LATIN SMALL LETTER W WITH RING ABOVE
+1E99 LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA1 LATIN SMALL LETTER A WITH DOT BELOW
+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW
+1EB9 LATIN SMALL LETTER E WITH DOT BELOW
+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBC LATIN CAPITAL LETTER E WITH TILDE
+1EBD LATIN SMALL LETTER E WITH TILDE
+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECB LATIN SMALL LETTER I WITH DOT BELOW
+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECD LATIN SMALL LETTER O WITH DOT BELOW
+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE5 LATIN SMALL LETTER U WITH DOT BELOW
+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE
+1EF3 LATIN SMALL LETTER Y WITH GRAVE
+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW
+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF8 LATIN CAPITAL LETTER Y WITH TILDE
+1EF9 LATIN SMALL LETTER Y WITH TILDE
+1F00 GREEK SMALL LETTER ALPHA WITH PSILI
+1F01 GREEK SMALL LETTER ALPHA WITH DASIA
+1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10 GREEK SMALL LETTER EPSILON WITH PSILI
+1F11 GREEK SMALL LETTER EPSILON WITH DASIA
+1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20 GREEK SMALL LETTER ETA WITH PSILI
+1F21 GREEK SMALL LETTER ETA WITH DASIA
+1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F28 GREEK CAPITAL LETTER ETA WITH PSILI
+1F29 GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30 GREEK SMALL LETTER IOTA WITH PSILI
+1F31 GREEK SMALL LETTER IOTA WITH DASIA
+1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F38 GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39 GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40 GREEK SMALL LETTER OMICRON WITH PSILI
+1F41 GREEK SMALL LETTER OMICRON WITH DASIA
+1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50 GREEK SMALL LETTER UPSILON WITH PSILI
+1F51 GREEK SMALL LETTER UPSILON WITH DASIA
+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60 GREEK SMALL LETTER OMEGA WITH PSILI
+1F61 GREEK SMALL LETTER OMEGA WITH DASIA
+1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70 GREEK SMALL LETTER ALPHA WITH VARIA
+1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+1F72 GREEK SMALL LETTER EPSILON WITH VARIA
+1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+1F74 GREEK SMALL LETTER ETA WITH VARIA
+1F75 GREEK SMALL LETTER ETA WITH OXIA
+1F76 GREEK SMALL LETTER IOTA WITH VARIA
+1F77 GREEK SMALL LETTER IOTA WITH OXIA
+1F78 GREEK SMALL LETTER OMICRON WITH VARIA
+1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+1F7A GREEK SMALL LETTER UPSILON WITH VARIA
+1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+1F7C GREEK SMALL LETTER OMEGA WITH VARIA
+1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY
+1FB1 GREEK SMALL LETTER ALPHA WITH MACRON
+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD GREEK KORONIS
+1FBE GREEK PROSGEGRAMMENI
+1FBF GREEK PSILI
+1FC0 GREEK PERISPOMENI
+1FC1 GREEK DIALYTIKA AND PERISPOMENI
+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD GREEK PSILI AND VARIA
+1FCE GREEK PSILI AND OXIA
+1FCF GREEK PSILI AND PERISPOMENI
+1FD0 GREEK SMALL LETTER IOTA WITH VRACHY
+1FD1 GREEK SMALL LETTER IOTA WITH MACRON
+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD GREEK DASIA AND VARIA
+1FDE GREEK DASIA AND OXIA
+1FDF GREEK DASIA AND PERISPOMENI
+1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY
+1FE1 GREEK SMALL LETTER UPSILON WITH MACRON
+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4 GREEK SMALL LETTER RHO WITH PSILI
+1FE5 GREEK SMALL LETTER RHO WITH DASIA
+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC GREEK CAPITAL LETTER RHO WITH DASIA
+1FED GREEK DIALYTIKA AND VARIA
+1FEE GREEK DIALYTIKA AND OXIA
+1FEF GREEK VARIA
+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD GREEK OXIA
+1FFE GREEK DASIA
+2000 EN QUAD
+2001 EM QUAD
+2002 EN SPACE
+2003 EM SPACE
+2004 THREE-PER-EM SPACE
+2005 FOUR-PER-EM SPACE
+2006 SIX-PER-EM SPACE
+2007 FIGURE SPACE
+2008 PUNCTUATION SPACE
+2009 THIN SPACE
+200A HAIR SPACE
+200B ZERO WIDTH SPACE
+200C ZERO WIDTH NON-JOINER
+200D ZERO WIDTH JOINER
+200E LEFT-TO-RIGHT MARK
+200F RIGHT-TO-LEFT MARK
+2010 HYPHEN
+2011 NON-BREAKING HYPHEN
+2012 FIGURE DASH
+2013 EN DASH
+2014 EM DASH
+2015 HORIZONTAL BAR
+2016 DOUBLE VERTICAL LINE
+2017 DOUBLE LOW LINE
+2018 LEFT SINGLE QUOTATION MARK
+2019 RIGHT SINGLE QUOTATION MARK
+201A SINGLE LOW-9 QUOTATION MARK
+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
+201C LEFT DOUBLE QUOTATION MARK
+201D RIGHT DOUBLE QUOTATION MARK
+201E DOUBLE LOW-9 QUOTATION MARK
+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020 DAGGER
+2021 DOUBLE DAGGER
+2022 BULLET
+2023 TRIANGULAR BULLET
+2024 ONE DOT LEADER
+2025 TWO DOT LEADER
+2026 HORIZONTAL ELLIPSIS
+2027 HYPHENATION POINT
+2028 LINE SEPARATOR
+2029 PARAGRAPH SEPARATOR
+202A LEFT-TO-RIGHT EMBEDDING
+202B RIGHT-TO-LEFT EMBEDDING
+202C POP DIRECTIONAL FORMATTING
+202D LEFT-TO-RIGHT OVERRIDE
+202E RIGHT-TO-LEFT OVERRIDE
+202F NARROW NO-BREAK SPACE
+2030 PER MILLE SIGN
+2031 PER TEN THOUSAND SIGN
+2032 PRIME
+2033 DOUBLE PRIME
+2034 TRIPLE PRIME
+2035 REVERSED PRIME
+2036 REVERSED DOUBLE PRIME
+2037 REVERSED TRIPLE PRIME
+2038 CARET
+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B REFERENCE MARK
+203C DOUBLE EXCLAMATION MARK
+203D INTERROBANG
+203E OVERLINE
+203F UNDERTIE
+2040 CHARACTER TIE
+2041 CARET INSERTION POINT
+2042 ASTERISM
+2043 HYPHEN BULLET
+2044 FRACTION SLASH
+2045 LEFT SQUARE BRACKET WITH QUILL
+2046 RIGHT SQUARE BRACKET WITH QUILL
+2047 DOUBLE QUESTION MARK
+2048 QUESTION EXCLAMATION MARK
+2049 EXCLAMATION QUESTION MARK
+204A TIRONIAN SIGN ET
+204B REVERSED PILCROW SIGN
+204C BLACK LEFTWARDS BULLET
+204D BLACK RIGHTWARDS BULLET
+204E LOW ASTERISK
+204F REVERSED SEMICOLON
+2050 CLOSE UP
+2051 TWO ASTERISKS ALIGNED VERTICALLY
+2052 COMMERCIAL MINUS SIGN
+2053 SWUNG DASH
+2054 INVERTED UNDERTIE
+2055 FLOWER PUNCTUATION MARK
+2056 THREE DOT PUNCTUATION
+2057 QUADRUPLE PRIME
+2058 FOUR DOT PUNCTUATION
+2059 FIVE DOT PUNCTUATION
+205A TWO DOT PUNCTUATION
+205B FOUR DOT MARK
+205C DOTTED CROSS
+205D TRICOLON
+205E VERTICAL FOUR DOTS
+205F MEDIUM MATHEMATICAL SPACE
+2060 WORD JOINER
+2061 FUNCTION APPLICATION
+2062 INVISIBLE TIMES
+2063 INVISIBLE SEPARATOR
+206A INHIBIT SYMMETRIC SWAPPING
+206B ACTIVATE SYMMETRIC SWAPPING
+206C INHIBIT ARABIC FORM SHAPING
+206D ACTIVATE ARABIC FORM SHAPING
+206E NATIONAL DIGIT SHAPES
+206F NOMINAL DIGIT SHAPES
+2070 SUPERSCRIPT ZERO
+2071 SUPERSCRIPT LATIN SMALL LETTER I
+2074 SUPERSCRIPT FOUR
+2075 SUPERSCRIPT FIVE
+2076 SUPERSCRIPT SIX
+2077 SUPERSCRIPT SEVEN
+2078 SUPERSCRIPT EIGHT
+2079 SUPERSCRIPT NINE
+207A SUPERSCRIPT PLUS SIGN
+207B SUPERSCRIPT MINUS
+207C SUPERSCRIPT EQUALS SIGN
+207D SUPERSCRIPT LEFT PARENTHESIS
+207E SUPERSCRIPT RIGHT PARENTHESIS
+207F SUPERSCRIPT LATIN SMALL LETTER N
+2080 SUBSCRIPT ZERO
+2081 SUBSCRIPT ONE
+2082 SUBSCRIPT TWO
+2083 SUBSCRIPT THREE
+2084 SUBSCRIPT FOUR
+2085 SUBSCRIPT FIVE
+2086 SUBSCRIPT SIX
+2087 SUBSCRIPT SEVEN
+2088 SUBSCRIPT EIGHT
+2089 SUBSCRIPT NINE
+208A SUBSCRIPT PLUS SIGN
+208B SUBSCRIPT MINUS
+208C SUBSCRIPT EQUALS SIGN
+208D SUBSCRIPT LEFT PARENTHESIS
+208E SUBSCRIPT RIGHT PARENTHESIS
+2090 LATIN SUBSCRIPT SMALL LETTER A
+2091 LATIN SUBSCRIPT SMALL LETTER E
+2092 LATIN SUBSCRIPT SMALL LETTER O
+2093 LATIN SUBSCRIPT SMALL LETTER X
+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA
+20A0 EURO-CURRENCY SIGN
+20A1 COLON SIGN
+20A2 CRUZEIRO SIGN
+20A3 FRENCH FRANC SIGN
+20A4 LIRA SIGN
+20A5 MILL SIGN
+20A6 NAIRA SIGN
+20A7 PESETA SIGN
+20A8 RUPEE SIGN
+20A9 WON SIGN
+20AA NEW SHEQEL SIGN
+20AB DONG SIGN
+20AC EURO SIGN
+20AD KIP SIGN
+20AE TUGRIK SIGN
+20AF DRACHMA SIGN
+20B0 GERMAN PENNY SIGN
+20B1 PESO SIGN
+20B2 GUARANI SIGN
+20B3 AUSTRAL SIGN
+20B4 HRYVNIA SIGN
+20B5 CEDI SIGN
+20D0 COMBINING LEFT HARPOON ABOVE
+20D1 COMBINING RIGHT HARPOON ABOVE
+20D2 COMBINING LONG VERTICAL LINE OVERLAY
+20D3 COMBINING SHORT VERTICAL LINE OVERLAY
+20D4 COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5 COMBINING CLOCKWISE ARROW ABOVE
+20D6 COMBINING LEFT ARROW ABOVE
+20D7 COMBINING RIGHT ARROW ABOVE
+20D8 COMBINING RING OVERLAY
+20D9 COMBINING CLOCKWISE RING OVERLAY
+20DA COMBINING ANTICLOCKWISE RING OVERLAY
+20DB COMBINING THREE DOTS ABOVE
+20DC COMBINING FOUR DOTS ABOVE
+20DD COMBINING ENCLOSING CIRCLE
+20DE COMBINING ENCLOSING SQUARE
+20DF COMBINING ENCLOSING DIAMOND
+20E0 COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 COMBINING LEFT RIGHT ARROW ABOVE
+20E2 COMBINING ENCLOSING SCREEN
+20E3 COMBINING ENCLOSING KEYCAP
+20E4 COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5 COMBINING REVERSE SOLIDUS OVERLAY
+20E6 COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20E7 COMBINING ANNUITY SYMBOL
+20E8 COMBINING TRIPLE UNDERDOT
+20E9 COMBINING WIDE BRIDGE ABOVE
+20EA COMBINING LEFTWARDS ARROW OVERLAY
+20EB COMBINING LONG DOUBLE SOLIDUS OVERLAY
+2100 ACCOUNT OF
+2101 ADDRESSED TO THE SUBJECT
+2102 DOUBLE-STRUCK CAPITAL C
+2103 DEGREE CELSIUS
+2104 CENTRE LINE SYMBOL
+2105 CARE OF
+2106 CADA UNA
+2107 EULER CONSTANT
+2108 SCRUPLE
+2109 DEGREE FAHRENHEIT
+210A SCRIPT SMALL G
+210B SCRIPT CAPITAL H
+210C BLACK-LETTER CAPITAL H
+210D DOUBLE-STRUCK CAPITAL H
+210E PLANCK CONSTANT
+210F PLANCK CONSTANT OVER TWO PI
+2110 SCRIPT CAPITAL I
+2111 BLACK-LETTER CAPITAL I
+2112 SCRIPT CAPITAL L
+2113 SCRIPT SMALL L
+2114 L B BAR SYMBOL
+2115 DOUBLE-STRUCK CAPITAL N
+2116 NUMERO SIGN
+2117 SOUND RECORDING COPYRIGHT
+2118 SCRIPT CAPITAL P
+2119 DOUBLE-STRUCK CAPITAL P
+211A DOUBLE-STRUCK CAPITAL Q
+211B SCRIPT CAPITAL R
+211C BLACK-LETTER CAPITAL R
+211D DOUBLE-STRUCK CAPITAL R
+211E PRESCRIPTION TAKE
+211F RESPONSE
+2120 SERVICE MARK
+2121 TELEPHONE SIGN
+2122 TRADE MARK SIGN
+2123 VERSICLE
+2124 DOUBLE-STRUCK CAPITAL Z
+2125 OUNCE SIGN
+2126 OHM SIGN
+2127 INVERTED OHM SIGN
+2128 BLACK-LETTER CAPITAL Z
+2129 TURNED GREEK SMALL LETTER IOTA
+212A KELVIN SIGN
+212B ANGSTROM SIGN
+212C SCRIPT CAPITAL B
+212D BLACK-LETTER CAPITAL C
+212E ESTIMATED SYMBOL
+212F SCRIPT SMALL E
+2130 SCRIPT CAPITAL E
+2131 SCRIPT CAPITAL F
+2132 TURNED CAPITAL F
+2133 SCRIPT CAPITAL M
+2134 SCRIPT SMALL O
+2135 ALEF SYMBOL
+2136 BET SYMBOL
+2137 GIMEL SYMBOL
+2138 DALET SYMBOL
+2139 INFORMATION SOURCE
+213A ROTATED CAPITAL Q
+213B FACSIMILE SIGN
+213C DOUBLE-STRUCK SMALL PI
+213D DOUBLE-STRUCK SMALL GAMMA
+213E DOUBLE-STRUCK CAPITAL GAMMA
+213F DOUBLE-STRUCK CAPITAL PI
+2140 DOUBLE-STRUCK N-ARY SUMMATION
+2141 TURNED SANS-SERIF CAPITAL G
+2142 TURNED SANS-SERIF CAPITAL L
+2143 REVERSED SANS-SERIF CAPITAL L
+2144 TURNED SANS-SERIF CAPITAL Y
+2145 DOUBLE-STRUCK ITALIC CAPITAL D
+2146 DOUBLE-STRUCK ITALIC SMALL D
+2147 DOUBLE-STRUCK ITALIC SMALL E
+2148 DOUBLE-STRUCK ITALIC SMALL I
+2149 DOUBLE-STRUCK ITALIC SMALL J
+214A PROPERTY LINE
+214B TURNED AMPERSAND
+214C PER SIGN
+2153 VULGAR FRACTION ONE THIRD
+2154 VULGAR FRACTION TWO THIRDS
+2155 VULGAR FRACTION ONE FIFTH
+2156 VULGAR FRACTION TWO FIFTHS
+2157 VULGAR FRACTION THREE FIFTHS
+2158 VULGAR FRACTION FOUR FIFTHS
+2159 VULGAR FRACTION ONE SIXTH
+215A VULGAR FRACTION FIVE SIXTHS
+215B VULGAR FRACTION ONE EIGHTH
+215C VULGAR FRACTION THREE EIGHTHS
+215D VULGAR FRACTION FIVE EIGHTHS
+215E VULGAR FRACTION SEVEN EIGHTHS
+215F FRACTION NUMERATOR ONE
+2160 ROMAN NUMERAL ONE
+2161 ROMAN NUMERAL TWO
+2162 ROMAN NUMERAL THREE
+2163 ROMAN NUMERAL FOUR
+2164 ROMAN NUMERAL FIVE
+2165 ROMAN NUMERAL SIX
+2166 ROMAN NUMERAL SEVEN
+2167 ROMAN NUMERAL EIGHT
+2168 ROMAN NUMERAL NINE
+2169 ROMAN NUMERAL TEN
+216A ROMAN NUMERAL ELEVEN
+216B ROMAN NUMERAL TWELVE
+216C ROMAN NUMERAL FIFTY
+216D ROMAN NUMERAL ONE HUNDRED
+216E ROMAN NUMERAL FIVE HUNDRED
+216F ROMAN NUMERAL ONE THOUSAND
+2170 SMALL ROMAN NUMERAL ONE
+2171 SMALL ROMAN NUMERAL TWO
+2172 SMALL ROMAN NUMERAL THREE
+2173 SMALL ROMAN NUMERAL FOUR
+2174 SMALL ROMAN NUMERAL FIVE
+2175 SMALL ROMAN NUMERAL SIX
+2176 SMALL ROMAN NUMERAL SEVEN
+2177 SMALL ROMAN NUMERAL EIGHT
+2178 SMALL ROMAN NUMERAL NINE
+2179 SMALL ROMAN NUMERAL TEN
+217A SMALL ROMAN NUMERAL ELEVEN
+217B SMALL ROMAN NUMERAL TWELVE
+217C SMALL ROMAN NUMERAL FIFTY
+217D SMALL ROMAN NUMERAL ONE HUNDRED
+217E SMALL ROMAN NUMERAL FIVE HUNDRED
+217F SMALL ROMAN NUMERAL ONE THOUSAND
+2180 ROMAN NUMERAL ONE THOUSAND C D
+2181 ROMAN NUMERAL FIVE THOUSAND
+2182 ROMAN NUMERAL TEN THOUSAND
+2183 ROMAN NUMERAL REVERSED ONE HUNDRED
+2190 LEFTWARDS ARROW
+2191 UPWARDS ARROW
+2192 RIGHTWARDS ARROW
+2193 DOWNWARDS ARROW
+2194 LEFT RIGHT ARROW
+2195 UP DOWN ARROW
+2196 NORTH WEST ARROW
+2197 NORTH EAST ARROW
+2198 SOUTH EAST ARROW
+2199 SOUTH WEST ARROW
+219A LEFTWARDS ARROW WITH STROKE
+219B RIGHTWARDS ARROW WITH STROKE
+219C LEFTWARDS WAVE ARROW
+219D RIGHTWARDS WAVE ARROW
+219E LEFTWARDS TWO HEADED ARROW
+219F UPWARDS TWO HEADED ARROW
+21A0 RIGHTWARDS TWO HEADED ARROW
+21A1 DOWNWARDS TWO HEADED ARROW
+21A2 LEFTWARDS ARROW WITH TAIL
+21A3 RIGHTWARDS ARROW WITH TAIL
+21A4 LEFTWARDS ARROW FROM BAR
+21A5 UPWARDS ARROW FROM BAR
+21A6 RIGHTWARDS ARROW FROM BAR
+21A7 DOWNWARDS ARROW FROM BAR
+21A8 UP DOWN ARROW WITH BASE
+21A9 LEFTWARDS ARROW WITH HOOK
+21AA RIGHTWARDS ARROW WITH HOOK
+21AB LEFTWARDS ARROW WITH LOOP
+21AC RIGHTWARDS ARROW WITH LOOP
+21AD LEFT RIGHT WAVE ARROW
+21AE LEFT RIGHT ARROW WITH STROKE
+21AF DOWNWARDS ZIGZAG ARROW
+21B0 UPWARDS ARROW WITH TIP LEFTWARDS
+21B1 UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
+21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7 CLOCKWISE TOP SEMICIRCLE ARROW
+21B8 NORTH WEST ARROW TO LONG BAR
+21B9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+21BA ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB CLOCKWISE OPEN CIRCLE ARROW
+21BC LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7 LEFTWARDS PAIRED ARROWS
+21C8 UPWARDS PAIRED ARROWS
+21C9 RIGHTWARDS PAIRED ARROWS
+21CA DOWNWARDS PAIRED ARROWS
+21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE LEFT RIGHT DOUBLE ARROW WITH STROKE
+21CF RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0 LEFTWARDS DOUBLE ARROW
+21D1 UPWARDS DOUBLE ARROW
+21D2 RIGHTWARDS DOUBLE ARROW
+21D3 DOWNWARDS DOUBLE ARROW
+21D4 LEFT RIGHT DOUBLE ARROW
+21D5 UP DOWN DOUBLE ARROW
+21D6 NORTH WEST DOUBLE ARROW
+21D7 NORTH EAST DOUBLE ARROW
+21D8 SOUTH EAST DOUBLE ARROW
+21D9 SOUTH WEST DOUBLE ARROW
+21DA LEFTWARDS TRIPLE ARROW
+21DB RIGHTWARDS TRIPLE ARROW
+21DC LEFTWARDS SQUIGGLE ARROW
+21DD RIGHTWARDS SQUIGGLE ARROW
+21DE UPWARDS ARROW WITH DOUBLE STROKE
+21DF DOWNWARDS ARROW WITH DOUBLE STROKE
+21E0 LEFTWARDS DASHED ARROW
+21E1 UPWARDS DASHED ARROW
+21E2 RIGHTWARDS DASHED ARROW
+21E3 DOWNWARDS DASHED ARROW
+21E4 LEFTWARDS ARROW TO BAR
+21E5 RIGHTWARDS ARROW TO BAR
+21E6 LEFTWARDS WHITE ARROW
+21E7 UPWARDS WHITE ARROW
+21E8 RIGHTWARDS WHITE ARROW
+21E9 DOWNWARDS WHITE ARROW
+21EA UPWARDS WHITE ARROW FROM BAR
+21EB UPWARDS WHITE ARROW ON PEDESTAL
+21EC UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+21ED UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+21EE UPWARDS WHITE DOUBLE ARROW
+21EF UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+21F0 RIGHTWARDS WHITE ARROW FROM WALL
+21F1 NORTH WEST ARROW TO CORNER
+21F2 SOUTH EAST ARROW TO CORNER
+21F3 UP DOWN WHITE ARROW
+21F4 RIGHT ARROW WITH SMALL CIRCLE
+21F5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6 THREE RIGHTWARDS ARROWS
+21F7 LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8 RIGHTWARDS ARROW WITH VERTICAL STROKE
+21F9 LEFT RIGHT ARROW WITH VERTICAL STROKE
+21FA LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FC LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+21FD LEFTWARDS OPEN-HEADED ARROW
+21FE RIGHTWARDS OPEN-HEADED ARROW
+21FF LEFT RIGHT OPEN-HEADED ARROW
+2200 FOR ALL
+2201 COMPLEMENT
+2202 PARTIAL DIFFERENTIAL
+2203 THERE EXISTS
+2204 THERE DOES NOT EXIST
+2205 EMPTY SET
+2206 INCREMENT
+2207 NABLA
+2208 ELEMENT OF
+2209 NOT AN ELEMENT OF
+220A SMALL ELEMENT OF
+220B CONTAINS AS MEMBER
+220C DOES NOT CONTAIN AS MEMBER
+220D SMALL CONTAINS AS MEMBER
+220E END OF PROOF
+220F N-ARY PRODUCT
+2210 N-ARY COPRODUCT
+2211 N-ARY SUMMATION
+2212 MINUS SIGN
+2213 MINUS-OR-PLUS SIGN
+2214 DOT PLUS
+2215 DIVISION SLASH
+2216 SET MINUS
+2217 ASTERISK OPERATOR
+2218 RING OPERATOR
+2219 BULLET OPERATOR
+221A SQUARE ROOT
+221B CUBE ROOT
+221C FOURTH ROOT
+221D PROPORTIONAL TO
+221E INFINITY
+221F RIGHT ANGLE
+2220 ANGLE
+2221 MEASURED ANGLE
+2222 SPHERICAL ANGLE
+2223 DIVIDES
+2224 DOES NOT DIVIDE
+2225 PARALLEL TO
+2226 NOT PARALLEL TO
+2227 LOGICAL AND
+2228 LOGICAL OR
+2229 INTERSECTION
+222A UNION
+222B INTEGRAL
+222C DOUBLE INTEGRAL
+222D TRIPLE INTEGRAL
+222E CONTOUR INTEGRAL
+222F SURFACE INTEGRAL
+2230 VOLUME INTEGRAL
+2231 CLOCKWISE INTEGRAL
+2232 CLOCKWISE CONTOUR INTEGRAL
+2233 ANTICLOCKWISE CONTOUR INTEGRAL
+2234 THEREFORE
+2235 BECAUSE
+2236 RATIO
+2237 PROPORTION
+2238 DOT MINUS
+2239 EXCESS
+223A GEOMETRIC PROPORTION
+223B HOMOTHETIC
+223C TILDE OPERATOR
+223D REVERSED TILDE
+223E INVERTED LAZY S
+223F SINE WAVE
+2240 WREATH PRODUCT
+2241 NOT TILDE
+2242 MINUS TILDE
+2243 ASYMPTOTICALLY EQUAL TO
+2244 NOT ASYMPTOTICALLY EQUAL TO
+2245 APPROXIMATELY EQUAL TO
+2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2248 ALMOST EQUAL TO
+2249 NOT ALMOST EQUAL TO
+224A ALMOST EQUAL OR EQUAL TO
+224B TRIPLE TILDE
+224C ALL EQUAL TO
+224D EQUIVALENT TO
+224E GEOMETRICALLY EQUIVALENT TO
+224F DIFFERENCE BETWEEN
+2250 APPROACHES THE LIMIT
+2251 GEOMETRICALLY EQUAL TO
+2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF
+2253 IMAGE OF OR APPROXIMATELY EQUAL TO
+2254 COLON EQUALS
+2255 EQUALS COLON
+2256 RING IN EQUAL TO
+2257 RING EQUAL TO
+2258 CORRESPONDS TO
+2259 ESTIMATES
+225A EQUIANGULAR TO
+225B STAR EQUALS
+225C DELTA EQUAL TO
+225D EQUAL TO BY DEFINITION
+225E MEASURED BY
+225F QUESTIONED EQUAL TO
+2260 NOT EQUAL TO
+2261 IDENTICAL TO
+2262 NOT IDENTICAL TO
+2263 STRICTLY EQUIVALENT TO
+2264 LESS-THAN OR EQUAL TO
+2265 GREATER-THAN OR EQUAL TO
+2266 LESS-THAN OVER EQUAL TO
+2267 GREATER-THAN OVER EQUAL TO
+2268 LESS-THAN BUT NOT EQUAL TO
+2269 GREATER-THAN BUT NOT EQUAL TO
+226A MUCH LESS-THAN
+226B MUCH GREATER-THAN
+226C BETWEEN
+226D NOT EQUIVALENT TO
+226E NOT LESS-THAN
+226F NOT GREATER-THAN
+2270 NEITHER LESS-THAN NOR EQUAL TO
+2271 NEITHER GREATER-THAN NOR EQUAL TO
+2272 LESS-THAN OR EQUIVALENT TO
+2273 GREATER-THAN OR EQUIVALENT TO
+2274 NEITHER LESS-THAN NOR EQUIVALENT TO
+2275 NEITHER GREATER-THAN NOR EQUIVALENT TO
+2276 LESS-THAN OR GREATER-THAN
+2277 GREATER-THAN OR LESS-THAN
+2278 NEITHER LESS-THAN NOR GREATER-THAN
+2279 NEITHER GREATER-THAN NOR LESS-THAN
+227A PRECEDES
+227B SUCCEEDS
+227C PRECEDES OR EQUAL TO
+227D SUCCEEDS OR EQUAL TO
+227E PRECEDES OR EQUIVALENT TO
+227F SUCCEEDS OR EQUIVALENT TO
+2280 DOES NOT PRECEDE
+2281 DOES NOT SUCCEED
+2282 SUBSET OF
+2283 SUPERSET OF
+2284 NOT A SUBSET OF
+2285 NOT A SUPERSET OF
+2286 SUBSET OF OR EQUAL TO
+2287 SUPERSET OF OR EQUAL TO
+2288 NEITHER A SUBSET OF NOR EQUAL TO
+2289 NEITHER A SUPERSET OF NOR EQUAL TO
+228A SUBSET OF WITH NOT EQUAL TO
+228B SUPERSET OF WITH NOT EQUAL TO
+228C MULTISET
+228D MULTISET MULTIPLICATION
+228E MULTISET UNION
+228F SQUARE IMAGE OF
+2290 SQUARE ORIGINAL OF
+2291 SQUARE IMAGE OF OR EQUAL TO
+2292 SQUARE ORIGINAL OF OR EQUAL TO
+2293 SQUARE CAP
+2294 SQUARE CUP
+2295 CIRCLED PLUS
+2296 CIRCLED MINUS
+2297 CIRCLED TIMES
+2298 CIRCLED DIVISION SLASH
+2299 CIRCLED DOT OPERATOR
+229A CIRCLED RING OPERATOR
+229B CIRCLED ASTERISK OPERATOR
+229C CIRCLED EQUALS
+229D CIRCLED DASH
+229E SQUARED PLUS
+229F SQUARED MINUS
+22A0 SQUARED TIMES
+22A1 SQUARED DOT OPERATOR
+22A2 RIGHT TACK
+22A3 LEFT TACK
+22A4 DOWN TACK
+22A5 UP TACK
+22A6 ASSERTION
+22A7 MODELS
+22A8 TRUE
+22A9 FORCES
+22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC DOES NOT PROVE
+22AD NOT TRUE
+22AE DOES NOT FORCE
+22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22B0 PRECEDES UNDER RELATION
+22B1 SUCCEEDS UNDER RELATION
+22B2 NORMAL SUBGROUP OF
+22B3 CONTAINS AS NORMAL SUBGROUP
+22B4 NORMAL SUBGROUP OF OR EQUAL TO
+22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6 ORIGINAL OF
+22B7 IMAGE OF
+22B8 MULTIMAP
+22B9 HERMITIAN CONJUGATE MATRIX
+22BA INTERCALATE
+22BB XOR
+22BC NAND
+22BD NOR
+22BE RIGHT ANGLE WITH ARC
+22BF RIGHT TRIANGLE
+22C0 N-ARY LOGICAL AND
+22C1 N-ARY LOGICAL OR
+22C2 N-ARY INTERSECTION
+22C3 N-ARY UNION
+22C4 DIAMOND OPERATOR
+22C5 DOT OPERATOR
+22C6 STAR OPERATOR
+22C7 DIVISION TIMES
+22C8 BOWTIE
+22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB LEFT SEMIDIRECT PRODUCT
+22CC RIGHT SEMIDIRECT PRODUCT
+22CD REVERSED TILDE EQUALS
+22CE CURLY LOGICAL OR
+22CF CURLY LOGICAL AND
+22D0 DOUBLE SUBSET
+22D1 DOUBLE SUPERSET
+22D2 DOUBLE INTERSECTION
+22D3 DOUBLE UNION
+22D4 PITCHFORK
+22D5 EQUAL AND PARALLEL TO
+22D6 LESS-THAN WITH DOT
+22D7 GREATER-THAN WITH DOT
+22D8 VERY MUCH LESS-THAN
+22D9 VERY MUCH GREATER-THAN
+22DA LESS-THAN EQUAL TO OR GREATER-THAN
+22DB GREATER-THAN EQUAL TO OR LESS-THAN
+22DC EQUAL TO OR LESS-THAN
+22DD EQUAL TO OR GREATER-THAN
+22DE EQUAL TO OR PRECEDES
+22DF EQUAL TO OR SUCCEEDS
+22E0 DOES NOT PRECEDE OR EQUAL
+22E1 DOES NOT SUCCEED OR EQUAL
+22E2 NOT SQUARE IMAGE OF OR EQUAL TO
+22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO
+22E4 SQUARE IMAGE OF OR NOT EQUAL TO
+22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6 LESS-THAN BUT NOT EQUIVALENT TO
+22E7 GREATER-THAN BUT NOT EQUIVALENT TO
+22E8 PRECEDES BUT NOT EQUIVALENT TO
+22E9 SUCCEEDS BUT NOT EQUIVALENT TO
+22EA NOT NORMAL SUBGROUP OF
+22EB DOES NOT CONTAIN AS NORMAL SUBGROUP
+22EC NOT NORMAL SUBGROUP OF OR EQUAL TO
+22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+22EE VERTICAL ELLIPSIS
+22EF MIDLINE HORIZONTAL ELLIPSIS
+22F0 UP RIGHT DIAGONAL ELLIPSIS
+22F1 DOWN RIGHT DIAGONAL ELLIPSIS
+22F2 ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3 ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4 SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5 ELEMENT OF WITH DOT ABOVE
+22F6 ELEMENT OF WITH OVERBAR
+22F7 SMALL ELEMENT OF WITH OVERBAR
+22F8 ELEMENT OF WITH UNDERBAR
+22F9 ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA CONTAINS WITH LONG HORIZONTAL STROKE
+22FB CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD CONTAINS WITH OVERBAR
+22FE SMALL CONTAINS WITH OVERBAR
+22FF Z NOTATION BAG MEMBERSHIP
+2300 DIAMETER SIGN
+2301 ELECTRIC ARROW
+2302 HOUSE
+2303 UP ARROWHEAD
+2304 DOWN ARROWHEAD
+2305 PROJECTIVE
+2306 PERSPECTIVE
+2307 WAVY LINE
+2308 LEFT CEILING
+2309 RIGHT CEILING
+230A LEFT FLOOR
+230B RIGHT FLOOR
+230C BOTTOM RIGHT CROP
+230D BOTTOM LEFT CROP
+230E TOP RIGHT CROP
+230F TOP LEFT CROP
+2310 REVERSED NOT SIGN
+2311 SQUARE LOZENGE
+2312 ARC
+2313 SEGMENT
+2314 SECTOR
+2315 TELEPHONE RECORDER
+2316 POSITION INDICATOR
+2317 VIEWDATA SQUARE
+2318 PLACE OF INTEREST SIGN
+2319 TURNED NOT SIGN
+231A WATCH
+231B HOURGLASS
+231C TOP LEFT CORNER
+231D TOP RIGHT CORNER
+231E BOTTOM LEFT CORNER
+231F BOTTOM RIGHT CORNER
+2320 TOP HALF INTEGRAL
+2321 BOTTOM HALF INTEGRAL
+2322 FROWN
+2323 SMILE
+2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+2325 OPTION KEY
+2326 ERASE TO THE RIGHT
+2327 X IN A RECTANGLE BOX
+2328 KEYBOARD
+2329 LEFT-POINTING ANGLE BRACKET
+232A RIGHT-POINTING ANGLE BRACKET
+232B ERASE TO THE LEFT
+232C BENZENE RING
+232D CYLINDRICITY
+232E ALL AROUND-PROFILE
+232F SYMMETRY
+2330 TOTAL RUNOUT
+2331 DIMENSION ORIGIN
+2332 CONICAL TAPER
+2333 SLOPE
+2334 COUNTERBORE
+2335 COUNTERSINK
+2336 APL FUNCTIONAL SYMBOL I-BEAM
+2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
+2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B APL FUNCTIONAL SYMBOL QUAD JOT
+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E APL FUNCTIONAL SYMBOL CIRCLE JOT
+233F APL FUNCTIONAL SYMBOL SLASH BAR
+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341 APL FUNCTIONAL SYMBOL QUAD SLASH
+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+234A APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+234B APL FUNCTIONAL SYMBOL DELTA STILE
+234C APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D APL FUNCTIONAL SYMBOL QUAD DELTA
+234E APL FUNCTIONAL SYMBOL DOWN TACK JOT
+234F APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+2352 APL FUNCTIONAL SYMBOL DEL STILE
+2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354 APL FUNCTIONAL SYMBOL QUAD DEL
+2355 APL FUNCTIONAL SYMBOL UP TACK JOT
+2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D APL FUNCTIONAL SYMBOL UP SHOE JOT
+235E APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
+2360 APL FUNCTIONAL SYMBOL QUAD COLON
+2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
+2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A APL FUNCTIONAL SYMBOL COMMA BAR
+236B APL FUNCTIONAL SYMBOL DEL TILDE
+236C APL FUNCTIONAL SYMBOL ZILDE
+236D APL FUNCTIONAL SYMBOL STILE TILDE
+236E APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373 APL FUNCTIONAL SYMBOL IOTA
+2374 APL FUNCTIONAL SYMBOL RHO
+2375 APL FUNCTIONAL SYMBOL OMEGA
+2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A APL FUNCTIONAL SYMBOL ALPHA
+237B NOT CHECK MARK
+237C RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D SHOULDERED OPEN BOX
+237E BELL SYMBOL
+237F VERTICAL LINE WITH MIDDLE DOT
+2380 INSERTION SYMBOL
+2381 CONTINUOUS UNDERLINE SYMBOL
+2382 DISCONTINUOUS UNDERLINE SYMBOL
+2383 EMPHASIS SYMBOL
+2384 COMPOSITION SYMBOL
+2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
+2386 ENTER SYMBOL
+2387 ALTERNATIVE KEY SYMBOL
+2388 HELM SYMBOL
+2389 CIRCLED HORIZONTAL BAR WITH NOTCH
+238A CIRCLED TRIANGLE DOWN
+238B BROKEN CIRCLE WITH NORTHWEST ARROW
+238C UNDO SYMBOL
+238D MONOSTABLE SYMBOL
+238E HYSTERESIS SYMBOL
+238F OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390 OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391 PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392 PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393 DIRECT CURRENT SYMBOL FORM TWO
+2394 SOFTWARE-FUNCTION SYMBOL
+2395 APL FUNCTIONAL SYMBOL QUAD
+2396 DECIMAL SEPARATOR KEY SYMBOL
+2397 PREVIOUS PAGE
+2398 NEXT PAGE
+2399 PRINT SCREEN SYMBOL
+239A CLEAR SCREEN SYMBOL
+239B LEFT PARENTHESIS UPPER HOOK
+239C LEFT PARENTHESIS EXTENSION
+239D LEFT PARENTHESIS LOWER HOOK
+239E RIGHT PARENTHESIS UPPER HOOK
+239F RIGHT PARENTHESIS EXTENSION
+23A0 RIGHT PARENTHESIS LOWER HOOK
+23A1 LEFT SQUARE BRACKET UPPER CORNER
+23A2 LEFT SQUARE BRACKET EXTENSION
+23A3 LEFT SQUARE BRACKET LOWER CORNER
+23A4 RIGHT SQUARE BRACKET UPPER CORNER
+23A5 RIGHT SQUARE BRACKET EXTENSION
+23A6 RIGHT SQUARE BRACKET LOWER CORNER
+23A7 LEFT CURLY BRACKET UPPER HOOK
+23A8 LEFT CURLY BRACKET MIDDLE PIECE
+23A9 LEFT CURLY BRACKET LOWER HOOK
+23AA CURLY BRACKET EXTENSION
+23AB RIGHT CURLY BRACKET UPPER HOOK
+23AC RIGHT CURLY BRACKET MIDDLE PIECE
+23AD RIGHT CURLY BRACKET LOWER HOOK
+23AE INTEGRAL EXTENSION
+23AF HORIZONTAL LINE EXTENSION
+23B0 UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+23B1 UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+23B2 SUMMATION TOP
+23B3 SUMMATION BOTTOM
+23B4 TOP SQUARE BRACKET
+23B5 BOTTOM SQUARE BRACKET
+23B6 BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7 RADICAL SYMBOL BOTTOM
+23B8 LEFT VERTICAL BOX LINE
+23B9 RIGHT VERTICAL BOX LINE
+23BA HORIZONTAL SCAN LINE-1
+23BB HORIZONTAL SCAN LINE-3
+23BC HORIZONTAL SCAN LINE-7
+23BD HORIZONTAL SCAN LINE-9
+23BE DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+23BF DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+23C0 DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3 DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6 DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+23CA DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+23CB DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+23CC DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+23CD SQUARE FOOT
+23CE RETURN SYMBOL
+23CF EJECT SYMBOL
+23D0 VERTICAL LINE EXTENSION
+23D1 METRICAL BREVE
+23D2 METRICAL LONG OVER SHORT
+23D3 METRICAL SHORT OVER LONG
+23D4 METRICAL LONG OVER TWO SHORTS
+23D5 METRICAL TWO SHORTS OVER LONG
+23D6 METRICAL TWO SHORTS JOINED
+23D7 METRICAL TRISEME
+23D8 METRICAL TETRASEME
+23D9 METRICAL PENTASEME
+23DA EARTH GROUND
+23DB FUSE
+2400 SYMBOL FOR NULL
+2401 SYMBOL FOR START OF HEADING
+2402 SYMBOL FOR START OF TEXT
+2403 SYMBOL FOR END OF TEXT
+2404 SYMBOL FOR END OF TRANSMISSION
+2405 SYMBOL FOR ENQUIRY
+2406 SYMBOL FOR ACKNOWLEDGE
+2407 SYMBOL FOR BELL
+2408 SYMBOL FOR BACKSPACE
+2409 SYMBOL FOR HORIZONTAL TABULATION
+240A SYMBOL FOR LINE FEED
+240B SYMBOL FOR VERTICAL TABULATION
+240C SYMBOL FOR FORM FEED
+240D SYMBOL FOR CARRIAGE RETURN
+240E SYMBOL FOR SHIFT OUT
+240F SYMBOL FOR SHIFT IN
+2410 SYMBOL FOR DATA LINK ESCAPE
+2411 SYMBOL FOR DEVICE CONTROL ONE
+2412 SYMBOL FOR DEVICE CONTROL TWO
+2413 SYMBOL FOR DEVICE CONTROL THREE
+2414 SYMBOL FOR DEVICE CONTROL FOUR
+2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416 SYMBOL FOR SYNCHRONOUS IDLE
+2417 SYMBOL FOR END OF TRANSMISSION BLOCK
+2418 SYMBOL FOR CANCEL
+2419 SYMBOL FOR END OF MEDIUM
+241A SYMBOL FOR SUBSTITUTE
+241B SYMBOL FOR ESCAPE
+241C SYMBOL FOR FILE SEPARATOR
+241D SYMBOL FOR GROUP SEPARATOR
+241E SYMBOL FOR RECORD SEPARATOR
+241F SYMBOL FOR UNIT SEPARATOR
+2420 SYMBOL FOR SPACE
+2421 SYMBOL FOR DELETE
+2422 BLANK SYMBOL
+2423 OPEN BOX
+2424 SYMBOL FOR NEWLINE
+2425 SYMBOL FOR DELETE FORM TWO
+2426 SYMBOL FOR SUBSTITUTE FORM TWO
+2440 OCR HOOK
+2441 OCR CHAIR
+2442 OCR FORK
+2443 OCR INVERTED FORK
+2444 OCR BELT BUCKLE
+2445 OCR BOW TIE
+2446 OCR BRANCH BANK IDENTIFICATION
+2447 OCR AMOUNT OF CHECK
+2448 OCR DASH
+2449 OCR CUSTOMER ACCOUNT NUMBER
+244A OCR DOUBLE BACKSLASH
+2460 CIRCLED DIGIT ONE
+2461 CIRCLED DIGIT TWO
+2462 CIRCLED DIGIT THREE
+2463 CIRCLED DIGIT FOUR
+2464 CIRCLED DIGIT FIVE
+2465 CIRCLED DIGIT SIX
+2466 CIRCLED DIGIT SEVEN
+2467 CIRCLED DIGIT EIGHT
+2468 CIRCLED DIGIT NINE
+2469 CIRCLED NUMBER TEN
+246A CIRCLED NUMBER ELEVEN
+246B CIRCLED NUMBER TWELVE
+246C CIRCLED NUMBER THIRTEEN
+246D CIRCLED NUMBER FOURTEEN
+246E CIRCLED NUMBER FIFTEEN
+246F CIRCLED NUMBER SIXTEEN
+2470 CIRCLED NUMBER SEVENTEEN
+2471 CIRCLED NUMBER EIGHTEEN
+2472 CIRCLED NUMBER NINETEEN
+2473 CIRCLED NUMBER TWENTY
+2474 PARENTHESIZED DIGIT ONE
+2475 PARENTHESIZED DIGIT TWO
+2476 PARENTHESIZED DIGIT THREE
+2477 PARENTHESIZED DIGIT FOUR
+2478 PARENTHESIZED DIGIT FIVE
+2479 PARENTHESIZED DIGIT SIX
+247A PARENTHESIZED DIGIT SEVEN
+247B PARENTHESIZED DIGIT EIGHT
+247C PARENTHESIZED DIGIT NINE
+247D PARENTHESIZED NUMBER TEN
+247E PARENTHESIZED NUMBER ELEVEN
+247F PARENTHESIZED NUMBER TWELVE
+2480 PARENTHESIZED NUMBER THIRTEEN
+2481 PARENTHESIZED NUMBER FOURTEEN
+2482 PARENTHESIZED NUMBER FIFTEEN
+2483 PARENTHESIZED NUMBER SIXTEEN
+2484 PARENTHESIZED NUMBER SEVENTEEN
+2485 PARENTHESIZED NUMBER EIGHTEEN
+2486 PARENTHESIZED NUMBER NINETEEN
+2487 PARENTHESIZED NUMBER TWENTY
+2488 DIGIT ONE FULL STOP
+2489 DIGIT TWO FULL STOP
+248A DIGIT THREE FULL STOP
+248B DIGIT FOUR FULL STOP
+248C DIGIT FIVE FULL STOP
+248D DIGIT SIX FULL STOP
+248E DIGIT SEVEN FULL STOP
+248F DIGIT EIGHT FULL STOP
+2490 DIGIT NINE FULL STOP
+2491 NUMBER TEN FULL STOP
+2492 NUMBER ELEVEN FULL STOP
+2493 NUMBER TWELVE FULL STOP
+2494 NUMBER THIRTEEN FULL STOP
+2495 NUMBER FOURTEEN FULL STOP
+2496 NUMBER FIFTEEN FULL STOP
+2497 NUMBER SIXTEEN FULL STOP
+2498 NUMBER SEVENTEEN FULL STOP
+2499 NUMBER EIGHTEEN FULL STOP
+249A NUMBER NINETEEN FULL STOP
+249B NUMBER TWENTY FULL STOP
+249C PARENTHESIZED LATIN SMALL LETTER A
+249D PARENTHESIZED LATIN SMALL LETTER B
+249E PARENTHESIZED LATIN SMALL LETTER C
+249F PARENTHESIZED LATIN SMALL LETTER D
+24A0 PARENTHESIZED LATIN SMALL LETTER E
+24A1 PARENTHESIZED LATIN SMALL LETTER F
+24A2 PARENTHESIZED LATIN SMALL LETTER G
+24A3 PARENTHESIZED LATIN SMALL LETTER H
+24A4 PARENTHESIZED LATIN SMALL LETTER I
+24A5 PARENTHESIZED LATIN SMALL LETTER J
+24A6 PARENTHESIZED LATIN SMALL LETTER K
+24A7 PARENTHESIZED LATIN SMALL LETTER L
+24A8 PARENTHESIZED LATIN SMALL LETTER M
+24A9 PARENTHESIZED LATIN SMALL LETTER N
+24AA PARENTHESIZED LATIN SMALL LETTER O
+24AB PARENTHESIZED LATIN SMALL LETTER P
+24AC PARENTHESIZED LATIN SMALL LETTER Q
+24AD PARENTHESIZED LATIN SMALL LETTER R
+24AE PARENTHESIZED LATIN SMALL LETTER S
+24AF PARENTHESIZED LATIN SMALL LETTER T
+24B0 PARENTHESIZED LATIN SMALL LETTER U
+24B1 PARENTHESIZED LATIN SMALL LETTER V
+24B2 PARENTHESIZED LATIN SMALL LETTER W
+24B3 PARENTHESIZED LATIN SMALL LETTER X
+24B4 PARENTHESIZED LATIN SMALL LETTER Y
+24B5 PARENTHESIZED LATIN SMALL LETTER Z
+24B6 CIRCLED LATIN CAPITAL LETTER A
+24B7 CIRCLED LATIN CAPITAL LETTER B
+24B8 CIRCLED LATIN CAPITAL LETTER C
+24B9 CIRCLED LATIN CAPITAL LETTER D
+24BA CIRCLED LATIN CAPITAL LETTER E
+24BB CIRCLED LATIN CAPITAL LETTER F
+24BC CIRCLED LATIN CAPITAL LETTER G
+24BD CIRCLED LATIN CAPITAL LETTER H
+24BE CIRCLED LATIN CAPITAL LETTER I
+24BF CIRCLED LATIN CAPITAL LETTER J
+24C0 CIRCLED LATIN CAPITAL LETTER K
+24C1 CIRCLED LATIN CAPITAL LETTER L
+24C2 CIRCLED LATIN CAPITAL LETTER M
+24C3 CIRCLED LATIN CAPITAL LETTER N
+24C4 CIRCLED LATIN CAPITAL LETTER O
+24C5 CIRCLED LATIN CAPITAL LETTER P
+24C6 CIRCLED LATIN CAPITAL LETTER Q
+24C7 CIRCLED LATIN CAPITAL LETTER R
+24C8 CIRCLED LATIN CAPITAL LETTER S
+24C9 CIRCLED LATIN CAPITAL LETTER T
+24CA CIRCLED LATIN CAPITAL LETTER U
+24CB CIRCLED LATIN CAPITAL LETTER V
+24CC CIRCLED LATIN CAPITAL LETTER W
+24CD CIRCLED LATIN CAPITAL LETTER X
+24CE CIRCLED LATIN CAPITAL LETTER Y
+24CF CIRCLED LATIN CAPITAL LETTER Z
+24D0 CIRCLED LATIN SMALL LETTER A
+24D1 CIRCLED LATIN SMALL LETTER B
+24D2 CIRCLED LATIN SMALL LETTER C
+24D3 CIRCLED LATIN SMALL LETTER D
+24D4 CIRCLED LATIN SMALL LETTER E
+24D5 CIRCLED LATIN SMALL LETTER F
+24D6 CIRCLED LATIN SMALL LETTER G
+24D7 CIRCLED LATIN SMALL LETTER H
+24D8 CIRCLED LATIN SMALL LETTER I
+24D9 CIRCLED LATIN SMALL LETTER J
+24DA CIRCLED LATIN SMALL LETTER K
+24DB CIRCLED LATIN SMALL LETTER L
+24DC CIRCLED LATIN SMALL LETTER M
+24DD CIRCLED LATIN SMALL LETTER N
+24DE CIRCLED LATIN SMALL LETTER O
+24DF CIRCLED LATIN SMALL LETTER P
+24E0 CIRCLED LATIN SMALL LETTER Q
+24E1 CIRCLED LATIN SMALL LETTER R
+24E2 CIRCLED LATIN SMALL LETTER S
+24E3 CIRCLED LATIN SMALL LETTER T
+24E4 CIRCLED LATIN SMALL LETTER U
+24E5 CIRCLED LATIN SMALL LETTER V
+24E6 CIRCLED LATIN SMALL LETTER W
+24E7 CIRCLED LATIN SMALL LETTER X
+24E8 CIRCLED LATIN SMALL LETTER Y
+24E9 CIRCLED LATIN SMALL LETTER Z
+24EA CIRCLED DIGIT ZERO
+24EB NEGATIVE CIRCLED NUMBER ELEVEN
+24EC NEGATIVE CIRCLED NUMBER TWELVE
+24ED NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3 NEGATIVE CIRCLED NUMBER NINETEEN
+24F4 NEGATIVE CIRCLED NUMBER TWENTY
+24F5 DOUBLE CIRCLED DIGIT ONE
+24F6 DOUBLE CIRCLED DIGIT TWO
+24F7 DOUBLE CIRCLED DIGIT THREE
+24F8 DOUBLE CIRCLED DIGIT FOUR
+24F9 DOUBLE CIRCLED DIGIT FIVE
+24FA DOUBLE CIRCLED DIGIT SIX
+24FB DOUBLE CIRCLED DIGIT SEVEN
+24FC DOUBLE CIRCLED DIGIT EIGHT
+24FD DOUBLE CIRCLED DIGIT NINE
+24FE DOUBLE CIRCLED NUMBER TEN
+24FF NEGATIVE CIRCLED DIGIT ZERO
+2500 BOX DRAWINGS LIGHT HORIZONTAL
+2501 BOX DRAWINGS HEAVY HORIZONTAL
+2502 BOX DRAWINGS LIGHT VERTICAL
+2503 BOX DRAWINGS HEAVY VERTICAL
+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C BOX DRAWINGS LIGHT DOWN AND RIGHT
+250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513 BOX DRAWINGS HEAVY DOWN AND LEFT
+2514 BOX DRAWINGS LIGHT UP AND RIGHT
+2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517 BOX DRAWINGS HEAVY UP AND RIGHT
+2518 BOX DRAWINGS LIGHT UP AND LEFT
+2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B BOX DRAWINGS HEAVY UP AND LEFT
+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550 BOX DRAWINGS DOUBLE HORIZONTAL
+2551 BOX DRAWINGS DOUBLE VERTICAL
+2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A BOX DRAWINGS DOUBLE UP AND RIGHT
+255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D BOX DRAWINGS DOUBLE UP AND LEFT
+255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573 BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574 BOX DRAWINGS LIGHT LEFT
+2575 BOX DRAWINGS LIGHT UP
+2576 BOX DRAWINGS LIGHT RIGHT
+2577 BOX DRAWINGS LIGHT DOWN
+2578 BOX DRAWINGS HEAVY LEFT
+2579 BOX DRAWINGS HEAVY UP
+257A BOX DRAWINGS HEAVY RIGHT
+257B BOX DRAWINGS HEAVY DOWN
+257C BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+2580 UPPER HALF BLOCK
+2581 LOWER ONE EIGHTH BLOCK
+2582 LOWER ONE QUARTER BLOCK
+2583 LOWER THREE EIGHTHS BLOCK
+2584 LOWER HALF BLOCK
+2585 LOWER FIVE EIGHTHS BLOCK
+2586 LOWER THREE QUARTERS BLOCK
+2587 LOWER SEVEN EIGHTHS BLOCK
+2588 FULL BLOCK
+2589 LEFT SEVEN EIGHTHS BLOCK
+258A LEFT THREE QUARTERS BLOCK
+258B LEFT FIVE EIGHTHS BLOCK
+258C LEFT HALF BLOCK
+258D LEFT THREE EIGHTHS BLOCK
+258E LEFT ONE QUARTER BLOCK
+258F LEFT ONE EIGHTH BLOCK
+2590 RIGHT HALF BLOCK
+2591 LIGHT SHADE
+2592 MEDIUM SHADE
+2593 DARK SHADE
+2594 UPPER ONE EIGHTH BLOCK
+2595 RIGHT ONE EIGHTH BLOCK
+2596 QUADRANT LOWER LEFT
+2597 QUADRANT LOWER RIGHT
+2598 QUADRANT UPPER LEFT
+2599 QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A QUADRANT UPPER LEFT AND LOWER RIGHT
+259B QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D QUADRANT UPPER RIGHT
+259E QUADRANT UPPER RIGHT AND LOWER LEFT
+259F QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0 BLACK SQUARE
+25A1 WHITE SQUARE
+25A2 WHITE SQUARE WITH ROUNDED CORNERS
+25A3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4 SQUARE WITH HORIZONTAL FILL
+25A5 SQUARE WITH VERTICAL FILL
+25A6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9 SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA BLACK SMALL SQUARE
+25AB WHITE SMALL SQUARE
+25AC BLACK RECTANGLE
+25AD WHITE RECTANGLE
+25AE BLACK VERTICAL RECTANGLE
+25AF WHITE VERTICAL RECTANGLE
+25B0 BLACK PARALLELOGRAM
+25B1 WHITE PARALLELOGRAM
+25B2 BLACK UP-POINTING TRIANGLE
+25B3 WHITE UP-POINTING TRIANGLE
+25B4 BLACK UP-POINTING SMALL TRIANGLE
+25B5 WHITE UP-POINTING SMALL TRIANGLE
+25B6 BLACK RIGHT-POINTING TRIANGLE
+25B7 WHITE RIGHT-POINTING TRIANGLE
+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE
+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA BLACK RIGHT-POINTING POINTER
+25BB WHITE RIGHT-POINTING POINTER
+25BC BLACK DOWN-POINTING TRIANGLE
+25BD WHITE DOWN-POINTING TRIANGLE
+25BE BLACK DOWN-POINTING SMALL TRIANGLE
+25BF WHITE DOWN-POINTING SMALL TRIANGLE
+25C0 BLACK LEFT-POINTING TRIANGLE
+25C1 WHITE LEFT-POINTING TRIANGLE
+25C2 BLACK LEFT-POINTING SMALL TRIANGLE
+25C3 WHITE LEFT-POINTING SMALL TRIANGLE
+25C4 BLACK LEFT-POINTING POINTER
+25C5 WHITE LEFT-POINTING POINTER
+25C6 BLACK DIAMOND
+25C7 WHITE DIAMOND
+25C8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9 FISHEYE
+25CA LOZENGE
+25CB WHITE CIRCLE
+25CC DOTTED CIRCLE
+25CD CIRCLE WITH VERTICAL FILL
+25CE BULLSEYE
+25CF BLACK CIRCLE
+25D0 CIRCLE WITH LEFT HALF BLACK
+25D1 CIRCLE WITH RIGHT HALF BLACK
+25D2 CIRCLE WITH LOWER HALF BLACK
+25D3 CIRCLE WITH UPPER HALF BLACK
+25D4 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6 LEFT HALF BLACK CIRCLE
+25D7 RIGHT HALF BLACK CIRCLE
+25D8 INVERSE BULLET
+25D9 INVERSE WHITE CIRCLE
+25DA UPPER HALF INVERSE WHITE CIRCLE
+25DB LOWER HALF INVERSE WHITE CIRCLE
+25DC UPPER LEFT QUADRANT CIRCULAR ARC
+25DD UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF LOWER LEFT QUADRANT CIRCULAR ARC
+25E0 UPPER HALF CIRCLE
+25E1 LOWER HALF CIRCLE
+25E2 BLACK LOWER RIGHT TRIANGLE
+25E3 BLACK LOWER LEFT TRIANGLE
+25E4 BLACK UPPER LEFT TRIANGLE
+25E5 BLACK UPPER RIGHT TRIANGLE
+25E6 WHITE BULLET
+25E7 SQUARE WITH LEFT HALF BLACK
+25E8 SQUARE WITH RIGHT HALF BLACK
+25E9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC WHITE UP-POINTING TRIANGLE WITH DOT
+25ED UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF LARGE CIRCLE
+25F0 WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1 WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8 UPPER LEFT TRIANGLE
+25F9 UPPER RIGHT TRIANGLE
+25FA LOWER LEFT TRIANGLE
+25FB WHITE MEDIUM SQUARE
+25FC BLACK MEDIUM SQUARE
+25FD WHITE MEDIUM SMALL SQUARE
+25FE BLACK MEDIUM SMALL SQUARE
+25FF LOWER RIGHT TRIANGLE
+2600 BLACK SUN WITH RAYS
+2601 CLOUD
+2602 UMBRELLA
+2603 SNOWMAN
+2604 COMET
+2605 BLACK STAR
+2606 WHITE STAR
+2607 LIGHTNING
+2608 THUNDERSTORM
+2609 SUN
+260A ASCENDING NODE
+260B DESCENDING NODE
+260C CONJUNCTION
+260D OPPOSITION
+260E BLACK TELEPHONE
+260F WHITE TELEPHONE
+2610 BALLOT BOX
+2611 BALLOT BOX WITH CHECK
+2612 BALLOT BOX WITH X
+2613 SALTIRE
+2614 UMBRELLA WITH RAIN DROPS
+2615 HOT BEVERAGE
+2616 WHITE SHOGI PIECE
+2617 BLACK SHOGI PIECE
+2618 SHAMROCK
+2619 REVERSED ROTATED FLORAL HEART BULLET
+261A BLACK LEFT POINTING INDEX
+261B BLACK RIGHT POINTING INDEX
+261C WHITE LEFT POINTING INDEX
+261D WHITE UP POINTING INDEX
+261E WHITE RIGHT POINTING INDEX
+261F WHITE DOWN POINTING INDEX
+2620 SKULL AND CROSSBONES
+2621 CAUTION SIGN
+2622 RADIOACTIVE SIGN
+2623 BIOHAZARD SIGN
+2624 CADUCEUS
+2625 ANKH
+2626 ORTHODOX CROSS
+2627 CHI RHO
+2628 CROSS OF LORRAINE
+2629 CROSS OF JERUSALEM
+262A STAR AND CRESCENT
+262B FARSI SYMBOL
+262C ADI SHAKTI
+262D HAMMER AND SICKLE
+262E PEACE SYMBOL
+262F YIN YANG
+2630 TRIGRAM FOR HEAVEN
+2631 TRIGRAM FOR LAKE
+2632 TRIGRAM FOR FIRE
+2633 TRIGRAM FOR THUNDER
+2634 TRIGRAM FOR WIND
+2635 TRIGRAM FOR WATER
+2636 TRIGRAM FOR MOUNTAIN
+2637 TRIGRAM FOR EARTH
+2638 WHEEL OF DHARMA
+2639 WHITE FROWNING FACE
+263A WHITE SMILING FACE
+263B BLACK SMILING FACE
+263C WHITE SUN WITH RAYS
+263D FIRST QUARTER MOON
+263E LAST QUARTER MOON
+263F MERCURY
+2640 FEMALE SIGN
+2641 EARTH
+2642 MALE SIGN
+2643 JUPITER
+2644 SATURN
+2645 URANUS
+2646 NEPTUNE
+2647 PLUTO
+2648 ARIES
+2649 TAURUS
+264A GEMINI
+264B CANCER
+264C LEO
+264D VIRGO
+264E LIBRA
+264F SCORPIUS
+2650 SAGITTARIUS
+2651 CAPRICORN
+2652 AQUARIUS
+2653 PISCES
+2654 WHITE CHESS KING
+2655 WHITE CHESS QUEEN
+2656 WHITE CHESS ROOK
+2657 WHITE CHESS BISHOP
+2658 WHITE CHESS KNIGHT
+2659 WHITE CHESS PAWN
+265A BLACK CHESS KING
+265B BLACK CHESS QUEEN
+265C BLACK CHESS ROOK
+265D BLACK CHESS BISHOP
+265E BLACK CHESS KNIGHT
+265F BLACK CHESS PAWN
+2660 BLACK SPADE SUIT
+2661 WHITE HEART SUIT
+2662 WHITE DIAMOND SUIT
+2663 BLACK CLUB SUIT
+2664 WHITE SPADE SUIT
+2665 BLACK HEART SUIT
+2666 BLACK DIAMOND SUIT
+2667 WHITE CLUB SUIT
+2668 HOT SPRINGS
+2669 QUARTER NOTE
+266A EIGHTH NOTE
+266B BEAMED EIGHTH NOTES
+266C BEAMED SIXTEENTH NOTES
+266D MUSIC FLAT SIGN
+266E MUSIC NATURAL SIGN
+266F MUSIC SHARP SIGN
+2670 WEST SYRIAC CROSS
+2671 EAST SYRIAC CROSS
+2672 UNIVERSAL RECYCLING SYMBOL
+2673 RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+2674 RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+2675 RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+2676 RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+2677 RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+2678 RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+2679 RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+267A RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B BLACK UNIVERSAL RECYCLING SYMBOL
+267C RECYCLED PAPER SYMBOL
+267D PARTIALLY-RECYCLED PAPER SYMBOL
+267E PERMANENT PAPER SIGN
+267F WHEELCHAIR SYMBOL
+2680 DIE FACE-1
+2681 DIE FACE-2
+2682 DIE FACE-3
+2683 DIE FACE-4
+2684 DIE FACE-5
+2685 DIE FACE-6
+2686 WHITE CIRCLE WITH DOT RIGHT
+2687 WHITE CIRCLE WITH TWO DOTS
+2688 BLACK CIRCLE WITH WHITE DOT RIGHT
+2689 BLACK CIRCLE WITH TWO WHITE DOTS
+268A MONOGRAM FOR YANG
+268B MONOGRAM FOR YIN
+268C DIGRAM FOR GREATER YANG
+268D DIGRAM FOR LESSER YIN
+268E DIGRAM FOR LESSER YANG
+268F DIGRAM FOR GREATER YIN
+2690 WHITE FLAG
+2691 BLACK FLAG
+2692 HAMMER AND PICK
+2693 ANCHOR
+2694 CROSSED SWORDS
+2695 STAFF OF AESCULAPIUS
+2696 SCALES
+2697 ALEMBIC
+2698 FLOWER
+2699 GEAR
+269A STAFF OF HERMES
+269B ATOM SYMBOL
+269C FLEUR-DE-LIS
+26A0 WARNING SIGN
+26A1 HIGH VOLTAGE SIGN
+26A2 DOUBLED FEMALE SIGN
+26A3 DOUBLED MALE SIGN
+26A4 INTERLOCKED FEMALE AND MALE SIGN
+26A5 MALE AND FEMALE SIGN
+26A6 MALE WITH STROKE SIGN
+26A7 MALE WITH STROKE AND MALE AND FEMALE SIGN
+26A8 VERTICAL MALE WITH STROKE SIGN
+26A9 HORIZONTAL MALE WITH STROKE SIGN
+26AA MEDIUM WHITE CIRCLE
+26AB MEDIUM BLACK CIRCLE
+26AC MEDIUM SMALL WHITE CIRCLE
+26AD MARRIAGE SYMBOL
+26AE DIVORCE SYMBOL
+26AF UNMARRIED PARTNERSHIP SYMBOL
+26B0 COFFIN
+26B1 FUNERAL URN
+2701 UPPER BLADE SCISSORS
+2702 BLACK SCISSORS
+2703 LOWER BLADE SCISSORS
+2704 WHITE SCISSORS
+2706 TELEPHONE LOCATION SIGN
+2707 TAPE DRIVE
+2708 AIRPLANE
+2709 ENVELOPE
+270C VICTORY HAND
+270D WRITING HAND
+270E LOWER RIGHT PENCIL
+270F PENCIL
+2710 UPPER RIGHT PENCIL
+2711 WHITE NIB
+2712 BLACK NIB
+2713 CHECK MARK
+2714 HEAVY CHECK MARK
+2715 MULTIPLICATION X
+2716 HEAVY MULTIPLICATION X
+2717 BALLOT X
+2718 HEAVY BALLOT X
+2719 OUTLINED GREEK CROSS
+271A HEAVY GREEK CROSS
+271B OPEN CENTRE CROSS
+271C HEAVY OPEN CENTRE CROSS
+271D LATIN CROSS
+271E SHADOWED WHITE LATIN CROSS
+271F OUTLINED LATIN CROSS
+2720 MALTESE CROSS
+2721 STAR OF DAVID
+2722 FOUR TEARDROP-SPOKED ASTERISK
+2723 FOUR BALLOON-SPOKED ASTERISK
+2724 HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725 FOUR CLUB-SPOKED ASTERISK
+2726 BLACK FOUR POINTED STAR
+2727 WHITE FOUR POINTED STAR
+2729 STRESS OUTLINED WHITE STAR
+272A CIRCLED WHITE STAR
+272B OPEN CENTRE BLACK STAR
+272C BLACK CENTRE WHITE STAR
+272D OUTLINED BLACK STAR
+272E HEAVY OUTLINED BLACK STAR
+272F PINWHEEL STAR
+2730 SHADOWED WHITE STAR
+2731 HEAVY ASTERISK
+2732 OPEN CENTRE ASTERISK
+2733 EIGHT SPOKED ASTERISK
+2734 EIGHT POINTED BLACK STAR
+2735 EIGHT POINTED PINWHEEL STAR
+2736 SIX POINTED BLACK STAR
+2737 EIGHT POINTED RECTILINEAR BLACK STAR
+2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739 TWELVE POINTED BLACK STAR
+273A SIXTEEN POINTED ASTERISK
+273B TEARDROP-SPOKED ASTERISK
+273C OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D HEAVY TEARDROP-SPOKED ASTERISK
+273E SIX PETALLED BLACK AND WHITE FLORETTE
+273F BLACK FLORETTE
+2740 WHITE FLORETTE
+2741 EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744 SNOWFLAKE
+2745 TIGHT TRIFOLIATE SNOWFLAKE
+2746 HEAVY CHEVRON SNOWFLAKE
+2747 SPARKLE
+2748 HEAVY SPARKLE
+2749 BALLOON-SPOKED ASTERISK
+274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D SHADOWED WHITE CIRCLE
+274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751 LOWER RIGHT SHADOWED WHITE SQUARE
+2752 UPPER RIGHT SHADOWED WHITE SQUARE
+2756 BLACK DIAMOND MINUS WHITE X
+2758 LIGHT VERTICAL BAR
+2759 MEDIUM VERTICAL BAR
+275A HEAVY VERTICAL BAR
+275B HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+275C HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+275D HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+275E HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761 CURVED STEM PARAGRAPH SIGN ORNAMENT
+2762 HEAVY EXCLAMATION MARK ORNAMENT
+2763 HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764 HEAVY BLACK HEART
+2765 ROTATED HEAVY BLACK HEART BULLET
+2766 FLORAL HEART
+2767 ROTATED FLORAL HEART BULLET
+2768 MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794 HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798 HEAVY SOUTH EAST ARROW
+2799 HEAVY RIGHTWARDS ARROW
+279A HEAVY NORTH EAST ARROW
+279B DRAFTING POINT RIGHTWARDS ARROW
+279C HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D TRIANGLE-HEADED RIGHTWARDS ARROW
+279E HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1 BLACK RIGHTWARDS ARROW
+27A2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4 BLACK RIGHTWARDS ARROWHEAD
+27A5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7 SQUAT BLACK RIGHTWARDS ARROW
+27A8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3 WHITE-FEATHERED RIGHTWARDS ARROW
+27B4 BLACK-FEATHERED SOUTH EAST ARROW
+27B5 BLACK-FEATHERED RIGHTWARDS ARROW
+27B6 BLACK-FEATHERED NORTH EAST ARROW
+27B7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA TEARDROP-BARBED RIGHTWARDS ARROW
+27BB HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC WEDGE-TAILED RIGHTWARDS ARROW
+27BD HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE OPEN-OUTLINED RIGHTWARDS ARROW
+27C0 THREE DIMENSIONAL ANGLE
+27C1 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+27C2 PERPENDICULAR
+27C3 OPEN SUBSET
+27C4 OPEN SUPERSET
+27C5 LEFT S-SHAPED BAG DELIMITER
+27C6 RIGHT S-SHAPED BAG DELIMITER
+27D0 WHITE DIAMOND WITH CENTRED DOT
+27D1 AND WITH DOT
+27D2 ELEMENT OF OPENING UPWARDS
+27D3 LOWER RIGHT CORNER WITH DOT
+27D4 UPPER LEFT CORNER WITH DOT
+27D5 LEFT OUTER JOIN
+27D6 RIGHT OUTER JOIN
+27D7 FULL OUTER JOIN
+27D8 LARGE UP TACK
+27D9 LARGE DOWN TACK
+27DA LEFT AND RIGHT DOUBLE TURNSTILE
+27DB LEFT AND RIGHT TACK
+27DC LEFT MULTIMAP
+27DD LONG RIGHT TACK
+27DE LONG LEFT TACK
+27DF UP TACK WITH CIRCLE ABOVE
+27E0 LOZENGE DIVIDED BY HORIZONTAL RULE
+27E1 WHITE CONCAVE-SIDED DIAMOND
+27E2 WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+27E3 WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+27E4 WHITE SQUARE WITH LEFTWARDS TICK
+27E5 WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 MATHEMATICAL LEFT ANGLE BRACKET
+27E9 MATHEMATICAL RIGHT ANGLE BRACKET
+27EA MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0 UPWARDS QUADRUPLE ARROW
+27F1 DOWNWARDS QUADRUPLE ARROW
+27F2 ANTICLOCKWISE GAPPED CIRCLE ARROW
+27F3 CLOCKWISE GAPPED CIRCLE ARROW
+27F4 RIGHT ARROW WITH CIRCLED PLUS
+27F5 LONG LEFTWARDS ARROW
+27F6 LONG RIGHTWARDS ARROW
+27F7 LONG LEFT RIGHT ARROW
+27F8 LONG LEFTWARDS DOUBLE ARROW
+27F9 LONG RIGHTWARDS DOUBLE ARROW
+27FA LONG LEFT RIGHT DOUBLE ARROW
+27FB LONG LEFTWARDS ARROW FROM BAR
+27FC LONG RIGHTWARDS ARROW FROM BAR
+27FD LONG LEFTWARDS DOUBLE ARROW FROM BAR
+27FE LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+27FF LONG RIGHTWARDS SQUIGGLE ARROW
+2800 BRAILLE PATTERN BLANK
+2801 BRAILLE PATTERN DOTS-1
+2802 BRAILLE PATTERN DOTS-2
+2803 BRAILLE PATTERN DOTS-12
+2804 BRAILLE PATTERN DOTS-3
+2805 BRAILLE PATTERN DOTS-13
+2806 BRAILLE PATTERN DOTS-23
+2807 BRAILLE PATTERN DOTS-123
+2808 BRAILLE PATTERN DOTS-4
+2809 BRAILLE PATTERN DOTS-14
+280A BRAILLE PATTERN DOTS-24
+280B BRAILLE PATTERN DOTS-124
+280C BRAILLE PATTERN DOTS-34
+280D BRAILLE PATTERN DOTS-134
+280E BRAILLE PATTERN DOTS-234
+280F BRAILLE PATTERN DOTS-1234
+2810 BRAILLE PATTERN DOTS-5
+2811 BRAILLE PATTERN DOTS-15
+2812 BRAILLE PATTERN DOTS-25
+2813 BRAILLE PATTERN DOTS-125
+2814 BRAILLE PATTERN DOTS-35
+2815 BRAILLE PATTERN DOTS-135
+2816 BRAILLE PATTERN DOTS-235
+2817 BRAILLE PATTERN DOTS-1235
+2818 BRAILLE PATTERN DOTS-45
+2819 BRAILLE PATTERN DOTS-145
+281A BRAILLE PATTERN DOTS-245
+281B BRAILLE PATTERN DOTS-1245
+281C BRAILLE PATTERN DOTS-345
+281D BRAILLE PATTERN DOTS-1345
+281E BRAILLE PATTERN DOTS-2345
+281F BRAILLE PATTERN DOTS-12345
+2820 BRAILLE PATTERN DOTS-6
+2821 BRAILLE PATTERN DOTS-16
+2822 BRAILLE PATTERN DOTS-26
+2823 BRAILLE PATTERN DOTS-126
+2824 BRAILLE PATTERN DOTS-36
+2825 BRAILLE PATTERN DOTS-136
+2826 BRAILLE PATTERN DOTS-236
+2827 BRAILLE PATTERN DOTS-1236
+2828 BRAILLE PATTERN DOTS-46
+2829 BRAILLE PATTERN DOTS-146
+282A BRAILLE PATTERN DOTS-246
+282B BRAILLE PATTERN DOTS-1246
+282C BRAILLE PATTERN DOTS-346
+282D BRAILLE PATTERN DOTS-1346
+282E BRAILLE PATTERN DOTS-2346
+282F BRAILLE PATTERN DOTS-12346
+2830 BRAILLE PATTERN DOTS-56
+2831 BRAILLE PATTERN DOTS-156
+2832 BRAILLE PATTERN DOTS-256
+2833 BRAILLE PATTERN DOTS-1256
+2834 BRAILLE PATTERN DOTS-356
+2835 BRAILLE PATTERN DOTS-1356
+2836 BRAILLE PATTERN DOTS-2356
+2837 BRAILLE PATTERN DOTS-12356
+2838 BRAILLE PATTERN DOTS-456
+2839 BRAILLE PATTERN DOTS-1456
+283A BRAILLE PATTERN DOTS-2456
+283B BRAILLE PATTERN DOTS-12456
+283C BRAILLE PATTERN DOTS-3456
+283D BRAILLE PATTERN DOTS-13456
+283E BRAILLE PATTERN DOTS-23456
+283F BRAILLE PATTERN DOTS-123456
+2840 BRAILLE PATTERN DOTS-7
+2841 BRAILLE PATTERN DOTS-17
+2842 BRAILLE PATTERN DOTS-27
+2843 BRAILLE PATTERN DOTS-127
+2844 BRAILLE PATTERN DOTS-37
+2845 BRAILLE PATTERN DOTS-137
+2846 BRAILLE PATTERN DOTS-237
+2847 BRAILLE PATTERN DOTS-1237
+2848 BRAILLE PATTERN DOTS-47
+2849 BRAILLE PATTERN DOTS-147
+284A BRAILLE PATTERN DOTS-247
+284B BRAILLE PATTERN DOTS-1247
+284C BRAILLE PATTERN DOTS-347
+284D BRAILLE PATTERN DOTS-1347
+284E BRAILLE PATTERN DOTS-2347
+284F BRAILLE PATTERN DOTS-12347
+2850 BRAILLE PATTERN DOTS-57
+2851 BRAILLE PATTERN DOTS-157
+2852 BRAILLE PATTERN DOTS-257
+2853 BRAILLE PATTERN DOTS-1257
+2854 BRAILLE PATTERN DOTS-357
+2855 BRAILLE PATTERN DOTS-1357
+2856 BRAILLE PATTERN DOTS-2357
+2857 BRAILLE PATTERN DOTS-12357
+2858 BRAILLE PATTERN DOTS-457
+2859 BRAILLE PATTERN DOTS-1457
+285A BRAILLE PATTERN DOTS-2457
+285B BRAILLE PATTERN DOTS-12457
+285C BRAILLE PATTERN DOTS-3457
+285D BRAILLE PATTERN DOTS-13457
+285E BRAILLE PATTERN DOTS-23457
+285F BRAILLE PATTERN DOTS-123457
+2860 BRAILLE PATTERN DOTS-67
+2861 BRAILLE PATTERN DOTS-167
+2862 BRAILLE PATTERN DOTS-267
+2863 BRAILLE PATTERN DOTS-1267
+2864 BRAILLE PATTERN DOTS-367
+2865 BRAILLE PATTERN DOTS-1367
+2866 BRAILLE PATTERN DOTS-2367
+2867 BRAILLE PATTERN DOTS-12367
+2868 BRAILLE PATTERN DOTS-467
+2869 BRAILLE PATTERN DOTS-1467
+286A BRAILLE PATTERN DOTS-2467
+286B BRAILLE PATTERN DOTS-12467
+286C BRAILLE PATTERN DOTS-3467
+286D BRAILLE PATTERN DOTS-13467
+286E BRAILLE PATTERN DOTS-23467
+286F BRAILLE PATTERN DOTS-123467
+2870 BRAILLE PATTERN DOTS-567
+2871 BRAILLE PATTERN DOTS-1567
+2872 BRAILLE PATTERN DOTS-2567
+2873 BRAILLE PATTERN DOTS-12567
+2874 BRAILLE PATTERN DOTS-3567
+2875 BRAILLE PATTERN DOTS-13567
+2876 BRAILLE PATTERN DOTS-23567
+2877 BRAILLE PATTERN DOTS-123567
+2878 BRAILLE PATTERN DOTS-4567
+2879 BRAILLE PATTERN DOTS-14567
+287A BRAILLE PATTERN DOTS-24567
+287B BRAILLE PATTERN DOTS-124567
+287C BRAILLE PATTERN DOTS-34567
+287D BRAILLE PATTERN DOTS-134567
+287E BRAILLE PATTERN DOTS-234567
+287F BRAILLE PATTERN DOTS-1234567
+2880 BRAILLE PATTERN DOTS-8
+2881 BRAILLE PATTERN DOTS-18
+2882 BRAILLE PATTERN DOTS-28
+2883 BRAILLE PATTERN DOTS-128
+2884 BRAILLE PATTERN DOTS-38
+2885 BRAILLE PATTERN DOTS-138
+2886 BRAILLE PATTERN DOTS-238
+2887 BRAILLE PATTERN DOTS-1238
+2888 BRAILLE PATTERN DOTS-48
+2889 BRAILLE PATTERN DOTS-148
+288A BRAILLE PATTERN DOTS-248
+288B BRAILLE PATTERN DOTS-1248
+288C BRAILLE PATTERN DOTS-348
+288D BRAILLE PATTERN DOTS-1348
+288E BRAILLE PATTERN DOTS-2348
+288F BRAILLE PATTERN DOTS-12348
+2890 BRAILLE PATTERN DOTS-58
+2891 BRAILLE PATTERN DOTS-158
+2892 BRAILLE PATTERN DOTS-258
+2893 BRAILLE PATTERN DOTS-1258
+2894 BRAILLE PATTERN DOTS-358
+2895 BRAILLE PATTERN DOTS-1358
+2896 BRAILLE PATTERN DOTS-2358
+2897 BRAILLE PATTERN DOTS-12358
+2898 BRAILLE PATTERN DOTS-458
+2899 BRAILLE PATTERN DOTS-1458
+289A BRAILLE PATTERN DOTS-2458
+289B BRAILLE PATTERN DOTS-12458
+289C BRAILLE PATTERN DOTS-3458
+289D BRAILLE PATTERN DOTS-13458
+289E BRAILLE PATTERN DOTS-23458
+289F BRAILLE PATTERN DOTS-123458
+28A0 BRAILLE PATTERN DOTS-68
+28A1 BRAILLE PATTERN DOTS-168
+28A2 BRAILLE PATTERN DOTS-268
+28A3 BRAILLE PATTERN DOTS-1268
+28A4 BRAILLE PATTERN DOTS-368
+28A5 BRAILLE PATTERN DOTS-1368
+28A6 BRAILLE PATTERN DOTS-2368
+28A7 BRAILLE PATTERN DOTS-12368
+28A8 BRAILLE PATTERN DOTS-468
+28A9 BRAILLE PATTERN DOTS-1468
+28AA BRAILLE PATTERN DOTS-2468
+28AB BRAILLE PATTERN DOTS-12468
+28AC BRAILLE PATTERN DOTS-3468
+28AD BRAILLE PATTERN DOTS-13468
+28AE BRAILLE PATTERN DOTS-23468
+28AF BRAILLE PATTERN DOTS-123468
+28B0 BRAILLE PATTERN DOTS-568
+28B1 BRAILLE PATTERN DOTS-1568
+28B2 BRAILLE PATTERN DOTS-2568
+28B3 BRAILLE PATTERN DOTS-12568
+28B4 BRAILLE PATTERN DOTS-3568
+28B5 BRAILLE PATTERN DOTS-13568
+28B6 BRAILLE PATTERN DOTS-23568
+28B7 BRAILLE PATTERN DOTS-123568
+28B8 BRAILLE PATTERN DOTS-4568
+28B9 BRAILLE PATTERN DOTS-14568
+28BA BRAILLE PATTERN DOTS-24568
+28BB BRAILLE PATTERN DOTS-124568
+28BC BRAILLE PATTERN DOTS-34568
+28BD BRAILLE PATTERN DOTS-134568
+28BE BRAILLE PATTERN DOTS-234568
+28BF BRAILLE PATTERN DOTS-1234568
+28C0 BRAILLE PATTERN DOTS-78
+28C1 BRAILLE PATTERN DOTS-178
+28C2 BRAILLE PATTERN DOTS-278
+28C3 BRAILLE PATTERN DOTS-1278
+28C4 BRAILLE PATTERN DOTS-378
+28C5 BRAILLE PATTERN DOTS-1378
+28C6 BRAILLE PATTERN DOTS-2378
+28C7 BRAILLE PATTERN DOTS-12378
+28C8 BRAILLE PATTERN DOTS-478
+28C9 BRAILLE PATTERN DOTS-1478
+28CA BRAILLE PATTERN DOTS-2478
+28CB BRAILLE PATTERN DOTS-12478
+28CC BRAILLE PATTERN DOTS-3478
+28CD BRAILLE PATTERN DOTS-13478
+28CE BRAILLE PATTERN DOTS-23478
+28CF BRAILLE PATTERN DOTS-123478
+28D0 BRAILLE PATTERN DOTS-578
+28D1 BRAILLE PATTERN DOTS-1578
+28D2 BRAILLE PATTERN DOTS-2578
+28D3 BRAILLE PATTERN DOTS-12578
+28D4 BRAILLE PATTERN DOTS-3578
+28D5 BRAILLE PATTERN DOTS-13578
+28D6 BRAILLE PATTERN DOTS-23578
+28D7 BRAILLE PATTERN DOTS-123578
+28D8 BRAILLE PATTERN DOTS-4578
+28D9 BRAILLE PATTERN DOTS-14578
+28DA BRAILLE PATTERN DOTS-24578
+28DB BRAILLE PATTERN DOTS-124578
+28DC BRAILLE PATTERN DOTS-34578
+28DD BRAILLE PATTERN DOTS-134578
+28DE BRAILLE PATTERN DOTS-234578
+28DF BRAILLE PATTERN DOTS-1234578
+28E0 BRAILLE PATTERN DOTS-678
+28E1 BRAILLE PATTERN DOTS-1678
+28E2 BRAILLE PATTERN DOTS-2678
+28E3 BRAILLE PATTERN DOTS-12678
+28E4 BRAILLE PATTERN DOTS-3678
+28E5 BRAILLE PATTERN DOTS-13678
+28E6 BRAILLE PATTERN DOTS-23678
+28E7 BRAILLE PATTERN DOTS-123678
+28E8 BRAILLE PATTERN DOTS-4678
+28E9 BRAILLE PATTERN DOTS-14678
+28EA BRAILLE PATTERN DOTS-24678
+28EB BRAILLE PATTERN DOTS-124678
+28EC BRAILLE PATTERN DOTS-34678
+28ED BRAILLE PATTERN DOTS-134678
+28EE BRAILLE PATTERN DOTS-234678
+28EF BRAILLE PATTERN DOTS-1234678
+28F0 BRAILLE PATTERN DOTS-5678
+28F1 BRAILLE PATTERN DOTS-15678
+28F2 BRAILLE PATTERN DOTS-25678
+28F3 BRAILLE PATTERN DOTS-125678
+28F4 BRAILLE PATTERN DOTS-35678
+28F5 BRAILLE PATTERN DOTS-135678
+28F6 BRAILLE PATTERN DOTS-235678
+28F7 BRAILLE PATTERN DOTS-1235678
+28F8 BRAILLE PATTERN DOTS-45678
+28F9 BRAILLE PATTERN DOTS-145678
+28FA BRAILLE PATTERN DOTS-245678
+28FB BRAILLE PATTERN DOTS-1245678
+28FC BRAILLE PATTERN DOTS-345678
+28FD BRAILLE PATTERN DOTS-1345678
+28FE BRAILLE PATTERN DOTS-2345678
+28FF BRAILLE PATTERN DOTS-12345678
+2900 RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+2901 RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+2902 LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903 RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904 LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905 RIGHTWARDS TWO-HEADED ARROW FROM BAR
+2906 LEFTWARDS DOUBLE ARROW FROM BAR
+2907 RIGHTWARDS DOUBLE ARROW FROM BAR
+2908 DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909 UPWARDS ARROW WITH HORIZONTAL STROKE
+290A UPWARDS TRIPLE ARROW
+290B DOWNWARDS TRIPLE ARROW
+290C LEFTWARDS DOUBLE DASH ARROW
+290D RIGHTWARDS DOUBLE DASH ARROW
+290E LEFTWARDS TRIPLE DASH ARROW
+290F RIGHTWARDS TRIPLE DASH ARROW
+2910 RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911 RIGHTWARDS ARROW WITH DOTTED STEM
+2912 UPWARDS ARROW TO BAR
+2913 DOWNWARDS ARROW TO BAR
+2914 RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+2915 RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2916 RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+2917 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+2918 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+2919 LEFTWARDS ARROW-TAIL
+291A RIGHTWARDS ARROW-TAIL
+291B LEFTWARDS DOUBLE ARROW-TAIL
+291C RIGHTWARDS DOUBLE ARROW-TAIL
+291D LEFTWARDS ARROW TO BLACK DIAMOND
+291E RIGHTWARDS ARROW TO BLACK DIAMOND
+291F LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920 RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921 NORTH WEST AND SOUTH EAST ARROW
+2922 NORTH EAST AND SOUTH WEST ARROW
+2923 NORTH WEST ARROW WITH HOOK
+2924 NORTH EAST ARROW WITH HOOK
+2925 SOUTH EAST ARROW WITH HOOK
+2926 SOUTH WEST ARROW WITH HOOK
+2927 NORTH WEST ARROW AND NORTH EAST ARROW
+2928 NORTH EAST ARROW AND SOUTH EAST ARROW
+2929 SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A SOUTH WEST ARROW AND NORTH WEST ARROW
+292B RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930 RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931 NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932 NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933 WAVE ARROW POINTING DIRECTLY RIGHT
+2934 ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935 ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937 ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938 RIGHT-SIDE ARC CLOCKWISE ARROW
+2939 LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A TOP ARC ANTICLOCKWISE ARROW
+293B BOTTOM ARC ANTICLOCKWISE ARROW
+293C TOP ARC CLOCKWISE ARROW WITH MINUS
+293D TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940 ANTICLOCKWISE CLOSED CIRCLE ARROW
+2941 CLOCKWISE CLOSED CIRCLE ARROW
+2942 RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943 LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944 SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945 RIGHTWARDS ARROW WITH PLUS BELOW
+2946 LEFTWARDS ARROW WITH PLUS BELOW
+2947 RIGHTWARDS ARROW THROUGH X
+2948 LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949 UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E LEFT BARB UP RIGHT BARB UP HARPOON
+294F UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950 LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951 UP BARB LEFT DOWN BARB LEFT HARPOON
+2952 LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953 RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954 UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955 DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956 LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957 RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958 UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959 DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960 UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961 DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962 LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963 UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964 RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965 DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966 LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967 LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968 RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969 RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970 RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+2971 EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972 TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973 LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974 RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976 LESS-THAN ABOVE LEFTWARDS ARROW
+2977 LEFTWARDS ARROW THROUGH LESS-THAN
+2978 GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979 SUBSET ABOVE RIGHTWARDS ARROW
+297A LEFTWARDS ARROW THROUGH SUBSET
+297B SUPERSET ABOVE LEFTWARDS ARROW
+297C LEFT FISH TAIL
+297D RIGHT FISH TAIL
+297E UP FISH TAIL
+297F DOWN FISH TAIL
+2980 TRIPLE VERTICAL BAR DELIMITER
+2981 Z NOTATION SPOT
+2982 Z NOTATION TYPE COLON
+2983 LEFT WHITE CURLY BRACKET
+2984 RIGHT WHITE CURLY BRACKET
+2985 LEFT WHITE PARENTHESIS
+2986 RIGHT WHITE PARENTHESIS
+2987 Z NOTATION LEFT IMAGE BRACKET
+2988 Z NOTATION RIGHT IMAGE BRACKET
+2989 Z NOTATION LEFT BINDING BRACKET
+298A Z NOTATION RIGHT BINDING BRACKET
+298B LEFT SQUARE BRACKET WITH UNDERBAR
+298C RIGHT SQUARE BRACKET WITH UNDERBAR
+298D LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 LEFT ANGLE BRACKET WITH DOT
+2992 RIGHT ANGLE BRACKET WITH DOT
+2993 LEFT ARC LESS-THAN BRACKET
+2994 RIGHT ARC GREATER-THAN BRACKET
+2995 DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 LEFT BLACK TORTOISE SHELL BRACKET
+2998 RIGHT BLACK TORTOISE SHELL BRACKET
+2999 DOTTED FENCE
+299A VERTICAL ZIGZAG LINE
+299B MEASURED ANGLE OPENING LEFT
+299C RIGHT ANGLE VARIANT WITH SQUARE
+299D MEASURED RIGHT ANGLE WITH DOT
+299E ANGLE WITH S INSIDE
+299F ACUTE ANGLE
+29A0 SPHERICAL ANGLE OPENING LEFT
+29A1 SPHERICAL ANGLE OPENING UP
+29A2 TURNED ANGLE
+29A3 REVERSED ANGLE
+29A4 ANGLE WITH UNDERBAR
+29A5 REVERSED ANGLE WITH UNDERBAR
+29A6 OBLIQUE ANGLE OPENING UP
+29A7 OBLIQUE ANGLE OPENING DOWN
+29A8 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+29B0 REVERSED EMPTY SET
+29B1 EMPTY SET WITH OVERBAR
+29B2 EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3 EMPTY SET WITH RIGHT ARROW ABOVE
+29B4 EMPTY SET WITH LEFT ARROW ABOVE
+29B5 CIRCLE WITH HORIZONTAL BAR
+29B6 CIRCLED VERTICAL BAR
+29B7 CIRCLED PARALLEL
+29B8 CIRCLED REVERSE SOLIDUS
+29B9 CIRCLED PERPENDICULAR
+29BA CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB CIRCLE WITH SUPERIMPOSED X
+29BC CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD UP ARROW THROUGH CIRCLE
+29BE CIRCLED WHITE BULLET
+29BF CIRCLED BULLET
+29C0 CIRCLED LESS-THAN
+29C1 CIRCLED GREATER-THAN
+29C2 CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3 CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+29C4 SQUARED RISING DIAGONAL SLASH
+29C5 SQUARED FALLING DIAGONAL SLASH
+29C6 SQUARED ASTERISK
+29C7 SQUARED SMALL CIRCLE
+29C8 SQUARED SQUARE
+29C9 TWO JOINED SQUARES
+29CA TRIANGLE WITH DOT ABOVE
+29CB TRIANGLE WITH UNDERBAR
+29CC S IN TRIANGLE
+29CD TRIANGLE WITH SERIFS AT BOTTOM
+29CE RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0 VERTICAL BAR BESIDE RIGHT TRIANGLE
+29D1 BOWTIE WITH LEFT HALF BLACK
+29D2 BOWTIE WITH RIGHT HALF BLACK
+29D3 BLACK BOWTIE
+29D4 TIMES WITH LEFT HALF BLACK
+29D5 TIMES WITH RIGHT HALF BLACK
+29D6 WHITE HOURGLASS
+29D7 BLACK HOURGLASS
+29D8 LEFT WIGGLY FENCE
+29D9 RIGHT WIGGLY FENCE
+29DA LEFT DOUBLE WIGGLY FENCE
+29DB RIGHT DOUBLE WIGGLY FENCE
+29DC INCOMPLETE INFINITY
+29DD TIE OVER INFINITY
+29DE INFINITY NEGATED WITH VERTICAL BAR
+29DF DOUBLE-ENDED MULTIMAP
+29E0 SQUARE WITH CONTOURED OUTLINE
+29E1 INCREASES AS
+29E2 SHUFFLE PRODUCT
+29E3 EQUALS SIGN AND SLANTED PARALLEL
+29E4 EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5 IDENTICAL TO AND SLANTED PARALLEL
+29E6 GLEICH STARK
+29E7 THERMODYNAMIC
+29E8 DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+29E9 DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+29EA BLACK DIAMOND WITH DOWN ARROW
+29EB BLACK LOZENGE
+29EC WHITE CIRCLE WITH DOWN ARROW
+29ED BLACK CIRCLE WITH DOWN ARROW
+29EE ERROR-BARRED WHITE SQUARE
+29EF ERROR-BARRED BLACK SQUARE
+29F0 ERROR-BARRED WHITE DIAMOND
+29F1 ERROR-BARRED BLACK DIAMOND
+29F2 ERROR-BARRED WHITE CIRCLE
+29F3 ERROR-BARRED BLACK CIRCLE
+29F4 RULE-DELAYED
+29F5 REVERSE SOLIDUS OPERATOR
+29F6 SOLIDUS WITH OVERBAR
+29F7 REVERSE SOLIDUS WITH HORIZONTAL STROKE
+29F8 BIG SOLIDUS
+29F9 BIG REVERSE SOLIDUS
+29FA DOUBLE PLUS
+29FB TRIPLE PLUS
+29FC LEFT-POINTING CURVED ANGLE BRACKET
+29FD RIGHT-POINTING CURVED ANGLE BRACKET
+29FE TINY
+29FF MINY
+2A00 N-ARY CIRCLED DOT OPERATOR
+2A01 N-ARY CIRCLED PLUS OPERATOR
+2A02 N-ARY CIRCLED TIMES OPERATOR
+2A03 N-ARY UNION OPERATOR WITH DOT
+2A04 N-ARY UNION OPERATOR WITH PLUS
+2A05 N-ARY SQUARE INTERSECTION OPERATOR
+2A06 N-ARY SQUARE UNION OPERATOR
+2A07 TWO LOGICAL AND OPERATOR
+2A08 TWO LOGICAL OR OPERATOR
+2A09 N-ARY TIMES OPERATOR
+2A0A MODULO TWO SUM
+2A0B SUMMATION WITH INTEGRAL
+2A0C QUADRUPLE INTEGRAL OPERATOR
+2A0D FINITE PART INTEGRAL
+2A0E INTEGRAL WITH DOUBLE STROKE
+2A0F INTEGRAL AVERAGE WITH SLASH
+2A10 CIRCULATION FUNCTION
+2A11 ANTICLOCKWISE INTEGRATION
+2A12 LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13 LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14 LINE INTEGRATION NOT INCLUDING THE POLE
+2A15 INTEGRAL AROUND A POINT OPERATOR
+2A16 QUATERNION INTEGRAL OPERATOR
+2A17 INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18 INTEGRAL WITH TIMES SIGN
+2A19 INTEGRAL WITH INTERSECTION
+2A1A INTEGRAL WITH UNION
+2A1B INTEGRAL WITH OVERBAR
+2A1C INTEGRAL WITH UNDERBAR
+2A1D JOIN
+2A1E LARGE LEFT TRIANGLE OPERATOR
+2A1F Z NOTATION SCHEMA COMPOSITION
+2A20 Z NOTATION SCHEMA PIPING
+2A21 Z NOTATION SCHEMA PROJECTION
+2A22 PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23 PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24 PLUS SIGN WITH TILDE ABOVE
+2A25 PLUS SIGN WITH DOT BELOW
+2A26 PLUS SIGN WITH TILDE BELOW
+2A27 PLUS SIGN WITH SUBSCRIPT TWO
+2A28 PLUS SIGN WITH BLACK TRIANGLE
+2A29 MINUS SIGN WITH COMMA ABOVE
+2A2A MINUS SIGN WITH DOT BELOW
+2A2B MINUS SIGN WITH FALLING DOTS
+2A2C MINUS SIGN WITH RISING DOTS
+2A2D PLUS SIGN IN LEFT HALF CIRCLE
+2A2E PLUS SIGN IN RIGHT HALF CIRCLE
+2A2F VECTOR OR CROSS PRODUCT
+2A30 MULTIPLICATION SIGN WITH DOT ABOVE
+2A31 MULTIPLICATION SIGN WITH UNDERBAR
+2A32 SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33 SMASH PRODUCT
+2A34 MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35 MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36 CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37 MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38 CIRCLED DIVISION SIGN
+2A39 PLUS SIGN IN TRIANGLE
+2A3A MINUS SIGN IN TRIANGLE
+2A3B MULTIPLICATION SIGN IN TRIANGLE
+2A3C INTERIOR PRODUCT
+2A3D RIGHTHAND INTERIOR PRODUCT
+2A3E Z NOTATION RELATIONAL COMPOSITION
+2A3F AMALGAMATION OR COPRODUCT
+2A40 INTERSECTION WITH DOT
+2A41 UNION WITH MINUS SIGN
+2A42 UNION WITH OVERBAR
+2A43 INTERSECTION WITH OVERBAR
+2A44 INTERSECTION WITH LOGICAL AND
+2A45 UNION WITH LOGICAL OR
+2A46 UNION ABOVE INTERSECTION
+2A47 INTERSECTION ABOVE UNION
+2A48 UNION ABOVE BAR ABOVE INTERSECTION
+2A49 INTERSECTION ABOVE BAR ABOVE UNION
+2A4A UNION BESIDE AND JOINED WITH UNION
+2A4B INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C CLOSED UNION WITH SERIFS
+2A4D CLOSED INTERSECTION WITH SERIFS
+2A4E DOUBLE SQUARE INTERSECTION
+2A4F DOUBLE SQUARE UNION
+2A50 CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+2A51 LOGICAL AND WITH DOT ABOVE
+2A52 LOGICAL OR WITH DOT ABOVE
+2A53 DOUBLE LOGICAL AND
+2A54 DOUBLE LOGICAL OR
+2A55 TWO INTERSECTING LOGICAL AND
+2A56 TWO INTERSECTING LOGICAL OR
+2A57 SLOPING LARGE OR
+2A58 SLOPING LARGE AND
+2A59 LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A LOGICAL AND WITH MIDDLE STEM
+2A5B LOGICAL OR WITH MIDDLE STEM
+2A5C LOGICAL AND WITH HORIZONTAL DASH
+2A5D LOGICAL OR WITH HORIZONTAL DASH
+2A5E LOGICAL AND WITH DOUBLE OVERBAR
+2A5F LOGICAL AND WITH UNDERBAR
+2A60 LOGICAL AND WITH DOUBLE UNDERBAR
+2A61 SMALL VEE WITH UNDERBAR
+2A62 LOGICAL OR WITH DOUBLE OVERBAR
+2A63 LOGICAL OR WITH DOUBLE UNDERBAR
+2A64 Z NOTATION DOMAIN ANTIRESTRICTION
+2A65 Z NOTATION RANGE ANTIRESTRICTION
+2A66 EQUALS SIGN WITH DOT BELOW
+2A67 IDENTICAL WITH DOT ABOVE
+2A68 TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+2A69 TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A TILDE OPERATOR WITH DOT ABOVE
+2A6B TILDE OPERATOR WITH RISING DOTS
+2A6C SIMILAR MINUS SIMILAR
+2A6D CONGRUENT WITH DOT ABOVE
+2A6E EQUALS WITH ASTERISK
+2A6F ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70 APPROXIMATELY EQUAL OR EQUAL TO
+2A71 EQUALS SIGN ABOVE PLUS SIGN
+2A72 PLUS SIGN ABOVE EQUALS SIGN
+2A73 EQUALS SIGN ABOVE TILDE OPERATOR
+2A74 DOUBLE COLON EQUAL
+2A75 TWO CONSECUTIVE EQUALS SIGNS
+2A76 THREE CONSECUTIVE EQUALS SIGNS
+2A77 EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78 EQUIVALENT WITH FOUR DOTS ABOVE
+2A79 LESS-THAN WITH CIRCLE INSIDE
+2A7A GREATER-THAN WITH CIRCLE INSIDE
+2A7B LESS-THAN WITH QUESTION MARK ABOVE
+2A7C GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D LESS-THAN OR SLANTED EQUAL TO
+2A7E GREATER-THAN OR SLANTED EQUAL TO
+2A7F LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80 GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85 LESS-THAN OR APPROXIMATE
+2A86 GREATER-THAN OR APPROXIMATE
+2A87 LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+2A88 GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+2A89 LESS-THAN AND NOT APPROXIMATE
+2A8A GREATER-THAN AND NOT APPROXIMATE
+2A8B LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+2A8C GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+2A8D LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90 GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91 LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92 GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93 LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94 GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95 SLANTED EQUAL TO OR LESS-THAN
+2A96 SLANTED EQUAL TO OR GREATER-THAN
+2A97 SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98 SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99 DOUBLE-LINE EQUAL TO OR LESS-THAN
+2A9A DOUBLE-LINE EQUAL TO OR GREATER-THAN
+2A9B DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D SIMILAR OR LESS-THAN
+2A9E SIMILAR OR GREATER-THAN
+2A9F SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0 SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1 DOUBLE NESTED LESS-THAN
+2AA2 DOUBLE NESTED GREATER-THAN
+2AA3 DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4 GREATER-THAN OVERLAPPING LESS-THAN
+2AA5 GREATER-THAN BESIDE LESS-THAN
+2AA6 LESS-THAN CLOSED BY CURVE
+2AA7 GREATER-THAN CLOSED BY CURVE
+2AA8 LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9 GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA SMALLER THAN
+2AAB LARGER THAN
+2AAC SMALLER THAN OR EQUAL TO
+2AAD LARGER THAN OR EQUAL TO
+2AAE EQUALS SIGN WITH BUMPY ABOVE
+2AAF PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+2AB0 SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+2AB1 PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2 SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3 PRECEDES ABOVE EQUALS SIGN
+2AB4 SUCCEEDS ABOVE EQUALS SIGN
+2AB5 PRECEDES ABOVE NOT EQUAL TO
+2AB6 SUCCEEDS ABOVE NOT EQUAL TO
+2AB7 PRECEDES ABOVE ALMOST EQUAL TO
+2AB8 SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9 PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB DOUBLE PRECEDES
+2ABC DOUBLE SUCCEEDS
+2ABD SUBSET WITH DOT
+2ABE SUPERSET WITH DOT
+2ABF SUBSET WITH PLUS SIGN BELOW
+2AC0 SUPERSET WITH PLUS SIGN BELOW
+2AC1 SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2 SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3 SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4 SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5 SUBSET OF ABOVE EQUALS SIGN
+2AC6 SUPERSET OF ABOVE EQUALS SIGN
+2AC7 SUBSET OF ABOVE TILDE OPERATOR
+2AC8 SUPERSET OF ABOVE TILDE OPERATOR
+2AC9 SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB SUBSET OF ABOVE NOT EQUAL TO
+2ACC SUPERSET OF ABOVE NOT EQUAL TO
+2ACD SQUARE LEFT OPEN BOX OPERATOR
+2ACE SQUARE RIGHT OPEN BOX OPERATOR
+2ACF CLOSED SUBSET
+2AD0 CLOSED SUPERSET
+2AD1 CLOSED SUBSET OR EQUAL TO
+2AD2 CLOSED SUPERSET OR EQUAL TO
+2AD3 SUBSET ABOVE SUPERSET
+2AD4 SUPERSET ABOVE SUBSET
+2AD5 SUBSET ABOVE SUBSET
+2AD6 SUPERSET ABOVE SUPERSET
+2AD7 SUPERSET BESIDE SUBSET
+2AD8 SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+2AD9 ELEMENT OF OPENING DOWNWARDS
+2ADA PITCHFORK WITH TEE TOP
+2ADB TRANSVERSAL INTERSECTION
+2ADC FORKING
+2ADD NONFORKING
+2ADE SHORT LEFT TACK
+2ADF SHORT DOWN TACK
+2AE0 SHORT UP TACK
+2AE1 PERPENDICULAR WITH S
+2AE2 VERTICAL BAR TRIPLE RIGHT TURNSTILE
+2AE3 DOUBLE VERTICAL BAR LEFT TURNSTILE
+2AE4 VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE5 DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6 LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+2AE7 SHORT DOWN TACK WITH OVERBAR
+2AE8 SHORT UP TACK WITH UNDERBAR
+2AE9 SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA DOUBLE DOWN TACK
+2AEB DOUBLE UP TACK
+2AEC DOUBLE STROKE NOT SIGN
+2AED REVERSED DOUBLE STROKE NOT SIGN
+2AEE DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+2AEF VERTICAL LINE WITH CIRCLE ABOVE
+2AF0 VERTICAL LINE WITH CIRCLE BELOW
+2AF1 DOWN TACK WITH CIRCLE BELOW
+2AF2 PARALLEL WITH HORIZONTAL STROKE
+2AF3 PARALLEL WITH TILDE OPERATOR
+2AF4 TRIPLE VERTICAL BAR BINARY RELATION
+2AF5 TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+2AF6 TRIPLE COLON OPERATOR
+2AF7 TRIPLE NESTED LESS-THAN
+2AF8 TRIPLE NESTED GREATER-THAN
+2AF9 DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+2AFA DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+2AFB TRIPLE SOLIDUS BINARY RELATION
+2AFC LARGE TRIPLE VERTICAL BAR OPERATOR
+2AFD DOUBLE SOLIDUS OPERATOR
+2AFE WHITE VERTICAL BAR
+2AFF N-ARY WHITE VERTICAL BAR
+2B00 NORTH EAST WHITE ARROW
+2B01 NORTH WEST WHITE ARROW
+2B02 SOUTH EAST WHITE ARROW
+2B03 SOUTH WEST WHITE ARROW
+2B04 LEFT RIGHT WHITE ARROW
+2B05 LEFTWARDS BLACK ARROW
+2B06 UPWARDS BLACK ARROW
+2B07 DOWNWARDS BLACK ARROW
+2B08 NORTH EAST BLACK ARROW
+2B09 NORTH WEST BLACK ARROW
+2B0A SOUTH EAST BLACK ARROW
+2B0B SOUTH WEST BLACK ARROW
+2B0C LEFT RIGHT BLACK ARROW
+2B0D UP DOWN BLACK ARROW
+2B0E RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10 LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11 LEFTWARDS ARROW WITH TIP UPWARDS
+2B12 SQUARE WITH TOP HALF BLACK
+2B13 SQUARE WITH BOTTOM HALF BLACK
+2C00 GLAGOLITIC CAPITAL LETTER AZU
+2C01 GLAGOLITIC CAPITAL LETTER BUKY
+2C02 GLAGOLITIC CAPITAL LETTER VEDE
+2C03 GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04 GLAGOLITIC CAPITAL LETTER DOBRO
+2C05 GLAGOLITIC CAPITAL LETTER YESTU
+2C06 GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07 GLAGOLITIC CAPITAL LETTER DZELO
+2C08 GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09 GLAGOLITIC CAPITAL LETTER IZHE
+2C0A GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B GLAGOLITIC CAPITAL LETTER I
+2C0C GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D GLAGOLITIC CAPITAL LETTER KAKO
+2C0E GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10 GLAGOLITIC CAPITAL LETTER NASHI
+2C11 GLAGOLITIC CAPITAL LETTER ONU
+2C12 GLAGOLITIC CAPITAL LETTER POKOJI
+2C13 GLAGOLITIC CAPITAL LETTER RITSI
+2C14 GLAGOLITIC CAPITAL LETTER SLOVO
+2C15 GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16 GLAGOLITIC CAPITAL LETTER UKU
+2C17 GLAGOLITIC CAPITAL LETTER FRITU
+2C18 GLAGOLITIC CAPITAL LETTER HERU
+2C19 GLAGOLITIC CAPITAL LETTER OTU
+2C1A GLAGOLITIC CAPITAL LETTER PE
+2C1B GLAGOLITIC CAPITAL LETTER SHTA
+2C1C GLAGOLITIC CAPITAL LETTER TSI
+2C1D GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E GLAGOLITIC CAPITAL LETTER SHA
+2C1F GLAGOLITIC CAPITAL LETTER YERU
+2C20 GLAGOLITIC CAPITAL LETTER YERI
+2C21 GLAGOLITIC CAPITAL LETTER YATI
+2C22 GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23 GLAGOLITIC CAPITAL LETTER YU
+2C24 GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25 GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26 GLAGOLITIC CAPITAL LETTER YO
+2C27 GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28 GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29 GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A GLAGOLITIC CAPITAL LETTER FITA
+2C2B GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30 GLAGOLITIC SMALL LETTER AZU
+2C31 GLAGOLITIC SMALL LETTER BUKY
+2C32 GLAGOLITIC SMALL LETTER VEDE
+2C33 GLAGOLITIC SMALL LETTER GLAGOLI
+2C34 GLAGOLITIC SMALL LETTER DOBRO
+2C35 GLAGOLITIC SMALL LETTER YESTU
+2C36 GLAGOLITIC SMALL LETTER ZHIVETE
+2C37 GLAGOLITIC SMALL LETTER DZELO
+2C38 GLAGOLITIC SMALL LETTER ZEMLJA
+2C39 GLAGOLITIC SMALL LETTER IZHE
+2C3A GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B GLAGOLITIC SMALL LETTER I
+2C3C GLAGOLITIC SMALL LETTER DJERVI
+2C3D GLAGOLITIC SMALL LETTER KAKO
+2C3E GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F GLAGOLITIC SMALL LETTER MYSLITE
+2C40 GLAGOLITIC SMALL LETTER NASHI
+2C41 GLAGOLITIC SMALL LETTER ONU
+2C42 GLAGOLITIC SMALL LETTER POKOJI
+2C43 GLAGOLITIC SMALL LETTER RITSI
+2C44 GLAGOLITIC SMALL LETTER SLOVO
+2C45 GLAGOLITIC SMALL LETTER TVRIDO
+2C46 GLAGOLITIC SMALL LETTER UKU
+2C47 GLAGOLITIC SMALL LETTER FRITU
+2C48 GLAGOLITIC SMALL LETTER HERU
+2C49 GLAGOLITIC SMALL LETTER OTU
+2C4A GLAGOLITIC SMALL LETTER PE
+2C4B GLAGOLITIC SMALL LETTER SHTA
+2C4C GLAGOLITIC SMALL LETTER TSI
+2C4D GLAGOLITIC SMALL LETTER CHRIVI
+2C4E GLAGOLITIC SMALL LETTER SHA
+2C4F GLAGOLITIC SMALL LETTER YERU
+2C50 GLAGOLITIC SMALL LETTER YERI
+2C51 GLAGOLITIC SMALL LETTER YATI
+2C52 GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53 GLAGOLITIC SMALL LETTER YU
+2C54 GLAGOLITIC SMALL LETTER SMALL YUS
+2C55 GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56 GLAGOLITIC SMALL LETTER YO
+2C57 GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58 GLAGOLITIC SMALL LETTER BIG YUS
+2C59 GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A GLAGOLITIC SMALL LETTER FITA
+2C5B GLAGOLITIC SMALL LETTER IZHITSA
+2C5C GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80 COPTIC CAPITAL LETTER ALFA
+2C81 COPTIC SMALL LETTER ALFA
+2C82 COPTIC CAPITAL LETTER VIDA
+2C83 COPTIC SMALL LETTER VIDA
+2C84 COPTIC CAPITAL LETTER GAMMA
+2C85 COPTIC SMALL LETTER GAMMA
+2C86 COPTIC CAPITAL LETTER DALDA
+2C87 COPTIC SMALL LETTER DALDA
+2C88 COPTIC CAPITAL LETTER EIE
+2C89 COPTIC SMALL LETTER EIE
+2C8A COPTIC CAPITAL LETTER SOU
+2C8B COPTIC SMALL LETTER SOU
+2C8C COPTIC CAPITAL LETTER ZATA
+2C8D COPTIC SMALL LETTER ZATA
+2C8E COPTIC CAPITAL LETTER HATE
+2C8F COPTIC SMALL LETTER HATE
+2C90 COPTIC CAPITAL LETTER THETHE
+2C91 COPTIC SMALL LETTER THETHE
+2C92 COPTIC CAPITAL LETTER IAUDA
+2C93 COPTIC SMALL LETTER IAUDA
+2C94 COPTIC CAPITAL LETTER KAPA
+2C95 COPTIC SMALL LETTER KAPA
+2C96 COPTIC CAPITAL LETTER LAULA
+2C97 COPTIC SMALL LETTER LAULA
+2C98 COPTIC CAPITAL LETTER MI
+2C99 COPTIC SMALL LETTER MI
+2C9A COPTIC CAPITAL LETTER NI
+2C9B COPTIC SMALL LETTER NI
+2C9C COPTIC CAPITAL LETTER KSI
+2C9D COPTIC SMALL LETTER KSI
+2C9E COPTIC CAPITAL LETTER O
+2C9F COPTIC SMALL LETTER O
+2CA0 COPTIC CAPITAL LETTER PI
+2CA1 COPTIC SMALL LETTER PI
+2CA2 COPTIC CAPITAL LETTER RO
+2CA3 COPTIC SMALL LETTER RO
+2CA4 COPTIC CAPITAL LETTER SIMA
+2CA5 COPTIC SMALL LETTER SIMA
+2CA6 COPTIC CAPITAL LETTER TAU
+2CA7 COPTIC SMALL LETTER TAU
+2CA8 COPTIC CAPITAL LETTER UA
+2CA9 COPTIC SMALL LETTER UA
+2CAA COPTIC CAPITAL LETTER FI
+2CAB COPTIC SMALL LETTER FI
+2CAC COPTIC CAPITAL LETTER KHI
+2CAD COPTIC SMALL LETTER KHI
+2CAE COPTIC CAPITAL LETTER PSI
+2CAF COPTIC SMALL LETTER PSI
+2CB0 COPTIC CAPITAL LETTER OOU
+2CB1 COPTIC SMALL LETTER OOU
+2CB2 COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3 COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4 COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5 COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6 COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7 COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8 COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9 COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB COPTIC SMALL LETTER DIALECT-P NI
+2CBC COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0 COPTIC CAPITAL LETTER SAMPI
+2CC1 COPTIC SMALL LETTER SAMPI
+2CC2 COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3 COPTIC SMALL LETTER CROSSED SHEI
+2CC4 COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5 COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6 COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7 COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8 COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9 COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB COPTIC SMALL LETTER DIALECT-P HORI
+2CCC COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF COPTIC SMALL LETTER OLD COPTIC HA
+2CD0 COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1 COPTIC SMALL LETTER L-SHAPED HA
+2CD2 COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3 COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4 COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5 COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6 COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7 COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8 COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9 COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDC COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0 COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1 COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2 COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3 COPTIC SMALL LETTER OLD NUBIAN WAU
+2CE4 COPTIC SYMBOL KAI
+2CE5 COPTIC SYMBOL MI RO
+2CE6 COPTIC SYMBOL PI RO
+2CE7 COPTIC SYMBOL STAUROS
+2CE8 COPTIC SYMBOL TAU RO
+2CE9 COPTIC SYMBOL KHI RO
+2CEA COPTIC SYMBOL SHIMA SIMA
+2CF9 COPTIC OLD NUBIAN FULL STOP
+2CFA COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD COPTIC FRACTION ONE HALF
+2CFE COPTIC FULL STOP
+2CFF COPTIC MORPHOLOGICAL DIVIDER
+2D00 GEORGIAN SMALL LETTER AN
+2D01 GEORGIAN SMALL LETTER BAN
+2D02 GEORGIAN SMALL LETTER GAN
+2D03 GEORGIAN SMALL LETTER DON
+2D04 GEORGIAN SMALL LETTER EN
+2D05 GEORGIAN SMALL LETTER VIN
+2D06 GEORGIAN SMALL LETTER ZEN
+2D07 GEORGIAN SMALL LETTER TAN
+2D08 GEORGIAN SMALL LETTER IN
+2D09 GEORGIAN SMALL LETTER KAN
+2D0A GEORGIAN SMALL LETTER LAS
+2D0B GEORGIAN SMALL LETTER MAN
+2D0C GEORGIAN SMALL LETTER NAR
+2D0D GEORGIAN SMALL LETTER ON
+2D0E GEORGIAN SMALL LETTER PAR
+2D0F GEORGIAN SMALL LETTER ZHAR
+2D10 GEORGIAN SMALL LETTER RAE
+2D11 GEORGIAN SMALL LETTER SAN
+2D12 GEORGIAN SMALL LETTER TAR
+2D13 GEORGIAN SMALL LETTER UN
+2D14 GEORGIAN SMALL LETTER PHAR
+2D15 GEORGIAN SMALL LETTER KHAR
+2D16 GEORGIAN SMALL LETTER GHAN
+2D17 GEORGIAN SMALL LETTER QAR
+2D18 GEORGIAN SMALL LETTER SHIN
+2D19 GEORGIAN SMALL LETTER CHIN
+2D1A GEORGIAN SMALL LETTER CAN
+2D1B GEORGIAN SMALL LETTER JIL
+2D1C GEORGIAN SMALL LETTER CIL
+2D1D GEORGIAN SMALL LETTER CHAR
+2D1E GEORGIAN SMALL LETTER XAN
+2D1F GEORGIAN SMALL LETTER JHAN
+2D20 GEORGIAN SMALL LETTER HAE
+2D21 GEORGIAN SMALL LETTER HE
+2D22 GEORGIAN SMALL LETTER HIE
+2D23 GEORGIAN SMALL LETTER WE
+2D24 GEORGIAN SMALL LETTER HAR
+2D25 GEORGIAN SMALL LETTER HOE
+2D30 TIFINAGH LETTER YA
+2D31 TIFINAGH LETTER YAB
+2D32 TIFINAGH LETTER YABH
+2D33 TIFINAGH LETTER YAG
+2D34 TIFINAGH LETTER YAGHH
+2D35 TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36 TIFINAGH LETTER YAJ
+2D37 TIFINAGH LETTER YAD
+2D38 TIFINAGH LETTER YADH
+2D39 TIFINAGH LETTER YADD
+2D3A TIFINAGH LETTER YADDH
+2D3B TIFINAGH LETTER YEY
+2D3C TIFINAGH LETTER YAF
+2D3D TIFINAGH LETTER YAK
+2D3E TIFINAGH LETTER TUAREG YAK
+2D3F TIFINAGH LETTER YAKHH
+2D40 TIFINAGH LETTER YAH
+2D41 TIFINAGH LETTER BERBER ACADEMY YAH
+2D42 TIFINAGH LETTER TUAREG YAH
+2D43 TIFINAGH LETTER YAHH
+2D44 TIFINAGH LETTER YAA
+2D45 TIFINAGH LETTER YAKH
+2D46 TIFINAGH LETTER TUAREG YAKH
+2D47 TIFINAGH LETTER YAQ
+2D48 TIFINAGH LETTER TUAREG YAQ
+2D49 TIFINAGH LETTER YI
+2D4A TIFINAGH LETTER YAZH
+2D4B TIFINAGH LETTER AHAGGAR YAZH
+2D4C TIFINAGH LETTER TUAREG YAZH
+2D4D TIFINAGH LETTER YAL
+2D4E TIFINAGH LETTER YAM
+2D4F TIFINAGH LETTER YAN
+2D50 TIFINAGH LETTER TUAREG YAGN
+2D51 TIFINAGH LETTER TUAREG YANG
+2D52 TIFINAGH LETTER YAP
+2D53 TIFINAGH LETTER YU
+2D54 TIFINAGH LETTER YAR
+2D55 TIFINAGH LETTER YARR
+2D56 TIFINAGH LETTER YAGH
+2D57 TIFINAGH LETTER TUAREG YAGH
+2D58 TIFINAGH LETTER AYER YAGH
+2D59 TIFINAGH LETTER YAS
+2D5A TIFINAGH LETTER YASS
+2D5B TIFINAGH LETTER YASH
+2D5C TIFINAGH LETTER YAT
+2D5D TIFINAGH LETTER YATH
+2D5E TIFINAGH LETTER YACH
+2D5F TIFINAGH LETTER YATT
+2D60 TIFINAGH LETTER YAV
+2D61 TIFINAGH LETTER YAW
+2D62 TIFINAGH LETTER YAY
+2D63 TIFINAGH LETTER YAZ
+2D64 TIFINAGH LETTER TAWELLEMET YAZ
+2D65 TIFINAGH LETTER YAZZ
+2D6F TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80 ETHIOPIC SYLLABLE LOA
+2D81 ETHIOPIC SYLLABLE MOA
+2D82 ETHIOPIC SYLLABLE ROA
+2D83 ETHIOPIC SYLLABLE SOA
+2D84 ETHIOPIC SYLLABLE SHOA
+2D85 ETHIOPIC SYLLABLE BOA
+2D86 ETHIOPIC SYLLABLE TOA
+2D87 ETHIOPIC SYLLABLE COA
+2D88 ETHIOPIC SYLLABLE NOA
+2D89 ETHIOPIC SYLLABLE NYOA
+2D8A ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B ETHIOPIC SYLLABLE ZOA
+2D8C ETHIOPIC SYLLABLE DOA
+2D8D ETHIOPIC SYLLABLE DDOA
+2D8E ETHIOPIC SYLLABLE JOA
+2D8F ETHIOPIC SYLLABLE THOA
+2D90 ETHIOPIC SYLLABLE CHOA
+2D91 ETHIOPIC SYLLABLE PHOA
+2D92 ETHIOPIC SYLLABLE POA
+2D93 ETHIOPIC SYLLABLE GGWA
+2D94 ETHIOPIC SYLLABLE GGWI
+2D95 ETHIOPIC SYLLABLE GGWEE
+2D96 ETHIOPIC SYLLABLE GGWE
+2DA0 ETHIOPIC SYLLABLE SSA
+2DA1 ETHIOPIC SYLLABLE SSU
+2DA2 ETHIOPIC SYLLABLE SSI
+2DA3 ETHIOPIC SYLLABLE SSAA
+2DA4 ETHIOPIC SYLLABLE SSEE
+2DA5 ETHIOPIC SYLLABLE SSE
+2DA6 ETHIOPIC SYLLABLE SSO
+2DA8 ETHIOPIC SYLLABLE CCA
+2DA9 ETHIOPIC SYLLABLE CCU
+2DAA ETHIOPIC SYLLABLE CCI
+2DAB ETHIOPIC SYLLABLE CCAA
+2DAC ETHIOPIC SYLLABLE CCEE
+2DAD ETHIOPIC SYLLABLE CCE
+2DAE ETHIOPIC SYLLABLE CCO
+2DB0 ETHIOPIC SYLLABLE ZZA
+2DB1 ETHIOPIC SYLLABLE ZZU
+2DB2 ETHIOPIC SYLLABLE ZZI
+2DB3 ETHIOPIC SYLLABLE ZZAA
+2DB4 ETHIOPIC SYLLABLE ZZEE
+2DB5 ETHIOPIC SYLLABLE ZZE
+2DB6 ETHIOPIC SYLLABLE ZZO
+2DB8 ETHIOPIC SYLLABLE CCHA
+2DB9 ETHIOPIC SYLLABLE CCHU
+2DBA ETHIOPIC SYLLABLE CCHI
+2DBB ETHIOPIC SYLLABLE CCHAA
+2DBC ETHIOPIC SYLLABLE CCHEE
+2DBD ETHIOPIC SYLLABLE CCHE
+2DBE ETHIOPIC SYLLABLE CCHO
+2DC0 ETHIOPIC SYLLABLE QYA
+2DC1 ETHIOPIC SYLLABLE QYU
+2DC2 ETHIOPIC SYLLABLE QYI
+2DC3 ETHIOPIC SYLLABLE QYAA
+2DC4 ETHIOPIC SYLLABLE QYEE
+2DC5 ETHIOPIC SYLLABLE QYE
+2DC6 ETHIOPIC SYLLABLE QYO
+2DC8 ETHIOPIC SYLLABLE KYA
+2DC9 ETHIOPIC SYLLABLE KYU
+2DCA ETHIOPIC SYLLABLE KYI
+2DCB ETHIOPIC SYLLABLE KYAA
+2DCC ETHIOPIC SYLLABLE KYEE
+2DCD ETHIOPIC SYLLABLE KYE
+2DCE ETHIOPIC SYLLABLE KYO
+2DD0 ETHIOPIC SYLLABLE XYA
+2DD1 ETHIOPIC SYLLABLE XYU
+2DD2 ETHIOPIC SYLLABLE XYI
+2DD3 ETHIOPIC SYLLABLE XYAA
+2DD4 ETHIOPIC SYLLABLE XYEE
+2DD5 ETHIOPIC SYLLABLE XYE
+2DD6 ETHIOPIC SYLLABLE XYO
+2DD8 ETHIOPIC SYLLABLE GYA
+2DD9 ETHIOPIC SYLLABLE GYU
+2DDA ETHIOPIC SYLLABLE GYI
+2DDB ETHIOPIC SYLLABLE GYAA
+2DDC ETHIOPIC SYLLABLE GYEE
+2DDD ETHIOPIC SYLLABLE GYE
+2DDE ETHIOPIC SYLLABLE GYO
+2E00 RIGHT ANGLE SUBSTITUTION MARKER
+2E01 RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 LEFT SUBSTITUTION BRACKET
+2E03 RIGHT SUBSTITUTION BRACKET
+2E04 LEFT DOTTED SUBSTITUTION BRACKET
+2E05 RIGHT DOTTED SUBSTITUTION BRACKET
+2E06 RAISED INTERPOLATION MARKER
+2E07 RAISED DOTTED INTERPOLATION MARKER
+2E08 DOTTED TRANSPOSITION MARKER
+2E09 LEFT TRANSPOSITION BRACKET
+2E0A RIGHT TRANSPOSITION BRACKET
+2E0B RAISED SQUARE
+2E0C LEFT RAISED OMISSION BRACKET
+2E0D RIGHT RAISED OMISSION BRACKET
+2E0E EDITORIAL CORONIS
+2E0F PARAGRAPHOS
+2E10 FORKED PARAGRAPHOS
+2E11 REVERSED FORKED PARAGRAPHOS
+2E12 HYPODIASTOLE
+2E13 DOTTED OBELOS
+2E14 DOWNWARDS ANCORA
+2E15 UPWARDS ANCORA
+2E16 DOTTED RIGHT-POINTING ANGLE
+2E17 DOUBLE OBLIQUE HYPHEN
+2E1C LEFT LOW PARAPHRASE BRACKET
+2E1D RIGHT LOW PARAPHRASE BRACKET
+2E80 CJK RADICAL REPEAT
+2E81 CJK RADICAL CLIFF
+2E82 CJK RADICAL SECOND ONE
+2E83 CJK RADICAL SECOND TWO
+2E84 CJK RADICAL SECOND THREE
+2E85 CJK RADICAL PERSON
+2E86 CJK RADICAL BOX
+2E87 CJK RADICAL TABLE
+2E88 CJK RADICAL KNIFE ONE
+2E89 CJK RADICAL KNIFE TWO
+2E8A CJK RADICAL DIVINATION
+2E8B CJK RADICAL SEAL
+2E8C CJK RADICAL SMALL ONE
+2E8D CJK RADICAL SMALL TWO
+2E8E CJK RADICAL LAME ONE
+2E8F CJK RADICAL LAME TWO
+2E90 CJK RADICAL LAME THREE
+2E91 CJK RADICAL LAME FOUR
+2E92 CJK RADICAL SNAKE
+2E93 CJK RADICAL THREAD
+2E94 CJK RADICAL SNOUT ONE
+2E95 CJK RADICAL SNOUT TWO
+2E96 CJK RADICAL HEART ONE
+2E97 CJK RADICAL HEART TWO
+2E98 CJK RADICAL HAND
+2E99 CJK RADICAL RAP
+2E9B CJK RADICAL CHOKE
+2E9C CJK RADICAL SUN
+2E9D CJK RADICAL MOON
+2E9E CJK RADICAL DEATH
+2E9F CJK RADICAL MOTHER
+2EA0 CJK RADICAL CIVILIAN
+2EA1 CJK RADICAL WATER ONE
+2EA2 CJK RADICAL WATER TWO
+2EA3 CJK RADICAL FIRE
+2EA4 CJK RADICAL PAW ONE
+2EA5 CJK RADICAL PAW TWO
+2EA6 CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+2EA7 CJK RADICAL COW
+2EA8 CJK RADICAL DOG
+2EA9 CJK RADICAL JADE
+2EAA CJK RADICAL BOLT OF CLOTH
+2EAB CJK RADICAL EYE
+2EAC CJK RADICAL SPIRIT ONE
+2EAD CJK RADICAL SPIRIT TWO
+2EAE CJK RADICAL BAMBOO
+2EAF CJK RADICAL SILK
+2EB0 CJK RADICAL C-SIMPLIFIED SILK
+2EB1 CJK RADICAL NET ONE
+2EB2 CJK RADICAL NET TWO
+2EB3 CJK RADICAL NET THREE
+2EB4 CJK RADICAL NET FOUR
+2EB5 CJK RADICAL MESH
+2EB6 CJK RADICAL SHEEP
+2EB7 CJK RADICAL RAM
+2EB8 CJK RADICAL EWE
+2EB9 CJK RADICAL OLD
+2EBA CJK RADICAL BRUSH ONE
+2EBB CJK RADICAL BRUSH TWO
+2EBC CJK RADICAL MEAT
+2EBD CJK RADICAL MORTAR
+2EBE CJK RADICAL GRASS ONE
+2EBF CJK RADICAL GRASS TWO
+2EC0 CJK RADICAL GRASS THREE
+2EC1 CJK RADICAL TIGER
+2EC2 CJK RADICAL CLOTHES
+2EC3 CJK RADICAL WEST ONE
+2EC4 CJK RADICAL WEST TWO
+2EC5 CJK RADICAL C-SIMPLIFIED SEE
+2EC6 CJK RADICAL SIMPLIFIED HORN
+2EC7 CJK RADICAL HORN
+2EC8 CJK RADICAL C-SIMPLIFIED SPEECH
+2EC9 CJK RADICAL C-SIMPLIFIED SHELL
+2ECA CJK RADICAL FOOT
+2ECB CJK RADICAL C-SIMPLIFIED CART
+2ECC CJK RADICAL SIMPLIFIED WALK
+2ECD CJK RADICAL WALK ONE
+2ECE CJK RADICAL WALK TWO
+2ECF CJK RADICAL CITY
+2ED0 CJK RADICAL C-SIMPLIFIED GOLD
+2ED1 CJK RADICAL LONG ONE
+2ED2 CJK RADICAL LONG TWO
+2ED3 CJK RADICAL C-SIMPLIFIED LONG
+2ED4 CJK RADICAL C-SIMPLIFIED GATE
+2ED5 CJK RADICAL MOUND ONE
+2ED6 CJK RADICAL MOUND TWO
+2ED7 CJK RADICAL RAIN
+2ED8 CJK RADICAL BLUE
+2ED9 CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+2EDA CJK RADICAL C-SIMPLIFIED LEAF
+2EDB CJK RADICAL C-SIMPLIFIED WIND
+2EDC CJK RADICAL C-SIMPLIFIED FLY
+2EDD CJK RADICAL EAT ONE
+2EDE CJK RADICAL EAT TWO
+2EDF CJK RADICAL EAT THREE
+2EE0 CJK RADICAL C-SIMPLIFIED EAT
+2EE1 CJK RADICAL HEAD
+2EE2 CJK RADICAL C-SIMPLIFIED HORSE
+2EE3 CJK RADICAL BONE
+2EE4 CJK RADICAL GHOST
+2EE5 CJK RADICAL C-SIMPLIFIED FISH
+2EE6 CJK RADICAL C-SIMPLIFIED BIRD
+2EE7 CJK RADICAL C-SIMPLIFIED SALT
+2EE8 CJK RADICAL SIMPLIFIED WHEAT
+2EE9 CJK RADICAL SIMPLIFIED YELLOW
+2EEA CJK RADICAL C-SIMPLIFIED FROG
+2EEB CJK RADICAL J-SIMPLIFIED EVEN
+2EEC CJK RADICAL C-SIMPLIFIED EVEN
+2EED CJK RADICAL J-SIMPLIFIED TOOTH
+2EEE CJK RADICAL C-SIMPLIFIED TOOTH
+2EEF CJK RADICAL J-SIMPLIFIED DRAGON
+2EF0 CJK RADICAL C-SIMPLIFIED DRAGON
+2EF1 CJK RADICAL TURTLE
+2EF2 CJK RADICAL J-SIMPLIFIED TURTLE
+2EF3 CJK RADICAL C-SIMPLIFIED TURTLE
+2F00 KANGXI RADICAL ONE
+2F01 KANGXI RADICAL LINE
+2F02 KANGXI RADICAL DOT
+2F03 KANGXI RADICAL SLASH
+2F04 KANGXI RADICAL SECOND
+2F05 KANGXI RADICAL HOOK
+2F06 KANGXI RADICAL TWO
+2F07 KANGXI RADICAL LID
+2F08 KANGXI RADICAL MAN
+2F09 KANGXI RADICAL LEGS
+2F0A KANGXI RADICAL ENTER
+2F0B KANGXI RADICAL EIGHT
+2F0C KANGXI RADICAL DOWN BOX
+2F0D KANGXI RADICAL COVER
+2F0E KANGXI RADICAL ICE
+2F0F KANGXI RADICAL TABLE
+2F10 KANGXI RADICAL OPEN BOX
+2F11 KANGXI RADICAL KNIFE
+2F12 KANGXI RADICAL POWER
+2F13 KANGXI RADICAL WRAP
+2F14 KANGXI RADICAL SPOON
+2F15 KANGXI RADICAL RIGHT OPEN BOX
+2F16 KANGXI RADICAL HIDING ENCLOSURE
+2F17 KANGXI RADICAL TEN
+2F18 KANGXI RADICAL DIVINATION
+2F19 KANGXI RADICAL SEAL
+2F1A KANGXI RADICAL CLIFF
+2F1B KANGXI RADICAL PRIVATE
+2F1C KANGXI RADICAL AGAIN
+2F1D KANGXI RADICAL MOUTH
+2F1E KANGXI RADICAL ENCLOSURE
+2F1F KANGXI RADICAL EARTH
+2F20 KANGXI RADICAL SCHOLAR
+2F21 KANGXI RADICAL GO
+2F22 KANGXI RADICAL GO SLOWLY
+2F23 KANGXI RADICAL EVENING
+2F24 KANGXI RADICAL BIG
+2F25 KANGXI RADICAL WOMAN
+2F26 KANGXI RADICAL CHILD
+2F27 KANGXI RADICAL ROOF
+2F28 KANGXI RADICAL INCH
+2F29 KANGXI RADICAL SMALL
+2F2A KANGXI RADICAL LAME
+2F2B KANGXI RADICAL CORPSE
+2F2C KANGXI RADICAL SPROUT
+2F2D KANGXI RADICAL MOUNTAIN
+2F2E KANGXI RADICAL RIVER
+2F2F KANGXI RADICAL WORK
+2F30 KANGXI RADICAL ONESELF
+2F31 KANGXI RADICAL TURBAN
+2F32 KANGXI RADICAL DRY
+2F33 KANGXI RADICAL SHORT THREAD
+2F34 KANGXI RADICAL DOTTED CLIFF
+2F35 KANGXI RADICAL LONG STRIDE
+2F36 KANGXI RADICAL TWO HANDS
+2F37 KANGXI RADICAL SHOOT
+2F38 KANGXI RADICAL BOW
+2F39 KANGXI RADICAL SNOUT
+2F3A KANGXI RADICAL BRISTLE
+2F3B KANGXI RADICAL STEP
+2F3C KANGXI RADICAL HEART
+2F3D KANGXI RADICAL HALBERD
+2F3E KANGXI RADICAL DOOR
+2F3F KANGXI RADICAL HAND
+2F40 KANGXI RADICAL BRANCH
+2F41 KANGXI RADICAL RAP
+2F42 KANGXI RADICAL SCRIPT
+2F43 KANGXI RADICAL DIPPER
+2F44 KANGXI RADICAL AXE
+2F45 KANGXI RADICAL SQUARE
+2F46 KANGXI RADICAL NOT
+2F47 KANGXI RADICAL SUN
+2F48 KANGXI RADICAL SAY
+2F49 KANGXI RADICAL MOON
+2F4A KANGXI RADICAL TREE
+2F4B KANGXI RADICAL LACK
+2F4C KANGXI RADICAL STOP
+2F4D KANGXI RADICAL DEATH
+2F4E KANGXI RADICAL WEAPON
+2F4F KANGXI RADICAL DO NOT
+2F50 KANGXI RADICAL COMPARE
+2F51 KANGXI RADICAL FUR
+2F52 KANGXI RADICAL CLAN
+2F53 KANGXI RADICAL STEAM
+2F54 KANGXI RADICAL WATER
+2F55 KANGXI RADICAL FIRE
+2F56 KANGXI RADICAL CLAW
+2F57 KANGXI RADICAL FATHER
+2F58 KANGXI RADICAL DOUBLE X
+2F59 KANGXI RADICAL HALF TREE TRUNK
+2F5A KANGXI RADICAL SLICE
+2F5B KANGXI RADICAL FANG
+2F5C KANGXI RADICAL COW
+2F5D KANGXI RADICAL DOG
+2F5E KANGXI RADICAL PROFOUND
+2F5F KANGXI RADICAL JADE
+2F60 KANGXI RADICAL MELON
+2F61 KANGXI RADICAL TILE
+2F62 KANGXI RADICAL SWEET
+2F63 KANGXI RADICAL LIFE
+2F64 KANGXI RADICAL USE
+2F65 KANGXI RADICAL FIELD
+2F66 KANGXI RADICAL BOLT OF CLOTH
+2F67 KANGXI RADICAL SICKNESS
+2F68 KANGXI RADICAL DOTTED TENT
+2F69 KANGXI RADICAL WHITE
+2F6A KANGXI RADICAL SKIN
+2F6B KANGXI RADICAL DISH
+2F6C KANGXI RADICAL EYE
+2F6D KANGXI RADICAL SPEAR
+2F6E KANGXI RADICAL ARROW
+2F6F KANGXI RADICAL STONE
+2F70 KANGXI RADICAL SPIRIT
+2F71 KANGXI RADICAL TRACK
+2F72 KANGXI RADICAL GRAIN
+2F73 KANGXI RADICAL CAVE
+2F74 KANGXI RADICAL STAND
+2F75 KANGXI RADICAL BAMBOO
+2F76 KANGXI RADICAL RICE
+2F77 KANGXI RADICAL SILK
+2F78 KANGXI RADICAL JAR
+2F79 KANGXI RADICAL NET
+2F7A KANGXI RADICAL SHEEP
+2F7B KANGXI RADICAL FEATHER
+2F7C KANGXI RADICAL OLD
+2F7D KANGXI RADICAL AND
+2F7E KANGXI RADICAL PLOW
+2F7F KANGXI RADICAL EAR
+2F80 KANGXI RADICAL BRUSH
+2F81 KANGXI RADICAL MEAT
+2F82 KANGXI RADICAL MINISTER
+2F83 KANGXI RADICAL SELF
+2F84 KANGXI RADICAL ARRIVE
+2F85 KANGXI RADICAL MORTAR
+2F86 KANGXI RADICAL TONGUE
+2F87 KANGXI RADICAL OPPOSE
+2F88 KANGXI RADICAL BOAT
+2F89 KANGXI RADICAL STOPPING
+2F8A KANGXI RADICAL COLOR
+2F8B KANGXI RADICAL GRASS
+2F8C KANGXI RADICAL TIGER
+2F8D KANGXI RADICAL INSECT
+2F8E KANGXI RADICAL BLOOD
+2F8F KANGXI RADICAL WALK ENCLOSURE
+2F90 KANGXI RADICAL CLOTHES
+2F91 KANGXI RADICAL WEST
+2F92 KANGXI RADICAL SEE
+2F93 KANGXI RADICAL HORN
+2F94 KANGXI RADICAL SPEECH
+2F95 KANGXI RADICAL VALLEY
+2F96 KANGXI RADICAL BEAN
+2F97 KANGXI RADICAL PIG
+2F98 KANGXI RADICAL BADGER
+2F99 KANGXI RADICAL SHELL
+2F9A KANGXI RADICAL RED
+2F9B KANGXI RADICAL RUN
+2F9C KANGXI RADICAL FOOT
+2F9D KANGXI RADICAL BODY
+2F9E KANGXI RADICAL CART
+2F9F KANGXI RADICAL BITTER
+2FA0 KANGXI RADICAL MORNING
+2FA1 KANGXI RADICAL WALK
+2FA2 KANGXI RADICAL CITY
+2FA3 KANGXI RADICAL WINE
+2FA4 KANGXI RADICAL DISTINGUISH
+2FA5 KANGXI RADICAL VILLAGE
+2FA6 KANGXI RADICAL GOLD
+2FA7 KANGXI RADICAL LONG
+2FA8 KANGXI RADICAL GATE
+2FA9 KANGXI RADICAL MOUND
+2FAA KANGXI RADICAL SLAVE
+2FAB KANGXI RADICAL SHORT TAILED BIRD
+2FAC KANGXI RADICAL RAIN
+2FAD KANGXI RADICAL BLUE
+2FAE KANGXI RADICAL WRONG
+2FAF KANGXI RADICAL FACE
+2FB0 KANGXI RADICAL LEATHER
+2FB1 KANGXI RADICAL TANNED LEATHER
+2FB2 KANGXI RADICAL LEEK
+2FB3 KANGXI RADICAL SOUND
+2FB4 KANGXI RADICAL LEAF
+2FB5 KANGXI RADICAL WIND
+2FB6 KANGXI RADICAL FLY
+2FB7 KANGXI RADICAL EAT
+2FB8 KANGXI RADICAL HEAD
+2FB9 KANGXI RADICAL FRAGRANT
+2FBA KANGXI RADICAL HORSE
+2FBB KANGXI RADICAL BONE
+2FBC KANGXI RADICAL TALL
+2FBD KANGXI RADICAL HAIR
+2FBE KANGXI RADICAL FIGHT
+2FBF KANGXI RADICAL SACRIFICIAL WINE
+2FC0 KANGXI RADICAL CAULDRON
+2FC1 KANGXI RADICAL GHOST
+2FC2 KANGXI RADICAL FISH
+2FC3 KANGXI RADICAL BIRD
+2FC4 KANGXI RADICAL SALT
+2FC5 KANGXI RADICAL DEER
+2FC6 KANGXI RADICAL WHEAT
+2FC7 KANGXI RADICAL HEMP
+2FC8 KANGXI RADICAL YELLOW
+2FC9 KANGXI RADICAL MILLET
+2FCA KANGXI RADICAL BLACK
+2FCB KANGXI RADICAL EMBROIDERY
+2FCC KANGXI RADICAL FROG
+2FCD KANGXI RADICAL TRIPOD
+2FCE KANGXI RADICAL DRUM
+2FCF KANGXI RADICAL RAT
+2FD0 KANGXI RADICAL NOSE
+2FD1 KANGXI RADICAL EVEN
+2FD2 KANGXI RADICAL TOOTH
+2FD3 KANGXI RADICAL DRAGON
+2FD4 KANGXI RADICAL TURTLE
+2FD5 KANGXI RADICAL FLUTE
+2FF0 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4 IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 IDEOGRAPHIC SPACE
+3001 IDEOGRAPHIC COMMA
+3002 IDEOGRAPHIC FULL STOP
+3003 DITTO MARK
+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005 IDEOGRAPHIC ITERATION MARK
+3006 IDEOGRAPHIC CLOSING MARK
+3007 IDEOGRAPHIC NUMBER ZERO
+3008 LEFT ANGLE BRACKET
+3009 RIGHT ANGLE BRACKET
+300A LEFT DOUBLE ANGLE BRACKET
+300B RIGHT DOUBLE ANGLE BRACKET
+300C LEFT CORNER BRACKET
+300D RIGHT CORNER BRACKET
+300E LEFT WHITE CORNER BRACKET
+300F RIGHT WHITE CORNER BRACKET
+3010 LEFT BLACK LENTICULAR BRACKET
+3011 RIGHT BLACK LENTICULAR BRACKET
+3012 POSTAL MARK
+3013 GETA MARK
+3014 LEFT TORTOISE SHELL BRACKET
+3015 RIGHT TORTOISE SHELL BRACKET
+3016 LEFT WHITE LENTICULAR BRACKET
+3017 RIGHT WHITE LENTICULAR BRACKET
+3018 LEFT WHITE TORTOISE SHELL BRACKET
+3019 RIGHT WHITE TORTOISE SHELL BRACKET
+301A LEFT WHITE SQUARE BRACKET
+301B RIGHT WHITE SQUARE BRACKET
+301C WAVE DASH
+301D REVERSED DOUBLE PRIME QUOTATION MARK
+301E DOUBLE PRIME QUOTATION MARK
+301F LOW DOUBLE PRIME QUOTATION MARK
+3020 POSTAL MARK FACE
+3021 HANGZHOU NUMERAL ONE
+3022 HANGZHOU NUMERAL TWO
+3023 HANGZHOU NUMERAL THREE
+3024 HANGZHOU NUMERAL FOUR
+3025 HANGZHOU NUMERAL FIVE
+3026 HANGZHOU NUMERAL SIX
+3027 HANGZHOU NUMERAL SEVEN
+3028 HANGZHOU NUMERAL EIGHT
+3029 HANGZHOU NUMERAL NINE
+302A IDEOGRAPHIC LEVEL TONE MARK
+302B IDEOGRAPHIC RISING TONE MARK
+302C IDEOGRAPHIC DEPARTING TONE MARK
+302D IDEOGRAPHIC ENTERING TONE MARK
+302E HANGUL SINGLE DOT TONE MARK
+302F HANGUL DOUBLE DOT TONE MARK
+3030 WAVY DASH
+3031 VERTICAL KANA REPEAT MARK
+3032 VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+3033 VERTICAL KANA REPEAT MARK UPPER HALF
+3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+3035 VERTICAL KANA REPEAT MARK LOWER HALF
+3036 CIRCLED POSTAL MARK
+3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038 HANGZHOU NUMERAL TEN
+3039 HANGZHOU NUMERAL TWENTY
+303A HANGZHOU NUMERAL THIRTY
+303B VERTICAL IDEOGRAPHIC ITERATION MARK
+303C MASU MARK
+303D PART ALTERNATION MARK
+303E IDEOGRAPHIC VARIATION INDICATOR
+303F IDEOGRAPHIC HALF FILL SPACE
+3041 HIRAGANA LETTER SMALL A
+3042 HIRAGANA LETTER A
+3043 HIRAGANA LETTER SMALL I
+3044 HIRAGANA LETTER I
+3045 HIRAGANA LETTER SMALL U
+3046 HIRAGANA LETTER U
+3047 HIRAGANA LETTER SMALL E
+3048 HIRAGANA LETTER E
+3049 HIRAGANA LETTER SMALL O
+304A HIRAGANA LETTER O
+304B HIRAGANA LETTER KA
+304C HIRAGANA LETTER GA
+304D HIRAGANA LETTER KI
+304E HIRAGANA LETTER GI
+304F HIRAGANA LETTER KU
+3050 HIRAGANA LETTER GU
+3051 HIRAGANA LETTER KE
+3052 HIRAGANA LETTER GE
+3053 HIRAGANA LETTER KO
+3054 HIRAGANA LETTER GO
+3055 HIRAGANA LETTER SA
+3056 HIRAGANA LETTER ZA
+3057 HIRAGANA LETTER SI
+3058 HIRAGANA LETTER ZI
+3059 HIRAGANA LETTER SU
+305A HIRAGANA LETTER ZU
+305B HIRAGANA LETTER SE
+305C HIRAGANA LETTER ZE
+305D HIRAGANA LETTER SO
+305E HIRAGANA LETTER ZO
+305F HIRAGANA LETTER TA
+3060 HIRAGANA LETTER DA
+3061 HIRAGANA LETTER TI
+3062 HIRAGANA LETTER DI
+3063 HIRAGANA LETTER SMALL TU
+3064 HIRAGANA LETTER TU
+3065 HIRAGANA LETTER DU
+3066 HIRAGANA LETTER TE
+3067 HIRAGANA LETTER DE
+3068 HIRAGANA LETTER TO
+3069 HIRAGANA LETTER DO
+306A HIRAGANA LETTER NA
+306B HIRAGANA LETTER NI
+306C HIRAGANA LETTER NU
+306D HIRAGANA LETTER NE
+306E HIRAGANA LETTER NO
+306F HIRAGANA LETTER HA
+3070 HIRAGANA LETTER BA
+3071 HIRAGANA LETTER PA
+3072 HIRAGANA LETTER HI
+3073 HIRAGANA LETTER BI
+3074 HIRAGANA LETTER PI
+3075 HIRAGANA LETTER HU
+3076 HIRAGANA LETTER BU
+3077 HIRAGANA LETTER PU
+3078 HIRAGANA LETTER HE
+3079 HIRAGANA LETTER BE
+307A HIRAGANA LETTER PE
+307B HIRAGANA LETTER HO
+307C HIRAGANA LETTER BO
+307D HIRAGANA LETTER PO
+307E HIRAGANA LETTER MA
+307F HIRAGANA LETTER MI
+3080 HIRAGANA LETTER MU
+3081 HIRAGANA LETTER ME
+3082 HIRAGANA LETTER MO
+3083 HIRAGANA LETTER SMALL YA
+3084 HIRAGANA LETTER YA
+3085 HIRAGANA LETTER SMALL YU
+3086 HIRAGANA LETTER YU
+3087 HIRAGANA LETTER SMALL YO
+3088 HIRAGANA LETTER YO
+3089 HIRAGANA LETTER RA
+308A HIRAGANA LETTER RI
+308B HIRAGANA LETTER RU
+308C HIRAGANA LETTER RE
+308D HIRAGANA LETTER RO
+308E HIRAGANA LETTER SMALL WA
+308F HIRAGANA LETTER WA
+3090 HIRAGANA LETTER WI
+3091 HIRAGANA LETTER WE
+3092 HIRAGANA LETTER WO
+3093 HIRAGANA LETTER N
+3094 HIRAGANA LETTER VU
+3095 HIRAGANA LETTER SMALL KA
+3096 HIRAGANA LETTER SMALL KE
+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B KATAKANA-HIRAGANA VOICED SOUND MARK
+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D HIRAGANA ITERATION MARK
+309E HIRAGANA VOICED ITERATION MARK
+309F HIRAGANA DIGRAPH YORI
+30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1 KATAKANA LETTER SMALL A
+30A2 KATAKANA LETTER A
+30A3 KATAKANA LETTER SMALL I
+30A4 KATAKANA LETTER I
+30A5 KATAKANA LETTER SMALL U
+30A6 KATAKANA LETTER U
+30A7 KATAKANA LETTER SMALL E
+30A8 KATAKANA LETTER E
+30A9 KATAKANA LETTER SMALL O
+30AA KATAKANA LETTER O
+30AB KATAKANA LETTER KA
+30AC KATAKANA LETTER GA
+30AD KATAKANA LETTER KI
+30AE KATAKANA LETTER GI
+30AF KATAKANA LETTER KU
+30B0 KATAKANA LETTER GU
+30B1 KATAKANA LETTER KE
+30B2 KATAKANA LETTER GE
+30B3 KATAKANA LETTER KO
+30B4 KATAKANA LETTER GO
+30B5 KATAKANA LETTER SA
+30B6 KATAKANA LETTER ZA
+30B7 KATAKANA LETTER SI
+30B8 KATAKANA LETTER ZI
+30B9 KATAKANA LETTER SU
+30BA KATAKANA LETTER ZU
+30BB KATAKANA LETTER SE
+30BC KATAKANA LETTER ZE
+30BD KATAKANA LETTER SO
+30BE KATAKANA LETTER ZO
+30BF KATAKANA LETTER TA
+30C0 KATAKANA LETTER DA
+30C1 KATAKANA LETTER TI
+30C2 KATAKANA LETTER DI
+30C3 KATAKANA LETTER SMALL TU
+30C4 KATAKANA LETTER TU
+30C5 KATAKANA LETTER DU
+30C6 KATAKANA LETTER TE
+30C7 KATAKANA LETTER DE
+30C8 KATAKANA LETTER TO
+30C9 KATAKANA LETTER DO
+30CA KATAKANA LETTER NA
+30CB KATAKANA LETTER NI
+30CC KATAKANA LETTER NU
+30CD KATAKANA LETTER NE
+30CE KATAKANA LETTER NO
+30CF KATAKANA LETTER HA
+30D0 KATAKANA LETTER BA
+30D1 KATAKANA LETTER PA
+30D2 KATAKANA LETTER HI
+30D3 KATAKANA LETTER BI
+30D4 KATAKANA LETTER PI
+30D5 KATAKANA LETTER HU
+30D6 KATAKANA LETTER BU
+30D7 KATAKANA LETTER PU
+30D8 KATAKANA LETTER HE
+30D9 KATAKANA LETTER BE
+30DA KATAKANA LETTER PE
+30DB KATAKANA LETTER HO
+30DC KATAKANA LETTER BO
+30DD KATAKANA LETTER PO
+30DE KATAKANA LETTER MA
+30DF KATAKANA LETTER MI
+30E0 KATAKANA LETTER MU
+30E1 KATAKANA LETTER ME
+30E2 KATAKANA LETTER MO
+30E3 KATAKANA LETTER SMALL YA
+30E4 KATAKANA LETTER YA
+30E5 KATAKANA LETTER SMALL YU
+30E6 KATAKANA LETTER YU
+30E7 KATAKANA LETTER SMALL YO
+30E8 KATAKANA LETTER YO
+30E9 KATAKANA LETTER RA
+30EA KATAKANA LETTER RI
+30EB KATAKANA LETTER RU
+30EC KATAKANA LETTER RE
+30ED KATAKANA LETTER RO
+30EE KATAKANA LETTER SMALL WA
+30EF KATAKANA LETTER WA
+30F0 KATAKANA LETTER WI
+30F1 KATAKANA LETTER WE
+30F2 KATAKANA LETTER WO
+30F3 KATAKANA LETTER N
+30F4 KATAKANA LETTER VU
+30F5 KATAKANA LETTER SMALL KA
+30F6 KATAKANA LETTER SMALL KE
+30F7 KATAKANA LETTER VA
+30F8 KATAKANA LETTER VI
+30F9 KATAKANA LETTER VE
+30FA KATAKANA LETTER VO
+30FB KATAKANA MIDDLE DOT
+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK
+30FD KATAKANA ITERATION MARK
+30FE KATAKANA VOICED ITERATION MARK
+30FF KATAKANA DIGRAPH KOTO
+3105 BOPOMOFO LETTER B
+3106 BOPOMOFO LETTER P
+3107 BOPOMOFO LETTER M
+3108 BOPOMOFO LETTER F
+3109 BOPOMOFO LETTER D
+310A BOPOMOFO LETTER T
+310B BOPOMOFO LETTER N
+310C BOPOMOFO LETTER L
+310D BOPOMOFO LETTER G
+310E BOPOMOFO LETTER K
+310F BOPOMOFO LETTER H
+3110 BOPOMOFO LETTER J
+3111 BOPOMOFO LETTER Q
+3112 BOPOMOFO LETTER X
+3113 BOPOMOFO LETTER ZH
+3114 BOPOMOFO LETTER CH
+3115 BOPOMOFO LETTER SH
+3116 BOPOMOFO LETTER R
+3117 BOPOMOFO LETTER Z
+3118 BOPOMOFO LETTER C
+3119 BOPOMOFO LETTER S
+311A BOPOMOFO LETTER A
+311B BOPOMOFO LETTER O
+311C BOPOMOFO LETTER E
+311D BOPOMOFO LETTER EH
+311E BOPOMOFO LETTER AI
+311F BOPOMOFO LETTER EI
+3120 BOPOMOFO LETTER AU
+3121 BOPOMOFO LETTER OU
+3122 BOPOMOFO LETTER AN
+3123 BOPOMOFO LETTER EN
+3124 BOPOMOFO LETTER ANG
+3125 BOPOMOFO LETTER ENG
+3126 BOPOMOFO LETTER ER
+3127 BOPOMOFO LETTER I
+3128 BOPOMOFO LETTER U
+3129 BOPOMOFO LETTER IU
+312A BOPOMOFO LETTER V
+312B BOPOMOFO LETTER NG
+312C BOPOMOFO LETTER GN
+3131 HANGUL LETTER KIYEOK
+3132 HANGUL LETTER SSANGKIYEOK
+3133 HANGUL LETTER KIYEOK-SIOS
+3134 HANGUL LETTER NIEUN
+3135 HANGUL LETTER NIEUN-CIEUC
+3136 HANGUL LETTER NIEUN-HIEUH
+3137 HANGUL LETTER TIKEUT
+3138 HANGUL LETTER SSANGTIKEUT
+3139 HANGUL LETTER RIEUL
+313A HANGUL LETTER RIEUL-KIYEOK
+313B HANGUL LETTER RIEUL-MIEUM
+313C HANGUL LETTER RIEUL-PIEUP
+313D HANGUL LETTER RIEUL-SIOS
+313E HANGUL LETTER RIEUL-THIEUTH
+313F HANGUL LETTER RIEUL-PHIEUPH
+3140 HANGUL LETTER RIEUL-HIEUH
+3141 HANGUL LETTER MIEUM
+3142 HANGUL LETTER PIEUP
+3143 HANGUL LETTER SSANGPIEUP
+3144 HANGUL LETTER PIEUP-SIOS
+3145 HANGUL LETTER SIOS
+3146 HANGUL LETTER SSANGSIOS
+3147 HANGUL LETTER IEUNG
+3148 HANGUL LETTER CIEUC
+3149 HANGUL LETTER SSANGCIEUC
+314A HANGUL LETTER CHIEUCH
+314B HANGUL LETTER KHIEUKH
+314C HANGUL LETTER THIEUTH
+314D HANGUL LETTER PHIEUPH
+314E HANGUL LETTER HIEUH
+314F HANGUL LETTER A
+3150 HANGUL LETTER AE
+3151 HANGUL LETTER YA
+3152 HANGUL LETTER YAE
+3153 HANGUL LETTER EO
+3154 HANGUL LETTER E
+3155 HANGUL LETTER YEO
+3156 HANGUL LETTER YE
+3157 HANGUL LETTER O
+3158 HANGUL LETTER WA
+3159 HANGUL LETTER WAE
+315A HANGUL LETTER OE
+315B HANGUL LETTER YO
+315C HANGUL LETTER U
+315D HANGUL LETTER WEO
+315E HANGUL LETTER WE
+315F HANGUL LETTER WI
+3160 HANGUL LETTER YU
+3161 HANGUL LETTER EU
+3162 HANGUL LETTER YI
+3163 HANGUL LETTER I
+3164 HANGUL FILLER
+3165 HANGUL LETTER SSANGNIEUN
+3166 HANGUL LETTER NIEUN-TIKEUT
+3167 HANGUL LETTER NIEUN-SIOS
+3168 HANGUL LETTER NIEUN-PANSIOS
+3169 HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A HANGUL LETTER RIEUL-TIKEUT
+316B HANGUL LETTER RIEUL-PIEUP-SIOS
+316C HANGUL LETTER RIEUL-PANSIOS
+316D HANGUL LETTER RIEUL-YEORINHIEUH
+316E HANGUL LETTER MIEUM-PIEUP
+316F HANGUL LETTER MIEUM-SIOS
+3170 HANGUL LETTER MIEUM-PANSIOS
+3171 HANGUL LETTER KAPYEOUNMIEUM
+3172 HANGUL LETTER PIEUP-KIYEOK
+3173 HANGUL LETTER PIEUP-TIKEUT
+3174 HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175 HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176 HANGUL LETTER PIEUP-CIEUC
+3177 HANGUL LETTER PIEUP-THIEUTH
+3178 HANGUL LETTER KAPYEOUNPIEUP
+3179 HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A HANGUL LETTER SIOS-KIYEOK
+317B HANGUL LETTER SIOS-NIEUN
+317C HANGUL LETTER SIOS-TIKEUT
+317D HANGUL LETTER SIOS-PIEUP
+317E HANGUL LETTER SIOS-CIEUC
+317F HANGUL LETTER PANSIOS
+3180 HANGUL LETTER SSANGIEUNG
+3181 HANGUL LETTER YESIEUNG
+3182 HANGUL LETTER YESIEUNG-SIOS
+3183 HANGUL LETTER YESIEUNG-PANSIOS
+3184 HANGUL LETTER KAPYEOUNPHIEUPH
+3185 HANGUL LETTER SSANGHIEUH
+3186 HANGUL LETTER YEORINHIEUH
+3187 HANGUL LETTER YO-YA
+3188 HANGUL LETTER YO-YAE
+3189 HANGUL LETTER YO-I
+318A HANGUL LETTER YU-YEO
+318B HANGUL LETTER YU-YE
+318C HANGUL LETTER YU-I
+318D HANGUL LETTER ARAEA
+318E HANGUL LETTER ARAEAE
+3190 IDEOGRAPHIC ANNOTATION LINKING MARK
+3191 IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192 IDEOGRAPHIC ANNOTATION ONE MARK
+3193 IDEOGRAPHIC ANNOTATION TWO MARK
+3194 IDEOGRAPHIC ANNOTATION THREE MARK
+3195 IDEOGRAPHIC ANNOTATION FOUR MARK
+3196 IDEOGRAPHIC ANNOTATION TOP MARK
+3197 IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198 IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199 IDEOGRAPHIC ANNOTATION FIRST MARK
+319A IDEOGRAPHIC ANNOTATION SECOND MARK
+319B IDEOGRAPHIC ANNOTATION THIRD MARK
+319C IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E IDEOGRAPHIC ANNOTATION EARTH MARK
+319F IDEOGRAPHIC ANNOTATION MAN MARK
+31A0 BOPOMOFO LETTER BU
+31A1 BOPOMOFO LETTER ZI
+31A2 BOPOMOFO LETTER JI
+31A3 BOPOMOFO LETTER GU
+31A4 BOPOMOFO LETTER EE
+31A5 BOPOMOFO LETTER ENN
+31A6 BOPOMOFO LETTER OO
+31A7 BOPOMOFO LETTER ONN
+31A8 BOPOMOFO LETTER IR
+31A9 BOPOMOFO LETTER ANN
+31AA BOPOMOFO LETTER INN
+31AB BOPOMOFO LETTER UNN
+31AC BOPOMOFO LETTER IM
+31AD BOPOMOFO LETTER NGG
+31AE BOPOMOFO LETTER AINN
+31AF BOPOMOFO LETTER AUNN
+31B0 BOPOMOFO LETTER AM
+31B1 BOPOMOFO LETTER OM
+31B2 BOPOMOFO LETTER ONG
+31B3 BOPOMOFO LETTER INNN
+31B4 BOPOMOFO FINAL LETTER P
+31B5 BOPOMOFO FINAL LETTER T
+31B6 BOPOMOFO FINAL LETTER K
+31B7 BOPOMOFO FINAL LETTER H
+31C0 CJK STROKE T
+31C1 CJK STROKE WG
+31C2 CJK STROKE XG
+31C3 CJK STROKE BXG
+31C4 CJK STROKE SW
+31C5 CJK STROKE HZZ
+31C6 CJK STROKE HZG
+31C7 CJK STROKE HP
+31C8 CJK STROKE HZWG
+31C9 CJK STROKE SZWG
+31CA CJK STROKE HZT
+31CB CJK STROKE HZZP
+31CC CJK STROKE HPWG
+31CD CJK STROKE HZW
+31CE CJK STROKE HZZZ
+31CF CJK STROKE N
+31F0 KATAKANA LETTER SMALL KU
+31F1 KATAKANA LETTER SMALL SI
+31F2 KATAKANA LETTER SMALL SU
+31F3 KATAKANA LETTER SMALL TO
+31F4 KATAKANA LETTER SMALL NU
+31F5 KATAKANA LETTER SMALL HA
+31F6 KATAKANA LETTER SMALL HI
+31F7 KATAKANA LETTER SMALL HU
+31F8 KATAKANA LETTER SMALL HE
+31F9 KATAKANA LETTER SMALL HO
+31FA KATAKANA LETTER SMALL MU
+31FB KATAKANA LETTER SMALL RA
+31FC KATAKANA LETTER SMALL RI
+31FD KATAKANA LETTER SMALL RU
+31FE KATAKANA LETTER SMALL RE
+31FF KATAKANA LETTER SMALL RO
+3200 PARENTHESIZED HANGUL KIYEOK
+3201 PARENTHESIZED HANGUL NIEUN
+3202 PARENTHESIZED HANGUL TIKEUT
+3203 PARENTHESIZED HANGUL RIEUL
+3204 PARENTHESIZED HANGUL MIEUM
+3205 PARENTHESIZED HANGUL PIEUP
+3206 PARENTHESIZED HANGUL SIOS
+3207 PARENTHESIZED HANGUL IEUNG
+3208 PARENTHESIZED HANGUL CIEUC
+3209 PARENTHESIZED HANGUL CHIEUCH
+320A PARENTHESIZED HANGUL KHIEUKH
+320B PARENTHESIZED HANGUL THIEUTH
+320C PARENTHESIZED HANGUL PHIEUPH
+320D PARENTHESIZED HANGUL HIEUH
+320E PARENTHESIZED HANGUL KIYEOK A
+320F PARENTHESIZED HANGUL NIEUN A
+3210 PARENTHESIZED HANGUL TIKEUT A
+3211 PARENTHESIZED HANGUL RIEUL A
+3212 PARENTHESIZED HANGUL MIEUM A
+3213 PARENTHESIZED HANGUL PIEUP A
+3214 PARENTHESIZED HANGUL SIOS A
+3215 PARENTHESIZED HANGUL IEUNG A
+3216 PARENTHESIZED HANGUL CIEUC A
+3217 PARENTHESIZED HANGUL CHIEUCH A
+3218 PARENTHESIZED HANGUL KHIEUKH A
+3219 PARENTHESIZED HANGUL THIEUTH A
+321A PARENTHESIZED HANGUL PHIEUPH A
+321B PARENTHESIZED HANGUL HIEUH A
+321C PARENTHESIZED HANGUL CIEUC U
+321D PARENTHESIZED KOREAN CHARACTER OJEON
+321E PARENTHESIZED KOREAN CHARACTER O HU
+3220 PARENTHESIZED IDEOGRAPH ONE
+3221 PARENTHESIZED IDEOGRAPH TWO
+3222 PARENTHESIZED IDEOGRAPH THREE
+3223 PARENTHESIZED IDEOGRAPH FOUR
+3224 PARENTHESIZED IDEOGRAPH FIVE
+3225 PARENTHESIZED IDEOGRAPH SIX
+3226 PARENTHESIZED IDEOGRAPH SEVEN
+3227 PARENTHESIZED IDEOGRAPH EIGHT
+3228 PARENTHESIZED IDEOGRAPH NINE
+3229 PARENTHESIZED IDEOGRAPH TEN
+322A PARENTHESIZED IDEOGRAPH MOON
+322B PARENTHESIZED IDEOGRAPH FIRE
+322C PARENTHESIZED IDEOGRAPH WATER
+322D PARENTHESIZED IDEOGRAPH WOOD
+322E PARENTHESIZED IDEOGRAPH METAL
+322F PARENTHESIZED IDEOGRAPH EARTH
+3230 PARENTHESIZED IDEOGRAPH SUN
+3231 PARENTHESIZED IDEOGRAPH STOCK
+3232 PARENTHESIZED IDEOGRAPH HAVE
+3233 PARENTHESIZED IDEOGRAPH SOCIETY
+3234 PARENTHESIZED IDEOGRAPH NAME
+3235 PARENTHESIZED IDEOGRAPH SPECIAL
+3236 PARENTHESIZED IDEOGRAPH FINANCIAL
+3237 PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238 PARENTHESIZED IDEOGRAPH LABOR
+3239 PARENTHESIZED IDEOGRAPH REPRESENT
+323A PARENTHESIZED IDEOGRAPH CALL
+323B PARENTHESIZED IDEOGRAPH STUDY
+323C PARENTHESIZED IDEOGRAPH SUPERVISE
+323D PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E PARENTHESIZED IDEOGRAPH RESOURCE
+323F PARENTHESIZED IDEOGRAPH ALLIANCE
+3240 PARENTHESIZED IDEOGRAPH FESTIVAL
+3241 PARENTHESIZED IDEOGRAPH REST
+3242 PARENTHESIZED IDEOGRAPH SELF
+3243 PARENTHESIZED IDEOGRAPH REACH
+3250 PARTNERSHIP SIGN
+3251 CIRCLED NUMBER TWENTY ONE
+3252 CIRCLED NUMBER TWENTY TWO
+3253 CIRCLED NUMBER TWENTY THREE
+3254 CIRCLED NUMBER TWENTY FOUR
+3255 CIRCLED NUMBER TWENTY FIVE
+3256 CIRCLED NUMBER TWENTY SIX
+3257 CIRCLED NUMBER TWENTY SEVEN
+3258 CIRCLED NUMBER TWENTY EIGHT
+3259 CIRCLED NUMBER TWENTY NINE
+325A CIRCLED NUMBER THIRTY
+325B CIRCLED NUMBER THIRTY ONE
+325C CIRCLED NUMBER THIRTY TWO
+325D CIRCLED NUMBER THIRTY THREE
+325E CIRCLED NUMBER THIRTY FOUR
+325F CIRCLED NUMBER THIRTY FIVE
+3260 CIRCLED HANGUL KIYEOK
+3261 CIRCLED HANGUL NIEUN
+3262 CIRCLED HANGUL TIKEUT
+3263 CIRCLED HANGUL RIEUL
+3264 CIRCLED HANGUL MIEUM
+3265 CIRCLED HANGUL PIEUP
+3266 CIRCLED HANGUL SIOS
+3267 CIRCLED HANGUL IEUNG
+3268 CIRCLED HANGUL CIEUC
+3269 CIRCLED HANGUL CHIEUCH
+326A CIRCLED HANGUL KHIEUKH
+326B CIRCLED HANGUL THIEUTH
+326C CIRCLED HANGUL PHIEUPH
+326D CIRCLED HANGUL HIEUH
+326E CIRCLED HANGUL KIYEOK A
+326F CIRCLED HANGUL NIEUN A
+3270 CIRCLED HANGUL TIKEUT A
+3271 CIRCLED HANGUL RIEUL A
+3272 CIRCLED HANGUL MIEUM A
+3273 CIRCLED HANGUL PIEUP A
+3274 CIRCLED HANGUL SIOS A
+3275 CIRCLED HANGUL IEUNG A
+3276 CIRCLED HANGUL CIEUC A
+3277 CIRCLED HANGUL CHIEUCH A
+3278 CIRCLED HANGUL KHIEUKH A
+3279 CIRCLED HANGUL THIEUTH A
+327A CIRCLED HANGUL PHIEUPH A
+327B CIRCLED HANGUL HIEUH A
+327C CIRCLED KOREAN CHARACTER CHAMKO
+327D CIRCLED KOREAN CHARACTER JUEUI
+327E CIRCLED HANGUL IEUNG U
+327F KOREAN STANDARD SYMBOL
+3280 CIRCLED IDEOGRAPH ONE
+3281 CIRCLED IDEOGRAPH TWO
+3282 CIRCLED IDEOGRAPH THREE
+3283 CIRCLED IDEOGRAPH FOUR
+3284 CIRCLED IDEOGRAPH FIVE
+3285 CIRCLED IDEOGRAPH SIX
+3286 CIRCLED IDEOGRAPH SEVEN
+3287 CIRCLED IDEOGRAPH EIGHT
+3288 CIRCLED IDEOGRAPH NINE
+3289 CIRCLED IDEOGRAPH TEN
+328A CIRCLED IDEOGRAPH MOON
+328B CIRCLED IDEOGRAPH FIRE
+328C CIRCLED IDEOGRAPH WATER
+328D CIRCLED IDEOGRAPH WOOD
+328E CIRCLED IDEOGRAPH METAL
+328F CIRCLED IDEOGRAPH EARTH
+3290 CIRCLED IDEOGRAPH SUN
+3291 CIRCLED IDEOGRAPH STOCK
+3292 CIRCLED IDEOGRAPH HAVE
+3293 CIRCLED IDEOGRAPH SOCIETY
+3294 CIRCLED IDEOGRAPH NAME
+3295 CIRCLED IDEOGRAPH SPECIAL
+3296 CIRCLED IDEOGRAPH FINANCIAL
+3297 CIRCLED IDEOGRAPH CONGRATULATION
+3298 CIRCLED IDEOGRAPH LABOR
+3299 CIRCLED IDEOGRAPH SECRET
+329A CIRCLED IDEOGRAPH MALE
+329B CIRCLED IDEOGRAPH FEMALE
+329C CIRCLED IDEOGRAPH SUITABLE
+329D CIRCLED IDEOGRAPH EXCELLENT
+329E CIRCLED IDEOGRAPH PRINT
+329F CIRCLED IDEOGRAPH ATTENTION
+32A0 CIRCLED IDEOGRAPH ITEM
+32A1 CIRCLED IDEOGRAPH REST
+32A2 CIRCLED IDEOGRAPH COPY
+32A3 CIRCLED IDEOGRAPH CORRECT
+32A4 CIRCLED IDEOGRAPH HIGH
+32A5 CIRCLED IDEOGRAPH CENTRE
+32A6 CIRCLED IDEOGRAPH LOW
+32A7 CIRCLED IDEOGRAPH LEFT
+32A8 CIRCLED IDEOGRAPH RIGHT
+32A9 CIRCLED IDEOGRAPH MEDICINE
+32AA CIRCLED IDEOGRAPH RELIGION
+32AB CIRCLED IDEOGRAPH STUDY
+32AC CIRCLED IDEOGRAPH SUPERVISE
+32AD CIRCLED IDEOGRAPH ENTERPRISE
+32AE CIRCLED IDEOGRAPH RESOURCE
+32AF CIRCLED IDEOGRAPH ALLIANCE
+32B0 CIRCLED IDEOGRAPH NIGHT
+32B1 CIRCLED NUMBER THIRTY SIX
+32B2 CIRCLED NUMBER THIRTY SEVEN
+32B3 CIRCLED NUMBER THIRTY EIGHT
+32B4 CIRCLED NUMBER THIRTY NINE
+32B5 CIRCLED NUMBER FORTY
+32B6 CIRCLED NUMBER FORTY ONE
+32B7 CIRCLED NUMBER FORTY TWO
+32B8 CIRCLED NUMBER FORTY THREE
+32B9 CIRCLED NUMBER FORTY FOUR
+32BA CIRCLED NUMBER FORTY FIVE
+32BB CIRCLED NUMBER FORTY SIX
+32BC CIRCLED NUMBER FORTY SEVEN
+32BD CIRCLED NUMBER FORTY EIGHT
+32BE CIRCLED NUMBER FORTY NINE
+32BF CIRCLED NUMBER FIFTY
+32C0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC SQUARE HG
+32CD SQUARE ERG
+32CE SQUARE EV
+32CF LIMITED LIABILITY SIGN
+32D0 CIRCLED KATAKANA A
+32D1 CIRCLED KATAKANA I
+32D2 CIRCLED KATAKANA U
+32D3 CIRCLED KATAKANA E
+32D4 CIRCLED KATAKANA O
+32D5 CIRCLED KATAKANA KA
+32D6 CIRCLED KATAKANA KI
+32D7 CIRCLED KATAKANA KU
+32D8 CIRCLED KATAKANA KE
+32D9 CIRCLED KATAKANA KO
+32DA CIRCLED KATAKANA SA
+32DB CIRCLED KATAKANA SI
+32DC CIRCLED KATAKANA SU
+32DD CIRCLED KATAKANA SE
+32DE CIRCLED KATAKANA SO
+32DF CIRCLED KATAKANA TA
+32E0 CIRCLED KATAKANA TI
+32E1 CIRCLED KATAKANA TU
+32E2 CIRCLED KATAKANA TE
+32E3 CIRCLED KATAKANA TO
+32E4 CIRCLED KATAKANA NA
+32E5 CIRCLED KATAKANA NI
+32E6 CIRCLED KATAKANA NU
+32E7 CIRCLED KATAKANA NE
+32E8 CIRCLED KATAKANA NO
+32E9 CIRCLED KATAKANA HA
+32EA CIRCLED KATAKANA HI
+32EB CIRCLED KATAKANA HU
+32EC CIRCLED KATAKANA HE
+32ED CIRCLED KATAKANA HO
+32EE CIRCLED KATAKANA MA
+32EF CIRCLED KATAKANA MI
+32F0 CIRCLED KATAKANA MU
+32F1 CIRCLED KATAKANA ME
+32F2 CIRCLED KATAKANA MO
+32F3 CIRCLED KATAKANA YA
+32F4 CIRCLED KATAKANA YU
+32F5 CIRCLED KATAKANA YO
+32F6 CIRCLED KATAKANA RA
+32F7 CIRCLED KATAKANA RI
+32F8 CIRCLED KATAKANA RU
+32F9 CIRCLED KATAKANA RE
+32FA CIRCLED KATAKANA RO
+32FB CIRCLED KATAKANA WA
+32FC CIRCLED KATAKANA WI
+32FD CIRCLED KATAKANA WE
+32FE CIRCLED KATAKANA WO
+3300 SQUARE APAATO
+3301 SQUARE ARUHUA
+3302 SQUARE ANPEA
+3303 SQUARE AARU
+3304 SQUARE ININGU
+3305 SQUARE INTI
+3306 SQUARE UON
+3307 SQUARE ESUKUUDO
+3308 SQUARE EEKAA
+3309 SQUARE ONSU
+330A SQUARE OOMU
+330B SQUARE KAIRI
+330C SQUARE KARATTO
+330D SQUARE KARORII
+330E SQUARE GARON
+330F SQUARE GANMA
+3310 SQUARE GIGA
+3311 SQUARE GINII
+3312 SQUARE KYURII
+3313 SQUARE GIRUDAA
+3314 SQUARE KIRO
+3315 SQUARE KIROGURAMU
+3316 SQUARE KIROMEETORU
+3317 SQUARE KIROWATTO
+3318 SQUARE GURAMU
+3319 SQUARE GURAMUTON
+331A SQUARE KURUZEIRO
+331B SQUARE KUROONE
+331C SQUARE KEESU
+331D SQUARE KORUNA
+331E SQUARE KOOPO
+331F SQUARE SAIKURU
+3320 SQUARE SANTIIMU
+3321 SQUARE SIRINGU
+3322 SQUARE SENTI
+3323 SQUARE SENTO
+3324 SQUARE DAASU
+3325 SQUARE DESI
+3326 SQUARE DORU
+3327 SQUARE TON
+3328 SQUARE NANO
+3329 SQUARE NOTTO
+332A SQUARE HAITU
+332B SQUARE PAASENTO
+332C SQUARE PAATU
+332D SQUARE BAARERU
+332E SQUARE PIASUTORU
+332F SQUARE PIKURU
+3330 SQUARE PIKO
+3331 SQUARE BIRU
+3332 SQUARE HUARADDO
+3333 SQUARE HUIITO
+3334 SQUARE BUSSYERU
+3335 SQUARE HURAN
+3336 SQUARE HEKUTAARU
+3337 SQUARE PESO
+3338 SQUARE PENIHI
+3339 SQUARE HERUTU
+333A SQUARE PENSU
+333B SQUARE PEEZI
+333C SQUARE BEETA
+333D SQUARE POINTO
+333E SQUARE BORUTO
+333F SQUARE HON
+3340 SQUARE PONDO
+3341 SQUARE HOORU
+3342 SQUARE HOON
+3343 SQUARE MAIKURO
+3344 SQUARE MAIRU
+3345 SQUARE MAHHA
+3346 SQUARE MARUKU
+3347 SQUARE MANSYON
+3348 SQUARE MIKURON
+3349 SQUARE MIRI
+334A SQUARE MIRIBAARU
+334B SQUARE MEGA
+334C SQUARE MEGATON
+334D SQUARE MEETORU
+334E SQUARE YAADO
+334F SQUARE YAARU
+3350 SQUARE YUAN
+3351 SQUARE RITTORU
+3352 SQUARE RIRA
+3353 SQUARE RUPII
+3354 SQUARE RUUBURU
+3355 SQUARE REMU
+3356 SQUARE RENTOGEN
+3357 SQUARE WATTO
+3358 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371 SQUARE HPA
+3372 SQUARE DA
+3373 SQUARE AU
+3374 SQUARE BAR
+3375 SQUARE OV
+3376 SQUARE PC
+3377 SQUARE DM
+3378 SQUARE DM SQUARED
+3379 SQUARE DM CUBED
+337A SQUARE IU
+337B SQUARE ERA NAME HEISEI
+337C SQUARE ERA NAME SYOUWA
+337D SQUARE ERA NAME TAISYOU
+337E SQUARE ERA NAME MEIZI
+337F SQUARE CORPORATION
+3380 SQUARE PA AMPS
+3381 SQUARE NA
+3382 SQUARE MU A
+3383 SQUARE MA
+3384 SQUARE KA
+3385 SQUARE KB
+3386 SQUARE MB
+3387 SQUARE GB
+3388 SQUARE CAL
+3389 SQUARE KCAL
+338A SQUARE PF
+338B SQUARE NF
+338C SQUARE MU F
+338D SQUARE MU G
+338E SQUARE MG
+338F SQUARE KG
+3390 SQUARE HZ
+3391 SQUARE KHZ
+3392 SQUARE MHZ
+3393 SQUARE GHZ
+3394 SQUARE THZ
+3395 SQUARE MU L
+3396 SQUARE ML
+3397 SQUARE DL
+3398 SQUARE KL
+3399 SQUARE FM
+339A SQUARE NM
+339B SQUARE MU M
+339C SQUARE MM
+339D SQUARE CM
+339E SQUARE KM
+339F SQUARE MM SQUARED
+33A0 SQUARE CM SQUARED
+33A1 SQUARE M SQUARED
+33A2 SQUARE KM SQUARED
+33A3 SQUARE MM CUBED
+33A4 SQUARE CM CUBED
+33A5 SQUARE M CUBED
+33A6 SQUARE KM CUBED
+33A7 SQUARE M OVER S
+33A8 SQUARE M OVER S SQUARED
+33A9 SQUARE PA
+33AA SQUARE KPA
+33AB SQUARE MPA
+33AC SQUARE GPA
+33AD SQUARE RAD
+33AE SQUARE RAD OVER S
+33AF SQUARE RAD OVER S SQUARED
+33B0 SQUARE PS
+33B1 SQUARE NS
+33B2 SQUARE MU S
+33B3 SQUARE MS
+33B4 SQUARE PV
+33B5 SQUARE NV
+33B6 SQUARE MU V
+33B7 SQUARE MV
+33B8 SQUARE KV
+33B9 SQUARE MV MEGA
+33BA SQUARE PW
+33BB SQUARE NW
+33BC SQUARE MU W
+33BD SQUARE MW
+33BE SQUARE KW
+33BF SQUARE MW MEGA
+33C0 SQUARE K OHM
+33C1 SQUARE M OHM
+33C2 SQUARE AM
+33C3 SQUARE BQ
+33C4 SQUARE CC
+33C5 SQUARE CD
+33C6 SQUARE C OVER KG
+33C7 SQUARE CO
+33C8 SQUARE DB
+33C9 SQUARE GY
+33CA SQUARE HA
+33CB SQUARE HP
+33CC SQUARE IN
+33CD SQUARE KK
+33CE SQUARE KM CAPITAL
+33CF SQUARE KT
+33D0 SQUARE LM
+33D1 SQUARE LN
+33D2 SQUARE LOG
+33D3 SQUARE LX
+33D4 SQUARE MB SMALL
+33D5 SQUARE MIL
+33D6 SQUARE MOL
+33D7 SQUARE PH
+33D8 SQUARE PM
+33D9 SQUARE PPM
+33DA SQUARE PR
+33DB SQUARE SR
+33DC SQUARE SV
+33DD SQUARE WB
+33DE SQUARE V OVER M
+33DF SQUARE A OVER M
+33E0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF SQUARE GAL
+3400 4DB5 CJK Ideograph Extension A
+4DC0 HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1 HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2 HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3 HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4 HEXAGRAM FOR WAITING
+4DC5 HEXAGRAM FOR CONFLICT
+4DC6 HEXAGRAM FOR THE ARMY
+4DC7 HEXAGRAM FOR HOLDING TOGETHER
+4DC8 HEXAGRAM FOR SMALL TAMING
+4DC9 HEXAGRAM FOR TREADING
+4DCA HEXAGRAM FOR PEACE
+4DCB HEXAGRAM FOR STANDSTILL
+4DCC HEXAGRAM FOR FELLOWSHIP
+4DCD HEXAGRAM FOR GREAT POSSESSION
+4DCE HEXAGRAM FOR MODESTY
+4DCF HEXAGRAM FOR ENTHUSIASM
+4DD0 HEXAGRAM FOR FOLLOWING
+4DD1 HEXAGRAM FOR WORK ON THE DECAYED
+4DD2 HEXAGRAM FOR APPROACH
+4DD3 HEXAGRAM FOR CONTEMPLATION
+4DD4 HEXAGRAM FOR BITING THROUGH
+4DD5 HEXAGRAM FOR GRACE
+4DD6 HEXAGRAM FOR SPLITTING APART
+4DD7 HEXAGRAM FOR RETURN
+4DD8 HEXAGRAM FOR INNOCENCE
+4DD9 HEXAGRAM FOR GREAT TAMING
+4DDA HEXAGRAM FOR MOUTH CORNERS
+4DDB HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC HEXAGRAM FOR THE ABYSMAL WATER
+4DDD HEXAGRAM FOR THE CLINGING FIRE
+4DDE HEXAGRAM FOR INFLUENCE
+4DDF HEXAGRAM FOR DURATION
+4DE0 HEXAGRAM FOR RETREAT
+4DE1 HEXAGRAM FOR GREAT POWER
+4DE2 HEXAGRAM FOR PROGRESS
+4DE3 HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4 HEXAGRAM FOR THE FAMILY
+4DE5 HEXAGRAM FOR OPPOSITION
+4DE6 HEXAGRAM FOR OBSTRUCTION
+4DE7 HEXAGRAM FOR DELIVERANCE
+4DE8 HEXAGRAM FOR DECREASE
+4DE9 HEXAGRAM FOR INCREASE
+4DEA HEXAGRAM FOR BREAKTHROUGH
+4DEB HEXAGRAM FOR COMING TO MEET
+4DEC HEXAGRAM FOR GATHERING TOGETHER
+4DED HEXAGRAM FOR PUSHING UPWARD
+4DEE HEXAGRAM FOR OPPRESSION
+4DEF HEXAGRAM FOR THE WELL
+4DF0 HEXAGRAM FOR REVOLUTION
+4DF1 HEXAGRAM FOR THE CAULDRON
+4DF2 HEXAGRAM FOR THE AROUSING THUNDER
+4DF3 HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4 HEXAGRAM FOR DEVELOPMENT
+4DF5 HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6 HEXAGRAM FOR ABUNDANCE
+4DF7 HEXAGRAM FOR THE WANDERER
+4DF8 HEXAGRAM FOR THE GENTLE WIND
+4DF9 HEXAGRAM FOR THE JOYOUS LAKE
+4DFA HEXAGRAM FOR DISPERSION
+4DFB HEXAGRAM FOR LIMITATION
+4DFC HEXAGRAM FOR INNER TRUTH
+4DFD HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE HEXAGRAM FOR AFTER COMPLETION
+4DFF HEXAGRAM FOR BEFORE COMPLETION
+4E00 9FBB CJK Ideograph
+A000 YI SYLLABLE IT
+A001 YI SYLLABLE IX
+A002 YI SYLLABLE I
+A003 YI SYLLABLE IP
+A004 YI SYLLABLE IET
+A005 YI SYLLABLE IEX
+A006 YI SYLLABLE IE
+A007 YI SYLLABLE IEP
+A008 YI SYLLABLE AT
+A009 YI SYLLABLE AX
+A00A YI SYLLABLE A
+A00B YI SYLLABLE AP
+A00C YI SYLLABLE UOX
+A00D YI SYLLABLE UO
+A00E YI SYLLABLE UOP
+A00F YI SYLLABLE OT
+A010 YI SYLLABLE OX
+A011 YI SYLLABLE O
+A012 YI SYLLABLE OP
+A013 YI SYLLABLE EX
+A014 YI SYLLABLE E
+A015 YI SYLLABLE WU
+A016 YI SYLLABLE BIT
+A017 YI SYLLABLE BIX
+A018 YI SYLLABLE BI
+A019 YI SYLLABLE BIP
+A01A YI SYLLABLE BIET
+A01B YI SYLLABLE BIEX
+A01C YI SYLLABLE BIE
+A01D YI SYLLABLE BIEP
+A01E YI SYLLABLE BAT
+A01F YI SYLLABLE BAX
+A020 YI SYLLABLE BA
+A021 YI SYLLABLE BAP
+A022 YI SYLLABLE BUOX
+A023 YI SYLLABLE BUO
+A024 YI SYLLABLE BUOP
+A025 YI SYLLABLE BOT
+A026 YI SYLLABLE BOX
+A027 YI SYLLABLE BO
+A028 YI SYLLABLE BOP
+A029 YI SYLLABLE BEX
+A02A YI SYLLABLE BE
+A02B YI SYLLABLE BEP
+A02C YI SYLLABLE BUT
+A02D YI SYLLABLE BUX
+A02E YI SYLLABLE BU
+A02F YI SYLLABLE BUP
+A030 YI SYLLABLE BURX
+A031 YI SYLLABLE BUR
+A032 YI SYLLABLE BYT
+A033 YI SYLLABLE BYX
+A034 YI SYLLABLE BY
+A035 YI SYLLABLE BYP
+A036 YI SYLLABLE BYRX
+A037 YI SYLLABLE BYR
+A038 YI SYLLABLE PIT
+A039 YI SYLLABLE PIX
+A03A YI SYLLABLE PI
+A03B YI SYLLABLE PIP
+A03C YI SYLLABLE PIEX
+A03D YI SYLLABLE PIE
+A03E YI SYLLABLE PIEP
+A03F YI SYLLABLE PAT
+A040 YI SYLLABLE PAX
+A041 YI SYLLABLE PA
+A042 YI SYLLABLE PAP
+A043 YI SYLLABLE PUOX
+A044 YI SYLLABLE PUO
+A045 YI SYLLABLE PUOP
+A046 YI SYLLABLE POT
+A047 YI SYLLABLE POX
+A048 YI SYLLABLE PO
+A049 YI SYLLABLE POP
+A04A YI SYLLABLE PUT
+A04B YI SYLLABLE PUX
+A04C YI SYLLABLE PU
+A04D YI SYLLABLE PUP
+A04E YI SYLLABLE PURX
+A04F YI SYLLABLE PUR
+A050 YI SYLLABLE PYT
+A051 YI SYLLABLE PYX
+A052 YI SYLLABLE PY
+A053 YI SYLLABLE PYP
+A054 YI SYLLABLE PYRX
+A055 YI SYLLABLE PYR
+A056 YI SYLLABLE BBIT
+A057 YI SYLLABLE BBIX
+A058 YI SYLLABLE BBI
+A059 YI SYLLABLE BBIP
+A05A YI SYLLABLE BBIET
+A05B YI SYLLABLE BBIEX
+A05C YI SYLLABLE BBIE
+A05D YI SYLLABLE BBIEP
+A05E YI SYLLABLE BBAT
+A05F YI SYLLABLE BBAX
+A060 YI SYLLABLE BBA
+A061 YI SYLLABLE BBAP
+A062 YI SYLLABLE BBUOX
+A063 YI SYLLABLE BBUO
+A064 YI SYLLABLE BBUOP
+A065 YI SYLLABLE BBOT
+A066 YI SYLLABLE BBOX
+A067 YI SYLLABLE BBO
+A068 YI SYLLABLE BBOP
+A069 YI SYLLABLE BBEX
+A06A YI SYLLABLE BBE
+A06B YI SYLLABLE BBEP
+A06C YI SYLLABLE BBUT
+A06D YI SYLLABLE BBUX
+A06E YI SYLLABLE BBU
+A06F YI SYLLABLE BBUP
+A070 YI SYLLABLE BBURX
+A071 YI SYLLABLE BBUR
+A072 YI SYLLABLE BBYT
+A073 YI SYLLABLE BBYX
+A074 YI SYLLABLE BBY
+A075 YI SYLLABLE BBYP
+A076 YI SYLLABLE NBIT
+A077 YI SYLLABLE NBIX
+A078 YI SYLLABLE NBI
+A079 YI SYLLABLE NBIP
+A07A YI SYLLABLE NBIEX
+A07B YI SYLLABLE NBIE
+A07C YI SYLLABLE NBIEP
+A07D YI SYLLABLE NBAT
+A07E YI SYLLABLE NBAX
+A07F YI SYLLABLE NBA
+A080 YI SYLLABLE NBAP
+A081 YI SYLLABLE NBOT
+A082 YI SYLLABLE NBOX
+A083 YI SYLLABLE NBO
+A084 YI SYLLABLE NBOP
+A085 YI SYLLABLE NBUT
+A086 YI SYLLABLE NBUX
+A087 YI SYLLABLE NBU
+A088 YI SYLLABLE NBUP
+A089 YI SYLLABLE NBURX
+A08A YI SYLLABLE NBUR
+A08B YI SYLLABLE NBYT
+A08C YI SYLLABLE NBYX
+A08D YI SYLLABLE NBY
+A08E YI SYLLABLE NBYP
+A08F YI SYLLABLE NBYRX
+A090 YI SYLLABLE NBYR
+A091 YI SYLLABLE HMIT
+A092 YI SYLLABLE HMIX
+A093 YI SYLLABLE HMI
+A094 YI SYLLABLE HMIP
+A095 YI SYLLABLE HMIEX
+A096 YI SYLLABLE HMIE
+A097 YI SYLLABLE HMIEP
+A098 YI SYLLABLE HMAT
+A099 YI SYLLABLE HMAX
+A09A YI SYLLABLE HMA
+A09B YI SYLLABLE HMAP
+A09C YI SYLLABLE HMUOX
+A09D YI SYLLABLE HMUO
+A09E YI SYLLABLE HMUOP
+A09F YI SYLLABLE HMOT
+A0A0 YI SYLLABLE HMOX
+A0A1 YI SYLLABLE HMO
+A0A2 YI SYLLABLE HMOP
+A0A3 YI SYLLABLE HMUT
+A0A4 YI SYLLABLE HMUX
+A0A5 YI SYLLABLE HMU
+A0A6 YI SYLLABLE HMUP
+A0A7 YI SYLLABLE HMURX
+A0A8 YI SYLLABLE HMUR
+A0A9 YI SYLLABLE HMYX
+A0AA YI SYLLABLE HMY
+A0AB YI SYLLABLE HMYP
+A0AC YI SYLLABLE HMYRX
+A0AD YI SYLLABLE HMYR
+A0AE YI SYLLABLE MIT
+A0AF YI SYLLABLE MIX
+A0B0 YI SYLLABLE MI
+A0B1 YI SYLLABLE MIP
+A0B2 YI SYLLABLE MIEX
+A0B3 YI SYLLABLE MIE
+A0B4 YI SYLLABLE MIEP
+A0B5 YI SYLLABLE MAT
+A0B6 YI SYLLABLE MAX
+A0B7 YI SYLLABLE MA
+A0B8 YI SYLLABLE MAP
+A0B9 YI SYLLABLE MUOT
+A0BA YI SYLLABLE MUOX
+A0BB YI SYLLABLE MUO
+A0BC YI SYLLABLE MUOP
+A0BD YI SYLLABLE MOT
+A0BE YI SYLLABLE MOX
+A0BF YI SYLLABLE MO
+A0C0 YI SYLLABLE MOP
+A0C1 YI SYLLABLE MEX
+A0C2 YI SYLLABLE ME
+A0C3 YI SYLLABLE MUT
+A0C4 YI SYLLABLE MUX
+A0C5 YI SYLLABLE MU
+A0C6 YI SYLLABLE MUP
+A0C7 YI SYLLABLE MURX
+A0C8 YI SYLLABLE MUR
+A0C9 YI SYLLABLE MYT
+A0CA YI SYLLABLE MYX
+A0CB YI SYLLABLE MY
+A0CC YI SYLLABLE MYP
+A0CD YI SYLLABLE FIT
+A0CE YI SYLLABLE FIX
+A0CF YI SYLLABLE FI
+A0D0 YI SYLLABLE FIP
+A0D1 YI SYLLABLE FAT
+A0D2 YI SYLLABLE FAX
+A0D3 YI SYLLABLE FA
+A0D4 YI SYLLABLE FAP
+A0D5 YI SYLLABLE FOX
+A0D6 YI SYLLABLE FO
+A0D7 YI SYLLABLE FOP
+A0D8 YI SYLLABLE FUT
+A0D9 YI SYLLABLE FUX
+A0DA YI SYLLABLE FU
+A0DB YI SYLLABLE FUP
+A0DC YI SYLLABLE FURX
+A0DD YI SYLLABLE FUR
+A0DE YI SYLLABLE FYT
+A0DF YI SYLLABLE FYX
+A0E0 YI SYLLABLE FY
+A0E1 YI SYLLABLE FYP
+A0E2 YI SYLLABLE VIT
+A0E3 YI SYLLABLE VIX
+A0E4 YI SYLLABLE VI
+A0E5 YI SYLLABLE VIP
+A0E6 YI SYLLABLE VIET
+A0E7 YI SYLLABLE VIEX
+A0E8 YI SYLLABLE VIE
+A0E9 YI SYLLABLE VIEP
+A0EA YI SYLLABLE VAT
+A0EB YI SYLLABLE VAX
+A0EC YI SYLLABLE VA
+A0ED YI SYLLABLE VAP
+A0EE YI SYLLABLE VOT
+A0EF YI SYLLABLE VOX
+A0F0 YI SYLLABLE VO
+A0F1 YI SYLLABLE VOP
+A0F2 YI SYLLABLE VEX
+A0F3 YI SYLLABLE VEP
+A0F4 YI SYLLABLE VUT
+A0F5 YI SYLLABLE VUX
+A0F6 YI SYLLABLE VU
+A0F7 YI SYLLABLE VUP
+A0F8 YI SYLLABLE VURX
+A0F9 YI SYLLABLE VUR
+A0FA YI SYLLABLE VYT
+A0FB YI SYLLABLE VYX
+A0FC YI SYLLABLE VY
+A0FD YI SYLLABLE VYP
+A0FE YI SYLLABLE VYRX
+A0FF YI SYLLABLE VYR
+A100 YI SYLLABLE DIT
+A101 YI SYLLABLE DIX
+A102 YI SYLLABLE DI
+A103 YI SYLLABLE DIP
+A104 YI SYLLABLE DIEX
+A105 YI SYLLABLE DIE
+A106 YI SYLLABLE DIEP
+A107 YI SYLLABLE DAT
+A108 YI SYLLABLE DAX
+A109 YI SYLLABLE DA
+A10A YI SYLLABLE DAP
+A10B YI SYLLABLE DUOX
+A10C YI SYLLABLE DUO
+A10D YI SYLLABLE DOT
+A10E YI SYLLABLE DOX
+A10F YI SYLLABLE DO
+A110 YI SYLLABLE DOP
+A111 YI SYLLABLE DEX
+A112 YI SYLLABLE DE
+A113 YI SYLLABLE DEP
+A114 YI SYLLABLE DUT
+A115 YI SYLLABLE DUX
+A116 YI SYLLABLE DU
+A117 YI SYLLABLE DUP
+A118 YI SYLLABLE DURX
+A119 YI SYLLABLE DUR
+A11A YI SYLLABLE TIT
+A11B YI SYLLABLE TIX
+A11C YI SYLLABLE TI
+A11D YI SYLLABLE TIP
+A11E YI SYLLABLE TIEX
+A11F YI SYLLABLE TIE
+A120 YI SYLLABLE TIEP
+A121 YI SYLLABLE TAT
+A122 YI SYLLABLE TAX
+A123 YI SYLLABLE TA
+A124 YI SYLLABLE TAP
+A125 YI SYLLABLE TUOT
+A126 YI SYLLABLE TUOX
+A127 YI SYLLABLE TUO
+A128 YI SYLLABLE TUOP
+A129 YI SYLLABLE TOT
+A12A YI SYLLABLE TOX
+A12B YI SYLLABLE TO
+A12C YI SYLLABLE TOP
+A12D YI SYLLABLE TEX
+A12E YI SYLLABLE TE
+A12F YI SYLLABLE TEP
+A130 YI SYLLABLE TUT
+A131 YI SYLLABLE TUX
+A132 YI SYLLABLE TU
+A133 YI SYLLABLE TUP
+A134 YI SYLLABLE TURX
+A135 YI SYLLABLE TUR
+A136 YI SYLLABLE DDIT
+A137 YI SYLLABLE DDIX
+A138 YI SYLLABLE DDI
+A139 YI SYLLABLE DDIP
+A13A YI SYLLABLE DDIEX
+A13B YI SYLLABLE DDIE
+A13C YI SYLLABLE DDIEP
+A13D YI SYLLABLE DDAT
+A13E YI SYLLABLE DDAX
+A13F YI SYLLABLE DDA
+A140 YI SYLLABLE DDAP
+A141 YI SYLLABLE DDUOX
+A142 YI SYLLABLE DDUO
+A143 YI SYLLABLE DDUOP
+A144 YI SYLLABLE DDOT
+A145 YI SYLLABLE DDOX
+A146 YI SYLLABLE DDO
+A147 YI SYLLABLE DDOP
+A148 YI SYLLABLE DDEX
+A149 YI SYLLABLE DDE
+A14A YI SYLLABLE DDEP
+A14B YI SYLLABLE DDUT
+A14C YI SYLLABLE DDUX
+A14D YI SYLLABLE DDU
+A14E YI SYLLABLE DDUP
+A14F YI SYLLABLE DDURX
+A150 YI SYLLABLE DDUR
+A151 YI SYLLABLE NDIT
+A152 YI SYLLABLE NDIX
+A153 YI SYLLABLE NDI
+A154 YI SYLLABLE NDIP
+A155 YI SYLLABLE NDIEX
+A156 YI SYLLABLE NDIE
+A157 YI SYLLABLE NDAT
+A158 YI SYLLABLE NDAX
+A159 YI SYLLABLE NDA
+A15A YI SYLLABLE NDAP
+A15B YI SYLLABLE NDOT
+A15C YI SYLLABLE NDOX
+A15D YI SYLLABLE NDO
+A15E YI SYLLABLE NDOP
+A15F YI SYLLABLE NDEX
+A160 YI SYLLABLE NDE
+A161 YI SYLLABLE NDEP
+A162 YI SYLLABLE NDUT
+A163 YI SYLLABLE NDUX
+A164 YI SYLLABLE NDU
+A165 YI SYLLABLE NDUP
+A166 YI SYLLABLE NDURX
+A167 YI SYLLABLE NDUR
+A168 YI SYLLABLE HNIT
+A169 YI SYLLABLE HNIX
+A16A YI SYLLABLE HNI
+A16B YI SYLLABLE HNIP
+A16C YI SYLLABLE HNIET
+A16D YI SYLLABLE HNIEX
+A16E YI SYLLABLE HNIE
+A16F YI SYLLABLE HNIEP
+A170 YI SYLLABLE HNAT
+A171 YI SYLLABLE HNAX
+A172 YI SYLLABLE HNA
+A173 YI SYLLABLE HNAP
+A174 YI SYLLABLE HNUOX
+A175 YI SYLLABLE HNUO
+A176 YI SYLLABLE HNOT
+A177 YI SYLLABLE HNOX
+A178 YI SYLLABLE HNOP
+A179 YI SYLLABLE HNEX
+A17A YI SYLLABLE HNE
+A17B YI SYLLABLE HNEP
+A17C YI SYLLABLE HNUT
+A17D YI SYLLABLE NIT
+A17E YI SYLLABLE NIX
+A17F YI SYLLABLE NI
+A180 YI SYLLABLE NIP
+A181 YI SYLLABLE NIEX
+A182 YI SYLLABLE NIE
+A183 YI SYLLABLE NIEP
+A184 YI SYLLABLE NAX
+A185 YI SYLLABLE NA
+A186 YI SYLLABLE NAP
+A187 YI SYLLABLE NUOX
+A188 YI SYLLABLE NUO
+A189 YI SYLLABLE NUOP
+A18A YI SYLLABLE NOT
+A18B YI SYLLABLE NOX
+A18C YI SYLLABLE NO
+A18D YI SYLLABLE NOP
+A18E YI SYLLABLE NEX
+A18F YI SYLLABLE NE
+A190 YI SYLLABLE NEP
+A191 YI SYLLABLE NUT
+A192 YI SYLLABLE NUX
+A193 YI SYLLABLE NU
+A194 YI SYLLABLE NUP
+A195 YI SYLLABLE NURX
+A196 YI SYLLABLE NUR
+A197 YI SYLLABLE HLIT
+A198 YI SYLLABLE HLIX
+A199 YI SYLLABLE HLI
+A19A YI SYLLABLE HLIP
+A19B YI SYLLABLE HLIEX
+A19C YI SYLLABLE HLIE
+A19D YI SYLLABLE HLIEP
+A19E YI SYLLABLE HLAT
+A19F YI SYLLABLE HLAX
+A1A0 YI SYLLABLE HLA
+A1A1 YI SYLLABLE HLAP
+A1A2 YI SYLLABLE HLUOX
+A1A3 YI SYLLABLE HLUO
+A1A4 YI SYLLABLE HLUOP
+A1A5 YI SYLLABLE HLOX
+A1A6 YI SYLLABLE HLO
+A1A7 YI SYLLABLE HLOP
+A1A8 YI SYLLABLE HLEX
+A1A9 YI SYLLABLE HLE
+A1AA YI SYLLABLE HLEP
+A1AB YI SYLLABLE HLUT
+A1AC YI SYLLABLE HLUX
+A1AD YI SYLLABLE HLU
+A1AE YI SYLLABLE HLUP
+A1AF YI SYLLABLE HLURX
+A1B0 YI SYLLABLE HLUR
+A1B1 YI SYLLABLE HLYT
+A1B2 YI SYLLABLE HLYX
+A1B3 YI SYLLABLE HLY
+A1B4 YI SYLLABLE HLYP
+A1B5 YI SYLLABLE HLYRX
+A1B6 YI SYLLABLE HLYR
+A1B7 YI SYLLABLE LIT
+A1B8 YI SYLLABLE LIX
+A1B9 YI SYLLABLE LI
+A1BA YI SYLLABLE LIP
+A1BB YI SYLLABLE LIET
+A1BC YI SYLLABLE LIEX
+A1BD YI SYLLABLE LIE
+A1BE YI SYLLABLE LIEP
+A1BF YI SYLLABLE LAT
+A1C0 YI SYLLABLE LAX
+A1C1 YI SYLLABLE LA
+A1C2 YI SYLLABLE LAP
+A1C3 YI SYLLABLE LUOT
+A1C4 YI SYLLABLE LUOX
+A1C5 YI SYLLABLE LUO
+A1C6 YI SYLLABLE LUOP
+A1C7 YI SYLLABLE LOT
+A1C8 YI SYLLABLE LOX
+A1C9 YI SYLLABLE LO
+A1CA YI SYLLABLE LOP
+A1CB YI SYLLABLE LEX
+A1CC YI SYLLABLE LE
+A1CD YI SYLLABLE LEP
+A1CE YI SYLLABLE LUT
+A1CF YI SYLLABLE LUX
+A1D0 YI SYLLABLE LU
+A1D1 YI SYLLABLE LUP
+A1D2 YI SYLLABLE LURX
+A1D3 YI SYLLABLE LUR
+A1D4 YI SYLLABLE LYT
+A1D5 YI SYLLABLE LYX
+A1D6 YI SYLLABLE LY
+A1D7 YI SYLLABLE LYP
+A1D8 YI SYLLABLE LYRX
+A1D9 YI SYLLABLE LYR
+A1DA YI SYLLABLE GIT
+A1DB YI SYLLABLE GIX
+A1DC YI SYLLABLE GI
+A1DD YI SYLLABLE GIP
+A1DE YI SYLLABLE GIET
+A1DF YI SYLLABLE GIEX
+A1E0 YI SYLLABLE GIE
+A1E1 YI SYLLABLE GIEP
+A1E2 YI SYLLABLE GAT
+A1E3 YI SYLLABLE GAX
+A1E4 YI SYLLABLE GA
+A1E5 YI SYLLABLE GAP
+A1E6 YI SYLLABLE GUOT
+A1E7 YI SYLLABLE GUOX
+A1E8 YI SYLLABLE GUO
+A1E9 YI SYLLABLE GUOP
+A1EA YI SYLLABLE GOT
+A1EB YI SYLLABLE GOX
+A1EC YI SYLLABLE GO
+A1ED YI SYLLABLE GOP
+A1EE YI SYLLABLE GET
+A1EF YI SYLLABLE GEX
+A1F0 YI SYLLABLE GE
+A1F1 YI SYLLABLE GEP
+A1F2 YI SYLLABLE GUT
+A1F3 YI SYLLABLE GUX
+A1F4 YI SYLLABLE GU
+A1F5 YI SYLLABLE GUP
+A1F6 YI SYLLABLE GURX
+A1F7 YI SYLLABLE GUR
+A1F8 YI SYLLABLE KIT
+A1F9 YI SYLLABLE KIX
+A1FA YI SYLLABLE KI
+A1FB YI SYLLABLE KIP
+A1FC YI SYLLABLE KIEX
+A1FD YI SYLLABLE KIE
+A1FE YI SYLLABLE KIEP
+A1FF YI SYLLABLE KAT
+A200 YI SYLLABLE KAX
+A201 YI SYLLABLE KA
+A202 YI SYLLABLE KAP
+A203 YI SYLLABLE KUOX
+A204 YI SYLLABLE KUO
+A205 YI SYLLABLE KUOP
+A206 YI SYLLABLE KOT
+A207 YI SYLLABLE KOX
+A208 YI SYLLABLE KO
+A209 YI SYLLABLE KOP
+A20A YI SYLLABLE KET
+A20B YI SYLLABLE KEX
+A20C YI SYLLABLE KE
+A20D YI SYLLABLE KEP
+A20E YI SYLLABLE KUT
+A20F YI SYLLABLE KUX
+A210 YI SYLLABLE KU
+A211 YI SYLLABLE KUP
+A212 YI SYLLABLE KURX
+A213 YI SYLLABLE KUR
+A214 YI SYLLABLE GGIT
+A215 YI SYLLABLE GGIX
+A216 YI SYLLABLE GGI
+A217 YI SYLLABLE GGIEX
+A218 YI SYLLABLE GGIE
+A219 YI SYLLABLE GGIEP
+A21A YI SYLLABLE GGAT
+A21B YI SYLLABLE GGAX
+A21C YI SYLLABLE GGA
+A21D YI SYLLABLE GGAP
+A21E YI SYLLABLE GGUOT
+A21F YI SYLLABLE GGUOX
+A220 YI SYLLABLE GGUO
+A221 YI SYLLABLE GGUOP
+A222 YI SYLLABLE GGOT
+A223 YI SYLLABLE GGOX
+A224 YI SYLLABLE GGO
+A225 YI SYLLABLE GGOP
+A226 YI SYLLABLE GGET
+A227 YI SYLLABLE GGEX
+A228 YI SYLLABLE GGE
+A229 YI SYLLABLE GGEP
+A22A YI SYLLABLE GGUT
+A22B YI SYLLABLE GGUX
+A22C YI SYLLABLE GGU
+A22D YI SYLLABLE GGUP
+A22E YI SYLLABLE GGURX
+A22F YI SYLLABLE GGUR
+A230 YI SYLLABLE MGIEX
+A231 YI SYLLABLE MGIE
+A232 YI SYLLABLE MGAT
+A233 YI SYLLABLE MGAX
+A234 YI SYLLABLE MGA
+A235 YI SYLLABLE MGAP
+A236 YI SYLLABLE MGUOX
+A237 YI SYLLABLE MGUO
+A238 YI SYLLABLE MGUOP
+A239 YI SYLLABLE MGOT
+A23A YI SYLLABLE MGOX
+A23B YI SYLLABLE MGO
+A23C YI SYLLABLE MGOP
+A23D YI SYLLABLE MGEX
+A23E YI SYLLABLE MGE
+A23F YI SYLLABLE MGEP
+A240 YI SYLLABLE MGUT
+A241 YI SYLLABLE MGUX
+A242 YI SYLLABLE MGU
+A243 YI SYLLABLE MGUP
+A244 YI SYLLABLE MGURX
+A245 YI SYLLABLE MGUR
+A246 YI SYLLABLE HXIT
+A247 YI SYLLABLE HXIX
+A248 YI SYLLABLE HXI
+A249 YI SYLLABLE HXIP
+A24A YI SYLLABLE HXIET
+A24B YI SYLLABLE HXIEX
+A24C YI SYLLABLE HXIE
+A24D YI SYLLABLE HXIEP
+A24E YI SYLLABLE HXAT
+A24F YI SYLLABLE HXAX
+A250 YI SYLLABLE HXA
+A251 YI SYLLABLE HXAP
+A252 YI SYLLABLE HXUOT
+A253 YI SYLLABLE HXUOX
+A254 YI SYLLABLE HXUO
+A255 YI SYLLABLE HXUOP
+A256 YI SYLLABLE HXOT
+A257 YI SYLLABLE HXOX
+A258 YI SYLLABLE HXO
+A259 YI SYLLABLE HXOP
+A25A YI SYLLABLE HXEX
+A25B YI SYLLABLE HXE
+A25C YI SYLLABLE HXEP
+A25D YI SYLLABLE NGIEX
+A25E YI SYLLABLE NGIE
+A25F YI SYLLABLE NGIEP
+A260 YI SYLLABLE NGAT
+A261 YI SYLLABLE NGAX
+A262 YI SYLLABLE NGA
+A263 YI SYLLABLE NGAP
+A264 YI SYLLABLE NGUOT
+A265 YI SYLLABLE NGUOX
+A266 YI SYLLABLE NGUO
+A267 YI SYLLABLE NGOT
+A268 YI SYLLABLE NGOX
+A269 YI SYLLABLE NGO
+A26A YI SYLLABLE NGOP
+A26B YI SYLLABLE NGEX
+A26C YI SYLLABLE NGE
+A26D YI SYLLABLE NGEP
+A26E YI SYLLABLE HIT
+A26F YI SYLLABLE HIEX
+A270 YI SYLLABLE HIE
+A271 YI SYLLABLE HAT
+A272 YI SYLLABLE HAX
+A273 YI SYLLABLE HA
+A274 YI SYLLABLE HAP
+A275 YI SYLLABLE HUOT
+A276 YI SYLLABLE HUOX
+A277 YI SYLLABLE HUO
+A278 YI SYLLABLE HUOP
+A279 YI SYLLABLE HOT
+A27A YI SYLLABLE HOX
+A27B YI SYLLABLE HO
+A27C YI SYLLABLE HOP
+A27D YI SYLLABLE HEX
+A27E YI SYLLABLE HE
+A27F YI SYLLABLE HEP
+A280 YI SYLLABLE WAT
+A281 YI SYLLABLE WAX
+A282 YI SYLLABLE WA
+A283 YI SYLLABLE WAP
+A284 YI SYLLABLE WUOX
+A285 YI SYLLABLE WUO
+A286 YI SYLLABLE WUOP
+A287 YI SYLLABLE WOX
+A288 YI SYLLABLE WO
+A289 YI SYLLABLE WOP
+A28A YI SYLLABLE WEX
+A28B YI SYLLABLE WE
+A28C YI SYLLABLE WEP
+A28D YI SYLLABLE ZIT
+A28E YI SYLLABLE ZIX
+A28F YI SYLLABLE ZI
+A290 YI SYLLABLE ZIP
+A291 YI SYLLABLE ZIEX
+A292 YI SYLLABLE ZIE
+A293 YI SYLLABLE ZIEP
+A294 YI SYLLABLE ZAT
+A295 YI SYLLABLE ZAX
+A296 YI SYLLABLE ZA
+A297 YI SYLLABLE ZAP
+A298 YI SYLLABLE ZUOX
+A299 YI SYLLABLE ZUO
+A29A YI SYLLABLE ZUOP
+A29B YI SYLLABLE ZOT
+A29C YI SYLLABLE ZOX
+A29D YI SYLLABLE ZO
+A29E YI SYLLABLE ZOP
+A29F YI SYLLABLE ZEX
+A2A0 YI SYLLABLE ZE
+A2A1 YI SYLLABLE ZEP
+A2A2 YI SYLLABLE ZUT
+A2A3 YI SYLLABLE ZUX
+A2A4 YI SYLLABLE ZU
+A2A5 YI SYLLABLE ZUP
+A2A6 YI SYLLABLE ZURX
+A2A7 YI SYLLABLE ZUR
+A2A8 YI SYLLABLE ZYT
+A2A9 YI SYLLABLE ZYX
+A2AA YI SYLLABLE ZY
+A2AB YI SYLLABLE ZYP
+A2AC YI SYLLABLE ZYRX
+A2AD YI SYLLABLE ZYR
+A2AE YI SYLLABLE CIT
+A2AF YI SYLLABLE CIX
+A2B0 YI SYLLABLE CI
+A2B1 YI SYLLABLE CIP
+A2B2 YI SYLLABLE CIET
+A2B3 YI SYLLABLE CIEX
+A2B4 YI SYLLABLE CIE
+A2B5 YI SYLLABLE CIEP
+A2B6 YI SYLLABLE CAT
+A2B7 YI SYLLABLE CAX
+A2B8 YI SYLLABLE CA
+A2B9 YI SYLLABLE CAP
+A2BA YI SYLLABLE CUOX
+A2BB YI SYLLABLE CUO
+A2BC YI SYLLABLE CUOP
+A2BD YI SYLLABLE COT
+A2BE YI SYLLABLE COX
+A2BF YI SYLLABLE CO
+A2C0 YI SYLLABLE COP
+A2C1 YI SYLLABLE CEX
+A2C2 YI SYLLABLE CE
+A2C3 YI SYLLABLE CEP
+A2C4 YI SYLLABLE CUT
+A2C5 YI SYLLABLE CUX
+A2C6 YI SYLLABLE CU
+A2C7 YI SYLLABLE CUP
+A2C8 YI SYLLABLE CURX
+A2C9 YI SYLLABLE CUR
+A2CA YI SYLLABLE CYT
+A2CB YI SYLLABLE CYX
+A2CC YI SYLLABLE CY
+A2CD YI SYLLABLE CYP
+A2CE YI SYLLABLE CYRX
+A2CF YI SYLLABLE CYR
+A2D0 YI SYLLABLE ZZIT
+A2D1 YI SYLLABLE ZZIX
+A2D2 YI SYLLABLE ZZI
+A2D3 YI SYLLABLE ZZIP
+A2D4 YI SYLLABLE ZZIET
+A2D5 YI SYLLABLE ZZIEX
+A2D6 YI SYLLABLE ZZIE
+A2D7 YI SYLLABLE ZZIEP
+A2D8 YI SYLLABLE ZZAT
+A2D9 YI SYLLABLE ZZAX
+A2DA YI SYLLABLE ZZA
+A2DB YI SYLLABLE ZZAP
+A2DC YI SYLLABLE ZZOX
+A2DD YI SYLLABLE ZZO
+A2DE YI SYLLABLE ZZOP
+A2DF YI SYLLABLE ZZEX
+A2E0 YI SYLLABLE ZZE
+A2E1 YI SYLLABLE ZZEP
+A2E2 YI SYLLABLE ZZUX
+A2E3 YI SYLLABLE ZZU
+A2E4 YI SYLLABLE ZZUP
+A2E5 YI SYLLABLE ZZURX
+A2E6 YI SYLLABLE ZZUR
+A2E7 YI SYLLABLE ZZYT
+A2E8 YI SYLLABLE ZZYX
+A2E9 YI SYLLABLE ZZY
+A2EA YI SYLLABLE ZZYP
+A2EB YI SYLLABLE ZZYRX
+A2EC YI SYLLABLE ZZYR
+A2ED YI SYLLABLE NZIT
+A2EE YI SYLLABLE NZIX
+A2EF YI SYLLABLE NZI
+A2F0 YI SYLLABLE NZIP
+A2F1 YI SYLLABLE NZIEX
+A2F2 YI SYLLABLE NZIE
+A2F3 YI SYLLABLE NZIEP
+A2F4 YI SYLLABLE NZAT
+A2F5 YI SYLLABLE NZAX
+A2F6 YI SYLLABLE NZA
+A2F7 YI SYLLABLE NZAP
+A2F8 YI SYLLABLE NZUOX
+A2F9 YI SYLLABLE NZUO
+A2FA YI SYLLABLE NZOX
+A2FB YI SYLLABLE NZOP
+A2FC YI SYLLABLE NZEX
+A2FD YI SYLLABLE NZE
+A2FE YI SYLLABLE NZUX
+A2FF YI SYLLABLE NZU
+A300 YI SYLLABLE NZUP
+A301 YI SYLLABLE NZURX
+A302 YI SYLLABLE NZUR
+A303 YI SYLLABLE NZYT
+A304 YI SYLLABLE NZYX
+A305 YI SYLLABLE NZY
+A306 YI SYLLABLE NZYP
+A307 YI SYLLABLE NZYRX
+A308 YI SYLLABLE NZYR
+A309 YI SYLLABLE SIT
+A30A YI SYLLABLE SIX
+A30B YI SYLLABLE SI
+A30C YI SYLLABLE SIP
+A30D YI SYLLABLE SIEX
+A30E YI SYLLABLE SIE
+A30F YI SYLLABLE SIEP
+A310 YI SYLLABLE SAT
+A311 YI SYLLABLE SAX
+A312 YI SYLLABLE SA
+A313 YI SYLLABLE SAP
+A314 YI SYLLABLE SUOX
+A315 YI SYLLABLE SUO
+A316 YI SYLLABLE SUOP
+A317 YI SYLLABLE SOT
+A318 YI SYLLABLE SOX
+A319 YI SYLLABLE SO
+A31A YI SYLLABLE SOP
+A31B YI SYLLABLE SEX
+A31C YI SYLLABLE SE
+A31D YI SYLLABLE SEP
+A31E YI SYLLABLE SUT
+A31F YI SYLLABLE SUX
+A320 YI SYLLABLE SU
+A321 YI SYLLABLE SUP
+A322 YI SYLLABLE SURX
+A323 YI SYLLABLE SUR
+A324 YI SYLLABLE SYT
+A325 YI SYLLABLE SYX
+A326 YI SYLLABLE SY
+A327 YI SYLLABLE SYP
+A328 YI SYLLABLE SYRX
+A329 YI SYLLABLE SYR
+A32A YI SYLLABLE SSIT
+A32B YI SYLLABLE SSIX
+A32C YI SYLLABLE SSI
+A32D YI SYLLABLE SSIP
+A32E YI SYLLABLE SSIEX
+A32F YI SYLLABLE SSIE
+A330 YI SYLLABLE SSIEP
+A331 YI SYLLABLE SSAT
+A332 YI SYLLABLE SSAX
+A333 YI SYLLABLE SSA
+A334 YI SYLLABLE SSAP
+A335 YI SYLLABLE SSOT
+A336 YI SYLLABLE SSOX
+A337 YI SYLLABLE SSO
+A338 YI SYLLABLE SSOP
+A339 YI SYLLABLE SSEX
+A33A YI SYLLABLE SSE
+A33B YI SYLLABLE SSEP
+A33C YI SYLLABLE SSUT
+A33D YI SYLLABLE SSUX
+A33E YI SYLLABLE SSU
+A33F YI SYLLABLE SSUP
+A340 YI SYLLABLE SSYT
+A341 YI SYLLABLE SSYX
+A342 YI SYLLABLE SSY
+A343 YI SYLLABLE SSYP
+A344 YI SYLLABLE SSYRX
+A345 YI SYLLABLE SSYR
+A346 YI SYLLABLE ZHAT
+A347 YI SYLLABLE ZHAX
+A348 YI SYLLABLE ZHA
+A349 YI SYLLABLE ZHAP
+A34A YI SYLLABLE ZHUOX
+A34B YI SYLLABLE ZHUO
+A34C YI SYLLABLE ZHUOP
+A34D YI SYLLABLE ZHOT
+A34E YI SYLLABLE ZHOX
+A34F YI SYLLABLE ZHO
+A350 YI SYLLABLE ZHOP
+A351 YI SYLLABLE ZHET
+A352 YI SYLLABLE ZHEX
+A353 YI SYLLABLE ZHE
+A354 YI SYLLABLE ZHEP
+A355 YI SYLLABLE ZHUT
+A356 YI SYLLABLE ZHUX
+A357 YI SYLLABLE ZHU
+A358 YI SYLLABLE ZHUP
+A359 YI SYLLABLE ZHURX
+A35A YI SYLLABLE ZHUR
+A35B YI SYLLABLE ZHYT
+A35C YI SYLLABLE ZHYX
+A35D YI SYLLABLE ZHY
+A35E YI SYLLABLE ZHYP
+A35F YI SYLLABLE ZHYRX
+A360 YI SYLLABLE ZHYR
+A361 YI SYLLABLE CHAT
+A362 YI SYLLABLE CHAX
+A363 YI SYLLABLE CHA
+A364 YI SYLLABLE CHAP
+A365 YI SYLLABLE CHUOT
+A366 YI SYLLABLE CHUOX
+A367 YI SYLLABLE CHUO
+A368 YI SYLLABLE CHUOP
+A369 YI SYLLABLE CHOT
+A36A YI SYLLABLE CHOX
+A36B YI SYLLABLE CHO
+A36C YI SYLLABLE CHOP
+A36D YI SYLLABLE CHET
+A36E YI SYLLABLE CHEX
+A36F YI SYLLABLE CHE
+A370 YI SYLLABLE CHEP
+A371 YI SYLLABLE CHUX
+A372 YI SYLLABLE CHU
+A373 YI SYLLABLE CHUP
+A374 YI SYLLABLE CHURX
+A375 YI SYLLABLE CHUR
+A376 YI SYLLABLE CHYT
+A377 YI SYLLABLE CHYX
+A378 YI SYLLABLE CHY
+A379 YI SYLLABLE CHYP
+A37A YI SYLLABLE CHYRX
+A37B YI SYLLABLE CHYR
+A37C YI SYLLABLE RRAX
+A37D YI SYLLABLE RRA
+A37E YI SYLLABLE RRUOX
+A37F YI SYLLABLE RRUO
+A380 YI SYLLABLE RROT
+A381 YI SYLLABLE RROX
+A382 YI SYLLABLE RRO
+A383 YI SYLLABLE RROP
+A384 YI SYLLABLE RRET
+A385 YI SYLLABLE RREX
+A386 YI SYLLABLE RRE
+A387 YI SYLLABLE RREP
+A388 YI SYLLABLE RRUT
+A389 YI SYLLABLE RRUX
+A38A YI SYLLABLE RRU
+A38B YI SYLLABLE RRUP
+A38C YI SYLLABLE RRURX
+A38D YI SYLLABLE RRUR
+A38E YI SYLLABLE RRYT
+A38F YI SYLLABLE RRYX
+A390 YI SYLLABLE RRY
+A391 YI SYLLABLE RRYP
+A392 YI SYLLABLE RRYRX
+A393 YI SYLLABLE RRYR
+A394 YI SYLLABLE NRAT
+A395 YI SYLLABLE NRAX
+A396 YI SYLLABLE NRA
+A397 YI SYLLABLE NRAP
+A398 YI SYLLABLE NROX
+A399 YI SYLLABLE NRO
+A39A YI SYLLABLE NROP
+A39B YI SYLLABLE NRET
+A39C YI SYLLABLE NREX
+A39D YI SYLLABLE NRE
+A39E YI SYLLABLE NREP
+A39F YI SYLLABLE NRUT
+A3A0 YI SYLLABLE NRUX
+A3A1 YI SYLLABLE NRU
+A3A2 YI SYLLABLE NRUP
+A3A3 YI SYLLABLE NRURX
+A3A4 YI SYLLABLE NRUR
+A3A5 YI SYLLABLE NRYT
+A3A6 YI SYLLABLE NRYX
+A3A7 YI SYLLABLE NRY
+A3A8 YI SYLLABLE NRYP
+A3A9 YI SYLLABLE NRYRX
+A3AA YI SYLLABLE NRYR
+A3AB YI SYLLABLE SHAT
+A3AC YI SYLLABLE SHAX
+A3AD YI SYLLABLE SHA
+A3AE YI SYLLABLE SHAP
+A3AF YI SYLLABLE SHUOX
+A3B0 YI SYLLABLE SHUO
+A3B1 YI SYLLABLE SHUOP
+A3B2 YI SYLLABLE SHOT
+A3B3 YI SYLLABLE SHOX
+A3B4 YI SYLLABLE SHO
+A3B5 YI SYLLABLE SHOP
+A3B6 YI SYLLABLE SHET
+A3B7 YI SYLLABLE SHEX
+A3B8 YI SYLLABLE SHE
+A3B9 YI SYLLABLE SHEP
+A3BA YI SYLLABLE SHUT
+A3BB YI SYLLABLE SHUX
+A3BC YI SYLLABLE SHU
+A3BD YI SYLLABLE SHUP
+A3BE YI SYLLABLE SHURX
+A3BF YI SYLLABLE SHUR
+A3C0 YI SYLLABLE SHYT
+A3C1 YI SYLLABLE SHYX
+A3C2 YI SYLLABLE SHY
+A3C3 YI SYLLABLE SHYP
+A3C4 YI SYLLABLE SHYRX
+A3C5 YI SYLLABLE SHYR
+A3C6 YI SYLLABLE RAT
+A3C7 YI SYLLABLE RAX
+A3C8 YI SYLLABLE RA
+A3C9 YI SYLLABLE RAP
+A3CA YI SYLLABLE RUOX
+A3CB YI SYLLABLE RUO
+A3CC YI SYLLABLE RUOP
+A3CD YI SYLLABLE ROT
+A3CE YI SYLLABLE ROX
+A3CF YI SYLLABLE RO
+A3D0 YI SYLLABLE ROP
+A3D1 YI SYLLABLE REX
+A3D2 YI SYLLABLE RE
+A3D3 YI SYLLABLE REP
+A3D4 YI SYLLABLE RUT
+A3D5 YI SYLLABLE RUX
+A3D6 YI SYLLABLE RU
+A3D7 YI SYLLABLE RUP
+A3D8 YI SYLLABLE RURX
+A3D9 YI SYLLABLE RUR
+A3DA YI SYLLABLE RYT
+A3DB YI SYLLABLE RYX
+A3DC YI SYLLABLE RY
+A3DD YI SYLLABLE RYP
+A3DE YI SYLLABLE RYRX
+A3DF YI SYLLABLE RYR
+A3E0 YI SYLLABLE JIT
+A3E1 YI SYLLABLE JIX
+A3E2 YI SYLLABLE JI
+A3E3 YI SYLLABLE JIP
+A3E4 YI SYLLABLE JIET
+A3E5 YI SYLLABLE JIEX
+A3E6 YI SYLLABLE JIE
+A3E7 YI SYLLABLE JIEP
+A3E8 YI SYLLABLE JUOT
+A3E9 YI SYLLABLE JUOX
+A3EA YI SYLLABLE JUO
+A3EB YI SYLLABLE JUOP
+A3EC YI SYLLABLE JOT
+A3ED YI SYLLABLE JOX
+A3EE YI SYLLABLE JO
+A3EF YI SYLLABLE JOP
+A3F0 YI SYLLABLE JUT
+A3F1 YI SYLLABLE JUX
+A3F2 YI SYLLABLE JU
+A3F3 YI SYLLABLE JUP
+A3F4 YI SYLLABLE JURX
+A3F5 YI SYLLABLE JUR
+A3F6 YI SYLLABLE JYT
+A3F7 YI SYLLABLE JYX
+A3F8 YI SYLLABLE JY
+A3F9 YI SYLLABLE JYP
+A3FA YI SYLLABLE JYRX
+A3FB YI SYLLABLE JYR
+A3FC YI SYLLABLE QIT
+A3FD YI SYLLABLE QIX
+A3FE YI SYLLABLE QI
+A3FF YI SYLLABLE QIP
+A400 YI SYLLABLE QIET
+A401 YI SYLLABLE QIEX
+A402 YI SYLLABLE QIE
+A403 YI SYLLABLE QIEP
+A404 YI SYLLABLE QUOT
+A405 YI SYLLABLE QUOX
+A406 YI SYLLABLE QUO
+A407 YI SYLLABLE QUOP
+A408 YI SYLLABLE QOT
+A409 YI SYLLABLE QOX
+A40A YI SYLLABLE QO
+A40B YI SYLLABLE QOP
+A40C YI SYLLABLE QUT
+A40D YI SYLLABLE QUX
+A40E YI SYLLABLE QU
+A40F YI SYLLABLE QUP
+A410 YI SYLLABLE QURX
+A411 YI SYLLABLE QUR
+A412 YI SYLLABLE QYT
+A413 YI SYLLABLE QYX
+A414 YI SYLLABLE QY
+A415 YI SYLLABLE QYP
+A416 YI SYLLABLE QYRX
+A417 YI SYLLABLE QYR
+A418 YI SYLLABLE JJIT
+A419 YI SYLLABLE JJIX
+A41A YI SYLLABLE JJI
+A41B YI SYLLABLE JJIP
+A41C YI SYLLABLE JJIET
+A41D YI SYLLABLE JJIEX
+A41E YI SYLLABLE JJIE
+A41F YI SYLLABLE JJIEP
+A420 YI SYLLABLE JJUOX
+A421 YI SYLLABLE JJUO
+A422 YI SYLLABLE JJUOP
+A423 YI SYLLABLE JJOT
+A424 YI SYLLABLE JJOX
+A425 YI SYLLABLE JJO
+A426 YI SYLLABLE JJOP
+A427 YI SYLLABLE JJUT
+A428 YI SYLLABLE JJUX
+A429 YI SYLLABLE JJU
+A42A YI SYLLABLE JJUP
+A42B YI SYLLABLE JJURX
+A42C YI SYLLABLE JJUR
+A42D YI SYLLABLE JJYT
+A42E YI SYLLABLE JJYX
+A42F YI SYLLABLE JJY
+A430 YI SYLLABLE JJYP
+A431 YI SYLLABLE NJIT
+A432 YI SYLLABLE NJIX
+A433 YI SYLLABLE NJI
+A434 YI SYLLABLE NJIP
+A435 YI SYLLABLE NJIET
+A436 YI SYLLABLE NJIEX
+A437 YI SYLLABLE NJIE
+A438 YI SYLLABLE NJIEP
+A439 YI SYLLABLE NJUOX
+A43A YI SYLLABLE NJUO
+A43B YI SYLLABLE NJOT
+A43C YI SYLLABLE NJOX
+A43D YI SYLLABLE NJO
+A43E YI SYLLABLE NJOP
+A43F YI SYLLABLE NJUX
+A440 YI SYLLABLE NJU
+A441 YI SYLLABLE NJUP
+A442 YI SYLLABLE NJURX
+A443 YI SYLLABLE NJUR
+A444 YI SYLLABLE NJYT
+A445 YI SYLLABLE NJYX
+A446 YI SYLLABLE NJY
+A447 YI SYLLABLE NJYP
+A448 YI SYLLABLE NJYRX
+A449 YI SYLLABLE NJYR
+A44A YI SYLLABLE NYIT
+A44B YI SYLLABLE NYIX
+A44C YI SYLLABLE NYI
+A44D YI SYLLABLE NYIP
+A44E YI SYLLABLE NYIET
+A44F YI SYLLABLE NYIEX
+A450 YI SYLLABLE NYIE
+A451 YI SYLLABLE NYIEP
+A452 YI SYLLABLE NYUOX
+A453 YI SYLLABLE NYUO
+A454 YI SYLLABLE NYUOP
+A455 YI SYLLABLE NYOT
+A456 YI SYLLABLE NYOX
+A457 YI SYLLABLE NYO
+A458 YI SYLLABLE NYOP
+A459 YI SYLLABLE NYUT
+A45A YI SYLLABLE NYUX
+A45B YI SYLLABLE NYU
+A45C YI SYLLABLE NYUP
+A45D YI SYLLABLE XIT
+A45E YI SYLLABLE XIX
+A45F YI SYLLABLE XI
+A460 YI SYLLABLE XIP
+A461 YI SYLLABLE XIET
+A462 YI SYLLABLE XIEX
+A463 YI SYLLABLE XIE
+A464 YI SYLLABLE XIEP
+A465 YI SYLLABLE XUOX
+A466 YI SYLLABLE XUO
+A467 YI SYLLABLE XOT
+A468 YI SYLLABLE XOX
+A469 YI SYLLABLE XO
+A46A YI SYLLABLE XOP
+A46B YI SYLLABLE XYT
+A46C YI SYLLABLE XYX
+A46D YI SYLLABLE XY
+A46E YI SYLLABLE XYP
+A46F YI SYLLABLE XYRX
+A470 YI SYLLABLE XYR
+A471 YI SYLLABLE YIT
+A472 YI SYLLABLE YIX
+A473 YI SYLLABLE YI
+A474 YI SYLLABLE YIP
+A475 YI SYLLABLE YIET
+A476 YI SYLLABLE YIEX
+A477 YI SYLLABLE YIE
+A478 YI SYLLABLE YIEP
+A479 YI SYLLABLE YUOT
+A47A YI SYLLABLE YUOX
+A47B YI SYLLABLE YUO
+A47C YI SYLLABLE YUOP
+A47D YI SYLLABLE YOT
+A47E YI SYLLABLE YOX
+A47F YI SYLLABLE YO
+A480 YI SYLLABLE YOP
+A481 YI SYLLABLE YUT
+A482 YI SYLLABLE YUX
+A483 YI SYLLABLE YU
+A484 YI SYLLABLE YUP
+A485 YI SYLLABLE YURX
+A486 YI SYLLABLE YUR
+A487 YI SYLLABLE YYT
+A488 YI SYLLABLE YYX
+A489 YI SYLLABLE YY
+A48A YI SYLLABLE YYP
+A48B YI SYLLABLE YYRX
+A48C YI SYLLABLE YYR
+A490 YI RADICAL QOT
+A491 YI RADICAL LI
+A492 YI RADICAL KIT
+A493 YI RADICAL NYIP
+A494 YI RADICAL CYP
+A495 YI RADICAL SSI
+A496 YI RADICAL GGOP
+A497 YI RADICAL GEP
+A498 YI RADICAL MI
+A499 YI RADICAL HXIT
+A49A YI RADICAL LYR
+A49B YI RADICAL BBUT
+A49C YI RADICAL MOP
+A49D YI RADICAL YO
+A49E YI RADICAL PUT
+A49F YI RADICAL HXUO
+A4A0 YI RADICAL TAT
+A4A1 YI RADICAL GA
+A4A2 YI RADICAL ZUP
+A4A3 YI RADICAL CYT
+A4A4 YI RADICAL DDUR
+A4A5 YI RADICAL BUR
+A4A6 YI RADICAL GGUO
+A4A7 YI RADICAL NYOP
+A4A8 YI RADICAL TU
+A4A9 YI RADICAL OP
+A4AA YI RADICAL JJUT
+A4AB YI RADICAL ZOT
+A4AC YI RADICAL PYT
+A4AD YI RADICAL HMO
+A4AE YI RADICAL YIT
+A4AF YI RADICAL VUR
+A4B0 YI RADICAL SHY
+A4B1 YI RADICAL VEP
+A4B2 YI RADICAL ZA
+A4B3 YI RADICAL JO
+A4B4 YI RADICAL NZUP
+A4B5 YI RADICAL JJY
+A4B6 YI RADICAL GOT
+A4B7 YI RADICAL JJIE
+A4B8 YI RADICAL WO
+A4B9 YI RADICAL DU
+A4BA YI RADICAL SHUR
+A4BB YI RADICAL LIE
+A4BC YI RADICAL CY
+A4BD YI RADICAL CUOP
+A4BE YI RADICAL CIP
+A4BF YI RADICAL HXOP
+A4C0 YI RADICAL SHAT
+A4C1 YI RADICAL ZUR
+A4C2 YI RADICAL SHOP
+A4C3 YI RADICAL CHE
+A4C4 YI RADICAL ZZIET
+A4C5 YI RADICAL NBIE
+A4C6 YI RADICAL KE
+A700 MODIFIER LETTER CHINESE TONE YIN PING
+A701 MODIFIER LETTER CHINESE TONE YANG PING
+A702 MODIFIER LETTER CHINESE TONE YIN SHANG
+A703 MODIFIER LETTER CHINESE TONE YANG SHANG
+A704 MODIFIER LETTER CHINESE TONE YIN QU
+A705 MODIFIER LETTER CHINESE TONE YANG QU
+A706 MODIFIER LETTER CHINESE TONE YIN RU
+A707 MODIFIER LETTER CHINESE TONE YANG RU
+A708 MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709 MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A MODIFIER LETTER MID DOTTED TONE BAR
+A70B MODIFIER LETTER LOW DOTTED TONE BAR
+A70C MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710 MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711 MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+A712 MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713 MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714 MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715 MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716 MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A800 SYLOTI NAGRI LETTER A
+A801 SYLOTI NAGRI LETTER I
+A802 SYLOTI NAGRI SIGN DVISVARA
+A803 SYLOTI NAGRI LETTER U
+A804 SYLOTI NAGRI LETTER E
+A805 SYLOTI NAGRI LETTER O
+A806 SYLOTI NAGRI SIGN HASANTA
+A807 SYLOTI NAGRI LETTER KO
+A808 SYLOTI NAGRI LETTER KHO
+A809 SYLOTI NAGRI LETTER GO
+A80A SYLOTI NAGRI LETTER GHO
+A80B SYLOTI NAGRI SIGN ANUSVARA
+A80C SYLOTI NAGRI LETTER CO
+A80D SYLOTI NAGRI LETTER CHO
+A80E SYLOTI NAGRI LETTER JO
+A80F SYLOTI NAGRI LETTER JHO
+A810 SYLOTI NAGRI LETTER TTO
+A811 SYLOTI NAGRI LETTER TTHO
+A812 SYLOTI NAGRI LETTER DDO
+A813 SYLOTI NAGRI LETTER DDHO
+A814 SYLOTI NAGRI LETTER TO
+A815 SYLOTI NAGRI LETTER THO
+A816 SYLOTI NAGRI LETTER DO
+A817 SYLOTI NAGRI LETTER DHO
+A818 SYLOTI NAGRI LETTER NO
+A819 SYLOTI NAGRI LETTER PO
+A81A SYLOTI NAGRI LETTER PHO
+A81B SYLOTI NAGRI LETTER BO
+A81C SYLOTI NAGRI LETTER BHO
+A81D SYLOTI NAGRI LETTER MO
+A81E SYLOTI NAGRI LETTER RO
+A81F SYLOTI NAGRI LETTER LO
+A820 SYLOTI NAGRI LETTER RRO
+A821 SYLOTI NAGRI LETTER SO
+A822 SYLOTI NAGRI LETTER HO
+A823 SYLOTI NAGRI VOWEL SIGN A
+A824 SYLOTI NAGRI VOWEL SIGN I
+A825 SYLOTI NAGRI VOWEL SIGN U
+A826 SYLOTI NAGRI VOWEL SIGN E
+A827 SYLOTI NAGRI VOWEL SIGN OO
+A828 SYLOTI NAGRI POETRY MARK-1
+A829 SYLOTI NAGRI POETRY MARK-2
+A82A SYLOTI NAGRI POETRY MARK-3
+A82B SYLOTI NAGRI POETRY MARK-4
+AC00 D7A3 Hangul Syllable
+D800 DB7F Non Private Use High Surrogate
+DB80 DBFF Private Use High Surrogate
+DC00 DFFF Low Surrogate
+E000 F8FF Private Use
+F900 CJK COMPATIBILITY IDEOGRAPH-F900
+F901 CJK COMPATIBILITY IDEOGRAPH-F901
+F902 CJK COMPATIBILITY IDEOGRAPH-F902
+F903 CJK COMPATIBILITY IDEOGRAPH-F903
+F904 CJK COMPATIBILITY IDEOGRAPH-F904
+F905 CJK COMPATIBILITY IDEOGRAPH-F905
+F906 CJK COMPATIBILITY IDEOGRAPH-F906
+F907 CJK COMPATIBILITY IDEOGRAPH-F907
+F908 CJK COMPATIBILITY IDEOGRAPH-F908
+F909 CJK COMPATIBILITY IDEOGRAPH-F909
+F90A CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F CJK COMPATIBILITY IDEOGRAPH-F90F
+F910 CJK COMPATIBILITY IDEOGRAPH-F910
+F911 CJK COMPATIBILITY IDEOGRAPH-F911
+F912 CJK COMPATIBILITY IDEOGRAPH-F912
+F913 CJK COMPATIBILITY IDEOGRAPH-F913
+F914 CJK COMPATIBILITY IDEOGRAPH-F914
+F915 CJK COMPATIBILITY IDEOGRAPH-F915
+F916 CJK COMPATIBILITY IDEOGRAPH-F916
+F917 CJK COMPATIBILITY IDEOGRAPH-F917
+F918 CJK COMPATIBILITY IDEOGRAPH-F918
+F919 CJK COMPATIBILITY IDEOGRAPH-F919
+F91A CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F CJK COMPATIBILITY IDEOGRAPH-F91F
+F920 CJK COMPATIBILITY IDEOGRAPH-F920
+F921 CJK COMPATIBILITY IDEOGRAPH-F921
+F922 CJK COMPATIBILITY IDEOGRAPH-F922
+F923 CJK COMPATIBILITY IDEOGRAPH-F923
+F924 CJK COMPATIBILITY IDEOGRAPH-F924
+F925 CJK COMPATIBILITY IDEOGRAPH-F925
+F926 CJK COMPATIBILITY IDEOGRAPH-F926
+F927 CJK COMPATIBILITY IDEOGRAPH-F927
+F928 CJK COMPATIBILITY IDEOGRAPH-F928
+F929 CJK COMPATIBILITY IDEOGRAPH-F929
+F92A CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F CJK COMPATIBILITY IDEOGRAPH-F92F
+F930 CJK COMPATIBILITY IDEOGRAPH-F930
+F931 CJK COMPATIBILITY IDEOGRAPH-F931
+F932 CJK COMPATIBILITY IDEOGRAPH-F932
+F933 CJK COMPATIBILITY IDEOGRAPH-F933
+F934 CJK COMPATIBILITY IDEOGRAPH-F934
+F935 CJK COMPATIBILITY IDEOGRAPH-F935
+F936 CJK COMPATIBILITY IDEOGRAPH-F936
+F937 CJK COMPATIBILITY IDEOGRAPH-F937
+F938 CJK COMPATIBILITY IDEOGRAPH-F938
+F939 CJK COMPATIBILITY IDEOGRAPH-F939
+F93A CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F CJK COMPATIBILITY IDEOGRAPH-F93F
+F940 CJK COMPATIBILITY IDEOGRAPH-F940
+F941 CJK COMPATIBILITY IDEOGRAPH-F941
+F942 CJK COMPATIBILITY IDEOGRAPH-F942
+F943 CJK COMPATIBILITY IDEOGRAPH-F943
+F944 CJK COMPATIBILITY IDEOGRAPH-F944
+F945 CJK COMPATIBILITY IDEOGRAPH-F945
+F946 CJK COMPATIBILITY IDEOGRAPH-F946
+F947 CJK COMPATIBILITY IDEOGRAPH-F947
+F948 CJK COMPATIBILITY IDEOGRAPH-F948
+F949 CJK COMPATIBILITY IDEOGRAPH-F949
+F94A CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F CJK COMPATIBILITY IDEOGRAPH-F94F
+F950 CJK COMPATIBILITY IDEOGRAPH-F950
+F951 CJK COMPATIBILITY IDEOGRAPH-F951
+F952 CJK COMPATIBILITY IDEOGRAPH-F952
+F953 CJK COMPATIBILITY IDEOGRAPH-F953
+F954 CJK COMPATIBILITY IDEOGRAPH-F954
+F955 CJK COMPATIBILITY IDEOGRAPH-F955
+F956 CJK COMPATIBILITY IDEOGRAPH-F956
+F957 CJK COMPATIBILITY IDEOGRAPH-F957
+F958 CJK COMPATIBILITY IDEOGRAPH-F958
+F959 CJK COMPATIBILITY IDEOGRAPH-F959
+F95A CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F CJK COMPATIBILITY IDEOGRAPH-F95F
+F960 CJK COMPATIBILITY IDEOGRAPH-F960
+F961 CJK COMPATIBILITY IDEOGRAPH-F961
+F962 CJK COMPATIBILITY IDEOGRAPH-F962
+F963 CJK COMPATIBILITY IDEOGRAPH-F963
+F964 CJK COMPATIBILITY IDEOGRAPH-F964
+F965 CJK COMPATIBILITY IDEOGRAPH-F965
+F966 CJK COMPATIBILITY IDEOGRAPH-F966
+F967 CJK COMPATIBILITY IDEOGRAPH-F967
+F968 CJK COMPATIBILITY IDEOGRAPH-F968
+F969 CJK COMPATIBILITY IDEOGRAPH-F969
+F96A CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F CJK COMPATIBILITY IDEOGRAPH-F96F
+F970 CJK COMPATIBILITY IDEOGRAPH-F970
+F971 CJK COMPATIBILITY IDEOGRAPH-F971
+F972 CJK COMPATIBILITY IDEOGRAPH-F972
+F973 CJK COMPATIBILITY IDEOGRAPH-F973
+F974 CJK COMPATIBILITY IDEOGRAPH-F974
+F975 CJK COMPATIBILITY IDEOGRAPH-F975
+F976 CJK COMPATIBILITY IDEOGRAPH-F976
+F977 CJK COMPATIBILITY IDEOGRAPH-F977
+F978 CJK COMPATIBILITY IDEOGRAPH-F978
+F979 CJK COMPATIBILITY IDEOGRAPH-F979
+F97A CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F CJK COMPATIBILITY IDEOGRAPH-F97F
+F980 CJK COMPATIBILITY IDEOGRAPH-F980
+F981 CJK COMPATIBILITY IDEOGRAPH-F981
+F982 CJK COMPATIBILITY IDEOGRAPH-F982
+F983 CJK COMPATIBILITY IDEOGRAPH-F983
+F984 CJK COMPATIBILITY IDEOGRAPH-F984
+F985 CJK COMPATIBILITY IDEOGRAPH-F985
+F986 CJK COMPATIBILITY IDEOGRAPH-F986
+F987 CJK COMPATIBILITY IDEOGRAPH-F987
+F988 CJK COMPATIBILITY IDEOGRAPH-F988
+F989 CJK COMPATIBILITY IDEOGRAPH-F989
+F98A CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F CJK COMPATIBILITY IDEOGRAPH-F98F
+F990 CJK COMPATIBILITY IDEOGRAPH-F990
+F991 CJK COMPATIBILITY IDEOGRAPH-F991
+F992 CJK COMPATIBILITY IDEOGRAPH-F992
+F993 CJK COMPATIBILITY IDEOGRAPH-F993
+F994 CJK COMPATIBILITY IDEOGRAPH-F994
+F995 CJK COMPATIBILITY IDEOGRAPH-F995
+F996 CJK COMPATIBILITY IDEOGRAPH-F996
+F997 CJK COMPATIBILITY IDEOGRAPH-F997
+F998 CJK COMPATIBILITY IDEOGRAPH-F998
+F999 CJK COMPATIBILITY IDEOGRAPH-F999
+F99A CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0 CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1 CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2 CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3 CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4 CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5 CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6 CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7 CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8 CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9 CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0 CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1 CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2 CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3 CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4 CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5 CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6 CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7 CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8 CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9 CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0 CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1 CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2 CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4 CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5 CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6 CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7 CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8 CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9 CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1 CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2 CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3 CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4 CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5 CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6 CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7 CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8 CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9 CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0 CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1 CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2 CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3 CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4 CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5 CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6 CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7 CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8 CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9 CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0 CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1 CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2 CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3 CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4 CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5 CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6 CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7 CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8 CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9 CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00 CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01 CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02 CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03 CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04 CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05 CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06 CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07 CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08 CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09 CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E
+FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+FA11 CJK COMPATIBILITY IDEOGRAPH-FA11
+FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+FA13 CJK COMPATIBILITY IDEOGRAPH-FA13
+FA14 CJK COMPATIBILITY IDEOGRAPH-FA14
+FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16 CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17 CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18 CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19 CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+FA21 CJK COMPATIBILITY IDEOGRAPH-FA21
+FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+FA23 CJK COMPATIBILITY IDEOGRAPH-FA23
+FA24 CJK COMPATIBILITY IDEOGRAPH-FA24
+FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
+FA27 CJK COMPATIBILITY IDEOGRAPH-FA27
+FA28 CJK COMPATIBILITY IDEOGRAPH-FA28
+FA29 CJK COMPATIBILITY IDEOGRAPH-FA29
+FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30 CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31 CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32 CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33 CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34 CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35 CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36 CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37 CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38 CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39 CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40 CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41 CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42 CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43 CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44 CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45 CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46 CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47 CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48 CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49 CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50 CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51 CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52 CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53 CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54 CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55 CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56 CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57 CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58 CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59 CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D CJK COMPATIBILITY IDEOGRAPH-FA5D
+FA5E CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60 CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61 CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62 CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63 CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64 CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65 CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66 CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67 CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68 CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69 CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70 CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71 CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72 CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73 CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74 CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75 CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76 CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77 CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78 CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79 CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80 CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81 CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82 CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83 CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84 CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85 CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86 CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87 CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88 CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89 CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90 CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91 CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92 CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93 CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94 CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95 CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96 CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97 CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98 CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99 CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0 CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1 CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2 CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3 CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4 CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5 CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6 CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7 CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8 CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9 CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0 CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1 CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2 CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3 CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4 CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5 CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6 CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7 CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8 CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9 CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0 CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1 CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2 CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3 CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4 CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5 CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6 CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7 CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8 CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9 CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0 CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1 CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2 CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3 CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4 CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5 CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6 CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7 CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8 CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9 CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00 LATIN SMALL LIGATURE FF
+FB01 LATIN SMALL LIGATURE FI
+FB02 LATIN SMALL LIGATURE FL
+FB03 LATIN SMALL LIGATURE FFI
+FB04 LATIN SMALL LIGATURE FFL
+FB05 LATIN SMALL LIGATURE LONG S T
+FB06 LATIN SMALL LIGATURE ST
+FB13 ARMENIAN SMALL LIGATURE MEN NOW
+FB14 ARMENIAN SMALL LIGATURE MEN ECH
+FB15 ARMENIAN SMALL LIGATURE MEN INI
+FB16 ARMENIAN SMALL LIGATURE VEW NOW
+FB17 ARMENIAN SMALL LIGATURE MEN XEH
+FB1D HEBREW LETTER YOD WITH HIRIQ
+FB1E HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20 HEBREW LETTER ALTERNATIVE AYIN
+FB21 HEBREW LETTER WIDE ALEF
+FB22 HEBREW LETTER WIDE DALET
+FB23 HEBREW LETTER WIDE HE
+FB24 HEBREW LETTER WIDE KAF
+FB25 HEBREW LETTER WIDE LAMED
+FB26 HEBREW LETTER WIDE FINAL MEM
+FB27 HEBREW LETTER WIDE RESH
+FB28 HEBREW LETTER WIDE TAV
+FB29 HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A HEBREW LETTER SHIN WITH SHIN DOT
+FB2B HEBREW LETTER SHIN WITH SIN DOT
+FB2C HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E HEBREW LETTER ALEF WITH PATAH
+FB2F HEBREW LETTER ALEF WITH QAMATS
+FB30 HEBREW LETTER ALEF WITH MAPIQ
+FB31 HEBREW LETTER BET WITH DAGESH
+FB32 HEBREW LETTER GIMEL WITH DAGESH
+FB33 HEBREW LETTER DALET WITH DAGESH
+FB34 HEBREW LETTER HE WITH MAPIQ
+FB35 HEBREW LETTER VAV WITH DAGESH
+FB36 HEBREW LETTER ZAYIN WITH DAGESH
+FB38 HEBREW LETTER TET WITH DAGESH
+FB39 HEBREW LETTER YOD WITH DAGESH
+FB3A HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B HEBREW LETTER KAF WITH DAGESH
+FB3C HEBREW LETTER LAMED WITH DAGESH
+FB3E HEBREW LETTER MEM WITH DAGESH
+FB40 HEBREW LETTER NUN WITH DAGESH
+FB41 HEBREW LETTER SAMEKH WITH DAGESH
+FB43 HEBREW LETTER FINAL PE WITH DAGESH
+FB44 HEBREW LETTER PE WITH DAGESH
+FB46 HEBREW LETTER TSADI WITH DAGESH
+FB47 HEBREW LETTER QOF WITH DAGESH
+FB48 HEBREW LETTER RESH WITH DAGESH
+FB49 HEBREW LETTER SHIN WITH DAGESH
+FB4A HEBREW LETTER TAV WITH DAGESH
+FB4B HEBREW LETTER VAV WITH HOLAM
+FB4C HEBREW LETTER BET WITH RAFE
+FB4D HEBREW LETTER KAF WITH RAFE
+FB4E HEBREW LETTER PE WITH RAFE
+FB4F HEBREW LIGATURE ALEF LAMED
+FB50 ARABIC LETTER ALEF WASLA ISOLATED FORM
+FB51 ARABIC LETTER ALEF WASLA FINAL FORM
+FB52 ARABIC LETTER BEEH ISOLATED FORM
+FB53 ARABIC LETTER BEEH FINAL FORM
+FB54 ARABIC LETTER BEEH INITIAL FORM
+FB55 ARABIC LETTER BEEH MEDIAL FORM
+FB56 ARABIC LETTER PEH ISOLATED FORM
+FB57 ARABIC LETTER PEH FINAL FORM
+FB58 ARABIC LETTER PEH INITIAL FORM
+FB59 ARABIC LETTER PEH MEDIAL FORM
+FB5A ARABIC LETTER BEHEH ISOLATED FORM
+FB5B ARABIC LETTER BEHEH FINAL FORM
+FB5C ARABIC LETTER BEHEH INITIAL FORM
+FB5D ARABIC LETTER BEHEH MEDIAL FORM
+FB5E ARABIC LETTER TTEHEH ISOLATED FORM
+FB5F ARABIC LETTER TTEHEH FINAL FORM
+FB60 ARABIC LETTER TTEHEH INITIAL FORM
+FB61 ARABIC LETTER TTEHEH MEDIAL FORM
+FB62 ARABIC LETTER TEHEH ISOLATED FORM
+FB63 ARABIC LETTER TEHEH FINAL FORM
+FB64 ARABIC LETTER TEHEH INITIAL FORM
+FB65 ARABIC LETTER TEHEH MEDIAL FORM
+FB66 ARABIC LETTER TTEH ISOLATED FORM
+FB67 ARABIC LETTER TTEH FINAL FORM
+FB68 ARABIC LETTER TTEH INITIAL FORM
+FB69 ARABIC LETTER TTEH MEDIAL FORM
+FB6A ARABIC LETTER VEH ISOLATED FORM
+FB6B ARABIC LETTER VEH FINAL FORM
+FB6C ARABIC LETTER VEH INITIAL FORM
+FB6D ARABIC LETTER VEH MEDIAL FORM
+FB6E ARABIC LETTER PEHEH ISOLATED FORM
+FB6F ARABIC LETTER PEHEH FINAL FORM
+FB70 ARABIC LETTER PEHEH INITIAL FORM
+FB71 ARABIC LETTER PEHEH MEDIAL FORM
+FB72 ARABIC LETTER DYEH ISOLATED FORM
+FB73 ARABIC LETTER DYEH FINAL FORM
+FB74 ARABIC LETTER DYEH INITIAL FORM
+FB75 ARABIC LETTER DYEH MEDIAL FORM
+FB76 ARABIC LETTER NYEH ISOLATED FORM
+FB77 ARABIC LETTER NYEH FINAL FORM
+FB78 ARABIC LETTER NYEH INITIAL FORM
+FB79 ARABIC LETTER NYEH MEDIAL FORM
+FB7A ARABIC LETTER TCHEH ISOLATED FORM
+FB7B ARABIC LETTER TCHEH FINAL FORM
+FB7C ARABIC LETTER TCHEH INITIAL FORM
+FB7D ARABIC LETTER TCHEH MEDIAL FORM
+FB7E ARABIC LETTER TCHEHEH ISOLATED FORM
+FB7F ARABIC LETTER TCHEHEH FINAL FORM
+FB80 ARABIC LETTER TCHEHEH INITIAL FORM
+FB81 ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82 ARABIC LETTER DDAHAL ISOLATED FORM
+FB83 ARABIC LETTER DDAHAL FINAL FORM
+FB84 ARABIC LETTER DAHAL ISOLATED FORM
+FB85 ARABIC LETTER DAHAL FINAL FORM
+FB86 ARABIC LETTER DUL ISOLATED FORM
+FB87 ARABIC LETTER DUL FINAL FORM
+FB88 ARABIC LETTER DDAL ISOLATED FORM
+FB89 ARABIC LETTER DDAL FINAL FORM
+FB8A ARABIC LETTER JEH ISOLATED FORM
+FB8B ARABIC LETTER JEH FINAL FORM
+FB8C ARABIC LETTER RREH ISOLATED FORM
+FB8D ARABIC LETTER RREH FINAL FORM
+FB8E ARABIC LETTER KEHEH ISOLATED FORM
+FB8F ARABIC LETTER KEHEH FINAL FORM
+FB90 ARABIC LETTER KEHEH INITIAL FORM
+FB91 ARABIC LETTER KEHEH MEDIAL FORM
+FB92 ARABIC LETTER GAF ISOLATED FORM
+FB93 ARABIC LETTER GAF FINAL FORM
+FB94 ARABIC LETTER GAF INITIAL FORM
+FB95 ARABIC LETTER GAF MEDIAL FORM
+FB96 ARABIC LETTER GUEH ISOLATED FORM
+FB97 ARABIC LETTER GUEH FINAL FORM
+FB98 ARABIC LETTER GUEH INITIAL FORM
+FB99 ARABIC LETTER GUEH MEDIAL FORM
+FB9A ARABIC LETTER NGOEH ISOLATED FORM
+FB9B ARABIC LETTER NGOEH FINAL FORM
+FB9C ARABIC LETTER NGOEH INITIAL FORM
+FB9D ARABIC LETTER NGOEH MEDIAL FORM
+FB9E ARABIC LETTER NOON GHUNNA ISOLATED FORM
+FB9F ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0 ARABIC LETTER RNOON ISOLATED FORM
+FBA1 ARABIC LETTER RNOON FINAL FORM
+FBA2 ARABIC LETTER RNOON INITIAL FORM
+FBA3 ARABIC LETTER RNOON MEDIAL FORM
+FBA4 ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+FBA5 ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6 ARABIC LETTER HEH GOAL ISOLATED FORM
+FBA7 ARABIC LETTER HEH GOAL FINAL FORM
+FBA8 ARABIC LETTER HEH GOAL INITIAL FORM
+FBA9 ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+FBAB ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+FBAC ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+FBAD ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE ARABIC LETTER YEH BARREE ISOLATED FORM
+FBAF ARABIC LETTER YEH BARREE FINAL FORM
+FBB0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+FBB1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3 ARABIC LETTER NG ISOLATED FORM
+FBD4 ARABIC LETTER NG FINAL FORM
+FBD5 ARABIC LETTER NG INITIAL FORM
+FBD6 ARABIC LETTER NG MEDIAL FORM
+FBD7 ARABIC LETTER U ISOLATED FORM
+FBD8 ARABIC LETTER U FINAL FORM
+FBD9 ARABIC LETTER OE ISOLATED FORM
+FBDA ARABIC LETTER OE FINAL FORM
+FBDB ARABIC LETTER YU ISOLATED FORM
+FBDC ARABIC LETTER YU FINAL FORM
+FBDD ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE ARABIC LETTER VE ISOLATED FORM
+FBDF ARABIC LETTER VE FINAL FORM
+FBE0 ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+FBE1 ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2 ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+FBE3 ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4 ARABIC LETTER E ISOLATED FORM
+FBE5 ARABIC LETTER E FINAL FORM
+FBE6 ARABIC LETTER E INITIAL FORM
+FBE7 ARABIC LETTER E MEDIAL FORM
+FBE8 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+FBE9 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+FBEB ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+FBED ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+FBEF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+FBF1 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+FBF3 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+FBF5 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+FBF7 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+FBF8 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9 ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FBFA ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FBFB ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC ARABIC LETTER FARSI YEH ISOLATED FORM
+FBFD ARABIC LETTER FARSI YEH FINAL FORM
+FBFE ARABIC LETTER FARSI YEH INITIAL FORM
+FBFF ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05 ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06 ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07 ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08 ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09 ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10 ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11 ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12 ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13 ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14 ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15 ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16 ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17 ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18 ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19 ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20 ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21 ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22 ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23 ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24 ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25 ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26 ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27 ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28 ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29 ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30 ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31 ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32 ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33 ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34 ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35 ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36 ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37 ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38 ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39 ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40 ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41 ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42 ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43 ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44 ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45 ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46 ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47 ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48 ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49 ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50 ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51 ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52 ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53 ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54 ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55 ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56 ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57 ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58 ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59 ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60 ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61 ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62 ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63 ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70 ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71 ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72 ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73 ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74 ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75 ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76 ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77 ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78 ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79 ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80 ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81 ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82 ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83 ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84 ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85 ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86 ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87 ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88 ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89 ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90 ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91 ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92 ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93 ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94 ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95 ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96 ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0 ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1 ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2 ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3 ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4 ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5 ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6 ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7 ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8 ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9 ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0 ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1 ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2 ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3 ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4 ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5 ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6 ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7 ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8 ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9 ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0 ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1 ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2 ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3 ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4 ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5 ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6 ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7 ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8 ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9 ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0 ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1 ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2 ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3 ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4 ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5 ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6 ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7 ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8 ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9 ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1 ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2 ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3 ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4 ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5 ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6 ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7 ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8 ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9 ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0 ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1 ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2 ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3 ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4 ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5 ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6 ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7 ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8 ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01 ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02 ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03 ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04 ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05 ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06 ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07 ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08 ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09 ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10 ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11 ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12 ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13 ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14 ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16 ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17 ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18 ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19 ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20 ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21 ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22 ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23 ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24 ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25 ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26 ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27 ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28 ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29 ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30 ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31 ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32 ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33 ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34 ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35 ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36 ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37 ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38 ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39 ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+FD3D ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E ORNATE LEFT PARENTHESIS
+FD3F ORNATE RIGHT PARENTHESIS
+FD50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+FD52 ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54 ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55 ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56 ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57 ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58 ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+FD59 ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+FD60 ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61 ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+FD63 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64 ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+FD65 ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66 ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+FD68 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69 ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+FD6B ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+FD6D ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+FD70 ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71 ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+FD72 ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73 ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74 ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75 ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76 ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+FD77 ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78 ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79 ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+FD7D ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80 ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81 ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82 ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83 ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+FD84 ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85 ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+FD86 ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87 ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+FD88 ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89 ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95 ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96 ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97 ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+FD98 ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99 ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+FD9D ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0 ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1 ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2 ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3 ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4 ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5 ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6 ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7 ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8 ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9 ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0 ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1 ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2 ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3 ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4 ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5 ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6 ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7 ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8 ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9 ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0 ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1 ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2 ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3 ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4 ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3 ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4 ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5 ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6 ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7 ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8 ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9 ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB ARABIC LIGATURE JALLAJALALOUHOU
+FDFC RIAL SIGN
+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE00 VARIATION SELECTOR-1
+FE01 VARIATION SELECTOR-2
+FE02 VARIATION SELECTOR-3
+FE03 VARIATION SELECTOR-4
+FE04 VARIATION SELECTOR-5
+FE05 VARIATION SELECTOR-6
+FE06 VARIATION SELECTOR-7
+FE07 VARIATION SELECTOR-8
+FE08 VARIATION SELECTOR-9
+FE09 VARIATION SELECTOR-10
+FE0A VARIATION SELECTOR-11
+FE0B VARIATION SELECTOR-12
+FE0C VARIATION SELECTOR-13
+FE0D VARIATION SELECTOR-14
+FE0E VARIATION SELECTOR-15
+FE0F VARIATION SELECTOR-16
+FE10 PRESENTATION FORM FOR VERTICAL COMMA
+FE11 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13 PRESENTATION FORM FOR VERTICAL COLON
+FE14 PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15 PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16 PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE20 COMBINING LIGATURE LEFT HALF
+FE21 COMBINING LIGATURE RIGHT HALF
+FE22 COMBINING DOUBLE TILDE LEFT HALF
+FE23 COMBINING DOUBLE TILDE RIGHT HALF
+FE30 PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31 PRESENTATION FORM FOR VERTICAL EM DASH
+FE32 PRESENTATION FORM FOR VERTICAL EN DASH
+FE33 PRESENTATION FORM FOR VERTICAL LOW LINE
+FE34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45 SESAME DOT
+FE46 WHITE SESAME DOT
+FE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49 DASHED OVERLINE
+FE4A CENTRELINE OVERLINE
+FE4B WAVY OVERLINE
+FE4C DOUBLE WAVY OVERLINE
+FE4D DASHED LOW LINE
+FE4E CENTRELINE LOW LINE
+FE4F WAVY LOW LINE
+FE50 SMALL COMMA
+FE51 SMALL IDEOGRAPHIC COMMA
+FE52 SMALL FULL STOP
+FE54 SMALL SEMICOLON
+FE55 SMALL COLON
+FE56 SMALL QUESTION MARK
+FE57 SMALL EXCLAMATION MARK
+FE58 SMALL EM DASH
+FE59 SMALL LEFT PARENTHESIS
+FE5A SMALL RIGHT PARENTHESIS
+FE5B SMALL LEFT CURLY BRACKET
+FE5C SMALL RIGHT CURLY BRACKET
+FE5D SMALL LEFT TORTOISE SHELL BRACKET
+FE5E SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F SMALL NUMBER SIGN
+FE60 SMALL AMPERSAND
+FE61 SMALL ASTERISK
+FE62 SMALL PLUS SIGN
+FE63 SMALL HYPHEN-MINUS
+FE64 SMALL LESS-THAN SIGN
+FE65 SMALL GREATER-THAN SIGN
+FE66 SMALL EQUALS SIGN
+FE68 SMALL REVERSE SOLIDUS
+FE69 SMALL DOLLAR SIGN
+FE6A SMALL PERCENT SIGN
+FE6B SMALL COMMERCIAL AT
+FE70 ARABIC FATHATAN ISOLATED FORM
+FE71 ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72 ARABIC DAMMATAN ISOLATED FORM
+FE73 ARABIC TAIL FRAGMENT
+FE74 ARABIC KASRATAN ISOLATED FORM
+FE76 ARABIC FATHA ISOLATED FORM
+FE77 ARABIC FATHA MEDIAL FORM
+FE78 ARABIC DAMMA ISOLATED FORM
+FE79 ARABIC DAMMA MEDIAL FORM
+FE7A ARABIC KASRA ISOLATED FORM
+FE7B ARABIC KASRA MEDIAL FORM
+FE7C ARABIC SHADDA ISOLATED FORM
+FE7D ARABIC SHADDA MEDIAL FORM
+FE7E ARABIC SUKUN ISOLATED FORM
+FE7F ARABIC SUKUN MEDIAL FORM
+FE80 ARABIC LETTER HAMZA ISOLATED FORM
+FE81 ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+FE82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83 ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+FE84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85 ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+FE86 ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87 ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+FE88 ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89 ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+FE8A ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+FE8B ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+FE8C ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D ARABIC LETTER ALEF ISOLATED FORM
+FE8E ARABIC LETTER ALEF FINAL FORM
+FE8F ARABIC LETTER BEH ISOLATED FORM
+FE90 ARABIC LETTER BEH FINAL FORM
+FE91 ARABIC LETTER BEH INITIAL FORM
+FE92 ARABIC LETTER BEH MEDIAL FORM
+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
+FE94 ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95 ARABIC LETTER TEH ISOLATED FORM
+FE96 ARABIC LETTER TEH FINAL FORM
+FE97 ARABIC LETTER TEH INITIAL FORM
+FE98 ARABIC LETTER TEH MEDIAL FORM
+FE99 ARABIC LETTER THEH ISOLATED FORM
+FE9A ARABIC LETTER THEH FINAL FORM
+FE9B ARABIC LETTER THEH INITIAL FORM
+FE9C ARABIC LETTER THEH MEDIAL FORM
+FE9D ARABIC LETTER JEEM ISOLATED FORM
+FE9E ARABIC LETTER JEEM FINAL FORM
+FE9F ARABIC LETTER JEEM INITIAL FORM
+FEA0 ARABIC LETTER JEEM MEDIAL FORM
+FEA1 ARABIC LETTER HAH ISOLATED FORM
+FEA2 ARABIC LETTER HAH FINAL FORM
+FEA3 ARABIC LETTER HAH INITIAL FORM
+FEA4 ARABIC LETTER HAH MEDIAL FORM
+FEA5 ARABIC LETTER KHAH ISOLATED FORM
+FEA6 ARABIC LETTER KHAH FINAL FORM
+FEA7 ARABIC LETTER KHAH INITIAL FORM
+FEA8 ARABIC LETTER KHAH MEDIAL FORM
+FEA9 ARABIC LETTER DAL ISOLATED FORM
+FEAA ARABIC LETTER DAL FINAL FORM
+FEAB ARABIC LETTER THAL ISOLATED FORM
+FEAC ARABIC LETTER THAL FINAL FORM
+FEAD ARABIC LETTER REH ISOLATED FORM
+FEAE ARABIC LETTER REH FINAL FORM
+FEAF ARABIC LETTER ZAIN ISOLATED FORM
+FEB0 ARABIC LETTER ZAIN FINAL FORM
+FEB1 ARABIC LETTER SEEN ISOLATED FORM
+FEB2 ARABIC LETTER SEEN FINAL FORM
+FEB3 ARABIC LETTER SEEN INITIAL FORM
+FEB4 ARABIC LETTER SEEN MEDIAL FORM
+FEB5 ARABIC LETTER SHEEN ISOLATED FORM
+FEB6 ARABIC LETTER SHEEN FINAL FORM
+FEB7 ARABIC LETTER SHEEN INITIAL FORM
+FEB8 ARABIC LETTER SHEEN MEDIAL FORM
+FEB9 ARABIC LETTER SAD ISOLATED FORM
+FEBA ARABIC LETTER SAD FINAL FORM
+FEBB ARABIC LETTER SAD INITIAL FORM
+FEBC ARABIC LETTER SAD MEDIAL FORM
+FEBD ARABIC LETTER DAD ISOLATED FORM
+FEBE ARABIC LETTER DAD FINAL FORM
+FEBF ARABIC LETTER DAD INITIAL FORM
+FEC0 ARABIC LETTER DAD MEDIAL FORM
+FEC1 ARABIC LETTER TAH ISOLATED FORM
+FEC2 ARABIC LETTER TAH FINAL FORM
+FEC3 ARABIC LETTER TAH INITIAL FORM
+FEC4 ARABIC LETTER TAH MEDIAL FORM
+FEC5 ARABIC LETTER ZAH ISOLATED FORM
+FEC6 ARABIC LETTER ZAH FINAL FORM
+FEC7 ARABIC LETTER ZAH INITIAL FORM
+FEC8 ARABIC LETTER ZAH MEDIAL FORM
+FEC9 ARABIC LETTER AIN ISOLATED FORM
+FECA ARABIC LETTER AIN FINAL FORM
+FECB ARABIC LETTER AIN INITIAL FORM
+FECC ARABIC LETTER AIN MEDIAL FORM
+FECD ARABIC LETTER GHAIN ISOLATED FORM
+FECE ARABIC LETTER GHAIN FINAL FORM
+FECF ARABIC LETTER GHAIN INITIAL FORM
+FED0 ARABIC LETTER GHAIN MEDIAL FORM
+FED1 ARABIC LETTER FEH ISOLATED FORM
+FED2 ARABIC LETTER FEH FINAL FORM
+FED3 ARABIC LETTER FEH INITIAL FORM
+FED4 ARABIC LETTER FEH MEDIAL FORM
+FED5 ARABIC LETTER QAF ISOLATED FORM
+FED6 ARABIC LETTER QAF FINAL FORM
+FED7 ARABIC LETTER QAF INITIAL FORM
+FED8 ARABIC LETTER QAF MEDIAL FORM
+FED9 ARABIC LETTER KAF ISOLATED FORM
+FEDA ARABIC LETTER KAF FINAL FORM
+FEDB ARABIC LETTER KAF INITIAL FORM
+FEDC ARABIC LETTER KAF MEDIAL FORM
+FEDD ARABIC LETTER LAM ISOLATED FORM
+FEDE ARABIC LETTER LAM FINAL FORM
+FEDF ARABIC LETTER LAM INITIAL FORM
+FEE0 ARABIC LETTER LAM MEDIAL FORM
+FEE1 ARABIC LETTER MEEM ISOLATED FORM
+FEE2 ARABIC LETTER MEEM FINAL FORM
+FEE3 ARABIC LETTER MEEM INITIAL FORM
+FEE4 ARABIC LETTER MEEM MEDIAL FORM
+FEE5 ARABIC LETTER NOON ISOLATED FORM
+FEE6 ARABIC LETTER NOON FINAL FORM
+FEE7 ARABIC LETTER NOON INITIAL FORM
+FEE8 ARABIC LETTER NOON MEDIAL FORM
+FEE9 ARABIC LETTER HEH ISOLATED FORM
+FEEA ARABIC LETTER HEH FINAL FORM
+FEEB ARABIC LETTER HEH INITIAL FORM
+FEEC ARABIC LETTER HEH MEDIAL FORM
+FEED ARABIC LETTER WAW ISOLATED FORM
+FEEE ARABIC LETTER WAW FINAL FORM
+FEEF ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+FEF0 ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1 ARABIC LETTER YEH ISOLATED FORM
+FEF2 ARABIC LETTER YEH FINAL FORM
+FEF3 ARABIC LETTER YEH INITIAL FORM
+FEF4 ARABIC LETTER YEH MEDIAL FORM
+FEF5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+FEF6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+FEF8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+FEFA ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF ZERO WIDTH NO-BREAK SPACE
+FF01 FULLWIDTH EXCLAMATION MARK
+FF02 FULLWIDTH QUOTATION MARK
+FF03 FULLWIDTH NUMBER SIGN
+FF04 FULLWIDTH DOLLAR SIGN
+FF05 FULLWIDTH PERCENT SIGN
+FF06 FULLWIDTH AMPERSAND
+FF07 FULLWIDTH APOSTROPHE
+FF08 FULLWIDTH LEFT PARENTHESIS
+FF09 FULLWIDTH RIGHT PARENTHESIS
+FF0A FULLWIDTH ASTERISK
+FF0B FULLWIDTH PLUS SIGN
+FF0C FULLWIDTH COMMA
+FF0D FULLWIDTH HYPHEN-MINUS
+FF0E FULLWIDTH FULL STOP
+FF0F FULLWIDTH SOLIDUS
+FF10 FULLWIDTH DIGIT ZERO
+FF11 FULLWIDTH DIGIT ONE
+FF12 FULLWIDTH DIGIT TWO
+FF13 FULLWIDTH DIGIT THREE
+FF14 FULLWIDTH DIGIT FOUR
+FF15 FULLWIDTH DIGIT FIVE
+FF16 FULLWIDTH DIGIT SIX
+FF17 FULLWIDTH DIGIT SEVEN
+FF18 FULLWIDTH DIGIT EIGHT
+FF19 FULLWIDTH DIGIT NINE
+FF1A FULLWIDTH COLON
+FF1B FULLWIDTH SEMICOLON
+FF1C FULLWIDTH LESS-THAN SIGN
+FF1D FULLWIDTH EQUALS SIGN
+FF1E FULLWIDTH GREATER-THAN SIGN
+FF1F FULLWIDTH QUESTION MARK
+FF20 FULLWIDTH COMMERCIAL AT
+FF21 FULLWIDTH LATIN CAPITAL LETTER A
+FF22 FULLWIDTH LATIN CAPITAL LETTER B
+FF23 FULLWIDTH LATIN CAPITAL LETTER C
+FF24 FULLWIDTH LATIN CAPITAL LETTER D
+FF25 FULLWIDTH LATIN CAPITAL LETTER E
+FF26 FULLWIDTH LATIN CAPITAL LETTER F
+FF27 FULLWIDTH LATIN CAPITAL LETTER G
+FF28 FULLWIDTH LATIN CAPITAL LETTER H
+FF29 FULLWIDTH LATIN CAPITAL LETTER I
+FF2A FULLWIDTH LATIN CAPITAL LETTER J
+FF2B FULLWIDTH LATIN CAPITAL LETTER K
+FF2C FULLWIDTH LATIN CAPITAL LETTER L
+FF2D FULLWIDTH LATIN CAPITAL LETTER M
+FF2E FULLWIDTH LATIN CAPITAL LETTER N
+FF2F FULLWIDTH LATIN CAPITAL LETTER O
+FF30 FULLWIDTH LATIN CAPITAL LETTER P
+FF31 FULLWIDTH LATIN CAPITAL LETTER Q
+FF32 FULLWIDTH LATIN CAPITAL LETTER R
+FF33 FULLWIDTH LATIN CAPITAL LETTER S
+FF34 FULLWIDTH LATIN CAPITAL LETTER T
+FF35 FULLWIDTH LATIN CAPITAL LETTER U
+FF36 FULLWIDTH LATIN CAPITAL LETTER V
+FF37 FULLWIDTH LATIN CAPITAL LETTER W
+FF38 FULLWIDTH LATIN CAPITAL LETTER X
+FF39 FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B FULLWIDTH LEFT SQUARE BRACKET
+FF3C FULLWIDTH REVERSE SOLIDUS
+FF3D FULLWIDTH RIGHT SQUARE BRACKET
+FF3E FULLWIDTH CIRCUMFLEX ACCENT
+FF3F FULLWIDTH LOW LINE
+FF40 FULLWIDTH GRAVE ACCENT
+FF41 FULLWIDTH LATIN SMALL LETTER A
+FF42 FULLWIDTH LATIN SMALL LETTER B
+FF43 FULLWIDTH LATIN SMALL LETTER C
+FF44 FULLWIDTH LATIN SMALL LETTER D
+FF45 FULLWIDTH LATIN SMALL LETTER E
+FF46 FULLWIDTH LATIN SMALL LETTER F
+FF47 FULLWIDTH LATIN SMALL LETTER G
+FF48 FULLWIDTH LATIN SMALL LETTER H
+FF49 FULLWIDTH LATIN SMALL LETTER I
+FF4A FULLWIDTH LATIN SMALL LETTER J
+FF4B FULLWIDTH LATIN SMALL LETTER K
+FF4C FULLWIDTH LATIN SMALL LETTER L
+FF4D FULLWIDTH LATIN SMALL LETTER M
+FF4E FULLWIDTH LATIN SMALL LETTER N
+FF4F FULLWIDTH LATIN SMALL LETTER O
+FF50 FULLWIDTH LATIN SMALL LETTER P
+FF51 FULLWIDTH LATIN SMALL LETTER Q
+FF52 FULLWIDTH LATIN SMALL LETTER R
+FF53 FULLWIDTH LATIN SMALL LETTER S
+FF54 FULLWIDTH LATIN SMALL LETTER T
+FF55 FULLWIDTH LATIN SMALL LETTER U
+FF56 FULLWIDTH LATIN SMALL LETTER V
+FF57 FULLWIDTH LATIN SMALL LETTER W
+FF58 FULLWIDTH LATIN SMALL LETTER X
+FF59 FULLWIDTH LATIN SMALL LETTER Y
+FF5A FULLWIDTH LATIN SMALL LETTER Z
+FF5B FULLWIDTH LEFT CURLY BRACKET
+FF5C FULLWIDTH VERTICAL LINE
+FF5D FULLWIDTH RIGHT CURLY BRACKET
+FF5E FULLWIDTH TILDE
+FF5F FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 HALFWIDTH LEFT CORNER BRACKET
+FF63 HALFWIDTH RIGHT CORNER BRACKET
+FF64 HALFWIDTH IDEOGRAPHIC COMMA
+FF65 HALFWIDTH KATAKANA MIDDLE DOT
+FF66 HALFWIDTH KATAKANA LETTER WO
+FF67 HALFWIDTH KATAKANA LETTER SMALL A
+FF68 HALFWIDTH KATAKANA LETTER SMALL I
+FF69 HALFWIDTH KATAKANA LETTER SMALL U
+FF6A HALFWIDTH KATAKANA LETTER SMALL E
+FF6B HALFWIDTH KATAKANA LETTER SMALL O
+FF6C HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71 HALFWIDTH KATAKANA LETTER A
+FF72 HALFWIDTH KATAKANA LETTER I
+FF73 HALFWIDTH KATAKANA LETTER U
+FF74 HALFWIDTH KATAKANA LETTER E
+FF75 HALFWIDTH KATAKANA LETTER O
+FF76 HALFWIDTH KATAKANA LETTER KA
+FF77 HALFWIDTH KATAKANA LETTER KI
+FF78 HALFWIDTH KATAKANA LETTER KU
+FF79 HALFWIDTH KATAKANA LETTER KE
+FF7A HALFWIDTH KATAKANA LETTER KO
+FF7B HALFWIDTH KATAKANA LETTER SA
+FF7C HALFWIDTH KATAKANA LETTER SI
+FF7D HALFWIDTH KATAKANA LETTER SU
+FF7E HALFWIDTH KATAKANA LETTER SE
+FF7F HALFWIDTH KATAKANA LETTER SO
+FF80 HALFWIDTH KATAKANA LETTER TA
+FF81 HALFWIDTH KATAKANA LETTER TI
+FF82 HALFWIDTH KATAKANA LETTER TU
+FF83 HALFWIDTH KATAKANA LETTER TE
+FF84 HALFWIDTH KATAKANA LETTER TO
+FF85 HALFWIDTH KATAKANA LETTER NA
+FF86 HALFWIDTH KATAKANA LETTER NI
+FF87 HALFWIDTH KATAKANA LETTER NU
+FF88 HALFWIDTH KATAKANA LETTER NE
+FF89 HALFWIDTH KATAKANA LETTER NO
+FF8A HALFWIDTH KATAKANA LETTER HA
+FF8B HALFWIDTH KATAKANA LETTER HI
+FF8C HALFWIDTH KATAKANA LETTER HU
+FF8D HALFWIDTH KATAKANA LETTER HE
+FF8E HALFWIDTH KATAKANA LETTER HO
+FF8F HALFWIDTH KATAKANA LETTER MA
+FF90 HALFWIDTH KATAKANA LETTER MI
+FF91 HALFWIDTH KATAKANA LETTER MU
+FF92 HALFWIDTH KATAKANA LETTER ME
+FF93 HALFWIDTH KATAKANA LETTER MO
+FF94 HALFWIDTH KATAKANA LETTER YA
+FF95 HALFWIDTH KATAKANA LETTER YU
+FF96 HALFWIDTH KATAKANA LETTER YO
+FF97 HALFWIDTH KATAKANA LETTER RA
+FF98 HALFWIDTH KATAKANA LETTER RI
+FF99 HALFWIDTH KATAKANA LETTER RU
+FF9A HALFWIDTH KATAKANA LETTER RE
+FF9B HALFWIDTH KATAKANA LETTER RO
+FF9C HALFWIDTH KATAKANA LETTER WA
+FF9D HALFWIDTH KATAKANA LETTER N
+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0 HALFWIDTH HANGUL FILLER
+FFA1 HALFWIDTH HANGUL LETTER KIYEOK
+FFA2 HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4 HALFWIDTH HANGUL LETTER NIEUN
+FFA5 HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6 HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7 HALFWIDTH HANGUL LETTER TIKEUT
+FFA8 HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9 HALFWIDTH HANGUL LETTER RIEUL
+FFAA HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0 HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1 HALFWIDTH HANGUL LETTER MIEUM
+FFB2 HALFWIDTH HANGUL LETTER PIEUP
+FFB3 HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4 HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5 HALFWIDTH HANGUL LETTER SIOS
+FFB6 HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7 HALFWIDTH HANGUL LETTER IEUNG
+FFB8 HALFWIDTH HANGUL LETTER CIEUC
+FFB9 HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC HALFWIDTH HANGUL LETTER THIEUTH
+FFBD HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE HALFWIDTH HANGUL LETTER HIEUH
+FFC2 HALFWIDTH HANGUL LETTER A
+FFC3 HALFWIDTH HANGUL LETTER AE
+FFC4 HALFWIDTH HANGUL LETTER YA
+FFC5 HALFWIDTH HANGUL LETTER YAE
+FFC6 HALFWIDTH HANGUL LETTER EO
+FFC7 HALFWIDTH HANGUL LETTER E
+FFCA HALFWIDTH HANGUL LETTER YEO
+FFCB HALFWIDTH HANGUL LETTER YE
+FFCC HALFWIDTH HANGUL LETTER O
+FFCD HALFWIDTH HANGUL LETTER WA
+FFCE HALFWIDTH HANGUL LETTER WAE
+FFCF HALFWIDTH HANGUL LETTER OE
+FFD2 HALFWIDTH HANGUL LETTER YO
+FFD3 HALFWIDTH HANGUL LETTER U
+FFD4 HALFWIDTH HANGUL LETTER WEO
+FFD5 HALFWIDTH HANGUL LETTER WE
+FFD6 HALFWIDTH HANGUL LETTER WI
+FFD7 HALFWIDTH HANGUL LETTER YU
+FFDA HALFWIDTH HANGUL LETTER EU
+FFDB HALFWIDTH HANGUL LETTER YI
+FFDC HALFWIDTH HANGUL LETTER I
+FFE0 FULLWIDTH CENT SIGN
+FFE1 FULLWIDTH POUND SIGN
+FFE2 FULLWIDTH NOT SIGN
+FFE3 FULLWIDTH MACRON
+FFE4 FULLWIDTH BROKEN BAR
+FFE5 FULLWIDTH YEN SIGN
+FFE6 FULLWIDTH WON SIGN
+FFE8 HALFWIDTH FORMS LIGHT VERTICAL
+FFE9 HALFWIDTH LEFTWARDS ARROW
+FFEA HALFWIDTH UPWARDS ARROW
+FFEB HALFWIDTH RIGHTWARDS ARROW
+FFEC HALFWIDTH DOWNWARDS ARROW
+FFED HALFWIDTH BLACK SQUARE
+FFEE HALFWIDTH WHITE CIRCLE
+FFF9 INTERLINEAR ANNOTATION ANCHOR
+FFFA INTERLINEAR ANNOTATION SEPARATOR
+FFFB INTERLINEAR ANNOTATION TERMINATOR
+FFFC OBJECT REPLACEMENT CHARACTER
+FFFD REPLACEMENT CHARACTER
+10000 LINEAR B SYLLABLE B008 A
+10001 LINEAR B SYLLABLE B038 E
+10002 LINEAR B SYLLABLE B028 I
+10003 LINEAR B SYLLABLE B061 O
+10004 LINEAR B SYLLABLE B010 U
+10005 LINEAR B SYLLABLE B001 DA
+10006 LINEAR B SYLLABLE B045 DE
+10007 LINEAR B SYLLABLE B007 DI
+10008 LINEAR B SYLLABLE B014 DO
+10009 LINEAR B SYLLABLE B051 DU
+1000A LINEAR B SYLLABLE B057 JA
+1000B LINEAR B SYLLABLE B046 JE
+1000D LINEAR B SYLLABLE B036 JO
+1000E LINEAR B SYLLABLE B065 JU
+1000F LINEAR B SYLLABLE B077 KA
+10010 LINEAR B SYLLABLE B044 KE
+10011 LINEAR B SYLLABLE B067 KI
+10012 LINEAR B SYLLABLE B070 KO
+10013 LINEAR B SYLLABLE B081 KU
+10014 LINEAR B SYLLABLE B080 MA
+10015 LINEAR B SYLLABLE B013 ME
+10016 LINEAR B SYLLABLE B073 MI
+10017 LINEAR B SYLLABLE B015 MO
+10018 LINEAR B SYLLABLE B023 MU
+10019 LINEAR B SYLLABLE B006 NA
+1001A LINEAR B SYLLABLE B024 NE
+1001B LINEAR B SYLLABLE B030 NI
+1001C LINEAR B SYLLABLE B052 NO
+1001D LINEAR B SYLLABLE B055 NU
+1001E LINEAR B SYLLABLE B003 PA
+1001F LINEAR B SYLLABLE B072 PE
+10020 LINEAR B SYLLABLE B039 PI
+10021 LINEAR B SYLLABLE B011 PO
+10022 LINEAR B SYLLABLE B050 PU
+10023 LINEAR B SYLLABLE B016 QA
+10024 LINEAR B SYLLABLE B078 QE
+10025 LINEAR B SYLLABLE B021 QI
+10026 LINEAR B SYLLABLE B032 QO
+10028 LINEAR B SYLLABLE B060 RA
+10029 LINEAR B SYLLABLE B027 RE
+1002A LINEAR B SYLLABLE B053 RI
+1002B LINEAR B SYLLABLE B002 RO
+1002C LINEAR B SYLLABLE B026 RU
+1002D LINEAR B SYLLABLE B031 SA
+1002E LINEAR B SYLLABLE B009 SE
+1002F LINEAR B SYLLABLE B041 SI
+10030 LINEAR B SYLLABLE B012 SO
+10031 LINEAR B SYLLABLE B058 SU
+10032 LINEAR B SYLLABLE B059 TA
+10033 LINEAR B SYLLABLE B004 TE
+10034 LINEAR B SYLLABLE B037 TI
+10035 LINEAR B SYLLABLE B005 TO
+10036 LINEAR B SYLLABLE B069 TU
+10037 LINEAR B SYLLABLE B054 WA
+10038 LINEAR B SYLLABLE B075 WE
+10039 LINEAR B SYLLABLE B040 WI
+1003A LINEAR B SYLLABLE B042 WO
+1003C LINEAR B SYLLABLE B017 ZA
+1003D LINEAR B SYLLABLE B074 ZE
+1003F LINEAR B SYLLABLE B020 ZO
+10040 LINEAR B SYLLABLE B025 A2
+10041 LINEAR B SYLLABLE B043 A3
+10042 LINEAR B SYLLABLE B085 AU
+10043 LINEAR B SYLLABLE B071 DWE
+10044 LINEAR B SYLLABLE B090 DWO
+10045 LINEAR B SYLLABLE B048 NWA
+10046 LINEAR B SYLLABLE B029 PU2
+10047 LINEAR B SYLLABLE B062 PTE
+10048 LINEAR B SYLLABLE B076 RA2
+10049 LINEAR B SYLLABLE B033 RA3
+1004A LINEAR B SYLLABLE B068 RO2
+1004B LINEAR B SYLLABLE B066 TA2
+1004C LINEAR B SYLLABLE B087 TWE
+1004D LINEAR B SYLLABLE B091 TWO
+10050 LINEAR B SYMBOL B018
+10051 LINEAR B SYMBOL B019
+10052 LINEAR B SYMBOL B022
+10053 LINEAR B SYMBOL B034
+10054 LINEAR B SYMBOL B047
+10055 LINEAR B SYMBOL B049
+10056 LINEAR B SYMBOL B056
+10057 LINEAR B SYMBOL B063
+10058 LINEAR B SYMBOL B064
+10059 LINEAR B SYMBOL B079
+1005A LINEAR B SYMBOL B082
+1005B LINEAR B SYMBOL B083
+1005C LINEAR B SYMBOL B086
+1005D LINEAR B SYMBOL B089
+10080 LINEAR B IDEOGRAM B100 MAN
+10081 LINEAR B IDEOGRAM B102 WOMAN
+10082 LINEAR B IDEOGRAM B104 DEER
+10083 LINEAR B IDEOGRAM B105 EQUID
+10084 LINEAR B IDEOGRAM B105F MARE
+10085 LINEAR B IDEOGRAM B105M STALLION
+10086 LINEAR B IDEOGRAM B106F EWE
+10087 LINEAR B IDEOGRAM B106M RAM
+10088 LINEAR B IDEOGRAM B107F SHE-GOAT
+10089 LINEAR B IDEOGRAM B107M HE-GOAT
+1008A LINEAR B IDEOGRAM B108F SOW
+1008B LINEAR B IDEOGRAM B108M BOAR
+1008C LINEAR B IDEOGRAM B109F COW
+1008D LINEAR B IDEOGRAM B109M BULL
+1008E LINEAR B IDEOGRAM B120 WHEAT
+1008F LINEAR B IDEOGRAM B121 BARLEY
+10090 LINEAR B IDEOGRAM B122 OLIVE
+10091 LINEAR B IDEOGRAM B123 SPICE
+10092 LINEAR B IDEOGRAM B125 CYPERUS
+10093 LINEAR B MONOGRAM B127 KAPO
+10094 LINEAR B MONOGRAM B128 KANAKO
+10095 LINEAR B IDEOGRAM B130 OIL
+10096 LINEAR B IDEOGRAM B131 WINE
+10097 LINEAR B IDEOGRAM B132
+10098 LINEAR B MONOGRAM B133 AREPA
+10099 LINEAR B MONOGRAM B135 MERI
+1009A LINEAR B IDEOGRAM B140 BRONZE
+1009B LINEAR B IDEOGRAM B141 GOLD
+1009C LINEAR B IDEOGRAM B142
+1009D LINEAR B IDEOGRAM B145 WOOL
+1009E LINEAR B IDEOGRAM B146
+1009F LINEAR B IDEOGRAM B150
+100A0 LINEAR B IDEOGRAM B151 HORN
+100A1 LINEAR B IDEOGRAM B152
+100A2 LINEAR B IDEOGRAM B153
+100A3 LINEAR B IDEOGRAM B154
+100A4 LINEAR B MONOGRAM B156 TURO2
+100A5 LINEAR B IDEOGRAM B157
+100A6 LINEAR B IDEOGRAM B158
+100A7 LINEAR B IDEOGRAM B159 CLOTH
+100A8 LINEAR B IDEOGRAM B160
+100A9 LINEAR B IDEOGRAM B161
+100AA LINEAR B IDEOGRAM B162 GARMENT
+100AB LINEAR B IDEOGRAM B163 ARMOUR
+100AC LINEAR B IDEOGRAM B164
+100AD LINEAR B IDEOGRAM B165
+100AE LINEAR B IDEOGRAM B166
+100AF LINEAR B IDEOGRAM B167
+100B0 LINEAR B IDEOGRAM B168
+100B1 LINEAR B IDEOGRAM B169
+100B2 LINEAR B IDEOGRAM B170
+100B3 LINEAR B IDEOGRAM B171
+100B4 LINEAR B IDEOGRAM B172
+100B5 LINEAR B IDEOGRAM B173 MONTH
+100B6 LINEAR B IDEOGRAM B174
+100B7 LINEAR B IDEOGRAM B176 TREE
+100B8 LINEAR B IDEOGRAM B177
+100B9 LINEAR B IDEOGRAM B178
+100BA LINEAR B IDEOGRAM B179
+100BB LINEAR B IDEOGRAM B180
+100BC LINEAR B IDEOGRAM B181
+100BD LINEAR B IDEOGRAM B182
+100BE LINEAR B IDEOGRAM B183
+100BF LINEAR B IDEOGRAM B184
+100C0 LINEAR B IDEOGRAM B185
+100C1 LINEAR B IDEOGRAM B189
+100C2 LINEAR B IDEOGRAM B190
+100C3 LINEAR B IDEOGRAM B191 HELMET
+100C4 LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5 LINEAR B IDEOGRAM B225 BATHTUB
+100C6 LINEAR B IDEOGRAM B230 SPEAR
+100C7 LINEAR B IDEOGRAM B231 ARROW
+100C8 LINEAR B IDEOGRAM B232
+100C9 LINEAR B IDEOGRAM B233 SWORD
+100CA LINEAR B IDEOGRAM B234
+100CB LINEAR B IDEOGRAM B236
+100CC LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD LINEAR B IDEOGRAM B241 CHARIOT
+100CE LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF LINEAR B IDEOGRAM B243 WHEEL
+100D0 LINEAR B IDEOGRAM B245
+100D1 LINEAR B IDEOGRAM B246
+100D2 LINEAR B MONOGRAM B247 DIPTE
+100D3 LINEAR B IDEOGRAM B248
+100D4 LINEAR B IDEOGRAM B249
+100D5 LINEAR B IDEOGRAM B251
+100D6 LINEAR B IDEOGRAM B252
+100D7 LINEAR B IDEOGRAM B253
+100D8 LINEAR B IDEOGRAM B254 DART
+100D9 LINEAR B IDEOGRAM B255
+100DA LINEAR B IDEOGRAM B256
+100DB LINEAR B IDEOGRAM B257
+100DC LINEAR B IDEOGRAM B258
+100DD LINEAR B IDEOGRAM B259
+100DE LINEAR B IDEOGRAM VESSEL B155
+100DF LINEAR B IDEOGRAM VESSEL B200
+100E0 LINEAR B IDEOGRAM VESSEL B201
+100E1 LINEAR B IDEOGRAM VESSEL B202
+100E2 LINEAR B IDEOGRAM VESSEL B203
+100E3 LINEAR B IDEOGRAM VESSEL B204
+100E4 LINEAR B IDEOGRAM VESSEL B205
+100E5 LINEAR B IDEOGRAM VESSEL B206
+100E6 LINEAR B IDEOGRAM VESSEL B207
+100E7 LINEAR B IDEOGRAM VESSEL B208
+100E8 LINEAR B IDEOGRAM VESSEL B209
+100E9 LINEAR B IDEOGRAM VESSEL B210
+100EA LINEAR B IDEOGRAM VESSEL B211
+100EB LINEAR B IDEOGRAM VESSEL B212
+100EC LINEAR B IDEOGRAM VESSEL B213
+100ED LINEAR B IDEOGRAM VESSEL B214
+100EE LINEAR B IDEOGRAM VESSEL B215
+100EF LINEAR B IDEOGRAM VESSEL B216
+100F0 LINEAR B IDEOGRAM VESSEL B217
+100F1 LINEAR B IDEOGRAM VESSEL B218
+100F2 LINEAR B IDEOGRAM VESSEL B219
+100F3 LINEAR B IDEOGRAM VESSEL B221
+100F4 LINEAR B IDEOGRAM VESSEL B222
+100F5 LINEAR B IDEOGRAM VESSEL B226
+100F6 LINEAR B IDEOGRAM VESSEL B227
+100F7 LINEAR B IDEOGRAM VESSEL B228
+100F8 LINEAR B IDEOGRAM VESSEL B229
+100F9 LINEAR B IDEOGRAM VESSEL B250
+100FA LINEAR B IDEOGRAM VESSEL B305
+10100 AEGEAN WORD SEPARATOR LINE
+10101 AEGEAN WORD SEPARATOR DOT
+10102 AEGEAN CHECK MARK
+10107 AEGEAN NUMBER ONE
+10108 AEGEAN NUMBER TWO
+10109 AEGEAN NUMBER THREE
+1010A AEGEAN NUMBER FOUR
+1010B AEGEAN NUMBER FIVE
+1010C AEGEAN NUMBER SIX
+1010D AEGEAN NUMBER SEVEN
+1010E AEGEAN NUMBER EIGHT
+1010F AEGEAN NUMBER NINE
+10110 AEGEAN NUMBER TEN
+10111 AEGEAN NUMBER TWENTY
+10112 AEGEAN NUMBER THIRTY
+10113 AEGEAN NUMBER FORTY
+10114 AEGEAN NUMBER FIFTY
+10115 AEGEAN NUMBER SIXTY
+10116 AEGEAN NUMBER SEVENTY
+10117 AEGEAN NUMBER EIGHTY
+10118 AEGEAN NUMBER NINETY
+10119 AEGEAN NUMBER ONE HUNDRED
+1011A AEGEAN NUMBER TWO HUNDRED
+1011B AEGEAN NUMBER THREE HUNDRED
+1011C AEGEAN NUMBER FOUR HUNDRED
+1011D AEGEAN NUMBER FIVE HUNDRED
+1011E AEGEAN NUMBER SIX HUNDRED
+1011F AEGEAN NUMBER SEVEN HUNDRED
+10120 AEGEAN NUMBER EIGHT HUNDRED
+10121 AEGEAN NUMBER NINE HUNDRED
+10122 AEGEAN NUMBER ONE THOUSAND
+10123 AEGEAN NUMBER TWO THOUSAND
+10124 AEGEAN NUMBER THREE THOUSAND
+10125 AEGEAN NUMBER FOUR THOUSAND
+10126 AEGEAN NUMBER FIVE THOUSAND
+10127 AEGEAN NUMBER SIX THOUSAND
+10128 AEGEAN NUMBER SEVEN THOUSAND
+10129 AEGEAN NUMBER EIGHT THOUSAND
+1012A AEGEAN NUMBER NINE THOUSAND
+1012B AEGEAN NUMBER TEN THOUSAND
+1012C AEGEAN NUMBER TWENTY THOUSAND
+1012D AEGEAN NUMBER THIRTY THOUSAND
+1012E AEGEAN NUMBER FORTY THOUSAND
+1012F AEGEAN NUMBER FIFTY THOUSAND
+10130 AEGEAN NUMBER SIXTY THOUSAND
+10131 AEGEAN NUMBER SEVENTY THOUSAND
+10132 AEGEAN NUMBER EIGHTY THOUSAND
+10133 AEGEAN NUMBER NINETY THOUSAND
+10137 AEGEAN WEIGHT BASE UNIT
+10138 AEGEAN WEIGHT FIRST SUBUNIT
+10139 AEGEAN WEIGHT SECOND SUBUNIT
+1013A AEGEAN WEIGHT THIRD SUBUNIT
+1013B AEGEAN WEIGHT FOURTH SUBUNIT
+1013C AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E AEGEAN MEASURE SECOND SUBUNIT
+1013F AEGEAN MEASURE THIRD SUBUNIT
+10140 GREEK ACROPHONIC ATTIC ONE QUARTER
+10141 GREEK ACROPHONIC ATTIC ONE HALF
+10142 GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143 GREEK ACROPHONIC ATTIC FIVE
+10144 GREEK ACROPHONIC ATTIC FIFTY
+10145 GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146 GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147 GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148 GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149 GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F GREEK ACROPHONIC ATTIC FIVE STATERS
+10150 GREEK ACROPHONIC ATTIC TEN STATERS
+10151 GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152 GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153 GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154 GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155 GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156 GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157 GREEK ACROPHONIC ATTIC TEN MNAS
+10158 GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159 GREEK ACROPHONIC THESPIAN ONE
+1015A GREEK ACROPHONIC HERMIONIAN ONE
+1015B GREEK ACROPHONIC EPIDAUREAN TWO
+1015C GREEK ACROPHONIC THESPIAN TWO
+1015D GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+1015F GREEK ACROPHONIC TROEZENIAN FIVE
+10160 GREEK ACROPHONIC TROEZENIAN TEN
+10161 GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162 GREEK ACROPHONIC HERMIONIAN TEN
+10163 GREEK ACROPHONIC MESSENIAN TEN
+10164 GREEK ACROPHONIC THESPIAN TEN
+10165 GREEK ACROPHONIC THESPIAN THIRTY
+10166 GREEK ACROPHONIC TROEZENIAN FIFTY
+10167 GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168 GREEK ACROPHONIC HERMIONIAN FIFTY
+10169 GREEK ACROPHONIC THESPIAN FIFTY
+1016A GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170 GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171 GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172 GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173 GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174 GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175 GREEK ONE HALF SIGN
+10176 GREEK ONE HALF SIGN ALTERNATE FORM
+10177 GREEK TWO THIRDS SIGN
+10178 GREEK THREE QUARTERS SIGN
+10179 GREEK YEAR SIGN
+1017A GREEK TALENT SIGN
+1017B GREEK DRACHMA SIGN
+1017C GREEK OBOL SIGN
+1017D GREEK TWO OBOLS SIGN
+1017E GREEK THREE OBOLS SIGN
+1017F GREEK FOUR OBOLS SIGN
+10180 GREEK FIVE OBOLS SIGN
+10181 GREEK METRETES SIGN
+10182 GREEK KYATHOS BASE SIGN
+10183 GREEK LITRA SIGN
+10184 GREEK OUNKIA SIGN
+10185 GREEK XESTES SIGN
+10186 GREEK ARTABE SIGN
+10187 GREEK AROURA SIGN
+10188 GREEK GRAMMA SIGN
+10189 GREEK TRYBLION BASE SIGN
+1018A GREEK ZERO SIGN
+10300 OLD ITALIC LETTER A
+10301 OLD ITALIC LETTER BE
+10302 OLD ITALIC LETTER KE
+10303 OLD ITALIC LETTER DE
+10304 OLD ITALIC LETTER E
+10305 OLD ITALIC LETTER VE
+10306 OLD ITALIC LETTER ZE
+10307 OLD ITALIC LETTER HE
+10308 OLD ITALIC LETTER THE
+10309 OLD ITALIC LETTER I
+1030A OLD ITALIC LETTER KA
+1030B OLD ITALIC LETTER EL
+1030C OLD ITALIC LETTER EM
+1030D OLD ITALIC LETTER EN
+1030E OLD ITALIC LETTER ESH
+1030F OLD ITALIC LETTER O
+10310 OLD ITALIC LETTER PE
+10311 OLD ITALIC LETTER SHE
+10312 OLD ITALIC LETTER KU
+10313 OLD ITALIC LETTER ER
+10314 OLD ITALIC LETTER ES
+10315 OLD ITALIC LETTER TE
+10316 OLD ITALIC LETTER U
+10317 OLD ITALIC LETTER EKS
+10318 OLD ITALIC LETTER PHE
+10319 OLD ITALIC LETTER KHE
+1031A OLD ITALIC LETTER EF
+1031B OLD ITALIC LETTER ERS
+1031C OLD ITALIC LETTER CHE
+1031D OLD ITALIC LETTER II
+1031E OLD ITALIC LETTER UU
+10320 OLD ITALIC NUMERAL ONE
+10321 OLD ITALIC NUMERAL FIVE
+10322 OLD ITALIC NUMERAL TEN
+10323 OLD ITALIC NUMERAL FIFTY
+10330 GOTHIC LETTER AHSA
+10331 GOTHIC LETTER BAIRKAN
+10332 GOTHIC LETTER GIBA
+10333 GOTHIC LETTER DAGS
+10334 GOTHIC LETTER AIHVUS
+10335 GOTHIC LETTER QAIRTHRA
+10336 GOTHIC LETTER IUJA
+10337 GOTHIC LETTER HAGL
+10338 GOTHIC LETTER THIUTH
+10339 GOTHIC LETTER EIS
+1033A GOTHIC LETTER KUSMA
+1033B GOTHIC LETTER LAGUS
+1033C GOTHIC LETTER MANNA
+1033D GOTHIC LETTER NAUTHS
+1033E GOTHIC LETTER JER
+1033F GOTHIC LETTER URUS
+10340 GOTHIC LETTER PAIRTHRA
+10341 GOTHIC LETTER NINETY
+10342 GOTHIC LETTER RAIDA
+10343 GOTHIC LETTER SAUIL
+10344 GOTHIC LETTER TEIWS
+10345 GOTHIC LETTER WINJA
+10346 GOTHIC LETTER FAIHU
+10347 GOTHIC LETTER IGGWS
+10348 GOTHIC LETTER HWAIR
+10349 GOTHIC LETTER OTHAL
+1034A GOTHIC LETTER NINE HUNDRED
+10380 UGARITIC LETTER ALPA
+10381 UGARITIC LETTER BETA
+10382 UGARITIC LETTER GAMLA
+10383 UGARITIC LETTER KHA
+10384 UGARITIC LETTER DELTA
+10385 UGARITIC LETTER HO
+10386 UGARITIC LETTER WO
+10387 UGARITIC LETTER ZETA
+10388 UGARITIC LETTER HOTA
+10389 UGARITIC LETTER TET
+1038A UGARITIC LETTER YOD
+1038B UGARITIC LETTER KAF
+1038C UGARITIC LETTER SHIN
+1038D UGARITIC LETTER LAMDA
+1038E UGARITIC LETTER MEM
+1038F UGARITIC LETTER DHAL
+10390 UGARITIC LETTER NUN
+10391 UGARITIC LETTER ZU
+10392 UGARITIC LETTER SAMKA
+10393 UGARITIC LETTER AIN
+10394 UGARITIC LETTER PU
+10395 UGARITIC LETTER SADE
+10396 UGARITIC LETTER QOPA
+10397 UGARITIC LETTER RASHA
+10398 UGARITIC LETTER THANNA
+10399 UGARITIC LETTER GHAIN
+1039A UGARITIC LETTER TO
+1039B UGARITIC LETTER I
+1039C UGARITIC LETTER U
+1039D UGARITIC LETTER SSU
+1039F UGARITIC WORD DIVIDER
+103A0 OLD PERSIAN SIGN A
+103A1 OLD PERSIAN SIGN I
+103A2 OLD PERSIAN SIGN U
+103A3 OLD PERSIAN SIGN KA
+103A4 OLD PERSIAN SIGN KU
+103A5 OLD PERSIAN SIGN GA
+103A6 OLD PERSIAN SIGN GU
+103A7 OLD PERSIAN SIGN XA
+103A8 OLD PERSIAN SIGN CA
+103A9 OLD PERSIAN SIGN JA
+103AA OLD PERSIAN SIGN JI
+103AB OLD PERSIAN SIGN TA
+103AC OLD PERSIAN SIGN TU
+103AD OLD PERSIAN SIGN DA
+103AE OLD PERSIAN SIGN DI
+103AF OLD PERSIAN SIGN DU
+103B0 OLD PERSIAN SIGN THA
+103B1 OLD PERSIAN SIGN PA
+103B2 OLD PERSIAN SIGN BA
+103B3 OLD PERSIAN SIGN FA
+103B4 OLD PERSIAN SIGN NA
+103B5 OLD PERSIAN SIGN NU
+103B6 OLD PERSIAN SIGN MA
+103B7 OLD PERSIAN SIGN MI
+103B8 OLD PERSIAN SIGN MU
+103B9 OLD PERSIAN SIGN YA
+103BA OLD PERSIAN SIGN VA
+103BB OLD PERSIAN SIGN VI
+103BC OLD PERSIAN SIGN RA
+103BD OLD PERSIAN SIGN RU
+103BE OLD PERSIAN SIGN LA
+103BF OLD PERSIAN SIGN SA
+103C0 OLD PERSIAN SIGN ZA
+103C1 OLD PERSIAN SIGN SHA
+103C2 OLD PERSIAN SIGN SSA
+103C3 OLD PERSIAN SIGN HA
+103C8 OLD PERSIAN SIGN AURAMAZDAA
+103C9 OLD PERSIAN SIGN AURAMAZDAA-2
+103CA OLD PERSIAN SIGN AURAMAZDAAHA
+103CB OLD PERSIAN SIGN XSHAAYATHIYA
+103CC OLD PERSIAN SIGN DAHYAAUSH
+103CD OLD PERSIAN SIGN DAHYAAUSH-2
+103CE OLD PERSIAN SIGN BAGA
+103CF OLD PERSIAN SIGN BUUMISH
+103D0 OLD PERSIAN WORD DIVIDER
+103D1 OLD PERSIAN NUMBER ONE
+103D2 OLD PERSIAN NUMBER TWO
+103D3 OLD PERSIAN NUMBER TEN
+103D4 OLD PERSIAN NUMBER TWENTY
+103D5 OLD PERSIAN NUMBER HUNDRED
+10400 DESERET CAPITAL LETTER LONG I
+10401 DESERET CAPITAL LETTER LONG E
+10402 DESERET CAPITAL LETTER LONG A
+10403 DESERET CAPITAL LETTER LONG AH
+10404 DESERET CAPITAL LETTER LONG O
+10405 DESERET CAPITAL LETTER LONG OO
+10406 DESERET CAPITAL LETTER SHORT I
+10407 DESERET CAPITAL LETTER SHORT E
+10408 DESERET CAPITAL LETTER SHORT A
+10409 DESERET CAPITAL LETTER SHORT AH
+1040A DESERET CAPITAL LETTER SHORT O
+1040B DESERET CAPITAL LETTER SHORT OO
+1040C DESERET CAPITAL LETTER AY
+1040D DESERET CAPITAL LETTER OW
+1040E DESERET CAPITAL LETTER WU
+1040F DESERET CAPITAL LETTER YEE
+10410 DESERET CAPITAL LETTER H
+10411 DESERET CAPITAL LETTER PEE
+10412 DESERET CAPITAL LETTER BEE
+10413 DESERET CAPITAL LETTER TEE
+10414 DESERET CAPITAL LETTER DEE
+10415 DESERET CAPITAL LETTER CHEE
+10416 DESERET CAPITAL LETTER JEE
+10417 DESERET CAPITAL LETTER KAY
+10418 DESERET CAPITAL LETTER GAY
+10419 DESERET CAPITAL LETTER EF
+1041A DESERET CAPITAL LETTER VEE
+1041B DESERET CAPITAL LETTER ETH
+1041C DESERET CAPITAL LETTER THEE
+1041D DESERET CAPITAL LETTER ES
+1041E DESERET CAPITAL LETTER ZEE
+1041F DESERET CAPITAL LETTER ESH
+10420 DESERET CAPITAL LETTER ZHEE
+10421 DESERET CAPITAL LETTER ER
+10422 DESERET CAPITAL LETTER EL
+10423 DESERET CAPITAL LETTER EM
+10424 DESERET CAPITAL LETTER EN
+10425 DESERET CAPITAL LETTER ENG
+10426 DESERET CAPITAL LETTER OI
+10427 DESERET CAPITAL LETTER EW
+10428 DESERET SMALL LETTER LONG I
+10429 DESERET SMALL LETTER LONG E
+1042A DESERET SMALL LETTER LONG A
+1042B DESERET SMALL LETTER LONG AH
+1042C DESERET SMALL LETTER LONG O
+1042D DESERET SMALL LETTER LONG OO
+1042E DESERET SMALL LETTER SHORT I
+1042F DESERET SMALL LETTER SHORT E
+10430 DESERET SMALL LETTER SHORT A
+10431 DESERET SMALL LETTER SHORT AH
+10432 DESERET SMALL LETTER SHORT O
+10433 DESERET SMALL LETTER SHORT OO
+10434 DESERET SMALL LETTER AY
+10435 DESERET SMALL LETTER OW
+10436 DESERET SMALL LETTER WU
+10437 DESERET SMALL LETTER YEE
+10438 DESERET SMALL LETTER H
+10439 DESERET SMALL LETTER PEE
+1043A DESERET SMALL LETTER BEE
+1043B DESERET SMALL LETTER TEE
+1043C DESERET SMALL LETTER DEE
+1043D DESERET SMALL LETTER CHEE
+1043E DESERET SMALL LETTER JEE
+1043F DESERET SMALL LETTER KAY
+10440 DESERET SMALL LETTER GAY
+10441 DESERET SMALL LETTER EF
+10442 DESERET SMALL LETTER VEE
+10443 DESERET SMALL LETTER ETH
+10444 DESERET SMALL LETTER THEE
+10445 DESERET SMALL LETTER ES
+10446 DESERET SMALL LETTER ZEE
+10447 DESERET SMALL LETTER ESH
+10448 DESERET SMALL LETTER ZHEE
+10449 DESERET SMALL LETTER ER
+1044A DESERET SMALL LETTER EL
+1044B DESERET SMALL LETTER EM
+1044C DESERET SMALL LETTER EN
+1044D DESERET SMALL LETTER ENG
+1044E DESERET SMALL LETTER OI
+1044F DESERET SMALL LETTER EW
+10450 SHAVIAN LETTER PEEP
+10451 SHAVIAN LETTER TOT
+10452 SHAVIAN LETTER KICK
+10453 SHAVIAN LETTER FEE
+10454 SHAVIAN LETTER THIGH
+10455 SHAVIAN LETTER SO
+10456 SHAVIAN LETTER SURE
+10457 SHAVIAN LETTER CHURCH
+10458 SHAVIAN LETTER YEA
+10459 SHAVIAN LETTER HUNG
+1045A SHAVIAN LETTER BIB
+1045B SHAVIAN LETTER DEAD
+1045C SHAVIAN LETTER GAG
+1045D SHAVIAN LETTER VOW
+1045E SHAVIAN LETTER THEY
+1045F SHAVIAN LETTER ZOO
+10460 SHAVIAN LETTER MEASURE
+10461 SHAVIAN LETTER JUDGE
+10462 SHAVIAN LETTER WOE
+10463 SHAVIAN LETTER HA-HA
+10464 SHAVIAN LETTER LOLL
+10465 SHAVIAN LETTER MIME
+10466 SHAVIAN LETTER IF
+10467 SHAVIAN LETTER EGG
+10468 SHAVIAN LETTER ASH
+10469 SHAVIAN LETTER ADO
+1046A SHAVIAN LETTER ON
+1046B SHAVIAN LETTER WOOL
+1046C SHAVIAN LETTER OUT
+1046D SHAVIAN LETTER AH
+1046E SHAVIAN LETTER ROAR
+1046F SHAVIAN LETTER NUN
+10470 SHAVIAN LETTER EAT
+10471 SHAVIAN LETTER AGE
+10472 SHAVIAN LETTER ICE
+10473 SHAVIAN LETTER UP
+10474 SHAVIAN LETTER OAK
+10475 SHAVIAN LETTER OOZE
+10476 SHAVIAN LETTER OIL
+10477 SHAVIAN LETTER AWE
+10478 SHAVIAN LETTER ARE
+10479 SHAVIAN LETTER OR
+1047A SHAVIAN LETTER AIR
+1047B SHAVIAN LETTER ERR
+1047C SHAVIAN LETTER ARRAY
+1047D SHAVIAN LETTER EAR
+1047E SHAVIAN LETTER IAN
+1047F SHAVIAN LETTER YEW
+10480 OSMANYA LETTER ALEF
+10481 OSMANYA LETTER BA
+10482 OSMANYA LETTER TA
+10483 OSMANYA LETTER JA
+10484 OSMANYA LETTER XA
+10485 OSMANYA LETTER KHA
+10486 OSMANYA LETTER DEEL
+10487 OSMANYA LETTER RA
+10488 OSMANYA LETTER SA
+10489 OSMANYA LETTER SHIIN
+1048A OSMANYA LETTER DHA
+1048B OSMANYA LETTER CAYN
+1048C OSMANYA LETTER GA
+1048D OSMANYA LETTER FA
+1048E OSMANYA LETTER QAAF
+1048F OSMANYA LETTER KAAF
+10490 OSMANYA LETTER LAAN
+10491 OSMANYA LETTER MIIN
+10492 OSMANYA LETTER NUUN
+10493 OSMANYA LETTER WAW
+10494 OSMANYA LETTER HA
+10495 OSMANYA LETTER YA
+10496 OSMANYA LETTER A
+10497 OSMANYA LETTER E
+10498 OSMANYA LETTER I
+10499 OSMANYA LETTER O
+1049A OSMANYA LETTER U
+1049B OSMANYA LETTER AA
+1049C OSMANYA LETTER EE
+1049D OSMANYA LETTER OO
+104A0 OSMANYA DIGIT ZERO
+104A1 OSMANYA DIGIT ONE
+104A2 OSMANYA DIGIT TWO
+104A3 OSMANYA DIGIT THREE
+104A4 OSMANYA DIGIT FOUR
+104A5 OSMANYA DIGIT FIVE
+104A6 OSMANYA DIGIT SIX
+104A7 OSMANYA DIGIT SEVEN
+104A8 OSMANYA DIGIT EIGHT
+104A9 OSMANYA DIGIT NINE
+10800 CYPRIOT SYLLABLE A
+10801 CYPRIOT SYLLABLE E
+10802 CYPRIOT SYLLABLE I
+10803 CYPRIOT SYLLABLE O
+10804 CYPRIOT SYLLABLE U
+10805 CYPRIOT SYLLABLE JA
+10808 CYPRIOT SYLLABLE JO
+1080A CYPRIOT SYLLABLE KA
+1080B CYPRIOT SYLLABLE KE
+1080C CYPRIOT SYLLABLE KI
+1080D CYPRIOT SYLLABLE KO
+1080E CYPRIOT SYLLABLE KU
+1080F CYPRIOT SYLLABLE LA
+10810 CYPRIOT SYLLABLE LE
+10811 CYPRIOT SYLLABLE LI
+10812 CYPRIOT SYLLABLE LO
+10813 CYPRIOT SYLLABLE LU
+10814 CYPRIOT SYLLABLE MA
+10815 CYPRIOT SYLLABLE ME
+10816 CYPRIOT SYLLABLE MI
+10817 CYPRIOT SYLLABLE MO
+10818 CYPRIOT SYLLABLE MU
+10819 CYPRIOT SYLLABLE NA
+1081A CYPRIOT SYLLABLE NE
+1081B CYPRIOT SYLLABLE NI
+1081C CYPRIOT SYLLABLE NO
+1081D CYPRIOT SYLLABLE NU
+1081E CYPRIOT SYLLABLE PA
+1081F CYPRIOT SYLLABLE PE
+10820 CYPRIOT SYLLABLE PI
+10821 CYPRIOT SYLLABLE PO
+10822 CYPRIOT SYLLABLE PU
+10823 CYPRIOT SYLLABLE RA
+10824 CYPRIOT SYLLABLE RE
+10825 CYPRIOT SYLLABLE RI
+10826 CYPRIOT SYLLABLE RO
+10827 CYPRIOT SYLLABLE RU
+10828 CYPRIOT SYLLABLE SA
+10829 CYPRIOT SYLLABLE SE
+1082A CYPRIOT SYLLABLE SI
+1082B CYPRIOT SYLLABLE SO
+1082C CYPRIOT SYLLABLE SU
+1082D CYPRIOT SYLLABLE TA
+1082E CYPRIOT SYLLABLE TE
+1082F CYPRIOT SYLLABLE TI
+10830 CYPRIOT SYLLABLE TO
+10831 CYPRIOT SYLLABLE TU
+10832 CYPRIOT SYLLABLE WA
+10833 CYPRIOT SYLLABLE WE
+10834 CYPRIOT SYLLABLE WI
+10835 CYPRIOT SYLLABLE WO
+10837 CYPRIOT SYLLABLE XA
+10838 CYPRIOT SYLLABLE XE
+1083C CYPRIOT SYLLABLE ZA
+1083F CYPRIOT SYLLABLE ZO
+10A00 KHAROSHTHI LETTER A
+10A01 KHAROSHTHI VOWEL SIGN I
+10A02 KHAROSHTHI VOWEL SIGN U
+10A03 KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05 KHAROSHTHI VOWEL SIGN E
+10A06 KHAROSHTHI VOWEL SIGN O
+10A0C KHAROSHTHI VOWEL LENGTH MARK
+10A0D KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E KHAROSHTHI SIGN ANUSVARA
+10A0F KHAROSHTHI SIGN VISARGA
+10A10 KHAROSHTHI LETTER KA
+10A11 KHAROSHTHI LETTER KHA
+10A12 KHAROSHTHI LETTER GA
+10A13 KHAROSHTHI LETTER GHA
+10A15 KHAROSHTHI LETTER CA
+10A16 KHAROSHTHI LETTER CHA
+10A17 KHAROSHTHI LETTER JA
+10A19 KHAROSHTHI LETTER NYA
+10A1A KHAROSHTHI LETTER TTA
+10A1B KHAROSHTHI LETTER TTHA
+10A1C KHAROSHTHI LETTER DDA
+10A1D KHAROSHTHI LETTER DDHA
+10A1E KHAROSHTHI LETTER NNA
+10A1F KHAROSHTHI LETTER TA
+10A20 KHAROSHTHI LETTER THA
+10A21 KHAROSHTHI LETTER DA
+10A22 KHAROSHTHI LETTER DHA
+10A23 KHAROSHTHI LETTER NA
+10A24 KHAROSHTHI LETTER PA
+10A25 KHAROSHTHI LETTER PHA
+10A26 KHAROSHTHI LETTER BA
+10A27 KHAROSHTHI LETTER BHA
+10A28 KHAROSHTHI LETTER MA
+10A29 KHAROSHTHI LETTER YA
+10A2A KHAROSHTHI LETTER RA
+10A2B KHAROSHTHI LETTER LA
+10A2C KHAROSHTHI LETTER VA
+10A2D KHAROSHTHI LETTER SHA
+10A2E KHAROSHTHI LETTER SSA
+10A2F KHAROSHTHI LETTER SA
+10A30 KHAROSHTHI LETTER ZA
+10A31 KHAROSHTHI LETTER HA
+10A32 KHAROSHTHI LETTER KKA
+10A33 KHAROSHTHI LETTER TTTHA
+10A38 KHAROSHTHI SIGN BAR ABOVE
+10A39 KHAROSHTHI SIGN CAUDA
+10A3A KHAROSHTHI SIGN DOT BELOW
+10A3F KHAROSHTHI VIRAMA
+10A40 KHAROSHTHI DIGIT ONE
+10A41 KHAROSHTHI DIGIT TWO
+10A42 KHAROSHTHI DIGIT THREE
+10A43 KHAROSHTHI DIGIT FOUR
+10A44 KHAROSHTHI NUMBER TEN
+10A45 KHAROSHTHI NUMBER TWENTY
+10A46 KHAROSHTHI NUMBER ONE HUNDRED
+10A47 KHAROSHTHI NUMBER ONE THOUSAND
+10A50 KHAROSHTHI PUNCTUATION DOT
+10A51 KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52 KHAROSHTHI PUNCTUATION CIRCLE
+10A53 KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54 KHAROSHTHI PUNCTUATION MANGALAM
+10A55 KHAROSHTHI PUNCTUATION LOTUS
+10A56 KHAROSHTHI PUNCTUATION DANDA
+10A57 KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58 KHAROSHTHI PUNCTUATION LINES
+1D000 BYZANTINE MUSICAL SYMBOL PSILI
+1D001 BYZANTINE MUSICAL SYMBOL DASEIA
+1D002 BYZANTINE MUSICAL SYMBOL PERISPOMENI
+1D003 BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004 BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005 BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006 BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007 BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008 BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009 BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F BYZANTINE MUSICAL SYMBOL TELEIA
+1D010 BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011 BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012 BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013 BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014 BYZANTINE MUSICAL SYMBOL THITA
+1D015 BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016 BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017 BYZANTINE MUSICAL SYMBOL PSILON
+1D018 BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019 BYZANTINE MUSICAL SYMBOL VATHY
+1D01A BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020 BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021 BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022 BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023 BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024 BYZANTINE MUSICAL SYMBOL KLASMA
+1D025 BYZANTINE MUSICAL SYMBOL REVMA
+1D026 BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027 BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028 BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029 BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D BYZANTINE MUSICAL SYMBOL THEMA
+1D02E BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F BYZANTINE MUSICAL SYMBOL DYO
+1D030 BYZANTINE MUSICAL SYMBOL TRIA
+1D031 BYZANTINE MUSICAL SYMBOL TESSERA
+1D032 BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033 BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035 BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036 BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037 BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038 BYZANTINE MUSICAL SYMBOL PELASTON
+1D039 BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040 BYZANTINE MUSICAL SYMBOL NANA
+1D041 BYZANTINE MUSICAL SYMBOL PETASMA
+1D042 BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043 BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044 BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045 BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+1D046 BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047 BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048 BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049 BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050 BYZANTINE MUSICAL SYMBOL YPSILI
+1D051 BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052 BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053 BYZANTINE MUSICAL SYMBOL YPORROI
+1D054 BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055 BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056 BYZANTINE MUSICAL SYMBOL CHAMILI
+1D057 BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058 BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059 BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B BYZANTINE MUSICAL SYMBOL OMALON
+1D05C BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060 BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061 BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062 BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063 BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064 BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065 BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066 BYZANTINE MUSICAL SYMBOL SYRMA
+1D067 BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068 BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069 BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070 BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071 BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072 BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073 BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074 BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075 BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076 BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077 BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078 BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079 BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E BYZANTINE MUSICAL SYMBOL STAVROS
+1D07F BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080 BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081 BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082 BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083 BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084 BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085 BYZANTINE MUSICAL SYMBOL APLI
+1D086 BYZANTINE MUSICAL SYMBOL DIPLI
+1D087 BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088 BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089 BYZANTINE MUSICAL SYMBOL KORONIS
+1D08A BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+1D08F BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092 BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096 BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097 BYZANTINE MUSICAL SYMBOL ARGON
+1D098 BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099 BYZANTINE MUSICAL SYMBOL DIARGON
+1D09A BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0 BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1 BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+1D0A2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4 BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6 BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7 BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0 BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1 BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3 BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4 BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+1D0B5 BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6 BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7 BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8 BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5 BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+1D0C6 BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7 BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8 BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9 BYZANTINE MUSICAL SYMBOL CHROA KLITON
+1D0CA BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0 BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1 BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2 BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3 BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4 BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5 BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6 BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7 BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8 BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+1D0D9 BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+1D0E5 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6 BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7 BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8 BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9 BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+1D0F0 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1 BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3 BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4 BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5 BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100 MUSICAL SYMBOL SINGLE BARLINE
+1D101 MUSICAL SYMBOL DOUBLE BARLINE
+1D102 MUSICAL SYMBOL FINAL BARLINE
+1D103 MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104 MUSICAL SYMBOL DASHED BARLINE
+1D105 MUSICAL SYMBOL SHORT BARLINE
+1D106 MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107 MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108 MUSICAL SYMBOL REPEAT DOTS
+1D109 MUSICAL SYMBOL DAL SEGNO
+1D10A MUSICAL SYMBOL DA CAPO
+1D10B MUSICAL SYMBOL SEGNO
+1D10C MUSICAL SYMBOL CODA
+1D10D MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F MUSICAL SYMBOL REPEATED FIGURE-3
+1D110 MUSICAL SYMBOL FERMATA
+1D111 MUSICAL SYMBOL FERMATA BELOW
+1D112 MUSICAL SYMBOL BREATH MARK
+1D113 MUSICAL SYMBOL CAESURA
+1D114 MUSICAL SYMBOL BRACE
+1D115 MUSICAL SYMBOL BRACKET
+1D116 MUSICAL SYMBOL ONE-LINE STAFF
+1D117 MUSICAL SYMBOL TWO-LINE STAFF
+1D118 MUSICAL SYMBOL THREE-LINE STAFF
+1D119 MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B MUSICAL SYMBOL SIX-LINE STAFF
+1D11C MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D MUSICAL SYMBOL FOUR-STRING FRETBOARD
+1D11E MUSICAL SYMBOL G CLEF
+1D11F MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120 MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121 MUSICAL SYMBOL C CLEF
+1D122 MUSICAL SYMBOL F CLEF
+1D123 MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124 MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125 MUSICAL SYMBOL DRUM CLEF-1
+1D126 MUSICAL SYMBOL DRUM CLEF-2
+1D12A MUSICAL SYMBOL DOUBLE SHARP
+1D12B MUSICAL SYMBOL DOUBLE FLAT
+1D12C MUSICAL SYMBOL FLAT UP
+1D12D MUSICAL SYMBOL FLAT DOWN
+1D12E MUSICAL SYMBOL NATURAL UP
+1D12F MUSICAL SYMBOL NATURAL DOWN
+1D130 MUSICAL SYMBOL SHARP UP
+1D131 MUSICAL SYMBOL SHARP DOWN
+1D132 MUSICAL SYMBOL QUARTER TONE SHARP
+1D133 MUSICAL SYMBOL QUARTER TONE FLAT
+1D134 MUSICAL SYMBOL COMMON TIME
+1D135 MUSICAL SYMBOL CUT TIME
+1D136 MUSICAL SYMBOL OTTAVA ALTA
+1D137 MUSICAL SYMBOL OTTAVA BASSA
+1D138 MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139 MUSICAL SYMBOL QUINDICESIMA BASSA
+1D13A MUSICAL SYMBOL MULTI REST
+1D13B MUSICAL SYMBOL WHOLE REST
+1D13C MUSICAL SYMBOL HALF REST
+1D13D MUSICAL SYMBOL QUARTER REST
+1D13E MUSICAL SYMBOL EIGHTH REST
+1D13F MUSICAL SYMBOL SIXTEENTH REST
+1D140 MUSICAL SYMBOL THIRTY-SECOND REST
+1D141 MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+1D143 MUSICAL SYMBOL X NOTEHEAD
+1D144 MUSICAL SYMBOL PLUS NOTEHEAD
+1D145 MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146 MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147 MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152 MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153 MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156 MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157 MUSICAL SYMBOL VOID NOTEHEAD
+1D158 MUSICAL SYMBOL NOTEHEAD BLACK
+1D159 MUSICAL SYMBOL NULL NOTEHEAD
+1D15A MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+1D15C MUSICAL SYMBOL BREVE
+1D15D MUSICAL SYMBOL WHOLE NOTE
+1D15E MUSICAL SYMBOL HALF NOTE
+1D15F MUSICAL SYMBOL QUARTER NOTE
+1D160 MUSICAL SYMBOL EIGHTH NOTE
+1D161 MUSICAL SYMBOL SIXTEENTH NOTE
+1D162 MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163 MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165 MUSICAL SYMBOL COMBINING STEM
+1D166 MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167 MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168 MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169 MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D16E MUSICAL SYMBOL COMBINING FLAG-1
+1D16F MUSICAL SYMBOL COMBINING FLAG-2
+1D170 MUSICAL SYMBOL COMBINING FLAG-3
+1D171 MUSICAL SYMBOL COMBINING FLAG-4
+1D172 MUSICAL SYMBOL COMBINING FLAG-5
+1D173 MUSICAL SYMBOL BEGIN BEAM
+1D174 MUSICAL SYMBOL END BEAM
+1D175 MUSICAL SYMBOL BEGIN TIE
+1D176 MUSICAL SYMBOL END TIE
+1D177 MUSICAL SYMBOL BEGIN SLUR
+1D178 MUSICAL SYMBOL END SLUR
+1D179 MUSICAL SYMBOL BEGIN PHRASE
+1D17A MUSICAL SYMBOL END PHRASE
+1D17B MUSICAL SYMBOL COMBINING ACCENT
+1D17C MUSICAL SYMBOL COMBINING STACCATO
+1D17D MUSICAL SYMBOL COMBINING TENUTO
+1D17E MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F MUSICAL SYMBOL COMBINING MARCATO
+1D180 MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181 MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182 MUSICAL SYMBOL COMBINING LOURE
+1D183 MUSICAL SYMBOL ARPEGGIATO UP
+1D184 MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185 MUSICAL SYMBOL COMBINING DOIT
+1D186 MUSICAL SYMBOL COMBINING RIP
+1D187 MUSICAL SYMBOL COMBINING FLIP
+1D188 MUSICAL SYMBOL COMBINING SMEAR
+1D189 MUSICAL SYMBOL COMBINING BEND
+1D18A MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C MUSICAL SYMBOL RINFORZANDO
+1D18D MUSICAL SYMBOL SUBITO
+1D18E MUSICAL SYMBOL Z
+1D18F MUSICAL SYMBOL PIANO
+1D190 MUSICAL SYMBOL MEZZO
+1D191 MUSICAL SYMBOL FORTE
+1D192 MUSICAL SYMBOL CRESCENDO
+1D193 MUSICAL SYMBOL DECRESCENDO
+1D194 MUSICAL SYMBOL GRACE NOTE SLASH
+1D195 MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196 MUSICAL SYMBOL TR
+1D197 MUSICAL SYMBOL TURN
+1D198 MUSICAL SYMBOL INVERTED TURN
+1D199 MUSICAL SYMBOL TURN SLASH
+1D19A MUSICAL SYMBOL TURN UP
+1D19B MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0 MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1 MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2 MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3 MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4 MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5 MUSICAL SYMBOL ORNAMENT STROKE-11
+1D1A6 MUSICAL SYMBOL HAUPTSTIMME
+1D1A7 MUSICAL SYMBOL NEBENSTIMME
+1D1A8 MUSICAL SYMBOL END OF STIMME
+1D1A9 MUSICAL SYMBOL DEGREE SLASH
+1D1AA MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB MUSICAL SYMBOL COMBINING UP BOW
+1D1AC MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D1AE MUSICAL SYMBOL PEDAL MARK
+1D1AF MUSICAL SYMBOL PEDAL UP MARK
+1D1B0 MUSICAL SYMBOL HALF PEDAL MARK
+1D1B1 MUSICAL SYMBOL GLISSANDO UP
+1D1B2 MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3 MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4 MUSICAL SYMBOL DAMP
+1D1B5 MUSICAL SYMBOL DAMP ALL
+1D1B6 MUSICAL SYMBOL MAXIMA
+1D1B7 MUSICAL SYMBOL LONGA
+1D1B8 MUSICAL SYMBOL BREVIS
+1D1B9 MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB MUSICAL SYMBOL MINIMA
+1D1BC MUSICAL SYMBOL MINIMA BLACK
+1D1BD MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF MUSICAL SYMBOL FUSA WHITE
+1D1C0 MUSICAL SYMBOL FUSA BLACK
+1D1C1 MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2 MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3 MUSICAL SYMBOL BREVIS REST
+1D1C4 MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5 MUSICAL SYMBOL MINIMA REST
+1D1C6 MUSICAL SYMBOL SEMIMINIMA REST
+1D1C7 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+1D1CF MUSICAL SYMBOL CROIX
+1D1D0 MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1 MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2 MUSICAL SYMBOL SQUARE B
+1D1D3 MUSICAL SYMBOL VIRGA
+1D1D4 MUSICAL SYMBOL PODATUS
+1D1D5 MUSICAL SYMBOL CLIVIS
+1D1D6 MUSICAL SYMBOL SCANDICUS
+1D1D7 MUSICAL SYMBOL CLIMACUS
+1D1D8 MUSICAL SYMBOL TORCULUS
+1D1D9 MUSICAL SYMBOL PORRECTUS
+1D1DA MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD MUSICAL SYMBOL PES SUBPUNCTIS
+1D200 GREEK VOCAL NOTATION SYMBOL-1
+1D201 GREEK VOCAL NOTATION SYMBOL-2
+1D202 GREEK VOCAL NOTATION SYMBOL-3
+1D203 GREEK VOCAL NOTATION SYMBOL-4
+1D204 GREEK VOCAL NOTATION SYMBOL-5
+1D205 GREEK VOCAL NOTATION SYMBOL-6
+1D206 GREEK VOCAL NOTATION SYMBOL-7
+1D207 GREEK VOCAL NOTATION SYMBOL-8
+1D208 GREEK VOCAL NOTATION SYMBOL-9
+1D209 GREEK VOCAL NOTATION SYMBOL-10
+1D20A GREEK VOCAL NOTATION SYMBOL-11
+1D20B GREEK VOCAL NOTATION SYMBOL-12
+1D20C GREEK VOCAL NOTATION SYMBOL-13
+1D20D GREEK VOCAL NOTATION SYMBOL-14
+1D20E GREEK VOCAL NOTATION SYMBOL-15
+1D20F GREEK VOCAL NOTATION SYMBOL-16
+1D210 GREEK VOCAL NOTATION SYMBOL-17
+1D211 GREEK VOCAL NOTATION SYMBOL-18
+1D212 GREEK VOCAL NOTATION SYMBOL-19
+1D213 GREEK VOCAL NOTATION SYMBOL-20
+1D214 GREEK VOCAL NOTATION SYMBOL-21
+1D215 GREEK VOCAL NOTATION SYMBOL-22
+1D216 GREEK VOCAL NOTATION SYMBOL-23
+1D217 GREEK VOCAL NOTATION SYMBOL-24
+1D218 GREEK VOCAL NOTATION SYMBOL-50
+1D219 GREEK VOCAL NOTATION SYMBOL-51
+1D21A GREEK VOCAL NOTATION SYMBOL-52
+1D21B GREEK VOCAL NOTATION SYMBOL-53
+1D21C GREEK VOCAL NOTATION SYMBOL-54
+1D21D GREEK INSTRUMENTAL NOTATION SYMBOL-1
+1D21E GREEK INSTRUMENTAL NOTATION SYMBOL-2
+1D21F GREEK INSTRUMENTAL NOTATION SYMBOL-4
+1D220 GREEK INSTRUMENTAL NOTATION SYMBOL-5
+1D221 GREEK INSTRUMENTAL NOTATION SYMBOL-7
+1D222 GREEK INSTRUMENTAL NOTATION SYMBOL-8
+1D223 GREEK INSTRUMENTAL NOTATION SYMBOL-11
+1D224 GREEK INSTRUMENTAL NOTATION SYMBOL-12
+1D225 GREEK INSTRUMENTAL NOTATION SYMBOL-13
+1D226 GREEK INSTRUMENTAL NOTATION SYMBOL-14
+1D227 GREEK INSTRUMENTAL NOTATION SYMBOL-17
+1D228 GREEK INSTRUMENTAL NOTATION SYMBOL-18
+1D229 GREEK INSTRUMENTAL NOTATION SYMBOL-19
+1D22A GREEK INSTRUMENTAL NOTATION SYMBOL-23
+1D22B GREEK INSTRUMENTAL NOTATION SYMBOL-24
+1D22C GREEK INSTRUMENTAL NOTATION SYMBOL-25
+1D22D GREEK INSTRUMENTAL NOTATION SYMBOL-26
+1D22E GREEK INSTRUMENTAL NOTATION SYMBOL-27
+1D22F GREEK INSTRUMENTAL NOTATION SYMBOL-29
+1D230 GREEK INSTRUMENTAL NOTATION SYMBOL-30
+1D231 GREEK INSTRUMENTAL NOTATION SYMBOL-32
+1D232 GREEK INSTRUMENTAL NOTATION SYMBOL-36
+1D233 GREEK INSTRUMENTAL NOTATION SYMBOL-37
+1D234 GREEK INSTRUMENTAL NOTATION SYMBOL-38
+1D235 GREEK INSTRUMENTAL NOTATION SYMBOL-39
+1D236 GREEK INSTRUMENTAL NOTATION SYMBOL-40
+1D237 GREEK INSTRUMENTAL NOTATION SYMBOL-42
+1D238 GREEK INSTRUMENTAL NOTATION SYMBOL-43
+1D239 GREEK INSTRUMENTAL NOTATION SYMBOL-45
+1D23A GREEK INSTRUMENTAL NOTATION SYMBOL-47
+1D23B GREEK INSTRUMENTAL NOTATION SYMBOL-48
+1D23C GREEK INSTRUMENTAL NOTATION SYMBOL-49
+1D23D GREEK INSTRUMENTAL NOTATION SYMBOL-50
+1D23E GREEK INSTRUMENTAL NOTATION SYMBOL-51
+1D23F GREEK INSTRUMENTAL NOTATION SYMBOL-52
+1D240 GREEK INSTRUMENTAL NOTATION SYMBOL-53
+1D241 GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242 COMBINING GREEK MUSICAL TRISEME
+1D243 COMBINING GREEK MUSICAL TETRASEME
+1D244 COMBINING GREEK MUSICAL PENTASEME
+1D245 GREEK MUSICAL LEIMMA
+1D300 MONOGRAM FOR EARTH
+1D301 DIGRAM FOR HEAVENLY EARTH
+1D302 DIGRAM FOR HUMAN EARTH
+1D303 DIGRAM FOR EARTHLY HEAVEN
+1D304 DIGRAM FOR EARTHLY HUMAN
+1D305 DIGRAM FOR EARTH
+1D306 TETRAGRAM FOR CENTRE
+1D307 TETRAGRAM FOR FULL CIRCLE
+1D308 TETRAGRAM FOR MIRED
+1D309 TETRAGRAM FOR BARRIER
+1D30A TETRAGRAM FOR KEEPING SMALL
+1D30B TETRAGRAM FOR CONTRARIETY
+1D30C TETRAGRAM FOR ASCENT
+1D30D TETRAGRAM FOR OPPOSITION
+1D30E TETRAGRAM FOR BRANCHING OUT
+1D30F TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310 TETRAGRAM FOR DIVERGENCE
+1D311 TETRAGRAM FOR YOUTHFULNESS
+1D312 TETRAGRAM FOR INCREASE
+1D313 TETRAGRAM FOR PENETRATION
+1D314 TETRAGRAM FOR REACH
+1D315 TETRAGRAM FOR CONTACT
+1D316 TETRAGRAM FOR HOLDING BACK
+1D317 TETRAGRAM FOR WAITING
+1D318 TETRAGRAM FOR FOLLOWING
+1D319 TETRAGRAM FOR ADVANCE
+1D31A TETRAGRAM FOR RELEASE
+1D31B TETRAGRAM FOR RESISTANCE
+1D31C TETRAGRAM FOR EASE
+1D31D TETRAGRAM FOR JOY
+1D31E TETRAGRAM FOR CONTENTION
+1D31F TETRAGRAM FOR ENDEAVOUR
+1D320 TETRAGRAM FOR DUTIES
+1D321 TETRAGRAM FOR CHANGE
+1D322 TETRAGRAM FOR DECISIVENESS
+1D323 TETRAGRAM FOR BOLD RESOLUTION
+1D324 TETRAGRAM FOR PACKING
+1D325 TETRAGRAM FOR LEGION
+1D326 TETRAGRAM FOR CLOSENESS
+1D327 TETRAGRAM FOR KINSHIP
+1D328 TETRAGRAM FOR GATHERING
+1D329 TETRAGRAM FOR STRENGTH
+1D32A TETRAGRAM FOR PURITY
+1D32B TETRAGRAM FOR FULLNESS
+1D32C TETRAGRAM FOR RESIDENCE
+1D32D TETRAGRAM FOR LAW OR MODEL
+1D32E TETRAGRAM FOR RESPONSE
+1D32F TETRAGRAM FOR GOING TO MEET
+1D330 TETRAGRAM FOR ENCOUNTERS
+1D331 TETRAGRAM FOR STOVE
+1D332 TETRAGRAM FOR GREATNESS
+1D333 TETRAGRAM FOR ENLARGEMENT
+1D334 TETRAGRAM FOR PATTERN
+1D335 TETRAGRAM FOR RITUAL
+1D336 TETRAGRAM FOR FLIGHT
+1D337 TETRAGRAM FOR VASTNESS OR WASTING
+1D338 TETRAGRAM FOR CONSTANCY
+1D339 TETRAGRAM FOR MEASURE
+1D33A TETRAGRAM FOR ETERNITY
+1D33B TETRAGRAM FOR UNITY
+1D33C TETRAGRAM FOR DIMINISHMENT
+1D33D TETRAGRAM FOR CLOSED MOUTH
+1D33E TETRAGRAM FOR GUARDEDNESS
+1D33F TETRAGRAM FOR GATHERING IN
+1D340 TETRAGRAM FOR MASSING
+1D341 TETRAGRAM FOR ACCUMULATION
+1D342 TETRAGRAM FOR EMBELLISHMENT
+1D343 TETRAGRAM FOR DOUBT
+1D344 TETRAGRAM FOR WATCH
+1D345 TETRAGRAM FOR SINKING
+1D346 TETRAGRAM FOR INNER
+1D347 TETRAGRAM FOR DEPARTURE
+1D348 TETRAGRAM FOR DARKENING
+1D349 TETRAGRAM FOR DIMMING
+1D34A TETRAGRAM FOR EXHAUSTION
+1D34B TETRAGRAM FOR SEVERANCE
+1D34C TETRAGRAM FOR STOPPAGE
+1D34D TETRAGRAM FOR HARDNESS
+1D34E TETRAGRAM FOR COMPLETION
+1D34F TETRAGRAM FOR CLOSURE
+1D350 TETRAGRAM FOR FAILURE
+1D351 TETRAGRAM FOR AGGRAVATION
+1D352 TETRAGRAM FOR COMPLIANCE
+1D353 TETRAGRAM FOR ON THE VERGE
+1D354 TETRAGRAM FOR DIFFICULTIES
+1D355 TETRAGRAM FOR LABOURING
+1D356 TETRAGRAM FOR FOSTERING
+1D400 MATHEMATICAL BOLD CAPITAL A
+1D401 MATHEMATICAL BOLD CAPITAL B
+1D402 MATHEMATICAL BOLD CAPITAL C
+1D403 MATHEMATICAL BOLD CAPITAL D
+1D404 MATHEMATICAL BOLD CAPITAL E
+1D405 MATHEMATICAL BOLD CAPITAL F
+1D406 MATHEMATICAL BOLD CAPITAL G
+1D407 MATHEMATICAL BOLD CAPITAL H
+1D408 MATHEMATICAL BOLD CAPITAL I
+1D409 MATHEMATICAL BOLD CAPITAL J
+1D40A MATHEMATICAL BOLD CAPITAL K
+1D40B MATHEMATICAL BOLD CAPITAL L
+1D40C MATHEMATICAL BOLD CAPITAL M
+1D40D MATHEMATICAL BOLD CAPITAL N
+1D40E MATHEMATICAL BOLD CAPITAL O
+1D40F MATHEMATICAL BOLD CAPITAL P
+1D410 MATHEMATICAL BOLD CAPITAL Q
+1D411 MATHEMATICAL BOLD CAPITAL R
+1D412 MATHEMATICAL BOLD CAPITAL S
+1D413 MATHEMATICAL BOLD CAPITAL T
+1D414 MATHEMATICAL BOLD CAPITAL U
+1D415 MATHEMATICAL BOLD CAPITAL V
+1D416 MATHEMATICAL BOLD CAPITAL W
+1D417 MATHEMATICAL BOLD CAPITAL X
+1D418 MATHEMATICAL BOLD CAPITAL Y
+1D419 MATHEMATICAL BOLD CAPITAL Z
+1D41A MATHEMATICAL BOLD SMALL A
+1D41B MATHEMATICAL BOLD SMALL B
+1D41C MATHEMATICAL BOLD SMALL C
+1D41D MATHEMATICAL BOLD SMALL D
+1D41E MATHEMATICAL BOLD SMALL E
+1D41F MATHEMATICAL BOLD SMALL F
+1D420 MATHEMATICAL BOLD SMALL G
+1D421 MATHEMATICAL BOLD SMALL H
+1D422 MATHEMATICAL BOLD SMALL I
+1D423 MATHEMATICAL BOLD SMALL J
+1D424 MATHEMATICAL BOLD SMALL K
+1D425 MATHEMATICAL BOLD SMALL L
+1D426 MATHEMATICAL BOLD SMALL M
+1D427 MATHEMATICAL BOLD SMALL N
+1D428 MATHEMATICAL BOLD SMALL O
+1D429 MATHEMATICAL BOLD SMALL P
+1D42A MATHEMATICAL BOLD SMALL Q
+1D42B MATHEMATICAL BOLD SMALL R
+1D42C MATHEMATICAL BOLD SMALL S
+1D42D MATHEMATICAL BOLD SMALL T
+1D42E MATHEMATICAL BOLD SMALL U
+1D42F MATHEMATICAL BOLD SMALL V
+1D430 MATHEMATICAL BOLD SMALL W
+1D431 MATHEMATICAL BOLD SMALL X
+1D432 MATHEMATICAL BOLD SMALL Y
+1D433 MATHEMATICAL BOLD SMALL Z
+1D434 MATHEMATICAL ITALIC CAPITAL A
+1D435 MATHEMATICAL ITALIC CAPITAL B
+1D436 MATHEMATICAL ITALIC CAPITAL C
+1D437 MATHEMATICAL ITALIC CAPITAL D
+1D438 MATHEMATICAL ITALIC CAPITAL E
+1D439 MATHEMATICAL ITALIC CAPITAL F
+1D43A MATHEMATICAL ITALIC CAPITAL G
+1D43B MATHEMATICAL ITALIC CAPITAL H
+1D43C MATHEMATICAL ITALIC CAPITAL I
+1D43D MATHEMATICAL ITALIC CAPITAL J
+1D43E MATHEMATICAL ITALIC CAPITAL K
+1D43F MATHEMATICAL ITALIC CAPITAL L
+1D440 MATHEMATICAL ITALIC CAPITAL M
+1D441 MATHEMATICAL ITALIC CAPITAL N
+1D442 MATHEMATICAL ITALIC CAPITAL O
+1D443 MATHEMATICAL ITALIC CAPITAL P
+1D444 MATHEMATICAL ITALIC CAPITAL Q
+1D445 MATHEMATICAL ITALIC CAPITAL R
+1D446 MATHEMATICAL ITALIC CAPITAL S
+1D447 MATHEMATICAL ITALIC CAPITAL T
+1D448 MATHEMATICAL ITALIC CAPITAL U
+1D449 MATHEMATICAL ITALIC CAPITAL V
+1D44A MATHEMATICAL ITALIC CAPITAL W
+1D44B MATHEMATICAL ITALIC CAPITAL X
+1D44C MATHEMATICAL ITALIC CAPITAL Y
+1D44D MATHEMATICAL ITALIC CAPITAL Z
+1D44E MATHEMATICAL ITALIC SMALL A
+1D44F MATHEMATICAL ITALIC SMALL B
+1D450 MATHEMATICAL ITALIC SMALL C
+1D451 MATHEMATICAL ITALIC SMALL D
+1D452 MATHEMATICAL ITALIC SMALL E
+1D453 MATHEMATICAL ITALIC SMALL F
+1D454 MATHEMATICAL ITALIC SMALL G
+1D456 MATHEMATICAL ITALIC SMALL I
+1D457 MATHEMATICAL ITALIC SMALL J
+1D458 MATHEMATICAL ITALIC SMALL K
+1D459 MATHEMATICAL ITALIC SMALL L
+1D45A MATHEMATICAL ITALIC SMALL M
+1D45B MATHEMATICAL ITALIC SMALL N
+1D45C MATHEMATICAL ITALIC SMALL O
+1D45D MATHEMATICAL ITALIC SMALL P
+1D45E MATHEMATICAL ITALIC SMALL Q
+1D45F MATHEMATICAL ITALIC SMALL R
+1D460 MATHEMATICAL ITALIC SMALL S
+1D461 MATHEMATICAL ITALIC SMALL T
+1D462 MATHEMATICAL ITALIC SMALL U
+1D463 MATHEMATICAL ITALIC SMALL V
+1D464 MATHEMATICAL ITALIC SMALL W
+1D465 MATHEMATICAL ITALIC SMALL X
+1D466 MATHEMATICAL ITALIC SMALL Y
+1D467 MATHEMATICAL ITALIC SMALL Z
+1D468 MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469 MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470 MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471 MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472 MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473 MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474 MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475 MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476 MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477 MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478 MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479 MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480 MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481 MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482 MATHEMATICAL BOLD ITALIC SMALL A
+1D483 MATHEMATICAL BOLD ITALIC SMALL B
+1D484 MATHEMATICAL BOLD ITALIC SMALL C
+1D485 MATHEMATICAL BOLD ITALIC SMALL D
+1D486 MATHEMATICAL BOLD ITALIC SMALL E
+1D487 MATHEMATICAL BOLD ITALIC SMALL F
+1D488 MATHEMATICAL BOLD ITALIC SMALL G
+1D489 MATHEMATICAL BOLD ITALIC SMALL H
+1D48A MATHEMATICAL BOLD ITALIC SMALL I
+1D48B MATHEMATICAL BOLD ITALIC SMALL J
+1D48C MATHEMATICAL BOLD ITALIC SMALL K
+1D48D MATHEMATICAL BOLD ITALIC SMALL L
+1D48E MATHEMATICAL BOLD ITALIC SMALL M
+1D48F MATHEMATICAL BOLD ITALIC SMALL N
+1D490 MATHEMATICAL BOLD ITALIC SMALL O
+1D491 MATHEMATICAL BOLD ITALIC SMALL P
+1D492 MATHEMATICAL BOLD ITALIC SMALL Q
+1D493 MATHEMATICAL BOLD ITALIC SMALL R
+1D494 MATHEMATICAL BOLD ITALIC SMALL S
+1D495 MATHEMATICAL BOLD ITALIC SMALL T
+1D496 MATHEMATICAL BOLD ITALIC SMALL U
+1D497 MATHEMATICAL BOLD ITALIC SMALL V
+1D498 MATHEMATICAL BOLD ITALIC SMALL W
+1D499 MATHEMATICAL BOLD ITALIC SMALL X
+1D49A MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C MATHEMATICAL SCRIPT CAPITAL A
+1D49E MATHEMATICAL SCRIPT CAPITAL C
+1D49F MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 MATHEMATICAL SCRIPT CAPITAL G
+1D4A5 MATHEMATICAL SCRIPT CAPITAL J
+1D4A6 MATHEMATICAL SCRIPT CAPITAL K
+1D4A9 MATHEMATICAL SCRIPT CAPITAL N
+1D4AA MATHEMATICAL SCRIPT CAPITAL O
+1D4AB MATHEMATICAL SCRIPT CAPITAL P
+1D4AC MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE MATHEMATICAL SCRIPT CAPITAL S
+1D4AF MATHEMATICAL SCRIPT CAPITAL T
+1D4B0 MATHEMATICAL SCRIPT CAPITAL U
+1D4B1 MATHEMATICAL SCRIPT CAPITAL V
+1D4B2 MATHEMATICAL SCRIPT CAPITAL W
+1D4B3 MATHEMATICAL SCRIPT CAPITAL X
+1D4B4 MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5 MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6 MATHEMATICAL SCRIPT SMALL A
+1D4B7 MATHEMATICAL SCRIPT SMALL B
+1D4B8 MATHEMATICAL SCRIPT SMALL C
+1D4B9 MATHEMATICAL SCRIPT SMALL D
+1D4BB MATHEMATICAL SCRIPT SMALL F
+1D4BD MATHEMATICAL SCRIPT SMALL H
+1D4BE MATHEMATICAL SCRIPT SMALL I
+1D4BF MATHEMATICAL SCRIPT SMALL J
+1D4C0 MATHEMATICAL SCRIPT SMALL K
+1D4C1 MATHEMATICAL SCRIPT SMALL L
+1D4C2 MATHEMATICAL SCRIPT SMALL M
+1D4C3 MATHEMATICAL SCRIPT SMALL N
+1D4C5 MATHEMATICAL SCRIPT SMALL P
+1D4C6 MATHEMATICAL SCRIPT SMALL Q
+1D4C7 MATHEMATICAL SCRIPT SMALL R
+1D4C8 MATHEMATICAL SCRIPT SMALL S
+1D4C9 MATHEMATICAL SCRIPT SMALL T
+1D4CA MATHEMATICAL SCRIPT SMALL U
+1D4CB MATHEMATICAL SCRIPT SMALL V
+1D4CC MATHEMATICAL SCRIPT SMALL W
+1D4CD MATHEMATICAL SCRIPT SMALL X
+1D4CE MATHEMATICAL SCRIPT SMALL Y
+1D4CF MATHEMATICAL SCRIPT SMALL Z
+1D4D0 MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1 MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2 MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3 MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4 MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5 MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6 MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7 MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8 MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9 MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0 MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1 MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2 MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3 MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4 MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5 MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6 MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7 MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8 MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9 MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0 MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1 MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2 MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3 MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4 MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5 MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6 MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7 MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8 MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9 MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF MATHEMATICAL BOLD SCRIPT SMALL V
+1D500 MATHEMATICAL BOLD SCRIPT SMALL W
+1D501 MATHEMATICAL BOLD SCRIPT SMALL X
+1D502 MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503 MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504 MATHEMATICAL FRAKTUR CAPITAL A
+1D505 MATHEMATICAL FRAKTUR CAPITAL B
+1D507 MATHEMATICAL FRAKTUR CAPITAL D
+1D508 MATHEMATICAL FRAKTUR CAPITAL E
+1D509 MATHEMATICAL FRAKTUR CAPITAL F
+1D50A MATHEMATICAL FRAKTUR CAPITAL G
+1D50D MATHEMATICAL FRAKTUR CAPITAL J
+1D50E MATHEMATICAL FRAKTUR CAPITAL K
+1D50F MATHEMATICAL FRAKTUR CAPITAL L
+1D510 MATHEMATICAL FRAKTUR CAPITAL M
+1D511 MATHEMATICAL FRAKTUR CAPITAL N
+1D512 MATHEMATICAL FRAKTUR CAPITAL O
+1D513 MATHEMATICAL FRAKTUR CAPITAL P
+1D514 MATHEMATICAL FRAKTUR CAPITAL Q
+1D516 MATHEMATICAL FRAKTUR CAPITAL S
+1D517 MATHEMATICAL FRAKTUR CAPITAL T
+1D518 MATHEMATICAL FRAKTUR CAPITAL U
+1D519 MATHEMATICAL FRAKTUR CAPITAL V
+1D51A MATHEMATICAL FRAKTUR CAPITAL W
+1D51B MATHEMATICAL FRAKTUR CAPITAL X
+1D51C MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E MATHEMATICAL FRAKTUR SMALL A
+1D51F MATHEMATICAL FRAKTUR SMALL B
+1D520 MATHEMATICAL FRAKTUR SMALL C
+1D521 MATHEMATICAL FRAKTUR SMALL D
+1D522 MATHEMATICAL FRAKTUR SMALL E
+1D523 MATHEMATICAL FRAKTUR SMALL F
+1D524 MATHEMATICAL FRAKTUR SMALL G
+1D525 MATHEMATICAL FRAKTUR SMALL H
+1D526 MATHEMATICAL FRAKTUR SMALL I
+1D527 MATHEMATICAL FRAKTUR SMALL J
+1D528 MATHEMATICAL FRAKTUR SMALL K
+1D529 MATHEMATICAL FRAKTUR SMALL L
+1D52A MATHEMATICAL FRAKTUR SMALL M
+1D52B MATHEMATICAL FRAKTUR SMALL N
+1D52C MATHEMATICAL FRAKTUR SMALL O
+1D52D MATHEMATICAL FRAKTUR SMALL P
+1D52E MATHEMATICAL FRAKTUR SMALL Q
+1D52F MATHEMATICAL FRAKTUR SMALL R
+1D530 MATHEMATICAL FRAKTUR SMALL S
+1D531 MATHEMATICAL FRAKTUR SMALL T
+1D532 MATHEMATICAL FRAKTUR SMALL U
+1D533 MATHEMATICAL FRAKTUR SMALL V
+1D534 MATHEMATICAL FRAKTUR SMALL W
+1D535 MATHEMATICAL FRAKTUR SMALL X
+1D536 MATHEMATICAL FRAKTUR SMALL Y
+1D537 MATHEMATICAL FRAKTUR SMALL Z
+1D538 MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539 MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540 MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541 MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542 MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543 MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544 MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550 MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552 MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553 MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554 MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555 MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556 MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557 MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558 MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559 MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560 MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561 MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562 MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563 MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564 MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565 MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566 MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567 MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568 MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569 MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570 MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571 MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572 MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573 MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574 MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575 MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576 MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577 MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578 MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579 MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580 MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581 MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582 MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583 MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584 MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585 MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586 MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587 MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588 MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589 MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590 MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591 MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592 MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593 MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594 MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595 MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596 MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597 MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598 MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599 MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0 MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1 MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2 MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3 MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4 MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5 MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6 MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7 MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8 MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9 MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0 MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1 MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2 MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3 MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4 MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5 MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6 MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7 MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8 MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9 MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA MATHEMATICAL SANS-SERIF SMALL A
+1D5BB MATHEMATICAL SANS-SERIF SMALL B
+1D5BC MATHEMATICAL SANS-SERIF SMALL C
+1D5BD MATHEMATICAL SANS-SERIF SMALL D
+1D5BE MATHEMATICAL SANS-SERIF SMALL E
+1D5BF MATHEMATICAL SANS-SERIF SMALL F
+1D5C0 MATHEMATICAL SANS-SERIF SMALL G
+1D5C1 MATHEMATICAL SANS-SERIF SMALL H
+1D5C2 MATHEMATICAL SANS-SERIF SMALL I
+1D5C3 MATHEMATICAL SANS-SERIF SMALL J
+1D5C4 MATHEMATICAL SANS-SERIF SMALL K
+1D5C5 MATHEMATICAL SANS-SERIF SMALL L
+1D5C6 MATHEMATICAL SANS-SERIF SMALL M
+1D5C7 MATHEMATICAL SANS-SERIF SMALL N
+1D5C8 MATHEMATICAL SANS-SERIF SMALL O
+1D5C9 MATHEMATICAL SANS-SERIF SMALL P
+1D5CA MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB MATHEMATICAL SANS-SERIF SMALL R
+1D5CC MATHEMATICAL SANS-SERIF SMALL S
+1D5CD MATHEMATICAL SANS-SERIF SMALL T
+1D5CE MATHEMATICAL SANS-SERIF SMALL U
+1D5CF MATHEMATICAL SANS-SERIF SMALL V
+1D5D0 MATHEMATICAL SANS-SERIF SMALL W
+1D5D1 MATHEMATICAL SANS-SERIF SMALL X
+1D5D2 MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3 MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4 MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5 MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6 MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7 MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8 MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9 MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0 MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1 MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2 MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3 MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4 MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5 MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6 MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7 MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8 MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9 MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0 MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1 MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2 MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3 MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4 MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5 MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6 MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7 MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8 MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9 MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600 MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601 MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602 MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603 MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604 MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605 MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606 MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607 MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608 MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609 MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610 MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611 MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612 MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613 MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614 MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615 MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616 MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617 MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619 MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622 MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623 MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624 MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625 MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626 MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627 MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628 MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629 MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630 MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631 MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632 MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633 MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634 MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635 MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636 MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637 MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638 MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639 MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670 MATHEMATICAL MONOSPACE CAPITAL A
+1D671 MATHEMATICAL MONOSPACE CAPITAL B
+1D672 MATHEMATICAL MONOSPACE CAPITAL C
+1D673 MATHEMATICAL MONOSPACE CAPITAL D
+1D674 MATHEMATICAL MONOSPACE CAPITAL E
+1D675 MATHEMATICAL MONOSPACE CAPITAL F
+1D676 MATHEMATICAL MONOSPACE CAPITAL G
+1D677 MATHEMATICAL MONOSPACE CAPITAL H
+1D678 MATHEMATICAL MONOSPACE CAPITAL I
+1D679 MATHEMATICAL MONOSPACE CAPITAL J
+1D67A MATHEMATICAL MONOSPACE CAPITAL K
+1D67B MATHEMATICAL MONOSPACE CAPITAL L
+1D67C MATHEMATICAL MONOSPACE CAPITAL M
+1D67D MATHEMATICAL MONOSPACE CAPITAL N
+1D67E MATHEMATICAL MONOSPACE CAPITAL O
+1D67F MATHEMATICAL MONOSPACE CAPITAL P
+1D680 MATHEMATICAL MONOSPACE CAPITAL Q
+1D681 MATHEMATICAL MONOSPACE CAPITAL R
+1D682 MATHEMATICAL MONOSPACE CAPITAL S
+1D683 MATHEMATICAL MONOSPACE CAPITAL T
+1D684 MATHEMATICAL MONOSPACE CAPITAL U
+1D685 MATHEMATICAL MONOSPACE CAPITAL V
+1D686 MATHEMATICAL MONOSPACE CAPITAL W
+1D687 MATHEMATICAL MONOSPACE CAPITAL X
+1D688 MATHEMATICAL MONOSPACE CAPITAL Y
+1D689 MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A MATHEMATICAL MONOSPACE SMALL A
+1D68B MATHEMATICAL MONOSPACE SMALL B
+1D68C MATHEMATICAL MONOSPACE SMALL C
+1D68D MATHEMATICAL MONOSPACE SMALL D
+1D68E MATHEMATICAL MONOSPACE SMALL E
+1D68F MATHEMATICAL MONOSPACE SMALL F
+1D690 MATHEMATICAL MONOSPACE SMALL G
+1D691 MATHEMATICAL MONOSPACE SMALL H
+1D692 MATHEMATICAL MONOSPACE SMALL I
+1D693 MATHEMATICAL MONOSPACE SMALL J
+1D694 MATHEMATICAL MONOSPACE SMALL K
+1D695 MATHEMATICAL MONOSPACE SMALL L
+1D696 MATHEMATICAL MONOSPACE SMALL M
+1D697 MATHEMATICAL MONOSPACE SMALL N
+1D698 MATHEMATICAL MONOSPACE SMALL O
+1D699 MATHEMATICAL MONOSPACE SMALL P
+1D69A MATHEMATICAL MONOSPACE SMALL Q
+1D69B MATHEMATICAL MONOSPACE SMALL R
+1D69C MATHEMATICAL MONOSPACE SMALL S
+1D69D MATHEMATICAL MONOSPACE SMALL T
+1D69E MATHEMATICAL MONOSPACE SMALL U
+1D69F MATHEMATICAL MONOSPACE SMALL V
+1D6A0 MATHEMATICAL MONOSPACE SMALL W
+1D6A1 MATHEMATICAL MONOSPACE SMALL X
+1D6A2 MATHEMATICAL MONOSPACE SMALL Y
+1D6A3 MATHEMATICAL MONOSPACE SMALL Z
+1D6A4 MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5 MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8 MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9 MATHEMATICAL BOLD CAPITAL BETA
+1D6AA MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE MATHEMATICAL BOLD CAPITAL ETA
+1D6AF MATHEMATICAL BOLD CAPITAL THETA
+1D6B0 MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1 MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2 MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3 MATHEMATICAL BOLD CAPITAL MU
+1D6B4 MATHEMATICAL BOLD CAPITAL NU
+1D6B5 MATHEMATICAL BOLD CAPITAL XI
+1D6B6 MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7 MATHEMATICAL BOLD CAPITAL PI
+1D6B8 MATHEMATICAL BOLD CAPITAL RHO
+1D6B9 MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB MATHEMATICAL BOLD CAPITAL TAU
+1D6BC MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD MATHEMATICAL BOLD CAPITAL PHI
+1D6BE MATHEMATICAL BOLD CAPITAL CHI
+1D6BF MATHEMATICAL BOLD CAPITAL PSI
+1D6C0 MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 MATHEMATICAL BOLD NABLA
+1D6C2 MATHEMATICAL BOLD SMALL ALPHA
+1D6C3 MATHEMATICAL BOLD SMALL BETA
+1D6C4 MATHEMATICAL BOLD SMALL GAMMA
+1D6C5 MATHEMATICAL BOLD SMALL DELTA
+1D6C6 MATHEMATICAL BOLD SMALL EPSILON
+1D6C7 MATHEMATICAL BOLD SMALL ZETA
+1D6C8 MATHEMATICAL BOLD SMALL ETA
+1D6C9 MATHEMATICAL BOLD SMALL THETA
+1D6CA MATHEMATICAL BOLD SMALL IOTA
+1D6CB MATHEMATICAL BOLD SMALL KAPPA
+1D6CC MATHEMATICAL BOLD SMALL LAMDA
+1D6CD MATHEMATICAL BOLD SMALL MU
+1D6CE MATHEMATICAL BOLD SMALL NU
+1D6CF MATHEMATICAL BOLD SMALL XI
+1D6D0 MATHEMATICAL BOLD SMALL OMICRON
+1D6D1 MATHEMATICAL BOLD SMALL PI
+1D6D2 MATHEMATICAL BOLD SMALL RHO
+1D6D3 MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6D4 MATHEMATICAL BOLD SMALL SIGMA
+1D6D5 MATHEMATICAL BOLD SMALL TAU
+1D6D6 MATHEMATICAL BOLD SMALL UPSILON
+1D6D7 MATHEMATICAL BOLD SMALL PHI
+1D6D8 MATHEMATICAL BOLD SMALL CHI
+1D6D9 MATHEMATICAL BOLD SMALL PSI
+1D6DA MATHEMATICAL BOLD SMALL OMEGA
+1D6DB MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD MATHEMATICAL BOLD THETA SYMBOL
+1D6DE MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF MATHEMATICAL BOLD PHI SYMBOL
+1D6E0 MATHEMATICAL BOLD RHO SYMBOL
+1D6E1 MATHEMATICAL BOLD PI SYMBOL
+1D6E2 MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3 MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4 MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5 MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6 MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7 MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8 MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9 MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED MATHEMATICAL ITALIC CAPITAL MU
+1D6EE MATHEMATICAL ITALIC CAPITAL NU
+1D6EF MATHEMATICAL ITALIC CAPITAL XI
+1D6F0 MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1 MATHEMATICAL ITALIC CAPITAL PI
+1D6F2 MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3 MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4 MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5 MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6 MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7 MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8 MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9 MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB MATHEMATICAL ITALIC NABLA
+1D6FC MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD MATHEMATICAL ITALIC SMALL BETA
+1D6FE MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF MATHEMATICAL ITALIC SMALL DELTA
+1D700 MATHEMATICAL ITALIC SMALL EPSILON
+1D701 MATHEMATICAL ITALIC SMALL ZETA
+1D702 MATHEMATICAL ITALIC SMALL ETA
+1D703 MATHEMATICAL ITALIC SMALL THETA
+1D704 MATHEMATICAL ITALIC SMALL IOTA
+1D705 MATHEMATICAL ITALIC SMALL KAPPA
+1D706 MATHEMATICAL ITALIC SMALL LAMDA
+1D707 MATHEMATICAL ITALIC SMALL MU
+1D708 MATHEMATICAL ITALIC SMALL NU
+1D709 MATHEMATICAL ITALIC SMALL XI
+1D70A MATHEMATICAL ITALIC SMALL OMICRON
+1D70B MATHEMATICAL ITALIC SMALL PI
+1D70C MATHEMATICAL ITALIC SMALL RHO
+1D70D MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D70E MATHEMATICAL ITALIC SMALL SIGMA
+1D70F MATHEMATICAL ITALIC SMALL TAU
+1D710 MATHEMATICAL ITALIC SMALL UPSILON
+1D711 MATHEMATICAL ITALIC SMALL PHI
+1D712 MATHEMATICAL ITALIC SMALL CHI
+1D713 MATHEMATICAL ITALIC SMALL PSI
+1D714 MATHEMATICAL ITALIC SMALL OMEGA
+1D715 MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716 MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717 MATHEMATICAL ITALIC THETA SYMBOL
+1D718 MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719 MATHEMATICAL ITALIC PHI SYMBOL
+1D71A MATHEMATICAL ITALIC RHO SYMBOL
+1D71B MATHEMATICAL ITALIC PI SYMBOL
+1D71C MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720 MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721 MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722 MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723 MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724 MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725 MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726 MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727 MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728 MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729 MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730 MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731 MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732 MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733 MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734 MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 MATHEMATICAL BOLD ITALIC NABLA
+1D736 MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737 MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738 MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739 MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740 MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741 MATHEMATICAL BOLD ITALIC SMALL MU
+1D742 MATHEMATICAL BOLD ITALIC SMALL NU
+1D743 MATHEMATICAL BOLD ITALIC SMALL XI
+1D744 MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745 MATHEMATICAL BOLD ITALIC SMALL PI
+1D746 MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747 MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D748 MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749 MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750 MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751 MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752 MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753 MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754 MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755 MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756 MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757 MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758 MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759 MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760 MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761 MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762 MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763 MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764 MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765 MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766 MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767 MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768 MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769 MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770 MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771 MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772 MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773 MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774 MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775 MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776 MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777 MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778 MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779 MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780 MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781 MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D782 MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783 MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784 MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785 MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786 MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787 MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788 MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7BC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4 MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5 MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6 MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7 MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8 MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9 MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE MATHEMATICAL BOLD DIGIT ZERO
+1D7CF MATHEMATICAL BOLD DIGIT ONE
+1D7D0 MATHEMATICAL BOLD DIGIT TWO
+1D7D1 MATHEMATICAL BOLD DIGIT THREE
+1D7D2 MATHEMATICAL BOLD DIGIT FOUR
+1D7D3 MATHEMATICAL BOLD DIGIT FIVE
+1D7D4 MATHEMATICAL BOLD DIGIT SIX
+1D7D5 MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6 MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7 MATHEMATICAL BOLD DIGIT NINE
+1D7D8 MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9 MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0 MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1 MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2 MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3 MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4 MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6 MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7 MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8 MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9 MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0 MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1 MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2 MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3 MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4 MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5 MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6 MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7 MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8 MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF MATHEMATICAL MONOSPACE DIGIT NINE
+20000 2A6D6 CJK Ideograph Extension B
+2F800 CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801 CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802 CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803 CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804 CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805 CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806 CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807 CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808 CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809 CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810 CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811 CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812 CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813 CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814 CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815 CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816 CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817 CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818 CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819 CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820 CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821 CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822 CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823 CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824 CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825 CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826 CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827 CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828 CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829 CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830 CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831 CJK COMPATIBILITY IDEOGRAPH-2F831
+2F832 CJK COMPATIBILITY IDEOGRAPH-2F832
+2F833 CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834 CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835 CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836 CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837 CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838 CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839 CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840 CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841 CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842 CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843 CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844 CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845 CJK COMPATIBILITY IDEOGRAPH-2F845
+2F846 CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847 CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848 CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849 CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850 CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851 CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852 CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853 CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854 CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855 CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856 CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857 CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858 CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859 CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860 CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861 CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862 CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863 CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864 CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865 CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866 CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867 CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868 CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869 CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A CJK COMPATIBILITY IDEOGRAPH-2F86A
+2F86B CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870 CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871 CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872 CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873 CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874 CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875 CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876 CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877 CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878 CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879 CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880 CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881 CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882 CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883 CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884 CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885 CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886 CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887 CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888 CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889 CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890 CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891 CJK COMPATIBILITY IDEOGRAPH-2F891
+2F892 CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893 CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894 CJK COMPATIBILITY IDEOGRAPH-2F894
+2F895 CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896 CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897 CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898 CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899 CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0 CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1 CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2 CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3 CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4 CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5 CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6 CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7 CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8 CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9 CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0 CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1 CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2 CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3 CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4 CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5 CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6 CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7 CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8 CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9 CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0 CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1 CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2 CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3 CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4 CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5 CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6 CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7 CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8 CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9 CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0 CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1 CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2 CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3 CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4 CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5 CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6 CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7 CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8 CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9 CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0 CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1 CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2 CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3 CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4 CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5 CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6 CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7 CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8 CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9 CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0 CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1 CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2 CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3 CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4 CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5 CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6 CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7 CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8 CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9 CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900 CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901 CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902 CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903 CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904 CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905 CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906 CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907 CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908 CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909 CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910 CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911 CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912 CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913 CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914 CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915 CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916 CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917 CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918 CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919 CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920 CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921 CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922 CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923 CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924 CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925 CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926 CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927 CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928 CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929 CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C CJK COMPATIBILITY IDEOGRAPH-2F92C
+2F92D CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930 CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931 CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932 CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933 CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934 CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935 CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936 CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937 CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938 CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939 CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940 CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941 CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942 CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943 CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944 CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945 CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946 CJK COMPATIBILITY IDEOGRAPH-2F946
+2F947 CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948 CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949 CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950 CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951 CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952 CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953 CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954 CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955 CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956 CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957 CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958 CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959 CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D CJK COMPATIBILITY IDEOGRAPH-2F95D
+2F95E CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960 CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961 CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962 CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963 CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964 CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965 CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966 CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967 CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968 CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969 CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970 CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971 CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972 CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973 CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974 CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975 CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976 CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977 CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978 CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979 CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980 CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981 CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982 CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983 CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984 CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985 CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986 CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987 CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988 CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989 CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990 CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991 CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992 CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993 CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994 CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995 CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996 CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997 CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998 CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999 CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0 CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1 CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2 CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3 CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4 CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5 CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6 CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7 CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8 CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9 CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0 CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1 CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2 CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3 CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4 CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5 CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6 CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7 CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8 CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9 CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0 CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1 CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2 CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3 CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4 CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5 CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6 CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7 CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8 CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9 CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0 CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1 CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2 CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3 CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4 CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5 CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6 CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7 CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8 CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9 CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0 CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1 CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2 CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3 CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4 CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5 CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6 CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7 CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8 CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9 CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0 CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1 CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2 CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3 CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4 CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5 CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6 CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7 CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8 CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9 CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE CJK COMPATIBILITY IDEOGRAPH-2F9FE
+2F9FF CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00 CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01 CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02 CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03 CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04 CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05 CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06 CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07 CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08 CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09 CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10 CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11 CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12 CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13 CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14 CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15 CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16 CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17 CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18 CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19 CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0001 LANGUAGE TAG
+E0020 TAG SPACE
+E0021 TAG EXCLAMATION MARK
+E0022 TAG QUOTATION MARK
+E0023 TAG NUMBER SIGN
+E0024 TAG DOLLAR SIGN
+E0025 TAG PERCENT SIGN
+E0026 TAG AMPERSAND
+E0027 TAG APOSTROPHE
+E0028 TAG LEFT PARENTHESIS
+E0029 TAG RIGHT PARENTHESIS
+E002A TAG ASTERISK
+E002B TAG PLUS SIGN
+E002C TAG COMMA
+E002D TAG HYPHEN-MINUS
+E002E TAG FULL STOP
+E002F TAG SOLIDUS
+E0030 TAG DIGIT ZERO
+E0031 TAG DIGIT ONE
+E0032 TAG DIGIT TWO
+E0033 TAG DIGIT THREE
+E0034 TAG DIGIT FOUR
+E0035 TAG DIGIT FIVE
+E0036 TAG DIGIT SIX
+E0037 TAG DIGIT SEVEN
+E0038 TAG DIGIT EIGHT
+E0039 TAG DIGIT NINE
+E003A TAG COLON
+E003B TAG SEMICOLON
+E003C TAG LESS-THAN SIGN
+E003D TAG EQUALS SIGN
+E003E TAG GREATER-THAN SIGN
+E003F TAG QUESTION MARK
+E0040 TAG COMMERCIAL AT
+E0041 TAG LATIN CAPITAL LETTER A
+E0042 TAG LATIN CAPITAL LETTER B
+E0043 TAG LATIN CAPITAL LETTER C
+E0044 TAG LATIN CAPITAL LETTER D
+E0045 TAG LATIN CAPITAL LETTER E
+E0046 TAG LATIN CAPITAL LETTER F
+E0047 TAG LATIN CAPITAL LETTER G
+E0048 TAG LATIN CAPITAL LETTER H
+E0049 TAG LATIN CAPITAL LETTER I
+E004A TAG LATIN CAPITAL LETTER J
+E004B TAG LATIN CAPITAL LETTER K
+E004C TAG LATIN CAPITAL LETTER L
+E004D TAG LATIN CAPITAL LETTER M
+E004E TAG LATIN CAPITAL LETTER N
+E004F TAG LATIN CAPITAL LETTER O
+E0050 TAG LATIN CAPITAL LETTER P
+E0051 TAG LATIN CAPITAL LETTER Q
+E0052 TAG LATIN CAPITAL LETTER R
+E0053 TAG LATIN CAPITAL LETTER S
+E0054 TAG LATIN CAPITAL LETTER T
+E0055 TAG LATIN CAPITAL LETTER U
+E0056 TAG LATIN CAPITAL LETTER V
+E0057 TAG LATIN CAPITAL LETTER W
+E0058 TAG LATIN CAPITAL LETTER X
+E0059 TAG LATIN CAPITAL LETTER Y
+E005A TAG LATIN CAPITAL LETTER Z
+E005B TAG LEFT SQUARE BRACKET
+E005C TAG REVERSE SOLIDUS
+E005D TAG RIGHT SQUARE BRACKET
+E005E TAG CIRCUMFLEX ACCENT
+E005F TAG LOW LINE
+E0060 TAG GRAVE ACCENT
+E0061 TAG LATIN SMALL LETTER A
+E0062 TAG LATIN SMALL LETTER B
+E0063 TAG LATIN SMALL LETTER C
+E0064 TAG LATIN SMALL LETTER D
+E0065 TAG LATIN SMALL LETTER E
+E0066 TAG LATIN SMALL LETTER F
+E0067 TAG LATIN SMALL LETTER G
+E0068 TAG LATIN SMALL LETTER H
+E0069 TAG LATIN SMALL LETTER I
+E006A TAG LATIN SMALL LETTER J
+E006B TAG LATIN SMALL LETTER K
+E006C TAG LATIN SMALL LETTER L
+E006D TAG LATIN SMALL LETTER M
+E006E TAG LATIN SMALL LETTER N
+E006F TAG LATIN SMALL LETTER O
+E0070 TAG LATIN SMALL LETTER P
+E0071 TAG LATIN SMALL LETTER Q
+E0072 TAG LATIN SMALL LETTER R
+E0073 TAG LATIN SMALL LETTER S
+E0074 TAG LATIN SMALL LETTER T
+E0075 TAG LATIN SMALL LETTER U
+E0076 TAG LATIN SMALL LETTER V
+E0077 TAG LATIN SMALL LETTER W
+E0078 TAG LATIN SMALL LETTER X
+E0079 TAG LATIN SMALL LETTER Y
+E007A TAG LATIN SMALL LETTER Z
+E007B TAG LEFT CURLY BRACKET
+E007C TAG VERTICAL LINE
+E007D TAG RIGHT CURLY BRACKET
+E007E TAG TILDE
+E007F CANCEL TAG
+E0100 VARIATION SELECTOR-17
+E0101 VARIATION SELECTOR-18
+E0102 VARIATION SELECTOR-19
+E0103 VARIATION SELECTOR-20
+E0104 VARIATION SELECTOR-21
+E0105 VARIATION SELECTOR-22
+E0106 VARIATION SELECTOR-23
+E0107 VARIATION SELECTOR-24
+E0108 VARIATION SELECTOR-25
+E0109 VARIATION SELECTOR-26
+E010A VARIATION SELECTOR-27
+E010B VARIATION SELECTOR-28
+E010C VARIATION SELECTOR-29
+E010D VARIATION SELECTOR-30
+E010E VARIATION SELECTOR-31
+E010F VARIATION SELECTOR-32
+E0110 VARIATION SELECTOR-33
+E0111 VARIATION SELECTOR-34
+E0112 VARIATION SELECTOR-35
+E0113 VARIATION SELECTOR-36
+E0114 VARIATION SELECTOR-37
+E0115 VARIATION SELECTOR-38
+E0116 VARIATION SELECTOR-39
+E0117 VARIATION SELECTOR-40
+E0118 VARIATION SELECTOR-41
+E0119 VARIATION SELECTOR-42
+E011A VARIATION SELECTOR-43
+E011B VARIATION SELECTOR-44
+E011C VARIATION SELECTOR-45
+E011D VARIATION SELECTOR-46
+E011E VARIATION SELECTOR-47
+E011F VARIATION SELECTOR-48
+E0120 VARIATION SELECTOR-49
+E0121 VARIATION SELECTOR-50
+E0122 VARIATION SELECTOR-51
+E0123 VARIATION SELECTOR-52
+E0124 VARIATION SELECTOR-53
+E0125 VARIATION SELECTOR-54
+E0126 VARIATION SELECTOR-55
+E0127 VARIATION SELECTOR-56
+E0128 VARIATION SELECTOR-57
+E0129 VARIATION SELECTOR-58
+E012A VARIATION SELECTOR-59
+E012B VARIATION SELECTOR-60
+E012C VARIATION SELECTOR-61
+E012D VARIATION SELECTOR-62
+E012E VARIATION SELECTOR-63
+E012F VARIATION SELECTOR-64
+E0130 VARIATION SELECTOR-65
+E0131 VARIATION SELECTOR-66
+E0132 VARIATION SELECTOR-67
+E0133 VARIATION SELECTOR-68
+E0134 VARIATION SELECTOR-69
+E0135 VARIATION SELECTOR-70
+E0136 VARIATION SELECTOR-71
+E0137 VARIATION SELECTOR-72
+E0138 VARIATION SELECTOR-73
+E0139 VARIATION SELECTOR-74
+E013A VARIATION SELECTOR-75
+E013B VARIATION SELECTOR-76
+E013C VARIATION SELECTOR-77
+E013D VARIATION SELECTOR-78
+E013E VARIATION SELECTOR-79
+E013F VARIATION SELECTOR-80
+E0140 VARIATION SELECTOR-81
+E0141 VARIATION SELECTOR-82
+E0142 VARIATION SELECTOR-83
+E0143 VARIATION SELECTOR-84
+E0144 VARIATION SELECTOR-85
+E0145 VARIATION SELECTOR-86
+E0146 VARIATION SELECTOR-87
+E0147 VARIATION SELECTOR-88
+E0148 VARIATION SELECTOR-89
+E0149 VARIATION SELECTOR-90
+E014A VARIATION SELECTOR-91
+E014B VARIATION SELECTOR-92
+E014C VARIATION SELECTOR-93
+E014D VARIATION SELECTOR-94
+E014E VARIATION SELECTOR-95
+E014F VARIATION SELECTOR-96
+E0150 VARIATION SELECTOR-97
+E0151 VARIATION SELECTOR-98
+E0152 VARIATION SELECTOR-99
+E0153 VARIATION SELECTOR-100
+E0154 VARIATION SELECTOR-101
+E0155 VARIATION SELECTOR-102
+E0156 VARIATION SELECTOR-103
+E0157 VARIATION SELECTOR-104
+E0158 VARIATION SELECTOR-105
+E0159 VARIATION SELECTOR-106
+E015A VARIATION SELECTOR-107
+E015B VARIATION SELECTOR-108
+E015C VARIATION SELECTOR-109
+E015D VARIATION SELECTOR-110
+E015E VARIATION SELECTOR-111
+E015F VARIATION SELECTOR-112
+E0160 VARIATION SELECTOR-113
+E0161 VARIATION SELECTOR-114
+E0162 VARIATION SELECTOR-115
+E0163 VARIATION SELECTOR-116
+E0164 VARIATION SELECTOR-117
+E0165 VARIATION SELECTOR-118
+E0166 VARIATION SELECTOR-119
+E0167 VARIATION SELECTOR-120
+E0168 VARIATION SELECTOR-121
+E0169 VARIATION SELECTOR-122
+E016A VARIATION SELECTOR-123
+E016B VARIATION SELECTOR-124
+E016C VARIATION SELECTOR-125
+E016D VARIATION SELECTOR-126
+E016E VARIATION SELECTOR-127
+E016F VARIATION SELECTOR-128
+E0170 VARIATION SELECTOR-129
+E0171 VARIATION SELECTOR-130
+E0172 VARIATION SELECTOR-131
+E0173 VARIATION SELECTOR-132
+E0174 VARIATION SELECTOR-133
+E0175 VARIATION SELECTOR-134
+E0176 VARIATION SELECTOR-135
+E0177 VARIATION SELECTOR-136
+E0178 VARIATION SELECTOR-137
+E0179 VARIATION SELECTOR-138
+E017A VARIATION SELECTOR-139
+E017B VARIATION SELECTOR-140
+E017C VARIATION SELECTOR-141
+E017D VARIATION SELECTOR-142
+E017E VARIATION SELECTOR-143
+E017F VARIATION SELECTOR-144
+E0180 VARIATION SELECTOR-145
+E0181 VARIATION SELECTOR-146
+E0182 VARIATION SELECTOR-147
+E0183 VARIATION SELECTOR-148
+E0184 VARIATION SELECTOR-149
+E0185 VARIATION SELECTOR-150
+E0186 VARIATION SELECTOR-151
+E0187 VARIATION SELECTOR-152
+E0188 VARIATION SELECTOR-153
+E0189 VARIATION SELECTOR-154
+E018A VARIATION SELECTOR-155
+E018B VARIATION SELECTOR-156
+E018C VARIATION SELECTOR-157
+E018D VARIATION SELECTOR-158
+E018E VARIATION SELECTOR-159
+E018F VARIATION SELECTOR-160
+E0190 VARIATION SELECTOR-161
+E0191 VARIATION SELECTOR-162
+E0192 VARIATION SELECTOR-163
+E0193 VARIATION SELECTOR-164
+E0194 VARIATION SELECTOR-165
+E0195 VARIATION SELECTOR-166
+E0196 VARIATION SELECTOR-167
+E0197 VARIATION SELECTOR-168
+E0198 VARIATION SELECTOR-169
+E0199 VARIATION SELECTOR-170
+E019A VARIATION SELECTOR-171
+E019B VARIATION SELECTOR-172
+E019C VARIATION SELECTOR-173
+E019D VARIATION SELECTOR-174
+E019E VARIATION SELECTOR-175
+E019F VARIATION SELECTOR-176
+E01A0 VARIATION SELECTOR-177
+E01A1 VARIATION SELECTOR-178
+E01A2 VARIATION SELECTOR-179
+E01A3 VARIATION SELECTOR-180
+E01A4 VARIATION SELECTOR-181
+E01A5 VARIATION SELECTOR-182
+E01A6 VARIATION SELECTOR-183
+E01A7 VARIATION SELECTOR-184
+E01A8 VARIATION SELECTOR-185
+E01A9 VARIATION SELECTOR-186
+E01AA VARIATION SELECTOR-187
+E01AB VARIATION SELECTOR-188
+E01AC VARIATION SELECTOR-189
+E01AD VARIATION SELECTOR-190
+E01AE VARIATION SELECTOR-191
+E01AF VARIATION SELECTOR-192
+E01B0 VARIATION SELECTOR-193
+E01B1 VARIATION SELECTOR-194
+E01B2 VARIATION SELECTOR-195
+E01B3 VARIATION SELECTOR-196
+E01B4 VARIATION SELECTOR-197
+E01B5 VARIATION SELECTOR-198
+E01B6 VARIATION SELECTOR-199
+E01B7 VARIATION SELECTOR-200
+E01B8 VARIATION SELECTOR-201
+E01B9 VARIATION SELECTOR-202
+E01BA VARIATION SELECTOR-203
+E01BB VARIATION SELECTOR-204
+E01BC VARIATION SELECTOR-205
+E01BD VARIATION SELECTOR-206
+E01BE VARIATION SELECTOR-207
+E01BF VARIATION SELECTOR-208
+E01C0 VARIATION SELECTOR-209
+E01C1 VARIATION SELECTOR-210
+E01C2 VARIATION SELECTOR-211
+E01C3 VARIATION SELECTOR-212
+E01C4 VARIATION SELECTOR-213
+E01C5 VARIATION SELECTOR-214
+E01C6 VARIATION SELECTOR-215
+E01C7 VARIATION SELECTOR-216
+E01C8 VARIATION SELECTOR-217
+E01C9 VARIATION SELECTOR-218
+E01CA VARIATION SELECTOR-219
+E01CB VARIATION SELECTOR-220
+E01CC VARIATION SELECTOR-221
+E01CD VARIATION SELECTOR-222
+E01CE VARIATION SELECTOR-223
+E01CF VARIATION SELECTOR-224
+E01D0 VARIATION SELECTOR-225
+E01D1 VARIATION SELECTOR-226
+E01D2 VARIATION SELECTOR-227
+E01D3 VARIATION SELECTOR-228
+E01D4 VARIATION SELECTOR-229
+E01D5 VARIATION SELECTOR-230
+E01D6 VARIATION SELECTOR-231
+E01D7 VARIATION SELECTOR-232
+E01D8 VARIATION SELECTOR-233
+E01D9 VARIATION SELECTOR-234
+E01DA VARIATION SELECTOR-235
+E01DB VARIATION SELECTOR-236
+E01DC VARIATION SELECTOR-237
+E01DD VARIATION SELECTOR-238
+E01DE VARIATION SELECTOR-239
+E01DF VARIATION SELECTOR-240
+E01E0 VARIATION SELECTOR-241
+E01E1 VARIATION SELECTOR-242
+E01E2 VARIATION SELECTOR-243
+E01E3 VARIATION SELECTOR-244
+E01E4 VARIATION SELECTOR-245
+E01E5 VARIATION SELECTOR-246
+E01E6 VARIATION SELECTOR-247
+E01E7 VARIATION SELECTOR-248
+E01E8 VARIATION SELECTOR-249
+E01E9 VARIATION SELECTOR-250
+E01EA VARIATION SELECTOR-251
+E01EB VARIATION SELECTOR-252
+E01EC VARIATION SELECTOR-253
+E01ED VARIATION SELECTOR-254
+E01EE VARIATION SELECTOR-255
+E01EF VARIATION SELECTOR-256
+F0000 FFFFD Plane 15 Private Use
+100000 10FFFD Plane 16 Private Use
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt b/Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt
new file mode 100644
index 00000000000..c880c50b911
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt
@@ -0,0 +1,95 @@
+# NamedSequences-4.1.0.txt
+# Date: 2005-214, 13:10 PST [KW]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# Format:
+# Name of Sequence; Code Point Sequence for USI
+#
+# Note: The order of entries in this file is not significant.
+# However, entries are generally in script order corresponding
+# to block order in the Unicode Standard, to make it easier
+# to find entries in the list.
+
+# ================================================
+
+LATIN CAPITAL LETTER A WITH MACRON AND GRAVE;0100 0300
+LATIN SMALL LETTER A WITH MACRON AND GRAVE;0101 0300
+LATIN SMALL LETTER A WITH ACUTE AND OGONEK;00E1 0328
+LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW;0045 0329
+LATIN SMALL LETTER E WITH VERTICAL LINE BELOW;0065 0329
+LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW AND GRAVE;00C8 0329
+LATIN SMALL LETTER E WITH VERTICAL LINE BELOW AND GRAVE;00E8 0329
+LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW AND ACUTE;00C9 0329
+LATIN SMALL LETTER E WITH VERTICAL LINE BELOW AND ACUTE;00E9 0329
+LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON;00CA 0304
+LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON;00EA 0304
+LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON;00CA 030C
+LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON;00EA 030C
+LATIN CAPITAL LETTER I WITH MACRON AND GRAVE;012A 0300
+LATIN SMALL LETTER I WITH MACRON AND GRAVE;012B 0300
+LATIN SMALL LETTER I WITH DOT ABOVE AND ACUTE;0069 0307 0301
+LATIN SMALL LETTER NG WITH TILDE ABOVE;006E 0360 0067
+LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW;004F 0329
+LATIN SMALL LETTER O WITH VERTICAL LINE BELOW;006F 0329
+LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW AND GRAVE;00D2 0329
+LATIN SMALL LETTER O WITH VERTICAL LINE BELOW AND GRAVE;00F2 0329
+LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW AND ACUTE;00D3 0329
+LATIN SMALL LETTER O WITH VERTICAL LINE BELOW AND ACUTE;00F3 0329
+LATIN CAPITAL LETTER S WITH VERTICAL LINE BELOW;0053 0329
+LATIN SMALL LETTER S WITH VERTICAL LINE BELOW;0073 0329
+LATIN CAPITAL LETTER U WITH MACRON AND GRAVE;016A 0300
+LATIN SMALL LETTER U WITH MACRON AND GRAVE;016B 0300
+GURMUKHI HALF YA;0A2F 0A4D
+GURMUKHI PARI CA;0A4D 0A1A
+GURMUKHI PARI TA;0A4D 0A24
+GURMUKHI PARI NA;0A4D 0A28
+GURMUKHI PARI YA;0A4D 0A2F
+GURMUKHI PARI VA;0A4D 0A35
+GEORGIAN LETTER U-BRJGU;10E3 0302
+KHMER CONSONANT SIGN COENG KA;17D2 1780
+KHMER CONSONANT SIGN COENG KHA;17D2 1781
+KHMER CONSONANT SIGN COENG KO;17D2 1782
+KHMER CONSONANT SIGN COENG KHO;17D2 1783
+KHMER CONSONANT SIGN COENG NGO;17D2 1784
+KHMER CONSONANT SIGN COENG CA;17D2 1785
+KHMER CONSONANT SIGN COENG CHA;17D2 1786
+KHMER CONSONANT SIGN COENG CO;17D2 1787
+KHMER CONSONANT SIGN COENG CHO;17D2 1788
+KHMER CONSONANT SIGN COENG NYO;17D2 1789
+KHMER CONSONANT SIGN COENG DA;17D2 178A
+KHMER CONSONANT SIGN COENG TTHA;17D2 178B
+KHMER CONSONANT SIGN COENG DO;17D2 178C
+KHMER CONSONANT SIGN COENG TTHO;17D2 178D
+KHMER CONSONANT SIGN COENG NA;17D2 178E
+KHMER CONSONANT SIGN COENG TA;17D2 178F
+KHMER CONSONANT SIGN COENG THA;17D2 1790
+KHMER CONSONANT SIGN COENG TO;17D2 1791
+KHMER CONSONANT SIGN COENG THO;17D2 1792
+KHMER CONSONANT SIGN COENG NO;17D2 1793
+KHMER CONSONANT SIGN COENG BA;17D2 1794
+KHMER CONSONANT SIGN COENG PHA;17D2 1795
+KHMER CONSONANT SIGN COENG PO;17D2 1796
+KHMER CONSONANT SIGN COENG PHO;17D2 1797
+KHMER CONSONANT SIGN COENG MO;17D2 1798
+KHMER CONSONANT SIGN COENG YO;17D2 1799
+KHMER CONSONANT SIGN COENG RO;17D2 179A
+KHMER CONSONANT SIGN COENG LO;17D2 179B
+KHMER CONSONANT SIGN COENG VO;17D2 179C
+KHMER CONSONANT SIGN COENG SHA;17D2 179D
+KHMER CONSONANT SIGN COENG SSA;17D2 179E
+KHMER CONSONANT SIGN COENG SA;17D2 179F
+KHMER CONSONANT SIGN COENG HA;17D2 17A0
+KHMER CONSONANT SIGN COENG LA;17D2 17A1
+KHMER VOWEL SIGN COENG QA;17D2 17A2
+KHMER INDEPENDENT VOWEL SIGN COENG QU;17D2 17A7
+KHMER INDEPENDENT VOWEL SIGN COENG RY;17D2 17AB
+KHMER INDEPENDENT VOWEL SIGN COENG RYY;17D2 17AC
+KHMER INDEPENDENT VOWEL SIGN COENG QE;17D2 17AF
+KHMER VOWEL SIGN OM;17BB 17C6
+KHMER VOWEL SIGN AAM;17B6 17C6
+KATAKANA LETTER AINU P;31F7 309A
+MODIFIER LETTER EXTRA-HIGH EXTRA-LOW CONTOUR TONE BAR;02E5 02E9
diff --git a/Master/tlpkg/tlperl/lib/unicore/NamesList.txt b/Master/tlpkg/tlperl/lib/unicore/NamesList.txt
new file mode 100644
index 00000000000..6adb13d920c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/NamesList.txt
@@ -0,0 +1,27024 @@
+@@@ The Unicode Standard 4.1
+@@@+ U41M050317.lst
+ Draft Unicode 4.1 names list.
+ Major merger of post-Unicode 4.0 additions with Amd1 name file (xia050208.lst).
+ Accumulation of fixes post-Unicode 4.0. (5th collection)
+ Add alias for 2D53.
+ Corrected alias for 2697.
+ Subdivided headers for Modifier Tone Letters.
+ Add xrefs for 1DC0 and 1DC3.
+ Updated annotation for 301C.
+ Add xref to 2026 and 22EE for FE19.
+ This file is semi-automatically derived from UnicodeData.txt and
+ a set of manually created annotations using a script to select
+ or suppress information from the data file. The rules used
+ for this process are aimed at readability for the human reader,
+ at the expense of some details; therefore, this file should not
+ be parsed for machine-readable information.
+@+ Copyright (c) 1991-2005 Unicode, Inc.
+ For terms of use, see http://www.unicode.org/terms_of_use.html
+@@ 0000 C0 Controls and Basic Latin (Basic Latin) 007F
+@ C0 controls
+@+ Alias names are those for ISO/IEC 6429:1992. Commonly used alternative aliases are also shown.
+0000 <control>
+ = NULL
+0001 <control>
+ = START OF HEADING
+0002 <control>
+ = START OF TEXT
+0003 <control>
+ = END OF TEXT
+0004 <control>
+ = END OF TRANSMISSION
+0005 <control>
+ = ENQUIRY
+0006 <control>
+ = ACKNOWLEDGE
+0007 <control>
+ = BELL
+0008 <control>
+ = BACKSPACE
+0009 <control>
+ = CHARACTER TABULATION
+ = horizontal tabulation (HT), tab
+000A <control>
+ = LINE FEED (LF)
+ = new line (NL), end of line (EOL)
+000B <control>
+ = LINE TABULATION
+ = vertical tabulation (VT)
+000C <control>
+ = FORM FEED (FF)
+000D <control>
+ = CARRIAGE RETURN (CR)
+000E <control>
+ = SHIFT OUT
+000F <control>
+ = SHIFT IN
+0010 <control>
+ = DATA LINK ESCAPE
+0011 <control>
+ = DEVICE CONTROL ONE
+0012 <control>
+ = DEVICE CONTROL TWO
+0013 <control>
+ = DEVICE CONTROL THREE
+0014 <control>
+ = DEVICE CONTROL FOUR
+0015 <control>
+ = NEGATIVE ACKNOWLEDGE
+0016 <control>
+ = SYNCHRONOUS IDLE
+0017 <control>
+ = END OF TRANSMISSION BLOCK
+0018 <control>
+ = CANCEL
+0019 <control>
+ = END OF MEDIUM
+001A <control>
+ = SUBSTITUTE
+ x (replacement character - FFFD)
+001B <control>
+ = ESCAPE
+001C <control>
+ = INFORMATION SEPARATOR FOUR
+ = file separator (FS)
+001D <control>
+ = INFORMATION SEPARATOR THREE
+ = group separator (GS)
+001E <control>
+ = INFORMATION SEPARATOR TWO
+ = record separator (RS)
+001F <control>
+ = INFORMATION SEPARATOR ONE
+ = unit separator (US)
+@ ASCII punctuation and symbols
+@+ Based on ISO/IEC 646 from here.
+0020 SPACE
+ * sometimes considered a control code
+ * other space characters: 2000-200A
+ x (no-break space - 00A0)
+ x (zero width space - 200B)
+ x (word joiner - 2060)
+ x (ideographic space - 3000)
+ x (zero width no-break space - FEFF)
+0021 EXCLAMATION MARK
+ = factorial
+ = bang
+ x (inverted exclamation mark - 00A1)
+ x (latin letter retroflex click - 01C3)
+ x (double exclamation mark - 203C)
+ x (interrobang - 203D)
+ x (heavy exclamation mark ornament - 2762)
+0022 QUOTATION MARK
+ * neutral (vertical), used as opening or closing quotation mark
+ * preferred characters in English for paired quotation marks are 201C & 201D
+ x (modifier letter double prime - 02BA)
+ x (combining double acute accent - 030B)
+ x (combining double vertical line above - 030E)
+ x (double prime - 2033)
+ x (ditto mark - 3003)
+0023 NUMBER SIGN
+ = pound sign, hash, crosshatch, octothorpe
+ x (music sharp sign - 266F)
+0024 DOLLAR SIGN
+ = milreis, escudo
+ * glyph may have one or two vertical bars
+ * other currency symbol characters: 20A0-20AF
+ x (currency sign - 00A4)
+0025 PERCENT SIGN
+ x (arabic percent sign - 066A)
+ x (per mille sign - 2030)
+ x (per ten thousand sign - 2031)
+ x (commercial minus sign - 2052)
+0026 AMPERSAND
+0027 APOSTROPHE
+ = APOSTROPHE-QUOTE
+ = APL quote
+ * neutral (vertical) glyph with mixed usage
+ * 2019 is preferred for apostrophe
+ * preferred characters in English for paired quotation marks are 2018 & 2019
+ x (modifier letter prime - 02B9)
+ x (modifier letter apostrophe - 02BC)
+ x (modifier letter vertical line - 02C8)
+ x (combining acute accent - 0301)
+ x (prime - 2032)
+0028 LEFT PARENTHESIS
+ = OPENING PARENTHESIS
+0029 RIGHT PARENTHESIS
+ = CLOSING PARENTHESIS
+ * see discussion on semantics of paired bracketing characters
+002A ASTERISK
+ = star (on phone keypads)
+ x (arabic five pointed star - 066D)
+ x (low asterisk - 204E)
+ x (asterisk operator - 2217)
+ x (heavy asterisk - 2731)
+002B PLUS SIGN
+002C COMMA
+ = decimal separator
+ x (arabic comma - 060C)
+ x (single low-9 quotation mark - 201A)
+ x (ideographic comma - 3001)
+002D HYPHEN-MINUS
+ = hyphen or minus sign
+ * used for either hyphen or minus sign
+ x (hyphen - 2010)
+ x (non-breaking hyphen - 2011)
+ x (figure dash - 2012)
+ x (en dash - 2013)
+ x (minus sign - 2212)
+002E FULL STOP
+ = PERIOD
+ = dot, decimal point
+ * may be rendered as a raised decimal point in old style numbers
+ x (arabic full stop - 06D4)
+ x (ideographic full stop - 3002)
+002F SOLIDUS
+ = SLASH
+ = virgule, shilling (British)
+ x (latin letter dental click - 01C0)
+ x (combining long solidus overlay - 0338)
+ x (fraction slash - 2044)
+ x (division slash - 2215)
+@ ASCII digits
+0030 DIGIT ZERO
+0031 DIGIT ONE
+0032 DIGIT TWO
+0033 DIGIT THREE
+0034 DIGIT FOUR
+0035 DIGIT FIVE
+0036 DIGIT SIX
+0037 DIGIT SEVEN
+0038 DIGIT EIGHT
+0039 DIGIT NINE
+@ ASCII punctuation and symbols
+003A COLON
+ x (armenian full stop - 0589)
+ x (hebrew punctuation sof pasuq - 05C3)
+ x (ratio - 2236)
+003B SEMICOLON
+ * this, and not 037E, is the preferred character for 'Greek question mark'
+ x (greek question mark - 037E)
+ x (arabic semicolon - 061B)
+ x (reversed semicolon - 204F)
+003C LESS-THAN SIGN
+ x (single left-pointing angle quotation mark - 2039)
+ x (left-pointing angle bracket - 2329)
+ x (mathematical left angle bracket - 27E8)
+ x (left angle bracket - 3008)
+003D EQUALS SIGN
+ * other related characters: 2241-2263
+ x (not equal to - 2260)
+ x (identical to - 2261)
+003E GREATER-THAN SIGN
+ x (single right-pointing angle quotation mark - 203A)
+ x (right-pointing angle bracket - 232A)
+ x (mathematical right angle bracket - 27E9)
+ x (right angle bracket - 3009)
+003F QUESTION MARK
+ x (inverted question mark - 00BF)
+ x (greek question mark - 037E)
+ x (arabic question mark - 061F)
+ x (interrobang - 203D)
+ x (question exclamation mark - 2048)
+ x (exclamation question mark - 2049)
+0040 COMMERCIAL AT
+ = Klammeraffe (common, humorous slang German name)
+@ Uppercase Latin alphabet
+0041 LATIN CAPITAL LETTER A
+0042 LATIN CAPITAL LETTER B
+ x (script capital b - 212C)
+0043 LATIN CAPITAL LETTER C
+ x (double-struck capital c - 2102)
+ x (black-letter capital c - 212D)
+0044 LATIN CAPITAL LETTER D
+0045 LATIN CAPITAL LETTER E
+ x (euler constant - 2107)
+ x (script capital e - 2130)
+0046 LATIN CAPITAL LETTER F
+ x (script capital f - 2131)
+ x (turned capital f - 2132)
+0047 LATIN CAPITAL LETTER G
+ * invented circa 300 BCE by Spurius Carvilius Ruga, who added a stroke to the letter C
+0048 LATIN CAPITAL LETTER H
+ x (script capital h - 210B)
+ x (black-letter capital h - 210C)
+ x (double-struck capital h - 210D)
+0049 LATIN CAPITAL LETTER I
+ * Turkish and Azerbaijani use 0131 for lowercase
+ x (latin capital letter i with dot above - 0130)
+ x (cyrillic capital letter byelorussian-ukrainian i - 0406)
+ x (cyrillic letter palochka - 04C0)
+ x (script capital i - 2110)
+ x (black-letter capital i - 2111)
+ x (roman numeral one - 2160)
+004A LATIN CAPITAL LETTER J
+004B LATIN CAPITAL LETTER K
+ x (kelvin sign - 212A)
+004C LATIN CAPITAL LETTER L
+ x (script capital l - 2112)
+004D LATIN CAPITAL LETTER M
+ x (script capital m - 2133)
+004E LATIN CAPITAL LETTER N
+ x (double-struck capital n - 2115)
+004F LATIN CAPITAL LETTER O
+0050 LATIN CAPITAL LETTER P
+ x (double-struck capital p - 2119)
+0051 LATIN CAPITAL LETTER Q
+ x (double-struck capital q - 211A)
+0052 LATIN CAPITAL LETTER R
+ x (script capital r - 211B)
+ x (black-letter capital r - 211C)
+ x (double-struck capital r - 211D)
+0053 LATIN CAPITAL LETTER S
+0054 LATIN CAPITAL LETTER T
+0055 LATIN CAPITAL LETTER U
+0056 LATIN CAPITAL LETTER V
+0057 LATIN CAPITAL LETTER W
+0058 LATIN CAPITAL LETTER X
+0059 LATIN CAPITAL LETTER Y
+005A LATIN CAPITAL LETTER Z
+ x (double-struck capital z - 2124)
+ x (black-letter capital z - 2128)
+@ ASCII punctuation and symbols
+005B LEFT SQUARE BRACKET
+ = OPENING SQUARE BRACKET
+ * other bracket characters: 3008-301B
+005C REVERSE SOLIDUS
+ = BACKSLASH
+ x (combining reverse solidus overlay - 20E5)
+ x (set minus - 2216)
+005D RIGHT SQUARE BRACKET
+ = CLOSING SQUARE BRACKET
+005E CIRCUMFLEX ACCENT
+ * this is a spacing character
+ x (modifier letter up arrowhead - 02C4)
+ x (modifier letter circumflex accent - 02C6)
+ x (combining circumflex accent - 0302)
+ x (up arrowhead - 2303)
+005F LOW LINE
+ = SPACING UNDERSCORE
+ * this is a spacing character
+ x (modifier letter low macron - 02CD)
+ x (combining macron below - 0331)
+ x (combining low line - 0332)
+ x (double low line - 2017)
+0060 GRAVE ACCENT
+ * this is a spacing character
+ x (modifier letter grave accent - 02CB)
+ x (combining grave accent - 0300)
+ x (reversed prime - 2035)
+@ Lowercase Latin alphabet
+0061 LATIN SMALL LETTER A
+0062 LATIN SMALL LETTER B
+0063 LATIN SMALL LETTER C
+0064 LATIN SMALL LETTER D
+0065 LATIN SMALL LETTER E
+ x (estimated symbol - 212E)
+ x (script small e - 212F)
+0066 LATIN SMALL LETTER F
+0067 LATIN SMALL LETTER G
+ x (latin small letter script g - 0261)
+ x (script small g - 210A)
+0068 LATIN SMALL LETTER H
+ x (cyrillic small letter shha - 04BB)
+ x (planck constant - 210E)
+0069 LATIN SMALL LETTER I
+ * Turkish and Azerbaijani use 0130 for uppercase
+ x (latin small letter dotless i - 0131)
+006A LATIN SMALL LETTER J
+006B LATIN SMALL LETTER K
+006C LATIN SMALL LETTER L
+ x (script small l - 2113)
+006D LATIN SMALL LETTER M
+006E LATIN SMALL LETTER N
+ x (superscript latin small letter n - 207F)
+006F LATIN SMALL LETTER O
+ x (script small o - 2134)
+0070 LATIN SMALL LETTER P
+0071 LATIN SMALL LETTER Q
+0072 LATIN SMALL LETTER R
+0073 LATIN SMALL LETTER S
+0074 LATIN SMALL LETTER T
+0075 LATIN SMALL LETTER U
+0076 LATIN SMALL LETTER V
+0077 LATIN SMALL LETTER W
+0078 LATIN SMALL LETTER X
+0079 LATIN SMALL LETTER Y
+007A LATIN SMALL LETTER Z
+ x (latin small letter z with stroke - 01B6)
+@ ASCII punctuation and symbols
+007B LEFT CURLY BRACKET
+ = OPENING CURLY BRACKET
+ = opening brace
+007C VERTICAL LINE
+ = VERTICAL BAR
+ * used in pairs to indicate absolute value
+ x (latin letter dental click - 01C0)
+ x (hebrew punctuation paseq - 05C0)
+ x (divides - 2223)
+ x (light vertical bar - 2758)
+007D RIGHT CURLY BRACKET
+ = CLOSING CURLY BRACKET
+ = closing brace
+007E TILDE
+ * this is a spacing character
+ x (small tilde - 02DC)
+ x (combining tilde - 0303)
+ x (swung dash - 2053)
+ x (tilde operator - 223C)
+ x (fullwidth tilde - FF5E)
+@ Control character
+007F <control>
+ = DELETE
+@@ 0080 C1 Controls and Latin-1 Supplement (Latin-1 Supplement) 00FF
+@ C1 controls
+@+ Alias names are those for ISO/IEC 6429:1992.
+0080 <control>
+0081 <control>
+0082 <control>
+ = BREAK PERMITTED HERE
+0083 <control>
+ = NO BREAK HERE
+0084 <control>
+0085 <control>
+ = NEXT LINE (NEL)
+0086 <control>
+ = START OF SELECTED AREA
+0087 <control>
+ = END OF SELECTED AREA
+0088 <control>
+ = CHARACTER TABULATION SET
+0089 <control>
+ = CHARACTER TABULATION WITH JUSTIFICATION
+008A <control>
+ = LINE TABULATION SET
+008B <control>
+ = PARTIAL LINE FORWARD
+008C <control>
+ = PARTIAL LINE BACKWARD
+008D <control>
+ = REVERSE LINE FEED
+008E <control>
+ = SINGLE SHIFT TWO
+008F <control>
+ = SINGLE SHIFT THREE
+0090 <control>
+ = DEVICE CONTROL STRING
+0091 <control>
+ = PRIVATE USE ONE
+0092 <control>
+ = PRIVATE USE TWO
+0093 <control>
+ = SET TRANSMIT STATE
+0094 <control>
+ = CANCEL CHARACTER
+0095 <control>
+ = MESSAGE WAITING
+0096 <control>
+ = START OF GUARDED AREA
+0097 <control>
+ = END OF GUARDED AREA
+0098 <control>
+ = START OF STRING
+0099 <control>
+009A <control>
+ = SINGLE CHARACTER INTRODUCER
+009B <control>
+ = CONTROL SEQUENCE INTRODUCER
+009C <control>
+ = STRING TERMINATOR
+009D <control>
+ = OPERATING SYSTEM COMMAND
+009E <control>
+ = PRIVACY MESSAGE
+009F <control>
+ = APPLICATION PROGRAM COMMAND
+@ Latin-1 punctuation and symbols
+@+ Based on ISO/IEC 8859-1 (aka Latin-1) from here.
+00A0 NO-BREAK SPACE
+ = NBSP
+ x (space - 0020)
+ x (figure space - 2007)
+ x (narrow no-break space - 202F)
+ x (word joiner - 2060)
+ x (zero width no-break space - FEFF)
+ # <noBreak> 0020
+00A1 INVERTED EXCLAMATION MARK
+ * Spanish, Asturian, Galician
+ x (exclamation mark - 0021)
+00A2 CENT SIGN
+00A3 POUND SIGN
+ = pound sterling, Irish punt, Italian lira, Turkish lira, etc.
+ x (lira sign - 20A4)
+00A4 CURRENCY SIGN
+ * other currency symbol characters: 20A0-20AF
+ x (dollar sign - 0024)
+00A5 YEN SIGN
+ = yuan sign
+ * glyph may have one or two crossbars
+00A6 BROKEN BAR
+ = BROKEN VERTICAL BAR
+ = parted rule (in typography)
+00A7 SECTION SIGN
+ * paragraph sign in some European usage
+00A8 DIAERESIS
+ * this is a spacing character
+ x (combining diaeresis - 0308)
+ # 0020 0308
+00A9 COPYRIGHT SIGN
+ x (sound recording copyright - 2117)
+00AA FEMININE ORDINAL INDICATOR
+ * Spanish
+ # <super> 0061
+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
+ = LEFT POINTING GUILLEMET
+ = chevrons (in typography)
+ * usually opening, sometimes closing
+ x (much less-than - 226A)
+ x (left double angle bracket - 300A)
+00AC NOT SIGN
+ = angled dash (in typography)
+ x (reversed not sign - 2310)
+00AD SOFT HYPHEN
+ = SHY
+ = discretionary hyphen
+ x (mongolian todo soft hyphen - 1806)
+00AE REGISTERED SIGN
+ = REGISTERED TRADE MARK SIGN
+00AF MACRON
+ = overline, APL overbar
+ * this is a spacing character
+ x (modifier letter macron - 02C9)
+ x (combining macron - 0304)
+ x (combining overline - 0305)
+ # 0020 0304
+00B0 DEGREE SIGN
+ * this is a spacing character
+ x (ring above - 02DA)
+ x (combining ring above - 030A)
+ x (superscript zero - 2070)
+ x (ring operator - 2218)
+00B1 PLUS-MINUS SIGN
+ x (minus-or-plus sign - 2213)
+00B2 SUPERSCRIPT TWO
+ = squared
+ * other superscript digit characters: 2070-2079
+ x (superscript one - 00B9)
+ # <super> 0032
+00B3 SUPERSCRIPT THREE
+ = cubed
+ x (superscript one - 00B9)
+ # <super> 0033
+00B4 ACUTE ACCENT
+ * this is a spacing character
+ x (modifier letter prime - 02B9)
+ x (modifier letter acute accent - 02CA)
+ x (combining acute accent - 0301)
+ x (prime - 2032)
+ # 0020 0301
+00B5 MICRO SIGN
+ # 03BC greek small letter mu
+00B6 PILCROW SIGN
+ = PARAGRAPH SIGN
+ * section sign in some European usage
+ x (reversed pilcrow sign - 204B)
+ x (curved stem paragraph sign ornament - 2761)
+00B7 MIDDLE DOT
+ = midpoint (in typography)
+ = Georgian comma
+ = Greek middle dot (ano teleia)
+ x (greek ano teleia - 0387)
+ x (bullet - 2022)
+ x (one dot leader - 2024)
+ x (hyphenation point - 2027)
+ x (bullet operator - 2219)
+ x (dot operator - 22C5)
+ x (katakana middle dot - 30FB)
+00B8 CEDILLA
+ * this is a spacing character
+ * other spacing accent characters: 02D8-02DB
+ x (combining cedilla - 0327)
+ # 0020 0327
+00B9 SUPERSCRIPT ONE
+ x (superscript two - 00B2)
+ x (superscript three - 00B3)
+ # <super> 0031
+00BA MASCULINE ORDINAL INDICATOR
+ * Spanish
+ # <super> 006F
+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
+ = RIGHT POINTING GUILLEMET
+ * usually closing, sometimes opening
+ x (much greater-than - 226B)
+ x (right double angle bracket - 300B)
+00BC VULGAR FRACTION ONE QUARTER
+ * bar may be horizontal or slanted
+ * other fraction characters: 2153-215E
+ # <fraction> 0031 2044 0034
+00BD VULGAR FRACTION ONE HALF
+ * bar may be horizontal or slanted
+ # <fraction> 0031 2044 0032
+00BE VULGAR FRACTION THREE QUARTERS
+ * bar may be horizontal or slanted
+ # <fraction> 0033 2044 0034
+00BF INVERTED QUESTION MARK
+ = turned question mark
+ * Spanish
+ x (question mark - 003F)
+@ Letters
+00C0 LATIN CAPITAL LETTER A WITH GRAVE
+ : 0041 0300
+00C1 LATIN CAPITAL LETTER A WITH ACUTE
+ : 0041 0301
+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ : 0041 0302
+00C3 LATIN CAPITAL LETTER A WITH TILDE
+ : 0041 0303
+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
+ : 0041 0308
+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
+ x (angstrom sign - 212B)
+ : 0041 030A
+00C6 LATIN CAPITAL LETTER AE (ash) *
+ = LATIN CAPITAL LIGATURE AE
+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
+ : 0043 0327
+00C8 LATIN CAPITAL LETTER E WITH GRAVE
+ : 0045 0300
+00C9 LATIN CAPITAL LETTER E WITH ACUTE
+ : 0045 0301
+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ : 0045 0302
+00CB LATIN CAPITAL LETTER E WITH DIAERESIS
+ : 0045 0308
+00CC LATIN CAPITAL LETTER I WITH GRAVE
+ : 0049 0300
+00CD LATIN CAPITAL LETTER I WITH ACUTE
+ : 0049 0301
+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ : 0049 0302
+00CF LATIN CAPITAL LETTER I WITH DIAERESIS
+ : 0049 0308
+00D0 LATIN CAPITAL LETTER ETH (Icelandic)
+ x (latin small letter eth - 00F0)
+ x (latin capital letter d with stroke - 0110)
+ x (latin capital letter african d - 0189)
+00D1 LATIN CAPITAL LETTER N WITH TILDE
+ : 004E 0303
+00D2 LATIN CAPITAL LETTER O WITH GRAVE
+ : 004F 0300
+00D3 LATIN CAPITAL LETTER O WITH ACUTE
+ : 004F 0301
+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ : 004F 0302
+00D5 LATIN CAPITAL LETTER O WITH TILDE
+ : 004F 0303
+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
+ : 004F 0308
+@ Mathematical operator
+00D7 MULTIPLICATION SIGN
+ = z notation Cartesian product
+@ Letters
+00D8 LATIN CAPITAL LETTER O WITH STROKE
+ = LATIN CAPITAL LETTER O SLASH
+ x (empty set - 2205)
+00D9 LATIN CAPITAL LETTER U WITH GRAVE
+ : 0055 0300
+00DA LATIN CAPITAL LETTER U WITH ACUTE
+ : 0055 0301
+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ : 0055 0302
+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
+ : 0055 0308
+00DD LATIN CAPITAL LETTER Y WITH ACUTE
+ : 0059 0301
+00DE LATIN CAPITAL LETTER THORN (Icelandic)
+00DF LATIN SMALL LETTER SHARP S (German)
+ = Eszett
+ * German
+ * uppercase is "SS"
+ * in origin a ligature of 017F and 0073
+ x (greek small letter beta - 03B2)
+00E0 LATIN SMALL LETTER A WITH GRAVE
+ : 0061 0300
+00E1 LATIN SMALL LETTER A WITH ACUTE
+ : 0061 0301
+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
+ : 0061 0302
+00E3 LATIN SMALL LETTER A WITH TILDE
+ * Portuguese
+ : 0061 0303
+00E4 LATIN SMALL LETTER A WITH DIAERESIS
+ : 0061 0308
+00E5 LATIN SMALL LETTER A WITH RING ABOVE
+ * Danish, Norwegian, Swedish, Walloon
+ : 0061 030A
+00E6 LATIN SMALL LETTER AE (ash) *
+ = LATIN SMALL LIGATURE AE
+ = ash (from Old English æsc)
+ * Danish, Norwegian, Icelandic, Faroese, Old English, French, IPA
+ x (latin small ligature oe - 0153)
+ x (cyrillic small ligature a ie - 04D5)
+00E7 LATIN SMALL LETTER C WITH CEDILLA
+ : 0063 0327
+00E8 LATIN SMALL LETTER E WITH GRAVE
+ : 0065 0300
+00E9 LATIN SMALL LETTER E WITH ACUTE
+ : 0065 0301
+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
+ : 0065 0302
+00EB LATIN SMALL LETTER E WITH DIAERESIS
+ : 0065 0308
+00EC LATIN SMALL LETTER I WITH GRAVE
+ * Italian, Malagasy
+ : 0069 0300
+00ED LATIN SMALL LETTER I WITH ACUTE
+ : 0069 0301
+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
+ : 0069 0302
+00EF LATIN SMALL LETTER I WITH DIAERESIS
+ : 0069 0308
+00F0 LATIN SMALL LETTER ETH (Icelandic)
+ * Icelandic, Faroese, Old English, IPA
+ x (latin capital letter eth - 00D0)
+ x (greek small letter delta - 03B4)
+ x (partial differential - 2202)
+00F1 LATIN SMALL LETTER N WITH TILDE
+ : 006E 0303
+00F2 LATIN SMALL LETTER O WITH GRAVE
+ : 006F 0300
+00F3 LATIN SMALL LETTER O WITH ACUTE
+ : 006F 0301
+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
+ : 006F 0302
+00F5 LATIN SMALL LETTER O WITH TILDE
+ * Portuguese, Estonian
+ : 006F 0303
+00F6 LATIN SMALL LETTER O WITH DIAERESIS
+ : 006F 0308
+@ Mathematical operator
+00F7 DIVISION SIGN
+ x (division slash - 2215)
+ x (divides - 2223)
+@ Letters
+00F8 LATIN SMALL LETTER O WITH STROKE
+ = LATIN SMALL LETTER O SLASH
+ * Danish, Norwegian, Faroese, IPA
+00F9 LATIN SMALL LETTER U WITH GRAVE
+ * French, Italian
+ : 0075 0300
+00FA LATIN SMALL LETTER U WITH ACUTE
+ : 0075 0301
+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
+ : 0075 0302
+00FC LATIN SMALL LETTER U WITH DIAERESIS
+ : 0075 0308
+00FD LATIN SMALL LETTER Y WITH ACUTE
+ * Czech, Slovak, Icelandic, Faroese, Welsh, Malagasy
+ : 0079 0301
+00FE LATIN SMALL LETTER THORN (Icelandic)
+ * Icelandic, Old English, phonetics
+ * Runic letter borrowed into Latin script
+ x (runic letter thurisaz thurs thorn - 16A6)
+00FF LATIN SMALL LETTER Y WITH DIAERESIS
+ * French
+ x (latin capital letter y with diaeresis - 0178)
+ : 0079 0308
+@@ 0100 Latin Extended-A 017F
+@ European Latin
+0100 LATIN CAPITAL LETTER A WITH MACRON
+ : 0041 0304
+0101 LATIN SMALL LETTER A WITH MACRON
+ * Latvian, Latin, ...
+ : 0061 0304
+0102 LATIN CAPITAL LETTER A WITH BREVE
+ : 0041 0306
+0103 LATIN SMALL LETTER A WITH BREVE
+ * Romanian, Vietnamese, Latin, ...
+ : 0061 0306
+0104 LATIN CAPITAL LETTER A WITH OGONEK
+ : 0041 0328
+0105 LATIN SMALL LETTER A WITH OGONEK
+ * Polish, Lithuanian, ...
+ : 0061 0328
+0106 LATIN CAPITAL LETTER C WITH ACUTE
+ : 0043 0301
+0107 LATIN SMALL LETTER C WITH ACUTE
+ * Polish, Croatian, ...
+ x (cyrillic small letter tshe - 045B)
+ : 0063 0301
+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ : 0043 0302
+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX
+ * Esperanto
+ : 0063 0302
+010A LATIN CAPITAL LETTER C WITH DOT ABOVE
+ : 0043 0307
+010B LATIN SMALL LETTER C WITH DOT ABOVE
+ * Maltese, Irish Gaelic (old orthography)
+ : 0063 0307
+010C LATIN CAPITAL LETTER C WITH CARON
+ : 0043 030C
+010D LATIN SMALL LETTER C WITH CARON
+ * Czech, Slovak, Slovenian, and many other languages
+ : 0063 030C
+010E LATIN CAPITAL LETTER D WITH CARON
+ * the form using caron/hacek is preferred in all contexts
+ : 0044 030C
+010F LATIN SMALL LETTER D WITH CARON
+ * Czech, Slovak
+ * the form using apostrophe is preferred in typesetting
+ : 0064 030C
+0110 LATIN CAPITAL LETTER D WITH STROKE
+ x (latin capital letter eth - 00D0)
+ x (latin small letter d with stroke - 0111)
+ x (latin capital letter african d - 0189)
+0111 LATIN SMALL LETTER D WITH STROKE
+ * Croatian, Vietnamese, Sami
+ * an alternate glyph with the stroke through the bowl is used in Americanist orthographies
+ x (latin capital letter d with stroke - 0110)
+ x (cyrillic small letter dje - 0452)
+0112 LATIN CAPITAL LETTER E WITH MACRON
+ : 0045 0304
+0113 LATIN SMALL LETTER E WITH MACRON
+ * Latvian, Latin, ...
+ : 0065 0304
+0114 LATIN CAPITAL LETTER E WITH BREVE
+ : 0045 0306
+0115 LATIN SMALL LETTER E WITH BREVE
+ * Malay, Latin, ...
+ : 0065 0306
+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE
+ : 0045 0307
+0117 LATIN SMALL LETTER E WITH DOT ABOVE
+ * Lithuanian
+ : 0065 0307
+0118 LATIN CAPITAL LETTER E WITH OGONEK
+ : 0045 0328
+0119 LATIN SMALL LETTER E WITH OGONEK
+ * Polish, Lithuanian, ...
+ : 0065 0328
+011A LATIN CAPITAL LETTER E WITH CARON
+ : 0045 030C
+011B LATIN SMALL LETTER E WITH CARON
+ * Czech, ...
+ : 0065 030C
+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ : 0047 0302
+011D LATIN SMALL LETTER G WITH CIRCUMFLEX
+ * Esperanto
+ : 0067 0302
+011E LATIN CAPITAL LETTER G WITH BREVE
+ : 0047 0306
+011F LATIN SMALL LETTER G WITH BREVE
+ * Turkish, Azerbaijani
+ x (latin small letter g with caron - 01E7)
+ : 0067 0306
+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE
+ : 0047 0307
+0121 LATIN SMALL LETTER G WITH DOT ABOVE
+ * Maltese, Irish Gaelic (old orthography)
+ : 0067 0307
+0122 LATIN CAPITAL LETTER G WITH CEDILLA
+ : 0047 0327
+0123 LATIN SMALL LETTER G WITH CEDILLA
+ * Latvian
+ * there are three major glyph variants
+ : 0067 0327
+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ : 0048 0302
+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX
+ * Esperanto
+ : 0068 0302
+0126 LATIN CAPITAL LETTER H WITH STROKE
+0127 LATIN SMALL LETTER H WITH STROKE
+ * Maltese, IPA, ...
+ x (cyrillic small letter tshe - 045B)
+ x (planck constant over two pi - 210F)
+0128 LATIN CAPITAL LETTER I WITH TILDE
+ : 0049 0303
+0129 LATIN SMALL LETTER I WITH TILDE
+ * Greenlandic (old orthography)
+ : 0069 0303
+012A LATIN CAPITAL LETTER I WITH MACRON
+ : 0049 0304
+012B LATIN SMALL LETTER I WITH MACRON
+ * Latvian, Latin, ...
+ : 0069 0304
+012C LATIN CAPITAL LETTER I WITH BREVE
+ : 0049 0306
+012D LATIN SMALL LETTER I WITH BREVE
+ * Latin, ...
+ : 0069 0306
+012E LATIN CAPITAL LETTER I WITH OGONEK
+ : 0049 0328
+012F LATIN SMALL LETTER I WITH OGONEK
+ * Lithuanian, ...
+ : 0069 0328
+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
+ = LATIN CAPITAL LETTER I DOT
+ * Turkish, Azerbaijani
+ * lowercase is 0069
+ x (latin capital letter i - 0049)
+ : 0049 0307
+0131 LATIN SMALL LETTER DOTLESS I
+ * Turkish, Azerbaijani
+ * uppercase is 0049
+ x (latin small letter i - 0069)
+0132 LATIN CAPITAL LIGATURE IJ
+ # 0049 004A
+0133 LATIN SMALL LIGATURE IJ
+ * Dutch
+ # 0069 006A
+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ : 004A 0302
+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX
+ * Esperanto
+ : 006A 0302
+0136 LATIN CAPITAL LETTER K WITH CEDILLA
+ : 004B 0327
+0137 LATIN SMALL LETTER K WITH CEDILLA
+ * Latvian
+ : 006B 0327
+0138 LATIN SMALL LETTER KRA (Greenlandic)
+ * Greenlandic (old orthography)
+0139 LATIN CAPITAL LETTER L WITH ACUTE
+ : 004C 0301
+013A LATIN SMALL LETTER L WITH ACUTE
+ * Slovak
+ : 006C 0301
+013B LATIN CAPITAL LETTER L WITH CEDILLA
+ : 004C 0327
+013C LATIN SMALL LETTER L WITH CEDILLA
+ * Latvian
+ : 006C 0327
+013D LATIN CAPITAL LETTER L WITH CARON
+ * the form using apostrophe is preferred in typesetting
+ : 004C 030C
+013E LATIN SMALL LETTER L WITH CARON
+ * Slovak
+ * the form using apostrophe is preferred in typesetting
+ : 006C 030C
+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ * some fonts show the middle dot inside the L, but the preferred form has the dot following the L
+ # 004C 00B7
+0140 LATIN SMALL LETTER L WITH MIDDLE DOT
+ * Catalan
+ # 006C 00B7
+0141 LATIN CAPITAL LETTER L WITH STROKE
+0142 LATIN SMALL LETTER L WITH STROKE
+ * Polish, ...
+ x (latin small letter l with bar - 019A)
+0143 LATIN CAPITAL LETTER N WITH ACUTE
+ : 004E 0301
+0144 LATIN SMALL LETTER N WITH ACUTE
+ * Polish, ...
+ : 006E 0301
+0145 LATIN CAPITAL LETTER N WITH CEDILLA
+ : 004E 0327
+0146 LATIN SMALL LETTER N WITH CEDILLA
+ * Latvian
+ : 006E 0327
+0147 LATIN CAPITAL LETTER N WITH CARON
+ : 004E 030C
+0148 LATIN SMALL LETTER N WITH CARON
+ * Czech, Slovak
+ : 006E 030C
+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ = LATIN SMALL LETTER APOSTROPHE N
+ * Afrikaans
+ * this is not actually a single letter
+ # 02BC 006E
+014A LATIN CAPITAL LETTER ENG (Sami)
+ * glyph may also have appearance of large form of the small letter
+014B LATIN SMALL LETTER ENG (Sami)
+ * Sami, Mende, IPA, ...
+014C LATIN CAPITAL LETTER O WITH MACRON
+ : 004F 0304
+014D LATIN SMALL LETTER O WITH MACRON
+ * Latvian, Latin, ...
+ : 006F 0304
+014E LATIN CAPITAL LETTER O WITH BREVE
+ : 004F 0306
+014F LATIN SMALL LETTER O WITH BREVE
+ * Latin
+ : 006F 0306
+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ : 004F 030B
+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ * Hungarian
+ : 006F 030B
+0152 LATIN CAPITAL LIGATURE OE
+0153 LATIN SMALL LIGATURE OE
+ = LATIN SMALL LETTER O E
+ = ethel (from Old English eðel)
+ * French, IPA, Old Icelandic, Old English, ...
+ x (latin small letter ae - 00E6)
+ x (latin letter small capital oe - 0276)
+0154 LATIN CAPITAL LETTER R WITH ACUTE
+ : 0052 0301
+0155 LATIN SMALL LETTER R WITH ACUTE
+ * Slovak, ...
+ : 0072 0301
+0156 LATIN CAPITAL LETTER R WITH CEDILLA
+ : 0052 0327
+0157 LATIN SMALL LETTER R WITH CEDILLA
+ * Latvian
+ : 0072 0327
+0158 LATIN CAPITAL LETTER R WITH CARON
+ : 0052 030C
+0159 LATIN SMALL LETTER R WITH CARON
+ * Czech, ...
+ : 0072 030C
+015A LATIN CAPITAL LETTER S WITH ACUTE
+ : 0053 0301
+015B LATIN SMALL LETTER S WITH ACUTE
+ * Polish, Indic transliteration, ...
+ : 0073 0301
+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ : 0053 0302
+015D LATIN SMALL LETTER S WITH CIRCUMFLEX
+ * Esperanto
+ : 0073 0302
+015E LATIN CAPITAL LETTER S WITH CEDILLA *
+ : 0053 0327
+015F LATIN SMALL LETTER S WITH CEDILLA *
+ * Turkish, Azerbaijani, Romanian, ...
+ * this character is used in both Turkish and Romanian data
+ * a glyph variant with comma below is preferred for Romanian
+ x (latin small letter s with comma below - 0219)
+ : 0073 0327
+0160 LATIN CAPITAL LETTER S WITH CARON
+ : 0053 030C
+0161 LATIN SMALL LETTER S WITH CARON
+ * Czech, Estonian, Finnish, Slovak, and many other languages
+ : 0073 030C
+0162 LATIN CAPITAL LETTER T WITH CEDILLA *
+ : 0054 0327
+0163 LATIN SMALL LETTER T WITH CEDILLA *
+ * Romanian, Semitic transliteration, ...
+ * this character is used in Romanian data
+ * a glyph variant with comma below is preferred for Romanian
+ x (latin small letter t with comma below - 021B)
+ : 0074 0327
+0164 LATIN CAPITAL LETTER T WITH CARON
+ * the form using caron/hacek is preferred in all contexts
+ : 0054 030C
+0165 LATIN SMALL LETTER T WITH CARON
+ * Czech, Slovak
+ * the form using apostrophe is preferred in typesetting
+ : 0074 030C
+0166 LATIN CAPITAL LETTER T WITH STROKE
+0167 LATIN SMALL LETTER T WITH STROKE
+ * Sami
+0168 LATIN CAPITAL LETTER U WITH TILDE
+ : 0055 0303
+0169 LATIN SMALL LETTER U WITH TILDE
+ * Greenlandic (old orthography)
+ : 0075 0303
+016A LATIN CAPITAL LETTER U WITH MACRON
+ : 0055 0304
+016B LATIN SMALL LETTER U WITH MACRON
+ * Latvian, Lithuanian, Latin, ...
+ : 0075 0304
+016C LATIN CAPITAL LETTER U WITH BREVE
+ : 0055 0306
+016D LATIN SMALL LETTER U WITH BREVE
+ * Latin, Esperanto, ...
+ : 0075 0306
+016E LATIN CAPITAL LETTER U WITH RING ABOVE
+ : 0055 030A
+016F LATIN SMALL LETTER U WITH RING ABOVE
+ * Czech, ...
+ : 0075 030A
+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ : 0055 030B
+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ * Hungarian
+ : 0075 030B
+0172 LATIN CAPITAL LETTER U WITH OGONEK
+ : 0055 0328
+0173 LATIN SMALL LETTER U WITH OGONEK
+ * Lithuanian
+ : 0075 0328
+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ : 0057 0302
+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX
+ * Welsh
+ : 0077 0302
+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ : 0059 0302
+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ * Welsh
+ : 0079 0302
+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+ * French, Igbo
+ x (latin small letter y with diaeresis - 00FF)
+ : 0059 0308
+0179 LATIN CAPITAL LETTER Z WITH ACUTE
+ : 005A 0301
+017A LATIN SMALL LETTER Z WITH ACUTE
+ * Polish, ...
+ : 007A 0301
+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ : 005A 0307
+017C LATIN SMALL LETTER Z WITH DOT ABOVE
+ * Polish, ...
+ : 007A 0307
+017D LATIN CAPITAL LETTER Z WITH CARON
+ : 005A 030C
+017E LATIN SMALL LETTER Z WITH CARON
+ * Czech, Estonian, Finnish, Slovak, Slovenian, and many other languages
+ : 007A 030C
+017F LATIN SMALL LETTER LONG S
+ * in common use in Roman types until the 18th century
+ * in current use in Fraktur and Gaelic types
+ # 0073 latin small letter s
+@@ 0180 Latin Extended-B 024F
+@ Latin Extended-B
+0180 LATIN SMALL LETTER B WITH STROKE
+ * Americanist and Indo-Europeanist usage for phonetic beta
+ * Americanist orthographies use an alternate glyph with the stroke through the bowl
+ * Old Saxon
+ x (greek small letter beta - 03B2)
+ x (blank symbol - 2422)
+0181 LATIN CAPITAL LETTER B WITH HOOK
+ * Zulu, Pan-Nigerian alphabet
+ x (latin small letter b with hook - 0253)
+0182 LATIN CAPITAL LETTER B WITH TOPBAR
+0183 LATIN SMALL LETTER B WITH TOPBAR
+ * Zhuang
+ * former Soviet minority language scripts
+ x (cyrillic capital letter be - 0411)
+0184 LATIN CAPITAL LETTER TONE SIX
+0185 LATIN SMALL LETTER TONE SIX
+ * Zhuang
+ * Zhuang tone three is Cyrillic ze
+ * Zhuang tone four is Cyrillic che
+ x (latin small letter tone two - 01A8)
+ x (latin small letter tone five - 01BD)
+ x (cyrillic small letter ze - 0437)
+ x (cyrillic small letter che - 0447)
+ x (cyrillic small letter soft sign - 044C)
+0186 LATIN CAPITAL LETTER OPEN O
+ * typographically a turned C
+ * African
+ x (latin small letter open o - 0254)
+0187 LATIN CAPITAL LETTER C WITH HOOK
+0188 LATIN SMALL LETTER C WITH HOOK
+ * African
+0189 LATIN CAPITAL LETTER AFRICAN D *
+ * Ewe
+ x (latin capital letter eth - 00D0)
+ x (latin capital letter d with stroke - 0110)
+ x (latin small letter d with tail - 0256)
+018A LATIN CAPITAL LETTER D WITH HOOK
+ * Pan-Nigerian alphabet
+ x (latin small letter d with hook - 0257)
+018B LATIN CAPITAL LETTER D WITH TOPBAR
+018C LATIN SMALL LETTER D WITH TOPBAR
+ * former-Soviet minority language scripts
+018D LATIN SMALL LETTER TURNED DELTA
+ = reversed Polish-hook o
+ * archaic phonetic for labialized alveolar fricative
+ * recommended spellings 007A 02B7 or 007A 032B
+018E LATIN CAPITAL LETTER REVERSED E
+ = LATIN CAPITAL LETTER TURNED E
+ * Pan-Nigerian alphabet
+ * lowercase is 01DD
+018F LATIN CAPITAL LETTER SCHWA
+ * Azerbaijani, ...
+ x (latin small letter schwa - 0259)
+ x (cyrillic capital letter schwa - 04D8)
+0190 LATIN CAPITAL LETTER OPEN E
+ = LATIN CAPITAL LETTER EPSILON
+ * African
+ x (latin small letter open e - 025B)
+ x (euler constant - 2107)
+0191 LATIN CAPITAL LETTER F WITH HOOK
+ * African
+0192 LATIN SMALL LETTER F WITH HOOK
+ = LATIN SMALL LETTER SCRIPT F
+ = Florin currency symbol (Netherlands)
+ = function symbol
+ = abbreviation convention for folder
+0193 LATIN CAPITAL LETTER G WITH HOOK
+ * African
+ x (latin small letter g with hook - 0260)
+0194 LATIN CAPITAL LETTER GAMMA
+ * African
+ x (latin small letter gamma - 0263)
+0195 LATIN SMALL LETTER HV (hwair)
+ * Gothic transliteration
+ * uppercase is 01F6
+0196 LATIN CAPITAL LETTER IOTA
+ * African
+ x (latin small letter iota - 0269)
+0197 LATIN CAPITAL LETTER I WITH STROKE
+ = barred i, i bar
+ * African
+ * ISO 6438 gives lowercase as 026A, not 0268
+ x (latin letter small capital i - 026A)
+0198 LATIN CAPITAL LETTER K WITH HOOK
+0199 LATIN SMALL LETTER K WITH HOOK
+ * Hausa, Pan-Nigerian alphabet
+019A LATIN SMALL LETTER L WITH BAR
+ = barred l
+ * Americanist phonetic usage for 026C
+ x (latin small letter l with stroke - 0142)
+019B LATIN SMALL LETTER LAMBDA WITH STROKE
+ = barred lambda, lambda bar
+ * Americanist phonetic usage
+019C LATIN CAPITAL LETTER TURNED M
+ * Zhuang
+ x (latin small letter turned m - 026F)
+019D LATIN CAPITAL LETTER N WITH LEFT HOOK
+ * African
+ x (latin small letter n with left hook - 0272)
+019E LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ * archaic phonetic for Japanese 3093
+ * recommended spelling for syllabic n is 006E 0329
+ * Lakota (indicates nasalization of vowel)
+ x (latin capital letter n with long right leg - 0220)
+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE *
+ = barred o, o bar
+ * lowercase is 0275
+ * African
+ x (cyrillic capital letter barred o - 04E8)
+01A0 LATIN CAPITAL LETTER O WITH HORN
+ : 004F 031B
+01A1 LATIN SMALL LETTER O WITH HORN
+ * Vietnamese
+ : 006F 031B
+01A2 LATIN CAPITAL LETTER OI (gha)
+01A3 LATIN SMALL LETTER OI (gha)
+ = gha
+ * Pan-Turkic Latin alphabets
+01A4 LATIN CAPITAL LETTER P WITH HOOK
+01A5 LATIN SMALL LETTER P WITH HOOK
+ * African
+01A6 LATIN LETTER YR *
+ * Old Norse
+ * from German Standard DIN 31624 and ISO 5246-2
+ * lowercase is 0280
+01A7 LATIN CAPITAL LETTER TONE TWO
+01A8 LATIN SMALL LETTER TONE TWO
+ * Zhuang
+ * typographically a reversed S
+ x (latin small letter tone six - 0185)
+01A9 LATIN CAPITAL LETTER ESH
+ * African
+ x (latin small letter esh - 0283)
+ x (greek capital letter sigma - 03A3)
+01AA LATIN LETTER REVERSED ESH LOOP
+ * archaic phonetic for labialized palatoalveolar or palatal fricative
+ * Twi
+ * recommended spellings 0283 02B7, 00E7 02B7, 0068 0265, etc.
+01AB LATIN SMALL LETTER T WITH PALATAL HOOK
+ * archaic phonetic for palatalized alveolar or dental stop
+ * recommended spelling 0074 02B2
+01AC LATIN CAPITAL LETTER T WITH HOOK
+ * a glyph variant with hook at the right also occurs
+01AD LATIN SMALL LETTER T WITH HOOK
+ * African
+01AE LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+ * African
+ x (latin small letter t with retroflex hook - 0288)
+01AF LATIN CAPITAL LETTER U WITH HORN
+ : 0055 031B
+01B0 LATIN SMALL LETTER U WITH HORN
+ * Vietnamese
+ : 0075 031B
+01B1 LATIN CAPITAL LETTER UPSILON
+ * African
+ * typographically based on turned capital Greek omega
+ x (latin small letter upsilon - 028A)
+ x (inverted ohm sign - 2127)
+01B2 LATIN CAPITAL LETTER V WITH HOOK
+ = LATIN CAPITAL LETTER SCRIPT V
+ * African
+ x (latin small letter v with hook - 028B)
+01B3 LATIN CAPITAL LETTER Y WITH HOOK
+ * a glyph variant with hook at the right also occurs
+01B4 LATIN SMALL LETTER Y WITH HOOK
+ * Bini, Esoko, and other Edo languages in West Africa
+01B5 LATIN CAPITAL LETTER Z WITH STROKE
+01B6 LATIN SMALL LETTER Z WITH STROKE
+ = barred z, z bar
+ * Pan-Turkic Latin orthography
+ * handwritten variant of Latin "z"
+ x (latin small letter z - 007A)
+01B7 LATIN CAPITAL LETTER EZH
+ * African, Skolt Sami
+ * lowercase is 0292
+ x (latin capital letter yogh - 021C)
+ x (cyrillic capital letter abkhasian dze - 04E0)
+01B8 LATIN CAPITAL LETTER EZH REVERSED
+01B9 LATIN SMALL LETTER EZH REVERSED
+ * archaic phonetic for voiced pharyngeal fricative
+ * sometimes typographically rendered with a turned digit 3
+ * recommended spelling 0295
+ x (latin letter pharyngeal voiced fricative - 0295)
+ x (arabic letter ain - 0639)
+01BA LATIN SMALL LETTER EZH WITH TAIL
+ * archaic phonetic for labialized voiced palatoalveolar or palatal fricative
+ * Twi
+ * recommended spellings 0292 02B7 or 006A 02B7
+01BB LATIN LETTER TWO WITH STROKE
+ * archaic phonetic for [dz] affricate
+ * recommended spellings 0292 or 0064 007A
+01BC LATIN CAPITAL LETTER TONE FIVE
+01BD LATIN SMALL LETTER TONE FIVE
+ * Zhuang
+ x (latin small letter tone six - 0185)
+01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+ * archaic phonetic for [ts] affricate
+ * recommended spelling 0074 0073
+ * letter form is actually derived from ligation of ts, rather than inverted glottal stop
+01BF LATIN LETTER WYNN
+ = wen
+ * Runic letter borrowed into Latin script
+ * replaced by "w" in modern transcriptions of Old English
+ * uppercase is 01F7
+ x (runic letter wunjo wynn w - 16B9)
+@ African letters for clicks
+01C0 LATIN LETTER DENTAL CLICK
+ = pipe
+ * Khoisan tradition
+ * "c" in Zulu orthography
+ x (solidus - 002F)
+ x (vertical line - 007C)
+ x (latin small letter turned t - 0287)
+ x (divides - 2223)
+01C1 LATIN LETTER LATERAL CLICK
+ = double pipe
+ * Khoisan tradition
+ * "x" in Zulu orthography
+ x (latin letter inverted glottal stop - 0296)
+ x (parallel to - 2225)
+01C2 LATIN LETTER ALVEOLAR CLICK
+ = double-barred pipe
+ * Khoisan tradition
+ x (not equal to - 2260)
+01C3 LATIN LETTER RETROFLEX CLICK
+ = LATIN LETTER EXCLAMATION MARK
+ * Khoisan tradition
+ * "q" in Zulu orthography
+ x (exclamation mark - 0021)
+ x (latin letter stretched c - 0297)
+@ Croatian digraphs matching Serbian Cyrillic letters
+01C4 LATIN CAPITAL LETTER DZ WITH CARON
+ # 0044 017D
+01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ # 0044 017E
+01C6 LATIN SMALL LETTER DZ WITH CARON
+ x (cyrillic small letter dzhe - 045F)
+ # 0064 017E
+01C7 LATIN CAPITAL LETTER LJ
+ # 004C 004A
+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ # 004C 006A
+01C9 LATIN SMALL LETTER LJ
+ x (cyrillic small letter lje - 0459)
+ # 006C 006A
+01CA LATIN CAPITAL LETTER NJ
+ # 004E 004A
+01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ # 004E 006A
+01CC LATIN SMALL LETTER NJ
+ x (cyrillic small letter nje - 045A)
+ # 006E 006A
+@ Pinyin diacritic-vowel combinations
+01CD LATIN CAPITAL LETTER A WITH CARON
+ : 0041 030C
+01CE LATIN SMALL LETTER A WITH CARON
+ * Pinyin third tone
+ : 0061 030C
+01CF LATIN CAPITAL LETTER I WITH CARON
+ : 0049 030C
+01D0 LATIN SMALL LETTER I WITH CARON
+ * Pinyin third tone
+ : 0069 030C
+01D1 LATIN CAPITAL LETTER O WITH CARON
+ : 004F 030C
+01D2 LATIN SMALL LETTER O WITH CARON
+ * Pinyin third tone
+ : 006F 030C
+01D3 LATIN CAPITAL LETTER U WITH CARON
+ : 0055 030C
+01D4 LATIN SMALL LETTER U WITH CARON
+ * Pinyin third tone
+ : 0075 030C
+01D5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+ : 00DC 0304
+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ * Pinyin first tone
+ : 00FC 0304
+01D7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+ : 00DC 0301
+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ * Pinyin second tone
+ : 00FC 0301
+01D9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+ : 00DC 030C
+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ * Pinyin third tone
+ : 00FC 030C
+01DB LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+ : 00DC 0300
+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ * Pinyin fourth tone
+ : 00FC 0300
+@ Additions
+01DD LATIN SMALL LETTER TURNED E
+ * Pan-Nigerian alphabet
+ * all other usages of schwa are 0259
+ * uppercase is 018E
+ x (latin small letter schwa - 0259)
+01DE LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+ : 00C4 0304
+01DF LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ * Livonian, Uralicist usage
+ : 00E4 0304
+01E0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+ : 0226 0304
+01E1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ * Uralicist usage
+ : 0227 0304
+01E2 LATIN CAPITAL LETTER AE WITH MACRON (ash) *
+ : 00C6 0304
+01E3 LATIN SMALL LETTER AE WITH MACRON (ash) *
+ * Old Norse, Old English
+ : 00E6 0304
+01E4 LATIN CAPITAL LETTER G WITH STROKE
+01E5 LATIN SMALL LETTER G WITH STROKE
+ * Skolt Sami
+01E6 LATIN CAPITAL LETTER G WITH CARON
+ : 0047 030C
+01E7 LATIN SMALL LETTER G WITH CARON
+ * Skolt Sami
+ x (latin small letter g with breve - 011F)
+ : 0067 030C
+01E8 LATIN CAPITAL LETTER K WITH CARON
+ : 004B 030C
+01E9 LATIN SMALL LETTER K WITH CARON
+ * Skolt Sami
+ : 006B 030C
+01EA LATIN CAPITAL LETTER O WITH OGONEK
+ : 004F 0328
+01EB LATIN SMALL LETTER O WITH OGONEK
+ * Sami, Iroquoian, Old Icelandic
+ : 006F 0328
+01EC LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+ : 01EA 0304
+01ED LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ * Old Icelandic
+ : 01EB 0304
+01EE LATIN CAPITAL LETTER EZH WITH CARON
+ : 01B7 030C
+01EF LATIN SMALL LETTER EZH WITH CARON
+ * Skolt Sami
+ : 0292 030C
+01F0 LATIN SMALL LETTER J WITH CARON
+ * IPA and many languages
+ : 006A 030C
+01F1 LATIN CAPITAL LETTER DZ
+ # 0044 005A
+01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ # 0044 007A
+01F3 LATIN SMALL LETTER DZ
+ # 0064 007A
+01F4 LATIN CAPITAL LETTER G WITH ACUTE
+ : 0047 0301
+01F5 LATIN SMALL LETTER G WITH ACUTE
+ * Macedonian and Serbian transliteration
+ : 0067 0301
+01F6 LATIN CAPITAL LETTER HWAIR
+ * lowercase is 0195
+01F7 LATIN CAPITAL LETTER WYNN
+ = wen
+ * lowercase is 01BF
+01F8 LATIN CAPITAL LETTER N WITH GRAVE
+ : 004E 0300
+01F9 LATIN SMALL LETTER N WITH GRAVE
+ * Pinyin
+ : 006E 0300
+01FA LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+ : 00C5 0301
+01FB LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ : 00E5 0301
+01FC LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
+ : 00C6 0301
+01FD LATIN SMALL LETTER AE WITH ACUTE (ash) *
+ : 00E6 0301
+01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+ : 00D8 0301
+01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ : 00F8 0301
+@ Additions for Slovenian and Croatian
+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+ : 0041 030F
+0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ : 0061 030F
+0202 LATIN CAPITAL LETTER A WITH INVERTED BREVE
+ : 0041 0311
+0203 LATIN SMALL LETTER A WITH INVERTED BREVE
+ : 0061 0311
+0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+ : 0045 030F
+0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ : 0065 030F
+0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE
+ : 0045 0311
+0207 LATIN SMALL LETTER E WITH INVERTED BREVE
+ : 0065 0311
+0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+ : 0049 030F
+0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ : 0069 030F
+020A LATIN CAPITAL LETTER I WITH INVERTED BREVE
+ : 0049 0311
+020B LATIN SMALL LETTER I WITH INVERTED BREVE
+ : 0069 0311
+020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+ : 004F 030F
+020D LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ : 006F 030F
+020E LATIN CAPITAL LETTER O WITH INVERTED BREVE
+ : 004F 0311
+020F LATIN SMALL LETTER O WITH INVERTED BREVE
+ : 006F 0311
+0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+ : 0052 030F
+0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ : 0072 030F
+0212 LATIN CAPITAL LETTER R WITH INVERTED BREVE
+ : 0052 0311
+0213 LATIN SMALL LETTER R WITH INVERTED BREVE
+ : 0072 0311
+0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+ : 0055 030F
+0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ : 0075 030F
+0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE
+ : 0055 0311
+0217 LATIN SMALL LETTER U WITH INVERTED BREVE
+ : 0075 0311
+@ Additions for Romanian
+0218 LATIN CAPITAL LETTER S WITH COMMA BELOW *
+ : 0053 0326
+0219 LATIN SMALL LETTER S WITH COMMA BELOW *
+ * Romanian, when distinct comma below form is required
+ x (latin small letter s with cedilla - 015F)
+ : 0073 0326
+021A LATIN CAPITAL LETTER T WITH COMMA BELOW *
+ : 0054 0326
+021B LATIN SMALL LETTER T WITH COMMA BELOW *
+ * Romanian, when distinct comma below form is required
+ x (latin small letter t with cedilla - 0163)
+ : 0074 0326
+@ Miscellaneous additions
+021C LATIN CAPITAL LETTER YOGH
+ x (latin capital letter ezh - 01B7)
+021D LATIN SMALL LETTER YOGH
+ * Middle English, Scots
+ x (latin small letter ezh - 0292)
+ x (ounce sign - 2125)
+021E LATIN CAPITAL LETTER H WITH CARON
+ : 0048 030C
+021F LATIN SMALL LETTER H WITH CARON
+ * Finnish Romany
+ : 0068 030C
+0220 LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+ * Lakota
+ x (latin small letter n with long right leg - 019E)
+0221 LATIN SMALL LETTER D WITH CURL
+ * phonetic use in Sinology
+0222 LATIN CAPITAL LETTER OU
+0223 LATIN SMALL LETTER OU
+ * Algonquin, Huron
+ x (digit eight - 0038)
+0224 LATIN CAPITAL LETTER Z WITH HOOK
+0225 LATIN SMALL LETTER Z WITH HOOK
+ * Middle High German
+0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
+ : 0041 0307
+0227 LATIN SMALL LETTER A WITH DOT ABOVE
+ * Uralicist usage
+ : 0061 0307
+0228 LATIN CAPITAL LETTER E WITH CEDILLA
+ : 0045 0327
+0229 LATIN SMALL LETTER E WITH CEDILLA
+ : 0065 0327
+@ Additions for Livonian
+022A LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+ : 00D6 0304
+022B LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ * Livonian
+ : 00F6 0304
+022C LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+ : 00D5 0304
+022D LATIN SMALL LETTER O WITH TILDE AND MACRON
+ * Livonian
+ : 00F5 0304
+022E LATIN CAPITAL LETTER O WITH DOT ABOVE
+ : 004F 0307
+022F LATIN SMALL LETTER O WITH DOT ABOVE
+ * Livonian
+ : 006F 0307
+0230 LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+ : 022E 0304
+0231 LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ * Livonian
+ : 022F 0304
+0232 LATIN CAPITAL LETTER Y WITH MACRON
+ : 0059 0304
+0233 LATIN SMALL LETTER Y WITH MACRON
+ * Livonian, Cornish
+ : 0079 0304
+@ Additions for Sinology
+0234 LATIN SMALL LETTER L WITH CURL
+0235 LATIN SMALL LETTER N WITH CURL
+0236 LATIN SMALL LETTER T WITH CURL
+@ Miscellaneous additions
+0237 LATIN SMALL LETTER DOTLESS J
+ x (mathematical italic small dotless j - 1D6A5)
+0238 LATIN SMALL LETTER DB DIGRAPH
+ * used in Africanist linguistics
+0239 LATIN SMALL LETTER QP DIGRAPH
+ * used in Africanist linguistics
+023A LATIN CAPITAL LETTER A WITH STROKE
+ * Sencoten
+023B LATIN CAPITAL LETTER C WITH STROKE
+ * Sencoten
+023C LATIN SMALL LETTER C WITH STROKE
+ * used in Americanist linguistics
+023D LATIN CAPITAL LETTER L WITH BAR
+ * Sencoten
+023E LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+ * Sencoten
+023F LATIN SMALL LETTER S WITH SWASH TAIL
+0240 LATIN SMALL LETTER Z WITH SWASH TAIL
+0241 LATIN CAPITAL LETTER GLOTTAL STOP
+ * lowercase is 0294
+@@ 0250 IPA Extensions 02AF
+@ IPA extensions
+@+ IPA includes basic Latin letters and a number of Latin or Greek letters from other blocks.
+ x (latin small letter ae - 00E6)
+ x (latin small letter c with cedilla - 00E7)
+ x (latin small letter eth - 00F0)
+ x (latin small letter o with stroke - 00F8)
+ x (latin small letter h with stroke - 0127)
+ x (latin small letter eng - 014B)
+ x (latin small ligature oe - 0153)
+ x (greek small letter beta - 03B2)
+ x (greek small letter theta - 03B8)
+ x (greek small letter lamda - 03BB)
+ x (greek small letter chi - 03C7)
+0250 LATIN SMALL LETTER TURNED A
+ * low central unrounded vowel
+0251 LATIN SMALL LETTER ALPHA
+ = LATIN SMALL LETTER SCRIPT A
+ * low back unrounded vowel
+ x (greek small letter alpha - 03B1)
+0252 LATIN SMALL LETTER TURNED ALPHA
+ * low back rounded vowel
+0253 LATIN SMALL LETTER B WITH HOOK
+ * implosive bilabial stop
+ * Pan-Nigerian alphabet
+ x (latin capital letter b with hook - 0181)
+0254 LATIN SMALL LETTER OPEN O
+ * typographically a turned c
+ * lower-mid back rounded vowel
+ x (latin capital letter open o - 0186)
+0255 LATIN SMALL LETTER C WITH CURL
+ * voiceless alveolo-palatal laminal fricative
+ * used in transcription of Mandarin Chinese
+ * sound spelled with 015B in Polish
+0256 LATIN SMALL LETTER D WITH TAIL
+ = LATIN SMALL LETTER D RETROFLEX HOOK
+ * voiced retroflex stop
+ x (latin capital letter african d - 0189)
+0257 LATIN SMALL LETTER D WITH HOOK
+ * implosive dental or alveolar stop
+ * Ewe, Pan-Nigerian alphabet
+ x (latin capital letter d with hook - 018A)
+0258 LATIN SMALL LETTER REVERSED E
+ * upper-mid central unrounded vowel
+0259 LATIN SMALL LETTER SCHWA
+ * mid-central unrounded vowel
+ * variant uppercase form 018E is associated with 01DD
+ x (latin capital letter schwa - 018F)
+ x (latin small letter turned e - 01DD)
+ x (cyrillic small letter schwa - 04D9)
+025A LATIN SMALL LETTER SCHWA WITH HOOK
+ * rhotacized schwa
+025B LATIN SMALL LETTER OPEN E
+ = LATIN SMALL LETTER EPSILON
+ * lower-mid front unrounded vowel
+ x (latin capital letter open e - 0190)
+ x (greek small letter epsilon - 03B5)
+025C LATIN SMALL LETTER REVERSED OPEN E
+ * lower-mid central unrounded vowel
+025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+ * rhotacized lower-mid central vowel
+025E LATIN SMALL LETTER CLOSED REVERSED OPEN E
+ = LATIN SMALL LETTER CLOSED REVERSED EPSILON
+ * lower-mid central rounded vowel
+025F LATIN SMALL LETTER DOTLESS J WITH STROKE
+ * voiced palatal stop
+ * typographically a turned f, but better thought of as a form of j
+ * "gy" in Hungarian orthography
+ * also archaic phonetic for palatoalveolar affricate 02A4
+0260 LATIN SMALL LETTER G WITH HOOK
+ * implosive velar stop
+ x (latin capital letter g with hook - 0193)
+0261 LATIN SMALL LETTER SCRIPT G
+ * voiced velar stop
+ x (latin small letter g - 0067)
+0262 LATIN LETTER SMALL CAPITAL G
+ * voiced uvular stop
+0263 LATIN SMALL LETTER GAMMA
+ * voiced velar fricative
+ x (latin capital letter gamma - 0194)
+ x (greek small letter gamma - 03B3)
+0264 LATIN SMALL LETTER RAMS HORN
+ = LATIN SMALL LETTER BABY GAMMA
+ * upper-mid back unrounded vowel
+0265 LATIN SMALL LETTER TURNED H
+ * voiced rounded palatal approximant
+0266 LATIN SMALL LETTER H WITH HOOK
+ * breathy-voiced glottal fricative
+ x (modifier letter small h with hook - 02B1)
+0267 LATIN SMALL LETTER HENG WITH HOOK
+ * voiceless coarticulated velar and palatoalveolar fricative
+ * "tj" or "kj" or "sj" in some Swedish dialects
+0268 LATIN SMALL LETTER I WITH STROKE
+ = barred i, i bar
+ * high central unrounded vowel
+ * ISO 6438 gives lowercase of 0197 as 026A, not 0268
+0269 LATIN SMALL LETTER IOTA
+ * semi-high front unrounded vowel
+@+ * obsoleted by IPA in 1989
+ * preferred use is 026A LATIN LETTER SMALL CAPITAL I
+ x (latin capital letter iota - 0196)
+ x (greek small letter iota - 03B9)
+026A LATIN LETTER SMALL CAPITAL I
+ * semi-high front unrounded vowel
+ * preferred IPA alternate for 0269
+ x (latin capital letter i with stroke - 0197)
+026B LATIN SMALL LETTER L WITH MIDDLE TILDE
+ * velarized voiced alveolar lateral approximant
+026C LATIN SMALL LETTER L WITH BELT
+ * voiceless alveolar lateral fricative
+026D LATIN SMALL LETTER L WITH RETROFLEX HOOK
+ * voiced retroflex lateral
+026E LATIN SMALL LETTER LEZH
+ * voiced lateral fricative
+ * "dhl" in Zulu orthography
+026F LATIN SMALL LETTER TURNED M
+ * high back unrounded vowel
+ x (latin capital letter turned m - 019C)
+0270 LATIN SMALL LETTER TURNED M WITH LONG LEG
+ * voiced velar approximant
+0271 LATIN SMALL LETTER M WITH HOOK
+ * voiced labiodental nasal
+0272 LATIN SMALL LETTER N WITH LEFT HOOK
+ * voiced palatal nasal
+ x (latin capital letter n with left hook - 019D)
+0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK
+ * voiced retroflex nasal
+0274 LATIN LETTER SMALL CAPITAL N
+ * voiced uvular nasal
+0275 LATIN SMALL LETTER BARRED O
+ = o bar
+ * rounded mid-central vowel, i.e. rounded schwa
+ * uppercase is 019F
+ x (greek small letter theta - 03B8)
+ x (cyrillic small letter fita - 0473)
+ x (cyrillic small letter barred o - 04E9)
+0276 LATIN LETTER SMALL CAPITAL OE
+ * low front rounded vowel
+ x (latin small ligature oe - 0153)
+0277 LATIN SMALL LETTER CLOSED OMEGA
+ * semi-high back rounded vowel
+@+ * obsoleted by IPA in 1989
+ * preferred use is 028A latin small letter upsilon
+0278 LATIN SMALL LETTER PHI
+ * voiceless bilabial fricative
+ x (greek small letter phi - 03C6)
+0279 LATIN SMALL LETTER TURNED R
+ * voiced alveolar approximant
+ x (modifier letter small turned r - 02B4)
+027A LATIN SMALL LETTER TURNED R WITH LONG LEG
+ * voiced lateral flap
+027B LATIN SMALL LETTER TURNED R WITH HOOK
+ * voiced retroflex approximant
+ x (modifier letter small turned r with hook - 02B5)
+027C LATIN SMALL LETTER R WITH LONG LEG
+ * voiced strident apico-alveolar trill
+@+ * obsoleted by IPA in 1989
+ * sound spelled with 0159 in Czech
+ * preferred phonetic representation for Czech is 0072 031D
+ * in current use in Gaelic types (as glyph variant of 0072)
+027D LATIN SMALL LETTER R WITH TAIL
+ * voiced retroflex flap
+027E LATIN SMALL LETTER R WITH FISHHOOK
+ * voiced alveolar flap or tap
+027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+ = long leg turned iota (a misnomer)
+ * apical dental vowel
+ * used by linguists working on Chinese and other Sino-Tibetan languages
+ * IPA spelling - 007A 0329
+0280 LATIN LETTER SMALL CAPITAL R *
+ * voiced uvular trill
+ * Germanic, Old Norse
+ * uppercase is 01A6
+0281 LATIN LETTER SMALL CAPITAL INVERTED R
+ * voiced uvular fricative or approximant
+ x (modifier letter small capital inverted r - 02B6)
+0282 LATIN SMALL LETTER S WITH HOOK
+ * voiceless retroflex fricative
+0283 LATIN SMALL LETTER ESH
+ * voiceless postalveolar fricative
+ x (latin capital letter esh - 01A9)
+ x (integral - 222B)
+0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+ * implosive palatal stop
+ * typographically based on 025F, not on 0283
+0285 LATIN SMALL LETTER SQUAT REVERSED ESH
+ * apical retroflex vowel
+ * used by linguists working on Chinese and other Sino-Tibetan languages
+ * IPA spelling - 0290 0329
+ * in origin 027F plus the retroflex hook 0322, despite its name
+0286 LATIN SMALL LETTER ESH WITH CURL
+ * palatalized voiceless postalveolar fricative
+ * suggested spelling - 0283 02B2
+0287 LATIN SMALL LETTER TURNED T
+ * dental click (sound of "tsk tsk")
+ x (latin letter dental click - 01C0)
+0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ * voiceless retroflex stop
+ x (latin capital letter t with retroflex hook - 01AE)
+0289 LATIN SMALL LETTER U BAR
+ * high central rounded vowel
+028A LATIN SMALL LETTER UPSILON
+ * semi-high back rounded vowel
+ * preferred IPA alternate to 0277
+ x (latin capital letter upsilon - 01B1)
+ x (greek small letter upsilon - 03C5)
+028B LATIN SMALL LETTER V WITH HOOK
+ = LATIN SMALL LETTER SCRIPT V
+ * voiced labiodental approximant
+ x (latin capital letter v with hook - 01B2)
+ x (greek small letter upsilon - 03C5)
+028C LATIN SMALL LETTER TURNED V
+ = caret, wedge
+ * lower-mid back unrounded vowel
+ x (greek capital letter lamda - 039B)
+ x (caret - 2038)
+ x (logical and - 2227)
+028D LATIN SMALL LETTER TURNED W
+ * voiceless rounded labiovelar approximant
+028E LATIN SMALL LETTER TURNED Y
+ * voiced lateral approximant
+028F LATIN LETTER SMALL CAPITAL Y
+ * semi-high front rounded vowel
+0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+ * voiced retroflex fricative
+0291 LATIN SMALL LETTER Z WITH CURL
+ * voiced alveolo-palatal laminal fricative
+ * sound spelled with 017A in Polish
+0292 LATIN SMALL LETTER EZH
+ = dram
+ * voiced postalveolar fricative
+ * mistakenly named yogh in Unicode 1.0
+ * uppercase is 01B7
+ * Skolt Sami
+ x (latin small letter yogh - 021D)
+ x (cyrillic small letter abkhasian dze - 04E1)
+ x (ounce sign - 2125)
+0293 LATIN SMALL LETTER EZH WITH CURL
+ * palatalized voiced postalveolar fricative
+0294 LATIN LETTER GLOTTAL STOP
+ * uppercase is 0241
+ x (modifier letter glottal stop - 02C0)
+0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+ = LATIN LETTER REVERSED GLOTTAL STOP
+ * voiced pharyngeal fricative
+ * ain
+ x (latin small letter ezh reversed - 01B9)
+ x (modifier letter reversed glottal stop - 02C1)
+0296 LATIN LETTER INVERTED GLOTTAL STOP
+ * lateral click
+ x (latin letter lateral click - 01C1)
+0297 LATIN LETTER STRETCHED C
+ * palatal (or alveolar) click
+ x (latin letter retroflex click - 01C3)
+ x (complement - 2201)
+0298 LATIN LETTER BILABIAL CLICK
+ = LATIN LETTER BULLSEYE
+ x (circled dot operator - 2299)
+0299 LATIN LETTER SMALL CAPITAL B
+ * bilabial trill
+029A LATIN SMALL LETTER CLOSED OPEN E
+ = LATIN SMALL LETTER CLOSED EPSILON
+ * lower-mid front rounded vowel
+ * non-IPA alternate for the preferred 0153
+029B LATIN LETTER SMALL CAPITAL G WITH HOOK
+ * voiced uvular implosive
+029C LATIN LETTER SMALL CAPITAL H
+ * voiceless epiglottal fricative
+029D LATIN SMALL LETTER J WITH CROSSED-TAIL
+ * voiced palatal fricative
+029E LATIN SMALL LETTER TURNED K
+ * proposed for velar click
+@+ * withdrawn by IPA in 1970
+029F LATIN LETTER SMALL CAPITAL L
+ * velar lateral approximant
+02A0 LATIN SMALL LETTER Q WITH HOOK
+ * voiceless uvular implosive
+02A1 LATIN LETTER GLOTTAL STOP WITH STROKE
+ * voiced epiglottal stop
+02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+ * voiced epiglottal fricative
+02A3 LATIN SMALL LETTER DZ DIGRAPH
+ * voiced dental affricate
+02A4 LATIN SMALL LETTER DEZH DIGRAPH
+ * voiced postalveolar affricate
+02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+ * voiced alveolo-palatal affricate
+02A6 LATIN SMALL LETTER TS DIGRAPH
+ * voiceless dental affricate
+02A7 LATIN SMALL LETTER TESH DIGRAPH
+ * voiceless postalveolar affricate
+02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL
+ * voiceless alveolo-palatal affricate
+@ IPA characters for disordered speech
+02A9 LATIN SMALL LETTER FENG DIGRAPH
+ * velopharyngeal fricative
+02AA LATIN SMALL LETTER LS DIGRAPH
+ * lateral alveolar fricative (lisp)
+02AB LATIN SMALL LETTER LZ DIGRAPH
+ * voiced lateral alveolar fricative
+02AC LATIN LETTER BILABIAL PERCUSSIVE
+ * audible lip smack
+02AD LATIN LETTER BIDENTAL PERCUSSIVE
+ * audible teeth gnashing
+@ Additions for Sinology
+02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK
+02AF LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+@@ 02B0 Spacing Modifier Letters 02FF
+@ Latin superscript modifier letters
+02B0 MODIFIER LETTER SMALL H
+ * aspiration
+ # <super> 0068
+02B1 MODIFIER LETTER SMALL H WITH HOOK
+ * breathy voiced, murmured
+ x (latin small letter h with hook - 0266)
+ x (combining diaeresis below - 0324)
+ # <super> 0266
+02B2 MODIFIER LETTER SMALL J
+ * palatalization
+ x (combining palatalized hook below - 0321)
+ # <super> 006A
+02B3 MODIFIER LETTER SMALL R
+ # <super> 0072
+02B4 MODIFIER LETTER SMALL TURNED R
+ x (latin small letter turned r - 0279)
+ # <super> 0279
+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK
+ x (latin small letter turned r with hook - 027B)
+ # <super> 027B
+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R
+ * preceding four used for r-coloring or r-offglides
+ x (latin letter small capital inverted r - 0281)
+ # <super> 0281
+02B7 MODIFIER LETTER SMALL W
+ * labialization
+ x (combining inverted double arch below - 032B)
+ # <super> 0077
+02B8 MODIFIER LETTER SMALL Y
+ * palatalization
+ * common Americanist usage for 02B2
+ # <super> 0079
+@ Miscellaneous phonetic modifiers
+02B9 MODIFIER LETTER PRIME
+ * primary stress, emphasis
+ * transliteration of mjagkij znak (Cyrillic soft sign: palatalization)
+ x (apostrophe - 0027)
+ x (acute accent - 00B4)
+ x (modifier letter acute accent - 02CA)
+ x (combining acute accent - 0301)
+ x (greek numeral sign - 0374)
+ x (prime - 2032)
+02BA MODIFIER LETTER DOUBLE PRIME
+ * exaggerated stress, contrastive stress
+ * transliteration of tverdyj znak (Cyrillic hard sign: no palatalization)
+ x (quotation mark - 0022)
+ x (combining double acute accent - 030B)
+ x (double prime - 2033)
+02BB MODIFIER LETTER TURNED COMMA
+ * typographical alternate for 02BD or 02BF
+ x (combining turned comma above - 0312)
+ x (left single quotation mark - 2018)
+02BC MODIFIER LETTER APOSTROPHE
+ = apostrophe
+ * glottal stop, glottalization, ejective
+ * spacing clone of Greek smooth breathing mark
+ * many languages use this as a letter of their alphabets
+ * 2019 is the preferred character for a punctuation apostrophe
+ x (apostrophe - 0027)
+ x (combining comma above - 0313)
+ x (combining comma above right - 0315)
+ x (armenian apostrophe - 055A)
+ x (right single quotation mark - 2019)
+02BD MODIFIER LETTER REVERSED COMMA
+ * weak aspiration
+ * spacing clone of Greek rough breathing mark
+ x (combining reversed comma above - 0314)
+ x (armenian modifier letter left half ring - 0559)
+ x (single high-reversed-9 quotation mark - 201B)
+02BE MODIFIER LETTER RIGHT HALF RING
+ * transliteration of Arabic hamza (glottal stop)
+ x (armenian apostrophe - 055A)
+ x (arabic letter hamza - 0621)
+02BF MODIFIER LETTER LEFT HALF RING
+ * transliteration of Arabic ain (voiced pharyngeal fricative)
+ x (armenian modifier letter left half ring - 0559)
+ x (arabic letter ain - 0639)
+02C0 MODIFIER LETTER GLOTTAL STOP
+ * ejective or glottalized
+ * typographical alternate for 02BC or 02BE
+ x (latin letter glottal stop - 0294)
+ x (combining hook above - 0309)
+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP
+ * typographical alternate for 02BF
+ x (latin letter pharyngeal voiced fricative - 0295)
+02C2 MODIFIER LETTER LEFT ARROWHEAD
+ * fronted articulation
+02C3 MODIFIER LETTER RIGHT ARROWHEAD
+ * backed articulation
+02C4 MODIFIER LETTER UP ARROWHEAD
+ * raised articulation
+ x (circumflex accent - 005E)
+ x (up arrowhead - 2303)
+02C5 MODIFIER LETTER DOWN ARROWHEAD
+ * lowered articulation
+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
+ * rising-falling tone, falling tone, secondary stress, etc.
+ x (circumflex accent - 005E)
+ x (combining circumflex accent - 0302)
+02C7 CARON (Mandarin Chinese third tone)
+ = hacek
+ * falling-rising tone
+ * Mandarin Chinese third tone
+ x (combining caron - 030C)
+02C8 MODIFIER LETTER VERTICAL LINE
+ * primary stress, downstep
+ * precedes letter or syllable modified
+ x (apostrophe - 0027)
+ x (combining vertical line above - 030D)
+02C9 MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+ * high level tone
+ * precedes or follows letter or syllable modified
+ * Mandarin Chinese first tone
+ x (macron - 00AF)
+ x (combining macron - 0304)
+02CA MODIFIER LETTER ACUTE ACCENT (Mandarin Chinese second tone)
+ * high-rising tone (IPA), high tone, primary stress
+ * Mandarin Chinese second tone
+ x (acute accent - 00B4)
+ x (modifier letter prime - 02B9)
+ x (combining acute accent - 0301)
+ x (greek numeral sign - 0374)
+ x (armenian emphasis mark - 055B)
+02CB MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone)
+ * high-falling tone (IPA), low tone, secondary or tertiary stress
+ * Mandarin Chinese fourth tone
+ x (grave accent - 0060)
+ x (combining grave accent - 0300)
+ x (armenian comma - 055D)
+02CC MODIFIER LETTER LOW VERTICAL LINE
+ * secondary stress
+ * precedes letter or syllable modified
+ x (combining vertical line below - 0329)
+02CD MODIFIER LETTER LOW MACRON
+ * low level tone
+ x (low line - 005F)
+ x (combining macron below - 0331)
+02CE MODIFIER LETTER LOW GRAVE ACCENT
+ * low-falling tone
+02CF MODIFIER LETTER LOW ACUTE ACCENT
+ * low-rising tone
+ x (greek lower numeral sign - 0375)
+02D0 MODIFIER LETTER TRIANGULAR COLON
+ * length mark
+ x (colon - 003A)
+02D1 MODIFIER LETTER HALF TRIANGULAR COLON
+ * half-length mark
+ x (middle dot - 00B7)
+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING
+ * more rounded articulation
+02D3 MODIFIER LETTER CENTRED LEFT HALF RING
+ * less rounded articulation
+02D4 MODIFIER LETTER UP TACK
+ * vowel raising or closing
+ x (combining up tack below - 031D)
+ x (combining dot below - 0323)
+02D5 MODIFIER LETTER DOWN TACK
+ * vowel lowering or opening
+ x (combining left half ring below - 031C)
+ x (combining down tack below - 031E)
+02D6 MODIFIER LETTER PLUS SIGN
+ * advanced or fronted articulation
+ x (combining plus sign below - 031F)
+02D7 MODIFIER LETTER MINUS SIGN
+ * retracted or backed articulation
+ * glyph may have small end-serifs
+ x (combining minus sign below - 0320)
+ x (minus sign - 2212)
+@ Spacing clones of diacritics
+02D8 BREVE
+ x (combining breve - 0306)
+ # 0020 0306
+02D9 DOT ABOVE (Mandarin Chinese light tone)
+ * Mandarin Chinese fifth tone (light or neutral)
+ x (combining dot above - 0307)
+ # 0020 0307
+02DA RING ABOVE
+ x (degree sign - 00B0)
+ x (combining ring above - 030A)
+ # 0020 030A
+02DB OGONEK
+ x (combining ogonek - 0328)
+ # 0020 0328
+02DC SMALL TILDE
+ x (tilde - 007E)
+ x (combining tilde - 0303)
+ x (tilde operator - 223C)
+ # 0020 0303
+02DD DOUBLE ACUTE ACCENT
+ x (combining double acute accent - 030B)
+ # 0020 030B
+@ Additions based on 1989 IPA
+02DE MODIFIER LETTER RHOTIC HOOK
+ * rhotacization in vowel
+ * often ligated: 025A = 0259 + 02DE; 025D = 025C + 02DE
+02DF MODIFIER LETTER CROSS ACCENT
+ * Swedish grave accent
+02E0 MODIFIER LETTER SMALL GAMMA
+ * these modifier letters are occasionally used in transcription of affricates
+ # <super> 0263
+02E1 MODIFIER LETTER SMALL L
+ # <super> 006C
+02E2 MODIFIER LETTER SMALL S
+ # <super> 0073
+02E3 MODIFIER LETTER SMALL X
+ # <super> 0078
+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+ # <super> 0295
+@ Tone letters
+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR
+02E6 MODIFIER LETTER HIGH TONE BAR
+02E7 MODIFIER LETTER MID TONE BAR
+02E8 MODIFIER LETTER LOW TONE BAR
+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR
+@ Extended Bopomofo tone marks
+02EA MODIFIER LETTER YIN DEPARTING TONE MARK
+02EB MODIFIER LETTER YANG DEPARTING TONE MARK
+@ IPA modifiers
+02EC MODIFIER LETTER VOICING
+02ED MODIFIER LETTER UNASPIRATED
+@ Other modifier letter
+02EE MODIFIER LETTER DOUBLE APOSTROPHE
+ * Nenets
+@ UPA modifiers
+02EF MODIFIER LETTER LOW DOWN ARROWHEAD
+02F0 MODIFIER LETTER LOW UP ARROWHEAD
+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD
+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD
+02F3 MODIFIER LETTER LOW RING
+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT
+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+02F7 MODIFIER LETTER LOW TILDE
+02F8 MODIFIER LETTER RAISED COLON
+02F9 MODIFIER LETTER BEGIN HIGH TONE
+02FA MODIFIER LETTER END HIGH TONE
+02FB MODIFIER LETTER BEGIN LOW TONE
+02FC MODIFIER LETTER END LOW TONE
+02FD MODIFIER LETTER SHELF
+02FE MODIFIER LETTER OPEN SHELF
+02FF MODIFIER LETTER LOW LEFT ARROW
+@@ 0300 Combining Diacritical Marks 036F
+@ Ordinary diacritics
+0300 COMBINING GRAVE ACCENT (Varia)
+ = Greek varia
+ x (grave accent - 0060)
+ x (modifier letter grave accent - 02CB)
+0301 COMBINING ACUTE ACCENT (Oxia, Tonos)
+ = stress mark
+ = Greek oxia, tonos
+ x (apostrophe - 0027)
+ x (acute accent - 00B4)
+ x (modifier letter prime - 02B9)
+ x (modifier letter acute accent - 02CA)
+ x (greek tonos - 0384)
+0302 COMBINING CIRCUMFLEX ACCENT
+ = hat
+ x (circumflex accent - 005E)
+ x (modifier letter circumflex accent - 02C6)
+0303 COMBINING TILDE
+ * IPA: nasalization
+ * Vietnamese tone mark
+ x (tilde - 007E)
+ x (small tilde - 02DC)
+0304 COMBINING MACRON
+ = long
+ * distinguish from the following
+ x (macron - 00AF)
+ x (modifier letter macron - 02C9)
+0305 COMBINING OVERLINE
+ = overscore, vinculum
+ * connects on left and right
+ x (macron - 00AF)
+0306 COMBINING BREVE (Vrachy)
+ = short
+ = Greek vrachy
+ x (breve - 02D8)
+0307 COMBINING DOT ABOVE
+ = derivative (Newtonian notation)
+@+ * IPA (withdrawn in 1976): palatalization
+ x (dot above - 02D9)
+0308 COMBINING DIAERESIS (Dialytika)
+ = double dot above, umlaut
+ = Greek dialytika
+ = double derivative
+ x (diaeresis - 00A8)
+0309 COMBINING HOOK ABOVE
+ = hoi
+ * kerns left or right of circumflex over vowels
+ * Vietnamese tone mark
+ x (modifier letter glottal stop - 02C0)
+030A COMBINING RING ABOVE
+ x (degree sign - 00B0)
+ x (ring above - 02DA)
+030B COMBINING DOUBLE ACUTE ACCENT
+ * Hungarian, Chuvash
+ x (quotation mark - 0022)
+ x (modifier letter double prime - 02BA)
+ x (double acute accent - 02DD)
+030C COMBINING CARON
+ = hacek, V above
+ x (caron - 02C7)
+030D COMBINING VERTICAL LINE ABOVE
+ * this is not the Greek tonos
+ * Marshallese
+ x (modifier letter vertical line - 02C8)
+030E COMBINING DOUBLE VERTICAL LINE ABOVE
+ * Marshallese
+ x (quotation mark - 0022)
+030F COMBINING DOUBLE GRAVE ACCENT
+ * Serbian and Croatian poetics
+0310 COMBINING CANDRABINDU
+ x (devanagari sign candrabindu - 0901)
+0311 COMBINING INVERTED BREVE
+0312 COMBINING TURNED COMMA ABOVE
+ = cedilla above
+ * Latvian (but not used in decomposition)
+ x (modifier letter turned comma - 02BB)
+0313 COMBINING COMMA ABOVE (Psili)
+ = Greek psili, smooth breathing mark
+ * Americanist: ejective or glottalization
+ x (modifier letter apostrophe - 02BC)
+ x (combining cyrillic psili pneumata - 0486)
+ x (armenian apostrophe - 055A)
+0314 COMBINING REVERSED COMMA ABOVE (Dasia)
+ = Greek dasia, rough breathing mark
+ x (modifier letter reversed comma - 02BD)
+ x (combining cyrillic dasia pneumata - 0485)
+ x (armenian modifier letter left half ring - 0559)
+0315 COMBINING COMMA ABOVE RIGHT
+ x (modifier letter apostrophe - 02BC)
+0316 COMBINING GRAVE ACCENT BELOW
+0317 COMBINING ACUTE ACCENT BELOW
+0318 COMBINING LEFT TACK BELOW
+0319 COMBINING RIGHT TACK BELOW
+031A COMBINING LEFT ANGLE ABOVE
+ * IPA: unreleased stop
+031B COMBINING HORN
+ * Vietnamese
+031C COMBINING LEFT HALF RING BELOW
+ * IPA: open variety of vowel
+ x (modifier letter down tack - 02D5)
+031D COMBINING UP TACK BELOW
+ * IPA: vowel raising or closing
+ x (modifier letter up tack - 02D4)
+031E COMBINING DOWN TACK BELOW
+ * IPA: vowel lowering or opening
+ x (modifier letter down tack - 02D5)
+031F COMBINING PLUS SIGN BELOW
+ * IPA: advanced or fronted articulation
+ x (modifier letter plus sign - 02D6)
+0320 COMBINING MINUS SIGN BELOW
+ * IPA: retracted or backed articulation
+ * glyph may have small end-serifs
+ x (modifier letter minus sign - 02D7)
+0321 COMBINING PALATALIZED HOOK BELOW
+ * IPA: palatalization
+ x (modifier letter small j - 02B2)
+0322 COMBINING RETROFLEX HOOK BELOW
+ * IPA: retroflexion
+0323 COMBINING DOT BELOW
+ = nang
+ * IPA: closer variety of vowel
+ * Americanist and Indo-Europeanist: retraction or retroflexion
+ * Semiticist: velarization or pharyngealization
+ * Vietnamese tone mark
+ x (modifier letter up tack - 02D4)
+0324 COMBINING DIAERESIS BELOW
+ * IPA: breathy-voice or murmur
+ x (modifier letter small h with hook - 02B1)
+0325 COMBINING RING BELOW
+ * IPA: voiceless
+ * Madurese
+0326 COMBINING COMMA BELOW
+ * Romanian, Latvian, Livonian
+0327 COMBINING CEDILLA
+ * French, Turkish, Azerbaijani
+ x (cedilla - 00B8)
+0328 COMBINING OGONEK
+ = nasal hook
+ * Americanist: nasalization
+ * Polish, Lithuanian
+ x (ogonek - 02DB)
+0329 COMBINING VERTICAL LINE BELOW
+ * IPA: syllabic
+ * Yoruba
+ x (modifier letter low vertical line - 02CC)
+032A COMBINING BRIDGE BELOW
+ * IPA: dental
+032B COMBINING INVERTED DOUBLE ARCH BELOW
+ * IPA: labialization
+ x (modifier letter small w - 02B7)
+032C COMBINING CARON BELOW
+ * IPA: voiced
+032D COMBINING CIRCUMFLEX ACCENT BELOW
+ * Americanist: fronted articulation
+032E COMBINING BREVE BELOW
+ * Hittite transcription
+032F COMBINING INVERTED BREVE BELOW
+ * Americanist: fronted articulation (variant of 032D)
+ * Indo-Europeanist: semivowel
+0330 COMBINING TILDE BELOW
+ * IPA: creaky voice
+0331 COMBINING MACRON BELOW
+ x (low line - 005F)
+ x (modifier letter low macron - 02CD)
+0332 COMBINING LOW LINE
+ = underline, underscore
+ * connects on left and right
+ x (low line - 005F)
+0333 COMBINING DOUBLE LOW LINE
+ = double underline, double underscore
+ * connects on left and right
+ x (combining equals sign below - 0347)
+ x (double low line - 2017)
+@ Overstruck diacritics
+0334 COMBINING TILDE OVERLAY
+ * IPA: velarization or pharyngealization
+0335 COMBINING SHORT STROKE OVERLAY
+0336 COMBINING LONG STROKE OVERLAY
+0337 COMBINING SHORT SOLIDUS OVERLAY
+ = short slash overlay
+0338 COMBINING LONG SOLIDUS OVERLAY
+ = long slash overlay
+@ Additions
+0339 COMBINING RIGHT HALF RING BELOW
+033A COMBINING INVERTED BRIDGE BELOW
+033B COMBINING SQUARE BELOW
+033C COMBINING SEAGULL BELOW
+033D COMBINING X ABOVE
+033E COMBINING VERTICAL TILDE
+ * Cyrillic palatalization
+ x (combining cyrillic palatalization - 0484)
+033F COMBINING DOUBLE OVERLINE
+@ Vietnamese tone marks (deprecated)
+0340 COMBINING GRAVE TONE MARK (Vietnamese)
+ * kerns left or right of circumflex over vowels
+ : 0300 combining grave accent
+0341 COMBINING ACUTE TONE MARK (Vietnamese)
+ * kerns right of circumflex over vowels
+ : 0301 combining acute accent
+@ Additions for Greek
+0342 COMBINING GREEK PERISPOMENI
+0343 COMBINING GREEK KORONIS
+ : 0313 combining comma above
+0344 COMBINING GREEK DIALYTIKA TONOS
+ * use of this character is discouraged
+ : 0308 0301
+0345 COMBINING GREEK YPOGEGRAMMENI
+ = GREEK NON-SPACING IOTA BELOW
+ = iota subscript
+ * note special casing issues
+ x (greek ypogegrammeni - 037A)
+ x (greek capital letter iota - 0399)
+@ Additions for IPA
+0346 COMBINING BRIDGE ABOVE
+ * IPA: dentolabial
+ x (combining wide bridge above - 20E9)
+0347 COMBINING EQUALS SIGN BELOW
+ * IPA: alveolar
+0348 COMBINING DOUBLE VERTICAL LINE BELOW
+ * IPA: strong articulation
+0349 COMBINING LEFT ANGLE BELOW
+ * IPA: weak articulation
+034A COMBINING NOT TILDE ABOVE
+ * IPA: denasal
+@ IPA diacritics for disordered speech
+034B COMBINING HOMOTHETIC ABOVE
+ * IPA: nasal escape
+034C COMBINING ALMOST EQUAL TO ABOVE
+ * IPA: velopharyngeal friction
+034D COMBINING LEFT RIGHT ARROW BELOW
+ * IPA: labial spreading
+034E COMBINING UPWARDS ARROW BELOW
+ * IPA: whistled articulation
+@ Grapheme joiner
+034F COMBINING GRAPHEME JOINER
+ = CGJ
+ * has no visible glyph
+ * indicates that adjoining characters are to be treated as a graphemic unit
+@ Additions for the Uralic Phonetic Alphabet
+0350 COMBINING RIGHT ARROWHEAD ABOVE
+0351 COMBINING LEFT HALF RING ABOVE
+0352 COMBINING FERMATA
+0353 COMBINING X BELOW
+0354 COMBINING LEFT ARROWHEAD BELOW
+0355 COMBINING RIGHT ARROWHEAD BELOW
+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+0357 COMBINING RIGHT HALF RING ABOVE
+@ Miscellaneous additions
+0358 COMBINING DOT ABOVE RIGHT
+ * Latin transliterations of the Southern Min dialects of Chinese
+0359 COMBINING ASTERISK BELOW
+035A COMBINING DOUBLE RING BELOW
+ * Kharoshthi transliteration
+035B COMBINING ZIGZAG ABOVE
+ * Latin abbreviation, Lithuanian phonetics and mediaevalist transcriptions
+@ Double diacritics
+035C COMBINING DOUBLE BREVE BELOW
+ = ligature tie below, papyrological hyphen
+ * a common glyph alternate connects the horizontal midpoints of the characters
+ x (combining double breve - 035D)
+ x (combining double inverted breve - 0361)
+035D COMBINING DOUBLE BREVE
+035E COMBINING DOUBLE MACRON
+035F COMBINING DOUBLE MACRON BELOW
+0360 COMBINING DOUBLE TILDE
+0361 COMBINING DOUBLE INVERTED BREVE
+ = ligature tie
+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+ * IPA: sliding articulation
+@ Medieval superscript letter diacritics
+@+ These are letter diacritics written directly above other letters. They appear primarily in medieval Germanic manuscripts, but saw some usage as late as the 19th century in some languages.
+0363 COMBINING LATIN SMALL LETTER A
+0364 COMBINING LATIN SMALL LETTER E
+0365 COMBINING LATIN SMALL LETTER I
+0366 COMBINING LATIN SMALL LETTER O
+0367 COMBINING LATIN SMALL LETTER U
+0368 COMBINING LATIN SMALL LETTER C
+0369 COMBINING LATIN SMALL LETTER D
+036A COMBINING LATIN SMALL LETTER H
+036B COMBINING LATIN SMALL LETTER M
+036C COMBINING LATIN SMALL LETTER R
+036D COMBINING LATIN SMALL LETTER T
+036E COMBINING LATIN SMALL LETTER V
+036F COMBINING LATIN SMALL LETTER X
+@@ 0370 Greek and Coptic 03FF
+@ Based on ISO 8859-7
+0374 GREEK NUMERAL SIGN (Dexia keraia)
+ = dexia keraia
+ * indicates numeric use of letters
+ x (modifier letter acute accent - 02CA)
+ : 02B9 modifier letter prime
+0375 GREEK LOWER NUMERAL SIGN (Aristeri keraia)
+ = aristeri keraia
+ * indicates numeric use of letters
+ x (modifier letter low acute accent - 02CF)
+037A GREEK YPOGEGRAMMENI
+ = iota subscript
+ x (combining greek ypogegrammeni - 0345)
+ # 0020 0345
+037E GREEK QUESTION MARK (Erotimatiko)
+ = erotimatiko
+ * sentence-final punctuation
+ * 003B is the preferred character
+ x (question mark - 003F)
+ : 003B semicolon
+0384 GREEK TONOS
+ x (acute accent - 00B4)
+ x (combining vertical line above - 030D)
+ # 0020 0301
+0385 GREEK DIALYTIKA TONOS
+ : 00A8 0301
+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS
+ : 0391 0301
+0387 GREEK ANO TELEIA
+ * functions in Greek like a semicolon
+ * 00B7 is the preferred character
+ : 00B7 middle dot
+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS
+ : 0395 0301
+0389 GREEK CAPITAL LETTER ETA WITH TONOS
+ : 0397 0301
+038A GREEK CAPITAL LETTER IOTA WITH TONOS
+ : 0399 0301
+038C GREEK CAPITAL LETTER OMICRON WITH TONOS
+ : 039F 0301
+038E GREEK CAPITAL LETTER UPSILON WITH TONOS
+ : 03A5 0301
+038F GREEK CAPITAL LETTER OMEGA WITH TONOS
+ : 03A9 0301
+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ : 03CA 0301
+0391 GREEK CAPITAL LETTER ALPHA
+0392 GREEK CAPITAL LETTER BETA
+0393 GREEK CAPITAL LETTER GAMMA
+ = gamma function
+0394 GREEK CAPITAL LETTER DELTA
+ x (increment - 2206)
+0395 GREEK CAPITAL LETTER EPSILON
+0396 GREEK CAPITAL LETTER ZETA
+0397 GREEK CAPITAL LETTER ETA
+0398 GREEK CAPITAL LETTER THETA
+0399 GREEK CAPITAL LETTER IOTA
+ = iota adscript
+039A GREEK CAPITAL LETTER KAPPA
+039B GREEK CAPITAL LETTER LAMDA
+039C GREEK CAPITAL LETTER MU
+039D GREEK CAPITAL LETTER NU
+039E GREEK CAPITAL LETTER XI
+039F GREEK CAPITAL LETTER OMICRON
+03A0 GREEK CAPITAL LETTER PI
+ x (n-ary product - 220F)
+03A1 GREEK CAPITAL LETTER RHO
+03A3 GREEK CAPITAL LETTER SIGMA
+ x (latin capital letter esh - 01A9)
+ x (n-ary summation - 2211)
+03A4 GREEK CAPITAL LETTER TAU
+03A5 GREEK CAPITAL LETTER UPSILON
+03A6 GREEK CAPITAL LETTER PHI
+03A7 GREEK CAPITAL LETTER CHI
+03A8 GREEK CAPITAL LETTER PSI
+03A9 GREEK CAPITAL LETTER OMEGA
+ x (ohm sign - 2126)
+ x (inverted ohm sign - 2127)
+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ : 0399 0308
+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ : 03A5 0308
+03AC GREEK SMALL LETTER ALPHA WITH TONOS
+ : 03B1 0301
+03AD GREEK SMALL LETTER EPSILON WITH TONOS
+ : 03B5 0301
+03AE GREEK SMALL LETTER ETA WITH TONOS
+ : 03B7 0301
+03AF GREEK SMALL LETTER IOTA WITH TONOS
+ : 03B9 0301
+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ : 03CB 0301
+03B1 GREEK SMALL LETTER ALPHA
+ x (latin small letter alpha - 0251)
+ x (proportional to - 221D)
+03B2 GREEK SMALL LETTER BETA
+ x (latin small letter sharp s - 00DF)
+ x (latin small letter b with stroke - 0180)
+03B3 GREEK SMALL LETTER GAMMA
+ x (latin small letter gamma - 0263)
+03B4 GREEK SMALL LETTER DELTA
+03B5 GREEK SMALL LETTER EPSILON
+ x (latin small letter open e - 025B)
+03B6 GREEK SMALL LETTER ZETA
+03B7 GREEK SMALL LETTER ETA
+03B8 GREEK SMALL LETTER THETA
+ x (latin small letter barred o - 0275)
+ x (cyrillic small letter fita - 0473)
+03B9 GREEK SMALL LETTER IOTA
+ x (latin small letter iota - 0269)
+ x (turned greek small letter iota - 2129)
+03BA GREEK SMALL LETTER KAPPA
+03BB GREEK SMALL LETTER LAMDA
+ = lambda
+03BC GREEK SMALL LETTER MU
+ x (micro sign - 00B5)
+03BD GREEK SMALL LETTER NU
+03BE GREEK SMALL LETTER XI
+03BF GREEK SMALL LETTER OMICRON
+03C0 GREEK SMALL LETTER PI
+ * math constant 3.141592...
+03C1 GREEK SMALL LETTER RHO
+03C2 GREEK SMALL LETTER FINAL SIGMA
+ = stigma (the Modern Greek name for this letterform)
+ * not to be confused with the actual stigma letter
+ x (greek small letter stigma - 03DB)
+03C3 GREEK SMALL LETTER SIGMA
+ * used symbolically with a numeric value 200
+03C4 GREEK SMALL LETTER TAU
+03C5 GREEK SMALL LETTER UPSILON
+ x (latin small letter upsilon - 028A)
+ x (latin small letter v with hook - 028B)
+03C6 GREEK SMALL LETTER PHI
+ x (latin small letter phi - 0278)
+ x (greek phi symbol - 03D5)
+ * the ordinary Greek letter, showing considerable glyph variation
+ * in mathematical contexts, the loopy glyph is preferred, to contrast with 03D5
+03C7 GREEK SMALL LETTER CHI
+03C8 GREEK SMALL LETTER PSI
+03C9 GREEK SMALL LETTER OMEGA
+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ : 03B9 0308
+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ : 03C5 0308
+03CC GREEK SMALL LETTER OMICRON WITH TONOS
+ : 03BF 0301
+03CD GREEK SMALL LETTER UPSILON WITH TONOS
+ : 03C5 0301
+03CE GREEK SMALL LETTER OMEGA WITH TONOS
+ : 03C9 0301
+@ Variant letterforms
+03D0 GREEK BETA SYMBOL
+ = GREEK SMALL LETTER CURLED BETA
+ # 03B2 greek small letter beta
+03D1 GREEK THETA SYMBOL
+ = GREEK SMALL LETTER SCRIPT THETA
+ * used as a technical symbol
+ # 03B8 greek small letter theta
+03D2 GREEK UPSILON WITH HOOK SYMBOL
+ = GREEK CAPITAL LETTER UPSILON HOOK
+ # 03A5 greek capital letter upsilon
+03D3 GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+ = GREEK CAPITAL LETTER UPSILON HOOK TONOS
+ : 03D2 0301
+03D4 GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+ = GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS
+ : 03D2 0308
+03D5 GREEK PHI SYMBOL
+ * used as a technical symbol, with a stroked glyph
+ * maps to "phi1" symbol entities
+ # 03C6 greek small letter phi
+03D6 GREEK PI SYMBOL
+ = GREEK SMALL LETTER OMEGA PI
+ * used as a technical symbol
+ * a variant of pi, looking like omega
+ # 03C0 greek small letter pi
+03D7 GREEK KAI SYMBOL
+ * used as an ampersand
+ x (coptic symbol kai - 2CE4)
+@ Archaic letters
+03D8 GREEK LETTER ARCHAIC KOPPA *
+03D9 GREEK SMALL LETTER ARCHAIC KOPPA *
+ * the Q-shaped archaic koppas are the ordinary alphabetic letters and can also be used as symbols with a numeric value of 90 in classical and pre-classical texts
+03DA GREEK LETTER STIGMA
+ * apparently in origin a cursive form of digamma
+ * the name "stigma" originally applied to a medieval sigma-tau ligature, whose shape was confusably similar to the cursive digamma
+ * used as a symbol with a numeric value of 6
+03DB GREEK SMALL LETTER STIGMA
+ x (greek small letter final sigma - 03C2)
+03DC GREEK LETTER DIGAMMA
+03DD GREEK SMALL LETTER DIGAMMA
+ * used as a symbol with a numeric value of 6
+03DE GREEK LETTER KOPPA
+03DF GREEK SMALL LETTER KOPPA
+ * used in modern Greek as a symbol with a numeric value of 90, as in the dating of legal documentation
+03E0 GREEK LETTER SAMPI
+03E1 GREEK SMALL LETTER SAMPI
+ * used as a symbol with a numeric value of 900
+@ Coptic letters derived from Demotic
+@+ For other Coptic letters see the Coptic Block.
+03E2 COPTIC CAPITAL LETTER SHEI
+03E3 COPTIC SMALL LETTER SHEI
+03E4 COPTIC CAPITAL LETTER FEI
+03E5 COPTIC SMALL LETTER FEI
+03E6 COPTIC CAPITAL LETTER KHEI
+03E7 COPTIC SMALL LETTER KHEI
+03E8 COPTIC CAPITAL LETTER HORI
+03E9 COPTIC SMALL LETTER HORI
+03EA COPTIC CAPITAL LETTER GANGIA
+03EB COPTIC SMALL LETTER GANGIA
+03EC COPTIC CAPITAL LETTER SHIMA
+03ED COPTIC SMALL LETTER SHIMA
+03EE COPTIC CAPITAL LETTER DEI
+03EF COPTIC SMALL LETTER DEI
+@ Variant letterforms
+03F0 GREEK KAPPA SYMBOL
+ = GREEK SMALL LETTER SCRIPT KAPPA
+ * used as technical symbol
+ # 03BA greek small letter kappa
+03F1 GREEK RHO SYMBOL
+ = GREEK SMALL LETTER TAILED RHO
+ * used as technical symbol
+ # 03C1 greek small letter rho
+03F2 GREEK LUNATE SIGMA SYMBOL
+ = GREEK SMALL LETTER LUNATE SIGMA
+ # 03C2 greek small letter final sigma
+@ Additional letter
+03F3 GREEK LETTER YOT
+@ Variant letterforms and symbols
+03F4 GREEK CAPITAL THETA SYMBOL
+ x (cyrillic capital letter fita - 0472)
+ # 0398 greek capital letter theta
+03F5 GREEK LUNATE EPSILON SYMBOL
+ = straight epsilon
+ x (small element of - 220A)
+ # 03B5 greek small letter epsilon
+03F6 GREEK REVERSED LUNATE EPSILON SYMBOL
+ = reversed straight epsilon
+ x (small contains as member - 220D)
+@ Additional archaic letters for Bactrian
+03F7 GREEK CAPITAL LETTER SHO
+03F8 GREEK SMALL LETTER SHO
+@ Variant letterform
+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL
+ # 03A3 greek capital letter sigma
+@ Archaic letters
+03FA GREEK CAPITAL LETTER SAN
+03FB GREEK SMALL LETTER SAN
+@ Symbol
+03FC GREEK RHO WITH STROKE SYMBOL
+ * used with abbreviations containing 03C1
+@ Editorial symbols
+03FD GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+ = antisigma
+03FE GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+ = sigma periestigmenon
+03FF GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ = antisigma periestigmenon
+@@ 0400 Cyrillic 04FF
+@ Cyrillic extensions
+0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
+ : 0415 0300
+0401 CYRILLIC CAPITAL LETTER IO
+ : 0415 0308
+0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
+0403 CYRILLIC CAPITAL LETTER GJE
+ : 0413 0301
+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405 CYRILLIC CAPITAL LETTER DZE
+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ x (latin capital letter i - 0049)
+ x (cyrillic small letter byelorussian-ukrainian i - 0456)
+ x (cyrillic letter palochka - 04C0)
+0407 CYRILLIC CAPITAL LETTER YI (Ukrainian)
+ : 0406 0308
+0408 CYRILLIC CAPITAL LETTER JE
+0409 CYRILLIC CAPITAL LETTER LJE
+040A CYRILLIC CAPITAL LETTER NJE
+040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
+040C CYRILLIC CAPITAL LETTER KJE
+ : 041A 0301
+040D CYRILLIC CAPITAL LETTER I WITH GRAVE
+ : 0418 0300
+040E CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
+ : 0423 0306
+040F CYRILLIC CAPITAL LETTER DZHE
+@ Basic Russian alphabet
+0410 CYRILLIC CAPITAL LETTER A
+0411 CYRILLIC CAPITAL LETTER BE
+ x (latin small letter b with topbar - 0183)
+0412 CYRILLIC CAPITAL LETTER VE
+0413 CYRILLIC CAPITAL LETTER GHE
+0414 CYRILLIC CAPITAL LETTER DE
+0415 CYRILLIC CAPITAL LETTER IE
+0416 CYRILLIC CAPITAL LETTER ZHE
+0417 CYRILLIC CAPITAL LETTER ZE
+0418 CYRILLIC CAPITAL LETTER I
+0419 CYRILLIC CAPITAL LETTER SHORT I
+ : 0418 0306
+041A CYRILLIC CAPITAL LETTER KA
+041B CYRILLIC CAPITAL LETTER EL
+041C CYRILLIC CAPITAL LETTER EM
+041D CYRILLIC CAPITAL LETTER EN
+041E CYRILLIC CAPITAL LETTER O
+041F CYRILLIC CAPITAL LETTER PE
+0420 CYRILLIC CAPITAL LETTER ER
+0421 CYRILLIC CAPITAL LETTER ES
+0422 CYRILLIC CAPITAL LETTER TE
+0423 CYRILLIC CAPITAL LETTER U
+ x (cyrillic capital letter uk - 0478)
+ x (cyrillic small letter straight u - 04AF)
+0424 CYRILLIC CAPITAL LETTER EF
+0425 CYRILLIC CAPITAL LETTER HA
+0426 CYRILLIC CAPITAL LETTER TSE
+0427 CYRILLIC CAPITAL LETTER CHE
+0428 CYRILLIC CAPITAL LETTER SHA
+0429 CYRILLIC CAPITAL LETTER SHCHA
+042A CYRILLIC CAPITAL LETTER HARD SIGN
+042B CYRILLIC CAPITAL LETTER YERU
+042C CYRILLIC CAPITAL LETTER SOFT SIGN
+042D CYRILLIC CAPITAL LETTER E
+042E CYRILLIC CAPITAL LETTER YU
+042F CYRILLIC CAPITAL LETTER YA
+0430 CYRILLIC SMALL LETTER A
+0431 CYRILLIC SMALL LETTER BE
+0432 CYRILLIC SMALL LETTER VE
+0433 CYRILLIC SMALL LETTER GHE
+0434 CYRILLIC SMALL LETTER DE
+0435 CYRILLIC SMALL LETTER IE
+0436 CYRILLIC SMALL LETTER ZHE
+0437 CYRILLIC SMALL LETTER ZE
+0438 CYRILLIC SMALL LETTER I
+0439 CYRILLIC SMALL LETTER SHORT I
+ : 0438 0306
+043A CYRILLIC SMALL LETTER KA
+043B CYRILLIC SMALL LETTER EL
+043C CYRILLIC SMALL LETTER EM
+043D CYRILLIC SMALL LETTER EN
+043E CYRILLIC SMALL LETTER O
+043F CYRILLIC SMALL LETTER PE
+0440 CYRILLIC SMALL LETTER ER
+0441 CYRILLIC SMALL LETTER ES
+0442 CYRILLIC SMALL LETTER TE
+0443 CYRILLIC SMALL LETTER U
+0444 CYRILLIC SMALL LETTER EF
+0445 CYRILLIC SMALL LETTER HA
+0446 CYRILLIC SMALL LETTER TSE
+0447 CYRILLIC SMALL LETTER CHE
+0448 CYRILLIC SMALL LETTER SHA
+0449 CYRILLIC SMALL LETTER SHCHA
+044A CYRILLIC SMALL LETTER HARD SIGN
+044B CYRILLIC SMALL LETTER YERU
+044C CYRILLIC SMALL LETTER SOFT SIGN
+ x (latin small letter tone six - 0185)
+044D CYRILLIC SMALL LETTER E
+044E CYRILLIC SMALL LETTER YU
+044F CYRILLIC SMALL LETTER YA
+@ Cyrillic extensions
+0450 CYRILLIC SMALL LETTER IE WITH GRAVE
+ * Macedonian
+ : 0435 0300
+0451 CYRILLIC SMALL LETTER IO
+ * Russian, ...
+ : 0435 0308
+0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
+ * Serbian
+ x (latin small letter d with stroke - 0111)
+0453 CYRILLIC SMALL LETTER GJE
+ * Macedonian
+ : 0433 0301
+0454 CYRILLIC SMALL LETTER UKRAINIAN IE
+ = Old Cyrillic yest
+0455 CYRILLIC SMALL LETTER DZE
+ = Old Cyrillic zelo
+ * Macedonian
+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ = Old Cyrillic i
+0457 CYRILLIC SMALL LETTER YI (Ukrainian)
+ * Ukrainian
+ : 0456 0308
+0458 CYRILLIC SMALL LETTER JE
+ * Serbian, Azerbaijani, Altay
+0459 CYRILLIC SMALL LETTER LJE
+ * Serbian, Macedonian
+ x (latin small letter lj - 01C9)
+045A CYRILLIC SMALL LETTER NJE
+ * Serbian, Macedonian
+ x (latin small letter nj - 01CC)
+045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
+ = Old Cyrillic derv
+ * Serbian
+ x (latin small letter c with acute - 0107)
+ x (latin small letter h with stroke - 0127)
+ x (cyrillic capital letter tshe - 040B)
+ x (planck constant over two pi - 210F)
+045C CYRILLIC SMALL LETTER KJE
+ * Macedonian
+ : 043A 0301
+045D CYRILLIC SMALL LETTER I WITH GRAVE
+ * Macedonian
+ : 0438 0300
+045E CYRILLIC SMALL LETTER SHORT U (Byelorussian)
+ * Byelorussian, Uzbek
+ : 0443 0306
+045F CYRILLIC SMALL LETTER DZHE
+ * Serbian, Macedonian, Abkhasian
+ x (latin small letter dz with caron - 01C6)
+@ Historic letters
+0460 CYRILLIC CAPITAL LETTER OMEGA
+0461 CYRILLIC SMALL LETTER OMEGA
+0462 CYRILLIC CAPITAL LETTER YAT
+0463 CYRILLIC SMALL LETTER YAT
+0464 CYRILLIC CAPITAL LETTER IOTIFIED E
+0465 CYRILLIC SMALL LETTER IOTIFIED E
+0466 CYRILLIC CAPITAL LETTER LITTLE YUS
+0467 CYRILLIC SMALL LETTER LITTLE YUS
+0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046A CYRILLIC CAPITAL LETTER BIG YUS
+046B CYRILLIC SMALL LETTER BIG YUS
+046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046E CYRILLIC CAPITAL LETTER KSI
+046F CYRILLIC SMALL LETTER KSI
+0470 CYRILLIC CAPITAL LETTER PSI
+0471 CYRILLIC SMALL LETTER PSI
+0472 CYRILLIC CAPITAL LETTER FITA
+0473 CYRILLIC SMALL LETTER FITA
+ x (latin small letter barred o - 0275)
+ x (greek small letter theta - 03B8)
+0474 CYRILLIC CAPITAL LETTER IZHITSA
+0475 CYRILLIC SMALL LETTER IZHITSA
+0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ : 0474 030F
+0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ : 0475 030F
+0478 CYRILLIC CAPITAL LETTER UK
+ * basic Old Cyrillic uk is unified with CYRILLIC LETTER U
+ x (cyrillic capital letter u - 0423)
+0479 CYRILLIC SMALL LETTER UK
+047A CYRILLIC CAPITAL LETTER ROUND OMEGA
+047B CYRILLIC SMALL LETTER ROUND OMEGA
+047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047D CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047E CYRILLIC CAPITAL LETTER OT
+047F CYRILLIC SMALL LETTER OT
+0480 CYRILLIC CAPITAL LETTER KOPPA
+0481 CYRILLIC SMALL LETTER KOPPA
+@ Historic miscellaneous
+0482 CYRILLIC THOUSANDS SIGN
+0483 COMBINING CYRILLIC TITLO
+0484 COMBINING CYRILLIC PALATALIZATION
+ x (combining vertical tilde - 033E)
+0485 COMBINING CYRILLIC DASIA PNEUMATA
+ x (combining reversed comma above - 0314)
+0486 COMBINING CYRILLIC PSILI PNEUMATA
+ x (combining comma above - 0313)
+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+0489 COMBINING CYRILLIC MILLIONS SIGN
+@ Extended Cyrillic
+048A CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048B CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ * Kildin Sami
+048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048D CYRILLIC SMALL LETTER SEMISOFT SIGN
+ * Kildin Sami
+048E CYRILLIC CAPITAL LETTER ER WITH TICK
+048F CYRILLIC SMALL LETTER ER WITH TICK
+ * Kildin Sami
+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN
+ * Ukrainian
+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0493 CYRILLIC SMALL LETTER GHE WITH STROKE
+ * Azerbaijani, Bashkir, ...
+ * full bar form preferred over half-barred "F"-type
+0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ * Abkhasian, Yakut
+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ * Tatar, ...
+0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ * Bashkir
+ * reversed ogonek form of the descender is preferred
+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049B CYRILLIC SMALL LETTER KA WITH DESCENDER
+ * Abkhasian, Tajik, ...
+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ * Azerbaijani
+049E CYRILLIC CAPITAL LETTER KA WITH STROKE
+049F CYRILLIC SMALL LETTER KA WITH STROKE
+ * Abkhasian
+04A0 CYRILLIC CAPITAL LETTER BASHKIR KA
+04A1 CYRILLIC SMALL LETTER BASHKIR KA
+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER
+ * Bashkir, ...
+04A4 CYRILLIC CAPITAL LIGATURE EN GHE
+04A5 CYRILLIC SMALL LIGATURE EN GHE
+ * Altay, Mari, Yakut
+ * this is not a decomposable ligature
+04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (Abkhasian)
+04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (Abkhasian)
+ * Abkhasian
+04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04A9 CYRILLIC SMALL LETTER ABKHASIAN HA
+04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AB CYRILLIC SMALL LETTER ES WITH DESCENDER
+ * Bashkir, Chuvash
+ * reversed ogonek form of the descender is preferred
+04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AD CYRILLIC SMALL LETTER TE WITH DESCENDER
+ * Abkhasian
+04AE CYRILLIC CAPITAL LETTER STRAIGHT U
+04AF CYRILLIC SMALL LETTER STRAIGHT U
+ * stem is straight, unlike LETTER U
+ * Azerbaijani, Bashkir, ...
+ x (cyrillic capital letter u - 0423)
+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ * Kazakh
+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER
+ * Abkhasian, Tajik, Uzbek
+04B4 CYRILLIC CAPITAL LIGATURE TE TSE (Abkhasian)
+04B5 CYRILLIC SMALL LIGATURE TE TSE (Abkhasian)
+ * Abkhasian
+ * this is not a decomposable ligature
+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ * Abkhasian, Tajik
+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ * Azerbaijani
+04BA CYRILLIC CAPITAL LETTER SHHA
+04BB CYRILLIC SMALL LETTER SHHA
+ * originally derived from Latin "h", but uppercase form 04BA is closer to an inverted che (0427)
+ * Azerbaijani, Bashkir, ...
+ x (latin small letter h - 0068)
+04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BD CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ * ogonek form preferred
+04C0 CYRILLIC LETTER PALOCHKA
+ * aspiration sign in many Caucasian languages
+ * has no "lowercase form", i.e. is case-invariant
+ x (latin capital letter i - 0049)
+ x (cyrillic capital letter byelorussian-ukrainian i - 0406)
+04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+ : 0416 0306
+04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE
+ * Moldavian
+ : 0436 0306
+04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C4 CYRILLIC SMALL LETTER KA WITH HOOK
+ * Khanty, Chukchi
+04C5 CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C6 CYRILLIC SMALL LETTER EL WITH TAIL
+ * Kildin Sami
+04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C8 CYRILLIC SMALL LETTER EN WITH HOOK
+ * Khanty, Chukchi, Nenets
+04C9 CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CA CYRILLIC SMALL LETTER EN WITH TAIL
+ * Kildin Sami
+04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD CYRILLIC CAPITAL LETTER EM WITH TAIL
+04CE CYRILLIC SMALL LETTER EM WITH TAIL
+ * Kildin Sami
+04D0 CYRILLIC CAPITAL LETTER A WITH BREVE
+ : 0410 0306
+04D1 CYRILLIC SMALL LETTER A WITH BREVE
+ : 0430 0306
+04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+ : 0410 0308
+04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS
+ : 0430 0308
+04D4 CYRILLIC CAPITAL LIGATURE A IE
+04D5 CYRILLIC SMALL LIGATURE A IE
+ * this is not a decomposable ligature
+ x (latin small letter ae - 00E6)
+04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE
+ : 0415 0306
+04D7 CYRILLIC SMALL LETTER IE WITH BREVE
+ : 0435 0306
+04D8 CYRILLIC CAPITAL LETTER SCHWA
+04D9 CYRILLIC SMALL LETTER SCHWA
+ x (latin small letter schwa - 0259)
+04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+ : 04D8 0308
+04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ : 04D9 0308
+04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+ : 0416 0308
+04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ : 0436 0308
+04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+ : 0417 0308
+04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ : 0437 0308
+04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE
+ x (latin small letter ezh - 0292)
+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON
+ : 0418 0304
+04E3 CYRILLIC SMALL LETTER I WITH MACRON
+ : 0438 0304
+04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+ : 0418 0308
+04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS
+ : 0438 0308
+04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+ : 041E 0308
+04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS
+ : 043E 0308
+04E8 CYRILLIC CAPITAL LETTER BARRED O
+04E9 CYRILLIC SMALL LETTER BARRED O
+ x (latin small letter barred o - 0275)
+04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+ : 04E8 0308
+04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ : 04E9 0308
+04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+ : 042D 0308
+04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
+ * Kildin Sami
+ : 044D 0308
+04EE CYRILLIC CAPITAL LETTER U WITH MACRON
+ : 0423 0304
+04EF CYRILLIC SMALL LETTER U WITH MACRON
+ : 0443 0304
+04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+ : 0423 0308
+04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS
+ : 0443 0308
+04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+ : 0423 030B
+04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ : 0443 030B
+04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+ : 0427 0308
+04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ : 0447 0308
+04F6 CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F7 CYRILLIC SMALL LETTER GHE WITH DESCENDER
+ * Yupik
+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+ : 042B 0308
+04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ : 044B 0308
+@@ 0500 Cyrillic Supplement 052F
+@ Komi letters
+0500 CYRILLIC CAPITAL LETTER KOMI DE
+0501 CYRILLIC SMALL LETTER KOMI DE
+0502 CYRILLIC CAPITAL LETTER KOMI DJE
+0503 CYRILLIC SMALL LETTER KOMI DJE
+0504 CYRILLIC CAPITAL LETTER KOMI ZJE
+0505 CYRILLIC SMALL LETTER KOMI ZJE
+0506 CYRILLIC CAPITAL LETTER KOMI DZJE
+0507 CYRILLIC SMALL LETTER KOMI DZJE
+0508 CYRILLIC CAPITAL LETTER KOMI LJE
+0509 CYRILLIC SMALL LETTER KOMI LJE
+050A CYRILLIC CAPITAL LETTER KOMI NJE
+050B CYRILLIC SMALL LETTER KOMI NJE
+050C CYRILLIC CAPITAL LETTER KOMI SJE
+050D CYRILLIC SMALL LETTER KOMI SJE
+050E CYRILLIC CAPITAL LETTER KOMI TJE
+050F CYRILLIC SMALL LETTER KOMI TJE
+@@ 0530 Armenian 058F
+@ Uppercase letters
+0531 ARMENIAN CAPITAL LETTER AYB
+0532 ARMENIAN CAPITAL LETTER BEN
+0533 ARMENIAN CAPITAL LETTER GIM
+0534 ARMENIAN CAPITAL LETTER DA
+0535 ARMENIAN CAPITAL LETTER ECH
+0536 ARMENIAN CAPITAL LETTER ZA
+0537 ARMENIAN CAPITAL LETTER EH
+0538 ARMENIAN CAPITAL LETTER ET
+0539 ARMENIAN CAPITAL LETTER TO
+053A ARMENIAN CAPITAL LETTER ZHE
+053B ARMENIAN CAPITAL LETTER INI
+053C ARMENIAN CAPITAL LETTER LIWN
+053D ARMENIAN CAPITAL LETTER XEH
+053E ARMENIAN CAPITAL LETTER CA
+053F ARMENIAN CAPITAL LETTER KEN
+0540 ARMENIAN CAPITAL LETTER HO
+0541 ARMENIAN CAPITAL LETTER JA
+0542 ARMENIAN CAPITAL LETTER GHAD
+0543 ARMENIAN CAPITAL LETTER CHEH
+0544 ARMENIAN CAPITAL LETTER MEN
+0545 ARMENIAN CAPITAL LETTER YI
+0546 ARMENIAN CAPITAL LETTER NOW
+0547 ARMENIAN CAPITAL LETTER SHA
+0548 ARMENIAN CAPITAL LETTER VO
+0549 ARMENIAN CAPITAL LETTER CHA
+054A ARMENIAN CAPITAL LETTER PEH
+054B ARMENIAN CAPITAL LETTER JHEH
+054C ARMENIAN CAPITAL LETTER RA
+054D ARMENIAN CAPITAL LETTER SEH
+054E ARMENIAN CAPITAL LETTER VEW
+054F ARMENIAN CAPITAL LETTER TIWN
+0550 ARMENIAN CAPITAL LETTER REH
+0551 ARMENIAN CAPITAL LETTER CO
+0552 ARMENIAN CAPITAL LETTER YIWN
+0553 ARMENIAN CAPITAL LETTER PIWR
+0554 ARMENIAN CAPITAL LETTER KEH
+0555 ARMENIAN CAPITAL LETTER OH
+0556 ARMENIAN CAPITAL LETTER FEH
+@ Modifier letters
+0559 ARMENIAN MODIFIER LETTER LEFT HALF RING
+ x (modifier letter reversed comma - 02BD)
+ x (modifier letter left half ring - 02BF)
+ x (combining reversed comma above - 0314)
+055A ARMENIAN APOSTROPHE
+ = ARMENIAN MODIFIER LETTER RIGHT HALF RING
+ x (modifier letter apostrophe - 02BC)
+ x (modifier letter right half ring - 02BE)
+ x (combining comma above - 0313)
+055B ARMENIAN EMPHASIS MARK
+ = shesht
+ x (modifier letter acute accent - 02CA)
+055C ARMENIAN EXCLAMATION MARK
+ = batsaganchakan nshan
+055D ARMENIAN COMMA
+ = bowt
+ x (modifier letter grave accent - 02CB)
+055E ARMENIAN QUESTION MARK
+ = hartsakan nshan
+055F ARMENIAN ABBREVIATION MARK
+ = patiw
+@ Lowercase letters
+0561 ARMENIAN SMALL LETTER AYB
+0562 ARMENIAN SMALL LETTER BEN
+0563 ARMENIAN SMALL LETTER GIM
+0564 ARMENIAN SMALL LETTER DA
+0565 ARMENIAN SMALL LETTER ECH
+0566 ARMENIAN SMALL LETTER ZA
+0567 ARMENIAN SMALL LETTER EH
+0568 ARMENIAN SMALL LETTER ET
+0569 ARMENIAN SMALL LETTER TO
+056A ARMENIAN SMALL LETTER ZHE
+056B ARMENIAN SMALL LETTER INI
+056C ARMENIAN SMALL LETTER LIWN
+056D ARMENIAN SMALL LETTER XEH
+056E ARMENIAN SMALL LETTER CA
+056F ARMENIAN SMALL LETTER KEN
+0570 ARMENIAN SMALL LETTER HO
+0571 ARMENIAN SMALL LETTER JA
+0572 ARMENIAN SMALL LETTER GHAD
+0573 ARMENIAN SMALL LETTER CHEH
+0574 ARMENIAN SMALL LETTER MEN
+0575 ARMENIAN SMALL LETTER YI
+0576 ARMENIAN SMALL LETTER NOW
+0577 ARMENIAN SMALL LETTER SHA
+0578 ARMENIAN SMALL LETTER VO
+0579 ARMENIAN SMALL LETTER CHA
+057A ARMENIAN SMALL LETTER PEH
+057B ARMENIAN SMALL LETTER JHEH
+057C ARMENIAN SMALL LETTER RA
+057D ARMENIAN SMALL LETTER SEH
+057E ARMENIAN SMALL LETTER VEW
+057F ARMENIAN SMALL LETTER TIWN
+0580 ARMENIAN SMALL LETTER REH
+0581 ARMENIAN SMALL LETTER CO
+0582 ARMENIAN SMALL LETTER YIWN
+0583 ARMENIAN SMALL LETTER PIWR
+0584 ARMENIAN SMALL LETTER KEH
+0585 ARMENIAN SMALL LETTER OH
+0586 ARMENIAN SMALL LETTER FEH
+0587 ARMENIAN SMALL LIGATURE ECH YIWN
+ # 0565 0582
+@ Punctuation
+0589 ARMENIAN FULL STOP
+ = vertsaket
+ * may also be used for Georgian
+ x (colon - 003A)
+058A ARMENIAN HYPHEN
+ = yentamna
+@@ 0590 Hebrew 05FF
+@ Cantillation marks
+0591 HEBREW ACCENT ETNAHTA
+ = atnah
+0592 HEBREW ACCENT SEGOL
+ = segolta
+0593 HEBREW ACCENT SHALSHELET
+0594 HEBREW ACCENT ZAQEF QATAN
+0595 HEBREW ACCENT ZAQEF GADOL
+0596 HEBREW ACCENT TIPEHA *
+ = tarha, me'ayla ~ mayla
+0597 HEBREW ACCENT REVIA
+0598 HEBREW ACCENT ZARQA *
+ = tsinorit, zinorit; tsinor, zinor
+ * This character is to be used when Zarqa or Tsinor are placed above, and also for Tsinorit.
+ x (hebrew accent zinor - 05AE)
+0599 HEBREW ACCENT PASHTA
+059A HEBREW ACCENT YETIV
+059B HEBREW ACCENT TEVIR
+059C HEBREW ACCENT GERESH
+ = teres
+059D HEBREW ACCENT GERESH MUQDAM
+059E HEBREW ACCENT GERSHAYIM
+059F HEBREW ACCENT QARNEY PARA
+ = pazer gadol
+05A0 HEBREW ACCENT TELISHA GEDOLA
+05A1 HEBREW ACCENT PAZER
+ = pazer qatan
+05A2 HEBREW ACCENT ATNAH HAFUKH
+ x (hebrew accent yerah ben yomo - 05AA)
+05A3 HEBREW ACCENT MUNAH
+05A4 HEBREW ACCENT MAHAPAKH
+05A5 HEBREW ACCENT MERKHA *
+ = yored
+05A6 HEBREW ACCENT MERKHA KEFULA
+05A7 HEBREW ACCENT DARGA
+05A8 HEBREW ACCENT QADMA *
+ = azla
+05A9 HEBREW ACCENT TELISHA QETANA
+05AA HEBREW ACCENT YERAH BEN YOMO *
+ = galgal
+ x (hebrew accent atnah hafukh - 05A2)
+05AB HEBREW ACCENT OLE
+05AC HEBREW ACCENT ILUY
+05AD HEBREW ACCENT DEHI
+05AE HEBREW ACCENT ZINOR
+ = tsinor; zarqa
+ * This character is to be used when Zarqa or Tsinor are placed above left.
+ x (hebrew accent zarqa - 0598)
+05AF HEBREW MARK MASORA CIRCLE
+@ Points and punctuation
+05B0 HEBREW POINT SHEVA
+05B1 HEBREW POINT HATAF SEGOL
+05B2 HEBREW POINT HATAF PATAH
+05B3 HEBREW POINT HATAF QAMATS
+05B4 HEBREW POINT HIRIQ
+05B5 HEBREW POINT TSERE
+05B6 HEBREW POINT SEGOL
+05B7 HEBREW POINT PATAH
+ * furtive patah is not a distinct character
+05B8 HEBREW POINT QAMATS
+ x (hebrew point qamats qatan - 05C7)
+05B9 HEBREW POINT HOLAM
+05BB HEBREW POINT QUBUTS
+05BC HEBREW POINT DAGESH OR MAPIQ (or shuruq)
+ = shuruq
+ * falls within the base letter
+05BD HEBREW POINT METEG *
+ = siluq
+ * may be used as a Hebrew accent sof pasuq
+05BE HEBREW PUNCTUATION MAQAF
+05BF HEBREW POINT RAFE
+ x (hebrew point judeo-spanish varika - FB1E)
+05C0 HEBREW PUNCTUATION PASEQ *
+ = legarmeh
+ * may be treated as spacing punctuation, not as a point
+ x (vertical line - 007C)
+05C1 HEBREW POINT SHIN DOT
+05C2 HEBREW POINT SIN DOT
+05C3 HEBREW PUNCTUATION SOF PASUQ *
+ * may be used as a Hebrew punctuation colon
+ x (colon - 003A)
+@ Puncta extraordinaria
+05C4 HEBREW MARK UPPER DOT
+05C5 HEBREW MARK LOWER DOT
+ * punctum extraordinarium (Psalms 27:13)
+ x (hebrew point hiriq - 05B4)
+@ Points and punctuation
+05C6 HEBREW PUNCTUATION NUN HAFUKHA
+ * does not historically derive from the letter nun
+ x (hebrew letter nun - 05E0)
+05C7 HEBREW POINT QAMATS QATAN
+ x (hebrew point qamats - 05B8)
+@ Based on ISO 8859-8
+05D0 HEBREW LETTER ALEF
+ = aleph
+ x (alef symbol - 2135)
+05D1 HEBREW LETTER BET
+ x (bet symbol - 2136)
+05D2 HEBREW LETTER GIMEL
+ x (gimel symbol - 2137)
+05D3 HEBREW LETTER DALET
+ x (dalet symbol - 2138)
+05D4 HEBREW LETTER HE
+05D5 HEBREW LETTER VAV
+05D6 HEBREW LETTER ZAYIN
+05D7 HEBREW LETTER HET
+05D8 HEBREW LETTER TET
+05D9 HEBREW LETTER YOD
+05DA HEBREW LETTER FINAL KAF
+05DB HEBREW LETTER KAF
+05DC HEBREW LETTER LAMED
+05DD HEBREW LETTER FINAL MEM
+05DE HEBREW LETTER MEM
+05DF HEBREW LETTER FINAL NUN
+05E0 HEBREW LETTER NUN
+05E1 HEBREW LETTER SAMEKH
+05E2 HEBREW LETTER AYIN
+05E3 HEBREW LETTER FINAL PE
+05E4 HEBREW LETTER PE
+05E5 HEBREW LETTER FINAL TSADI
+05E6 HEBREW LETTER TSADI
+ = zade
+05E7 HEBREW LETTER QOF
+05E8 HEBREW LETTER RESH
+05E9 HEBREW LETTER SHIN
+05EA HEBREW LETTER TAV
+@ Yiddish digraphs
+05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
+ = tsvey vovn
+05F1 HEBREW LIGATURE YIDDISH VAV YOD
+05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
+ = tsvey yudn
+@ Additional punctuation
+05F3 HEBREW PUNCTUATION GERESH
+05F4 HEBREW PUNCTUATION GERSHAYIM
+@@ 0600 Arabic 06FF
+@ Subtending marks
+0600 ARABIC NUMBER SIGN
+0601 ARABIC SIGN SANAH
+0602 ARABIC FOOTNOTE MARKER
+0603 ARABIC SIGN SAFHA
+@ Currency sign
+060B AFGHANI SIGN
+@ Punctuation
+060C ARABIC COMMA
+ * also used with Thaana and Syriac in modern text
+ x (comma - 002C)
+060D ARABIC DATE SEPARATOR
+@ Poetic marks
+060E ARABIC POETIC VERSE SIGN
+060F ARABIC SIGN MISRA
+@ Honorifics
+0610 ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+ * represents sallallahu alayhe wasallam "may God's peace and blessings be upon him"
+0611 ARABIC SIGN ALAYHE ASSALLAM
+ * represents alayhe assalam "upon him be peace"
+0612 ARABIC SIGN RAHMATULLAH ALAYHE
+ * represents rahmatullah alayhe "may God have mercy upon him"
+0613 ARABIC SIGN RADI ALLAHOU ANHU
+ * represents radi allahu 'anhu "may God be pleased with him"
+0614 ARABIC SIGN TAKHALLUS
+ * sign placed over the name or nom-de-plume of a poet, or in some writings used to mark all proper names
+@ Koranic annotation sign
+0615 ARABIC SMALL HIGH TAH
+ * marks a recommended pause position in some Korans published in Iran and Pakistan
+ * should not be confused with the small TAH sign used as a diacritic for some letters such as 0679
+@ Punctuation
+061B ARABIC SEMICOLON
+ * also used with Thaana and Syriac in modern text
+ x (semicolon - 003B)
+061E ARABIC TRIPLE DOT PUNCTUATION MARK
+061F ARABIC QUESTION MARK
+ * also used with Thaana and Syriac in modern text
+ x (question mark - 003F)
+@ Based on ISO 8859-6
+0621 ARABIC LETTER HAMZA
+ x (modifier letter right half ring - 02BE)
+0622 ARABIC LETTER ALEF WITH MADDA ABOVE
+ : 0627 0653
+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE
+ : 0627 0654
+0624 ARABIC LETTER WAW WITH HAMZA ABOVE
+ : 0648 0654
+0625 ARABIC LETTER ALEF WITH HAMZA BELOW
+ : 0627 0655
+0626 ARABIC LETTER YEH WITH HAMZA ABOVE
+ : 064A 0654
+0627 ARABIC LETTER ALEF
+0628 ARABIC LETTER BEH
+0629 ARABIC LETTER TEH MARBUTA
+062A ARABIC LETTER TEH
+062B ARABIC LETTER THEH
+062C ARABIC LETTER JEEM
+062D ARABIC LETTER HAH
+062E ARABIC LETTER KHAH
+062F ARABIC LETTER DAL
+0630 ARABIC LETTER THAL
+0631 ARABIC LETTER REH
+0632 ARABIC LETTER ZAIN
+0633 ARABIC LETTER SEEN
+0634 ARABIC LETTER SHEEN
+0635 ARABIC LETTER SAD
+0636 ARABIC LETTER DAD
+0637 ARABIC LETTER TAH
+0638 ARABIC LETTER ZAH
+0639 ARABIC LETTER AIN
+ x (latin small letter ezh reversed - 01B9)
+ x (modifier letter left half ring - 02BF)
+063A ARABIC LETTER GHAIN
+0640 ARABIC TATWEEL
+ = kashida
+ * inserted to stretch characters
+ * also used with Syriac
+0641 ARABIC LETTER FEH
+0642 ARABIC LETTER QAF
+0643 ARABIC LETTER KAF
+0644 ARABIC LETTER LAM
+0645 ARABIC LETTER MEEM
+0646 ARABIC LETTER NOON
+0647 ARABIC LETTER HEH
+0648 ARABIC LETTER WAW
+0649 ARABIC LETTER ALEF MAKSURA
+ * represents YEH-shaped letter with no dots in any positional form
+064A ARABIC LETTER YEH
+@ Points from ISO 8859-6
+064B ARABIC FATHATAN
+064C ARABIC DAMMATAN
+064D ARABIC KASRATAN
+064E ARABIC FATHA
+064F ARABIC DAMMA
+0650 ARABIC KASRA
+0651 ARABIC SHADDA
+0652 ARABIC SUKUN
+ * marks absence of a vowel after the base consonant
+ * used in some Korans to mark a long vowel as ignored
+ x (arabic small high dotless head of khah - 06E1)
+@ Combining maddah and hamza
+0653 ARABIC MADDAH ABOVE
+0654 ARABIC HAMZA ABOVE
+0655 ARABIC HAMZA BELOW
+@ Other combining marks
+0656 ARABIC SUBSCRIPT ALEF
+0657 ARABIC INVERTED DAMMA
+0658 ARABIC MARK NOON GHUNNA
+ * Kashmiri and Baluchi
+ * indicates nasalization in Urdu
+0659 ARABIC ZWARAKAY
+ * Pashto
+065A ARABIC VOWEL SIGN SMALL V ABOVE
+ * African languages
+065B ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+ * African languages
+065C ARABIC VOWEL SIGN DOT BELOW
+ * African languages
+065D ARABIC REVERSED DAMMA
+ * Ormuri, African languages
+065E ARABIC FATHA WITH TWO DOTS
+ * Kalami
+@ Arabic-Indic digits
+@+ These digits are used with Arabic proper; for languages of Iran, Pakistan, and India, see the Eastern Arabic-Indic digits at 06F0..06F9.
+0660 ARABIC-INDIC DIGIT ZERO
+0661 ARABIC-INDIC DIGIT ONE
+0662 ARABIC-INDIC DIGIT TWO
+0663 ARABIC-INDIC DIGIT THREE
+0664 ARABIC-INDIC DIGIT FOUR
+0665 ARABIC-INDIC DIGIT FIVE
+0666 ARABIC-INDIC DIGIT SIX
+0667 ARABIC-INDIC DIGIT SEVEN
+0668 ARABIC-INDIC DIGIT EIGHT
+0669 ARABIC-INDIC DIGIT NINE
+@ Punctuation
+066A ARABIC PERCENT SIGN
+ x (percent sign - 0025)
+066B ARABIC DECIMAL SEPARATOR
+066C ARABIC THOUSANDS SEPARATOR
+ x (apostrophe - 0027)
+ x (right single quotation mark - 2019)
+066D ARABIC FIVE POINTED STAR
+ x (asterisk - 002A)
+@ Archaic letters
+066E ARABIC LETTER DOTLESS BEH
+066F ARABIC LETTER DOTLESS QAF
+@ Point
+0670 ARABIC LETTER SUPERSCRIPT ALEF
+ * actually a vowel sign, despite the name
+@ Extended Arabic letters
+0671 ARABIC LETTER ALEF WASLA
+ * Koranic Arabic
+0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+ * Baluchi, Kashmiri
+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+ * Baluchi, Kashmiri
+0674 ARABIC LETTER HIGH HAMZA
+ * Kazakh
+ * forms digraphs
+0675 ARABIC LETTER HIGH HAMZA ALEF
+ * Kazakh
+ # 0627 0674
+0676 ARABIC LETTER HIGH HAMZA WAW
+ * Kazakh
+ # 0648 0674
+0677 ARABIC LETTER U WITH HAMZA ABOVE
+ * Kazakh
+ # 06C7 0674
+0678 ARABIC LETTER HIGH HAMZA YEH
+ * Kazakh
+ # 064A 0674
+0679 ARABIC LETTER TTEH
+ * Urdu
+067A ARABIC LETTER TTEHEH
+ * Sindhi
+067B ARABIC LETTER BEEH
+ * Sindhi
+067C ARABIC LETTER TEH WITH RING
+ * Pashto
+067D ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+ * Sindhi
+067E ARABIC LETTER PEH
+ * Persian, Urdu, ...
+067F ARABIC LETTER TEHEH
+ * Sindhi
+0680 ARABIC LETTER BEHEH
+ * Sindhi
+0681 ARABIC LETTER HAH WITH HAMZA ABOVE
+ * Pashto letter "zhe"
+0682 ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+ * not used in modern Pashto
+0683 ARABIC LETTER NYEH
+ * Sindhi
+0684 ARABIC LETTER DYEH
+ * Sindhi
+0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
+ * Pashto
+0686 ARABIC LETTER TCHEH
+ * Persian, Urdu, ...
+0687 ARABIC LETTER TCHEHEH
+ * Sindhi
+0688 ARABIC LETTER DDAL
+ * Urdu
+0689 ARABIC LETTER DAL WITH RING
+ * Pashto
+068A ARABIC LETTER DAL WITH DOT BELOW
+ * Sindhi
+068B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+ * Lahnda
+068C ARABIC LETTER DAHAL
+ * Sindhi
+068D ARABIC LETTER DDAHAL
+ * Sindhi
+068E ARABIC LETTER DUL
+ * older shape for DUL, now obsolete in Sindhi
+068F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+ * Sindhi
+ * current shape used for DUL
+0690 ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+ * old Urdu, not in current use
+0691 ARABIC LETTER RREH
+ * Urdu
+0692 ARABIC LETTER REH WITH SMALL V
+ * Kurdish
+0693 ARABIC LETTER REH WITH RING
+ * Pashto
+0694 ARABIC LETTER REH WITH DOT BELOW
+ * Kurdish
+0695 ARABIC LETTER REH WITH SMALL V BELOW
+ * Kurdish
+0696 ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+ * Pashto
+0697 ARABIC LETTER REH WITH TWO DOTS ABOVE
+ * Dargwa
+0698 ARABIC LETTER JEH
+ * Persian, Urdu, ...
+0699 ARABIC LETTER REH WITH FOUR DOTS ABOVE
+ * Sindhi
+069A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+ * Pashto
+069B ARABIC LETTER SEEN WITH THREE DOTS BELOW
+069C ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+ * Moroccan Arabic
+069D ARABIC LETTER SAD WITH TWO DOTS BELOW
+ * Turkic
+069E ARABIC LETTER SAD WITH THREE DOTS ABOVE
+ * Berber
+069F ARABIC LETTER TAH WITH THREE DOTS ABOVE
+ * old Hausa
+06A0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
+ * old Malay
+06A1 ARABIC LETTER DOTLESS FEH
+ * Adighe
+06A2 ARABIC LETTER FEH WITH DOT MOVED BELOW
+ * Maghrib Arabic
+06A3 ARABIC LETTER FEH WITH DOT BELOW
+ * Ingush
+06A4 ARABIC LETTER VEH
+ * Middle Eastern Arabic for foreign words
+ * Kurdish
+06A5 ARABIC LETTER FEH WITH THREE DOTS BELOW
+ * North African Arabic for foreign words
+06A6 ARABIC LETTER PEHEH
+ * Sindhi
+06A7 ARABIC LETTER QAF WITH DOT ABOVE
+ * Maghrib Arabic
+06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE
+ * Tunisian Arabic
+06A9 ARABIC LETTER KEHEH
+ * Persian, Urdu, ...
+06AA ARABIC LETTER SWASH KAF
+06AB ARABIC LETTER KAF WITH RING
+ * Pashto
+ * may appear like an Arabic KAF (0643) with a ring below the base
+06AC ARABIC LETTER KAF WITH DOT ABOVE
+ * old Malay
+06AD ARABIC LETTER NG
+ * Uighur, Kazakh, old Malay, ...
+06AE ARABIC LETTER KAF WITH THREE DOTS BELOW
+ * Berber
+06AF ARABIC LETTER GAF *
+ * Persian, Urdu, ...
+06B0 ARABIC LETTER GAF WITH RING
+ * Lahnda
+06B1 ARABIC LETTER NGOEH
+ * Sindhi
+06B2 ARABIC LETTER GAF WITH TWO DOTS BELOW
+ * not used in Sindhi
+06B3 ARABIC LETTER GUEH
+ * Sindhi
+06B4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
+ * not used in Sindhi
+06B5 ARABIC LETTER LAM WITH SMALL V
+ * Kurdish
+06B6 ARABIC LETTER LAM WITH DOT ABOVE
+ * Kurdish
+06B7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
+ * Kurdish
+06B8 ARABIC LETTER LAM WITH THREE DOTS BELOW
+06B9 ARABIC LETTER NOON WITH DOT BELOW
+06BA ARABIC LETTER NOON GHUNNA
+ * Urdu
+06BB ARABIC LETTER RNOON
+ * Sindhi
+06BC ARABIC LETTER NOON WITH RING
+ * Pashto
+06BD ARABIC LETTER NOON WITH THREE DOTS ABOVE
+ * old Malay
+06BE ARABIC LETTER HEH DOACHASHMEE
+ * Urdu
+ * forms aspirate digraphs
+06BF ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0 ARABIC LETTER HEH WITH YEH ABOVE
+ = ARABIC LETTER HAMZAH ON HA
+ = izafet
+ * Urdu
+ * actually a ligature, not an independent letter
+ : 06D5 0654
+06C1 ARABIC LETTER HEH GOAL
+ * Urdu
+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+ * Urdu
+ * actually a ligature, not an independent letter
+ : 06C1 0654
+06C3 ARABIC LETTER TEH MARBUTA GOAL
+ * Urdu
+06C4 ARABIC LETTER WAW WITH RING
+ * Kashmiri
+06C5 ARABIC LETTER KIRGHIZ OE
+ * Kirghiz
+06C6 ARABIC LETTER OE
+ * Uighur, Kurdish, Kazakh
+06C7 ARABIC LETTER U
+ * Kirghiz
+06C8 ARABIC LETTER YU
+ * Uighur
+06C9 ARABIC LETTER KIRGHIZ YU
+ * Kazakh, Kirghiz
+06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE
+ * Kurdish
+06CB ARABIC LETTER VE
+ * Uighur, Kazakh
+06CC ARABIC LETTER FARSI YEH
+ * Arabic, Persian, Urdu, ...
+ * initial and medial forms of this letter have dots
+ x (arabic letter alef maksura - 0649)
+ x (arabic letter yeh - 064A)
+06CD ARABIC LETTER YEH WITH TAIL
+ * Pashto, Sindhi
+06CE ARABIC LETTER YEH WITH SMALL V
+ * Kurdish
+06CF ARABIC LETTER WAW WITH DOT ABOVE
+06D0 ARABIC LETTER E *
+ * Pashto, Uighur
+ * used as the letter bbeh in Sindhi
+06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW
+ * old Malay
+06D2 ARABIC LETTER YEH BARREE
+ * Urdu
+06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+ * Urdu
+ * actually a ligature, not an independent letter
+ : 06D2 0654
+@ Punctuation
+06D4 ARABIC FULL STOP
+ * Urdu
+@ Extended Arabic letter
+06D5 ARABIC LETTER AE
+ * Uighur, Kazakh, Kirghiz
+@ Koranic annotation signs
+06D6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+06D7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+06D8 ARABIC SMALL HIGH MEEM INITIAL FORM
+06D9 ARABIC SMALL HIGH LAM ALEF
+06DA ARABIC SMALL HIGH JEEM
+06DB ARABIC SMALL HIGH THREE DOTS
+06DC ARABIC SMALL HIGH SEEN
+06DD ARABIC END OF AYAH
+06DE ARABIC START OF RUB EL HIZB
+06DF ARABIC SMALL HIGH ROUNDED ZERO
+06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+ = Arabic jazm
+ * used in some Korans to mark absence of a vowel
+ x (arabic sukun - 0652)
+06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM
+06E3 ARABIC SMALL LOW SEEN
+06E4 ARABIC SMALL HIGH MADDA
+06E5 ARABIC SMALL WAW
+06E6 ARABIC SMALL YEH
+06E7 ARABIC SMALL HIGH YEH
+06E8 ARABIC SMALL HIGH NOON
+06E9 ARABIC PLACE OF SAJDAH
+06EA ARABIC EMPTY CENTRE LOW STOP
+06EB ARABIC EMPTY CENTRE HIGH STOP
+06EC ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+06ED ARABIC SMALL LOW MEEM
+@ Extended Arabic letters for Parkari
+06EE ARABIC LETTER DAL WITH INVERTED V
+06EF ARABIC LETTER REH WITH INVERTED V
+@ Eastern Arabic-Indic digits
+@+ These digits are used with Arabic-script languages of Iran, Pakistan, and India (Persian, Sindhi, Urdu, etc.). For details of variations in preferred glyphs, see the block description for the Arabic script.
+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO
+06F1 EXTENDED ARABIC-INDIC DIGIT ONE
+06F2 EXTENDED ARABIC-INDIC DIGIT TWO
+06F3 EXTENDED ARABIC-INDIC DIGIT THREE
+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR
+ * Persian has a different glyph than Sindhi and Urdu
+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE
+ * Persian, Sindhi, and Urdu share glyph different from Arabic
+06F6 EXTENDED ARABIC-INDIC DIGIT SIX
+ * Persian, Sindhi, and Urdu have glyphs different from Arabic
+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN
+ * Urdu and Sindhi have glyphs different from Arabic
+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT
+06F9 EXTENDED ARABIC-INDIC DIGIT NINE
+@ Extended Arabic letters
+06FA ARABIC LETTER SHEEN WITH DOT BELOW
+06FB ARABIC LETTER DAD WITH DOT BELOW
+06FC ARABIC LETTER GHAIN WITH DOT BELOW
+@ Signs for Sindhi
+06FD ARABIC SIGN SINDHI AMPERSAND
+06FE ARABIC SIGN SINDHI POSTPOSITION MEN
+@ Extended Arabic letter for Parkari
+06FF ARABIC LETTER HEH WITH INVERTED V
+@@ 0700 Syriac 074F
+@ Syriac punctuation and signs
+0700 SYRIAC END OF PARAGRAPH
+ * marks the end of a paragraph
+0701 SYRIAC SUPRALINEAR FULL STOP
+ * marks interrogations, imperatives, and pauses, especially in Biblical texts
+0702 SYRIAC SUBLINEAR FULL STOP
+ * marks subordinate clauses and minor pauses, especially in Biblical texts
+0703 SYRIAC SUPRALINEAR COLON
+ * marks expressions of wonder and has a distinct pausal value in Biblical texts
+0704 SYRIAC SUBLINEAR COLON
+ * used at the end of verses of supplications
+0705 SYRIAC HORIZONTAL COLON
+ * joins two words closely together in a context to which a rising tone is suitable
+0706 SYRIAC COLON SKEWED LEFT
+ * marks a dependent clause
+0707 SYRIAC COLON SKEWED RIGHT
+ * marks the end of a subdivision of the apodosis, or latter part of a Biblical verse
+0708 SYRIAC SUPRALINEAR COLON SKEWED LEFT
+ * marks a minor phrase division
+0709 SYRIAC SUBLINEAR COLON SKEWED RIGHT
+ * marks the end of a real or rhetorical question
+070A SYRIAC CONTRACTION
+ * a contraction mark, mostly used in East Syriac
+ * placed at the end of an incomplete word
+070B SYRIAC HARKLEAN OBELUS
+ * marks the beginning of a phrase, word, or morpheme that has a marginal note
+070C SYRIAC HARKLEAN METOBELUS
+ * marks the end of a section with a marginal note
+070D SYRIAC HARKLEAN ASTERISCUS
+ * marks the beginning of a phrase, word, or morpheme that has a marginal note
+@ Syriac format control character
+070F SYRIAC ABBREVIATION MARK
+ = SAM
+ * marks the beginning of a Syriac abbreviation
+@ Syriac letters
+0710 SYRIAC LETTER ALAPH
+0711 SYRIAC LETTER SUPERSCRIPT ALAPH
+ * used in East Syriac texts to indicate an etymological Alaph
+0712 SYRIAC LETTER BETH
+0713 SYRIAC LETTER GAMAL
+0714 SYRIAC LETTER GAMAL GARSHUNI
+ * used in Garshuni documents
+0715 SYRIAC LETTER DALATH
+0716 SYRIAC LETTER DOTLESS DALATH RISH
+ * ambiguous form for undifferentiated early dalath/rish
+0717 SYRIAC LETTER HE
+0718 SYRIAC LETTER WAW
+0719 SYRIAC LETTER ZAIN
+071A SYRIAC LETTER HETH
+071B SYRIAC LETTER TETH
+071C SYRIAC LETTER TETH GARSHUNI
+ * used in Garshuni documents
+071D SYRIAC LETTER YUDH
+071E SYRIAC LETTER YUDH HE
+ * mostly used in East Syriac texts
+071F SYRIAC LETTER KAPH
+0720 SYRIAC LETTER LAMADH
+0721 SYRIAC LETTER MIM
+0722 SYRIAC LETTER NUN
+0723 SYRIAC LETTER SEMKATH
+0724 SYRIAC LETTER FINAL SEMKATH
+0725 SYRIAC LETTER E
+0726 SYRIAC LETTER PE
+0727 SYRIAC LETTER REVERSED PE
+ * used in Christian Palestinian Aramaic
+0728 SYRIAC LETTER SADHE
+0729 SYRIAC LETTER QAPH
+072A SYRIAC LETTER RISH
+072B SYRIAC LETTER SHIN
+072C SYRIAC LETTER TAW
+@ Persian letters
+072D SYRIAC LETTER PERSIAN BHETH
+072E SYRIAC LETTER PERSIAN GHAMAL
+072F SYRIAC LETTER PERSIAN DHALATH
+@ Syriac points (vowels)
+0730 SYRIAC PTHAHA ABOVE
+0731 SYRIAC PTHAHA BELOW
+0732 SYRIAC PTHAHA DOTTED
+0733 SYRIAC ZQAPHA ABOVE
+0734 SYRIAC ZQAPHA BELOW
+0735 SYRIAC ZQAPHA DOTTED
+0736 SYRIAC RBASA ABOVE
+0737 SYRIAC RBASA BELOW
+0738 SYRIAC DOTTED ZLAMA HORIZONTAL
+0739 SYRIAC DOTTED ZLAMA ANGULAR
+073A SYRIAC HBASA ABOVE
+073B SYRIAC HBASA BELOW
+073C SYRIAC HBASA-ESASA DOTTED
+073D SYRIAC ESASA ABOVE
+073E SYRIAC ESASA BELOW
+073F SYRIAC RWAHA
+@ Syriac marks
+0740 SYRIAC FEMININE DOT
+ * feminine marker used with the Taw feminine suffix
+0741 SYRIAC QUSHSHAYA
+ * indicates a plosive pronunciation
+0742 SYRIAC RUKKAKHA
+ * indicates an aspirated (spirantized) pronunciation
+0743 SYRIAC TWO VERTICAL DOTS ABOVE
+ * accent mark used in ancient manuscripts
+0744 SYRIAC TWO VERTICAL DOTS BELOW
+ * accent mark used in ancient manuscripts
+0745 SYRIAC THREE DOTS ABOVE
+ * diacritic used in Turoyo for letters not found in Syriac
+0746 SYRIAC THREE DOTS BELOW
+ * diacritic used in Turoyo for letters not found in Syriac
+0747 SYRIAC OBLIQUE LINE ABOVE
+ * indication of a silent letter
+0748 SYRIAC OBLIQUE LINE BELOW
+ * indication of a silent letter
+ * also used to indicate numbers multiplied by a certain constant
+0749 SYRIAC MUSIC
+ * a music mark
+ * also used in the Syrian Orthodox Anaphora book to mark the breaking of the Eucharist bread
+074A SYRIAC BARREKH
+ * a diacritic cross used in liturgical texts
+@ Sogdian letters
+074D SYRIAC LETTER SOGDIAN ZHAIN
+074E SYRIAC LETTER SOGDIAN KHAPH
+074F SYRIAC LETTER SOGDIAN FE
+@@ 0750 Arabic Supplement 077F
+@ Extended Arabic letters
+@+ These are primarily used in Arabic-script orthographies of African languages.
+0750 ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+0751 ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+0752 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+0753 ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+0754 ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+0755 ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+0756 ARABIC LETTER BEH WITH SMALL V
+0757 ARABIC LETTER HAH WITH TWO DOTS ABOVE
+0758 ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+0759 ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+ * Saraiki
+075A ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+075B ARABIC LETTER REH WITH STROKE
+075C ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+ * Shina
+075D ARABIC LETTER AIN WITH TWO DOTS ABOVE
+075E ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+075F ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+0760 ARABIC LETTER FEH WITH TWO DOTS BELOW
+0761 ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+0762 ARABIC LETTER KEHEH WITH DOT ABOVE
+ * old Malay, preferred to 06AC
+ x (arabic letter kaf with dot above - 06AC)
+0763 ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+ * Moroccan Arabic, Amazigh
+ x (arabic letter ng - 06AD)
+0764 ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+0765 ARABIC LETTER MEEM WITH DOT ABOVE
+0766 ARABIC LETTER MEEM WITH DOT BELOW
+ * Maba
+0767 ARABIC LETTER NOON WITH TWO DOTS BELOW
+0768 ARABIC LETTER NOON WITH SMALL TAH
+ * Saraiki, Pathwari
+0769 ARABIC LETTER NOON WITH SMALL V
+ * Gojri
+076A ARABIC LETTER LAM WITH BAR
+076B ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+ * Torwali, Ormuri
+076C ARABIC LETTER REH WITH HAMZA ABOVE
+ * Ormuri
+076D ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+ * Kalami, Ormuri
+@@ 0780 Thaana 07BF
+@ Basic consonants
+0780 THAANA LETTER HAA
+0781 THAANA LETTER SHAVIYANI
+0782 THAANA LETTER NOONU
+0783 THAANA LETTER RAA
+0784 THAANA LETTER BAA
+0785 THAANA LETTER LHAVIYANI
+0786 THAANA LETTER KAAFU
+0787 THAANA LETTER ALIFU
+0788 THAANA LETTER VAAVU
+0789 THAANA LETTER MEEMU
+078A THAANA LETTER FAAFU
+078B THAANA LETTER DHAALU
+078C THAANA LETTER THAA
+078D THAANA LETTER LAAMU
+078E THAANA LETTER GAAFU
+078F THAANA LETTER GNAVIYANI
+0790 THAANA LETTER SEENU
+0791 THAANA LETTER DAVIYANI
+0792 THAANA LETTER ZAVIYANI
+0793 THAANA LETTER TAVIYANI
+0794 THAANA LETTER YAA
+0795 THAANA LETTER PAVIYANI
+0796 THAANA LETTER JAVIYANI
+0797 THAANA LETTER CHAVIYANI
+@ Extensions for Arabic
+0798 THAANA LETTER TTAA
+0799 THAANA LETTER HHAA
+079A THAANA LETTER KHAA
+079B THAANA LETTER THAALU
+079C THAANA LETTER ZAA
+079D THAANA LETTER SHEENU
+079E THAANA LETTER SAADHU
+079F THAANA LETTER DAADHU
+07A0 THAANA LETTER TO
+07A1 THAANA LETTER ZO
+07A2 THAANA LETTER AINU
+07A3 THAANA LETTER GHAINU
+07A4 THAANA LETTER QAAFU
+07A5 THAANA LETTER WAAVU
+@ Vowels
+07A6 THAANA ABAFILI
+07A7 THAANA AABAAFILI
+07A8 THAANA IBIFILI
+07A9 THAANA EEBEEFILI
+07AA THAANA UBUFILI
+07AB THAANA OOBOOFILI
+07AC THAANA EBEFILI
+07AD THAANA EYBEYFILI
+07AE THAANA OBOFILI
+07AF THAANA OABOAFILI
+07B0 THAANA SUKUN
+@ Consonant for Addu dialect
+07B1 THAANA LETTER NAA
+@@ 0900 Devanagari 097F
+@ Based on ISCII 1988
+@ Various signs
+0901 DEVANAGARI SIGN CANDRABINDU
+ = anunasika
+ x (combining candrabindu - 0310)
+0902 DEVANAGARI SIGN ANUSVARA
+ = bindu
+0903 DEVANAGARI SIGN VISARGA
+@ Independent vowels
+0904 DEVANAGARI LETTER SHORT A
+0905 DEVANAGARI LETTER A
+0906 DEVANAGARI LETTER AA
+0907 DEVANAGARI LETTER I
+0908 DEVANAGARI LETTER II
+0909 DEVANAGARI LETTER U
+090A DEVANAGARI LETTER UU
+090B DEVANAGARI LETTER VOCALIC R
+090C DEVANAGARI LETTER VOCALIC L
+090D DEVANAGARI LETTER CANDRA E
+090E DEVANAGARI LETTER SHORT E
+ * for transcribing Dravidian short e
+090F DEVANAGARI LETTER E
+0910 DEVANAGARI LETTER AI
+0911 DEVANAGARI LETTER CANDRA O
+0912 DEVANAGARI LETTER SHORT O
+ * for transcribing Dravidian short o
+0913 DEVANAGARI LETTER O
+0914 DEVANAGARI LETTER AU
+@ Consonants
+0915 DEVANAGARI LETTER KA
+0916 DEVANAGARI LETTER KHA
+0917 DEVANAGARI LETTER GA
+0918 DEVANAGARI LETTER GHA
+0919 DEVANAGARI LETTER NGA
+091A DEVANAGARI LETTER CA
+091B DEVANAGARI LETTER CHA
+091C DEVANAGARI LETTER JA
+091D DEVANAGARI LETTER JHA
+091E DEVANAGARI LETTER NYA
+091F DEVANAGARI LETTER TTA
+0920 DEVANAGARI LETTER TTHA
+0921 DEVANAGARI LETTER DDA
+0922 DEVANAGARI LETTER DDHA
+0923 DEVANAGARI LETTER NNA
+0924 DEVANAGARI LETTER TA
+0925 DEVANAGARI LETTER THA
+0926 DEVANAGARI LETTER DA
+0927 DEVANAGARI LETTER DHA
+0928 DEVANAGARI LETTER NA
+0929 DEVANAGARI LETTER NNNA
+ * for transcribing Dravidian alveolar n
+ : 0928 093C
+092A DEVANAGARI LETTER PA
+092B DEVANAGARI LETTER PHA
+092C DEVANAGARI LETTER BA
+092D DEVANAGARI LETTER BHA
+092E DEVANAGARI LETTER MA
+092F DEVANAGARI LETTER YA
+0930 DEVANAGARI LETTER RA
+0931 DEVANAGARI LETTER RRA
+ * for transcribing Dravidian alveolar r
+ * half form is represented as "Eyelash RA"
+ : 0930 093C
+0932 DEVANAGARI LETTER LA
+0933 DEVANAGARI LETTER LLA
+0934 DEVANAGARI LETTER LLLA
+ * for transcribing Dravidian l
+ : 0933 093C
+0935 DEVANAGARI LETTER VA
+0936 DEVANAGARI LETTER SHA
+0937 DEVANAGARI LETTER SSA
+0938 DEVANAGARI LETTER SA
+0939 DEVANAGARI LETTER HA
+@ Various signs
+093C DEVANAGARI SIGN NUKTA
+ * for extending the alphabet to new letters
+093D DEVANAGARI SIGN AVAGRAHA
+@ Dependent vowel signs
+093E DEVANAGARI VOWEL SIGN AA
+093F DEVANAGARI VOWEL SIGN I
+ * stands to the left of the consonant
+0940 DEVANAGARI VOWEL SIGN II
+0941 DEVANAGARI VOWEL SIGN U
+0942 DEVANAGARI VOWEL SIGN UU
+0943 DEVANAGARI VOWEL SIGN VOCALIC R
+0944 DEVANAGARI VOWEL SIGN VOCALIC RR
+0945 DEVANAGARI VOWEL SIGN CANDRA E
+ = candra
+0946 DEVANAGARI VOWEL SIGN SHORT E
+ * for transcribing Dravidian vowels
+0947 DEVANAGARI VOWEL SIGN E
+0948 DEVANAGARI VOWEL SIGN AI
+0949 DEVANAGARI VOWEL SIGN CANDRA O
+094A DEVANAGARI VOWEL SIGN SHORT O
+ * for transcribing Dravidian vowels
+094B DEVANAGARI VOWEL SIGN O
+094C DEVANAGARI VOWEL SIGN AU
+@ Various signs
+094D DEVANAGARI SIGN VIRAMA
+ = halant (the preferred Hindi name)
+ * suppresses inherent vowel
+0950 DEVANAGARI OM
+0951 DEVANAGARI STRESS SIGN UDATTA
+ * mostly used for Rigvedic svarita, with rare use for Yajurvedic udatta
+0952 DEVANAGARI STRESS SIGN ANUDATTA
+0953 DEVANAGARI GRAVE ACCENT
+0954 DEVANAGARI ACUTE ACCENT
+@ Additional consonants
+0958 DEVANAGARI LETTER QA
+ : 0915 093C
+0959 DEVANAGARI LETTER KHHA
+ : 0916 093C
+095A DEVANAGARI LETTER GHHA
+ : 0917 093C
+095B DEVANAGARI LETTER ZA
+ : 091C 093C
+095C DEVANAGARI LETTER DDDHA
+ : 0921 093C
+095D DEVANAGARI LETTER RHA
+ : 0922 093C
+095E DEVANAGARI LETTER FA
+ : 092B 093C
+095F DEVANAGARI LETTER YYA
+ : 092F 093C
+@ Generic additions
+0960 DEVANAGARI LETTER VOCALIC RR
+0961 DEVANAGARI LETTER VOCALIC LL
+0962 DEVANAGARI VOWEL SIGN VOCALIC L
+0963 DEVANAGARI VOWEL SIGN VOCALIC LL
+0964 DEVANAGARI DANDA
+ = purna viram
+ * phrase separator
+0965 DEVANAGARI DOUBLE DANDA
+ = deergh viram
+@ Digits
+0966 DEVANAGARI DIGIT ZERO
+0967 DEVANAGARI DIGIT ONE
+0968 DEVANAGARI DIGIT TWO
+0969 DEVANAGARI DIGIT THREE
+096A DEVANAGARI DIGIT FOUR
+096B DEVANAGARI DIGIT FIVE
+096C DEVANAGARI DIGIT SIX
+096D DEVANAGARI DIGIT SEVEN
+096E DEVANAGARI DIGIT EIGHT
+096F DEVANAGARI DIGIT NINE
+@ Devanagari-specific additions
+0970 DEVANAGARI ABBREVIATION SIGN
+@ Glottal stop
+097D DEVANAGARI LETTER GLOTTAL STOP
+ * used for writing Limbu in Devanagari
+ * a glyph variant has the connecting top bar
+@@ 0980 Bengali 09FF
+@ Based on ISCII 1988
+@ Various signs
+0981 BENGALI SIGN CANDRABINDU
+0982 BENGALI SIGN ANUSVARA
+0983 BENGALI SIGN VISARGA
+@ Independent vowels
+0985 BENGALI LETTER A
+0986 BENGALI LETTER AA
+0987 BENGALI LETTER I
+0988 BENGALI LETTER II
+0989 BENGALI LETTER U
+098A BENGALI LETTER UU
+098B BENGALI LETTER VOCALIC R
+098C BENGALI LETTER VOCALIC L
+098F BENGALI LETTER E
+0990 BENGALI LETTER AI
+0993 BENGALI LETTER O
+0994 BENGALI LETTER AU
+@ Consonants
+0995 BENGALI LETTER KA
+0996 BENGALI LETTER KHA
+0997 BENGALI LETTER GA
+0998 BENGALI LETTER GHA
+0999 BENGALI LETTER NGA
+099A BENGALI LETTER CA
+099B BENGALI LETTER CHA
+099C BENGALI LETTER JA
+099D BENGALI LETTER JHA
+099E BENGALI LETTER NYA
+099F BENGALI LETTER TTA
+09A0 BENGALI LETTER TTHA
+09A1 BENGALI LETTER DDA
+09A2 BENGALI LETTER DDHA
+09A3 BENGALI LETTER NNA
+09A4 BENGALI LETTER TA
+09A5 BENGALI LETTER THA
+09A6 BENGALI LETTER DA
+09A7 BENGALI LETTER DHA
+09A8 BENGALI LETTER NA
+09AA BENGALI LETTER PA
+09AB BENGALI LETTER PHA
+09AC BENGALI LETTER BA
+ = Bengali va, wa
+09AD BENGALI LETTER BHA
+09AE BENGALI LETTER MA
+09AF BENGALI LETTER YA
+09B0 BENGALI LETTER RA
+09B2 BENGALI LETTER LA
+09B6 BENGALI LETTER SHA
+09B7 BENGALI LETTER SSA
+09B8 BENGALI LETTER SA
+09B9 BENGALI LETTER HA
+@ Various signs
+09BC BENGALI SIGN NUKTA
+ * for extending the alphabet to new letters
+09BD BENGALI SIGN AVAGRAHA
+@ Dependent vowel signs
+09BE BENGALI VOWEL SIGN AA
+09BF BENGALI VOWEL SIGN I
+ * stands to the left of the consonant
+09C0 BENGALI VOWEL SIGN II
+09C1 BENGALI VOWEL SIGN U
+09C2 BENGALI VOWEL SIGN UU
+09C3 BENGALI VOWEL SIGN VOCALIC R
+09C4 BENGALI VOWEL SIGN VOCALIC RR
+09C7 BENGALI VOWEL SIGN E
+ * stands to the left of the consonant
+09C8 BENGALI VOWEL SIGN AI
+ * stands to the left of the consonant
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for most processing.
+09CB BENGALI VOWEL SIGN O
+ : 09C7 09BE
+09CC BENGALI VOWEL SIGN AU
+ : 09C7 09D7
+@ Sign
+09CD BENGALI SIGN VIRAMA
+ = hasant (Bengali term for halant)
+@ Additional consonant
+09CE BENGALI LETTER KHANDA TA
+@ Sign
+09D7 BENGALI AU LENGTH MARK
+@ Additional consonants
+09DC BENGALI LETTER RRA
+ : 09A1 09BC
+09DD BENGALI LETTER RHA
+ : 09A2 09BC
+09DF BENGALI LETTER YYA
+ : 09AF 09BC
+@ Generic additions
+09E0 BENGALI LETTER VOCALIC RR
+09E1 BENGALI LETTER VOCALIC LL
+09E2 BENGALI VOWEL SIGN VOCALIC L
+09E3 BENGALI VOWEL SIGN VOCALIC LL
+@ Digits
+09E6 BENGALI DIGIT ZERO
+09E7 BENGALI DIGIT ONE
+09E8 BENGALI DIGIT TWO
+09E9 BENGALI DIGIT THREE
+09EA BENGALI DIGIT FOUR
+09EB BENGALI DIGIT FIVE
+09EC BENGALI DIGIT SIX
+09ED BENGALI DIGIT SEVEN
+09EE BENGALI DIGIT EIGHT
+09EF BENGALI DIGIT NINE
+@ Bengali-specific additions
+09F0 BENGALI LETTER RA WITH MIDDLE DIAGONAL (Assamese)
+ * Assamese
+09F1 BENGALI LETTER RA WITH LOWER DIAGONAL (Assamese)
+ = BENGALI LETTER VA WITH LOWER DIAGONAL
+ * Assamese
+09F2 BENGALI RUPEE MARK
+09F3 BENGALI RUPEE SIGN
+09F4 BENGALI CURRENCY NUMERATOR ONE
+ * not in current usage
+09F5 BENGALI CURRENCY NUMERATOR TWO
+ * not in current usage
+09F6 BENGALI CURRENCY NUMERATOR THREE
+ * not in current usage
+09F7 BENGALI CURRENCY NUMERATOR FOUR
+09F8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+09F9 BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA BENGALI ISSHAR
+@@ 0A00 Gurmukhi 0A7F
+@ Based on ISCII 1988
+@ Various signs
+0A01 GURMUKHI SIGN ADAK BINDI
+0A02 GURMUKHI SIGN BINDI
+0A03 GURMUKHI SIGN VISARGA
+@ Independent vowels
+0A05 GURMUKHI LETTER A
+0A06 GURMUKHI LETTER AA
+0A07 GURMUKHI LETTER I
+0A08 GURMUKHI LETTER II
+0A09 GURMUKHI LETTER U
+0A0A GURMUKHI LETTER UU
+0A0F GURMUKHI LETTER EE
+0A10 GURMUKHI LETTER AI
+0A13 GURMUKHI LETTER OO
+0A14 GURMUKHI LETTER AU
+@ Consonants
+0A15 GURMUKHI LETTER KA
+0A16 GURMUKHI LETTER KHA
+0A17 GURMUKHI LETTER GA
+0A18 GURMUKHI LETTER GHA
+0A19 GURMUKHI LETTER NGA
+0A1A GURMUKHI LETTER CA
+0A1B GURMUKHI LETTER CHA
+0A1C GURMUKHI LETTER JA
+0A1D GURMUKHI LETTER JHA
+0A1E GURMUKHI LETTER NYA
+0A1F GURMUKHI LETTER TTA
+0A20 GURMUKHI LETTER TTHA
+0A21 GURMUKHI LETTER DDA
+0A22 GURMUKHI LETTER DDHA
+0A23 GURMUKHI LETTER NNA
+0A24 GURMUKHI LETTER TA
+0A25 GURMUKHI LETTER THA
+0A26 GURMUKHI LETTER DA
+0A27 GURMUKHI LETTER DHA
+0A28 GURMUKHI LETTER NA
+0A2A GURMUKHI LETTER PA
+0A2B GURMUKHI LETTER PHA
+0A2C GURMUKHI LETTER BA
+0A2D GURMUKHI LETTER BHA
+0A2E GURMUKHI LETTER MA
+0A2F GURMUKHI LETTER YA
+0A30 GURMUKHI LETTER RA
+0A32 GURMUKHI LETTER LA
+0A33 GURMUKHI LETTER LLA
+ : 0A32 0A3C
+0A35 GURMUKHI LETTER VA
+0A36 GURMUKHI LETTER SHA
+ : 0A38 0A3C
+0A38 GURMUKHI LETTER SA
+0A39 GURMUKHI LETTER HA
+@ Various signs
+0A3C GURMUKHI SIGN NUKTA
+ * for extending the alphabet to new letters
+@ Dependent vowel signs
+0A3E GURMUKHI VOWEL SIGN AA
+0A3F GURMUKHI VOWEL SIGN I
+ * stands to the left of the consonant
+0A40 GURMUKHI VOWEL SIGN II
+0A41 GURMUKHI VOWEL SIGN U
+0A42 GURMUKHI VOWEL SIGN UU
+0A47 GURMUKHI VOWEL SIGN EE
+0A48 GURMUKHI VOWEL SIGN AI
+0A4B GURMUKHI VOWEL SIGN OO
+0A4C GURMUKHI VOWEL SIGN AU
+@ Various signs
+0A4D GURMUKHI SIGN VIRAMA
+@ Additional consonants
+0A59 GURMUKHI LETTER KHHA
+ : 0A16 0A3C
+0A5A GURMUKHI LETTER GHHA
+ : 0A17 0A3C
+0A5B GURMUKHI LETTER ZA
+ : 0A1C 0A3C
+0A5C GURMUKHI LETTER RRA
+0A5E GURMUKHI LETTER FA
+ : 0A2B 0A3C
+@ Digits
+0A66 GURMUKHI DIGIT ZERO
+0A67 GURMUKHI DIGIT ONE
+0A68 GURMUKHI DIGIT TWO
+0A69 GURMUKHI DIGIT THREE
+0A6A GURMUKHI DIGIT FOUR
+0A6B GURMUKHI DIGIT FIVE
+0A6C GURMUKHI DIGIT SIX
+0A6D GURMUKHI DIGIT SEVEN
+0A6E GURMUKHI DIGIT EIGHT
+0A6F GURMUKHI DIGIT NINE
+@ Gurmukhi-specific additions
+0A70 GURMUKHI TIPPI
+ * nasalization
+0A71 GURMUKHI ADDAK
+ * doubles following consonant
+0A72 GURMUKHI IRI
+ * base for vowels
+0A73 GURMUKHI URA
+ * base for vowels
+0A74 GURMUKHI EK ONKAR
+ * God is One
+@@ 0A80 Gujarati 0AFF
+@ Based on ISCII 1988
+@ Various signs
+0A81 GUJARATI SIGN CANDRABINDU
+0A82 GUJARATI SIGN ANUSVARA
+0A83 GUJARATI SIGN VISARGA
+@ Independent vowels
+0A85 GUJARATI LETTER A
+0A86 GUJARATI LETTER AA
+0A87 GUJARATI LETTER I
+0A88 GUJARATI LETTER II
+0A89 GUJARATI LETTER U
+0A8A GUJARATI LETTER UU
+0A8B GUJARATI LETTER VOCALIC R
+0A8C GUJARATI LETTER VOCALIC L
+ * used with Sanskrit text
+0A8D GUJARATI VOWEL CANDRA E
+0A8F GUJARATI LETTER E
+0A90 GUJARATI LETTER AI
+0A91 GUJARATI VOWEL CANDRA O
+0A93 GUJARATI LETTER O
+0A94 GUJARATI LETTER AU
+@ Consonants
+0A95 GUJARATI LETTER KA
+0A96 GUJARATI LETTER KHA
+0A97 GUJARATI LETTER GA
+0A98 GUJARATI LETTER GHA
+0A99 GUJARATI LETTER NGA
+0A9A GUJARATI LETTER CA
+0A9B GUJARATI LETTER CHA
+0A9C GUJARATI LETTER JA
+0A9D GUJARATI LETTER JHA
+0A9E GUJARATI LETTER NYA
+0A9F GUJARATI LETTER TTA
+0AA0 GUJARATI LETTER TTHA
+0AA1 GUJARATI LETTER DDA
+0AA2 GUJARATI LETTER DDHA
+0AA3 GUJARATI LETTER NNA
+0AA4 GUJARATI LETTER TA
+0AA5 GUJARATI LETTER THA
+0AA6 GUJARATI LETTER DA
+0AA7 GUJARATI LETTER DHA
+0AA8 GUJARATI LETTER NA
+0AAA GUJARATI LETTER PA
+0AAB GUJARATI LETTER PHA
+0AAC GUJARATI LETTER BA
+0AAD GUJARATI LETTER BHA
+0AAE GUJARATI LETTER MA
+0AAF GUJARATI LETTER YA
+0AB0 GUJARATI LETTER RA
+0AB2 GUJARATI LETTER LA
+0AB3 GUJARATI LETTER LLA
+0AB5 GUJARATI LETTER VA
+0AB6 GUJARATI LETTER SHA
+0AB7 GUJARATI LETTER SSA
+0AB8 GUJARATI LETTER SA
+0AB9 GUJARATI LETTER HA
+@ Various signs
+0ABC GUJARATI SIGN NUKTA
+ * for extending the alphabet to new letters
+0ABD GUJARATI SIGN AVAGRAHA
+@ Dependent vowel signs
+0ABE GUJARATI VOWEL SIGN AA
+0ABF GUJARATI VOWEL SIGN I
+ * stands to the left of the consonant
+0AC0 GUJARATI VOWEL SIGN II
+0AC1 GUJARATI VOWEL SIGN U
+0AC2 GUJARATI VOWEL SIGN UU
+0AC3 GUJARATI VOWEL SIGN VOCALIC R
+0AC4 GUJARATI VOWEL SIGN VOCALIC RR
+0AC5 GUJARATI VOWEL SIGN CANDRA E
+0AC7 GUJARATI VOWEL SIGN E
+0AC8 GUJARATI VOWEL SIGN AI
+0AC9 GUJARATI VOWEL SIGN CANDRA O
+0ACB GUJARATI VOWEL SIGN O
+0ACC GUJARATI VOWEL SIGN AU
+@ Various signs
+0ACD GUJARATI SIGN VIRAMA
+0AD0 GUJARATI OM
+@ Generic addition
+0AE0 GUJARATI LETTER VOCALIC RR
+@ Additions for use with Sanskrit text
+0AE1 GUJARATI LETTER VOCALIC LL
+0AE2 GUJARATI VOWEL SIGN VOCALIC L
+0AE3 GUJARATI VOWEL SIGN VOCALIC LL
+@ Digits
+0AE6 GUJARATI DIGIT ZERO
+0AE7 GUJARATI DIGIT ONE
+0AE8 GUJARATI DIGIT TWO
+0AE9 GUJARATI DIGIT THREE
+0AEA GUJARATI DIGIT FOUR
+0AEB GUJARATI DIGIT FIVE
+0AEC GUJARATI DIGIT SIX
+0AED GUJARATI DIGIT SEVEN
+0AEE GUJARATI DIGIT EIGHT
+0AEF GUJARATI DIGIT NINE
+@ Currency sign
+0AF1 GUJARATI RUPEE SIGN
+@@ 0B00 Oriya 0B7F
+@ Based on ISCII 1988
+@ Various signs
+0B01 ORIYA SIGN CANDRABINDU
+0B02 ORIYA SIGN ANUSVARA
+0B03 ORIYA SIGN VISARGA
+@ Independent vowels
+0B05 ORIYA LETTER A
+0B06 ORIYA LETTER AA
+0B07 ORIYA LETTER I
+0B08 ORIYA LETTER II
+0B09 ORIYA LETTER U
+0B0A ORIYA LETTER UU
+0B0B ORIYA LETTER VOCALIC R
+0B0C ORIYA LETTER VOCALIC L
+0B0F ORIYA LETTER E
+0B10 ORIYA LETTER AI
+0B13 ORIYA LETTER O
+0B14 ORIYA LETTER AU
+@ Consonants
+0B15 ORIYA LETTER KA
+0B16 ORIYA LETTER KHA
+0B17 ORIYA LETTER GA
+0B18 ORIYA LETTER GHA
+0B19 ORIYA LETTER NGA
+0B1A ORIYA LETTER CA
+0B1B ORIYA LETTER CHA
+0B1C ORIYA LETTER JA
+0B1D ORIYA LETTER JHA
+0B1E ORIYA LETTER NYA
+0B1F ORIYA LETTER TTA
+0B20 ORIYA LETTER TTHA
+0B21 ORIYA LETTER DDA
+0B22 ORIYA LETTER DDHA
+0B23 ORIYA LETTER NNA
+0B24 ORIYA LETTER TA
+0B25 ORIYA LETTER THA
+0B26 ORIYA LETTER DA
+0B27 ORIYA LETTER DHA
+0B28 ORIYA LETTER NA
+0B2A ORIYA LETTER PA
+0B2B ORIYA LETTER PHA
+0B2C ORIYA LETTER BA
+ x (oriya letter va - 0B35)
+0B2D ORIYA LETTER BHA
+0B2E ORIYA LETTER MA
+0B2F ORIYA LETTER YA
+ = ja
+0B30 ORIYA LETTER RA
+0B32 ORIYA LETTER LA
+0B33 ORIYA LETTER LLA
+0B35 ORIYA LETTER VA
+ x (oriya letter ba - 0B2C)
+0B36 ORIYA LETTER SHA
+0B37 ORIYA LETTER SSA
+0B38 ORIYA LETTER SA
+0B39 ORIYA LETTER HA
+@ Various signs
+0B3C ORIYA SIGN NUKTA
+ * for extending the alphabet to new letters
+0B3D ORIYA SIGN AVAGRAHA
+@ Dependent vowel signs
+0B3E ORIYA VOWEL SIGN AA
+0B3F ORIYA VOWEL SIGN I
+0B40 ORIYA VOWEL SIGN II
+0B41 ORIYA VOWEL SIGN U
+0B42 ORIYA VOWEL SIGN UU
+0B43 ORIYA VOWEL SIGN VOCALIC R
+0B47 ORIYA VOWEL SIGN E
+ * stands to the left of the consonant
+0B48 ORIYA VOWEL SIGN AI
+ * pieces left of and above the consonant
+ : 0B47 0B56
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for most processing.
+0B4B ORIYA VOWEL SIGN O
+ : 0B47 0B3E
+0B4C ORIYA VOWEL SIGN AU
+ : 0B47 0B57
+@ Various signs
+0B4D ORIYA SIGN VIRAMA
+0B56 ORIYA AI LENGTH MARK
+0B57 ORIYA AU LENGTH MARK
+@ Additional consonants
+0B5C ORIYA LETTER RRA
+ = dda
+ : 0B21 0B3C
+0B5D ORIYA LETTER RHA
+ = ddha
+ : 0B22 0B3C
+0B5F ORIYA LETTER YYA
+ = ya
+@ Generic additions
+0B60 ORIYA LETTER VOCALIC RR
+0B61 ORIYA LETTER VOCALIC LL
+@ Digits
+0B66 ORIYA DIGIT ZERO
+0B67 ORIYA DIGIT ONE
+0B68 ORIYA DIGIT TWO
+0B69 ORIYA DIGIT THREE
+0B6A ORIYA DIGIT FOUR
+0B6B ORIYA DIGIT FIVE
+0B6C ORIYA DIGIT SIX
+0B6D ORIYA DIGIT SEVEN
+0B6E ORIYA DIGIT EIGHT
+0B6F ORIYA DIGIT NINE
+@ Oriya-specific additions
+0B70 ORIYA ISSHAR
+0B71 ORIYA LETTER WA
+ x (oriya letter o - 0B13)
+ x (oriya letter va - 0B35)
+@@ 0B80 Tamil 0BFF
+@ Based on ISCII 1988
+@ Various signs
+0B82 TAMIL SIGN ANUSVARA
+ * not used in Tamil
+0B83 TAMIL SIGN VISARGA
+ = aytham
+@ Independent vowels
+0B85 TAMIL LETTER A
+0B86 TAMIL LETTER AA
+0B87 TAMIL LETTER I
+0B88 TAMIL LETTER II
+0B89 TAMIL LETTER U
+0B8A TAMIL LETTER UU
+0B8E TAMIL LETTER E
+0B8F TAMIL LETTER EE
+0B90 TAMIL LETTER AI
+0B92 TAMIL LETTER O
+0B93 TAMIL LETTER OO
+0B94 TAMIL LETTER AU
+ : 0B92 0BD7
+@ Consonants
+0B95 TAMIL LETTER KA
+0B99 TAMIL LETTER NGA
+0B9A TAMIL LETTER CA
+0B9C TAMIL LETTER JA
+0B9E TAMIL LETTER NYA
+0B9F TAMIL LETTER TTA
+0BA3 TAMIL LETTER NNA
+0BA4 TAMIL LETTER TA
+0BA8 TAMIL LETTER NA
+0BA9 TAMIL LETTER NNNA
+0BAA TAMIL LETTER PA
+0BAE TAMIL LETTER MA
+0BAF TAMIL LETTER YA
+0BB0 TAMIL LETTER RA
+0BB1 TAMIL LETTER RRA
+0BB2 TAMIL LETTER LA
+0BB3 TAMIL LETTER LLA
+0BB4 TAMIL LETTER LLLA
+0BB5 TAMIL LETTER VA
+0BB6 TAMIL LETTER SHA
+0BB7 TAMIL LETTER SSA
+0BB8 TAMIL LETTER SA
+0BB9 TAMIL LETTER HA
+@ Dependent vowel signs
+0BBE TAMIL VOWEL SIGN AA
+0BBF TAMIL VOWEL SIGN I
+0BC0 TAMIL VOWEL SIGN II
+0BC1 TAMIL VOWEL SIGN U
+0BC2 TAMIL VOWEL SIGN UU
+0BC6 TAMIL VOWEL SIGN E
+ * stands to the left of the consonant
+0BC7 TAMIL VOWEL SIGN EE
+ * stands to the left of the consonant
+0BC8 TAMIL VOWEL SIGN AI
+ * stands to the left of the consonant
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for most processing.
+0BCA TAMIL VOWEL SIGN O
+ : 0BC6 0BBE
+0BCB TAMIL VOWEL SIGN OO
+ : 0BC7 0BBE
+0BCC TAMIL VOWEL SIGN AU
+ : 0BC6 0BD7
+@ Various signs
+0BCD TAMIL SIGN VIRAMA
+0BD7 TAMIL AU LENGTH MARK
+@ Digits
+0BE6 TAMIL DIGIT ZERO
+0BE7 TAMIL DIGIT ONE
+0BE8 TAMIL DIGIT TWO
+0BE9 TAMIL DIGIT THREE
+0BEA TAMIL DIGIT FOUR
+0BEB TAMIL DIGIT FIVE
+0BEC TAMIL DIGIT SIX
+0BED TAMIL DIGIT SEVEN
+0BEE TAMIL DIGIT EIGHT
+0BEF TAMIL DIGIT NINE
+@ Tamil numerics
+0BF0 TAMIL NUMBER TEN
+0BF1 TAMIL NUMBER ONE HUNDRED
+0BF2 TAMIL NUMBER ONE THOUSAND
+@ Tamil symbols
+0BF3 TAMIL DAY SIGN (Naal)
+0BF4 TAMIL MONTH SIGN (Maatham)
+0BF5 TAMIL YEAR SIGN (Varudam)
+0BF6 TAMIL DEBIT SIGN (Patru)
+0BF7 TAMIL CREDIT SIGN (Varavu)
+0BF8 TAMIL AS ABOVE SIGN (Merpadi)
+@ Currency symbol
+0BF9 TAMIL RUPEE SIGN (Rupai)
+@ Tamil symbol
+0BFA TAMIL NUMBER SIGN (Enn)
+@@ 0C00 Telugu 0C7F
+@ Based on ISCII 1988
+@ Various signs
+0C01 TELUGU SIGN CANDRABINDU
+0C02 TELUGU SIGN ANUSVARA
+ = sunna
+0C03 TELUGU SIGN VISARGA
+@ Independent vowels
+0C05 TELUGU LETTER A
+0C06 TELUGU LETTER AA
+0C07 TELUGU LETTER I
+0C08 TELUGU LETTER II
+0C09 TELUGU LETTER U
+0C0A TELUGU LETTER UU
+0C0B TELUGU LETTER VOCALIC R
+0C0C TELUGU LETTER VOCALIC L
+0C0E TELUGU LETTER E
+0C0F TELUGU LETTER EE
+0C10 TELUGU LETTER AI
+0C12 TELUGU LETTER O
+0C13 TELUGU LETTER OO
+0C14 TELUGU LETTER AU
+@ Consonants
+0C15 TELUGU LETTER KA
+0C16 TELUGU LETTER KHA
+0C17 TELUGU LETTER GA
+0C18 TELUGU LETTER GHA
+0C19 TELUGU LETTER NGA
+0C1A TELUGU LETTER CA
+0C1B TELUGU LETTER CHA
+0C1C TELUGU LETTER JA
+0C1D TELUGU LETTER JHA
+0C1E TELUGU LETTER NYA
+0C1F TELUGU LETTER TTA
+0C20 TELUGU LETTER TTHA
+0C21 TELUGU LETTER DDA
+0C22 TELUGU LETTER DDHA
+0C23 TELUGU LETTER NNA
+0C24 TELUGU LETTER TA
+0C25 TELUGU LETTER THA
+0C26 TELUGU LETTER DA
+0C27 TELUGU LETTER DHA
+0C28 TELUGU LETTER NA
+0C2A TELUGU LETTER PA
+0C2B TELUGU LETTER PHA
+0C2C TELUGU LETTER BA
+0C2D TELUGU LETTER BHA
+0C2E TELUGU LETTER MA
+0C2F TELUGU LETTER YA
+0C30 TELUGU LETTER RA
+0C31 TELUGU LETTER RRA
+0C32 TELUGU LETTER LA
+0C33 TELUGU LETTER LLA
+0C35 TELUGU LETTER VA
+0C36 TELUGU LETTER SHA
+0C37 TELUGU LETTER SSA
+0C38 TELUGU LETTER SA
+0C39 TELUGU LETTER HA
+@ Dependent vowel signs
+0C3E TELUGU VOWEL SIGN AA
+0C3F TELUGU VOWEL SIGN I
+0C40 TELUGU VOWEL SIGN II
+0C41 TELUGU VOWEL SIGN U
+0C42 TELUGU VOWEL SIGN UU
+0C43 TELUGU VOWEL SIGN VOCALIC R
+0C44 TELUGU VOWEL SIGN VOCALIC RR
+0C46 TELUGU VOWEL SIGN E
+0C47 TELUGU VOWEL SIGN EE
+0C48 TELUGU VOWEL SIGN AI
+ : 0C46 0C56
+0C4A TELUGU VOWEL SIGN O
+0C4B TELUGU VOWEL SIGN OO
+0C4C TELUGU VOWEL SIGN AU
+@ Various signs
+0C4D TELUGU SIGN VIRAMA
+ = halant (the preferred name)
+0C55 TELUGU LENGTH MARK
+0C56 TELUGU AI LENGTH MARK
+@ Generic additions
+0C60 TELUGU LETTER VOCALIC RR
+0C61 TELUGU LETTER VOCALIC LL
+@ Digits
+0C66 TELUGU DIGIT ZERO
+0C67 TELUGU DIGIT ONE
+0C68 TELUGU DIGIT TWO
+0C69 TELUGU DIGIT THREE
+0C6A TELUGU DIGIT FOUR
+0C6B TELUGU DIGIT FIVE
+0C6C TELUGU DIGIT SIX
+0C6D TELUGU DIGIT SEVEN
+0C6E TELUGU DIGIT EIGHT
+0C6F TELUGU DIGIT NINE
+@@ 0C80 Kannada 0CFF
+@ Based on ISCII 1988
+@ Various signs
+0C82 KANNADA SIGN ANUSVARA
+0C83 KANNADA SIGN VISARGA
+@ Independent vowels
+0C85 KANNADA LETTER A
+0C86 KANNADA LETTER AA
+0C87 KANNADA LETTER I
+0C88 KANNADA LETTER II
+0C89 KANNADA LETTER U
+0C8A KANNADA LETTER UU
+0C8B KANNADA LETTER VOCALIC R
+0C8C KANNADA LETTER VOCALIC L
+0C8E KANNADA LETTER E
+0C8F KANNADA LETTER EE
+0C90 KANNADA LETTER AI
+0C92 KANNADA LETTER O
+0C93 KANNADA LETTER OO
+0C94 KANNADA LETTER AU
+@ Consonants
+0C95 KANNADA LETTER KA
+0C96 KANNADA LETTER KHA
+0C97 KANNADA LETTER GA
+0C98 KANNADA LETTER GHA
+0C99 KANNADA LETTER NGA
+0C9A KANNADA LETTER CA
+0C9B KANNADA LETTER CHA
+0C9C KANNADA LETTER JA
+0C9D KANNADA LETTER JHA
+0C9E KANNADA LETTER NYA
+0C9F KANNADA LETTER TTA
+0CA0 KANNADA LETTER TTHA
+0CA1 KANNADA LETTER DDA
+0CA2 KANNADA LETTER DDHA
+0CA3 KANNADA LETTER NNA
+0CA4 KANNADA LETTER TA
+0CA5 KANNADA LETTER THA
+0CA6 KANNADA LETTER DA
+0CA7 KANNADA LETTER DHA
+0CA8 KANNADA LETTER NA
+0CAA KANNADA LETTER PA
+0CAB KANNADA LETTER PHA
+0CAC KANNADA LETTER BA
+0CAD KANNADA LETTER BHA
+0CAE KANNADA LETTER MA
+0CAF KANNADA LETTER YA
+0CB0 KANNADA LETTER RA
+0CB1 KANNADA LETTER RRA
+0CB2 KANNADA LETTER LA
+0CB3 KANNADA LETTER LLA
+0CB5 KANNADA LETTER VA
+0CB6 KANNADA LETTER SHA
+0CB7 KANNADA LETTER SSA
+0CB8 KANNADA LETTER SA
+0CB9 KANNADA LETTER HA
+@ Various signs
+0CBC KANNADA SIGN NUKTA
+0CBD KANNADA SIGN AVAGRAHA
+@ Dependent vowel signs
+0CBE KANNADA VOWEL SIGN AA
+0CBF KANNADA VOWEL SIGN I
+0CC0 KANNADA VOWEL SIGN II
+ : 0CBF 0CD5
+0CC1 KANNADA VOWEL SIGN U
+0CC2 KANNADA VOWEL SIGN UU
+0CC3 KANNADA VOWEL SIGN VOCALIC R
+0CC4 KANNADA VOWEL SIGN VOCALIC RR
+0CC6 KANNADA VOWEL SIGN E
+0CC7 KANNADA VOWEL SIGN EE
+ : 0CC6 0CD5
+0CC8 KANNADA VOWEL SIGN AI
+ : 0CC6 0CD6
+0CCA KANNADA VOWEL SIGN O
+ : 0CC6 0CC2
+0CCB KANNADA VOWEL SIGN OO
+ : 0CCA 0CD5
+0CCC KANNADA VOWEL SIGN AU
+@ Various signs
+0CCD KANNADA SIGN VIRAMA
+ * preferred name is halant
+0CD5 KANNADA LENGTH MARK
+0CD6 KANNADA AI LENGTH MARK
+@ Additional consonants
+0CDE KANNADA LETTER FA
+ * obsolete historic letter
+ * name is a mistake for LLLA
+@ Generic additions
+0CE0 KANNADA LETTER VOCALIC RR
+0CE1 KANNADA LETTER VOCALIC LL
+@ Digits
+0CE6 KANNADA DIGIT ZERO
+0CE7 KANNADA DIGIT ONE
+0CE8 KANNADA DIGIT TWO
+0CE9 KANNADA DIGIT THREE
+0CEA KANNADA DIGIT FOUR
+0CEB KANNADA DIGIT FIVE
+0CEC KANNADA DIGIT SIX
+0CED KANNADA DIGIT SEVEN
+0CEE KANNADA DIGIT EIGHT
+0CEF KANNADA DIGIT NINE
+@@ 0D00 Malayalam 0D7F
+@ Based on ISCII 1988
+@ Various signs
+0D02 MALAYALAM SIGN ANUSVARA
+0D03 MALAYALAM SIGN VISARGA
+@ Independent vowels
+0D05 MALAYALAM LETTER A
+0D06 MALAYALAM LETTER AA
+0D07 MALAYALAM LETTER I
+0D08 MALAYALAM LETTER II
+0D09 MALAYALAM LETTER U
+0D0A MALAYALAM LETTER UU
+0D0B MALAYALAM LETTER VOCALIC R
+0D0C MALAYALAM LETTER VOCALIC L
+0D0E MALAYALAM LETTER E
+0D0F MALAYALAM LETTER EE
+0D10 MALAYALAM LETTER AI
+0D12 MALAYALAM LETTER O
+0D13 MALAYALAM LETTER OO
+0D14 MALAYALAM LETTER AU
+@ Consonants
+@+ Alternate romanizations are shown as aliases for some letters to clarify their identity.
+0D15 MALAYALAM LETTER KA
+0D16 MALAYALAM LETTER KHA
+0D17 MALAYALAM LETTER GA
+0D18 MALAYALAM LETTER GHA
+0D19 MALAYALAM LETTER NGA
+0D1A MALAYALAM LETTER CA
+ = cha
+0D1B MALAYALAM LETTER CHA
+ = chha
+0D1C MALAYALAM LETTER JA
+0D1D MALAYALAM LETTER JHA
+0D1E MALAYALAM LETTER NYA
+ = nha
+0D1F MALAYALAM LETTER TTA
+ = ta
+0D20 MALAYALAM LETTER TTHA
+ = tta
+0D21 MALAYALAM LETTER DDA
+ = hard da
+0D22 MALAYALAM LETTER DDHA
+ = hard dda
+0D23 MALAYALAM LETTER NNA
+ = hard na
+0D24 MALAYALAM LETTER TA
+ = tha
+0D25 MALAYALAM LETTER THA
+ = ttha
+0D26 MALAYALAM LETTER DA
+ = soft da
+0D27 MALAYALAM LETTER DHA
+ = soft dda
+0D28 MALAYALAM LETTER NA
+0D2A MALAYALAM LETTER PA
+0D2B MALAYALAM LETTER PHA
+0D2C MALAYALAM LETTER BA
+0D2D MALAYALAM LETTER BHA
+0D2E MALAYALAM LETTER MA
+0D2F MALAYALAM LETTER YA
+0D30 MALAYALAM LETTER RA
+0D31 MALAYALAM LETTER RRA
+0D32 MALAYALAM LETTER LA
+0D33 MALAYALAM LETTER LLA
+0D34 MALAYALAM LETTER LLLA
+ = zha
+0D35 MALAYALAM LETTER VA
+0D36 MALAYALAM LETTER SHA
+ = soft sha
+0D37 MALAYALAM LETTER SSA
+ = sha
+0D38 MALAYALAM LETTER SA
+0D39 MALAYALAM LETTER HA
+@ Dependent vowel signs
+0D3E MALAYALAM VOWEL SIGN AA
+0D3F MALAYALAM VOWEL SIGN I
+0D40 MALAYALAM VOWEL SIGN II
+0D41 MALAYALAM VOWEL SIGN U
+0D42 MALAYALAM VOWEL SIGN UU
+0D43 MALAYALAM VOWEL SIGN VOCALIC R
+0D46 MALAYALAM VOWEL SIGN E
+ * stands to the left of the consonant
+0D47 MALAYALAM VOWEL SIGN EE
+ * stands to the left of the consonant
+0D48 MALAYALAM VOWEL SIGN AI
+ * stands to the left of the consonant
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for most processing.
+0D4A MALAYALAM VOWEL SIGN O
+ : 0D46 0D3E
+0D4B MALAYALAM VOWEL SIGN OO
+ : 0D47 0D3E
+0D4C MALAYALAM VOWEL SIGN AU
+ : 0D46 0D57
+@ Various signs
+0D4D MALAYALAM SIGN VIRAMA
+ = chandrakkala (the preferred name)
+ = vowel half-u
+0D57 MALAYALAM AU LENGTH MARK
+ * only a representation of the right half of 0D4C
+@ Generic additions
+0D60 MALAYALAM LETTER VOCALIC RR
+0D61 MALAYALAM LETTER VOCALIC LL
+@ Digits
+0D66 MALAYALAM DIGIT ZERO
+0D67 MALAYALAM DIGIT ONE
+0D68 MALAYALAM DIGIT TWO
+0D69 MALAYALAM DIGIT THREE
+0D6A MALAYALAM DIGIT FOUR
+0D6B MALAYALAM DIGIT FIVE
+0D6C MALAYALAM DIGIT SIX
+0D6D MALAYALAM DIGIT SEVEN
+0D6E MALAYALAM DIGIT EIGHT
+0D6F MALAYALAM DIGIT NINE
+@@ 0D80 Sinhala 0DFF
+@ Various signs
+0D82 SINHALA SIGN ANUSVARAYA
+ = anusvara
+0D83 SINHALA SIGN VISARGAYA
+ = visarga
+@ Independent vowels
+0D85 SINHALA LETTER AYANNA
+ = sinhala letter a
+0D86 SINHALA LETTER AAYANNA
+ = sinhala letter aa
+0D87 SINHALA LETTER AEYANNA
+ = sinhala letter ae
+0D88 SINHALA LETTER AEEYANNA
+ = sinhala letter aae
+0D89 SINHALA LETTER IYANNA
+ = sinhala letter i
+0D8A SINHALA LETTER IIYANNA
+ = sinhala letter ii
+0D8B SINHALA LETTER UYANNA
+ = sinhala letter u
+0D8C SINHALA LETTER UUYANNA
+ = sinhala letter uu
+0D8D SINHALA LETTER IRUYANNA
+ = sinhala letter vocalic r
+0D8E SINHALA LETTER IRUUYANNA
+ = sinhala letter vocalic rr
+0D8F SINHALA LETTER ILUYANNA
+ = sinhala letter vocalic l
+0D90 SINHALA LETTER ILUUYANNA
+ = sinhala letter vocalic ll
+0D91 SINHALA LETTER EYANNA
+ = sinhala letter e
+0D92 SINHALA LETTER EEYANNA
+ = sinhala letter ee
+0D93 SINHALA LETTER AIYANNA
+ = sinhala letter ai
+0D94 SINHALA LETTER OYANNA
+ = sinhala letter o
+0D95 SINHALA LETTER OOYANNA
+ = sinhala letter oo
+0D96 SINHALA LETTER AUYANNA
+ = sinhala letter au
+@ Consonants
+0D9A SINHALA LETTER ALPAPRAANA KAYANNA
+ = sinhala letter ka
+0D9B SINHALA LETTER MAHAAPRAANA KAYANNA
+ = sinhala letter kha
+0D9C SINHALA LETTER ALPAPRAANA GAYANNA
+ = sinhala letter ga
+0D9D SINHALA LETTER MAHAAPRAANA GAYANNA
+ = sinhala letter gha
+0D9E SINHALA LETTER KANTAJA NAASIKYAYA
+ = sinhala letter nga
+0D9F SINHALA LETTER SANYAKA GAYANNA
+ = sinhala letter nnga
+0DA0 SINHALA LETTER ALPAPRAANA CAYANNA
+ = sinhala letter ca
+0DA1 SINHALA LETTER MAHAAPRAANA CAYANNA
+ = sinhala letter cha
+0DA2 SINHALA LETTER ALPAPRAANA JAYANNA
+ = sinhala letter ja
+0DA3 SINHALA LETTER MAHAAPRAANA JAYANNA
+ = sinhala letter jha
+0DA4 SINHALA LETTER TAALUJA NAASIKYAYA
+ = sinhala letter nya
+0DA5 SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+ = sinhala letter jnya
+0DA6 SINHALA LETTER SANYAKA JAYANNA
+ = sinhala letter nyja
+0DA7 SINHALA LETTER ALPAPRAANA TTAYANNA
+ = sinhala letter tta
+0DA8 SINHALA LETTER MAHAAPRAANA TTAYANNA
+ = sinhala letter ttha
+0DA9 SINHALA LETTER ALPAPRAANA DDAYANNA
+ = sinhala letter dda
+0DAA SINHALA LETTER MAHAAPRAANA DDAYANNA
+ = sinhala letter ddha
+0DAB SINHALA LETTER MUURDHAJA NAYANNA
+ = sinhala letter nna
+0DAC SINHALA LETTER SANYAKA DDAYANNA
+ = sinhala letter nndda
+0DAD SINHALA LETTER ALPAPRAANA TAYANNA
+ = sinhala letter ta
+0DAE SINHALA LETTER MAHAAPRAANA TAYANNA
+ = sinhala letter tha
+0DAF SINHALA LETTER ALPAPRAANA DAYANNA
+ = sinhala letter da
+0DB0 SINHALA LETTER MAHAAPRAANA DAYANNA
+ = sinhala letter dha
+0DB1 SINHALA LETTER DANTAJA NAYANNA
+ = sinhala letter na
+0DB3 SINHALA LETTER SANYAKA DAYANNA
+ = sinhala letter nda
+0DB4 SINHALA LETTER ALPAPRAANA PAYANNA
+ = sinhala letter pa
+0DB5 SINHALA LETTER MAHAAPRAANA PAYANNA
+ = sinhala letter pha
+0DB6 SINHALA LETTER ALPAPRAANA BAYANNA
+ = sinhala letter ba
+0DB7 SINHALA LETTER MAHAAPRAANA BAYANNA
+ = sinhala letter bha
+0DB8 SINHALA LETTER MAYANNA
+ = sinhala letter ma
+0DB9 SINHALA LETTER AMBA BAYANNA
+ = sinhala letter mba
+0DBA SINHALA LETTER YAYANNA
+ = sinhala letter ya
+0DBB SINHALA LETTER RAYANNA
+ = sinhala letter ra
+0DBD SINHALA LETTER DANTAJA LAYANNA
+ = sinhala letter la
+ * dental
+0DC0 SINHALA LETTER VAYANNA
+ = sinhala letter va
+0DC1 SINHALA LETTER TAALUJA SAYANNA
+ = sinhala letter sha
+0DC2 SINHALA LETTER MUURDHAJA SAYANNA
+ = sinhala letter ssa
+ * retroflex
+0DC3 SINHALA LETTER DANTAJA SAYANNA
+ = sinhala letter sa
+ * dental
+0DC4 SINHALA LETTER HAYANNA
+ = sinhala letter ha
+0DC5 SINHALA LETTER MUURDHAJA LAYANNA
+ = sinhala letter lla
+ * retroflex
+0DC6 SINHALA LETTER FAYANNA
+ = sinhala letter fa
+@ Sign
+0DCA SINHALA SIGN AL-LAKUNA
+ = virama
+@ Dependent vowel signs
+0DCF SINHALA VOWEL SIGN AELA-PILLA
+ = sinhala vowel sign aa
+0DD0 SINHALA VOWEL SIGN KETTI AEDA-PILLA
+ = sinhala vowel sign ae
+0DD1 SINHALA VOWEL SIGN DIGA AEDA-PILLA
+ = sinhala vowel sign aae
+0DD2 SINHALA VOWEL SIGN KETTI IS-PILLA
+ = sinhala vowel sign i
+0DD3 SINHALA VOWEL SIGN DIGA IS-PILLA
+ = sinhala vowel sign ii
+0DD4 SINHALA VOWEL SIGN KETTI PAA-PILLA
+ = sinhala vowel sign u
+0DD6 SINHALA VOWEL SIGN DIGA PAA-PILLA
+ = sinhala vowel sign uu
+0DD8 SINHALA VOWEL SIGN GAETTA-PILLA
+ = sinhala vowel sign vocalic r
+0DD9 SINHALA VOWEL SIGN KOMBUVA
+ = sinhala vowel sign e
+0DDA SINHALA VOWEL SIGN DIGA KOMBUVA
+ = sinhala vowel sign ee
+ : 0DD9 0DCA
+0DDB SINHALA VOWEL SIGN KOMBU DEKA
+ = sinhala vowel sign ai
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for most processing.
+0DDC SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+ = sinhala vowel sign o
+ : 0DD9 0DCF
+0DDD SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+ = sinhala vowel sign oo
+ : 0DDC 0DCA
+0DDE SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+ = sinhala vowel sign au
+ : 0DD9 0DDF
+@ Dependent vowel sign
+0DDF SINHALA VOWEL SIGN GAYANUKITTA
+ = sinhala vowel sign vocalic l
+@ Additional dependent vowel signs
+0DF2 SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+ = sinhala vowel sign vocalic rr
+0DF3 SINHALA VOWEL SIGN DIGA GAYANUKITTA
+ = sinhala vowel sign vocalic ll
+@ Punctuation
+0DF4 SINHALA PUNCTUATION KUNDDALIYA
+@@ 0E00 Thai 0E7F
+@ Based on TIS 620-2533
+@ Consonants
+0E01 THAI CHARACTER KO KAI
+0E02 THAI CHARACTER KHO KHAI
+0E03 THAI CHARACTER KHO KHUAT
+0E04 THAI CHARACTER KHO KHWAI
+0E05 THAI CHARACTER KHO KHON
+0E06 THAI CHARACTER KHO RAKHANG
+0E07 THAI CHARACTER NGO NGU
+0E08 THAI CHARACTER CHO CHAN
+0E09 THAI CHARACTER CHO CHING
+0E0A THAI CHARACTER CHO CHANG
+0E0B THAI CHARACTER SO SO
+0E0C THAI CHARACTER CHO CHOE
+0E0D THAI CHARACTER YO YING
+0E0E THAI CHARACTER DO CHADA
+0E0F THAI CHARACTER TO PATAK
+0E10 THAI CHARACTER THO THAN
+0E11 THAI CHARACTER THO NANGMONTHO
+0E12 THAI CHARACTER THO PHUTHAO
+0E13 THAI CHARACTER NO NEN
+0E14 THAI CHARACTER DO DEK
+0E15 THAI CHARACTER TO TAO
+0E16 THAI CHARACTER THO THUNG
+0E17 THAI CHARACTER THO THAHAN
+0E18 THAI CHARACTER THO THONG
+0E19 THAI CHARACTER NO NU
+0E1A THAI CHARACTER BO BAIMAI
+0E1B THAI CHARACTER PO PLA
+0E1C THAI CHARACTER PHO PHUNG
+0E1D THAI CHARACTER FO FA
+0E1E THAI CHARACTER PHO PHAN
+0E1F THAI CHARACTER FO FAN
+0E20 THAI CHARACTER PHO SAMPHAO
+0E21 THAI CHARACTER MO MA
+0E22 THAI CHARACTER YO YAK
+0E23 THAI CHARACTER RO RUA
+0E24 THAI CHARACTER RU
+ * independent vowel letter used to write Sanskrit
+0E25 THAI CHARACTER LO LING
+0E26 THAI CHARACTER LU
+ * independent vowel letter used to write Sanskrit
+0E27 THAI CHARACTER WO WAEN
+0E28 THAI CHARACTER SO SALA
+0E29 THAI CHARACTER SO RUSI
+0E2A THAI CHARACTER SO SUA
+0E2B THAI CHARACTER HO HIP
+0E2C THAI CHARACTER LO CHULA
+0E2D THAI CHARACTER O ANG
+0E2E THAI CHARACTER HO NOKHUK
+ = ho nok huk
+@ Sign
+0E2F THAI CHARACTER PAIYANNOI (paiyan noi)
+ = paiyan noi
+ * ellipsis, abbreviation
+@ Vowels
+0E30 THAI CHARACTER SARA A
+0E31 THAI CHARACTER MAI HAN-AKAT
+0E32 THAI CHARACTER SARA AA
+ x (thai character lakkhangyao - 0E45)
+0E33 THAI CHARACTER SARA AM
+ # 0E4D 0E32
+0E34 THAI CHARACTER SARA I
+0E35 THAI CHARACTER SARA II
+0E36 THAI CHARACTER SARA UE
+0E37 THAI CHARACTER SARA UEE (sara uue)
+ = sara uue
+0E38 THAI CHARACTER SARA U
+0E39 THAI CHARACTER SARA UU
+0E3A THAI CHARACTER PHINTHU
+ * Pali virama
+@ Currency symbol
+0E3F THAI CURRENCY SYMBOL BAHT
+@ Vowels
+0E40 THAI CHARACTER SARA E
+0E41 THAI CHARACTER SARA AE
+0E42 THAI CHARACTER SARA O
+0E43 THAI CHARACTER SARA AI MAIMUAN (sara ai mai muan)
+ = sara ai mai muan
+0E44 THAI CHARACTER SARA AI MAIMALAI (sara ai mai malai)
+ = sara ai mai malai
+0E45 THAI CHARACTER LAKKHANGYAO (lakkhang yao)
+ = lakkhang yao
+ * special vowel length indication used with 0E24 or 0E26
+ x (thai character sara aa - 0E32)
+@ Sign
+0E46 THAI CHARACTER MAIYAMOK (mai yamok)
+ = mai yamok
+ * repetition
+@ Vowel
+0E47 THAI CHARACTER MAITAIKHU (mai taikhu)
+ = mai taikhu
+@ Tone marks
+0E48 THAI CHARACTER MAI EK
+0E49 THAI CHARACTER MAI THO
+0E4A THAI CHARACTER MAI TRI
+0E4B THAI CHARACTER MAI CHATTAWA
+@ Signs
+0E4C THAI CHARACTER THANTHAKHAT
+ * cancellation mark
+0E4D THAI CHARACTER NIKHAHIT (nikkhahit)
+ = nikkhahit
+ * final nasal
+0E4E THAI CHARACTER YAMAKKAN
+0E4F THAI CHARACTER FONGMAN
+ * used as a bullet
+ x (khmer sign phnaek muan - 17D9)
+@ Digits
+0E50 THAI DIGIT ZERO
+0E51 THAI DIGIT ONE
+0E52 THAI DIGIT TWO
+0E53 THAI DIGIT THREE
+0E54 THAI DIGIT FOUR
+0E55 THAI DIGIT FIVE
+0E56 THAI DIGIT SIX
+0E57 THAI DIGIT SEVEN
+0E58 THAI DIGIT EIGHT
+0E59 THAI DIGIT NINE
+@ Signs
+0E5A THAI CHARACTER ANGKHANKHU
+ * used to mark end of long sections
+ * used in combination with 0E30 to mark end of a verse
+0E5B THAI CHARACTER KHOMUT
+ * used to mark end of chapter or document
+ x (khmer sign koomuut - 17DA)
+@@ 0E80 Lao 0EFF
+@ Based on TIS 620-2529
+@ Consonants
+0E81 LAO LETTER KO
+0E82 LAO LETTER KHO SUNG
+0E84 LAO LETTER KHO TAM
+0E87 LAO LETTER NGO
+0E88 LAO LETTER CO
+0E8A LAO LETTER SO TAM
+0E8D LAO LETTER NYO
+0E94 LAO LETTER DO
+0E95 LAO LETTER TO
+0E96 LAO LETTER THO SUNG
+0E97 LAO LETTER THO TAM
+0E99 LAO LETTER NO
+0E9A LAO LETTER BO
+0E9B LAO LETTER PO
+0E9C LAO LETTER PHO SUNG
+0E9D LAO LETTER FO TAM
+0E9E LAO LETTER PHO TAM
+0E9F LAO LETTER FO SUNG
+0EA1 LAO LETTER MO
+0EA2 LAO LETTER YO
+0EA3 LAO LETTER LO LING
+0EA5 LAO LETTER LO LOOT
+0EA7 LAO LETTER WO
+0EAA LAO LETTER SO SUNG
+0EAB LAO LETTER HO SUNG
+0EAD LAO LETTER O
+0EAE LAO LETTER HO TAM
+@ Sign
+0EAF LAO ELLIPSIS
+@ Vowels
+0EB0 LAO VOWEL SIGN A
+0EB1 LAO VOWEL SIGN MAI KAN
+ * vowel shortener
+0EB2 LAO VOWEL SIGN AA
+0EB3 LAO VOWEL SIGN AM
+ # 0ECD 0EB2
+0EB4 LAO VOWEL SIGN I
+0EB5 LAO VOWEL SIGN II
+0EB6 LAO VOWEL SIGN Y
+0EB7 LAO VOWEL SIGN YY
+0EB8 LAO VOWEL SIGN U
+0EB9 LAO VOWEL SIGN UU
+0EBB LAO VOWEL SIGN MAI KON
+@ Signs
+0EBC LAO SEMIVOWEL SIGN LO
+0EBD LAO SEMIVOWEL SIGN NYO
+@ Vowels
+0EC0 LAO VOWEL SIGN E
+0EC1 LAO VOWEL SIGN EI
+0EC2 LAO VOWEL SIGN O
+0EC3 LAO VOWEL SIGN AY
+0EC4 LAO VOWEL SIGN AI
+@ Sign
+0EC6 LAO KO LA
+ * repetition
+@ Tone marks
+0EC8 LAO TONE MAI EK
+0EC9 LAO TONE MAI THO
+0ECA LAO TONE MAI TI
+0ECB LAO TONE MAI CATAWA
+@ Signs
+0ECC LAO CANCELLATION MARK
+0ECD LAO NIGGAHITA
+ * final nasal
+@ Digits
+0ED0 LAO DIGIT ZERO
+0ED1 LAO DIGIT ONE
+0ED2 LAO DIGIT TWO
+0ED3 LAO DIGIT THREE
+0ED4 LAO DIGIT FOUR
+0ED5 LAO DIGIT FIVE
+0ED6 LAO DIGIT SIX
+0ED7 LAO DIGIT SEVEN
+0ED8 LAO DIGIT EIGHT
+0ED9 LAO DIGIT NINE
+@ Digraphs
+0EDC LAO HO NO
+ # 0EAB 0E99
+0EDD LAO HO MO
+ # 0EAB 0EA1
+@@ 0F00 Tibetan 0FFF
+@ Syllable
+0F00 TIBETAN SYLLABLE OM
+@ Head marks
+0F01 TIBETAN MARK GTER YIG MGO TRUNCATED A (ter yik go a thung)
+0F02 TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA (ter yik go wum nam chey ma)
+0F03 TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA (ter yik go wum ter tsek ma)
+0F04 TIBETAN MARK INITIAL YIG MGO MDUN MA (yik go dun ma)
+ * honorific; marks beginning of text or start of new folio
+ x (mongolian birga - 1800)
+0F05 TIBETAN MARK CLOSING YIG MGO SGAB MA (yik go kab ma)
+ * follows and ligates with initial yig-mgo
+0F06 TIBETAN MARK CARET YIG MGO PHUR SHAD MA (yik go pur shey ma)
+0F07 TIBETAN MARK YIG MGO TSHEG SHAD MA (yik go tsek shey ma)
+@ Marks and signs
+0F08 TIBETAN MARK SBRUL SHAD (drul shey)
+ * separates sections of meaning equivalent to topics and sub-topics
+0F09 TIBETAN MARK BSKUR YIG MGO (kur yik go)
+ * list enumerator, used in Bhutan
+0F0A TIBETAN MARK BKA- SHOG YIG MGO (ka sho yik go)
+ * petition honorific, used in Bhutan
+0F0B TIBETAN MARK INTERSYLLABIC TSHEG (tsek)
+ * morpheme delimiter (approximate meaning)
+ * the normal tsheg; provides a break opportunity
+ * character name is a misnomer
+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR (tsek tar)
+ * a non-breaking tsheg; inhibits line breaking
+ * character name is a misnomer
+ # <noBreak> 0F0B
+0F0D TIBETAN MARK SHAD (shey)
+ * marks end of a section of text (tshig-grub)
+ x (devanagari danda - 0964)
+0F0E TIBETAN MARK NYIS SHAD (nyi shey)
+ * marks end of a whole topic (don-tshan)
+ x (devanagari double danda - 0965)
+0F0F TIBETAN MARK TSHEG SHAD (tsek shey)
+0F10 TIBETAN MARK NYIS TSHEG SHAD (nyi tsek shey)
+0F11 TIBETAN MARK RIN CHEN SPUNGS SHAD (rinchen pung shey)
+ * shad which follows a tsheg-bar that starts a new line
+0F12 TIBETAN MARK RGYA GRAM SHAD (gya tram shey)
+0F13 TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN (dzu ta me long chen)
+0F14 TIBETAN MARK GTER TSHEG (ter tsek)
+ * used as a comma-like text delimiter
+ x (khmer sign camnuc pii kuuh - 17D6)
+@ Astrological signs
+0F15 TIBETAN LOGOTYPE SIGN CHAD RTAGS (che ta)
+0F16 TIBETAN LOGOTYPE SIGN LHAG RTAGS (hlak ta)
+0F17 TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS (trachen char ta)
+0F18 TIBETAN ASTROLOGICAL SIGN -KHYUD PA (kyu pa)
+ * combines with digits
+0F19 TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS (dong tsu)
+ * combines with digits
+0F1A TIBETAN SIGN RDEL DKAR GCIG (deka chig)
+0F1B TIBETAN SIGN RDEL DKAR GNYIS (deka nyi)
+0F1C TIBETAN SIGN RDEL DKAR GSUM (deka sum)
+0F1D TIBETAN SIGN RDEL NAG GCIG (dena chig)
+0F1E TIBETAN SIGN RDEL NAG GNYIS (dena nyi)
+0F1F TIBETAN SIGN RDEL DKAR RDEL NAG (deka dena)
+@ Digits
+0F20 TIBETAN DIGIT ZERO
+0F21 TIBETAN DIGIT ONE
+0F22 TIBETAN DIGIT TWO
+0F23 TIBETAN DIGIT THREE
+0F24 TIBETAN DIGIT FOUR
+0F25 TIBETAN DIGIT FIVE
+0F26 TIBETAN DIGIT SIX
+0F27 TIBETAN DIGIT SEVEN
+0F28 TIBETAN DIGIT EIGHT
+0F29 TIBETAN DIGIT NINE
+@ Digits minus half
+0F2A TIBETAN DIGIT HALF ONE
+0F2B TIBETAN DIGIT HALF TWO
+0F2C TIBETAN DIGIT HALF THREE
+0F2D TIBETAN DIGIT HALF FOUR
+0F2E TIBETAN DIGIT HALF FIVE
+0F2F TIBETAN DIGIT HALF SIX
+0F30 TIBETAN DIGIT HALF SEVEN
+0F31 TIBETAN DIGIT HALF EIGHT
+0F32 TIBETAN DIGIT HALF NINE
+0F33 TIBETAN DIGIT HALF ZERO
+@ Marks and signs
+0F34 TIBETAN MARK BSDUS RTAGS (du ta)
+ * repetition
+0F35 TIBETAN MARK NGAS BZUNG NYI ZLA (nge zung nyi da)
+ * honorific, emphasis; used like underlining
+0F36 TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN (dzu ta shi mig chen)
+ * marks point of text insertion or annotation
+0F37 TIBETAN MARK NGAS BZUNG SGOR RTAGS (nge zung gor ta)
+ * emphasis; used like underlining
+0F38 TIBETAN MARK CHE MGO (che go)
+0F39 TIBETAN MARK TSA -PHRU (tsa tru)
+ * a lenition mark
+@ Paired punctuation
+0F3A TIBETAN MARK GUG RTAGS GYON (gug ta yun)
+0F3B TIBETAN MARK GUG RTAGS GYAS (gug ta ye)
+ * brackets
+0F3C TIBETAN MARK ANG KHANG GYON (ang kang yun)
+0F3D TIBETAN MARK ANG KHANG GYAS (ang kang ye)
+ * used for bracketing with a roof over
+@ Astrological signs
+0F3E TIBETAN SIGN YAR TSHES (yar tse)
+0F3F TIBETAN SIGN MAR TSHES (mar tse)
+ * marks which combine with digits
+@ Consonants
+0F40 TIBETAN LETTER KA
+0F41 TIBETAN LETTER KHA
+0F42 TIBETAN LETTER GA
+0F43 TIBETAN LETTER GHA
+ : 0F42 0FB7
+0F44 TIBETAN LETTER NGA
+0F45 TIBETAN LETTER CA
+0F46 TIBETAN LETTER CHA
+0F47 TIBETAN LETTER JA
+0F49 TIBETAN LETTER NYA
+0F4A TIBETAN LETTER TTA
+0F4B TIBETAN LETTER TTHA
+0F4C TIBETAN LETTER DDA
+0F4D TIBETAN LETTER DDHA
+ : 0F4C 0FB7
+0F4E TIBETAN LETTER NNA
+0F4F TIBETAN LETTER TA
+0F50 TIBETAN LETTER THA
+0F51 TIBETAN LETTER DA
+0F52 TIBETAN LETTER DHA
+ : 0F51 0FB7
+0F53 TIBETAN LETTER NA
+0F54 TIBETAN LETTER PA
+0F55 TIBETAN LETTER PHA
+0F56 TIBETAN LETTER BA
+0F57 TIBETAN LETTER BHA
+ : 0F56 0FB7
+0F58 TIBETAN LETTER MA
+0F59 TIBETAN LETTER TSA
+0F5A TIBETAN LETTER TSHA
+0F5B TIBETAN LETTER DZA
+0F5C TIBETAN LETTER DZHA
+ : 0F5B 0FB7
+0F5D TIBETAN LETTER WA
+0F5E TIBETAN LETTER ZHA
+0F5F TIBETAN LETTER ZA
+0F60 TIBETAN LETTER -A
+0F61 TIBETAN LETTER YA
+0F62 TIBETAN LETTER RA *
+ * when followed by a subjoined letter = ra mgo
+0F63 TIBETAN LETTER LA
+0F64 TIBETAN LETTER SHA
+0F65 TIBETAN LETTER SSA
+ = reversed sha
+0F66 TIBETAN LETTER SA
+0F67 TIBETAN LETTER HA
+0F68 TIBETAN LETTER A
+ * base for dependent vowels
+0F69 TIBETAN LETTER KSSA
+ : 0F40 0FB5
+0F6A TIBETAN LETTER FIXED-FORM RA *
+ * used only in transliteration and transcription
+@ Dependent vowel signs
+0F71 TIBETAN VOWEL SIGN AA
+ = a-chung
+ * common, vowel-lengthening mark
+0F72 TIBETAN VOWEL SIGN I
+0F73 TIBETAN VOWEL SIGN II
+ * use of this character is discouraged
+ : 0F71 0F72
+0F74 TIBETAN VOWEL SIGN U
+0F75 TIBETAN VOWEL SIGN UU
+ * use of this character is discouraged
+ : 0F71 0F74
+0F76 TIBETAN VOWEL SIGN VOCALIC R
+ : 0FB2 0F80
+0F77 TIBETAN VOWEL SIGN VOCALIC RR
+ * use of this character is strongly discouraged
+ # 0FB2 0F81
+0F78 TIBETAN VOWEL SIGN VOCALIC L
+ : 0FB3 0F80
+0F79 TIBETAN VOWEL SIGN VOCALIC LL
+ * use of this character is strongly discouraged
+ # 0FB3 0F81
+0F7A TIBETAN VOWEL SIGN E
+0F7B TIBETAN VOWEL SIGN EE
+0F7C TIBETAN VOWEL SIGN O
+0F7D TIBETAN VOWEL SIGN OO
+@ Vocalic modification
+0F7E TIBETAN SIGN RJES SU NGA RO (je su nga ro)
+ = anusvara
+0F7F TIBETAN SIGN RNAM BCAD (nam chey)
+ = visarga
+@ Dependent vowel signs
+0F80 TIBETAN VOWEL SIGN REVERSED I
+0F81 TIBETAN VOWEL SIGN REVERSED II
+ * use of this character is discouraged
+ : 0F71 0F80
+@ Marks and signs
+0F82 TIBETAN SIGN NYI ZLA NAA DA (nyi da na da)
+0F83 TIBETAN SIGN SNA LDAN (nan de)
+ x (devanagari sign candrabindu - 0901)
+0F84 TIBETAN MARK HALANTA
+ = srog med
+ x (devanagari sign virama - 094D)
+0F85 TIBETAN MARK PALUTA
+ * transliteration of Sanskrit avagraha
+ x (devanagari sign avagraha - 093D)
+0F86 TIBETAN SIGN LCI RTAGS (ji ta)
+0F87 TIBETAN SIGN YANG RTAGS (yang ta)
+@ Transliteration head letters
+0F88 TIBETAN SIGN LCE TSA CAN (che tsa chen)
+0F89 TIBETAN SIGN MCHU CAN (chu chen)
+0F8A TIBETAN SIGN GRU CAN RGYINGS (tru chen ging)
+ * always followed by 0F82
+0F8B TIBETAN SIGN GRU MED RGYINGS (tru me ging)
+@ Subjoined consonants
+0F90 TIBETAN SUBJOINED LETTER KA
+0F91 TIBETAN SUBJOINED LETTER KHA
+0F92 TIBETAN SUBJOINED LETTER GA
+0F93 TIBETAN SUBJOINED LETTER GHA
+ : 0F92 0FB7
+0F94 TIBETAN SUBJOINED LETTER NGA
+0F95 TIBETAN SUBJOINED LETTER CA
+0F96 TIBETAN SUBJOINED LETTER CHA
+0F97 TIBETAN SUBJOINED LETTER JA
+0F99 TIBETAN SUBJOINED LETTER NYA
+0F9A TIBETAN SUBJOINED LETTER TTA
+0F9B TIBETAN SUBJOINED LETTER TTHA
+0F9C TIBETAN SUBJOINED LETTER DDA
+0F9D TIBETAN SUBJOINED LETTER DDHA
+ : 0F9C 0FB7
+0F9E TIBETAN SUBJOINED LETTER NNA
+0F9F TIBETAN SUBJOINED LETTER TA
+0FA0 TIBETAN SUBJOINED LETTER THA
+0FA1 TIBETAN SUBJOINED LETTER DA
+0FA2 TIBETAN SUBJOINED LETTER DHA
+ : 0FA1 0FB7
+0FA3 TIBETAN SUBJOINED LETTER NA
+0FA4 TIBETAN SUBJOINED LETTER PA
+0FA5 TIBETAN SUBJOINED LETTER PHA
+0FA6 TIBETAN SUBJOINED LETTER BA
+0FA7 TIBETAN SUBJOINED LETTER BHA
+ : 0FA6 0FB7
+0FA8 TIBETAN SUBJOINED LETTER MA
+0FA9 TIBETAN SUBJOINED LETTER TSA
+0FAA TIBETAN SUBJOINED LETTER TSHA
+0FAB TIBETAN SUBJOINED LETTER DZA
+0FAC TIBETAN SUBJOINED LETTER DZHA
+ : 0FAB 0FB7
+0FAD TIBETAN SUBJOINED LETTER WA *
+ = wa-zur, wa-btags
+0FAE TIBETAN SUBJOINED LETTER ZHA
+0FAF TIBETAN SUBJOINED LETTER ZA
+0FB0 TIBETAN SUBJOINED LETTER -A
+ = a-chung
+ * rare, only used for full-sized subjoined letter
+ x (tibetan vowel sign aa - 0F71)
+0FB1 TIBETAN SUBJOINED LETTER YA *
+ = ya-btags
+0FB2 TIBETAN SUBJOINED LETTER RA *
+ = ra-btags
+0FB3 TIBETAN SUBJOINED LETTER LA
+0FB4 TIBETAN SUBJOINED LETTER SHA
+0FB5 TIBETAN SUBJOINED LETTER SSA
+ = reversed subjoined sha
+0FB6 TIBETAN SUBJOINED LETTER SA
+0FB7 TIBETAN SUBJOINED LETTER HA
+0FB8 TIBETAN SUBJOINED LETTER A
+0FB9 TIBETAN SUBJOINED LETTER KSSA
+ : 0F90 0FB5
+@ Fixed-form subjoined consonants
+@+ These characters are used only for transliteration and transcription.
+0FBA TIBETAN SUBJOINED LETTER FIXED-FORM WA *
+0FBB TIBETAN SUBJOINED LETTER FIXED-FORM YA *
+0FBC TIBETAN SUBJOINED LETTER FIXED-FORM RA *
+@ Signs
+0FBE TIBETAN KU RU KHA (kuruka)
+ * often repeated three times; indicates a refrain
+0FBF TIBETAN KU RU KHA BZHI MIG CAN (kuruka shi mik chen)
+ * marks point of text insertion or annotation
+ x (reference mark - 203B)
+@ Cantillation signs
+0FC0 TIBETAN CANTILLATION SIGN HEAVY BEAT
+ * marks a heavy drum beat
+0FC1 TIBETAN CANTILLATION SIGN LIGHT BEAT
+ * marks a light drum beat
+0FC2 TIBETAN CANTILLATION SIGN CANG TE-U (chang tyu)
+ * symbol of a small Tibetan hand drum
+0FC3 TIBETAN CANTILLATION SIGN SBUB -CHAL (bub chey)
+ * symbol of a Tibetan cymbal
+@ Symbols
+0FC4 TIBETAN SYMBOL DRIL BU (drilbu)
+ * symbol of a Tibetan hand bell
+0FC5 TIBETAN SYMBOL RDO RJE (dorje)
+0FC6 TIBETAN SYMBOL PADMA GDAN (pema den)
+0FC7 TIBETAN SYMBOL RDO RJE RGYA GRAM (dorje gya dram)
+0FC8 TIBETAN SYMBOL PHUR PA (phurba)
+0FC9 TIBETAN SYMBOL NOR BU (norbu)
+0FCA TIBETAN SYMBOL NOR BU NYIS -KHYIL (norbu nyi khyi)
+ * the double body symbol
+ x (yin yang - 262F)
+0FCB TIBETAN SYMBOL NOR BU GSUM -KHYIL (norbu sum khyi)
+ * the tri-kaya or triple body symbol
+0FCC TIBETAN SYMBOL NOR BU BZHI -KHYIL (norbu shi khyi)
+ * the quadruple body symbol, a form of the swastika
+ x (cjk unified ideograph-534D - 534D)
+@ Astrological sign
+0FCF TIBETAN SIGN RDEL NAG GSUM (dena sum)
+@ Marks
+0FD0 TIBETAN MARK BSKA- SHOG GI MGO RGYAN (ka shog gi go gyen)
+ * used in Bhutan
+0FD1 TIBETAN MARK MNYAM YIG GI MGO RGYAN (nyam yig gi go gyen)
+ * used in Bhutan
+@@ 1000 Myanmar 109F
+@ Consonants
+1000 MYANMAR LETTER KA
+1001 MYANMAR LETTER KHA
+1002 MYANMAR LETTER GA
+1003 MYANMAR LETTER GHA
+1004 MYANMAR LETTER NGA
+1005 MYANMAR LETTER CA
+1006 MYANMAR LETTER CHA
+1007 MYANMAR LETTER JA
+1008 MYANMAR LETTER JHA
+1009 MYANMAR LETTER NYA
+100A MYANMAR LETTER NNYA
+100B MYANMAR LETTER TTA
+100C MYANMAR LETTER TTHA
+100D MYANMAR LETTER DDA
+100E MYANMAR LETTER DDHA
+100F MYANMAR LETTER NNA
+1010 MYANMAR LETTER TA
+1011 MYANMAR LETTER THA
+1012 MYANMAR LETTER DA
+1013 MYANMAR LETTER DHA
+1014 MYANMAR LETTER NA
+1015 MYANMAR LETTER PA
+1016 MYANMAR LETTER PHA
+1017 MYANMAR LETTER BA
+1018 MYANMAR LETTER BHA
+1019 MYANMAR LETTER MA
+101A MYANMAR LETTER YA
+101B MYANMAR LETTER RA
+101C MYANMAR LETTER LA
+101D MYANMAR LETTER WA
+101E MYANMAR LETTER SA
+101F MYANMAR LETTER HA
+1020 MYANMAR LETTER LLA
+@ Independent vowels
+1021 MYANMAR LETTER A
+ * also represents the glottal stop as a consonant
+1023 MYANMAR LETTER I
+1024 MYANMAR LETTER II
+1025 MYANMAR LETTER U
+1026 MYANMAR LETTER UU
+ : 1025 102E
+1027 MYANMAR LETTER E
+1029 MYANMAR LETTER O
+102A MYANMAR LETTER AU
+@ Dependent vowel signs
+102C MYANMAR VOWEL SIGN AA
+102D MYANMAR VOWEL SIGN I
+102E MYANMAR VOWEL SIGN II
+102F MYANMAR VOWEL SIGN U
+1030 MYANMAR VOWEL SIGN UU
+1031 MYANMAR VOWEL SIGN E
+ * stands to the left of the consonant
+1032 MYANMAR VOWEL SIGN AI
+@ Various signs
+1036 MYANMAR SIGN ANUSVARA
+1037 MYANMAR SIGN DOT BELOW
+ = aukmyit
+ * a tone mark
+1038 MYANMAR SIGN VISARGA
+1039 MYANMAR SIGN VIRAMA
+ = killer (when rendered visibly)
+@ Digits
+1040 MYANMAR DIGIT ZERO
+1041 MYANMAR DIGIT ONE
+1042 MYANMAR DIGIT TWO
+1043 MYANMAR DIGIT THREE
+1044 MYANMAR DIGIT FOUR
+1045 MYANMAR DIGIT FIVE
+1046 MYANMAR DIGIT SIX
+1047 MYANMAR DIGIT SEVEN
+1048 MYANMAR DIGIT EIGHT
+1049 MYANMAR DIGIT NINE
+@ Punctuation
+104A MYANMAR SIGN LITTLE SECTION
+ x (devanagari danda - 0964)
+104B MYANMAR SIGN SECTION
+ x (devanagari double danda - 0965)
+@ Various signs
+104C MYANMAR SYMBOL LOCATIVE
+104D MYANMAR SYMBOL COMPLETED
+104E MYANMAR SYMBOL AFOREMENTIONED
+104F MYANMAR SYMBOL GENITIVE
+@ Pali and Sanskrit extensions
+1050 MYANMAR LETTER SHA
+1051 MYANMAR LETTER SSA
+1052 MYANMAR LETTER VOCALIC R
+1053 MYANMAR LETTER VOCALIC RR
+1054 MYANMAR LETTER VOCALIC L
+1055 MYANMAR LETTER VOCALIC LL
+1056 MYANMAR VOWEL SIGN VOCALIC R
+1057 MYANMAR VOWEL SIGN VOCALIC RR
+1058 MYANMAR VOWEL SIGN VOCALIC L
+1059 MYANMAR VOWEL SIGN VOCALIC LL
+@@ 10A0 Georgian 10FF
+@ Capital letters (Khutsuri)
+@+ This is the uppercase of the old ecclesiastical alphabet. The style shown in the code charts is known as Asomtavruli. See the Georgian Supplement block for lowercase Nuskhuri.
+10A0 GEORGIAN CAPITAL LETTER AN (Khutsuri)
+10A1 GEORGIAN CAPITAL LETTER BAN (Khutsuri)
+10A2 GEORGIAN CAPITAL LETTER GAN (Khutsuri)
+10A3 GEORGIAN CAPITAL LETTER DON (Khutsuri)
+10A4 GEORGIAN CAPITAL LETTER EN (Khutsuri)
+10A5 GEORGIAN CAPITAL LETTER VIN (Khutsuri)
+10A6 GEORGIAN CAPITAL LETTER ZEN (Khutsuri)
+10A7 GEORGIAN CAPITAL LETTER TAN (Khutsuri)
+10A8 GEORGIAN CAPITAL LETTER IN (Khutsuri)
+10A9 GEORGIAN CAPITAL LETTER KAN (Khutsuri)
+10AA GEORGIAN CAPITAL LETTER LAS (Khutsuri)
+10AB GEORGIAN CAPITAL LETTER MAN (Khutsuri)
+10AC GEORGIAN CAPITAL LETTER NAR (Khutsuri)
+10AD GEORGIAN CAPITAL LETTER ON (Khutsuri)
+10AE GEORGIAN CAPITAL LETTER PAR (Khutsuri)
+10AF GEORGIAN CAPITAL LETTER ZHAR (Khutsuri)
+10B0 GEORGIAN CAPITAL LETTER RAE (Khutsuri)
+10B1 GEORGIAN CAPITAL LETTER SAN (Khutsuri)
+10B2 GEORGIAN CAPITAL LETTER TAR (Khutsuri)
+10B3 GEORGIAN CAPITAL LETTER UN (Khutsuri)
+10B4 GEORGIAN CAPITAL LETTER PHAR (Khutsuri)
+10B5 GEORGIAN CAPITAL LETTER KHAR (Khutsuri)
+10B6 GEORGIAN CAPITAL LETTER GHAN (Khutsuri)
+10B7 GEORGIAN CAPITAL LETTER QAR (Khutsuri)
+10B8 GEORGIAN CAPITAL LETTER SHIN (Khutsuri)
+10B9 GEORGIAN CAPITAL LETTER CHIN (Khutsuri)
+10BA GEORGIAN CAPITAL LETTER CAN (Khutsuri)
+10BB GEORGIAN CAPITAL LETTER JIL (Khutsuri)
+10BC GEORGIAN CAPITAL LETTER CIL (Khutsuri)
+10BD GEORGIAN CAPITAL LETTER CHAR (Khutsuri)
+10BE GEORGIAN CAPITAL LETTER XAN (Khutsuri)
+10BF GEORGIAN CAPITAL LETTER JHAN (Khutsuri)
+10C0 GEORGIAN CAPITAL LETTER HAE (Khutsuri)
+10C1 GEORGIAN CAPITAL LETTER HE (Khutsuri)
+10C2 GEORGIAN CAPITAL LETTER HIE (Khutsuri)
+10C3 GEORGIAN CAPITAL LETTER WE (Khutsuri)
+10C4 GEORGIAN CAPITAL LETTER HAR (Khutsuri)
+10C5 GEORGIAN CAPITAL LETTER HOE (Khutsuri)
+@ Mkhedruli
+@+ This is the modern secular alphabet, which is caseless.
+10D0 GEORGIAN LETTER AN
+10D1 GEORGIAN LETTER BAN
+10D2 GEORGIAN LETTER GAN
+10D3 GEORGIAN LETTER DON
+10D4 GEORGIAN LETTER EN
+10D5 GEORGIAN LETTER VIN
+10D6 GEORGIAN LETTER ZEN
+10D7 GEORGIAN LETTER TAN
+10D8 GEORGIAN LETTER IN
+10D9 GEORGIAN LETTER KAN
+10DA GEORGIAN LETTER LAS
+10DB GEORGIAN LETTER MAN
+10DC GEORGIAN LETTER NAR
+10DD GEORGIAN LETTER ON
+10DE GEORGIAN LETTER PAR
+10DF GEORGIAN LETTER ZHAR
+10E0 GEORGIAN LETTER RAE
+10E1 GEORGIAN LETTER SAN
+10E2 GEORGIAN LETTER TAR
+10E3 GEORGIAN LETTER UN
+10E4 GEORGIAN LETTER PHAR
+10E5 GEORGIAN LETTER KHAR
+10E6 GEORGIAN LETTER GHAN
+10E7 GEORGIAN LETTER QAR
+10E8 GEORGIAN LETTER SHIN
+10E9 GEORGIAN LETTER CHIN
+10EA GEORGIAN LETTER CAN
+10EB GEORGIAN LETTER JIL
+10EC GEORGIAN LETTER CIL
+10ED GEORGIAN LETTER CHAR
+10EE GEORGIAN LETTER XAN
+10EF GEORGIAN LETTER JHAN
+10F0 GEORGIAN LETTER HAE
+@ Archaic letters
+10F1 GEORGIAN LETTER HE
+10F2 GEORGIAN LETTER HIE
+10F3 GEORGIAN LETTER WE
+10F4 GEORGIAN LETTER HAR
+10F5 GEORGIAN LETTER HOE
+10F6 GEORGIAN LETTER FI
+@ Additional letters for Mingrelian and Svan
+10F7 GEORGIAN LETTER YN
+10F8 GEORGIAN LETTER ELIFI
+@ Additional letters
+10F9 GEORGIAN LETTER TURNED GAN
+10FA GEORGIAN LETTER AIN
+@ Punctuation
+10FB GEORGIAN PARAGRAPH SEPARATOR
+@ Modifier letter
+10FC MODIFIER LETTER GEORGIAN NAR
+ # <super> 10DC
+@@ 1100 Hangul Jamo 11FF
+@+ The aliases in this block represent the Jamo short names.
+@ Korean combining alphabet
+@ Initial consonants
+1100 HANGUL CHOSEONG KIYEOK (g) *
+ = G
+1101 HANGUL CHOSEONG SSANGKIYEOK (gg) *
+ = GG
+1102 HANGUL CHOSEONG NIEUN (n) *
+ = N
+1103 HANGUL CHOSEONG TIKEUT (d) *
+ = D
+1104 HANGUL CHOSEONG SSANGTIKEUT (dd) *
+ = DD
+1105 HANGUL CHOSEONG RIEUL (r) *
+ = R
+1106 HANGUL CHOSEONG MIEUM (m) *
+ = M
+1107 HANGUL CHOSEONG PIEUP (b) *
+ = B
+1108 HANGUL CHOSEONG SSANGPIEUP (bb) *
+ = BB
+1109 HANGUL CHOSEONG SIOS (s) *
+ = S
+110A HANGUL CHOSEONG SSANGSIOS (ss) *
+ = SS
+110B HANGUL CHOSEONG IEUNG
+110C HANGUL CHOSEONG CIEUC (j) *
+ = J
+110D HANGUL CHOSEONG SSANGCIEUC (jj) *
+ = JJ
+110E HANGUL CHOSEONG CHIEUCH (c) *
+ = C
+110F HANGUL CHOSEONG KHIEUKH (k) *
+ = K
+1110 HANGUL CHOSEONG THIEUTH (t) *
+ = T
+1111 HANGUL CHOSEONG PHIEUPH (p) *
+ = P
+1112 HANGUL CHOSEONG HIEUH (h) *
+ = H
+1113 HANGUL CHOSEONG NIEUN-KIYEOK
+1114 HANGUL CHOSEONG SSANGNIEUN
+1115 HANGUL CHOSEONG NIEUN-TIKEUT
+1116 HANGUL CHOSEONG NIEUN-PIEUP
+1117 HANGUL CHOSEONG TIKEUT-KIYEOK
+1118 HANGUL CHOSEONG RIEUL-NIEUN
+1119 HANGUL CHOSEONG SSANGRIEUL
+111A HANGUL CHOSEONG RIEUL-HIEUH
+111B HANGUL CHOSEONG KAPYEOUNRIEUL
+111C HANGUL CHOSEONG MIEUM-PIEUP
+111D HANGUL CHOSEONG KAPYEOUNMIEUM
+111E HANGUL CHOSEONG PIEUP-KIYEOK
+111F HANGUL CHOSEONG PIEUP-NIEUN
+1120 HANGUL CHOSEONG PIEUP-TIKEUT
+1121 HANGUL CHOSEONG PIEUP-SIOS
+1122 HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+1123 HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+1124 HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+1125 HANGUL CHOSEONG PIEUP-SSANGSIOS
+1126 HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+1127 HANGUL CHOSEONG PIEUP-CIEUC
+1128 HANGUL CHOSEONG PIEUP-CHIEUCH
+1129 HANGUL CHOSEONG PIEUP-THIEUTH
+112A HANGUL CHOSEONG PIEUP-PHIEUPH
+112B HANGUL CHOSEONG KAPYEOUNPIEUP
+112C HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+112D HANGUL CHOSEONG SIOS-KIYEOK
+112E HANGUL CHOSEONG SIOS-NIEUN
+112F HANGUL CHOSEONG SIOS-TIKEUT
+1130 HANGUL CHOSEONG SIOS-RIEUL
+1131 HANGUL CHOSEONG SIOS-MIEUM
+1132 HANGUL CHOSEONG SIOS-PIEUP
+1133 HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+1134 HANGUL CHOSEONG SIOS-SSANGSIOS
+1135 HANGUL CHOSEONG SIOS-IEUNG
+1136 HANGUL CHOSEONG SIOS-CIEUC
+1137 HANGUL CHOSEONG SIOS-CHIEUCH
+1138 HANGUL CHOSEONG SIOS-KHIEUKH
+1139 HANGUL CHOSEONG SIOS-THIEUTH
+113A HANGUL CHOSEONG SIOS-PHIEUPH
+113B HANGUL CHOSEONG SIOS-HIEUH
+113C HANGUL CHOSEONG CHITUEUMSIOS
+113D HANGUL CHOSEONG CHITUEUMSSANGSIOS
+113E HANGUL CHOSEONG CEONGCHIEUMSIOS
+113F HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+1140 HANGUL CHOSEONG PANSIOS
+1141 HANGUL CHOSEONG IEUNG-KIYEOK
+1142 HANGUL CHOSEONG IEUNG-TIKEUT
+1143 HANGUL CHOSEONG IEUNG-MIEUM
+1144 HANGUL CHOSEONG IEUNG-PIEUP
+1145 HANGUL CHOSEONG IEUNG-SIOS
+1146 HANGUL CHOSEONG IEUNG-PANSIOS
+1147 HANGUL CHOSEONG SSANGIEUNG
+1148 HANGUL CHOSEONG IEUNG-CIEUC
+1149 HANGUL CHOSEONG IEUNG-CHIEUCH
+114A HANGUL CHOSEONG IEUNG-THIEUTH
+114B HANGUL CHOSEONG IEUNG-PHIEUPH
+114C HANGUL CHOSEONG YESIEUNG
+114D HANGUL CHOSEONG CIEUC-IEUNG
+114E HANGUL CHOSEONG CHITUEUMCIEUC
+114F HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+1150 HANGUL CHOSEONG CEONGCHIEUMCIEUC
+1151 HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+1152 HANGUL CHOSEONG CHIEUCH-KHIEUKH
+1153 HANGUL CHOSEONG CHIEUCH-HIEUH
+1154 HANGUL CHOSEONG CHITUEUMCHIEUCH
+1155 HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+1156 HANGUL CHOSEONG PHIEUPH-PIEUP
+1157 HANGUL CHOSEONG KAPYEOUNPHIEUPH
+1158 HANGUL CHOSEONG SSANGHIEUH
+1159 HANGUL CHOSEONG YEORINHIEUH
+115F HANGUL CHOSEONG FILLER
+@ Medial vowels
+1160 HANGUL JUNGSEONG FILLER
+1161 HANGUL JUNGSEONG A
+ = A
+1162 HANGUL JUNGSEONG AE
+ = AE
+1163 HANGUL JUNGSEONG YA
+ = YA
+1164 HANGUL JUNGSEONG YAE
+ = YAE
+1165 HANGUL JUNGSEONG EO
+ = EO
+1166 HANGUL JUNGSEONG E
+ = E
+1167 HANGUL JUNGSEONG YEO
+ = YEO
+1168 HANGUL JUNGSEONG YE
+ = YE
+1169 HANGUL JUNGSEONG O
+ = O
+116A HANGUL JUNGSEONG WA
+ = WA
+116B HANGUL JUNGSEONG WAE
+ = WAE
+116C HANGUL JUNGSEONG OE
+ = OE
+116D HANGUL JUNGSEONG YO
+ = YO
+116E HANGUL JUNGSEONG U
+ = U
+116F HANGUL JUNGSEONG WEO
+ = WEO
+1170 HANGUL JUNGSEONG WE
+ = WE
+1171 HANGUL JUNGSEONG WI
+ = WI
+1172 HANGUL JUNGSEONG YU
+ = YU
+1173 HANGUL JUNGSEONG EU
+ = EU
+1174 HANGUL JUNGSEONG YI
+ = YI
+1175 HANGUL JUNGSEONG I
+ = I
+1176 HANGUL JUNGSEONG A-O
+1177 HANGUL JUNGSEONG A-U
+1178 HANGUL JUNGSEONG YA-O
+1179 HANGUL JUNGSEONG YA-YO
+117A HANGUL JUNGSEONG EO-O
+117B HANGUL JUNGSEONG EO-U
+117C HANGUL JUNGSEONG EO-EU
+117D HANGUL JUNGSEONG YEO-O
+117E HANGUL JUNGSEONG YEO-U
+117F HANGUL JUNGSEONG O-EO
+1180 HANGUL JUNGSEONG O-E
+1181 HANGUL JUNGSEONG O-YE
+1182 HANGUL JUNGSEONG O-O
+1183 HANGUL JUNGSEONG O-U
+1184 HANGUL JUNGSEONG YO-YA
+1185 HANGUL JUNGSEONG YO-YAE
+1186 HANGUL JUNGSEONG YO-YEO
+1187 HANGUL JUNGSEONG YO-O
+1188 HANGUL JUNGSEONG YO-I
+1189 HANGUL JUNGSEONG U-A
+118A HANGUL JUNGSEONG U-AE
+118B HANGUL JUNGSEONG U-EO-EU
+118C HANGUL JUNGSEONG U-YE
+118D HANGUL JUNGSEONG U-U
+118E HANGUL JUNGSEONG YU-A
+118F HANGUL JUNGSEONG YU-EO
+1190 HANGUL JUNGSEONG YU-E
+1191 HANGUL JUNGSEONG YU-YEO
+1192 HANGUL JUNGSEONG YU-YE
+1193 HANGUL JUNGSEONG YU-U
+1194 HANGUL JUNGSEONG YU-I
+1195 HANGUL JUNGSEONG EU-U
+1196 HANGUL JUNGSEONG EU-EU
+1197 HANGUL JUNGSEONG YI-U
+1198 HANGUL JUNGSEONG I-A
+1199 HANGUL JUNGSEONG I-YA
+119A HANGUL JUNGSEONG I-O
+119B HANGUL JUNGSEONG I-U
+119C HANGUL JUNGSEONG I-EU
+119D HANGUL JUNGSEONG I-ARAEA
+119E HANGUL JUNGSEONG ARAEA
+119F HANGUL JUNGSEONG ARAEA-EO
+11A0 HANGUL JUNGSEONG ARAEA-U
+11A1 HANGUL JUNGSEONG ARAEA-I
+11A2 HANGUL JUNGSEONG SSANGARAEA
+@ Final consonants
+11A8 HANGUL JONGSEONG KIYEOK (g) *
+ = G
+11A9 HANGUL JONGSEONG SSANGKIYEOK (gg) *
+ = GG
+11AA HANGUL JONGSEONG KIYEOK-SIOS (gs) *
+ = GS
+11AB HANGUL JONGSEONG NIEUN (n) *
+ = N
+11AC HANGUL JONGSEONG NIEUN-CIEUC (nj) *
+ = NJ
+11AD HANGUL JONGSEONG NIEUN-HIEUH (nh) *
+ = NH
+11AE HANGUL JONGSEONG TIKEUT (d) *
+ = D
+11AF HANGUL JONGSEONG RIEUL (l) *
+ = L
+11B0 HANGUL JONGSEONG RIEUL-KIYEOK (lg) *
+ = LG
+11B1 HANGUL JONGSEONG RIEUL-MIEUM (lm) *
+ = LM
+11B2 HANGUL JONGSEONG RIEUL-PIEUP (lb) *
+ = LB
+11B3 HANGUL JONGSEONG RIEUL-SIOS (ls) *
+ = LS
+11B4 HANGUL JONGSEONG RIEUL-THIEUTH (lt) *
+ = LT
+11B5 HANGUL JONGSEONG RIEUL-PHIEUPH (lp) *
+ = LP
+11B6 HANGUL JONGSEONG RIEUL-HIEUH (lh) *
+ = LH
+11B7 HANGUL JONGSEONG MIEUM (m) *
+ = M
+11B8 HANGUL JONGSEONG PIEUP (b) *
+ = B
+11B9 HANGUL JONGSEONG PIEUP-SIOS (bs) *
+ = BS
+11BA HANGUL JONGSEONG SIOS (s) *
+ = S
+11BB HANGUL JONGSEONG SSANGSIOS (ss) *
+ = SS
+11BC HANGUL JONGSEONG IEUNG (ng) *
+ = NG
+11BD HANGUL JONGSEONG CIEUC (j) *
+ = J
+11BE HANGUL JONGSEONG CHIEUCH (c) *
+ = C
+11BF HANGUL JONGSEONG KHIEUKH (k) *
+ = K
+11C0 HANGUL JONGSEONG THIEUTH (t) *
+ = T
+11C1 HANGUL JONGSEONG PHIEUPH (p) *
+ = P
+11C2 HANGUL JONGSEONG HIEUH (h) *
+ = H
+11C3 HANGUL JONGSEONG KIYEOK-RIEUL
+11C4 HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+11C5 HANGUL JONGSEONG NIEUN-KIYEOK
+11C6 HANGUL JONGSEONG NIEUN-TIKEUT
+11C7 HANGUL JONGSEONG NIEUN-SIOS
+11C8 HANGUL JONGSEONG NIEUN-PANSIOS
+11C9 HANGUL JONGSEONG NIEUN-THIEUTH
+11CA HANGUL JONGSEONG TIKEUT-KIYEOK
+11CB HANGUL JONGSEONG TIKEUT-RIEUL
+11CC HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+11CD HANGUL JONGSEONG RIEUL-NIEUN
+11CE HANGUL JONGSEONG RIEUL-TIKEUT
+11CF HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+11D0 HANGUL JONGSEONG SSANGRIEUL
+11D1 HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+11D2 HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+11D3 HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+11D4 HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+11D5 HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+11D6 HANGUL JONGSEONG RIEUL-SSANGSIOS
+11D7 HANGUL JONGSEONG RIEUL-PANSIOS
+11D8 HANGUL JONGSEONG RIEUL-KHIEUKH
+11D9 HANGUL JONGSEONG RIEUL-YEORINHIEUH
+11DA HANGUL JONGSEONG MIEUM-KIYEOK
+11DB HANGUL JONGSEONG MIEUM-RIEUL
+11DC HANGUL JONGSEONG MIEUM-PIEUP
+11DD HANGUL JONGSEONG MIEUM-SIOS
+11DE HANGUL JONGSEONG MIEUM-SSANGSIOS
+11DF HANGUL JONGSEONG MIEUM-PANSIOS
+11E0 HANGUL JONGSEONG MIEUM-CHIEUCH
+11E1 HANGUL JONGSEONG MIEUM-HIEUH
+11E2 HANGUL JONGSEONG KAPYEOUNMIEUM
+11E3 HANGUL JONGSEONG PIEUP-RIEUL
+11E4 HANGUL JONGSEONG PIEUP-PHIEUPH
+11E5 HANGUL JONGSEONG PIEUP-HIEUH
+11E6 HANGUL JONGSEONG KAPYEOUNPIEUP
+11E7 HANGUL JONGSEONG SIOS-KIYEOK
+11E8 HANGUL JONGSEONG SIOS-TIKEUT
+11E9 HANGUL JONGSEONG SIOS-RIEUL
+11EA HANGUL JONGSEONG SIOS-PIEUP
+11EB HANGUL JONGSEONG PANSIOS
+11EC HANGUL JONGSEONG IEUNG-KIYEOK
+11ED HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+11EE HANGUL JONGSEONG SSANGIEUNG
+11EF HANGUL JONGSEONG IEUNG-KHIEUKH
+11F0 HANGUL JONGSEONG YESIEUNG
+11F1 HANGUL JONGSEONG YESIEUNG-SIOS
+11F2 HANGUL JONGSEONG YESIEUNG-PANSIOS
+11F3 HANGUL JONGSEONG PHIEUPH-PIEUP
+11F4 HANGUL JONGSEONG KAPYEOUNPHIEUPH
+11F5 HANGUL JONGSEONG HIEUH-NIEUN
+11F6 HANGUL JONGSEONG HIEUH-RIEUL
+11F7 HANGUL JONGSEONG HIEUH-MIEUM
+11F8 HANGUL JONGSEONG HIEUH-PIEUP
+11F9 HANGUL JONGSEONG YEORINHIEUH
+@@ 1200 Ethiopic 137F
+@ Syllables
+1200 ETHIOPIC SYLLABLE HA
+1201 ETHIOPIC SYLLABLE HU
+1202 ETHIOPIC SYLLABLE HI
+1203 ETHIOPIC SYLLABLE HAA
+1204 ETHIOPIC SYLLABLE HEE
+1205 ETHIOPIC SYLLABLE HE
+1206 ETHIOPIC SYLLABLE HO
+1207 ETHIOPIC SYLLABLE HOA
+1208 ETHIOPIC SYLLABLE LA
+1209 ETHIOPIC SYLLABLE LU
+120A ETHIOPIC SYLLABLE LI
+120B ETHIOPIC SYLLABLE LAA
+120C ETHIOPIC SYLLABLE LEE
+120D ETHIOPIC SYLLABLE LE
+120E ETHIOPIC SYLLABLE LO
+120F ETHIOPIC SYLLABLE LWA
+1210 ETHIOPIC SYLLABLE HHA
+1211 ETHIOPIC SYLLABLE HHU
+1212 ETHIOPIC SYLLABLE HHI
+1213 ETHIOPIC SYLLABLE HHAA
+1214 ETHIOPIC SYLLABLE HHEE
+1215 ETHIOPIC SYLLABLE HHE
+1216 ETHIOPIC SYLLABLE HHO
+1217 ETHIOPIC SYLLABLE HHWA
+1218 ETHIOPIC SYLLABLE MA
+1219 ETHIOPIC SYLLABLE MU
+121A ETHIOPIC SYLLABLE MI
+121B ETHIOPIC SYLLABLE MAA
+121C ETHIOPIC SYLLABLE MEE
+121D ETHIOPIC SYLLABLE ME
+121E ETHIOPIC SYLLABLE MO
+121F ETHIOPIC SYLLABLE MWA
+1220 ETHIOPIC SYLLABLE SZA
+1221 ETHIOPIC SYLLABLE SZU
+1222 ETHIOPIC SYLLABLE SZI
+1223 ETHIOPIC SYLLABLE SZAA
+1224 ETHIOPIC SYLLABLE SZEE
+1225 ETHIOPIC SYLLABLE SZE
+1226 ETHIOPIC SYLLABLE SZO
+1227 ETHIOPIC SYLLABLE SZWA
+1228 ETHIOPIC SYLLABLE RA
+1229 ETHIOPIC SYLLABLE RU
+122A ETHIOPIC SYLLABLE RI
+122B ETHIOPIC SYLLABLE RAA
+122C ETHIOPIC SYLLABLE REE
+122D ETHIOPIC SYLLABLE RE
+122E ETHIOPIC SYLLABLE RO
+122F ETHIOPIC SYLLABLE RWA
+1230 ETHIOPIC SYLLABLE SA
+1231 ETHIOPIC SYLLABLE SU
+1232 ETHIOPIC SYLLABLE SI
+1233 ETHIOPIC SYLLABLE SAA
+1234 ETHIOPIC SYLLABLE SEE
+1235 ETHIOPIC SYLLABLE SE
+1236 ETHIOPIC SYLLABLE SO
+1237 ETHIOPIC SYLLABLE SWA
+1238 ETHIOPIC SYLLABLE SHA
+1239 ETHIOPIC SYLLABLE SHU
+123A ETHIOPIC SYLLABLE SHI
+123B ETHIOPIC SYLLABLE SHAA
+123C ETHIOPIC SYLLABLE SHEE
+123D ETHIOPIC SYLLABLE SHE
+123E ETHIOPIC SYLLABLE SHO
+123F ETHIOPIC SYLLABLE SHWA
+1240 ETHIOPIC SYLLABLE QA
+1241 ETHIOPIC SYLLABLE QU
+1242 ETHIOPIC SYLLABLE QI
+1243 ETHIOPIC SYLLABLE QAA
+1244 ETHIOPIC SYLLABLE QEE
+1245 ETHIOPIC SYLLABLE QE
+1246 ETHIOPIC SYLLABLE QO
+1247 ETHIOPIC SYLLABLE QOA
+1248 ETHIOPIC SYLLABLE QWA
+124A ETHIOPIC SYLLABLE QWI
+124B ETHIOPIC SYLLABLE QWAA
+124C ETHIOPIC SYLLABLE QWEE
+124D ETHIOPIC SYLLABLE QWE
+1250 ETHIOPIC SYLLABLE QHA
+1251 ETHIOPIC SYLLABLE QHU
+1252 ETHIOPIC SYLLABLE QHI
+1253 ETHIOPIC SYLLABLE QHAA
+1254 ETHIOPIC SYLLABLE QHEE
+1255 ETHIOPIC SYLLABLE QHE
+1256 ETHIOPIC SYLLABLE QHO
+1258 ETHIOPIC SYLLABLE QHWA
+125A ETHIOPIC SYLLABLE QHWI
+125B ETHIOPIC SYLLABLE QHWAA
+125C ETHIOPIC SYLLABLE QHWEE
+125D ETHIOPIC SYLLABLE QHWE
+1260 ETHIOPIC SYLLABLE BA
+1261 ETHIOPIC SYLLABLE BU
+1262 ETHIOPIC SYLLABLE BI
+1263 ETHIOPIC SYLLABLE BAA
+1264 ETHIOPIC SYLLABLE BEE
+1265 ETHIOPIC SYLLABLE BE
+1266 ETHIOPIC SYLLABLE BO
+1267 ETHIOPIC SYLLABLE BWA
+1268 ETHIOPIC SYLLABLE VA
+1269 ETHIOPIC SYLLABLE VU
+126A ETHIOPIC SYLLABLE VI
+126B ETHIOPIC SYLLABLE VAA
+126C ETHIOPIC SYLLABLE VEE
+126D ETHIOPIC SYLLABLE VE
+126E ETHIOPIC SYLLABLE VO
+126F ETHIOPIC SYLLABLE VWA
+1270 ETHIOPIC SYLLABLE TA
+1271 ETHIOPIC SYLLABLE TU
+1272 ETHIOPIC SYLLABLE TI
+1273 ETHIOPIC SYLLABLE TAA
+1274 ETHIOPIC SYLLABLE TEE
+1275 ETHIOPIC SYLLABLE TE
+1276 ETHIOPIC SYLLABLE TO
+1277 ETHIOPIC SYLLABLE TWA
+1278 ETHIOPIC SYLLABLE CA
+1279 ETHIOPIC SYLLABLE CU
+127A ETHIOPIC SYLLABLE CI
+127B ETHIOPIC SYLLABLE CAA
+127C ETHIOPIC SYLLABLE CEE
+127D ETHIOPIC SYLLABLE CE
+127E ETHIOPIC SYLLABLE CO
+127F ETHIOPIC SYLLABLE CWA
+1280 ETHIOPIC SYLLABLE XA
+1281 ETHIOPIC SYLLABLE XU
+1282 ETHIOPIC SYLLABLE XI
+1283 ETHIOPIC SYLLABLE XAA
+1284 ETHIOPIC SYLLABLE XEE
+1285 ETHIOPIC SYLLABLE XE
+1286 ETHIOPIC SYLLABLE XO
+1287 ETHIOPIC SYLLABLE XOA
+1288 ETHIOPIC SYLLABLE XWA
+128A ETHIOPIC SYLLABLE XWI
+128B ETHIOPIC SYLLABLE XWAA
+128C ETHIOPIC SYLLABLE XWEE
+128D ETHIOPIC SYLLABLE XWE
+1290 ETHIOPIC SYLLABLE NA
+1291 ETHIOPIC SYLLABLE NU
+1292 ETHIOPIC SYLLABLE NI
+1293 ETHIOPIC SYLLABLE NAA
+1294 ETHIOPIC SYLLABLE NEE
+1295 ETHIOPIC SYLLABLE NE
+1296 ETHIOPIC SYLLABLE NO
+1297 ETHIOPIC SYLLABLE NWA
+1298 ETHIOPIC SYLLABLE NYA
+1299 ETHIOPIC SYLLABLE NYU
+129A ETHIOPIC SYLLABLE NYI
+129B ETHIOPIC SYLLABLE NYAA
+129C ETHIOPIC SYLLABLE NYEE
+129D ETHIOPIC SYLLABLE NYE
+129E ETHIOPIC SYLLABLE NYO
+129F ETHIOPIC SYLLABLE NYWA
+12A0 ETHIOPIC SYLLABLE GLOTTAL A
+12A1 ETHIOPIC SYLLABLE GLOTTAL U
+12A2 ETHIOPIC SYLLABLE GLOTTAL I
+12A3 ETHIOPIC SYLLABLE GLOTTAL AA
+12A4 ETHIOPIC SYLLABLE GLOTTAL EE
+12A5 ETHIOPIC SYLLABLE GLOTTAL E
+12A6 ETHIOPIC SYLLABLE GLOTTAL O
+12A7 ETHIOPIC SYLLABLE GLOTTAL WA
+12A8 ETHIOPIC SYLLABLE KA
+12A9 ETHIOPIC SYLLABLE KU
+12AA ETHIOPIC SYLLABLE KI
+12AB ETHIOPIC SYLLABLE KAA
+12AC ETHIOPIC SYLLABLE KEE
+12AD ETHIOPIC SYLLABLE KE
+12AE ETHIOPIC SYLLABLE KO
+12AF ETHIOPIC SYLLABLE KOA
+12B0 ETHIOPIC SYLLABLE KWA
+12B2 ETHIOPIC SYLLABLE KWI
+12B3 ETHIOPIC SYLLABLE KWAA
+12B4 ETHIOPIC SYLLABLE KWEE
+12B5 ETHIOPIC SYLLABLE KWE
+12B8 ETHIOPIC SYLLABLE KXA
+12B9 ETHIOPIC SYLLABLE KXU
+12BA ETHIOPIC SYLLABLE KXI
+12BB ETHIOPIC SYLLABLE KXAA
+12BC ETHIOPIC SYLLABLE KXEE
+12BD ETHIOPIC SYLLABLE KXE
+12BE ETHIOPIC SYLLABLE KXO
+12C0 ETHIOPIC SYLLABLE KXWA
+12C2 ETHIOPIC SYLLABLE KXWI
+12C3 ETHIOPIC SYLLABLE KXWAA
+12C4 ETHIOPIC SYLLABLE KXWEE
+12C5 ETHIOPIC SYLLABLE KXWE
+12C8 ETHIOPIC SYLLABLE WA
+12C9 ETHIOPIC SYLLABLE WU
+12CA ETHIOPIC SYLLABLE WI
+12CB ETHIOPIC SYLLABLE WAA
+12CC ETHIOPIC SYLLABLE WEE
+12CD ETHIOPIC SYLLABLE WE
+12CE ETHIOPIC SYLLABLE WO
+12CF ETHIOPIC SYLLABLE WOA
+12D0 ETHIOPIC SYLLABLE PHARYNGEAL A
+12D1 ETHIOPIC SYLLABLE PHARYNGEAL U
+12D2 ETHIOPIC SYLLABLE PHARYNGEAL I
+12D3 ETHIOPIC SYLLABLE PHARYNGEAL AA
+12D4 ETHIOPIC SYLLABLE PHARYNGEAL EE
+12D5 ETHIOPIC SYLLABLE PHARYNGEAL E
+12D6 ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8 ETHIOPIC SYLLABLE ZA
+12D9 ETHIOPIC SYLLABLE ZU
+12DA ETHIOPIC SYLLABLE ZI
+12DB ETHIOPIC SYLLABLE ZAA
+12DC ETHIOPIC SYLLABLE ZEE
+12DD ETHIOPIC SYLLABLE ZE
+12DE ETHIOPIC SYLLABLE ZO
+12DF ETHIOPIC SYLLABLE ZWA
+12E0 ETHIOPIC SYLLABLE ZHA
+12E1 ETHIOPIC SYLLABLE ZHU
+12E2 ETHIOPIC SYLLABLE ZHI
+12E3 ETHIOPIC SYLLABLE ZHAA
+12E4 ETHIOPIC SYLLABLE ZHEE
+12E5 ETHIOPIC SYLLABLE ZHE
+12E6 ETHIOPIC SYLLABLE ZHO
+12E7 ETHIOPIC SYLLABLE ZHWA
+12E8 ETHIOPIC SYLLABLE YA
+12E9 ETHIOPIC SYLLABLE YU
+12EA ETHIOPIC SYLLABLE YI
+12EB ETHIOPIC SYLLABLE YAA
+12EC ETHIOPIC SYLLABLE YEE
+12ED ETHIOPIC SYLLABLE YE
+12EE ETHIOPIC SYLLABLE YO
+12EF ETHIOPIC SYLLABLE YOA
+12F0 ETHIOPIC SYLLABLE DA
+12F1 ETHIOPIC SYLLABLE DU
+12F2 ETHIOPIC SYLLABLE DI
+12F3 ETHIOPIC SYLLABLE DAA
+12F4 ETHIOPIC SYLLABLE DEE
+12F5 ETHIOPIC SYLLABLE DE
+12F6 ETHIOPIC SYLLABLE DO
+12F7 ETHIOPIC SYLLABLE DWA
+12F8 ETHIOPIC SYLLABLE DDA
+12F9 ETHIOPIC SYLLABLE DDU
+12FA ETHIOPIC SYLLABLE DDI
+12FB ETHIOPIC SYLLABLE DDAA
+12FC ETHIOPIC SYLLABLE DDEE
+12FD ETHIOPIC SYLLABLE DDE
+12FE ETHIOPIC SYLLABLE DDO
+12FF ETHIOPIC SYLLABLE DDWA
+1300 ETHIOPIC SYLLABLE JA
+1301 ETHIOPIC SYLLABLE JU
+1302 ETHIOPIC SYLLABLE JI
+1303 ETHIOPIC SYLLABLE JAA
+1304 ETHIOPIC SYLLABLE JEE
+1305 ETHIOPIC SYLLABLE JE
+1306 ETHIOPIC SYLLABLE JO
+1307 ETHIOPIC SYLLABLE JWA
+1308 ETHIOPIC SYLLABLE GA
+1309 ETHIOPIC SYLLABLE GU
+130A ETHIOPIC SYLLABLE GI
+130B ETHIOPIC SYLLABLE GAA
+130C ETHIOPIC SYLLABLE GEE
+130D ETHIOPIC SYLLABLE GE
+130E ETHIOPIC SYLLABLE GO
+130F ETHIOPIC SYLLABLE GOA
+1310 ETHIOPIC SYLLABLE GWA
+1312 ETHIOPIC SYLLABLE GWI
+1313 ETHIOPIC SYLLABLE GWAA
+1314 ETHIOPIC SYLLABLE GWEE
+1315 ETHIOPIC SYLLABLE GWE
+1318 ETHIOPIC SYLLABLE GGA
+1319 ETHIOPIC SYLLABLE GGU
+131A ETHIOPIC SYLLABLE GGI
+131B ETHIOPIC SYLLABLE GGAA
+131C ETHIOPIC SYLLABLE GGEE
+131D ETHIOPIC SYLLABLE GGE
+131E ETHIOPIC SYLLABLE GGO
+131F ETHIOPIC SYLLABLE GGWAA
+1320 ETHIOPIC SYLLABLE THA
+1321 ETHIOPIC SYLLABLE THU
+1322 ETHIOPIC SYLLABLE THI
+1323 ETHIOPIC SYLLABLE THAA
+1324 ETHIOPIC SYLLABLE THEE
+1325 ETHIOPIC SYLLABLE THE
+1326 ETHIOPIC SYLLABLE THO
+1327 ETHIOPIC SYLLABLE THWA
+1328 ETHIOPIC SYLLABLE CHA
+1329 ETHIOPIC SYLLABLE CHU
+132A ETHIOPIC SYLLABLE CHI
+132B ETHIOPIC SYLLABLE CHAA
+132C ETHIOPIC SYLLABLE CHEE
+132D ETHIOPIC SYLLABLE CHE
+132E ETHIOPIC SYLLABLE CHO
+132F ETHIOPIC SYLLABLE CHWA
+1330 ETHIOPIC SYLLABLE PHA
+1331 ETHIOPIC SYLLABLE PHU
+1332 ETHIOPIC SYLLABLE PHI
+1333 ETHIOPIC SYLLABLE PHAA
+1334 ETHIOPIC SYLLABLE PHEE
+1335 ETHIOPIC SYLLABLE PHE
+1336 ETHIOPIC SYLLABLE PHO
+1337 ETHIOPIC SYLLABLE PHWA
+1338 ETHIOPIC SYLLABLE TSA
+1339 ETHIOPIC SYLLABLE TSU
+133A ETHIOPIC SYLLABLE TSI
+133B ETHIOPIC SYLLABLE TSAA
+133C ETHIOPIC SYLLABLE TSEE
+133D ETHIOPIC SYLLABLE TSE
+133E ETHIOPIC SYLLABLE TSO
+133F ETHIOPIC SYLLABLE TSWA
+1340 ETHIOPIC SYLLABLE TZA
+1341 ETHIOPIC SYLLABLE TZU
+1342 ETHIOPIC SYLLABLE TZI
+1343 ETHIOPIC SYLLABLE TZAA
+1344 ETHIOPIC SYLLABLE TZEE
+1345 ETHIOPIC SYLLABLE TZE
+1346 ETHIOPIC SYLLABLE TZO
+1347 ETHIOPIC SYLLABLE TZOA
+1348 ETHIOPIC SYLLABLE FA
+1349 ETHIOPIC SYLLABLE FU
+134A ETHIOPIC SYLLABLE FI
+134B ETHIOPIC SYLLABLE FAA
+134C ETHIOPIC SYLLABLE FEE
+134D ETHIOPIC SYLLABLE FE
+134E ETHIOPIC SYLLABLE FO
+134F ETHIOPIC SYLLABLE FWA
+1350 ETHIOPIC SYLLABLE PA
+1351 ETHIOPIC SYLLABLE PU
+1352 ETHIOPIC SYLLABLE PI
+1353 ETHIOPIC SYLLABLE PAA
+1354 ETHIOPIC SYLLABLE PEE
+1355 ETHIOPIC SYLLABLE PE
+1356 ETHIOPIC SYLLABLE PO
+1357 ETHIOPIC SYLLABLE PWA
+1358 ETHIOPIC SYLLABLE RYA
+1359 ETHIOPIC SYLLABLE MYA
+135A ETHIOPIC SYLLABLE FYA
+@ Combining mark
+135F ETHIOPIC COMBINING GEMINATION MARK
+@ Punctuation
+1360 ETHIOPIC SECTION MARK
+1361 ETHIOPIC WORDSPACE
+1362 ETHIOPIC FULL STOP
+1363 ETHIOPIC COMMA
+1364 ETHIOPIC SEMICOLON
+1365 ETHIOPIC COLON
+1366 ETHIOPIC PREFACE COLON
+1367 ETHIOPIC QUESTION MARK
+1368 ETHIOPIC PARAGRAPH SEPARATOR
+@ Digits
+1369 ETHIOPIC DIGIT ONE
+136A ETHIOPIC DIGIT TWO
+136B ETHIOPIC DIGIT THREE
+136C ETHIOPIC DIGIT FOUR
+136D ETHIOPIC DIGIT FIVE
+136E ETHIOPIC DIGIT SIX
+136F ETHIOPIC DIGIT SEVEN
+1370 ETHIOPIC DIGIT EIGHT
+1371 ETHIOPIC DIGIT NINE
+@ Numbers
+1372 ETHIOPIC NUMBER TEN
+1373 ETHIOPIC NUMBER TWENTY
+1374 ETHIOPIC NUMBER THIRTY
+1375 ETHIOPIC NUMBER FORTY
+1376 ETHIOPIC NUMBER FIFTY
+1377 ETHIOPIC NUMBER SIXTY
+1378 ETHIOPIC NUMBER SEVENTY
+1379 ETHIOPIC NUMBER EIGHTY
+137A ETHIOPIC NUMBER NINETY
+137B ETHIOPIC NUMBER HUNDRED
+137C ETHIOPIC NUMBER TEN THOUSAND
+@@ 1380 Ethiopic Supplement 139F
+@ Syllables for Sebatbeit
+1380 ETHIOPIC SYLLABLE SEBATBEIT MWA
+1381 ETHIOPIC SYLLABLE MWI
+1382 ETHIOPIC SYLLABLE MWEE
+1383 ETHIOPIC SYLLABLE MWE
+1384 ETHIOPIC SYLLABLE SEBATBEIT BWA
+1385 ETHIOPIC SYLLABLE BWI
+1386 ETHIOPIC SYLLABLE BWEE
+1387 ETHIOPIC SYLLABLE BWE
+1388 ETHIOPIC SYLLABLE SEBATBEIT FWA
+1389 ETHIOPIC SYLLABLE FWI
+138A ETHIOPIC SYLLABLE FWEE
+138B ETHIOPIC SYLLABLE FWE
+138C ETHIOPIC SYLLABLE SEBATBEIT PWA
+138D ETHIOPIC SYLLABLE PWI
+138E ETHIOPIC SYLLABLE PWEE
+138F ETHIOPIC SYLLABLE PWE
+@ Tonal Marks
+@+ Intended for use with a multiline scored layout
+1390 ETHIOPIC TONAL MARK YIZET
+1391 ETHIOPIC TONAL MARK DERET
+1392 ETHIOPIC TONAL MARK RIKRIK
+1393 ETHIOPIC TONAL MARK SHORT RIKRIK
+1394 ETHIOPIC TONAL MARK DIFAT
+1395 ETHIOPIC TONAL MARK KENAT
+1396 ETHIOPIC TONAL MARK CHIRET
+1397 ETHIOPIC TONAL MARK HIDET
+1398 ETHIOPIC TONAL MARK DERET-HIDET
+1399 ETHIOPIC TONAL MARK KURT
+@@ 13A0 Cherokee 13FF
+@ Syllables
+13A0 CHEROKEE LETTER A
+13A1 CHEROKEE LETTER E
+13A2 CHEROKEE LETTER I
+13A3 CHEROKEE LETTER O
+13A4 CHEROKEE LETTER U
+13A5 CHEROKEE LETTER V
+13A6 CHEROKEE LETTER GA
+13A7 CHEROKEE LETTER KA
+13A8 CHEROKEE LETTER GE
+13A9 CHEROKEE LETTER GI
+13AA CHEROKEE LETTER GO
+13AB CHEROKEE LETTER GU
+13AC CHEROKEE LETTER GV
+13AD CHEROKEE LETTER HA
+13AE CHEROKEE LETTER HE
+13AF CHEROKEE LETTER HI
+13B0 CHEROKEE LETTER HO
+13B1 CHEROKEE LETTER HU
+13B2 CHEROKEE LETTER HV
+13B3 CHEROKEE LETTER LA
+13B4 CHEROKEE LETTER LE
+13B5 CHEROKEE LETTER LI
+13B6 CHEROKEE LETTER LO
+13B7 CHEROKEE LETTER LU
+13B8 CHEROKEE LETTER LV
+13B9 CHEROKEE LETTER MA
+13BA CHEROKEE LETTER ME
+13BB CHEROKEE LETTER MI
+13BC CHEROKEE LETTER MO
+13BD CHEROKEE LETTER MU
+13BE CHEROKEE LETTER NA
+13BF CHEROKEE LETTER HNA
+13C0 CHEROKEE LETTER NAH
+13C1 CHEROKEE LETTER NE
+13C2 CHEROKEE LETTER NI
+13C3 CHEROKEE LETTER NO
+13C4 CHEROKEE LETTER NU
+13C5 CHEROKEE LETTER NV
+13C6 CHEROKEE LETTER QUA
+13C7 CHEROKEE LETTER QUE
+13C8 CHEROKEE LETTER QUI
+13C9 CHEROKEE LETTER QUO
+13CA CHEROKEE LETTER QUU
+13CB CHEROKEE LETTER QUV
+13CC CHEROKEE LETTER SA
+13CD CHEROKEE LETTER S
+13CE CHEROKEE LETTER SE
+13CF CHEROKEE LETTER SI
+13D0 CHEROKEE LETTER SO
+13D1 CHEROKEE LETTER SU
+13D2 CHEROKEE LETTER SV
+13D3 CHEROKEE LETTER DA
+13D4 CHEROKEE LETTER TA
+13D5 CHEROKEE LETTER DE
+13D6 CHEROKEE LETTER TE
+13D7 CHEROKEE LETTER DI
+13D8 CHEROKEE LETTER TI
+13D9 CHEROKEE LETTER DO
+13DA CHEROKEE LETTER DU
+13DB CHEROKEE LETTER DV
+13DC CHEROKEE LETTER DLA
+13DD CHEROKEE LETTER TLA
+13DE CHEROKEE LETTER TLE
+13DF CHEROKEE LETTER TLI
+13E0 CHEROKEE LETTER TLO
+13E1 CHEROKEE LETTER TLU
+13E2 CHEROKEE LETTER TLV
+13E3 CHEROKEE LETTER TSA
+13E4 CHEROKEE LETTER TSE
+13E5 CHEROKEE LETTER TSI
+13E6 CHEROKEE LETTER TSO
+13E7 CHEROKEE LETTER TSU
+13E8 CHEROKEE LETTER TSV
+13E9 CHEROKEE LETTER WA
+13EA CHEROKEE LETTER WE
+13EB CHEROKEE LETTER WI
+13EC CHEROKEE LETTER WO
+13ED CHEROKEE LETTER WU
+13EE CHEROKEE LETTER WV
+13EF CHEROKEE LETTER YA
+13F0 CHEROKEE LETTER YE
+13F1 CHEROKEE LETTER YI
+13F2 CHEROKEE LETTER YO
+13F3 CHEROKEE LETTER YU
+13F4 CHEROKEE LETTER YV
+@@ 1400 Unified Canadian Aboriginal Syllabics 167F
+@ Syllables
+1401 CANADIAN SYLLABICS E
+ * Inuktitut (AI), Carrier (U)
+1402 CANADIAN SYLLABICS AAI
+ * Inuktitut
+1403 CANADIAN SYLLABICS I
+ * Carrier (O)
+1404 CANADIAN SYLLABICS II
+1405 CANADIAN SYLLABICS O
+ * Inuktitut (U), Carrier (E)
+1406 CANADIAN SYLLABICS OO
+ * Inuktitut (UU)
+1407 CANADIAN SYLLABICS Y-CREE OO
+1408 CANADIAN SYLLABICS CARRIER EE
+1409 CANADIAN SYLLABICS CARRIER I
+140A CANADIAN SYLLABICS A
+140B CANADIAN SYLLABICS AA
+140C CANADIAN SYLLABICS WE
+140D CANADIAN SYLLABICS WEST-CREE WE
+140E CANADIAN SYLLABICS WI
+140F CANADIAN SYLLABICS WEST-CREE WI
+1410 CANADIAN SYLLABICS WII
+1411 CANADIAN SYLLABICS WEST-CREE WII
+1412 CANADIAN SYLLABICS WO
+1413 CANADIAN SYLLABICS WEST-CREE WO
+1414 CANADIAN SYLLABICS WOO
+1415 CANADIAN SYLLABICS WEST-CREE WOO
+1416 CANADIAN SYLLABICS NASKAPI WOO
+1417 CANADIAN SYLLABICS WA
+1418 CANADIAN SYLLABICS WEST-CREE WA
+1419 CANADIAN SYLLABICS WAA
+141A CANADIAN SYLLABICS WEST-CREE WAA
+141B CANADIAN SYLLABICS NASKAPI WAA
+141C CANADIAN SYLLABICS AI
+ * East Cree
+141D CANADIAN SYLLABICS Y-CREE W
+141E CANADIAN SYLLABICS GLOTTAL STOP
+ * Moose Cree (Y), Algonquian (GLOTTAL STOP)
+141F CANADIAN SYLLABICS FINAL ACUTE
+ * West Cree (T), East Cree (Y), Inuktitut (GLOTTAL STOP)
+ * Athapascan (B/P), Sayisi (I), Carrier (G)
+1420 CANADIAN SYLLABICS FINAL GRAVE
+ * West Cree (K), Athapascan (K), Carrier (KH)
+1421 CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+ * N Cree (SH), Sayisi (R), Carrier (NG)
+1422 CANADIAN SYLLABICS FINAL TOP HALF RING
+ * Algonquian (S), Chipewyan (R), Sayisi (S)
+1423 CANADIAN SYLLABICS FINAL RIGHT HALF RING
+ * West Cree (N), Athapascan (D/T), Sayisi (N), Carrier (N)
+1424 CANADIAN SYLLABICS FINAL RING
+ * West Cree (W), Sayisi (O)
+1425 CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+ * Chipewyan (TT), South Slavey (GH)
+1426 CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+ * Algonquian (H), Carrier (R)
+1427 CANADIAN SYLLABICS FINAL MIDDLE DOT
+ * Moose Cree (W), Athapascan (Y), Sayisi (YU)
+1428 CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+ * West Cree (C), Sayisi (D)
+1429 CANADIAN SYLLABICS FINAL PLUS
+ * Athapascan (N), Sayisi (AI)
+142A CANADIAN SYLLABICS FINAL DOWN TACK
+ * N Cree (L), Carrier (D)
+ x (down tack - 22A4)
+142B CANADIAN SYLLABICS EN
+142C CANADIAN SYLLABICS IN
+142D CANADIAN SYLLABICS ON
+142E CANADIAN SYLLABICS AN
+142F CANADIAN SYLLABICS PE
+ * Inuktitut (PAI), Athapascan (BE), Carrier (HU)
+1430 CANADIAN SYLLABICS PAAI
+ * Inuktitut
+1431 CANADIAN SYLLABICS PI
+1432 CANADIAN SYLLABICS PII
+1433 CANADIAN SYLLABICS PO
+ * Inuktitut (PU), Athapascan (BO), Carrier (HE)
+1434 CANADIAN SYLLABICS POO
+ * Inuktitut (PUU)
+1435 CANADIAN SYLLABICS Y-CREE POO
+1436 CANADIAN SYLLABICS CARRIER HEE
+1437 CANADIAN SYLLABICS CARRIER HI
+1438 CANADIAN SYLLABICS PA
+ * Athapascan (BA), Carrier (HA)
+1439 CANADIAN SYLLABICS PAA
+143A CANADIAN SYLLABICS PWE
+143B CANADIAN SYLLABICS WEST-CREE PWE
+143C CANADIAN SYLLABICS PWI
+143D CANADIAN SYLLABICS WEST-CREE PWI
+143E CANADIAN SYLLABICS PWII
+143F CANADIAN SYLLABICS WEST-CREE PWII
+1440 CANADIAN SYLLABICS PWO
+1441 CANADIAN SYLLABICS WEST-CREE PWO
+1442 CANADIAN SYLLABICS PWOO
+1443 CANADIAN SYLLABICS WEST-CREE PWOO
+1444 CANADIAN SYLLABICS PWA
+1445 CANADIAN SYLLABICS WEST-CREE PWA
+1446 CANADIAN SYLLABICS PWAA
+1447 CANADIAN SYLLABICS WEST-CREE PWAA
+1448 CANADIAN SYLLABICS Y-CREE PWAA
+1449 CANADIAN SYLLABICS P
+144A CANADIAN SYLLABICS WEST-CREE P
+ * Sayisi (G)
+144B CANADIAN SYLLABICS CARRIER H
+144C CANADIAN SYLLABICS TE
+ * Inuktitut (TAI), Athapascan (DI), Carrier (DU)
+144D CANADIAN SYLLABICS TAAI
+ * Inuktitut
+144E CANADIAN SYLLABICS TI
+ * Athapascan (DE), Carrier (DO)
+144F CANADIAN SYLLABICS TII
+1450 CANADIAN SYLLABICS TO
+ * Inuktitut (TU), Athapascan (DO), Carrier (DE), Sayisi (DU)
+1451 CANADIAN SYLLABICS TOO
+ * Inuktitut (TUU)
+1452 CANADIAN SYLLABICS Y-CREE TOO
+1453 CANADIAN SYLLABICS CARRIER DEE
+1454 CANADIAN SYLLABICS CARRIER DI
+1455 CANADIAN SYLLABICS TA
+ * Athapascan (DA)
+1456 CANADIAN SYLLABICS TAA
+1457 CANADIAN SYLLABICS TWE
+1458 CANADIAN SYLLABICS WEST-CREE TWE
+1459 CANADIAN SYLLABICS TWI
+145A CANADIAN SYLLABICS WEST-CREE TWI
+145B CANADIAN SYLLABICS TWII
+145C CANADIAN SYLLABICS WEST-CREE TWII
+145D CANADIAN SYLLABICS TWO
+145E CANADIAN SYLLABICS WEST-CREE TWO
+145F CANADIAN SYLLABICS TWOO
+1460 CANADIAN SYLLABICS WEST-CREE TWOO
+1461 CANADIAN SYLLABICS TWA
+1462 CANADIAN SYLLABICS WEST-CREE TWA
+1463 CANADIAN SYLLABICS TWAA
+1464 CANADIAN SYLLABICS WEST-CREE TWAA
+1465 CANADIAN SYLLABICS NASKAPI TWAA
+1466 CANADIAN SYLLABICS T
+1467 CANADIAN SYLLABICS TTE
+ * South Slavey (DEH)
+1468 CANADIAN SYLLABICS TTI
+ * South Slavey (DIH)
+1469 CANADIAN SYLLABICS TTO
+ * South Slavey (DOH)
+146A CANADIAN SYLLABICS TTA
+ * South Slavey (DAH)
+146B CANADIAN SYLLABICS KE
+ * Inuktitut (KAI)
+146C CANADIAN SYLLABICS KAAI
+ * Inuktitut
+146D CANADIAN SYLLABICS KI
+146E CANADIAN SYLLABICS KII
+146F CANADIAN SYLLABICS KO
+ * Inuktitut (KU), Sayisi (KU)
+1470 CANADIAN SYLLABICS KOO
+ * Inuktitut (KUU)
+1471 CANADIAN SYLLABICS Y-CREE KOO
+1472 CANADIAN SYLLABICS KA
+1473 CANADIAN SYLLABICS KAA
+1474 CANADIAN SYLLABICS KWE
+1475 CANADIAN SYLLABICS WEST-CREE KWE
+1476 CANADIAN SYLLABICS KWI
+1477 CANADIAN SYLLABICS WEST-CREE KWI
+1478 CANADIAN SYLLABICS KWII
+1479 CANADIAN SYLLABICS WEST-CREE KWII
+147A CANADIAN SYLLABICS KWO
+147B CANADIAN SYLLABICS WEST-CREE KWO
+147C CANADIAN SYLLABICS KWOO
+147D CANADIAN SYLLABICS WEST-CREE KWOO
+147E CANADIAN SYLLABICS KWA
+147F CANADIAN SYLLABICS WEST-CREE KWA
+1480 CANADIAN SYLLABICS KWAA
+1481 CANADIAN SYLLABICS WEST-CREE KWAA
+1482 CANADIAN SYLLABICS NASKAPI KWAA
+1483 CANADIAN SYLLABICS K
+1484 CANADIAN SYLLABICS KW
+ * East Cree
+1485 CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+1486 CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+1487 CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+1488 CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+1489 CANADIAN SYLLABICS CE
+ * Inuktitut (GAI), Athapascan (DHE), Sayisi (THE)
+148A CANADIAN SYLLABICS CAAI
+ * Inuktitut (GAAI)
+148B CANADIAN SYLLABICS CI
+ * Inuktitut (GI), Athapascan (DHI), Sayisi (THI)
+148C CANADIAN SYLLABICS CII
+ * Inuktitut (GII)
+148D CANADIAN SYLLABICS CO
+ * Inuktitut (GU), Athapascan (DHO), Sayisi (THO)
+148E CANADIAN SYLLABICS COO
+ * Inuktitut (GUU)
+148F CANADIAN SYLLABICS Y-CREE COO
+1490 CANADIAN SYLLABICS CA
+ * Inuktitut (GA), Athapascan (DHA), Sayisi (THA)
+1491 CANADIAN SYLLABICS CAA
+ * Inuktitut (GAA)
+1492 CANADIAN SYLLABICS CWE
+1493 CANADIAN SYLLABICS WEST-CREE CWE
+1494 CANADIAN SYLLABICS CWI
+1495 CANADIAN SYLLABICS WEST-CREE CWI
+1496 CANADIAN SYLLABICS CWII
+1497 CANADIAN SYLLABICS WEST-CREE CWII
+1498 CANADIAN SYLLABICS CWO
+1499 CANADIAN SYLLABICS WEST-CREE CWO
+149A CANADIAN SYLLABICS CWOO
+149B CANADIAN SYLLABICS WEST-CREE CWOO
+149C CANADIAN SYLLABICS CWA
+149D CANADIAN SYLLABICS WEST-CREE CWA
+149E CANADIAN SYLLABICS CWAA
+149F CANADIAN SYLLABICS WEST-CREE CWAA
+14A0 CANADIAN SYLLABICS NASKAPI CWAA
+14A1 CANADIAN SYLLABICS C
+ * Inuktitut (G), Sayisi (T)
+14A2 CANADIAN SYLLABICS SAYISI TH
+ * Athapascan (DH)
+14A3 CANADIAN SYLLABICS ME
+ * Inuktitut (MAI)
+14A4 CANADIAN SYLLABICS MAAI
+ * Inuktitut
+14A5 CANADIAN SYLLABICS MI
+14A6 CANADIAN SYLLABICS MII
+14A7 CANADIAN SYLLABICS MO
+ * Inuktitut (MU), Sayisi (MU)
+14A8 CANADIAN SYLLABICS MOO
+ * Inuktitut (MUU)
+14A9 CANADIAN SYLLABICS Y-CREE MOO
+14AA CANADIAN SYLLABICS MA
+14AB CANADIAN SYLLABICS MAA
+14AC CANADIAN SYLLABICS MWE
+14AD CANADIAN SYLLABICS WEST-CREE MWE
+14AE CANADIAN SYLLABICS MWI
+14AF CANADIAN SYLLABICS WEST-CREE MWI
+14B0 CANADIAN SYLLABICS MWII
+14B1 CANADIAN SYLLABICS WEST-CREE MWII
+14B2 CANADIAN SYLLABICS MWO
+14B3 CANADIAN SYLLABICS WEST-CREE MWO
+14B4 CANADIAN SYLLABICS MWOO
+14B5 CANADIAN SYLLABICS WEST-CREE MWOO
+14B6 CANADIAN SYLLABICS MWA
+14B7 CANADIAN SYLLABICS WEST-CREE MWA
+14B8 CANADIAN SYLLABICS MWAA
+14B9 CANADIAN SYLLABICS WEST-CREE MWAA
+14BA CANADIAN SYLLABICS NASKAPI MWAA
+14BB CANADIAN SYLLABICS M
+14BC CANADIAN SYLLABICS WEST-CREE M
+ * Carrier (M)
+14BD CANADIAN SYLLABICS MH
+14BE CANADIAN SYLLABICS ATHAPASCAN M
+14BF CANADIAN SYLLABICS SAYISI M
+14C0 CANADIAN SYLLABICS NE
+ * Inuktitut (NAI)
+14C1 CANADIAN SYLLABICS NAAI
+ * Inuktitut
+14C2 CANADIAN SYLLABICS NI
+14C3 CANADIAN SYLLABICS NII
+14C4 CANADIAN SYLLABICS NO
+ * Inuktitut (NU), Sayisi (NU)
+14C5 CANADIAN SYLLABICS NOO
+ * Inuktitut (NUU)
+14C6 CANADIAN SYLLABICS Y-CREE NOO
+14C7 CANADIAN SYLLABICS NA
+14C8 CANADIAN SYLLABICS NAA
+14C9 CANADIAN SYLLABICS NWE
+14CA CANADIAN SYLLABICS WEST-CREE NWE
+14CB CANADIAN SYLLABICS NWA
+14CC CANADIAN SYLLABICS WEST-CREE NWA
+14CD CANADIAN SYLLABICS NWAA
+14CE CANADIAN SYLLABICS WEST-CREE NWAA
+14CF CANADIAN SYLLABICS NASKAPI NWAA
+14D0 CANADIAN SYLLABICS N
+14D1 CANADIAN SYLLABICS CARRIER NG
+14D2 CANADIAN SYLLABICS NH
+14D3 CANADIAN SYLLABICS LE
+ * Inuktitut (LAI)
+14D4 CANADIAN SYLLABICS LAAI
+ * Inuktitut
+14D5 CANADIAN SYLLABICS LI
+14D6 CANADIAN SYLLABICS LII
+14D7 CANADIAN SYLLABICS LO
+ * Inuktitut (LU)
+14D8 CANADIAN SYLLABICS LOO
+ * Inuktitut (LUU)
+14D9 CANADIAN SYLLABICS Y-CREE LOO
+14DA CANADIAN SYLLABICS LA
+14DB CANADIAN SYLLABICS LAA
+14DC CANADIAN SYLLABICS LWE
+14DD CANADIAN SYLLABICS WEST-CREE LWE
+14DE CANADIAN SYLLABICS LWI
+14DF CANADIAN SYLLABICS WEST-CREE LWI
+14E0 CANADIAN SYLLABICS LWII
+14E1 CANADIAN SYLLABICS WEST-CREE LWII
+14E2 CANADIAN SYLLABICS LWO
+14E3 CANADIAN SYLLABICS WEST-CREE LWO
+14E4 CANADIAN SYLLABICS LWOO
+14E5 CANADIAN SYLLABICS WEST-CREE LWOO
+14E6 CANADIAN SYLLABICS LWA
+14E7 CANADIAN SYLLABICS WEST-CREE LWA
+14E8 CANADIAN SYLLABICS LWAA
+14E9 CANADIAN SYLLABICS WEST-CREE LWAA
+14EA CANADIAN SYLLABICS L
+14EB CANADIAN SYLLABICS WEST-CREE L
+14EC CANADIAN SYLLABICS MEDIAL L
+14ED CANADIAN SYLLABICS SE
+ * Inuktitut (SAI)
+14EE CANADIAN SYLLABICS SAAI
+ * Inuktitut
+14EF CANADIAN SYLLABICS SI
+14F0 CANADIAN SYLLABICS SII
+14F1 CANADIAN SYLLABICS SO
+ * Inuktitut (SU), Sayisi (SU)
+14F2 CANADIAN SYLLABICS SOO
+ * Inuktitut (SUU)
+14F3 CANADIAN SYLLABICS Y-CREE SOO
+14F4 CANADIAN SYLLABICS SA
+14F5 CANADIAN SYLLABICS SAA
+14F6 CANADIAN SYLLABICS SWE
+14F7 CANADIAN SYLLABICS WEST-CREE SWE
+14F8 CANADIAN SYLLABICS SWI
+14F9 CANADIAN SYLLABICS WEST-CREE SWI
+14FA CANADIAN SYLLABICS SWII
+14FB CANADIAN SYLLABICS WEST-CREE SWII
+14FC CANADIAN SYLLABICS SWO
+14FD CANADIAN SYLLABICS WEST-CREE SWO
+14FE CANADIAN SYLLABICS SWOO
+14FF CANADIAN SYLLABICS WEST-CREE SWOO
+1500 CANADIAN SYLLABICS SWA
+1501 CANADIAN SYLLABICS WEST-CREE SWA
+1502 CANADIAN SYLLABICS SWAA
+1503 CANADIAN SYLLABICS WEST-CREE SWAA
+1504 CANADIAN SYLLABICS NASKAPI SWAA
+1505 CANADIAN SYLLABICS S
+1506 CANADIAN SYLLABICS ATHAPASCAN S
+1507 CANADIAN SYLLABICS SW
+1508 CANADIAN SYLLABICS BLACKFOOT S
+1509 CANADIAN SYLLABICS MOOSE-CREE SK
+150A CANADIAN SYLLABICS NASKAPI SKW
+150B CANADIAN SYLLABICS NASKAPI S-W
+150C CANADIAN SYLLABICS NASKAPI SPWA
+150D CANADIAN SYLLABICS NASKAPI STWA
+150E CANADIAN SYLLABICS NASKAPI SKWA
+150F CANADIAN SYLLABICS NASKAPI SCWA
+1510 CANADIAN SYLLABICS SHE
+1511 CANADIAN SYLLABICS SHI
+1512 CANADIAN SYLLABICS SHII
+1513 CANADIAN SYLLABICS SHO
+1514 CANADIAN SYLLABICS SHOO
+1515 CANADIAN SYLLABICS SHA
+1516 CANADIAN SYLLABICS SHAA
+1517 CANADIAN SYLLABICS SHWE
+1518 CANADIAN SYLLABICS WEST-CREE SHWE
+1519 CANADIAN SYLLABICS SHWI
+151A CANADIAN SYLLABICS WEST-CREE SHWI
+151B CANADIAN SYLLABICS SHWII
+151C CANADIAN SYLLABICS WEST-CREE SHWII
+151D CANADIAN SYLLABICS SHWO
+151E CANADIAN SYLLABICS WEST-CREE SHWO
+151F CANADIAN SYLLABICS SHWOO
+1520 CANADIAN SYLLABICS WEST-CREE SHWOO
+1521 CANADIAN SYLLABICS SHWA
+1522 CANADIAN SYLLABICS WEST-CREE SHWA
+1523 CANADIAN SYLLABICS SHWAA
+1524 CANADIAN SYLLABICS WEST-CREE SHWAA
+1525 CANADIAN SYLLABICS SH
+1526 CANADIAN SYLLABICS YE
+ * Inuktitut (YAI)
+1527 CANADIAN SYLLABICS YAAI
+ * Inuktitut
+1528 CANADIAN SYLLABICS YI
+1529 CANADIAN SYLLABICS YII
+152A CANADIAN SYLLABICS YO
+ * Inuktitut (YU)
+152B CANADIAN SYLLABICS YOO
+ * Inuktitut (YUU)
+152C CANADIAN SYLLABICS Y-CREE YOO
+152D CANADIAN SYLLABICS YA
+152E CANADIAN SYLLABICS YAA
+152F CANADIAN SYLLABICS YWE
+1530 CANADIAN SYLLABICS WEST-CREE YWE
+1531 CANADIAN SYLLABICS YWI
+1532 CANADIAN SYLLABICS WEST-CREE YWI
+1533 CANADIAN SYLLABICS YWII
+1534 CANADIAN SYLLABICS WEST-CREE YWII
+1535 CANADIAN SYLLABICS YWO
+1536 CANADIAN SYLLABICS WEST-CREE YWO
+1537 CANADIAN SYLLABICS YWOO
+1538 CANADIAN SYLLABICS WEST-CREE YWOO
+1539 CANADIAN SYLLABICS YWA
+153A CANADIAN SYLLABICS WEST-CREE YWA
+153B CANADIAN SYLLABICS YWAA
+153C CANADIAN SYLLABICS WEST-CREE YWAA
+153D CANADIAN SYLLABICS NASKAPI YWAA
+153E CANADIAN SYLLABICS Y
+153F CANADIAN SYLLABICS BIBLE-CREE Y
+1540 CANADIAN SYLLABICS WEST-CREE Y
+1541 CANADIAN SYLLABICS SAYISI YI
+1542 CANADIAN SYLLABICS RE
+ * Inuktitut (RAI)
+1543 CANADIAN SYLLABICS R-CREE RE
+ * Athapascan (LE)
+1544 CANADIAN SYLLABICS WEST-CREE LE
+ * Athapascan (LI)
+1545 CANADIAN SYLLABICS RAAI
+ * Inuktitut
+1546 CANADIAN SYLLABICS RI
+1547 CANADIAN SYLLABICS RII
+1548 CANADIAN SYLLABICS RO
+ * Inuktitut (RU)
+1549 CANADIAN SYLLABICS ROO
+ * Inuktitut (RUU)
+154A CANADIAN SYLLABICS WEST-CREE LO
+ * Sayisi (LU)
+154B CANADIAN SYLLABICS RA
+154C CANADIAN SYLLABICS RAA
+154D CANADIAN SYLLABICS WEST-CREE LA
+154E CANADIAN SYLLABICS RWAA
+154F CANADIAN SYLLABICS WEST-CREE RWAA
+1550 CANADIAN SYLLABICS R
+1551 CANADIAN SYLLABICS WEST-CREE R
+1552 CANADIAN SYLLABICS MEDIAL R
+1553 CANADIAN SYLLABICS FE
+ * Inuktitut (FAI)
+1554 CANADIAN SYLLABICS FAAI
+ * Inuktitut
+1555 CANADIAN SYLLABICS FI
+1556 CANADIAN SYLLABICS FII
+1557 CANADIAN SYLLABICS FO
+1558 CANADIAN SYLLABICS FOO
+1559 CANADIAN SYLLABICS FA
+155A CANADIAN SYLLABICS FAA
+155B CANADIAN SYLLABICS FWAA
+155C CANADIAN SYLLABICS WEST-CREE FWAA
+155D CANADIAN SYLLABICS F
+155E CANADIAN SYLLABICS THE
+ * Sayisi (TE)
+155F CANADIAN SYLLABICS N-CREE THE
+1560 CANADIAN SYLLABICS THI
+ * Sayisi (TI)
+1561 CANADIAN SYLLABICS N-CREE THI
+1562 CANADIAN SYLLABICS THII
+1563 CANADIAN SYLLABICS N-CREE THII
+1564 CANADIAN SYLLABICS THO
+ * Sayisi (TU)
+1565 CANADIAN SYLLABICS THOO
+1566 CANADIAN SYLLABICS THA
+ * Sayisi (TA)
+1567 CANADIAN SYLLABICS THAA
+1568 CANADIAN SYLLABICS THWAA
+1569 CANADIAN SYLLABICS WEST-CREE THWAA
+156A CANADIAN SYLLABICS TH
+156B CANADIAN SYLLABICS TTHE
+156C CANADIAN SYLLABICS TTHI
+156D CANADIAN SYLLABICS TTHO
+ * Sayisi (TTHU)
+156E CANADIAN SYLLABICS TTHA
+156F CANADIAN SYLLABICS TTH
+ * probably a mistaken interpretation of an asterisk used to mark a proper noun
+ x (asterisk - 002A)
+1570 CANADIAN SYLLABICS TYE
+1571 CANADIAN SYLLABICS TYI
+1572 CANADIAN SYLLABICS TYO
+1573 CANADIAN SYLLABICS TYA
+1574 CANADIAN SYLLABICS NUNAVIK HE
+1575 CANADIAN SYLLABICS NUNAVIK HI
+1576 CANADIAN SYLLABICS NUNAVIK HII
+1577 CANADIAN SYLLABICS NUNAVIK HO
+1578 CANADIAN SYLLABICS NUNAVIK HOO
+1579 CANADIAN SYLLABICS NUNAVIK HA
+157A CANADIAN SYLLABICS NUNAVIK HAA
+157B CANADIAN SYLLABICS NUNAVIK H
+157C CANADIAN SYLLABICS NUNAVUT H
+157D CANADIAN SYLLABICS HK
+ * Algonquian
+157E CANADIAN SYLLABICS QAAI
+ * Inuktitut
+157F CANADIAN SYLLABICS QI
+1580 CANADIAN SYLLABICS QII
+1581 CANADIAN SYLLABICS QO
+ * Inuktitut (QU)
+1582 CANADIAN SYLLABICS QOO
+ * Inuktitut (QUU)
+1583 CANADIAN SYLLABICS QA
+1584 CANADIAN SYLLABICS QAA
+1585 CANADIAN SYLLABICS Q
+1586 CANADIAN SYLLABICS TLHE
+ * Sayisi (KLE)
+1587 CANADIAN SYLLABICS TLHI
+ * Sayisi (KLI)
+1588 CANADIAN SYLLABICS TLHO
+ * Sayisi (KLU)
+1589 CANADIAN SYLLABICS TLHA
+ * Sayisi (KLA)
+158A CANADIAN SYLLABICS WEST-CREE RE
+158B CANADIAN SYLLABICS WEST-CREE RI
+158C CANADIAN SYLLABICS WEST-CREE RO
+158D CANADIAN SYLLABICS WEST-CREE RA
+158E CANADIAN SYLLABICS NGAAI
+ * Inuktitut
+158F CANADIAN SYLLABICS NGI
+1590 CANADIAN SYLLABICS NGII
+1591 CANADIAN SYLLABICS NGO
+ * Inuktitut (NGU)
+1592 CANADIAN SYLLABICS NGOO
+ * Inuktitut (NGUU)
+1593 CANADIAN SYLLABICS NGA
+1594 CANADIAN SYLLABICS NGAA
+1595 CANADIAN SYLLABICS NG
+1596 CANADIAN SYLLABICS NNG
+1597 CANADIAN SYLLABICS SAYISI SHE
+1598 CANADIAN SYLLABICS SAYISI SHI
+1599 CANADIAN SYLLABICS SAYISI SHO
+ * Sayisi (SHU)
+159A CANADIAN SYLLABICS SAYISI SHA
+159B CANADIAN SYLLABICS WOODS-CREE THE
+159C CANADIAN SYLLABICS WOODS-CREE THI
+159D CANADIAN SYLLABICS WOODS-CREE THO
+159E CANADIAN SYLLABICS WOODS-CREE THA
+159F CANADIAN SYLLABICS WOODS-CREE TH
+15A0 CANADIAN SYLLABICS LHI
+15A1 CANADIAN SYLLABICS LHII
+15A2 CANADIAN SYLLABICS LHO
+ * Inuktitut (LHU)
+15A3 CANADIAN SYLLABICS LHOO
+ * Inuktitut (LHUU)
+15A4 CANADIAN SYLLABICS LHA
+15A5 CANADIAN SYLLABICS LHAA
+15A6 CANADIAN SYLLABICS LH
+15A7 CANADIAN SYLLABICS TH-CREE THE
+15A8 CANADIAN SYLLABICS TH-CREE THI
+15A9 CANADIAN SYLLABICS TH-CREE THII
+15AA CANADIAN SYLLABICS TH-CREE THO
+15AB CANADIAN SYLLABICS TH-CREE THOO
+15AC CANADIAN SYLLABICS TH-CREE THA
+15AD CANADIAN SYLLABICS TH-CREE THAA
+15AE CANADIAN SYLLABICS TH-CREE TH
+15AF CANADIAN SYLLABICS AIVILIK B
+15B0 CANADIAN SYLLABICS BLACKFOOT E
+15B1 CANADIAN SYLLABICS BLACKFOOT I
+15B2 CANADIAN SYLLABICS BLACKFOOT O
+15B3 CANADIAN SYLLABICS BLACKFOOT A
+15B4 CANADIAN SYLLABICS BLACKFOOT WE
+15B5 CANADIAN SYLLABICS BLACKFOOT WI
+15B6 CANADIAN SYLLABICS BLACKFOOT WO
+15B7 CANADIAN SYLLABICS BLACKFOOT WA
+15B8 CANADIAN SYLLABICS BLACKFOOT NE
+15B9 CANADIAN SYLLABICS BLACKFOOT NI
+15BA CANADIAN SYLLABICS BLACKFOOT NO
+15BB CANADIAN SYLLABICS BLACKFOOT NA
+15BC CANADIAN SYLLABICS BLACKFOOT KE
+15BD CANADIAN SYLLABICS BLACKFOOT KI
+15BE CANADIAN SYLLABICS BLACKFOOT KO
+15BF CANADIAN SYLLABICS BLACKFOOT KA
+15C0 CANADIAN SYLLABICS SAYISI HE
+15C1 CANADIAN SYLLABICS SAYISI HI
+15C2 CANADIAN SYLLABICS SAYISI HO
+ * Sayisi (HU)
+15C3 CANADIAN SYLLABICS SAYISI HA
+15C4 CANADIAN SYLLABICS CARRIER GHU
+15C5 CANADIAN SYLLABICS CARRIER GHO
+15C6 CANADIAN SYLLABICS CARRIER GHE
+15C7 CANADIAN SYLLABICS CARRIER GHEE
+15C8 CANADIAN SYLLABICS CARRIER GHI
+15C9 CANADIAN SYLLABICS CARRIER GHA
+15CA CANADIAN SYLLABICS CARRIER RU
+15CB CANADIAN SYLLABICS CARRIER RO
+15CC CANADIAN SYLLABICS CARRIER RE
+15CD CANADIAN SYLLABICS CARRIER REE
+15CE CANADIAN SYLLABICS CARRIER RI
+15CF CANADIAN SYLLABICS CARRIER RA
+15D0 CANADIAN SYLLABICS CARRIER WU
+15D1 CANADIAN SYLLABICS CARRIER WO
+15D2 CANADIAN SYLLABICS CARRIER WE
+15D3 CANADIAN SYLLABICS CARRIER WEE
+15D4 CANADIAN SYLLABICS CARRIER WI
+15D5 CANADIAN SYLLABICS CARRIER WA
+15D6 CANADIAN SYLLABICS CARRIER HWU
+15D7 CANADIAN SYLLABICS CARRIER HWO
+15D8 CANADIAN SYLLABICS CARRIER HWE
+15D9 CANADIAN SYLLABICS CARRIER HWEE
+15DA CANADIAN SYLLABICS CARRIER HWI
+15DB CANADIAN SYLLABICS CARRIER HWA
+15DC CANADIAN SYLLABICS CARRIER THU
+15DD CANADIAN SYLLABICS CARRIER THO
+15DE CANADIAN SYLLABICS CARRIER THE
+15DF CANADIAN SYLLABICS CARRIER THEE
+15E0 CANADIAN SYLLABICS CARRIER THI
+15E1 CANADIAN SYLLABICS CARRIER THA
+15E2 CANADIAN SYLLABICS CARRIER TTU
+15E3 CANADIAN SYLLABICS CARRIER TTO
+15E4 CANADIAN SYLLABICS CARRIER TTE
+15E5 CANADIAN SYLLABICS CARRIER TTEE
+15E6 CANADIAN SYLLABICS CARRIER TTI
+15E7 CANADIAN SYLLABICS CARRIER TTA
+15E8 CANADIAN SYLLABICS CARRIER PU
+15E9 CANADIAN SYLLABICS CARRIER PO
+15EA CANADIAN SYLLABICS CARRIER PE
+15EB CANADIAN SYLLABICS CARRIER PEE
+15EC CANADIAN SYLLABICS CARRIER PI
+15ED CANADIAN SYLLABICS CARRIER PA
+15EE CANADIAN SYLLABICS CARRIER P
+15EF CANADIAN SYLLABICS CARRIER GU
+15F0 CANADIAN SYLLABICS CARRIER GO
+15F1 CANADIAN SYLLABICS CARRIER GE
+15F2 CANADIAN SYLLABICS CARRIER GEE
+15F3 CANADIAN SYLLABICS CARRIER GI
+15F4 CANADIAN SYLLABICS CARRIER GA
+15F5 CANADIAN SYLLABICS CARRIER KHU
+15F6 CANADIAN SYLLABICS CARRIER KHO
+15F7 CANADIAN SYLLABICS CARRIER KHE
+15F8 CANADIAN SYLLABICS CARRIER KHEE
+15F9 CANADIAN SYLLABICS CARRIER KHI
+15FA CANADIAN SYLLABICS CARRIER KHA
+15FB CANADIAN SYLLABICS CARRIER KKU
+15FC CANADIAN SYLLABICS CARRIER KKO
+15FD CANADIAN SYLLABICS CARRIER KKE
+15FE CANADIAN SYLLABICS CARRIER KKEE
+15FF CANADIAN SYLLABICS CARRIER KKI
+1600 CANADIAN SYLLABICS CARRIER KKA
+1601 CANADIAN SYLLABICS CARRIER KK
+1602 CANADIAN SYLLABICS CARRIER NU
+1603 CANADIAN SYLLABICS CARRIER NO
+1604 CANADIAN SYLLABICS CARRIER NE
+1605 CANADIAN SYLLABICS CARRIER NEE
+1606 CANADIAN SYLLABICS CARRIER NI
+1607 CANADIAN SYLLABICS CARRIER NA
+1608 CANADIAN SYLLABICS CARRIER MU
+1609 CANADIAN SYLLABICS CARRIER MO
+160A CANADIAN SYLLABICS CARRIER ME
+160B CANADIAN SYLLABICS CARRIER MEE
+160C CANADIAN SYLLABICS CARRIER MI
+160D CANADIAN SYLLABICS CARRIER MA
+160E CANADIAN SYLLABICS CARRIER YU
+160F CANADIAN SYLLABICS CARRIER YO
+1610 CANADIAN SYLLABICS CARRIER YE
+1611 CANADIAN SYLLABICS CARRIER YEE
+1612 CANADIAN SYLLABICS CARRIER YI
+1613 CANADIAN SYLLABICS CARRIER YA
+1614 CANADIAN SYLLABICS CARRIER JU
+ * Athapascan (ZA), Sayisi (TZO), South Slavey (DHA)
+1615 CANADIAN SYLLABICS SAYISI JU
+ * Athapascan (ZO), Sayisi (TZU), South Slavey (DHO)
+1616 CANADIAN SYLLABICS CARRIER JO
+1617 CANADIAN SYLLABICS CARRIER JE
+1618 CANADIAN SYLLABICS CARRIER JEE
+1619 CANADIAN SYLLABICS CARRIER JI
+161A CANADIAN SYLLABICS SAYISI JI
+ * Athapascan (ZE), Sayisi (TZE), South Slavey (DHE)
+161B CANADIAN SYLLABICS CARRIER JA
+ * Athapascan (ZI), Sayisi (TZI), South Slavey (DHI)
+161C CANADIAN SYLLABICS CARRIER JJU
+161D CANADIAN SYLLABICS CARRIER JJO
+161E CANADIAN SYLLABICS CARRIER JJE
+161F CANADIAN SYLLABICS CARRIER JJEE
+1620 CANADIAN SYLLABICS CARRIER JJI
+1621 CANADIAN SYLLABICS CARRIER JJA
+1622 CANADIAN SYLLABICS CARRIER LU
+1623 CANADIAN SYLLABICS CARRIER LO
+1624 CANADIAN SYLLABICS CARRIER LE
+1625 CANADIAN SYLLABICS CARRIER LEE
+1626 CANADIAN SYLLABICS CARRIER LI
+1627 CANADIAN SYLLABICS CARRIER LA
+1628 CANADIAN SYLLABICS CARRIER DLU
+1629 CANADIAN SYLLABICS CARRIER DLO
+162A CANADIAN SYLLABICS CARRIER DLE
+162B CANADIAN SYLLABICS CARRIER DLEE
+162C CANADIAN SYLLABICS CARRIER DLI
+162D CANADIAN SYLLABICS CARRIER DLA
+162E CANADIAN SYLLABICS CARRIER LHU
+162F CANADIAN SYLLABICS CARRIER LHO
+1630 CANADIAN SYLLABICS CARRIER LHE
+1631 CANADIAN SYLLABICS CARRIER LHEE
+1632 CANADIAN SYLLABICS CARRIER LHI
+1633 CANADIAN SYLLABICS CARRIER LHA
+1634 CANADIAN SYLLABICS CARRIER TLHU
+1635 CANADIAN SYLLABICS CARRIER TLHO
+1636 CANADIAN SYLLABICS CARRIER TLHE
+1637 CANADIAN SYLLABICS CARRIER TLHEE
+1638 CANADIAN SYLLABICS CARRIER TLHI
+1639 CANADIAN SYLLABICS CARRIER TLHA
+163A CANADIAN SYLLABICS CARRIER TLU
+163B CANADIAN SYLLABICS CARRIER TLO
+163C CANADIAN SYLLABICS CARRIER TLE
+163D CANADIAN SYLLABICS CARRIER TLEE
+163E CANADIAN SYLLABICS CARRIER TLI
+163F CANADIAN SYLLABICS CARRIER TLA
+1640 CANADIAN SYLLABICS CARRIER ZU
+1641 CANADIAN SYLLABICS CARRIER ZO
+1642 CANADIAN SYLLABICS CARRIER ZE
+1643 CANADIAN SYLLABICS CARRIER ZEE
+1644 CANADIAN SYLLABICS CARRIER ZI
+1645 CANADIAN SYLLABICS CARRIER ZA
+1646 CANADIAN SYLLABICS CARRIER Z
+1647 CANADIAN SYLLABICS CARRIER INITIAL Z
+1648 CANADIAN SYLLABICS CARRIER DZU
+1649 CANADIAN SYLLABICS CARRIER DZO
+164A CANADIAN SYLLABICS CARRIER DZE
+164B CANADIAN SYLLABICS CARRIER DZEE
+164C CANADIAN SYLLABICS CARRIER DZI
+164D CANADIAN SYLLABICS CARRIER DZA
+164E CANADIAN SYLLABICS CARRIER SU
+164F CANADIAN SYLLABICS CARRIER SO
+1650 CANADIAN SYLLABICS CARRIER SE
+1651 CANADIAN SYLLABICS CARRIER SEE
+1652 CANADIAN SYLLABICS CARRIER SI
+1653 CANADIAN SYLLABICS CARRIER SA
+1654 CANADIAN SYLLABICS CARRIER SHU
+1655 CANADIAN SYLLABICS CARRIER SHO
+1656 CANADIAN SYLLABICS CARRIER SHE
+1657 CANADIAN SYLLABICS CARRIER SHEE
+1658 CANADIAN SYLLABICS CARRIER SHI
+1659 CANADIAN SYLLABICS CARRIER SHA
+165A CANADIAN SYLLABICS CARRIER SH
+165B CANADIAN SYLLABICS CARRIER TSU
+165C CANADIAN SYLLABICS CARRIER TSO
+165D CANADIAN SYLLABICS CARRIER TSE
+165E CANADIAN SYLLABICS CARRIER TSEE
+165F CANADIAN SYLLABICS CARRIER TSI
+1660 CANADIAN SYLLABICS CARRIER TSA
+1661 CANADIAN SYLLABICS CARRIER CHU
+1662 CANADIAN SYLLABICS CARRIER CHO
+1663 CANADIAN SYLLABICS CARRIER CHE
+1664 CANADIAN SYLLABICS CARRIER CHEE
+1665 CANADIAN SYLLABICS CARRIER CHI
+1666 CANADIAN SYLLABICS CARRIER CHA
+1667 CANADIAN SYLLABICS CARRIER TTSU
+1668 CANADIAN SYLLABICS CARRIER TTSO
+1669 CANADIAN SYLLABICS CARRIER TTSE
+166A CANADIAN SYLLABICS CARRIER TTSEE
+166B CANADIAN SYLLABICS CARRIER TTSI
+166C CANADIAN SYLLABICS CARRIER TTSA
+@ Symbol
+166D CANADIAN SYLLABICS CHI SIGN
+ * Algonquian
+ * used as a symbol to denote Christ
+ x (chi rho - 2627)
+@ Punctuation
+166E CANADIAN SYLLABICS FULL STOP
+@ Syllables
+166F CANADIAN SYLLABICS QAI
+1670 CANADIAN SYLLABICS NGAI
+1671 CANADIAN SYLLABICS NNGI
+1672 CANADIAN SYLLABICS NNGII
+1673 CANADIAN SYLLABICS NNGO
+ * Inuktitut (NNGU)
+1674 CANADIAN SYLLABICS NNGOO
+ * Inuktitut (NNGUU)
+1675 CANADIAN SYLLABICS NNGA
+1676 CANADIAN SYLLABICS NNGAA
+@@ 1680 Ogham 169F
+@ Punctuation
+1680 OGHAM SPACE MARK
+ * glyph is blank in "stemless" style fonts
+@ Traditional letters
+1681 OGHAM LETTER BEITH
+1682 OGHAM LETTER LUIS
+1683 OGHAM LETTER FEARN
+1684 OGHAM LETTER SAIL
+1685 OGHAM LETTER NION
+1686 OGHAM LETTER UATH
+1687 OGHAM LETTER DAIR
+1688 OGHAM LETTER TINNE
+1689 OGHAM LETTER COLL
+168A OGHAM LETTER CEIRT
+168B OGHAM LETTER MUIN
+168C OGHAM LETTER GORT
+168D OGHAM LETTER NGEADAL
+168E OGHAM LETTER STRAIF
+168F OGHAM LETTER RUIS
+1690 OGHAM LETTER AILM
+1691 OGHAM LETTER ONN
+1692 OGHAM LETTER UR
+1693 OGHAM LETTER EADHADH
+1694 OGHAM LETTER IODHADH
+@ Forfeda (supplementary letters)
+1695 OGHAM LETTER EABHADH
+1696 OGHAM LETTER OR
+1697 OGHAM LETTER UILLEANN
+1698 OGHAM LETTER IFIN
+1699 OGHAM LETTER EAMHANCHOLL
+169A OGHAM LETTER PEITH
+@ Punctuation
+169B OGHAM FEATHER MARK
+ * marks beginning of Ogham text
+169C OGHAM REVERSED FEATHER MARK
+ * marks end of Ogham text
+@@ 16A0 Runic 16FF
+@ Letters
+16A0 RUNIC LETTER FEHU FEOH FE F
+16A1 RUNIC LETTER V
+16A2 RUNIC LETTER URUZ UR U
+16A3 RUNIC LETTER YR
+16A4 RUNIC LETTER Y
+16A5 RUNIC LETTER W
+16A6 RUNIC LETTER THURISAZ THURS THORN
+ x (latin small letter thorn - 00FE)
+16A7 RUNIC LETTER ETH
+16A8 RUNIC LETTER ANSUZ A
+16A9 RUNIC LETTER OS O
+16AA RUNIC LETTER AC A
+16AB RUNIC LETTER AESC
+16AC RUNIC LETTER LONG-BRANCH-OSS O
+16AD RUNIC LETTER SHORT-TWIG-OSS O
+16AE RUNIC LETTER O
+16AF RUNIC LETTER OE
+16B0 RUNIC LETTER ON
+16B1 RUNIC LETTER RAIDO RAD REID R
+16B2 RUNIC LETTER KAUNA
+16B3 RUNIC LETTER CEN
+16B4 RUNIC LETTER KAUN K
+16B5 RUNIC LETTER G
+16B6 RUNIC LETTER ENG
+16B7 RUNIC LETTER GEBO GYFU G
+16B8 RUNIC LETTER GAR
+16B9 RUNIC LETTER WUNJO WYNN W
+ x (latin letter wynn - 01BF)
+16BA RUNIC LETTER HAGLAZ H
+16BB RUNIC LETTER HAEGL H
+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
+16BE RUNIC LETTER NAUDIZ NYD NAUD N
+16BF RUNIC LETTER SHORT-TWIG-NAUD N
+16C0 RUNIC LETTER DOTTED-N
+16C1 RUNIC LETTER ISAZ IS ISS I
+16C2 RUNIC LETTER E
+16C3 RUNIC LETTER JERAN J
+16C4 RUNIC LETTER GER
+16C5 RUNIC LETTER LONG-BRANCH-AR AE
+16C6 RUNIC LETTER SHORT-TWIG-AR A
+16C7 RUNIC LETTER IWAZ EOH
+16C8 RUNIC LETTER PERTHO PEORTH P
+16C9 RUNIC LETTER ALGIZ EOLHX
+16CA RUNIC LETTER SOWILO S
+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+16CC RUNIC LETTER SHORT-TWIG-SOL S
+16CD RUNIC LETTER C
+16CE RUNIC LETTER Z
+16CF RUNIC LETTER TIWAZ TIR TYR T
+16D0 RUNIC LETTER SHORT-TWIG-TYR T
+16D1 RUNIC LETTER D
+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
+16D4 RUNIC LETTER DOTTED-P
+16D5 RUNIC LETTER OPEN-P
+16D6 RUNIC LETTER EHWAZ EH E
+16D7 RUNIC LETTER MANNAZ MAN M
+16D8 RUNIC LETTER LONG-BRANCH-MADR M
+16D9 RUNIC LETTER SHORT-TWIG-MADR M
+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
+16DB RUNIC LETTER DOTTED-L
+16DC RUNIC LETTER INGWAZ
+16DD RUNIC LETTER ING
+16DE RUNIC LETTER DAGAZ DAEG D
+16DF RUNIC LETTER OTHALAN ETHEL O
+16E0 RUNIC LETTER EAR
+16E1 RUNIC LETTER IOR
+16E2 RUNIC LETTER CWEORTH
+16E3 RUNIC LETTER CALC
+16E4 RUNIC LETTER CEALC
+16E5 RUNIC LETTER STAN
+16E6 RUNIC LETTER LONG-BRANCH-YR
+16E7 RUNIC LETTER SHORT-TWIG-YR
+16E8 RUNIC LETTER ICELANDIC-YR
+16E9 RUNIC LETTER Q
+16EA RUNIC LETTER X
+@ Punctuation
+16EB RUNIC SINGLE PUNCTUATION
+16EC RUNIC MULTIPLE PUNCTUATION
+16ED RUNIC CROSS PUNCTUATION
+@ Golden number runes
+16EE RUNIC ARLAUG SYMBOL (golden number 17)
+ * golden number 17
+16EF RUNIC TVIMADUR SYMBOL (golden number 18)
+ * golden number 18
+16F0 RUNIC BELGTHOR SYMBOL (golden number 19)
+ * golden number 19
+@@ 1700 Tagalog 171F
+@ Independent vowels
+1700 TAGALOG LETTER A
+1701 TAGALOG LETTER I
+1702 TAGALOG LETTER U
+@ Consonants
+1703 TAGALOG LETTER KA
+1704 TAGALOG LETTER GA
+1705 TAGALOG LETTER NGA
+1706 TAGALOG LETTER TA
+1707 TAGALOG LETTER DA
+1708 TAGALOG LETTER NA
+1709 TAGALOG LETTER PA
+170A TAGALOG LETTER BA
+170B TAGALOG LETTER MA
+170C TAGALOG LETTER YA
+170E TAGALOG LETTER LA
+170F TAGALOG LETTER WA
+1710 TAGALOG LETTER SA
+1711 TAGALOG LETTER HA
+@ Dependent vowel signs
+1712 TAGALOG VOWEL SIGN I
+1713 TAGALOG VOWEL SIGN U
+@ Virama
+1714 TAGALOG SIGN VIRAMA
+@@ 1720 Hanunoo 173F
+@ Independent vowels
+1720 HANUNOO LETTER A
+1721 HANUNOO LETTER I
+1722 HANUNOO LETTER U
+@ Consonants
+1723 HANUNOO LETTER KA
+1724 HANUNOO LETTER GA
+1725 HANUNOO LETTER NGA
+1726 HANUNOO LETTER TA
+1727 HANUNOO LETTER DA
+1728 HANUNOO LETTER NA
+1729 HANUNOO LETTER PA
+172A HANUNOO LETTER BA
+172B HANUNOO LETTER MA
+172C HANUNOO LETTER YA
+172D HANUNOO LETTER RA
+172E HANUNOO LETTER LA
+172F HANUNOO LETTER WA
+1730 HANUNOO LETTER SA
+1731 HANUNOO LETTER HA
+@ Dependent vowel signs
+1732 HANUNOO VOWEL SIGN I
+1733 HANUNOO VOWEL SIGN U
+@ Virama
+1734 HANUNOO SIGN PAMUDPOD
+@ Generic punctuation for Philippine scripts
+1735 PHILIPPINE SINGLE PUNCTUATION
+ x (devanagari danda - 0964)
+1736 PHILIPPINE DOUBLE PUNCTUATION
+ x (devanagari double danda - 0965)
+@@ 1740 Buhid 175F
+@ Independent vowels
+1740 BUHID LETTER A
+1741 BUHID LETTER I
+1742 BUHID LETTER U
+@ Consonants
+1743 BUHID LETTER KA
+1744 BUHID LETTER GA
+1745 BUHID LETTER NGA
+1746 BUHID LETTER TA
+1747 BUHID LETTER DA
+1748 BUHID LETTER NA
+1749 BUHID LETTER PA
+174A BUHID LETTER BA
+174B BUHID LETTER MA
+174C BUHID LETTER YA
+174D BUHID LETTER RA
+174E BUHID LETTER LA
+174F BUHID LETTER WA
+1750 BUHID LETTER SA
+1751 BUHID LETTER HA
+@ Dependent vowel signs
+1752 BUHID VOWEL SIGN I
+1753 BUHID VOWEL SIGN U
+@@ 1760 Tagbanwa 177F
+@ Independent vowels
+1760 TAGBANWA LETTER A
+1761 TAGBANWA LETTER I
+1762 TAGBANWA LETTER U
+@ Consonants
+1763 TAGBANWA LETTER KA
+1764 TAGBANWA LETTER GA
+1765 TAGBANWA LETTER NGA
+1766 TAGBANWA LETTER TA
+1767 TAGBANWA LETTER DA
+1768 TAGBANWA LETTER NA
+1769 TAGBANWA LETTER PA
+176A TAGBANWA LETTER BA
+176B TAGBANWA LETTER MA
+176C TAGBANWA LETTER YA
+176E TAGBANWA LETTER LA
+176F TAGBANWA LETTER WA
+1770 TAGBANWA LETTER SA
+@ Dependent vowel signs
+1772 TAGBANWA VOWEL SIGN I
+1773 TAGBANWA VOWEL SIGN U
+@@ 1780 Khmer 17FF
+@ Consonants
+1780 KHMER LETTER KA
+1781 KHMER LETTER KHA
+1782 KHMER LETTER KO
+1783 KHMER LETTER KHO
+1784 KHMER LETTER NGO
+1785 KHMER LETTER CA
+1786 KHMER LETTER CHA
+1787 KHMER LETTER CO
+1788 KHMER LETTER CHO
+1789 KHMER LETTER NYO
+178A KHMER LETTER DA
+178B KHMER LETTER TTHA
+178C KHMER LETTER DO
+178D KHMER LETTER TTHO
+178E KHMER LETTER NNO
+ * as this character belongs to the first register, its correct transliteration is nna, not nno
+178F KHMER LETTER TA
+1790 KHMER LETTER THA
+1791 KHMER LETTER TO
+1792 KHMER LETTER THO
+1793 KHMER LETTER NO
+1794 KHMER LETTER BA
+1795 KHMER LETTER PHA
+1796 KHMER LETTER PO
+1797 KHMER LETTER PHO
+1798 KHMER LETTER MO
+1799 KHMER LETTER YO
+179A KHMER LETTER RO
+179B KHMER LETTER LO
+179C KHMER LETTER VO
+179D KHMER LETTER SHA
+ * used only for Pali/Sanskrit transliteration
+179E KHMER LETTER SSO
+ * used only for Pali/Sanskrit transliteration
+ * as this character belongs to the first register, its correct transliteration is ssa, not sso
+179F KHMER LETTER SA
+17A0 KHMER LETTER HA
+17A1 KHMER LETTER LA
+17A2 KHMER LETTER QA
+ * glottal stop
+@ Independent vowel (deprecated)
+17A3 KHMER INDEPENDENT VOWEL QAQ *
+ * originally intended only for Pali/Sanskrit transliteration
+ * use of this character is strongly discouraged; 17A2 should be used instead
+@ Independent vowels
+17A4 KHMER INDEPENDENT VOWEL QAA *
+ * used only for Pali/Sanskrit transliteration
+ * use of this character is discouraged; the sequence 17A2 17B6 should be used instead
+17A5 KHMER INDEPENDENT VOWEL QI
+17A6 KHMER INDEPENDENT VOWEL QII
+17A7 KHMER INDEPENDENT VOWEL QU
+17A8 KHMER INDEPENDENT VOWEL QUK
+ * obsolete ligature for the sequence 17A7 1780
+ * use of the sequence is now preferred
+17A9 KHMER INDEPENDENT VOWEL QUU
+17AA KHMER INDEPENDENT VOWEL QUUV
+17AB KHMER INDEPENDENT VOWEL RY
+17AC KHMER INDEPENDENT VOWEL RYY
+17AD KHMER INDEPENDENT VOWEL LY
+17AE KHMER INDEPENDENT VOWEL LYY
+17AF KHMER INDEPENDENT VOWEL QE
+17B0 KHMER INDEPENDENT VOWEL QAI
+17B1 KHMER INDEPENDENT VOWEL QOO TYPE ONE
+17B2 KHMER INDEPENDENT VOWEL QOO TYPE TWO
+ * this is a variant for 17B1, used in only two words
+ * 17B1 is the normal variant of this vowel
+17B3 KHMER INDEPENDENT VOWEL QAU
+@ Inherent vowels
+@+ These are for phonetic transcription to distinguish Indic language inherent vowels from Khmer inherent vowels. These characters are included solely for compatibility with particular applications; their use in other contexts is discouraged.
+17B4 KHMER VOWEL INHERENT AQ *
+17B5 KHMER VOWEL INHERENT AA *
+@ Dependent vowel signs
+17B6 KHMER VOWEL SIGN AA
+17B7 KHMER VOWEL SIGN I
+17B8 KHMER VOWEL SIGN II
+17B9 KHMER VOWEL SIGN Y
+17BA KHMER VOWEL SIGN YY
+17BB KHMER VOWEL SIGN U
+17BC KHMER VOWEL SIGN UU
+17BD KHMER VOWEL SIGN UA
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for processing.
+17BE KHMER VOWEL SIGN OE
+17BF KHMER VOWEL SIGN YA
+17C0 KHMER VOWEL SIGN IE
+@ Dependent vowel signs
+17C1 KHMER VOWEL SIGN E
+17C2 KHMER VOWEL SIGN AE
+17C3 KHMER VOWEL SIGN AI
+@ Two-part dependent vowel signs
+@+ These two-part dependent vowel signs have glyph pieces which stand on both sides of the consonant. These vowel signs follow the consonant in logical order, and should be handled as a unit for processing.
+17C4 KHMER VOWEL SIGN OO
+17C5 KHMER VOWEL SIGN AU
+@ Various signs
+17C6 KHMER SIGN NIKAHIT
+ = srak am
+ = anusvara
+ * final nasalization
+ * this character is usually regarded as a vowel sign am, along with om and aam
+ x (thai character nikhahit - 0E4D)
+ x (myanmar sign anusvara - 1036)
+17C7 KHMER SIGN REAHMUK
+ = srak ah
+ = visarga
+ x (myanmar sign visarga - 1038)
+17C8 KHMER SIGN YUUKALEAPINTU
+ * inserts a short inherent vowel with abrupt glottal stop
+ * the preferred transliteration is yukaleakpintu
+@ Consonant shifters
+@+ These signs shift the base consonant between registers.
+17C9 KHMER SIGN MUUSIKATOAN
+ * changes the second register to the first
+ * the preferred transliteration is muusekatoan
+17CA KHMER SIGN TRIISAP
+ * changes the first register to the second
+ * the preferred transliteration is treisap
+@ Various signs
+17CB KHMER SIGN BANTOC
+ * shortens the vowel sound in the previous orthographic syllable
+ * the preferred transliteration is bantak
+17CC KHMER SIGN ROBAT
+ * a diacritic historically corresponding to the repha form of ra in Devanagari
+17CD KHMER SIGN TOANDAKHIAT
+ * indicates that the base character is not pronounced
+17CE KHMER SIGN KAKABAT
+ * sign used with some exclamations
+17CF KHMER SIGN AHSDA
+ * denotes stressed intonation in some single-consonant words
+17D0 KHMER SIGN SAMYOK SANNYA
+ * denotes deviation from the general rules of pronunciation, mostly used in loan words from Pali/Sanskrit, French, and so on
+17D1 KHMER SIGN VIRIAM
+ * mostly obsolete, a "killer"
+ * indicates that the base character is the final consonant of a word without its inherent vowel sound
+17D2 KHMER SIGN COENG
+ * functions to indicate that the following Khmer letter is to be rendered subscripted
+ * shape shown is arbitrary and is not visibly rendered
+@ Lunar date sign (deprecated)
+17D3 KHMER SIGN BATHAMASAT *
+ * originally intended as part of lunar date symbols
+ * use of this character is strongly discouraged in favor of the complete set of lunar date symbols
+ x (khmer symbol pathamasat - 19E0)
+@ Various signs
+17D4 KHMER SIGN KHAN
+ * functions as a full stop, period
+ x (thai character paiyannoi - 0E2F)
+ x (myanmar sign little section - 104A)
+17D5 KHMER SIGN BARIYOOSAN
+ * indicates the end of a section or a text
+ x (thai character angkhankhu - 0E5A)
+ x (myanmar sign section - 104B)
+17D6 KHMER SIGN CAMNUC PII KUUH
+ * functions as colon
+ * the preferred transliteration is camnoc pii kuuh
+ x (division sign - 00F7)
+ x (tibetan mark gter tsheg - 0F14)
+17D7 KHMER SIGN LEK TOO
+ * repetition sign
+ x (thai character maiyamok - 0E46)
+17D8 KHMER SIGN BEYYAL *
+ * et cetera
+ * use of this character is discouraged; other abbreviations for et cetera also exist
+ * preferred spelling: 17D4 179B 17D4
+17D9 KHMER SIGN PHNAEK MUAN
+ * indicates the beginning of a book or a treatise
+ * the preferred transliteration is phnek moan
+ x (thai character fongman - 0E4F)
+17DA KHMER SIGN KOOMUUT
+ * indicates the end of a book or treatise
+ * this forms a pair with 17D9
+ * the preferred transliteration is koomoot
+ x (thai character khomut - 0E5B)
+@ Currency symbol
+17DB KHMER CURRENCY SYMBOL RIEL
+@ Various signs
+17DC KHMER SIGN AVAKRAHASANYA
+ * rare, shows an omitted Sanskrit vowel, like an apostrophe
+ * the preferred transliteration is avakraha sannya
+ x (devanagari sign avagraha - 093D)
+17DD KHMER SIGN ATTHACAN
+ * mostly obsolete
+ * indicates that the base character is the final consonant of a word with its inherent vowel sound
+ x (khmer sign viriam - 17D1)
+@ Digits
+17E0 KHMER DIGIT ZERO
+17E1 KHMER DIGIT ONE
+17E2 KHMER DIGIT TWO
+17E3 KHMER DIGIT THREE
+17E4 KHMER DIGIT FOUR
+17E5 KHMER DIGIT FIVE
+17E6 KHMER DIGIT SIX
+17E7 KHMER DIGIT SEVEN
+17E8 KHMER DIGIT EIGHT
+17E9 KHMER DIGIT NINE
+@ Numeric symbols for divination lore
+@+ These characters have numeric values 0-9, respectively, but are not used for calculation.
+17F0 KHMER SYMBOL LEK ATTAK SON
+17F1 KHMER SYMBOL LEK ATTAK MUOY
+17F2 KHMER SYMBOL LEK ATTAK PII
+17F3 KHMER SYMBOL LEK ATTAK BEI
+17F4 KHMER SYMBOL LEK ATTAK BUON
+17F5 KHMER SYMBOL LEK ATTAK PRAM
+17F6 KHMER SYMBOL LEK ATTAK PRAM-MUOY
+17F7 KHMER SYMBOL LEK ATTAK PRAM-PII
+17F8 KHMER SYMBOL LEK ATTAK PRAM-BEI
+17F9 KHMER SYMBOL LEK ATTAK PRAM-BUON
+@@ 1800 Mongolian 18AF
+@ Punctuation
+1800 MONGOLIAN BIRGA
+ x (tibetan mark initial yig mgo mdun ma - 0F04)
+1801 MONGOLIAN ELLIPSIS
+1802 MONGOLIAN COMMA
+1803 MONGOLIAN FULL STOP
+1804 MONGOLIAN COLON
+1805 MONGOLIAN FOUR DOTS
+ * marks the end of a chapter
+1806 MONGOLIAN TODO SOFT HYPHEN
+ * not a format control character, but simply a hyphen for Todo
+ x (soft hyphen - 00AD)
+1807 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+1808 MONGOLIAN MANCHU COMMA
+1809 MONGOLIAN MANCHU FULL STOP
+180A MONGOLIAN NIRUGU
+@ Format controls
+180B MONGOLIAN FREE VARIATION SELECTOR ONE
+ = FVS1
+180C MONGOLIAN FREE VARIATION SELECTOR TWO
+ = FVS2
+180D MONGOLIAN FREE VARIATION SELECTOR THREE
+ = FVS3
+180E MONGOLIAN VOWEL SEPARATOR
+ = MVS
+@ Digits
+1810 MONGOLIAN DIGIT ZERO
+1811 MONGOLIAN DIGIT ONE
+1812 MONGOLIAN DIGIT TWO
+1813 MONGOLIAN DIGIT THREE
+1814 MONGOLIAN DIGIT FOUR
+1815 MONGOLIAN DIGIT FIVE
+1816 MONGOLIAN DIGIT SIX
+1817 MONGOLIAN DIGIT SEVEN
+1818 MONGOLIAN DIGIT EIGHT
+1819 MONGOLIAN DIGIT NINE
+@ Basic letters
+1820 MONGOLIAN LETTER A
+ x (cyrillic small letter a - 0430)
+1821 MONGOLIAN LETTER E
+ x (cyrillic small letter e - 044D)
+1822 MONGOLIAN LETTER I
+ x (cyrillic small letter i - 0438)
+1823 MONGOLIAN LETTER O
+ x (cyrillic small letter o - 043E)
+1824 MONGOLIAN LETTER U
+ x (cyrillic small letter u - 0443)
+1825 MONGOLIAN LETTER OE
+ x (cyrillic small letter barred o - 04E9)
+1826 MONGOLIAN LETTER UE
+ x (cyrillic small letter straight u - 04AF)
+1827 MONGOLIAN LETTER EE
+1828 MONGOLIAN LETTER NA
+ x (cyrillic small letter en - 043D)
+1829 MONGOLIAN LETTER ANG
+182A MONGOLIAN LETTER BA
+ x (cyrillic small letter be - 0431)
+182B MONGOLIAN LETTER PA
+ x (cyrillic small letter pe - 043F)
+182C MONGOLIAN LETTER QA
+ x (cyrillic small letter ha - 0445)
+182D MONGOLIAN LETTER GA
+ x (cyrillic small letter ghe - 0433)
+182E MONGOLIAN LETTER MA
+ x (cyrillic small letter em - 043C)
+182F MONGOLIAN LETTER LA
+ x (cyrillic small letter el - 043B)
+1830 MONGOLIAN LETTER SA
+ x (cyrillic small letter es - 0441)
+1831 MONGOLIAN LETTER SHA
+ x (cyrillic small letter sha - 0448)
+1832 MONGOLIAN LETTER TA
+ x (cyrillic small letter te - 0442)
+1833 MONGOLIAN LETTER DA
+ x (cyrillic small letter de - 0434)
+1834 MONGOLIAN LETTER CHA
+ x (cyrillic small letter che - 0447)
+1835 MONGOLIAN LETTER JA
+ x (cyrillic small letter zhe - 0436)
+1836 MONGOLIAN LETTER YA
+ x (cyrillic small letter short i - 0439)
+1837 MONGOLIAN LETTER RA
+ x (cyrillic small letter er - 0440)
+1838 MONGOLIAN LETTER WA
+ x (cyrillic small letter ve - 0432)
+1839 MONGOLIAN LETTER FA
+ x (cyrillic small letter ef - 0444)
+183A MONGOLIAN LETTER KA
+ x (cyrillic small letter ha - 0445)
+183B MONGOLIAN LETTER KHA
+ x (cyrillic small letter ka - 043A)
+183C MONGOLIAN LETTER TSA
+ x (cyrillic small letter tse - 0446)
+183D MONGOLIAN LETTER ZA
+ x (cyrillic small letter ze - 0437)
+183E MONGOLIAN LETTER HAA
+ x (cyrillic small letter ha - 0445)
+183F MONGOLIAN LETTER ZRA
+ x (cyrillic small letter zhe - 0436)
+1840 MONGOLIAN LETTER LHA
+1841 MONGOLIAN LETTER ZHI
+1842 MONGOLIAN LETTER CHI
+@ Todo letters
+1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844 MONGOLIAN LETTER TODO E
+1845 MONGOLIAN LETTER TODO I
+1846 MONGOLIAN LETTER TODO O
+1847 MONGOLIAN LETTER TODO U
+1848 MONGOLIAN LETTER TODO OE
+1849 MONGOLIAN LETTER TODO UE
+184A MONGOLIAN LETTER TODO ANG
+184B MONGOLIAN LETTER TODO BA
+184C MONGOLIAN LETTER TODO PA
+184D MONGOLIAN LETTER TODO QA
+184E MONGOLIAN LETTER TODO GA
+184F MONGOLIAN LETTER TODO MA
+1850 MONGOLIAN LETTER TODO TA
+1851 MONGOLIAN LETTER TODO DA
+1852 MONGOLIAN LETTER TODO CHA
+1853 MONGOLIAN LETTER TODO JA
+1854 MONGOLIAN LETTER TODO TSA
+1855 MONGOLIAN LETTER TODO YA
+1856 MONGOLIAN LETTER TODO WA
+1857 MONGOLIAN LETTER TODO KA
+1858 MONGOLIAN LETTER TODO GAA
+1859 MONGOLIAN LETTER TODO HAA
+185A MONGOLIAN LETTER TODO JIA
+185B MONGOLIAN LETTER TODO NIA
+185C MONGOLIAN LETTER TODO DZA
+@ Sibe letters
+185D MONGOLIAN LETTER SIBE E
+185E MONGOLIAN LETTER SIBE I
+185F MONGOLIAN LETTER SIBE IY
+1860 MONGOLIAN LETTER SIBE UE
+1861 MONGOLIAN LETTER SIBE U
+1862 MONGOLIAN LETTER SIBE ANG
+1863 MONGOLIAN LETTER SIBE KA
+1864 MONGOLIAN LETTER SIBE GA
+1865 MONGOLIAN LETTER SIBE HA
+1866 MONGOLIAN LETTER SIBE PA
+1867 MONGOLIAN LETTER SIBE SHA
+1868 MONGOLIAN LETTER SIBE TA
+1869 MONGOLIAN LETTER SIBE DA
+186A MONGOLIAN LETTER SIBE JA
+186B MONGOLIAN LETTER SIBE FA
+186C MONGOLIAN LETTER SIBE GAA
+186D MONGOLIAN LETTER SIBE HAA
+186E MONGOLIAN LETTER SIBE TSA
+186F MONGOLIAN LETTER SIBE ZA
+1870 MONGOLIAN LETTER SIBE RAA
+1871 MONGOLIAN LETTER SIBE CHA
+1872 MONGOLIAN LETTER SIBE ZHA
+@ Manchu letters
+1873 MONGOLIAN LETTER MANCHU I
+1874 MONGOLIAN LETTER MANCHU KA
+1875 MONGOLIAN LETTER MANCHU RA
+1876 MONGOLIAN LETTER MANCHU FA
+1877 MONGOLIAN LETTER MANCHU ZHA
+@ Extensions for Sanskrit and Tibetan
+1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+ x (tibetan sign sna ldan - 0F83)
+1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
+ x (tibetan sign rnam bcad - 0F7F)
+1882 MONGOLIAN LETTER ALI GALI DAMARU
+ x (tibetan sign lce tsa can - 0F88)
+1883 MONGOLIAN LETTER ALI GALI UBADAMA
+1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885 MONGOLIAN LETTER ALI GALI BALUDA
+ x (tibetan mark paluta - 0F85)
+1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887 MONGOLIAN LETTER ALI GALI A
+1888 MONGOLIAN LETTER ALI GALI I
+1889 MONGOLIAN LETTER ALI GALI KA
+188A MONGOLIAN LETTER ALI GALI NGA
+188B MONGOLIAN LETTER ALI GALI CA
+188C MONGOLIAN LETTER ALI GALI TTA
+188D MONGOLIAN LETTER ALI GALI TTHA
+188E MONGOLIAN LETTER ALI GALI DDA
+188F MONGOLIAN LETTER ALI GALI NNA
+1890 MONGOLIAN LETTER ALI GALI TA
+1891 MONGOLIAN LETTER ALI GALI DA
+1892 MONGOLIAN LETTER ALI GALI PA
+1893 MONGOLIAN LETTER ALI GALI PHA
+1894 MONGOLIAN LETTER ALI GALI SSA
+1895 MONGOLIAN LETTER ALI GALI ZHA
+1896 MONGOLIAN LETTER ALI GALI ZA
+1897 MONGOLIAN LETTER ALI GALI AH
+1898 MONGOLIAN LETTER TODO ALI GALI TA
+1899 MONGOLIAN LETTER TODO ALI GALI ZHA
+189A MONGOLIAN LETTER MANCHU ALI GALI GHA
+189B MONGOLIAN LETTER MANCHU ALI GALI NGA
+189C MONGOLIAN LETTER MANCHU ALI GALI CA
+189D MONGOLIAN LETTER MANCHU ALI GALI JHA
+189E MONGOLIAN LETTER MANCHU ALI GALI TTA
+189F MONGOLIAN LETTER MANCHU ALI GALI DDHA
+18A0 MONGOLIAN LETTER MANCHU ALI GALI TA
+18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA
+18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA
+18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA
+18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
+18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA
+18A6 MONGOLIAN LETTER ALI GALI HALF U
+18A7 MONGOLIAN LETTER ALI GALI HALF YA
+18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 MONGOLIAN LETTER ALI GALI DAGALGA
+@@ 1900 Limbu 194F
+@ Consonants
+1900 LIMBU VOWEL-CARRIER LETTER
+1901 LIMBU LETTER KA
+1902 LIMBU LETTER KHA
+1903 LIMBU LETTER GA
+1904 LIMBU LETTER GHA
+1905 LIMBU LETTER NGA
+1906 LIMBU LETTER CA
+1907 LIMBU LETTER CHA
+1908 LIMBU LETTER JA
+1909 LIMBU LETTER JHA
+190A LIMBU LETTER YAN
+190B LIMBU LETTER TA
+190C LIMBU LETTER THA
+190D LIMBU LETTER DA
+190E LIMBU LETTER DHA
+190F LIMBU LETTER NA
+1910 LIMBU LETTER PA
+1911 LIMBU LETTER PHA
+1912 LIMBU LETTER BA
+1913 LIMBU LETTER BHA
+1914 LIMBU LETTER MA
+1915 LIMBU LETTER YA
+1916 LIMBU LETTER RA
+1917 LIMBU LETTER LA
+1918 LIMBU LETTER WA
+1919 LIMBU LETTER SHA
+191A LIMBU LETTER SSA
+191B LIMBU LETTER SA
+191C LIMBU LETTER HA
+@ Dependent vowel signs
+1920 LIMBU VOWEL SIGN A
+1921 LIMBU VOWEL SIGN I
+1922 LIMBU VOWEL SIGN U
+1923 LIMBU VOWEL SIGN EE
+1924 LIMBU VOWEL SIGN AI
+1925 LIMBU VOWEL SIGN OO
+1926 LIMBU VOWEL SIGN AU
+1927 LIMBU VOWEL SIGN E
+1928 LIMBU VOWEL SIGN O
+@ Subjoined consonants
+1929 LIMBU SUBJOINED LETTER YA
+192A LIMBU SUBJOINED LETTER RA
+192B LIMBU SUBJOINED LETTER WA
+@ Final consonants
+1930 LIMBU SMALL LETTER KA
+1931 LIMBU SMALL LETTER NGA
+1932 LIMBU SMALL LETTER ANUSVARA
+1933 LIMBU SMALL LETTER TA
+1934 LIMBU SMALL LETTER NA
+1935 LIMBU SMALL LETTER PA
+1936 LIMBU SMALL LETTER MA
+1937 LIMBU SMALL LETTER RA
+1938 LIMBU SMALL LETTER LA
+@ Various signs
+1939 LIMBU SIGN MUKPHRENG
+193A LIMBU SIGN KEMPHRENG
+193B LIMBU SIGN SA-I
+1940 LIMBU SIGN LOO
+1944 LIMBU EXCLAMATION MARK
+1945 LIMBU QUESTION MARK
+@ Digits
+1946 LIMBU DIGIT ZERO
+1947 LIMBU DIGIT ONE
+1948 LIMBU DIGIT TWO
+1949 LIMBU DIGIT THREE
+194A LIMBU DIGIT FOUR
+194B LIMBU DIGIT FIVE
+194C LIMBU DIGIT SIX
+194D LIMBU DIGIT SEVEN
+194E LIMBU DIGIT EIGHT
+194F LIMBU DIGIT NINE
+@@ 1950 Tai Le 197F
+@ Consonants
+1950 TAI LE LETTER KA
+1951 TAI LE LETTER XA
+1952 TAI LE LETTER NGA
+1953 TAI LE LETTER TSA
+1954 TAI LE LETTER SA
+1955 TAI LE LETTER YA
+1956 TAI LE LETTER TA
+1957 TAI LE LETTER THA
+1958 TAI LE LETTER LA
+1959 TAI LE LETTER PA
+195A TAI LE LETTER PHA
+195B TAI LE LETTER MA
+195C TAI LE LETTER FA
+195D TAI LE LETTER VA
+195E TAI LE LETTER HA
+195F TAI LE LETTER QA
+1960 TAI LE LETTER KHA
+1961 TAI LE LETTER TSHA
+1962 TAI LE LETTER NA
+@ Vowels
+1963 TAI LE LETTER A
+1964 TAI LE LETTER I
+1965 TAI LE LETTER EE
+1966 TAI LE LETTER EH
+1967 TAI LE LETTER U
+1968 TAI LE LETTER OO
+1969 TAI LE LETTER O
+196A TAI LE LETTER UE
+196B TAI LE LETTER E
+196C TAI LE LETTER AUE
+196D TAI LE LETTER AI
+@ Tone letters
+1970 TAI LE LETTER TONE-2
+1971 TAI LE LETTER TONE-3
+1972 TAI LE LETTER TONE-4
+1973 TAI LE LETTER TONE-5
+1974 TAI LE LETTER TONE-6
+@@ 1980 New Tai Lue 19DF
+@+ This script is also known as Xishuang Banna Dai.
+@ Consonants
+1980 NEW TAI LUE LETTER HIGH QA
+1981 NEW TAI LUE LETTER LOW QA
+1982 NEW TAI LUE LETTER HIGH KA
+1983 NEW TAI LUE LETTER HIGH XA
+1984 NEW TAI LUE LETTER HIGH NGA
+1985 NEW TAI LUE LETTER LOW KA
+1986 NEW TAI LUE LETTER LOW XA
+1987 NEW TAI LUE LETTER LOW NGA
+1988 NEW TAI LUE LETTER HIGH TSA
+1989 NEW TAI LUE LETTER HIGH SA
+198A NEW TAI LUE LETTER HIGH YA
+198B NEW TAI LUE LETTER LOW TSA
+198C NEW TAI LUE LETTER LOW SA
+198D NEW TAI LUE LETTER LOW YA
+198E NEW TAI LUE LETTER HIGH TA
+198F NEW TAI LUE LETTER HIGH THA
+1990 NEW TAI LUE LETTER HIGH NA
+1991 NEW TAI LUE LETTER LOW TA
+1992 NEW TAI LUE LETTER LOW THA
+1993 NEW TAI LUE LETTER LOW NA
+1994 NEW TAI LUE LETTER HIGH PA
+1995 NEW TAI LUE LETTER HIGH PHA
+1996 NEW TAI LUE LETTER HIGH MA
+1997 NEW TAI LUE LETTER LOW PA
+1998 NEW TAI LUE LETTER LOW PHA
+1999 NEW TAI LUE LETTER LOW MA
+199A NEW TAI LUE LETTER HIGH FA
+199B NEW TAI LUE LETTER HIGH VA
+199C NEW TAI LUE LETTER HIGH LA
+199D NEW TAI LUE LETTER LOW FA
+199E NEW TAI LUE LETTER LOW VA
+199F NEW TAI LUE LETTER LOW LA
+19A0 NEW TAI LUE LETTER HIGH HA
+19A1 NEW TAI LUE LETTER HIGH DA
+19A2 NEW TAI LUE LETTER HIGH BA
+19A3 NEW TAI LUE LETTER LOW HA
+19A4 NEW TAI LUE LETTER LOW DA
+19A5 NEW TAI LUE LETTER LOW BA
+19A6 NEW TAI LUE LETTER HIGH KVA
+19A7 NEW TAI LUE LETTER HIGH XVA
+19A8 NEW TAI LUE LETTER LOW KVA
+19A9 NEW TAI LUE LETTER LOW XVA
+@ Vowel signs
+19B0 NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+19B1 NEW TAI LUE VOWEL SIGN AA
+19B2 NEW TAI LUE VOWEL SIGN II
+19B3 NEW TAI LUE VOWEL SIGN U
+19B4 NEW TAI LUE VOWEL SIGN UU
+19B5 NEW TAI LUE VOWEL SIGN E
+19B6 NEW TAI LUE VOWEL SIGN AE
+19B7 NEW TAI LUE VOWEL SIGN O
+19B8 NEW TAI LUE VOWEL SIGN OA
+19B9 NEW TAI LUE VOWEL SIGN UE
+19BA NEW TAI LUE VOWEL SIGN AY
+19BB NEW TAI LUE VOWEL SIGN AAY
+19BC NEW TAI LUE VOWEL SIGN UY
+19BD NEW TAI LUE VOWEL SIGN OY
+19BE NEW TAI LUE VOWEL SIGN OAY
+19BF NEW TAI LUE VOWEL SIGN UEY
+19C0 NEW TAI LUE VOWEL SIGN IY
+@ Final consonants
+19C1 NEW TAI LUE LETTER FINAL V
+19C2 NEW TAI LUE LETTER FINAL NG
+19C3 NEW TAI LUE LETTER FINAL N
+19C4 NEW TAI LUE LETTER FINAL M
+19C5 NEW TAI LUE LETTER FINAL K
+19C6 NEW TAI LUE LETTER FINAL D
+19C7 NEW TAI LUE LETTER FINAL B
+@ Tone marks
+19C8 NEW TAI LUE TONE MARK-1
+19C9 NEW TAI LUE TONE MARK-2
+@ Digits
+19D0 NEW TAI LUE DIGIT ZERO
+19D1 NEW TAI LUE DIGIT ONE
+19D2 NEW TAI LUE DIGIT TWO
+19D3 NEW TAI LUE DIGIT THREE
+19D4 NEW TAI LUE DIGIT FOUR
+19D5 NEW TAI LUE DIGIT FIVE
+19D6 NEW TAI LUE DIGIT SIX
+19D7 NEW TAI LUE DIGIT SEVEN
+19D8 NEW TAI LUE DIGIT EIGHT
+19D9 NEW TAI LUE DIGIT NINE
+@ Various signs
+19DE NEW TAI LUE SIGN LAE
+ * conjunction: and
+19DF NEW TAI LUE SIGN LAEV
+ * perfective
+@@ 19E0 Khmer Symbols 19FF
+@ Lunar date symbols
+19E0 KHMER SYMBOL PATHAMASAT
+ * represents the first August in a leap year
+@+ The following fifteen characters represent the first through the fifteenth waxing days, respectively.
+19E1 KHMER SYMBOL MUOY KOET
+19E2 KHMER SYMBOL PII KOET
+19E3 KHMER SYMBOL BEI KOET
+19E4 KHMER SYMBOL BUON KOET
+19E5 KHMER SYMBOL PRAM KOET
+19E6 KHMER SYMBOL PRAM-MUOY KOET
+19E7 KHMER SYMBOL PRAM-PII KOET
+19E8 KHMER SYMBOL PRAM-BEI KOET
+19E9 KHMER SYMBOL PRAM-BUON KOET
+19EA KHMER SYMBOL DAP KOET
+19EB KHMER SYMBOL DAP-MUOY KOET
+19EC KHMER SYMBOL DAP-PII KOET
+19ED KHMER SYMBOL DAP-BEI KOET
+19EE KHMER SYMBOL DAP-BUON KOET
+19EF KHMER SYMBOL DAP-PRAM KOET
+19F0 KHMER SYMBOL TUTEYASAT
+ * represents the second August in a leap year
+@+ The following fifteen characters represent the first through the fifteenth waning days, respectively.
+19F1 KHMER SYMBOL MUOY ROC
+19F2 KHMER SYMBOL PII ROC
+19F3 KHMER SYMBOL BEI ROC
+19F4 KHMER SYMBOL BUON ROC
+19F5 KHMER SYMBOL PRAM ROC
+19F6 KHMER SYMBOL PRAM-MUOY ROC
+19F7 KHMER SYMBOL PRAM-PII ROC
+19F8 KHMER SYMBOL PRAM-BEI ROC
+19F9 KHMER SYMBOL PRAM-BUON ROC
+19FA KHMER SYMBOL DAP ROC
+19FB KHMER SYMBOL DAP-MUOY ROC
+19FC KHMER SYMBOL DAP-PII ROC
+19FD KHMER SYMBOL DAP-BEI ROC
+19FE KHMER SYMBOL DAP-BUON ROC
+19FF KHMER SYMBOL DAP-PRAM ROC
+@@ 1A00 Buginese 1A1F
+@+ This script is also known as Lontara.
+@ Consonants
+1A00 BUGINESE LETTER KA
+1A01 BUGINESE LETTER GA
+1A02 BUGINESE LETTER NGA
+1A03 BUGINESE LETTER NGKA
+1A04 BUGINESE LETTER PA
+1A05 BUGINESE LETTER BA
+1A06 BUGINESE LETTER MA
+1A07 BUGINESE LETTER MPA
+1A08 BUGINESE LETTER TA
+1A09 BUGINESE LETTER DA
+1A0A BUGINESE LETTER NA
+1A0B BUGINESE LETTER NRA
+1A0C BUGINESE LETTER CA
+1A0D BUGINESE LETTER JA
+1A0E BUGINESE LETTER NYA
+1A0F BUGINESE LETTER NYCA
+1A10 BUGINESE LETTER YA
+1A11 BUGINESE LETTER RA
+1A12 BUGINESE LETTER LA
+1A13 BUGINESE LETTER VA
+1A14 BUGINESE LETTER SA
+1A15 BUGINESE LETTER A
+1A16 BUGINESE LETTER HA
+@ Vowels
+1A17 BUGINESE VOWEL SIGN I
+1A18 BUGINESE VOWEL SIGN U
+1A19 BUGINESE VOWEL SIGN E
+1A1A BUGINESE VOWEL SIGN O
+1A1B BUGINESE VOWEL SIGN AE
+@ Various signs
+1A1E BUGINESE PALLAWA
+1A1F BUGINESE END OF SECTION
+@@ 1D00 Phonetic Extensions 1D7F
+@+ These are non-IPA phonetic extensions, mostly for the Uralic Phonetic Alphabet (UPA).
+@+ The small capitals, superscript, and subscript forms are for phonetic representations where style variations are semantically important.
+@+ For general text, use regular Latin, Greek or Cyrillic letters with markup instead.
+@ Latin letters
+1D00 LATIN LETTER SMALL CAPITAL A
+1D01 LATIN LETTER SMALL CAPITAL AE
+1D02 LATIN SMALL LETTER TURNED AE
+ * glyph can also have sideways orientation
+1D03 LATIN LETTER SMALL CAPITAL BARRED B
+1D04 LATIN LETTER SMALL CAPITAL C
+1D05 LATIN LETTER SMALL CAPITAL D
+1D06 LATIN LETTER SMALL CAPITAL ETH
+1D07 LATIN LETTER SMALL CAPITAL E
+1D08 LATIN SMALL LETTER TURNED OPEN E
+1D09 LATIN SMALL LETTER TURNED I
+1D0A LATIN LETTER SMALL CAPITAL J
+1D0B LATIN LETTER SMALL CAPITAL K
+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE
+1D0D LATIN LETTER SMALL CAPITAL M
+1D0E LATIN LETTER SMALL CAPITAL REVERSED N
+1D0F LATIN LETTER SMALL CAPITAL O
+1D10 LATIN LETTER SMALL CAPITAL OPEN O
+1D11 LATIN SMALL LETTER SIDEWAYS O
+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O
+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+1D14 LATIN SMALL LETTER TURNED OE
+ * glyph can also have sideways orientation
+1D15 LATIN LETTER SMALL CAPITAL OU
+1D16 LATIN SMALL LETTER TOP HALF O
+1D17 LATIN SMALL LETTER BOTTOM HALF O
+1D18 LATIN LETTER SMALL CAPITAL P
+ * represents a semi-voiced [p]
+1D19 LATIN LETTER SMALL CAPITAL REVERSED R
+1D1A LATIN LETTER SMALL CAPITAL TURNED R
+1D1B LATIN LETTER SMALL CAPITAL T
+1D1C LATIN LETTER SMALL CAPITAL U
+1D1D LATIN SMALL LETTER SIDEWAYS U
+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+ * glyph can also have turned orientation
+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M
+1D20 LATIN LETTER SMALL CAPITAL V
+1D21 LATIN LETTER SMALL CAPITAL W
+1D22 LATIN LETTER SMALL CAPITAL Z
+1D23 LATIN LETTER SMALL CAPITAL EZH
+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT
+1D25 LATIN LETTER AIN
+@ Greek letters
+1D26 GREEK LETTER SMALL CAPITAL GAMMA
+1D27 GREEK LETTER SMALL CAPITAL LAMDA
+1D28 GREEK LETTER SMALL CAPITAL PI
+1D29 GREEK LETTER SMALL CAPITAL RHO
+ * represents a voiceless uvular trill
+1D2A GREEK LETTER SMALL CAPITAL PSI
+@ Cyrillic letter
+1D2B CYRILLIC LETTER SMALL CAPITAL EL
+ * in italic style, the glyph is obliqued, not italicized
+ x (cyrillic small letter el - 043B)
+@ Latin superscript modifier letters
+1D2C MODIFIER LETTER CAPITAL A
+ # <super> 0041
+1D2D MODIFIER LETTER CAPITAL AE
+ # <super> 00C6
+1D2E MODIFIER LETTER CAPITAL B
+ # <super> 0042
+1D2F MODIFIER LETTER CAPITAL BARRED B
+1D30 MODIFIER LETTER CAPITAL D
+ # <super> 0044
+1D31 MODIFIER LETTER CAPITAL E
+ # <super> 0045
+1D32 MODIFIER LETTER CAPITAL REVERSED E
+ # <super> 018E
+1D33 MODIFIER LETTER CAPITAL G
+ # <super> 0047
+1D34 MODIFIER LETTER CAPITAL H
+ # <super> 0048
+1D35 MODIFIER LETTER CAPITAL I
+ # <super> 0049
+1D36 MODIFIER LETTER CAPITAL J
+ # <super> 004A
+1D37 MODIFIER LETTER CAPITAL K
+ # <super> 004B
+1D38 MODIFIER LETTER CAPITAL L
+ # <super> 004C
+1D39 MODIFIER LETTER CAPITAL M
+ # <super> 004D
+1D3A MODIFIER LETTER CAPITAL N
+ # <super> 004E
+1D3B MODIFIER LETTER CAPITAL REVERSED N
+1D3C MODIFIER LETTER CAPITAL O
+ # <super> 004F
+1D3D MODIFIER LETTER CAPITAL OU
+ # <super> 0222
+1D3E MODIFIER LETTER CAPITAL P
+ # <super> 0050
+1D3F MODIFIER LETTER CAPITAL R
+ # <super> 0052
+1D40 MODIFIER LETTER CAPITAL T
+ # <super> 0054
+1D41 MODIFIER LETTER CAPITAL U
+ # <super> 0055
+1D42 MODIFIER LETTER CAPITAL W
+ # <super> 0057
+1D43 MODIFIER LETTER SMALL A
+ # <super> 0061
+1D44 MODIFIER LETTER SMALL TURNED A
+ # <super> 0250
+1D45 MODIFIER LETTER SMALL ALPHA
+ # <super> 0251
+1D46 MODIFIER LETTER SMALL TURNED AE
+ # <super> 1D02
+1D47 MODIFIER LETTER SMALL B
+ # <super> 0062
+1D48 MODIFIER LETTER SMALL D
+ # <super> 0064
+1D49 MODIFIER LETTER SMALL E
+ # <super> 0065
+1D4A MODIFIER LETTER SMALL SCHWA
+ # <super> 0259
+1D4B MODIFIER LETTER SMALL OPEN E
+ # <super> 025B
+1D4C MODIFIER LETTER SMALL TURNED OPEN E
+ * more appropriate equivalence would be to 1D08
+ # <super> 025C
+1D4D MODIFIER LETTER SMALL G
+ # <super> 0067
+1D4E MODIFIER LETTER SMALL TURNED I
+1D4F MODIFIER LETTER SMALL K
+ # <super> 006B
+1D50 MODIFIER LETTER SMALL M
+ # <super> 006D
+1D51 MODIFIER LETTER SMALL ENG
+ # <super> 014B
+1D52 MODIFIER LETTER SMALL O
+ # <super> 006F
+1D53 MODIFIER LETTER SMALL OPEN O
+ # <super> 0254
+1D54 MODIFIER LETTER SMALL TOP HALF O
+ # <super> 1D16
+1D55 MODIFIER LETTER SMALL BOTTOM HALF O
+ # <super> 1D17
+1D56 MODIFIER LETTER SMALL P
+ # <super> 0070
+1D57 MODIFIER LETTER SMALL T
+ # <super> 0074
+1D58 MODIFIER LETTER SMALL U
+ # <super> 0075
+1D59 MODIFIER LETTER SMALL SIDEWAYS U
+ # <super> 1D1D
+1D5A MODIFIER LETTER SMALL TURNED M
+ # <super> 026F
+1D5B MODIFIER LETTER SMALL V
+ # <super> 0076
+1D5C MODIFIER LETTER SMALL AIN
+ # <super> 1D25
+@ Greek superscript modifier letters
+1D5D MODIFIER LETTER SMALL BETA
+ # <super> 03B2
+1D5E MODIFIER LETTER SMALL GREEK GAMMA
+ # <super> 03B3
+1D5F MODIFIER LETTER SMALL DELTA
+ # <super> 03B4
+1D60 MODIFIER LETTER SMALL GREEK PHI
+ # <super> 03C6
+1D61 MODIFIER LETTER SMALL CHI
+ # <super> 03C7
+@ Latin subscript modifier letters
+1D62 LATIN SUBSCRIPT SMALL LETTER I
+ # <sub> 0069
+1D63 LATIN SUBSCRIPT SMALL LETTER R
+ # <sub> 0072
+1D64 LATIN SUBSCRIPT SMALL LETTER U
+ # <sub> 0075
+1D65 LATIN SUBSCRIPT SMALL LETTER V
+ # <sub> 0076
+@ Greek subscript modifier letters
+1D66 GREEK SUBSCRIPT SMALL LETTER BETA
+ # <sub> 03B2
+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
+ # <sub> 03B3
+1D68 GREEK SUBSCRIPT SMALL LETTER RHO
+ # <sub> 03C1
+1D69 GREEK SUBSCRIPT SMALL LETTER PHI
+ # <sub> 03C6
+1D6A GREEK SUBSCRIPT SMALL LETTER CHI
+ # <sub> 03C7
+@ Latin letter
+1D6B LATIN SMALL LETTER UE
+@ Latin letters with middle tilde
+@+ An additional letter with middle tilde is found in another block.
+ x (latin small letter l with middle tilde - 026B)
+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE
+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE
+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE
+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE
+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE
+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE
+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE
+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE
+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE
+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE
+@ Caucasian linguistics
+1D77 LATIN SMALL LETTER TURNED G
+ * Georgian transcription
+ x (georgian letter turned gan - 10F9)
+1D78 MODIFIER LETTER CYRILLIC EN
+ # <super> 043D
+@ Other phonetic symbols
+1D79 LATIN SMALL LETTER INSULAR G
+ * older Irish phonetic notation
+ x (latin small letter g - 0067)
+ x (latin small letter script g - 0261)
+ x (latin small letter gamma - 0263)
+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH
+ * American dictionary usage
+ x (greek small letter theta - 03B8)
+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE
+ * used with different meanings by Americanists and Oxford dictionaries
+1D7C LATIN SMALL LETTER IOTA WITH STROKE
+ * used by Russianists
+1D7D LATIN SMALL LETTER P WITH STROKE
+ * used by Americanists
+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE
+ * used by Americanists
+1D7F LATIN SMALL LETTER UPSILON WITH STROKE
+ * used by Americanists and Oxford dictionaries
+@@ 1D80 Phonetic Extensions Supplement 1DBF
+@ Latin letters with palatal hook
+@+ An additional letter with palatal hook is found in another block.
+ x (latin small letter t with palatal hook - 01AB)
+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK
+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK
+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK
+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK
+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK
+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK
+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK
+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK
+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK
+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK
+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK
+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK
+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK
+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK
+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK
+@ Latin letters with retroflex hook
+@+ IPA recommends transcribing vowels with r-coloring (rhoticity) with the rhotic hook instead.
+ x (modifier letter rhotic hook - 02DE)
+@+ Additional letters with retroflex hook are found in other blocks.
+ x (latin capital letter t with retroflex hook - 01AE)
+ x (latin small letter d with tail - 0256)
+ x (latin small letter l with retroflex hook - 026D)
+ x (latin small letter n with retroflex hook - 0273)
+ x (latin small letter turned r with hook - 027B)
+ x (latin small letter r with tail - 027D)
+ x (latin small letter s with hook - 0282)
+ x (latin small letter squat reversed esh - 0285)
+ x (latin small letter t with retroflex hook - 0288)
+ x (latin small letter z with retroflex hook - 0290)
+ x (latin small letter turned h with fishhook and tail - 02AF)
+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK
+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL
+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK
+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+ x (latin small letter reversed open e with hook - 025D)
+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+ x (latin small letter schwa with hook - 025A)
+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK
+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+@ Modifier letters
+@+ Other modifier letters can be found in the Spacing Modifer Letters, Phonetic Extensions, as well as Superscripts and Subscripts blocks.
+1D9B MODIFIER LETTER SMALL TURNED ALPHA
+ # <super> 0252
+1D9C MODIFIER LETTER SMALL C
+ # <super> 0063
+1D9D MODIFIER LETTER SMALL C WITH CURL
+ # <super> 0255
+1D9E MODIFIER LETTER SMALL ETH
+ # <super> 00F0
+1D9F MODIFIER LETTER SMALL REVERSED OPEN E
+ # <super> 025C
+1DA0 MODIFIER LETTER SMALL F
+ # <super> 0066
+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+ # <super> 025F
+1DA2 MODIFIER LETTER SMALL SCRIPT G
+ # <super> 0261
+1DA3 MODIFIER LETTER SMALL TURNED H
+ # <super> 0265
+1DA4 MODIFIER LETTER SMALL I WITH STROKE
+ # <super> 0268
+1DA5 MODIFIER LETTER SMALL IOTA
+ # <super> 0269
+1DA6 MODIFIER LETTER SMALL CAPITAL I
+ # <super> 026A
+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+ # <super> 1D7B
+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+ # <super> 029D
+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+ # <super> 026D
+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK
+ # <super> 1D85
+1DAB MODIFIER LETTER SMALL CAPITAL L
+ # <super> 029F
+1DAC MODIFIER LETTER SMALL M WITH HOOK
+ # <super> 0271
+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+ # <super> 0270
+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK
+ # <super> 0272
+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+ # <super> 0273
+1DB0 MODIFIER LETTER SMALL CAPITAL N
+ # <super> 0274
+1DB1 MODIFIER LETTER SMALL BARRED O
+ # <super> 0275
+1DB2 MODIFIER LETTER SMALL PHI
+ # <super> 0278
+1DB3 MODIFIER LETTER SMALL S WITH HOOK
+ # <super> 0282
+1DB4 MODIFIER LETTER SMALL ESH
+ # <super> 0283
+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK
+ # <super> 01AB
+1DB6 MODIFIER LETTER SMALL U BAR
+ # <super> 0289
+1DB7 MODIFIER LETTER SMALL UPSILON
+ # <super> 028A
+1DB8 MODIFIER LETTER SMALL CAPITAL U
+ # <super> 1D1C
+1DB9 MODIFIER LETTER SMALL V WITH HOOK
+ # <super> 028B
+1DBA MODIFIER LETTER SMALL TURNED V
+ # <super> 028C
+1DBB MODIFIER LETTER SMALL Z
+ # <super> 007A
+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+ # <super> 0290
+1DBD MODIFIER LETTER SMALL Z WITH CURL
+ # <super> 0291
+1DBE MODIFIER LETTER SMALL EZH
+ # <super> 0292
+1DBF MODIFIER LETTER SMALL THETA
+ # <super> 03B8
+@@ 1DC0 Combining Diacritical Marks Supplement 1DFF
+@ Used for Ancient Greek
+1DC0 COMBINING DOTTED GRAVE ACCENT
+ x (greek dialytika and varia - 1FED)
+1DC1 COMBINING DOTTED ACUTE ACCENT
+ x (combining greek dialytika tonos - 0344)
+ x (greek dialytika and oxia - 1FEE)
+@ Miscellaneous marks
+1DC2 COMBINING SNAKE BELOW
+1DC3 COMBINING SUSPENSION MARK
+ * Glagolitic
+ x (combining breve - 0306)
+@@ 1E00 Latin Extended Additional 1EFF
+@+ In this block the names "WITH LINE BELOW" refer to a macron below the letter.
+@ Latin general use extensions
+1E00 LATIN CAPITAL LETTER A WITH RING BELOW
+ : 0041 0325
+1E01 LATIN SMALL LETTER A WITH RING BELOW
+ : 0061 0325
+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE
+ : 0042 0307
+1E03 LATIN SMALL LETTER B WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0062 0307
+1E04 LATIN CAPITAL LETTER B WITH DOT BELOW
+ : 0042 0323
+1E05 LATIN SMALL LETTER B WITH DOT BELOW
+ : 0062 0323
+1E06 LATIN CAPITAL LETTER B WITH LINE BELOW
+ : 0042 0331
+1E07 LATIN SMALL LETTER B WITH LINE BELOW
+ : 0062 0331
+1E08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+ : 00C7 0301
+1E09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ : 00E7 0301
+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE
+ : 0044 0307
+1E0B LATIN SMALL LETTER D WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0064 0307
+1E0C LATIN CAPITAL LETTER D WITH DOT BELOW
+ : 0044 0323
+1E0D LATIN SMALL LETTER D WITH DOT BELOW
+ * Indic transliteration
+ : 0064 0323
+1E0E LATIN CAPITAL LETTER D WITH LINE BELOW
+ : 0044 0331
+1E0F LATIN SMALL LETTER D WITH LINE BELOW
+ : 0064 0331
+1E10 LATIN CAPITAL LETTER D WITH CEDILLA
+ : 0044 0327
+1E11 LATIN SMALL LETTER D WITH CEDILLA
+ * Livonian
+ : 0064 0327
+1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+ : 0044 032D
+1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ : 0064 032D
+1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+ : 0112 0300
+1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ : 0113 0300
+1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+ : 0112 0301
+1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ : 0113 0301
+1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+ : 0045 032D
+1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ : 0065 032D
+1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW
+ : 0045 0330
+1E1B LATIN SMALL LETTER E WITH TILDE BELOW
+ : 0065 0330
+1E1C LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+ : 0228 0306
+1E1D LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ : 0229 0306
+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE
+ : 0046 0307
+1E1F LATIN SMALL LETTER F WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0066 0307
+1E20 LATIN CAPITAL LETTER G WITH MACRON
+ : 0047 0304
+1E21 LATIN SMALL LETTER G WITH MACRON
+ : 0067 0304
+1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE
+ : 0048 0307
+1E23 LATIN SMALL LETTER H WITH DOT ABOVE
+ : 0068 0307
+1E24 LATIN CAPITAL LETTER H WITH DOT BELOW
+ : 0048 0323
+1E25 LATIN SMALL LETTER H WITH DOT BELOW
+ * Indic transliteration
+ : 0068 0323
+1E26 LATIN CAPITAL LETTER H WITH DIAERESIS
+ : 0048 0308
+1E27 LATIN SMALL LETTER H WITH DIAERESIS
+ : 0068 0308
+1E28 LATIN CAPITAL LETTER H WITH CEDILLA
+ : 0048 0327
+1E29 LATIN SMALL LETTER H WITH CEDILLA
+ : 0068 0327
+1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW
+ : 0048 032E
+1E2B LATIN SMALL LETTER H WITH BREVE BELOW
+ * Semitic transliteration
+ : 0068 032E
+1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW
+ : 0049 0330
+1E2D LATIN SMALL LETTER I WITH TILDE BELOW
+ : 0069 0330
+1E2E LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+ : 00CF 0301
+1E2F LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ : 00EF 0301
+1E30 LATIN CAPITAL LETTER K WITH ACUTE
+ : 004B 0301
+1E31 LATIN SMALL LETTER K WITH ACUTE
+ * Macedonian transliteration
+ : 006B 0301
+1E32 LATIN CAPITAL LETTER K WITH DOT BELOW
+ : 004B 0323
+1E33 LATIN SMALL LETTER K WITH DOT BELOW
+ : 006B 0323
+1E34 LATIN CAPITAL LETTER K WITH LINE BELOW
+ : 004B 0331
+1E35 LATIN SMALL LETTER K WITH LINE BELOW
+ : 006B 0331
+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW
+ : 004C 0323
+1E37 LATIN SMALL LETTER L WITH DOT BELOW
+ * Indic transliteration
+ : 006C 0323
+1E38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+ : 1E36 0304
+1E39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ * Indic transliteration
+ : 1E37 0304
+1E3A LATIN CAPITAL LETTER L WITH LINE BELOW
+ : 004C 0331
+1E3B LATIN SMALL LETTER L WITH LINE BELOW
+ * Indic transliteration
+ : 006C 0331
+1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+ : 004C 032D
+1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ : 006C 032D
+1E3E LATIN CAPITAL LETTER M WITH ACUTE
+ : 004D 0301
+1E3F LATIN SMALL LETTER M WITH ACUTE
+ : 006D 0301
+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE
+ : 004D 0307
+1E41 LATIN SMALL LETTER M WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 006D 0307
+1E42 LATIN CAPITAL LETTER M WITH DOT BELOW
+ : 004D 0323
+1E43 LATIN SMALL LETTER M WITH DOT BELOW
+ * Indic transliteration
+ : 006D 0323
+1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE
+ : 004E 0307
+1E45 LATIN SMALL LETTER N WITH DOT ABOVE
+ * Indic transliteration
+ : 006E 0307
+1E46 LATIN CAPITAL LETTER N WITH DOT BELOW
+ : 004E 0323
+1E47 LATIN SMALL LETTER N WITH DOT BELOW
+ * Indic transliteration
+ : 006E 0323
+1E48 LATIN CAPITAL LETTER N WITH LINE BELOW
+ : 004E 0331
+1E49 LATIN SMALL LETTER N WITH LINE BELOW
+ * Indic transliteration
+ : 006E 0331
+1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+ : 004E 032D
+1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ : 006E 032D
+1E4C LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+ : 00D5 0301
+1E4D LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ : 00F5 0301
+1E4E LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+ : 00D5 0308
+1E4F LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ : 00F5 0308
+1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+ : 014C 0300
+1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ : 014D 0300
+1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+ : 014C 0301
+1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ : 014D 0301
+1E54 LATIN CAPITAL LETTER P WITH ACUTE
+ : 0050 0301
+1E55 LATIN SMALL LETTER P WITH ACUTE
+ : 0070 0301
+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE
+ : 0050 0307
+1E57 LATIN SMALL LETTER P WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0070 0307
+1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE
+ : 0052 0307
+1E59 LATIN SMALL LETTER R WITH DOT ABOVE
+ : 0072 0307
+1E5A LATIN CAPITAL LETTER R WITH DOT BELOW
+ : 0052 0323
+1E5B LATIN SMALL LETTER R WITH DOT BELOW
+ * Indic transliteration
+ : 0072 0323
+1E5C LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+ : 1E5A 0304
+1E5D LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ * Indic transliteration
+ : 1E5B 0304
+1E5E LATIN CAPITAL LETTER R WITH LINE BELOW
+ : 0052 0331
+1E5F LATIN SMALL LETTER R WITH LINE BELOW
+ * Indic transliteration
+ : 0072 0331
+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE
+ : 0053 0307
+1E61 LATIN SMALL LETTER S WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0073 0307
+1E62 LATIN CAPITAL LETTER S WITH DOT BELOW
+ : 0053 0323
+1E63 LATIN SMALL LETTER S WITH DOT BELOW
+ * Indic transliteration
+ : 0073 0323
+1E64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+ : 015A 0307
+1E65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ : 015B 0307
+1E66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+ : 0160 0307
+1E67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ : 0161 0307
+1E68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+ : 1E62 0307
+1E69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ : 1E63 0307
+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE
+ : 0054 0307
+1E6B LATIN SMALL LETTER T WITH DOT ABOVE
+ * Irish Gaelic (old orthography)
+ : 0074 0307
+1E6C LATIN CAPITAL LETTER T WITH DOT BELOW
+ : 0054 0323
+1E6D LATIN SMALL LETTER T WITH DOT BELOW
+ * Indic transliteration
+ : 0074 0323
+1E6E LATIN CAPITAL LETTER T WITH LINE BELOW
+ : 0054 0331
+1E6F LATIN SMALL LETTER T WITH LINE BELOW
+ * Semitic transliteration
+ : 0074 0331
+1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+ : 0054 032D
+1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ : 0074 032D
+1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+ : 0055 0324
+1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ : 0075 0324
+1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW
+ : 0055 0330
+1E75 LATIN SMALL LETTER U WITH TILDE BELOW
+ : 0075 0330
+1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+ : 0055 032D
+1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ : 0075 032D
+1E78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+ : 0168 0301
+1E79 LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ : 0169 0301
+1E7A LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+ : 016A 0308
+1E7B LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ : 016B 0308
+1E7C LATIN CAPITAL LETTER V WITH TILDE
+ : 0056 0303
+1E7D LATIN SMALL LETTER V WITH TILDE
+ : 0076 0303
+1E7E LATIN CAPITAL LETTER V WITH DOT BELOW
+ : 0056 0323
+1E7F LATIN SMALL LETTER V WITH DOT BELOW
+ : 0076 0323
+1E80 LATIN CAPITAL LETTER W WITH GRAVE
+ : 0057 0300
+1E81 LATIN SMALL LETTER W WITH GRAVE
+ * Welsh
+ : 0077 0300
+1E82 LATIN CAPITAL LETTER W WITH ACUTE
+ : 0057 0301
+1E83 LATIN SMALL LETTER W WITH ACUTE
+ * Welsh
+ : 0077 0301
+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS
+ : 0057 0308
+1E85 LATIN SMALL LETTER W WITH DIAERESIS
+ * Welsh
+ : 0077 0308
+1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE
+ : 0057 0307
+1E87 LATIN SMALL LETTER W WITH DOT ABOVE
+ : 0077 0307
+1E88 LATIN CAPITAL LETTER W WITH DOT BELOW
+ : 0057 0323
+1E89 LATIN SMALL LETTER W WITH DOT BELOW
+ : 0077 0323
+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE
+ : 0058 0307
+1E8B LATIN SMALL LETTER X WITH DOT ABOVE
+ : 0078 0307
+1E8C LATIN CAPITAL LETTER X WITH DIAERESIS
+ : 0058 0308
+1E8D LATIN SMALL LETTER X WITH DIAERESIS
+ : 0078 0308
+1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE
+ : 0059 0307
+1E8F LATIN SMALL LETTER Y WITH DOT ABOVE
+ : 0079 0307
+1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ : 005A 0302
+1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ : 007A 0302
+1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW
+ : 005A 0323
+1E93 LATIN SMALL LETTER Z WITH DOT BELOW
+ * Indic transliteration
+ : 007A 0323
+1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW
+ : 005A 0331
+1E95 LATIN SMALL LETTER Z WITH LINE BELOW
+ * Semitic transliteration
+ : 007A 0331
+1E96 LATIN SMALL LETTER H WITH LINE BELOW
+ * Semitic transliteration
+ : 0068 0331
+1E97 LATIN SMALL LETTER T WITH DIAERESIS
+ : 0074 0308
+1E98 LATIN SMALL LETTER W WITH RING ABOVE
+ : 0077 030A
+1E99 LATIN SMALL LETTER Y WITH RING ABOVE
+ : 0079 030A
+1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING
+ # 0061 02BE
+1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ * in current use in Gaelic types (as glyph variant of 1E61)
+ : 017F 0307
+@ Latin extensions for Vietnamese
+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW
+ : 0041 0323
+1EA1 LATIN SMALL LETTER A WITH DOT BELOW
+ : 0061 0323
+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ : 0041 0309
+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE
+ : 0061 0309
+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+ : 00C2 0301
+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ : 00E2 0301
+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+ : 00C2 0300
+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ : 00E2 0300
+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00C2 0309
+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00E2 0309
+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+ : 00C2 0303
+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ : 00E2 0303
+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ : 1EA0 0302
+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ : 1EA1 0302
+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+ : 0102 0301
+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ : 0103 0301
+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+ : 0102 0300
+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ : 0103 0300
+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+ : 0102 0309
+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ : 0103 0309
+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+ : 0102 0303
+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE
+ : 0103 0303
+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+ : 1EA0 0306
+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ : 1EA1 0306
+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW
+ : 0045 0323
+1EB9 LATIN SMALL LETTER E WITH DOT BELOW
+ : 0065 0323
+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ : 0045 0309
+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE
+ : 0065 0309
+1EBC LATIN CAPITAL LETTER E WITH TILDE
+ : 0045 0303
+1EBD LATIN SMALL LETTER E WITH TILDE
+ : 0065 0303
+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+ : 00CA 0301
+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ : 00EA 0301
+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+ : 00CA 0300
+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ : 00EA 0300
+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00CA 0309
+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00EA 0309
+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+ : 00CA 0303
+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ : 00EA 0303
+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ : 1EB8 0302
+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ : 1EB9 0302
+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ : 0049 0309
+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE
+ : 0069 0309
+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW
+ : 0049 0323
+1ECB LATIN SMALL LETTER I WITH DOT BELOW
+ : 0069 0323
+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW
+ : 004F 0323
+1ECD LATIN SMALL LETTER O WITH DOT BELOW
+ : 006F 0323
+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE
+ : 004F 0309
+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE
+ : 006F 0309
+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+ : 00D4 0301
+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ : 00F4 0301
+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+ : 00D4 0300
+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ : 00F4 0300
+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00D4 0309
+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ : 00F4 0309
+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+ : 00D4 0303
+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ : 00F4 0303
+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ : 1ECC 0302
+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ : 1ECD 0302
+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+ : 01A0 0301
+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE
+ : 01A1 0301
+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+ : 01A0 0300
+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE
+ : 01A1 0300
+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+ : 01A0 0309
+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ : 01A1 0309
+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ : 01A0 0303
+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE
+ : 01A1 0303
+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+ : 01A0 0323
+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ : 01A1 0323
+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW
+ : 0055 0323
+1EE5 LATIN SMALL LETTER U WITH DOT BELOW
+ : 0075 0323
+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ : 0055 0309
+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE
+ : 0075 0309
+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+ : 01AF 0301
+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE
+ : 01B0 0301
+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+ : 01AF 0300
+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE
+ : 01B0 0300
+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+ : 01AF 0309
+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ : 01B0 0309
+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE
+ : 01AF 0303
+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE
+ : 01B0 0303
+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+ : 01AF 0323
+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ : 01B0 0323
+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE
+ : 0059 0300
+1EF3 LATIN SMALL LETTER Y WITH GRAVE
+ * Welsh
+ : 0079 0300
+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW
+ : 0059 0323
+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW
+ : 0079 0323
+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+ : 0059 0309
+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE
+ : 0079 0309
+1EF8 LATIN CAPITAL LETTER Y WITH TILDE
+ : 0059 0303
+1EF9 LATIN SMALL LETTER Y WITH TILDE
+ : 0079 0303
+@@ 1F00 Greek Extended 1FFF
+@ Precomposed polytonic Greek
+1F00 GREEK SMALL LETTER ALPHA WITH PSILI
+ : 03B1 0313
+1F01 GREEK SMALL LETTER ALPHA WITH DASIA
+ : 03B1 0314
+1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+ : 1F00 0300
+1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+ : 1F01 0300
+1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+ : 1F00 0301
+1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+ : 1F01 0301
+1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ : 1F00 0342
+1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ : 1F01 0342
+1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI
+ : 0391 0313
+1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA
+ : 0391 0314
+1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+ : 1F08 0300
+1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+ : 1F09 0300
+1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+ : 1F08 0301
+1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+ : 1F09 0301
+1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ : 1F08 0342
+1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ : 1F09 0342
+1F10 GREEK SMALL LETTER EPSILON WITH PSILI
+ : 03B5 0313
+1F11 GREEK SMALL LETTER EPSILON WITH DASIA
+ : 03B5 0314
+1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+ : 1F10 0300
+1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+ : 1F11 0300
+1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+ : 1F10 0301
+1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ : 1F11 0301
+1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI
+ : 0395 0313
+1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA
+ : 0395 0314
+1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+ : 1F18 0300
+1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+ : 1F19 0300
+1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+ : 1F18 0301
+1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ : 1F19 0301
+1F20 GREEK SMALL LETTER ETA WITH PSILI
+ : 03B7 0313
+1F21 GREEK SMALL LETTER ETA WITH DASIA
+ : 03B7 0314
+1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+ : 1F20 0300
+1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+ : 1F21 0300
+1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+ : 1F20 0301
+1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+ : 1F21 0301
+1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+ : 1F20 0342
+1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ : 1F21 0342
+1F28 GREEK CAPITAL LETTER ETA WITH PSILI
+ : 0397 0313
+1F29 GREEK CAPITAL LETTER ETA WITH DASIA
+ : 0397 0314
+1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+ : 1F28 0300
+1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+ : 1F29 0300
+1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+ : 1F28 0301
+1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+ : 1F29 0301
+1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+ : 1F28 0342
+1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ : 1F29 0342
+1F30 GREEK SMALL LETTER IOTA WITH PSILI
+ : 03B9 0313
+1F31 GREEK SMALL LETTER IOTA WITH DASIA
+ : 03B9 0314
+1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+ : 1F30 0300
+1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+ : 1F31 0300
+1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+ : 1F30 0301
+1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+ : 1F31 0301
+1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+ : 1F30 0342
+1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ : 1F31 0342
+1F38 GREEK CAPITAL LETTER IOTA WITH PSILI
+ : 0399 0313
+1F39 GREEK CAPITAL LETTER IOTA WITH DASIA
+ : 0399 0314
+1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+ : 1F38 0300
+1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+ : 1F39 0300
+1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+ : 1F38 0301
+1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+ : 1F39 0301
+1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+ : 1F38 0342
+1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+ : 1F39 0342
+1F40 GREEK SMALL LETTER OMICRON WITH PSILI
+ : 03BF 0313
+1F41 GREEK SMALL LETTER OMICRON WITH DASIA
+ : 03BF 0314
+1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+ : 1F40 0300
+1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+ : 1F41 0300
+1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+ : 1F40 0301
+1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ : 1F41 0301
+1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI
+ : 039F 0313
+1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA
+ : 039F 0314
+1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+ : 1F48 0300
+1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+ : 1F49 0300
+1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+ : 1F48 0301
+1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ : 1F49 0301
+1F50 GREEK SMALL LETTER UPSILON WITH PSILI
+ : 03C5 0313
+1F51 GREEK SMALL LETTER UPSILON WITH DASIA
+ : 03C5 0314
+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+ : 1F50 0300
+1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ : 1F51 0300
+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+ : 1F50 0301
+1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ : 1F51 0301
+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+ : 1F50 0342
+1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ : 1F51 0342
+1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA
+ : 03A5 0314
+1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ : 1F59 0300
+1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ : 1F59 0301
+1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ : 1F59 0342
+1F60 GREEK SMALL LETTER OMEGA WITH PSILI
+ : 03C9 0313
+1F61 GREEK SMALL LETTER OMEGA WITH DASIA
+ : 03C9 0314
+1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+ : 1F60 0300
+1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+ : 1F61 0300
+1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+ : 1F60 0301
+1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+ : 1F61 0301
+1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ : 1F60 0342
+1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ : 1F61 0342
+1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI
+ : 03A9 0313
+1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA
+ : 03A9 0314
+1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+ : 1F68 0300
+1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+ : 1F69 0300
+1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+ : 1F68 0301
+1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+ : 1F69 0301
+1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ : 1F68 0342
+1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ : 1F69 0342
+1F70 GREEK SMALL LETTER ALPHA WITH VARIA
+ : 03B1 0300
+1F71 GREEK SMALL LETTER ALPHA WITH OXIA
+ : 03AC greek small letter alpha with tonos
+1F72 GREEK SMALL LETTER EPSILON WITH VARIA
+ : 03B5 0300
+1F73 GREEK SMALL LETTER EPSILON WITH OXIA
+ : 03AD greek small letter epsilon with tonos
+1F74 GREEK SMALL LETTER ETA WITH VARIA
+ : 03B7 0300
+1F75 GREEK SMALL LETTER ETA WITH OXIA
+ : 03AE greek small letter eta with tonos
+1F76 GREEK SMALL LETTER IOTA WITH VARIA
+ : 03B9 0300
+1F77 GREEK SMALL LETTER IOTA WITH OXIA
+ : 03AF greek small letter iota with tonos
+1F78 GREEK SMALL LETTER OMICRON WITH VARIA
+ : 03BF 0300
+1F79 GREEK SMALL LETTER OMICRON WITH OXIA
+ : 03CC greek small letter omicron with tonos
+1F7A GREEK SMALL LETTER UPSILON WITH VARIA
+ : 03C5 0300
+1F7B GREEK SMALL LETTER UPSILON WITH OXIA
+ : 03CD greek small letter upsilon with tonos
+1F7C GREEK SMALL LETTER OMEGA WITH VARIA
+ : 03C9 0300
+1F7D GREEK SMALL LETTER OMEGA WITH OXIA
+ : 03CE greek small letter omega with tonos
+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+ : 1F00 0345
+1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+ : 1F01 0345
+1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ : 1F02 0345
+1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ : 1F03 0345
+1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ : 1F04 0345
+1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ : 1F05 0345
+1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F06 0345
+1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F07 0345
+1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+ : 1F08 0345
+1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+ : 1F09 0345
+1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ : 1F0A 0345
+1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ : 1F0B 0345
+1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ : 1F0C 0345
+1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ : 1F0D 0345
+1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F0E 0345
+1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F0F 0345
+1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+ : 1F20 0345
+1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+ : 1F21 0345
+1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ : 1F22 0345
+1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ : 1F23 0345
+1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ : 1F24 0345
+1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ : 1F25 0345
+1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F26 0345
+1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F27 0345
+1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+ : 1F28 0345
+1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+ : 1F29 0345
+1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ : 1F2A 0345
+1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ : 1F2B 0345
+1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ : 1F2C 0345
+1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ : 1F2D 0345
+1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F2E 0345
+1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F2F 0345
+1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+ : 1F60 0345
+1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+ : 1F61 0345
+1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ : 1F62 0345
+1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ : 1F63 0345
+1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ : 1F64 0345
+1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ : 1F65 0345
+1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F66 0345
+1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ : 1F67 0345
+1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+ : 1F68 0345
+1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+ : 1F69 0345
+1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ : 1F6A 0345
+1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ : 1F6B 0345
+1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ : 1F6C 0345
+1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ : 1F6D 0345
+1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F6E 0345
+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ : 1F6F 0345
+1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY
+ : 03B1 0306
+1FB1 GREEK SMALL LETTER ALPHA WITH MACRON
+ : 03B1 0304
+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+ : 1F70 0345
+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ : 03B1 0345
+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+ : 03AC 0345
+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+ : 03B1 0342
+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+ : 1FB6 0345
+1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY
+ : 0391 0306
+1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON
+ : 0391 0304
+1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA
+ : 0391 0300
+1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA
+ : 0386 greek capital letter alpha with tonos
+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ : 0391 0345
+1FBD GREEK KORONIS
+ # 0020 0313
+1FBE GREEK PROSGEGRAMMENI
+ : 03B9 greek small letter iota
+1FBF GREEK PSILI
+ # 0020 0313
+1FC0 GREEK PERISPOMENI
+ # 0020 0342
+1FC1 GREEK DIALYTIKA AND PERISPOMENI
+ : 00A8 0342
+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+ : 1F74 0345
+1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ : 03B7 0345
+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+ : 03AE 0345
+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI
+ : 03B7 0342
+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+ : 1FC6 0345
+1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA
+ : 0395 0300
+1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA
+ : 0388 greek capital letter epsilon with tonos
+1FCA GREEK CAPITAL LETTER ETA WITH VARIA
+ : 0397 0300
+1FCB GREEK CAPITAL LETTER ETA WITH OXIA
+ : 0389 greek capital letter eta with tonos
+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ : 0397 0345
+1FCD GREEK PSILI AND VARIA
+ : 1FBF 0300
+1FCE GREEK PSILI AND OXIA
+ : 1FBF 0301
+1FCF GREEK PSILI AND PERISPOMENI
+ : 1FBF 0342
+1FD0 GREEK SMALL LETTER IOTA WITH VRACHY
+ : 03B9 0306
+1FD1 GREEK SMALL LETTER IOTA WITH MACRON
+ : 03B9 0304
+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+ : 03CA 0300
+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ : 0390 greek small letter iota with dialytika and tonos
+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI
+ : 03B9 0342
+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+ : 03CA 0342
+1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY
+ : 0399 0306
+1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON
+ : 0399 0304
+1FDA GREEK CAPITAL LETTER IOTA WITH VARIA
+ : 0399 0300
+1FDB GREEK CAPITAL LETTER IOTA WITH OXIA
+ : 038A greek capital letter iota with tonos
+1FDD GREEK DASIA AND VARIA
+ : 1FFE 0300
+1FDE GREEK DASIA AND OXIA
+ : 1FFE 0301
+1FDF GREEK DASIA AND PERISPOMENI
+ : 1FFE 0342
+1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY
+ : 03C5 0306
+1FE1 GREEK SMALL LETTER UPSILON WITH MACRON
+ : 03C5 0304
+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+ : 03CB 0300
+1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+ : 03B0 greek small letter upsilon with dialytika and tonos
+1FE4 GREEK SMALL LETTER RHO WITH PSILI
+ : 03C1 0313
+1FE5 GREEK SMALL LETTER RHO WITH DASIA
+ : 03C1 0314
+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+ : 03C5 0342
+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+ : 03CB 0342
+1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY
+ : 03A5 0306
+1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON
+ : 03A5 0304
+1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA
+ : 03A5 0300
+1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA
+ : 038E greek capital letter upsilon with tonos
+1FEC GREEK CAPITAL LETTER RHO WITH DASIA
+ : 03A1 0314
+1FED GREEK DIALYTIKA AND VARIA
+ : 00A8 0300
+1FEE GREEK DIALYTIKA AND OXIA
+ : 0385 greek dialytika tonos
+1FEF GREEK VARIA
+ : 0060 grave accent
+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+ : 1F7C 0345
+1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ : 03C9 0345
+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+ : 03CE 0345
+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+ : 03C9 0342
+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+ : 1FF6 0345
+1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA
+ : 039F 0300
+1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA
+ : 038C greek capital letter omicron with tonos
+1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA
+ : 03A9 0300
+1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA
+ : 038F greek capital letter omega with tonos
+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ : 03A9 0345
+1FFD GREEK OXIA
+ : 00B4 acute accent
+1FFE GREEK DASIA
+ # 0020 0314
+@@ 2000 General Punctuation 206F
+@+ For additional general punctuation characters see also Basic Latin, Latin-1, Supplemental Punctuation and CJK Symbols and Punctuation.
+@ Spaces
+2000 EN QUAD
+ : 2002 en space
+2001 EM QUAD
+ = mutton quad
+ : 2003 em space
+2002 EN SPACE
+ = nut
+ * half an em
+ # 0020 space
+2003 EM SPACE
+ = mutton
+ * nominally, a space equal to the type size in points
+ * may scale by the condensation factor of a font
+ # 0020 space
+2004 THREE-PER-EM SPACE
+ = thick space
+ # 0020 space
+2005 FOUR-PER-EM SPACE
+ = mid space
+ # 0020 space
+2006 SIX-PER-EM SPACE
+ * in computer typography sometimes equated to thin space
+ # 0020 space
+2007 FIGURE SPACE
+ * space equal to tabular width of a font
+ * this is equivalent to the digit width of fonts with fixed-width digits
+ # <noBreak> 0020
+2008 PUNCTUATION SPACE
+ * space equal to narrow punctuation of a font
+ # 0020 space
+2009 THIN SPACE
+ * a fifth of an em (or sometimes a sixth)
+ # 0020 space
+200A HAIR SPACE
+ * thinner than a thin space
+ * in traditional typography, the thinnest space available
+ # 0020 space
+200B ZERO WIDTH SPACE
+ = ZWSP
+ * this character is intended for line break control; it has no width, but its presence between two characters does not prevent increased letter spacing in justification
+@ Formatting characters
+200C ZERO WIDTH NON-JOINER
+ = ZWNJ
+200D ZERO WIDTH JOINER
+ = ZWJ
+200E LEFT-TO-RIGHT MARK
+ = LRM
+200F RIGHT-TO-LEFT MARK
+ = RLM
+@ Dashes
+2010 HYPHEN
+ x (hyphen-minus - 002D)
+ x (soft hyphen - 00AD)
+2011 NON-BREAKING HYPHEN
+ x (hyphen-minus - 002D)
+ x (soft hyphen - 00AD)
+ # <noBreak> 2010
+2012 FIGURE DASH
+2013 EN DASH
+2014 EM DASH
+ * may be used in pairs to offset parenthetical text
+ x (katakana-hiragana prolonged sound mark - 30FC)
+2015 HORIZONTAL BAR
+ = QUOTATION DASH
+ * long dash introducing quoted text
+@ General punctuation
+2016 DOUBLE VERTICAL LINE
+ * used in pairs to indicate norm of a matrix
+ x (combining double vertical stroke overlay - 20E6)
+ x (parallel to - 2225)
+2017 DOUBLE LOW LINE
+ * this is a spacing character
+ x (low line - 005F)
+ x (combining double low line - 0333)
+ # 0020 0333
+2018 LEFT SINGLE QUOTATION MARK
+ = SINGLE TURNED COMMA QUOTATION MARK
+ * this is the preferred glyph (as opposed to 201B)
+ x (apostrophe - 0027)
+ x (modifier letter turned comma - 02BB)
+ x (heavy single turned comma quotation mark ornament - 275B)
+2019 RIGHT SINGLE QUOTATION MARK
+ = SINGLE COMMA QUOTATION MARK
+ * this is the preferred character to use for apostrophe
+ x (apostrophe - 0027)
+ x (modifier letter apostrophe - 02BC)
+ x (heavy single comma quotation mark ornament - 275C)
+201A SINGLE LOW-9 QUOTATION MARK
+ = LOW SINGLE COMMA QUOTATION MARK
+ * used as opening single quotation mark in some languages
+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ = SINGLE REVERSED COMMA QUOTATION MARK
+ * glyph variant of 2018
+ x (modifier letter reversed comma - 02BD)
+201C LEFT DOUBLE QUOTATION MARK
+ = DOUBLE TURNED COMMA QUOTATION MARK
+ * this is the preferred glyph (as opposed to 201F)
+ x (quotation mark - 0022)
+ x (heavy double turned comma quotation mark ornament - 275D)
+ x (reversed double prime quotation mark - 301D)
+201D RIGHT DOUBLE QUOTATION MARK
+ = DOUBLE COMMA QUOTATION MARK
+ x (quotation mark - 0022)
+ x (double prime - 2033)
+ x (heavy double comma quotation mark ornament - 275E)
+ x (double prime quotation mark - 301E)
+201E DOUBLE LOW-9 QUOTATION MARK
+ = LOW DOUBLE COMMA QUOTATION MARK
+ * used as opening double quotation mark in some languages
+ x (low double prime quotation mark - 301F)
+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ = DOUBLE REVERSED COMMA QUOTATION MARK
+ * glyph variant of 201C
+2020 DAGGER
+ = obelisk, obelus, long cross
+2021 DOUBLE DAGGER
+ = diesis, double obelisk
+2022 BULLET
+ = black small circle
+ x (middle dot - 00B7)
+ x (one dot leader - 2024)
+ x (bullet operator - 2219)
+ x (inverse bullet - 25D8)
+ x (white bullet - 25E6)
+2023 TRIANGULAR BULLET
+ x (end of proof - 220E)
+ x (black right-pointing small triangle - 25B8)
+2024 ONE DOT LEADER
+ * also used as an Armenian semicolon (mijaket)
+ x (middle dot - 00B7)
+ x (bullet - 2022)
+ x (bullet operator - 2219)
+ # 002E full stop
+2025 TWO DOT LEADER
+ # 002E 002E
+2026 HORIZONTAL ELLIPSIS
+ = three dot leader
+ x (vertical ellipsis - 22EE)
+ x (presentation form for vertical horizontal ellipsis - FE19)
+ # 002E 002E 002E
+2027 HYPHENATION POINT
+@ Formatting characters
+2028 LINE SEPARATOR
+ * may be used to represent this semantic unambiguously
+2029 PARAGRAPH SEPARATOR
+ * may be used to represent this semantic unambiguously
+202A LEFT-TO-RIGHT EMBEDDING
+ = LRE
+202B RIGHT-TO-LEFT EMBEDDING
+ = RLE
+202C POP DIRECTIONAL FORMATTING
+ = PDF
+202D LEFT-TO-RIGHT OVERRIDE
+ = LRO
+202E RIGHT-TO-LEFT OVERRIDE
+ = RLO
+202F NARROW NO-BREAK SPACE
+ = NNBSP
+ x (no-break space - 00A0)
+ # <noBreak> 0020
+@ General punctuation
+2030 PER MILLE SIGN
+ = permille, per thousand
+ * used, for example, in measures of blood alcohol content, salinity, etc.
+ x (percent sign - 0025)
+2031 PER TEN THOUSAND SIGN
+ = permyriad
+ * percent of a percent, rarely used
+ x (percent sign - 0025)
+2032 PRIME
+ = minutes, feet
+ x (apostrophe - 0027)
+ x (acute accent - 00B4)
+ x (modifier letter prime - 02B9)
+2033 DOUBLE PRIME
+ = seconds, inches
+ x (quotation mark - 0022)
+ x (modifier letter double prime - 02BA)
+ x (right double quotation mark - 201D)
+ x (ditto mark - 3003)
+ x (double prime quotation mark - 301E)
+ # 2032 2032
+2034 TRIPLE PRIME
+ = lines (old measure, 1/12 of an inch)
+ # 2032 2032 2032
+2035 REVERSED PRIME
+ x (grave accent - 0060)
+2036 REVERSED DOUBLE PRIME
+ x (reversed double prime quotation mark - 301D)
+ # 2035 2035
+2037 REVERSED TRIPLE PRIME
+ # 2035 2035 2035
+2038 CARET
+ x (up arrowhead - 2303)
+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ = LEFT POINTING SINGLE GUILLEMET
+ * usually opening, sometimes closing
+ x (less-than sign - 003C)
+ x (left-pointing angle bracket - 2329)
+ x (left angle bracket - 3008)
+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ = RIGHT POINTING SINGLE GUILLEMET
+ * usually closing, sometimes opening
+ x (greater-than sign - 003E)
+ x (right-pointing angle bracket - 232A)
+ x (right angle bracket - 3009)
+203B REFERENCE MARK
+ = Japanese kome
+ = Urdu paragraph separator
+ x (tibetan ku ru kha bzhi mig can - 0FBF)
+@ Double punctuation for vertical text
+203C DOUBLE EXCLAMATION MARK
+ x (exclamation mark - 0021)
+ # 0021 0021
+@ General punctuation
+203D INTERROBANG
+ x (exclamation mark - 0021)
+ x (question mark - 003F)
+203E OVERLINE
+ = SPACING OVERSCORE
+ # 0020 0305
+203F UNDERTIE (Enotikon)
+ = Greek enotikon
+ x (smile - 2323)
+2040 CHARACTER TIE
+ = z notation sequence concatenation
+ x (frown - 2322)
+2041 CARET INSERTION POINT
+ * proofreader's mark: insert here
+ x (right semidirect product - 22CC)
+2042 ASTERISM
+2043 HYPHEN BULLET
+2044 FRACTION SLASH
+ = solidus (in typography)
+ * for composing arbitrary fractions
+ x (solidus - 002F)
+ x (division slash - 2215)
+2045 LEFT SQUARE BRACKET WITH QUILL
+2046 RIGHT SQUARE BRACKET WITH QUILL
+@ Double punctuation for vertical text
+2047 DOUBLE QUESTION MARK
+ # 003F 003F
+2048 QUESTION EXCLAMATION MARK
+ # 003F 0021
+2049 EXCLAMATION QUESTION MARK
+ # 0021 003F
+@ General punctuation
+204A TIRONIAN SIGN ET
+ * Irish Gaelic, ...
+204B REVERSED PILCROW SIGN
+ x (pilcrow sign - 00B6)
+204C BLACK LEFTWARDS BULLET
+204D BLACK RIGHTWARDS BULLET
+204E LOW ASTERISK
+ x (asterisk - 002A)
+204F REVERSED SEMICOLON
+ x (semicolon - 003B)
+2050 CLOSE UP
+ * editing mark
+2051 TWO ASTERISKS ALIGNED VERTICALLY
+2052 COMMERCIAL MINUS SIGN
+ = abzüglich (German), med avdrag av (Swedish), piska (Swedish, "whip")
+ * a common glyph variant and fallback representation looks like ./.
+ * may also be used as a dingbat to indicate correctness
+ * used in Finno-Ugric Phonetic Alphabet to indicate a related borrowed form with different sound
+ x (percent sign - 0025)
+ x (arabic percent sign - 066A)
+2053 SWUNG DASH
+ x (tilde - 007E)
+2054 INVERTED UNDERTIE
+2055 FLOWER PUNCTUATION MARK
+ = phul, puspika
+ * used as a punctuation mark with Syloti Nagri, Bengali and other Indic scripts
+ x (heavy eight teardrop-spoked propeller asterisk - 274B)
+@ Archaic punctuation
+2056 THREE DOT PUNCTUATION
+@ General punctuation
+2057 QUADRUPLE PRIME
+ # 2032 2032 2032 2032
+@ Archaic punctuation
+2058 FOUR DOT PUNCTUATION
+2059 FIVE DOT PUNCTUATION
+ = Greek pentonkion
+205A TWO DOT PUNCTUATION
+ * historically used to indicate the end of a sentence or change of speaker
+ * extends from baseline to cap height
+ x (presentation form for vertical two dot leader - FE30)
+ x (greek acrophonic epidaurean two - 1015B)
+205B FOUR DOT MARK
+ * used by scribes in the margin as highlighter mark
+ * this is centered on the line, but extends beyond top and bottom of the line
+205C DOTTED CROSS
+ * used by scribes in the margin as highlighter mark
+205D TRICOLON
+ = Epidaurean acrophonic symbol three
+ x (vertical ellipsis - 22EE)
+ x (triple colon operator - 2AF6)
+ x (presentation form for vertical horizontal ellipsis - FE19)
+205E VERTICAL FOUR DOTS
+ * used in dictionaries to indicate legal but undesirable word break
+ * glyph extends the whole height of the line
+@ Space
+205F MEDIUM MATHEMATICAL SPACE
+ = MMSP
+ * four-eighteenths of an em
+ # 0020 space
+@ Formatting character
+2060 WORD JOINER
+ = WJ
+ * a zero width non-breaking space (only)
+ * intended for disambiguation of functions for byte order mark
+ x (zero width no-break space - FEFF)
+@ Invisible operators
+2061 FUNCTION APPLICATION
+ * contiguity operator indicating application of a function
+2062 INVISIBLE TIMES
+ * contiguity operator indicating multiplication
+2063 INVISIBLE SEPARATOR
+ = invisible comma
+ * contiguity operator indicating that adjacent mathematical symbols form a list, e.g. when no visible comma is used between multiple indices
+@ Deprecated
+206A INHIBIT SYMMETRIC SWAPPING
+206B ACTIVATE SYMMETRIC SWAPPING
+206C INHIBIT ARABIC FORM SHAPING
+206D ACTIVATE ARABIC FORM SHAPING
+206E NATIONAL DIGIT SHAPES
+206F NOMINAL DIGIT SHAPES
+@@ 2070 Superscripts and Subscripts 209F
+@ Superscripts
+2070 SUPERSCRIPT ZERO
+ # <super> 0030
+2071 SUPERSCRIPT LATIN SMALL LETTER I
+ # <super> 0069
+2072 <reserved>
+ x (superscript two - 00B2)
+2073 <reserved>
+ x (superscript three - 00B3)
+2074 SUPERSCRIPT FOUR
+ # <super> 0034
+2075 SUPERSCRIPT FIVE
+ # <super> 0035
+2076 SUPERSCRIPT SIX
+ # <super> 0036
+2077 SUPERSCRIPT SEVEN
+ # <super> 0037
+2078 SUPERSCRIPT EIGHT
+ # <super> 0038
+2079 SUPERSCRIPT NINE
+ # <super> 0039
+207A SUPERSCRIPT PLUS SIGN
+ # <super> 002B
+207B SUPERSCRIPT MINUS
+ # <super> 2212
+207C SUPERSCRIPT EQUALS SIGN
+ # <super> 003D
+207D SUPERSCRIPT LEFT PARENTHESIS
+ # <super> 0028
+207E SUPERSCRIPT RIGHT PARENTHESIS
+ # <super> 0029
+207F SUPERSCRIPT LATIN SMALL LETTER N
+ # <super> 006E
+@ Subscripts
+2080 SUBSCRIPT ZERO
+ # <sub> 0030
+2081 SUBSCRIPT ONE
+ # <sub> 0031
+2082 SUBSCRIPT TWO
+ # <sub> 0032
+2083 SUBSCRIPT THREE
+ # <sub> 0033
+2084 SUBSCRIPT FOUR
+ # <sub> 0034
+2085 SUBSCRIPT FIVE
+ # <sub> 0035
+2086 SUBSCRIPT SIX
+ # <sub> 0036
+2087 SUBSCRIPT SEVEN
+ # <sub> 0037
+2088 SUBSCRIPT EIGHT
+ # <sub> 0038
+2089 SUBSCRIPT NINE
+ # <sub> 0039
+208A SUBSCRIPT PLUS SIGN
+ # <sub> 002B
+208B SUBSCRIPT MINUS
+ # <sub> 2212
+208C SUBSCRIPT EQUALS SIGN
+ # <sub> 003D
+208D SUBSCRIPT LEFT PARENTHESIS
+ # <sub> 0028
+208E SUBSCRIPT RIGHT PARENTHESIS
+ # <sub> 0029
+2090 LATIN SUBSCRIPT SMALL LETTER A
+ # <sub> 0061
+2091 LATIN SUBSCRIPT SMALL LETTER E
+ # <sub> 0065
+2092 LATIN SUBSCRIPT SMALL LETTER O
+ # <sub> 006F
+2093 LATIN SUBSCRIPT SMALL LETTER X
+ # <sub> 0078
+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA
+ # <sub> 0259
+@@ 20A0 Currency Symbols 20CF
+@ Currency symbols
+@+ A number of currency symbols are found in other blocks. Fullwidth versions of some currency symbols are found in the Halfwidth and Fullwidth Forms block.
+ x (dollar sign - 0024)
+ x (cent sign - 00A2)
+ x (pound sign - 00A3)
+ x (currency sign - 00A4)
+ x (yen sign - 00A5)
+ x (latin small letter f with hook - 0192)
+ x (afghani sign - 060B)
+ x (bengali rupee mark - 09F2)
+ x (bengali rupee sign - 09F3)
+ x (gujarati rupee sign - 0AF1)
+ x (tamil rupee sign - 0BF9)
+ x (thai currency symbol baht - 0E3F)
+ x (khmer currency symbol riel - 17DB)
+ x (script capital m - 2133)
+ x (rial sign - FDFC)
+20A0 EURO-CURRENCY SIGN
+ * intended for ECU, but not widely used
+ * historical character; this is NOT the euro!
+ x (euro sign - 20AC)
+20A1 COLON SIGN
+ * Costa Rica, El Salvador
+20A2 CRUZEIRO SIGN
+ * Brazil
+20A3 FRENCH FRANC SIGN
+ * France
+20A4 LIRA SIGN
+ * intended for lira, but not widely used
+ * preferred character for lira is 00A3
+ x (pound sign - 00A3)
+20A5 MILL SIGN
+ * USA (1/10 cent)
+20A6 NAIRA SIGN
+ * Nigeria
+20A7 PESETA SIGN
+ * Spain
+ x (peso sign - 20B1)
+20A8 RUPEE SIGN
+ * India
+ # 0052 0073
+20A9 WON SIGN
+ * Korea
+20AA NEW SHEQEL SIGN
+ * Israel
+20AB DONG SIGN
+ * Vietnam
+20AC EURO SIGN
+ * currency sign for the European Monetary Union
+ * euro, not ecu
+ x (euro-currency sign - 20A0)
+20AD KIP SIGN
+ * Laos
+20AE TUGRIK SIGN
+ * Mongolia
+ * also transliterated as tugrug, tugric, tugrog, togrog, tögrög
+20AF DRACHMA SIGN
+ * Greece
+20B0 GERMAN PENNY SIGN
+20B1 PESO SIGN
+ * Philippines
+ * the Mexican peso is indicated with the dollar sign
+ x (peseta sign - 20A7)
+20B2 GUARANI SIGN
+ * Paraguay
+ * Often represented by G. or Gs.
+20B3 AUSTRAL SIGN
+ * former Argentinian currency
+20B4 HRYVNIA SIGN
+ * Ukraine
+20B5 CEDI SIGN
+ * Ghana
+ * glyph may look like '023B' or like C with a short vertical stroke through the upper arm
+ x (cent sign - 00A2)
+ x (latin capital letter c with stroke - 023B)
+@@ 20D0 Combining Diacritical Marks for Symbols 20FF
+@ Combining diacritical marks for symbols
+20D0 COMBINING LEFT HARPOON ABOVE
+20D1 COMBINING RIGHT HARPOON ABOVE
+ * vector
+20D2 COMBINING LONG VERTICAL LINE OVERLAY
+ * negation
+20D3 COMBINING SHORT VERTICAL LINE OVERLAY
+ * occasional variant for negation
+20D4 COMBINING ANTICLOCKWISE ARROW ABOVE
+20D5 COMBINING CLOCKWISE ARROW ABOVE
+ * rotation
+20D6 COMBINING LEFT ARROW ABOVE
+20D7 COMBINING RIGHT ARROW ABOVE
+ * vector
+20D8 COMBINING RING OVERLAY
+20D9 COMBINING CLOCKWISE RING OVERLAY
+20DA COMBINING ANTICLOCKWISE RING OVERLAY
+20DB COMBINING THREE DOTS ABOVE
+ = third derivative
+20DC COMBINING FOUR DOTS ABOVE
+ = fourth derivative
+@ Enclosing diacritics
+20DD COMBINING ENCLOSING CIRCLE
+ = JIS composition circle
+ x (white circle - 25CB)
+ x (large circle - 25EF)
+ x (ideographic number zero - 3007)
+20DE COMBINING ENCLOSING SQUARE
+ x (white square - 25A1)
+20DF COMBINING ENCLOSING DIAMOND
+ x (white diamond - 25C7)
+20E0 COMBINING ENCLOSING CIRCLE BACKSLASH
+ * prohibition
+@ Additional diacritical mark for symbols
+20E1 COMBINING LEFT RIGHT ARROW ABOVE
+ * tensor
+@ Additional enclosing diacritics
+20E2 COMBINING ENCLOSING SCREEN
+ x (clear screen symbol - 239A)
+20E3 COMBINING ENCLOSING KEYCAP
+20E4 COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+ x (white up-pointing triangle - 25B3)
+@ Additional diacritical marks for symbols
+20E5 COMBINING REVERSE SOLIDUS OVERLAY
+ x (reverse solidus - 005C)
+20E6 COMBINING DOUBLE VERTICAL STROKE OVERLAY
+ = z notation finite function diacritic
+ x (double vertical line - 2016)
+20E7 COMBINING ANNUITY SYMBOL
+ = actuarial bend
+ x (right ceiling - 2309)
+20E8 COMBINING TRIPLE UNDERDOT
+20E9 COMBINING WIDE BRIDGE ABOVE
+ = contraction operator
+ * extends the full width of the base character
+ x (combining bridge above - 0346)
+20EA COMBINING LEFTWARDS ARROW OVERLAY
+ x (leftwards arrow - 2190)
+20EB COMBINING LONG DOUBLE SOLIDUS OVERLAY
+ = long double slash overlay
+@@ 2100 Letterlike Symbols 214F
+@ Letterlike symbols
+@+ Some of the letterlike symbols are intended to complete the set of mathematical alphanumeric symbols starting at U+1D400.
+2100 ACCOUNT OF
+ # 0061 002F 0063
+2101 ADDRESSED TO THE SUBJECT
+ # 0061 002F 0073
+2102 DOUBLE-STRUCK CAPITAL C
+ = the set of complex numbers
+ # <font> 0043 latin capital letter c
+2103 DEGREE CELSIUS
+ = degrees Centigrade
+ # 00B0 0043
+2104 CENTRE LINE SYMBOL
+ = clone
+2105 CARE OF
+ # 0063 002F 006F
+2106 CADA UNA
+ # 0063 002F 0075
+2107 EULER CONSTANT
+ x (latin capital letter e - 0045)
+ # 0190 latin capital letter open e
+2108 SCRUPLE
+2109 DEGREE FAHRENHEIT
+ # 00B0 0046
+210A SCRIPT SMALL G
+ = real number symbol
+ # <font> 0067 latin small letter g
+210B SCRIPT CAPITAL H
+ = Hamiltonian operator
+ # <font> 0048 latin capital letter h
+210C BLACK-LETTER CAPITAL H
+ = Hilbert space
+ # <font> 0048 latin capital letter h
+210D DOUBLE-STRUCK CAPITAL H
+ # <font> 0048 latin capital letter h
+210E PLANCK CONSTANT
+ # <font> 0068 latin small letter h
+210F PLANCK CONSTANT OVER TWO PI
+ x (cyrillic small letter tshe - 045B)
+ # <font> 0127 latin small letter h with stroke
+2110 SCRIPT CAPITAL I
+ # <font> 0049 latin capital letter i
+2111 BLACK-LETTER CAPITAL I
+ = imaginary part
+ # <font> 0049 latin capital letter i
+2112 SCRIPT CAPITAL L
+ = Laplace transform
+ # <font> 004C latin capital letter l
+2113 SCRIPT SMALL L
+ = mathematical symbol 'ell'
+ = liter (traditional symbol)
+ * despite its character name, this symbol is derived from a special italicized version of the small letter l
+ * the SI recommended symbol for liter is 006C
+ x (mathematical script small l - 1D4C1)
+ # <font> 006C latin small letter l
+2114 L B BAR SYMBOL
+ = pounds
+2115 DOUBLE-STRUCK CAPITAL N
+ = natural number
+ # <font> 004E latin capital letter n
+2116 NUMERO SIGN
+ # 004E 006F
+2117 SOUND RECORDING COPYRIGHT
+ = published
+ = phonorecord sign
+ x (copyright sign - 00A9)
+2118 SCRIPT CAPITAL P
+ = Weierstrass elliptic function
+ * actually this has the form of a lowercase calligraphic p, despite its name
+2119 DOUBLE-STRUCK CAPITAL P
+ # <font> 0050 latin capital letter p
+211A DOUBLE-STRUCK CAPITAL Q
+ = the set of rational numbers
+ # <font> 0051 latin capital letter q
+211B SCRIPT CAPITAL R
+ = Riemann Integral
+ # <font> 0052 latin capital letter r
+211C BLACK-LETTER CAPITAL R
+ = real part
+ # <font> 0052 latin capital letter r
+211D DOUBLE-STRUCK CAPITAL R
+ = the set of real numbers
+ # <font> 0052 latin capital letter r
+211E PRESCRIPTION TAKE
+ = recipe
+ = cross ratio
+211F RESPONSE
+2120 SERVICE MARK
+ # <super> 0053 004D
+2121 TELEPHONE SIGN
+ * typical forms for this symbol may use lower case, small caps or superscripted letter shapes
+ # 0054 0045 004C
+2122 TRADE MARK SIGN
+ # <super> 0054 004D
+2123 VERSICLE
+2124 DOUBLE-STRUCK CAPITAL Z
+ = the set of integers
+ # <font> 005A latin capital letter z
+2125 OUNCE SIGN
+ x (latin small letter yogh - 021D)
+2126 OHM SIGN
+ * SI unit of resistance, named after G. S. Ohm, German physicist
+ * preferred representation is 03A9
+ : 03A9 greek capital letter omega
+2127 INVERTED OHM SIGN
+ = MHO
+ * archaic unit of conductance (= the SI unit siemens)
+ * typographically a turned greek capital letter omega
+ x (latin capital letter upsilon - 01B1)
+ x (greek capital letter omega - 03A9)
+2128 BLACK-LETTER CAPITAL Z
+ # <font> 005A latin capital letter z
+2129 TURNED GREEK SMALL LETTER IOTA
+ * unique element fulfilling a description (logic)
+ x (greek small letter iota - 03B9)
+212A KELVIN SIGN
+ : 004B latin capital letter k
+212B ANGSTROM SIGN
+ * non SI length unit (=0.1 nm) named after A. J. Ångström, Swedish physicist
+ * preferred representation is 00C5
+ : 00C5 latin capital letter a with ring above
+212C SCRIPT CAPITAL B
+ = Bernoulli function
+ # <font> 0042 latin capital letter b
+212D BLACK-LETTER CAPITAL C
+ # <font> 0043 latin capital letter c
+212E ESTIMATED SYMBOL
+ * used in European packaging
+ x (latin small letter e - 0065)
+212F SCRIPT SMALL E
+ = error
+ = natural exponent
+ # <font> 0065 latin small letter e
+2130 SCRIPT CAPITAL E
+ = emf (electromotive force)
+ # <font> 0045 latin capital letter e
+2131 SCRIPT CAPITAL F
+ = Fourier transform
+ # <font> 0046 latin capital letter f
+2132 TURNED CAPITAL F
+ x (latin capital letter f - 0046)
+2133 SCRIPT CAPITAL M
+ = M-matrix (physics)
+ = German Mark (not the current Deutsche Mark)
+ # <font> 004D latin capital letter m
+2134 SCRIPT SMALL O
+ = order, of inferior order to
+ # <font> 006F latin small letter o
+@ Hebrew letterlike math symbols
+@+ These are left-to-right characters.
+2135 ALEF SYMBOL
+ = first transfinite cardinal (countable)
+ # 05D0 hebrew letter alef
+2136 BET SYMBOL
+ = second transfinite cardinal (the continuum)
+ # 05D1 hebrew letter bet
+2137 GIMEL SYMBOL
+ = third transfinite cardinal (functions of a real variable)
+ # 05D2 hebrew letter gimel
+2138 DALET SYMBOL
+ = fourth transfinite cardinal
+ # 05D3 hebrew letter dalet
+@ Additional letterlike symbols
+2139 INFORMATION SOURCE
+ * intended for use with 20DD
+ # <font> 0069 latin small letter i
+213A ROTATED CAPITAL Q
+ * a binding signature mark
+213B FACSIMILE SIGN
+ * typical forms for this symbol may use lower case, small caps or superscripted letter shapes
+ x (telephone sign - 2121)
+ # 0046 0041 0058
+213C DOUBLE-STRUCK SMALL PI
+ # <font> 03C0 greek small letter pi
+213D DOUBLE-STRUCK SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+213E DOUBLE-STRUCK CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+213F DOUBLE-STRUCK CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+@ Double-struck large operator
+2140 DOUBLE-STRUCK N-ARY SUMMATION
+ # <font> 2211 n-ary summation
+@ Additional letterlike symbols
+2141 TURNED SANS-SERIF CAPITAL G
+ = game
+2142 TURNED SANS-SERIF CAPITAL L
+2143 REVERSED SANS-SERIF CAPITAL L
+2144 TURNED SANS-SERIF CAPITAL Y
+@ Double-struck italic mathematical symbols
+@+ These stylized mathematical symbols are used in some documents to distinguish special mathematical usages from ordinary variables.
+2145 DOUBLE-STRUCK ITALIC CAPITAL D
+ * sometimes used for the differential
+ # <font> 0044 latin capital letter d
+2146 DOUBLE-STRUCK ITALIC SMALL D
+ * sometimes used for the differential
+ # <font> 0064 latin small letter d
+2147 DOUBLE-STRUCK ITALIC SMALL E
+ * sometimes used for the natural exponent
+ # <font> 0065 latin small letter e
+2148 DOUBLE-STRUCK ITALIC SMALL I
+ * sometimes used for the imaginary unit
+ # <font> 0069 latin small letter i
+2149 DOUBLE-STRUCK ITALIC SMALL J
+ * sometimes used for the imaginary unit
+ # <font> 006A latin small letter j
+@ Additional letterlike symbols
+214A PROPERTY LINE
+214B TURNED AMPERSAND
+ * used in linear logic
+ x (ampersand - 0026)
+214C PER SIGN
+ * abbreviates the word 'per'
+@@ 2150 Number Forms 218F
+@ Fractions
+@+ Other fraction number forms are found in the Latin-1 Supplement block.
+ x (vulgar fraction one quarter - 00BC)
+ x (vulgar fraction one half - 00BD)
+ x (vulgar fraction three quarters - 00BE)
+2153 VULGAR FRACTION ONE THIRD
+ # <fraction> 0031 2044 0033
+2154 VULGAR FRACTION TWO THIRDS
+ # <fraction> 0032 2044 0033
+2155 VULGAR FRACTION ONE FIFTH
+ # <fraction> 0031 2044 0035
+2156 VULGAR FRACTION TWO FIFTHS
+ # <fraction> 0032 2044 0035
+2157 VULGAR FRACTION THREE FIFTHS
+ # <fraction> 0033 2044 0035
+2158 VULGAR FRACTION FOUR FIFTHS
+ # <fraction> 0034 2044 0035
+2159 VULGAR FRACTION ONE SIXTH
+ # <fraction> 0031 2044 0036
+215A VULGAR FRACTION FIVE SIXTHS
+ # <fraction> 0035 2044 0036
+215B VULGAR FRACTION ONE EIGHTH
+ # <fraction> 0031 2044 0038
+215C VULGAR FRACTION THREE EIGHTHS
+ # <fraction> 0033 2044 0038
+215D VULGAR FRACTION FIVE EIGHTHS
+ # <fraction> 0035 2044 0038
+215E VULGAR FRACTION SEVEN EIGHTHS
+ # <fraction> 0037 2044 0038
+215F FRACTION NUMERATOR ONE
+ # <fraction> 0031 2044
+@ Roman numerals
+2160 ROMAN NUMERAL ONE
+ # 0049 latin capital letter i
+2161 ROMAN NUMERAL TWO
+ # 0049 0049
+2162 ROMAN NUMERAL THREE
+ # 0049 0049 0049
+2163 ROMAN NUMERAL FOUR
+ # 0049 0056
+2164 ROMAN NUMERAL FIVE
+ # 0056 latin capital letter v
+2165 ROMAN NUMERAL SIX
+ # 0056 0049
+2166 ROMAN NUMERAL SEVEN
+ # 0056 0049 0049
+2167 ROMAN NUMERAL EIGHT
+ # 0056 0049 0049 0049
+2168 ROMAN NUMERAL NINE
+ # 0049 0058
+2169 ROMAN NUMERAL TEN
+ # 0058 latin capital letter x
+216A ROMAN NUMERAL ELEVEN
+ # 0058 0049
+216B ROMAN NUMERAL TWELVE
+ # 0058 0049 0049
+216C ROMAN NUMERAL FIFTY
+ # 004C latin capital letter l
+216D ROMAN NUMERAL ONE HUNDRED
+ # 0043 latin capital letter c
+216E ROMAN NUMERAL FIVE HUNDRED
+ # 0044 latin capital letter d
+216F ROMAN NUMERAL ONE THOUSAND
+ # 004D latin capital letter m
+2170 SMALL ROMAN NUMERAL ONE
+ # 0069 latin small letter i
+2171 SMALL ROMAN NUMERAL TWO
+ # 0069 0069
+2172 SMALL ROMAN NUMERAL THREE
+ # 0069 0069 0069
+2173 SMALL ROMAN NUMERAL FOUR
+ # 0069 0076
+2174 SMALL ROMAN NUMERAL FIVE
+ # 0076 latin small letter v
+2175 SMALL ROMAN NUMERAL SIX
+ # 0076 0069
+2176 SMALL ROMAN NUMERAL SEVEN
+ # 0076 0069 0069
+2177 SMALL ROMAN NUMERAL EIGHT
+ # 0076 0069 0069 0069
+2178 SMALL ROMAN NUMERAL NINE
+ # 0069 0078
+2179 SMALL ROMAN NUMERAL TEN
+ # 0078 latin small letter x
+217A SMALL ROMAN NUMERAL ELEVEN
+ # 0078 0069
+217B SMALL ROMAN NUMERAL TWELVE
+ # 0078 0069 0069
+217C SMALL ROMAN NUMERAL FIFTY
+ # 006C latin small letter l
+217D SMALL ROMAN NUMERAL ONE HUNDRED
+ # 0063 latin small letter c
+217E SMALL ROMAN NUMERAL FIVE HUNDRED
+ # 0064 latin small letter d
+217F SMALL ROMAN NUMERAL ONE THOUSAND
+ # 006D latin small letter m
+2180 ROMAN NUMERAL ONE THOUSAND C D
+2181 ROMAN NUMERAL FIVE THOUSAND
+2182 ROMAN NUMERAL TEN THOUSAND
+2183 ROMAN NUMERAL REVERSED ONE HUNDRED
+ = apostrophic C
+ * used in combination with C and I to form large numbers
+@@ 2190 Arrows 21FF
+@ Arrows
+2190 LEFTWARDS ARROW
+ x (combining leftwards arrow overlay - 20EA)
+2191 UPWARDS ARROW
+ * IPA: egressive airflow
+2192 RIGHTWARDS ARROW
+ = z notation total function
+2193 DOWNWARDS ARROW
+ * IPA: ingressive airflow
+2194 LEFT RIGHT ARROW
+ = z notation relation
+2195 UP DOWN ARROW
+2196 NORTH WEST ARROW
+2197 NORTH EAST ARROW
+2198 SOUTH EAST ARROW
+2199 SOUTH WEST ARROW
+219A LEFTWARDS ARROW WITH STROKE
+ * negation of 2190
+ : 2190 0338
+219B RIGHTWARDS ARROW WITH STROKE
+ * negation of 2192
+ : 2192 0338
+219C LEFTWARDS WAVE ARROW
+219D RIGHTWARDS WAVE ARROW
+219E LEFTWARDS TWO HEADED ARROW
+ = fast cursor left
+219F UPWARDS TWO HEADED ARROW
+ = fast cursor up
+21A0 RIGHTWARDS TWO HEADED ARROW
+ = z notation total surjection
+ = fast cursor right
+21A1 DOWNWARDS TWO HEADED ARROW
+ = form feed
+ = fast cursor down
+21A2 LEFTWARDS ARROW WITH TAIL
+21A3 RIGHTWARDS ARROW WITH TAIL
+ = z notation total injection
+21A4 LEFTWARDS ARROW FROM BAR
+21A5 UPWARDS ARROW FROM BAR
+21A6 RIGHTWARDS ARROW FROM BAR
+ = z notation maplet
+21A7 DOWNWARDS ARROW FROM BAR
+ = depth symbol
+21A8 UP DOWN ARROW WITH BASE
+21A9 LEFTWARDS ARROW WITH HOOK
+21AA RIGHTWARDS ARROW WITH HOOK
+21AB LEFTWARDS ARROW WITH LOOP
+21AC RIGHTWARDS ARROW WITH LOOP
+21AD LEFT RIGHT WAVE ARROW
+21AE LEFT RIGHT ARROW WITH STROKE
+ * negation of 2194
+ : 2194 0338
+21AF DOWNWARDS ZIGZAG ARROW
+ = electrolysis
+21B0 UPWARDS ARROW WITH TIP LEFTWARDS
+21B1 UPWARDS ARROW WITH TIP RIGHTWARDS
+21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS
+21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
+21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+ = line feed
+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
+ * may indicate a carriage return or new line
+ x (return symbol - 23CE)
+21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
+21B7 CLOCKWISE TOP SEMICIRCLE ARROW
+21B8 NORTH WEST ARROW TO LONG BAR
+ = home
+21B9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+ = tab with shift tab
+21BA ANTICLOCKWISE OPEN CIRCLE ARROW
+21BB CLOCKWISE OPEN CIRCLE ARROW
+21BC LEFTWARDS HARPOON WITH BARB UPWARDS
+21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS
+21BE UPWARDS HARPOON WITH BARB RIGHTWARDS
+21BF UPWARDS HARPOON WITH BARB LEFTWARDS
+21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS
+21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS
+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+21C7 LEFTWARDS PAIRED ARROWS
+21C8 UPWARDS PAIRED ARROWS
+21C9 RIGHTWARDS PAIRED ARROWS
+21CA DOWNWARDS PAIRED ARROWS
+21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+21CD LEFTWARDS DOUBLE ARROW WITH STROKE
+ * negation of 21D0
+ : 21D0 0338
+21CE LEFT RIGHT DOUBLE ARROW WITH STROKE
+ * negation of 21D4
+ : 21D4 0338
+21CF RIGHTWARDS DOUBLE ARROW WITH STROKE
+ * negation of 21D2
+ : 21D2 0338
+21D0 LEFTWARDS DOUBLE ARROW
+21D1 UPWARDS DOUBLE ARROW
+21D2 RIGHTWARDS DOUBLE ARROW
+21D3 DOWNWARDS DOUBLE ARROW
+21D4 LEFT RIGHT DOUBLE ARROW
+21D5 UP DOWN DOUBLE ARROW
+21D6 NORTH WEST DOUBLE ARROW
+21D7 NORTH EAST DOUBLE ARROW
+21D8 SOUTH EAST DOUBLE ARROW
+21D9 SOUTH WEST DOUBLE ARROW
+21DA LEFTWARDS TRIPLE ARROW
+21DB RIGHTWARDS TRIPLE ARROW
+21DC LEFTWARDS SQUIGGLE ARROW
+21DD RIGHTWARDS SQUIGGLE ARROW
+21DE UPWARDS ARROW WITH DOUBLE STROKE
+ = page up
+21DF DOWNWARDS ARROW WITH DOUBLE STROKE
+ = page down
+21E0 LEFTWARDS DASHED ARROW
+21E1 UPWARDS DASHED ARROW
+21E2 RIGHTWARDS DASHED ARROW
+21E3 DOWNWARDS DASHED ARROW
+21E4 LEFTWARDS ARROW TO BAR
+ = leftward tab
+21E5 RIGHTWARDS ARROW TO BAR
+ = rightward tab
+21E6 LEFTWARDS WHITE ARROW
+21E7 UPWARDS WHITE ARROW
+ = shift
+21E8 RIGHTWARDS WHITE ARROW
+21E9 DOWNWARDS WHITE ARROW
+21EA UPWARDS WHITE ARROW FROM BAR
+ = caps lock
+21EB UPWARDS WHITE ARROW ON PEDESTAL
+ = level 2 lock
+21EC UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+ = caps lock
+21ED UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+ = numerics lock
+21EE UPWARDS WHITE DOUBLE ARROW
+ = level 3 select
+21EF UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+ = level 3 lock
+21F0 RIGHTWARDS WHITE ARROW FROM WALL
+ = group lock
+21F1 NORTH WEST ARROW TO CORNER
+ = home
+21F2 SOUTH EAST ARROW TO CORNER
+ = end
+21F3 UP DOWN WHITE ARROW
+ = scrolling
+21F4 RIGHT ARROW WITH SMALL CIRCLE
+21F5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+21F6 THREE RIGHTWARDS ARROWS
+21F7 LEFTWARDS ARROW WITH VERTICAL STROKE
+21F8 RIGHTWARDS ARROW WITH VERTICAL STROKE
+ = z notation partial function
+21F9 LEFT RIGHT ARROW WITH VERTICAL STROKE
+ = z notation partial relation
+21FA LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+21FB RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+ = z notation finite function
+21FC LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+ = z notation finite relation
+21FD LEFTWARDS OPEN-HEADED ARROW
+21FE RIGHTWARDS OPEN-HEADED ARROW
+21FF LEFT RIGHT OPEN-HEADED ARROW
+@@ 2200 Mathematical Operators 22FF
+@ Miscellaneous mathematical symbols
+2200 FOR ALL
+ = universal quantifier
+2201 COMPLEMENT
+ x (latin letter stretched c - 0297)
+2202 PARTIAL DIFFERENTIAL
+2203 THERE EXISTS
+ = existential quantifier
+2204 THERE DOES NOT EXIST
+ : 2203 0338
+2205 EMPTY SET
+ = null set
+ * used in linguistics to indicate a null morpheme or phonological "zero"
+ x (latin capital letter o with stroke - 00D8)
+ x (diameter sign - 2300)
+2206 INCREMENT
+ = Laplace operator
+ = forward difference
+ x (greek capital letter delta - 0394)
+ x (white up-pointing triangle - 25B3)
+2207 NABLA
+ = backward difference
+ = gradient, del
+ * used for Laplacian operator (written with superscript 2)
+ x (white down-pointing triangle - 25BD)
+@ Set membership
+2208 ELEMENT OF
+2209 NOT AN ELEMENT OF
+ : 2208 0338
+220A SMALL ELEMENT OF
+ * originates in math pi fonts; not the straight epsilon
+ x (greek lunate epsilon symbol - 03F5)
+220B CONTAINS AS MEMBER
+ = such that
+220C DOES NOT CONTAIN AS MEMBER
+ : 220B 0338
+220D SMALL CONTAINS AS MEMBER
+ x (greek reversed lunate epsilon symbol - 03F6)
+@ Miscellaneous mathematical symbol
+220E END OF PROOF
+ = Q.E.D.
+ x (triangular bullet - 2023)
+ x (black vertical rectangle - 25AE)
+@ N-ary operators
+220F N-ARY PRODUCT
+ = product sign
+ x (greek capital letter pi - 03A0)
+2210 N-ARY COPRODUCT
+ = coproduct sign
+2211 N-ARY SUMMATION
+ = summation sign
+ x (greek capital letter sigma - 03A3)
+@ Operators
+2212 MINUS SIGN
+ x (hyphen-minus - 002D)
+2213 MINUS-OR-PLUS SIGN
+ x (plus-minus sign - 00B1)
+2214 DOT PLUS
+2215 DIVISION SLASH
+ * generic division operator
+ x (solidus - 002F)
+ x (fraction slash - 2044)
+2216 SET MINUS
+ x (reverse solidus - 005C)
+2217 ASTERISK OPERATOR
+ x (asterisk - 002A)
+2218 RING OPERATOR
+ = composite function
+ = APL jot
+ x (degree sign - 00B0)
+ x (white bullet - 25E6)
+2219 BULLET OPERATOR
+ x (middle dot - 00B7)
+ x (bullet - 2022)
+ x (one dot leader - 2024)
+221A SQUARE ROOT
+ = radical sign
+ x (check mark - 2713)
+221B CUBE ROOT
+221C FOURTH ROOT
+221D PROPORTIONAL TO
+ x (greek small letter alpha - 03B1)
+@ Miscellaneous mathematical symbols
+221E INFINITY
+221F RIGHT ANGLE
+2220 ANGLE
+2221 MEASURED ANGLE
+2222 SPHERICAL ANGLE
+ = angle arc
+@ Operators
+2223 DIVIDES
+ = such that
+ = APL stile
+ x (vertical line - 007C)
+ x (latin letter dental click - 01C0)
+2224 DOES NOT DIVIDE
+ : 2223 0338
+2225 PARALLEL TO
+ x (latin letter lateral click - 01C1)
+ x (double vertical line - 2016)
+2226 NOT PARALLEL TO
+ : 2225 0338
+@ Logical and set operators
+2227 LOGICAL AND
+ = wedge, conjunction
+ x (n-ary logical and - 22C0)
+ x (up arrowhead - 2303)
+2228 LOGICAL OR
+ = vee, disjunction
+ x (n-ary logical or - 22C1)
+ x (down arrowhead - 2304)
+2229 INTERSECTION
+ = cap, hat
+ x (n-ary intersection - 22C2)
+222A UNION
+ = cup
+ x (n-ary union - 22C3)
+@ Integrals
+222B INTEGRAL
+ x (latin small letter esh - 0283)
+222C DOUBLE INTEGRAL
+ # 222B 222B
+222D TRIPLE INTEGRAL
+ x (quadruple integral operator - 2A0C)
+ # 222B 222B 222B
+222E CONTOUR INTEGRAL
+ x (integral around a point operator - 2A15)
+222F SURFACE INTEGRAL
+ # 222E 222E
+2230 VOLUME INTEGRAL
+ # 222E 222E 222E
+2231 CLOCKWISE INTEGRAL
+2232 CLOCKWISE CONTOUR INTEGRAL
+2233 ANTICLOCKWISE CONTOUR INTEGRAL
+ * clockwise or anticlockwise arrows do not reverse during layout mirroring
+@ Miscellaneous mathematical symbols
+2234 THEREFORE
+2235 BECAUSE
+@ Relations
+2236 RATIO
+ x (colon - 003A)
+2237 PROPORTION
+@ Operator
+2238 DOT MINUS
+ = symmetric difference
+@ Relation
+2239 EXCESS
+@ Operator
+223A GEOMETRIC PROPORTION
+@ Relations
+223B HOMOTHETIC
+ x (tilde operator with rising dots - 2A6B)
+223C TILDE OPERATOR
+ = varies with (proportional to)
+ = difference between
+ = similar to
+ = not
+ = cycle
+ = APL tilde
+ x (tilde - 007E)
+ x (not sign - 00AC)
+ x (small tilde - 02DC)
+223D REVERSED TILDE (lazy S)
+ = lazy S
+ * reversed tilde and lazy S are glyph variants
+223E INVERTED LAZY S
+ = most positive
+@ Miscellaneous mathematical symbol
+223F SINE WAVE
+ = alternating current
+@ Operator
+2240 WREATH PRODUCT
+@ Relations
+2241 NOT TILDE
+ : 223C 0338
+2242 MINUS TILDE
+2243 ASYMPTOTICALLY EQUAL TO
+2244 NOT ASYMPTOTICALLY EQUAL TO
+ : 2243 0338
+2245 APPROXIMATELY EQUAL TO
+2246 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+ : 2245 0338
+2248 ALMOST EQUAL TO
+ = asymptotic to
+2249 NOT ALMOST EQUAL TO
+ : 2248 0338
+224A ALMOST EQUAL OR EQUAL TO
+224B TRIPLE TILDE
+224C ALL EQUAL TO
+ * reversed tilde and lazy S are glyph variants
+224D EQUIVALENT TO
+224E GEOMETRICALLY EQUIVALENT TO
+224F DIFFERENCE BETWEEN
+2250 APPROACHES THE LIMIT
+2251 GEOMETRICALLY EQUAL TO
+2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ = nearly equals
+2253 IMAGE OF OR APPROXIMATELY EQUAL TO
+2254 COLON EQUALS
+2255 EQUALS COLON
+2256 RING IN EQUAL TO
+2257 RING EQUAL TO
+ = approximately equal to
+2258 CORRESPONDS TO
+2259 ESTIMATES
+ = corresponds to
+225A EQUIANGULAR TO
+225B STAR EQUALS
+225C DELTA EQUAL TO
+ = equiangular
+ = equal to by definition
+225D EQUAL TO BY DEFINITION
+225E MEASURED BY
+225F QUESTIONED EQUAL TO
+2260 NOT EQUAL TO
+ x (equals sign - 003D)
+ x (latin letter alveolar click - 01C2)
+ : 003D 0338
+2261 IDENTICAL TO
+2262 NOT IDENTICAL TO
+ : 2261 0338
+2263 STRICTLY EQUIVALENT TO
+2264 LESS-THAN OR EQUAL TO
+2265 GREATER-THAN OR EQUAL TO
+2266 LESS-THAN OVER EQUAL TO
+2267 GREATER-THAN OVER EQUAL TO
+2268 LESS-THAN BUT NOT EQUAL TO
+2269 GREATER-THAN BUT NOT EQUAL TO
+226A MUCH LESS-THAN
+ x (left-pointing double angle quotation mark - 00AB)
+226B MUCH GREATER-THAN
+ x (right-pointing double angle quotation mark - 00BB)
+226C BETWEEN
+ = plaintiff, quantic
+226D NOT EQUIVALENT TO
+ : 224D 0338
+226E NOT LESS-THAN
+ : 003C 0338
+226F NOT GREATER-THAN
+ : 003E 0338
+2270 NEITHER LESS-THAN NOR EQUAL TO
+ : 2264 0338
+2271 NEITHER GREATER-THAN NOR EQUAL TO
+ : 2265 0338
+2272 LESS-THAN OR EQUIVALENT TO
+2273 GREATER-THAN OR EQUIVALENT TO
+2274 NEITHER LESS-THAN NOR EQUIVALENT TO
+ : 2272 0338
+2275 NEITHER GREATER-THAN NOR EQUIVALENT TO
+ : 2273 0338
+2276 LESS-THAN OR GREATER-THAN
+2277 GREATER-THAN OR LESS-THAN
+2278 NEITHER LESS-THAN NOR GREATER-THAN
+ : 2276 0338
+2279 NEITHER GREATER-THAN NOR LESS-THAN
+ : 2277 0338
+227A PRECEDES
+ = lower rank than
+ x (precedes under relation - 22B0)
+227B SUCCEEDS
+ = higher rank than
+ x (succeeds under relation - 22B1)
+227C PRECEDES OR EQUAL TO
+227D SUCCEEDS OR EQUAL TO
+227E PRECEDES OR EQUIVALENT TO
+227F SUCCEEDS OR EQUIVALENT TO
+2280 DOES NOT PRECEDE
+ : 227A 0338
+2281 DOES NOT SUCCEED
+ : 227B 0338
+2282 SUBSET OF
+ = included in set
+2283 SUPERSET OF
+ = includes in set
+2284 NOT A SUBSET OF
+ : 2282 0338
+2285 NOT A SUPERSET OF
+ : 2283 0338
+2286 SUBSET OF OR EQUAL TO
+2287 SUPERSET OF OR EQUAL TO
+2288 NEITHER A SUBSET OF NOR EQUAL TO
+ : 2286 0338
+2289 NEITHER A SUPERSET OF NOR EQUAL TO
+ : 2287 0338
+228A SUBSET OF WITH NOT EQUAL TO
+228B SUPERSET OF WITH NOT EQUAL TO
+@ Operators
+228C MULTISET
+228D MULTISET MULTIPLICATION
+ x (n-ary union operator with dot - 2A03)
+ x (intersection with dot - 2A40)
+228E MULTISET UNION
+ = z notation bag addition
+ x (n-ary union operator with plus - 2A04)
+@ Relations
+228F SQUARE IMAGE OF
+2290 SQUARE ORIGINAL OF
+2291 SQUARE IMAGE OF OR EQUAL TO
+2292 SQUARE ORIGINAL OF OR EQUAL TO
+@ Operators
+2293 SQUARE CAP
+ x (n-ary square intersection operator - 2A05)
+2294 SQUARE CUP
+2295 CIRCLED PLUS
+ = direct sum
+ = vector pointing into page
+ x (earth - 2641)
+ x (n-ary circled plus operator - 2A01)
+2296 CIRCLED MINUS
+ = symmetric difference
+ x (circle with horizontal bar - 29B5)
+2297 CIRCLED TIMES
+ = tensor product
+ = vector pointing into page
+ x (n-ary circled times operator - 2A02)
+2298 CIRCLED DIVISION SLASH
+2299 CIRCLED DOT OPERATOR
+ = direct product
+ = vector pointing out of page
+ x (latin letter bilabial click - 0298)
+ x (sun - 2609)
+ x (n-ary circled dot operator - 2A00)
+229A CIRCLED RING OPERATOR
+ x (apl functional symbol circle jot - 233E)
+ x (bullseye - 25CE)
+229B CIRCLED ASTERISK OPERATOR
+ x (apl functional symbol circle star - 235F)
+229C CIRCLED EQUALS
+229D CIRCLED DASH
+229E SQUARED PLUS
+229F SQUARED MINUS
+22A0 SQUARED TIMES
+ x (ballot box with x - 2612)
+22A1 SQUARED DOT OPERATOR
+22A2 RIGHT TACK
+ = turnstile
+ = proves, implies, yields
+ = reducible
+22A3 LEFT TACK
+ = reverse turnstile
+ = non-theorem, does not yield
+@ Miscellaneous mathematical symbols
+22A4 DOWN TACK
+ = top
+22A5 UP TACK
+ = base, bottom
+ x (perpendicular - 27C2)
+@ Relations
+22A6 ASSERTION
+ = reduces to
+22A7 MODELS
+22A8 TRUE
+ = statement is true, valid
+ = is a tautology
+ = satisfies
+ = results in
+22A9 FORCES
+22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE
+22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22AC DOES NOT PROVE
+ : 22A2 0338
+22AD NOT TRUE
+ : 22A8 0338
+22AE DOES NOT FORCE
+ : 22A9 0338
+22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+ : 22AB 0338
+22B0 PRECEDES UNDER RELATION
+ x (precedes - 227A)
+22B1 SUCCEEDS UNDER RELATION
+ x (succeeds - 227B)
+22B2 NORMAL SUBGROUP OF
+ x (white left-pointing pointer - 25C5)
+22B3 CONTAINS AS NORMAL SUBGROUP
+ x (white right-pointing pointer - 25BB)
+22B4 NORMAL SUBGROUP OF OR EQUAL TO
+22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+22B6 ORIGINAL OF
+22B7 IMAGE OF
+22B8 MULTIMAP
+22B9 HERMITIAN CONJUGATE MATRIX
+@ Operators
+22BA INTERCALATE
+22BB XOR
+22BC NAND
+ x (projective - 2305)
+22BD NOR
+@ Miscellaneous mathematical symbols
+22BE RIGHT ANGLE WITH ARC
+22BF RIGHT TRIANGLE
+@ N-ary operators
+22C0 N-ARY LOGICAL AND
+ * also used to denote the universal quantifier
+ x (logical and - 2227)
+22C1 N-ARY LOGICAL OR
+ * also used to denote the existential quantifier
+ x (logical or - 2228)
+22C2 N-ARY INTERSECTION
+ = z notation generalised intersection
+ x (intersection - 2229)
+22C3 N-ARY UNION
+ = z notation generalised union
+ x (union - 222A)
+@ Operators
+22C4 DIAMOND OPERATOR
+ x (white diamond - 25C7)
+22C5 DOT OPERATOR
+ x (middle dot - 00B7)
+22C6 STAR OPERATOR
+ * APL
+ x (arabic five pointed star - 066D)
+ x (black star - 2605)
+22C7 DIVISION TIMES
+@ Relation
+22C8 BOWTIE
+ x (ocr bow tie - 2445)
+@ Operators
+22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+22CB LEFT SEMIDIRECT PRODUCT
+22CC RIGHT SEMIDIRECT PRODUCT
+ x (caret insertion point - 2041)
+@ Relation
+22CD REVERSED TILDE EQUALS
+@ Logical operators
+22CE CURLY LOGICAL OR
+22CF CURLY LOGICAL AND
+@ Relations
+22D0 DOUBLE SUBSET
+22D1 DOUBLE SUPERSET
+@ Operators
+22D2 DOUBLE INTERSECTION
+22D3 DOUBLE UNION
+@ Relations
+22D4 PITCHFORK
+ = proper intersection
+22D5 EQUAL AND PARALLEL TO
+ x (viewdata square - 2317)
+22D6 LESS-THAN WITH DOT
+22D7 GREATER-THAN WITH DOT
+22D8 VERY MUCH LESS-THAN
+22D9 VERY MUCH GREATER-THAN
+22DA LESS-THAN EQUAL TO OR GREATER-THAN
+22DB GREATER-THAN EQUAL TO OR LESS-THAN
+22DC EQUAL TO OR LESS-THAN
+22DD EQUAL TO OR GREATER-THAN
+22DE EQUAL TO OR PRECEDES
+22DF EQUAL TO OR SUCCEEDS
+22E0 DOES NOT PRECEDE OR EQUAL
+ : 227C 0338
+22E1 DOES NOT SUCCEED OR EQUAL
+ : 227D 0338
+22E2 NOT SQUARE IMAGE OF OR EQUAL TO
+ : 2291 0338
+22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO
+ : 2292 0338
+22E4 SQUARE IMAGE OF OR NOT EQUAL TO
+22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO
+22E6 LESS-THAN BUT NOT EQUIVALENT TO
+22E7 GREATER-THAN BUT NOT EQUIVALENT TO
+22E8 PRECEDES BUT NOT EQUIVALENT TO
+22E9 SUCCEEDS BUT NOT EQUIVALENT TO
+22EA NOT NORMAL SUBGROUP OF
+ : 22B2 0338
+22EB DOES NOT CONTAIN AS NORMAL SUBGROUP
+ : 22B3 0338
+22EC NOT NORMAL SUBGROUP OF OR EQUAL TO
+ : 22B4 0338
+22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+ : 22B5 0338
+22EE VERTICAL ELLIPSIS
+ * these four ellipses are used for matrix row/column elision
+ x (tricolon - 205D)
+ x (horizontal ellipsis - 2026)
+ x (presentation form for vertical horizontal ellipsis - FE19)
+22EF MIDLINE HORIZONTAL ELLIPSIS
+22F0 UP RIGHT DIAGONAL ELLIPSIS
+22F1 DOWN RIGHT DIAGONAL ELLIPSIS
+22F2 ELEMENT OF WITH LONG HORIZONTAL STROKE
+22F3 ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F4 SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22F5 ELEMENT OF WITH DOT ABOVE
+22F6 ELEMENT OF WITH OVERBAR
+22F7 SMALL ELEMENT OF WITH OVERBAR
+22F8 ELEMENT OF WITH UNDERBAR
+22F9 ELEMENT OF WITH TWO HORIZONTAL STROKES
+22FA CONTAINS WITH LONG HORIZONTAL STROKE
+22FB CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FC SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+22FD CONTAINS WITH OVERBAR
+22FE SMALL CONTAINS WITH OVERBAR
+22FF Z NOTATION BAG MEMBERSHIP
+@@ 2300 Miscellaneous Technical 23FF
+@ Miscellaneous technical
+2300 DIAMETER SIGN
+ x (empty set - 2205)
+2301 ELECTRIC ARROW
+ * from ISO 2047
+ * symbol for End of Transmission
+2302 HOUSE
+2303 UP ARROWHEAD
+ x (circumflex accent - 005E)
+ x (modifier letter up arrowhead - 02C4)
+ x (caret - 2038)
+ x (logical and - 2227)
+2304 DOWN ARROWHEAD
+ x (modifier letter down arrowhead - 02C5)
+ x (logical or - 2228)
+ x (countersink - 2335)
+2305 PROJECTIVE
+ x (nand - 22BC)
+2306 PERSPECTIVE
+2307 WAVY LINE
+ x (wavy dash - 3030)
+@ Corner brackets
+@+ The ceiling and floor characters are recommended for general-purpose corner brackets, rather than the CJK corner brackets, which are wide quotation marks.
+2308 LEFT CEILING
+ = APL upstile
+ x (left corner bracket - 300C)
+2309 RIGHT CEILING
+ x (combining annuity symbol - 20E7)
+230A LEFT FLOOR
+ = APL downstile
+230B RIGHT FLOOR
+ x (right corner bracket - 300D)
+@ Crops
+230C BOTTOM RIGHT CROP
+ * set of four "crop" corners, arranged facing outward
+230D BOTTOM LEFT CROP
+230E TOP RIGHT CROP
+230F TOP LEFT CROP
+@ Miscellaneous technical
+2310 REVERSED NOT SIGN
+ = beginning of line
+ x (not sign - 00AC)
+2311 SQUARE LOZENGE
+ = Kissen (pillow)
+ * used as a command delimiter in some very old computers
+2312 ARC
+ x (upper half circle - 25E0)
+2313 SEGMENT
+2314 SECTOR
+2315 TELEPHONE RECORDER
+2316 POSITION INDICATOR
+2317 VIEWDATA SQUARE
+ x (equal and parallel to - 22D5)
+2318 PLACE OF INTEREST SIGN
+ = COMMAND KEY
+2319 TURNED NOT SIGN
+ = line marker
+@ GUI icons
+231A WATCH
+231B HOURGLASS
+@ Quine corners
+231C TOP LEFT CORNER
+ * set of four "quine" corners, for quincuncial arrangement
+231D TOP RIGHT CORNER
+231E BOTTOM LEFT CORNER
+231F BOTTOM RIGHT CORNER
+@ Integral pieces
+2320 TOP HALF INTEGRAL
+ x (integral extension - 23AE)
+2321 BOTTOM HALF INTEGRAL
+@ Frown and smile
+2322 FROWN
+ x (character tie - 2040)
+2323 SMILE
+ x (undertie - 203F)
+@ Keyboard symbols
+2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+ = ENTER KEY
+2325 OPTION KEY
+2326 ERASE TO THE RIGHT
+ = DELETE TO THE RIGHT KEY
+2327 X IN A RECTANGLE BOX
+ = CLEAR KEY
+2328 KEYBOARD
+@ Angle brackets
+@+ These are discouraged for mathematical use because of their canonical equivalence to CJK punctuation.
+2329 LEFT-POINTING ANGLE BRACKET
+ x (less-than sign - 003C)
+ x (single left-pointing angle quotation mark - 2039)
+ x (mathematical left angle bracket - 27E8)
+ : 3008 left angle bracket
+232A RIGHT-POINTING ANGLE BRACKET
+ x (greater-than sign - 003E)
+ x (single right-pointing angle quotation mark - 203A)
+ x (mathematical right angle bracket - 27E9)
+ : 3009 right angle bracket
+@ Keyboard symbol
+232B ERASE TO THE LEFT
+ = DELETE TO THE LEFT KEY
+@ Chemistry symbol
+232C BENZENE RING
+@ Drafting symbols
+232D CYLINDRICITY
+232E ALL AROUND-PROFILE
+232F SYMMETRY
+2330 TOTAL RUNOUT
+2331 DIMENSION ORIGIN
+2332 CONICAL TAPER
+2333 SLOPE
+ x (lower left triangle - 25FA)
+2334 COUNTERBORE
+ x (open box - 2423)
+2335 COUNTERSINK
+ x (down arrowhead - 2304)
+@ APL
+2336 APL FUNCTIONAL SYMBOL I-BEAM
+2337 APL FUNCTIONAL SYMBOL SQUISH QUAD
+ x (apl functional symbol quad - 2395)
+ x (white vertical rectangle - 25AF)
+ x (n-ary white vertical bar - 2AFF)
+2338 APL FUNCTIONAL SYMBOL QUAD EQUAL
+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE
+233A APL FUNCTIONAL SYMBOL QUAD DIAMOND
+233B APL FUNCTIONAL SYMBOL QUAD JOT
+ x (squared small circle - 29C7)
+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE
+233D APL FUNCTIONAL SYMBOL CIRCLE STILE
+233E APL FUNCTIONAL SYMBOL CIRCLE JOT
+ x (circled ring operator - 229A)
+ x (circled white bullet - 29BE)
+233F APL FUNCTIONAL SYMBOL SLASH BAR
+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR
+2341 APL FUNCTIONAL SYMBOL QUAD SLASH
+ x (squared rising diagonal slash - 29C4)
+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+ x (squared falling diagonal slash - 29C5)
+2343 APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+2344 APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+2345 APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+2346 APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+2349 APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+ x (reversed empty set - 29B0)
+234A APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR *
+ = up tack underbar
+ * preferred naming for APL tack symbols now follows the London Convention in ISO/IEC 13751:2000 (APL Extended)
+ x (up tack - 22A5)
+234B APL FUNCTIONAL SYMBOL DELTA STILE
+234C APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+234D APL FUNCTIONAL SYMBOL QUAD DELTA
+234E APL FUNCTIONAL SYMBOL DOWN TACK JOT *
+ = up tack jot
+ x (up tack - 22A5)
+234F APL FUNCTIONAL SYMBOL UPWARDS VANE
+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+2351 APL FUNCTIONAL SYMBOL UP TACK OVERBAR *
+ = down tack overbar
+ x (down tack - 22A4)
+ x (postal mark - 3012)
+2352 APL FUNCTIONAL SYMBOL DEL STILE
+2353 APL FUNCTIONAL SYMBOL QUAD UP CARET
+2354 APL FUNCTIONAL SYMBOL QUAD DEL
+2355 APL FUNCTIONAL SYMBOL UP TACK JOT *
+ = down tack jot
+ x (down tack - 22A4)
+2356 APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+2358 APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+2359 APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+235A APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+235B APL FUNCTIONAL SYMBOL JOT UNDERBAR
+235C APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+235D APL FUNCTIONAL SYMBOL UP SHOE JOT
+ x (intersection with dot - 2A40)
+235E APL FUNCTIONAL SYMBOL QUOTE QUAD
+235F APL FUNCTIONAL SYMBOL CIRCLE STAR
+ x (circled asterisk operator - 229B)
+2360 APL FUNCTIONAL SYMBOL QUAD COLON
+2361 APL FUNCTIONAL SYMBOL UP TACK DIAERESIS *
+ = down tack diaeresis
+ x (down tack - 22A4)
+2362 APL FUNCTIONAL SYMBOL DEL DIAERESIS
+2363 APL FUNCTIONAL SYMBOL STAR DIAERESIS
+2364 APL FUNCTIONAL SYMBOL JOT DIAERESIS
+ = hoot
+2365 APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+ = holler
+2366 APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+2367 APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+2368 APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+ = smirk
+2369 APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+236A APL FUNCTIONAL SYMBOL COMMA BAR
+236B APL FUNCTIONAL SYMBOL DEL TILDE
+236C APL FUNCTIONAL SYMBOL ZILDE
+236D APL FUNCTIONAL SYMBOL STILE TILDE
+236E APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+236F APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION
+2371 APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+2372 APL FUNCTIONAL SYMBOL UP CARET TILDE
+2373 APL FUNCTIONAL SYMBOL IOTA
+2374 APL FUNCTIONAL SYMBOL RHO
+2375 APL FUNCTIONAL SYMBOL OMEGA
+2376 APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+2377 APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+2378 APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+2379 APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+237A APL FUNCTIONAL SYMBOL ALPHA
+@ Graphics for control codes
+237B NOT CHECK MARK
+ * from ISO 2047
+ * symbol for Negative Acknowledge
+@ Miscellaneous technical
+237C RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+@ Graphics for control codes
+237D SHOULDERED OPEN BOX
+ * from ISO 9995-7
+ * keyboard symbol for No Break Space
+ x (open box - 2423)
+237E BELL SYMBOL
+ * from ISO 2047
+237F VERTICAL LINE WITH MIDDLE DOT
+ * from ISO 2047
+ * symbol for End of Medium
+@ Keyboard symbols from ISO 9995-7
+2380 INSERTION SYMBOL
+2381 CONTINUOUS UNDERLINE SYMBOL
+2382 DISCONTINUOUS UNDERLINE SYMBOL
+2383 EMPHASIS SYMBOL
+2384 COMPOSITION SYMBOL
+2385 WHITE SQUARE WITH CENTRE VERTICAL LINE
+ = center
+2386 ENTER SYMBOL
+2387 ALTERNATIVE KEY SYMBOL
+2388 HELM SYMBOL
+ = control
+ x (wheel of dharma - 2638)
+2389 CIRCLED HORIZONTAL BAR WITH NOTCH (pause)
+ = pause
+238A CIRCLED TRIANGLE DOWN (break)
+ = interrupt
+238B BROKEN CIRCLE WITH NORTHWEST ARROW (escape)
+ = escape
+238C UNDO SYMBOL
+@ Electrotechnical symbols from IR 181
+238D MONOSTABLE SYMBOL
+238E HYSTERESIS SYMBOL
+238F OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+2390 OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+2391 PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+2392 PASSIVE-PULL-UP-OUTPUT SYMBOL
+2393 DIRECT CURRENT SYMBOL FORM TWO
+2394 SOFTWARE-FUNCTION SYMBOL
+@ APL
+2395 APL FUNCTIONAL SYMBOL QUAD
+ x (apl functional symbol squish quad - 2337)
+ x (white vertical rectangle - 25AF)
+@ Keyboard symbols from ISO 9995-7
+2396 DECIMAL SEPARATOR KEY SYMBOL
+2397 PREVIOUS PAGE
+2398 NEXT PAGE
+2399 PRINT SCREEN SYMBOL
+239A CLEAR SCREEN SYMBOL
+ x (combining enclosing screen - 20E2)
+@ Bracket pieces
+239B LEFT PARENTHESIS UPPER HOOK
+239C LEFT PARENTHESIS EXTENSION
+239D LEFT PARENTHESIS LOWER HOOK
+239E RIGHT PARENTHESIS UPPER HOOK
+239F RIGHT PARENTHESIS EXTENSION
+23A0 RIGHT PARENTHESIS LOWER HOOK
+23A1 LEFT SQUARE BRACKET UPPER CORNER
+23A2 LEFT SQUARE BRACKET EXTENSION
+23A3 LEFT SQUARE BRACKET LOWER CORNER
+23A4 RIGHT SQUARE BRACKET UPPER CORNER
+23A5 RIGHT SQUARE BRACKET EXTENSION
+23A6 RIGHT SQUARE BRACKET LOWER CORNER
+23A7 LEFT CURLY BRACKET UPPER HOOK
+23A8 LEFT CURLY BRACKET MIDDLE PIECE
+23A9 LEFT CURLY BRACKET LOWER HOOK
+23AA CURLY BRACKET EXTENSION
+23AB RIGHT CURLY BRACKET UPPER HOOK
+23AC RIGHT CURLY BRACKET MIDDLE PIECE
+23AD RIGHT CURLY BRACKET LOWER HOOK
+@ Special character extensions
+23AE INTEGRAL EXTENSION
+ x (top half integral - 2320)
+ x (bottom half integral - 2321)
+23AF HORIZONTAL LINE EXTENSION
+ * used for extension of arrows
+ x (vertical line extension - 23D0)
+@ Bracket pieces
+23B0 UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+ = left moustache
+23B1 UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+ = right moustache
+@ Summation sign parts
+23B2 SUMMATION TOP
+23B3 SUMMATION BOTTOM
+@ Vertical brackets
+23B4 TOP SQUARE BRACKET
+ x (presentation form for vertical left square bracket - FE47)
+23B5 BOTTOM SQUARE BRACKET
+ x (presentation form for vertical right square bracket - FE48)
+23B6 BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+@ Terminal graphic characters
+23B7 RADICAL SYMBOL BOTTOM
+23B8 LEFT VERTICAL BOX LINE
+23B9 RIGHT VERTICAL BOX LINE
+@ Scan lines for terminal graphics
+@+ The scan line numbers here refer to old, low-resolution technology for terminals, with only 9 scan lines per fixed-size character glyph. Even-numbered scan lines are unified with box-drawing graphics.
+23BA HORIZONTAL SCAN LINE-1
+23BB HORIZONTAL SCAN LINE-3
+23BC HORIZONTAL SCAN LINE-7
+23BD HORIZONTAL SCAN LINE-9
+@ Dentistry notation symbols
+23BE DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+ x (left ceiling - 2308)
+23BF DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+ x (left floor - 230A)
+23C0 DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+23C1 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+23C2 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+23C3 DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+23C4 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+23C5 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+23C6 DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+23C7 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+23C8 DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+23C9 DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+ x (down tack - 22A4)
+ x (box drawings light down and horizontal - 252C)
+23CA DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+ x (up tack - 22A5)
+ x (box drawings light up and horizontal - 2534)
+23CB DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+ x (right ceiling - 2309)
+23CC DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+ x (right floor - 230B)
+@ Miscellaneous technical symbol
+23CD SQUARE FOOT
+@ Keyboard and UI symbols
+23CE RETURN SYMBOL
+ * may be shown with either hollow or filled glyph
+ x (downwards arrow with corner leftwards - 21B5)
+23CF EJECT SYMBOL
+ * UI symbol to eject media
+@ Special character extension
+23D0 VERTICAL LINE EXTENSION
+ * used for extension of arrows
+ x (horizontal line extension - 23AF)
+@ Metrical symbols
+23D1 METRICAL BREVE
+23D2 METRICAL LONG OVER SHORT
+23D3 METRICAL SHORT OVER LONG
+23D4 METRICAL LONG OVER TWO SHORTS
+23D5 METRICAL TWO SHORTS OVER LONG
+23D6 METRICAL TWO SHORTS JOINED
+23D7 METRICAL TRISEME
+ x (combining greek musical triseme - 1D242)
+23D8 METRICAL TETRASEME
+ x (combining greek musical tetraseme - 1D243)
+23D9 METRICAL PENTASEME
+ x (combining greek musical pentaseme - 1D244)
+@ Electrotechnical symbols
+23DA EARTH GROUND
+23DB FUSE
+@@ 2400 Control Pictures 243F
+@+ The diagonal lettering glyphs are only exemplary; alternate representations may be, and often are used in the visible display of control codes.
+@ Graphic pictures for control codes
+2400 SYMBOL FOR NULL
+2401 SYMBOL FOR START OF HEADING
+2402 SYMBOL FOR START OF TEXT
+2403 SYMBOL FOR END OF TEXT
+2404 SYMBOL FOR END OF TRANSMISSION
+2405 SYMBOL FOR ENQUIRY
+2406 SYMBOL FOR ACKNOWLEDGE
+2407 SYMBOL FOR BELL
+2408 SYMBOL FOR BACKSPACE
+2409 SYMBOL FOR HORIZONTAL TABULATION
+240A SYMBOL FOR LINE FEED
+240B SYMBOL FOR VERTICAL TABULATION
+240C SYMBOL FOR FORM FEED
+240D SYMBOL FOR CARRIAGE RETURN
+240E SYMBOL FOR SHIFT OUT
+240F SYMBOL FOR SHIFT IN
+2410 SYMBOL FOR DATA LINK ESCAPE
+2411 SYMBOL FOR DEVICE CONTROL ONE
+2412 SYMBOL FOR DEVICE CONTROL TWO
+2413 SYMBOL FOR DEVICE CONTROL THREE
+2414 SYMBOL FOR DEVICE CONTROL FOUR
+2415 SYMBOL FOR NEGATIVE ACKNOWLEDGE
+2416 SYMBOL FOR SYNCHRONOUS IDLE
+2417 SYMBOL FOR END OF TRANSMISSION BLOCK
+2418 SYMBOL FOR CANCEL
+2419 SYMBOL FOR END OF MEDIUM
+241A SYMBOL FOR SUBSTITUTE
+241B SYMBOL FOR ESCAPE
+241C SYMBOL FOR FILE SEPARATOR
+241D SYMBOL FOR GROUP SEPARATOR
+241E SYMBOL FOR RECORD SEPARATOR
+241F SYMBOL FOR UNIT SEPARATOR
+2420 SYMBOL FOR SPACE
+2421 SYMBOL FOR DELETE
+@ Specific symbols for space
+2422 BLANK SYMBOL
+ * graphic for space
+ x (latin small letter b with stroke - 0180)
+2423 OPEN BOX
+ * graphic for space
+ x (counterbore - 2334)
+@ Graphic picture for control code
+2424 SYMBOL FOR NEWLINE
+@ Keyboard symbol
+2425 SYMBOL FOR DELETE FORM TWO
+ * from ISO 9995-7
+ * keyboard symbol for undoable delete
+@ Specific symbol for control code
+2426 SYMBOL FOR SUBSTITUTE FORM TWO
+ * from ISO 2047
+ x (arabic question mark - 061F)
+@@ 2440 Optical Character Recognition 245F
+@ OCR
+2440 OCR HOOK
+2441 OCR CHAIR
+2442 OCR FORK
+2443 OCR INVERTED FORK
+2444 OCR BELT BUCKLE
+2445 OCR BOW TIE
+ x (bowtie - 22C8)
+2446 OCR BRANCH BANK IDENTIFICATION
+ = transit
+2447 OCR AMOUNT OF CHECK
+2448 OCR DASH
+ = on us
+2449 OCR CUSTOMER ACCOUNT NUMBER
+ = dash
+244A OCR DOUBLE BACKSLASH
+@@ 2460 Enclosed Alphanumerics 24FF
+@ Circled numbers
+2460 CIRCLED DIGIT ONE
+ # <circle> 0031
+2461 CIRCLED DIGIT TWO
+ # <circle> 0032
+2462 CIRCLED DIGIT THREE
+ # <circle> 0033
+2463 CIRCLED DIGIT FOUR
+ # <circle> 0034
+2464 CIRCLED DIGIT FIVE
+ # <circle> 0035
+2465 CIRCLED DIGIT SIX
+ # <circle> 0036
+2466 CIRCLED DIGIT SEVEN
+ # <circle> 0037
+2467 CIRCLED DIGIT EIGHT
+ # <circle> 0038
+2468 CIRCLED DIGIT NINE
+ # <circle> 0039
+2469 CIRCLED NUMBER TEN
+ # <circle> 0031 0030
+246A CIRCLED NUMBER ELEVEN
+ # <circle> 0031 0031
+246B CIRCLED NUMBER TWELVE
+ # <circle> 0031 0032
+246C CIRCLED NUMBER THIRTEEN
+ # <circle> 0031 0033
+246D CIRCLED NUMBER FOURTEEN
+ # <circle> 0031 0034
+246E CIRCLED NUMBER FIFTEEN
+ # <circle> 0031 0035
+246F CIRCLED NUMBER SIXTEEN
+ # <circle> 0031 0036
+2470 CIRCLED NUMBER SEVENTEEN
+ # <circle> 0031 0037
+2471 CIRCLED NUMBER EIGHTEEN
+ # <circle> 0031 0038
+2472 CIRCLED NUMBER NINETEEN
+ # <circle> 0031 0039
+2473 CIRCLED NUMBER TWENTY
+ # <circle> 0032 0030
+@ Parenthesized numbers
+2474 PARENTHESIZED DIGIT ONE
+ # 0028 0031 0029
+2475 PARENTHESIZED DIGIT TWO
+ # 0028 0032 0029
+2476 PARENTHESIZED DIGIT THREE
+ # 0028 0033 0029
+2477 PARENTHESIZED DIGIT FOUR
+ # 0028 0034 0029
+2478 PARENTHESIZED DIGIT FIVE
+ # 0028 0035 0029
+2479 PARENTHESIZED DIGIT SIX
+ # 0028 0036 0029
+247A PARENTHESIZED DIGIT SEVEN
+ # 0028 0037 0029
+247B PARENTHESIZED DIGIT EIGHT
+ # 0028 0038 0029
+247C PARENTHESIZED DIGIT NINE
+ # 0028 0039 0029
+247D PARENTHESIZED NUMBER TEN
+ # 0028 0031 0030 0029
+247E PARENTHESIZED NUMBER ELEVEN
+ # 0028 0031 0031 0029
+247F PARENTHESIZED NUMBER TWELVE
+ # 0028 0031 0032 0029
+2480 PARENTHESIZED NUMBER THIRTEEN
+ # 0028 0031 0033 0029
+2481 PARENTHESIZED NUMBER FOURTEEN
+ # 0028 0031 0034 0029
+2482 PARENTHESIZED NUMBER FIFTEEN
+ # 0028 0031 0035 0029
+2483 PARENTHESIZED NUMBER SIXTEEN
+ # 0028 0031 0036 0029
+2484 PARENTHESIZED NUMBER SEVENTEEN
+ # 0028 0031 0037 0029
+2485 PARENTHESIZED NUMBER EIGHTEEN
+ # 0028 0031 0038 0029
+2486 PARENTHESIZED NUMBER NINETEEN
+ # 0028 0031 0039 0029
+2487 PARENTHESIZED NUMBER TWENTY
+ # 0028 0032 0030 0029
+@ Numbers period
+2488 DIGIT ONE FULL STOP
+ # 0031 002E
+2489 DIGIT TWO FULL STOP
+ # 0032 002E
+248A DIGIT THREE FULL STOP
+ # 0033 002E
+248B DIGIT FOUR FULL STOP
+ # 0034 002E
+248C DIGIT FIVE FULL STOP
+ # 0035 002E
+248D DIGIT SIX FULL STOP
+ # 0036 002E
+248E DIGIT SEVEN FULL STOP
+ # 0037 002E
+248F DIGIT EIGHT FULL STOP
+ # 0038 002E
+2490 DIGIT NINE FULL STOP
+ # 0039 002E
+2491 NUMBER TEN FULL STOP
+ # 0031 0030 002E
+2492 NUMBER ELEVEN FULL STOP
+ # 0031 0031 002E
+2493 NUMBER TWELVE FULL STOP
+ # 0031 0032 002E
+2494 NUMBER THIRTEEN FULL STOP
+ # 0031 0033 002E
+2495 NUMBER FOURTEEN FULL STOP
+ # 0031 0034 002E
+2496 NUMBER FIFTEEN FULL STOP
+ # 0031 0035 002E
+2497 NUMBER SIXTEEN FULL STOP
+ # 0031 0036 002E
+2498 NUMBER SEVENTEEN FULL STOP
+ # 0031 0037 002E
+2499 NUMBER EIGHTEEN FULL STOP
+ # 0031 0038 002E
+249A NUMBER NINETEEN FULL STOP
+ # 0031 0039 002E
+249B NUMBER TWENTY FULL STOP
+ # 0032 0030 002E
+@ Parenthesized Latin letters
+249C PARENTHESIZED LATIN SMALL LETTER A
+ # 0028 0061 0029
+249D PARENTHESIZED LATIN SMALL LETTER B
+ # 0028 0062 0029
+249E PARENTHESIZED LATIN SMALL LETTER C
+ # 0028 0063 0029
+249F PARENTHESIZED LATIN SMALL LETTER D
+ # 0028 0064 0029
+24A0 PARENTHESIZED LATIN SMALL LETTER E
+ # 0028 0065 0029
+24A1 PARENTHESIZED LATIN SMALL LETTER F
+ # 0028 0066 0029
+24A2 PARENTHESIZED LATIN SMALL LETTER G
+ # 0028 0067 0029
+24A3 PARENTHESIZED LATIN SMALL LETTER H
+ # 0028 0068 0029
+24A4 PARENTHESIZED LATIN SMALL LETTER I
+ # 0028 0069 0029
+24A5 PARENTHESIZED LATIN SMALL LETTER J
+ # 0028 006A 0029
+24A6 PARENTHESIZED LATIN SMALL LETTER K
+ # 0028 006B 0029
+24A7 PARENTHESIZED LATIN SMALL LETTER L
+ # 0028 006C 0029
+24A8 PARENTHESIZED LATIN SMALL LETTER M
+ # 0028 006D 0029
+24A9 PARENTHESIZED LATIN SMALL LETTER N
+ # 0028 006E 0029
+24AA PARENTHESIZED LATIN SMALL LETTER O
+ # 0028 006F 0029
+24AB PARENTHESIZED LATIN SMALL LETTER P
+ # 0028 0070 0029
+24AC PARENTHESIZED LATIN SMALL LETTER Q
+ # 0028 0071 0029
+24AD PARENTHESIZED LATIN SMALL LETTER R
+ # 0028 0072 0029
+24AE PARENTHESIZED LATIN SMALL LETTER S
+ # 0028 0073 0029
+24AF PARENTHESIZED LATIN SMALL LETTER T
+ # 0028 0074 0029
+24B0 PARENTHESIZED LATIN SMALL LETTER U
+ # 0028 0075 0029
+24B1 PARENTHESIZED LATIN SMALL LETTER V
+ # 0028 0076 0029
+24B2 PARENTHESIZED LATIN SMALL LETTER W
+ # 0028 0077 0029
+24B3 PARENTHESIZED LATIN SMALL LETTER X
+ # 0028 0078 0029
+24B4 PARENTHESIZED LATIN SMALL LETTER Y
+ # 0028 0079 0029
+24B5 PARENTHESIZED LATIN SMALL LETTER Z
+ # 0028 007A 0029
+@ Circled Latin letters
+24B6 CIRCLED LATIN CAPITAL LETTER A
+ # <circle> 0041
+24B7 CIRCLED LATIN CAPITAL LETTER B
+ # <circle> 0042
+24B8 CIRCLED LATIN CAPITAL LETTER C
+ # <circle> 0043
+24B9 CIRCLED LATIN CAPITAL LETTER D
+ # <circle> 0044
+24BA CIRCLED LATIN CAPITAL LETTER E
+ # <circle> 0045
+24BB CIRCLED LATIN CAPITAL LETTER F
+ # <circle> 0046
+24BC CIRCLED LATIN CAPITAL LETTER G
+ # <circle> 0047
+24BD CIRCLED LATIN CAPITAL LETTER H
+ # <circle> 0048
+24BE CIRCLED LATIN CAPITAL LETTER I
+ # <circle> 0049
+24BF CIRCLED LATIN CAPITAL LETTER J
+ # <circle> 004A
+24C0 CIRCLED LATIN CAPITAL LETTER K
+ # <circle> 004B
+24C1 CIRCLED LATIN CAPITAL LETTER L
+ # <circle> 004C
+24C2 CIRCLED LATIN CAPITAL LETTER M
+ # <circle> 004D
+24C3 CIRCLED LATIN CAPITAL LETTER N
+ # <circle> 004E
+24C4 CIRCLED LATIN CAPITAL LETTER O
+ # <circle> 004F
+24C5 CIRCLED LATIN CAPITAL LETTER P
+ # <circle> 0050
+24C6 CIRCLED LATIN CAPITAL LETTER Q
+ # <circle> 0051
+24C7 CIRCLED LATIN CAPITAL LETTER R
+ # <circle> 0052
+24C8 CIRCLED LATIN CAPITAL LETTER S
+ # <circle> 0053
+24C9 CIRCLED LATIN CAPITAL LETTER T
+ # <circle> 0054
+24CA CIRCLED LATIN CAPITAL LETTER U
+ # <circle> 0055
+24CB CIRCLED LATIN CAPITAL LETTER V
+ # <circle> 0056
+24CC CIRCLED LATIN CAPITAL LETTER W
+ # <circle> 0057
+24CD CIRCLED LATIN CAPITAL LETTER X
+ # <circle> 0058
+24CE CIRCLED LATIN CAPITAL LETTER Y
+ # <circle> 0059
+24CF CIRCLED LATIN CAPITAL LETTER Z
+ # <circle> 005A
+24D0 CIRCLED LATIN SMALL LETTER A
+ # <circle> 0061
+24D1 CIRCLED LATIN SMALL LETTER B
+ # <circle> 0062
+24D2 CIRCLED LATIN SMALL LETTER C
+ # <circle> 0063
+24D3 CIRCLED LATIN SMALL LETTER D
+ # <circle> 0064
+24D4 CIRCLED LATIN SMALL LETTER E
+ # <circle> 0065
+24D5 CIRCLED LATIN SMALL LETTER F
+ # <circle> 0066
+24D6 CIRCLED LATIN SMALL LETTER G
+ # <circle> 0067
+24D7 CIRCLED LATIN SMALL LETTER H
+ # <circle> 0068
+24D8 CIRCLED LATIN SMALL LETTER I
+ # <circle> 0069
+24D9 CIRCLED LATIN SMALL LETTER J
+ # <circle> 006A
+24DA CIRCLED LATIN SMALL LETTER K
+ # <circle> 006B
+24DB CIRCLED LATIN SMALL LETTER L
+ # <circle> 006C
+24DC CIRCLED LATIN SMALL LETTER M
+ # <circle> 006D
+24DD CIRCLED LATIN SMALL LETTER N
+ # <circle> 006E
+24DE CIRCLED LATIN SMALL LETTER O
+ # <circle> 006F
+24DF CIRCLED LATIN SMALL LETTER P
+ # <circle> 0070
+24E0 CIRCLED LATIN SMALL LETTER Q
+ # <circle> 0071
+24E1 CIRCLED LATIN SMALL LETTER R
+ # <circle> 0072
+24E2 CIRCLED LATIN SMALL LETTER S
+ # <circle> 0073
+24E3 CIRCLED LATIN SMALL LETTER T
+ # <circle> 0074
+24E4 CIRCLED LATIN SMALL LETTER U
+ # <circle> 0075
+24E5 CIRCLED LATIN SMALL LETTER V
+ # <circle> 0076
+24E6 CIRCLED LATIN SMALL LETTER W
+ # <circle> 0077
+24E7 CIRCLED LATIN SMALL LETTER X
+ # <circle> 0078
+24E8 CIRCLED LATIN SMALL LETTER Y
+ # <circle> 0079
+24E9 CIRCLED LATIN SMALL LETTER Z
+ # <circle> 007A
+@ Additional circled number
+24EA CIRCLED DIGIT ZERO
+ # <circle> 0030
+@ White on black circled numbers
+24EB NEGATIVE CIRCLED NUMBER ELEVEN
+24EC NEGATIVE CIRCLED NUMBER TWELVE
+24ED NEGATIVE CIRCLED NUMBER THIRTEEN
+24EE NEGATIVE CIRCLED NUMBER FOURTEEN
+24EF NEGATIVE CIRCLED NUMBER FIFTEEN
+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN
+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN
+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN
+24F3 NEGATIVE CIRCLED NUMBER NINETEEN
+24F4 NEGATIVE CIRCLED NUMBER TWENTY
+@ Double circled numbers
+24F5 DOUBLE CIRCLED DIGIT ONE
+24F6 DOUBLE CIRCLED DIGIT TWO
+24F7 DOUBLE CIRCLED DIGIT THREE
+24F8 DOUBLE CIRCLED DIGIT FOUR
+24F9 DOUBLE CIRCLED DIGIT FIVE
+24FA DOUBLE CIRCLED DIGIT SIX
+24FB DOUBLE CIRCLED DIGIT SEVEN
+24FC DOUBLE CIRCLED DIGIT EIGHT
+24FD DOUBLE CIRCLED DIGIT NINE
+24FE DOUBLE CIRCLED NUMBER TEN
+@ Additional white on black circled number
+24FF NEGATIVE CIRCLED DIGIT ZERO
+ x (dingbat negative circled digit one - 2776)
+@@ 2500 Box Drawing 257F
+@ Form and chart components
+2500 BOX DRAWINGS LIGHT HORIZONTAL
+ = Videotex Mosaic DG 15
+2501 BOX DRAWINGS HEAVY HORIZONTAL
+2502 BOX DRAWINGS LIGHT VERTICAL
+ = Videotex Mosaic DG 14
+2503 BOX DRAWINGS HEAVY VERTICAL
+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+250C BOX DRAWINGS LIGHT DOWN AND RIGHT
+ = Videotex Mosaic DG 16
+250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+250F BOX DRAWINGS HEAVY DOWN AND RIGHT
+2510 BOX DRAWINGS LIGHT DOWN AND LEFT
+ = Videotex Mosaic DG 17
+2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+2513 BOX DRAWINGS HEAVY DOWN AND LEFT
+2514 BOX DRAWINGS LIGHT UP AND RIGHT
+ = Videotex Mosaic DG 18
+2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+2517 BOX DRAWINGS HEAVY UP AND RIGHT
+2518 BOX DRAWINGS LIGHT UP AND LEFT
+ = Videotex Mosaic DG 19
+2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+251B BOX DRAWINGS HEAVY UP AND LEFT
+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ = Videotex Mosaic DG 20
+251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ = Videotex Mosaic DG 03
+251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ = Videotex Mosaic DG 21
+2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ = Videotex Mosaic DG 04
+2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+252B BOX DRAWINGS HEAVY VERTICAL AND LEFT
+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ = Videotex Mosaic DG 22
+252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ = Videotex Mosaic DG 02
+2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ = Videotex Mosaic DG 23
+2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ = Videotex Mosaic DG 01
+2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+253B BOX DRAWINGS HEAVY UP AND HORIZONTAL
+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ = Videotex Mosaic DG 24
+253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ = Videotex Mosaic DG 13
+2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+254C BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+254D BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+254E BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+254F BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+2550 BOX DRAWINGS DOUBLE HORIZONTAL
+2551 BOX DRAWINGS DOUBLE VERTICAL
+2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
+2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+255A BOX DRAWINGS DOUBLE UP AND RIGHT
+255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+255D BOX DRAWINGS DOUBLE UP AND LEFT
+255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+256F BOX DRAWINGS LIGHT ARC UP AND LEFT
+2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
+2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+2573 BOX DRAWINGS LIGHT DIAGONAL CROSS
+2574 BOX DRAWINGS LIGHT LEFT
+2575 BOX DRAWINGS LIGHT UP
+2576 BOX DRAWINGS LIGHT RIGHT
+2577 BOX DRAWINGS LIGHT DOWN
+2578 BOX DRAWINGS HEAVY LEFT
+2579 BOX DRAWINGS HEAVY UP
+257A BOX DRAWINGS HEAVY RIGHT
+257B BOX DRAWINGS HEAVY DOWN
+257C BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+257D BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+257E BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+257F BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+@@ 2580 Block Elements 259F
+@ Block elements
+2580 UPPER HALF BLOCK
+2581 LOWER ONE EIGHTH BLOCK
+2582 LOWER ONE QUARTER BLOCK
+2583 LOWER THREE EIGHTHS BLOCK
+2584 LOWER HALF BLOCK
+2585 LOWER FIVE EIGHTHS BLOCK
+2586 LOWER THREE QUARTERS BLOCK
+2587 LOWER SEVEN EIGHTHS BLOCK
+2588 FULL BLOCK
+ = solid
+ x (black square - 25A0)
+2589 LEFT SEVEN EIGHTHS BLOCK
+258A LEFT THREE QUARTERS BLOCK
+258B LEFT FIVE EIGHTHS BLOCK
+258C LEFT HALF BLOCK
+258D LEFT THREE EIGHTHS BLOCK
+258E LEFT ONE QUARTER BLOCK
+258F LEFT ONE EIGHTH BLOCK
+2590 RIGHT HALF BLOCK
+@ Shade characters
+2591 LIGHT SHADE
+ * 25%
+2592 MEDIUM SHADE
+ * 50%
+2593 DARK SHADE
+ * 75%
+@ Block elements
+2594 UPPER ONE EIGHTH BLOCK
+2595 RIGHT ONE EIGHTH BLOCK
+@ Terminal graphic characters
+2596 QUADRANT LOWER LEFT
+2597 QUADRANT LOWER RIGHT
+2598 QUADRANT UPPER LEFT
+2599 QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+259A QUADRANT UPPER LEFT AND LOWER RIGHT
+259B QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+259C QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+259D QUADRANT UPPER RIGHT
+259E QUADRANT UPPER RIGHT AND LOWER LEFT
+259F QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+@@ 25A0 Geometric Shapes 25FF
+@ Geometric shapes
+25A0 BLACK SQUARE
+ = moding mark (in ideographic text)
+ x (full block - 2588)
+25A1 WHITE SQUARE
+ = quadrature
+ * may be used to represent a missing ideograph
+ x (combining enclosing square - 20DE)
+ x (ballot box - 2610)
+ x (geta mark - 3013)
+25A2 WHITE SQUARE WITH ROUNDED CORNERS
+25A3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+25A4 SQUARE WITH HORIZONTAL FILL
+25A5 SQUARE WITH VERTICAL FILL
+25A6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+25A7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+25A8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+25A9 SQUARE WITH DIAGONAL CROSSHATCH FILL
+25AA BLACK SMALL SQUARE
+25AB WHITE SMALL SQUARE
+25AC BLACK RECTANGLE
+25AD WHITE RECTANGLE
+25AE BLACK VERTICAL RECTANGLE
+ = histogram marker
+ x (end of proof - 220E)
+25AF WHITE VERTICAL RECTANGLE
+ x (apl functional symbol squish quad - 2337)
+ x (apl functional symbol quad - 2395)
+25B0 BLACK PARALLELOGRAM
+25B1 WHITE PARALLELOGRAM
+25B2 BLACK UP-POINTING TRIANGLE
+25B3 WHITE UP-POINTING TRIANGLE
+ = trine
+ x (combining enclosing upward pointing triangle - 20E4)
+ x (increment - 2206)
+25B4 BLACK UP-POINTING SMALL TRIANGLE
+25B5 WHITE UP-POINTING SMALL TRIANGLE
+25B6 BLACK RIGHT-POINTING TRIANGLE
+25B7 WHITE RIGHT-POINTING TRIANGLE
+ = z notation range restriction
+25B8 BLACK RIGHT-POINTING SMALL TRIANGLE
+ x (triangular bullet - 2023)
+25B9 WHITE RIGHT-POINTING SMALL TRIANGLE
+25BA BLACK RIGHT-POINTING POINTER
+25BB WHITE RIGHT-POINTING POINTER
+ = forward arrow indicator
+ x (contains as normal subgroup - 22B3)
+25BC BLACK DOWN-POINTING TRIANGLE
+25BD WHITE DOWN-POINTING TRIANGLE
+ = Hamilton operator
+ x (nabla - 2207)
+25BE BLACK DOWN-POINTING SMALL TRIANGLE
+25BF WHITE DOWN-POINTING SMALL TRIANGLE
+25C0 BLACK LEFT-POINTING TRIANGLE
+25C1 WHITE LEFT-POINTING TRIANGLE
+ = z notation domain restriction
+25C2 BLACK LEFT-POINTING SMALL TRIANGLE
+25C3 WHITE LEFT-POINTING SMALL TRIANGLE
+25C4 BLACK LEFT-POINTING POINTER
+25C5 WHITE LEFT-POINTING POINTER
+ = backward arrow indicator
+ x (normal subgroup of - 22B2)
+25C6 BLACK DIAMOND
+ x (black diamond suit - 2666)
+25C7 WHITE DIAMOND
+ x (combining enclosing diamond - 20DF)
+ x (diamond operator - 22C4)
+ x (white diamond suit - 2662)
+25C8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+25C9 FISHEYE
+ = tainome (Japanese, a kind of bullet)
+25CA LOZENGE
+ x (white diamond suit - 2662)
+25CB WHITE CIRCLE
+ x (combining enclosing circle - 20DD)
+ x (large circle - 25EF)
+ x (ideographic number zero - 3007)
+25CC DOTTED CIRCLE
+ * note that the reference glyph for this character is intentionally larger than the dotted circle glyph used to indicate combining characters in this standard; see, for example, 0300
+25CD CIRCLE WITH VERTICAL FILL
+25CE BULLSEYE
+ x (circled ring operator - 229A)
+25CF BLACK CIRCLE
+25D0 CIRCLE WITH LEFT HALF BLACK
+25D1 CIRCLE WITH RIGHT HALF BLACK
+25D2 CIRCLE WITH LOWER HALF BLACK
+25D3 CIRCLE WITH UPPER HALF BLACK
+25D4 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+25D5 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+25D6 LEFT HALF BLACK CIRCLE
+25D7 RIGHT HALF BLACK CIRCLE
+25D8 INVERSE BULLET
+ x (bullet - 2022)
+ x (white bullet - 25E6)
+25D9 INVERSE WHITE CIRCLE
+25DA UPPER HALF INVERSE WHITE CIRCLE
+25DB LOWER HALF INVERSE WHITE CIRCLE
+25DC UPPER LEFT QUADRANT CIRCULAR ARC
+25DD UPPER RIGHT QUADRANT CIRCULAR ARC
+25DE LOWER RIGHT QUADRANT CIRCULAR ARC
+25DF LOWER LEFT QUADRANT CIRCULAR ARC
+25E0 UPPER HALF CIRCLE
+ x (arc - 2312)
+25E1 LOWER HALF CIRCLE
+25E2 BLACK LOWER RIGHT TRIANGLE
+25E3 BLACK LOWER LEFT TRIANGLE
+25E4 BLACK UPPER LEFT TRIANGLE
+25E5 BLACK UPPER RIGHT TRIANGLE
+25E6 WHITE BULLET
+ x (bullet - 2022)
+ x (ring operator - 2218)
+ x (inverse bullet - 25D8)
+25E7 SQUARE WITH LEFT HALF BLACK
+ x (square with top half black - 2B12)
+25E8 SQUARE WITH RIGHT HALF BLACK
+25E9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+25EA SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+25EB WHITE SQUARE WITH VERTICAL BISECTING LINE
+25EC WHITE UP-POINTING TRIANGLE WITH DOT
+25ED UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+25EE UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+25EF LARGE CIRCLE
+ x (combining enclosing circle - 20DD)
+ x (white circle - 25CB)
+ x (ideographic number zero - 3007)
+@ Control code graphics
+25F0 WHITE SQUARE WITH UPPER LEFT QUADRANT
+25F1 WHITE SQUARE WITH LOWER LEFT QUADRANT
+25F2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
+25F3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
+25F4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
+25F5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
+25F6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+25F7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+@ Geometric shapes
+25F8 UPPER LEFT TRIANGLE
+25F9 UPPER RIGHT TRIANGLE
+25FA LOWER LEFT TRIANGLE
+ x (right triangle - 22BF)
+25FB WHITE MEDIUM SQUARE
+ = always (modal operator)
+ x (white square - 25A1)
+25FC BLACK MEDIUM SQUARE
+ x (black square - 25A0)
+25FD WHITE MEDIUM SMALL SQUARE
+ x (white small square - 25AB)
+25FE BLACK MEDIUM SMALL SQUARE
+ x (black small square - 25AA)
+25FF LOWER RIGHT TRIANGLE
+ x (right triangle - 22BF)
+@@ 2600 Miscellaneous Symbols 26FF
+@ Weather and astrological symbols
+2600 BLACK SUN WITH RAYS
+ = clear weather
+ x (sun - 2609)
+2601 CLOUD
+ = cloudy weather
+2602 UMBRELLA
+ = rainy weather
+2603 SNOWMAN
+ = snowy weather
+2604 COMET
+2605 BLACK STAR
+ x (star operator - 22C6)
+2606 WHITE STAR
+ x (stress outlined white star - 2729)
+2607 LIGHTNING
+2608 THUNDERSTORM
+2609 SUN
+ x (circled dot operator - 2299)
+ x (black sun with rays - 2600)
+ x (white sun with rays - 263C)
+260A ASCENDING NODE
+260B DESCENDING NODE
+260C CONJUNCTION
+260D OPPOSITION
+@ Miscellaneous symbols
+260E BLACK TELEPHONE
+260F WHITE TELEPHONE
+2610 BALLOT BOX
+ x (white square - 25A1)
+2611 BALLOT BOX WITH CHECK
+2612 BALLOT BOX WITH X
+ x (squared times - 22A0)
+2613 SALTIRE
+ = St. Andrew's Cross
+ x (ballot x - 2717)
+@ Weather symbol
+2614 UMBRELLA WITH RAIN DROPS
+ = showery weather
+@ Miscellaneous symbol
+2615 HOT BEVERAGE
+ = tea or coffee, depending on locale
+ * can be used to indicate a wait
+ x (watch - 231A)
+ x (hourglass - 231B)
+@ Japanese chess symbols
+2616 WHITE SHOGI PIECE
+2617 BLACK SHOGI PIECE
+@ Miscellaneous symbols
+2618 SHAMROCK
+2619 REVERSED ROTATED FLORAL HEART BULLET
+ * a binding signature mark
+ x (rotated floral heart bullet - 2767)
+@ Pointing hand symbols
+261A BLACK LEFT POINTING INDEX
+261B BLACK RIGHT POINTING INDEX
+261C WHITE LEFT POINTING INDEX
+261D WHITE UP POINTING INDEX
+261E WHITE RIGHT POINTING INDEX
+ = fist (typographic term)
+261F WHITE DOWN POINTING INDEX
+@ Warning signs
+2620 SKULL AND CROSSBONES
+ = poison
+2621 CAUTION SIGN
+2622 RADIOACTIVE SIGN
+2623 BIOHAZARD SIGN
+@ Medical and healing symbols
+2624 CADUCEUS
+ x (staff of aesculapius - 2695)
+2625 ANKH
+@ Religious and political symbols
+2626 ORTHODOX CROSS
+2627 CHI RHO
+ = Constantine's cross, Christogram
+ x (coptic symbol khi ro - 2CE9)
+2628 CROSS OF LORRAINE
+2629 CROSS OF JERUSALEM
+262A STAR AND CRESCENT
+262B FARSI SYMBOL
+ = SYMBOL OF IRAN
+262C ADI SHAKTI
+ = Gurmukhi khanda
+262D HAMMER AND SICKLE
+262E PEACE SYMBOL
+262F YIN YANG
+ x (tibetan symbol nor bu nyis -khyil - 0FCA)
+@ Yijing trigram symbols
+2630 TRIGRAM FOR HEAVEN
+ = qian2
+2631 TRIGRAM FOR LAKE
+ = dui4
+2632 TRIGRAM FOR FIRE
+ = li2
+2633 TRIGRAM FOR THUNDER
+ = zhen4
+2634 TRIGRAM FOR WIND
+ = xun4
+2635 TRIGRAM FOR WATER
+ = kan3
+2636 TRIGRAM FOR MOUNTAIN
+ = gen4
+2637 TRIGRAM FOR EARTH
+ = kun1
+@ Miscellaneous symbols
+2638 WHEEL OF DHARMA
+ x (helm symbol - 2388)
+2639 WHITE FROWNING FACE
+263A WHITE SMILING FACE
+ = have a nice day!
+263B BLACK SMILING FACE
+263C WHITE SUN WITH RAYS
+ = compass
+ x (sun - 2609)
+@ Astrological symbols
+263D FIRST QUARTER MOON
+263E LAST QUARTER MOON
+263F MERCURY
+2640 FEMALE SIGN
+ = Venus
+2641 EARTH
+ x (circled plus - 2295)
+2642 MALE SIGN
+ = Mars
+2643 JUPITER
+2644 SATURN
+2645 URANUS
+2646 NEPTUNE
+2647 PLUTO
+@ Zodiacal symbols
+2648 ARIES
+2649 TAURUS
+264A GEMINI
+264B CANCER
+264C LEO
+264D VIRGO
+ = minim (alternate glyph)
+264E LIBRA
+264F SCORPIUS
+ = minim, drop
+2650 SAGITTARIUS
+2651 CAPRICORN
+2652 AQUARIUS
+2653 PISCES
+@ Chess symbols
+2654 WHITE CHESS KING
+2655 WHITE CHESS QUEEN
+2656 WHITE CHESS ROOK
+2657 WHITE CHESS BISHOP
+2658 WHITE CHESS KNIGHT
+2659 WHITE CHESS PAWN
+265A BLACK CHESS KING
+265B BLACK CHESS QUEEN
+265C BLACK CHESS ROOK
+265D BLACK CHESS BISHOP
+265E BLACK CHESS KNIGHT
+265F BLACK CHESS PAWN
+@ Playing card symbols
+2660 BLACK SPADE SUIT
+2661 WHITE HEART SUIT
+2662 WHITE DIAMOND SUIT
+ x (white diamond - 25C7)
+ x (lozenge - 25CA)
+2663 BLACK CLUB SUIT
+ = shamrock
+2664 WHITE SPADE SUIT
+2665 BLACK HEART SUIT
+ = valentine
+ x (heavy black heart - 2764)
+2666 BLACK DIAMOND SUIT
+ x (black diamond - 25C6)
+2667 WHITE CLUB SUIT
+@ Miscellaneous symbol
+2668 HOT SPRINGS
+@ Musical symbols
+2669 QUARTER NOTE
+266A EIGHTH NOTE
+266B BEAMED EIGHTH NOTES
+266C BEAMED SIXTEENTH NOTES
+266D MUSIC FLAT SIGN
+266E MUSIC NATURAL SIGN
+266F MUSIC SHARP SIGN
+ = z notation infix bag count
+ x (number sign - 0023)
+@ Syriac cross symbols
+@+ These symbols are used in liturgical texts of Syriac-speaking churches.
+2670 WEST SYRIAC CROSS
+2671 EAST SYRIAC CROSS
+@ Recycling symbols
+2672 UNIVERSAL RECYCLING SYMBOL
+ * used as generic symbol for recycling or to indicate that material is recyclable
+2673 RECYCLING SYMBOL FOR TYPE-1 PLASTICS (pete)
+ * polyethylene terephthalate
+2674 RECYCLING SYMBOL FOR TYPE-2 PLASTICS (hdpe)
+ * high density polyethylene
+2675 RECYCLING SYMBOL FOR TYPE-3 PLASTICS (pvc)
+ * vinyl, polyvinyl chloride
+2676 RECYCLING SYMBOL FOR TYPE-4 PLASTICS (ldpe)
+ * low density polyethylene
+2677 RECYCLING SYMBOL FOR TYPE-5 PLASTICS (pp)
+ * polypropylene
+2678 RECYCLING SYMBOL FOR TYPE-6 PLASTICS (ps)
+ * polystyrene
+2679 RECYCLING SYMBOL FOR TYPE-7 PLASTICS (other)
+ * other plastics
+267A RECYCLING SYMBOL FOR GENERIC MATERIALS
+ * used together with other text and labels to indicate the type of material to be recycled
+267B BLACK UNIVERSAL RECYCLING SYMBOL
+267C RECYCLED PAPER SYMBOL
+ * used to indicate 100% recycled paper content
+267D PARTIALLY-RECYCLED PAPER SYMBOL
+ * percentage of recycled paper content indicated in overlay or next to this symbol
+@ Miscellaneous symbols
+267E PERMANENT PAPER SIGN
+267F WHEELCHAIR SYMBOL
+@ Dice
+2680 DIE FACE-1
+2681 DIE FACE-2
+2682 DIE FACE-3
+2683 DIE FACE-4
+2684 DIE FACE-5
+2685 DIE FACE-6
+@ Go markers
+2686 WHITE CIRCLE WITH DOT RIGHT
+2687 WHITE CIRCLE WITH TWO DOTS
+2688 BLACK CIRCLE WITH WHITE DOT RIGHT
+2689 BLACK CIRCLE WITH TWO WHITE DOTS
+@ Yijing monogram and digram symbols
+268A MONOGRAM FOR YANG
+268B MONOGRAM FOR YIN
+268C DIGRAM FOR GREATER YANG
+268D DIGRAM FOR LESSER YIN
+268E DIGRAM FOR LESSER YANG
+268F DIGRAM FOR GREATER YIN
+@ Dictionary and map symbols
+2690 WHITE FLAG
+2691 BLACK FLAG
+2692 HAMMER AND PICK
+ = mining, working day (in timetables)
+2693 ANCHOR
+ = nautical term, harbor (on maps)
+2694 CROSSED SWORDS
+ = military term, battleground (on maps), killed in action
+2695 STAFF OF AESCULAPIUS
+ = medical term
+ * both inclined or upright renderings of this symbol are common
+ x (caduceus - 2624)
+2696 SCALES
+ = legal term, jurisprudence
+2697 ALEMBIC
+ = chemical term, chemistry
+2698 FLOWER
+ = botanical term
+ x (flower punctuation mark - 2055)
+ x (shamrock - 2618)
+ x (white florette - 2740)
+2699 GEAR
+ = technology, tools
+269A STAFF OF HERMES
+ * signifies a commercial term or commerce
+ * glyph shows a heraldic staff with a winged wheel
+269B ATOM SYMBOL
+ = nuclear installation (on maps)
+@ Miscellaneous symbols
+269C FLEUR-DE-LIS
+26A0 WARNING SIGN
+26A1 HIGH VOLTAGE SIGN
+@ Gender symbols
+26A2 DOUBLED FEMALE SIGN
+ = lesbianism
+26A3 DOUBLED MALE SIGN
+ * a glyph variant has the two circles on the same line
+ = male homosexuality
+26A4 INTERLOCKED FEMALE AND MALE SIGN
+ * a glyph variant has the two circles on the same line
+ = bisexuality
+26A5 MALE AND FEMALE SIGN
+ = transgendered sexuality
+ = hermaphrodite (in entomology)
+26A6 MALE WITH STROKE SIGN
+ = transgendered sexuality
+26A7 MALE WITH STROKE AND MALE AND FEMALE SIGN
+ = transgendered sexuality
+26A8 VERTICAL MALE WITH STROKE SIGN
+ = ferrous iron sulphate (alchemy and older chemistry)
+26A9 HORIZONTAL MALE WITH STROKE SIGN
+ = magnesium (alchemy and older chemistry)
+@ Circles
+26AA MEDIUM WHITE CIRCLE
+ = asexuality, sexless, genderless
+ = engaged, betrothed
+ * base for male or female sign
+26AB MEDIUM BLACK CIRCLE
+ * UI symbol for record function
+26AC MEDIUM SMALL WHITE CIRCLE
+ = engaged, betrothed (genealogy)
+ * can represent wedding ring
+@ Genealogical symbols
+26AD MARRIAGE SYMBOL
+ x (infinity - 221E)
+26AE DIVORCE SYMBOL
+ x (infinity negated with vertical bar - 29DE)
+26AF UNMARRIED PARTNERSHIP SYMBOL
+ x (double-ended multimap - 29DF)
+26B0 COFFIN
+ = buried (genealogy)
+ x (white rectangle - 25AD)
+26B1 FUNERAL URN
+ = cremated (genealogy)
+@@ 2700 Dingbats 27BF
+@+ ITC Zapf dingbats series 100
+@ Miscellaneous
+2701 UPPER BLADE SCISSORS
+2702 BLACK SCISSORS
+2703 LOWER BLADE SCISSORS
+2704 WHITE SCISSORS
+2705 <reserved>
+ x (black telephone - 260E)
+2706 TELEPHONE LOCATION SIGN
+2707 TAPE DRIVE
+2708 AIRPLANE
+2709 ENVELOPE
+270A <reserved>
+ x (black right pointing index - 261B)
+270B <reserved>
+ x (white right pointing index - 261E)
+270C VICTORY HAND
+270D WRITING HAND
+270E LOWER RIGHT PENCIL
+270F PENCIL
+2710 UPPER RIGHT PENCIL
+2711 WHITE NIB
+2712 BLACK NIB
+2713 CHECK MARK
+ x (square root - 221A)
+2714 HEAVY CHECK MARK
+2715 MULTIPLICATION X
+ x (multiplication sign - 00D7)
+ x (box drawings light diagonal cross - 2573)
+2716 HEAVY MULTIPLICATION X
+2717 BALLOT X
+ x (saltire - 2613)
+2718 HEAVY BALLOT X
+@ Crosses
+2719 OUTLINED GREEK CROSS
+271A HEAVY GREEK CROSS
+271B OPEN CENTRE CROSS
+271C HEAVY OPEN CENTRE CROSS
+271D LATIN CROSS
+271E SHADOWED WHITE LATIN CROSS
+271F OUTLINED LATIN CROSS
+2720 MALTESE CROSS
+ * Historically, the Maltese cross took many forms; the shape shown in the Zapf Dingbats is similar to one known as the Cross Formée.
+@ Stars, asterisks and snowflakes
+2721 STAR OF DAVID
+2722 FOUR TEARDROP-SPOKED ASTERISK
+2723 FOUR BALLOON-SPOKED ASTERISK
+2724 HEAVY FOUR BALLOON-SPOKED ASTERISK
+2725 FOUR CLUB-SPOKED ASTERISK
+2726 BLACK FOUR POINTED STAR
+2727 WHITE FOUR POINTED STAR
+2728 <reserved>
+ x (black star - 2605)
+2729 STRESS OUTLINED WHITE STAR
+ x (white star - 2606)
+272A CIRCLED WHITE STAR
+272B OPEN CENTRE BLACK STAR
+272C BLACK CENTRE WHITE STAR
+272D OUTLINED BLACK STAR
+272E HEAVY OUTLINED BLACK STAR
+272F PINWHEEL STAR
+2730 SHADOWED WHITE STAR
+2731 HEAVY ASTERISK
+ x (asterisk - 002A)
+2732 OPEN CENTRE ASTERISK
+2733 EIGHT SPOKED ASTERISK
+2734 EIGHT POINTED BLACK STAR
+2735 EIGHT POINTED PINWHEEL STAR
+2736 SIX POINTED BLACK STAR
+ = sextile
+2737 EIGHT POINTED RECTILINEAR BLACK STAR
+2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+2739 TWELVE POINTED BLACK STAR
+273A SIXTEEN POINTED ASTERISK
+ = starburst
+273B TEARDROP-SPOKED ASTERISK
+273C OPEN CENTRE TEARDROP-SPOKED ASTERISK
+273D HEAVY TEARDROP-SPOKED ASTERISK
+273E SIX PETALLED BLACK AND WHITE FLORETTE
+273F BLACK FLORETTE
+2740 WHITE FLORETTE
+2741 EIGHT PETALLED OUTLINED BLACK FLORETTE
+2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR
+2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+2744 SNOWFLAKE
+2745 TIGHT TRIFOLIATE SNOWFLAKE
+2746 HEAVY CHEVRON SNOWFLAKE
+2747 SPARKLE
+2748 HEAVY SPARKLE
+2749 BALLOON-SPOKED ASTERISK
+ = jack
+274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+ = turbofan
+@ Miscellaneous
+274C <reserved>
+ x (black circle - 25CF)
+274D SHADOWED WHITE CIRCLE
+274E <reserved>
+ x (black square - 25A0)
+274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+2751 LOWER RIGHT SHADOWED WHITE SQUARE
+2752 UPPER RIGHT SHADOWED WHITE SQUARE
+2753 <reserved>
+ x (black up-pointing triangle - 25B2)
+2754 <reserved>
+ x (black down-pointing triangle - 25BC)
+2755 <reserved>
+ x (black diamond - 25C6)
+2756 BLACK DIAMOND MINUS WHITE X
+2757 <reserved>
+ x (right half black circle - 25D7)
+2758 LIGHT VERTICAL BAR
+ x (vertical line - 007C)
+2759 MEDIUM VERTICAL BAR
+275A HEAVY VERTICAL BAR
+@ Punctuation ornaments
+275B HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+ x (left single quotation mark - 2018)
+275C HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+ x (right single quotation mark - 2019)
+275D HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+ x (left double quotation mark - 201C)
+275E HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+ x (right double quotation mark - 201D)
+2761 CURVED STEM PARAGRAPH SIGN ORNAMENT
+ x (pilcrow sign - 00B6)
+2762 HEAVY EXCLAMATION MARK ORNAMENT
+ x (exclamation mark - 0021)
+2763 HEAVY HEART EXCLAMATION MARK ORNAMENT
+2764 HEAVY BLACK HEART
+ x (black heart suit - 2665)
+2765 ROTATED HEAVY BLACK HEART BULLET
+2766 FLORAL HEART
+ = Aldus leaf
+2767 ROTATED FLORAL HEART BULLET
+ = hedera, ivy leaf
+ x (reversed rotated floral heart bullet - 2619)
+@ Ornamental brackets
+2768 MEDIUM LEFT PARENTHESIS ORNAMENT
+ x (left parenthesis - 0028)
+2769 MEDIUM RIGHT PARENTHESIS ORNAMENT
+ x (right parenthesis - 0029)
+276A MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+ x (left-pointing angle bracket - 2329)
+276D MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ x (right-pointing angle bracket - 232A)
+276E HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ x (single left-pointing angle quotation mark - 2039)
+276F HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ x (single right-pointing angle quotation mark - 203A)
+2770 HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+ x (left tortoise shell bracket - 3014)
+2773 LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+ x (right tortoise shell bracket - 3015)
+2774 MEDIUM LEFT CURLY BRACKET ORNAMENT
+ x (left curly bracket - 007B)
+2775 MEDIUM RIGHT CURLY BRACKET ORNAMENT
+ x (right curly bracket - 007D)
+@ Dingbat circled digits
+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO
+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE
+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX
+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE
+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN
+2780 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+2781 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+2782 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+2783 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+2784 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+2785 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+2786 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+2787 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+2788 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+2789 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+278A DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+278B DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+278C DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+278D DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+278E DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+278F DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+2790 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+2791 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+2792 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+2793 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+@ Dingbat arrows
+2794 HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795 <reserved>
+ x (rightwards arrow - 2192)
+2796 <reserved>
+ x (left right arrow - 2194)
+2797 <reserved>
+ x (up down arrow - 2195)
+2798 HEAVY SOUTH EAST ARROW
+2799 HEAVY RIGHTWARDS ARROW
+279A HEAVY NORTH EAST ARROW
+279B DRAFTING POINT RIGHTWARDS ARROW
+279C HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+279D TRIANGLE-HEADED RIGHTWARDS ARROW
+279E HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+279F DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+27A1 BLACK RIGHTWARDS ARROW
+27A2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+27A3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+27A4 BLACK RIGHTWARDS ARROWHEAD
+27A5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+27A6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+27A7 SQUAT BLACK RIGHTWARDS ARROW
+27A8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+27A9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
+27AA LEFT-SHADED WHITE RIGHTWARDS ARROW
+27AB BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AC FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+27AD HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AE HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27AF NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+27B3 WHITE-FEATHERED RIGHTWARDS ARROW
+27B4 BLACK-FEATHERED SOUTH EAST ARROW
+27B5 BLACK-FEATHERED RIGHTWARDS ARROW
+27B6 BLACK-FEATHERED NORTH EAST ARROW
+27B7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+27B8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+27B9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
+27BA TEARDROP-BARBED RIGHTWARDS ARROW
+27BB HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+27BC WEDGE-TAILED RIGHTWARDS ARROW
+27BD HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+27BE OPEN-OUTLINED RIGHTWARDS ARROW
+@@ 27C0 Miscellaneous Mathematical Symbols-A 27EF
+@ Miscellaneous symbols
+27C0 THREE DIMENSIONAL ANGLE
+ * used by Euclid
+27C1 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+ * used by Euclid
+27C2 PERPENDICULAR
+ = orthogonal to
+ * relation, typeset with additional spacing
+ x (up tack - 22A5)
+27C3 OPEN SUBSET
+27C4 OPEN SUPERSET
+27C5 LEFT S-SHAPED BAG DELIMITER
+27C6 RIGHT S-SHAPED BAG DELIMITER
+27D0 WHITE DIAMOND WITH CENTRED DOT
+@ Operators
+27D1 AND WITH DOT
+ x (logical and - 2227)
+ x (intersection with dot - 2A40)
+27D2 ELEMENT OF OPENING UPWARDS
+ x (element of opening downwards - 2AD9)
+27D3 LOWER RIGHT CORNER WITH DOT
+ = pullback
+ x (right floor - 230B)
+27D4 UPPER LEFT CORNER WITH DOT
+ = pushout
+ x (left ceiling - 2308)
+@ Database theory operators
+27D5 LEFT OUTER JOIN
+27D6 RIGHT OUTER JOIN
+27D7 FULL OUTER JOIN
+ x (join - 2A1D)
+@ Tacks and turnstiles
+27D8 LARGE UP TACK
+ x (up tack - 22A5)
+27D9 LARGE DOWN TACK
+ x (down tack - 22A4)
+27DA LEFT AND RIGHT DOUBLE TURNSTILE
+ x (true - 22A8)
+ x (vertical bar double left turnstile - 2AE4)
+27DB LEFT AND RIGHT TACK
+ x (right tack - 22A2)
+27DC LEFT MULTIMAP
+ x (multimap - 22B8)
+27DD LONG RIGHT TACK
+ x (right tack - 22A2)
+27DE LONG LEFT TACK
+ x (left tack - 22A3)
+27DF UP TACK WITH CIRCLE ABOVE
+ = radial component
+ x (down tack with circle below - 2AF1)
+@ Modal logic operators
+27E0 LOZENGE DIVIDED BY HORIZONTAL RULE
+ * used as form of possibility in modal logic
+ x (lozenge - 25CA)
+27E1 WHITE CONCAVE-SIDED DIAMOND
+ = never (modal operator)
+27E2 WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+ = was never (modal operator)
+27E3 WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+ = will never be (modal operator)
+27E4 WHITE SQUARE WITH LEFTWARDS TICK
+ = was always (modal operator)
+ x (white square - 25A1)
+27E5 WHITE SQUARE WITH RIGHTWARDS TICK
+ = will always be (modal operator)
+@ Mathematical brackets
+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
+ = z notation left bag bracket
+ x (left white square bracket - 301A)
+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+ = z notation right bag bracket
+ x (right white square bracket - 301B)
+27E8 MATHEMATICAL LEFT ANGLE BRACKET
+ = bra
+ = z notation left sequence bracket
+ x (left-pointing angle bracket - 2329)
+ x (left angle bracket - 3008)
+27E9 MATHEMATICAL RIGHT ANGLE BRACKET
+ = ket
+ = z notation right sequence bracket
+ x (right-pointing angle bracket - 232A)
+ x (right angle bracket - 3009)
+27EA MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+ = z notation left chevron bracket
+ x (left double angle bracket - 300A)
+27EB MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+ = z notation right chevron bracket
+ x (right double angle bracket - 300B)
+@@ 27F0 Supplemental Arrows-A 27FF
+@ Arrows
+27F0 UPWARDS QUADRUPLE ARROW
+ x (upwards triple arrow - 290A)
+27F1 DOWNWARDS QUADRUPLE ARROW
+ x (downwards triple arrow - 290B)
+27F2 ANTICLOCKWISE GAPPED CIRCLE ARROW
+ x (anticlockwise open circle arrow - 21BA)
+ x (anticlockwise closed circle arrow - 2940)
+27F3 CLOCKWISE GAPPED CIRCLE ARROW
+ x (clockwise open circle arrow - 21BB)
+ x (clockwise closed circle arrow - 2941)
+27F4 RIGHT ARROW WITH CIRCLED PLUS
+@ Long arrows
+@+ The long arrows are used for mapping whereas the short forms would be used in limits. They are also needed for MathML to complete mapping to the ASMA sets.
+27F5 LONG LEFTWARDS ARROW
+ x (leftwards arrow - 2190)
+27F6 LONG RIGHTWARDS ARROW
+ x (rightwards arrow - 2192)
+27F7 LONG LEFT RIGHT ARROW
+ x (left right arrow - 2194)
+27F8 LONG LEFTWARDS DOUBLE ARROW
+ x (leftwards double arrow - 21D0)
+27F9 LONG RIGHTWARDS DOUBLE ARROW
+ x (rightwards double arrow - 21D2)
+27FA LONG LEFT RIGHT DOUBLE ARROW
+ x (left right double arrow - 21D4)
+27FB LONG LEFTWARDS ARROW FROM BAR
+ = maps from
+ x (leftwards arrow from bar - 21A4)
+27FC LONG RIGHTWARDS ARROW FROM BAR
+ = maps to
+ x (rightwards arrow from bar - 21A6)
+27FD LONG LEFTWARDS DOUBLE ARROW FROM BAR
+ x (leftwards double arrow from bar - 2906)
+27FE LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+ x (rightwards double arrow from bar - 2907)
+27FF LONG RIGHTWARDS SQUIGGLE ARROW
+ x (rightwards squiggle arrow - 21DD)
+@@ 2800 Braille Patterns 28FF
+@ Braille patterns
+2800 BRAILLE PATTERN BLANK
+2801 BRAILLE PATTERN DOTS-1
+2802 BRAILLE PATTERN DOTS-2
+2803 BRAILLE PATTERN DOTS-12
+2804 BRAILLE PATTERN DOTS-3
+2805 BRAILLE PATTERN DOTS-13
+2806 BRAILLE PATTERN DOTS-23
+2807 BRAILLE PATTERN DOTS-123
+2808 BRAILLE PATTERN DOTS-4
+2809 BRAILLE PATTERN DOTS-14
+280A BRAILLE PATTERN DOTS-24
+280B BRAILLE PATTERN DOTS-124
+280C BRAILLE PATTERN DOTS-34
+280D BRAILLE PATTERN DOTS-134
+280E BRAILLE PATTERN DOTS-234
+280F BRAILLE PATTERN DOTS-1234
+2810 BRAILLE PATTERN DOTS-5
+2811 BRAILLE PATTERN DOTS-15
+2812 BRAILLE PATTERN DOTS-25
+2813 BRAILLE PATTERN DOTS-125
+2814 BRAILLE PATTERN DOTS-35
+2815 BRAILLE PATTERN DOTS-135
+2816 BRAILLE PATTERN DOTS-235
+2817 BRAILLE PATTERN DOTS-1235
+2818 BRAILLE PATTERN DOTS-45
+2819 BRAILLE PATTERN DOTS-145
+281A BRAILLE PATTERN DOTS-245
+281B BRAILLE PATTERN DOTS-1245
+281C BRAILLE PATTERN DOTS-345
+281D BRAILLE PATTERN DOTS-1345
+281E BRAILLE PATTERN DOTS-2345
+281F BRAILLE PATTERN DOTS-12345
+2820 BRAILLE PATTERN DOTS-6
+2821 BRAILLE PATTERN DOTS-16
+2822 BRAILLE PATTERN DOTS-26
+2823 BRAILLE PATTERN DOTS-126
+2824 BRAILLE PATTERN DOTS-36
+2825 BRAILLE PATTERN DOTS-136
+2826 BRAILLE PATTERN DOTS-236
+2827 BRAILLE PATTERN DOTS-1236
+2828 BRAILLE PATTERN DOTS-46
+2829 BRAILLE PATTERN DOTS-146
+282A BRAILLE PATTERN DOTS-246
+282B BRAILLE PATTERN DOTS-1246
+282C BRAILLE PATTERN DOTS-346
+282D BRAILLE PATTERN DOTS-1346
+282E BRAILLE PATTERN DOTS-2346
+282F BRAILLE PATTERN DOTS-12346
+2830 BRAILLE PATTERN DOTS-56
+2831 BRAILLE PATTERN DOTS-156
+2832 BRAILLE PATTERN DOTS-256
+2833 BRAILLE PATTERN DOTS-1256
+2834 BRAILLE PATTERN DOTS-356
+2835 BRAILLE PATTERN DOTS-1356
+2836 BRAILLE PATTERN DOTS-2356
+2837 BRAILLE PATTERN DOTS-12356
+2838 BRAILLE PATTERN DOTS-456
+2839 BRAILLE PATTERN DOTS-1456
+283A BRAILLE PATTERN DOTS-2456
+283B BRAILLE PATTERN DOTS-12456
+283C BRAILLE PATTERN DOTS-3456
+283D BRAILLE PATTERN DOTS-13456
+283E BRAILLE PATTERN DOTS-23456
+283F BRAILLE PATTERN DOTS-123456
+2840 BRAILLE PATTERN DOTS-7
+2841 BRAILLE PATTERN DOTS-17
+2842 BRAILLE PATTERN DOTS-27
+2843 BRAILLE PATTERN DOTS-127
+2844 BRAILLE PATTERN DOTS-37
+2845 BRAILLE PATTERN DOTS-137
+2846 BRAILLE PATTERN DOTS-237
+2847 BRAILLE PATTERN DOTS-1237
+2848 BRAILLE PATTERN DOTS-47
+2849 BRAILLE PATTERN DOTS-147
+284A BRAILLE PATTERN DOTS-247
+284B BRAILLE PATTERN DOTS-1247
+284C BRAILLE PATTERN DOTS-347
+284D BRAILLE PATTERN DOTS-1347
+284E BRAILLE PATTERN DOTS-2347
+284F BRAILLE PATTERN DOTS-12347
+2850 BRAILLE PATTERN DOTS-57
+2851 BRAILLE PATTERN DOTS-157
+2852 BRAILLE PATTERN DOTS-257
+2853 BRAILLE PATTERN DOTS-1257
+2854 BRAILLE PATTERN DOTS-357
+2855 BRAILLE PATTERN DOTS-1357
+2856 BRAILLE PATTERN DOTS-2357
+2857 BRAILLE PATTERN DOTS-12357
+2858 BRAILLE PATTERN DOTS-457
+2859 BRAILLE PATTERN DOTS-1457
+285A BRAILLE PATTERN DOTS-2457
+285B BRAILLE PATTERN DOTS-12457
+285C BRAILLE PATTERN DOTS-3457
+285D BRAILLE PATTERN DOTS-13457
+285E BRAILLE PATTERN DOTS-23457
+285F BRAILLE PATTERN DOTS-123457
+2860 BRAILLE PATTERN DOTS-67
+2861 BRAILLE PATTERN DOTS-167
+2862 BRAILLE PATTERN DOTS-267
+2863 BRAILLE PATTERN DOTS-1267
+2864 BRAILLE PATTERN DOTS-367
+2865 BRAILLE PATTERN DOTS-1367
+2866 BRAILLE PATTERN DOTS-2367
+2867 BRAILLE PATTERN DOTS-12367
+2868 BRAILLE PATTERN DOTS-467
+2869 BRAILLE PATTERN DOTS-1467
+286A BRAILLE PATTERN DOTS-2467
+286B BRAILLE PATTERN DOTS-12467
+286C BRAILLE PATTERN DOTS-3467
+286D BRAILLE PATTERN DOTS-13467
+286E BRAILLE PATTERN DOTS-23467
+286F BRAILLE PATTERN DOTS-123467
+2870 BRAILLE PATTERN DOTS-567
+2871 BRAILLE PATTERN DOTS-1567
+2872 BRAILLE PATTERN DOTS-2567
+2873 BRAILLE PATTERN DOTS-12567
+2874 BRAILLE PATTERN DOTS-3567
+2875 BRAILLE PATTERN DOTS-13567
+2876 BRAILLE PATTERN DOTS-23567
+2877 BRAILLE PATTERN DOTS-123567
+2878 BRAILLE PATTERN DOTS-4567
+2879 BRAILLE PATTERN DOTS-14567
+287A BRAILLE PATTERN DOTS-24567
+287B BRAILLE PATTERN DOTS-124567
+287C BRAILLE PATTERN DOTS-34567
+287D BRAILLE PATTERN DOTS-134567
+287E BRAILLE PATTERN DOTS-234567
+287F BRAILLE PATTERN DOTS-1234567
+2880 BRAILLE PATTERN DOTS-8
+2881 BRAILLE PATTERN DOTS-18
+2882 BRAILLE PATTERN DOTS-28
+2883 BRAILLE PATTERN DOTS-128
+2884 BRAILLE PATTERN DOTS-38
+2885 BRAILLE PATTERN DOTS-138
+2886 BRAILLE PATTERN DOTS-238
+2887 BRAILLE PATTERN DOTS-1238
+2888 BRAILLE PATTERN DOTS-48
+2889 BRAILLE PATTERN DOTS-148
+288A BRAILLE PATTERN DOTS-248
+288B BRAILLE PATTERN DOTS-1248
+288C BRAILLE PATTERN DOTS-348
+288D BRAILLE PATTERN DOTS-1348
+288E BRAILLE PATTERN DOTS-2348
+288F BRAILLE PATTERN DOTS-12348
+2890 BRAILLE PATTERN DOTS-58
+2891 BRAILLE PATTERN DOTS-158
+2892 BRAILLE PATTERN DOTS-258
+2893 BRAILLE PATTERN DOTS-1258
+2894 BRAILLE PATTERN DOTS-358
+2895 BRAILLE PATTERN DOTS-1358
+2896 BRAILLE PATTERN DOTS-2358
+2897 BRAILLE PATTERN DOTS-12358
+2898 BRAILLE PATTERN DOTS-458
+2899 BRAILLE PATTERN DOTS-1458
+289A BRAILLE PATTERN DOTS-2458
+289B BRAILLE PATTERN DOTS-12458
+289C BRAILLE PATTERN DOTS-3458
+289D BRAILLE PATTERN DOTS-13458
+289E BRAILLE PATTERN DOTS-23458
+289F BRAILLE PATTERN DOTS-123458
+28A0 BRAILLE PATTERN DOTS-68
+28A1 BRAILLE PATTERN DOTS-168
+28A2 BRAILLE PATTERN DOTS-268
+28A3 BRAILLE PATTERN DOTS-1268
+28A4 BRAILLE PATTERN DOTS-368
+28A5 BRAILLE PATTERN DOTS-1368
+28A6 BRAILLE PATTERN DOTS-2368
+28A7 BRAILLE PATTERN DOTS-12368
+28A8 BRAILLE PATTERN DOTS-468
+28A9 BRAILLE PATTERN DOTS-1468
+28AA BRAILLE PATTERN DOTS-2468
+28AB BRAILLE PATTERN DOTS-12468
+28AC BRAILLE PATTERN DOTS-3468
+28AD BRAILLE PATTERN DOTS-13468
+28AE BRAILLE PATTERN DOTS-23468
+28AF BRAILLE PATTERN DOTS-123468
+28B0 BRAILLE PATTERN DOTS-568
+28B1 BRAILLE PATTERN DOTS-1568
+28B2 BRAILLE PATTERN DOTS-2568
+28B3 BRAILLE PATTERN DOTS-12568
+28B4 BRAILLE PATTERN DOTS-3568
+28B5 BRAILLE PATTERN DOTS-13568
+28B6 BRAILLE PATTERN DOTS-23568
+28B7 BRAILLE PATTERN DOTS-123568
+28B8 BRAILLE PATTERN DOTS-4568
+28B9 BRAILLE PATTERN DOTS-14568
+28BA BRAILLE PATTERN DOTS-24568
+28BB BRAILLE PATTERN DOTS-124568
+28BC BRAILLE PATTERN DOTS-34568
+28BD BRAILLE PATTERN DOTS-134568
+28BE BRAILLE PATTERN DOTS-234568
+28BF BRAILLE PATTERN DOTS-1234568
+28C0 BRAILLE PATTERN DOTS-78
+28C1 BRAILLE PATTERN DOTS-178
+28C2 BRAILLE PATTERN DOTS-278
+28C3 BRAILLE PATTERN DOTS-1278
+28C4 BRAILLE PATTERN DOTS-378
+28C5 BRAILLE PATTERN DOTS-1378
+28C6 BRAILLE PATTERN DOTS-2378
+28C7 BRAILLE PATTERN DOTS-12378
+28C8 BRAILLE PATTERN DOTS-478
+28C9 BRAILLE PATTERN DOTS-1478
+28CA BRAILLE PATTERN DOTS-2478
+28CB BRAILLE PATTERN DOTS-12478
+28CC BRAILLE PATTERN DOTS-3478
+28CD BRAILLE PATTERN DOTS-13478
+28CE BRAILLE PATTERN DOTS-23478
+28CF BRAILLE PATTERN DOTS-123478
+28D0 BRAILLE PATTERN DOTS-578
+28D1 BRAILLE PATTERN DOTS-1578
+28D2 BRAILLE PATTERN DOTS-2578
+28D3 BRAILLE PATTERN DOTS-12578
+28D4 BRAILLE PATTERN DOTS-3578
+28D5 BRAILLE PATTERN DOTS-13578
+28D6 BRAILLE PATTERN DOTS-23578
+28D7 BRAILLE PATTERN DOTS-123578
+28D8 BRAILLE PATTERN DOTS-4578
+28D9 BRAILLE PATTERN DOTS-14578
+28DA BRAILLE PATTERN DOTS-24578
+28DB BRAILLE PATTERN DOTS-124578
+28DC BRAILLE PATTERN DOTS-34578
+28DD BRAILLE PATTERN DOTS-134578
+28DE BRAILLE PATTERN DOTS-234578
+28DF BRAILLE PATTERN DOTS-1234578
+28E0 BRAILLE PATTERN DOTS-678
+28E1 BRAILLE PATTERN DOTS-1678
+28E2 BRAILLE PATTERN DOTS-2678
+28E3 BRAILLE PATTERN DOTS-12678
+28E4 BRAILLE PATTERN DOTS-3678
+28E5 BRAILLE PATTERN DOTS-13678
+28E6 BRAILLE PATTERN DOTS-23678
+28E7 BRAILLE PATTERN DOTS-123678
+28E8 BRAILLE PATTERN DOTS-4678
+28E9 BRAILLE PATTERN DOTS-14678
+28EA BRAILLE PATTERN DOTS-24678
+28EB BRAILLE PATTERN DOTS-124678
+28EC BRAILLE PATTERN DOTS-34678
+28ED BRAILLE PATTERN DOTS-134678
+28EE BRAILLE PATTERN DOTS-234678
+28EF BRAILLE PATTERN DOTS-1234678
+28F0 BRAILLE PATTERN DOTS-5678
+28F1 BRAILLE PATTERN DOTS-15678
+28F2 BRAILLE PATTERN DOTS-25678
+28F3 BRAILLE PATTERN DOTS-125678
+28F4 BRAILLE PATTERN DOTS-35678
+28F5 BRAILLE PATTERN DOTS-135678
+28F6 BRAILLE PATTERN DOTS-235678
+28F7 BRAILLE PATTERN DOTS-1235678
+28F8 BRAILLE PATTERN DOTS-45678
+28F9 BRAILLE PATTERN DOTS-145678
+28FA BRAILLE PATTERN DOTS-245678
+28FB BRAILLE PATTERN DOTS-1245678
+28FC BRAILLE PATTERN DOTS-345678
+28FD BRAILLE PATTERN DOTS-1345678
+28FE BRAILLE PATTERN DOTS-2345678
+28FF BRAILLE PATTERN DOTS-12345678
+@@ 2900 Supplemental Arrows-B 297F
+@ Supplemental arrows
+2900 RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+ = z notation partial surjection
+2901 RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+ = z notation finite surjection
+2902 LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2903 RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+2904 LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+2905 RIGHTWARDS TWO-HEADED ARROW FROM BAR
+ = maps to
+2906 LEFTWARDS DOUBLE ARROW FROM BAR
+ = maps from
+ x (long leftwards arrow from bar - 27FB)
+2907 RIGHTWARDS DOUBLE ARROW FROM BAR
+ = maps to
+ x (long rightwards arrow from bar - 27FC)
+2908 DOWNWARDS ARROW WITH HORIZONTAL STROKE
+2909 UPWARDS ARROW WITH HORIZONTAL STROKE
+290A UPWARDS TRIPLE ARROW
+ x (upwards double arrow - 21D1)
+ x (upwards quadruple arrow - 27F0)
+290B DOWNWARDS TRIPLE ARROW
+ x (downwards double arrow - 21D3)
+ x (downwards quadruple arrow - 27F1)
+290C LEFTWARDS DOUBLE DASH ARROW
+290D RIGHTWARDS DOUBLE DASH ARROW
+290E LEFTWARDS TRIPLE DASH ARROW
+290F RIGHTWARDS TRIPLE DASH ARROW
+2910 RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+2911 RIGHTWARDS ARROW WITH DOTTED STEM
+2912 UPWARDS ARROW TO BAR
+2913 DOWNWARDS ARROW TO BAR
+2914 RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+ = z notation partial injection
+2915 RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ = z notation finite injection
+2916 RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+ = bijective mapping
+ = z notation bijection
+2917 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+ = z notation surjective injection
+2918 RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ = z notation finite surjective injection
+2919 LEFTWARDS ARROW-TAIL
+291A RIGHTWARDS ARROW-TAIL
+291B LEFTWARDS DOUBLE ARROW-TAIL
+291C RIGHTWARDS DOUBLE ARROW-TAIL
+291D LEFTWARDS ARROW TO BLACK DIAMOND
+291E RIGHTWARDS ARROW TO BLACK DIAMOND
+291F LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2920 RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+2921 NORTH WEST AND SOUTH EAST ARROW
+2922 NORTH EAST AND SOUTH WEST ARROW
+2923 NORTH WEST ARROW WITH HOOK
+2924 NORTH EAST ARROW WITH HOOK
+2925 SOUTH EAST ARROW WITH HOOK
+2926 SOUTH WEST ARROW WITH HOOK
+2927 NORTH WEST ARROW AND NORTH EAST ARROW
+2928 NORTH EAST ARROW AND SOUTH EAST ARROW
+2929 SOUTH EAST ARROW AND SOUTH WEST ARROW
+292A SOUTH WEST ARROW AND NORTH WEST ARROW
+292B RISING DIAGONAL CROSSING FALLING DIAGONAL
+292C FALLING DIAGONAL CROSSING RISING DIAGONAL
+292D SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+292E NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+292F FALLING DIAGONAL CROSSING NORTH EAST ARROW
+2930 RISING DIAGONAL CROSSING SOUTH EAST ARROW
+2931 NORTH EAST ARROW CROSSING NORTH WEST ARROW
+2932 NORTH WEST ARROW CROSSING NORTH EAST ARROW
+2933 WAVE ARROW POINTING DIRECTLY RIGHT
+ x (rightwards wave arrow - 219D)
+2934 ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+2935 ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+2937 ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+2938 RIGHT-SIDE ARC CLOCKWISE ARROW
+2939 LEFT-SIDE ARC ANTICLOCKWISE ARROW
+293A TOP ARC ANTICLOCKWISE ARROW
+293B BOTTOM ARC ANTICLOCKWISE ARROW
+293C TOP ARC CLOCKWISE ARROW WITH MINUS
+293D TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+293E LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+293F LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+2940 ANTICLOCKWISE CLOSED CIRCLE ARROW
+ x (combining anticlockwise ring overlay - 20DA)
+2941 CLOCKWISE CLOSED CIRCLE ARROW
+ x (combining clockwise ring overlay - 20D9)
+2942 RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+2943 LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+2944 SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+2945 RIGHTWARDS ARROW WITH PLUS BELOW
+2946 LEFTWARDS ARROW WITH PLUS BELOW
+2947 RIGHTWARDS ARROW THROUGH X
+2948 LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+2949 UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+294A LEFT BARB UP RIGHT BARB DOWN HARPOON
+294B LEFT BARB DOWN RIGHT BARB UP HARPOON
+294C UP BARB RIGHT DOWN BARB LEFT HARPOON
+294D UP BARB LEFT DOWN BARB RIGHT HARPOON
+294E LEFT BARB UP RIGHT BARB UP HARPOON
+294F UP BARB RIGHT DOWN BARB RIGHT HARPOON
+2950 LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+2951 UP BARB LEFT DOWN BARB LEFT HARPOON
+2952 LEFTWARDS HARPOON WITH BARB UP TO BAR
+2953 RIGHTWARDS HARPOON WITH BARB UP TO BAR
+2954 UPWARDS HARPOON WITH BARB RIGHT TO BAR
+2955 DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+2956 LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+2957 RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+2958 UPWARDS HARPOON WITH BARB LEFT TO BAR
+2959 DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+295A LEFTWARDS HARPOON WITH BARB UP FROM BAR
+295B RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+295C UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+295D DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+295E LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+295F RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+2960 UPWARDS HARPOON WITH BARB LEFT FROM BAR
+2961 DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+2962 LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+2963 UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2964 RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2965 DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+2966 LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+2967 LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+2968 RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+2969 RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+296A LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296B LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296C RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+296D RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+296E UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+296F DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+2970 RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+ x (superset of - 2283)
+2971 EQUALS SIGN ABOVE RIGHTWARDS ARROW
+2972 TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+2973 LEFTWARDS ARROW ABOVE TILDE OPERATOR
+2974 RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+2975 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+2976 LESS-THAN ABOVE LEFTWARDS ARROW
+2977 LEFTWARDS ARROW THROUGH LESS-THAN
+2978 GREATER-THAN ABOVE RIGHTWARDS ARROW
+2979 SUBSET ABOVE RIGHTWARDS ARROW
+297A LEFTWARDS ARROW THROUGH SUBSET
+297B SUPERSET ABOVE LEFTWARDS ARROW
+@ Fish tails
+297C LEFT FISH TAIL
+297D RIGHT FISH TAIL
+297E UP FISH TAIL
+297F DOWN FISH TAIL
+@@ 2980 Miscellaneous Mathematical Symbols-B 29FF
+@ Miscellaneous mathematical symbols
+2980 TRIPLE VERTICAL BAR DELIMITER
+ x (triple vertical bar binary relation - 2AF4)
+ x (large triple vertical bar operator - 2AFC)
+2981 Z NOTATION SPOT
+ * medium-small-sized black circle
+ x (bullet operator - 2219)
+ x (black circle - 25CF)
+2982 Z NOTATION TYPE COLON
+ x (tibetan sign rnam bcad - 0F7F)
+@ Brackets
+2983 LEFT WHITE CURLY BRACKET
+2984 RIGHT WHITE CURLY BRACKET
+2985 LEFT WHITE PARENTHESIS
+ x (fullwidth left white parenthesis - FF5F)
+2986 RIGHT WHITE PARENTHESIS
+ * used for Bourbakist intervals
+ x (fullwidth right white parenthesis - FF60)
+2987 Z NOTATION LEFT IMAGE BRACKET
+2988 Z NOTATION RIGHT IMAGE BRACKET
+2989 Z NOTATION LEFT BINDING BRACKET
+298A Z NOTATION RIGHT BINDING BRACKET
+298B LEFT SQUARE BRACKET WITH UNDERBAR
+298C RIGHT SQUARE BRACKET WITH UNDERBAR
+298D LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 LEFT ANGLE BRACKET WITH DOT
+2992 RIGHT ANGLE BRACKET WITH DOT
+2993 LEFT ARC LESS-THAN BRACKET
+2994 RIGHT ARC GREATER-THAN BRACKET
+2995 DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 LEFT BLACK TORTOISE SHELL BRACKET
+ x (left tortoise shell bracket - 3014)
+ x (left white tortoise shell bracket - 3018)
+2998 RIGHT BLACK TORTOISE SHELL BRACKET
+@ Fences
+2999 DOTTED FENCE
+ * four close dots vertical
+299A VERTICAL ZIGZAG LINE
+ x (wavy line - 2307)
+@ Angles
+299B MEASURED ANGLE OPENING LEFT
+ x (measured angle - 2221)
+299C RIGHT ANGLE VARIANT WITH SQUARE
+ x (right angle - 221F)
+299D MEASURED RIGHT ANGLE WITH DOT
+299E ANGLE WITH S INSIDE
+299F ACUTE ANGLE
+29A0 SPHERICAL ANGLE OPENING LEFT
+ x (spherical angle - 2222)
+29A1 SPHERICAL ANGLE OPENING UP
+29A2 TURNED ANGLE
+ x (angle - 2220)
+29A3 REVERSED ANGLE
+29A4 ANGLE WITH UNDERBAR
+29A5 REVERSED ANGLE WITH UNDERBAR
+29A6 OBLIQUE ANGLE OPENING UP
+29A7 OBLIQUE ANGLE OPENING DOWN
+29A8 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+29AA MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+29AC MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+29AD MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+29AE MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+29AF MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+@ Empty sets
+29B0 REVERSED EMPTY SET
+ x (empty set - 2205)
+ x (apl functional symbol circle backslash - 2349)
+29B1 EMPTY SET WITH OVERBAR
+29B2 EMPTY SET WITH SMALL CIRCLE ABOVE
+29B3 EMPTY SET WITH RIGHT ARROW ABOVE
+29B4 EMPTY SET WITH LEFT ARROW ABOVE
+@ Circle symbols
+29B5 CIRCLE WITH HORIZONTAL BAR
+ x (circled minus - 2296)
+29B6 CIRCLED VERTICAL BAR
+29B7 CIRCLED PARALLEL
+29B8 CIRCLED REVERSE SOLIDUS
+29B9 CIRCLED PERPENDICULAR
+29BA CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+29BB CIRCLE WITH SUPERIMPOSED X
+ x (circled times - 2297)
+29BC CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+29BD UP ARROW THROUGH CIRCLE
+29BE CIRCLED WHITE BULLET
+ x (circled ring operator - 229A)
+ x (apl functional symbol circle jot - 233E)
+ x (bullseye - 25CE)
+29BF CIRCLED BULLET
+ * forms part of a graduated set of circles with enclosed black circle of different sizes
+ x (circled dot operator - 2299)
+ x (fisheye - 25C9)
+ x (n-ary circled dot operator - 2A00)
+29C0 CIRCLED LESS-THAN
+29C1 CIRCLED GREATER-THAN
+29C2 CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+29C3 CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+@ Square symbols
+29C4 SQUARED RISING DIAGONAL SLASH
+ x (apl functional symbol quad slash - 2341)
+ x (masu mark - 303C)
+29C5 SQUARED FALLING DIAGONAL SLASH
+ x (apl functional symbol quad backslash - 2342)
+29C6 SQUARED ASTERISK
+29C7 SQUARED SMALL CIRCLE
+ x (apl functional symbol quad jot - 233B)
+29C8 SQUARED SQUARE
+29C9 TWO JOINED SQUARES
+@ Triangle symbols
+29CA TRIANGLE WITH DOT ABOVE
+29CB TRIANGLE WITH UNDERBAR
+29CC S IN TRIANGLE
+29CD TRIANGLE WITH SERIFS AT BOTTOM
+ x (white up-pointing triangle - 25B3)
+29CE RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+29CF LEFT TRIANGLE BESIDE VERTICAL BAR
+29D0 VERTICAL BAR BESIDE RIGHT TRIANGLE
+@ Bowtie symbols
+29D1 BOWTIE WITH LEFT HALF BLACK
+ x (bowtie - 22C8)
+29D2 BOWTIE WITH RIGHT HALF BLACK
+29D3 BLACK BOWTIE
+29D4 TIMES WITH LEFT HALF BLACK
+ x (left normal factor semidirect product - 22C9)
+29D5 TIMES WITH RIGHT HALF BLACK
+ x (right normal factor semidirect product - 22CA)
+29D6 WHITE HOURGLASS
+ = vertical bowtie
+ = white framus
+ x (hourglass - 231B)
+29D7 BLACK HOURGLASS
+@ Fences
+29D8 LEFT WIGGLY FENCE
+ x (presentation form for vertical wavy low line - FE34)
+29D9 RIGHT WIGGLY FENCE
+29DA LEFT DOUBLE WIGGLY FENCE
+29DB RIGHT DOUBLE WIGGLY FENCE
+@ Miscellaneous mathematical symbols
+29DC INCOMPLETE INFINITY
+ = ISOtech entity &iinfin;
+ x (infinity - 221E)
+29DD TIE OVER INFINITY
+29DE INFINITY NEGATED WITH VERTICAL BAR
+29DF DOUBLE-ENDED MULTIMAP
+ x (multimap - 22B8)
+29E0 SQUARE WITH CONTOURED OUTLINE
+ = D'Alembertian
+ x (lower right drop-shadowed white square - 274F)
+29E1 INCREASES AS
+ x (normal subgroup of or equal to - 22B4)
+29E2 SHUFFLE PRODUCT
+ x (z notation bag membership - 22FF)
+@ Relations
+29E3 EQUALS SIGN AND SLANTED PARALLEL
+ x (number sign - 0023)
+ x (equal and parallel to - 22D5)
+29E4 EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+29E5 IDENTICAL TO AND SLANTED PARALLEL
+ x (triple horizontal bar with double vertical stroke - 2A68)
+29E6 GLEICH STARK
+ = tautological equivalent
+@ Miscellaneous mathematical symbols
+29E7 THERMODYNAMIC
+ * vertical bar crossed by two horizontals
+ x (not equal to - 2260)
+29E8 DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+ x (up-pointing triangle with left half black - 25ED)
+29E9 DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+ x (up-pointing triangle with right half black - 25EE)
+29EA BLACK DIAMOND WITH DOWN ARROW
+29EB BLACK LOZENGE
+ x (lozenge - 25CA)
+29EC WHITE CIRCLE WITH DOWN ARROW
+29ED BLACK CIRCLE WITH DOWN ARROW
+@ Error bar symbols
+29EE ERROR-BARRED WHITE SQUARE
+29EF ERROR-BARRED BLACK SQUARE
+29F0 ERROR-BARRED WHITE DIAMOND
+29F1 ERROR-BARRED BLACK DIAMOND
+29F2 ERROR-BARRED WHITE CIRCLE
+29F3 ERROR-BARRED BLACK CIRCLE
+@ Miscellaneous mathematical symbols
+29F4 RULE-DELAYED
+ = colon right arrow
+29F5 REVERSE SOLIDUS OPERATOR
+ x (reverse solidus - 005C)
+ x (set minus - 2216)
+29F6 SOLIDUS WITH OVERBAR
+29F7 REVERSE SOLIDUS WITH HORIZONTAL STROKE
+@ Large operators
+29F8 BIG SOLIDUS
+ x (division slash - 2215)
+29F9 BIG REVERSE SOLIDUS
+ = z notation schema hiding
+ x (set minus - 2216)
+@ Specialized plus sign operators
+29FA DOUBLE PLUS
+29FB TRIPLE PLUS
+@ Brackets
+29FC LEFT-POINTING CURVED ANGLE BRACKET
+ x (precedes - 227A)
+ x (left-pointing angle bracket - 2329)
+29FD RIGHT-POINTING CURVED ANGLE BRACKET
+ x (succeeds - 227B)
+ x (right-pointing angle bracket - 232A)
+@ Miscellaneous mathematical symbols
+29FE TINY
+ x (plus sign - 002B)
+29FF MINY
+ x (minus sign - 2212)
+@@ 2A00 Supplemental Mathematical Operators 2AFF
+@ N-ary operators
+2A00 N-ARY CIRCLED DOT OPERATOR
+ x (circled dot operator - 2299)
+ x (fisheye - 25C9)
+2A01 N-ARY CIRCLED PLUS OPERATOR
+ x (circled plus - 2295)
+2A02 N-ARY CIRCLED TIMES OPERATOR
+ x (circled times - 2297)
+2A03 N-ARY UNION OPERATOR WITH DOT
+2A04 N-ARY UNION OPERATOR WITH PLUS
+ x (multiset union - 228E)
+2A05 N-ARY SQUARE INTERSECTION OPERATOR
+ x (square cap - 2293)
+2A06 N-ARY SQUARE UNION OPERATOR
+ x (square cup - 2294)
+2A07 TWO LOGICAL AND OPERATOR
+ = merge
+ x (two intersecting logical and - 2A55)
+2A08 TWO LOGICAL OR OPERATOR
+ x (two intersecting logical or - 2A56)
+2A09 N-ARY TIMES OPERATOR
+ x (multiplication sign - 00D7)
+@ Summations and integrals
+2A0A MODULO TWO SUM
+ x (n-ary summation - 2211)
+2A0B SUMMATION WITH INTEGRAL
+2A0C QUADRUPLE INTEGRAL OPERATOR
+ x (triple integral - 222D)
+ # 222B 222B 222B 222B
+2A0D FINITE PART INTEGRAL
+2A0E INTEGRAL WITH DOUBLE STROKE
+2A0F INTEGRAL AVERAGE WITH SLASH
+2A10 CIRCULATION FUNCTION
+2A11 ANTICLOCKWISE INTEGRATION
+2A12 LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+2A13 LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+2A14 LINE INTEGRATION NOT INCLUDING THE POLE
+2A15 INTEGRAL AROUND A POINT OPERATOR
+ x (contour integral - 222E)
+2A16 QUATERNION INTEGRAL OPERATOR
+2A17 INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+2A18 INTEGRAL WITH TIMES SIGN
+2A19 INTEGRAL WITH INTERSECTION
+2A1A INTEGRAL WITH UNION
+2A1B INTEGRAL WITH OVERBAR
+ = upper integral
+2A1C INTEGRAL WITH UNDERBAR
+ = lower integral
+@ Miscellaneous large operators
+2A1D JOIN
+ = large bowtie
+ * relational database theory
+ x (bowtie - 22C8)
+ x (full outer join - 27D7)
+2A1E LARGE LEFT TRIANGLE OPERATOR
+ * relational database theory
+ x (white left-pointing triangle - 25C1)
+2A1F Z NOTATION SCHEMA COMPOSITION
+ x (z notation relational composition - 2A3E)
+2A20 Z NOTATION SCHEMA PIPING
+ x (much greater-than - 226B)
+2A21 Z NOTATION SCHEMA PROJECTION
+ x (upwards harpoon with barb rightwards - 21BE)
+@ Plus and minus sign operators
+2A22 PLUS SIGN WITH SMALL CIRCLE ABOVE
+2A23 PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+2A24 PLUS SIGN WITH TILDE ABOVE
+ = positive difference or sum
+2A25 PLUS SIGN WITH DOT BELOW
+ x (dot plus - 2214)
+2A26 PLUS SIGN WITH TILDE BELOW
+ = sum or positive difference
+2A27 PLUS SIGN WITH SUBSCRIPT TWO
+ = nim-addition
+2A28 PLUS SIGN WITH BLACK TRIANGLE
+2A29 MINUS SIGN WITH COMMA ABOVE
+2A2A MINUS SIGN WITH DOT BELOW
+ x (dot minus - 2238)
+2A2B MINUS SIGN WITH FALLING DOTS
+2A2C MINUS SIGN WITH RISING DOTS
+2A2D PLUS SIGN IN LEFT HALF CIRCLE
+2A2E PLUS SIGN IN RIGHT HALF CIRCLE
+@ Multiplication and division sign operators
+2A2F VECTOR OR CROSS PRODUCT
+ x (multiplication sign - 00D7)
+2A30 MULTIPLICATION SIGN WITH DOT ABOVE
+2A31 MULTIPLICATION SIGN WITH UNDERBAR
+2A32 SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+2A33 SMASH PRODUCT
+2A34 MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+2A35 MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+2A36 CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+2A37 MULTIPLICATION SIGN IN DOUBLE CIRCLE
+2A38 CIRCLED DIVISION SIGN
+@ Miscellaneous mathematical operators
+2A39 PLUS SIGN IN TRIANGLE
+2A3A MINUS SIGN IN TRIANGLE
+2A3B MULTIPLICATION SIGN IN TRIANGLE
+2A3C INTERIOR PRODUCT
+ x (right floor - 230B)
+2A3D RIGHTHAND INTERIOR PRODUCT
+ x (left floor - 230A)
+ x (turned not sign - 2319)
+2A3E Z NOTATION RELATIONAL COMPOSITION
+ x (z notation schema composition - 2A1F)
+2A3F AMALGAMATION OR COPRODUCT
+ x (n-ary coproduct - 2210)
+@ Intersections and unions
+2A40 INTERSECTION WITH DOT
+ x (logical and - 2227)
+ x (and with dot - 27D1)
+2A41 UNION WITH MINUS SIGN
+ = z notation bag subtraction
+ x (multiset union - 228E)
+2A42 UNION WITH OVERBAR
+2A43 INTERSECTION WITH OVERBAR
+2A44 INTERSECTION WITH LOGICAL AND
+2A45 UNION WITH LOGICAL OR
+2A46 UNION ABOVE INTERSECTION
+2A47 INTERSECTION ABOVE UNION
+2A48 UNION ABOVE BAR ABOVE INTERSECTION
+2A49 INTERSECTION ABOVE BAR ABOVE UNION
+2A4A UNION BESIDE AND JOINED WITH UNION
+2A4B INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+2A4C CLOSED UNION WITH SERIFS
+ x (union - 222A)
+2A4D CLOSED INTERSECTION WITH SERIFS
+ x (intersection - 2229)
+2A4E DOUBLE SQUARE INTERSECTION
+2A4F DOUBLE SQUARE UNION
+2A50 CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+@ Logical ands and ors
+2A51 LOGICAL AND WITH DOT ABOVE
+2A52 LOGICAL OR WITH DOT ABOVE
+2A53 DOUBLE LOGICAL AND
+2A54 DOUBLE LOGICAL OR
+2A55 TWO INTERSECTING LOGICAL AND
+ x (two logical and operator - 2A07)
+2A56 TWO INTERSECTING LOGICAL OR
+ x (two logical or operator - 2A08)
+2A57 SLOPING LARGE OR
+2A58 SLOPING LARGE AND
+2A59 LOGICAL OR OVERLAPPING LOGICAL AND
+2A5A LOGICAL AND WITH MIDDLE STEM
+2A5B LOGICAL OR WITH MIDDLE STEM
+2A5C LOGICAL AND WITH HORIZONTAL DASH
+2A5D LOGICAL OR WITH HORIZONTAL DASH
+2A5E LOGICAL AND WITH DOUBLE OVERBAR
+ x (perspective - 2306)
+2A5F LOGICAL AND WITH UNDERBAR
+2A60 LOGICAL AND WITH DOUBLE UNDERBAR
+ x (estimates - 2259)
+2A61 SMALL VEE WITH UNDERBAR
+ x (equiangular to - 225A)
+2A62 LOGICAL OR WITH DOUBLE OVERBAR
+2A63 LOGICAL OR WITH DOUBLE UNDERBAR
+ x (equiangular to - 225A)
+@ Miscellaneous mathematical operators
+2A64 Z NOTATION DOMAIN ANTIRESTRICTION
+2A65 Z NOTATION RANGE ANTIRESTRICTION
+ x (conical taper - 2332)
+@ Relational operators
+2A66 EQUALS SIGN WITH DOT BELOW
+ x (approaches the limit - 2250)
+2A67 IDENTICAL WITH DOT ABOVE
+2A68 TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+ = identical and parallel to
+ x (equal and parallel to - 22D5)
+ x (identical to and slanted parallel - 29E5)
+2A69 TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+2A6A TILDE OPERATOR WITH DOT ABOVE
+2A6B TILDE OPERATOR WITH RISING DOTS
+ x (homothetic - 223B)
+2A6C SIMILAR MINUS SIMILAR
+2A6D CONGRUENT WITH DOT ABOVE
+ x (approximately equal to - 2245)
+2A6E EQUALS WITH ASTERISK
+ x (star equals - 225B)
+2A6F ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+2A70 APPROXIMATELY EQUAL OR EQUAL TO
+2A71 EQUALS SIGN ABOVE PLUS SIGN
+ * black stands slightly better (chess notation)
+2A72 PLUS SIGN ABOVE EQUALS SIGN
+ * white stands slightly better (chess notation)
+2A73 EQUALS SIGN ABOVE TILDE OPERATOR
+2A74 DOUBLE COLON EQUAL
+ # 003A 003A 003D
+2A75 TWO CONSECUTIVE EQUALS SIGNS
+ # 003D 003D
+2A76 THREE CONSECUTIVE EQUALS SIGNS
+ # 003D 003D 003D
+2A77 EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+2A78 EQUIVALENT WITH FOUR DOTS ABOVE
+2A79 LESS-THAN WITH CIRCLE INSIDE
+2A7A GREATER-THAN WITH CIRCLE INSIDE
+2A7B LESS-THAN WITH QUESTION MARK ABOVE
+2A7C GREATER-THAN WITH QUESTION MARK ABOVE
+2A7D LESS-THAN OR SLANTED EQUAL TO
+ x (less-than or equal to - 2264)
+2A7E GREATER-THAN OR SLANTED EQUAL TO
+ x (greater-than or equal to - 2265)
+2A7F LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A80 GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+2A81 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A82 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+2A83 LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+2A84 GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+2A85 LESS-THAN OR APPROXIMATE
+2A86 GREATER-THAN OR APPROXIMATE
+2A87 LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+ x (less-than but not equal to - 2268)
+2A88 GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+ x (greater-than but not equal to - 2269)
+2A89 LESS-THAN AND NOT APPROXIMATE
+2A8A GREATER-THAN AND NOT APPROXIMATE
+2A8B LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+ x (less-than equal to or greater-than - 22DA)
+2A8C GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+ x (greater-than equal to or less-than - 22DB)
+2A8D LESS-THAN ABOVE SIMILAR OR EQUAL
+2A8E GREATER-THAN ABOVE SIMILAR OR EQUAL
+2A8F LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+2A90 GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+2A91 LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+2A92 GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+2A93 LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+2A94 GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+2A95 SLANTED EQUAL TO OR LESS-THAN
+ x (equal to or less-than - 22DC)
+2A96 SLANTED EQUAL TO OR GREATER-THAN
+ x (equal to or greater-than - 22DD)
+2A97 SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+2A98 SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+2A99 DOUBLE-LINE EQUAL TO OR LESS-THAN
+ x (equal to or less-than - 22DC)
+2A9A DOUBLE-LINE EQUAL TO OR GREATER-THAN
+ x (equal to or greater-than - 22DD)
+2A9B DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+2A9C DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+2A9D SIMILAR OR LESS-THAN
+2A9E SIMILAR OR GREATER-THAN
+2A9F SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+2AA0 SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+2AA1 DOUBLE NESTED LESS-THAN
+ = absolute continuity
+ x (much less-than - 226A)
+2AA2 DOUBLE NESTED GREATER-THAN
+ x (much greater-than - 226B)
+2AA3 DOUBLE NESTED LESS-THAN WITH UNDERBAR
+2AA4 GREATER-THAN OVERLAPPING LESS-THAN
+2AA5 GREATER-THAN BESIDE LESS-THAN
+2AA6 LESS-THAN CLOSED BY CURVE
+2AA7 GREATER-THAN CLOSED BY CURVE
+2AA8 LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AA9 GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+2AAA SMALLER THAN
+2AAB LARGER THAN
+2AAC SMALLER THAN OR EQUAL TO
+2AAD LARGER THAN OR EQUAL TO
+2AAE EQUALS SIGN WITH BUMPY ABOVE
+ x (difference between - 224F)
+2AAF PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+ x (precedes or equal to - 227C)
+2AB0 SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+ x (succeeds or equal to - 227D)
+2AB1 PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+2AB2 SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+2AB3 PRECEDES ABOVE EQUALS SIGN
+2AB4 SUCCEEDS ABOVE EQUALS SIGN
+2AB5 PRECEDES ABOVE NOT EQUAL TO
+2AB6 SUCCEEDS ABOVE NOT EQUAL TO
+2AB7 PRECEDES ABOVE ALMOST EQUAL TO
+2AB8 SUCCEEDS ABOVE ALMOST EQUAL TO
+2AB9 PRECEDES ABOVE NOT ALMOST EQUAL TO
+2ABA SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+2ABB DOUBLE PRECEDES
+2ABC DOUBLE SUCCEEDS
+@ Subset and superset relations
+2ABD SUBSET WITH DOT
+2ABE SUPERSET WITH DOT
+2ABF SUBSET WITH PLUS SIGN BELOW
+2AC0 SUPERSET WITH PLUS SIGN BELOW
+2AC1 SUBSET WITH MULTIPLICATION SIGN BELOW
+2AC2 SUPERSET WITH MULTIPLICATION SIGN BELOW
+2AC3 SUBSET OF OR EQUAL TO WITH DOT ABOVE
+2AC4 SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+2AC5 SUBSET OF ABOVE EQUALS SIGN
+2AC6 SUPERSET OF ABOVE EQUALS SIGN
+2AC7 SUBSET OF ABOVE TILDE OPERATOR
+2AC8 SUPERSET OF ABOVE TILDE OPERATOR
+2AC9 SUBSET OF ABOVE ALMOST EQUAL TO
+2ACA SUPERSET OF ABOVE ALMOST EQUAL TO
+2ACB SUBSET OF ABOVE NOT EQUAL TO
+2ACC SUPERSET OF ABOVE NOT EQUAL TO
+2ACD SQUARE LEFT OPEN BOX OPERATOR
+2ACE SQUARE RIGHT OPEN BOX OPERATOR
+2ACF CLOSED SUBSET
+ x (subset of - 2282)
+2AD0 CLOSED SUPERSET
+ x (superset of - 2283)
+2AD1 CLOSED SUBSET OR EQUAL TO
+2AD2 CLOSED SUPERSET OR EQUAL TO
+2AD3 SUBSET ABOVE SUPERSET
+2AD4 SUPERSET ABOVE SUBSET
+2AD5 SUBSET ABOVE SUBSET
+2AD6 SUPERSET ABOVE SUPERSET
+2AD7 SUPERSET BESIDE SUBSET
+2AD8 SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+@ Forks
+2AD9 ELEMENT OF OPENING DOWNWARDS
+ x (element of - 2208)
+ x (element of opening upwards - 27D2)
+2ADA PITCHFORK WITH TEE TOP
+ x (pitchfork - 22D4)
+2ADB TRANSVERSAL INTERSECTION
+ x (pitchfork - 22D4)
+2ADC FORKING (not independent)
+ = not independent
+ * an equational logic symbol, not a computing science symbol
+ * non-independence (original concept) is related to forking
+ : 2ADD 0338
+2ADD NONFORKING (independent)
+ = independent
+ * an equational logic symbol, not a computing science symbol
+ * independence (original concept) is related to non-forking
+@ Tacks and turnstiles
+2ADE SHORT LEFT TACK
+ x (left tack - 22A3)
+2ADF SHORT DOWN TACK
+ x (down tack - 22A4)
+2AE0 SHORT UP TACK
+ x (up tack - 22A5)
+2AE1 PERPENDICULAR WITH S
+2AE2 VERTICAL BAR TRIPLE RIGHT TURNSTILE
+ = ordinarily satisfies
+2AE3 DOUBLE VERTICAL BAR LEFT TURNSTILE
+ x (forces - 22A9)
+2AE4 VERTICAL BAR DOUBLE LEFT TURNSTILE
+ x (true - 22A8)
+2AE5 DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+2AE6 LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+ x (forces - 22A9)
+2AE7 SHORT DOWN TACK WITH OVERBAR
+ x (down tack - 22A4)
+ x (apl functional symbol up tack overbar - 2351)
+2AE8 SHORT UP TACK WITH UNDERBAR
+ x (up tack - 22A5)
+ x (apl functional symbol down tack underbar - 234A)
+2AE9 SHORT UP TACK ABOVE SHORT DOWN TACK
+2AEA DOUBLE DOWN TACK
+2AEB DOUBLE UP TACK
+ = independence
+ * probability theory
+2AEC DOUBLE STROKE NOT SIGN
+ x (not sign - 00AC)
+2AED REVERSED DOUBLE STROKE NOT SIGN
+ x (reversed not sign - 2310)
+@ Vertical line operators
+2AEE DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+ x (does not divide - 2224)
+2AEF VERTICAL LINE WITH CIRCLE ABOVE
+2AF0 VERTICAL LINE WITH CIRCLE BELOW
+2AF1 DOWN TACK WITH CIRCLE BELOW
+ = necessarily satisfies
+ x (up tack with circle above - 27DF)
+2AF2 PARALLEL WITH HORIZONTAL STROKE
+ x (not parallel to - 2226)
+2AF3 PARALLEL WITH TILDE OPERATOR
+2AF4 TRIPLE VERTICAL BAR BINARY RELATION
+ = interleave
+ x (triple vertical bar delimiter - 2980)
+2AF5 TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+@ Miscellaneous mathematical operator
+2AF6 TRIPLE COLON OPERATOR
+ * logic
+ x (tricolon - 205D)
+ x (vertical ellipsis - 22EE)
+@ Relations
+2AF7 TRIPLE NESTED LESS-THAN
+ x (very much less-than - 22D8)
+2AF8 TRIPLE NESTED GREATER-THAN
+ x (very much greater-than - 22D9)
+2AF9 DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+ x (less-than over equal to - 2266)
+2AFA DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+ x (greater-than over equal to - 2267)
+2AFB TRIPLE SOLIDUS BINARY RELATION
+ x (triple vertical bar binary relation - 2AF4)
+@ Operators
+2AFC LARGE TRIPLE VERTICAL BAR OPERATOR
+ * often n-ary
+ x (triple vertical bar binary relation - 2AF4)
+ x (triple vertical bar delimiter - 2980)
+2AFD DOUBLE SOLIDUS OPERATOR
+ x (parallel to - 2225)
+2AFE WHITE VERTICAL BAR
+ = Dijkstra choice
+2AFF N-ARY WHITE VERTICAL BAR
+ = n-ary Dijkstra choice
+@@ 2B00 Miscellaneous Symbols and Arrows 2BFF
+@ White and black arrows
+@+ Other white and black arrows to complete this set can be found in the Arrows and Dingbats blocks.
+2B00 NORTH EAST WHITE ARROW
+2B01 NORTH WEST WHITE ARROW
+2B02 SOUTH EAST WHITE ARROW
+2B03 SOUTH WEST WHITE ARROW
+2B04 LEFT RIGHT WHITE ARROW
+2B05 LEFTWARDS BLACK ARROW
+2B06 UPWARDS BLACK ARROW
+2B07 DOWNWARDS BLACK ARROW
+2B08 NORTH EAST BLACK ARROW
+2B09 NORTH WEST BLACK ARROW
+2B0A SOUTH EAST BLACK ARROW
+2B0B SOUTH WEST BLACK ARROW
+2B0C LEFT RIGHT BLACK ARROW
+2B0D UP DOWN BLACK ARROW
+@ Arrows with bent tips
+2B0E RIGHTWARDS ARROW WITH TIP DOWNWARDS
+2B0F RIGHTWARDS ARROW WITH TIP UPWARDS
+2B10 LEFTWARDS ARROW WITH TIP DOWNWARDS
+2B11 LEFTWARDS ARROW WITH TIP UPWARDS
+@ Squares
+2B12 SQUARE WITH TOP HALF BLACK
+ x (square with left half black - 25E7)
+2B13 SQUARE WITH BOTTOM HALF BLACK
+@@ 2C00 Glagolitic 2C5F
+@ Capital letters
+2C00 GLAGOLITIC CAPITAL LETTER AZU
+2C01 GLAGOLITIC CAPITAL LETTER BUKY
+2C02 GLAGOLITIC CAPITAL LETTER VEDE
+2C03 GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04 GLAGOLITIC CAPITAL LETTER DOBRO
+2C05 GLAGOLITIC CAPITAL LETTER YESTU
+2C06 GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07 GLAGOLITIC CAPITAL LETTER DZELO
+2C08 GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09 GLAGOLITIC CAPITAL LETTER IZHE
+2C0A GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B GLAGOLITIC CAPITAL LETTER I
+2C0C GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D GLAGOLITIC CAPITAL LETTER KAKO
+2C0E GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10 GLAGOLITIC CAPITAL LETTER NASHI
+2C11 GLAGOLITIC CAPITAL LETTER ONU
+2C12 GLAGOLITIC CAPITAL LETTER POKOJI
+2C13 GLAGOLITIC CAPITAL LETTER RITSI
+2C14 GLAGOLITIC CAPITAL LETTER SLOVO
+2C15 GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16 GLAGOLITIC CAPITAL LETTER UKU
+2C17 GLAGOLITIC CAPITAL LETTER FRITU
+2C18 GLAGOLITIC CAPITAL LETTER HERU
+2C19 GLAGOLITIC CAPITAL LETTER OTU
+2C1A GLAGOLITIC CAPITAL LETTER PE
+2C1B GLAGOLITIC CAPITAL LETTER SHTA
+2C1C GLAGOLITIC CAPITAL LETTER TSI
+2C1D GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E GLAGOLITIC CAPITAL LETTER SHA
+2C1F GLAGOLITIC CAPITAL LETTER YERU
+2C20 GLAGOLITIC CAPITAL LETTER YERI
+2C21 GLAGOLITIC CAPITAL LETTER YATI
+2C22 GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23 GLAGOLITIC CAPITAL LETTER YU
+2C24 GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25 GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26 GLAGOLITIC CAPITAL LETTER YO
+2C27 GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28 GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29 GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A GLAGOLITIC CAPITAL LETTER FITA
+2C2B GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+@ Small letters
+2C30 GLAGOLITIC SMALL LETTER AZU
+2C31 GLAGOLITIC SMALL LETTER BUKY
+2C32 GLAGOLITIC SMALL LETTER VEDE
+2C33 GLAGOLITIC SMALL LETTER GLAGOLI
+2C34 GLAGOLITIC SMALL LETTER DOBRO
+2C35 GLAGOLITIC SMALL LETTER YESTU
+2C36 GLAGOLITIC SMALL LETTER ZHIVETE
+2C37 GLAGOLITIC SMALL LETTER DZELO
+2C38 GLAGOLITIC SMALL LETTER ZEMLJA
+2C39 GLAGOLITIC SMALL LETTER IZHE
+2C3A GLAGOLITIC SMALL LETTER INITIAL IZHE
+2C3B GLAGOLITIC SMALL LETTER I
+2C3C GLAGOLITIC SMALL LETTER DJERVI
+2C3D GLAGOLITIC SMALL LETTER KAKO
+2C3E GLAGOLITIC SMALL LETTER LJUDIJE
+2C3F GLAGOLITIC SMALL LETTER MYSLITE
+2C40 GLAGOLITIC SMALL LETTER NASHI
+2C41 GLAGOLITIC SMALL LETTER ONU
+2C42 GLAGOLITIC SMALL LETTER POKOJI
+2C43 GLAGOLITIC SMALL LETTER RITSI
+2C44 GLAGOLITIC SMALL LETTER SLOVO
+2C45 GLAGOLITIC SMALL LETTER TVRIDO
+2C46 GLAGOLITIC SMALL LETTER UKU
+2C47 GLAGOLITIC SMALL LETTER FRITU
+2C48 GLAGOLITIC SMALL LETTER HERU
+2C49 GLAGOLITIC SMALL LETTER OTU
+2C4A GLAGOLITIC SMALL LETTER PE
+2C4B GLAGOLITIC SMALL LETTER SHTA
+2C4C GLAGOLITIC SMALL LETTER TSI
+2C4D GLAGOLITIC SMALL LETTER CHRIVI
+2C4E GLAGOLITIC SMALL LETTER SHA
+2C4F GLAGOLITIC SMALL LETTER YERU
+2C50 GLAGOLITIC SMALL LETTER YERI
+2C51 GLAGOLITIC SMALL LETTER YATI
+2C52 GLAGOLITIC SMALL LETTER SPIDERY HA
+2C53 GLAGOLITIC SMALL LETTER YU
+2C54 GLAGOLITIC SMALL LETTER SMALL YUS
+2C55 GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+2C56 GLAGOLITIC SMALL LETTER YO
+2C57 GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+2C58 GLAGOLITIC SMALL LETTER BIG YUS
+2C59 GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+2C5A GLAGOLITIC SMALL LETTER FITA
+2C5B GLAGOLITIC SMALL LETTER IZHITSA
+2C5C GLAGOLITIC SMALL LETTER SHTAPIC
+2C5D GLAGOLITIC SMALL LETTER TROKUTASTI A
+2C5E GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+@@ 2C80 Coptic 2CFF
+@+ Other Coptic letters derived from Demotic are encoded in the Greek and Coptic block.
+@ Bohairic Coptic letters
+2C80 COPTIC CAPITAL LETTER ALFA
+2C81 COPTIC SMALL LETTER ALFA
+2C82 COPTIC CAPITAL LETTER VIDA
+2C83 COPTIC SMALL LETTER VIDA
+2C84 COPTIC CAPITAL LETTER GAMMA
+2C85 COPTIC SMALL LETTER GAMMA
+2C86 COPTIC CAPITAL LETTER DALDA
+2C87 COPTIC SMALL LETTER DALDA
+2C88 COPTIC CAPITAL LETTER EIE
+2C89 COPTIC SMALL LETTER EIE
+2C8A COPTIC CAPITAL LETTER SOU
+2C8B COPTIC SMALL LETTER SOU
+2C8C COPTIC CAPITAL LETTER ZATA
+2C8D COPTIC SMALL LETTER ZATA
+2C8E COPTIC CAPITAL LETTER HATE
+2C8F COPTIC SMALL LETTER HATE
+2C90 COPTIC CAPITAL LETTER THETHE
+2C91 COPTIC SMALL LETTER THETHE
+2C92 COPTIC CAPITAL LETTER IAUDA
+2C93 COPTIC SMALL LETTER IAUDA
+2C94 COPTIC CAPITAL LETTER KAPA
+2C95 COPTIC SMALL LETTER KAPA
+2C96 COPTIC CAPITAL LETTER LAULA
+2C97 COPTIC SMALL LETTER LAULA
+2C98 COPTIC CAPITAL LETTER MI
+2C99 COPTIC SMALL LETTER MI
+2C9A COPTIC CAPITAL LETTER NI
+2C9B COPTIC SMALL LETTER NI
+2C9C COPTIC CAPITAL LETTER KSI
+2C9D COPTIC SMALL LETTER KSI
+2C9E COPTIC CAPITAL LETTER O
+2C9F COPTIC SMALL LETTER O
+2CA0 COPTIC CAPITAL LETTER PI
+2CA1 COPTIC SMALL LETTER PI
+2CA2 COPTIC CAPITAL LETTER RO
+2CA3 COPTIC SMALL LETTER RO
+2CA4 COPTIC CAPITAL LETTER SIMA
+2CA5 COPTIC SMALL LETTER SIMA
+2CA6 COPTIC CAPITAL LETTER TAU
+2CA7 COPTIC SMALL LETTER TAU
+2CA8 COPTIC CAPITAL LETTER UA
+2CA9 COPTIC SMALL LETTER UA
+2CAA COPTIC CAPITAL LETTER FI
+2CAB COPTIC SMALL LETTER FI
+2CAC COPTIC CAPITAL LETTER KHI
+2CAD COPTIC SMALL LETTER KHI
+2CAE COPTIC CAPITAL LETTER PSI
+2CAF COPTIC SMALL LETTER PSI
+2CB0 COPTIC CAPITAL LETTER OOU
+2CB1 COPTIC SMALL LETTER OOU
+@ Old Coptic and dialect letters
+2CB2 COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB3 COPTIC SMALL LETTER DIALECT-P ALEF
+2CB4 COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB5 COPTIC SMALL LETTER OLD COPTIC AIN
+2CB6 COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB7 COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB8 COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CB9 COPTIC SMALL LETTER DIALECT-P KAPA
+2CBA COPTIC CAPITAL LETTER DIALECT-P NI
+2CBB COPTIC SMALL LETTER DIALECT-P NI
+2CBC COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBD COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBE COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CBF COPTIC SMALL LETTER OLD COPTIC OOU
+2CC0 COPTIC CAPITAL LETTER SAMPI
+2CC1 COPTIC SMALL LETTER SAMPI
+2CC2 COPTIC CAPITAL LETTER CROSSED SHEI
+2CC3 COPTIC SMALL LETTER CROSSED SHEI
+2CC4 COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC5 COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC6 COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC7 COPTIC SMALL LETTER OLD COPTIC ESH
+2CC8 COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CC9 COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCA COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCB COPTIC SMALL LETTER DIALECT-P HORI
+2CCC COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCD COPTIC SMALL LETTER OLD COPTIC HORI
+2CCE COPTIC CAPITAL LETTER OLD COPTIC HA
+2CCF COPTIC SMALL LETTER OLD COPTIC HA
+2CD0 COPTIC CAPITAL LETTER L-SHAPED HA
+2CD1 COPTIC SMALL LETTER L-SHAPED HA
+2CD2 COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD3 COPTIC SMALL LETTER OLD COPTIC HEI
+2CD4 COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD5 COPTIC SMALL LETTER OLD COPTIC HAT
+2CD6 COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD7 COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD8 COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CD9 COPTIC SMALL LETTER OLD COPTIC DJA
+2CDA COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDB COPTIC SMALL LETTER OLD COPTIC SHIMA
+@ Old Nubian letters
+2CDC COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDD COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDE COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CDF COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE0 COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE1 COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE2 COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CE3 COPTIC SMALL LETTER OLD NUBIAN WAU
+@ Symbols
+2CE4 COPTIC SYMBOL KAI
+ x (greek kai symbol - 03D7)
+2CE5 COPTIC SYMBOL MI RO
+2CE6 COPTIC SYMBOL PI RO
+2CE7 COPTIC SYMBOL STAUROS
+2CE8 COPTIC SYMBOL TAU RO
+2CE9 COPTIC SYMBOL KHI RO
+ x (chi rho - 2627)
+2CEA COPTIC SYMBOL SHIMA SIMA
+@ Old Nubian punctuation
+2CF9 COPTIC OLD NUBIAN FULL STOP
+2CFA COPTIC OLD NUBIAN DIRECT QUESTION MARK
+2CFB COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+2CFC COPTIC OLD NUBIAN VERSE DIVIDER
+@ Numeric character
+2CFD COPTIC FRACTION ONE HALF
+@ Punctuation
+2CFE COPTIC FULL STOP
+2CFF COPTIC MORPHOLOGICAL DIVIDER
+@@ 2D00 Georgian Supplement 2D2F
+@ Small letters (Khutsuri)
+@+ This is the lowercase of the old ecclesiastical alphabet. See the Georgian block for uppercase Asomtavruli.
+2D00 GEORGIAN SMALL LETTER AN (Khutsuri)
+2D01 GEORGIAN SMALL LETTER BAN (Khutsuri)
+2D02 GEORGIAN SMALL LETTER GAN (Khutsuri)
+2D03 GEORGIAN SMALL LETTER DON (Khutsuri)
+2D04 GEORGIAN SMALL LETTER EN (Khutsuri)
+2D05 GEORGIAN SMALL LETTER VIN (Khutsuri)
+2D06 GEORGIAN SMALL LETTER ZEN (Khutsuri)
+2D07 GEORGIAN SMALL LETTER TAN (Khutsuri)
+2D08 GEORGIAN SMALL LETTER IN (Khutsuri)
+2D09 GEORGIAN SMALL LETTER KAN (Khutsuri)
+2D0A GEORGIAN SMALL LETTER LAS (Khutsuri)
+2D0B GEORGIAN SMALL LETTER MAN (Khutsuri)
+2D0C GEORGIAN SMALL LETTER NAR (Khutsuri)
+2D0D GEORGIAN SMALL LETTER ON (Khutsuri)
+2D0E GEORGIAN SMALL LETTER PAR (Khutsuri)
+2D0F GEORGIAN SMALL LETTER ZHAR (Khutsuri)
+2D10 GEORGIAN SMALL LETTER RAE (Khutsuri)
+2D11 GEORGIAN SMALL LETTER SAN (Khutsuri)
+2D12 GEORGIAN SMALL LETTER TAR (Khutsuri)
+2D13 GEORGIAN SMALL LETTER UN (Khutsuri)
+2D14 GEORGIAN SMALL LETTER PHAR (Khutsuri)
+2D15 GEORGIAN SMALL LETTER KHAR (Khutsuri)
+2D16 GEORGIAN SMALL LETTER GHAN (Khutsuri)
+2D17 GEORGIAN SMALL LETTER QAR (Khutsuri)
+2D18 GEORGIAN SMALL LETTER SHIN (Khutsuri)
+2D19 GEORGIAN SMALL LETTER CHIN (Khutsuri)
+2D1A GEORGIAN SMALL LETTER CAN (Khutsuri)
+2D1B GEORGIAN SMALL LETTER JIL (Khutsuri)
+2D1C GEORGIAN SMALL LETTER CIL (Khutsuri)
+2D1D GEORGIAN SMALL LETTER CHAR (Khutsuri)
+2D1E GEORGIAN SMALL LETTER XAN (Khutsuri)
+2D1F GEORGIAN SMALL LETTER JHAN (Khutsuri)
+2D20 GEORGIAN SMALL LETTER HAE (Khutsuri)
+2D21 GEORGIAN SMALL LETTER HE (Khutsuri)
+2D22 GEORGIAN SMALL LETTER HIE (Khutsuri)
+2D23 GEORGIAN SMALL LETTER WE (Khutsuri)
+2D24 GEORGIAN SMALL LETTER HAR (Khutsuri)
+2D25 GEORGIAN SMALL LETTER HOE (Khutsuri)
+@@ 2D30 Tifinagh 2D7F
+@ Letters
+2D30 TIFINAGH LETTER YA
+2D31 TIFINAGH LETTER YAB
+2D32 TIFINAGH LETTER YABH
+2D33 TIFINAGH LETTER YAG
+2D34 TIFINAGH LETTER YAGHH
+2D35 TIFINAGH LETTER BERBER ACADEMY YAJ
+2D36 TIFINAGH LETTER YAJ
+2D37 TIFINAGH LETTER YAD
+2D38 TIFINAGH LETTER YADH
+2D39 TIFINAGH LETTER YADD
+2D3A TIFINAGH LETTER YADDH
+2D3B TIFINAGH LETTER YEY
+2D3C TIFINAGH LETTER YAF
+2D3D TIFINAGH LETTER YAK
+2D3E TIFINAGH LETTER TUAREG YAK
+2D3F TIFINAGH LETTER YAKHH
+2D40 TIFINAGH LETTER YAH (Tuareg yab)
+ = Tuareg yab
+2D41 TIFINAGH LETTER BERBER ACADEMY YAH
+2D42 TIFINAGH LETTER TUAREG YAH
+2D43 TIFINAGH LETTER YAHH
+2D44 TIFINAGH LETTER YAA
+2D45 TIFINAGH LETTER YAKH
+2D46 TIFINAGH LETTER TUAREG YAKH
+2D47 TIFINAGH LETTER YAQ
+2D48 TIFINAGH LETTER TUAREG YAQ
+2D49 TIFINAGH LETTER YI
+2D4A TIFINAGH LETTER YAZH
+2D4B TIFINAGH LETTER AHAGGAR YAZH
+2D4C TIFINAGH LETTER TUAREG YAZH
+2D4D TIFINAGH LETTER YAL
+2D4E TIFINAGH LETTER YAM
+2D4F TIFINAGH LETTER YAN
+2D50 TIFINAGH LETTER TUAREG YAGN
+2D51 TIFINAGH LETTER TUAREG YANG
+2D52 TIFINAGH LETTER YAP
+2D53 TIFINAGH LETTER YU (Tuareg yaw)
+ = Tuareg yaw
+2D54 TIFINAGH LETTER YAR
+2D55 TIFINAGH LETTER YARR
+2D56 TIFINAGH LETTER YAGH
+2D57 TIFINAGH LETTER TUAREG YAGH
+2D58 TIFINAGH LETTER AYER YAGH (Adrar yaj)
+ = Adrar yaj
+2D59 TIFINAGH LETTER YAS
+2D5A TIFINAGH LETTER YASS
+2D5B TIFINAGH LETTER YASH
+2D5C TIFINAGH LETTER YAT
+2D5D TIFINAGH LETTER YATH
+2D5E TIFINAGH LETTER YACH
+2D5F TIFINAGH LETTER YATT
+2D60 TIFINAGH LETTER YAV
+2D61 TIFINAGH LETTER YAW
+2D62 TIFINAGH LETTER YAY
+2D63 TIFINAGH LETTER YAZ
+2D64 TIFINAGH LETTER TAWELLEMET YAZ (harpoon yaz)
+ = harpoon yaz
+2D65 TIFINAGH LETTER YAZZ
+@ Modifier letter
+2D6F TIFINAGH MODIFIER LETTER LABIALIZATION MARK (tamatart)
+ = tamatart
+ # <super> 2D61
+@@ 2D80 Ethiopic Extended 2DDF
+@ Syllables for Me'en
+2D80 ETHIOPIC SYLLABLE LOA
+2D81 ETHIOPIC SYLLABLE MOA
+2D82 ETHIOPIC SYLLABLE ROA
+2D83 ETHIOPIC SYLLABLE SOA
+2D84 ETHIOPIC SYLLABLE SHOA
+2D85 ETHIOPIC SYLLABLE BOA
+2D86 ETHIOPIC SYLLABLE TOA
+2D87 ETHIOPIC SYLLABLE COA
+2D88 ETHIOPIC SYLLABLE NOA
+2D89 ETHIOPIC SYLLABLE NYOA
+2D8A ETHIOPIC SYLLABLE GLOTTAL OA
+2D8B ETHIOPIC SYLLABLE ZOA
+2D8C ETHIOPIC SYLLABLE DOA
+2D8D ETHIOPIC SYLLABLE DDOA
+2D8E ETHIOPIC SYLLABLE JOA
+2D8F ETHIOPIC SYLLABLE THOA
+2D90 ETHIOPIC SYLLABLE CHOA
+2D91 ETHIOPIC SYLLABLE PHOA
+2D92 ETHIOPIC SYLLABLE POA
+@ Syllables for Blin
+2D93 ETHIOPIC SYLLABLE GGWA
+2D94 ETHIOPIC SYLLABLE GGWI
+2D95 ETHIOPIC SYLLABLE GGWEE
+2D96 ETHIOPIC SYLLABLE GGWE
+@ Syllables for Sebatbeit
+2DA0 ETHIOPIC SYLLABLE SSA
+2DA1 ETHIOPIC SYLLABLE SSU
+2DA2 ETHIOPIC SYLLABLE SSI
+2DA3 ETHIOPIC SYLLABLE SSAA
+2DA4 ETHIOPIC SYLLABLE SSEE
+2DA5 ETHIOPIC SYLLABLE SSE
+2DA6 ETHIOPIC SYLLABLE SSO
+2DA8 ETHIOPIC SYLLABLE CCA
+2DA9 ETHIOPIC SYLLABLE CCU
+2DAA ETHIOPIC SYLLABLE CCI
+2DAB ETHIOPIC SYLLABLE CCAA
+2DAC ETHIOPIC SYLLABLE CCEE
+2DAD ETHIOPIC SYLLABLE CCE
+2DAE ETHIOPIC SYLLABLE CCO
+2DB0 ETHIOPIC SYLLABLE ZZA
+2DB1 ETHIOPIC SYLLABLE ZZU
+2DB2 ETHIOPIC SYLLABLE ZZI
+2DB3 ETHIOPIC SYLLABLE ZZAA
+2DB4 ETHIOPIC SYLLABLE ZZEE
+2DB5 ETHIOPIC SYLLABLE ZZE
+2DB6 ETHIOPIC SYLLABLE ZZO
+2DB8 ETHIOPIC SYLLABLE CCHA
+2DB9 ETHIOPIC SYLLABLE CCHU
+2DBA ETHIOPIC SYLLABLE CCHI
+2DBB ETHIOPIC SYLLABLE CCHAA
+2DBC ETHIOPIC SYLLABLE CCHEE
+2DBD ETHIOPIC SYLLABLE CCHE
+2DBE ETHIOPIC SYLLABLE CCHO
+2DC0 ETHIOPIC SYLLABLE QYA
+2DC1 ETHIOPIC SYLLABLE QYU
+2DC2 ETHIOPIC SYLLABLE QYI
+2DC3 ETHIOPIC SYLLABLE QYAA
+2DC4 ETHIOPIC SYLLABLE QYEE
+2DC5 ETHIOPIC SYLLABLE QYE
+2DC6 ETHIOPIC SYLLABLE QYO
+2DC8 ETHIOPIC SYLLABLE KYA
+2DC9 ETHIOPIC SYLLABLE KYU
+2DCA ETHIOPIC SYLLABLE KYI
+2DCB ETHIOPIC SYLLABLE KYAA
+2DCC ETHIOPIC SYLLABLE KYEE
+2DCD ETHIOPIC SYLLABLE KYE
+2DCE ETHIOPIC SYLLABLE KYO
+2DD0 ETHIOPIC SYLLABLE XYA
+2DD1 ETHIOPIC SYLLABLE XYU
+2DD2 ETHIOPIC SYLLABLE XYI
+2DD3 ETHIOPIC SYLLABLE XYAA
+2DD4 ETHIOPIC SYLLABLE XYEE
+2DD5 ETHIOPIC SYLLABLE XYE
+2DD6 ETHIOPIC SYLLABLE XYO
+2DD8 ETHIOPIC SYLLABLE GYA
+2DD9 ETHIOPIC SYLLABLE GYU
+2DDA ETHIOPIC SYLLABLE GYI
+2DDB ETHIOPIC SYLLABLE GYAA
+2DDC ETHIOPIC SYLLABLE GYEE
+2DDD ETHIOPIC SYLLABLE GYE
+2DDE ETHIOPIC SYLLABLE GYO
+@@ 2E00 Supplemental Punctuation 2E7F
+@ New Testament editorial symbols
+2E00 RIGHT ANGLE SUBSTITUTION MARKER
+2E01 RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 LEFT SUBSTITUTION BRACKET
+2E03 RIGHT SUBSTITUTION BRACKET
+2E04 LEFT DOTTED SUBSTITUTION BRACKET
+2E05 RIGHT DOTTED SUBSTITUTION BRACKET
+2E06 RAISED INTERPOLATION MARKER
+2E07 RAISED DOTTED INTERPOLATION MARKER
+2E08 DOTTED TRANSPOSITION MARKER
+2E09 LEFT TRANSPOSITION BRACKET
+2E0A RIGHT TRANSPOSITION BRACKET
+2E0B RAISED SQUARE
+ * used as an opening raised omission bracket
+2E0C LEFT RAISED OMISSION BRACKET
+ * used as an opening or closing raised omission bracket
+2E0D RIGHT RAISED OMISSION BRACKET
+ * used as a closing or opening raised omission bracket
+@ Ancient Greek textual symbols
+2E0E EDITORIAL CORONIS
+ x (greek koronis - 1FBD)
+2E0F PARAGRAPHOS
+2E10 FORKED PARAGRAPHOS
+2E11 REVERSED FORKED PARAGRAPHOS
+2E12 HYPODIASTOLE
+2E13 DOTTED OBELOS
+ * glyph variants may look like '00F7' or '2238'
+ x (commercial minus sign - 2052)
+2E14 DOWNWARDS ANCORA
+2E15 UPWARDS ANCORA
+2E16 DOTTED RIGHT-POINTING ANGLE
+ = diple periestigmene
+@ Ancient Near-Eastern linguistic symbol
+2E17 DOUBLE OBLIQUE HYPHEN
+ * used in ancient Near-Eastern linguistics
+ * hyphen in Fraktur text uses 002D or 2010, but with a '2E17' glyph in Fraktur fonts
+ x (hyphen-minus - 002D)
+ x (equals sign - 003D)
+ x (hyphen - 2010)
+@ Brackets
+2E1C LEFT LOW PARAPHRASE BRACKET
+2E1D RIGHT LOW PARAPHRASE BRACKET
+ * used in N'Ko
+@@ 2E80 CJK Radicals Supplement 2EFF
+@ CJK radicals supplement
+2E80 CJK RADICAL REPEAT
+2E81 CJK RADICAL CLIFF
+ x 5382
+2E82 CJK RADICAL SECOND ONE
+ x 4E5B
+2E83 CJK RADICAL SECOND TWO
+ x 4E5A
+2E84 CJK RADICAL SECOND THREE
+ x 4E59
+2E85 CJK RADICAL PERSON
+ * form used on left side
+ x 4EBB
+2E86 CJK RADICAL BOX
+ x 5182
+2E87 CJK RADICAL TABLE
+ x 51E0
+2E88 CJK RADICAL KNIFE ONE
+ * form used at top
+ x 5200
+2E89 CJK RADICAL KNIFE TWO
+ * form used on right side
+ x 5202
+2E8A CJK RADICAL DIVINATION
+ * form used at top
+ x 535C
+2E8B CJK RADICAL SEAL
+ * form used at bottom
+ x 353E
+2E8C CJK RADICAL SMALL ONE
+ * form used at top
+ x 5C0F
+2E8D CJK RADICAL SMALL TWO
+ * form used at top
+ x 5C0F
+2E8E CJK RADICAL LAME ONE
+ x 5C22
+2E8F CJK RADICAL LAME TWO
+ x 5C23
+2E90 CJK RADICAL LAME THREE
+ x 5C22
+2E91 CJK RADICAL LAME FOUR
+ x 5C23
+2E92 CJK RADICAL SNAKE
+ x 5DF3
+2E93 CJK RADICAL THREAD
+ x 5E7A
+2E94 CJK RADICAL SNOUT ONE
+ x 5F51
+2E95 CJK RADICAL SNOUT TWO
+ x 5F50
+2E96 CJK RADICAL HEART ONE
+ * form used on left side
+ x 5FC4
+2E97 CJK RADICAL HEART TWO
+ * form used at bottom
+ x 5FC3
+2E98 CJK RADICAL HAND
+ * form used on left side
+ x 624C
+2E99 CJK RADICAL RAP
+ * form used on right side
+ x 6535
+2E9B CJK RADICAL CHOKE
+ x 65E1
+2E9C CJK RADICAL SUN
+ x 65E5
+2E9D CJK RADICAL MOON
+ x 6708
+2E9E CJK RADICAL DEATH
+ x 6B7A
+2E9F CJK RADICAL MOTHER
+ # 6BCD
+2EA0 CJK RADICAL CIVILIAN
+ x 6C11
+2EA1 CJK RADICAL WATER ONE
+ * form used on left side
+ x 6C35
+2EA2 CJK RADICAL WATER TWO
+ * form used (rarely) at bottom
+ x 6C3A
+2EA3 CJK RADICAL FIRE
+ * form used at bottom
+ x 706C
+2EA4 CJK RADICAL PAW ONE
+ * form used at top
+ x 722B
+2EA5 CJK RADICAL PAW TWO
+ * form used at top
+ x 722B
+2EA6 CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+ x 4E2C
+2EA7 CJK RADICAL COW
+ x 725B
+2EA8 CJK RADICAL DOG
+ * form used on left side
+ x 72AD
+2EA9 CJK RADICAL JADE
+ * form used on left side
+ x 738B
+2EAA CJK RADICAL BOLT OF CLOTH
+ * form used on left side
+ x 758B
+2EAB CJK RADICAL EYE
+ * form used at top
+ x (cjk radical net two - 2EB2)
+ x 76EE
+2EAC CJK RADICAL SPIRIT ONE
+ x 793A
+2EAD CJK RADICAL SPIRIT TWO
+ x 793B
+2EAE CJK RADICAL BAMBOO
+ x 7AF9
+2EAF CJK RADICAL SILK
+ * form used on left side
+ x 7CF9
+2EB0 CJK RADICAL C-SIMPLIFIED SILK
+ * form used on left side
+ x 7E9F
+2EB1 CJK RADICAL NET ONE
+ x 7F53
+2EB2 CJK RADICAL NET TWO
+ x (cjk radical eye - 2EAB)
+ x 7F52
+2EB3 CJK RADICAL NET THREE
+ x 7F51
+2EB4 CJK RADICAL NET FOUR
+ x 7F51
+2EB5 CJK RADICAL MESH
+ x 2626B
+2EB6 CJK RADICAL SHEEP
+ * form used on left side
+ x 7F8A
+2EB7 CJK RADICAL RAM
+ * form used at top
+ x 7F8A
+2EB8 CJK RADICAL EWE
+ x 7F8B
+2EB9 CJK RADICAL OLD
+ x 8002
+2EBA CJK RADICAL BRUSH ONE
+ x 8080
+2EBB CJK RADICAL BRUSH TWO
+ x 807F
+2EBC CJK RADICAL MEAT
+ x 8089
+2EBD CJK RADICAL MORTAR
+ x 81FC
+2EBE CJK RADICAL GRASS ONE
+ x 8279
+2EBF CJK RADICAL GRASS TWO
+ x 8279
+2EC0 CJK RADICAL GRASS THREE
+ x 8279
+2EC1 CJK RADICAL TIGER
+ x 864E
+2EC2 CJK RADICAL CLOTHES
+ * form used on left side
+ x 8864
+2EC3 CJK RADICAL WEST ONE
+ * form used at top
+ x 8980
+2EC4 CJK RADICAL WEST TWO
+ * form used on left side
+ x 897F
+2EC5 CJK RADICAL C-SIMPLIFIED SEE
+ x 89C1
+2EC6 CJK RADICAL SIMPLIFIED HORN
+ x 89D2
+2EC7 CJK RADICAL HORN
+ x 278B2
+2EC8 CJK RADICAL C-SIMPLIFIED SPEECH
+ x 8BA0
+2EC9 CJK RADICAL C-SIMPLIFIED SHELL
+ x 8D1D
+2ECA CJK RADICAL FOOT
+ * form used on left side
+ x 8DB3
+2ECB CJK RADICAL C-SIMPLIFIED CART
+ x 8F66
+2ECC CJK RADICAL SIMPLIFIED WALK
+ x 8FB6
+2ECD CJK RADICAL WALK ONE
+ x 8FB6
+2ECE CJK RADICAL WALK TWO
+ x 8FB6
+2ECF CJK RADICAL CITY
+ * form used on right side
+ x 9091
+2ED0 CJK RADICAL C-SIMPLIFIED GOLD
+ x 9485
+2ED1 CJK RADICAL LONG ONE
+ x 9577
+2ED2 CJK RADICAL LONG TWO
+ * form used on left side
+ x 9578
+2ED3 CJK RADICAL C-SIMPLIFIED LONG
+ x 957F
+2ED4 CJK RADICAL C-SIMPLIFIED GATE
+ x 95E8
+2ED5 CJK RADICAL MOUND ONE
+ x 961C
+ x 28E0F
+2ED6 CJK RADICAL MOUND TWO
+ * form used on left side
+ x 961D
+2ED7 CJK RADICAL RAIN
+ x 96E8
+2ED8 CJK RADICAL BLUE
+ x 9752
+2ED9 CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+ x 97E6
+2EDA CJK RADICAL C-SIMPLIFIED LEAF
+ x 9875
+2EDB CJK RADICAL C-SIMPLIFIED WIND
+ x 98CE
+2EDC CJK RADICAL C-SIMPLIFIED FLY
+ x 98DE
+2EDD CJK RADICAL EAT ONE
+ * form used at bottom
+ x 98DF
+2EDE CJK RADICAL EAT TWO
+ * form used on left side
+ x 2967F
+2EDF CJK RADICAL EAT THREE
+ * form used on left side
+ x 98E0
+2EE0 CJK RADICAL C-SIMPLIFIED EAT
+ * form used on left side
+ x 9963
+2EE1 CJK RADICAL HEAD
+ x 29810
+2EE2 CJK RADICAL C-SIMPLIFIED HORSE
+ x 9A6C
+2EE3 CJK RADICAL BONE
+ x 9AA8
+2EE4 CJK RADICAL GHOST
+ x 9B3C
+2EE5 CJK RADICAL C-SIMPLIFIED FISH
+ x 9C7C
+2EE6 CJK RADICAL C-SIMPLIFIED BIRD
+ x 9E1F
+2EE7 CJK RADICAL C-SIMPLIFIED SALT
+ x 9E75
+2EE8 CJK RADICAL SIMPLIFIED WHEAT
+ x 9EA6
+2EE9 CJK RADICAL SIMPLIFIED YELLOW
+ x 9EC4
+2EEA CJK RADICAL C-SIMPLIFIED FROG
+ x 9EFE
+2EEB CJK RADICAL J-SIMPLIFIED EVEN
+ x 6589
+2EEC CJK RADICAL C-SIMPLIFIED EVEN
+ x 9F50
+2EED CJK RADICAL J-SIMPLIFIED TOOTH
+ x 6B6F
+2EEE CJK RADICAL C-SIMPLIFIED TOOTH
+ x 9F7F
+2EEF CJK RADICAL J-SIMPLIFIED DRAGON
+ x 9F8D
+2EF0 CJK RADICAL C-SIMPLIFIED DRAGON
+ x 9F99
+2EF1 CJK RADICAL TURTLE
+ x 9F9C
+2EF2 CJK RADICAL J-SIMPLIFIED TURTLE
+ x 4E80
+2EF3 CJK RADICAL C-SIMPLIFIED TURTLE
+ # 9F9F
+@@ 2F00 Kangxi Radicals 2FDF
+@ Kangxi radicals
+2F00 KANGXI RADICAL ONE
+ # 4E00
+2F01 KANGXI RADICAL LINE
+ # 4E28
+2F02 KANGXI RADICAL DOT
+ # 4E36
+2F03 KANGXI RADICAL SLASH
+ # 4E3F
+2F04 KANGXI RADICAL SECOND
+ # 4E59
+2F05 KANGXI RADICAL HOOK
+ # 4E85
+2F06 KANGXI RADICAL TWO
+ # 4E8C
+2F07 KANGXI RADICAL LID
+ # 4EA0
+2F08 KANGXI RADICAL MAN
+ # 4EBA
+2F09 KANGXI RADICAL LEGS
+ # 513F
+2F0A KANGXI RADICAL ENTER
+ # 5165
+2F0B KANGXI RADICAL EIGHT
+ # 516B
+2F0C KANGXI RADICAL DOWN BOX
+ # 5182
+2F0D KANGXI RADICAL COVER
+ # 5196
+2F0E KANGXI RADICAL ICE
+ # 51AB
+2F0F KANGXI RADICAL TABLE
+ # 51E0
+2F10 KANGXI RADICAL OPEN BOX
+ # 51F5
+2F11 KANGXI RADICAL KNIFE
+ # 5200
+2F12 KANGXI RADICAL POWER
+ # 529B
+2F13 KANGXI RADICAL WRAP
+ # 52F9
+2F14 KANGXI RADICAL SPOON
+ # 5315
+2F15 KANGXI RADICAL RIGHT OPEN BOX
+ # 531A
+2F16 KANGXI RADICAL HIDING ENCLOSURE
+ # 5338
+2F17 KANGXI RADICAL TEN
+ # 5341
+2F18 KANGXI RADICAL DIVINATION
+ # 535C
+2F19 KANGXI RADICAL SEAL
+ # 5369
+2F1A KANGXI RADICAL CLIFF
+ # 5382
+2F1B KANGXI RADICAL PRIVATE
+ # 53B6
+2F1C KANGXI RADICAL AGAIN
+ # 53C8
+2F1D KANGXI RADICAL MOUTH
+ # 53E3
+2F1E KANGXI RADICAL ENCLOSURE
+ # 56D7
+2F1F KANGXI RADICAL EARTH
+ # 571F
+2F20 KANGXI RADICAL SCHOLAR
+ # 58EB
+2F21 KANGXI RADICAL GO
+ # 5902
+2F22 KANGXI RADICAL GO SLOWLY
+ # 590A
+2F23 KANGXI RADICAL EVENING
+ # 5915
+2F24 KANGXI RADICAL BIG
+ # 5927
+2F25 KANGXI RADICAL WOMAN
+ # 5973
+2F26 KANGXI RADICAL CHILD
+ # 5B50
+2F27 KANGXI RADICAL ROOF
+ # 5B80
+2F28 KANGXI RADICAL INCH
+ # 5BF8
+2F29 KANGXI RADICAL SMALL
+ # 5C0F
+2F2A KANGXI RADICAL LAME
+ # 5C22
+2F2B KANGXI RADICAL CORPSE
+ # 5C38
+2F2C KANGXI RADICAL SPROUT
+ # 5C6E
+2F2D KANGXI RADICAL MOUNTAIN
+ # 5C71
+2F2E KANGXI RADICAL RIVER
+ # 5DDB
+2F2F KANGXI RADICAL WORK
+ # 5DE5
+2F30 KANGXI RADICAL ONESELF
+ # 5DF1
+2F31 KANGXI RADICAL TURBAN
+ # 5DFE
+2F32 KANGXI RADICAL DRY
+ # 5E72
+2F33 KANGXI RADICAL SHORT THREAD
+ # 5E7A
+2F34 KANGXI RADICAL DOTTED CLIFF
+ # 5E7F
+2F35 KANGXI RADICAL LONG STRIDE
+ # 5EF4
+2F36 KANGXI RADICAL TWO HANDS
+ # 5EFE
+2F37 KANGXI RADICAL SHOOT
+ # 5F0B
+2F38 KANGXI RADICAL BOW
+ # 5F13
+2F39 KANGXI RADICAL SNOUT
+ # 5F50
+2F3A KANGXI RADICAL BRISTLE
+ # 5F61
+2F3B KANGXI RADICAL STEP
+ # 5F73
+2F3C KANGXI RADICAL HEART
+ # 5FC3
+2F3D KANGXI RADICAL HALBERD
+ # 6208
+2F3E KANGXI RADICAL DOOR
+ # 6236
+2F3F KANGXI RADICAL HAND
+ # 624B
+2F40 KANGXI RADICAL BRANCH
+ # 652F
+2F41 KANGXI RADICAL RAP
+ # 6534
+2F42 KANGXI RADICAL SCRIPT
+ # 6587
+2F43 KANGXI RADICAL DIPPER
+ # 6597
+2F44 KANGXI RADICAL AXE
+ # 65A4
+2F45 KANGXI RADICAL SQUARE
+ # 65B9
+2F46 KANGXI RADICAL NOT
+ # 65E0
+2F47 KANGXI RADICAL SUN
+ # 65E5
+2F48 KANGXI RADICAL SAY
+ # 66F0
+2F49 KANGXI RADICAL MOON
+ # 6708
+2F4A KANGXI RADICAL TREE
+ # 6728
+2F4B KANGXI RADICAL LACK
+ # 6B20
+2F4C KANGXI RADICAL STOP
+ # 6B62
+2F4D KANGXI RADICAL DEATH
+ # 6B79
+2F4E KANGXI RADICAL WEAPON
+ # 6BB3
+2F4F KANGXI RADICAL DO NOT
+ # 6BCB
+2F50 KANGXI RADICAL COMPARE
+ # 6BD4
+2F51 KANGXI RADICAL FUR
+ # 6BDB
+2F52 KANGXI RADICAL CLAN
+ # 6C0F
+2F53 KANGXI RADICAL STEAM
+ # 6C14
+2F54 KANGXI RADICAL WATER
+ # 6C34
+2F55 KANGXI RADICAL FIRE
+ # 706B
+2F56 KANGXI RADICAL CLAW
+ # 722A
+2F57 KANGXI RADICAL FATHER
+ # 7236
+2F58 KANGXI RADICAL DOUBLE X
+ # 723B
+2F59 KANGXI RADICAL HALF TREE TRUNK
+ # 723F
+2F5A KANGXI RADICAL SLICE
+ # 7247
+2F5B KANGXI RADICAL FANG
+ # 7259
+2F5C KANGXI RADICAL COW
+ # 725B
+2F5D KANGXI RADICAL DOG
+ # 72AC
+2F5E KANGXI RADICAL PROFOUND
+ # 7384
+2F5F KANGXI RADICAL JADE
+ # 7389
+2F60 KANGXI RADICAL MELON
+ # 74DC
+2F61 KANGXI RADICAL TILE
+ # 74E6
+2F62 KANGXI RADICAL SWEET
+ # 7518
+2F63 KANGXI RADICAL LIFE
+ # 751F
+2F64 KANGXI RADICAL USE
+ # 7528
+2F65 KANGXI RADICAL FIELD
+ # 7530
+2F66 KANGXI RADICAL BOLT OF CLOTH
+ # 758B
+2F67 KANGXI RADICAL SICKNESS
+ # 7592
+2F68 KANGXI RADICAL DOTTED TENT
+ # 7676
+2F69 KANGXI RADICAL WHITE
+ # 767D
+2F6A KANGXI RADICAL SKIN
+ # 76AE
+2F6B KANGXI RADICAL DISH
+ # 76BF
+2F6C KANGXI RADICAL EYE
+ # 76EE
+2F6D KANGXI RADICAL SPEAR
+ # 77DB
+2F6E KANGXI RADICAL ARROW
+ # 77E2
+2F6F KANGXI RADICAL STONE
+ # 77F3
+2F70 KANGXI RADICAL SPIRIT
+ # 793A
+2F71 KANGXI RADICAL TRACK
+ # 79B8
+2F72 KANGXI RADICAL GRAIN
+ # 79BE
+2F73 KANGXI RADICAL CAVE
+ # 7A74
+2F74 KANGXI RADICAL STAND
+ # 7ACB
+2F75 KANGXI RADICAL BAMBOO
+ # 7AF9
+2F76 KANGXI RADICAL RICE
+ # 7C73
+2F77 KANGXI RADICAL SILK
+ # 7CF8
+2F78 KANGXI RADICAL JAR
+ # 7F36
+2F79 KANGXI RADICAL NET
+ # 7F51
+2F7A KANGXI RADICAL SHEEP
+ # 7F8A
+2F7B KANGXI RADICAL FEATHER
+ # 7FBD
+2F7C KANGXI RADICAL OLD
+ # 8001
+2F7D KANGXI RADICAL AND
+ # 800C
+2F7E KANGXI RADICAL PLOW
+ # 8012
+2F7F KANGXI RADICAL EAR
+ # 8033
+2F80 KANGXI RADICAL BRUSH
+ # 807F
+2F81 KANGXI RADICAL MEAT
+ # 8089
+2F82 KANGXI RADICAL MINISTER
+ # 81E3
+2F83 KANGXI RADICAL SELF
+ # 81EA
+2F84 KANGXI RADICAL ARRIVE
+ # 81F3
+2F85 KANGXI RADICAL MORTAR
+ # 81FC
+2F86 KANGXI RADICAL TONGUE
+ # 820C
+2F87 KANGXI RADICAL OPPOSE
+ # 821B
+2F88 KANGXI RADICAL BOAT
+ # 821F
+2F89 KANGXI RADICAL STOPPING
+ # 826E
+2F8A KANGXI RADICAL COLOR
+ # 8272
+2F8B KANGXI RADICAL GRASS
+ # 8278
+2F8C KANGXI RADICAL TIGER
+ # 864D
+2F8D KANGXI RADICAL INSECT
+ # 866B
+2F8E KANGXI RADICAL BLOOD
+ # 8840
+2F8F KANGXI RADICAL WALK ENCLOSURE
+ # 884C
+2F90 KANGXI RADICAL CLOTHES
+ # 8863
+2F91 KANGXI RADICAL WEST
+ # 897E
+2F92 KANGXI RADICAL SEE
+ # 898B
+2F93 KANGXI RADICAL HORN
+ # 89D2
+2F94 KANGXI RADICAL SPEECH
+ # 8A00
+2F95 KANGXI RADICAL VALLEY
+ # 8C37
+2F96 KANGXI RADICAL BEAN
+ # 8C46
+2F97 KANGXI RADICAL PIG
+ # 8C55
+2F98 KANGXI RADICAL BADGER
+ # 8C78
+2F99 KANGXI RADICAL SHELL
+ # 8C9D
+2F9A KANGXI RADICAL RED
+ # 8D64
+2F9B KANGXI RADICAL RUN
+ # 8D70
+2F9C KANGXI RADICAL FOOT
+ # 8DB3
+2F9D KANGXI RADICAL BODY
+ # 8EAB
+2F9E KANGXI RADICAL CART
+ # 8ECA
+2F9F KANGXI RADICAL BITTER
+ # 8F9B
+2FA0 KANGXI RADICAL MORNING
+ # 8FB0
+2FA1 KANGXI RADICAL WALK
+ # 8FB5
+2FA2 KANGXI RADICAL CITY
+ # 9091
+2FA3 KANGXI RADICAL WINE
+ # 9149
+2FA4 KANGXI RADICAL DISTINGUISH
+ # 91C6
+2FA5 KANGXI RADICAL VILLAGE
+ # 91CC
+2FA6 KANGXI RADICAL GOLD
+ # 91D1
+2FA7 KANGXI RADICAL LONG
+ # 9577
+2FA8 KANGXI RADICAL GATE
+ # 9580
+2FA9 KANGXI RADICAL MOUND
+ # 961C
+2FAA KANGXI RADICAL SLAVE
+ # 96B6
+2FAB KANGXI RADICAL SHORT TAILED BIRD
+ # 96B9
+2FAC KANGXI RADICAL RAIN
+ # 96E8
+2FAD KANGXI RADICAL BLUE
+ # 9751
+2FAE KANGXI RADICAL WRONG
+ # 975E
+2FAF KANGXI RADICAL FACE
+ # 9762
+2FB0 KANGXI RADICAL LEATHER
+ # 9769
+2FB1 KANGXI RADICAL TANNED LEATHER
+ # 97CB
+2FB2 KANGXI RADICAL LEEK
+ # 97ED
+2FB3 KANGXI RADICAL SOUND
+ # 97F3
+2FB4 KANGXI RADICAL LEAF
+ # 9801
+2FB5 KANGXI RADICAL WIND
+ # 98A8
+2FB6 KANGXI RADICAL FLY
+ # 98DB
+2FB7 KANGXI RADICAL EAT
+ # 98DF
+2FB8 KANGXI RADICAL HEAD
+ # 9996
+2FB9 KANGXI RADICAL FRAGRANT
+ # 9999
+2FBA KANGXI RADICAL HORSE
+ # 99AC
+2FBB KANGXI RADICAL BONE
+ # 9AA8
+2FBC KANGXI RADICAL TALL
+ # 9AD8
+2FBD KANGXI RADICAL HAIR
+ # 9ADF
+2FBE KANGXI RADICAL FIGHT
+ # 9B25
+2FBF KANGXI RADICAL SACRIFICIAL WINE
+ # 9B2F
+2FC0 KANGXI RADICAL CAULDRON
+ # 9B32
+2FC1 KANGXI RADICAL GHOST
+ # 9B3C
+2FC2 KANGXI RADICAL FISH
+ # 9B5A
+2FC3 KANGXI RADICAL BIRD
+ # 9CE5
+2FC4 KANGXI RADICAL SALT
+ # 9E75
+2FC5 KANGXI RADICAL DEER
+ # 9E7F
+2FC6 KANGXI RADICAL WHEAT
+ # 9EA5
+2FC7 KANGXI RADICAL HEMP
+ # 9EBB
+2FC8 KANGXI RADICAL YELLOW
+ # 9EC3
+2FC9 KANGXI RADICAL MILLET
+ # 9ECD
+2FCA KANGXI RADICAL BLACK
+ # 9ED1
+2FCB KANGXI RADICAL EMBROIDERY
+ # 9EF9
+2FCC KANGXI RADICAL FROG
+ # 9EFD
+2FCD KANGXI RADICAL TRIPOD
+ # 9F0E
+2FCE KANGXI RADICAL DRUM
+ # 9F13
+2FCF KANGXI RADICAL RAT
+ # 9F20
+2FD0 KANGXI RADICAL NOSE
+ # 9F3B
+2FD1 KANGXI RADICAL EVEN
+ # 9F4A
+2FD2 KANGXI RADICAL TOOTH
+ # 9F52
+2FD3 KANGXI RADICAL DRAGON
+ # 9F8D
+2FD4 KANGXI RADICAL TURTLE
+ # 9F9C
+2FD5 KANGXI RADICAL FLUTE
+ # 9FA0
+@@ 2FF0 Ideographic Description Characters 2FFF
+@ Ideographic description characters
+@+ These are visibly displayed graphic characters, not invisible composition controls.
+2FF0 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+2FF1 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF2 IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+2FF3 IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+2FF4 IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+2FF5 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+2FF6 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+2FF7 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+2FF8 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+2FF9 IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+2FFA IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+2FFB IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+@@ 3000 CJK Symbols and Punctuation 303F
+@ CJK symbols and punctuation
+3000 IDEOGRAPHIC SPACE
+ x (space - 0020)
+ # <wide> 0020
+3001 IDEOGRAPHIC COMMA
+ x (comma - 002C)
+3002 IDEOGRAPHIC FULL STOP
+ x (full stop - 002E)
+3003 DITTO MARK
+ x (double prime - 2033)
+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005 IDEOGRAPHIC ITERATION MARK
+3006 IDEOGRAPHIC CLOSING MARK
+3007 IDEOGRAPHIC NUMBER ZERO
+ x (combining enclosing circle - 20DD)
+ x (white circle - 25CB)
+ x (large circle - 25EF)
+@ CJK angle brackets
+3008 LEFT ANGLE BRACKET
+ x (less-than sign - 003C)
+ x (single left-pointing angle quotation mark - 2039)
+ x (left-pointing angle bracket - 2329)
+ x (mathematical left angle bracket - 27E8)
+3009 RIGHT ANGLE BRACKET
+ x (greater-than sign - 003E)
+ x (single right-pointing angle quotation mark - 203A)
+ x (right-pointing angle bracket - 232A)
+ x (mathematical right angle bracket - 27E9)
+300A LEFT DOUBLE ANGLE BRACKET
+ x (left-pointing double angle quotation mark - 00AB)
+ x (mathematical left double angle bracket - 27EA)
+300B RIGHT DOUBLE ANGLE BRACKET
+ x (right-pointing double angle quotation mark - 00BB)
+ x (mathematical right double angle bracket - 27EB)
+@ CJK corner brackets
+@+ The CJK corner brackets, which function as quotation marks, are not recommended for general-purpose corner brackets. See the ceiling and floor characters, instead.
+300C LEFT CORNER BRACKET
+ x (left ceiling - 2308)
+300D RIGHT CORNER BRACKET
+ * used as quotation marks
+ x (right floor - 230B)
+300E LEFT WHITE CORNER BRACKET
+300F RIGHT WHITE CORNER BRACKET
+ * used as quotation marks
+@ CJK brackets
+3010 LEFT BLACK LENTICULAR BRACKET
+3011 RIGHT BLACK LENTICULAR BRACKET
+@ CJK symbols
+3012 POSTAL MARK
+3013 GETA MARK
+ * substitute for ideograph not in font
+@ CJK brackets
+3014 LEFT TORTOISE SHELL BRACKET
+3015 RIGHT TORTOISE SHELL BRACKET
+3016 LEFT WHITE LENTICULAR BRACKET
+3017 RIGHT WHITE LENTICULAR BRACKET
+3018 LEFT WHITE TORTOISE SHELL BRACKET
+3019 RIGHT WHITE TORTOISE SHELL BRACKET
+301A LEFT WHITE SQUARE BRACKET
+ = left abstract syntax bracket
+ x (mathematical left white square bracket - 27E6)
+301B RIGHT WHITE SQUARE BRACKET
+ = right abstract syntax bracket
+ x (mathematical right white square bracket - 27E7)
+@ CJK symbols and punctuation
+301C WAVE DASH
+@+ * This character was encoded to match JIS C 6226-1978 1-33 "wave dash". The JIS standards and some industry practice disagree in mapping.
+ x (wavy dash - 3030)
+ x (fullwidth tilde - FF5E)
+301D REVERSED DOUBLE PRIME QUOTATION MARK
+ * sometimes depicted as double prime quotation mark
+ x (left double quotation mark - 201C)
+ x (reversed double prime - 2036)
+301E DOUBLE PRIME QUOTATION MARK
+ * this is a mistaken analogue to 201D; 301F is preferred
+ x (right double quotation mark - 201D)
+ x (double prime - 2033)
+301F LOW DOUBLE PRIME QUOTATION MARK
+ * may be depicted as low inverse double prime quotation mark
+3020 POSTAL MARK FACE
+@ Suzhou numerals
+@+ The Suzhou numerals (Chinese su1zhou1ma3zi) are special numeric forms used by traders to display the prices of goods. The use of "HANGZHOU" in the names is a misnomer.
+3021 HANGZHOU NUMERAL ONE
+3022 HANGZHOU NUMERAL TWO
+3023 HANGZHOU NUMERAL THREE
+3024 HANGZHOU NUMERAL FOUR
+3025 HANGZHOU NUMERAL FIVE
+3026 HANGZHOU NUMERAL SIX
+3027 HANGZHOU NUMERAL SEVEN
+3028 HANGZHOU NUMERAL EIGHT
+3029 HANGZHOU NUMERAL NINE
+@ Diacritics
+302A IDEOGRAPHIC LEVEL TONE MARK
+302B IDEOGRAPHIC RISING TONE MARK
+302C IDEOGRAPHIC DEPARTING TONE MARK
+302D IDEOGRAPHIC ENTERING TONE MARK
+302E HANGUL SINGLE DOT TONE MARK
+ = single dot Bangjeom
+302F HANGUL DOUBLE DOT TONE MARK
+ = double dot Bangjeom
+@ Other CJK symbols
+3030 WAVY DASH
+ x (wavy line - 2307)
+ x (wave dash - 301C)
+3031 VERTICAL KANA REPEAT MARK
+3032 VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+ * the preceding two semantic characters are preferred to the following three glyphic forms
+3033 VERTICAL KANA REPEAT MARK UPPER HALF
+3034 VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+ * the preceding two are glyphs used in conjunction with the following glyph
+3035 VERTICAL KANA REPEAT MARK LOWER HALF
+3036 CIRCLED POSTAL MARK
+ # 3012 postal mark
+3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+@ Additional Suzhou numerals
+3038 HANGZHOU NUMERAL TEN
+ # 5341
+3039 HANGZHOU NUMERAL TWENTY
+ # 5344
+303A HANGZHOU NUMERAL THIRTY
+ # 5345
+@ Other CJK punctuation
+303B VERTICAL IDEOGRAPHIC ITERATION MARK
+303C MASU MARK
+ * informal abbreviation for Japanese -masu ending
+ x (squared rising diagonal slash - 29C4)
+303D PART ALTERNATION MARK
+ * marks the start of a song part in Japanese
+@ Special CJK indicators
+@+ These are visibly displayed graphic characters, not invisible formatting controls.
+303E IDEOGRAPHIC VARIATION INDICATOR
+ * visual indicator that the following ideograph is to be taken as a variant of the intended character
+303F IDEOGRAPHIC HALF FILL SPACE
+ * visual indicator of a screen space for half of an ideograph
+@@ 3040 Hiragana 309F
+@ Based on JIS X 0208
+3041 HIRAGANA LETTER SMALL A
+3042 HIRAGANA LETTER A
+3043 HIRAGANA LETTER SMALL I
+3044 HIRAGANA LETTER I
+3045 HIRAGANA LETTER SMALL U
+3046 HIRAGANA LETTER U
+3047 HIRAGANA LETTER SMALL E
+3048 HIRAGANA LETTER E
+3049 HIRAGANA LETTER SMALL O
+304A HIRAGANA LETTER O
+304B HIRAGANA LETTER KA
+304C HIRAGANA LETTER GA
+ : 304B 3099
+304D HIRAGANA LETTER KI
+304E HIRAGANA LETTER GI
+ : 304D 3099
+304F HIRAGANA LETTER KU
+3050 HIRAGANA LETTER GU
+ : 304F 3099
+3051 HIRAGANA LETTER KE
+3052 HIRAGANA LETTER GE
+ : 3051 3099
+3053 HIRAGANA LETTER KO
+3054 HIRAGANA LETTER GO
+ : 3053 3099
+3055 HIRAGANA LETTER SA
+3056 HIRAGANA LETTER ZA
+ : 3055 3099
+3057 HIRAGANA LETTER SI
+ = SHI
+3058 HIRAGANA LETTER ZI
+ = JI (not unique)
+ : 3057 3099
+3059 HIRAGANA LETTER SU
+305A HIRAGANA LETTER ZU
+ : 3059 3099
+305B HIRAGANA LETTER SE
+305C HIRAGANA LETTER ZE
+ : 305B 3099
+305D HIRAGANA LETTER SO
+305E HIRAGANA LETTER ZO
+ : 305D 3099
+305F HIRAGANA LETTER TA
+3060 HIRAGANA LETTER DA
+ : 305F 3099
+3061 HIRAGANA LETTER TI
+ = CHI
+3062 HIRAGANA LETTER DI
+ = JI (not unique)
+ : 3061 3099
+3063 HIRAGANA LETTER SMALL TU
+ = SMALL TSU
+3064 HIRAGANA LETTER TU
+ = TSU
+3065 HIRAGANA LETTER DU
+ = ZU (not unique)
+ : 3064 3099
+3066 HIRAGANA LETTER TE
+3067 HIRAGANA LETTER DE
+ : 3066 3099
+3068 HIRAGANA LETTER TO
+3069 HIRAGANA LETTER DO
+ : 3068 3099
+306A HIRAGANA LETTER NA
+306B HIRAGANA LETTER NI
+306C HIRAGANA LETTER NU
+306D HIRAGANA LETTER NE
+306E HIRAGANA LETTER NO
+306F HIRAGANA LETTER HA
+3070 HIRAGANA LETTER BA
+ : 306F 3099
+3071 HIRAGANA LETTER PA
+ : 306F 309A
+3072 HIRAGANA LETTER HI
+3073 HIRAGANA LETTER BI
+ : 3072 3099
+3074 HIRAGANA LETTER PI
+ : 3072 309A
+3075 HIRAGANA LETTER HU
+ = FU
+3076 HIRAGANA LETTER BU
+ : 3075 3099
+3077 HIRAGANA LETTER PU
+ : 3075 309A
+3078 HIRAGANA LETTER HE
+3079 HIRAGANA LETTER BE
+ : 3078 3099
+307A HIRAGANA LETTER PE
+ : 3078 309A
+307B HIRAGANA LETTER HO
+307C HIRAGANA LETTER BO
+ : 307B 3099
+307D HIRAGANA LETTER PO
+ : 307B 309A
+307E HIRAGANA LETTER MA
+307F HIRAGANA LETTER MI
+3080 HIRAGANA LETTER MU
+3081 HIRAGANA LETTER ME
+3082 HIRAGANA LETTER MO
+3083 HIRAGANA LETTER SMALL YA
+3084 HIRAGANA LETTER YA
+3085 HIRAGANA LETTER SMALL YU
+3086 HIRAGANA LETTER YU
+3087 HIRAGANA LETTER SMALL YO
+3088 HIRAGANA LETTER YO
+3089 HIRAGANA LETTER RA
+308A HIRAGANA LETTER RI
+308B HIRAGANA LETTER RU
+308C HIRAGANA LETTER RE
+308D HIRAGANA LETTER RO
+308E HIRAGANA LETTER SMALL WA
+308F HIRAGANA LETTER WA
+3090 HIRAGANA LETTER WI
+3091 HIRAGANA LETTER WE
+3092 HIRAGANA LETTER WO
+3093 HIRAGANA LETTER N
+3094 HIRAGANA LETTER VU
+ : 3046 3099
+@ Small letters
+3095 HIRAGANA LETTER SMALL KA
+3096 HIRAGANA LETTER SMALL KE
+@ Voicing marks
+3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+309A COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B KATAKANA-HIRAGANA VOICED SOUND MARK
+ # 0020 3099
+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ # 0020 309A
+@ Iteration marks
+309D HIRAGANA ITERATION MARK
+309E HIRAGANA VOICED ITERATION MARK
+ : 309D 3099
+@ Vertical form digraph
+309F HIRAGANA DIGRAPH YORI
+ # <vertical> 3088 308A
+@@ 30A0 Katakana 30FF
+@ Katakana punctuation
+30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN
+ x (equals sign - 003D)
+@ Based on JIS X 0208
+30A1 KATAKANA LETTER SMALL A
+30A2 KATAKANA LETTER A
+30A3 KATAKANA LETTER SMALL I
+30A4 KATAKANA LETTER I
+30A5 KATAKANA LETTER SMALL U
+30A6 KATAKANA LETTER U
+30A7 KATAKANA LETTER SMALL E
+30A8 KATAKANA LETTER E
+30A9 KATAKANA LETTER SMALL O
+30AA KATAKANA LETTER O
+30AB KATAKANA LETTER KA
+30AC KATAKANA LETTER GA
+ : 30AB 3099
+30AD KATAKANA LETTER KI
+30AE KATAKANA LETTER GI
+ : 30AD 3099
+30AF KATAKANA LETTER KU
+30B0 KATAKANA LETTER GU
+ : 30AF 3099
+30B1 KATAKANA LETTER KE
+30B2 KATAKANA LETTER GE
+ : 30B1 3099
+30B3 KATAKANA LETTER KO
+30B4 KATAKANA LETTER GO
+ : 30B3 3099
+30B5 KATAKANA LETTER SA
+30B6 KATAKANA LETTER ZA
+ : 30B5 3099
+30B7 KATAKANA LETTER SI
+ = SHI
+30B8 KATAKANA LETTER ZI
+ = JI (not unique)
+ : 30B7 3099
+30B9 KATAKANA LETTER SU
+30BA KATAKANA LETTER ZU
+ : 30B9 3099
+30BB KATAKANA LETTER SE
+30BC KATAKANA LETTER ZE
+ : 30BB 3099
+30BD KATAKANA LETTER SO
+30BE KATAKANA LETTER ZO
+ : 30BD 3099
+30BF KATAKANA LETTER TA
+30C0 KATAKANA LETTER DA
+ : 30BF 3099
+30C1 KATAKANA LETTER TI
+ = CHI
+30C2 KATAKANA LETTER DI
+ = JI (not unique)
+ : 30C1 3099
+30C3 KATAKANA LETTER SMALL TU
+ = SMALL TSU
+30C4 KATAKANA LETTER TU
+ = TSU
+30C5 KATAKANA LETTER DU
+ = ZU (not unique)
+ : 30C4 3099
+30C6 KATAKANA LETTER TE
+30C7 KATAKANA LETTER DE
+ : 30C6 3099
+30C8 KATAKANA LETTER TO
+30C9 KATAKANA LETTER DO
+ : 30C8 3099
+30CA KATAKANA LETTER NA
+30CB KATAKANA LETTER NI
+30CC KATAKANA LETTER NU
+30CD KATAKANA LETTER NE
+30CE KATAKANA LETTER NO
+30CF KATAKANA LETTER HA
+30D0 KATAKANA LETTER BA
+ : 30CF 3099
+30D1 KATAKANA LETTER PA
+ : 30CF 309A
+30D2 KATAKANA LETTER HI
+30D3 KATAKANA LETTER BI
+ : 30D2 3099
+30D4 KATAKANA LETTER PI
+ : 30D2 309A
+30D5 KATAKANA LETTER HU
+ = FU
+30D6 KATAKANA LETTER BU
+ : 30D5 3099
+30D7 KATAKANA LETTER PU
+ : 30D5 309A
+30D8 KATAKANA LETTER HE
+30D9 KATAKANA LETTER BE
+ : 30D8 3099
+30DA KATAKANA LETTER PE
+ : 30D8 309A
+30DB KATAKANA LETTER HO
+30DC KATAKANA LETTER BO
+ : 30DB 3099
+30DD KATAKANA LETTER PO
+ : 30DB 309A
+30DE KATAKANA LETTER MA
+30DF KATAKANA LETTER MI
+30E0 KATAKANA LETTER MU
+30E1 KATAKANA LETTER ME
+30E2 KATAKANA LETTER MO
+30E3 KATAKANA LETTER SMALL YA
+30E4 KATAKANA LETTER YA
+30E5 KATAKANA LETTER SMALL YU
+30E6 KATAKANA LETTER YU
+30E7 KATAKANA LETTER SMALL YO
+30E8 KATAKANA LETTER YO
+30E9 KATAKANA LETTER RA
+30EA KATAKANA LETTER RI
+30EB KATAKANA LETTER RU
+30EC KATAKANA LETTER RE
+30ED KATAKANA LETTER RO
+30EE KATAKANA LETTER SMALL WA
+30EF KATAKANA LETTER WA
+30F0 KATAKANA LETTER WI
+30F1 KATAKANA LETTER WE
+30F2 KATAKANA LETTER WO
+30F3 KATAKANA LETTER N
+30F4 KATAKANA LETTER VU
+ : 30A6 3099
+30F5 KATAKANA LETTER SMALL KA
+30F6 KATAKANA LETTER SMALL KE
+30F7 KATAKANA LETTER VA
+ : 30EF 3099
+30F8 KATAKANA LETTER VI
+ : 30F0 3099
+30F9 KATAKANA LETTER VE
+ : 30F1 3099
+30FA KATAKANA LETTER VO
+ : 30F2 3099
+@ Conjunction and length marks
+30FB KATAKANA MIDDLE DOT
+ x (middle dot - 00B7)
+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ x (em dash - 2014)
+@ Iteration marks
+30FD KATAKANA ITERATION MARK
+30FE KATAKANA VOICED ITERATION MARK
+ : 30FD 3099
+@ Vertical form digraph
+30FF KATAKANA DIGRAPH KOTO
+ # <vertical> 30B3 30C8
+@@ 3100 Bopomofo 312F
+@+ See also the Bopomofo Extended block
+@ Based on GB 2312
+3105 BOPOMOFO LETTER B
+3106 BOPOMOFO LETTER P
+3107 BOPOMOFO LETTER M
+3108 BOPOMOFO LETTER F
+3109 BOPOMOFO LETTER D
+310A BOPOMOFO LETTER T
+310B BOPOMOFO LETTER N
+310C BOPOMOFO LETTER L
+310D BOPOMOFO LETTER G
+310E BOPOMOFO LETTER K
+310F BOPOMOFO LETTER H
+3110 BOPOMOFO LETTER J
+3111 BOPOMOFO LETTER Q
+3112 BOPOMOFO LETTER X
+3113 BOPOMOFO LETTER ZH
+3114 BOPOMOFO LETTER CH
+3115 BOPOMOFO LETTER SH
+3116 BOPOMOFO LETTER R
+3117 BOPOMOFO LETTER Z
+3118 BOPOMOFO LETTER C
+3119 BOPOMOFO LETTER S
+311A BOPOMOFO LETTER A
+311B BOPOMOFO LETTER O
+311C BOPOMOFO LETTER E
+311D BOPOMOFO LETTER EH
+311E BOPOMOFO LETTER AI
+311F BOPOMOFO LETTER EI
+3120 BOPOMOFO LETTER AU
+3121 BOPOMOFO LETTER OU
+3122 BOPOMOFO LETTER AN
+3123 BOPOMOFO LETTER EN
+3124 BOPOMOFO LETTER ANG
+3125 BOPOMOFO LETTER ENG
+3126 BOPOMOFO LETTER ER
+3127 BOPOMOFO LETTER I
+3128 BOPOMOFO LETTER U
+3129 BOPOMOFO LETTER IU
+@ Dialect (non-Mandarin) letters
+312A BOPOMOFO LETTER V
+312B BOPOMOFO LETTER NG
+312C BOPOMOFO LETTER GN
+@@ 3130 Hangul Compatibility Jamo 318F
+@ Modern letters
+3131 HANGUL LETTER KIYEOK
+ # 1100 hangul choseong kiyeok
+3132 HANGUL LETTER SSANGKIYEOK
+ # 1101 hangul choseong ssangkiyeok
+3133 HANGUL LETTER KIYEOK-SIOS
+ # 11AA hangul jongseong kiyeok-sios
+3134 HANGUL LETTER NIEUN
+ # 1102 hangul choseong nieun
+3135 HANGUL LETTER NIEUN-CIEUC
+ # 11AC hangul jongseong nieun-cieuc
+3136 HANGUL LETTER NIEUN-HIEUH
+ # 11AD hangul jongseong nieun-hieuh
+3137 HANGUL LETTER TIKEUT
+ # 1103 hangul choseong tikeut
+3138 HANGUL LETTER SSANGTIKEUT
+ # 1104 hangul choseong ssangtikeut
+3139 HANGUL LETTER RIEUL
+ # 1105 hangul choseong rieul
+313A HANGUL LETTER RIEUL-KIYEOK
+ # 11B0 hangul jongseong rieul-kiyeok
+313B HANGUL LETTER RIEUL-MIEUM
+ # 11B1 hangul jongseong rieul-mieum
+313C HANGUL LETTER RIEUL-PIEUP
+ # 11B2 hangul jongseong rieul-pieup
+313D HANGUL LETTER RIEUL-SIOS
+ # 11B3 hangul jongseong rieul-sios
+313E HANGUL LETTER RIEUL-THIEUTH
+ # 11B4 hangul jongseong rieul-thieuth
+313F HANGUL LETTER RIEUL-PHIEUPH
+ # 11B5 hangul jongseong rieul-phieuph
+3140 HANGUL LETTER RIEUL-HIEUH
+ # 111A hangul choseong rieul-hieuh
+3141 HANGUL LETTER MIEUM
+ # 1106 hangul choseong mieum
+3142 HANGUL LETTER PIEUP
+ # 1107 hangul choseong pieup
+3143 HANGUL LETTER SSANGPIEUP
+ # 1108 hangul choseong ssangpieup
+3144 HANGUL LETTER PIEUP-SIOS
+ # 1121 hangul choseong pieup-sios
+3145 HANGUL LETTER SIOS
+ # 1109 hangul choseong sios
+3146 HANGUL LETTER SSANGSIOS
+ # 110A hangul choseong ssangsios
+3147 HANGUL LETTER IEUNG
+ # 110B hangul choseong ieung
+3148 HANGUL LETTER CIEUC
+ # 110C hangul choseong cieuc
+3149 HANGUL LETTER SSANGCIEUC
+ # 110D hangul choseong ssangcieuc
+314A HANGUL LETTER CHIEUCH
+ # 110E hangul choseong chieuch
+314B HANGUL LETTER KHIEUKH
+ # 110F hangul choseong khieukh
+314C HANGUL LETTER THIEUTH
+ # 1110 hangul choseong thieuth
+314D HANGUL LETTER PHIEUPH
+ # 1111 hangul choseong phieuph
+314E HANGUL LETTER HIEUH
+ # 1112 hangul choseong hieuh
+314F HANGUL LETTER A
+ # 1161 hangul jungseong a
+3150 HANGUL LETTER AE
+ # 1162 hangul jungseong ae
+3151 HANGUL LETTER YA
+ # 1163 hangul jungseong ya
+3152 HANGUL LETTER YAE
+ # 1164 hangul jungseong yae
+3153 HANGUL LETTER EO
+ # 1165 hangul jungseong eo
+3154 HANGUL LETTER E
+ # 1166 hangul jungseong e
+3155 HANGUL LETTER YEO
+ # 1167 hangul jungseong yeo
+3156 HANGUL LETTER YE
+ # 1168 hangul jungseong ye
+3157 HANGUL LETTER O
+ # 1169 hangul jungseong o
+3158 HANGUL LETTER WA
+ # 116A hangul jungseong wa
+3159 HANGUL LETTER WAE
+ # 116B hangul jungseong wae
+315A HANGUL LETTER OE
+ # 116C hangul jungseong oe
+315B HANGUL LETTER YO
+ # 116D hangul jungseong yo
+315C HANGUL LETTER U
+ # 116E hangul jungseong u
+315D HANGUL LETTER WEO
+ # 116F hangul jungseong weo
+315E HANGUL LETTER WE
+ # 1170 hangul jungseong we
+315F HANGUL LETTER WI
+ # 1171 hangul jungseong wi
+3160 HANGUL LETTER YU
+ # 1172 hangul jungseong yu
+3161 HANGUL LETTER EU
+ # 1173 hangul jungseong eu
+3162 HANGUL LETTER YI
+ # 1174 hangul jungseong yi
+3163 HANGUL LETTER I
+ # 1175 hangul jungseong i
+@ Special character
+3164 HANGUL FILLER
+ = HANGUL CAE OM
+ # 1160 hangul jungseong filler
+@ Archaic letters
+3165 HANGUL LETTER SSANGNIEUN
+ # 1114 hangul choseong ssangnieun
+3166 HANGUL LETTER NIEUN-TIKEUT
+ # 1115 hangul choseong nieun-tikeut
+3167 HANGUL LETTER NIEUN-SIOS
+ # 11C7 hangul jongseong nieun-sios
+3168 HANGUL LETTER NIEUN-PANSIOS
+ # 11C8 hangul jongseong nieun-pansios
+3169 HANGUL LETTER RIEUL-KIYEOK-SIOS
+ # 11CC hangul jongseong rieul-kiyeok-sios
+316A HANGUL LETTER RIEUL-TIKEUT
+ # 11CE hangul jongseong rieul-tikeut
+316B HANGUL LETTER RIEUL-PIEUP-SIOS
+ # 11D3 hangul jongseong rieul-pieup-sios
+316C HANGUL LETTER RIEUL-PANSIOS
+ # 11D7 hangul jongseong rieul-pansios
+316D HANGUL LETTER RIEUL-YEORINHIEUH
+ # 11D9 hangul jongseong rieul-yeorinhieuh
+316E HANGUL LETTER MIEUM-PIEUP
+ # 111C hangul choseong mieum-pieup
+316F HANGUL LETTER MIEUM-SIOS
+ # 11DD hangul jongseong mieum-sios
+3170 HANGUL LETTER MIEUM-PANSIOS
+ # 11DF hangul jongseong mieum-pansios
+3171 HANGUL LETTER KAPYEOUNMIEUM
+ # 111D hangul choseong kapyeounmieum
+3172 HANGUL LETTER PIEUP-KIYEOK
+ # 111E hangul choseong pieup-kiyeok
+3173 HANGUL LETTER PIEUP-TIKEUT
+ # 1120 hangul choseong pieup-tikeut
+3174 HANGUL LETTER PIEUP-SIOS-KIYEOK
+ # 1122 hangul choseong pieup-sios-kiyeok
+3175 HANGUL LETTER PIEUP-SIOS-TIKEUT
+ # 1123 hangul choseong pieup-sios-tikeut
+3176 HANGUL LETTER PIEUP-CIEUC
+ # 1127 hangul choseong pieup-cieuc
+3177 HANGUL LETTER PIEUP-THIEUTH
+ # 1129 hangul choseong pieup-thieuth
+3178 HANGUL LETTER KAPYEOUNPIEUP
+ # 112B hangul choseong kapyeounpieup
+3179 HANGUL LETTER KAPYEOUNSSANGPIEUP
+ # 112C hangul choseong kapyeounssangpieup
+317A HANGUL LETTER SIOS-KIYEOK
+ # 112D hangul choseong sios-kiyeok
+317B HANGUL LETTER SIOS-NIEUN
+ # 112E hangul choseong sios-nieun
+317C HANGUL LETTER SIOS-TIKEUT
+ # 112F hangul choseong sios-tikeut
+317D HANGUL LETTER SIOS-PIEUP
+ # 1132 hangul choseong sios-pieup
+317E HANGUL LETTER SIOS-CIEUC
+ # 1136 hangul choseong sios-cieuc
+317F HANGUL LETTER PANSIOS
+ # 1140 hangul choseong pansios
+3180 HANGUL LETTER SSANGIEUNG
+ # 1147 hangul choseong ssangieung
+3181 HANGUL LETTER YESIEUNG
+ * archaic velar nasal
+ # 114C hangul choseong yesieung
+3182 HANGUL LETTER YESIEUNG-SIOS
+ # 11F1 hangul jongseong yesieung-sios
+3183 HANGUL LETTER YESIEUNG-PANSIOS
+ # 11F2 hangul jongseong yesieung-pansios
+3184 HANGUL LETTER KAPYEOUNPHIEUPH
+ # 1157 hangul choseong kapyeounphieuph
+3185 HANGUL LETTER SSANGHIEUH
+ # 1158 hangul choseong ssanghieuh
+3186 HANGUL LETTER YEORINHIEUH
+ * archaic glottal stop
+ # 1159 hangul choseong yeorinhieuh
+3187 HANGUL LETTER YO-YA
+ # 1184 hangul jungseong yo-ya
+3188 HANGUL LETTER YO-YAE
+ # 1185 hangul jungseong yo-yae
+3189 HANGUL LETTER YO-I
+ # 1188 hangul jungseong yo-i
+318A HANGUL LETTER YU-YEO
+ # 1191 hangul jungseong yu-yeo
+318B HANGUL LETTER YU-YE
+ # 1192 hangul jungseong yu-ye
+318C HANGUL LETTER YU-I
+ # 1194 hangul jungseong yu-i
+318D HANGUL LETTER ARAEA
+ # 119E hangul jungseong araea
+318E HANGUL LETTER ARAEAE
+ # 11A1 hangul jungseong araea-i
+@@ 3190 Kanbun 319F
+@ Kanbun
+3190 IDEOGRAPHIC ANNOTATION LINKING MARK (Kanbun Tateten)
+ = KANBUN TATETEN
+3191 IDEOGRAPHIC ANNOTATION REVERSE MARK (Kaeriten)
+ = KAERITEN RE
+3192 IDEOGRAPHIC ANNOTATION ONE MARK (Kaeriten)
+ # <super> 4E00
+3193 IDEOGRAPHIC ANNOTATION TWO MARK (Kaeriten)
+ # <super> 4E8C
+3194 IDEOGRAPHIC ANNOTATION THREE MARK (Kaeriten)
+ # <super> 4E09
+3195 IDEOGRAPHIC ANNOTATION FOUR MARK (Kaeriten)
+ # <super> 56DB
+3196 IDEOGRAPHIC ANNOTATION TOP MARK (Kaeriten)
+ # <super> 4E0A
+3197 IDEOGRAPHIC ANNOTATION MIDDLE MARK (Kaeriten)
+ # <super> 4E2D
+3198 IDEOGRAPHIC ANNOTATION BOTTOM MARK (Kaeriten)
+ # <super> 4E0B
+3199 IDEOGRAPHIC ANNOTATION FIRST MARK (Kaeriten)
+ # <super> 7532
+319A IDEOGRAPHIC ANNOTATION SECOND MARK (Kaeriten)
+ # <super> 4E59
+319B IDEOGRAPHIC ANNOTATION THIRD MARK (Kaeriten)
+ # <super> 4E19
+319C IDEOGRAPHIC ANNOTATION FOURTH MARK (Kaeriten)
+ # <super> 4E01
+319D IDEOGRAPHIC ANNOTATION HEAVEN MARK (Kaeriten)
+ # <super> 5929
+319E IDEOGRAPHIC ANNOTATION EARTH MARK (Kaeriten)
+ # <super> 5730
+319F IDEOGRAPHIC ANNOTATION MAN MARK (Kaeriten)
+ # <super> 4EBA
+@@ 31A0 Bopomofo Extended 31BF
+@+ See also the Bopomofo block
+@ Extended Bopomofo for Minnan and Hakka
+31A0 BOPOMOFO LETTER BU
+31A1 BOPOMOFO LETTER ZI
+31A2 BOPOMOFO LETTER JI
+31A3 BOPOMOFO LETTER GU
+31A4 BOPOMOFO LETTER EE
+31A5 BOPOMOFO LETTER ENN
+31A6 BOPOMOFO LETTER OO
+31A7 BOPOMOFO LETTER ONN
+31A8 BOPOMOFO LETTER IR
+31A9 BOPOMOFO LETTER ANN
+31AA BOPOMOFO LETTER INN
+31AB BOPOMOFO LETTER UNN
+31AC BOPOMOFO LETTER IM
+31AD BOPOMOFO LETTER NGG
+31AE BOPOMOFO LETTER AINN
+31AF BOPOMOFO LETTER AUNN
+31B0 BOPOMOFO LETTER AM
+31B1 BOPOMOFO LETTER OM
+31B2 BOPOMOFO LETTER ONG
+31B3 BOPOMOFO LETTER INNN
+31B4 BOPOMOFO FINAL LETTER P
+31B5 BOPOMOFO FINAL LETTER T
+31B6 BOPOMOFO FINAL LETTER K
+31B7 BOPOMOFO FINAL LETTER H
+@@ 31C0 CJK Strokes 31EF
+@ CJK strokes
+31C0 CJK STROKE T
+31C1 CJK STROKE WG
+31C2 CJK STROKE XG
+31C3 CJK STROKE BXG
+31C4 CJK STROKE SW
+31C5 CJK STROKE HZZ
+31C6 CJK STROKE HZG
+31C7 CJK STROKE HP
+31C8 CJK STROKE HZWG
+31C9 CJK STROKE SZWG
+31CA CJK STROKE HZT
+31CB CJK STROKE HZZP
+31CC CJK STROKE HPWG
+31CD CJK STROKE HZW
+31CE CJK STROKE HZZZ
+31CF CJK STROKE N
+@@ 31F0 Katakana Phonetic Extensions 31FF
+@ Phonetic extensions for Ainu
+31F0 KATAKANA LETTER SMALL KU
+31F1 KATAKANA LETTER SMALL SI
+31F2 KATAKANA LETTER SMALL SU
+31F3 KATAKANA LETTER SMALL TO
+31F4 KATAKANA LETTER SMALL NU
+31F5 KATAKANA LETTER SMALL HA
+31F6 KATAKANA LETTER SMALL HI
+31F7 KATAKANA LETTER SMALL HU
+31F8 KATAKANA LETTER SMALL HE
+31F9 KATAKANA LETTER SMALL HO
+31FA KATAKANA LETTER SMALL MU
+31FB KATAKANA LETTER SMALL RA
+31FC KATAKANA LETTER SMALL RI
+31FD KATAKANA LETTER SMALL RU
+31FE KATAKANA LETTER SMALL RE
+31FF KATAKANA LETTER SMALL RO
+@@ 3200 Enclosed CJK Letters and Months 32FF
+@ Parenthesized Hangul elements
+3200 PARENTHESIZED HANGUL KIYEOK
+ # 0028 1100 0029
+3201 PARENTHESIZED HANGUL NIEUN
+ # 0028 1102 0029
+3202 PARENTHESIZED HANGUL TIKEUT
+ # 0028 1103 0029
+3203 PARENTHESIZED HANGUL RIEUL
+ # 0028 1105 0029
+3204 PARENTHESIZED HANGUL MIEUM
+ # 0028 1106 0029
+3205 PARENTHESIZED HANGUL PIEUP
+ # 0028 1107 0029
+3206 PARENTHESIZED HANGUL SIOS
+ # 0028 1109 0029
+3207 PARENTHESIZED HANGUL IEUNG
+ # 0028 110B 0029
+3208 PARENTHESIZED HANGUL CIEUC
+ # 0028 110C 0029
+3209 PARENTHESIZED HANGUL CHIEUCH
+ # 0028 110E 0029
+320A PARENTHESIZED HANGUL KHIEUKH
+ # 0028 110F 0029
+320B PARENTHESIZED HANGUL THIEUTH
+ # 0028 1110 0029
+320C PARENTHESIZED HANGUL PHIEUPH
+ # 0028 1111 0029
+320D PARENTHESIZED HANGUL HIEUH
+ # 0028 1112 0029
+@ Parenthesized Hangul syllables
+320E PARENTHESIZED HANGUL KIYEOK A
+ # 0028 1100 1161 0029
+320F PARENTHESIZED HANGUL NIEUN A
+ # 0028 1102 1161 0029
+3210 PARENTHESIZED HANGUL TIKEUT A
+ # 0028 1103 1161 0029
+3211 PARENTHESIZED HANGUL RIEUL A
+ # 0028 1105 1161 0029
+3212 PARENTHESIZED HANGUL MIEUM A
+ # 0028 1106 1161 0029
+3213 PARENTHESIZED HANGUL PIEUP A
+ # 0028 1107 1161 0029
+3214 PARENTHESIZED HANGUL SIOS A
+ # 0028 1109 1161 0029
+3215 PARENTHESIZED HANGUL IEUNG A
+ # 0028 110B 1161 0029
+3216 PARENTHESIZED HANGUL CIEUC A
+ # 0028 110C 1161 0029
+3217 PARENTHESIZED HANGUL CHIEUCH A
+ # 0028 110E 1161 0029
+3218 PARENTHESIZED HANGUL KHIEUKH A
+ # 0028 110F 1161 0029
+3219 PARENTHESIZED HANGUL THIEUTH A
+ # 0028 1110 1161 0029
+321A PARENTHESIZED HANGUL PHIEUPH A
+ # 0028 1111 1161 0029
+321B PARENTHESIZED HANGUL HIEUH A
+ # 0028 1112 1161 0029
+321C PARENTHESIZED HANGUL CIEUC U
+ # 0028 110C 116E 0029
+@ Parenthesized Korean words
+321D PARENTHESIZED KOREAN CHARACTER OJEON
+ # 0028 110B 1169 110C 1165 11AB 0029
+321E PARENTHESIZED KOREAN CHARACTER O HU
+ # 0028 110B 1169 1112 116E 0029
+@ Parenthesized ideographs
+3220 PARENTHESIZED IDEOGRAPH ONE
+ # 0028 4E00 0029
+3221 PARENTHESIZED IDEOGRAPH TWO
+ # 0028 4E8C 0029
+3222 PARENTHESIZED IDEOGRAPH THREE
+ # 0028 4E09 0029
+3223 PARENTHESIZED IDEOGRAPH FOUR
+ # 0028 56DB 0029
+3224 PARENTHESIZED IDEOGRAPH FIVE
+ # 0028 4E94 0029
+3225 PARENTHESIZED IDEOGRAPH SIX
+ # 0028 516D 0029
+3226 PARENTHESIZED IDEOGRAPH SEVEN
+ # 0028 4E03 0029
+3227 PARENTHESIZED IDEOGRAPH EIGHT
+ # 0028 516B 0029
+3228 PARENTHESIZED IDEOGRAPH NINE
+ # 0028 4E5D 0029
+3229 PARENTHESIZED IDEOGRAPH TEN
+ # 0028 5341 0029
+322A PARENTHESIZED IDEOGRAPH MOON
+ * Monday
+ # 0028 6708 0029
+322B PARENTHESIZED IDEOGRAPH FIRE
+ * Tuesday
+ # 0028 706B 0029
+322C PARENTHESIZED IDEOGRAPH WATER
+ * Wednesday
+ # 0028 6C34 0029
+322D PARENTHESIZED IDEOGRAPH WOOD
+ * Thursday
+ # 0028 6728 0029
+322E PARENTHESIZED IDEOGRAPH METAL
+ * Friday
+ # 0028 91D1 0029
+322F PARENTHESIZED IDEOGRAPH EARTH
+ * Saturday
+ # 0028 571F 0029
+3230 PARENTHESIZED IDEOGRAPH SUN
+ * Sunday
+ # 0028 65E5 0029
+3231 PARENTHESIZED IDEOGRAPH STOCK
+ * incorporated
+ # 0028 682A 0029
+3232 PARENTHESIZED IDEOGRAPH HAVE
+ * limited
+ # 0028 6709 0029
+3233 PARENTHESIZED IDEOGRAPH SOCIETY
+ * company
+ # 0028 793E 0029
+3234 PARENTHESIZED IDEOGRAPH NAME
+ # 0028 540D 0029
+3235 PARENTHESIZED IDEOGRAPH SPECIAL
+ # 0028 7279 0029
+3236 PARENTHESIZED IDEOGRAPH FINANCIAL
+ # 0028 8CA1 0029
+3237 PARENTHESIZED IDEOGRAPH CONGRATULATION
+ # 0028 795D 0029
+3238 PARENTHESIZED IDEOGRAPH LABOR
+ # 0028 52B4 0029
+3239 PARENTHESIZED IDEOGRAPH REPRESENT
+ # 0028 4EE3 0029
+323A PARENTHESIZED IDEOGRAPH CALL
+ # 0028 547C 0029
+323B PARENTHESIZED IDEOGRAPH STUDY
+ # 0028 5B66 0029
+323C PARENTHESIZED IDEOGRAPH SUPERVISE
+ # 0028 76E3 0029
+323D PARENTHESIZED IDEOGRAPH ENTERPRISE
+ # 0028 4F01 0029
+323E PARENTHESIZED IDEOGRAPH RESOURCE
+ # 0028 8CC7 0029
+323F PARENTHESIZED IDEOGRAPH ALLIANCE
+ # 0028 5354 0029
+3240 PARENTHESIZED IDEOGRAPH FESTIVAL
+ # 0028 796D 0029
+3241 PARENTHESIZED IDEOGRAPH REST
+ # 0028 4F11 0029
+3242 PARENTHESIZED IDEOGRAPH SELF
+ * from
+ # 0028 81EA 0029
+3243 PARENTHESIZED IDEOGRAPH REACH
+ * to
+ # 0028 81F3 0029
+@ Squared Latin abbreviation
+3250 PARTNERSHIP SIGN
+ # <square> 0050 0054 0045
+@ Circled numbers
+3251 CIRCLED NUMBER TWENTY ONE
+ # <circle> 0032 0031
+3252 CIRCLED NUMBER TWENTY TWO
+ # <circle> 0032 0032
+3253 CIRCLED NUMBER TWENTY THREE
+ # <circle> 0032 0033
+3254 CIRCLED NUMBER TWENTY FOUR
+ # <circle> 0032 0034
+3255 CIRCLED NUMBER TWENTY FIVE
+ # <circle> 0032 0035
+3256 CIRCLED NUMBER TWENTY SIX
+ # <circle> 0032 0036
+3257 CIRCLED NUMBER TWENTY SEVEN
+ # <circle> 0032 0037
+3258 CIRCLED NUMBER TWENTY EIGHT
+ # <circle> 0032 0038
+3259 CIRCLED NUMBER TWENTY NINE
+ # <circle> 0032 0039
+325A CIRCLED NUMBER THIRTY
+ # <circle> 0033 0030
+325B CIRCLED NUMBER THIRTY ONE
+ # <circle> 0033 0031
+325C CIRCLED NUMBER THIRTY TWO
+ # <circle> 0033 0032
+325D CIRCLED NUMBER THIRTY THREE
+ # <circle> 0033 0033
+325E CIRCLED NUMBER THIRTY FOUR
+ # <circle> 0033 0034
+325F CIRCLED NUMBER THIRTY FIVE
+ # <circle> 0033 0035
+@ Circled Hangul elements
+3260 CIRCLED HANGUL KIYEOK
+ # <circle> 1100
+3261 CIRCLED HANGUL NIEUN
+ # <circle> 1102
+3262 CIRCLED HANGUL TIKEUT
+ # <circle> 1103
+3263 CIRCLED HANGUL RIEUL
+ # <circle> 1105
+3264 CIRCLED HANGUL MIEUM
+ # <circle> 1106
+3265 CIRCLED HANGUL PIEUP
+ # <circle> 1107
+3266 CIRCLED HANGUL SIOS
+ # <circle> 1109
+3267 CIRCLED HANGUL IEUNG
+ # <circle> 110B
+3268 CIRCLED HANGUL CIEUC
+ # <circle> 110C
+3269 CIRCLED HANGUL CHIEUCH
+ # <circle> 110E
+326A CIRCLED HANGUL KHIEUKH
+ # <circle> 110F
+326B CIRCLED HANGUL THIEUTH
+ # <circle> 1110
+326C CIRCLED HANGUL PHIEUPH
+ # <circle> 1111
+326D CIRCLED HANGUL HIEUH
+ # <circle> 1112
+@ Circled Hangul syllables
+326E CIRCLED HANGUL KIYEOK A
+ # <circle> 1100 1161
+326F CIRCLED HANGUL NIEUN A
+ # <circle> 1102 1161
+3270 CIRCLED HANGUL TIKEUT A
+ # <circle> 1103 1161
+3271 CIRCLED HANGUL RIEUL A
+ # <circle> 1105 1161
+3272 CIRCLED HANGUL MIEUM A
+ # <circle> 1106 1161
+3273 CIRCLED HANGUL PIEUP A
+ # <circle> 1107 1161
+3274 CIRCLED HANGUL SIOS A
+ # <circle> 1109 1161
+3275 CIRCLED HANGUL IEUNG A
+ # <circle> 110B 1161
+3276 CIRCLED HANGUL CIEUC A
+ # <circle> 110C 1161
+3277 CIRCLED HANGUL CHIEUCH A
+ # <circle> 110E 1161
+3278 CIRCLED HANGUL KHIEUKH A
+ # <circle> 110F 1161
+3279 CIRCLED HANGUL THIEUTH A
+ # <circle> 1110 1161
+327A CIRCLED HANGUL PHIEUPH A
+ # <circle> 1111 1161
+327B CIRCLED HANGUL HIEUH A
+ # <circle> 1112 1161
+@ Circled Korean words
+327C CIRCLED KOREAN CHARACTER CHAMKO
+ # <circle> 110E 1161 11B7 1100 1169
+327D CIRCLED KOREAN CHARACTER JUEUI
+ # <circle> 110C 116E 110B 1174
+@ Circled Hangul syllable
+327E CIRCLED HANGUL IEUNG U
+ * postal code mark
+ # <circle> 110B 116E
+@ Symbol
+327F KOREAN STANDARD SYMBOL
+@ Circled ideographs
+3280 CIRCLED IDEOGRAPH ONE
+ = maru-iti, symbol of unification
+ # <circle> 4E00
+3281 CIRCLED IDEOGRAPH TWO
+ # <circle> 4E8C
+3282 CIRCLED IDEOGRAPH THREE
+ # <circle> 4E09
+3283 CIRCLED IDEOGRAPH FOUR
+ # <circle> 56DB
+3284 CIRCLED IDEOGRAPH FIVE
+ # <circle> 4E94
+3285 CIRCLED IDEOGRAPH SIX
+ # <circle> 516D
+3286 CIRCLED IDEOGRAPH SEVEN
+ # <circle> 4E03
+3287 CIRCLED IDEOGRAPH EIGHT
+ # <circle> 516B
+3288 CIRCLED IDEOGRAPH NINE
+ # <circle> 4E5D
+3289 CIRCLED IDEOGRAPH TEN
+ # <circle> 5341
+328A CIRCLED IDEOGRAPH MOON
+ * Monday
+ # <circle> 6708
+328B CIRCLED IDEOGRAPH FIRE
+ * Tuesday
+ # <circle> 706B
+328C CIRCLED IDEOGRAPH WATER
+ * Wednesday
+ # <circle> 6C34
+328D CIRCLED IDEOGRAPH WOOD
+ * Thursday
+ # <circle> 6728
+328E CIRCLED IDEOGRAPH METAL
+ * Friday
+ # <circle> 91D1
+328F CIRCLED IDEOGRAPH EARTH
+ * Saturday
+ # <circle> 571F
+3290 CIRCLED IDEOGRAPH SUN
+ * Sunday
+ # <circle> 65E5
+3291 CIRCLED IDEOGRAPH STOCK
+ * incorporated
+ # <circle> 682A
+3292 CIRCLED IDEOGRAPH HAVE
+ * limited
+ # <circle> 6709
+3293 CIRCLED IDEOGRAPH SOCIETY
+ * company
+ # <circle> 793E
+3294 CIRCLED IDEOGRAPH NAME
+ # <circle> 540D
+3295 CIRCLED IDEOGRAPH SPECIAL
+ # <circle> 7279
+3296 CIRCLED IDEOGRAPH FINANCIAL
+ # <circle> 8CA1
+3297 CIRCLED IDEOGRAPH CONGRATULATION
+ # <circle> 795D
+3298 CIRCLED IDEOGRAPH LABOR
+ # <circle> 52B4
+3299 CIRCLED IDEOGRAPH SECRET
+ # <circle> 79D8
+329A CIRCLED IDEOGRAPH MALE
+ # <circle> 7537
+329B CIRCLED IDEOGRAPH FEMALE
+ # <circle> 5973
+329C CIRCLED IDEOGRAPH SUITABLE
+ # <circle> 9069
+329D CIRCLED IDEOGRAPH EXCELLENT
+ # <circle> 512A
+329E CIRCLED IDEOGRAPH PRINT
+ * name seal
+ # <circle> 5370
+329F CIRCLED IDEOGRAPH ATTENTION
+ # <circle> 6CE8
+32A0 CIRCLED IDEOGRAPH ITEM
+ # <circle> 9805
+32A1 CIRCLED IDEOGRAPH REST
+ * holiday
+ # <circle> 4F11
+32A2 CIRCLED IDEOGRAPH COPY
+ # <circle> 5199
+32A3 CIRCLED IDEOGRAPH CORRECT
+ # <circle> 6B63
+32A4 CIRCLED IDEOGRAPH HIGH
+ # <circle> 4E0A
+32A5 CIRCLED IDEOGRAPH CENTRE
+ # <circle> 4E2D
+32A6 CIRCLED IDEOGRAPH LOW
+ # <circle> 4E0B
+32A7 CIRCLED IDEOGRAPH LEFT
+ # <circle> 5DE6
+32A8 CIRCLED IDEOGRAPH RIGHT
+ # <circle> 53F3
+32A9 CIRCLED IDEOGRAPH MEDICINE
+ # <circle> 533B
+32AA CIRCLED IDEOGRAPH RELIGION
+ # <circle> 5B97
+32AB CIRCLED IDEOGRAPH STUDY
+ # <circle> 5B66
+32AC CIRCLED IDEOGRAPH SUPERVISE
+ # <circle> 76E3
+32AD CIRCLED IDEOGRAPH ENTERPRISE
+ # <circle> 4F01
+32AE CIRCLED IDEOGRAPH RESOURCE
+ # <circle> 8CC7
+32AF CIRCLED IDEOGRAPH ALLIANCE
+ # <circle> 5354
+32B0 CIRCLED IDEOGRAPH NIGHT
+ # <circle> 591C
+@ Circled numbers
+32B1 CIRCLED NUMBER THIRTY SIX
+ # <circle> 0033 0036
+32B2 CIRCLED NUMBER THIRTY SEVEN
+ # <circle> 0033 0037
+32B3 CIRCLED NUMBER THIRTY EIGHT
+ # <circle> 0033 0038
+32B4 CIRCLED NUMBER THIRTY NINE
+ # <circle> 0033 0039
+32B5 CIRCLED NUMBER FORTY
+ # <circle> 0034 0030
+32B6 CIRCLED NUMBER FORTY ONE
+ # <circle> 0034 0031
+32B7 CIRCLED NUMBER FORTY TWO
+ # <circle> 0034 0032
+32B8 CIRCLED NUMBER FORTY THREE
+ # <circle> 0034 0033
+32B9 CIRCLED NUMBER FORTY FOUR
+ # <circle> 0034 0034
+32BA CIRCLED NUMBER FORTY FIVE
+ # <circle> 0034 0035
+32BB CIRCLED NUMBER FORTY SIX
+ # <circle> 0034 0036
+32BC CIRCLED NUMBER FORTY SEVEN
+ # <circle> 0034 0037
+32BD CIRCLED NUMBER FORTY EIGHT
+ # <circle> 0034 0038
+32BE CIRCLED NUMBER FORTY NINE
+ # <circle> 0034 0039
+32BF CIRCLED NUMBER FIFTY
+ # <circle> 0035 0030
+@ Telegraph symbols for months
+32C0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+ # 0031 6708
+32C1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+ # 0032 6708
+32C2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+ # 0033 6708
+32C3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+ # 0034 6708
+32C4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+ # 0035 6708
+32C5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+ # 0036 6708
+32C6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+ # 0037 6708
+32C7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+ # 0038 6708
+32C8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+ # 0039 6708
+32C9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+ # 0031 0030 6708
+32CA IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+ # 0031 0031 6708
+32CB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+ # 0031 0032 6708
+@ Squared Latin abbreviations
+32CC SQUARE HG
+ # <square> 0048 0067
+32CD SQUARE ERG
+ # <square> 0065 0072 0067
+32CE SQUARE EV
+ # <square> 0065 0056
+32CF LIMITED LIABILITY SIGN
+ # <square> 004C 0054 0044
+@ Circled Katakana
+32D0 CIRCLED KATAKANA A
+ # <circle> 30A2
+32D1 CIRCLED KATAKANA I
+ # <circle> 30A4
+32D2 CIRCLED KATAKANA U
+ # <circle> 30A6
+32D3 CIRCLED KATAKANA E
+ # <circle> 30A8
+32D4 CIRCLED KATAKANA O
+ # <circle> 30AA
+32D5 CIRCLED KATAKANA KA
+ # <circle> 30AB
+32D6 CIRCLED KATAKANA KI
+ # <circle> 30AD
+32D7 CIRCLED KATAKANA KU
+ # <circle> 30AF
+32D8 CIRCLED KATAKANA KE
+ # <circle> 30B1
+32D9 CIRCLED KATAKANA KO
+ # <circle> 30B3
+32DA CIRCLED KATAKANA SA
+ # <circle> 30B5
+32DB CIRCLED KATAKANA SI
+ # <circle> 30B7
+32DC CIRCLED KATAKANA SU
+ # <circle> 30B9
+32DD CIRCLED KATAKANA SE
+ # <circle> 30BB
+32DE CIRCLED KATAKANA SO
+ # <circle> 30BD
+32DF CIRCLED KATAKANA TA
+ # <circle> 30BF
+32E0 CIRCLED KATAKANA TI
+ # <circle> 30C1
+32E1 CIRCLED KATAKANA TU
+ # <circle> 30C4
+32E2 CIRCLED KATAKANA TE
+ # <circle> 30C6
+32E3 CIRCLED KATAKANA TO
+ # <circle> 30C8
+32E4 CIRCLED KATAKANA NA
+ # <circle> 30CA
+32E5 CIRCLED KATAKANA NI
+ # <circle> 30CB
+32E6 CIRCLED KATAKANA NU
+ # <circle> 30CC
+32E7 CIRCLED KATAKANA NE
+ # <circle> 30CD
+32E8 CIRCLED KATAKANA NO
+ # <circle> 30CE
+32E9 CIRCLED KATAKANA HA
+ # <circle> 30CF
+32EA CIRCLED KATAKANA HI
+ # <circle> 30D2
+32EB CIRCLED KATAKANA HU
+ # <circle> 30D5
+32EC CIRCLED KATAKANA HE
+ # <circle> 30D8
+32ED CIRCLED KATAKANA HO
+ # <circle> 30DB
+32EE CIRCLED KATAKANA MA
+ # <circle> 30DE
+32EF CIRCLED KATAKANA MI
+ # <circle> 30DF
+32F0 CIRCLED KATAKANA MU
+ # <circle> 30E0
+32F1 CIRCLED KATAKANA ME
+ # <circle> 30E1
+32F2 CIRCLED KATAKANA MO
+ # <circle> 30E2
+32F3 CIRCLED KATAKANA YA
+ # <circle> 30E4
+32F4 CIRCLED KATAKANA YU
+ # <circle> 30E6
+32F5 CIRCLED KATAKANA YO
+ # <circle> 30E8
+32F6 CIRCLED KATAKANA RA
+ # <circle> 30E9
+32F7 CIRCLED KATAKANA RI
+ # <circle> 30EA
+32F8 CIRCLED KATAKANA RU
+ # <circle> 30EB
+32F9 CIRCLED KATAKANA RE
+ # <circle> 30EC
+32FA CIRCLED KATAKANA RO
+ # <circle> 30ED
+32FB CIRCLED KATAKANA WA
+ # <circle> 30EF
+32FC CIRCLED KATAKANA WI
+ # <circle> 30F0
+32FD CIRCLED KATAKANA WE
+ # <circle> 30F1
+32FE CIRCLED KATAKANA WO
+ # <circle> 30F2
+@@ 3300 CJK Compatibility 33FF
+@ Squared Katakana words
+3300 SQUARE APAATO
+ * apartment
+ # <square> 30A2 30D1 30FC 30C8
+3301 SQUARE ARUHUA
+ * alpha
+ # <square> 30A2 30EB 30D5 30A1
+3302 SQUARE ANPEA
+ * ampere
+ # <square> 30A2 30F3 30DA 30A2
+3303 SQUARE AARU
+ * are (unit of area)
+ # <square> 30A2 30FC 30EB
+3304 SQUARE ININGU
+ * inning
+ # <square> 30A4 30CB 30F3 30B0
+3305 SQUARE INTI
+ * inch
+ # <square> 30A4 30F3 30C1
+3306 SQUARE UON
+ * won (Korean currency)
+ # <square> 30A6 30A9 30F3
+3307 SQUARE ESUKUUDO
+ * escudo (Portuguese currency)
+ # <square> 30A8 30B9 30AF 30FC 30C9
+3308 SQUARE EEKAA
+ * acre
+ # <square> 30A8 30FC 30AB 30FC
+3309 SQUARE ONSU
+ * ounce
+ # <square> 30AA 30F3 30B9
+330A SQUARE OOMU
+ * ohm
+ # <square> 30AA 30FC 30E0
+330B SQUARE KAIRI
+ * kai-ri: nautical mile
+ # <square> 30AB 30A4 30EA
+330C SQUARE KARATTO
+ * carat
+ # <square> 30AB 30E9 30C3 30C8
+330D SQUARE KARORII
+ * calorie
+ # <square> 30AB 30ED 30EA 30FC
+330E SQUARE GARON
+ * gallon
+ # <square> 30AC 30ED 30F3
+330F SQUARE GANMA
+ * gamma
+ # <square> 30AC 30F3 30DE
+3310 SQUARE GIGA
+ * giga-
+ # <square> 30AE 30AC
+3311 SQUARE GINII
+ * guinea
+ # <square> 30AE 30CB 30FC
+3312 SQUARE KYURII
+ * curie
+ # <square> 30AD 30E5 30EA 30FC
+3313 SQUARE GIRUDAA
+ * guilder
+ # <square> 30AE 30EB 30C0 30FC
+3314 SQUARE KIRO
+ * kilo-
+ # <square> 30AD 30ED
+3315 SQUARE KIROGURAMU
+ * kilogram
+ # <square> 30AD 30ED 30B0 30E9 30E0
+3316 SQUARE KIROMEETORU
+ * kilometer
+ # <square> 30AD 30ED 30E1 30FC 30C8 30EB
+3317 SQUARE KIROWATTO
+ * kilowatt
+ # <square> 30AD 30ED 30EF 30C3 30C8
+3318 SQUARE GURAMU
+ * gram
+ # <square> 30B0 30E9 30E0
+3319 SQUARE GURAMUTON
+ * gram ton
+ # <square> 30B0 30E9 30E0 30C8 30F3
+331A SQUARE KURUZEIRO
+ * cruzeiro (Brazilian currency)
+ # <square> 30AF 30EB 30BC 30A4 30ED
+331B SQUARE KUROONE
+ * krone
+ # <square> 30AF 30ED 30FC 30CD
+331C SQUARE KEESU
+ * case
+ # <square> 30B1 30FC 30B9
+331D SQUARE KORUNA
+ * koruna (Czech currency)
+ # <square> 30B3 30EB 30CA
+331E SQUARE KOOPO
+ * co-op
+ # <square> 30B3 30FC 30DD
+331F SQUARE SAIKURU
+ * cycle
+ # <square> 30B5 30A4 30AF 30EB
+3320 SQUARE SANTIIMU
+ * centime
+ # <square> 30B5 30F3 30C1 30FC 30E0
+3321 SQUARE SIRINGU
+ * shilling
+ # <square> 30B7 30EA 30F3 30B0
+3322 SQUARE SENTI
+ * centi-
+ # <square> 30BB 30F3 30C1
+3323 SQUARE SENTO
+ * cent
+ # <square> 30BB 30F3 30C8
+3324 SQUARE DAASU
+ * dozen
+ # <square> 30C0 30FC 30B9
+3325 SQUARE DESI
+ * deci-
+ # <square> 30C7 30B7
+3326 SQUARE DORU
+ * dollar
+ # <square> 30C9 30EB
+3327 SQUARE TON
+ * ton
+ # <square> 30C8 30F3
+3328 SQUARE NANO
+ * nano-
+ # <square> 30CA 30CE
+3329 SQUARE NOTTO
+ * knot, nautical mile
+ # <square> 30CE 30C3 30C8
+332A SQUARE HAITU
+ * heights
+ # <square> 30CF 30A4 30C4
+332B SQUARE PAASENTO
+ * percent
+ # <square> 30D1 30FC 30BB 30F3 30C8
+332C SQUARE PAATU
+ * parts
+ # <square> 30D1 30FC 30C4
+332D SQUARE BAARERU
+ * barrel
+ # <square> 30D0 30FC 30EC 30EB
+332E SQUARE PIASUTORU
+ * piaster
+ # <square> 30D4 30A2 30B9 30C8 30EB
+332F SQUARE PIKURU
+ * picul (unit of weight)
+ # <square> 30D4 30AF 30EB
+3330 SQUARE PIKO
+ * pico-
+ # <square> 30D4 30B3
+3331 SQUARE BIRU
+ * building
+ # <square> 30D3 30EB
+3332 SQUARE HUARADDO
+ * farad
+ # <square> 30D5 30A1 30E9 30C3 30C9
+3333 SQUARE HUIITO
+ * feet
+ # <square> 30D5 30A3 30FC 30C8
+3334 SQUARE BUSSYERU
+ * bushel
+ # <square> 30D6 30C3 30B7 30A7 30EB
+3335 SQUARE HURAN
+ * franc
+ # <square> 30D5 30E9 30F3
+3336 SQUARE HEKUTAARU
+ * hectare
+ # <square> 30D8 30AF 30BF 30FC 30EB
+3337 SQUARE PESO
+ * peso
+ # <square> 30DA 30BD
+3338 SQUARE PENIHI
+ * pfennig
+ # <square> 30DA 30CB 30D2
+3339 SQUARE HERUTU
+ * hertz
+ # <square> 30D8 30EB 30C4
+333A SQUARE PENSU
+ * pence
+ # <square> 30DA 30F3 30B9
+333B SQUARE PEEZI
+ * page
+ # <square> 30DA 30FC 30B8
+333C SQUARE BEETA
+ * beta
+ # <square> 30D9 30FC 30BF
+333D SQUARE POINTO
+ * point
+ # <square> 30DD 30A4 30F3 30C8
+333E SQUARE BORUTO
+ * volt, bolt
+ # <square> 30DC 30EB 30C8
+333F SQUARE HON
+ * hon: volume
+ # <square> 30DB 30F3
+3340 SQUARE PONDO
+ * pound
+ # <square> 30DD 30F3 30C9
+3341 SQUARE HOORU
+ * hall
+ # <square> 30DB 30FC 30EB
+3342 SQUARE HOON
+ * horn
+ # <square> 30DB 30FC 30F3
+3343 SQUARE MAIKURO
+ * micro-
+ # <square> 30DE 30A4 30AF 30ED
+3344 SQUARE MAIRU
+ * mile
+ # <square> 30DE 30A4 30EB
+3345 SQUARE MAHHA
+ * mach
+ # <square> 30DE 30C3 30CF
+3346 SQUARE MARUKU
+ * mark
+ # <square> 30DE 30EB 30AF
+3347 SQUARE MANSYON
+ * mansion (i.e. better quality apartment)
+ # <square> 30DE 30F3 30B7 30E7 30F3
+3348 SQUARE MIKURON
+ * micron
+ # <square> 30DF 30AF 30ED 30F3
+3349 SQUARE MIRI
+ * milli-
+ # <square> 30DF 30EA
+334A SQUARE MIRIBAARU
+ * millibar
+ # <square> 30DF 30EA 30D0 30FC 30EB
+334B SQUARE MEGA
+ * mega-
+ # <square> 30E1 30AC
+334C SQUARE MEGATON
+ * megaton
+ # <square> 30E1 30AC 30C8 30F3
+334D SQUARE MEETORU
+ * meter
+ # <square> 30E1 30FC 30C8 30EB
+334E SQUARE YAADO
+ * yard
+ # <square> 30E4 30FC 30C9
+334F SQUARE YAARU
+ * yard
+ # <square> 30E4 30FC 30EB
+3350 SQUARE YUAN
+ * yuan (Chinese currency)
+ # <square> 30E6 30A2 30F3
+3351 SQUARE RITTORU
+ * liter
+ # <square> 30EA 30C3 30C8 30EB
+3352 SQUARE RIRA
+ * lira
+ # <square> 30EA 30E9
+3353 SQUARE RUPII
+ * rupee
+ # <square> 30EB 30D4 30FC
+3354 SQUARE RUUBURU
+ * ruble
+ # <square> 30EB 30FC 30D6 30EB
+3355 SQUARE REMU
+ * rem (unit of radiation)
+ # <square> 30EC 30E0
+3356 SQUARE RENTOGEN
+ * roentgen
+ # <square> 30EC 30F3 30C8 30B2 30F3
+3357 SQUARE WATTO
+ * watt
+ # <square> 30EF 30C3 30C8
+@ Telegraph symbols for hours
+3358 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+ # 0030 70B9
+3359 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+ # 0031 70B9
+335A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+ # 0032 70B9
+335B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+ # 0033 70B9
+335C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+ # 0034 70B9
+335D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+ # 0035 70B9
+335E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+ # 0036 70B9
+335F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+ # 0037 70B9
+3360 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+ # 0038 70B9
+3361 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+ # 0039 70B9
+3362 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+ # 0031 0030 70B9
+3363 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+ # 0031 0031 70B9
+3364 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+ # 0031 0032 70B9
+3365 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+ # 0031 0033 70B9
+3366 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+ # 0031 0034 70B9
+3367 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+ # 0031 0035 70B9
+3368 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+ # 0031 0036 70B9
+3369 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+ # 0031 0037 70B9
+336A IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+ # 0031 0038 70B9
+336B IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+ # 0031 0039 70B9
+336C IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+ # 0032 0030 70B9
+336D IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+ # 0032 0031 70B9
+336E IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+ # 0032 0032 70B9
+336F IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+ # 0032 0033 70B9
+3370 IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+ # 0032 0034 70B9
+@ Squared Latin abbreviations
+3371 SQUARE HPA
+ # <square> 0068 0050 0061
+3372 SQUARE DA
+ # <square> 0064 0061
+3373 SQUARE AU
+ # <square> 0041 0055
+3374 SQUARE BAR
+ # <square> 0062 0061 0072
+3375 SQUARE OV
+ # <square> 006F 0056
+3376 SQUARE PC
+ # <square> 0070 0063
+3377 SQUARE DM
+ # <square> 0064 006D
+3378 SQUARE DM SQUARED
+ # <square> 0064 006D 00B2
+3379 SQUARE DM CUBED
+ # <square> 0064 006D 00B3
+337A SQUARE IU
+ # <square> 0049 0055
+@ Japanese era names
+337B SQUARE ERA NAME HEISEI
+ # <square> 5E73 6210
+337C SQUARE ERA NAME SYOUWA
+ # <square> 662D 548C
+337D SQUARE ERA NAME TAISYOU
+ # <square> 5927 6B63
+337E SQUARE ERA NAME MEIZI
+ # <square> 660E 6CBB
+@ Japanese corporation
+337F SQUARE CORPORATION
+ = kabusiki-gaisya
+ * incorporated
+ # <square> 682A 5F0F 4F1A 793E
+@ Squared Latin abbreviations
+3380 SQUARE PA AMPS
+ # <square> 0070 0041
+3381 SQUARE NA
+ # <square> 006E 0041
+3382 SQUARE MU A
+ # <square> 03BC 0041
+3383 SQUARE MA
+ # <square> 006D 0041
+3384 SQUARE KA
+ # <square> 006B 0041
+3385 SQUARE KB
+ # <square> 004B 0042
+3386 SQUARE MB
+ # <square> 004D 0042
+3387 SQUARE GB
+ # <square> 0047 0042
+3388 SQUARE CAL
+ # <square> 0063 0061 006C
+3389 SQUARE KCAL
+ # <square> 006B 0063 0061 006C
+338A SQUARE PF
+ # <square> 0070 0046
+338B SQUARE NF
+ # <square> 006E 0046
+338C SQUARE MU F
+ # <square> 03BC 0046
+338D SQUARE MU G
+ # <square> 03BC 0067
+338E SQUARE MG
+ # <square> 006D 0067
+338F SQUARE KG
+ # <square> 006B 0067
+3390 SQUARE HZ
+ # <square> 0048 007A
+3391 SQUARE KHZ
+ # <square> 006B 0048 007A
+3392 SQUARE MHZ
+ # <square> 004D 0048 007A
+3393 SQUARE GHZ
+ # <square> 0047 0048 007A
+3394 SQUARE THZ
+ # <square> 0054 0048 007A
+3395 SQUARE MU L
+ # <square> 03BC 2113
+3396 SQUARE ML
+ # <square> 006D 2113
+3397 SQUARE DL
+ # <square> 0064 2113
+3398 SQUARE KL
+ # <square> 006B 2113
+3399 SQUARE FM
+ # <square> 0066 006D
+339A SQUARE NM
+ # <square> 006E 006D
+339B SQUARE MU M
+ # <square> 03BC 006D
+339C SQUARE MM
+ # <square> 006D 006D
+339D SQUARE CM
+ # <square> 0063 006D
+339E SQUARE KM
+ # <square> 006B 006D
+339F SQUARE MM SQUARED
+ # <square> 006D 006D 00B2
+33A0 SQUARE CM SQUARED
+ # <square> 0063 006D 00B2
+33A1 SQUARE M SQUARED
+ # <square> 006D 00B2
+33A2 SQUARE KM SQUARED
+ # <square> 006B 006D 00B2
+33A3 SQUARE MM CUBED
+ # <square> 006D 006D 00B3
+33A4 SQUARE CM CUBED
+ # <square> 0063 006D 00B3
+33A5 SQUARE M CUBED
+ # <square> 006D 00B3
+33A6 SQUARE KM CUBED
+ # <square> 006B 006D 00B3
+33A7 SQUARE M OVER S
+ # <square> 006D 2215 0073
+33A8 SQUARE M OVER S SQUARED
+ # <square> 006D 2215 0073 00B2
+33A9 SQUARE PA
+ # <square> 0050 0061
+33AA SQUARE KPA
+ # <square> 006B 0050 0061
+33AB SQUARE MPA
+ # <square> 004D 0050 0061
+33AC SQUARE GPA
+ # <square> 0047 0050 0061
+33AD SQUARE RAD
+ # <square> 0072 0061 0064
+33AE SQUARE RAD OVER S
+ # <square> 0072 0061 0064 2215 0073
+33AF SQUARE RAD OVER S SQUARED
+ # <square> 0072 0061 0064 2215 0073 00B2
+33B0 SQUARE PS
+ # <square> 0070 0073
+33B1 SQUARE NS
+ # <square> 006E 0073
+33B2 SQUARE MU S
+ # <square> 03BC 0073
+33B3 SQUARE MS
+ # <square> 006D 0073
+33B4 SQUARE PV
+ # <square> 0070 0056
+33B5 SQUARE NV
+ # <square> 006E 0056
+33B6 SQUARE MU V
+ # <square> 03BC 0056
+33B7 SQUARE MV
+ # <square> 006D 0056
+33B8 SQUARE KV
+ # <square> 006B 0056
+33B9 SQUARE MV MEGA
+ # <square> 004D 0056
+33BA SQUARE PW
+ # <square> 0070 0057
+33BB SQUARE NW
+ # <square> 006E 0057
+33BC SQUARE MU W
+ # <square> 03BC 0057
+33BD SQUARE MW
+ # <square> 006D 0057
+33BE SQUARE KW
+ # <square> 006B 0057
+33BF SQUARE MW MEGA
+ # <square> 004D 0057
+33C0 SQUARE K OHM
+ # <square> 006B 03A9
+33C1 SQUARE M OHM
+ # <square> 004D 03A9
+33C2 SQUARE AM
+ # <square> 0061 002E 006D 002E
+33C3 SQUARE BQ
+ # <square> 0042 0071
+33C4 SQUARE CC
+ # <square> 0063 0063
+33C5 SQUARE CD
+ # <square> 0063 0064
+33C6 SQUARE C OVER KG
+ # <square> 0043 2215 006B 0067
+33C7 SQUARE CO
+ # <square> 0043 006F 002E
+33C8 SQUARE DB
+ # <square> 0064 0042
+33C9 SQUARE GY
+ # <square> 0047 0079
+33CA SQUARE HA
+ # <square> 0068 0061
+33CB SQUARE HP
+ # <square> 0048 0050
+33CC SQUARE IN
+ # <square> 0069 006E
+33CD SQUARE KK
+ # <square> 004B 004B
+33CE SQUARE KM CAPITAL
+ # <square> 004B 004D
+33CF SQUARE KT
+ # <square> 006B 0074
+33D0 SQUARE LM
+ # <square> 006C 006D
+33D1 SQUARE LN
+ # <square> 006C 006E
+33D2 SQUARE LOG
+ # <square> 006C 006F 0067
+33D3 SQUARE LX
+ # <square> 006C 0078
+33D4 SQUARE MB SMALL
+ # <square> 006D 0062
+33D5 SQUARE MIL
+ # <square> 006D 0069 006C
+33D6 SQUARE MOL
+ # <square> 006D 006F 006C
+33D7 SQUARE PH
+ # <square> 0050 0048
+33D8 SQUARE PM
+ # <square> 0070 002E 006D 002E
+33D9 SQUARE PPM
+ # <square> 0050 0050 004D
+33DA SQUARE PR
+ # <square> 0050 0052
+33DB SQUARE SR
+ # <square> 0073 0072
+33DC SQUARE SV
+ # <square> 0053 0076
+33DD SQUARE WB
+ # <square> 0057 0062
+33DE SQUARE V OVER M
+ # <square> 0056 2215 006D
+33DF SQUARE A OVER M
+ # <square> 0041 2215 006D
+@ Telegraph symbols for days
+33E0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+ # 0031 65E5
+33E1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+ # 0032 65E5
+33E2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+ # 0033 65E5
+33E3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+ # 0034 65E5
+33E4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+ # 0035 65E5
+33E5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+ # 0036 65E5
+33E6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+ # 0037 65E5
+33E7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+ # 0038 65E5
+33E8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+ # 0039 65E5
+33E9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+ # 0031 0030 65E5
+33EA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+ # 0031 0031 65E5
+33EB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+ # 0031 0032 65E5
+33EC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+ # 0031 0033 65E5
+33ED IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+ # 0031 0034 65E5
+33EE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+ # 0031 0035 65E5
+33EF IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+ # 0031 0036 65E5
+33F0 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+ # 0031 0037 65E5
+33F1 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+ # 0031 0038 65E5
+33F2 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+ # 0031 0039 65E5
+33F3 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+ # 0032 0030 65E5
+33F4 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+ # 0032 0031 65E5
+33F5 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+ # 0032 0032 65E5
+33F6 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+ # 0032 0033 65E5
+33F7 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+ # 0032 0034 65E5
+33F8 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+ # 0032 0035 65E5
+33F9 IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+ # 0032 0036 65E5
+33FA IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+ # 0032 0037 65E5
+33FB IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+ # 0032 0038 65E5
+33FC IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+ # 0032 0039 65E5
+33FD IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+ # 0033 0030 65E5
+33FE IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+ # 0033 0031 65E5
+@ Squared Latin abbreviation
+33FF SQUARE GAL
+ # <square> 0067 0061 006C
+@@ 3400 CJK Unified Ideographs Extension A 4DB5
+@@ 4DC0 Yijing Hexagram Symbols 4DFF
+@ Yijing hexagram symbols
+4DC0 HEXAGRAM FOR THE CREATIVE HEAVEN
+4DC1 HEXAGRAM FOR THE RECEPTIVE EARTH
+4DC2 HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+4DC3 HEXAGRAM FOR YOUTHFUL FOLLY
+4DC4 HEXAGRAM FOR WAITING
+4DC5 HEXAGRAM FOR CONFLICT
+4DC6 HEXAGRAM FOR THE ARMY
+4DC7 HEXAGRAM FOR HOLDING TOGETHER
+4DC8 HEXAGRAM FOR SMALL TAMING
+4DC9 HEXAGRAM FOR TREADING
+4DCA HEXAGRAM FOR PEACE
+4DCB HEXAGRAM FOR STANDSTILL
+4DCC HEXAGRAM FOR FELLOWSHIP
+4DCD HEXAGRAM FOR GREAT POSSESSION
+4DCE HEXAGRAM FOR MODESTY
+4DCF HEXAGRAM FOR ENTHUSIASM
+4DD0 HEXAGRAM FOR FOLLOWING
+4DD1 HEXAGRAM FOR WORK ON THE DECAYED
+4DD2 HEXAGRAM FOR APPROACH
+4DD3 HEXAGRAM FOR CONTEMPLATION
+4DD4 HEXAGRAM FOR BITING THROUGH
+4DD5 HEXAGRAM FOR GRACE
+4DD6 HEXAGRAM FOR SPLITTING APART
+4DD7 HEXAGRAM FOR RETURN
+4DD8 HEXAGRAM FOR INNOCENCE
+4DD9 HEXAGRAM FOR GREAT TAMING
+4DDA HEXAGRAM FOR MOUTH CORNERS
+4DDB HEXAGRAM FOR GREAT PREPONDERANCE
+4DDC HEXAGRAM FOR THE ABYSMAL WATER
+4DDD HEXAGRAM FOR THE CLINGING FIRE
+4DDE HEXAGRAM FOR INFLUENCE
+4DDF HEXAGRAM FOR DURATION
+4DE0 HEXAGRAM FOR RETREAT
+4DE1 HEXAGRAM FOR GREAT POWER
+4DE2 HEXAGRAM FOR PROGRESS
+4DE3 HEXAGRAM FOR DARKENING OF THE LIGHT
+4DE4 HEXAGRAM FOR THE FAMILY
+4DE5 HEXAGRAM FOR OPPOSITION
+4DE6 HEXAGRAM FOR OBSTRUCTION
+4DE7 HEXAGRAM FOR DELIVERANCE
+4DE8 HEXAGRAM FOR DECREASE
+4DE9 HEXAGRAM FOR INCREASE
+4DEA HEXAGRAM FOR BREAKTHROUGH
+4DEB HEXAGRAM FOR COMING TO MEET
+4DEC HEXAGRAM FOR GATHERING TOGETHER
+4DED HEXAGRAM FOR PUSHING UPWARD
+4DEE HEXAGRAM FOR OPPRESSION
+4DEF HEXAGRAM FOR THE WELL
+4DF0 HEXAGRAM FOR REVOLUTION
+4DF1 HEXAGRAM FOR THE CAULDRON
+4DF2 HEXAGRAM FOR THE AROUSING THUNDER
+4DF3 HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+4DF4 HEXAGRAM FOR DEVELOPMENT
+4DF5 HEXAGRAM FOR THE MARRYING MAIDEN
+4DF6 HEXAGRAM FOR ABUNDANCE
+4DF7 HEXAGRAM FOR THE WANDERER
+4DF8 HEXAGRAM FOR THE GENTLE WIND
+4DF9 HEXAGRAM FOR THE JOYOUS LAKE
+4DFA HEXAGRAM FOR DISPERSION
+4DFB HEXAGRAM FOR LIMITATION
+4DFC HEXAGRAM FOR INNER TRUTH
+4DFD HEXAGRAM FOR SMALL PREPONDERANCE
+4DFE HEXAGRAM FOR AFTER COMPLETION
+4DFF HEXAGRAM FOR BEFORE COMPLETION
+@@ 4E00 CJK Unified Ideographs 9FBB
+@@ A000 Yi Syllables A48F
+@ Syllables
+A000 YI SYLLABLE IT
+A001 YI SYLLABLE IX
+A002 YI SYLLABLE I
+A003 YI SYLLABLE IP
+A004 YI SYLLABLE IET
+A005 YI SYLLABLE IEX
+A006 YI SYLLABLE IE
+A007 YI SYLLABLE IEP
+A008 YI SYLLABLE AT
+A009 YI SYLLABLE AX
+A00A YI SYLLABLE A
+A00B YI SYLLABLE AP
+A00C YI SYLLABLE UOX
+A00D YI SYLLABLE UO
+A00E YI SYLLABLE UOP
+A00F YI SYLLABLE OT
+A010 YI SYLLABLE OX
+A011 YI SYLLABLE O
+A012 YI SYLLABLE OP
+A013 YI SYLLABLE EX
+A014 YI SYLLABLE E
+A015 YI SYLLABLE WU
+A016 YI SYLLABLE BIT
+A017 YI SYLLABLE BIX
+A018 YI SYLLABLE BI
+A019 YI SYLLABLE BIP
+A01A YI SYLLABLE BIET
+A01B YI SYLLABLE BIEX
+A01C YI SYLLABLE BIE
+A01D YI SYLLABLE BIEP
+A01E YI SYLLABLE BAT
+A01F YI SYLLABLE BAX
+A020 YI SYLLABLE BA
+A021 YI SYLLABLE BAP
+A022 YI SYLLABLE BUOX
+A023 YI SYLLABLE BUO
+A024 YI SYLLABLE BUOP
+A025 YI SYLLABLE BOT
+A026 YI SYLLABLE BOX
+A027 YI SYLLABLE BO
+A028 YI SYLLABLE BOP
+A029 YI SYLLABLE BEX
+A02A YI SYLLABLE BE
+A02B YI SYLLABLE BEP
+A02C YI SYLLABLE BUT
+A02D YI SYLLABLE BUX
+A02E YI SYLLABLE BU
+A02F YI SYLLABLE BUP
+A030 YI SYLLABLE BURX
+A031 YI SYLLABLE BUR
+A032 YI SYLLABLE BYT
+A033 YI SYLLABLE BYX
+A034 YI SYLLABLE BY
+A035 YI SYLLABLE BYP
+A036 YI SYLLABLE BYRX
+A037 YI SYLLABLE BYR
+A038 YI SYLLABLE PIT
+A039 YI SYLLABLE PIX
+A03A YI SYLLABLE PI
+A03B YI SYLLABLE PIP
+A03C YI SYLLABLE PIEX
+A03D YI SYLLABLE PIE
+A03E YI SYLLABLE PIEP
+A03F YI SYLLABLE PAT
+A040 YI SYLLABLE PAX
+A041 YI SYLLABLE PA
+A042 YI SYLLABLE PAP
+A043 YI SYLLABLE PUOX
+A044 YI SYLLABLE PUO
+A045 YI SYLLABLE PUOP
+A046 YI SYLLABLE POT
+A047 YI SYLLABLE POX
+A048 YI SYLLABLE PO
+A049 YI SYLLABLE POP
+A04A YI SYLLABLE PUT
+A04B YI SYLLABLE PUX
+A04C YI SYLLABLE PU
+A04D YI SYLLABLE PUP
+A04E YI SYLLABLE PURX
+A04F YI SYLLABLE PUR
+A050 YI SYLLABLE PYT
+A051 YI SYLLABLE PYX
+A052 YI SYLLABLE PY
+A053 YI SYLLABLE PYP
+A054 YI SYLLABLE PYRX
+A055 YI SYLLABLE PYR
+A056 YI SYLLABLE BBIT
+A057 YI SYLLABLE BBIX
+A058 YI SYLLABLE BBI
+A059 YI SYLLABLE BBIP
+A05A YI SYLLABLE BBIET
+A05B YI SYLLABLE BBIEX
+A05C YI SYLLABLE BBIE
+A05D YI SYLLABLE BBIEP
+A05E YI SYLLABLE BBAT
+A05F YI SYLLABLE BBAX
+A060 YI SYLLABLE BBA
+A061 YI SYLLABLE BBAP
+A062 YI SYLLABLE BBUOX
+A063 YI SYLLABLE BBUO
+A064 YI SYLLABLE BBUOP
+A065 YI SYLLABLE BBOT
+A066 YI SYLLABLE BBOX
+A067 YI SYLLABLE BBO
+A068 YI SYLLABLE BBOP
+A069 YI SYLLABLE BBEX
+A06A YI SYLLABLE BBE
+A06B YI SYLLABLE BBEP
+A06C YI SYLLABLE BBUT
+A06D YI SYLLABLE BBUX
+A06E YI SYLLABLE BBU
+A06F YI SYLLABLE BBUP
+A070 YI SYLLABLE BBURX
+A071 YI SYLLABLE BBUR
+A072 YI SYLLABLE BBYT
+A073 YI SYLLABLE BBYX
+A074 YI SYLLABLE BBY
+A075 YI SYLLABLE BBYP
+A076 YI SYLLABLE NBIT
+A077 YI SYLLABLE NBIX
+A078 YI SYLLABLE NBI
+A079 YI SYLLABLE NBIP
+A07A YI SYLLABLE NBIEX
+A07B YI SYLLABLE NBIE
+A07C YI SYLLABLE NBIEP
+A07D YI SYLLABLE NBAT
+A07E YI SYLLABLE NBAX
+A07F YI SYLLABLE NBA
+A080 YI SYLLABLE NBAP
+A081 YI SYLLABLE NBOT
+A082 YI SYLLABLE NBOX
+A083 YI SYLLABLE NBO
+A084 YI SYLLABLE NBOP
+A085 YI SYLLABLE NBUT
+A086 YI SYLLABLE NBUX
+A087 YI SYLLABLE NBU
+A088 YI SYLLABLE NBUP
+A089 YI SYLLABLE NBURX
+A08A YI SYLLABLE NBUR
+A08B YI SYLLABLE NBYT
+A08C YI SYLLABLE NBYX
+A08D YI SYLLABLE NBY
+A08E YI SYLLABLE NBYP
+A08F YI SYLLABLE NBYRX
+A090 YI SYLLABLE NBYR
+A091 YI SYLLABLE HMIT
+A092 YI SYLLABLE HMIX
+A093 YI SYLLABLE HMI
+A094 YI SYLLABLE HMIP
+A095 YI SYLLABLE HMIEX
+A096 YI SYLLABLE HMIE
+A097 YI SYLLABLE HMIEP
+A098 YI SYLLABLE HMAT
+A099 YI SYLLABLE HMAX
+A09A YI SYLLABLE HMA
+A09B YI SYLLABLE HMAP
+A09C YI SYLLABLE HMUOX
+A09D YI SYLLABLE HMUO
+A09E YI SYLLABLE HMUOP
+A09F YI SYLLABLE HMOT
+A0A0 YI SYLLABLE HMOX
+A0A1 YI SYLLABLE HMO
+A0A2 YI SYLLABLE HMOP
+A0A3 YI SYLLABLE HMUT
+A0A4 YI SYLLABLE HMUX
+A0A5 YI SYLLABLE HMU
+A0A6 YI SYLLABLE HMUP
+A0A7 YI SYLLABLE HMURX
+A0A8 YI SYLLABLE HMUR
+A0A9 YI SYLLABLE HMYX
+A0AA YI SYLLABLE HMY
+A0AB YI SYLLABLE HMYP
+A0AC YI SYLLABLE HMYRX
+A0AD YI SYLLABLE HMYR
+A0AE YI SYLLABLE MIT
+A0AF YI SYLLABLE MIX
+A0B0 YI SYLLABLE MI
+A0B1 YI SYLLABLE MIP
+A0B2 YI SYLLABLE MIEX
+A0B3 YI SYLLABLE MIE
+A0B4 YI SYLLABLE MIEP
+A0B5 YI SYLLABLE MAT
+A0B6 YI SYLLABLE MAX
+A0B7 YI SYLLABLE MA
+A0B8 YI SYLLABLE MAP
+A0B9 YI SYLLABLE MUOT
+A0BA YI SYLLABLE MUOX
+A0BB YI SYLLABLE MUO
+A0BC YI SYLLABLE MUOP
+A0BD YI SYLLABLE MOT
+A0BE YI SYLLABLE MOX
+A0BF YI SYLLABLE MO
+A0C0 YI SYLLABLE MOP
+A0C1 YI SYLLABLE MEX
+A0C2 YI SYLLABLE ME
+A0C3 YI SYLLABLE MUT
+A0C4 YI SYLLABLE MUX
+A0C5 YI SYLLABLE MU
+A0C6 YI SYLLABLE MUP
+A0C7 YI SYLLABLE MURX
+A0C8 YI SYLLABLE MUR
+A0C9 YI SYLLABLE MYT
+A0CA YI SYLLABLE MYX
+A0CB YI SYLLABLE MY
+A0CC YI SYLLABLE MYP
+A0CD YI SYLLABLE FIT
+A0CE YI SYLLABLE FIX
+A0CF YI SYLLABLE FI
+A0D0 YI SYLLABLE FIP
+A0D1 YI SYLLABLE FAT
+A0D2 YI SYLLABLE FAX
+A0D3 YI SYLLABLE FA
+A0D4 YI SYLLABLE FAP
+A0D5 YI SYLLABLE FOX
+A0D6 YI SYLLABLE FO
+A0D7 YI SYLLABLE FOP
+A0D8 YI SYLLABLE FUT
+A0D9 YI SYLLABLE FUX
+A0DA YI SYLLABLE FU
+A0DB YI SYLLABLE FUP
+A0DC YI SYLLABLE FURX
+A0DD YI SYLLABLE FUR
+A0DE YI SYLLABLE FYT
+A0DF YI SYLLABLE FYX
+A0E0 YI SYLLABLE FY
+A0E1 YI SYLLABLE FYP
+A0E2 YI SYLLABLE VIT
+A0E3 YI SYLLABLE VIX
+A0E4 YI SYLLABLE VI
+A0E5 YI SYLLABLE VIP
+A0E6 YI SYLLABLE VIET
+A0E7 YI SYLLABLE VIEX
+A0E8 YI SYLLABLE VIE
+A0E9 YI SYLLABLE VIEP
+A0EA YI SYLLABLE VAT
+A0EB YI SYLLABLE VAX
+A0EC YI SYLLABLE VA
+A0ED YI SYLLABLE VAP
+A0EE YI SYLLABLE VOT
+A0EF YI SYLLABLE VOX
+A0F0 YI SYLLABLE VO
+A0F1 YI SYLLABLE VOP
+A0F2 YI SYLLABLE VEX
+A0F3 YI SYLLABLE VEP
+A0F4 YI SYLLABLE VUT
+A0F5 YI SYLLABLE VUX
+A0F6 YI SYLLABLE VU
+A0F7 YI SYLLABLE VUP
+A0F8 YI SYLLABLE VURX
+A0F9 YI SYLLABLE VUR
+A0FA YI SYLLABLE VYT
+A0FB YI SYLLABLE VYX
+A0FC YI SYLLABLE VY
+A0FD YI SYLLABLE VYP
+A0FE YI SYLLABLE VYRX
+A0FF YI SYLLABLE VYR
+A100 YI SYLLABLE DIT
+A101 YI SYLLABLE DIX
+A102 YI SYLLABLE DI
+A103 YI SYLLABLE DIP
+A104 YI SYLLABLE DIEX
+A105 YI SYLLABLE DIE
+A106 YI SYLLABLE DIEP
+A107 YI SYLLABLE DAT
+A108 YI SYLLABLE DAX
+A109 YI SYLLABLE DA
+A10A YI SYLLABLE DAP
+A10B YI SYLLABLE DUOX
+A10C YI SYLLABLE DUO
+A10D YI SYLLABLE DOT
+A10E YI SYLLABLE DOX
+A10F YI SYLLABLE DO
+A110 YI SYLLABLE DOP
+A111 YI SYLLABLE DEX
+A112 YI SYLLABLE DE
+A113 YI SYLLABLE DEP
+A114 YI SYLLABLE DUT
+A115 YI SYLLABLE DUX
+A116 YI SYLLABLE DU
+A117 YI SYLLABLE DUP
+A118 YI SYLLABLE DURX
+A119 YI SYLLABLE DUR
+A11A YI SYLLABLE TIT
+A11B YI SYLLABLE TIX
+A11C YI SYLLABLE TI
+A11D YI SYLLABLE TIP
+A11E YI SYLLABLE TIEX
+A11F YI SYLLABLE TIE
+A120 YI SYLLABLE TIEP
+A121 YI SYLLABLE TAT
+A122 YI SYLLABLE TAX
+A123 YI SYLLABLE TA
+A124 YI SYLLABLE TAP
+A125 YI SYLLABLE TUOT
+A126 YI SYLLABLE TUOX
+A127 YI SYLLABLE TUO
+A128 YI SYLLABLE TUOP
+A129 YI SYLLABLE TOT
+A12A YI SYLLABLE TOX
+A12B YI SYLLABLE TO
+A12C YI SYLLABLE TOP
+A12D YI SYLLABLE TEX
+A12E YI SYLLABLE TE
+A12F YI SYLLABLE TEP
+A130 YI SYLLABLE TUT
+A131 YI SYLLABLE TUX
+A132 YI SYLLABLE TU
+A133 YI SYLLABLE TUP
+A134 YI SYLLABLE TURX
+A135 YI SYLLABLE TUR
+A136 YI SYLLABLE DDIT
+A137 YI SYLLABLE DDIX
+A138 YI SYLLABLE DDI
+A139 YI SYLLABLE DDIP
+A13A YI SYLLABLE DDIEX
+A13B YI SYLLABLE DDIE
+A13C YI SYLLABLE DDIEP
+A13D YI SYLLABLE DDAT
+A13E YI SYLLABLE DDAX
+A13F YI SYLLABLE DDA
+A140 YI SYLLABLE DDAP
+A141 YI SYLLABLE DDUOX
+A142 YI SYLLABLE DDUO
+A143 YI SYLLABLE DDUOP
+A144 YI SYLLABLE DDOT
+A145 YI SYLLABLE DDOX
+A146 YI SYLLABLE DDO
+A147 YI SYLLABLE DDOP
+A148 YI SYLLABLE DDEX
+A149 YI SYLLABLE DDE
+A14A YI SYLLABLE DDEP
+A14B YI SYLLABLE DDUT
+A14C YI SYLLABLE DDUX
+A14D YI SYLLABLE DDU
+A14E YI SYLLABLE DDUP
+A14F YI SYLLABLE DDURX
+A150 YI SYLLABLE DDUR
+A151 YI SYLLABLE NDIT
+A152 YI SYLLABLE NDIX
+A153 YI SYLLABLE NDI
+A154 YI SYLLABLE NDIP
+A155 YI SYLLABLE NDIEX
+A156 YI SYLLABLE NDIE
+A157 YI SYLLABLE NDAT
+A158 YI SYLLABLE NDAX
+A159 YI SYLLABLE NDA
+A15A YI SYLLABLE NDAP
+A15B YI SYLLABLE NDOT
+A15C YI SYLLABLE NDOX
+A15D YI SYLLABLE NDO
+A15E YI SYLLABLE NDOP
+A15F YI SYLLABLE NDEX
+A160 YI SYLLABLE NDE
+A161 YI SYLLABLE NDEP
+A162 YI SYLLABLE NDUT
+A163 YI SYLLABLE NDUX
+A164 YI SYLLABLE NDU
+A165 YI SYLLABLE NDUP
+A166 YI SYLLABLE NDURX
+A167 YI SYLLABLE NDUR
+A168 YI SYLLABLE HNIT
+A169 YI SYLLABLE HNIX
+A16A YI SYLLABLE HNI
+A16B YI SYLLABLE HNIP
+A16C YI SYLLABLE HNIET
+A16D YI SYLLABLE HNIEX
+A16E YI SYLLABLE HNIE
+A16F YI SYLLABLE HNIEP
+A170 YI SYLLABLE HNAT
+A171 YI SYLLABLE HNAX
+A172 YI SYLLABLE HNA
+A173 YI SYLLABLE HNAP
+A174 YI SYLLABLE HNUOX
+A175 YI SYLLABLE HNUO
+A176 YI SYLLABLE HNOT
+A177 YI SYLLABLE HNOX
+A178 YI SYLLABLE HNOP
+A179 YI SYLLABLE HNEX
+A17A YI SYLLABLE HNE
+A17B YI SYLLABLE HNEP
+A17C YI SYLLABLE HNUT
+A17D YI SYLLABLE NIT
+A17E YI SYLLABLE NIX
+A17F YI SYLLABLE NI
+A180 YI SYLLABLE NIP
+A181 YI SYLLABLE NIEX
+A182 YI SYLLABLE NIE
+A183 YI SYLLABLE NIEP
+A184 YI SYLLABLE NAX
+A185 YI SYLLABLE NA
+A186 YI SYLLABLE NAP
+A187 YI SYLLABLE NUOX
+A188 YI SYLLABLE NUO
+A189 YI SYLLABLE NUOP
+A18A YI SYLLABLE NOT
+A18B YI SYLLABLE NOX
+A18C YI SYLLABLE NO
+A18D YI SYLLABLE NOP
+A18E YI SYLLABLE NEX
+A18F YI SYLLABLE NE
+A190 YI SYLLABLE NEP
+A191 YI SYLLABLE NUT
+A192 YI SYLLABLE NUX
+A193 YI SYLLABLE NU
+A194 YI SYLLABLE NUP
+A195 YI SYLLABLE NURX
+A196 YI SYLLABLE NUR
+A197 YI SYLLABLE HLIT
+A198 YI SYLLABLE HLIX
+A199 YI SYLLABLE HLI
+A19A YI SYLLABLE HLIP
+A19B YI SYLLABLE HLIEX
+A19C YI SYLLABLE HLIE
+A19D YI SYLLABLE HLIEP
+A19E YI SYLLABLE HLAT
+A19F YI SYLLABLE HLAX
+A1A0 YI SYLLABLE HLA
+A1A1 YI SYLLABLE HLAP
+A1A2 YI SYLLABLE HLUOX
+A1A3 YI SYLLABLE HLUO
+A1A4 YI SYLLABLE HLUOP
+A1A5 YI SYLLABLE HLOX
+A1A6 YI SYLLABLE HLO
+A1A7 YI SYLLABLE HLOP
+A1A8 YI SYLLABLE HLEX
+A1A9 YI SYLLABLE HLE
+A1AA YI SYLLABLE HLEP
+A1AB YI SYLLABLE HLUT
+A1AC YI SYLLABLE HLUX
+A1AD YI SYLLABLE HLU
+A1AE YI SYLLABLE HLUP
+A1AF YI SYLLABLE HLURX
+A1B0 YI SYLLABLE HLUR
+A1B1 YI SYLLABLE HLYT
+A1B2 YI SYLLABLE HLYX
+A1B3 YI SYLLABLE HLY
+A1B4 YI SYLLABLE HLYP
+A1B5 YI SYLLABLE HLYRX
+A1B6 YI SYLLABLE HLYR
+A1B7 YI SYLLABLE LIT
+A1B8 YI SYLLABLE LIX
+A1B9 YI SYLLABLE LI
+A1BA YI SYLLABLE LIP
+A1BB YI SYLLABLE LIET
+A1BC YI SYLLABLE LIEX
+A1BD YI SYLLABLE LIE
+A1BE YI SYLLABLE LIEP
+A1BF YI SYLLABLE LAT
+A1C0 YI SYLLABLE LAX
+A1C1 YI SYLLABLE LA
+A1C2 YI SYLLABLE LAP
+A1C3 YI SYLLABLE LUOT
+A1C4 YI SYLLABLE LUOX
+A1C5 YI SYLLABLE LUO
+A1C6 YI SYLLABLE LUOP
+A1C7 YI SYLLABLE LOT
+A1C8 YI SYLLABLE LOX
+A1C9 YI SYLLABLE LO
+A1CA YI SYLLABLE LOP
+A1CB YI SYLLABLE LEX
+A1CC YI SYLLABLE LE
+A1CD YI SYLLABLE LEP
+A1CE YI SYLLABLE LUT
+A1CF YI SYLLABLE LUX
+A1D0 YI SYLLABLE LU
+A1D1 YI SYLLABLE LUP
+A1D2 YI SYLLABLE LURX
+A1D3 YI SYLLABLE LUR
+A1D4 YI SYLLABLE LYT
+A1D5 YI SYLLABLE LYX
+A1D6 YI SYLLABLE LY
+A1D7 YI SYLLABLE LYP
+A1D8 YI SYLLABLE LYRX
+A1D9 YI SYLLABLE LYR
+A1DA YI SYLLABLE GIT
+A1DB YI SYLLABLE GIX
+A1DC YI SYLLABLE GI
+A1DD YI SYLLABLE GIP
+A1DE YI SYLLABLE GIET
+A1DF YI SYLLABLE GIEX
+A1E0 YI SYLLABLE GIE
+A1E1 YI SYLLABLE GIEP
+A1E2 YI SYLLABLE GAT
+A1E3 YI SYLLABLE GAX
+A1E4 YI SYLLABLE GA
+A1E5 YI SYLLABLE GAP
+A1E6 YI SYLLABLE GUOT
+A1E7 YI SYLLABLE GUOX
+A1E8 YI SYLLABLE GUO
+A1E9 YI SYLLABLE GUOP
+A1EA YI SYLLABLE GOT
+A1EB YI SYLLABLE GOX
+A1EC YI SYLLABLE GO
+A1ED YI SYLLABLE GOP
+A1EE YI SYLLABLE GET
+A1EF YI SYLLABLE GEX
+A1F0 YI SYLLABLE GE
+A1F1 YI SYLLABLE GEP
+A1F2 YI SYLLABLE GUT
+A1F3 YI SYLLABLE GUX
+A1F4 YI SYLLABLE GU
+A1F5 YI SYLLABLE GUP
+A1F6 YI SYLLABLE GURX
+A1F7 YI SYLLABLE GUR
+A1F8 YI SYLLABLE KIT
+A1F9 YI SYLLABLE KIX
+A1FA YI SYLLABLE KI
+A1FB YI SYLLABLE KIP
+A1FC YI SYLLABLE KIEX
+A1FD YI SYLLABLE KIE
+A1FE YI SYLLABLE KIEP
+A1FF YI SYLLABLE KAT
+A200 YI SYLLABLE KAX
+A201 YI SYLLABLE KA
+A202 YI SYLLABLE KAP
+A203 YI SYLLABLE KUOX
+A204 YI SYLLABLE KUO
+A205 YI SYLLABLE KUOP
+A206 YI SYLLABLE KOT
+A207 YI SYLLABLE KOX
+A208 YI SYLLABLE KO
+A209 YI SYLLABLE KOP
+A20A YI SYLLABLE KET
+A20B YI SYLLABLE KEX
+A20C YI SYLLABLE KE
+A20D YI SYLLABLE KEP
+A20E YI SYLLABLE KUT
+A20F YI SYLLABLE KUX
+A210 YI SYLLABLE KU
+A211 YI SYLLABLE KUP
+A212 YI SYLLABLE KURX
+A213 YI SYLLABLE KUR
+A214 YI SYLLABLE GGIT
+A215 YI SYLLABLE GGIX
+A216 YI SYLLABLE GGI
+A217 YI SYLLABLE GGIEX
+A218 YI SYLLABLE GGIE
+A219 YI SYLLABLE GGIEP
+A21A YI SYLLABLE GGAT
+A21B YI SYLLABLE GGAX
+A21C YI SYLLABLE GGA
+A21D YI SYLLABLE GGAP
+A21E YI SYLLABLE GGUOT
+A21F YI SYLLABLE GGUOX
+A220 YI SYLLABLE GGUO
+A221 YI SYLLABLE GGUOP
+A222 YI SYLLABLE GGOT
+A223 YI SYLLABLE GGOX
+A224 YI SYLLABLE GGO
+A225 YI SYLLABLE GGOP
+A226 YI SYLLABLE GGET
+A227 YI SYLLABLE GGEX
+A228 YI SYLLABLE GGE
+A229 YI SYLLABLE GGEP
+A22A YI SYLLABLE GGUT
+A22B YI SYLLABLE GGUX
+A22C YI SYLLABLE GGU
+A22D YI SYLLABLE GGUP
+A22E YI SYLLABLE GGURX
+A22F YI SYLLABLE GGUR
+A230 YI SYLLABLE MGIEX
+A231 YI SYLLABLE MGIE
+A232 YI SYLLABLE MGAT
+A233 YI SYLLABLE MGAX
+A234 YI SYLLABLE MGA
+A235 YI SYLLABLE MGAP
+A236 YI SYLLABLE MGUOX
+A237 YI SYLLABLE MGUO
+A238 YI SYLLABLE MGUOP
+A239 YI SYLLABLE MGOT
+A23A YI SYLLABLE MGOX
+A23B YI SYLLABLE MGO
+A23C YI SYLLABLE MGOP
+A23D YI SYLLABLE MGEX
+A23E YI SYLLABLE MGE
+A23F YI SYLLABLE MGEP
+A240 YI SYLLABLE MGUT
+A241 YI SYLLABLE MGUX
+A242 YI SYLLABLE MGU
+A243 YI SYLLABLE MGUP
+A244 YI SYLLABLE MGURX
+A245 YI SYLLABLE MGUR
+A246 YI SYLLABLE HXIT
+A247 YI SYLLABLE HXIX
+A248 YI SYLLABLE HXI
+A249 YI SYLLABLE HXIP
+A24A YI SYLLABLE HXIET
+A24B YI SYLLABLE HXIEX
+A24C YI SYLLABLE HXIE
+A24D YI SYLLABLE HXIEP
+A24E YI SYLLABLE HXAT
+A24F YI SYLLABLE HXAX
+A250 YI SYLLABLE HXA
+A251 YI SYLLABLE HXAP
+A252 YI SYLLABLE HXUOT
+A253 YI SYLLABLE HXUOX
+A254 YI SYLLABLE HXUO
+A255 YI SYLLABLE HXUOP
+A256 YI SYLLABLE HXOT
+A257 YI SYLLABLE HXOX
+A258 YI SYLLABLE HXO
+A259 YI SYLLABLE HXOP
+A25A YI SYLLABLE HXEX
+A25B YI SYLLABLE HXE
+A25C YI SYLLABLE HXEP
+A25D YI SYLLABLE NGIEX
+A25E YI SYLLABLE NGIE
+A25F YI SYLLABLE NGIEP
+A260 YI SYLLABLE NGAT
+A261 YI SYLLABLE NGAX
+A262 YI SYLLABLE NGA
+A263 YI SYLLABLE NGAP
+A264 YI SYLLABLE NGUOT
+A265 YI SYLLABLE NGUOX
+A266 YI SYLLABLE NGUO
+A267 YI SYLLABLE NGOT
+A268 YI SYLLABLE NGOX
+A269 YI SYLLABLE NGO
+A26A YI SYLLABLE NGOP
+A26B YI SYLLABLE NGEX
+A26C YI SYLLABLE NGE
+A26D YI SYLLABLE NGEP
+A26E YI SYLLABLE HIT
+A26F YI SYLLABLE HIEX
+A270 YI SYLLABLE HIE
+A271 YI SYLLABLE HAT
+A272 YI SYLLABLE HAX
+A273 YI SYLLABLE HA
+A274 YI SYLLABLE HAP
+A275 YI SYLLABLE HUOT
+A276 YI SYLLABLE HUOX
+A277 YI SYLLABLE HUO
+A278 YI SYLLABLE HUOP
+A279 YI SYLLABLE HOT
+A27A YI SYLLABLE HOX
+A27B YI SYLLABLE HO
+A27C YI SYLLABLE HOP
+A27D YI SYLLABLE HEX
+A27E YI SYLLABLE HE
+A27F YI SYLLABLE HEP
+A280 YI SYLLABLE WAT
+A281 YI SYLLABLE WAX
+A282 YI SYLLABLE WA
+A283 YI SYLLABLE WAP
+A284 YI SYLLABLE WUOX
+A285 YI SYLLABLE WUO
+A286 YI SYLLABLE WUOP
+A287 YI SYLLABLE WOX
+A288 YI SYLLABLE WO
+A289 YI SYLLABLE WOP
+A28A YI SYLLABLE WEX
+A28B YI SYLLABLE WE
+A28C YI SYLLABLE WEP
+A28D YI SYLLABLE ZIT
+A28E YI SYLLABLE ZIX
+A28F YI SYLLABLE ZI
+A290 YI SYLLABLE ZIP
+A291 YI SYLLABLE ZIEX
+A292 YI SYLLABLE ZIE
+A293 YI SYLLABLE ZIEP
+A294 YI SYLLABLE ZAT
+A295 YI SYLLABLE ZAX
+A296 YI SYLLABLE ZA
+A297 YI SYLLABLE ZAP
+A298 YI SYLLABLE ZUOX
+A299 YI SYLLABLE ZUO
+A29A YI SYLLABLE ZUOP
+A29B YI SYLLABLE ZOT
+A29C YI SYLLABLE ZOX
+A29D YI SYLLABLE ZO
+A29E YI SYLLABLE ZOP
+A29F YI SYLLABLE ZEX
+A2A0 YI SYLLABLE ZE
+A2A1 YI SYLLABLE ZEP
+A2A2 YI SYLLABLE ZUT
+A2A3 YI SYLLABLE ZUX
+A2A4 YI SYLLABLE ZU
+A2A5 YI SYLLABLE ZUP
+A2A6 YI SYLLABLE ZURX
+A2A7 YI SYLLABLE ZUR
+A2A8 YI SYLLABLE ZYT
+A2A9 YI SYLLABLE ZYX
+A2AA YI SYLLABLE ZY
+A2AB YI SYLLABLE ZYP
+A2AC YI SYLLABLE ZYRX
+A2AD YI SYLLABLE ZYR
+A2AE YI SYLLABLE CIT
+A2AF YI SYLLABLE CIX
+A2B0 YI SYLLABLE CI
+A2B1 YI SYLLABLE CIP
+A2B2 YI SYLLABLE CIET
+A2B3 YI SYLLABLE CIEX
+A2B4 YI SYLLABLE CIE
+A2B5 YI SYLLABLE CIEP
+A2B6 YI SYLLABLE CAT
+A2B7 YI SYLLABLE CAX
+A2B8 YI SYLLABLE CA
+A2B9 YI SYLLABLE CAP
+A2BA YI SYLLABLE CUOX
+A2BB YI SYLLABLE CUO
+A2BC YI SYLLABLE CUOP
+A2BD YI SYLLABLE COT
+A2BE YI SYLLABLE COX
+A2BF YI SYLLABLE CO
+A2C0 YI SYLLABLE COP
+A2C1 YI SYLLABLE CEX
+A2C2 YI SYLLABLE CE
+A2C3 YI SYLLABLE CEP
+A2C4 YI SYLLABLE CUT
+A2C5 YI SYLLABLE CUX
+A2C6 YI SYLLABLE CU
+A2C7 YI SYLLABLE CUP
+A2C8 YI SYLLABLE CURX
+A2C9 YI SYLLABLE CUR
+A2CA YI SYLLABLE CYT
+A2CB YI SYLLABLE CYX
+A2CC YI SYLLABLE CY
+A2CD YI SYLLABLE CYP
+A2CE YI SYLLABLE CYRX
+A2CF YI SYLLABLE CYR
+A2D0 YI SYLLABLE ZZIT
+A2D1 YI SYLLABLE ZZIX
+A2D2 YI SYLLABLE ZZI
+A2D3 YI SYLLABLE ZZIP
+A2D4 YI SYLLABLE ZZIET
+A2D5 YI SYLLABLE ZZIEX
+A2D6 YI SYLLABLE ZZIE
+A2D7 YI SYLLABLE ZZIEP
+A2D8 YI SYLLABLE ZZAT
+A2D9 YI SYLLABLE ZZAX
+A2DA YI SYLLABLE ZZA
+A2DB YI SYLLABLE ZZAP
+A2DC YI SYLLABLE ZZOX
+A2DD YI SYLLABLE ZZO
+A2DE YI SYLLABLE ZZOP
+A2DF YI SYLLABLE ZZEX
+A2E0 YI SYLLABLE ZZE
+A2E1 YI SYLLABLE ZZEP
+A2E2 YI SYLLABLE ZZUX
+A2E3 YI SYLLABLE ZZU
+A2E4 YI SYLLABLE ZZUP
+A2E5 YI SYLLABLE ZZURX
+A2E6 YI SYLLABLE ZZUR
+A2E7 YI SYLLABLE ZZYT
+A2E8 YI SYLLABLE ZZYX
+A2E9 YI SYLLABLE ZZY
+A2EA YI SYLLABLE ZZYP
+A2EB YI SYLLABLE ZZYRX
+A2EC YI SYLLABLE ZZYR
+A2ED YI SYLLABLE NZIT
+A2EE YI SYLLABLE NZIX
+A2EF YI SYLLABLE NZI
+A2F0 YI SYLLABLE NZIP
+A2F1 YI SYLLABLE NZIEX
+A2F2 YI SYLLABLE NZIE
+A2F3 YI SYLLABLE NZIEP
+A2F4 YI SYLLABLE NZAT
+A2F5 YI SYLLABLE NZAX
+A2F6 YI SYLLABLE NZA
+A2F7 YI SYLLABLE NZAP
+A2F8 YI SYLLABLE NZUOX
+A2F9 YI SYLLABLE NZUO
+A2FA YI SYLLABLE NZOX
+A2FB YI SYLLABLE NZOP
+A2FC YI SYLLABLE NZEX
+A2FD YI SYLLABLE NZE
+A2FE YI SYLLABLE NZUX
+A2FF YI SYLLABLE NZU
+A300 YI SYLLABLE NZUP
+A301 YI SYLLABLE NZURX
+A302 YI SYLLABLE NZUR
+A303 YI SYLLABLE NZYT
+A304 YI SYLLABLE NZYX
+A305 YI SYLLABLE NZY
+A306 YI SYLLABLE NZYP
+A307 YI SYLLABLE NZYRX
+A308 YI SYLLABLE NZYR
+A309 YI SYLLABLE SIT
+A30A YI SYLLABLE SIX
+A30B YI SYLLABLE SI
+A30C YI SYLLABLE SIP
+A30D YI SYLLABLE SIEX
+A30E YI SYLLABLE SIE
+A30F YI SYLLABLE SIEP
+A310 YI SYLLABLE SAT
+A311 YI SYLLABLE SAX
+A312 YI SYLLABLE SA
+A313 YI SYLLABLE SAP
+A314 YI SYLLABLE SUOX
+A315 YI SYLLABLE SUO
+A316 YI SYLLABLE SUOP
+A317 YI SYLLABLE SOT
+A318 YI SYLLABLE SOX
+A319 YI SYLLABLE SO
+A31A YI SYLLABLE SOP
+A31B YI SYLLABLE SEX
+A31C YI SYLLABLE SE
+A31D YI SYLLABLE SEP
+A31E YI SYLLABLE SUT
+A31F YI SYLLABLE SUX
+A320 YI SYLLABLE SU
+A321 YI SYLLABLE SUP
+A322 YI SYLLABLE SURX
+A323 YI SYLLABLE SUR
+A324 YI SYLLABLE SYT
+A325 YI SYLLABLE SYX
+A326 YI SYLLABLE SY
+A327 YI SYLLABLE SYP
+A328 YI SYLLABLE SYRX
+A329 YI SYLLABLE SYR
+A32A YI SYLLABLE SSIT
+A32B YI SYLLABLE SSIX
+A32C YI SYLLABLE SSI
+A32D YI SYLLABLE SSIP
+A32E YI SYLLABLE SSIEX
+A32F YI SYLLABLE SSIE
+A330 YI SYLLABLE SSIEP
+A331 YI SYLLABLE SSAT
+A332 YI SYLLABLE SSAX
+A333 YI SYLLABLE SSA
+A334 YI SYLLABLE SSAP
+A335 YI SYLLABLE SSOT
+A336 YI SYLLABLE SSOX
+A337 YI SYLLABLE SSO
+A338 YI SYLLABLE SSOP
+A339 YI SYLLABLE SSEX
+A33A YI SYLLABLE SSE
+A33B YI SYLLABLE SSEP
+A33C YI SYLLABLE SSUT
+A33D YI SYLLABLE SSUX
+A33E YI SYLLABLE SSU
+A33F YI SYLLABLE SSUP
+A340 YI SYLLABLE SSYT
+A341 YI SYLLABLE SSYX
+A342 YI SYLLABLE SSY
+A343 YI SYLLABLE SSYP
+A344 YI SYLLABLE SSYRX
+A345 YI SYLLABLE SSYR
+A346 YI SYLLABLE ZHAT
+A347 YI SYLLABLE ZHAX
+A348 YI SYLLABLE ZHA
+A349 YI SYLLABLE ZHAP
+A34A YI SYLLABLE ZHUOX
+A34B YI SYLLABLE ZHUO
+A34C YI SYLLABLE ZHUOP
+A34D YI SYLLABLE ZHOT
+A34E YI SYLLABLE ZHOX
+A34F YI SYLLABLE ZHO
+A350 YI SYLLABLE ZHOP
+A351 YI SYLLABLE ZHET
+A352 YI SYLLABLE ZHEX
+A353 YI SYLLABLE ZHE
+A354 YI SYLLABLE ZHEP
+A355 YI SYLLABLE ZHUT
+A356 YI SYLLABLE ZHUX
+A357 YI SYLLABLE ZHU
+A358 YI SYLLABLE ZHUP
+A359 YI SYLLABLE ZHURX
+A35A YI SYLLABLE ZHUR
+A35B YI SYLLABLE ZHYT
+A35C YI SYLLABLE ZHYX
+A35D YI SYLLABLE ZHY
+A35E YI SYLLABLE ZHYP
+A35F YI SYLLABLE ZHYRX
+A360 YI SYLLABLE ZHYR
+A361 YI SYLLABLE CHAT
+A362 YI SYLLABLE CHAX
+A363 YI SYLLABLE CHA
+A364 YI SYLLABLE CHAP
+A365 YI SYLLABLE CHUOT
+A366 YI SYLLABLE CHUOX
+A367 YI SYLLABLE CHUO
+A368 YI SYLLABLE CHUOP
+A369 YI SYLLABLE CHOT
+A36A YI SYLLABLE CHOX
+A36B YI SYLLABLE CHO
+A36C YI SYLLABLE CHOP
+A36D YI SYLLABLE CHET
+A36E YI SYLLABLE CHEX
+A36F YI SYLLABLE CHE
+A370 YI SYLLABLE CHEP
+A371 YI SYLLABLE CHUX
+A372 YI SYLLABLE CHU
+A373 YI SYLLABLE CHUP
+A374 YI SYLLABLE CHURX
+A375 YI SYLLABLE CHUR
+A376 YI SYLLABLE CHYT
+A377 YI SYLLABLE CHYX
+A378 YI SYLLABLE CHY
+A379 YI SYLLABLE CHYP
+A37A YI SYLLABLE CHYRX
+A37B YI SYLLABLE CHYR
+A37C YI SYLLABLE RRAX
+A37D YI SYLLABLE RRA
+A37E YI SYLLABLE RRUOX
+A37F YI SYLLABLE RRUO
+A380 YI SYLLABLE RROT
+A381 YI SYLLABLE RROX
+A382 YI SYLLABLE RRO
+A383 YI SYLLABLE RROP
+A384 YI SYLLABLE RRET
+A385 YI SYLLABLE RREX
+A386 YI SYLLABLE RRE
+A387 YI SYLLABLE RREP
+A388 YI SYLLABLE RRUT
+A389 YI SYLLABLE RRUX
+A38A YI SYLLABLE RRU
+A38B YI SYLLABLE RRUP
+A38C YI SYLLABLE RRURX
+A38D YI SYLLABLE RRUR
+A38E YI SYLLABLE RRYT
+A38F YI SYLLABLE RRYX
+A390 YI SYLLABLE RRY
+A391 YI SYLLABLE RRYP
+A392 YI SYLLABLE RRYRX
+A393 YI SYLLABLE RRYR
+A394 YI SYLLABLE NRAT
+A395 YI SYLLABLE NRAX
+A396 YI SYLLABLE NRA
+A397 YI SYLLABLE NRAP
+A398 YI SYLLABLE NROX
+A399 YI SYLLABLE NRO
+A39A YI SYLLABLE NROP
+A39B YI SYLLABLE NRET
+A39C YI SYLLABLE NREX
+A39D YI SYLLABLE NRE
+A39E YI SYLLABLE NREP
+A39F YI SYLLABLE NRUT
+A3A0 YI SYLLABLE NRUX
+A3A1 YI SYLLABLE NRU
+A3A2 YI SYLLABLE NRUP
+A3A3 YI SYLLABLE NRURX
+A3A4 YI SYLLABLE NRUR
+A3A5 YI SYLLABLE NRYT
+A3A6 YI SYLLABLE NRYX
+A3A7 YI SYLLABLE NRY
+A3A8 YI SYLLABLE NRYP
+A3A9 YI SYLLABLE NRYRX
+A3AA YI SYLLABLE NRYR
+A3AB YI SYLLABLE SHAT
+A3AC YI SYLLABLE SHAX
+A3AD YI SYLLABLE SHA
+A3AE YI SYLLABLE SHAP
+A3AF YI SYLLABLE SHUOX
+A3B0 YI SYLLABLE SHUO
+A3B1 YI SYLLABLE SHUOP
+A3B2 YI SYLLABLE SHOT
+A3B3 YI SYLLABLE SHOX
+A3B4 YI SYLLABLE SHO
+A3B5 YI SYLLABLE SHOP
+A3B6 YI SYLLABLE SHET
+A3B7 YI SYLLABLE SHEX
+A3B8 YI SYLLABLE SHE
+A3B9 YI SYLLABLE SHEP
+A3BA YI SYLLABLE SHUT
+A3BB YI SYLLABLE SHUX
+A3BC YI SYLLABLE SHU
+A3BD YI SYLLABLE SHUP
+A3BE YI SYLLABLE SHURX
+A3BF YI SYLLABLE SHUR
+A3C0 YI SYLLABLE SHYT
+A3C1 YI SYLLABLE SHYX
+A3C2 YI SYLLABLE SHY
+A3C3 YI SYLLABLE SHYP
+A3C4 YI SYLLABLE SHYRX
+A3C5 YI SYLLABLE SHYR
+A3C6 YI SYLLABLE RAT
+A3C7 YI SYLLABLE RAX
+A3C8 YI SYLLABLE RA
+A3C9 YI SYLLABLE RAP
+A3CA YI SYLLABLE RUOX
+A3CB YI SYLLABLE RUO
+A3CC YI SYLLABLE RUOP
+A3CD YI SYLLABLE ROT
+A3CE YI SYLLABLE ROX
+A3CF YI SYLLABLE RO
+A3D0 YI SYLLABLE ROP
+A3D1 YI SYLLABLE REX
+A3D2 YI SYLLABLE RE
+A3D3 YI SYLLABLE REP
+A3D4 YI SYLLABLE RUT
+A3D5 YI SYLLABLE RUX
+A3D6 YI SYLLABLE RU
+A3D7 YI SYLLABLE RUP
+A3D8 YI SYLLABLE RURX
+A3D9 YI SYLLABLE RUR
+A3DA YI SYLLABLE RYT
+A3DB YI SYLLABLE RYX
+A3DC YI SYLLABLE RY
+A3DD YI SYLLABLE RYP
+A3DE YI SYLLABLE RYRX
+A3DF YI SYLLABLE RYR
+A3E0 YI SYLLABLE JIT
+A3E1 YI SYLLABLE JIX
+A3E2 YI SYLLABLE JI
+A3E3 YI SYLLABLE JIP
+A3E4 YI SYLLABLE JIET
+A3E5 YI SYLLABLE JIEX
+A3E6 YI SYLLABLE JIE
+A3E7 YI SYLLABLE JIEP
+A3E8 YI SYLLABLE JUOT
+A3E9 YI SYLLABLE JUOX
+A3EA YI SYLLABLE JUO
+A3EB YI SYLLABLE JUOP
+A3EC YI SYLLABLE JOT
+A3ED YI SYLLABLE JOX
+A3EE YI SYLLABLE JO
+A3EF YI SYLLABLE JOP
+A3F0 YI SYLLABLE JUT
+A3F1 YI SYLLABLE JUX
+A3F2 YI SYLLABLE JU
+A3F3 YI SYLLABLE JUP
+A3F4 YI SYLLABLE JURX
+A3F5 YI SYLLABLE JUR
+A3F6 YI SYLLABLE JYT
+A3F7 YI SYLLABLE JYX
+A3F8 YI SYLLABLE JY
+A3F9 YI SYLLABLE JYP
+A3FA YI SYLLABLE JYRX
+A3FB YI SYLLABLE JYR
+A3FC YI SYLLABLE QIT
+A3FD YI SYLLABLE QIX
+A3FE YI SYLLABLE QI
+A3FF YI SYLLABLE QIP
+A400 YI SYLLABLE QIET
+A401 YI SYLLABLE QIEX
+A402 YI SYLLABLE QIE
+A403 YI SYLLABLE QIEP
+A404 YI SYLLABLE QUOT
+A405 YI SYLLABLE QUOX
+A406 YI SYLLABLE QUO
+A407 YI SYLLABLE QUOP
+A408 YI SYLLABLE QOT
+A409 YI SYLLABLE QOX
+A40A YI SYLLABLE QO
+A40B YI SYLLABLE QOP
+A40C YI SYLLABLE QUT
+A40D YI SYLLABLE QUX
+A40E YI SYLLABLE QU
+A40F YI SYLLABLE QUP
+A410 YI SYLLABLE QURX
+A411 YI SYLLABLE QUR
+A412 YI SYLLABLE QYT
+A413 YI SYLLABLE QYX
+A414 YI SYLLABLE QY
+A415 YI SYLLABLE QYP
+A416 YI SYLLABLE QYRX
+A417 YI SYLLABLE QYR
+A418 YI SYLLABLE JJIT
+A419 YI SYLLABLE JJIX
+A41A YI SYLLABLE JJI
+A41B YI SYLLABLE JJIP
+A41C YI SYLLABLE JJIET
+A41D YI SYLLABLE JJIEX
+A41E YI SYLLABLE JJIE
+A41F YI SYLLABLE JJIEP
+A420 YI SYLLABLE JJUOX
+A421 YI SYLLABLE JJUO
+A422 YI SYLLABLE JJUOP
+A423 YI SYLLABLE JJOT
+A424 YI SYLLABLE JJOX
+A425 YI SYLLABLE JJO
+A426 YI SYLLABLE JJOP
+A427 YI SYLLABLE JJUT
+A428 YI SYLLABLE JJUX
+A429 YI SYLLABLE JJU
+A42A YI SYLLABLE JJUP
+A42B YI SYLLABLE JJURX
+A42C YI SYLLABLE JJUR
+A42D YI SYLLABLE JJYT
+A42E YI SYLLABLE JJYX
+A42F YI SYLLABLE JJY
+A430 YI SYLLABLE JJYP
+A431 YI SYLLABLE NJIT
+A432 YI SYLLABLE NJIX
+A433 YI SYLLABLE NJI
+A434 YI SYLLABLE NJIP
+A435 YI SYLLABLE NJIET
+A436 YI SYLLABLE NJIEX
+A437 YI SYLLABLE NJIE
+A438 YI SYLLABLE NJIEP
+A439 YI SYLLABLE NJUOX
+A43A YI SYLLABLE NJUO
+A43B YI SYLLABLE NJOT
+A43C YI SYLLABLE NJOX
+A43D YI SYLLABLE NJO
+A43E YI SYLLABLE NJOP
+A43F YI SYLLABLE NJUX
+A440 YI SYLLABLE NJU
+A441 YI SYLLABLE NJUP
+A442 YI SYLLABLE NJURX
+A443 YI SYLLABLE NJUR
+A444 YI SYLLABLE NJYT
+A445 YI SYLLABLE NJYX
+A446 YI SYLLABLE NJY
+A447 YI SYLLABLE NJYP
+A448 YI SYLLABLE NJYRX
+A449 YI SYLLABLE NJYR
+A44A YI SYLLABLE NYIT
+A44B YI SYLLABLE NYIX
+A44C YI SYLLABLE NYI
+A44D YI SYLLABLE NYIP
+A44E YI SYLLABLE NYIET
+A44F YI SYLLABLE NYIEX
+A450 YI SYLLABLE NYIE
+A451 YI SYLLABLE NYIEP
+A452 YI SYLLABLE NYUOX
+A453 YI SYLLABLE NYUO
+A454 YI SYLLABLE NYUOP
+A455 YI SYLLABLE NYOT
+A456 YI SYLLABLE NYOX
+A457 YI SYLLABLE NYO
+A458 YI SYLLABLE NYOP
+A459 YI SYLLABLE NYUT
+A45A YI SYLLABLE NYUX
+A45B YI SYLLABLE NYU
+A45C YI SYLLABLE NYUP
+A45D YI SYLLABLE XIT
+A45E YI SYLLABLE XIX
+A45F YI SYLLABLE XI
+A460 YI SYLLABLE XIP
+A461 YI SYLLABLE XIET
+A462 YI SYLLABLE XIEX
+A463 YI SYLLABLE XIE
+A464 YI SYLLABLE XIEP
+A465 YI SYLLABLE XUOX
+A466 YI SYLLABLE XUO
+A467 YI SYLLABLE XOT
+A468 YI SYLLABLE XOX
+A469 YI SYLLABLE XO
+A46A YI SYLLABLE XOP
+A46B YI SYLLABLE XYT
+A46C YI SYLLABLE XYX
+A46D YI SYLLABLE XY
+A46E YI SYLLABLE XYP
+A46F YI SYLLABLE XYRX
+A470 YI SYLLABLE XYR
+A471 YI SYLLABLE YIT
+A472 YI SYLLABLE YIX
+A473 YI SYLLABLE YI
+A474 YI SYLLABLE YIP
+A475 YI SYLLABLE YIET
+A476 YI SYLLABLE YIEX
+A477 YI SYLLABLE YIE
+A478 YI SYLLABLE YIEP
+A479 YI SYLLABLE YUOT
+A47A YI SYLLABLE YUOX
+A47B YI SYLLABLE YUO
+A47C YI SYLLABLE YUOP
+A47D YI SYLLABLE YOT
+A47E YI SYLLABLE YOX
+A47F YI SYLLABLE YO
+A480 YI SYLLABLE YOP
+A481 YI SYLLABLE YUT
+A482 YI SYLLABLE YUX
+A483 YI SYLLABLE YU
+A484 YI SYLLABLE YUP
+A485 YI SYLLABLE YURX
+A486 YI SYLLABLE YUR
+A487 YI SYLLABLE YYT
+A488 YI SYLLABLE YYX
+A489 YI SYLLABLE YY
+A48A YI SYLLABLE YYP
+A48B YI SYLLABLE YYRX
+A48C YI SYLLABLE YYR
+@@ A490 Yi Radicals A4CF
+@ Yi radicals
+A490 YI RADICAL QOT
+A491 YI RADICAL LI
+A492 YI RADICAL KIT
+A493 YI RADICAL NYIP
+A494 YI RADICAL CYP
+A495 YI RADICAL SSI
+A496 YI RADICAL GGOP
+A497 YI RADICAL GEP
+A498 YI RADICAL MI
+A499 YI RADICAL HXIT
+A49A YI RADICAL LYR
+A49B YI RADICAL BBUT
+A49C YI RADICAL MOP
+A49D YI RADICAL YO
+A49E YI RADICAL PUT
+A49F YI RADICAL HXUO
+A4A0 YI RADICAL TAT
+A4A1 YI RADICAL GA
+A4A2 YI RADICAL ZUP
+A4A3 YI RADICAL CYT
+A4A4 YI RADICAL DDUR
+A4A5 YI RADICAL BUR
+A4A6 YI RADICAL GGUO
+A4A7 YI RADICAL NYOP
+A4A8 YI RADICAL TU
+A4A9 YI RADICAL OP
+A4AA YI RADICAL JJUT
+A4AB YI RADICAL ZOT
+A4AC YI RADICAL PYT
+A4AD YI RADICAL HMO
+A4AE YI RADICAL YIT
+A4AF YI RADICAL VUR
+A4B0 YI RADICAL SHY
+A4B1 YI RADICAL VEP
+A4B2 YI RADICAL ZA
+A4B3 YI RADICAL JO
+A4B4 YI RADICAL NZUP
+A4B5 YI RADICAL JJY
+A4B6 YI RADICAL GOT
+A4B7 YI RADICAL JJIE
+A4B8 YI RADICAL WO
+A4B9 YI RADICAL DU
+A4BA YI RADICAL SHUR
+A4BB YI RADICAL LIE
+A4BC YI RADICAL CY
+A4BD YI RADICAL CUOP
+A4BE YI RADICAL CIP
+A4BF YI RADICAL HXOP
+A4C0 YI RADICAL SHAT
+A4C1 YI RADICAL ZUR
+A4C2 YI RADICAL SHOP
+A4C3 YI RADICAL CHE
+A4C4 YI RADICAL ZZIET
+A4C5 YI RADICAL NBIE
+A4C6 YI RADICAL KE
+@@ A700 Modifier Tone Letters A71F
+@ Corner tone marks for Chinese
+A700 MODIFIER LETTER CHINESE TONE YIN PING
+A701 MODIFIER LETTER CHINESE TONE YANG PING
+A702 MODIFIER LETTER CHINESE TONE YIN SHANG
+A703 MODIFIER LETTER CHINESE TONE YANG SHANG
+A704 MODIFIER LETTER CHINESE TONE YIN QU
+A705 MODIFIER LETTER CHINESE TONE YANG QU
+A706 MODIFIER LETTER CHINESE TONE YIN RU
+A707 MODIFIER LETTER CHINESE TONE YANG RU
+@ Dotted tone letters
+A708 MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+A709 MODIFIER LETTER HIGH DOTTED TONE BAR
+A70A MODIFIER LETTER MID DOTTED TONE BAR
+A70B MODIFIER LETTER LOW DOTTED TONE BAR
+A70C MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+A70D MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+A70E MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+A70F MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+A710 MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+A711 MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+@ Left-stem tone letters
+A712 MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+A713 MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+A714 MODIFIER LETTER MID LEFT-STEM TONE BAR
+A715 MODIFIER LETTER LOW LEFT-STEM TONE BAR
+A716 MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+@@ A800 Syloti Nagri A82F
+@ Independent vowels and dvisvara
+A800 SYLOTI NAGRI LETTER A
+A801 SYLOTI NAGRI LETTER I
+A802 SYLOTI NAGRI SIGN DVISVARA
+A803 SYLOTI NAGRI LETTER U
+A804 SYLOTI NAGRI LETTER E
+A805 SYLOTI NAGRI LETTER O
+@ Sign
+A806 SYLOTI NAGRI SIGN HASANTA
+ = halant, virama
+@ Consonants and consonant signs
+A807 SYLOTI NAGRI LETTER KO
+A808 SYLOTI NAGRI LETTER KHO
+A809 SYLOTI NAGRI LETTER GO
+A80A SYLOTI NAGRI LETTER GHO
+A80B SYLOTI NAGRI SIGN ANUSVARA
+A80C SYLOTI NAGRI LETTER CO
+A80D SYLOTI NAGRI LETTER CHO
+A80E SYLOTI NAGRI LETTER JO
+A80F SYLOTI NAGRI LETTER JHO
+A810 SYLOTI NAGRI LETTER TTO
+A811 SYLOTI NAGRI LETTER TTHO
+A812 SYLOTI NAGRI LETTER DDO
+A813 SYLOTI NAGRI LETTER DDHO
+A814 SYLOTI NAGRI LETTER TO
+A815 SYLOTI NAGRI LETTER THO
+A816 SYLOTI NAGRI LETTER DO
+A817 SYLOTI NAGRI LETTER DHO
+A818 SYLOTI NAGRI LETTER NO
+A819 SYLOTI NAGRI LETTER PO
+A81A SYLOTI NAGRI LETTER PHO
+A81B SYLOTI NAGRI LETTER BO
+A81C SYLOTI NAGRI LETTER BHO
+A81D SYLOTI NAGRI LETTER MO
+A81E SYLOTI NAGRI LETTER RO
+A81F SYLOTI NAGRI LETTER LO
+A820 SYLOTI NAGRI LETTER RRO
+A821 SYLOTI NAGRI LETTER SO
+A822 SYLOTI NAGRI LETTER HO
+@ Dependent vowel signs
+A823 SYLOTI NAGRI VOWEL SIGN A
+A824 SYLOTI NAGRI VOWEL SIGN I
+A825 SYLOTI NAGRI VOWEL SIGN U
+A826 SYLOTI NAGRI VOWEL SIGN E
+A827 SYLOTI NAGRI VOWEL SIGN OO
+@ Poetry marks
+A828 SYLOTI NAGRI POETRY MARK-1
+A829 SYLOTI NAGRI POETRY MARK-2
+A82A SYLOTI NAGRI POETRY MARK-3
+A82B SYLOTI NAGRI POETRY MARK-4
+@@ AC00 Hangul Syllables D7A3
+@@ D800 High Surrogates DB7F
+@@ DB80 High Private Use Surrogates DBFF
+@@ DC00 Low Surrogates DFFF
+@@ E000 Private Use Area F8FF
+@@ F900 CJK Compatibility Ideographs FAFF
+@ Pronunciation variants from KS X 1001:1998
+F900 CJK COMPATIBILITY IDEOGRAPH-F900
+ : 8C48
+F901 CJK COMPATIBILITY IDEOGRAPH-F901
+ : 66F4
+F902 CJK COMPATIBILITY IDEOGRAPH-F902
+ : 8ECA
+F903 CJK COMPATIBILITY IDEOGRAPH-F903
+ : 8CC8
+F904 CJK COMPATIBILITY IDEOGRAPH-F904
+ : 6ED1
+F905 CJK COMPATIBILITY IDEOGRAPH-F905
+ : 4E32
+F906 CJK COMPATIBILITY IDEOGRAPH-F906
+ : 53E5
+F907 CJK COMPATIBILITY IDEOGRAPH-F907
+ : 9F9C
+F908 CJK COMPATIBILITY IDEOGRAPH-F908
+ : 9F9C
+F909 CJK COMPATIBILITY IDEOGRAPH-F909
+ : 5951
+F90A CJK COMPATIBILITY IDEOGRAPH-F90A
+ : 91D1
+F90B CJK COMPATIBILITY IDEOGRAPH-F90B
+ : 5587
+F90C CJK COMPATIBILITY IDEOGRAPH-F90C
+ : 5948
+F90D CJK COMPATIBILITY IDEOGRAPH-F90D
+ : 61F6
+F90E CJK COMPATIBILITY IDEOGRAPH-F90E
+ : 7669
+F90F CJK COMPATIBILITY IDEOGRAPH-F90F
+ : 7F85
+F910 CJK COMPATIBILITY IDEOGRAPH-F910
+ : 863F
+F911 CJK COMPATIBILITY IDEOGRAPH-F911
+ : 87BA
+F912 CJK COMPATIBILITY IDEOGRAPH-F912
+ : 88F8
+F913 CJK COMPATIBILITY IDEOGRAPH-F913
+ : 908F
+F914 CJK COMPATIBILITY IDEOGRAPH-F914
+ : 6A02
+F915 CJK COMPATIBILITY IDEOGRAPH-F915
+ : 6D1B
+F916 CJK COMPATIBILITY IDEOGRAPH-F916
+ : 70D9
+F917 CJK COMPATIBILITY IDEOGRAPH-F917
+ : 73DE
+F918 CJK COMPATIBILITY IDEOGRAPH-F918
+ : 843D
+F919 CJK COMPATIBILITY IDEOGRAPH-F919
+ : 916A
+F91A CJK COMPATIBILITY IDEOGRAPH-F91A
+ : 99F1
+F91B CJK COMPATIBILITY IDEOGRAPH-F91B
+ : 4E82
+F91C CJK COMPATIBILITY IDEOGRAPH-F91C
+ : 5375
+F91D CJK COMPATIBILITY IDEOGRAPH-F91D
+ : 6B04
+F91E CJK COMPATIBILITY IDEOGRAPH-F91E
+ : 721B
+F91F CJK COMPATIBILITY IDEOGRAPH-F91F
+ : 862D
+F920 CJK COMPATIBILITY IDEOGRAPH-F920
+ : 9E1E
+F921 CJK COMPATIBILITY IDEOGRAPH-F921
+ : 5D50
+F922 CJK COMPATIBILITY IDEOGRAPH-F922
+ : 6FEB
+F923 CJK COMPATIBILITY IDEOGRAPH-F923
+ : 85CD
+F924 CJK COMPATIBILITY IDEOGRAPH-F924
+ : 8964
+F925 CJK COMPATIBILITY IDEOGRAPH-F925
+ : 62C9
+F926 CJK COMPATIBILITY IDEOGRAPH-F926
+ : 81D8
+F927 CJK COMPATIBILITY IDEOGRAPH-F927
+ : 881F
+F928 CJK COMPATIBILITY IDEOGRAPH-F928
+ : 5ECA
+F929 CJK COMPATIBILITY IDEOGRAPH-F929
+ : 6717
+F92A CJK COMPATIBILITY IDEOGRAPH-F92A
+ : 6D6A
+F92B CJK COMPATIBILITY IDEOGRAPH-F92B
+ : 72FC
+F92C CJK COMPATIBILITY IDEOGRAPH-F92C
+ : 90CE
+F92D CJK COMPATIBILITY IDEOGRAPH-F92D
+ : 4F86
+F92E CJK COMPATIBILITY IDEOGRAPH-F92E
+ : 51B7
+F92F CJK COMPATIBILITY IDEOGRAPH-F92F
+ : 52DE
+F930 CJK COMPATIBILITY IDEOGRAPH-F930
+ : 64C4
+F931 CJK COMPATIBILITY IDEOGRAPH-F931
+ : 6AD3
+F932 CJK COMPATIBILITY IDEOGRAPH-F932
+ : 7210
+F933 CJK COMPATIBILITY IDEOGRAPH-F933
+ : 76E7
+F934 CJK COMPATIBILITY IDEOGRAPH-F934
+ : 8001
+F935 CJK COMPATIBILITY IDEOGRAPH-F935
+ : 8606
+F936 CJK COMPATIBILITY IDEOGRAPH-F936
+ : 865C
+F937 CJK COMPATIBILITY IDEOGRAPH-F937
+ : 8DEF
+F938 CJK COMPATIBILITY IDEOGRAPH-F938
+ : 9732
+F939 CJK COMPATIBILITY IDEOGRAPH-F939
+ : 9B6F
+F93A CJK COMPATIBILITY IDEOGRAPH-F93A
+ : 9DFA
+F93B CJK COMPATIBILITY IDEOGRAPH-F93B
+ : 788C
+F93C CJK COMPATIBILITY IDEOGRAPH-F93C
+ : 797F
+F93D CJK COMPATIBILITY IDEOGRAPH-F93D
+ : 7DA0
+F93E CJK COMPATIBILITY IDEOGRAPH-F93E
+ : 83C9
+F93F CJK COMPATIBILITY IDEOGRAPH-F93F
+ : 9304
+F940 CJK COMPATIBILITY IDEOGRAPH-F940
+ : 9E7F
+F941 CJK COMPATIBILITY IDEOGRAPH-F941
+ : 8AD6
+F942 CJK COMPATIBILITY IDEOGRAPH-F942
+ : 58DF
+F943 CJK COMPATIBILITY IDEOGRAPH-F943
+ : 5F04
+F944 CJK COMPATIBILITY IDEOGRAPH-F944
+ : 7C60
+F945 CJK COMPATIBILITY IDEOGRAPH-F945
+ : 807E
+F946 CJK COMPATIBILITY IDEOGRAPH-F946
+ : 7262
+F947 CJK COMPATIBILITY IDEOGRAPH-F947
+ : 78CA
+F948 CJK COMPATIBILITY IDEOGRAPH-F948
+ : 8CC2
+F949 CJK COMPATIBILITY IDEOGRAPH-F949
+ : 96F7
+F94A CJK COMPATIBILITY IDEOGRAPH-F94A
+ : 58D8
+F94B CJK COMPATIBILITY IDEOGRAPH-F94B
+ : 5C62
+F94C CJK COMPATIBILITY IDEOGRAPH-F94C
+ : 6A13
+F94D CJK COMPATIBILITY IDEOGRAPH-F94D
+ : 6DDA
+F94E CJK COMPATIBILITY IDEOGRAPH-F94E
+ : 6F0F
+F94F CJK COMPATIBILITY IDEOGRAPH-F94F
+ : 7D2F
+F950 CJK COMPATIBILITY IDEOGRAPH-F950
+ : 7E37
+F951 CJK COMPATIBILITY IDEOGRAPH-F951
+ : 964B
+F952 CJK COMPATIBILITY IDEOGRAPH-F952
+ : 52D2
+F953 CJK COMPATIBILITY IDEOGRAPH-F953
+ : 808B
+F954 CJK COMPATIBILITY IDEOGRAPH-F954
+ : 51DC
+F955 CJK COMPATIBILITY IDEOGRAPH-F955
+ : 51CC
+F956 CJK COMPATIBILITY IDEOGRAPH-F956
+ : 7A1C
+F957 CJK COMPATIBILITY IDEOGRAPH-F957
+ : 7DBE
+F958 CJK COMPATIBILITY IDEOGRAPH-F958
+ : 83F1
+F959 CJK COMPATIBILITY IDEOGRAPH-F959
+ : 9675
+F95A CJK COMPATIBILITY IDEOGRAPH-F95A
+ : 8B80
+F95B CJK COMPATIBILITY IDEOGRAPH-F95B
+ : 62CF
+F95C CJK COMPATIBILITY IDEOGRAPH-F95C
+ : 6A02
+F95D CJK COMPATIBILITY IDEOGRAPH-F95D
+ : 8AFE
+F95E CJK COMPATIBILITY IDEOGRAPH-F95E
+ : 4E39
+F95F CJK COMPATIBILITY IDEOGRAPH-F95F
+ : 5BE7
+F960 CJK COMPATIBILITY IDEOGRAPH-F960
+ : 6012
+F961 CJK COMPATIBILITY IDEOGRAPH-F961
+ : 7387
+F962 CJK COMPATIBILITY IDEOGRAPH-F962
+ : 7570
+F963 CJK COMPATIBILITY IDEOGRAPH-F963
+ : 5317
+F964 CJK COMPATIBILITY IDEOGRAPH-F964
+ : 78FB
+F965 CJK COMPATIBILITY IDEOGRAPH-F965
+ : 4FBF
+F966 CJK COMPATIBILITY IDEOGRAPH-F966
+ : 5FA9
+F967 CJK COMPATIBILITY IDEOGRAPH-F967
+ : 4E0D
+F968 CJK COMPATIBILITY IDEOGRAPH-F968
+ : 6CCC
+F969 CJK COMPATIBILITY IDEOGRAPH-F969
+ : 6578
+F96A CJK COMPATIBILITY IDEOGRAPH-F96A
+ : 7D22
+F96B CJK COMPATIBILITY IDEOGRAPH-F96B
+ : 53C3
+F96C CJK COMPATIBILITY IDEOGRAPH-F96C
+ : 585E
+F96D CJK COMPATIBILITY IDEOGRAPH-F96D
+ : 7701
+F96E CJK COMPATIBILITY IDEOGRAPH-F96E
+ : 8449
+F96F CJK COMPATIBILITY IDEOGRAPH-F96F
+ : 8AAA
+F970 CJK COMPATIBILITY IDEOGRAPH-F970
+ : 6BBA
+F971 CJK COMPATIBILITY IDEOGRAPH-F971
+ : 8FB0
+F972 CJK COMPATIBILITY IDEOGRAPH-F972
+ : 6C88
+F973 CJK COMPATIBILITY IDEOGRAPH-F973
+ : 62FE
+F974 CJK COMPATIBILITY IDEOGRAPH-F974
+ : 82E5
+F975 CJK COMPATIBILITY IDEOGRAPH-F975
+ : 63A0
+F976 CJK COMPATIBILITY IDEOGRAPH-F976
+ : 7565
+F977 CJK COMPATIBILITY IDEOGRAPH-F977
+ : 4EAE
+F978 CJK COMPATIBILITY IDEOGRAPH-F978
+ : 5169
+F979 CJK COMPATIBILITY IDEOGRAPH-F979
+ : 51C9
+F97A CJK COMPATIBILITY IDEOGRAPH-F97A
+ : 6881
+F97B CJK COMPATIBILITY IDEOGRAPH-F97B
+ : 7CE7
+F97C CJK COMPATIBILITY IDEOGRAPH-F97C
+ : 826F
+F97D CJK COMPATIBILITY IDEOGRAPH-F97D
+ : 8AD2
+F97E CJK COMPATIBILITY IDEOGRAPH-F97E
+ : 91CF
+F97F CJK COMPATIBILITY IDEOGRAPH-F97F
+ : 52F5
+F980 CJK COMPATIBILITY IDEOGRAPH-F980
+ : 5442
+F981 CJK COMPATIBILITY IDEOGRAPH-F981
+ : 5973
+F982 CJK COMPATIBILITY IDEOGRAPH-F982
+ : 5EEC
+F983 CJK COMPATIBILITY IDEOGRAPH-F983
+ : 65C5
+F984 CJK COMPATIBILITY IDEOGRAPH-F984
+ : 6FFE
+F985 CJK COMPATIBILITY IDEOGRAPH-F985
+ : 792A
+F986 CJK COMPATIBILITY IDEOGRAPH-F986
+ : 95AD
+F987 CJK COMPATIBILITY IDEOGRAPH-F987
+ : 9A6A
+F988 CJK COMPATIBILITY IDEOGRAPH-F988
+ : 9E97
+F989 CJK COMPATIBILITY IDEOGRAPH-F989
+ : 9ECE
+F98A CJK COMPATIBILITY IDEOGRAPH-F98A
+ : 529B
+F98B CJK COMPATIBILITY IDEOGRAPH-F98B
+ : 66C6
+F98C CJK COMPATIBILITY IDEOGRAPH-F98C
+ : 6B77
+F98D CJK COMPATIBILITY IDEOGRAPH-F98D
+ : 8F62
+F98E CJK COMPATIBILITY IDEOGRAPH-F98E
+ : 5E74
+F98F CJK COMPATIBILITY IDEOGRAPH-F98F
+ : 6190
+F990 CJK COMPATIBILITY IDEOGRAPH-F990
+ : 6200
+F991 CJK COMPATIBILITY IDEOGRAPH-F991
+ : 649A
+F992 CJK COMPATIBILITY IDEOGRAPH-F992
+ : 6F23
+F993 CJK COMPATIBILITY IDEOGRAPH-F993
+ : 7149
+F994 CJK COMPATIBILITY IDEOGRAPH-F994
+ : 7489
+F995 CJK COMPATIBILITY IDEOGRAPH-F995
+ : 79CA
+F996 CJK COMPATIBILITY IDEOGRAPH-F996
+ : 7DF4
+F997 CJK COMPATIBILITY IDEOGRAPH-F997
+ : 806F
+F998 CJK COMPATIBILITY IDEOGRAPH-F998
+ : 8F26
+F999 CJK COMPATIBILITY IDEOGRAPH-F999
+ : 84EE
+F99A CJK COMPATIBILITY IDEOGRAPH-F99A
+ : 9023
+F99B CJK COMPATIBILITY IDEOGRAPH-F99B
+ : 934A
+F99C CJK COMPATIBILITY IDEOGRAPH-F99C
+ : 5217
+F99D CJK COMPATIBILITY IDEOGRAPH-F99D
+ : 52A3
+F99E CJK COMPATIBILITY IDEOGRAPH-F99E
+ : 54BD
+F99F CJK COMPATIBILITY IDEOGRAPH-F99F
+ : 70C8
+F9A0 CJK COMPATIBILITY IDEOGRAPH-F9A0
+ : 88C2
+F9A1 CJK COMPATIBILITY IDEOGRAPH-F9A1
+ : 8AAA
+F9A2 CJK COMPATIBILITY IDEOGRAPH-F9A2
+ : 5EC9
+F9A3 CJK COMPATIBILITY IDEOGRAPH-F9A3
+ : 5FF5
+F9A4 CJK COMPATIBILITY IDEOGRAPH-F9A4
+ : 637B
+F9A5 CJK COMPATIBILITY IDEOGRAPH-F9A5
+ : 6BAE
+F9A6 CJK COMPATIBILITY IDEOGRAPH-F9A6
+ : 7C3E
+F9A7 CJK COMPATIBILITY IDEOGRAPH-F9A7
+ : 7375
+F9A8 CJK COMPATIBILITY IDEOGRAPH-F9A8
+ : 4EE4
+F9A9 CJK COMPATIBILITY IDEOGRAPH-F9A9
+ : 56F9
+F9AA CJK COMPATIBILITY IDEOGRAPH-F9AA
+ : 5BE7
+F9AB CJK COMPATIBILITY IDEOGRAPH-F9AB
+ : 5DBA
+F9AC CJK COMPATIBILITY IDEOGRAPH-F9AC
+ : 601C
+F9AD CJK COMPATIBILITY IDEOGRAPH-F9AD
+ : 73B2
+F9AE CJK COMPATIBILITY IDEOGRAPH-F9AE
+ : 7469
+F9AF CJK COMPATIBILITY IDEOGRAPH-F9AF
+ : 7F9A
+F9B0 CJK COMPATIBILITY IDEOGRAPH-F9B0
+ : 8046
+F9B1 CJK COMPATIBILITY IDEOGRAPH-F9B1
+ : 9234
+F9B2 CJK COMPATIBILITY IDEOGRAPH-F9B2
+ : 96F6
+F9B3 CJK COMPATIBILITY IDEOGRAPH-F9B3
+ : 9748
+F9B4 CJK COMPATIBILITY IDEOGRAPH-F9B4
+ : 9818
+F9B5 CJK COMPATIBILITY IDEOGRAPH-F9B5
+ : 4F8B
+F9B6 CJK COMPATIBILITY IDEOGRAPH-F9B6
+ : 79AE
+F9B7 CJK COMPATIBILITY IDEOGRAPH-F9B7
+ : 91B4
+F9B8 CJK COMPATIBILITY IDEOGRAPH-F9B8
+ x (cjk unified ideograph-96B7 - 96B7)
+ : 96B8
+F9B9 CJK COMPATIBILITY IDEOGRAPH-F9B9
+ : 60E1
+F9BA CJK COMPATIBILITY IDEOGRAPH-F9BA
+ : 4E86
+F9BB CJK COMPATIBILITY IDEOGRAPH-F9BB
+ : 50DA
+F9BC CJK COMPATIBILITY IDEOGRAPH-F9BC
+ : 5BEE
+F9BD CJK COMPATIBILITY IDEOGRAPH-F9BD
+ : 5C3F
+F9BE CJK COMPATIBILITY IDEOGRAPH-F9BE
+ : 6599
+F9BF CJK COMPATIBILITY IDEOGRAPH-F9BF
+ : 6A02
+F9C0 CJK COMPATIBILITY IDEOGRAPH-F9C0
+ : 71CE
+F9C1 CJK COMPATIBILITY IDEOGRAPH-F9C1
+ : 7642
+F9C2 CJK COMPATIBILITY IDEOGRAPH-F9C2
+ : 84FC
+F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3
+ : 907C
+F9C4 CJK COMPATIBILITY IDEOGRAPH-F9C4
+ : 9F8D
+F9C5 CJK COMPATIBILITY IDEOGRAPH-F9C5
+ : 6688
+F9C6 CJK COMPATIBILITY IDEOGRAPH-F9C6
+ : 962E
+F9C7 CJK COMPATIBILITY IDEOGRAPH-F9C7
+ : 5289
+F9C8 CJK COMPATIBILITY IDEOGRAPH-F9C8
+ : 677B
+F9C9 CJK COMPATIBILITY IDEOGRAPH-F9C9
+ : 67F3
+F9CA CJK COMPATIBILITY IDEOGRAPH-F9CA
+ : 6D41
+F9CB CJK COMPATIBILITY IDEOGRAPH-F9CB
+ : 6E9C
+F9CC CJK COMPATIBILITY IDEOGRAPH-F9CC
+ : 7409
+F9CD CJK COMPATIBILITY IDEOGRAPH-F9CD
+ : 7559
+F9CE CJK COMPATIBILITY IDEOGRAPH-F9CE
+ : 786B
+F9CF CJK COMPATIBILITY IDEOGRAPH-F9CF
+ : 7D10
+F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0
+ : 985E
+F9D1 CJK COMPATIBILITY IDEOGRAPH-F9D1
+ : 516D
+F9D2 CJK COMPATIBILITY IDEOGRAPH-F9D2
+ : 622E
+F9D3 CJK COMPATIBILITY IDEOGRAPH-F9D3
+ : 9678
+F9D4 CJK COMPATIBILITY IDEOGRAPH-F9D4
+ : 502B
+F9D5 CJK COMPATIBILITY IDEOGRAPH-F9D5
+ : 5D19
+F9D6 CJK COMPATIBILITY IDEOGRAPH-F9D6
+ : 6DEA
+F9D7 CJK COMPATIBILITY IDEOGRAPH-F9D7
+ : 8F2A
+F9D8 CJK COMPATIBILITY IDEOGRAPH-F9D8
+ : 5F8B
+F9D9 CJK COMPATIBILITY IDEOGRAPH-F9D9
+ : 6144
+F9DA CJK COMPATIBILITY IDEOGRAPH-F9DA
+ : 6817
+F9DB CJK COMPATIBILITY IDEOGRAPH-F9DB
+ : 7387
+F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC
+ : 9686
+F9DD CJK COMPATIBILITY IDEOGRAPH-F9DD
+ : 5229
+F9DE CJK COMPATIBILITY IDEOGRAPH-F9DE
+ : 540F
+F9DF CJK COMPATIBILITY IDEOGRAPH-F9DF
+ : 5C65
+F9E0 CJK COMPATIBILITY IDEOGRAPH-F9E0
+ : 6613
+F9E1 CJK COMPATIBILITY IDEOGRAPH-F9E1
+ : 674E
+F9E2 CJK COMPATIBILITY IDEOGRAPH-F9E2
+ : 68A8
+F9E3 CJK COMPATIBILITY IDEOGRAPH-F9E3
+ : 6CE5
+F9E4 CJK COMPATIBILITY IDEOGRAPH-F9E4
+ : 7406
+F9E5 CJK COMPATIBILITY IDEOGRAPH-F9E5
+ : 75E2
+F9E6 CJK COMPATIBILITY IDEOGRAPH-F9E6
+ : 7F79
+F9E7 CJK COMPATIBILITY IDEOGRAPH-F9E7
+ : 88CF
+F9E8 CJK COMPATIBILITY IDEOGRAPH-F9E8
+ : 88E1
+F9E9 CJK COMPATIBILITY IDEOGRAPH-F9E9
+ : 91CC
+F9EA CJK COMPATIBILITY IDEOGRAPH-F9EA
+ : 96E2
+F9EB CJK COMPATIBILITY IDEOGRAPH-F9EB
+ : 533F
+F9EC CJK COMPATIBILITY IDEOGRAPH-F9EC
+ : 6EBA
+F9ED CJK COMPATIBILITY IDEOGRAPH-F9ED
+ : 541D
+F9EE CJK COMPATIBILITY IDEOGRAPH-F9EE
+ : 71D0
+F9EF CJK COMPATIBILITY IDEOGRAPH-F9EF
+ : 7498
+F9F0 CJK COMPATIBILITY IDEOGRAPH-F9F0
+ : 85FA
+F9F1 CJK COMPATIBILITY IDEOGRAPH-F9F1
+ : 96A3
+F9F2 CJK COMPATIBILITY IDEOGRAPH-F9F2
+ : 9C57
+F9F3 CJK COMPATIBILITY IDEOGRAPH-F9F3
+ : 9E9F
+F9F4 CJK COMPATIBILITY IDEOGRAPH-F9F4
+ : 6797
+F9F5 CJK COMPATIBILITY IDEOGRAPH-F9F5
+ : 6DCB
+F9F6 CJK COMPATIBILITY IDEOGRAPH-F9F6
+ : 81E8
+F9F7 CJK COMPATIBILITY IDEOGRAPH-F9F7
+ : 7ACB
+F9F8 CJK COMPATIBILITY IDEOGRAPH-F9F8
+ : 7B20
+F9F9 CJK COMPATIBILITY IDEOGRAPH-F9F9
+ : 7C92
+F9FA CJK COMPATIBILITY IDEOGRAPH-F9FA
+ : 72C0
+F9FB CJK COMPATIBILITY IDEOGRAPH-F9FB
+ : 7099
+F9FC CJK COMPATIBILITY IDEOGRAPH-F9FC
+ : 8B58
+F9FD CJK COMPATIBILITY IDEOGRAPH-F9FD
+ : 4EC0
+F9FE CJK COMPATIBILITY IDEOGRAPH-F9FE
+ : 8336
+F9FF CJK COMPATIBILITY IDEOGRAPH-F9FF
+ : 523A
+FA00 CJK COMPATIBILITY IDEOGRAPH-FA00
+ : 5207
+FA01 CJK COMPATIBILITY IDEOGRAPH-FA01
+ : 5EA6
+FA02 CJK COMPATIBILITY IDEOGRAPH-FA02
+ : 62D3
+FA03 CJK COMPATIBILITY IDEOGRAPH-FA03
+ : 7CD6
+FA04 CJK COMPATIBILITY IDEOGRAPH-FA04
+ : 5B85
+FA05 CJK COMPATIBILITY IDEOGRAPH-FA05
+ : 6D1E
+FA06 CJK COMPATIBILITY IDEOGRAPH-FA06
+ : 66B4
+FA07 CJK COMPATIBILITY IDEOGRAPH-FA07
+ : 8F3B
+FA08 CJK COMPATIBILITY IDEOGRAPH-FA08
+ : 884C
+FA09 CJK COMPATIBILITY IDEOGRAPH-FA09
+ : 964D
+FA0A CJK COMPATIBILITY IDEOGRAPH-FA0A
+ : 898B
+FA0B CJK COMPATIBILITY IDEOGRAPH-FA0B
+ : 5ED3
+@ Duplicates from Big 5
+FA0C CJK COMPATIBILITY IDEOGRAPH-FA0C
+ : 5140
+FA0D CJK COMPATIBILITY IDEOGRAPH-FA0D
+ : 55C0
+@ The IBM 32 compatibility ideographs
+FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA10 CJK COMPATIBILITY IDEOGRAPH-FA10
+ : 585A
+FA11 CJK COMPATIBILITY IDEOGRAPH-FA11
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA12 CJK COMPATIBILITY IDEOGRAPH-FA12
+ : 6674
+FA13 CJK COMPATIBILITY IDEOGRAPH-FA13
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA14 CJK COMPATIBILITY IDEOGRAPH-FA14
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA15 CJK COMPATIBILITY IDEOGRAPH-FA15
+ : 51DE
+FA16 CJK COMPATIBILITY IDEOGRAPH-FA16
+ : 732A
+FA17 CJK COMPATIBILITY IDEOGRAPH-FA17
+ : 76CA
+FA18 CJK COMPATIBILITY IDEOGRAPH-FA18
+ : 793C
+FA19 CJK COMPATIBILITY IDEOGRAPH-FA19
+ : 795E
+FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A
+ : 7965
+FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B
+ : 798F
+FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C
+ : 9756
+FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D
+ : 7CBE
+FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E
+ : 7FBD
+FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F *
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA20 CJK COMPATIBILITY IDEOGRAPH-FA20
+ : 8612
+FA21 CJK COMPATIBILITY IDEOGRAPH-FA21
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA22 CJK COMPATIBILITY IDEOGRAPH-FA22
+ : 8AF8
+FA23 CJK COMPATIBILITY IDEOGRAPH-FA23 *
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA24 CJK COMPATIBILITY IDEOGRAPH-FA24
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA25 CJK COMPATIBILITY IDEOGRAPH-FA25
+ : 9038
+FA26 CJK COMPATIBILITY IDEOGRAPH-FA26
+ : 90FD
+FA27 CJK COMPATIBILITY IDEOGRAPH-FA27
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA28 CJK COMPATIBILITY IDEOGRAPH-FA28
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA29 CJK COMPATIBILITY IDEOGRAPH-FA29
+ * a unified CJK ideograph, not a compatibility ideograph, despite its name
+FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A
+ : 98EF
+FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B
+ : 98FC
+FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C
+ : 9928
+FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D
+ : 9DB4
+@ JIS X 0213 compatibility ideographs
+FA30 CJK COMPATIBILITY IDEOGRAPH-FA30
+ : 4FAE
+FA31 CJK COMPATIBILITY IDEOGRAPH-FA31
+ : 50E7
+FA32 CJK COMPATIBILITY IDEOGRAPH-FA32
+ : 514D
+FA33 CJK COMPATIBILITY IDEOGRAPH-FA33
+ : 52C9
+FA34 CJK COMPATIBILITY IDEOGRAPH-FA34
+ : 52E4
+FA35 CJK COMPATIBILITY IDEOGRAPH-FA35
+ : 5351
+FA36 CJK COMPATIBILITY IDEOGRAPH-FA36
+ : 559D
+FA37 CJK COMPATIBILITY IDEOGRAPH-FA37
+ : 5606
+FA38 CJK COMPATIBILITY IDEOGRAPH-FA38
+ : 5668
+FA39 CJK COMPATIBILITY IDEOGRAPH-FA39
+ : 5840
+FA3A CJK COMPATIBILITY IDEOGRAPH-FA3A
+ : 58A8
+FA3B CJK COMPATIBILITY IDEOGRAPH-FA3B
+ : 5C64
+FA3C CJK COMPATIBILITY IDEOGRAPH-FA3C
+ : 5C6E
+FA3D CJK COMPATIBILITY IDEOGRAPH-FA3D
+ : 6094
+FA3E CJK COMPATIBILITY IDEOGRAPH-FA3E
+ : 6168
+FA3F CJK COMPATIBILITY IDEOGRAPH-FA3F
+ : 618E
+FA40 CJK COMPATIBILITY IDEOGRAPH-FA40
+ : 61F2
+FA41 CJK COMPATIBILITY IDEOGRAPH-FA41
+ : 654F
+FA42 CJK COMPATIBILITY IDEOGRAPH-FA42
+ : 65E2
+FA43 CJK COMPATIBILITY IDEOGRAPH-FA43
+ : 6691
+FA44 CJK COMPATIBILITY IDEOGRAPH-FA44
+ : 6885
+FA45 CJK COMPATIBILITY IDEOGRAPH-FA45
+ : 6D77
+FA46 CJK COMPATIBILITY IDEOGRAPH-FA46
+ : 6E1A
+FA47 CJK COMPATIBILITY IDEOGRAPH-FA47
+ : 6F22
+FA48 CJK COMPATIBILITY IDEOGRAPH-FA48
+ : 716E
+FA49 CJK COMPATIBILITY IDEOGRAPH-FA49
+ : 722B
+FA4A CJK COMPATIBILITY IDEOGRAPH-FA4A
+ : 7422
+FA4B CJK COMPATIBILITY IDEOGRAPH-FA4B
+ : 7891
+FA4C CJK COMPATIBILITY IDEOGRAPH-FA4C
+ : 793E
+FA4D CJK COMPATIBILITY IDEOGRAPH-FA4D
+ : 7949
+FA4E CJK COMPATIBILITY IDEOGRAPH-FA4E
+ : 7948
+FA4F CJK COMPATIBILITY IDEOGRAPH-FA4F
+ : 7950
+FA50 CJK COMPATIBILITY IDEOGRAPH-FA50
+ : 7956
+FA51 CJK COMPATIBILITY IDEOGRAPH-FA51
+ : 795D
+FA52 CJK COMPATIBILITY IDEOGRAPH-FA52
+ : 798D
+FA53 CJK COMPATIBILITY IDEOGRAPH-FA53
+ : 798E
+FA54 CJK COMPATIBILITY IDEOGRAPH-FA54
+ : 7A40
+FA55 CJK COMPATIBILITY IDEOGRAPH-FA55
+ : 7A81
+FA56 CJK COMPATIBILITY IDEOGRAPH-FA56
+ : 7BC0
+FA57 CJK COMPATIBILITY IDEOGRAPH-FA57
+ : 7DF4
+FA58 CJK COMPATIBILITY IDEOGRAPH-FA58
+ : 7E09
+FA59 CJK COMPATIBILITY IDEOGRAPH-FA59
+ : 7E41
+FA5A CJK COMPATIBILITY IDEOGRAPH-FA5A
+ : 7F72
+FA5B CJK COMPATIBILITY IDEOGRAPH-FA5B
+ : 8005
+FA5C CJK COMPATIBILITY IDEOGRAPH-FA5C
+ : 81ED
+FA5D CJK COMPATIBILITY IDEOGRAPH-FA5D
+ : 8279
+FA5E CJK COMPATIBILITY IDEOGRAPH-FA5E
+ : 8279
+FA5F CJK COMPATIBILITY IDEOGRAPH-FA5F
+ : 8457
+FA60 CJK COMPATIBILITY IDEOGRAPH-FA60
+ : 8910
+FA61 CJK COMPATIBILITY IDEOGRAPH-FA61
+ : 8996
+FA62 CJK COMPATIBILITY IDEOGRAPH-FA62
+ : 8B01
+FA63 CJK COMPATIBILITY IDEOGRAPH-FA63
+ : 8B39
+FA64 CJK COMPATIBILITY IDEOGRAPH-FA64
+ : 8CD3
+FA65 CJK COMPATIBILITY IDEOGRAPH-FA65
+ : 8D08
+FA66 CJK COMPATIBILITY IDEOGRAPH-FA66
+ : 8FB6
+FA67 CJK COMPATIBILITY IDEOGRAPH-FA67
+ : 9038
+FA68 CJK COMPATIBILITY IDEOGRAPH-FA68
+ : 96E3
+FA69 CJK COMPATIBILITY IDEOGRAPH-FA69
+ : 97FF
+FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A
+ : 983B
+@ DPRK compatibility ideographs
+FA70 CJK COMPATIBILITY IDEOGRAPH-FA70
+ : 4E26
+FA71 CJK COMPATIBILITY IDEOGRAPH-FA71
+ : 51B5
+FA72 CJK COMPATIBILITY IDEOGRAPH-FA72
+ : 5168
+FA73 CJK COMPATIBILITY IDEOGRAPH-FA73
+ : 4F80
+FA74 CJK COMPATIBILITY IDEOGRAPH-FA74
+ : 5145
+FA75 CJK COMPATIBILITY IDEOGRAPH-FA75
+ : 5180
+FA76 CJK COMPATIBILITY IDEOGRAPH-FA76
+ : 52C7
+FA77 CJK COMPATIBILITY IDEOGRAPH-FA77
+ : 52FA
+FA78 CJK COMPATIBILITY IDEOGRAPH-FA78
+ : 559D
+FA79 CJK COMPATIBILITY IDEOGRAPH-FA79
+ : 5555
+FA7A CJK COMPATIBILITY IDEOGRAPH-FA7A
+ : 5599
+FA7B CJK COMPATIBILITY IDEOGRAPH-FA7B
+ : 55E2
+FA7C CJK COMPATIBILITY IDEOGRAPH-FA7C
+ : 585A
+FA7D CJK COMPATIBILITY IDEOGRAPH-FA7D
+ : 58B3
+FA7E CJK COMPATIBILITY IDEOGRAPH-FA7E
+ : 5944
+FA7F CJK COMPATIBILITY IDEOGRAPH-FA7F
+ : 5954
+FA80 CJK COMPATIBILITY IDEOGRAPH-FA80
+ : 5A62
+FA81 CJK COMPATIBILITY IDEOGRAPH-FA81
+ : 5B28
+FA82 CJK COMPATIBILITY IDEOGRAPH-FA82
+ : 5ED2
+FA83 CJK COMPATIBILITY IDEOGRAPH-FA83
+ : 5ED9
+FA84 CJK COMPATIBILITY IDEOGRAPH-FA84
+ : 5F69
+FA85 CJK COMPATIBILITY IDEOGRAPH-FA85
+ : 5FAD
+FA86 CJK COMPATIBILITY IDEOGRAPH-FA86
+ : 60D8
+FA87 CJK COMPATIBILITY IDEOGRAPH-FA87
+ : 614E
+FA88 CJK COMPATIBILITY IDEOGRAPH-FA88
+ : 6108
+FA89 CJK COMPATIBILITY IDEOGRAPH-FA89
+ : 618E
+FA8A CJK COMPATIBILITY IDEOGRAPH-FA8A
+ : 6160
+FA8B CJK COMPATIBILITY IDEOGRAPH-FA8B
+ : 61F2
+FA8C CJK COMPATIBILITY IDEOGRAPH-FA8C
+ : 6234
+FA8D CJK COMPATIBILITY IDEOGRAPH-FA8D
+ : 63C4
+FA8E CJK COMPATIBILITY IDEOGRAPH-FA8E
+ : 641C
+FA8F CJK COMPATIBILITY IDEOGRAPH-FA8F
+ : 6452
+FA90 CJK COMPATIBILITY IDEOGRAPH-FA90
+ : 6556
+FA91 CJK COMPATIBILITY IDEOGRAPH-FA91
+ : 6674
+FA92 CJK COMPATIBILITY IDEOGRAPH-FA92
+ : 6717
+FA93 CJK COMPATIBILITY IDEOGRAPH-FA93
+ : 671B
+FA94 CJK COMPATIBILITY IDEOGRAPH-FA94
+ : 6756
+FA95 CJK COMPATIBILITY IDEOGRAPH-FA95
+ : 6B79
+FA96 CJK COMPATIBILITY IDEOGRAPH-FA96
+ : 6BBA
+FA97 CJK COMPATIBILITY IDEOGRAPH-FA97
+ : 6D41
+FA98 CJK COMPATIBILITY IDEOGRAPH-FA98
+ : 6EDB
+FA99 CJK COMPATIBILITY IDEOGRAPH-FA99
+ : 6ECB
+FA9A CJK COMPATIBILITY IDEOGRAPH-FA9A
+ : 6F22
+FA9B CJK COMPATIBILITY IDEOGRAPH-FA9B
+ : 701E
+FA9C CJK COMPATIBILITY IDEOGRAPH-FA9C
+ : 716E
+FA9D CJK COMPATIBILITY IDEOGRAPH-FA9D
+ : 77A7
+FA9E CJK COMPATIBILITY IDEOGRAPH-FA9E
+ : 7235
+FA9F CJK COMPATIBILITY IDEOGRAPH-FA9F
+ : 72AF
+FAA0 CJK COMPATIBILITY IDEOGRAPH-FAA0
+ : 732A
+FAA1 CJK COMPATIBILITY IDEOGRAPH-FAA1
+ : 7471
+FAA2 CJK COMPATIBILITY IDEOGRAPH-FAA2
+ : 7506
+FAA3 CJK COMPATIBILITY IDEOGRAPH-FAA3
+ : 753B
+FAA4 CJK COMPATIBILITY IDEOGRAPH-FAA4
+ : 761D
+FAA5 CJK COMPATIBILITY IDEOGRAPH-FAA5
+ : 761F
+FAA6 CJK COMPATIBILITY IDEOGRAPH-FAA6
+ : 76CA
+FAA7 CJK COMPATIBILITY IDEOGRAPH-FAA7
+ : 76DB
+FAA8 CJK COMPATIBILITY IDEOGRAPH-FAA8
+ : 76F4
+FAA9 CJK COMPATIBILITY IDEOGRAPH-FAA9
+ : 774A
+FAAA CJK COMPATIBILITY IDEOGRAPH-FAAA
+ : 7740
+FAAB CJK COMPATIBILITY IDEOGRAPH-FAAB
+ : 78CC
+FAAC CJK COMPATIBILITY IDEOGRAPH-FAAC
+ : 7AB1
+FAAD CJK COMPATIBILITY IDEOGRAPH-FAAD
+ : 7BC0
+FAAE CJK COMPATIBILITY IDEOGRAPH-FAAE
+ : 7C7B
+FAAF CJK COMPATIBILITY IDEOGRAPH-FAAF
+ : 7D5B
+FAB0 CJK COMPATIBILITY IDEOGRAPH-FAB0
+ : 7DF4
+FAB1 CJK COMPATIBILITY IDEOGRAPH-FAB1
+ : 7F3E
+FAB2 CJK COMPATIBILITY IDEOGRAPH-FAB2
+ : 8005
+FAB3 CJK COMPATIBILITY IDEOGRAPH-FAB3
+ : 8352
+FAB4 CJK COMPATIBILITY IDEOGRAPH-FAB4
+ : 83EF
+FAB5 CJK COMPATIBILITY IDEOGRAPH-FAB5
+ : 8779
+FAB6 CJK COMPATIBILITY IDEOGRAPH-FAB6
+ : 8941
+FAB7 CJK COMPATIBILITY IDEOGRAPH-FAB7
+ : 8986
+FAB8 CJK COMPATIBILITY IDEOGRAPH-FAB8
+ : 8996
+FAB9 CJK COMPATIBILITY IDEOGRAPH-FAB9
+ : 8ABF
+FABA CJK COMPATIBILITY IDEOGRAPH-FABA
+ : 8AF8
+FABB CJK COMPATIBILITY IDEOGRAPH-FABB
+ : 8ACB
+FABC CJK COMPATIBILITY IDEOGRAPH-FABC
+ : 8B01
+FABD CJK COMPATIBILITY IDEOGRAPH-FABD
+ : 8AFE
+FABE CJK COMPATIBILITY IDEOGRAPH-FABE
+ : 8AED
+FABF CJK COMPATIBILITY IDEOGRAPH-FABF
+ : 8B39
+FAC0 CJK COMPATIBILITY IDEOGRAPH-FAC0
+ : 8B8A
+FAC1 CJK COMPATIBILITY IDEOGRAPH-FAC1
+ : 8D08
+FAC2 CJK COMPATIBILITY IDEOGRAPH-FAC2
+ : 8F38
+FAC3 CJK COMPATIBILITY IDEOGRAPH-FAC3
+ : 9072
+FAC4 CJK COMPATIBILITY IDEOGRAPH-FAC4
+ : 9199
+FAC5 CJK COMPATIBILITY IDEOGRAPH-FAC5
+ : 9276
+FAC6 CJK COMPATIBILITY IDEOGRAPH-FAC6
+ : 967C
+FAC7 CJK COMPATIBILITY IDEOGRAPH-FAC7
+ : 96E3
+FAC8 CJK COMPATIBILITY IDEOGRAPH-FAC8
+ : 9756
+FAC9 CJK COMPATIBILITY IDEOGRAPH-FAC9
+ : 97DB
+FACA CJK COMPATIBILITY IDEOGRAPH-FACA
+ : 97FF
+FACB CJK COMPATIBILITY IDEOGRAPH-FACB
+ : 980B
+FACC CJK COMPATIBILITY IDEOGRAPH-FACC
+ : 983B
+FACD CJK COMPATIBILITY IDEOGRAPH-FACD
+ : 9B12
+FACE CJK COMPATIBILITY IDEOGRAPH-FACE
+ : 9F9C
+FACF CJK COMPATIBILITY IDEOGRAPH-FACF
+ : 2284A
+FAD0 CJK COMPATIBILITY IDEOGRAPH-FAD0
+ : 22844
+FAD1 CJK COMPATIBILITY IDEOGRAPH-FAD1
+ : 233D5
+FAD2 CJK COMPATIBILITY IDEOGRAPH-FAD2
+ : 3B9D
+FAD3 CJK COMPATIBILITY IDEOGRAPH-FAD3
+ : 4018
+FAD4 CJK COMPATIBILITY IDEOGRAPH-FAD4
+ : 4039
+FAD5 CJK COMPATIBILITY IDEOGRAPH-FAD5
+ : 25249
+FAD6 CJK COMPATIBILITY IDEOGRAPH-FAD6
+ : 25CD0
+FAD7 CJK COMPATIBILITY IDEOGRAPH-FAD7
+ : 27ED3
+FAD8 CJK COMPATIBILITY IDEOGRAPH-FAD8
+ : 9F43
+FAD9 CJK COMPATIBILITY IDEOGRAPH-FAD9
+ : 9F8E
+@@ FB00 Alphabetic Presentation Forms FB4F
+@ Latin ligatures
+@+ See the Basic Latin block starting at 0020
+FB00 LATIN SMALL LIGATURE FF
+ # 0066 0066
+FB01 LATIN SMALL LIGATURE FI
+ # 0066 0069
+FB02 LATIN SMALL LIGATURE FL
+ # 0066 006C
+FB03 LATIN SMALL LIGATURE FFI
+ # 0066 0066 0069
+FB04 LATIN SMALL LIGATURE FFL
+ # 0066 0066 006C
+FB05 LATIN SMALL LIGATURE LONG S T
+ # 017F 0074
+FB06 LATIN SMALL LIGATURE ST
+ # 0073 0074
+@ Armenian ligatures
+@+ See the Armenian block starting at 0530
+FB13 ARMENIAN SMALL LIGATURE MEN NOW
+ # 0574 0576
+FB14 ARMENIAN SMALL LIGATURE MEN ECH
+ # 0574 0565
+FB15 ARMENIAN SMALL LIGATURE MEN INI
+ # 0574 056B
+FB16 ARMENIAN SMALL LIGATURE VEW NOW
+ # 057E 0576
+FB17 ARMENIAN SMALL LIGATURE MEN XEH
+ # 0574 056D
+@ Hebrew presentation forms
+@+ See the Hebrew block starting at 0590
+FB1D HEBREW LETTER YOD WITH HIRIQ
+ : 05D9 05B4
+FB1E HEBREW POINT JUDEO-SPANISH VARIKA
+ * a glyph variant of 05BF
+FB1F HEBREW LIGATURE YIDDISH YOD YOD PATAH
+ : 05F2 05B7
+FB20 HEBREW LETTER ALTERNATIVE AYIN
+ * this form of AYIN has no descender, for use with marks placed below the letter
+ # <font> 05E2 hebrew letter ayin
+FB21 HEBREW LETTER WIDE ALEF
+ # <font> 05D0 hebrew letter alef
+FB22 HEBREW LETTER WIDE DALET
+ # <font> 05D3 hebrew letter dalet
+FB23 HEBREW LETTER WIDE HE
+ # <font> 05D4 hebrew letter he
+FB24 HEBREW LETTER WIDE KAF
+ # <font> 05DB hebrew letter kaf
+FB25 HEBREW LETTER WIDE LAMED
+ # <font> 05DC hebrew letter lamed
+FB26 HEBREW LETTER WIDE FINAL MEM
+ # <font> 05DD hebrew letter final mem
+FB27 HEBREW LETTER WIDE RESH
+ # <font> 05E8 hebrew letter resh
+FB28 HEBREW LETTER WIDE TAV
+ # <font> 05EA hebrew letter tav
+FB29 HEBREW LETTER ALTERNATIVE PLUS SIGN
+ # <font> 002B plus sign
+FB2A HEBREW LETTER SHIN WITH SHIN DOT
+ : 05E9 05C1
+FB2B HEBREW LETTER SHIN WITH SIN DOT
+ : 05E9 05C2
+FB2C HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+ : FB49 05C1
+FB2D HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+ : FB49 05C2
+FB2E HEBREW LETTER ALEF WITH PATAH
+ : 05D0 05B7
+FB2F HEBREW LETTER ALEF WITH QAMATS
+ : 05D0 05B8
+FB30 HEBREW LETTER ALEF WITH MAPIQ
+ : 05D0 05BC
+FB31 HEBREW LETTER BET WITH DAGESH
+ : 05D1 05BC
+FB32 HEBREW LETTER GIMEL WITH DAGESH
+ : 05D2 05BC
+FB33 HEBREW LETTER DALET WITH DAGESH
+ : 05D3 05BC
+FB34 HEBREW LETTER HE WITH MAPIQ
+ : 05D4 05BC
+FB35 HEBREW LETTER VAV WITH DAGESH
+ : 05D5 05BC
+FB36 HEBREW LETTER ZAYIN WITH DAGESH
+ : 05D6 05BC
+FB38 HEBREW LETTER TET WITH DAGESH
+ : 05D8 05BC
+FB39 HEBREW LETTER YOD WITH DAGESH
+ : 05D9 05BC
+FB3A HEBREW LETTER FINAL KAF WITH DAGESH
+ : 05DA 05BC
+FB3B HEBREW LETTER KAF WITH DAGESH
+ : 05DB 05BC
+FB3C HEBREW LETTER LAMED WITH DAGESH
+ : 05DC 05BC
+FB3E HEBREW LETTER MEM WITH DAGESH
+ : 05DE 05BC
+FB40 HEBREW LETTER NUN WITH DAGESH
+ : 05E0 05BC
+FB41 HEBREW LETTER SAMEKH WITH DAGESH
+ : 05E1 05BC
+FB43 HEBREW LETTER FINAL PE WITH DAGESH
+ : 05E3 05BC
+FB44 HEBREW LETTER PE WITH DAGESH
+ : 05E4 05BC
+FB46 HEBREW LETTER TSADI WITH DAGESH
+ : 05E6 05BC
+FB47 HEBREW LETTER QOF WITH DAGESH
+ : 05E7 05BC
+FB48 HEBREW LETTER RESH WITH DAGESH
+ : 05E8 05BC
+FB49 HEBREW LETTER SHIN WITH DAGESH
+ : 05E9 05BC
+FB4A HEBREW LETTER TAV WITH DAGESH
+ : 05EA 05BC
+FB4B HEBREW LETTER VAV WITH HOLAM
+ : 05D5 05B9
+FB4C HEBREW LETTER BET WITH RAFE
+ : 05D1 05BF
+FB4D HEBREW LETTER KAF WITH RAFE
+ : 05DB 05BF
+FB4E HEBREW LETTER PE WITH RAFE
+ : 05E4 05BF
+FB4F HEBREW LIGATURE ALEF LAMED
+ # 05D0 05DC
+@@ FB50 Arabic Presentation Forms-A FDFF
+@+ Preferred characters are found in the Arabic block 0600 - 06FF.
+@ Glyphs for contextual forms of letters for Persian, Urdu, Sindhi, etc.
+FB50 ARABIC LETTER ALEF WASLA ISOLATED FORM
+ # <isolated> 0671
+FB51 ARABIC LETTER ALEF WASLA FINAL FORM
+ # <final> 0671
+FB52 ARABIC LETTER BEEH ISOLATED FORM
+ # <isolated> 067B
+FB53 ARABIC LETTER BEEH FINAL FORM
+ # <final> 067B
+FB54 ARABIC LETTER BEEH INITIAL FORM
+ # <initial> 067B
+FB55 ARABIC LETTER BEEH MEDIAL FORM
+ # <medial> 067B
+FB56 ARABIC LETTER PEH ISOLATED FORM
+ # <isolated> 067E
+FB57 ARABIC LETTER PEH FINAL FORM
+ # <final> 067E
+FB58 ARABIC LETTER PEH INITIAL FORM
+ # <initial> 067E
+FB59 ARABIC LETTER PEH MEDIAL FORM
+ # <medial> 067E
+FB5A ARABIC LETTER BEHEH ISOLATED FORM
+ # <isolated> 0680
+FB5B ARABIC LETTER BEHEH FINAL FORM
+ # <final> 0680
+FB5C ARABIC LETTER BEHEH INITIAL FORM
+ # <initial> 0680
+FB5D ARABIC LETTER BEHEH MEDIAL FORM
+ # <medial> 0680
+FB5E ARABIC LETTER TTEHEH ISOLATED FORM
+ # <isolated> 067A
+FB5F ARABIC LETTER TTEHEH FINAL FORM
+ # <final> 067A
+FB60 ARABIC LETTER TTEHEH INITIAL FORM
+ # <initial> 067A
+FB61 ARABIC LETTER TTEHEH MEDIAL FORM
+ # <medial> 067A
+FB62 ARABIC LETTER TEHEH ISOLATED FORM
+ # <isolated> 067F
+FB63 ARABIC LETTER TEHEH FINAL FORM
+ # <final> 067F
+FB64 ARABIC LETTER TEHEH INITIAL FORM
+ # <initial> 067F
+FB65 ARABIC LETTER TEHEH MEDIAL FORM
+ # <medial> 067F
+FB66 ARABIC LETTER TTEH ISOLATED FORM
+ # <isolated> 0679
+FB67 ARABIC LETTER TTEH FINAL FORM
+ # <final> 0679
+FB68 ARABIC LETTER TTEH INITIAL FORM
+ # <initial> 0679
+FB69 ARABIC LETTER TTEH MEDIAL FORM
+ # <medial> 0679
+FB6A ARABIC LETTER VEH ISOLATED FORM
+ # <isolated> 06A4
+FB6B ARABIC LETTER VEH FINAL FORM
+ # <final> 06A4
+FB6C ARABIC LETTER VEH INITIAL FORM
+ # <initial> 06A4
+FB6D ARABIC LETTER VEH MEDIAL FORM
+ # <medial> 06A4
+FB6E ARABIC LETTER PEHEH ISOLATED FORM
+ # <isolated> 06A6
+FB6F ARABIC LETTER PEHEH FINAL FORM
+ # <final> 06A6
+FB70 ARABIC LETTER PEHEH INITIAL FORM
+ # <initial> 06A6
+FB71 ARABIC LETTER PEHEH MEDIAL FORM
+ # <medial> 06A6
+FB72 ARABIC LETTER DYEH ISOLATED FORM
+ # <isolated> 0684
+FB73 ARABIC LETTER DYEH FINAL FORM
+ # <final> 0684
+FB74 ARABIC LETTER DYEH INITIAL FORM
+ # <initial> 0684
+FB75 ARABIC LETTER DYEH MEDIAL FORM
+ # <medial> 0684
+FB76 ARABIC LETTER NYEH ISOLATED FORM
+ # <isolated> 0683
+FB77 ARABIC LETTER NYEH FINAL FORM
+ # <final> 0683
+FB78 ARABIC LETTER NYEH INITIAL FORM
+ # <initial> 0683
+FB79 ARABIC LETTER NYEH MEDIAL FORM
+ # <medial> 0683
+FB7A ARABIC LETTER TCHEH ISOLATED FORM
+ # <isolated> 0686
+FB7B ARABIC LETTER TCHEH FINAL FORM
+ # <final> 0686
+FB7C ARABIC LETTER TCHEH INITIAL FORM
+ # <initial> 0686
+FB7D ARABIC LETTER TCHEH MEDIAL FORM
+ # <medial> 0686
+FB7E ARABIC LETTER TCHEHEH ISOLATED FORM
+ # <isolated> 0687
+FB7F ARABIC LETTER TCHEHEH FINAL FORM
+ # <final> 0687
+FB80 ARABIC LETTER TCHEHEH INITIAL FORM
+ # <initial> 0687
+FB81 ARABIC LETTER TCHEHEH MEDIAL FORM
+ # <medial> 0687
+FB82 ARABIC LETTER DDAHAL ISOLATED FORM
+ # <isolated> 068D
+FB83 ARABIC LETTER DDAHAL FINAL FORM
+ # <final> 068D
+FB84 ARABIC LETTER DAHAL ISOLATED FORM
+ # <isolated> 068C
+FB85 ARABIC LETTER DAHAL FINAL FORM
+ # <final> 068C
+FB86 ARABIC LETTER DUL ISOLATED FORM
+ # <isolated> 068E
+FB87 ARABIC LETTER DUL FINAL FORM
+ # <final> 068E
+FB88 ARABIC LETTER DDAL ISOLATED FORM
+ # <isolated> 0688
+FB89 ARABIC LETTER DDAL FINAL FORM
+ # <final> 0688
+FB8A ARABIC LETTER JEH ISOLATED FORM
+ # <isolated> 0698
+FB8B ARABIC LETTER JEH FINAL FORM
+ # <final> 0698
+FB8C ARABIC LETTER RREH ISOLATED FORM
+ # <isolated> 0691
+FB8D ARABIC LETTER RREH FINAL FORM
+ # <final> 0691
+FB8E ARABIC LETTER KEHEH ISOLATED FORM
+ # <isolated> 06A9
+FB8F ARABIC LETTER KEHEH FINAL FORM
+ # <final> 06A9
+FB90 ARABIC LETTER KEHEH INITIAL FORM
+ # <initial> 06A9
+FB91 ARABIC LETTER KEHEH MEDIAL FORM
+ # <medial> 06A9
+FB92 ARABIC LETTER GAF ISOLATED FORM
+ # <isolated> 06AF
+FB93 ARABIC LETTER GAF FINAL FORM
+ # <final> 06AF
+FB94 ARABIC LETTER GAF INITIAL FORM
+ # <initial> 06AF
+FB95 ARABIC LETTER GAF MEDIAL FORM
+ # <medial> 06AF
+FB96 ARABIC LETTER GUEH ISOLATED FORM
+ # <isolated> 06B3
+FB97 ARABIC LETTER GUEH FINAL FORM
+ # <final> 06B3
+FB98 ARABIC LETTER GUEH INITIAL FORM
+ # <initial> 06B3
+FB99 ARABIC LETTER GUEH MEDIAL FORM
+ # <medial> 06B3
+FB9A ARABIC LETTER NGOEH ISOLATED FORM
+ # <isolated> 06B1
+FB9B ARABIC LETTER NGOEH FINAL FORM
+ # <final> 06B1
+FB9C ARABIC LETTER NGOEH INITIAL FORM
+ # <initial> 06B1
+FB9D ARABIC LETTER NGOEH MEDIAL FORM
+ # <medial> 06B1
+FB9E ARABIC LETTER NOON GHUNNA ISOLATED FORM
+ # <isolated> 06BA
+FB9F ARABIC LETTER NOON GHUNNA FINAL FORM
+ # <final> 06BA
+FBA0 ARABIC LETTER RNOON ISOLATED FORM
+ # <isolated> 06BB
+FBA1 ARABIC LETTER RNOON FINAL FORM
+ # <final> 06BB
+FBA2 ARABIC LETTER RNOON INITIAL FORM
+ # <initial> 06BB
+FBA3 ARABIC LETTER RNOON MEDIAL FORM
+ # <medial> 06BB
+FBA4 ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+ # <isolated> 06C0
+FBA5 ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+ # <final> 06C0
+FBA6 ARABIC LETTER HEH GOAL ISOLATED FORM
+ # <isolated> 06C1
+FBA7 ARABIC LETTER HEH GOAL FINAL FORM
+ # <final> 06C1
+FBA8 ARABIC LETTER HEH GOAL INITIAL FORM
+ # <initial> 06C1
+FBA9 ARABIC LETTER HEH GOAL MEDIAL FORM
+ # <medial> 06C1
+FBAA ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+ # <isolated> 06BE
+FBAB ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+ # <final> 06BE
+FBAC ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+ # <initial> 06BE
+FBAD ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+ # <medial> 06BE
+FBAE ARABIC LETTER YEH BARREE ISOLATED FORM
+ # <isolated> 06D2
+FBAF ARABIC LETTER YEH BARREE FINAL FORM
+ # <final> 06D2
+FBB0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 06D3
+FBB1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+ # <final> 06D3
+@ Glyphs for contextual forms of letters for Central Asian languages
+FBD3 ARABIC LETTER NG ISOLATED FORM
+ # <isolated> 06AD
+FBD4 ARABIC LETTER NG FINAL FORM
+ # <final> 06AD
+FBD5 ARABIC LETTER NG INITIAL FORM
+ # <initial> 06AD
+FBD6 ARABIC LETTER NG MEDIAL FORM
+ # <medial> 06AD
+FBD7 ARABIC LETTER U ISOLATED FORM
+ # <isolated> 06C7
+FBD8 ARABIC LETTER U FINAL FORM
+ # <final> 06C7
+FBD9 ARABIC LETTER OE ISOLATED FORM
+ # <isolated> 06C6
+FBDA ARABIC LETTER OE FINAL FORM
+ # <final> 06C6
+FBDB ARABIC LETTER YU ISOLATED FORM
+ # <isolated> 06C8
+FBDC ARABIC LETTER YU FINAL FORM
+ # <final> 06C8
+FBDD ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 0677
+FBDE ARABIC LETTER VE ISOLATED FORM
+ # <isolated> 06CB
+FBDF ARABIC LETTER VE FINAL FORM
+ # <final> 06CB
+FBE0 ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+ # <isolated> 06C5
+FBE1 ARABIC LETTER KIRGHIZ OE FINAL FORM
+ # <final> 06C5
+FBE2 ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+ # <isolated> 06C9
+FBE3 ARABIC LETTER KIRGHIZ YU FINAL FORM
+ # <final> 06C9
+FBE4 ARABIC LETTER E ISOLATED FORM
+ # <isolated> 06D0
+FBE5 ARABIC LETTER E FINAL FORM
+ # <final> 06D0
+FBE6 ARABIC LETTER E INITIAL FORM
+ # <initial> 06D0
+FBE7 ARABIC LETTER E MEDIAL FORM
+ # <medial> 06D0
+FBE8 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+ # <initial> 0649
+FBE9 ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+ # <medial> 0649
+@ Ligatures (two elements)
+FBEA ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+ # <isolated> 0626 0627
+FBEB ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+ # <final> 0626 0627
+FBEC ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+ # <isolated> 0626 06D5
+FBED ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+ # <final> 0626 06D5
+FBEE ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+ # <isolated> 0626 0648
+FBEF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+ # <final> 0626 0648
+FBF0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+ # <isolated> 0626 06C7
+FBF1 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+ # <final> 0626 06C7
+FBF2 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+ # <isolated> 0626 06C6
+FBF3 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+ # <final> 0626 06C6
+FBF4 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+ # <isolated> 0626 06C8
+FBF5 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+ # <final> 0626 06C8
+FBF6 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+ # <isolated> 0626 06D0
+FBF7 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+ # <final> 0626 06D0
+FBF8 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+ # <initial> 0626 06D0
+FBF9 ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0626 0649
+FBFA ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+ # <final> 0626 0649
+FBFB ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+ # <initial> 0626 0649
+FBFC ARABIC LETTER FARSI YEH ISOLATED FORM
+ # <isolated> 06CC
+FBFD ARABIC LETTER FARSI YEH FINAL FORM
+ # <final> 06CC
+FBFE ARABIC LETTER FARSI YEH INITIAL FORM
+ # <initial> 06CC
+FBFF ARABIC LETTER FARSI YEH MEDIAL FORM
+ # <medial> 06CC
+FC00 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+ # <isolated> 0626 062C
+FC01 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+ # <isolated> 0626 062D
+FC02 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+ # <isolated> 0626 0645
+FC03 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0626 0649
+FC04 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+ # <isolated> 0626 064A
+FC05 ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+ # <isolated> 0628 062C
+FC06 ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+ # <isolated> 0628 062D
+FC07 ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+ # <isolated> 0628 062E
+FC08 ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+ # <isolated> 0628 0645
+FC09 ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0628 0649
+FC0A ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+ # <isolated> 0628 064A
+FC0B ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+ # <isolated> 062A 062C
+FC0C ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+ # <isolated> 062A 062D
+FC0D ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+ # <isolated> 062A 062E
+FC0E ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+ # <isolated> 062A 0645
+FC0F ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 062A 0649
+FC10 ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+ # <isolated> 062A 064A
+FC11 ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+ # <isolated> 062B 062C
+FC12 ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+ # <isolated> 062B 0645
+FC13 ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 062B 0649
+FC14 ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+ # <isolated> 062B 064A
+FC15 ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+ # <isolated> 062C 062D
+FC16 ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+ # <isolated> 062C 0645
+FC17 ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+ # <isolated> 062D 062C
+FC18 ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+ # <isolated> 062D 0645
+FC19 ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+ # <isolated> 062E 062C
+FC1A ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+ # <isolated> 062E 062D
+FC1B ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+ # <isolated> 062E 0645
+FC1C ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+ # <isolated> 0633 062C
+FC1D ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+ # <isolated> 0633 062D
+FC1E ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+ # <isolated> 0633 062E
+FC1F ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+ # <isolated> 0633 0645
+FC20 ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+ # <isolated> 0635 062D
+FC21 ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+ # <isolated> 0635 0645
+FC22 ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+ # <isolated> 0636 062C
+FC23 ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+ # <isolated> 0636 062D
+FC24 ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+ # <isolated> 0636 062E
+FC25 ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+ # <isolated> 0636 0645
+FC26 ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+ # <isolated> 0637 062D
+FC27 ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+ # <isolated> 0637 0645
+FC28 ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+ # <isolated> 0638 0645
+FC29 ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+ # <isolated> 0639 062C
+FC2A ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+ # <isolated> 0639 0645
+FC2B ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+ # <isolated> 063A 062C
+FC2C ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+ # <isolated> 063A 0645
+FC2D ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+ # <isolated> 0641 062C
+FC2E ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+ # <isolated> 0641 062D
+FC2F ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+ # <isolated> 0641 062E
+FC30 ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+ # <isolated> 0641 0645
+FC31 ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0641 0649
+FC32 ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+ # <isolated> 0641 064A
+FC33 ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+ # <isolated> 0642 062D
+FC34 ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+ # <isolated> 0642 0645
+FC35 ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0642 0649
+FC36 ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+ # <isolated> 0642 064A
+FC37 ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+ # <isolated> 0643 0627
+FC38 ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+ # <isolated> 0643 062C
+FC39 ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+ # <isolated> 0643 062D
+FC3A ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+ # <isolated> 0643 062E
+FC3B ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+ # <isolated> 0643 0644
+FC3C ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+ # <isolated> 0643 0645
+FC3D ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0643 0649
+FC3E ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+ # <isolated> 0643 064A
+FC3F ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+ # <isolated> 0644 062C
+FC40 ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+ # <isolated> 0644 062D
+FC41 ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+ # <isolated> 0644 062E
+FC42 ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+ # <isolated> 0644 0645
+FC43 ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0644 0649
+FC44 ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+ # <isolated> 0644 064A
+FC45 ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+ # <isolated> 0645 062C
+FC46 ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+ # <isolated> 0645 062D
+FC47 ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+ # <isolated> 0645 062E
+FC48 ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+ # <isolated> 0645 0645
+FC49 ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0645 0649
+FC4A ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+ # <isolated> 0645 064A
+FC4B ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+ # <isolated> 0646 062C
+FC4C ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+ # <isolated> 0646 062D
+FC4D ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+ # <isolated> 0646 062E
+FC4E ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+ # <isolated> 0646 0645
+FC4F ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0646 0649
+FC50 ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+ # <isolated> 0646 064A
+FC51 ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+ # <isolated> 0647 062C
+FC52 ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+ # <isolated> 0647 0645
+FC53 ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0647 0649
+FC54 ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+ # <isolated> 0647 064A
+FC55 ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+ # <isolated> 064A 062C
+FC56 ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+ # <isolated> 064A 062D
+FC57 ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+ # <isolated> 064A 062E
+FC58 ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+ # <isolated> 064A 0645
+FC59 ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 064A 0649
+FC5A ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+ # <isolated> 064A 064A
+FC5B ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+ # <isolated> 0630 0670
+FC5C ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+ # <isolated> 0631 0670
+FC5D ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+ # <isolated> 0649 0670
+FC5E ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+ # <isolated> 0020 064C 0651
+FC5F ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+ # <isolated> 0020 064D 0651
+FC60 ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+ # <isolated> 0020 064E 0651
+FC61 ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+ # <isolated> 0020 064F 0651
+FC62 ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+ # <isolated> 0020 0650 0651
+FC63 ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+ # <isolated> 0020 0651 0670
+FC64 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+ # <final> 0626 0631
+FC65 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+ # <final> 0626 0632
+FC66 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+ # <final> 0626 0645
+FC67 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+ # <final> 0626 0646
+FC68 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+ # <final> 0626 0649
+FC69 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+ # <final> 0626 064A
+FC6A ARABIC LIGATURE BEH WITH REH FINAL FORM
+ # <final> 0628 0631
+FC6B ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+ # <final> 0628 0632
+FC6C ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+ # <final> 0628 0645
+FC6D ARABIC LIGATURE BEH WITH NOON FINAL FORM
+ # <final> 0628 0646
+FC6E ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0628 0649
+FC6F ARABIC LIGATURE BEH WITH YEH FINAL FORM
+ # <final> 0628 064A
+FC70 ARABIC LIGATURE TEH WITH REH FINAL FORM
+ # <final> 062A 0631
+FC71 ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+ # <final> 062A 0632
+FC72 ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+ # <final> 062A 0645
+FC73 ARABIC LIGATURE TEH WITH NOON FINAL FORM
+ # <final> 062A 0646
+FC74 ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062A 0649
+FC75 ARABIC LIGATURE TEH WITH YEH FINAL FORM
+ # <final> 062A 064A
+FC76 ARABIC LIGATURE THEH WITH REH FINAL FORM
+ # <final> 062B 0631
+FC77 ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+ # <final> 062B 0632
+FC78 ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+ # <final> 062B 0645
+FC79 ARABIC LIGATURE THEH WITH NOON FINAL FORM
+ # <final> 062B 0646
+FC7A ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062B 0649
+FC7B ARABIC LIGATURE THEH WITH YEH FINAL FORM
+ # <final> 062B 064A
+FC7C ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0641 0649
+FC7D ARABIC LIGATURE FEH WITH YEH FINAL FORM
+ # <final> 0641 064A
+FC7E ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+ # <final> 0642 0649
+FC7F ARABIC LIGATURE QAF WITH YEH FINAL FORM
+ # <final> 0642 064A
+FC80 ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+ # <final> 0643 0627
+FC81 ARABIC LIGATURE KAF WITH LAM FINAL FORM
+ # <final> 0643 0644
+FC82 ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+ # <final> 0643 0645
+FC83 ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+ # <final> 0643 0649
+FC84 ARABIC LIGATURE KAF WITH YEH FINAL FORM
+ # <final> 0643 064A
+FC85 ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+ # <final> 0644 0645
+FC86 ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+ # <final> 0644 0649
+FC87 ARABIC LIGATURE LAM WITH YEH FINAL FORM
+ # <final> 0644 064A
+FC88 ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+ # <final> 0645 0627
+FC89 ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+ # <final> 0645 0645
+FC8A ARABIC LIGATURE NOON WITH REH FINAL FORM
+ # <final> 0646 0631
+FC8B ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+ # <final> 0646 0632
+FC8C ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+ # <final> 0646 0645
+FC8D ARABIC LIGATURE NOON WITH NOON FINAL FORM
+ # <final> 0646 0646
+FC8E ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+ # <final> 0646 0649
+FC8F ARABIC LIGATURE NOON WITH YEH FINAL FORM
+ # <final> 0646 064A
+FC90 ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+ # <final> 0649 0670
+FC91 ARABIC LIGATURE YEH WITH REH FINAL FORM
+ # <final> 064A 0631
+FC92 ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+ # <final> 064A 0632
+FC93 ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+ # <final> 064A 0645
+FC94 ARABIC LIGATURE YEH WITH NOON FINAL FORM
+ # <final> 064A 0646
+FC95 ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+ # <final> 064A 0649
+FC96 ARABIC LIGATURE YEH WITH YEH FINAL FORM
+ # <final> 064A 064A
+FC97 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+ # <initial> 0626 062C
+FC98 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+ # <initial> 0626 062D
+FC99 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+ # <initial> 0626 062E
+FC9A ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+ # <initial> 0626 0645
+FC9B ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+ # <initial> 0626 0647
+FC9C ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+ # <initial> 0628 062C
+FC9D ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+ # <initial> 0628 062D
+FC9E ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+ # <initial> 0628 062E
+FC9F ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+ # <initial> 0628 0645
+FCA0 ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+ # <initial> 0628 0647
+FCA1 ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+ # <initial> 062A 062C
+FCA2 ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+ # <initial> 062A 062D
+FCA3 ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+ # <initial> 062A 062E
+FCA4 ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+ # <initial> 062A 0645
+FCA5 ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+ # <initial> 062A 0647
+FCA6 ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+ # <initial> 062B 0645
+FCA7 ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+ # <initial> 062C 062D
+FCA8 ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+ # <initial> 062C 0645
+FCA9 ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+ # <initial> 062D 062C
+FCAA ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+ # <initial> 062D 0645
+FCAB ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+ # <initial> 062E 062C
+FCAC ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+ # <initial> 062E 0645
+FCAD ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+ # <initial> 0633 062C
+FCAE ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+ # <initial> 0633 062D
+FCAF ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+ # <initial> 0633 062E
+FCB0 ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+ # <initial> 0633 0645
+FCB1 ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+ # <initial> 0635 062D
+FCB2 ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+ # <initial> 0635 062E
+FCB3 ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+ # <initial> 0635 0645
+FCB4 ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+ # <initial> 0636 062C
+FCB5 ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+ # <initial> 0636 062D
+FCB6 ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+ # <initial> 0636 062E
+FCB7 ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+ # <initial> 0636 0645
+FCB8 ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+ # <initial> 0637 062D
+FCB9 ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+ # <initial> 0638 0645
+FCBA ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+ # <initial> 0639 062C
+FCBB ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+ # <initial> 0639 0645
+FCBC ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+ # <initial> 063A 062C
+FCBD ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+ # <initial> 063A 0645
+FCBE ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+ # <initial> 0641 062C
+FCBF ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+ # <initial> 0641 062D
+FCC0 ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+ # <initial> 0641 062E
+FCC1 ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+ # <initial> 0641 0645
+FCC2 ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+ # <initial> 0642 062D
+FCC3 ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+ # <initial> 0642 0645
+FCC4 ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+ # <initial> 0643 062C
+FCC5 ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+ # <initial> 0643 062D
+FCC6 ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+ # <initial> 0643 062E
+FCC7 ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+ # <initial> 0643 0644
+FCC8 ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+ # <initial> 0643 0645
+FCC9 ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+ # <initial> 0644 062C
+FCCA ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+ # <initial> 0644 062D
+FCCB ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+ # <initial> 0644 062E
+FCCC ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+ # <initial> 0644 0645
+FCCD ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+ # <initial> 0644 0647
+FCCE ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+ # <initial> 0645 062C
+FCCF ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+ # <initial> 0645 062D
+FCD0 ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+ # <initial> 0645 062E
+FCD1 ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+ # <initial> 0645 0645
+FCD2 ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+ # <initial> 0646 062C
+FCD3 ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+ # <initial> 0646 062D
+FCD4 ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+ # <initial> 0646 062E
+FCD5 ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+ # <initial> 0646 0645
+FCD6 ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+ # <initial> 0646 0647
+FCD7 ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+ # <initial> 0647 062C
+FCD8 ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+ # <initial> 0647 0645
+FCD9 ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+ # <initial> 0647 0670
+FCDA ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+ # <initial> 064A 062C
+FCDB ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+ # <initial> 064A 062D
+FCDC ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+ # <initial> 064A 062E
+FCDD ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+ # <initial> 064A 0645
+FCDE ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+ # <initial> 064A 0647
+FCDF ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+ # <medial> 0626 0645
+FCE0 ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+ # <medial> 0626 0647
+FCE1 ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+ # <medial> 0628 0645
+FCE2 ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+ # <medial> 0628 0647
+FCE3 ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+ # <medial> 062A 0645
+FCE4 ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+ # <medial> 062A 0647
+FCE5 ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+ # <medial> 062B 0645
+FCE6 ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+ # <medial> 062B 0647
+FCE7 ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+ # <medial> 0633 0645
+FCE8 ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+ # <medial> 0633 0647
+FCE9 ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+ # <medial> 0634 0645
+FCEA ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+ # <medial> 0634 0647
+FCEB ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+ # <medial> 0643 0644
+FCEC ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+ # <medial> 0643 0645
+FCED ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+ # <medial> 0644 0645
+FCEE ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+ # <medial> 0646 0645
+FCEF ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+ # <medial> 0646 0647
+FCF0 ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+ # <medial> 064A 0645
+FCF1 ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+ # <medial> 064A 0647
+FCF2 ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+ # <medial> 0640 064E 0651
+FCF3 ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+ # <medial> 0640 064F 0651
+FCF4 ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+ # <medial> 0640 0650 0651
+FCF5 ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0637 0649
+FCF6 ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+ # <isolated> 0637 064A
+FCF7 ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0639 0649
+FCF8 ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+ # <isolated> 0639 064A
+FCF9 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 063A 0649
+FCFA ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+ # <isolated> 063A 064A
+FCFB ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0633 0649
+FCFC ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+ # <isolated> 0633 064A
+FCFD ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0634 0649
+FCFE ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+ # <isolated> 0634 064A
+FCFF ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 062D 0649
+FD00 ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+ # <isolated> 062D 064A
+FD01 ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 062C 0649
+FD02 ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+ # <isolated> 062C 064A
+FD03 ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 062E 0649
+FD04 ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+ # <isolated> 062E 064A
+FD05 ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0635 0649
+FD06 ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+ # <isolated> 0635 064A
+FD07 ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0636 0649
+FD08 ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+ # <isolated> 0636 064A
+FD09 ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+ # <isolated> 0634 062C
+FD0A ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+ # <isolated> 0634 062D
+FD0B ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+ # <isolated> 0634 062E
+FD0C ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+ # <isolated> 0634 0645
+FD0D ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+ # <isolated> 0634 0631
+FD0E ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+ # <isolated> 0633 0631
+FD0F ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+ # <isolated> 0635 0631
+FD10 ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+ # <isolated> 0636 0631
+FD11 ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0637 0649
+FD12 ARABIC LIGATURE TAH WITH YEH FINAL FORM
+ # <final> 0637 064A
+FD13 ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+ # <final> 0639 0649
+FD14 ARABIC LIGATURE AIN WITH YEH FINAL FORM
+ # <final> 0639 064A
+FD15 ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+ # <final> 063A 0649
+FD16 ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+ # <final> 063A 064A
+FD17 ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+ # <final> 0633 0649
+FD18 ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+ # <final> 0633 064A
+FD19 ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+ # <final> 0634 0649
+FD1A ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+ # <final> 0634 064A
+FD1B ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062D 0649
+FD1C ARABIC LIGATURE HAH WITH YEH FINAL FORM
+ # <final> 062D 064A
+FD1D ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 062C 0649
+FD1E ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+ # <final> 062C 064A
+FD1F ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062E 0649
+FD20 ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+ # <final> 062E 064A
+FD21 ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+ # <final> 0635 0649
+FD22 ARABIC LIGATURE SAD WITH YEH FINAL FORM
+ # <final> 0635 064A
+FD23 ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+ # <final> 0636 0649
+FD24 ARABIC LIGATURE DAD WITH YEH FINAL FORM
+ # <final> 0636 064A
+FD25 ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+ # <final> 0634 062C
+FD26 ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+ # <final> 0634 062D
+FD27 ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+ # <final> 0634 062E
+FD28 ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+ # <final> 0634 0645
+FD29 ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+ # <final> 0634 0631
+FD2A ARABIC LIGATURE SEEN WITH REH FINAL FORM
+ # <final> 0633 0631
+FD2B ARABIC LIGATURE SAD WITH REH FINAL FORM
+ # <final> 0635 0631
+FD2C ARABIC LIGATURE DAD WITH REH FINAL FORM
+ # <final> 0636 0631
+FD2D ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+ # <initial> 0634 062C
+FD2E ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+ # <initial> 0634 062D
+FD2F ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+ # <initial> 0634 062E
+FD30 ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+ # <initial> 0634 0645
+FD31 ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+ # <initial> 0633 0647
+FD32 ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+ # <initial> 0634 0647
+FD33 ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+ # <initial> 0637 0645
+FD34 ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+ # <medial> 0633 062C
+FD35 ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+ # <medial> 0633 062D
+FD36 ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+ # <medial> 0633 062E
+FD37 ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+ # <medial> 0634 062C
+FD38 ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+ # <medial> 0634 062D
+FD39 ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+ # <medial> 0634 062E
+FD3A ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+ # <medial> 0637 0645
+FD3B ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+ # <medial> 0638 0645
+FD3C ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+ # <final> 0627 064B
+FD3D ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+ # <isolated> 0627 064B
+@ Punctuation
+FD3E ORNATE LEFT PARENTHESIS
+FD3F ORNATE RIGHT PARENTHESIS
+@ Ligatures (three elements)
+FD50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+ # <initial> 062A 062C 0645
+FD51 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+ # <final> 062A 062D 062C
+FD52 ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+ # <initial> 062A 062D 062C
+FD53 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+ # <initial> 062A 062D 0645
+FD54 ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+ # <initial> 062A 062E 0645
+FD55 ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+ # <initial> 062A 0645 062C
+FD56 ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 062A 0645 062D
+FD57 ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+ # <initial> 062A 0645 062E
+FD58 ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+ # <final> 062C 0645 062D
+FD59 ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 062C 0645 062D
+FD5A ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+ # <final> 062D 0645 064A
+FD5B ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 062D 0645 0649
+FD5C ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+ # <initial> 0633 062D 062C
+FD5D ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+ # <initial> 0633 062C 062D
+FD5E ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 0633 062C 0649
+FD5F ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+ # <final> 0633 0645 062D
+FD60 ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 0633 0645 062D
+FD61 ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+ # <initial> 0633 0645 062C
+FD62 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0633 0645 0645
+FD63 ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0633 0645 0645
+FD64 ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+ # <final> 0635 062D 062D
+FD65 ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+ # <initial> 0635 062D 062D
+FD66 ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0635 0645 0645
+FD67 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+ # <final> 0634 062D 0645
+FD68 ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+ # <initial> 0634 062D 0645
+FD69 ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+ # <final> 0634 062C 064A
+FD6A ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+ # <final> 0634 0645 062E
+FD6B ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+ # <initial> 0634 0645 062E
+FD6C ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0634 0645 0645
+FD6D ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0634 0645 0645
+FD6E ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0636 062D 0649
+FD6F ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+ # <final> 0636 062E 0645
+FD70 ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+ # <initial> 0636 062E 0645
+FD71 ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+ # <final> 0637 0645 062D
+FD72 ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 0637 0645 062D
+FD73 ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0637 0645 0645
+FD74 ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+ # <final> 0637 0645 064A
+FD75 ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+ # <final> 0639 062C 0645
+FD76 ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0639 0645 0645
+FD77 ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0639 0645 0645
+FD78 ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 0639 0645 0649
+FD79 ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+ # <final> 063A 0645 0645
+FD7A ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+ # <final> 063A 0645 064A
+FD7B ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 063A 0645 0649
+FD7C ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+ # <final> 0641 062E 0645
+FD7D ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+ # <initial> 0641 062E 0645
+FD7E ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+ # <final> 0642 0645 062D
+FD7F ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0642 0645 0645
+FD80 ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+ # <final> 0644 062D 0645
+FD81 ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+ # <final> 0644 062D 064A
+FD82 ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0644 062D 0649
+FD83 ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+ # <initial> 0644 062C 062C
+FD84 ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+ # <final> 0644 062C 062C
+FD85 ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+ # <final> 0644 062E 0645
+FD86 ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+ # <initial> 0644 062E 0645
+FD87 ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+ # <final> 0644 0645 062D
+FD88 ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 0644 0645 062D
+FD89 ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+ # <initial> 0645 062D 062C
+FD8A ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+ # <initial> 0645 062D 0645
+FD8B ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+ # <final> 0645 062D 064A
+FD8C ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+ # <initial> 0645 062C 062D
+FD8D ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+ # <initial> 0645 062C 0645
+FD8E ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+ # <initial> 0645 062E 062C
+FD8F ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+ # <initial> 0645 062E 0645
+FD92 ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+ # <initial> 0645 062C 062E
+FD93 ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+ # <initial> 0647 0645 062C
+FD94 ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0647 0645 0645
+FD95 ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+ # <initial> 0646 062D 0645
+FD96 ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0646 062D 0649
+FD97 ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+ # <final> 0646 062C 0645
+FD98 ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+ # <initial> 0646 062C 0645
+FD99 ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 0646 062C 0649
+FD9A ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+ # <final> 0646 0645 064A
+FD9B ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 0646 0645 0649
+FD9C ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+ # <final> 064A 0645 0645
+FD9D ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 064A 0645 0645
+FD9E ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+ # <final> 0628 062E 064A
+FD9F ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+ # <final> 062A 062C 064A
+FDA0 ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 062A 062C 0649
+FDA1 ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+ # <final> 062A 062E 064A
+FDA2 ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062A 062E 0649
+FDA3 ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+ # <final> 062A 0645 064A
+FDA4 ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 062A 0645 0649
+FDA5 ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+ # <final> 062C 0645 064A
+FDA6 ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 062C 062D 0649
+FDA7 ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ # <final> 062C 0645 0649
+FDA8 ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+ # <final> 0633 062E 0649
+FDA9 ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+ # <final> 0635 062D 064A
+FDAA ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+ # <final> 0634 062D 064A
+FDAB ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+ # <final> 0636 062D 064A
+FDAC ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+ # <final> 0644 062C 064A
+FDAD ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+ # <final> 0644 0645 064A
+FDAE ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+ # <final> 064A 062D 064A
+FDAF ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+ # <final> 064A 062C 064A
+FDB0 ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+ # <final> 064A 0645 064A
+FDB1 ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+ # <final> 0645 0645 064A
+FDB2 ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+ # <final> 0642 0645 064A
+FDB3 ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+ # <final> 0646 062D 064A
+FDB4 ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+ # <initial> 0642 0645 062D
+FDB5 ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+ # <initial> 0644 062D 0645
+FDB6 ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+ # <final> 0639 0645 064A
+FDB7 ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+ # <final> 0643 0645 064A
+FDB8 ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+ # <initial> 0646 062C 062D
+FDB9 ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+ # <final> 0645 062E 064A
+FDBA ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+ # <initial> 0644 062C 0645
+FDBB ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+ # <final> 0643 0645 0645
+FDBC ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+ # <final> 0644 062C 0645
+FDBD ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+ # <final> 0646 062C 062D
+FDBE ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+ # <final> 062C 062D 064A
+FDBF ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+ # <final> 062D 062C 064A
+FDC0 ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+ # <final> 0645 062C 064A
+FDC1 ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+ # <final> 0641 0645 064A
+FDC2 ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+ # <final> 0628 062D 064A
+FDC3 ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0643 0645 0645
+FDC4 ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+ # <initial> 0639 062C 0645
+FDC5 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+ # <initial> 0635 0645 0645
+FDC6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+ # <final> 0633 062E 064A
+FDC7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+ # <final> 0646 062C 064A
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+FDD0 <not a character>
+FDD1 <not a character>
+FDD2 <not a character>
+FDD3 <not a character>
+FDD4 <not a character>
+FDD5 <not a character>
+FDD6 <not a character>
+FDD7 <not a character>
+FDD8 <not a character>
+FDD9 <not a character>
+FDDA <not a character>
+FDDB <not a character>
+FDDC <not a character>
+FDDD <not a character>
+FDDE <not a character>
+FDDF <not a character>
+FDE0 <not a character>
+FDE1 <not a character>
+FDE2 <not a character>
+FDE3 <not a character>
+FDE4 <not a character>
+FDE5 <not a character>
+FDE6 <not a character>
+FDE7 <not a character>
+FDE8 <not a character>
+FDE9 <not a character>
+FDEA <not a character>
+FDEB <not a character>
+FDEC <not a character>
+FDED <not a character>
+FDEE <not a character>
+FDEF <not a character>
+@ Word ligatures
+FDF0 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+ # <isolated> 0635 0644 06D2
+FDF1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+ # <isolated> 0642 0644 06D2
+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM
+ # <isolated> 0627 0644 0644 0647
+FDF3 ARABIC LIGATURE AKBAR ISOLATED FORM
+ # <isolated> 0627 0643 0628 0631
+FDF4 ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+ # <isolated> 0645 062D 0645 062F
+FDF5 ARABIC LIGATURE SALAM ISOLATED FORM
+ # <isolated> 0635 0644 0639 0645
+FDF6 ARABIC LIGATURE RASOUL ISOLATED FORM
+ # <isolated> 0631 0633 0648 0644
+FDF7 ARABIC LIGATURE ALAYHE ISOLATED FORM
+ # <isolated> 0639 0644 064A 0647
+FDF8 ARABIC LIGATURE WASALLAM ISOLATED FORM
+ # <isolated> 0648 0633 0644 0645
+FDF9 ARABIC LIGATURE SALLA ISOLATED FORM
+ # <isolated> 0635 0644 0649
+FDFA ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+ # <isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645
+FDFB ARABIC LIGATURE JALLAJALALOUHOU
+ # <isolated> 062C 0644 0020 062C 0644 0627 0644 0647
+@ Currency sign
+FDFC RIAL SIGN
+ # <isolated> 0631 06CC 0627 0644
+@ Symbol
+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+@@ FE00 Variation Selectors FE0F
+@ Variation selectors
+@+ Combining characters; in conjunction with the preceding character these indicate a predetermined choice of variant glyph
+FE00 VARIATION SELECTOR-1
+ * these are abbreviated VS1, and so on
+FE01 VARIATION SELECTOR-2
+FE02 VARIATION SELECTOR-3
+FE03 VARIATION SELECTOR-4
+FE04 VARIATION SELECTOR-5
+FE05 VARIATION SELECTOR-6
+FE06 VARIATION SELECTOR-7
+FE07 VARIATION SELECTOR-8
+FE08 VARIATION SELECTOR-9
+FE09 VARIATION SELECTOR-10
+FE0A VARIATION SELECTOR-11
+FE0B VARIATION SELECTOR-12
+FE0C VARIATION SELECTOR-13
+FE0D VARIATION SELECTOR-14
+FE0E VARIATION SELECTOR-15
+FE0F VARIATION SELECTOR-16
+@@ FE10 Vertical forms FE1F
+@+ These characters are compatibility characters needed to map to GB 18030.
+@ Glyphs for vertical variants
+FE10 PRESENTATION FORM FOR VERTICAL COMMA
+ x (small comma - FE50)
+ # <vertical> 002C
+FE11 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+ x (sesame dot - FE45)
+ x (small ideographic comma - FE51)
+ # <vertical> 3001
+FE12 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+ # <vertical> 3002
+FE13 PRESENTATION FORM FOR VERTICAL COLON
+ x (small colon - FE55)
+ # <vertical> 003A
+FE14 PRESENTATION FORM FOR VERTICAL SEMICOLON
+ x (small semicolon - FE54)
+ # <vertical> 003B
+FE15 PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+ x (small exclamation mark - FE57)
+ # <vertical> 0021
+FE16 PRESENTATION FORM FOR VERTICAL QUESTION MARK
+ x (small question mark - FE56)
+ # <vertical> 003F
+FE17 PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+ # <vertical> 3016
+FE18 PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+ # <vertical> 3017
+FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+ x (vertical ellipsis - 22EE)
+ # <vertical> 2026
+@@ FE20 Combining Half Marks FE2F
+@ Combining half marks
+FE20 COMBINING LIGATURE LEFT HALF
+FE21 COMBINING LIGATURE RIGHT HALF
+FE22 COMBINING DOUBLE TILDE LEFT HALF
+FE23 COMBINING DOUBLE TILDE RIGHT HALF
+@@ FE30 CJK Compatibility Forms FE4F
+@ Glyphs for vertical variants
+FE30 PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ # <vertical> 2025
+FE31 PRESENTATION FORM FOR VERTICAL EM DASH
+ # <vertical> 2014
+FE32 PRESENTATION FORM FOR VERTICAL EN DASH
+ # <vertical> 2013
+FE33 PRESENTATION FORM FOR VERTICAL LOW LINE
+ # <vertical> 005F
+FE34 PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ # <vertical> 005F
+FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ # <vertical> 0028
+FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ # <vertical> 0029
+FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ # <vertical> 007B
+FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ # <vertical> 007D
+FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ # <vertical> 3014
+FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ # <vertical> 3015
+FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ # <vertical> 3010
+FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ # <vertical> 3011
+FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ # <vertical> 300A
+FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ # <vertical> 300B
+FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ # <vertical> 3008
+FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ # <vertical> 3009
+FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ # <vertical> 300C
+FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ # <vertical> 300D
+FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ # <vertical> 300E
+FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ # <vertical> 300F
+@ Sidelining emphasis marks
+FE45 SESAME DOT
+ x (small ideographic comma - FE51)
+FE46 WHITE SESAME DOT
+ * sesame dots are used beside vertical text for emphasis
+@ Glyphs for vertical variants
+FE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+ x (top square bracket - 23B4)
+ # <vertical> 005B
+FE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+ x (bottom square bracket - 23B5)
+ # <vertical> 005D
+@ Overscores and underscores
+FE49 DASHED OVERLINE
+ # 203E overline
+FE4A CENTRELINE OVERLINE
+ # 203E overline
+FE4B WAVY OVERLINE
+ # 203E overline
+FE4C DOUBLE WAVY OVERLINE
+ # 203E overline
+FE4D DASHED LOW LINE
+ # 005F low line
+FE4E CENTRELINE LOW LINE
+ # 005F low line
+FE4F WAVY LOW LINE
+ # 005F low line
+@@ FE50 Small Form Variants FE6F
+@+ These characters are compatibility characters needed to map to CNS 11643.
+@ Small form variants
+FE50 SMALL COMMA
+ x (presentation form for vertical comma - FE10)
+ # <small> 002C
+FE51 SMALL IDEOGRAPHIC COMMA
+ x (presentation form for vertical ideographic comma - FE11)
+ x (black sesame dot - FE45)
+ # <small> 3001
+FE52 SMALL FULL STOP
+ # <small> 002E
+FE54 SMALL SEMICOLON
+ x (presentation form for vertical semicolon - FE14)
+ # <small> 003B
+FE55 SMALL COLON
+ x (presentation form for vertical colon - FE13)
+ # <small> 003A
+FE56 SMALL QUESTION MARK
+ x (presentation form for vertical question mark - FE16)
+ # <small> 003F
+FE57 SMALL EXCLAMATION MARK
+ x (presentation form for vertical exclamation mark - FE15)
+ # <small> 0021
+FE58 SMALL EM DASH
+ # <small> 2014
+FE59 SMALL LEFT PARENTHESIS
+ # <small> 0028
+FE5A SMALL RIGHT PARENTHESIS
+ # <small> 0029
+FE5B SMALL LEFT CURLY BRACKET
+ # <small> 007B
+FE5C SMALL RIGHT CURLY BRACKET
+ # <small> 007D
+FE5D SMALL LEFT TORTOISE SHELL BRACKET
+ # <small> 3014
+FE5E SMALL RIGHT TORTOISE SHELL BRACKET
+ # <small> 3015
+FE5F SMALL NUMBER SIGN
+ # <small> 0023
+FE60 SMALL AMPERSAND
+ # <small> 0026
+FE61 SMALL ASTERISK
+ # <small> 002A
+FE62 SMALL PLUS SIGN
+ # <small> 002B
+FE63 SMALL HYPHEN-MINUS
+ # <small> 002D
+FE64 SMALL LESS-THAN SIGN
+ # <small> 003C
+FE65 SMALL GREATER-THAN SIGN
+ # <small> 003E
+FE66 SMALL EQUALS SIGN
+ # <small> 003D
+FE68 SMALL REVERSE SOLIDUS
+ # <small> 005C
+FE69 SMALL DOLLAR SIGN
+ # <small> 0024
+FE6A SMALL PERCENT SIGN
+ # <small> 0025
+FE6B SMALL COMMERCIAL AT
+ # <small> 0040
+@@ FE70 Arabic Presentation Forms-B FEFF
+@ Glyphs for spacing forms of Arabic points
+FE70 ARABIC FATHATAN ISOLATED FORM
+ # <isolated> 0020 064B
+FE71 ARABIC TATWEEL WITH FATHATAN ABOVE
+ # <medial> 0640 064B
+FE72 ARABIC DAMMATAN ISOLATED FORM
+ # <isolated> 0020 064C
+@ Glyph part
+FE73 ARABIC TAIL FRAGMENT
+ * for compatibility with certain legacy character sets
+@ Glyphs for spacing forms of Arabic points
+FE74 ARABIC KASRATAN ISOLATED FORM
+ # <isolated> 0020 064D
+FE76 ARABIC FATHA ISOLATED FORM
+ # <isolated> 0020 064E
+FE77 ARABIC FATHA MEDIAL FORM
+ # <medial> 0640 064E
+FE78 ARABIC DAMMA ISOLATED FORM
+ # <isolated> 0020 064F
+FE79 ARABIC DAMMA MEDIAL FORM
+ # <medial> 0640 064F
+FE7A ARABIC KASRA ISOLATED FORM
+ # <isolated> 0020 0650
+FE7B ARABIC KASRA MEDIAL FORM
+ # <medial> 0640 0650
+FE7C ARABIC SHADDA ISOLATED FORM
+ # <isolated> 0020 0651
+FE7D ARABIC SHADDA MEDIAL FORM
+ # <medial> 0640 0651
+FE7E ARABIC SUKUN ISOLATED FORM
+ # <isolated> 0020 0652
+FE7F ARABIC SUKUN MEDIAL FORM
+ # <medial> 0640 0652
+@ Basic glyphs for Arabic language contextual forms
+FE80 ARABIC LETTER HAMZA ISOLATED FORM
+ # <isolated> 0621
+FE81 ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+ # <isolated> 0622
+FE82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+ # <final> 0622
+FE83 ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 0623
+FE84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+ # <final> 0623
+FE85 ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 0624
+FE86 ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+ # <final> 0624
+FE87 ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+ # <isolated> 0625
+FE88 ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+ # <final> 0625
+FE89 ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 0626
+FE8A ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+ # <final> 0626
+FE8B ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+ # <initial> 0626
+FE8C ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+ # <medial> 0626
+FE8D ARABIC LETTER ALEF ISOLATED FORM
+ # <isolated> 0627
+FE8E ARABIC LETTER ALEF FINAL FORM
+ # <final> 0627
+FE8F ARABIC LETTER BEH ISOLATED FORM
+ # <isolated> 0628
+FE90 ARABIC LETTER BEH FINAL FORM
+ # <final> 0628
+FE91 ARABIC LETTER BEH INITIAL FORM
+ # <initial> 0628
+FE92 ARABIC LETTER BEH MEDIAL FORM
+ # <medial> 0628
+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM
+ # <isolated> 0629
+FE94 ARABIC LETTER TEH MARBUTA FINAL FORM
+ # <final> 0629
+FE95 ARABIC LETTER TEH ISOLATED FORM
+ # <isolated> 062A
+FE96 ARABIC LETTER TEH FINAL FORM
+ # <final> 062A
+FE97 ARABIC LETTER TEH INITIAL FORM
+ # <initial> 062A
+FE98 ARABIC LETTER TEH MEDIAL FORM
+ # <medial> 062A
+FE99 ARABIC LETTER THEH ISOLATED FORM
+ # <isolated> 062B
+FE9A ARABIC LETTER THEH FINAL FORM
+ # <final> 062B
+FE9B ARABIC LETTER THEH INITIAL FORM
+ # <initial> 062B
+FE9C ARABIC LETTER THEH MEDIAL FORM
+ # <medial> 062B
+FE9D ARABIC LETTER JEEM ISOLATED FORM
+ # <isolated> 062C
+FE9E ARABIC LETTER JEEM FINAL FORM
+ # <final> 062C
+FE9F ARABIC LETTER JEEM INITIAL FORM
+ # <initial> 062C
+FEA0 ARABIC LETTER JEEM MEDIAL FORM
+ # <medial> 062C
+FEA1 ARABIC LETTER HAH ISOLATED FORM
+ # <isolated> 062D
+FEA2 ARABIC LETTER HAH FINAL FORM
+ # <final> 062D
+FEA3 ARABIC LETTER HAH INITIAL FORM
+ # <initial> 062D
+FEA4 ARABIC LETTER HAH MEDIAL FORM
+ # <medial> 062D
+FEA5 ARABIC LETTER KHAH ISOLATED FORM
+ # <isolated> 062E
+FEA6 ARABIC LETTER KHAH FINAL FORM
+ # <final> 062E
+FEA7 ARABIC LETTER KHAH INITIAL FORM
+ # <initial> 062E
+FEA8 ARABIC LETTER KHAH MEDIAL FORM
+ # <medial> 062E
+FEA9 ARABIC LETTER DAL ISOLATED FORM
+ # <isolated> 062F
+FEAA ARABIC LETTER DAL FINAL FORM
+ # <final> 062F
+FEAB ARABIC LETTER THAL ISOLATED FORM
+ # <isolated> 0630
+FEAC ARABIC LETTER THAL FINAL FORM
+ # <final> 0630
+FEAD ARABIC LETTER REH ISOLATED FORM
+ # <isolated> 0631
+FEAE ARABIC LETTER REH FINAL FORM
+ # <final> 0631
+FEAF ARABIC LETTER ZAIN ISOLATED FORM
+ # <isolated> 0632
+FEB0 ARABIC LETTER ZAIN FINAL FORM
+ # <final> 0632
+FEB1 ARABIC LETTER SEEN ISOLATED FORM
+ # <isolated> 0633
+FEB2 ARABIC LETTER SEEN FINAL FORM
+ # <final> 0633
+FEB3 ARABIC LETTER SEEN INITIAL FORM
+ # <initial> 0633
+FEB4 ARABIC LETTER SEEN MEDIAL FORM
+ # <medial> 0633
+FEB5 ARABIC LETTER SHEEN ISOLATED FORM
+ # <isolated> 0634
+FEB6 ARABIC LETTER SHEEN FINAL FORM
+ # <final> 0634
+FEB7 ARABIC LETTER SHEEN INITIAL FORM
+ # <initial> 0634
+FEB8 ARABIC LETTER SHEEN MEDIAL FORM
+ # <medial> 0634
+FEB9 ARABIC LETTER SAD ISOLATED FORM
+ # <isolated> 0635
+FEBA ARABIC LETTER SAD FINAL FORM
+ # <final> 0635
+FEBB ARABIC LETTER SAD INITIAL FORM
+ # <initial> 0635
+FEBC ARABIC LETTER SAD MEDIAL FORM
+ # <medial> 0635
+FEBD ARABIC LETTER DAD ISOLATED FORM
+ # <isolated> 0636
+FEBE ARABIC LETTER DAD FINAL FORM
+ # <final> 0636
+FEBF ARABIC LETTER DAD INITIAL FORM
+ # <initial> 0636
+FEC0 ARABIC LETTER DAD MEDIAL FORM
+ # <medial> 0636
+FEC1 ARABIC LETTER TAH ISOLATED FORM
+ # <isolated> 0637
+FEC2 ARABIC LETTER TAH FINAL FORM
+ # <final> 0637
+FEC3 ARABIC LETTER TAH INITIAL FORM
+ # <initial> 0637
+FEC4 ARABIC LETTER TAH MEDIAL FORM
+ # <medial> 0637
+FEC5 ARABIC LETTER ZAH ISOLATED FORM
+ # <isolated> 0638
+FEC6 ARABIC LETTER ZAH FINAL FORM
+ # <final> 0638
+FEC7 ARABIC LETTER ZAH INITIAL FORM
+ # <initial> 0638
+FEC8 ARABIC LETTER ZAH MEDIAL FORM
+ # <medial> 0638
+FEC9 ARABIC LETTER AIN ISOLATED FORM
+ # <isolated> 0639
+FECA ARABIC LETTER AIN FINAL FORM
+ # <final> 0639
+FECB ARABIC LETTER AIN INITIAL FORM
+ # <initial> 0639
+FECC ARABIC LETTER AIN MEDIAL FORM
+ # <medial> 0639
+FECD ARABIC LETTER GHAIN ISOLATED FORM
+ # <isolated> 063A
+FECE ARABIC LETTER GHAIN FINAL FORM
+ # <final> 063A
+FECF ARABIC LETTER GHAIN INITIAL FORM
+ # <initial> 063A
+FED0 ARABIC LETTER GHAIN MEDIAL FORM
+ # <medial> 063A
+FED1 ARABIC LETTER FEH ISOLATED FORM
+ # <isolated> 0641
+FED2 ARABIC LETTER FEH FINAL FORM
+ # <final> 0641
+FED3 ARABIC LETTER FEH INITIAL FORM
+ # <initial> 0641
+FED4 ARABIC LETTER FEH MEDIAL FORM
+ # <medial> 0641
+FED5 ARABIC LETTER QAF ISOLATED FORM
+ # <isolated> 0642
+FED6 ARABIC LETTER QAF FINAL FORM
+ # <final> 0642
+FED7 ARABIC LETTER QAF INITIAL FORM
+ # <initial> 0642
+FED8 ARABIC LETTER QAF MEDIAL FORM
+ # <medial> 0642
+FED9 ARABIC LETTER KAF ISOLATED FORM
+ # <isolated> 0643
+FEDA ARABIC LETTER KAF FINAL FORM
+ # <final> 0643
+FEDB ARABIC LETTER KAF INITIAL FORM
+ # <initial> 0643
+FEDC ARABIC LETTER KAF MEDIAL FORM
+ # <medial> 0643
+FEDD ARABIC LETTER LAM ISOLATED FORM
+ # <isolated> 0644
+FEDE ARABIC LETTER LAM FINAL FORM
+ # <final> 0644
+FEDF ARABIC LETTER LAM INITIAL FORM
+ # <initial> 0644
+FEE0 ARABIC LETTER LAM MEDIAL FORM
+ # <medial> 0644
+FEE1 ARABIC LETTER MEEM ISOLATED FORM
+ # <isolated> 0645
+FEE2 ARABIC LETTER MEEM FINAL FORM
+ # <final> 0645
+FEE3 ARABIC LETTER MEEM INITIAL FORM
+ # <initial> 0645
+FEE4 ARABIC LETTER MEEM MEDIAL FORM
+ # <medial> 0645
+FEE5 ARABIC LETTER NOON ISOLATED FORM
+ # <isolated> 0646
+FEE6 ARABIC LETTER NOON FINAL FORM
+ # <final> 0646
+FEE7 ARABIC LETTER NOON INITIAL FORM
+ # <initial> 0646
+FEE8 ARABIC LETTER NOON MEDIAL FORM
+ # <medial> 0646
+FEE9 ARABIC LETTER HEH ISOLATED FORM
+ # <isolated> 0647
+FEEA ARABIC LETTER HEH FINAL FORM
+ # <final> 0647
+FEEB ARABIC LETTER HEH INITIAL FORM
+ # <initial> 0647
+FEEC ARABIC LETTER HEH MEDIAL FORM
+ # <medial> 0647
+FEED ARABIC LETTER WAW ISOLATED FORM
+ # <isolated> 0648
+FEEE ARABIC LETTER WAW FINAL FORM
+ # <final> 0648
+FEEF ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+ # <isolated> 0649
+FEF0 ARABIC LETTER ALEF MAKSURA FINAL FORM
+ # <final> 0649
+FEF1 ARABIC LETTER YEH ISOLATED FORM
+ # <isolated> 064A
+FEF2 ARABIC LETTER YEH FINAL FORM
+ # <final> 064A
+FEF3 ARABIC LETTER YEH INITIAL FORM
+ # <initial> 064A
+FEF4 ARABIC LETTER YEH MEDIAL FORM
+ # <medial> 064A
+FEF5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+ # <isolated> 0644 0622
+FEF6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+ # <final> 0644 0622
+FEF7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+ # <isolated> 0644 0623
+FEF8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+ # <final> 0644 0623
+FEF9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+ # <isolated> 0644 0625
+FEFA ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+ # <final> 0644 0625
+FEFB ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+ # <isolated> 0644 0627
+FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+ # <final> 0644 0627
+@ Special
+FEFF ZERO WIDTH NO-BREAK SPACE
+ = BYTE ORDER MARK (BOM), ZWNBSP
+ * may be used to detect byte order by contrast with the noncharacter code point FFFE
+ * use as an indication of non-breaking is deprecated; see 2060 instead
+ x (zero width space - 200B)
+ x (word joiner - 2060)
+ x (<not a character> - FFFE)
+@@ FF00 Halfwidth and Fullwidth Forms FFEF
+@ Fullwidth ASCII variants
+@+ See ASCII 0020 - 007E
+FF01 FULLWIDTH EXCLAMATION MARK
+ # <wide> 0021
+FF02 FULLWIDTH QUOTATION MARK
+ # <wide> 0022
+FF03 FULLWIDTH NUMBER SIGN
+ # <wide> 0023
+FF04 FULLWIDTH DOLLAR SIGN
+ # <wide> 0024
+FF05 FULLWIDTH PERCENT SIGN
+ # <wide> 0025
+FF06 FULLWIDTH AMPERSAND
+ # <wide> 0026
+FF07 FULLWIDTH APOSTROPHE
+ # <wide> 0027
+FF08 FULLWIDTH LEFT PARENTHESIS
+ # <wide> 0028
+FF09 FULLWIDTH RIGHT PARENTHESIS
+ # <wide> 0029
+FF0A FULLWIDTH ASTERISK
+ # <wide> 002A
+FF0B FULLWIDTH PLUS SIGN
+ # <wide> 002B
+FF0C FULLWIDTH COMMA
+ # <wide> 002C
+FF0D FULLWIDTH HYPHEN-MINUS
+ # <wide> 002D
+FF0E FULLWIDTH FULL STOP
+ # <wide> 002E
+FF0F FULLWIDTH SOLIDUS
+ # <wide> 002F
+FF10 FULLWIDTH DIGIT ZERO
+ # <wide> 0030
+FF11 FULLWIDTH DIGIT ONE
+ # <wide> 0031
+FF12 FULLWIDTH DIGIT TWO
+ # <wide> 0032
+FF13 FULLWIDTH DIGIT THREE
+ # <wide> 0033
+FF14 FULLWIDTH DIGIT FOUR
+ # <wide> 0034
+FF15 FULLWIDTH DIGIT FIVE
+ # <wide> 0035
+FF16 FULLWIDTH DIGIT SIX
+ # <wide> 0036
+FF17 FULLWIDTH DIGIT SEVEN
+ # <wide> 0037
+FF18 FULLWIDTH DIGIT EIGHT
+ # <wide> 0038
+FF19 FULLWIDTH DIGIT NINE
+ # <wide> 0039
+FF1A FULLWIDTH COLON
+ # <wide> 003A
+FF1B FULLWIDTH SEMICOLON
+ # <wide> 003B
+FF1C FULLWIDTH LESS-THAN SIGN
+ # <wide> 003C
+FF1D FULLWIDTH EQUALS SIGN
+ # <wide> 003D
+FF1E FULLWIDTH GREATER-THAN SIGN
+ # <wide> 003E
+FF1F FULLWIDTH QUESTION MARK
+ # <wide> 003F
+FF20 FULLWIDTH COMMERCIAL AT
+ # <wide> 0040
+FF21 FULLWIDTH LATIN CAPITAL LETTER A
+ # <wide> 0041
+FF22 FULLWIDTH LATIN CAPITAL LETTER B
+ # <wide> 0042
+FF23 FULLWIDTH LATIN CAPITAL LETTER C
+ # <wide> 0043
+FF24 FULLWIDTH LATIN CAPITAL LETTER D
+ # <wide> 0044
+FF25 FULLWIDTH LATIN CAPITAL LETTER E
+ # <wide> 0045
+FF26 FULLWIDTH LATIN CAPITAL LETTER F
+ # <wide> 0046
+FF27 FULLWIDTH LATIN CAPITAL LETTER G
+ # <wide> 0047
+FF28 FULLWIDTH LATIN CAPITAL LETTER H
+ # <wide> 0048
+FF29 FULLWIDTH LATIN CAPITAL LETTER I
+ # <wide> 0049
+FF2A FULLWIDTH LATIN CAPITAL LETTER J
+ # <wide> 004A
+FF2B FULLWIDTH LATIN CAPITAL LETTER K
+ # <wide> 004B
+FF2C FULLWIDTH LATIN CAPITAL LETTER L
+ # <wide> 004C
+FF2D FULLWIDTH LATIN CAPITAL LETTER M
+ # <wide> 004D
+FF2E FULLWIDTH LATIN CAPITAL LETTER N
+ # <wide> 004E
+FF2F FULLWIDTH LATIN CAPITAL LETTER O
+ # <wide> 004F
+FF30 FULLWIDTH LATIN CAPITAL LETTER P
+ # <wide> 0050
+FF31 FULLWIDTH LATIN CAPITAL LETTER Q
+ # <wide> 0051
+FF32 FULLWIDTH LATIN CAPITAL LETTER R
+ # <wide> 0052
+FF33 FULLWIDTH LATIN CAPITAL LETTER S
+ # <wide> 0053
+FF34 FULLWIDTH LATIN CAPITAL LETTER T
+ # <wide> 0054
+FF35 FULLWIDTH LATIN CAPITAL LETTER U
+ # <wide> 0055
+FF36 FULLWIDTH LATIN CAPITAL LETTER V
+ # <wide> 0056
+FF37 FULLWIDTH LATIN CAPITAL LETTER W
+ # <wide> 0057
+FF38 FULLWIDTH LATIN CAPITAL LETTER X
+ # <wide> 0058
+FF39 FULLWIDTH LATIN CAPITAL LETTER Y
+ # <wide> 0059
+FF3A FULLWIDTH LATIN CAPITAL LETTER Z
+ # <wide> 005A
+FF3B FULLWIDTH LEFT SQUARE BRACKET
+ # <wide> 005B
+FF3C FULLWIDTH REVERSE SOLIDUS
+ # <wide> 005C
+FF3D FULLWIDTH RIGHT SQUARE BRACKET
+ # <wide> 005D
+FF3E FULLWIDTH CIRCUMFLEX ACCENT
+ # <wide> 005E
+FF3F FULLWIDTH LOW LINE
+ # <wide> 005F
+FF40 FULLWIDTH GRAVE ACCENT
+ # <wide> 0060
+FF41 FULLWIDTH LATIN SMALL LETTER A
+ # <wide> 0061
+FF42 FULLWIDTH LATIN SMALL LETTER B
+ # <wide> 0062
+FF43 FULLWIDTH LATIN SMALL LETTER C
+ # <wide> 0063
+FF44 FULLWIDTH LATIN SMALL LETTER D
+ # <wide> 0064
+FF45 FULLWIDTH LATIN SMALL LETTER E
+ # <wide> 0065
+FF46 FULLWIDTH LATIN SMALL LETTER F
+ # <wide> 0066
+FF47 FULLWIDTH LATIN SMALL LETTER G
+ # <wide> 0067
+FF48 FULLWIDTH LATIN SMALL LETTER H
+ # <wide> 0068
+FF49 FULLWIDTH LATIN SMALL LETTER I
+ # <wide> 0069
+FF4A FULLWIDTH LATIN SMALL LETTER J
+ # <wide> 006A
+FF4B FULLWIDTH LATIN SMALL LETTER K
+ # <wide> 006B
+FF4C FULLWIDTH LATIN SMALL LETTER L
+ # <wide> 006C
+FF4D FULLWIDTH LATIN SMALL LETTER M
+ # <wide> 006D
+FF4E FULLWIDTH LATIN SMALL LETTER N
+ # <wide> 006E
+FF4F FULLWIDTH LATIN SMALL LETTER O
+ # <wide> 006F
+FF50 FULLWIDTH LATIN SMALL LETTER P
+ # <wide> 0070
+FF51 FULLWIDTH LATIN SMALL LETTER Q
+ # <wide> 0071
+FF52 FULLWIDTH LATIN SMALL LETTER R
+ # <wide> 0072
+FF53 FULLWIDTH LATIN SMALL LETTER S
+ # <wide> 0073
+FF54 FULLWIDTH LATIN SMALL LETTER T
+ # <wide> 0074
+FF55 FULLWIDTH LATIN SMALL LETTER U
+ # <wide> 0075
+FF56 FULLWIDTH LATIN SMALL LETTER V
+ # <wide> 0076
+FF57 FULLWIDTH LATIN SMALL LETTER W
+ # <wide> 0077
+FF58 FULLWIDTH LATIN SMALL LETTER X
+ # <wide> 0078
+FF59 FULLWIDTH LATIN SMALL LETTER Y
+ # <wide> 0079
+FF5A FULLWIDTH LATIN SMALL LETTER Z
+ # <wide> 007A
+FF5B FULLWIDTH LEFT CURLY BRACKET
+ # <wide> 007B
+FF5C FULLWIDTH VERTICAL LINE
+ # <wide> 007C
+FF5D FULLWIDTH RIGHT CURLY BRACKET
+ # <wide> 007D
+FF5E FULLWIDTH TILDE
+ # <wide> 007E
+@ Fullwidth brackets
+FF5F FULLWIDTH LEFT WHITE PARENTHESIS *
+ # <wide> 2985
+FF60 FULLWIDTH RIGHT WHITE PARENTHESIS *
+ * the most commonly occurring glyph variant looks like doubled parentheses
+ # <wide> 2986
+@ Halfwidth CJK punctuation
+@+ See CJK punctuation 3000 - 303F
+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP
+ # <narrow> 3002
+FF62 HALFWIDTH LEFT CORNER BRACKET
+ # <narrow> 300C
+FF63 HALFWIDTH RIGHT CORNER BRACKET
+ # <narrow> 300D
+FF64 HALFWIDTH IDEOGRAPHIC COMMA
+ # <narrow> 3001
+@ Halfwidth Katakana variants
+@+ See Katakana 30A0 - 30FF
+FF65 HALFWIDTH KATAKANA MIDDLE DOT
+ # <narrow> 30FB
+FF66 HALFWIDTH KATAKANA LETTER WO
+ # <narrow> 30F2
+FF67 HALFWIDTH KATAKANA LETTER SMALL A
+ # <narrow> 30A1
+FF68 HALFWIDTH KATAKANA LETTER SMALL I
+ # <narrow> 30A3
+FF69 HALFWIDTH KATAKANA LETTER SMALL U
+ # <narrow> 30A5
+FF6A HALFWIDTH KATAKANA LETTER SMALL E
+ # <narrow> 30A7
+FF6B HALFWIDTH KATAKANA LETTER SMALL O
+ # <narrow> 30A9
+FF6C HALFWIDTH KATAKANA LETTER SMALL YA
+ # <narrow> 30E3
+FF6D HALFWIDTH KATAKANA LETTER SMALL YU
+ # <narrow> 30E5
+FF6E HALFWIDTH KATAKANA LETTER SMALL YO
+ # <narrow> 30E7
+FF6F HALFWIDTH KATAKANA LETTER SMALL TU
+ # <narrow> 30C3
+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ # <narrow> 30FC
+FF71 HALFWIDTH KATAKANA LETTER A
+ # <narrow> 30A2
+FF72 HALFWIDTH KATAKANA LETTER I
+ # <narrow> 30A4
+FF73 HALFWIDTH KATAKANA LETTER U
+ # <narrow> 30A6
+FF74 HALFWIDTH KATAKANA LETTER E
+ # <narrow> 30A8
+FF75 HALFWIDTH KATAKANA LETTER O
+ # <narrow> 30AA
+FF76 HALFWIDTH KATAKANA LETTER KA
+ # <narrow> 30AB
+FF77 HALFWIDTH KATAKANA LETTER KI
+ # <narrow> 30AD
+FF78 HALFWIDTH KATAKANA LETTER KU
+ # <narrow> 30AF
+FF79 HALFWIDTH KATAKANA LETTER KE
+ # <narrow> 30B1
+FF7A HALFWIDTH KATAKANA LETTER KO
+ # <narrow> 30B3
+FF7B HALFWIDTH KATAKANA LETTER SA
+ # <narrow> 30B5
+FF7C HALFWIDTH KATAKANA LETTER SI
+ # <narrow> 30B7
+FF7D HALFWIDTH KATAKANA LETTER SU
+ # <narrow> 30B9
+FF7E HALFWIDTH KATAKANA LETTER SE
+ # <narrow> 30BB
+FF7F HALFWIDTH KATAKANA LETTER SO
+ # <narrow> 30BD
+FF80 HALFWIDTH KATAKANA LETTER TA
+ # <narrow> 30BF
+FF81 HALFWIDTH KATAKANA LETTER TI
+ # <narrow> 30C1
+FF82 HALFWIDTH KATAKANA LETTER TU
+ # <narrow> 30C4
+FF83 HALFWIDTH KATAKANA LETTER TE
+ # <narrow> 30C6
+FF84 HALFWIDTH KATAKANA LETTER TO
+ # <narrow> 30C8
+FF85 HALFWIDTH KATAKANA LETTER NA
+ # <narrow> 30CA
+FF86 HALFWIDTH KATAKANA LETTER NI
+ # <narrow> 30CB
+FF87 HALFWIDTH KATAKANA LETTER NU
+ # <narrow> 30CC
+FF88 HALFWIDTH KATAKANA LETTER NE
+ # <narrow> 30CD
+FF89 HALFWIDTH KATAKANA LETTER NO
+ # <narrow> 30CE
+FF8A HALFWIDTH KATAKANA LETTER HA
+ # <narrow> 30CF
+FF8B HALFWIDTH KATAKANA LETTER HI
+ # <narrow> 30D2
+FF8C HALFWIDTH KATAKANA LETTER HU
+ # <narrow> 30D5
+FF8D HALFWIDTH KATAKANA LETTER HE
+ # <narrow> 30D8
+FF8E HALFWIDTH KATAKANA LETTER HO
+ # <narrow> 30DB
+FF8F HALFWIDTH KATAKANA LETTER MA
+ # <narrow> 30DE
+FF90 HALFWIDTH KATAKANA LETTER MI
+ # <narrow> 30DF
+FF91 HALFWIDTH KATAKANA LETTER MU
+ # <narrow> 30E0
+FF92 HALFWIDTH KATAKANA LETTER ME
+ # <narrow> 30E1
+FF93 HALFWIDTH KATAKANA LETTER MO
+ # <narrow> 30E2
+FF94 HALFWIDTH KATAKANA LETTER YA
+ # <narrow> 30E4
+FF95 HALFWIDTH KATAKANA LETTER YU
+ # <narrow> 30E6
+FF96 HALFWIDTH KATAKANA LETTER YO
+ # <narrow> 30E8
+FF97 HALFWIDTH KATAKANA LETTER RA
+ # <narrow> 30E9
+FF98 HALFWIDTH KATAKANA LETTER RI
+ # <narrow> 30EA
+FF99 HALFWIDTH KATAKANA LETTER RU
+ # <narrow> 30EB
+FF9A HALFWIDTH KATAKANA LETTER RE
+ # <narrow> 30EC
+FF9B HALFWIDTH KATAKANA LETTER RO
+ # <narrow> 30ED
+FF9C HALFWIDTH KATAKANA LETTER WA
+ # <narrow> 30EF
+FF9D HALFWIDTH KATAKANA LETTER N
+ # <narrow> 30F3
+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK (halfwidth katakana-hiragana voiced sound mark)
+ # <narrow> 3099
+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK (halfwidth katakana-hiragana semi-voiced sound mark)
+ # <narrow> 309A
+@ Halfwidth Hangul variants
+@+ See Hangul Compatibility Jamo 3130 - 318F
+FFA0 HALFWIDTH HANGUL FILLER
+ # <narrow> 3164
+FFA1 HALFWIDTH HANGUL LETTER KIYEOK
+ # <narrow> 3131
+FFA2 HALFWIDTH HANGUL LETTER SSANGKIYEOK
+ # <narrow> 3132
+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+ # <narrow> 3133
+FFA4 HALFWIDTH HANGUL LETTER NIEUN
+ # <narrow> 3134
+FFA5 HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+ # <narrow> 3135
+FFA6 HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+ # <narrow> 3136
+FFA7 HALFWIDTH HANGUL LETTER TIKEUT
+ # <narrow> 3137
+FFA8 HALFWIDTH HANGUL LETTER SSANGTIKEUT
+ # <narrow> 3138
+FFA9 HALFWIDTH HANGUL LETTER RIEUL
+ # <narrow> 3139
+FFAA HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+ # <narrow> 313A
+FFAB HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+ # <narrow> 313B
+FFAC HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+ # <narrow> 313C
+FFAD HALFWIDTH HANGUL LETTER RIEUL-SIOS
+ # <narrow> 313D
+FFAE HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+ # <narrow> 313E
+FFAF HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+ # <narrow> 313F
+FFB0 HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+ # <narrow> 3140
+FFB1 HALFWIDTH HANGUL LETTER MIEUM
+ # <narrow> 3141
+FFB2 HALFWIDTH HANGUL LETTER PIEUP
+ # <narrow> 3142
+FFB3 HALFWIDTH HANGUL LETTER SSANGPIEUP
+ # <narrow> 3143
+FFB4 HALFWIDTH HANGUL LETTER PIEUP-SIOS
+ # <narrow> 3144
+FFB5 HALFWIDTH HANGUL LETTER SIOS
+ # <narrow> 3145
+FFB6 HALFWIDTH HANGUL LETTER SSANGSIOS
+ # <narrow> 3146
+FFB7 HALFWIDTH HANGUL LETTER IEUNG
+ # <narrow> 3147
+FFB8 HALFWIDTH HANGUL LETTER CIEUC
+ # <narrow> 3148
+FFB9 HALFWIDTH HANGUL LETTER SSANGCIEUC
+ # <narrow> 3149
+FFBA HALFWIDTH HANGUL LETTER CHIEUCH
+ # <narrow> 314A
+FFBB HALFWIDTH HANGUL LETTER KHIEUKH
+ # <narrow> 314B
+FFBC HALFWIDTH HANGUL LETTER THIEUTH
+ # <narrow> 314C
+FFBD HALFWIDTH HANGUL LETTER PHIEUPH
+ # <narrow> 314D
+FFBE HALFWIDTH HANGUL LETTER HIEUH
+ # <narrow> 314E
+FFC2 HALFWIDTH HANGUL LETTER A
+ # <narrow> 314F
+FFC3 HALFWIDTH HANGUL LETTER AE
+ # <narrow> 3150
+FFC4 HALFWIDTH HANGUL LETTER YA
+ # <narrow> 3151
+FFC5 HALFWIDTH HANGUL LETTER YAE
+ # <narrow> 3152
+FFC6 HALFWIDTH HANGUL LETTER EO
+ # <narrow> 3153
+FFC7 HALFWIDTH HANGUL LETTER E
+ # <narrow> 3154
+FFCA HALFWIDTH HANGUL LETTER YEO
+ # <narrow> 3155
+FFCB HALFWIDTH HANGUL LETTER YE
+ # <narrow> 3156
+FFCC HALFWIDTH HANGUL LETTER O
+ # <narrow> 3157
+FFCD HALFWIDTH HANGUL LETTER WA
+ # <narrow> 3158
+FFCE HALFWIDTH HANGUL LETTER WAE
+ # <narrow> 3159
+FFCF HALFWIDTH HANGUL LETTER OE
+ # <narrow> 315A
+FFD2 HALFWIDTH HANGUL LETTER YO
+ # <narrow> 315B
+FFD3 HALFWIDTH HANGUL LETTER U
+ # <narrow> 315C
+FFD4 HALFWIDTH HANGUL LETTER WEO
+ # <narrow> 315D
+FFD5 HALFWIDTH HANGUL LETTER WE
+ # <narrow> 315E
+FFD6 HALFWIDTH HANGUL LETTER WI
+ # <narrow> 315F
+FFD7 HALFWIDTH HANGUL LETTER YU
+ # <narrow> 3160
+FFDA HALFWIDTH HANGUL LETTER EU
+ # <narrow> 3161
+FFDB HALFWIDTH HANGUL LETTER YI
+ # <narrow> 3162
+FFDC HALFWIDTH HANGUL LETTER I
+ # <narrow> 3163
+@ Fullwidth symbol variants
+@+ See Latin-1 00A0 - 00FF
+FFE0 FULLWIDTH CENT SIGN
+ # <wide> 00A2
+FFE1 FULLWIDTH POUND SIGN
+ # <wide> 00A3
+FFE2 FULLWIDTH NOT SIGN
+ # <wide> 00AC
+FFE3 FULLWIDTH MACRON *
+ * sometimes treated as fullwidth overline
+ x (overline - 203E)
+ # <wide> 00AF
+FFE4 FULLWIDTH BROKEN BAR
+ # <wide> 00A6
+FFE5 FULLWIDTH YEN SIGN
+ # <wide> 00A5
+FFE6 FULLWIDTH WON SIGN
+ # <wide> 20A9
+@ Halfwidth symbol variants
+FFE8 HALFWIDTH FORMS LIGHT VERTICAL
+ # <narrow> 2502
+FFE9 HALFWIDTH LEFTWARDS ARROW
+ # <narrow> 2190
+FFEA HALFWIDTH UPWARDS ARROW
+ # <narrow> 2191
+FFEB HALFWIDTH RIGHTWARDS ARROW
+ # <narrow> 2192
+FFEC HALFWIDTH DOWNWARDS ARROW
+ # <narrow> 2193
+FFED HALFWIDTH BLACK SQUARE
+ # <narrow> 25A0
+FFEE HALFWIDTH WHITE CIRCLE
+ # <narrow> 25CB
+@@ FFF0 Specials FFFF
+@ Interlinear annotation
+@+ Used internally for Japanese Ruby (furigana), etc.
+FFF9 INTERLINEAR ANNOTATION ANCHOR
+ * marks start of annotated text
+FFFA INTERLINEAR ANNOTATION SEPARATOR
+ * marks start of annotating character(s)
+FFFB INTERLINEAR ANNOTATION TERMINATOR
+ * marks end of annotation block
+@ Replacement characters
+FFFC OBJECT REPLACEMENT CHARACTER
+ * used as placeholder in text for an otherwise unspecified object
+FFFD REPLACEMENT CHARACTER
+ * used to replace an incoming character whose value is unknown or unrepresentable in Unicode
+ * compare the use of 001A as a control character to indicate the substitute function
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+FFFE <not a character>
+ * the value FFFE is guaranteed not to be a Unicode character at all
+ * may be used to detect byte order by contrast with FEFF which is a character
+ x (zero width no-break space - FEFF)
+FFFF <not a character>
+ * the value FFFF is guaranteed not to be a Unicode character at all
+@@ 10000 Linear B Syllabary 1007F
+@ Basic syllables
+10000 LINEAR B SYLLABLE B008 A
+10001 LINEAR B SYLLABLE B038 E
+10002 LINEAR B SYLLABLE B028 I
+10003 LINEAR B SYLLABLE B061 O
+10004 LINEAR B SYLLABLE B010 U
+10005 LINEAR B SYLLABLE B001 DA
+10006 LINEAR B SYLLABLE B045 DE
+10007 LINEAR B SYLLABLE B007 DI
+10008 LINEAR B SYLLABLE B014 DO
+10009 LINEAR B SYLLABLE B051 DU
+1000A LINEAR B SYLLABLE B057 JA
+1000B LINEAR B SYLLABLE B046 JE
+1000D LINEAR B SYLLABLE B036 JO
+1000E LINEAR B SYLLABLE B065 JU
+ = ideogram B129 flour
+1000F LINEAR B SYLLABLE B077 KA
+10010 LINEAR B SYLLABLE B044 KE
+10011 LINEAR B SYLLABLE B067 KI
+10012 LINEAR B SYLLABLE B070 KO
+10013 LINEAR B SYLLABLE B081 KU
+10014 LINEAR B SYLLABLE B080 MA
+10015 LINEAR B SYLLABLE B013 ME
+10016 LINEAR B SYLLABLE B073 MI
+10017 LINEAR B SYLLABLE B015 MO
+10018 LINEAR B SYLLABLE B023 MU
+ = ideogram B109 ox
+10019 LINEAR B SYLLABLE B006 NA
+1001A LINEAR B SYLLABLE B024 NE
+1001B LINEAR B SYLLABLE B030 NI
+ = ideogram B030 figs
+1001C LINEAR B SYLLABLE B052 NO
+1001D LINEAR B SYLLABLE B055 NU
+1001E LINEAR B SYLLABLE B003 PA
+1001F LINEAR B SYLLABLE B072 PE
+10020 LINEAR B SYLLABLE B039 PI
+10021 LINEAR B SYLLABLE B011 PO
+10022 LINEAR B SYLLABLE B050 PU
+10023 LINEAR B SYLLABLE B016 QA
+10024 LINEAR B SYLLABLE B078 QE
+10025 LINEAR B SYLLABLE B021 QI
+ = ideogram B106 sheep
+10026 LINEAR B SYLLABLE B032 QO
+10028 LINEAR B SYLLABLE B060 RA
+10029 LINEAR B SYLLABLE B027 RE
+1002A LINEAR B SYLLABLE B053 RI
+1002B LINEAR B SYLLABLE B002 RO
+1002C LINEAR B SYLLABLE B026 RU
+1002D LINEAR B SYLLABLE B031 SA
+ = ideogram B031 flax
+1002E LINEAR B SYLLABLE B009 SE
+1002F LINEAR B SYLLABLE B041 SI
+10030 LINEAR B SYLLABLE B012 SO
+10031 LINEAR B SYLLABLE B058 SU
+10032 LINEAR B SYLLABLE B059 TA
+10033 LINEAR B SYLLABLE B004 TE
+10034 LINEAR B SYLLABLE B037 TI
+10035 LINEAR B SYLLABLE B005 TO
+10036 LINEAR B SYLLABLE B069 TU
+10037 LINEAR B SYLLABLE B054 WA
+10038 LINEAR B SYLLABLE B075 WE
+10039 LINEAR B SYLLABLE B040 WI
+1003A LINEAR B SYLLABLE B042 WO
+1003C LINEAR B SYLLABLE B017 ZA
+1003D LINEAR B SYLLABLE B074 ZE
+1003F LINEAR B SYLLABLE B020 ZO
+@ Supplementary signs
+10040 LINEAR B SYLLABLE B025 A2
+10041 LINEAR B SYLLABLE B043 A3
+10042 LINEAR B SYLLABLE B085 AU
+ = ideogram B108 pig
+10043 LINEAR B SYLLABLE B071 DWE
+10044 LINEAR B SYLLABLE B090 DWO
+10045 LINEAR B SYLLABLE B048 NWA
+10046 LINEAR B SYLLABLE B029 PU2
+10047 LINEAR B SYLLABLE B062 PTE
+10048 LINEAR B SYLLABLE B076 RA2
+10049 LINEAR B SYLLABLE B033 RA3
+ = ideogram B144 saffron
+1004A LINEAR B SYLLABLE B068 RO2
+1004B LINEAR B SYLLABLE B066 TA2
+1004C LINEAR B SYLLABLE B087 TWE
+1004D LINEAR B SYLLABLE B091 TWO
+@ Symbols
+10050 LINEAR B SYMBOL B018
+10051 LINEAR B SYMBOL B019
+10052 LINEAR B SYMBOL B022
+ = ideogram B107 goat
+10053 LINEAR B SYMBOL B034
+10054 LINEAR B SYMBOL B047
+10055 LINEAR B SYMBOL B049
+10056 LINEAR B SYMBOL B056
+10057 LINEAR B SYMBOL B063
+10058 LINEAR B SYMBOL B064
+10059 LINEAR B SYMBOL B079
+1005A LINEAR B SYMBOL B082
+1005B LINEAR B SYMBOL B083
+1005C LINEAR B SYMBOL B086
+1005D LINEAR B SYMBOL B089
+@@ 10080 Linear B Ideograms 100FF
+@+ Some Linear B syllables are also used as Linear B ideograms.
+ x (linear b syllable b021 qi - 10025)
+ x (linear b symbol b022 - 10052)
+ x (linear b syllable b023 mu - 10018)
+ x (linear b syllable b030 ni - 1001B)
+ x (linear b syllable b031 sa - 1002D)
+ x (linear b syllable b033 ra3 - 10049)
+ x (linear b syllable b065 ju - 1000E)
+ x (linear b syllable b085 au - 10042)
+@ People and animals
+10080 LINEAR B IDEOGRAM B100 MAN
+10081 LINEAR B IDEOGRAM B102 WOMAN
+10082 LINEAR B IDEOGRAM B104 DEER
+10083 LINEAR B IDEOGRAM B105 EQUID
+10084 LINEAR B IDEOGRAM B105F MARE
+10085 LINEAR B IDEOGRAM B105M STALLION
+10086 LINEAR B IDEOGRAM B106F EWE
+10087 LINEAR B IDEOGRAM B106M RAM
+10088 LINEAR B IDEOGRAM B107F SHE-GOAT
+10089 LINEAR B IDEOGRAM B107M HE-GOAT
+1008A LINEAR B IDEOGRAM B108F SOW
+1008B LINEAR B IDEOGRAM B108M BOAR
+1008C LINEAR B IDEOGRAM B109F COW
+1008D LINEAR B IDEOGRAM B109M BULL
+@ Cereals and plants
+1008E LINEAR B IDEOGRAM B120 WHEAT
+1008F LINEAR B IDEOGRAM B121 BARLEY
+10090 LINEAR B IDEOGRAM B122 OLIVE
+10091 LINEAR B IDEOGRAM B123 SPICE
+10092 LINEAR B IDEOGRAM B125 CYPERUS
+10093 LINEAR B MONOGRAM B127 KAPO
+ = fruit
+10094 LINEAR B MONOGRAM B128 KANAKO
+ = saffron
+@ Extracts
+10095 LINEAR B IDEOGRAM B130 OIL
+10096 LINEAR B IDEOGRAM B131 WINE
+10097 LINEAR B IDEOGRAM B132
+10098 LINEAR B MONOGRAM B133 AREPA
+ = ointment
+10099 LINEAR B MONOGRAM B135 MERI
+ = honey
+@ Metals
+1009A LINEAR B IDEOGRAM B140 BRONZE
+1009B LINEAR B IDEOGRAM B141 GOLD
+1009C LINEAR B IDEOGRAM B142
+@ Other materials
+1009D LINEAR B IDEOGRAM B145 WOOL
+1009E LINEAR B IDEOGRAM B146
+1009F LINEAR B IDEOGRAM B150
+100A0 LINEAR B IDEOGRAM B151 HORN
+100A1 LINEAR B IDEOGRAM B152
+100A2 LINEAR B IDEOGRAM B153
+100A3 LINEAR B IDEOGRAM B154
+100A4 LINEAR B MONOGRAM B156 TURO2
+ = cheese
+100A5 LINEAR B IDEOGRAM B157
+100A6 LINEAR B IDEOGRAM B158
+100A7 LINEAR B IDEOGRAM B159 CLOTH
+100A8 LINEAR B IDEOGRAM B160
+100A9 LINEAR B IDEOGRAM B161
+100AA LINEAR B IDEOGRAM B162 GARMENT
+100AB LINEAR B IDEOGRAM B163 ARMOUR
+100AC LINEAR B IDEOGRAM B164
+100AD LINEAR B IDEOGRAM B165
+100AE LINEAR B IDEOGRAM B166
+100AF LINEAR B IDEOGRAM B167
+100B0 LINEAR B IDEOGRAM B168
+100B1 LINEAR B IDEOGRAM B169
+100B2 LINEAR B IDEOGRAM B170
+100B3 LINEAR B IDEOGRAM B171
+100B4 LINEAR B IDEOGRAM B172
+100B5 LINEAR B IDEOGRAM B173 MONTH
+100B6 LINEAR B IDEOGRAM B174
+100B7 LINEAR B IDEOGRAM B176 TREE
+100B8 LINEAR B IDEOGRAM B177
+100B9 LINEAR B IDEOGRAM B178
+100BA LINEAR B IDEOGRAM B179
+100BB LINEAR B IDEOGRAM B180
+100BC LINEAR B IDEOGRAM B181
+100BD LINEAR B IDEOGRAM B182
+100BE LINEAR B IDEOGRAM B183
+100BF LINEAR B IDEOGRAM B184
+ * the shape of this ideogram is only partially known
+100C0 LINEAR B IDEOGRAM B185
+100C1 LINEAR B IDEOGRAM B189
+100C2 LINEAR B IDEOGRAM B190
+100C3 LINEAR B IDEOGRAM B191 HELMET
+100C4 LINEAR B IDEOGRAM B220 FOOTSTOOL
+100C5 LINEAR B IDEOGRAM B225 BATHTUB
+100C6 LINEAR B IDEOGRAM B230 SPEAR
+100C7 LINEAR B IDEOGRAM B231 ARROW
+100C8 LINEAR B IDEOGRAM B232
+100C9 LINEAR B IDEOGRAM B233 SWORD (pug)
+ = pugio
+100CA LINEAR B IDEOGRAM B234
+100CB LINEAR B IDEOGRAM B236 (gup)
+ = "gupio", inverted sword
+100CC LINEAR B IDEOGRAM B240 WHEELED CHARIOT
+100CD LINEAR B IDEOGRAM B241 CHARIOT
+100CE LINEAR B IDEOGRAM B242 CHARIOT FRAME
+100CF LINEAR B IDEOGRAM B243 WHEEL
+100D0 LINEAR B IDEOGRAM B245
+100D1 LINEAR B IDEOGRAM B246
+100D2 LINEAR B MONOGRAM B247 DIPTE
+100D3 LINEAR B IDEOGRAM B248
+100D4 LINEAR B IDEOGRAM B249
+100D5 LINEAR B IDEOGRAM B251
+ * the shape of this ideogram is only partially known
+100D6 LINEAR B IDEOGRAM B252
+ * the shape of this ideogram is only partially known
+100D7 LINEAR B IDEOGRAM B253
+100D8 LINEAR B IDEOGRAM B254 DART
+100D9 LINEAR B IDEOGRAM B255
+100DA LINEAR B IDEOGRAM B256
+100DB LINEAR B IDEOGRAM B257
+100DC LINEAR B IDEOGRAM B258
+100DD LINEAR B IDEOGRAM B259
+@ Vessels
+100DE LINEAR B IDEOGRAM VESSEL B155
+100DF LINEAR B IDEOGRAM VESSEL B200
+100E0 LINEAR B IDEOGRAM VESSEL B201
+100E1 LINEAR B IDEOGRAM VESSEL B202
+100E2 LINEAR B IDEOGRAM VESSEL B203
+100E3 LINEAR B IDEOGRAM VESSEL B204
+100E4 LINEAR B IDEOGRAM VESSEL B205
+100E5 LINEAR B IDEOGRAM VESSEL B206
+100E6 LINEAR B IDEOGRAM VESSEL B207
+100E7 LINEAR B IDEOGRAM VESSEL B208
+100E8 LINEAR B IDEOGRAM VESSEL B209
+100E9 LINEAR B IDEOGRAM VESSEL B210
+100EA LINEAR B IDEOGRAM VESSEL B211
+100EB LINEAR B IDEOGRAM VESSEL B212
+100EC LINEAR B IDEOGRAM VESSEL B213
+100ED LINEAR B IDEOGRAM VESSEL B214
+100EE LINEAR B IDEOGRAM VESSEL B215
+100EF LINEAR B IDEOGRAM VESSEL B216
+100F0 LINEAR B IDEOGRAM VESSEL B217
+100F1 LINEAR B IDEOGRAM VESSEL B218
+100F2 LINEAR B IDEOGRAM VESSEL B219
+100F3 LINEAR B IDEOGRAM VESSEL B221
+100F4 LINEAR B IDEOGRAM VESSEL B222
+100F5 LINEAR B IDEOGRAM VESSEL B226
+100F6 LINEAR B IDEOGRAM VESSEL B227
+100F7 LINEAR B IDEOGRAM VESSEL B228
+100F8 LINEAR B IDEOGRAM VESSEL B229
+100F9 LINEAR B IDEOGRAM VESSEL B250
+100FA LINEAR B IDEOGRAM VESSEL B305
+ * the shape of this ideogram is only partially known
+@@ 10100 Aegean Numbers 1013F
+@ Punctuation
+10100 AEGEAN WORD SEPARATOR LINE
+10101 AEGEAN WORD SEPARATOR DOT
+10102 AEGEAN CHECK MARK
+@ Numbers
+10107 AEGEAN NUMBER ONE
+10108 AEGEAN NUMBER TWO
+10109 AEGEAN NUMBER THREE
+1010A AEGEAN NUMBER FOUR
+1010B AEGEAN NUMBER FIVE
+1010C AEGEAN NUMBER SIX
+1010D AEGEAN NUMBER SEVEN
+1010E AEGEAN NUMBER EIGHT
+1010F AEGEAN NUMBER NINE
+10110 AEGEAN NUMBER TEN
+10111 AEGEAN NUMBER TWENTY
+10112 AEGEAN NUMBER THIRTY
+10113 AEGEAN NUMBER FORTY
+10114 AEGEAN NUMBER FIFTY
+10115 AEGEAN NUMBER SIXTY
+10116 AEGEAN NUMBER SEVENTY
+10117 AEGEAN NUMBER EIGHTY
+10118 AEGEAN NUMBER NINETY
+10119 AEGEAN NUMBER ONE HUNDRED
+1011A AEGEAN NUMBER TWO HUNDRED
+1011B AEGEAN NUMBER THREE HUNDRED
+1011C AEGEAN NUMBER FOUR HUNDRED
+1011D AEGEAN NUMBER FIVE HUNDRED
+1011E AEGEAN NUMBER SIX HUNDRED
+1011F AEGEAN NUMBER SEVEN HUNDRED
+10120 AEGEAN NUMBER EIGHT HUNDRED
+10121 AEGEAN NUMBER NINE HUNDRED
+10122 AEGEAN NUMBER ONE THOUSAND
+10123 AEGEAN NUMBER TWO THOUSAND
+10124 AEGEAN NUMBER THREE THOUSAND
+10125 AEGEAN NUMBER FOUR THOUSAND
+10126 AEGEAN NUMBER FIVE THOUSAND
+10127 AEGEAN NUMBER SIX THOUSAND
+10128 AEGEAN NUMBER SEVEN THOUSAND
+10129 AEGEAN NUMBER EIGHT THOUSAND
+1012A AEGEAN NUMBER NINE THOUSAND
+1012B AEGEAN NUMBER TEN THOUSAND
+1012C AEGEAN NUMBER TWENTY THOUSAND
+1012D AEGEAN NUMBER THIRTY THOUSAND
+1012E AEGEAN NUMBER FORTY THOUSAND
+1012F AEGEAN NUMBER FIFTY THOUSAND
+10130 AEGEAN NUMBER SIXTY THOUSAND
+10131 AEGEAN NUMBER SEVENTY THOUSAND
+10132 AEGEAN NUMBER EIGHTY THOUSAND
+10133 AEGEAN NUMBER NINETY THOUSAND
+@ Measures
+10137 AEGEAN WEIGHT BASE UNIT
+10138 AEGEAN WEIGHT FIRST SUBUNIT
+10139 AEGEAN WEIGHT SECOND SUBUNIT
+1013A AEGEAN WEIGHT THIRD SUBUNIT
+1013B AEGEAN WEIGHT FOURTH SUBUNIT
+1013C AEGEAN DRY MEASURE FIRST SUBUNIT
+1013D AEGEAN LIQUID MEASURE FIRST SUBUNIT
+1013E AEGEAN MEASURE SECOND SUBUNIT
+1013F AEGEAN MEASURE THIRD SUBUNIT
+@@ 10140 Ancient Greek Numbers 1018F
+@ Ancient Greek acrophonic numerals
+@+ These are shown as sans-serif forms because that corresponds more closely to their appearance in ancient texts.
+10140 GREEK ACROPHONIC ATTIC ONE QUARTER
+10141 GREEK ACROPHONIC ATTIC ONE HALF
+10142 GREEK ACROPHONIC ATTIC ONE DRACHMA
+10143 GREEK ACROPHONIC ATTIC FIVE
+10144 GREEK ACROPHONIC ATTIC FIFTY
+10145 GREEK ACROPHONIC ATTIC FIVE HUNDRED
+10146 GREEK ACROPHONIC ATTIC FIVE THOUSAND
+10147 GREEK ACROPHONIC ATTIC FIFTY THOUSAND
+10148 GREEK ACROPHONIC ATTIC FIVE TALENTS
+10149 GREEK ACROPHONIC ATTIC TEN TALENTS
+1014A GREEK ACROPHONIC ATTIC FIFTY TALENTS
+1014B GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS
+1014C GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS
+1014D GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS
+1014E GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS
+1014F GREEK ACROPHONIC ATTIC FIVE STATERS
+10150 GREEK ACROPHONIC ATTIC TEN STATERS
+10151 GREEK ACROPHONIC ATTIC FIFTY STATERS
+10152 GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS
+10153 GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS
+10154 GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS
+10155 GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS
+10156 GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS
+10157 GREEK ACROPHONIC ATTIC TEN MNAS
+10158 GREEK ACROPHONIC HERAEUM ONE PLETHRON
+10159 GREEK ACROPHONIC THESPIAN ONE
+1015A GREEK ACROPHONIC HERMIONIAN ONE
+1015B GREEK ACROPHONIC EPIDAUREAN TWO
+ x (two dot punctuation - 205A)
+1015C GREEK ACROPHONIC THESPIAN TWO
+1015D GREEK ACROPHONIC CYRENAIC TWO DRACHMAS
+1015E GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS
+ * top line is at cap height, unlike 10111
+ x (aegean number twenty - 10111)
+1015F GREEK ACROPHONIC TROEZENIAN FIVE
+10160 GREEK ACROPHONIC TROEZENIAN TEN
+10161 GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM
+10162 GREEK ACROPHONIC HERMIONIAN TEN
+10163 GREEK ACROPHONIC MESSENIAN TEN
+10164 GREEK ACROPHONIC THESPIAN TEN
+10165 GREEK ACROPHONIC THESPIAN THIRTY
+10166 GREEK ACROPHONIC TROEZENIAN FIFTY
+10167 GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
+10168 GREEK ACROPHONIC HERMIONIAN FIFTY
+10169 GREEK ACROPHONIC THESPIAN FIFTY
+1016A GREEK ACROPHONIC THESPIAN ONE HUNDRED
+1016B GREEK ACROPHONIC THESPIAN THREE HUNDRED
+1016C GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED
+1016D GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED
+1016E GREEK ACROPHONIC THESPIAN FIVE HUNDRED
+1016F GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED
+10170 GREEK ACROPHONIC NAXIAN FIVE HUNDRED
+10171 GREEK ACROPHONIC THESPIAN ONE THOUSAND
+10172 GREEK ACROPHONIC THESPIAN FIVE THOUSAND
+10173 GREEK ACROPHONIC DELPHIC FIVE MNAS
+10174 GREEK ACROPHONIC STRATIAN FIFTY MNAS
+@ Ancient Greek papyrological numbers
+10175 GREEK ONE HALF SIGN
+10176 GREEK ONE HALF SIGN ALTERNATE FORM
+10177 GREEK TWO THIRDS SIGN
+10178 GREEK THREE QUARTERS SIGN
+10179 GREEK YEAR SIGN
+1017A GREEK TALENT SIGN
+1017B GREEK DRACHMA SIGN
+1017C GREEK OBOL SIGN
+1017D GREEK TWO OBOLS SIGN
+1017E GREEK THREE OBOLS SIGN
+1017F GREEK FOUR OBOLS SIGN
+10180 GREEK FIVE OBOLS SIGN
+10181 GREEK METRETES SIGN
+10182 GREEK KYATHOS BASE SIGN
+10183 GREEK LITRA SIGN
+10184 GREEK OUNKIA SIGN
+10185 GREEK XESTES SIGN
+10186 GREEK ARTABE SIGN
+10187 GREEK AROURA SIGN
+10188 GREEK GRAMMA SIGN
+10189 GREEK TRYBLION BASE SIGN
+1018A GREEK ZERO SIGN
+@@ 10300 Old Italic 1032F
+@ Letters
+10300 OLD ITALIC LETTER A
+10301 OLD ITALIC LETTER BE
+10302 OLD ITALIC LETTER KE
+10303 OLD ITALIC LETTER DE
+10304 OLD ITALIC LETTER E
+10305 OLD ITALIC LETTER VE
+10306 OLD ITALIC LETTER ZE
+10307 OLD ITALIC LETTER HE
+10308 OLD ITALIC LETTER THE
+10309 OLD ITALIC LETTER I
+1030A OLD ITALIC LETTER KA
+1030B OLD ITALIC LETTER EL
+1030C OLD ITALIC LETTER EM
+1030D OLD ITALIC LETTER EN
+1030E OLD ITALIC LETTER ESH
+1030F OLD ITALIC LETTER O (Faliscan)
+10310 OLD ITALIC LETTER PE
+10311 OLD ITALIC LETTER SHE
+10312 OLD ITALIC LETTER KU
+10313 OLD ITALIC LETTER ER
+10314 OLD ITALIC LETTER ES
+10315 OLD ITALIC LETTER TE
+10316 OLD ITALIC LETTER U
+10317 OLD ITALIC LETTER EKS (Faliscan)
+10318 OLD ITALIC LETTER PHE
+10319 OLD ITALIC LETTER KHE
+1031A OLD ITALIC LETTER EF
+1031B OLD ITALIC LETTER ERS (Umbrian)
+1031C OLD ITALIC LETTER CHE (Umbrian)
+1031D OLD ITALIC LETTER II (Oscan)
+1031E OLD ITALIC LETTER UU (Oscan)
+@ Numerals
+10320 OLD ITALIC NUMERAL ONE
+10321 OLD ITALIC NUMERAL FIVE
+10322 OLD ITALIC NUMERAL TEN
+10323 OLD ITALIC NUMERAL FIFTY
+@@ 10330 Gothic 1034F
+@ Letters
+10330 GOTHIC LETTER AHSA
+10331 GOTHIC LETTER BAIRKAN
+10332 GOTHIC LETTER GIBA
+10333 GOTHIC LETTER DAGS
+10334 GOTHIC LETTER AIHVUS
+10335 GOTHIC LETTER QAIRTHRA
+10336 GOTHIC LETTER IUJA
+10337 GOTHIC LETTER HAGL
+10338 GOTHIC LETTER THIUTH
+10339 GOTHIC LETTER EIS
+1033A GOTHIC LETTER KUSMA
+1033B GOTHIC LETTER LAGUS
+1033C GOTHIC LETTER MANNA
+1033D GOTHIC LETTER NAUTHS
+1033E GOTHIC LETTER JER
+1033F GOTHIC LETTER URUS
+10340 GOTHIC LETTER PAIRTHRA
+10341 GOTHIC LETTER NINETY
+10342 GOTHIC LETTER RAIDA
+10343 GOTHIC LETTER SAUIL
+10344 GOTHIC LETTER TEIWS
+10345 GOTHIC LETTER WINJA
+10346 GOTHIC LETTER FAIHU
+10347 GOTHIC LETTER IGGWS
+10348 GOTHIC LETTER HWAIR
+10349 GOTHIC LETTER OTHAL
+1034A GOTHIC LETTER NINE HUNDRED
+@@ 10380 Ugaritic 1039F
+@ Letters
+10380 UGARITIC LETTER ALPA
+10381 UGARITIC LETTER BETA
+10382 UGARITIC LETTER GAMLA
+10383 UGARITIC LETTER KHA
+10384 UGARITIC LETTER DELTA
+10385 UGARITIC LETTER HO
+10386 UGARITIC LETTER WO
+10387 UGARITIC LETTER ZETA
+10388 UGARITIC LETTER HOTA
+10389 UGARITIC LETTER TET
+1038A UGARITIC LETTER YOD
+1038B UGARITIC LETTER KAF
+1038C UGARITIC LETTER SHIN
+1038D UGARITIC LETTER LAMDA
+1038E UGARITIC LETTER MEM
+1038F UGARITIC LETTER DHAL
+10390 UGARITIC LETTER NUN
+10391 UGARITIC LETTER ZU
+10392 UGARITIC LETTER SAMKA
+10393 UGARITIC LETTER AIN
+10394 UGARITIC LETTER PU
+10395 UGARITIC LETTER SADE
+10396 UGARITIC LETTER QOPA
+10397 UGARITIC LETTER RASHA
+10398 UGARITIC LETTER THANNA
+10399 UGARITIC LETTER GHAIN
+1039A UGARITIC LETTER TO
+1039B UGARITIC LETTER I
+1039C UGARITIC LETTER U
+1039D UGARITIC LETTER SSU
+@ Punctuation
+1039F UGARITIC WORD DIVIDER
+@@ 103A0 Old Persian 103DF
+@ Independent vowels
+103A0 OLD PERSIAN SIGN A
+103A1 OLD PERSIAN SIGN I
+103A2 OLD PERSIAN SIGN U
+@ Consonants
+103A3 OLD PERSIAN SIGN KA
+103A4 OLD PERSIAN SIGN KU
+103A5 OLD PERSIAN SIGN GA
+103A6 OLD PERSIAN SIGN GU
+103A7 OLD PERSIAN SIGN XA
+103A8 OLD PERSIAN SIGN CA
+103A9 OLD PERSIAN SIGN JA
+103AA OLD PERSIAN SIGN JI
+103AB OLD PERSIAN SIGN TA
+103AC OLD PERSIAN SIGN TU
+103AD OLD PERSIAN SIGN DA
+103AE OLD PERSIAN SIGN DI
+103AF OLD PERSIAN SIGN DU
+103B0 OLD PERSIAN SIGN THA
+103B1 OLD PERSIAN SIGN PA
+103B2 OLD PERSIAN SIGN BA
+103B3 OLD PERSIAN SIGN FA
+103B4 OLD PERSIAN SIGN NA
+103B5 OLD PERSIAN SIGN NU
+103B6 OLD PERSIAN SIGN MA
+103B7 OLD PERSIAN SIGN MI
+103B8 OLD PERSIAN SIGN MU
+103B9 OLD PERSIAN SIGN YA
+103BA OLD PERSIAN SIGN VA
+103BB OLD PERSIAN SIGN VI
+103BC OLD PERSIAN SIGN RA
+103BD OLD PERSIAN SIGN RU
+103BE OLD PERSIAN SIGN LA
+103BF OLD PERSIAN SIGN SA
+103C0 OLD PERSIAN SIGN ZA
+103C1 OLD PERSIAN SIGN SHA
+103C2 OLD PERSIAN SIGN SSA
+103C3 OLD PERSIAN SIGN HA
+@ Various signs
+103C8 OLD PERSIAN SIGN AURAMAZDAA
+103C9 OLD PERSIAN SIGN AURAMAZDAA-2
+103CA OLD PERSIAN SIGN AURAMAZDAAHA
+103CB OLD PERSIAN SIGN XSHAAYATHIYA
+103CC OLD PERSIAN SIGN DAHYAAUSH
+103CD OLD PERSIAN SIGN DAHYAAUSH-2
+103CE OLD PERSIAN SIGN BAGA
+103CF OLD PERSIAN SIGN BUUMISH
+@ Punctuation
+103D0 OLD PERSIAN WORD DIVIDER
+@ Numbers
+103D1 OLD PERSIAN NUMBER ONE
+103D2 OLD PERSIAN NUMBER TWO
+103D3 OLD PERSIAN NUMBER TEN
+103D4 OLD PERSIAN NUMBER TWENTY
+103D5 OLD PERSIAN NUMBER HUNDRED
+@@ 10400 Deseret 1044F
+@ Uppercase letters
+10400 DESERET CAPITAL LETTER LONG I
+10401 DESERET CAPITAL LETTER LONG E
+10402 DESERET CAPITAL LETTER LONG A
+10403 DESERET CAPITAL LETTER LONG AH
+10404 DESERET CAPITAL LETTER LONG O
+10405 DESERET CAPITAL LETTER LONG OO
+10406 DESERET CAPITAL LETTER SHORT I
+10407 DESERET CAPITAL LETTER SHORT E
+10408 DESERET CAPITAL LETTER SHORT A
+10409 DESERET CAPITAL LETTER SHORT AH
+1040A DESERET CAPITAL LETTER SHORT O
+1040B DESERET CAPITAL LETTER SHORT OO
+1040C DESERET CAPITAL LETTER AY
+1040D DESERET CAPITAL LETTER OW
+1040E DESERET CAPITAL LETTER WU
+1040F DESERET CAPITAL LETTER YEE
+10410 DESERET CAPITAL LETTER H
+10411 DESERET CAPITAL LETTER PEE
+10412 DESERET CAPITAL LETTER BEE
+10413 DESERET CAPITAL LETTER TEE
+10414 DESERET CAPITAL LETTER DEE
+10415 DESERET CAPITAL LETTER CHEE
+10416 DESERET CAPITAL LETTER JEE
+10417 DESERET CAPITAL LETTER KAY
+10418 DESERET CAPITAL LETTER GAY
+10419 DESERET CAPITAL LETTER EF
+1041A DESERET CAPITAL LETTER VEE
+1041B DESERET CAPITAL LETTER ETH
+1041C DESERET CAPITAL LETTER THEE
+1041D DESERET CAPITAL LETTER ES
+1041E DESERET CAPITAL LETTER ZEE
+1041F DESERET CAPITAL LETTER ESH
+10420 DESERET CAPITAL LETTER ZHEE
+10421 DESERET CAPITAL LETTER ER
+10422 DESERET CAPITAL LETTER EL
+10423 DESERET CAPITAL LETTER EM
+10424 DESERET CAPITAL LETTER EN
+10425 DESERET CAPITAL LETTER ENG
+10426 DESERET CAPITAL LETTER OI
+10427 DESERET CAPITAL LETTER EW
+@ Lowercase letters
+10428 DESERET SMALL LETTER LONG I
+10429 DESERET SMALL LETTER LONG E
+1042A DESERET SMALL LETTER LONG A
+1042B DESERET SMALL LETTER LONG AH
+1042C DESERET SMALL LETTER LONG O
+1042D DESERET SMALL LETTER LONG OO
+1042E DESERET SMALL LETTER SHORT I
+1042F DESERET SMALL LETTER SHORT E
+10430 DESERET SMALL LETTER SHORT A
+10431 DESERET SMALL LETTER SHORT AH
+10432 DESERET SMALL LETTER SHORT O
+10433 DESERET SMALL LETTER SHORT OO
+10434 DESERET SMALL LETTER AY
+10435 DESERET SMALL LETTER OW
+10436 DESERET SMALL LETTER WU
+10437 DESERET SMALL LETTER YEE
+10438 DESERET SMALL LETTER H
+10439 DESERET SMALL LETTER PEE
+1043A DESERET SMALL LETTER BEE
+1043B DESERET SMALL LETTER TEE
+1043C DESERET SMALL LETTER DEE
+1043D DESERET SMALL LETTER CHEE
+1043E DESERET SMALL LETTER JEE
+1043F DESERET SMALL LETTER KAY
+10440 DESERET SMALL LETTER GAY
+10441 DESERET SMALL LETTER EF
+10442 DESERET SMALL LETTER VEE
+10443 DESERET SMALL LETTER ETH
+10444 DESERET SMALL LETTER THEE
+10445 DESERET SMALL LETTER ES
+10446 DESERET SMALL LETTER ZEE
+10447 DESERET SMALL LETTER ESH
+10448 DESERET SMALL LETTER ZHEE
+10449 DESERET SMALL LETTER ER
+1044A DESERET SMALL LETTER EL
+1044B DESERET SMALL LETTER EM
+1044C DESERET SMALL LETTER EN
+1044D DESERET SMALL LETTER ENG
+1044E DESERET SMALL LETTER OI
+1044F DESERET SMALL LETTER EW
+@@ 10450 Shavian 1047F
+@ Consonants
+10450 SHAVIAN LETTER PEEP
+10451 SHAVIAN LETTER TOT
+10452 SHAVIAN LETTER KICK
+10453 SHAVIAN LETTER FEE
+10454 SHAVIAN LETTER THIGH
+10455 SHAVIAN LETTER SO
+10456 SHAVIAN LETTER SURE
+10457 SHAVIAN LETTER CHURCH
+10458 SHAVIAN LETTER YEA
+10459 SHAVIAN LETTER HUNG
+1045A SHAVIAN LETTER BIB
+1045B SHAVIAN LETTER DEAD
+1045C SHAVIAN LETTER GAG
+1045D SHAVIAN LETTER VOW
+1045E SHAVIAN LETTER THEY
+1045F SHAVIAN LETTER ZOO
+10460 SHAVIAN LETTER MEASURE
+10461 SHAVIAN LETTER JUDGE
+10462 SHAVIAN LETTER WOE
+10463 SHAVIAN LETTER HA-HA
+10464 SHAVIAN LETTER LOLL
+10465 SHAVIAN LETTER MIME
+@ Vowels
+10466 SHAVIAN LETTER IF
+10467 SHAVIAN LETTER EGG
+10468 SHAVIAN LETTER ASH
+10469 SHAVIAN LETTER ADO
+1046A SHAVIAN LETTER ON
+1046B SHAVIAN LETTER WOOL
+1046C SHAVIAN LETTER OUT
+1046D SHAVIAN LETTER AH
+1046E SHAVIAN LETTER ROAR
+1046F SHAVIAN LETTER NUN
+10470 SHAVIAN LETTER EAT
+10471 SHAVIAN LETTER AGE
+10472 SHAVIAN LETTER ICE
+10473 SHAVIAN LETTER UP
+10474 SHAVIAN LETTER OAK
+10475 SHAVIAN LETTER OOZE
+10476 SHAVIAN LETTER OIL
+10477 SHAVIAN LETTER AWE
+10478 SHAVIAN LETTER ARE
+10479 SHAVIAN LETTER OR
+1047A SHAVIAN LETTER AIR
+1047B SHAVIAN LETTER ERR
+1047C SHAVIAN LETTER ARRAY
+1047D SHAVIAN LETTER EAR
+1047E SHAVIAN LETTER IAN
+1047F SHAVIAN LETTER YEW
+@@ 10480 Osmanya 104AF
+@ Letters
+10480 OSMANYA LETTER ALEF
+10481 OSMANYA LETTER BA
+10482 OSMANYA LETTER TA
+10483 OSMANYA LETTER JA
+10484 OSMANYA LETTER XA
+10485 OSMANYA LETTER KHA
+10486 OSMANYA LETTER DEEL
+10487 OSMANYA LETTER RA
+10488 OSMANYA LETTER SA
+10489 OSMANYA LETTER SHIIN
+1048A OSMANYA LETTER DHA
+1048B OSMANYA LETTER CAYN
+1048C OSMANYA LETTER GA
+1048D OSMANYA LETTER FA
+1048E OSMANYA LETTER QAAF
+1048F OSMANYA LETTER KAAF
+10490 OSMANYA LETTER LAAN
+10491 OSMANYA LETTER MIIN
+10492 OSMANYA LETTER NUUN
+10493 OSMANYA LETTER WAW
+10494 OSMANYA LETTER HA
+10495 OSMANYA LETTER YA
+10496 OSMANYA LETTER A
+10497 OSMANYA LETTER E
+10498 OSMANYA LETTER I
+10499 OSMANYA LETTER O
+1049A OSMANYA LETTER U
+1049B OSMANYA LETTER AA
+1049C OSMANYA LETTER EE
+1049D OSMANYA LETTER OO
+@ Digits
+104A0 OSMANYA DIGIT ZERO
+104A1 OSMANYA DIGIT ONE
+104A2 OSMANYA DIGIT TWO
+104A3 OSMANYA DIGIT THREE
+104A4 OSMANYA DIGIT FOUR
+104A5 OSMANYA DIGIT FIVE
+104A6 OSMANYA DIGIT SIX
+104A7 OSMANYA DIGIT SEVEN
+104A8 OSMANYA DIGIT EIGHT
+104A9 OSMANYA DIGIT NINE
+@@ 10800 Cypriot Syllabary 1083F
+@ Syllables
+10800 CYPRIOT SYLLABLE A
+10801 CYPRIOT SYLLABLE E
+10802 CYPRIOT SYLLABLE I
+10803 CYPRIOT SYLLABLE O
+10804 CYPRIOT SYLLABLE U
+10805 CYPRIOT SYLLABLE JA
+10808 CYPRIOT SYLLABLE JO
+1080A CYPRIOT SYLLABLE KA
+1080B CYPRIOT SYLLABLE KE
+1080C CYPRIOT SYLLABLE KI
+1080D CYPRIOT SYLLABLE KO
+1080E CYPRIOT SYLLABLE KU
+1080F CYPRIOT SYLLABLE LA
+10810 CYPRIOT SYLLABLE LE
+10811 CYPRIOT SYLLABLE LI
+10812 CYPRIOT SYLLABLE LO
+10813 CYPRIOT SYLLABLE LU
+10814 CYPRIOT SYLLABLE MA
+10815 CYPRIOT SYLLABLE ME
+10816 CYPRIOT SYLLABLE MI
+10817 CYPRIOT SYLLABLE MO
+10818 CYPRIOT SYLLABLE MU
+10819 CYPRIOT SYLLABLE NA
+1081A CYPRIOT SYLLABLE NE
+1081B CYPRIOT SYLLABLE NI
+1081C CYPRIOT SYLLABLE NO
+1081D CYPRIOT SYLLABLE NU
+1081E CYPRIOT SYLLABLE PA
+1081F CYPRIOT SYLLABLE PE
+10820 CYPRIOT SYLLABLE PI
+10821 CYPRIOT SYLLABLE PO
+10822 CYPRIOT SYLLABLE PU
+10823 CYPRIOT SYLLABLE RA
+10824 CYPRIOT SYLLABLE RE
+10825 CYPRIOT SYLLABLE RI
+10826 CYPRIOT SYLLABLE RO
+10827 CYPRIOT SYLLABLE RU
+10828 CYPRIOT SYLLABLE SA
+10829 CYPRIOT SYLLABLE SE
+1082A CYPRIOT SYLLABLE SI
+1082B CYPRIOT SYLLABLE SO
+1082C CYPRIOT SYLLABLE SU
+1082D CYPRIOT SYLLABLE TA
+1082E CYPRIOT SYLLABLE TE
+1082F CYPRIOT SYLLABLE TI
+10830 CYPRIOT SYLLABLE TO
+10831 CYPRIOT SYLLABLE TU
+10832 CYPRIOT SYLLABLE WA
+10833 CYPRIOT SYLLABLE WE
+10834 CYPRIOT SYLLABLE WI
+10835 CYPRIOT SYLLABLE WO
+10837 CYPRIOT SYLLABLE XA
+10838 CYPRIOT SYLLABLE XE
+1083C CYPRIOT SYLLABLE ZA
+1083F CYPRIOT SYLLABLE ZO
+@@ 10A00 Kharoshthi 10A5F
+@ Vowels
+10A00 KHAROSHTHI LETTER A
+10A01 KHAROSHTHI VOWEL SIGN I
+10A02 KHAROSHTHI VOWEL SIGN U
+10A03 KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05 KHAROSHTHI VOWEL SIGN E
+10A06 KHAROSHTHI VOWEL SIGN O
+@ Length mark
+10A0C KHAROSHTHI VOWEL LENGTH MARK
+@ Various signs
+10A0D KHAROSHTHI SIGN DOUBLE RING BELOW
+10A0E KHAROSHTHI SIGN ANUSVARA
+10A0F KHAROSHTHI SIGN VISARGA
+@ Consonants
+10A10 KHAROSHTHI LETTER KA
+10A11 KHAROSHTHI LETTER KHA
+10A12 KHAROSHTHI LETTER GA
+10A13 KHAROSHTHI LETTER GHA
+10A15 KHAROSHTHI LETTER CA
+10A16 KHAROSHTHI LETTER CHA
+10A17 KHAROSHTHI LETTER JA
+10A19 KHAROSHTHI LETTER NYA
+10A1A KHAROSHTHI LETTER TTA
+10A1B KHAROSHTHI LETTER TTHA
+10A1C KHAROSHTHI LETTER DDA
+10A1D KHAROSHTHI LETTER DDHA
+10A1E KHAROSHTHI LETTER NNA
+10A1F KHAROSHTHI LETTER TA
+10A20 KHAROSHTHI LETTER THA
+10A21 KHAROSHTHI LETTER DA
+10A22 KHAROSHTHI LETTER DHA
+10A23 KHAROSHTHI LETTER NA
+10A24 KHAROSHTHI LETTER PA
+10A25 KHAROSHTHI LETTER PHA
+10A26 KHAROSHTHI LETTER BA
+10A27 KHAROSHTHI LETTER BHA
+10A28 KHAROSHTHI LETTER MA
+10A29 KHAROSHTHI LETTER YA
+10A2A KHAROSHTHI LETTER RA
+10A2B KHAROSHTHI LETTER LA
+10A2C KHAROSHTHI LETTER VA
+10A2D KHAROSHTHI LETTER SHA
+10A2E KHAROSHTHI LETTER SSA
+10A2F KHAROSHTHI LETTER SA
+10A30 KHAROSHTHI LETTER ZA
+10A31 KHAROSHTHI LETTER HA
+10A32 KHAROSHTHI LETTER KKA
+10A33 KHAROSHTHI LETTER TTTHA
+@ Various signs
+10A38 KHAROSHTHI SIGN BAR ABOVE
+10A39 KHAROSHTHI SIGN CAUDA
+10A3A KHAROSHTHI SIGN DOT BELOW
+@ Virama
+10A3F KHAROSHTHI VIRAMA
+ = halant
+ * suppresses inherent vowel
+@ Digits
+10A40 KHAROSHTHI DIGIT ONE
+10A41 KHAROSHTHI DIGIT TWO
+10A42 KHAROSHTHI DIGIT THREE
+10A43 KHAROSHTHI DIGIT FOUR
+@ Numbers
+10A44 KHAROSHTHI NUMBER TEN
+10A45 KHAROSHTHI NUMBER TWENTY
+10A46 KHAROSHTHI NUMBER ONE HUNDRED
+10A47 KHAROSHTHI NUMBER ONE THOUSAND
+@ Punctuation
+10A50 KHAROSHTHI PUNCTUATION DOT
+10A51 KHAROSHTHI PUNCTUATION SMALL CIRCLE
+10A52 KHAROSHTHI PUNCTUATION CIRCLE
+10A53 KHAROSHTHI PUNCTUATION CRESCENT BAR
+10A54 KHAROSHTHI PUNCTUATION MANGALAM
+10A55 KHAROSHTHI PUNCTUATION LOTUS
+10A56 KHAROSHTHI PUNCTUATION DANDA
+10A57 KHAROSHTHI PUNCTUATION DOUBLE DANDA
+10A58 KHAROSHTHI PUNCTUATION LINES
+@@ 1D000 Byzantine Musical Symbols 1D0FF
+@ Prosodies (Prosodics)
+1D000 BYZANTINE MUSICAL SYMBOL PSILI
+1D001 BYZANTINE MUSICAL SYMBOL DASEIA
+1D002 BYZANTINE MUSICAL SYMBOL PERISPOMENI
+@ Ekfonetika
+1D003 BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON
+1D004 BYZANTINE MUSICAL SYMBOL OXEIA DIPLI
+1D005 BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON
+1D006 BYZANTINE MUSICAL SYMBOL VAREIA DIPLI
+1D007 BYZANTINE MUSICAL SYMBOL KATHISTI
+1D008 BYZANTINE MUSICAL SYMBOL SYRMATIKI
+1D009 BYZANTINE MUSICAL SYMBOL PARAKLITIKI
+1D00A BYZANTINE MUSICAL SYMBOL YPOKRISIS
+1D00B BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI
+1D00C BYZANTINE MUSICAL SYMBOL KREMASTI
+1D00D BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON
+1D00E BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON
+1D00F BYZANTINE MUSICAL SYMBOL TELEIA
+1D010 BYZANTINE MUSICAL SYMBOL KENTIMATA
+1D011 BYZANTINE MUSICAL SYMBOL APOSTROFOS
+1D012 BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI
+1D013 BYZANTINE MUSICAL SYMBOL SYNEVMA
+1D014 BYZANTINE MUSICAL SYMBOL THITA
+@ Melodimata (Melodics)
+1D015 BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION
+1D016 BYZANTINE MUSICAL SYMBOL GORGON ARCHAION
+1D017 BYZANTINE MUSICAL SYMBOL PSILON
+1D018 BYZANTINE MUSICAL SYMBOL CHAMILON
+1D019 BYZANTINE MUSICAL SYMBOL VATHY
+1D01A BYZANTINE MUSICAL SYMBOL ISON ARCHAION
+1D01B BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION
+1D01C BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION
+1D01D BYZANTINE MUSICAL SYMBOL SAXIMATA
+1D01E BYZANTINE MUSICAL SYMBOL PARICHON
+1D01F BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA
+1D020 BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION
+1D021 BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION
+1D022 BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION
+1D023 BYZANTINE MUSICAL SYMBOL APOTHEMA
+1D024 BYZANTINE MUSICAL SYMBOL KLASMA
+1D025 BYZANTINE MUSICAL SYMBOL REVMA
+1D026 BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION
+1D027 BYZANTINE MUSICAL SYMBOL TINAGMA
+1D028 BYZANTINE MUSICAL SYMBOL ANATRICHISMA
+1D029 BYZANTINE MUSICAL SYMBOL SEISMA
+1D02A BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION
+1D02B BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU
+1D02C BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION
+1D02D BYZANTINE MUSICAL SYMBOL THEMA
+1D02E BYZANTINE MUSICAL SYMBOL LEMOI
+1D02F BYZANTINE MUSICAL SYMBOL DYO
+1D030 BYZANTINE MUSICAL SYMBOL TRIA
+1D031 BYZANTINE MUSICAL SYMBOL TESSERA
+1D032 BYZANTINE MUSICAL SYMBOL KRATIMATA
+1D033 BYZANTINE MUSICAL SYMBOL APESO EXO NEO
+1D034 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION
+1D035 BYZANTINE MUSICAL SYMBOL IMIFTHORA
+1D036 BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION
+1D037 BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON
+1D038 BYZANTINE MUSICAL SYMBOL PELASTON
+1D039 BYZANTINE MUSICAL SYMBOL PSIFISTON
+1D03A BYZANTINE MUSICAL SYMBOL KONTEVMA
+1D03B BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION
+1D03C BYZANTINE MUSICAL SYMBOL RAPISMA
+1D03D BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION
+1D03E BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION
+1D03F BYZANTINE MUSICAL SYMBOL ICHADIN
+1D040 BYZANTINE MUSICAL SYMBOL NANA
+1D041 BYZANTINE MUSICAL SYMBOL PETASMA
+1D042 BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO
+1D043 BYZANTINE MUSICAL SYMBOL TROMIKON ALLO
+1D044 BYZANTINE MUSICAL SYMBOL STRAGGISMATA
+1D045 BYZANTINE MUSICAL SYMBOL GRONTHISMATA
+@ Fonitika (Vocals)
+1D046 BYZANTINE MUSICAL SYMBOL ISON NEO
+1D047 BYZANTINE MUSICAL SYMBOL OLIGON NEO
+1D048 BYZANTINE MUSICAL SYMBOL OXEIA NEO
+1D049 BYZANTINE MUSICAL SYMBOL PETASTI
+1D04A BYZANTINE MUSICAL SYMBOL KOUFISMA
+1D04B BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA
+1D04C BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA
+1D04D BYZANTINE MUSICAL SYMBOL PELASTON NEO
+1D04E BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO
+1D04F BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO
+1D050 BYZANTINE MUSICAL SYMBOL YPSILI
+1D051 BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO
+1D052 BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO
+1D053 BYZANTINE MUSICAL SYMBOL YPORROI
+1D054 BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON
+1D055 BYZANTINE MUSICAL SYMBOL ELAFRON
+1D056 BYZANTINE MUSICAL SYMBOL CHAMILI
+@ Afona or Ypostaseis (Mutes or Hypostases)
+1D057 BYZANTINE MUSICAL SYMBOL MIKRON ISON
+1D058 BYZANTINE MUSICAL SYMBOL VAREIA NEO
+1D059 BYZANTINE MUSICAL SYMBOL PIASMA NEO
+1D05A BYZANTINE MUSICAL SYMBOL PSIFISTON NEO
+1D05B BYZANTINE MUSICAL SYMBOL OMALON
+1D05C BYZANTINE MUSICAL SYMBOL ANTIKENOMA
+1D05D BYZANTINE MUSICAL SYMBOL LYGISMA
+1D05E BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO
+1D05F BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO
+1D060 BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA
+1D061 BYZANTINE MUSICAL SYMBOL KYLISMA
+1D062 BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA
+1D063 BYZANTINE MUSICAL SYMBOL TROMIKON NEO
+1D064 BYZANTINE MUSICAL SYMBOL EKSTREPTON
+1D065 BYZANTINE MUSICAL SYMBOL SYNAGMA NEO
+1D066 BYZANTINE MUSICAL SYMBOL SYRMA
+1D067 BYZANTINE MUSICAL SYMBOL CHOREVMA NEO
+1D068 BYZANTINE MUSICAL SYMBOL EPEGERMA
+1D069 BYZANTINE MUSICAL SYMBOL SEISMA NEO
+1D06A BYZANTINE MUSICAL SYMBOL XIRON KLASMA
+1D06B BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON
+1D06C BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA
+1D06D BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA
+1D06E BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA
+1D06F BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA
+1D070 BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA
+1D071 BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA
+1D072 BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON
+1D073 BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON
+1D074 BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON
+1D075 BYZANTINE MUSICAL SYMBOL OYRANISMA NEO
+1D076 BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO
+1D077 BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO
+1D078 BYZANTINE MUSICAL SYMBOL THEMA APLOUN
+1D079 BYZANTINE MUSICAL SYMBOL THES KAI APOTHES
+1D07A BYZANTINE MUSICAL SYMBOL KATAVASMA
+1D07B BYZANTINE MUSICAL SYMBOL ENDOFONON
+1D07C BYZANTINE MUSICAL SYMBOL YFEN KATO
+1D07D BYZANTINE MUSICAL SYMBOL YFEN ANO
+1D07E BYZANTINE MUSICAL SYMBOL STAVROS
+@ Argies (Retards)
+1D07F BYZANTINE MUSICAL SYMBOL KLASMA ANO
+1D080 BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION
+1D081 BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION
+1D082 BYZANTINE MUSICAL SYMBOL KRATIMA ALLO
+1D083 BYZANTINE MUSICAL SYMBOL KRATIMA NEO
+1D084 BYZANTINE MUSICAL SYMBOL APODERMA NEO
+1D085 BYZANTINE MUSICAL SYMBOL APLI
+1D086 BYZANTINE MUSICAL SYMBOL DIPLI
+1D087 BYZANTINE MUSICAL SYMBOL TRIPLI
+1D088 BYZANTINE MUSICAL SYMBOL TETRAPLI
+1D089 BYZANTINE MUSICAL SYMBOL KORONIS
+@ Leimmata or Siopes (Leimmas or Silencers)
+1D08A BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU
+1D08B BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON
+1D08C BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON
+1D08D BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON
+1D08E BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU
+@ Synagmata or Gorgotites (Synagmas or Quickeners)
+1D08F BYZANTINE MUSICAL SYMBOL GORGON NEO ANO
+1D090 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA
+1D091 BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA
+1D092 BYZANTINE MUSICAL SYMBOL DIGORGON
+1D093 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO
+1D094 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO
+1D095 BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA
+1D096 BYZANTINE MUSICAL SYMBOL TRIGORGON
+1D097 BYZANTINE MUSICAL SYMBOL ARGON
+1D098 BYZANTINE MUSICAL SYMBOL IMIDIARGON
+1D099 BYZANTINE MUSICAL SYMBOL DIARGON
+@ Agogika (Conduits)
+1D09A BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI
+1D09B BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI
+1D09C BYZANTINE MUSICAL SYMBOL AGOGI ARGI
+1D09D BYZANTINE MUSICAL SYMBOL AGOGI METRIA
+1D09E BYZANTINE MUSICAL SYMBOL AGOGI MESI
+1D09F BYZANTINE MUSICAL SYMBOL AGOGI GORGI
+1D0A0 BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI
+1D0A1 BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI
+@ Ichimata and Martyrika (Ichimas and Evidentials)
+1D0A2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS
+1D0A3 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS
+1D0A4 BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS
+1D0A5 BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS
+1D0A6 BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS
+1D0A7 BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS
+1D0A8 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS
+1D0A9 BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS
+1D0AA BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS
+1D0AB BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS
+1D0AC BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS
+1D0AD BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS
+1D0AE BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS
+1D0AF BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS
+1D0B0 BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS
+1D0B1 BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS
+1D0B2 BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS
+1D0B3 BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS
+1D0B4 BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN
+@ Fthores (Destroyers)
+1D0B5 BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN
+1D0B6 BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU
+1D0B7 BYZANTINE MUSICAL SYMBOL IMIFONON
+1D0B8 BYZANTINE MUSICAL SYMBOL IMIFTHORON
+1D0B9 BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU
+1D0BA BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA
+1D0BB BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA
+1D0BC BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS
+1D0BD BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI
+1D0BE BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI
+1D0BF BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE
+1D0C0 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO
+1D0C1 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO
+1D0C2 BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO
+1D0C3 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS
+1D0C4 BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS
+1D0C5 BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS
+ * misspelling of "FTHORA" in character name is a known defect
+1D0C6 BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI
+1D0C7 BYZANTINE MUSICAL SYMBOL FTHORA NENANO
+1D0C8 BYZANTINE MUSICAL SYMBOL CHROA ZYGOS
+1D0C9 BYZANTINE MUSICAL SYMBOL CHROA KLITON
+@ Alloioseis (Differentiators)
+1D0CA BYZANTINE MUSICAL SYMBOL CHROA SPATHI
+1D0CB BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION
+1D0CC BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA
+1D0CD BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION
+1D0CE BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION
+1D0CF BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION
+1D0D0 BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA
+1D0D1 BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D2 BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA
+1D0D3 BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA
+1D0D4 BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA
+1D0D5 BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA
+1D0D6 BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA
+1D0D7 BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA
+1D0D8 BYZANTINE MUSICAL SYMBOL GENIKI DIESIS
+@ Rythmika (Rhythmics)
+1D0D9 BYZANTINE MUSICAL SYMBOL GENIKI YFESIS
+1D0DA BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI
+1D0DB BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI
+1D0DC BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI
+1D0DD BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS
+1D0DE BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS
+1D0DF BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU
+1D0E0 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU
+1D0E1 BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU
+1D0E2 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS
+1D0E3 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU
+1D0E4 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU
+@ Grammata (Letters)
+1D0E5 BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU
+1D0E6 BYZANTINE MUSICAL SYMBOL DIGRAMMA GG
+1D0E7 BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU
+1D0E8 BYZANTINE MUSICAL SYMBOL STIGMA
+1D0E9 BYZANTINE MUSICAL SYMBOL ARKTIKO PA
+1D0EA BYZANTINE MUSICAL SYMBOL ARKTIKO VOU
+1D0EB BYZANTINE MUSICAL SYMBOL ARKTIKO GA
+1D0EC BYZANTINE MUSICAL SYMBOL ARKTIKO DI
+1D0ED BYZANTINE MUSICAL SYMBOL ARKTIKO KE
+1D0EE BYZANTINE MUSICAL SYMBOL ARKTIKO ZO
+1D0EF BYZANTINE MUSICAL SYMBOL ARKTIKO NI
+@ Specials
+1D0F0 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO
+1D0F1 BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO
+1D0F2 BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO
+1D0F3 BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO
+1D0F4 BYZANTINE MUSICAL SYMBOL KLASMA KATO
+1D0F5 BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+@@ 1D100 Musical Symbols 1D1FF
+@ Bars
+1D100 MUSICAL SYMBOL SINGLE BARLINE
+1D101 MUSICAL SYMBOL DOUBLE BARLINE
+1D102 MUSICAL SYMBOL FINAL BARLINE
+1D103 MUSICAL SYMBOL REVERSE FINAL BARLINE
+1D104 MUSICAL SYMBOL DASHED BARLINE
+1D105 MUSICAL SYMBOL SHORT BARLINE
+@ Codas
+1D106 MUSICAL SYMBOL LEFT REPEAT SIGN
+1D107 MUSICAL SYMBOL RIGHT REPEAT SIGN
+1D108 MUSICAL SYMBOL REPEAT DOTS
+1D109 MUSICAL SYMBOL DAL SEGNO
+1D10A MUSICAL SYMBOL DA CAPO
+1D10B MUSICAL SYMBOL SEGNO
+1D10C MUSICAL SYMBOL CODA
+@ Figure repetitions
+1D10D MUSICAL SYMBOL REPEATED FIGURE-1
+1D10E MUSICAL SYMBOL REPEATED FIGURE-2
+1D10F MUSICAL SYMBOL REPEATED FIGURE-3
+@ Holds and pauses
+1D110 MUSICAL SYMBOL FERMATA
+1D111 MUSICAL SYMBOL FERMATA BELOW
+1D112 MUSICAL SYMBOL BREATH MARK
+1D113 MUSICAL SYMBOL CAESURA
+@ Staff brackets
+1D114 MUSICAL SYMBOL BRACE
+1D115 MUSICAL SYMBOL BRACKET
+@ Staves
+1D116 MUSICAL SYMBOL ONE-LINE STAFF
+1D117 MUSICAL SYMBOL TWO-LINE STAFF
+1D118 MUSICAL SYMBOL THREE-LINE STAFF
+1D119 MUSICAL SYMBOL FOUR-LINE STAFF
+1D11A MUSICAL SYMBOL FIVE-LINE STAFF
+1D11B MUSICAL SYMBOL SIX-LINE STAFF
+@ Tablature
+1D11C MUSICAL SYMBOL SIX-STRING FRETBOARD
+1D11D MUSICAL SYMBOL FOUR-STRING FRETBOARD
+@ Clefs
+1D11E MUSICAL SYMBOL G CLEF
+1D11F MUSICAL SYMBOL G CLEF OTTAVA ALTA
+1D120 MUSICAL SYMBOL G CLEF OTTAVA BASSA
+1D121 MUSICAL SYMBOL C CLEF
+1D122 MUSICAL SYMBOL F CLEF
+1D123 MUSICAL SYMBOL F CLEF OTTAVA ALTA
+1D124 MUSICAL SYMBOL F CLEF OTTAVA BASSA
+1D125 MUSICAL SYMBOL DRUM CLEF-1
+1D126 MUSICAL SYMBOL DRUM CLEF-2
+@ Accidentals
+1D127 <reserved>
+ x (music flat sign - 266D)
+1D128 <reserved>
+ x (music natural sign - 266E)
+1D129 <reserved>
+ x (music sharp sign - 266F)
+1D12A MUSICAL SYMBOL DOUBLE SHARP
+1D12B MUSICAL SYMBOL DOUBLE FLAT
+1D12C MUSICAL SYMBOL FLAT UP
+1D12D MUSICAL SYMBOL FLAT DOWN
+1D12E MUSICAL SYMBOL NATURAL UP
+1D12F MUSICAL SYMBOL NATURAL DOWN
+1D130 MUSICAL SYMBOL SHARP UP
+1D131 MUSICAL SYMBOL SHARP DOWN
+1D132 MUSICAL SYMBOL QUARTER TONE SHARP
+1D133 MUSICAL SYMBOL QUARTER TONE FLAT
+@ Time signatures
+1D134 MUSICAL SYMBOL COMMON TIME
+1D135 MUSICAL SYMBOL CUT TIME
+@ Octaves
+1D136 MUSICAL SYMBOL OTTAVA ALTA
+1D137 MUSICAL SYMBOL OTTAVA BASSA
+1D138 MUSICAL SYMBOL QUINDICESIMA ALTA
+1D139 MUSICAL SYMBOL QUINDICESIMA BASSA
+@ Rests
+1D13A MUSICAL SYMBOL MULTI REST
+1D13B MUSICAL SYMBOL WHOLE REST
+1D13C MUSICAL SYMBOL HALF REST
+1D13D MUSICAL SYMBOL QUARTER REST
+1D13E MUSICAL SYMBOL EIGHTH REST
+1D13F MUSICAL SYMBOL SIXTEENTH REST
+1D140 MUSICAL SYMBOL THIRTY-SECOND REST
+1D141 MUSICAL SYMBOL SIXTY-FOURTH REST
+1D142 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST
+@ Noteheads
+1D143 MUSICAL SYMBOL X NOTEHEAD
+1D144 MUSICAL SYMBOL PLUS NOTEHEAD
+1D145 MUSICAL SYMBOL CIRCLE X NOTEHEAD
+1D146 MUSICAL SYMBOL SQUARE NOTEHEAD WHITE
+1D147 MUSICAL SYMBOL SQUARE NOTEHEAD BLACK
+1D148 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE
+1D149 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK
+1D14A MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE
+1D14B MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK
+1D14C MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE
+1D14D MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK
+1D14E MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE
+1D14F MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK
+1D150 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE
+1D151 MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK
+1D152 MUSICAL SYMBOL MOON NOTEHEAD WHITE
+1D153 MUSICAL SYMBOL MOON NOTEHEAD BLACK
+1D154 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE
+1D155 MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK
+1D156 MUSICAL SYMBOL PARENTHESIS NOTEHEAD
+1D157 MUSICAL SYMBOL VOID NOTEHEAD
+1D158 MUSICAL SYMBOL NOTEHEAD BLACK
+1D159 MUSICAL SYMBOL NULL NOTEHEAD
+1D15A MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE
+1D15B MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK
+@ Notes
+1D15C MUSICAL SYMBOL BREVE
+1D15D MUSICAL SYMBOL WHOLE NOTE
+1D15E MUSICAL SYMBOL HALF NOTE
+ : 1D157 1D165
+1D15F MUSICAL SYMBOL QUARTER NOTE
+ : 1D158 1D165
+1D160 MUSICAL SYMBOL EIGHTH NOTE
+ : 1D15F 1D16E
+1D161 MUSICAL SYMBOL SIXTEENTH NOTE
+ : 1D15F 1D16F
+1D162 MUSICAL SYMBOL THIRTY-SECOND NOTE
+ : 1D15F 1D170
+1D163 MUSICAL SYMBOL SIXTY-FOURTH NOTE
+ : 1D15F 1D171
+1D164 MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+ : 1D15F 1D172
+@ Stems
+1D165 MUSICAL SYMBOL COMBINING STEM
+1D166 MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+@ Tremolos
+1D167 MUSICAL SYMBOL COMBINING TREMOLO-1
+1D168 MUSICAL SYMBOL COMBINING TREMOLO-2
+1D169 MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16A MUSICAL SYMBOL FINGERED TREMOLO-1
+1D16B MUSICAL SYMBOL FINGERED TREMOLO-2
+1D16C MUSICAL SYMBOL FINGERED TREMOLO-3
+@ Augmentation dot
+1D16D MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+@ Flags
+1D16E MUSICAL SYMBOL COMBINING FLAG-1
+1D16F MUSICAL SYMBOL COMBINING FLAG-2
+1D170 MUSICAL SYMBOL COMBINING FLAG-3
+1D171 MUSICAL SYMBOL COMBINING FLAG-4
+1D172 MUSICAL SYMBOL COMBINING FLAG-5
+@ Beams and slurs
+1D173 MUSICAL SYMBOL BEGIN BEAM
+1D174 MUSICAL SYMBOL END BEAM
+1D175 MUSICAL SYMBOL BEGIN TIE
+1D176 MUSICAL SYMBOL END TIE
+1D177 MUSICAL SYMBOL BEGIN SLUR
+1D178 MUSICAL SYMBOL END SLUR
+1D179 MUSICAL SYMBOL BEGIN PHRASE
+1D17A MUSICAL SYMBOL END PHRASE
+@ Articulation
+1D17B MUSICAL SYMBOL COMBINING ACCENT
+1D17C MUSICAL SYMBOL COMBINING STACCATO
+1D17D MUSICAL SYMBOL COMBINING TENUTO
+1D17E MUSICAL SYMBOL COMBINING STACCATISSIMO
+1D17F MUSICAL SYMBOL COMBINING MARCATO
+1D180 MUSICAL SYMBOL COMBINING MARCATO-STACCATO
+1D181 MUSICAL SYMBOL COMBINING ACCENT-STACCATO
+1D182 MUSICAL SYMBOL COMBINING LOURE
+1D183 MUSICAL SYMBOL ARPEGGIATO UP
+1D184 MUSICAL SYMBOL ARPEGGIATO DOWN
+1D185 MUSICAL SYMBOL COMBINING DOIT
+1D186 MUSICAL SYMBOL COMBINING RIP
+1D187 MUSICAL SYMBOL COMBINING FLIP
+1D188 MUSICAL SYMBOL COMBINING SMEAR
+1D189 MUSICAL SYMBOL COMBINING BEND
+1D18A MUSICAL SYMBOL COMBINING DOUBLE TONGUE
+1D18B MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D18C MUSICAL SYMBOL RINFORZANDO
+1D18D MUSICAL SYMBOL SUBITO
+1D18E MUSICAL SYMBOL Z
+@ Dynamics
+1D18F MUSICAL SYMBOL PIANO
+1D190 MUSICAL SYMBOL MEZZO
+1D191 MUSICAL SYMBOL FORTE
+1D192 MUSICAL SYMBOL CRESCENDO
+1D193 MUSICAL SYMBOL DECRESCENDO
+@ Ornaments
+1D194 MUSICAL SYMBOL GRACE NOTE SLASH
+1D195 MUSICAL SYMBOL GRACE NOTE NO SLASH
+1D196 MUSICAL SYMBOL TR
+1D197 MUSICAL SYMBOL TURN
+1D198 MUSICAL SYMBOL INVERTED TURN
+1D199 MUSICAL SYMBOL TURN SLASH
+1D19A MUSICAL SYMBOL TURN UP
+1D19B MUSICAL SYMBOL ORNAMENT STROKE-1
+1D19C MUSICAL SYMBOL ORNAMENT STROKE-2
+1D19D MUSICAL SYMBOL ORNAMENT STROKE-3
+1D19E MUSICAL SYMBOL ORNAMENT STROKE-4
+1D19F MUSICAL SYMBOL ORNAMENT STROKE-5
+1D1A0 MUSICAL SYMBOL ORNAMENT STROKE-6
+1D1A1 MUSICAL SYMBOL ORNAMENT STROKE-7
+1D1A2 MUSICAL SYMBOL ORNAMENT STROKE-8
+1D1A3 MUSICAL SYMBOL ORNAMENT STROKE-9
+1D1A4 MUSICAL SYMBOL ORNAMENT STROKE-10
+1D1A5 MUSICAL SYMBOL ORNAMENT STROKE-11
+@ Analytics
+1D1A6 MUSICAL SYMBOL HAUPTSTIMME
+1D1A7 MUSICAL SYMBOL NEBENSTIMME
+1D1A8 MUSICAL SYMBOL END OF STIMME
+1D1A9 MUSICAL SYMBOL DEGREE SLASH
+@ Instrumentation
+1D1AA MUSICAL SYMBOL COMBINING DOWN BOW
+1D1AB MUSICAL SYMBOL COMBINING UP BOW
+1D1AC MUSICAL SYMBOL COMBINING HARMONIC
+1D1AD MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+@ Pedals
+1D1AE MUSICAL SYMBOL PEDAL MARK
+1D1AF MUSICAL SYMBOL PEDAL UP MARK
+1D1B0 MUSICAL SYMBOL HALF PEDAL MARK
+@ Miscellaneous symbols
+1D1B1 MUSICAL SYMBOL GLISSANDO UP
+1D1B2 MUSICAL SYMBOL GLISSANDO DOWN
+1D1B3 MUSICAL SYMBOL WITH FINGERNAILS
+1D1B4 MUSICAL SYMBOL DAMP
+1D1B5 MUSICAL SYMBOL DAMP ALL
+@ Mensural notation
+1D1B6 MUSICAL SYMBOL MAXIMA
+1D1B7 MUSICAL SYMBOL LONGA
+1D1B8 MUSICAL SYMBOL BREVIS
+1D1B9 MUSICAL SYMBOL SEMIBREVIS WHITE
+1D1BA MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1BB MUSICAL SYMBOL MINIMA
+ : 1D1B9 1D165
+1D1BC MUSICAL SYMBOL MINIMA BLACK
+ : 1D1BA 1D165
+1D1BD MUSICAL SYMBOL SEMIMINIMA WHITE
+ : 1D1BB 1D16E
+1D1BE MUSICAL SYMBOL SEMIMINIMA BLACK
+ : 1D1BC 1D16E
+1D1BF MUSICAL SYMBOL FUSA WHITE
+ : 1D1BB 1D16F
+1D1C0 MUSICAL SYMBOL FUSA BLACK
+ : 1D1BC 1D16F
+@ Mensural rests
+1D1C1 MUSICAL SYMBOL LONGA PERFECTA REST
+1D1C2 MUSICAL SYMBOL LONGA IMPERFECTA REST
+1D1C3 MUSICAL SYMBOL BREVIS REST
+1D1C4 MUSICAL SYMBOL SEMIBREVIS REST
+1D1C5 MUSICAL SYMBOL MINIMA REST
+1D1C6 MUSICAL SYMBOL SEMIMINIMA REST
+@ Mensural prolations
+1D1C7 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA
+1D1C8 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA
+1D1C9 MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1
+1D1CA MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA
+1D1CB MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA
+1D1CC MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1
+1D1CD MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2
+1D1CE MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3
+@ Miscellaneous symbol
+1D1CF MUSICAL SYMBOL CROIX
+@ Gregorian notation
+1D1D0 MUSICAL SYMBOL GREGORIAN C CLEF
+1D1D1 MUSICAL SYMBOL GREGORIAN F CLEF
+1D1D2 MUSICAL SYMBOL SQUARE B
+1D1D3 MUSICAL SYMBOL VIRGA
+1D1D4 MUSICAL SYMBOL PODATUS
+1D1D5 MUSICAL SYMBOL CLIVIS
+1D1D6 MUSICAL SYMBOL SCANDICUS
+1D1D7 MUSICAL SYMBOL CLIMACUS
+1D1D8 MUSICAL SYMBOL TORCULUS
+1D1D9 MUSICAL SYMBOL PORRECTUS
+1D1DA MUSICAL SYMBOL PORRECTUS FLEXUS
+1D1DB MUSICAL SYMBOL SCANDICUS FLEXUS
+1D1DC MUSICAL SYMBOL TORCULUS RESUPINUS
+1D1DD MUSICAL SYMBOL PES SUBPUNCTIS
+@@ 1D200 Ancient Greek Musical Notation 1D24F
+@ Ancient Greek vocalic notation
+@+ In a few instances vocalic and instrumental symbols have been unified with each other. In other instances they have been unified with regular Greek letters.
+1D200 GREEK VOCAL NOTATION SYMBOL-1
+ * vocal E
+1D201 GREEK VOCAL NOTATION SYMBOL-2
+ * vocal first sharp of E
+1D202 GREEK VOCAL NOTATION SYMBOL-3
+ = Greek instrumental notation symbol-3
+ * vocal or instrumental second sharp of E
+1D203 GREEK VOCAL NOTATION SYMBOL-4
+ * vocal F
+1D204 GREEK VOCAL NOTATION SYMBOL-5
+ * vocal first sharp of F
+1D205 GREEK VOCAL NOTATION SYMBOL-6
+ = Greek instrumental notation symbol-21
+ * vocal second sharp of F
+ * instrumental second sharp of d
+1D206 GREEK VOCAL NOTATION SYMBOL-7
+ = Greek instrumental notation symbol-9
+ * vocal G
+ * instrumental second sharp of G
+1D207 GREEK VOCAL NOTATION SYMBOL-8
+ * vocal first sharp of G
+1D208 GREEK VOCAL NOTATION SYMBOL-9
+ = Greek instrumental notation symbol-44
+ * vocal second sharp of G
+ * instrumental first sharp of e´
+1D209 GREEK VOCAL NOTATION SYMBOL-10
+ * vocal A
+ * this is a modification of 039F and is therefore not the same as 03D8
+1D20A GREEK VOCAL NOTATION SYMBOL-11
+ * vocal first sharp of A
+1D20B GREEK VOCAL NOTATION SYMBOL-12
+ * vocal second sharp of A
+1D20C GREEK VOCAL NOTATION SYMBOL-13
+ * vocal B
+1D20D GREEK VOCAL NOTATION SYMBOL-14
+ = Greek instrumental notation symbol-41
+ * vocal first sharp of B
+ * instrumental first sharp of d´
+ x (latin capital letter v - 0056)
+1D20E GREEK VOCAL NOTATION SYMBOL-15
+ = Greek instrumental notation symbol-35
+ * vocal second sharp of B
+ * instrumental first sharp of b
+1D20F GREEK VOCAL NOTATION SYMBOL-16
+ * vocal c
+ * unlike 1D23B this character has a glyph variant that looks like a horizontal line
+1D210 GREEK VOCAL NOTATION SYMBOL-17
+ * vocal first sharp of c
+1D211 GREEK VOCAL NOTATION SYMBOL-18
+ = Greek instrumental notation symbol-15
+ * vocal second sharp of c
+ * instrumental second sharp of B
+1D212 GREEK VOCAL NOTATION SYMBOL-19
+ * vocal d
+1D213 GREEK VOCAL NOTATION SYMBOL-20
+ = Greek instrumental notation symbol-28
+ * vocal first sharp of d
+ * instrumental g
+ * this is a modification of 0395 and is therefore not the same as 0046
+1D214 GREEK VOCAL NOTATION SYMBOL-21
+ * vocal second sharp of d
+1D215 GREEK VOCAL NOTATION SYMBOL-22
+ * vocal e
+1D216 GREEK VOCAL NOTATION SYMBOL-23
+ * vocal first sharp of e
+ * this is a modification of 0392 and is therefore not the same as 0052
+1D217 GREEK VOCAL NOTATION SYMBOL-24
+ * vocal second sharp of e
+1D218 GREEK VOCAL NOTATION SYMBOL-50
+ * vocal first sharp of g´
+1D219 GREEK VOCAL NOTATION SYMBOL-51
+ * vocal second sharp of g´
+1D21A GREEK VOCAL NOTATION SYMBOL-52
+ * vocal a´
+1D21B GREEK VOCAL NOTATION SYMBOL-53
+ * vocal first sharp of a´
+1D21C GREEK VOCAL NOTATION SYMBOL-54
+ = Greek instrumental notation symbol-20
+ * vocal second sharp of a´
+ * instrumental first sharp of d
+@ Ancient Greek instrumental notation
+1D21D GREEK INSTRUMENTAL NOTATION SYMBOL-1
+ * instrumental E
+1D21E GREEK INSTRUMENTAL NOTATION SYMBOL-2
+ * instrumental first sharp of e
+1D21F GREEK INSTRUMENTAL NOTATION SYMBOL-4
+ * instrumental F
+1D220 GREEK INSTRUMENTAL NOTATION SYMBOL-5
+ * instrumental first sharp of F
+1D221 GREEK INSTRUMENTAL NOTATION SYMBOL-7
+ * instrumental G
+1D222 GREEK INSTRUMENTAL NOTATION SYMBOL-8
+ * instrumental first sharp of G
+1D223 GREEK INSTRUMENTAL NOTATION SYMBOL-11
+ * instrumental first sharp of A
+1D224 GREEK INSTRUMENTAL NOTATION SYMBOL-12
+ * instrumental second sharp of A
+1D225 GREEK INSTRUMENTAL NOTATION SYMBOL-13
+ * instrumental B
+1D226 GREEK INSTRUMENTAL NOTATION SYMBOL-14
+ * instrumental first sharp of B
+1D227 GREEK INSTRUMENTAL NOTATION SYMBOL-17
+ * instrumental first sharp of c
+1D228 GREEK INSTRUMENTAL NOTATION SYMBOL-18
+ * instrumental second sharp of c
+1D229 GREEK INSTRUMENTAL NOTATION SYMBOL-19
+ * instrumental d
+1D22A GREEK INSTRUMENTAL NOTATION SYMBOL-23
+ * instrumental first sharp of e
+1D22B GREEK INSTRUMENTAL NOTATION SYMBOL-24
+ * instrumental second sharp of e
+1D22C GREEK INSTRUMENTAL NOTATION SYMBOL-25
+ * instrumental f
+1D22D GREEK INSTRUMENTAL NOTATION SYMBOL-26
+ * instrumental first sharp of f
+1D22E GREEK INSTRUMENTAL NOTATION SYMBOL-27
+ * instrumental second sharp of f
+1D22F GREEK INSTRUMENTAL NOTATION SYMBOL-29
+ * instrumental first sharp of g
+1D230 GREEK INSTRUMENTAL NOTATION SYMBOL-30
+ * instrumental second sharp of g
+1D231 GREEK INSTRUMENTAL NOTATION SYMBOL-32
+ * instrumental first sharp of a
+1D232 GREEK INSTRUMENTAL NOTATION SYMBOL-36
+ * instrumental second sharp of b
+1D233 GREEK INSTRUMENTAL NOTATION SYMBOL-37
+ * instrumental c´
+1D234 GREEK INSTRUMENTAL NOTATION SYMBOL-38
+ * instrumental first sharp of c´
+1D235 GREEK INSTRUMENTAL NOTATION SYMBOL-39
+ * instrumental second sharp of c´
+1D236 GREEK INSTRUMENTAL NOTATION SYMBOL-40
+ * instrumental d´
+1D237 GREEK INSTRUMENTAL NOTATION SYMBOL-42
+ * instrumental second sharp of d´
+1D238 GREEK INSTRUMENTAL NOTATION SYMBOL-43
+ * instrumental e´
+1D239 GREEK INSTRUMENTAL NOTATION SYMBOL-45
+ * instrumental second sharp of e´
+1D23A GREEK INSTRUMENTAL NOTATION SYMBOL-47
+ * instrumental first sharp of f´
+ * similar but not identical to 002F
+1D23B GREEK INSTRUMENTAL NOTATION SYMBOL-48
+ * instrumental second sharp of f´
+ * similar but not identical to 005C
+1D23C GREEK INSTRUMENTAL NOTATION SYMBOL-49
+ * instrumental g´
+1D23D GREEK INSTRUMENTAL NOTATION SYMBOL-50
+ * instrumental first sharp of g´
+1D23E GREEK INSTRUMENTAL NOTATION SYMBOL-51
+ * instrumental second sharp of g´
+1D23F GREEK INSTRUMENTAL NOTATION SYMBOL-52
+ * instrumental a´
+1D240 GREEK INSTRUMENTAL NOTATION SYMBOL-53
+ * instrumental first sharp of a´
+1D241 GREEK INSTRUMENTAL NOTATION SYMBOL-54
+ * instrumental second sharp of a´
+@ Further Greek musical notation symbols
+1D242 COMBINING GREEK MUSICAL TRISEME
+ x (metrical triseme - 23D7)
+1D243 COMBINING GREEK MUSICAL TETRASEME
+ x (metrical tetraseme - 23D8)
+1D244 COMBINING GREEK MUSICAL PENTASEME
+ x (metrical pentaseme - 23D9)
+1D245 GREEK MUSICAL LEIMMA
+@@ 1D300 Tai Xuan Jing Symbols 1D35F
+@ Monogram
+1D300 MONOGRAM FOR EARTH
+@ Digrams
+1D301 DIGRAM FOR HEAVENLY EARTH
+1D302 DIGRAM FOR HUMAN EARTH
+1D303 DIGRAM FOR EARTHLY HEAVEN
+1D304 DIGRAM FOR EARTHLY HUMAN
+1D305 DIGRAM FOR EARTH
+@ Tetragrams
+1D306 TETRAGRAM FOR CENTRE
+1D307 TETRAGRAM FOR FULL CIRCLE
+1D308 TETRAGRAM FOR MIRED
+1D309 TETRAGRAM FOR BARRIER
+1D30A TETRAGRAM FOR KEEPING SMALL
+1D30B TETRAGRAM FOR CONTRARIETY
+1D30C TETRAGRAM FOR ASCENT
+1D30D TETRAGRAM FOR OPPOSITION
+1D30E TETRAGRAM FOR BRANCHING OUT
+1D30F TETRAGRAM FOR DEFECTIVENESS OR DISTORTION
+1D310 TETRAGRAM FOR DIVERGENCE
+1D311 TETRAGRAM FOR YOUTHFULNESS
+1D312 TETRAGRAM FOR INCREASE
+1D313 TETRAGRAM FOR PENETRATION
+1D314 TETRAGRAM FOR REACH
+1D315 TETRAGRAM FOR CONTACT
+1D316 TETRAGRAM FOR HOLDING BACK
+1D317 TETRAGRAM FOR WAITING
+1D318 TETRAGRAM FOR FOLLOWING
+1D319 TETRAGRAM FOR ADVANCE
+1D31A TETRAGRAM FOR RELEASE
+1D31B TETRAGRAM FOR RESISTANCE
+1D31C TETRAGRAM FOR EASE
+1D31D TETRAGRAM FOR JOY
+1D31E TETRAGRAM FOR CONTENTION
+1D31F TETRAGRAM FOR ENDEAVOUR
+1D320 TETRAGRAM FOR DUTIES
+1D321 TETRAGRAM FOR CHANGE
+1D322 TETRAGRAM FOR DECISIVENESS
+1D323 TETRAGRAM FOR BOLD RESOLUTION
+1D324 TETRAGRAM FOR PACKING
+1D325 TETRAGRAM FOR LEGION
+1D326 TETRAGRAM FOR CLOSENESS
+1D327 TETRAGRAM FOR KINSHIP
+1D328 TETRAGRAM FOR GATHERING
+1D329 TETRAGRAM FOR STRENGTH
+1D32A TETRAGRAM FOR PURITY
+1D32B TETRAGRAM FOR FULLNESS
+1D32C TETRAGRAM FOR RESIDENCE
+1D32D TETRAGRAM FOR LAW OR MODEL
+1D32E TETRAGRAM FOR RESPONSE
+1D32F TETRAGRAM FOR GOING TO MEET
+1D330 TETRAGRAM FOR ENCOUNTERS
+1D331 TETRAGRAM FOR STOVE
+1D332 TETRAGRAM FOR GREATNESS
+1D333 TETRAGRAM FOR ENLARGEMENT
+1D334 TETRAGRAM FOR PATTERN
+1D335 TETRAGRAM FOR RITUAL
+1D336 TETRAGRAM FOR FLIGHT
+1D337 TETRAGRAM FOR VASTNESS OR WASTING
+1D338 TETRAGRAM FOR CONSTANCY
+1D339 TETRAGRAM FOR MEASURE
+1D33A TETRAGRAM FOR ETERNITY
+1D33B TETRAGRAM FOR UNITY
+1D33C TETRAGRAM FOR DIMINISHMENT
+1D33D TETRAGRAM FOR CLOSED MOUTH
+1D33E TETRAGRAM FOR GUARDEDNESS
+1D33F TETRAGRAM FOR GATHERING IN
+1D340 TETRAGRAM FOR MASSING
+1D341 TETRAGRAM FOR ACCUMULATION
+1D342 TETRAGRAM FOR EMBELLISHMENT
+1D343 TETRAGRAM FOR DOUBT
+1D344 TETRAGRAM FOR WATCH
+1D345 TETRAGRAM FOR SINKING
+1D346 TETRAGRAM FOR INNER
+1D347 TETRAGRAM FOR DEPARTURE
+1D348 TETRAGRAM FOR DARKENING
+1D349 TETRAGRAM FOR DIMMING
+1D34A TETRAGRAM FOR EXHAUSTION
+1D34B TETRAGRAM FOR SEVERANCE
+1D34C TETRAGRAM FOR STOPPAGE
+1D34D TETRAGRAM FOR HARDNESS
+1D34E TETRAGRAM FOR COMPLETION
+1D34F TETRAGRAM FOR CLOSURE
+1D350 TETRAGRAM FOR FAILURE
+1D351 TETRAGRAM FOR AGGRAVATION
+1D352 TETRAGRAM FOR COMPLIANCE
+1D353 TETRAGRAM FOR ON THE VERGE
+1D354 TETRAGRAM FOR DIFFICULTIES
+1D355 TETRAGRAM FOR LABOURING
+1D356 TETRAGRAM FOR FOSTERING
+@@ 1D400 Mathematical Alphanumeric Symbols 1D7FF
+@+ To be used for mathematical variables where style variations are important semantically. For general text, use standard Latin and Greek letters with markup.
+@ Bold symbols
+1D400 MATHEMATICAL BOLD CAPITAL A
+ # <font> 0041 latin capital letter a
+1D401 MATHEMATICAL BOLD CAPITAL B
+ # <font> 0042 latin capital letter b
+1D402 MATHEMATICAL BOLD CAPITAL C
+ # <font> 0043 latin capital letter c
+1D403 MATHEMATICAL BOLD CAPITAL D
+ # <font> 0044 latin capital letter d
+1D404 MATHEMATICAL BOLD CAPITAL E
+ # <font> 0045 latin capital letter e
+1D405 MATHEMATICAL BOLD CAPITAL F
+ # <font> 0046 latin capital letter f
+1D406 MATHEMATICAL BOLD CAPITAL G
+ # <font> 0047 latin capital letter g
+1D407 MATHEMATICAL BOLD CAPITAL H
+ # <font> 0048 latin capital letter h
+1D408 MATHEMATICAL BOLD CAPITAL I
+ # <font> 0049 latin capital letter i
+1D409 MATHEMATICAL BOLD CAPITAL J
+ # <font> 004A latin capital letter j
+1D40A MATHEMATICAL BOLD CAPITAL K
+ # <font> 004B latin capital letter k
+1D40B MATHEMATICAL BOLD CAPITAL L
+ # <font> 004C latin capital letter l
+1D40C MATHEMATICAL BOLD CAPITAL M
+ # <font> 004D latin capital letter m
+1D40D MATHEMATICAL BOLD CAPITAL N
+ # <font> 004E latin capital letter n
+1D40E MATHEMATICAL BOLD CAPITAL O
+ # <font> 004F latin capital letter o
+1D40F MATHEMATICAL BOLD CAPITAL P
+ # <font> 0050 latin capital letter p
+1D410 MATHEMATICAL BOLD CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D411 MATHEMATICAL BOLD CAPITAL R
+ # <font> 0052 latin capital letter r
+1D412 MATHEMATICAL BOLD CAPITAL S
+ # <font> 0053 latin capital letter s
+1D413 MATHEMATICAL BOLD CAPITAL T
+ # <font> 0054 latin capital letter t
+1D414 MATHEMATICAL BOLD CAPITAL U
+ # <font> 0055 latin capital letter u
+1D415 MATHEMATICAL BOLD CAPITAL V
+ # <font> 0056 latin capital letter v
+1D416 MATHEMATICAL BOLD CAPITAL W
+ # <font> 0057 latin capital letter w
+1D417 MATHEMATICAL BOLD CAPITAL X
+ # <font> 0058 latin capital letter x
+1D418 MATHEMATICAL BOLD CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D419 MATHEMATICAL BOLD CAPITAL Z
+ # <font> 005A latin capital letter z
+1D41A MATHEMATICAL BOLD SMALL A
+ # <font> 0061 latin small letter a
+1D41B MATHEMATICAL BOLD SMALL B
+ # <font> 0062 latin small letter b
+1D41C MATHEMATICAL BOLD SMALL C
+ # <font> 0063 latin small letter c
+1D41D MATHEMATICAL BOLD SMALL D
+ # <font> 0064 latin small letter d
+1D41E MATHEMATICAL BOLD SMALL E
+ # <font> 0065 latin small letter e
+1D41F MATHEMATICAL BOLD SMALL F
+ # <font> 0066 latin small letter f
+1D420 MATHEMATICAL BOLD SMALL G
+ # <font> 0067 latin small letter g
+1D421 MATHEMATICAL BOLD SMALL H
+ # <font> 0068 latin small letter h
+1D422 MATHEMATICAL BOLD SMALL I
+ # <font> 0069 latin small letter i
+1D423 MATHEMATICAL BOLD SMALL J
+ # <font> 006A latin small letter j
+1D424 MATHEMATICAL BOLD SMALL K
+ # <font> 006B latin small letter k
+1D425 MATHEMATICAL BOLD SMALL L
+ # <font> 006C latin small letter l
+1D426 MATHEMATICAL BOLD SMALL M
+ # <font> 006D latin small letter m
+1D427 MATHEMATICAL BOLD SMALL N
+ # <font> 006E latin small letter n
+1D428 MATHEMATICAL BOLD SMALL O
+ # <font> 006F latin small letter o
+1D429 MATHEMATICAL BOLD SMALL P
+ # <font> 0070 latin small letter p
+1D42A MATHEMATICAL BOLD SMALL Q
+ # <font> 0071 latin small letter q
+1D42B MATHEMATICAL BOLD SMALL R
+ # <font> 0072 latin small letter r
+1D42C MATHEMATICAL BOLD SMALL S
+ # <font> 0073 latin small letter s
+1D42D MATHEMATICAL BOLD SMALL T
+ # <font> 0074 latin small letter t
+1D42E MATHEMATICAL BOLD SMALL U
+ # <font> 0075 latin small letter u
+1D42F MATHEMATICAL BOLD SMALL V
+ # <font> 0076 latin small letter v
+1D430 MATHEMATICAL BOLD SMALL W
+ # <font> 0077 latin small letter w
+1D431 MATHEMATICAL BOLD SMALL X
+ # <font> 0078 latin small letter x
+1D432 MATHEMATICAL BOLD SMALL Y
+ # <font> 0079 latin small letter y
+1D433 MATHEMATICAL BOLD SMALL Z
+ # <font> 007A latin small letter z
+@ Italic symbols
+@+ Several italic symbols have been previously coded in the Letterlike Symbols block and are retained there to ensure unambiguous representation.
+1D434 MATHEMATICAL ITALIC CAPITAL A
+ # <font> 0041 latin capital letter a
+1D435 MATHEMATICAL ITALIC CAPITAL B
+ # <font> 0042 latin capital letter b
+1D436 MATHEMATICAL ITALIC CAPITAL C
+ # <font> 0043 latin capital letter c
+1D437 MATHEMATICAL ITALIC CAPITAL D
+ # <font> 0044 latin capital letter d
+1D438 MATHEMATICAL ITALIC CAPITAL E
+ # <font> 0045 latin capital letter e
+1D439 MATHEMATICAL ITALIC CAPITAL F
+ # <font> 0046 latin capital letter f
+1D43A MATHEMATICAL ITALIC CAPITAL G
+ # <font> 0047 latin capital letter g
+1D43B MATHEMATICAL ITALIC CAPITAL H
+ # <font> 0048 latin capital letter h
+1D43C MATHEMATICAL ITALIC CAPITAL I
+ # <font> 0049 latin capital letter i
+1D43D MATHEMATICAL ITALIC CAPITAL J
+ # <font> 004A latin capital letter j
+1D43E MATHEMATICAL ITALIC CAPITAL K
+ # <font> 004B latin capital letter k
+1D43F MATHEMATICAL ITALIC CAPITAL L
+ # <font> 004C latin capital letter l
+1D440 MATHEMATICAL ITALIC CAPITAL M
+ # <font> 004D latin capital letter m
+1D441 MATHEMATICAL ITALIC CAPITAL N
+ # <font> 004E latin capital letter n
+1D442 MATHEMATICAL ITALIC CAPITAL O
+ # <font> 004F latin capital letter o
+1D443 MATHEMATICAL ITALIC CAPITAL P
+ # <font> 0050 latin capital letter p
+1D444 MATHEMATICAL ITALIC CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D445 MATHEMATICAL ITALIC CAPITAL R
+ # <font> 0052 latin capital letter r
+1D446 MATHEMATICAL ITALIC CAPITAL S
+ # <font> 0053 latin capital letter s
+1D447 MATHEMATICAL ITALIC CAPITAL T
+ # <font> 0054 latin capital letter t
+1D448 MATHEMATICAL ITALIC CAPITAL U
+ # <font> 0055 latin capital letter u
+1D449 MATHEMATICAL ITALIC CAPITAL V
+ # <font> 0056 latin capital letter v
+1D44A MATHEMATICAL ITALIC CAPITAL W
+ # <font> 0057 latin capital letter w
+1D44B MATHEMATICAL ITALIC CAPITAL X
+ # <font> 0058 latin capital letter x
+1D44C MATHEMATICAL ITALIC CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D44D MATHEMATICAL ITALIC CAPITAL Z
+ # <font> 005A latin capital letter z
+1D44E MATHEMATICAL ITALIC SMALL A
+ # <font> 0061 latin small letter a
+1D44F MATHEMATICAL ITALIC SMALL B
+ # <font> 0062 latin small letter b
+1D450 MATHEMATICAL ITALIC SMALL C
+ # <font> 0063 latin small letter c
+1D451 MATHEMATICAL ITALIC SMALL D
+ # <font> 0064 latin small letter d
+1D452 MATHEMATICAL ITALIC SMALL E
+ # <font> 0065 latin small letter e
+1D453 MATHEMATICAL ITALIC SMALL F
+ # <font> 0066 latin small letter f
+1D454 MATHEMATICAL ITALIC SMALL G
+ # <font> 0067 latin small letter g
+1D455 <reserved>
+ x (planck constant - 210E)
+1D456 MATHEMATICAL ITALIC SMALL I
+ # <font> 0069 latin small letter i
+1D457 MATHEMATICAL ITALIC SMALL J
+ # <font> 006A latin small letter j
+1D458 MATHEMATICAL ITALIC SMALL K
+ # <font> 006B latin small letter k
+1D459 MATHEMATICAL ITALIC SMALL L
+ # <font> 006C latin small letter l
+1D45A MATHEMATICAL ITALIC SMALL M
+ # <font> 006D latin small letter m
+1D45B MATHEMATICAL ITALIC SMALL N
+ # <font> 006E latin small letter n
+1D45C MATHEMATICAL ITALIC SMALL O
+ # <font> 006F latin small letter o
+1D45D MATHEMATICAL ITALIC SMALL P
+ # <font> 0070 latin small letter p
+1D45E MATHEMATICAL ITALIC SMALL Q
+ # <font> 0071 latin small letter q
+1D45F MATHEMATICAL ITALIC SMALL R
+ # <font> 0072 latin small letter r
+1D460 MATHEMATICAL ITALIC SMALL S
+ # <font> 0073 latin small letter s
+1D461 MATHEMATICAL ITALIC SMALL T
+ # <font> 0074 latin small letter t
+1D462 MATHEMATICAL ITALIC SMALL U
+ # <font> 0075 latin small letter u
+1D463 MATHEMATICAL ITALIC SMALL V
+ # <font> 0076 latin small letter v
+1D464 MATHEMATICAL ITALIC SMALL W
+ # <font> 0077 latin small letter w
+1D465 MATHEMATICAL ITALIC SMALL X
+ # <font> 0078 latin small letter x
+1D466 MATHEMATICAL ITALIC SMALL Y
+ # <font> 0079 latin small letter y
+1D467 MATHEMATICAL ITALIC SMALL Z
+ # <font> 007A latin small letter z
+@ Bold italic symbols
+1D468 MATHEMATICAL BOLD ITALIC CAPITAL A
+ # <font> 0041 latin capital letter a
+1D469 MATHEMATICAL BOLD ITALIC CAPITAL B
+ # <font> 0042 latin capital letter b
+1D46A MATHEMATICAL BOLD ITALIC CAPITAL C
+ # <font> 0043 latin capital letter c
+1D46B MATHEMATICAL BOLD ITALIC CAPITAL D
+ # <font> 0044 latin capital letter d
+1D46C MATHEMATICAL BOLD ITALIC CAPITAL E
+ # <font> 0045 latin capital letter e
+1D46D MATHEMATICAL BOLD ITALIC CAPITAL F
+ # <font> 0046 latin capital letter f
+1D46E MATHEMATICAL BOLD ITALIC CAPITAL G
+ # <font> 0047 latin capital letter g
+1D46F MATHEMATICAL BOLD ITALIC CAPITAL H
+ # <font> 0048 latin capital letter h
+1D470 MATHEMATICAL BOLD ITALIC CAPITAL I
+ # <font> 0049 latin capital letter i
+1D471 MATHEMATICAL BOLD ITALIC CAPITAL J
+ # <font> 004A latin capital letter j
+1D472 MATHEMATICAL BOLD ITALIC CAPITAL K
+ # <font> 004B latin capital letter k
+1D473 MATHEMATICAL BOLD ITALIC CAPITAL L
+ # <font> 004C latin capital letter l
+1D474 MATHEMATICAL BOLD ITALIC CAPITAL M
+ # <font> 004D latin capital letter m
+1D475 MATHEMATICAL BOLD ITALIC CAPITAL N
+ # <font> 004E latin capital letter n
+1D476 MATHEMATICAL BOLD ITALIC CAPITAL O
+ # <font> 004F latin capital letter o
+1D477 MATHEMATICAL BOLD ITALIC CAPITAL P
+ # <font> 0050 latin capital letter p
+1D478 MATHEMATICAL BOLD ITALIC CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D479 MATHEMATICAL BOLD ITALIC CAPITAL R
+ # <font> 0052 latin capital letter r
+1D47A MATHEMATICAL BOLD ITALIC CAPITAL S
+ # <font> 0053 latin capital letter s
+1D47B MATHEMATICAL BOLD ITALIC CAPITAL T
+ # <font> 0054 latin capital letter t
+1D47C MATHEMATICAL BOLD ITALIC CAPITAL U
+ # <font> 0055 latin capital letter u
+1D47D MATHEMATICAL BOLD ITALIC CAPITAL V
+ # <font> 0056 latin capital letter v
+1D47E MATHEMATICAL BOLD ITALIC CAPITAL W
+ # <font> 0057 latin capital letter w
+1D47F MATHEMATICAL BOLD ITALIC CAPITAL X
+ # <font> 0058 latin capital letter x
+1D480 MATHEMATICAL BOLD ITALIC CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D481 MATHEMATICAL BOLD ITALIC CAPITAL Z
+ # <font> 005A latin capital letter z
+1D482 MATHEMATICAL BOLD ITALIC SMALL A
+ # <font> 0061 latin small letter a
+1D483 MATHEMATICAL BOLD ITALIC SMALL B
+ # <font> 0062 latin small letter b
+1D484 MATHEMATICAL BOLD ITALIC SMALL C
+ # <font> 0063 latin small letter c
+1D485 MATHEMATICAL BOLD ITALIC SMALL D
+ # <font> 0064 latin small letter d
+1D486 MATHEMATICAL BOLD ITALIC SMALL E
+ # <font> 0065 latin small letter e
+1D487 MATHEMATICAL BOLD ITALIC SMALL F
+ # <font> 0066 latin small letter f
+1D488 MATHEMATICAL BOLD ITALIC SMALL G
+ # <font> 0067 latin small letter g
+1D489 MATHEMATICAL BOLD ITALIC SMALL H
+ # <font> 0068 latin small letter h
+1D48A MATHEMATICAL BOLD ITALIC SMALL I
+ # <font> 0069 latin small letter i
+1D48B MATHEMATICAL BOLD ITALIC SMALL J
+ # <font> 006A latin small letter j
+1D48C MATHEMATICAL BOLD ITALIC SMALL K
+ # <font> 006B latin small letter k
+1D48D MATHEMATICAL BOLD ITALIC SMALL L
+ # <font> 006C latin small letter l
+1D48E MATHEMATICAL BOLD ITALIC SMALL M
+ # <font> 006D latin small letter m
+1D48F MATHEMATICAL BOLD ITALIC SMALL N
+ # <font> 006E latin small letter n
+1D490 MATHEMATICAL BOLD ITALIC SMALL O
+ # <font> 006F latin small letter o
+1D491 MATHEMATICAL BOLD ITALIC SMALL P
+ # <font> 0070 latin small letter p
+1D492 MATHEMATICAL BOLD ITALIC SMALL Q
+ # <font> 0071 latin small letter q
+1D493 MATHEMATICAL BOLD ITALIC SMALL R
+ # <font> 0072 latin small letter r
+1D494 MATHEMATICAL BOLD ITALIC SMALL S
+ # <font> 0073 latin small letter s
+1D495 MATHEMATICAL BOLD ITALIC SMALL T
+ # <font> 0074 latin small letter t
+1D496 MATHEMATICAL BOLD ITALIC SMALL U
+ # <font> 0075 latin small letter u
+1D497 MATHEMATICAL BOLD ITALIC SMALL V
+ # <font> 0076 latin small letter v
+1D498 MATHEMATICAL BOLD ITALIC SMALL W
+ # <font> 0077 latin small letter w
+1D499 MATHEMATICAL BOLD ITALIC SMALL X
+ # <font> 0078 latin small letter x
+1D49A MATHEMATICAL BOLD ITALIC SMALL Y
+ # <font> 0079 latin small letter y
+1D49B MATHEMATICAL BOLD ITALIC SMALL Z
+ # <font> 007A latin small letter z
+@ Script symbols
+@+ Several script symbols have been previously coded in the Letterlike Symbols block and are retained there to ensure unambiguous representation.
+1D49C MATHEMATICAL SCRIPT CAPITAL A
+ # <font> 0041 latin capital letter a
+1D49D <reserved>
+ x (script capital b - 212C)
+1D49E MATHEMATICAL SCRIPT CAPITAL C
+ # <font> 0043 latin capital letter c
+1D49F MATHEMATICAL SCRIPT CAPITAL D
+ # <font> 0044 latin capital letter d
+1D4A0 <reserved>
+ x (script capital e - 2130)
+1D4A1 <reserved>
+ x (script capital f - 2131)
+1D4A2 MATHEMATICAL SCRIPT CAPITAL G
+ # <font> 0047 latin capital letter g
+1D4A3 <reserved>
+ x (script capital h - 210B)
+1D4A4 <reserved>
+ x (script capital i - 2110)
+1D4A5 MATHEMATICAL SCRIPT CAPITAL J
+ # <font> 004A latin capital letter j
+1D4A6 MATHEMATICAL SCRIPT CAPITAL K
+ # <font> 004B latin capital letter k
+1D4A7 <reserved>
+ x (script capital l - 2112)
+1D4A8 <reserved>
+ x (script capital m - 2133)
+1D4A9 MATHEMATICAL SCRIPT CAPITAL N
+ # <font> 004E latin capital letter n
+1D4AA MATHEMATICAL SCRIPT CAPITAL O
+ # <font> 004F latin capital letter o
+1D4AB MATHEMATICAL SCRIPT CAPITAL P
+ = power set
+ # <font> 0050 latin capital letter p
+1D4AC MATHEMATICAL SCRIPT CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D4AD <reserved>
+ x (script capital r - 211B)
+1D4AE MATHEMATICAL SCRIPT CAPITAL S
+ # <font> 0053 latin capital letter s
+1D4AF MATHEMATICAL SCRIPT CAPITAL T
+ # <font> 0054 latin capital letter t
+1D4B0 MATHEMATICAL SCRIPT CAPITAL U
+ # <font> 0055 latin capital letter u
+1D4B1 MATHEMATICAL SCRIPT CAPITAL V
+ # <font> 0056 latin capital letter v
+1D4B2 MATHEMATICAL SCRIPT CAPITAL W
+ # <font> 0057 latin capital letter w
+1D4B3 MATHEMATICAL SCRIPT CAPITAL X
+ # <font> 0058 latin capital letter x
+1D4B4 MATHEMATICAL SCRIPT CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D4B5 MATHEMATICAL SCRIPT CAPITAL Z
+ # <font> 005A latin capital letter z
+1D4B6 MATHEMATICAL SCRIPT SMALL A
+ # <font> 0061 latin small letter a
+1D4B7 MATHEMATICAL SCRIPT SMALL B
+ # <font> 0062 latin small letter b
+1D4B8 MATHEMATICAL SCRIPT SMALL C
+ # <font> 0063 latin small letter c
+1D4B9 MATHEMATICAL SCRIPT SMALL D
+ # <font> 0064 latin small letter d
+1D4BA <reserved>
+ x (script small e - 212F)
+1D4BB MATHEMATICAL SCRIPT SMALL F
+ # <font> 0066 latin small letter f
+1D4BC <reserved>
+ x (script small g - 210A)
+1D4BD MATHEMATICAL SCRIPT SMALL H
+ # <font> 0068 latin small letter h
+1D4BE MATHEMATICAL SCRIPT SMALL I
+ # <font> 0069 latin small letter i
+1D4BF MATHEMATICAL SCRIPT SMALL J
+ # <font> 006A latin small letter j
+1D4C0 MATHEMATICAL SCRIPT SMALL K
+ # <font> 006B latin small letter k
+1D4C1 MATHEMATICAL SCRIPT SMALL L
+ x (script small l - 2113)
+ # <font> 006C latin small letter l
+1D4C2 MATHEMATICAL SCRIPT SMALL M
+ # <font> 006D latin small letter m
+1D4C3 MATHEMATICAL SCRIPT SMALL N
+ # <font> 006E latin small letter n
+1D4C4 <reserved>
+ x (script small o - 2134)
+1D4C5 MATHEMATICAL SCRIPT SMALL P
+ # <font> 0070 latin small letter p
+1D4C6 MATHEMATICAL SCRIPT SMALL Q
+ # <font> 0071 latin small letter q
+1D4C7 MATHEMATICAL SCRIPT SMALL R
+ # <font> 0072 latin small letter r
+1D4C8 MATHEMATICAL SCRIPT SMALL S
+ # <font> 0073 latin small letter s
+1D4C9 MATHEMATICAL SCRIPT SMALL T
+ # <font> 0074 latin small letter t
+1D4CA MATHEMATICAL SCRIPT SMALL U
+ # <font> 0075 latin small letter u
+1D4CB MATHEMATICAL SCRIPT SMALL V
+ # <font> 0076 latin small letter v
+1D4CC MATHEMATICAL SCRIPT SMALL W
+ # <font> 0077 latin small letter w
+1D4CD MATHEMATICAL SCRIPT SMALL X
+ # <font> 0078 latin small letter x
+1D4CE MATHEMATICAL SCRIPT SMALL Y
+ # <font> 0079 latin small letter y
+1D4CF MATHEMATICAL SCRIPT SMALL Z
+ # <font> 007A latin small letter z
+@ Bold script symbols
+1D4D0 MATHEMATICAL BOLD SCRIPT CAPITAL A
+ # <font> 0041 latin capital letter a
+1D4D1 MATHEMATICAL BOLD SCRIPT CAPITAL B
+ # <font> 0042 latin capital letter b
+1D4D2 MATHEMATICAL BOLD SCRIPT CAPITAL C
+ # <font> 0043 latin capital letter c
+1D4D3 MATHEMATICAL BOLD SCRIPT CAPITAL D
+ # <font> 0044 latin capital letter d
+1D4D4 MATHEMATICAL BOLD SCRIPT CAPITAL E
+ # <font> 0045 latin capital letter e
+1D4D5 MATHEMATICAL BOLD SCRIPT CAPITAL F
+ # <font> 0046 latin capital letter f
+1D4D6 MATHEMATICAL BOLD SCRIPT CAPITAL G
+ # <font> 0047 latin capital letter g
+1D4D7 MATHEMATICAL BOLD SCRIPT CAPITAL H
+ # <font> 0048 latin capital letter h
+1D4D8 MATHEMATICAL BOLD SCRIPT CAPITAL I
+ # <font> 0049 latin capital letter i
+1D4D9 MATHEMATICAL BOLD SCRIPT CAPITAL J
+ # <font> 004A latin capital letter j
+1D4DA MATHEMATICAL BOLD SCRIPT CAPITAL K
+ # <font> 004B latin capital letter k
+1D4DB MATHEMATICAL BOLD SCRIPT CAPITAL L
+ # <font> 004C latin capital letter l
+1D4DC MATHEMATICAL BOLD SCRIPT CAPITAL M
+ # <font> 004D latin capital letter m
+1D4DD MATHEMATICAL BOLD SCRIPT CAPITAL N
+ # <font> 004E latin capital letter n
+1D4DE MATHEMATICAL BOLD SCRIPT CAPITAL O
+ # <font> 004F latin capital letter o
+1D4DF MATHEMATICAL BOLD SCRIPT CAPITAL P
+ # <font> 0050 latin capital letter p
+1D4E0 MATHEMATICAL BOLD SCRIPT CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D4E1 MATHEMATICAL BOLD SCRIPT CAPITAL R
+ # <font> 0052 latin capital letter r
+1D4E2 MATHEMATICAL BOLD SCRIPT CAPITAL S
+ # <font> 0053 latin capital letter s
+1D4E3 MATHEMATICAL BOLD SCRIPT CAPITAL T
+ # <font> 0054 latin capital letter t
+1D4E4 MATHEMATICAL BOLD SCRIPT CAPITAL U
+ # <font> 0055 latin capital letter u
+1D4E5 MATHEMATICAL BOLD SCRIPT CAPITAL V
+ # <font> 0056 latin capital letter v
+1D4E6 MATHEMATICAL BOLD SCRIPT CAPITAL W
+ # <font> 0057 latin capital letter w
+1D4E7 MATHEMATICAL BOLD SCRIPT CAPITAL X
+ # <font> 0058 latin capital letter x
+1D4E8 MATHEMATICAL BOLD SCRIPT CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D4E9 MATHEMATICAL BOLD SCRIPT CAPITAL Z
+ # <font> 005A latin capital letter z
+1D4EA MATHEMATICAL BOLD SCRIPT SMALL A
+ # <font> 0061 latin small letter a
+1D4EB MATHEMATICAL BOLD SCRIPT SMALL B
+ # <font> 0062 latin small letter b
+1D4EC MATHEMATICAL BOLD SCRIPT SMALL C
+ # <font> 0063 latin small letter c
+1D4ED MATHEMATICAL BOLD SCRIPT SMALL D
+ # <font> 0064 latin small letter d
+1D4EE MATHEMATICAL BOLD SCRIPT SMALL E
+ # <font> 0065 latin small letter e
+1D4EF MATHEMATICAL BOLD SCRIPT SMALL F
+ # <font> 0066 latin small letter f
+1D4F0 MATHEMATICAL BOLD SCRIPT SMALL G
+ # <font> 0067 latin small letter g
+1D4F1 MATHEMATICAL BOLD SCRIPT SMALL H
+ # <font> 0068 latin small letter h
+1D4F2 MATHEMATICAL BOLD SCRIPT SMALL I
+ # <font> 0069 latin small letter i
+1D4F3 MATHEMATICAL BOLD SCRIPT SMALL J
+ # <font> 006A latin small letter j
+1D4F4 MATHEMATICAL BOLD SCRIPT SMALL K
+ # <font> 006B latin small letter k
+1D4F5 MATHEMATICAL BOLD SCRIPT SMALL L
+ # <font> 006C latin small letter l
+1D4F6 MATHEMATICAL BOLD SCRIPT SMALL M
+ # <font> 006D latin small letter m
+1D4F7 MATHEMATICAL BOLD SCRIPT SMALL N
+ # <font> 006E latin small letter n
+1D4F8 MATHEMATICAL BOLD SCRIPT SMALL O
+ # <font> 006F latin small letter o
+1D4F9 MATHEMATICAL BOLD SCRIPT SMALL P
+ # <font> 0070 latin small letter p
+1D4FA MATHEMATICAL BOLD SCRIPT SMALL Q
+ # <font> 0071 latin small letter q
+1D4FB MATHEMATICAL BOLD SCRIPT SMALL R
+ # <font> 0072 latin small letter r
+1D4FC MATHEMATICAL BOLD SCRIPT SMALL S
+ # <font> 0073 latin small letter s
+1D4FD MATHEMATICAL BOLD SCRIPT SMALL T
+ # <font> 0074 latin small letter t
+1D4FE MATHEMATICAL BOLD SCRIPT SMALL U
+ # <font> 0075 latin small letter u
+1D4FF MATHEMATICAL BOLD SCRIPT SMALL V
+ # <font> 0076 latin small letter v
+1D500 MATHEMATICAL BOLD SCRIPT SMALL W
+ # <font> 0077 latin small letter w
+1D501 MATHEMATICAL BOLD SCRIPT SMALL X
+ # <font> 0078 latin small letter x
+1D502 MATHEMATICAL BOLD SCRIPT SMALL Y
+ # <font> 0079 latin small letter y
+1D503 MATHEMATICAL BOLD SCRIPT SMALL Z
+ # <font> 007A latin small letter z
+@ Fraktur symbols
+@+ This style is sometimes known as black-letter. Several black-letter symbols have been previously coded in the Letterlike Symbols block and are retained there to ensure unambiguous representation.
+1D504 MATHEMATICAL FRAKTUR CAPITAL A
+ # <font> 0041 latin capital letter a
+1D505 MATHEMATICAL FRAKTUR CAPITAL B
+ # <font> 0042 latin capital letter b
+1D506 <reserved>
+ x (black-letter capital c - 212D)
+1D507 MATHEMATICAL FRAKTUR CAPITAL D
+ # <font> 0044 latin capital letter d
+1D508 MATHEMATICAL FRAKTUR CAPITAL E
+ # <font> 0045 latin capital letter e
+1D509 MATHEMATICAL FRAKTUR CAPITAL F
+ # <font> 0046 latin capital letter f
+1D50A MATHEMATICAL FRAKTUR CAPITAL G
+ # <font> 0047 latin capital letter g
+1D50B <reserved>
+ x (black-letter capital h - 210C)
+1D50C <reserved>
+ x (black-letter capital i - 2111)
+1D50D MATHEMATICAL FRAKTUR CAPITAL J
+ # <font> 004A latin capital letter j
+1D50E MATHEMATICAL FRAKTUR CAPITAL K
+ # <font> 004B latin capital letter k
+1D50F MATHEMATICAL FRAKTUR CAPITAL L
+ # <font> 004C latin capital letter l
+1D510 MATHEMATICAL FRAKTUR CAPITAL M
+ = New Testament majority text
+ # <font> 004D latin capital letter m
+1D511 MATHEMATICAL FRAKTUR CAPITAL N
+ # <font> 004E latin capital letter n
+1D512 MATHEMATICAL FRAKTUR CAPITAL O
+ # <font> 004F latin capital letter o
+1D513 MATHEMATICAL FRAKTUR CAPITAL P
+ # <font> 0050 latin capital letter p
+1D514 MATHEMATICAL FRAKTUR CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D515 <reserved>
+ x (black-letter capital r - 211C)
+1D516 MATHEMATICAL FRAKTUR CAPITAL S
+ = Septuagint, Greek Old Testament
+ # <font> 0053 latin capital letter s
+1D517 MATHEMATICAL FRAKTUR CAPITAL T
+ # <font> 0054 latin capital letter t
+1D518 MATHEMATICAL FRAKTUR CAPITAL U
+ # <font> 0055 latin capital letter u
+1D519 MATHEMATICAL FRAKTUR CAPITAL V
+ # <font> 0056 latin capital letter v
+1D51A MATHEMATICAL FRAKTUR CAPITAL W
+ # <font> 0057 latin capital letter w
+1D51B MATHEMATICAL FRAKTUR CAPITAL X
+ # <font> 0058 latin capital letter x
+1D51C MATHEMATICAL FRAKTUR CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D51D <reserved>
+ x (black-letter capital z - 2128)
+1D51E MATHEMATICAL FRAKTUR SMALL A
+ # <font> 0061 latin small letter a
+1D51F MATHEMATICAL FRAKTUR SMALL B
+ # <font> 0062 latin small letter b
+1D520 MATHEMATICAL FRAKTUR SMALL C
+ # <font> 0063 latin small letter c
+1D521 MATHEMATICAL FRAKTUR SMALL D
+ # <font> 0064 latin small letter d
+1D522 MATHEMATICAL FRAKTUR SMALL E
+ # <font> 0065 latin small letter e
+1D523 MATHEMATICAL FRAKTUR SMALL F
+ # <font> 0066 latin small letter f
+1D524 MATHEMATICAL FRAKTUR SMALL G
+ # <font> 0067 latin small letter g
+1D525 MATHEMATICAL FRAKTUR SMALL H
+ # <font> 0068 latin small letter h
+1D526 MATHEMATICAL FRAKTUR SMALL I
+ # <font> 0069 latin small letter i
+1D527 MATHEMATICAL FRAKTUR SMALL J
+ # <font> 006A latin small letter j
+1D528 MATHEMATICAL FRAKTUR SMALL K
+ # <font> 006B latin small letter k
+1D529 MATHEMATICAL FRAKTUR SMALL L
+ # <font> 006C latin small letter l
+1D52A MATHEMATICAL FRAKTUR SMALL M
+ # <font> 006D latin small letter m
+1D52B MATHEMATICAL FRAKTUR SMALL N
+ # <font> 006E latin small letter n
+1D52C MATHEMATICAL FRAKTUR SMALL O
+ # <font> 006F latin small letter o
+1D52D MATHEMATICAL FRAKTUR SMALL P
+ # <font> 0070 latin small letter p
+1D52E MATHEMATICAL FRAKTUR SMALL Q
+ # <font> 0071 latin small letter q
+1D52F MATHEMATICAL FRAKTUR SMALL R
+ # <font> 0072 latin small letter r
+1D530 MATHEMATICAL FRAKTUR SMALL S
+ # <font> 0073 latin small letter s
+1D531 MATHEMATICAL FRAKTUR SMALL T
+ # <font> 0074 latin small letter t
+1D532 MATHEMATICAL FRAKTUR SMALL U
+ # <font> 0075 latin small letter u
+1D533 MATHEMATICAL FRAKTUR SMALL V
+ # <font> 0076 latin small letter v
+1D534 MATHEMATICAL FRAKTUR SMALL W
+ # <font> 0077 latin small letter w
+1D535 MATHEMATICAL FRAKTUR SMALL X
+ # <font> 0078 latin small letter x
+1D536 MATHEMATICAL FRAKTUR SMALL Y
+ # <font> 0079 latin small letter y
+1D537 MATHEMATICAL FRAKTUR SMALL Z
+ # <font> 007A latin small letter z
+@ Double-struck symbols
+@+ This style is sometimes known as open-face or blackboard-bold. Several double-struck symbols have been previously coded in the Letterlike Symbols block and are retained there to ensure unambiguous representation.
+1D538 MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+ # <font> 0041 latin capital letter a
+1D539 MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+ # <font> 0042 latin capital letter b
+1D53A <reserved>
+ x (double-struck capital c - 2102)
+1D53B MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+ # <font> 0044 latin capital letter d
+1D53C MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+ # <font> 0045 latin capital letter e
+1D53D MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+ # <font> 0046 latin capital letter f
+1D53E MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+ # <font> 0047 latin capital letter g
+1D53F <reserved>
+ x (double-struck capital h - 210D)
+1D540 MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+ # <font> 0049 latin capital letter i
+1D541 MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+ # <font> 004A latin capital letter j
+1D542 MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+ # <font> 004B latin capital letter k
+1D543 MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+ # <font> 004C latin capital letter l
+1D544 MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+ # <font> 004D latin capital letter m
+1D545 <reserved>
+ x (double-struck capital n - 2115)
+1D546 MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+ # <font> 004F latin capital letter o
+1D547 <reserved>
+ x (double-struck capital p - 2119)
+1D548 <reserved>
+ x (double-struck capital q - 211A)
+1D549 <reserved>
+ x (double-struck capital r - 211D)
+1D54A MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+ # <font> 0053 latin capital letter s
+1D54B MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+ # <font> 0054 latin capital letter t
+1D54C MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+ # <font> 0055 latin capital letter u
+1D54D MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+ # <font> 0056 latin capital letter v
+1D54E MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+ # <font> 0057 latin capital letter w
+1D54F MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+ # <font> 0058 latin capital letter x
+1D550 MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D551 <reserved>
+ x (double-struck capital z - 2124)
+1D552 MATHEMATICAL DOUBLE-STRUCK SMALL A
+ # <font> 0061 latin small letter a
+1D553 MATHEMATICAL DOUBLE-STRUCK SMALL B
+ # <font> 0062 latin small letter b
+1D554 MATHEMATICAL DOUBLE-STRUCK SMALL C
+ # <font> 0063 latin small letter c
+1D555 MATHEMATICAL DOUBLE-STRUCK SMALL D
+ # <font> 0064 latin small letter d
+1D556 MATHEMATICAL DOUBLE-STRUCK SMALL E
+ # <font> 0065 latin small letter e
+1D557 MATHEMATICAL DOUBLE-STRUCK SMALL F
+ # <font> 0066 latin small letter f
+1D558 MATHEMATICAL DOUBLE-STRUCK SMALL G
+ # <font> 0067 latin small letter g
+1D559 MATHEMATICAL DOUBLE-STRUCK SMALL H
+ # <font> 0068 latin small letter h
+1D55A MATHEMATICAL DOUBLE-STRUCK SMALL I
+ # <font> 0069 latin small letter i
+1D55B MATHEMATICAL DOUBLE-STRUCK SMALL J
+ # <font> 006A latin small letter j
+1D55C MATHEMATICAL DOUBLE-STRUCK SMALL K
+ # <font> 006B latin small letter k
+1D55D MATHEMATICAL DOUBLE-STRUCK SMALL L
+ # <font> 006C latin small letter l
+1D55E MATHEMATICAL DOUBLE-STRUCK SMALL M
+ # <font> 006D latin small letter m
+1D55F MATHEMATICAL DOUBLE-STRUCK SMALL N
+ # <font> 006E latin small letter n
+1D560 MATHEMATICAL DOUBLE-STRUCK SMALL O
+ # <font> 006F latin small letter o
+1D561 MATHEMATICAL DOUBLE-STRUCK SMALL P
+ # <font> 0070 latin small letter p
+1D562 MATHEMATICAL DOUBLE-STRUCK SMALL Q
+ # <font> 0071 latin small letter q
+1D563 MATHEMATICAL DOUBLE-STRUCK SMALL R
+ # <font> 0072 latin small letter r
+1D564 MATHEMATICAL DOUBLE-STRUCK SMALL S
+ # <font> 0073 latin small letter s
+1D565 MATHEMATICAL DOUBLE-STRUCK SMALL T
+ # <font> 0074 latin small letter t
+1D566 MATHEMATICAL DOUBLE-STRUCK SMALL U
+ # <font> 0075 latin small letter u
+1D567 MATHEMATICAL DOUBLE-STRUCK SMALL V
+ # <font> 0076 latin small letter v
+1D568 MATHEMATICAL DOUBLE-STRUCK SMALL W
+ # <font> 0077 latin small letter w
+1D569 MATHEMATICAL DOUBLE-STRUCK SMALL X
+ # <font> 0078 latin small letter x
+1D56A MATHEMATICAL DOUBLE-STRUCK SMALL Y
+ # <font> 0079 latin small letter y
+1D56B MATHEMATICAL DOUBLE-STRUCK SMALL Z
+ # <font> 007A latin small letter z
+@ Bold Fraktur symbols
+1D56C MATHEMATICAL BOLD FRAKTUR CAPITAL A
+ # <font> 0041 latin capital letter a
+1D56D MATHEMATICAL BOLD FRAKTUR CAPITAL B
+ # <font> 0042 latin capital letter b
+1D56E MATHEMATICAL BOLD FRAKTUR CAPITAL C
+ # <font> 0043 latin capital letter c
+1D56F MATHEMATICAL BOLD FRAKTUR CAPITAL D
+ # <font> 0044 latin capital letter d
+1D570 MATHEMATICAL BOLD FRAKTUR CAPITAL E
+ # <font> 0045 latin capital letter e
+1D571 MATHEMATICAL BOLD FRAKTUR CAPITAL F
+ # <font> 0046 latin capital letter f
+1D572 MATHEMATICAL BOLD FRAKTUR CAPITAL G
+ # <font> 0047 latin capital letter g
+1D573 MATHEMATICAL BOLD FRAKTUR CAPITAL H
+ # <font> 0048 latin capital letter h
+1D574 MATHEMATICAL BOLD FRAKTUR CAPITAL I
+ # <font> 0049 latin capital letter i
+1D575 MATHEMATICAL BOLD FRAKTUR CAPITAL J
+ # <font> 004A latin capital letter j
+1D576 MATHEMATICAL BOLD FRAKTUR CAPITAL K
+ # <font> 004B latin capital letter k
+1D577 MATHEMATICAL BOLD FRAKTUR CAPITAL L
+ # <font> 004C latin capital letter l
+1D578 MATHEMATICAL BOLD FRAKTUR CAPITAL M
+ # <font> 004D latin capital letter m
+1D579 MATHEMATICAL BOLD FRAKTUR CAPITAL N
+ # <font> 004E latin capital letter n
+1D57A MATHEMATICAL BOLD FRAKTUR CAPITAL O
+ # <font> 004F latin capital letter o
+1D57B MATHEMATICAL BOLD FRAKTUR CAPITAL P
+ # <font> 0050 latin capital letter p
+1D57C MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D57D MATHEMATICAL BOLD FRAKTUR CAPITAL R
+ # <font> 0052 latin capital letter r
+1D57E MATHEMATICAL BOLD FRAKTUR CAPITAL S
+ # <font> 0053 latin capital letter s
+1D57F MATHEMATICAL BOLD FRAKTUR CAPITAL T
+ # <font> 0054 latin capital letter t
+1D580 MATHEMATICAL BOLD FRAKTUR CAPITAL U
+ # <font> 0055 latin capital letter u
+1D581 MATHEMATICAL BOLD FRAKTUR CAPITAL V
+ # <font> 0056 latin capital letter v
+1D582 MATHEMATICAL BOLD FRAKTUR CAPITAL W
+ # <font> 0057 latin capital letter w
+1D583 MATHEMATICAL BOLD FRAKTUR CAPITAL X
+ # <font> 0058 latin capital letter x
+1D584 MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D585 MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+ # <font> 005A latin capital letter z
+1D586 MATHEMATICAL BOLD FRAKTUR SMALL A
+ # <font> 0061 latin small letter a
+1D587 MATHEMATICAL BOLD FRAKTUR SMALL B
+ # <font> 0062 latin small letter b
+1D588 MATHEMATICAL BOLD FRAKTUR SMALL C
+ # <font> 0063 latin small letter c
+1D589 MATHEMATICAL BOLD FRAKTUR SMALL D
+ # <font> 0064 latin small letter d
+1D58A MATHEMATICAL BOLD FRAKTUR SMALL E
+ # <font> 0065 latin small letter e
+1D58B MATHEMATICAL BOLD FRAKTUR SMALL F
+ # <font> 0066 latin small letter f
+1D58C MATHEMATICAL BOLD FRAKTUR SMALL G
+ # <font> 0067 latin small letter g
+1D58D MATHEMATICAL BOLD FRAKTUR SMALL H
+ # <font> 0068 latin small letter h
+1D58E MATHEMATICAL BOLD FRAKTUR SMALL I
+ # <font> 0069 latin small letter i
+1D58F MATHEMATICAL BOLD FRAKTUR SMALL J
+ # <font> 006A latin small letter j
+1D590 MATHEMATICAL BOLD FRAKTUR SMALL K
+ # <font> 006B latin small letter k
+1D591 MATHEMATICAL BOLD FRAKTUR SMALL L
+ # <font> 006C latin small letter l
+1D592 MATHEMATICAL BOLD FRAKTUR SMALL M
+ # <font> 006D latin small letter m
+1D593 MATHEMATICAL BOLD FRAKTUR SMALL N
+ # <font> 006E latin small letter n
+1D594 MATHEMATICAL BOLD FRAKTUR SMALL O
+ # <font> 006F latin small letter o
+1D595 MATHEMATICAL BOLD FRAKTUR SMALL P
+ # <font> 0070 latin small letter p
+1D596 MATHEMATICAL BOLD FRAKTUR SMALL Q
+ # <font> 0071 latin small letter q
+1D597 MATHEMATICAL BOLD FRAKTUR SMALL R
+ # <font> 0072 latin small letter r
+1D598 MATHEMATICAL BOLD FRAKTUR SMALL S
+ # <font> 0073 latin small letter s
+1D599 MATHEMATICAL BOLD FRAKTUR SMALL T
+ # <font> 0074 latin small letter t
+1D59A MATHEMATICAL BOLD FRAKTUR SMALL U
+ # <font> 0075 latin small letter u
+1D59B MATHEMATICAL BOLD FRAKTUR SMALL V
+ # <font> 0076 latin small letter v
+1D59C MATHEMATICAL BOLD FRAKTUR SMALL W
+ # <font> 0077 latin small letter w
+1D59D MATHEMATICAL BOLD FRAKTUR SMALL X
+ # <font> 0078 latin small letter x
+1D59E MATHEMATICAL BOLD FRAKTUR SMALL Y
+ # <font> 0079 latin small letter y
+1D59F MATHEMATICAL BOLD FRAKTUR SMALL Z
+ # <font> 007A latin small letter z
+@ Sans-serif symbols
+1D5A0 MATHEMATICAL SANS-SERIF CAPITAL A
+ # <font> 0041 latin capital letter a
+1D5A1 MATHEMATICAL SANS-SERIF CAPITAL B
+ # <font> 0042 latin capital letter b
+1D5A2 MATHEMATICAL SANS-SERIF CAPITAL C
+ # <font> 0043 latin capital letter c
+1D5A3 MATHEMATICAL SANS-SERIF CAPITAL D
+ # <font> 0044 latin capital letter d
+1D5A4 MATHEMATICAL SANS-SERIF CAPITAL E
+ # <font> 0045 latin capital letter e
+1D5A5 MATHEMATICAL SANS-SERIF CAPITAL F
+ # <font> 0046 latin capital letter f
+1D5A6 MATHEMATICAL SANS-SERIF CAPITAL G
+ # <font> 0047 latin capital letter g
+1D5A7 MATHEMATICAL SANS-SERIF CAPITAL H
+ # <font> 0048 latin capital letter h
+1D5A8 MATHEMATICAL SANS-SERIF CAPITAL I
+ # <font> 0049 latin capital letter i
+1D5A9 MATHEMATICAL SANS-SERIF CAPITAL J
+ # <font> 004A latin capital letter j
+1D5AA MATHEMATICAL SANS-SERIF CAPITAL K
+ # <font> 004B latin capital letter k
+1D5AB MATHEMATICAL SANS-SERIF CAPITAL L
+ # <font> 004C latin capital letter l
+1D5AC MATHEMATICAL SANS-SERIF CAPITAL M
+ # <font> 004D latin capital letter m
+1D5AD MATHEMATICAL SANS-SERIF CAPITAL N
+ # <font> 004E latin capital letter n
+1D5AE MATHEMATICAL SANS-SERIF CAPITAL O
+ # <font> 004F latin capital letter o
+1D5AF MATHEMATICAL SANS-SERIF CAPITAL P
+ # <font> 0050 latin capital letter p
+1D5B0 MATHEMATICAL SANS-SERIF CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D5B1 MATHEMATICAL SANS-SERIF CAPITAL R
+ # <font> 0052 latin capital letter r
+1D5B2 MATHEMATICAL SANS-SERIF CAPITAL S
+ # <font> 0053 latin capital letter s
+1D5B3 MATHEMATICAL SANS-SERIF CAPITAL T
+ # <font> 0054 latin capital letter t
+1D5B4 MATHEMATICAL SANS-SERIF CAPITAL U
+ # <font> 0055 latin capital letter u
+1D5B5 MATHEMATICAL SANS-SERIF CAPITAL V
+ # <font> 0056 latin capital letter v
+1D5B6 MATHEMATICAL SANS-SERIF CAPITAL W
+ # <font> 0057 latin capital letter w
+1D5B7 MATHEMATICAL SANS-SERIF CAPITAL X
+ # <font> 0058 latin capital letter x
+1D5B8 MATHEMATICAL SANS-SERIF CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D5B9 MATHEMATICAL SANS-SERIF CAPITAL Z
+ # <font> 005A latin capital letter z
+1D5BA MATHEMATICAL SANS-SERIF SMALL A
+ # <font> 0061 latin small letter a
+1D5BB MATHEMATICAL SANS-SERIF SMALL B
+ # <font> 0062 latin small letter b
+1D5BC MATHEMATICAL SANS-SERIF SMALL C
+ # <font> 0063 latin small letter c
+1D5BD MATHEMATICAL SANS-SERIF SMALL D
+ # <font> 0064 latin small letter d
+1D5BE MATHEMATICAL SANS-SERIF SMALL E
+ # <font> 0065 latin small letter e
+1D5BF MATHEMATICAL SANS-SERIF SMALL F
+ # <font> 0066 latin small letter f
+1D5C0 MATHEMATICAL SANS-SERIF SMALL G
+ # <font> 0067 latin small letter g
+1D5C1 MATHEMATICAL SANS-SERIF SMALL H
+ # <font> 0068 latin small letter h
+1D5C2 MATHEMATICAL SANS-SERIF SMALL I
+ # <font> 0069 latin small letter i
+1D5C3 MATHEMATICAL SANS-SERIF SMALL J
+ # <font> 006A latin small letter j
+1D5C4 MATHEMATICAL SANS-SERIF SMALL K
+ # <font> 006B latin small letter k
+1D5C5 MATHEMATICAL SANS-SERIF SMALL L
+ # <font> 006C latin small letter l
+1D5C6 MATHEMATICAL SANS-SERIF SMALL M
+ # <font> 006D latin small letter m
+1D5C7 MATHEMATICAL SANS-SERIF SMALL N
+ # <font> 006E latin small letter n
+1D5C8 MATHEMATICAL SANS-SERIF SMALL O
+ # <font> 006F latin small letter o
+1D5C9 MATHEMATICAL SANS-SERIF SMALL P
+ # <font> 0070 latin small letter p
+1D5CA MATHEMATICAL SANS-SERIF SMALL Q
+ # <font> 0071 latin small letter q
+1D5CB MATHEMATICAL SANS-SERIF SMALL R
+ # <font> 0072 latin small letter r
+1D5CC MATHEMATICAL SANS-SERIF SMALL S
+ # <font> 0073 latin small letter s
+1D5CD MATHEMATICAL SANS-SERIF SMALL T
+ # <font> 0074 latin small letter t
+1D5CE MATHEMATICAL SANS-SERIF SMALL U
+ # <font> 0075 latin small letter u
+1D5CF MATHEMATICAL SANS-SERIF SMALL V
+ # <font> 0076 latin small letter v
+1D5D0 MATHEMATICAL SANS-SERIF SMALL W
+ # <font> 0077 latin small letter w
+1D5D1 MATHEMATICAL SANS-SERIF SMALL X
+ # <font> 0078 latin small letter x
+1D5D2 MATHEMATICAL SANS-SERIF SMALL Y
+ # <font> 0079 latin small letter y
+1D5D3 MATHEMATICAL SANS-SERIF SMALL Z
+ # <font> 007A latin small letter z
+@ Sans-serif bold symbols
+1D5D4 MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ # <font> 0041 latin capital letter a
+1D5D5 MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+ # <font> 0042 latin capital letter b
+1D5D6 MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+ # <font> 0043 latin capital letter c
+1D5D7 MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+ # <font> 0044 latin capital letter d
+1D5D8 MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+ # <font> 0045 latin capital letter e
+1D5D9 MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+ # <font> 0046 latin capital letter f
+1D5DA MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+ # <font> 0047 latin capital letter g
+1D5DB MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+ # <font> 0048 latin capital letter h
+1D5DC MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+ # <font> 0049 latin capital letter i
+1D5DD MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+ # <font> 004A latin capital letter j
+1D5DE MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+ # <font> 004B latin capital letter k
+1D5DF MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+ # <font> 004C latin capital letter l
+1D5E0 MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+ # <font> 004D latin capital letter m
+1D5E1 MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+ # <font> 004E latin capital letter n
+1D5E2 MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+ # <font> 004F latin capital letter o
+1D5E3 MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+ # <font> 0050 latin capital letter p
+1D5E4 MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D5E5 MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+ # <font> 0052 latin capital letter r
+1D5E6 MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+ # <font> 0053 latin capital letter s
+1D5E7 MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+ # <font> 0054 latin capital letter t
+1D5E8 MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+ # <font> 0055 latin capital letter u
+1D5E9 MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+ # <font> 0056 latin capital letter v
+1D5EA MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+ # <font> 0057 latin capital letter w
+1D5EB MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+ # <font> 0058 latin capital letter x
+1D5EC MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D5ED MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+ # <font> 005A latin capital letter z
+1D5EE MATHEMATICAL SANS-SERIF BOLD SMALL A
+ # <font> 0061 latin small letter a
+1D5EF MATHEMATICAL SANS-SERIF BOLD SMALL B
+ # <font> 0062 latin small letter b
+1D5F0 MATHEMATICAL SANS-SERIF BOLD SMALL C
+ # <font> 0063 latin small letter c
+1D5F1 MATHEMATICAL SANS-SERIF BOLD SMALL D
+ # <font> 0064 latin small letter d
+1D5F2 MATHEMATICAL SANS-SERIF BOLD SMALL E
+ # <font> 0065 latin small letter e
+1D5F3 MATHEMATICAL SANS-SERIF BOLD SMALL F
+ # <font> 0066 latin small letter f
+1D5F4 MATHEMATICAL SANS-SERIF BOLD SMALL G
+ # <font> 0067 latin small letter g
+1D5F5 MATHEMATICAL SANS-SERIF BOLD SMALL H
+ # <font> 0068 latin small letter h
+1D5F6 MATHEMATICAL SANS-SERIF BOLD SMALL I
+ # <font> 0069 latin small letter i
+1D5F7 MATHEMATICAL SANS-SERIF BOLD SMALL J
+ # <font> 006A latin small letter j
+1D5F8 MATHEMATICAL SANS-SERIF BOLD SMALL K
+ # <font> 006B latin small letter k
+1D5F9 MATHEMATICAL SANS-SERIF BOLD SMALL L
+ # <font> 006C latin small letter l
+1D5FA MATHEMATICAL SANS-SERIF BOLD SMALL M
+ # <font> 006D latin small letter m
+1D5FB MATHEMATICAL SANS-SERIF BOLD SMALL N
+ # <font> 006E latin small letter n
+1D5FC MATHEMATICAL SANS-SERIF BOLD SMALL O
+ # <font> 006F latin small letter o
+1D5FD MATHEMATICAL SANS-SERIF BOLD SMALL P
+ # <font> 0070 latin small letter p
+1D5FE MATHEMATICAL SANS-SERIF BOLD SMALL Q
+ # <font> 0071 latin small letter q
+1D5FF MATHEMATICAL SANS-SERIF BOLD SMALL R
+ # <font> 0072 latin small letter r
+1D600 MATHEMATICAL SANS-SERIF BOLD SMALL S
+ # <font> 0073 latin small letter s
+1D601 MATHEMATICAL SANS-SERIF BOLD SMALL T
+ # <font> 0074 latin small letter t
+1D602 MATHEMATICAL SANS-SERIF BOLD SMALL U
+ # <font> 0075 latin small letter u
+1D603 MATHEMATICAL SANS-SERIF BOLD SMALL V
+ # <font> 0076 latin small letter v
+1D604 MATHEMATICAL SANS-SERIF BOLD SMALL W
+ # <font> 0077 latin small letter w
+1D605 MATHEMATICAL SANS-SERIF BOLD SMALL X
+ # <font> 0078 latin small letter x
+1D606 MATHEMATICAL SANS-SERIF BOLD SMALL Y
+ # <font> 0079 latin small letter y
+1D607 MATHEMATICAL SANS-SERIF BOLD SMALL Z
+ # <font> 007A latin small letter z
+@ Sans-serif italic symbols
+1D608 MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+ # <font> 0041 latin capital letter a
+1D609 MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+ # <font> 0042 latin capital letter b
+1D60A MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+ # <font> 0043 latin capital letter c
+1D60B MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+ # <font> 0044 latin capital letter d
+1D60C MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+ # <font> 0045 latin capital letter e
+1D60D MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+ # <font> 0046 latin capital letter f
+1D60E MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+ # <font> 0047 latin capital letter g
+1D60F MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+ # <font> 0048 latin capital letter h
+1D610 MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+ # <font> 0049 latin capital letter i
+1D611 MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+ # <font> 004A latin capital letter j
+1D612 MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+ # <font> 004B latin capital letter k
+1D613 MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+ # <font> 004C latin capital letter l
+1D614 MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+ # <font> 004D latin capital letter m
+1D615 MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+ # <font> 004E latin capital letter n
+1D616 MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+ # <font> 004F latin capital letter o
+1D617 MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+ # <font> 0050 latin capital letter p
+1D618 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D619 MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+ # <font> 0052 latin capital letter r
+1D61A MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+ # <font> 0053 latin capital letter s
+1D61B MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+ # <font> 0054 latin capital letter t
+1D61C MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+ # <font> 0055 latin capital letter u
+1D61D MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+ # <font> 0056 latin capital letter v
+1D61E MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+ # <font> 0057 latin capital letter w
+1D61F MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+ # <font> 0058 latin capital letter x
+1D620 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D621 MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+ # <font> 005A latin capital letter z
+1D622 MATHEMATICAL SANS-SERIF ITALIC SMALL A
+ # <font> 0061 latin small letter a
+1D623 MATHEMATICAL SANS-SERIF ITALIC SMALL B
+ # <font> 0062 latin small letter b
+1D624 MATHEMATICAL SANS-SERIF ITALIC SMALL C
+ # <font> 0063 latin small letter c
+1D625 MATHEMATICAL SANS-SERIF ITALIC SMALL D
+ # <font> 0064 latin small letter d
+1D626 MATHEMATICAL SANS-SERIF ITALIC SMALL E
+ # <font> 0065 latin small letter e
+1D627 MATHEMATICAL SANS-SERIF ITALIC SMALL F
+ # <font> 0066 latin small letter f
+1D628 MATHEMATICAL SANS-SERIF ITALIC SMALL G
+ # <font> 0067 latin small letter g
+1D629 MATHEMATICAL SANS-SERIF ITALIC SMALL H
+ # <font> 0068 latin small letter h
+1D62A MATHEMATICAL SANS-SERIF ITALIC SMALL I
+ # <font> 0069 latin small letter i
+1D62B MATHEMATICAL SANS-SERIF ITALIC SMALL J
+ # <font> 006A latin small letter j
+1D62C MATHEMATICAL SANS-SERIF ITALIC SMALL K
+ # <font> 006B latin small letter k
+1D62D MATHEMATICAL SANS-SERIF ITALIC SMALL L
+ # <font> 006C latin small letter l
+1D62E MATHEMATICAL SANS-SERIF ITALIC SMALL M
+ # <font> 006D latin small letter m
+1D62F MATHEMATICAL SANS-SERIF ITALIC SMALL N
+ # <font> 006E latin small letter n
+1D630 MATHEMATICAL SANS-SERIF ITALIC SMALL O
+ # <font> 006F latin small letter o
+1D631 MATHEMATICAL SANS-SERIF ITALIC SMALL P
+ # <font> 0070 latin small letter p
+1D632 MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+ # <font> 0071 latin small letter q
+1D633 MATHEMATICAL SANS-SERIF ITALIC SMALL R
+ # <font> 0072 latin small letter r
+1D634 MATHEMATICAL SANS-SERIF ITALIC SMALL S
+ # <font> 0073 latin small letter s
+1D635 MATHEMATICAL SANS-SERIF ITALIC SMALL T
+ # <font> 0074 latin small letter t
+1D636 MATHEMATICAL SANS-SERIF ITALIC SMALL U
+ # <font> 0075 latin small letter u
+1D637 MATHEMATICAL SANS-SERIF ITALIC SMALL V
+ # <font> 0076 latin small letter v
+1D638 MATHEMATICAL SANS-SERIF ITALIC SMALL W
+ # <font> 0077 latin small letter w
+1D639 MATHEMATICAL SANS-SERIF ITALIC SMALL X
+ # <font> 0078 latin small letter x
+1D63A MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+ # <font> 0079 latin small letter y
+1D63B MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+ # <font> 007A latin small letter z
+@ Sans-serif bold italic symbols
+1D63C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+ # <font> 0041 latin capital letter a
+1D63D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+ # <font> 0042 latin capital letter b
+1D63E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+ # <font> 0043 latin capital letter c
+1D63F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+ # <font> 0044 latin capital letter d
+1D640 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+ # <font> 0045 latin capital letter e
+1D641 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+ # <font> 0046 latin capital letter f
+1D642 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+ # <font> 0047 latin capital letter g
+1D643 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+ # <font> 0048 latin capital letter h
+1D644 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+ # <font> 0049 latin capital letter i
+1D645 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+ # <font> 004A latin capital letter j
+1D646 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+ # <font> 004B latin capital letter k
+1D647 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+ # <font> 004C latin capital letter l
+1D648 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+ # <font> 004D latin capital letter m
+1D649 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+ # <font> 004E latin capital letter n
+1D64A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+ # <font> 004F latin capital letter o
+1D64B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+ # <font> 0050 latin capital letter p
+1D64C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D64D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+ # <font> 0052 latin capital letter r
+1D64E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+ # <font> 0053 latin capital letter s
+1D64F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+ # <font> 0054 latin capital letter t
+1D650 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+ # <font> 0055 latin capital letter u
+1D651 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+ # <font> 0056 latin capital letter v
+1D652 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+ # <font> 0057 latin capital letter w
+1D653 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+ # <font> 0058 latin capital letter x
+1D654 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D655 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+ # <font> 005A latin capital letter z
+1D656 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+ # <font> 0061 latin small letter a
+1D657 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+ # <font> 0062 latin small letter b
+1D658 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+ # <font> 0063 latin small letter c
+1D659 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+ # <font> 0064 latin small letter d
+1D65A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+ # <font> 0065 latin small letter e
+1D65B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+ # <font> 0066 latin small letter f
+1D65C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+ # <font> 0067 latin small letter g
+1D65D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+ # <font> 0068 latin small letter h
+1D65E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+ # <font> 0069 latin small letter i
+1D65F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+ # <font> 006A latin small letter j
+1D660 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+ # <font> 006B latin small letter k
+1D661 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+ # <font> 006C latin small letter l
+1D662 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+ # <font> 006D latin small letter m
+1D663 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+ # <font> 006E latin small letter n
+1D664 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+ # <font> 006F latin small letter o
+1D665 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+ # <font> 0070 latin small letter p
+1D666 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+ # <font> 0071 latin small letter q
+1D667 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+ # <font> 0072 latin small letter r
+1D668 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+ # <font> 0073 latin small letter s
+1D669 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+ # <font> 0074 latin small letter t
+1D66A MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+ # <font> 0075 latin small letter u
+1D66B MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+ # <font> 0076 latin small letter v
+1D66C MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+ # <font> 0077 latin small letter w
+1D66D MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+ # <font> 0078 latin small letter x
+1D66E MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+ # <font> 0079 latin small letter y
+1D66F MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+ # <font> 007A latin small letter z
+@ Monospace symbols
+1D670 MATHEMATICAL MONOSPACE CAPITAL A
+ # <font> 0041 latin capital letter a
+1D671 MATHEMATICAL MONOSPACE CAPITAL B
+ # <font> 0042 latin capital letter b
+1D672 MATHEMATICAL MONOSPACE CAPITAL C
+ # <font> 0043 latin capital letter c
+1D673 MATHEMATICAL MONOSPACE CAPITAL D
+ # <font> 0044 latin capital letter d
+1D674 MATHEMATICAL MONOSPACE CAPITAL E
+ # <font> 0045 latin capital letter e
+1D675 MATHEMATICAL MONOSPACE CAPITAL F
+ # <font> 0046 latin capital letter f
+1D676 MATHEMATICAL MONOSPACE CAPITAL G
+ # <font> 0047 latin capital letter g
+1D677 MATHEMATICAL MONOSPACE CAPITAL H
+ # <font> 0048 latin capital letter h
+1D678 MATHEMATICAL MONOSPACE CAPITAL I
+ # <font> 0049 latin capital letter i
+1D679 MATHEMATICAL MONOSPACE CAPITAL J
+ # <font> 004A latin capital letter j
+1D67A MATHEMATICAL MONOSPACE CAPITAL K
+ # <font> 004B latin capital letter k
+1D67B MATHEMATICAL MONOSPACE CAPITAL L
+ # <font> 004C latin capital letter l
+1D67C MATHEMATICAL MONOSPACE CAPITAL M
+ # <font> 004D latin capital letter m
+1D67D MATHEMATICAL MONOSPACE CAPITAL N
+ # <font> 004E latin capital letter n
+1D67E MATHEMATICAL MONOSPACE CAPITAL O
+ # <font> 004F latin capital letter o
+1D67F MATHEMATICAL MONOSPACE CAPITAL P
+ # <font> 0050 latin capital letter p
+1D680 MATHEMATICAL MONOSPACE CAPITAL Q
+ # <font> 0051 latin capital letter q
+1D681 MATHEMATICAL MONOSPACE CAPITAL R
+ # <font> 0052 latin capital letter r
+1D682 MATHEMATICAL MONOSPACE CAPITAL S
+ # <font> 0053 latin capital letter s
+1D683 MATHEMATICAL MONOSPACE CAPITAL T
+ # <font> 0054 latin capital letter t
+1D684 MATHEMATICAL MONOSPACE CAPITAL U
+ # <font> 0055 latin capital letter u
+1D685 MATHEMATICAL MONOSPACE CAPITAL V
+ # <font> 0056 latin capital letter v
+1D686 MATHEMATICAL MONOSPACE CAPITAL W
+ # <font> 0057 latin capital letter w
+1D687 MATHEMATICAL MONOSPACE CAPITAL X
+ # <font> 0058 latin capital letter x
+1D688 MATHEMATICAL MONOSPACE CAPITAL Y
+ # <font> 0059 latin capital letter y
+1D689 MATHEMATICAL MONOSPACE CAPITAL Z
+ # <font> 005A latin capital letter z
+1D68A MATHEMATICAL MONOSPACE SMALL A
+ # <font> 0061 latin small letter a
+1D68B MATHEMATICAL MONOSPACE SMALL B
+ # <font> 0062 latin small letter b
+1D68C MATHEMATICAL MONOSPACE SMALL C
+ # <font> 0063 latin small letter c
+1D68D MATHEMATICAL MONOSPACE SMALL D
+ # <font> 0064 latin small letter d
+1D68E MATHEMATICAL MONOSPACE SMALL E
+ # <font> 0065 latin small letter e
+1D68F MATHEMATICAL MONOSPACE SMALL F
+ # <font> 0066 latin small letter f
+1D690 MATHEMATICAL MONOSPACE SMALL G
+ # <font> 0067 latin small letter g
+1D691 MATHEMATICAL MONOSPACE SMALL H
+ # <font> 0068 latin small letter h
+1D692 MATHEMATICAL MONOSPACE SMALL I
+ # <font> 0069 latin small letter i
+1D693 MATHEMATICAL MONOSPACE SMALL J
+ # <font> 006A latin small letter j
+1D694 MATHEMATICAL MONOSPACE SMALL K
+ # <font> 006B latin small letter k
+1D695 MATHEMATICAL MONOSPACE SMALL L
+ # <font> 006C latin small letter l
+1D696 MATHEMATICAL MONOSPACE SMALL M
+ # <font> 006D latin small letter m
+1D697 MATHEMATICAL MONOSPACE SMALL N
+ # <font> 006E latin small letter n
+1D698 MATHEMATICAL MONOSPACE SMALL O
+ # <font> 006F latin small letter o
+1D699 MATHEMATICAL MONOSPACE SMALL P
+ # <font> 0070 latin small letter p
+1D69A MATHEMATICAL MONOSPACE SMALL Q
+ # <font> 0071 latin small letter q
+1D69B MATHEMATICAL MONOSPACE SMALL R
+ # <font> 0072 latin small letter r
+1D69C MATHEMATICAL MONOSPACE SMALL S
+ # <font> 0073 latin small letter s
+1D69D MATHEMATICAL MONOSPACE SMALL T
+ # <font> 0074 latin small letter t
+1D69E MATHEMATICAL MONOSPACE SMALL U
+ # <font> 0075 latin small letter u
+1D69F MATHEMATICAL MONOSPACE SMALL V
+ # <font> 0076 latin small letter v
+1D6A0 MATHEMATICAL MONOSPACE SMALL W
+ # <font> 0077 latin small letter w
+1D6A1 MATHEMATICAL MONOSPACE SMALL X
+ # <font> 0078 latin small letter x
+1D6A2 MATHEMATICAL MONOSPACE SMALL Y
+ # <font> 0079 latin small letter y
+1D6A3 MATHEMATICAL MONOSPACE SMALL Z
+ # <font> 007A latin small letter z
+@ Dotless symbols
+@+ For use as independent symbols. These are not required as base characters for accents since regular i and j are soft-dotted in Unicode.
+1D6A4 MATHEMATICAL ITALIC SMALL DOTLESS I
+ = \imath
+ x (latin small letter dotless i - 0131)
+ x (mathematical italic small i - 1D456)
+ # <font> 0131 latin small letter dotless i
+1D6A5 MATHEMATICAL ITALIC SMALL DOTLESS J
+ = \jmath
+ x (latin small letter dotless j - 0237)
+ x (mathematical italic small j - 1D457)
+ # <font> 0237 latin small letter dotless j
+@ Bold Greek symbols
+1D6A8 MATHEMATICAL BOLD CAPITAL ALPHA
+ # <font> 0391 greek capital letter alpha
+1D6A9 MATHEMATICAL BOLD CAPITAL BETA
+ # <font> 0392 greek capital letter beta
+1D6AA MATHEMATICAL BOLD CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+1D6AB MATHEMATICAL BOLD CAPITAL DELTA
+ # <font> 0394 greek capital letter delta
+1D6AC MATHEMATICAL BOLD CAPITAL EPSILON
+ # <font> 0395 greek capital letter epsilon
+1D6AD MATHEMATICAL BOLD CAPITAL ZETA
+ # <font> 0396 greek capital letter zeta
+1D6AE MATHEMATICAL BOLD CAPITAL ETA
+ # <font> 0397 greek capital letter eta
+1D6AF MATHEMATICAL BOLD CAPITAL THETA
+ # <font> 0398 greek capital letter theta
+1D6B0 MATHEMATICAL BOLD CAPITAL IOTA
+ # <font> 0399 greek capital letter iota
+1D6B1 MATHEMATICAL BOLD CAPITAL KAPPA
+ # <font> 039A greek capital letter kappa
+1D6B2 MATHEMATICAL BOLD CAPITAL LAMDA
+ # <font> 039B greek capital letter lamda
+1D6B3 MATHEMATICAL BOLD CAPITAL MU
+ # <font> 039C greek capital letter mu
+1D6B4 MATHEMATICAL BOLD CAPITAL NU
+ # <font> 039D greek capital letter nu
+1D6B5 MATHEMATICAL BOLD CAPITAL XI
+ # <font> 039E greek capital letter xi
+1D6B6 MATHEMATICAL BOLD CAPITAL OMICRON
+ # <font> 039F greek capital letter omicron
+1D6B7 MATHEMATICAL BOLD CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+1D6B8 MATHEMATICAL BOLD CAPITAL RHO
+ # <font> 03A1 greek capital letter rho
+1D6B9 MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+ # <font> 03F4 greek capital theta symbol
+1D6BA MATHEMATICAL BOLD CAPITAL SIGMA
+ # <font> 03A3 greek capital letter sigma
+1D6BB MATHEMATICAL BOLD CAPITAL TAU
+ # <font> 03A4 greek capital letter tau
+1D6BC MATHEMATICAL BOLD CAPITAL UPSILON
+ # <font> 03A5 greek capital letter upsilon
+1D6BD MATHEMATICAL BOLD CAPITAL PHI
+ # <font> 03A6 greek capital letter phi
+1D6BE MATHEMATICAL BOLD CAPITAL CHI
+ # <font> 03A7 greek capital letter chi
+1D6BF MATHEMATICAL BOLD CAPITAL PSI
+ # <font> 03A8 greek capital letter psi
+1D6C0 MATHEMATICAL BOLD CAPITAL OMEGA
+ # <font> 03A9 greek capital letter omega
+1D6C1 MATHEMATICAL BOLD NABLA
+ # <font> 2207 nabla
+1D6C2 MATHEMATICAL BOLD SMALL ALPHA
+ # <font> 03B1 greek small letter alpha
+1D6C3 MATHEMATICAL BOLD SMALL BETA
+ # <font> 03B2 greek small letter beta
+1D6C4 MATHEMATICAL BOLD SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+1D6C5 MATHEMATICAL BOLD SMALL DELTA
+ # <font> 03B4 greek small letter delta
+1D6C6 MATHEMATICAL BOLD SMALL EPSILON
+ # <font> 03B5 greek small letter epsilon
+1D6C7 MATHEMATICAL BOLD SMALL ZETA
+ # <font> 03B6 greek small letter zeta
+1D6C8 MATHEMATICAL BOLD SMALL ETA
+ # <font> 03B7 greek small letter eta
+1D6C9 MATHEMATICAL BOLD SMALL THETA
+ # <font> 03B8 greek small letter theta
+1D6CA MATHEMATICAL BOLD SMALL IOTA
+ # <font> 03B9 greek small letter iota
+1D6CB MATHEMATICAL BOLD SMALL KAPPA
+ # <font> 03BA greek small letter kappa
+1D6CC MATHEMATICAL BOLD SMALL LAMDA
+ # <font> 03BB greek small letter lamda
+1D6CD MATHEMATICAL BOLD SMALL MU
+ # <font> 03BC greek small letter mu
+1D6CE MATHEMATICAL BOLD SMALL NU
+ # <font> 03BD greek small letter nu
+1D6CF MATHEMATICAL BOLD SMALL XI
+ # <font> 03BE greek small letter xi
+1D6D0 MATHEMATICAL BOLD SMALL OMICRON
+ # <font> 03BF greek small letter omicron
+1D6D1 MATHEMATICAL BOLD SMALL PI
+ # <font> 03C0 greek small letter pi
+1D6D2 MATHEMATICAL BOLD SMALL RHO
+ # <font> 03C1 greek small letter rho
+1D6D3 MATHEMATICAL BOLD SMALL FINAL SIGMA
+ # <font> 03C2 greek small letter final sigma
+1D6D4 MATHEMATICAL BOLD SMALL SIGMA
+ # <font> 03C3 greek small letter sigma
+1D6D5 MATHEMATICAL BOLD SMALL TAU
+ # <font> 03C4 greek small letter tau
+1D6D6 MATHEMATICAL BOLD SMALL UPSILON
+ # <font> 03C5 greek small letter upsilon
+1D6D7 MATHEMATICAL BOLD SMALL PHI
+ # <font> 03C6 greek small letter phi
+1D6D8 MATHEMATICAL BOLD SMALL CHI
+ # <font> 03C7 greek small letter chi
+1D6D9 MATHEMATICAL BOLD SMALL PSI
+ # <font> 03C8 greek small letter psi
+1D6DA MATHEMATICAL BOLD SMALL OMEGA
+ # <font> 03C9 greek small letter omega
+@ Additional bold Greek symbols
+1D6DB MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+ # <font> 2202 partial differential
+1D6DC MATHEMATICAL BOLD EPSILON SYMBOL
+ # <font> 03F5 greek lunate epsilon symbol
+1D6DD MATHEMATICAL BOLD THETA SYMBOL
+ # <font> 03D1 greek theta symbol
+1D6DE MATHEMATICAL BOLD KAPPA SYMBOL
+ # <font> 03F0 greek kappa symbol
+1D6DF MATHEMATICAL BOLD PHI SYMBOL
+ # <font> 03D5 greek phi symbol
+1D6E0 MATHEMATICAL BOLD RHO SYMBOL
+ # <font> 03F1 greek rho symbol
+1D6E1 MATHEMATICAL BOLD PI SYMBOL
+ # <font> 03D6 greek pi symbol
+@ Italic Greek symbols
+1D6E2 MATHEMATICAL ITALIC CAPITAL ALPHA
+ # <font> 0391 greek capital letter alpha
+1D6E3 MATHEMATICAL ITALIC CAPITAL BETA
+ # <font> 0392 greek capital letter beta
+1D6E4 MATHEMATICAL ITALIC CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+1D6E5 MATHEMATICAL ITALIC CAPITAL DELTA
+ # <font> 0394 greek capital letter delta
+1D6E6 MATHEMATICAL ITALIC CAPITAL EPSILON
+ # <font> 0395 greek capital letter epsilon
+1D6E7 MATHEMATICAL ITALIC CAPITAL ZETA
+ # <font> 0396 greek capital letter zeta
+1D6E8 MATHEMATICAL ITALIC CAPITAL ETA
+ # <font> 0397 greek capital letter eta
+1D6E9 MATHEMATICAL ITALIC CAPITAL THETA
+ # <font> 0398 greek capital letter theta
+1D6EA MATHEMATICAL ITALIC CAPITAL IOTA
+ # <font> 0399 greek capital letter iota
+1D6EB MATHEMATICAL ITALIC CAPITAL KAPPA
+ # <font> 039A greek capital letter kappa
+1D6EC MATHEMATICAL ITALIC CAPITAL LAMDA
+ # <font> 039B greek capital letter lamda
+1D6ED MATHEMATICAL ITALIC CAPITAL MU
+ # <font> 039C greek capital letter mu
+1D6EE MATHEMATICAL ITALIC CAPITAL NU
+ # <font> 039D greek capital letter nu
+1D6EF MATHEMATICAL ITALIC CAPITAL XI
+ # <font> 039E greek capital letter xi
+1D6F0 MATHEMATICAL ITALIC CAPITAL OMICRON
+ # <font> 039F greek capital letter omicron
+1D6F1 MATHEMATICAL ITALIC CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+1D6F2 MATHEMATICAL ITALIC CAPITAL RHO
+ # <font> 03A1 greek capital letter rho
+1D6F3 MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+ # <font> 03F4 greek capital theta symbol
+1D6F4 MATHEMATICAL ITALIC CAPITAL SIGMA
+ # <font> 03A3 greek capital letter sigma
+1D6F5 MATHEMATICAL ITALIC CAPITAL TAU
+ # <font> 03A4 greek capital letter tau
+1D6F6 MATHEMATICAL ITALIC CAPITAL UPSILON
+ # <font> 03A5 greek capital letter upsilon
+1D6F7 MATHEMATICAL ITALIC CAPITAL PHI
+ # <font> 03A6 greek capital letter phi
+1D6F8 MATHEMATICAL ITALIC CAPITAL CHI
+ # <font> 03A7 greek capital letter chi
+1D6F9 MATHEMATICAL ITALIC CAPITAL PSI
+ # <font> 03A8 greek capital letter psi
+1D6FA MATHEMATICAL ITALIC CAPITAL OMEGA
+ # <font> 03A9 greek capital letter omega
+1D6FB MATHEMATICAL ITALIC NABLA
+ # <font> 2207 nabla
+1D6FC MATHEMATICAL ITALIC SMALL ALPHA
+ # <font> 03B1 greek small letter alpha
+1D6FD MATHEMATICAL ITALIC SMALL BETA
+ # <font> 03B2 greek small letter beta
+1D6FE MATHEMATICAL ITALIC SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+1D6FF MATHEMATICAL ITALIC SMALL DELTA
+ # <font> 03B4 greek small letter delta
+1D700 MATHEMATICAL ITALIC SMALL EPSILON
+ # <font> 03B5 greek small letter epsilon
+1D701 MATHEMATICAL ITALIC SMALL ZETA
+ # <font> 03B6 greek small letter zeta
+1D702 MATHEMATICAL ITALIC SMALL ETA
+ # <font> 03B7 greek small letter eta
+1D703 MATHEMATICAL ITALIC SMALL THETA
+ # <font> 03B8 greek small letter theta
+1D704 MATHEMATICAL ITALIC SMALL IOTA
+ # <font> 03B9 greek small letter iota
+1D705 MATHEMATICAL ITALIC SMALL KAPPA
+ # <font> 03BA greek small letter kappa
+1D706 MATHEMATICAL ITALIC SMALL LAMDA
+ # <font> 03BB greek small letter lamda
+1D707 MATHEMATICAL ITALIC SMALL MU
+ # <font> 03BC greek small letter mu
+1D708 MATHEMATICAL ITALIC SMALL NU
+ # <font> 03BD greek small letter nu
+1D709 MATHEMATICAL ITALIC SMALL XI
+ # <font> 03BE greek small letter xi
+1D70A MATHEMATICAL ITALIC SMALL OMICRON
+ # <font> 03BF greek small letter omicron
+1D70B MATHEMATICAL ITALIC SMALL PI
+ # <font> 03C0 greek small letter pi
+1D70C MATHEMATICAL ITALIC SMALL RHO
+ # <font> 03C1 greek small letter rho
+1D70D MATHEMATICAL ITALIC SMALL FINAL SIGMA
+ # <font> 03C2 greek small letter final sigma
+1D70E MATHEMATICAL ITALIC SMALL SIGMA
+ # <font> 03C3 greek small letter sigma
+1D70F MATHEMATICAL ITALIC SMALL TAU
+ # <font> 03C4 greek small letter tau
+1D710 MATHEMATICAL ITALIC SMALL UPSILON
+ # <font> 03C5 greek small letter upsilon
+1D711 MATHEMATICAL ITALIC SMALL PHI
+ # <font> 03C6 greek small letter phi
+1D712 MATHEMATICAL ITALIC SMALL CHI
+ # <font> 03C7 greek small letter chi
+1D713 MATHEMATICAL ITALIC SMALL PSI
+ # <font> 03C8 greek small letter psi
+1D714 MATHEMATICAL ITALIC SMALL OMEGA
+ # <font> 03C9 greek small letter omega
+@ Additional italic Greek symbols
+1D715 MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+ # <font> 2202 partial differential
+1D716 MATHEMATICAL ITALIC EPSILON SYMBOL
+ # <font> 03F5 greek lunate epsilon symbol
+1D717 MATHEMATICAL ITALIC THETA SYMBOL
+ # <font> 03D1 greek theta symbol
+1D718 MATHEMATICAL ITALIC KAPPA SYMBOL
+ # <font> 03F0 greek kappa symbol
+1D719 MATHEMATICAL ITALIC PHI SYMBOL
+ # <font> 03D5 greek phi symbol
+1D71A MATHEMATICAL ITALIC RHO SYMBOL
+ # <font> 03F1 greek rho symbol
+1D71B MATHEMATICAL ITALIC PI SYMBOL
+ # <font> 03D6 greek pi symbol
+@ Bold italic Greek symbols
+1D71C MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+ # <font> 0391 greek capital letter alpha
+1D71D MATHEMATICAL BOLD ITALIC CAPITAL BETA
+ # <font> 0392 greek capital letter beta
+1D71E MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+1D71F MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+ # <font> 0394 greek capital letter delta
+1D720 MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+ # <font> 0395 greek capital letter epsilon
+1D721 MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+ # <font> 0396 greek capital letter zeta
+1D722 MATHEMATICAL BOLD ITALIC CAPITAL ETA
+ # <font> 0397 greek capital letter eta
+1D723 MATHEMATICAL BOLD ITALIC CAPITAL THETA
+ # <font> 0398 greek capital letter theta
+1D724 MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+ # <font> 0399 greek capital letter iota
+1D725 MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+ # <font> 039A greek capital letter kappa
+1D726 MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+ # <font> 039B greek capital letter lamda
+1D727 MATHEMATICAL BOLD ITALIC CAPITAL MU
+ # <font> 039C greek capital letter mu
+1D728 MATHEMATICAL BOLD ITALIC CAPITAL NU
+ # <font> 039D greek capital letter nu
+1D729 MATHEMATICAL BOLD ITALIC CAPITAL XI
+ # <font> 039E greek capital letter xi
+1D72A MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+ # <font> 039F greek capital letter omicron
+1D72B MATHEMATICAL BOLD ITALIC CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+1D72C MATHEMATICAL BOLD ITALIC CAPITAL RHO
+ # <font> 03A1 greek capital letter rho
+1D72D MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+ # <font> 03F4 greek capital theta symbol
+1D72E MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+ # <font> 03A3 greek capital letter sigma
+1D72F MATHEMATICAL BOLD ITALIC CAPITAL TAU
+ # <font> 03A4 greek capital letter tau
+1D730 MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+ # <font> 03A5 greek capital letter upsilon
+1D731 MATHEMATICAL BOLD ITALIC CAPITAL PHI
+ # <font> 03A6 greek capital letter phi
+1D732 MATHEMATICAL BOLD ITALIC CAPITAL CHI
+ # <font> 03A7 greek capital letter chi
+1D733 MATHEMATICAL BOLD ITALIC CAPITAL PSI
+ # <font> 03A8 greek capital letter psi
+1D734 MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+ # <font> 03A9 greek capital letter omega
+1D735 MATHEMATICAL BOLD ITALIC NABLA
+ # <font> 2207 nabla
+1D736 MATHEMATICAL BOLD ITALIC SMALL ALPHA
+ # <font> 03B1 greek small letter alpha
+1D737 MATHEMATICAL BOLD ITALIC SMALL BETA
+ # <font> 03B2 greek small letter beta
+1D738 MATHEMATICAL BOLD ITALIC SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+1D739 MATHEMATICAL BOLD ITALIC SMALL DELTA
+ # <font> 03B4 greek small letter delta
+1D73A MATHEMATICAL BOLD ITALIC SMALL EPSILON
+ # <font> 03B5 greek small letter epsilon
+1D73B MATHEMATICAL BOLD ITALIC SMALL ZETA
+ # <font> 03B6 greek small letter zeta
+1D73C MATHEMATICAL BOLD ITALIC SMALL ETA
+ # <font> 03B7 greek small letter eta
+1D73D MATHEMATICAL BOLD ITALIC SMALL THETA
+ # <font> 03B8 greek small letter theta
+1D73E MATHEMATICAL BOLD ITALIC SMALL IOTA
+ # <font> 03B9 greek small letter iota
+1D73F MATHEMATICAL BOLD ITALIC SMALL KAPPA
+ # <font> 03BA greek small letter kappa
+1D740 MATHEMATICAL BOLD ITALIC SMALL LAMDA
+ # <font> 03BB greek small letter lamda
+1D741 MATHEMATICAL BOLD ITALIC SMALL MU
+ # <font> 03BC greek small letter mu
+1D742 MATHEMATICAL BOLD ITALIC SMALL NU
+ # <font> 03BD greek small letter nu
+1D743 MATHEMATICAL BOLD ITALIC SMALL XI
+ # <font> 03BE greek small letter xi
+1D744 MATHEMATICAL BOLD ITALIC SMALL OMICRON
+ # <font> 03BF greek small letter omicron
+1D745 MATHEMATICAL BOLD ITALIC SMALL PI
+ # <font> 03C0 greek small letter pi
+1D746 MATHEMATICAL BOLD ITALIC SMALL RHO
+ # <font> 03C1 greek small letter rho
+1D747 MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+ # <font> 03C2 greek small letter final sigma
+1D748 MATHEMATICAL BOLD ITALIC SMALL SIGMA
+ # <font> 03C3 greek small letter sigma
+1D749 MATHEMATICAL BOLD ITALIC SMALL TAU
+ # <font> 03C4 greek small letter tau
+1D74A MATHEMATICAL BOLD ITALIC SMALL UPSILON
+ # <font> 03C5 greek small letter upsilon
+1D74B MATHEMATICAL BOLD ITALIC SMALL PHI
+ # <font> 03C6 greek small letter phi
+1D74C MATHEMATICAL BOLD ITALIC SMALL CHI
+ # <font> 03C7 greek small letter chi
+1D74D MATHEMATICAL BOLD ITALIC SMALL PSI
+ # <font> 03C8 greek small letter psi
+1D74E MATHEMATICAL BOLD ITALIC SMALL OMEGA
+ # <font> 03C9 greek small letter omega
+@ Additional bold italic Greek symbols
+1D74F MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+ # <font> 2202 partial differential
+1D750 MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+ # <font> 03F5 greek lunate epsilon symbol
+1D751 MATHEMATICAL BOLD ITALIC THETA SYMBOL
+ # <font> 03D1 greek theta symbol
+1D752 MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+ # <font> 03F0 greek kappa symbol
+1D753 MATHEMATICAL BOLD ITALIC PHI SYMBOL
+ # <font> 03D5 greek phi symbol
+1D754 MATHEMATICAL BOLD ITALIC RHO SYMBOL
+ # <font> 03F1 greek rho symbol
+1D755 MATHEMATICAL BOLD ITALIC PI SYMBOL
+ # <font> 03D6 greek pi symbol
+@ Sans-serif bold Greek symbols
+1D756 MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+ # <font> 0391 greek capital letter alpha
+1D757 MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+ # <font> 0392 greek capital letter beta
+1D758 MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+1D759 MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+ # <font> 0394 greek capital letter delta
+1D75A MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+ # <font> 0395 greek capital letter epsilon
+1D75B MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+ # <font> 0396 greek capital letter zeta
+1D75C MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+ # <font> 0397 greek capital letter eta
+1D75D MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+ # <font> 0398 greek capital letter theta
+1D75E MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+ # <font> 0399 greek capital letter iota
+1D75F MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+ # <font> 039A greek capital letter kappa
+1D760 MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+ # <font> 039B greek capital letter lamda
+1D761 MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+ # <font> 039C greek capital letter mu
+1D762 MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+ # <font> 039D greek capital letter nu
+1D763 MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+ # <font> 039E greek capital letter xi
+1D764 MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+ # <font> 039F greek capital letter omicron
+1D765 MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+1D766 MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+ # <font> 03A1 greek capital letter rho
+1D767 MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+ # <font> 03F4 greek capital theta symbol
+1D768 MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+ # <font> 03A3 greek capital letter sigma
+1D769 MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+ # <font> 03A4 greek capital letter tau
+1D76A MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+ # <font> 03A5 greek capital letter upsilon
+1D76B MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+ # <font> 03A6 greek capital letter phi
+1D76C MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+ # <font> 03A7 greek capital letter chi
+1D76D MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+ # <font> 03A8 greek capital letter psi
+1D76E MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+ # <font> 03A9 greek capital letter omega
+1D76F MATHEMATICAL SANS-SERIF BOLD NABLA
+ # <font> 2207 nabla
+1D770 MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+ # <font> 03B1 greek small letter alpha
+1D771 MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+ # <font> 03B2 greek small letter beta
+1D772 MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+1D773 MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+ # <font> 03B4 greek small letter delta
+1D774 MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+ # <font> 03B5 greek small letter epsilon
+1D775 MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+ # <font> 03B6 greek small letter zeta
+1D776 MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+ # <font> 03B7 greek small letter eta
+1D777 MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+ # <font> 03B8 greek small letter theta
+1D778 MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+ # <font> 03B9 greek small letter iota
+1D779 MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+ # <font> 03BA greek small letter kappa
+1D77A MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+ # <font> 03BB greek small letter lamda
+1D77B MATHEMATICAL SANS-SERIF BOLD SMALL MU
+ # <font> 03BC greek small letter mu
+1D77C MATHEMATICAL SANS-SERIF BOLD SMALL NU
+ # <font> 03BD greek small letter nu
+1D77D MATHEMATICAL SANS-SERIF BOLD SMALL XI
+ # <font> 03BE greek small letter xi
+1D77E MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+ # <font> 03BF greek small letter omicron
+1D77F MATHEMATICAL SANS-SERIF BOLD SMALL PI
+ # <font> 03C0 greek small letter pi
+1D780 MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+ # <font> 03C1 greek small letter rho
+1D781 MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+ # <font> 03C2 greek small letter final sigma
+1D782 MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+ # <font> 03C3 greek small letter sigma
+1D783 MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+ # <font> 03C4 greek small letter tau
+1D784 MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+ # <font> 03C5 greek small letter upsilon
+1D785 MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+ # <font> 03C6 greek small letter phi
+1D786 MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+ # <font> 03C7 greek small letter chi
+1D787 MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+ # <font> 03C8 greek small letter psi
+1D788 MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+ # <font> 03C9 greek small letter omega
+@ Additional sans-serif bold Greek symbols
+1D789 MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+ # <font> 2202 partial differential
+1D78A MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+ # <font> 03F5 greek lunate epsilon symbol
+1D78B MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+ # <font> 03D1 greek theta symbol
+1D78C MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+ # <font> 03F0 greek kappa symbol
+1D78D MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+ # <font> 03D5 greek phi symbol
+1D78E MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+ # <font> 03F1 greek rho symbol
+1D78F MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+ # <font> 03D6 greek pi symbol
+@ Sans-serif bold italic Greek symbols
+1D790 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+ # <font> 0391 greek capital letter alpha
+1D791 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+ # <font> 0392 greek capital letter beta
+1D792 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+ # <font> 0393 greek capital letter gamma
+1D793 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+ # <font> 0394 greek capital letter delta
+1D794 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+ # <font> 0395 greek capital letter epsilon
+1D795 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+ # <font> 0396 greek capital letter zeta
+1D796 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+ # <font> 0397 greek capital letter eta
+1D797 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+ # <font> 0398 greek capital letter theta
+1D798 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+ # <font> 0399 greek capital letter iota
+1D799 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+ # <font> 039A greek capital letter kappa
+1D79A MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+ # <font> 039B greek capital letter lamda
+1D79B MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+ # <font> 039C greek capital letter mu
+1D79C MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+ # <font> 039D greek capital letter nu
+1D79D MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+ # <font> 039E greek capital letter xi
+1D79E MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+ # <font> 039F greek capital letter omicron
+1D79F MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+ # <font> 03A0 greek capital letter pi
+1D7A0 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+ # <font> 03A1 greek capital letter rho
+1D7A1 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+ # <font> 03F4 greek capital theta symbol
+1D7A2 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+ # <font> 03A3 greek capital letter sigma
+1D7A3 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+ # <font> 03A4 greek capital letter tau
+1D7A4 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+ # <font> 03A5 greek capital letter upsilon
+1D7A5 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+ # <font> 03A6 greek capital letter phi
+1D7A6 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+ # <font> 03A7 greek capital letter chi
+1D7A7 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+ # <font> 03A8 greek capital letter psi
+1D7A8 MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+ # <font> 03A9 greek capital letter omega
+1D7A9 MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+ # <font> 2207 nabla
+1D7AA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+ # <font> 03B1 greek small letter alpha
+1D7AB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+ # <font> 03B2 greek small letter beta
+1D7AC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+ # <font> 03B3 greek small letter gamma
+1D7AD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+ # <font> 03B4 greek small letter delta
+1D7AE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+ # <font> 03B5 greek small letter epsilon
+1D7AF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+ # <font> 03B6 greek small letter zeta
+1D7B0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+ # <font> 03B7 greek small letter eta
+1D7B1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+ # <font> 03B8 greek small letter theta
+1D7B2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+ # <font> 03B9 greek small letter iota
+1D7B3 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+ # <font> 03BA greek small letter kappa
+1D7B4 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+ # <font> 03BB greek small letter lamda
+1D7B5 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+ # <font> 03BC greek small letter mu
+1D7B6 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+ # <font> 03BD greek small letter nu
+1D7B7 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+ # <font> 03BE greek small letter xi
+1D7B8 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+ # <font> 03BF greek small letter omicron
+1D7B9 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+ # <font> 03C0 greek small letter pi
+1D7BA MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+ # <font> 03C1 greek small letter rho
+1D7BB MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+ # <font> 03C2 greek small letter final sigma
+1D7BC MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+ # <font> 03C3 greek small letter sigma
+1D7BD MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+ # <font> 03C4 greek small letter tau
+1D7BE MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+ # <font> 03C5 greek small letter upsilon
+1D7BF MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+ # <font> 03C6 greek small letter phi
+1D7C0 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+ # <font> 03C7 greek small letter chi
+1D7C1 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+ # <font> 03C8 greek small letter psi
+1D7C2 MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+ # <font> 03C9 greek small letter omega
+@ Additional sans-serif bold italic Greek symbols
+1D7C3 MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+ # <font> 2202 partial differential
+1D7C4 MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+ # <font> 03F5 greek lunate epsilon symbol
+1D7C5 MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+ # <font> 03D1 greek theta symbol
+1D7C6 MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+ # <font> 03F0 greek kappa symbol
+1D7C7 MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+ # <font> 03D5 greek phi symbol
+1D7C8 MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+ # <font> 03F1 greek rho symbol
+1D7C9 MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+ # <font> 03D6 greek pi symbol
+@ Bold digits
+1D7CE MATHEMATICAL BOLD DIGIT ZERO
+ # <font> 0030 digit zero
+1D7CF MATHEMATICAL BOLD DIGIT ONE
+ # <font> 0031 digit one
+1D7D0 MATHEMATICAL BOLD DIGIT TWO
+ # <font> 0032 digit two
+1D7D1 MATHEMATICAL BOLD DIGIT THREE
+ # <font> 0033 digit three
+1D7D2 MATHEMATICAL BOLD DIGIT FOUR
+ # <font> 0034 digit four
+1D7D3 MATHEMATICAL BOLD DIGIT FIVE
+ # <font> 0035 digit five
+1D7D4 MATHEMATICAL BOLD DIGIT SIX
+ # <font> 0036 digit six
+1D7D5 MATHEMATICAL BOLD DIGIT SEVEN
+ # <font> 0037 digit seven
+1D7D6 MATHEMATICAL BOLD DIGIT EIGHT
+ # <font> 0038 digit eight
+1D7D7 MATHEMATICAL BOLD DIGIT NINE
+ # <font> 0039 digit nine
+@ Double-struck digits
+1D7D8 MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+ # <font> 0030 digit zero
+1D7D9 MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+ # <font> 0031 digit one
+1D7DA MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+ # <font> 0032 digit two
+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+ # <font> 0033 digit three
+1D7DC MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+ # <font> 0034 digit four
+1D7DD MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+ # <font> 0035 digit five
+1D7DE MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+ # <font> 0036 digit six
+1D7DF MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+ # <font> 0037 digit seven
+1D7E0 MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+ # <font> 0038 digit eight
+1D7E1 MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+ # <font> 0039 digit nine
+@ Sans-serif digits
+1D7E2 MATHEMATICAL SANS-SERIF DIGIT ZERO
+ # <font> 0030 digit zero
+1D7E3 MATHEMATICAL SANS-SERIF DIGIT ONE
+ # <font> 0031 digit one
+1D7E4 MATHEMATICAL SANS-SERIF DIGIT TWO
+ # <font> 0032 digit two
+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE
+ # <font> 0033 digit three
+1D7E6 MATHEMATICAL SANS-SERIF DIGIT FOUR
+ # <font> 0034 digit four
+1D7E7 MATHEMATICAL SANS-SERIF DIGIT FIVE
+ # <font> 0035 digit five
+1D7E8 MATHEMATICAL SANS-SERIF DIGIT SIX
+ # <font> 0036 digit six
+1D7E9 MATHEMATICAL SANS-SERIF DIGIT SEVEN
+ # <font> 0037 digit seven
+1D7EA MATHEMATICAL SANS-SERIF DIGIT EIGHT
+ # <font> 0038 digit eight
+1D7EB MATHEMATICAL SANS-SERIF DIGIT NINE
+ # <font> 0039 digit nine
+@ Sans-serif bold digits
+1D7EC MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+ # <font> 0030 digit zero
+1D7ED MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+ # <font> 0031 digit one
+1D7EE MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+ # <font> 0032 digit two
+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+ # <font> 0033 digit three
+1D7F0 MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+ # <font> 0034 digit four
+1D7F1 MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+ # <font> 0035 digit five
+1D7F2 MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+ # <font> 0036 digit six
+1D7F3 MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+ # <font> 0037 digit seven
+1D7F4 MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+ # <font> 0038 digit eight
+1D7F5 MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+ # <font> 0039 digit nine
+@ Monospace digits
+1D7F6 MATHEMATICAL MONOSPACE DIGIT ZERO
+ # <font> 0030 digit zero
+1D7F7 MATHEMATICAL MONOSPACE DIGIT ONE
+ # <font> 0031 digit one
+1D7F8 MATHEMATICAL MONOSPACE DIGIT TWO
+ # <font> 0032 digit two
+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE
+ # <font> 0033 digit three
+1D7FA MATHEMATICAL MONOSPACE DIGIT FOUR
+ # <font> 0034 digit four
+1D7FB MATHEMATICAL MONOSPACE DIGIT FIVE
+ # <font> 0035 digit five
+1D7FC MATHEMATICAL MONOSPACE DIGIT SIX
+ # <font> 0036 digit six
+1D7FD MATHEMATICAL MONOSPACE DIGIT SEVEN
+ # <font> 0037 digit seven
+1D7FE MATHEMATICAL MONOSPACE DIGIT EIGHT
+ # <font> 0038 digit eight
+1D7FF MATHEMATICAL MONOSPACE DIGIT NINE
+ # <font> 0039 digit nine
+@@ 1FF80 Unassigned 1FFFF
+@ Not character codes
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+1FFFE <not a character>
+ * the value 1FFFE is guaranteed not to be a Unicode character at all
+1FFFF <not a character>
+ * the value 1FFFF is guaranteed not to be a Unicode character at all
+@@ 20000 CJK Unified Ideographs Extension B 2A6D6
+@@ 2F800 CJK Compatibility Ideographs Supplement 2FA1F
+@ Duplicate characters from CNS 11643-1992
+2F800 CJK COMPATIBILITY IDEOGRAPH-2F800
+ : 4E3D
+2F801 CJK COMPATIBILITY IDEOGRAPH-2F801
+ : 4E38
+2F802 CJK COMPATIBILITY IDEOGRAPH-2F802
+ : 4E41
+2F803 CJK COMPATIBILITY IDEOGRAPH-2F803
+ : 20122
+2F804 CJK COMPATIBILITY IDEOGRAPH-2F804
+ : 4F60
+2F805 CJK COMPATIBILITY IDEOGRAPH-2F805
+ : 4FAE
+2F806 CJK COMPATIBILITY IDEOGRAPH-2F806
+ : 4FBB
+2F807 CJK COMPATIBILITY IDEOGRAPH-2F807
+ : 5002
+2F808 CJK COMPATIBILITY IDEOGRAPH-2F808
+ : 507A
+2F809 CJK COMPATIBILITY IDEOGRAPH-2F809
+ : 5099
+2F80A CJK COMPATIBILITY IDEOGRAPH-2F80A
+ : 50E7
+2F80B CJK COMPATIBILITY IDEOGRAPH-2F80B
+ : 50CF
+2F80C CJK COMPATIBILITY IDEOGRAPH-2F80C
+ : 349E
+2F80D CJK COMPATIBILITY IDEOGRAPH-2F80D
+ x 5145
+ : 2063A
+2F80E CJK COMPATIBILITY IDEOGRAPH-2F80E
+ : 514D
+2F80F CJK COMPATIBILITY IDEOGRAPH-2F80F
+ : 5154
+2F810 CJK COMPATIBILITY IDEOGRAPH-2F810
+ : 5164
+2F811 CJK COMPATIBILITY IDEOGRAPH-2F811
+ : 5177
+2F812 CJK COMPATIBILITY IDEOGRAPH-2F812
+ : 2051C
+2F813 CJK COMPATIBILITY IDEOGRAPH-2F813
+ : 34B9
+2F814 CJK COMPATIBILITY IDEOGRAPH-2F814
+ x 5185
+ : 5167
+2F815 CJK COMPATIBILITY IDEOGRAPH-2F815
+ : 518D
+2F816 CJK COMPATIBILITY IDEOGRAPH-2F816
+ : 2054B
+2F817 CJK COMPATIBILITY IDEOGRAPH-2F817
+ : 5197
+2F818 CJK COMPATIBILITY IDEOGRAPH-2F818
+ : 51A4
+2F819 CJK COMPATIBILITY IDEOGRAPH-2F819
+ : 4ECC
+2F81A CJK COMPATIBILITY IDEOGRAPH-2F81A
+ : 51AC
+2F81B CJK COMPATIBILITY IDEOGRAPH-2F81B
+ : 51B5
+2F81C CJK COMPATIBILITY IDEOGRAPH-2F81C
+ : 291DF
+2F81D CJK COMPATIBILITY IDEOGRAPH-2F81D
+ : 51F5
+2F81E CJK COMPATIBILITY IDEOGRAPH-2F81E
+ : 5203
+2F81F CJK COMPATIBILITY IDEOGRAPH-2F81F
+ : 34DF
+2F820 CJK COMPATIBILITY IDEOGRAPH-2F820
+ : 523B
+2F821 CJK COMPATIBILITY IDEOGRAPH-2F821
+ : 5246
+2F822 CJK COMPATIBILITY IDEOGRAPH-2F822
+ : 5272
+2F823 CJK COMPATIBILITY IDEOGRAPH-2F823
+ : 5277
+2F824 CJK COMPATIBILITY IDEOGRAPH-2F824
+ : 3515
+2F825 CJK COMPATIBILITY IDEOGRAPH-2F825
+ : 52C7
+2F826 CJK COMPATIBILITY IDEOGRAPH-2F826
+ : 52C9
+2F827 CJK COMPATIBILITY IDEOGRAPH-2F827
+ : 52E4
+2F828 CJK COMPATIBILITY IDEOGRAPH-2F828
+ : 52FA
+2F829 CJK COMPATIBILITY IDEOGRAPH-2F829
+ : 5305
+2F82A CJK COMPATIBILITY IDEOGRAPH-2F82A
+ : 5306
+2F82B CJK COMPATIBILITY IDEOGRAPH-2F82B
+ : 5317
+2F82C CJK COMPATIBILITY IDEOGRAPH-2F82C
+ : 5349
+2F82D CJK COMPATIBILITY IDEOGRAPH-2F82D
+ : 5351
+2F82E CJK COMPATIBILITY IDEOGRAPH-2F82E
+ : 535A
+2F82F CJK COMPATIBILITY IDEOGRAPH-2F82F
+ : 5373
+2F830 CJK COMPATIBILITY IDEOGRAPH-2F830
+ : 537D
+2F831 CJK COMPATIBILITY IDEOGRAPH-2F831
+ : 537F
+2F832 CJK COMPATIBILITY IDEOGRAPH-2F832
+ : 537F
+2F833 CJK COMPATIBILITY IDEOGRAPH-2F833
+ : 537F
+2F834 CJK COMPATIBILITY IDEOGRAPH-2F834
+ : 20A2C
+2F835 CJK COMPATIBILITY IDEOGRAPH-2F835
+ : 7070
+2F836 CJK COMPATIBILITY IDEOGRAPH-2F836
+ : 53CA
+2F837 CJK COMPATIBILITY IDEOGRAPH-2F837
+ : 53DF
+2F838 CJK COMPATIBILITY IDEOGRAPH-2F838
+ : 20B63
+2F839 CJK COMPATIBILITY IDEOGRAPH-2F839
+ : 53EB
+2F83A CJK COMPATIBILITY IDEOGRAPH-2F83A
+ : 53F1
+2F83B CJK COMPATIBILITY IDEOGRAPH-2F83B
+ : 5406
+2F83C CJK COMPATIBILITY IDEOGRAPH-2F83C
+ : 549E
+2F83D CJK COMPATIBILITY IDEOGRAPH-2F83D
+ : 5438
+2F83E CJK COMPATIBILITY IDEOGRAPH-2F83E
+ : 5448
+2F83F CJK COMPATIBILITY IDEOGRAPH-2F83F
+ : 5468
+2F840 CJK COMPATIBILITY IDEOGRAPH-2F840
+ : 54A2
+2F841 CJK COMPATIBILITY IDEOGRAPH-2F841
+ : 54F6
+2F842 CJK COMPATIBILITY IDEOGRAPH-2F842
+ : 5510
+2F843 CJK COMPATIBILITY IDEOGRAPH-2F843
+ : 5553
+2F844 CJK COMPATIBILITY IDEOGRAPH-2F844
+ : 5563
+2F845 CJK COMPATIBILITY IDEOGRAPH-2F845
+ : 5584
+2F846 CJK COMPATIBILITY IDEOGRAPH-2F846
+ : 5584
+2F847 CJK COMPATIBILITY IDEOGRAPH-2F847
+ : 5599
+2F848 CJK COMPATIBILITY IDEOGRAPH-2F848
+ : 55AB
+2F849 CJK COMPATIBILITY IDEOGRAPH-2F849
+ : 55B3
+2F84A CJK COMPATIBILITY IDEOGRAPH-2F84A
+ : 55C2
+2F84B CJK COMPATIBILITY IDEOGRAPH-2F84B
+ : 5716
+2F84C CJK COMPATIBILITY IDEOGRAPH-2F84C
+ : 5606
+2F84D CJK COMPATIBILITY IDEOGRAPH-2F84D
+ : 5717
+2F84E CJK COMPATIBILITY IDEOGRAPH-2F84E
+ : 5651
+2F84F CJK COMPATIBILITY IDEOGRAPH-2F84F
+ : 5674
+2F850 CJK COMPATIBILITY IDEOGRAPH-2F850
+ : 5207
+2F851 CJK COMPATIBILITY IDEOGRAPH-2F851
+ : 58EE
+2F852 CJK COMPATIBILITY IDEOGRAPH-2F852
+ : 57CE
+2F853 CJK COMPATIBILITY IDEOGRAPH-2F853
+ : 57F4
+2F854 CJK COMPATIBILITY IDEOGRAPH-2F854
+ : 580D
+2F855 CJK COMPATIBILITY IDEOGRAPH-2F855
+ : 578B
+2F856 CJK COMPATIBILITY IDEOGRAPH-2F856
+ : 5832
+2F857 CJK COMPATIBILITY IDEOGRAPH-2F857
+ : 5831
+2F858 CJK COMPATIBILITY IDEOGRAPH-2F858
+ : 58AC
+2F859 CJK COMPATIBILITY IDEOGRAPH-2F859
+ : 214E4
+2F85A CJK COMPATIBILITY IDEOGRAPH-2F85A
+ x 58F3
+ : 58F2
+2F85B CJK COMPATIBILITY IDEOGRAPH-2F85B
+ x 21533
+ : 58F7
+2F85C CJK COMPATIBILITY IDEOGRAPH-2F85C
+ : 5906
+2F85D CJK COMPATIBILITY IDEOGRAPH-2F85D
+ : 591A
+2F85E CJK COMPATIBILITY IDEOGRAPH-2F85E
+ : 5922
+2F85F CJK COMPATIBILITY IDEOGRAPH-2F85F
+ : 5962
+2F860 CJK COMPATIBILITY IDEOGRAPH-2F860
+ : 216A8
+2F861 CJK COMPATIBILITY IDEOGRAPH-2F861
+ : 216EA
+2F862 CJK COMPATIBILITY IDEOGRAPH-2F862
+ : 59EC
+2F863 CJK COMPATIBILITY IDEOGRAPH-2F863
+ : 5A1B
+2F864 CJK COMPATIBILITY IDEOGRAPH-2F864
+ : 5A27
+2F865 CJK COMPATIBILITY IDEOGRAPH-2F865
+ : 59D8
+2F866 CJK COMPATIBILITY IDEOGRAPH-2F866
+ : 5A66
+2F867 CJK COMPATIBILITY IDEOGRAPH-2F867
+ : 36EE
+2F868 CJK COMPATIBILITY IDEOGRAPH-2F868
+ : 36FC
+2F869 CJK COMPATIBILITY IDEOGRAPH-2F869
+ : 5B08
+2F86A CJK COMPATIBILITY IDEOGRAPH-2F86A
+ : 5B3E
+2F86B CJK COMPATIBILITY IDEOGRAPH-2F86B
+ : 5B3E
+2F86C CJK COMPATIBILITY IDEOGRAPH-2F86C
+ : 219C8
+2F86D CJK COMPATIBILITY IDEOGRAPH-2F86D
+ : 5BC3
+2F86E CJK COMPATIBILITY IDEOGRAPH-2F86E
+ : 5BD8
+2F86F CJK COMPATIBILITY IDEOGRAPH-2F86F
+ : 5BE7
+2F870 CJK COMPATIBILITY IDEOGRAPH-2F870
+ : 5BF3
+2F871 CJK COMPATIBILITY IDEOGRAPH-2F871
+ : 21B18
+2F872 CJK COMPATIBILITY IDEOGRAPH-2F872
+ : 5BFF
+2F873 CJK COMPATIBILITY IDEOGRAPH-2F873
+ : 5C06
+2F874 CJK COMPATIBILITY IDEOGRAPH-2F874
+ : 5F53
+2F875 CJK COMPATIBILITY IDEOGRAPH-2F875
+ : 5C22
+2F876 CJK COMPATIBILITY IDEOGRAPH-2F876
+ : 3781
+2F877 CJK COMPATIBILITY IDEOGRAPH-2F877
+ : 5C60
+2F878 CJK COMPATIBILITY IDEOGRAPH-2F878
+ : 5C6E
+2F879 CJK COMPATIBILITY IDEOGRAPH-2F879
+ : 5CC0
+2F87A CJK COMPATIBILITY IDEOGRAPH-2F87A
+ : 5C8D
+2F87B CJK COMPATIBILITY IDEOGRAPH-2F87B
+ : 21DE4
+2F87C CJK COMPATIBILITY IDEOGRAPH-2F87C
+ : 5D43
+2F87D CJK COMPATIBILITY IDEOGRAPH-2F87D
+ : 21DE6
+2F87E CJK COMPATIBILITY IDEOGRAPH-2F87E
+ : 5D6E
+2F87F CJK COMPATIBILITY IDEOGRAPH-2F87F
+ : 5D6B
+2F880 CJK COMPATIBILITY IDEOGRAPH-2F880
+ : 5D7C
+2F881 CJK COMPATIBILITY IDEOGRAPH-2F881
+ : 5DE1
+2F882 CJK COMPATIBILITY IDEOGRAPH-2F882
+ : 5DE2
+2F883 CJK COMPATIBILITY IDEOGRAPH-2F883
+ : 382F
+2F884 CJK COMPATIBILITY IDEOGRAPH-2F884
+ : 5DFD
+2F885 CJK COMPATIBILITY IDEOGRAPH-2F885
+ : 5E28
+2F886 CJK COMPATIBILITY IDEOGRAPH-2F886
+ : 5E3D
+2F887 CJK COMPATIBILITY IDEOGRAPH-2F887
+ : 5E69
+2F888 CJK COMPATIBILITY IDEOGRAPH-2F888
+ : 3862
+2F889 CJK COMPATIBILITY IDEOGRAPH-2F889
+ : 22183
+2F88A CJK COMPATIBILITY IDEOGRAPH-2F88A
+ : 387C
+2F88B CJK COMPATIBILITY IDEOGRAPH-2F88B
+ : 5EB0
+2F88C CJK COMPATIBILITY IDEOGRAPH-2F88C
+ : 5EB3
+2F88D CJK COMPATIBILITY IDEOGRAPH-2F88D
+ : 5EB6
+2F88E CJK COMPATIBILITY IDEOGRAPH-2F88E
+ : 5ECA
+2F88F CJK COMPATIBILITY IDEOGRAPH-2F88F
+ : 2A392
+2F890 CJK COMPATIBILITY IDEOGRAPH-2F890
+ : 5EFE
+2F891 CJK COMPATIBILITY IDEOGRAPH-2F891
+ : 22331
+2F892 CJK COMPATIBILITY IDEOGRAPH-2F892
+ : 22331
+2F893 CJK COMPATIBILITY IDEOGRAPH-2F893
+ : 8201
+2F894 CJK COMPATIBILITY IDEOGRAPH-2F894
+ : 5F22
+2F895 CJK COMPATIBILITY IDEOGRAPH-2F895
+ : 5F22
+2F896 CJK COMPATIBILITY IDEOGRAPH-2F896
+ : 38C7
+2F897 CJK COMPATIBILITY IDEOGRAPH-2F897
+ : 232B8
+2F898 CJK COMPATIBILITY IDEOGRAPH-2F898
+ : 261DA
+2F899 CJK COMPATIBILITY IDEOGRAPH-2F899
+ : 5F62
+2F89A CJK COMPATIBILITY IDEOGRAPH-2F89A
+ : 5F6B
+2F89B CJK COMPATIBILITY IDEOGRAPH-2F89B
+ : 38E3
+2F89C CJK COMPATIBILITY IDEOGRAPH-2F89C
+ x 22505
+ : 5F9A
+2F89D CJK COMPATIBILITY IDEOGRAPH-2F89D
+ : 5FCD
+2F89E CJK COMPATIBILITY IDEOGRAPH-2F89E
+ : 5FD7
+2F89F CJK COMPATIBILITY IDEOGRAPH-2F89F
+ : 5FF9
+2F8A0 CJK COMPATIBILITY IDEOGRAPH-2F8A0
+ : 6081
+2F8A1 CJK COMPATIBILITY IDEOGRAPH-2F8A1
+ : 393A
+2F8A2 CJK COMPATIBILITY IDEOGRAPH-2F8A2
+ : 391C
+2F8A3 CJK COMPATIBILITY IDEOGRAPH-2F8A3
+ : 6094
+2F8A4 CJK COMPATIBILITY IDEOGRAPH-2F8A4
+ : 226D4
+2F8A5 CJK COMPATIBILITY IDEOGRAPH-2F8A5
+ : 60C7
+2F8A6 CJK COMPATIBILITY IDEOGRAPH-2F8A6
+ : 6148
+2F8A7 CJK COMPATIBILITY IDEOGRAPH-2F8A7
+ : 614C
+2F8A8 CJK COMPATIBILITY IDEOGRAPH-2F8A8
+ : 614E
+2F8A9 CJK COMPATIBILITY IDEOGRAPH-2F8A9
+ : 614C
+2F8AA CJK COMPATIBILITY IDEOGRAPH-2F8AA
+ : 617A
+2F8AB CJK COMPATIBILITY IDEOGRAPH-2F8AB
+ : 618E
+2F8AC CJK COMPATIBILITY IDEOGRAPH-2F8AC
+ : 61B2
+2F8AD CJK COMPATIBILITY IDEOGRAPH-2F8AD
+ : 61A4
+2F8AE CJK COMPATIBILITY IDEOGRAPH-2F8AE
+ : 61AF
+2F8AF CJK COMPATIBILITY IDEOGRAPH-2F8AF
+ : 61DE
+2F8B0 CJK COMPATIBILITY IDEOGRAPH-2F8B0
+ : 61F2
+2F8B1 CJK COMPATIBILITY IDEOGRAPH-2F8B1
+ : 61F6
+2F8B2 CJK COMPATIBILITY IDEOGRAPH-2F8B2
+ : 6210
+2F8B3 CJK COMPATIBILITY IDEOGRAPH-2F8B3
+ : 621B
+2F8B4 CJK COMPATIBILITY IDEOGRAPH-2F8B4
+ : 625D
+2F8B5 CJK COMPATIBILITY IDEOGRAPH-2F8B5
+ : 62B1
+2F8B6 CJK COMPATIBILITY IDEOGRAPH-2F8B6
+ : 62D4
+2F8B7 CJK COMPATIBILITY IDEOGRAPH-2F8B7
+ : 6350
+2F8B8 CJK COMPATIBILITY IDEOGRAPH-2F8B8
+ : 22B0C
+2F8B9 CJK COMPATIBILITY IDEOGRAPH-2F8B9
+ : 633D
+2F8BA CJK COMPATIBILITY IDEOGRAPH-2F8BA
+ : 62FC
+2F8BB CJK COMPATIBILITY IDEOGRAPH-2F8BB
+ : 6368
+2F8BC CJK COMPATIBILITY IDEOGRAPH-2F8BC
+ : 6383
+2F8BD CJK COMPATIBILITY IDEOGRAPH-2F8BD
+ : 63E4
+2F8BE CJK COMPATIBILITY IDEOGRAPH-2F8BE
+ : 22BF1
+2F8BF CJK COMPATIBILITY IDEOGRAPH-2F8BF
+ : 6422
+2F8C0 CJK COMPATIBILITY IDEOGRAPH-2F8C0
+ : 63C5
+2F8C1 CJK COMPATIBILITY IDEOGRAPH-2F8C1
+ : 63A9
+2F8C2 CJK COMPATIBILITY IDEOGRAPH-2F8C2
+ : 3A2E
+2F8C3 CJK COMPATIBILITY IDEOGRAPH-2F8C3
+ : 6469
+2F8C4 CJK COMPATIBILITY IDEOGRAPH-2F8C4
+ : 647E
+2F8C5 CJK COMPATIBILITY IDEOGRAPH-2F8C5
+ : 649D
+2F8C6 CJK COMPATIBILITY IDEOGRAPH-2F8C6
+ : 6477
+2F8C7 CJK COMPATIBILITY IDEOGRAPH-2F8C7
+ : 3A6C
+2F8C8 CJK COMPATIBILITY IDEOGRAPH-2F8C8
+ : 654F
+2F8C9 CJK COMPATIBILITY IDEOGRAPH-2F8C9
+ : 656C
+2F8CA CJK COMPATIBILITY IDEOGRAPH-2F8CA
+ : 2300A
+2F8CB CJK COMPATIBILITY IDEOGRAPH-2F8CB
+ : 65E3
+2F8CC CJK COMPATIBILITY IDEOGRAPH-2F8CC
+ : 66F8
+2F8CD CJK COMPATIBILITY IDEOGRAPH-2F8CD
+ : 6649
+2F8CE CJK COMPATIBILITY IDEOGRAPH-2F8CE
+ : 3B19
+2F8CF CJK COMPATIBILITY IDEOGRAPH-2F8CF
+ : 6691
+2F8D0 CJK COMPATIBILITY IDEOGRAPH-2F8D0
+ : 3B08
+2F8D1 CJK COMPATIBILITY IDEOGRAPH-2F8D1
+ : 3AE4
+2F8D2 CJK COMPATIBILITY IDEOGRAPH-2F8D2
+ : 5192
+2F8D3 CJK COMPATIBILITY IDEOGRAPH-2F8D3
+ : 5195
+2F8D4 CJK COMPATIBILITY IDEOGRAPH-2F8D4
+ : 6700
+2F8D5 CJK COMPATIBILITY IDEOGRAPH-2F8D5
+ : 669C
+2F8D6 CJK COMPATIBILITY IDEOGRAPH-2F8D6
+ : 80AD
+2F8D7 CJK COMPATIBILITY IDEOGRAPH-2F8D7
+ : 43D9
+2F8D8 CJK COMPATIBILITY IDEOGRAPH-2F8D8
+ : 6717
+2F8D9 CJK COMPATIBILITY IDEOGRAPH-2F8D9
+ : 671B
+2F8DA CJK COMPATIBILITY IDEOGRAPH-2F8DA
+ : 6721
+2F8DB CJK COMPATIBILITY IDEOGRAPH-2F8DB
+ : 675E
+2F8DC CJK COMPATIBILITY IDEOGRAPH-2F8DC
+ : 6753
+2F8DD CJK COMPATIBILITY IDEOGRAPH-2F8DD
+ : 233C3
+2F8DE CJK COMPATIBILITY IDEOGRAPH-2F8DE
+ : 3B49
+2F8DF CJK COMPATIBILITY IDEOGRAPH-2F8DF
+ : 67FA
+2F8E0 CJK COMPATIBILITY IDEOGRAPH-2F8E0
+ : 6785
+2F8E1 CJK COMPATIBILITY IDEOGRAPH-2F8E1
+ : 6852
+2F8E2 CJK COMPATIBILITY IDEOGRAPH-2F8E2
+ : 6885
+2F8E3 CJK COMPATIBILITY IDEOGRAPH-2F8E3
+ : 2346D
+2F8E4 CJK COMPATIBILITY IDEOGRAPH-2F8E4
+ : 688E
+2F8E5 CJK COMPATIBILITY IDEOGRAPH-2F8E5
+ : 681F
+2F8E6 CJK COMPATIBILITY IDEOGRAPH-2F8E6
+ : 6914
+2F8E7 CJK COMPATIBILITY IDEOGRAPH-2F8E7
+ : 3B9D
+2F8E8 CJK COMPATIBILITY IDEOGRAPH-2F8E8
+ : 6942
+2F8E9 CJK COMPATIBILITY IDEOGRAPH-2F8E9
+ : 69A3
+2F8EA CJK COMPATIBILITY IDEOGRAPH-2F8EA
+ : 69EA
+2F8EB CJK COMPATIBILITY IDEOGRAPH-2F8EB
+ : 6AA8
+2F8EC CJK COMPATIBILITY IDEOGRAPH-2F8EC
+ : 236A3
+2F8ED CJK COMPATIBILITY IDEOGRAPH-2F8ED
+ : 6ADB
+2F8EE CJK COMPATIBILITY IDEOGRAPH-2F8EE
+ : 3C18
+2F8EF CJK COMPATIBILITY IDEOGRAPH-2F8EF
+ : 6B21
+2F8F0 CJK COMPATIBILITY IDEOGRAPH-2F8F0
+ : 238A7
+2F8F1 CJK COMPATIBILITY IDEOGRAPH-2F8F1
+ : 6B54
+2F8F2 CJK COMPATIBILITY IDEOGRAPH-2F8F2
+ : 3C4E
+2F8F3 CJK COMPATIBILITY IDEOGRAPH-2F8F3
+ : 6B72
+2F8F4 CJK COMPATIBILITY IDEOGRAPH-2F8F4
+ : 6B9F
+2F8F5 CJK COMPATIBILITY IDEOGRAPH-2F8F5
+ : 6BBA
+2F8F6 CJK COMPATIBILITY IDEOGRAPH-2F8F6
+ : 6BBB
+2F8F7 CJK COMPATIBILITY IDEOGRAPH-2F8F7
+ : 23A8D
+2F8F8 CJK COMPATIBILITY IDEOGRAPH-2F8F8
+ : 21D0B
+2F8F9 CJK COMPATIBILITY IDEOGRAPH-2F8F9
+ : 23AFA
+2F8FA CJK COMPATIBILITY IDEOGRAPH-2F8FA
+ : 6C4E
+2F8FB CJK COMPATIBILITY IDEOGRAPH-2F8FB
+ : 23CBC
+2F8FC CJK COMPATIBILITY IDEOGRAPH-2F8FC
+ : 6CBF
+2F8FD CJK COMPATIBILITY IDEOGRAPH-2F8FD
+ : 6CCD
+2F8FE CJK COMPATIBILITY IDEOGRAPH-2F8FE
+ : 6C67
+2F8FF CJK COMPATIBILITY IDEOGRAPH-2F8FF
+ : 6D16
+2F900 CJK COMPATIBILITY IDEOGRAPH-2F900
+ : 6D3E
+2F901 CJK COMPATIBILITY IDEOGRAPH-2F901
+ : 6D77
+2F902 CJK COMPATIBILITY IDEOGRAPH-2F902
+ : 6D41
+2F903 CJK COMPATIBILITY IDEOGRAPH-2F903
+ : 6D69
+2F904 CJK COMPATIBILITY IDEOGRAPH-2F904
+ : 6D78
+2F905 CJK COMPATIBILITY IDEOGRAPH-2F905
+ : 6D85
+2F906 CJK COMPATIBILITY IDEOGRAPH-2F906
+ : 23D1E
+2F907 CJK COMPATIBILITY IDEOGRAPH-2F907
+ : 6D34
+2F908 CJK COMPATIBILITY IDEOGRAPH-2F908
+ : 6E2F
+2F909 CJK COMPATIBILITY IDEOGRAPH-2F909
+ : 6E6E
+2F90A CJK COMPATIBILITY IDEOGRAPH-2F90A
+ : 3D33
+2F90B CJK COMPATIBILITY IDEOGRAPH-2F90B
+ : 6ECB
+2F90C CJK COMPATIBILITY IDEOGRAPH-2F90C
+ : 6EC7
+2F90D CJK COMPATIBILITY IDEOGRAPH-2F90D
+ : 23ED1
+2F90E CJK COMPATIBILITY IDEOGRAPH-2F90E
+ : 6DF9
+2F90F CJK COMPATIBILITY IDEOGRAPH-2F90F
+ : 6F6E
+2F910 CJK COMPATIBILITY IDEOGRAPH-2F910
+ : 23F5E
+2F911 CJK COMPATIBILITY IDEOGRAPH-2F911
+ : 23F8E
+2F912 CJK COMPATIBILITY IDEOGRAPH-2F912
+ : 6FC6
+2F913 CJK COMPATIBILITY IDEOGRAPH-2F913
+ : 7039
+2F914 CJK COMPATIBILITY IDEOGRAPH-2F914
+ : 701E
+2F915 CJK COMPATIBILITY IDEOGRAPH-2F915
+ : 701B
+2F916 CJK COMPATIBILITY IDEOGRAPH-2F916
+ : 3D96
+2F917 CJK COMPATIBILITY IDEOGRAPH-2F917
+ : 704A
+2F918 CJK COMPATIBILITY IDEOGRAPH-2F918
+ : 707D
+2F919 CJK COMPATIBILITY IDEOGRAPH-2F919
+ : 7077
+2F91A CJK COMPATIBILITY IDEOGRAPH-2F91A
+ : 70AD
+2F91B CJK COMPATIBILITY IDEOGRAPH-2F91B
+ : 20525
+2F91C CJK COMPATIBILITY IDEOGRAPH-2F91C
+ : 7145
+2F91D CJK COMPATIBILITY IDEOGRAPH-2F91D
+ : 24263
+2F91E CJK COMPATIBILITY IDEOGRAPH-2F91E
+ : 719C
+2F91F CJK COMPATIBILITY IDEOGRAPH-2F91F
+ : 243AB
+2F920 CJK COMPATIBILITY IDEOGRAPH-2F920
+ : 7228
+2F921 CJK COMPATIBILITY IDEOGRAPH-2F921
+ : 7235
+2F922 CJK COMPATIBILITY IDEOGRAPH-2F922
+ : 7250
+2F923 CJK COMPATIBILITY IDEOGRAPH-2F923
+ : 24608
+2F924 CJK COMPATIBILITY IDEOGRAPH-2F924
+ : 7280
+2F925 CJK COMPATIBILITY IDEOGRAPH-2F925
+ : 7295
+2F926 CJK COMPATIBILITY IDEOGRAPH-2F926
+ : 24735
+2F927 CJK COMPATIBILITY IDEOGRAPH-2F927
+ : 24814
+2F928 CJK COMPATIBILITY IDEOGRAPH-2F928
+ : 737A
+2F929 CJK COMPATIBILITY IDEOGRAPH-2F929
+ : 738B
+2F92A CJK COMPATIBILITY IDEOGRAPH-2F92A
+ : 3EAC
+2F92B CJK COMPATIBILITY IDEOGRAPH-2F92B
+ : 73A5
+2F92C CJK COMPATIBILITY IDEOGRAPH-2F92C
+ : 3EB8
+2F92D CJK COMPATIBILITY IDEOGRAPH-2F92D
+ : 3EB8
+2F92E CJK COMPATIBILITY IDEOGRAPH-2F92E
+ : 7447
+2F92F CJK COMPATIBILITY IDEOGRAPH-2F92F
+ : 745C
+2F930 CJK COMPATIBILITY IDEOGRAPH-2F930
+ : 7471
+2F931 CJK COMPATIBILITY IDEOGRAPH-2F931
+ : 7485
+2F932 CJK COMPATIBILITY IDEOGRAPH-2F932
+ : 74CA
+2F933 CJK COMPATIBILITY IDEOGRAPH-2F933
+ : 3F1B
+2F934 CJK COMPATIBILITY IDEOGRAPH-2F934
+ : 7524
+2F935 CJK COMPATIBILITY IDEOGRAPH-2F935
+ : 24C36
+2F936 CJK COMPATIBILITY IDEOGRAPH-2F936
+ : 753E
+2F937 CJK COMPATIBILITY IDEOGRAPH-2F937
+ : 24C92
+2F938 CJK COMPATIBILITY IDEOGRAPH-2F938
+ : 7570
+2F939 CJK COMPATIBILITY IDEOGRAPH-2F939
+ : 2219F
+2F93A CJK COMPATIBILITY IDEOGRAPH-2F93A
+ : 7610
+2F93B CJK COMPATIBILITY IDEOGRAPH-2F93B
+ : 24FA1
+2F93C CJK COMPATIBILITY IDEOGRAPH-2F93C
+ : 24FB8
+2F93D CJK COMPATIBILITY IDEOGRAPH-2F93D
+ : 25044
+2F93E CJK COMPATIBILITY IDEOGRAPH-2F93E
+ : 3FFC
+2F93F CJK COMPATIBILITY IDEOGRAPH-2F93F
+ : 4008
+2F940 CJK COMPATIBILITY IDEOGRAPH-2F940
+ : 76F4
+2F941 CJK COMPATIBILITY IDEOGRAPH-2F941
+ : 250F3
+2F942 CJK COMPATIBILITY IDEOGRAPH-2F942
+ : 250F2
+2F943 CJK COMPATIBILITY IDEOGRAPH-2F943
+ : 25119
+2F944 CJK COMPATIBILITY IDEOGRAPH-2F944
+ : 25133
+2F945 CJK COMPATIBILITY IDEOGRAPH-2F945
+ : 771E
+2F946 CJK COMPATIBILITY IDEOGRAPH-2F946
+ : 771F
+2F947 CJK COMPATIBILITY IDEOGRAPH-2F947
+ : 771F
+2F948 CJK COMPATIBILITY IDEOGRAPH-2F948
+ : 774A
+2F949 CJK COMPATIBILITY IDEOGRAPH-2F949
+ : 4039
+2F94A CJK COMPATIBILITY IDEOGRAPH-2F94A
+ : 778B
+2F94B CJK COMPATIBILITY IDEOGRAPH-2F94B
+ : 4046
+2F94C CJK COMPATIBILITY IDEOGRAPH-2F94C
+ : 4096
+2F94D CJK COMPATIBILITY IDEOGRAPH-2F94D
+ : 2541D
+2F94E CJK COMPATIBILITY IDEOGRAPH-2F94E
+ : 784E
+2F94F CJK COMPATIBILITY IDEOGRAPH-2F94F
+ : 788C
+2F950 CJK COMPATIBILITY IDEOGRAPH-2F950
+ : 78CC
+2F951 CJK COMPATIBILITY IDEOGRAPH-2F951
+ : 40E3
+2F952 CJK COMPATIBILITY IDEOGRAPH-2F952
+ : 25626
+2F953 CJK COMPATIBILITY IDEOGRAPH-2F953
+ : 7956
+2F954 CJK COMPATIBILITY IDEOGRAPH-2F954
+ : 2569A
+2F955 CJK COMPATIBILITY IDEOGRAPH-2F955
+ : 256C5
+2F956 CJK COMPATIBILITY IDEOGRAPH-2F956
+ : 798F
+2F957 CJK COMPATIBILITY IDEOGRAPH-2F957
+ : 79EB
+2F958 CJK COMPATIBILITY IDEOGRAPH-2F958
+ : 412F
+2F959 CJK COMPATIBILITY IDEOGRAPH-2F959
+ : 7A40
+2F95A CJK COMPATIBILITY IDEOGRAPH-2F95A
+ : 7A4A
+2F95B CJK COMPATIBILITY IDEOGRAPH-2F95B
+ : 7A4F
+2F95C CJK COMPATIBILITY IDEOGRAPH-2F95C
+ : 2597C
+2F95D CJK COMPATIBILITY IDEOGRAPH-2F95D
+ : 25AA7
+2F95E CJK COMPATIBILITY IDEOGRAPH-2F95E
+ : 25AA7
+2F95F CJK COMPATIBILITY IDEOGRAPH-2F95F
+ : 7AEE
+2F960 CJK COMPATIBILITY IDEOGRAPH-2F960
+ : 4202
+2F961 CJK COMPATIBILITY IDEOGRAPH-2F961
+ : 25BAB
+2F962 CJK COMPATIBILITY IDEOGRAPH-2F962
+ : 7BC6
+2F963 CJK COMPATIBILITY IDEOGRAPH-2F963
+ : 7BC9
+2F964 CJK COMPATIBILITY IDEOGRAPH-2F964
+ : 4227
+2F965 CJK COMPATIBILITY IDEOGRAPH-2F965
+ : 25C80
+2F966 CJK COMPATIBILITY IDEOGRAPH-2F966
+ : 7CD2
+2F967 CJK COMPATIBILITY IDEOGRAPH-2F967
+ : 42A0
+2F968 CJK COMPATIBILITY IDEOGRAPH-2F968
+ : 7CE8
+2F969 CJK COMPATIBILITY IDEOGRAPH-2F969
+ : 7CE3
+2F96A CJK COMPATIBILITY IDEOGRAPH-2F96A
+ : 7D00
+2F96B CJK COMPATIBILITY IDEOGRAPH-2F96B
+ : 25F86
+2F96C CJK COMPATIBILITY IDEOGRAPH-2F96C
+ : 7D63
+2F96D CJK COMPATIBILITY IDEOGRAPH-2F96D
+ : 4301
+2F96E CJK COMPATIBILITY IDEOGRAPH-2F96E
+ : 7DC7
+2F96F CJK COMPATIBILITY IDEOGRAPH-2F96F
+ : 7E02
+2F970 CJK COMPATIBILITY IDEOGRAPH-2F970
+ : 7E45
+2F971 CJK COMPATIBILITY IDEOGRAPH-2F971
+ : 4334
+2F972 CJK COMPATIBILITY IDEOGRAPH-2F972
+ : 26228
+2F973 CJK COMPATIBILITY IDEOGRAPH-2F973
+ : 26247
+2F974 CJK COMPATIBILITY IDEOGRAPH-2F974
+ : 4359
+2F975 CJK COMPATIBILITY IDEOGRAPH-2F975
+ : 262D9
+2F976 CJK COMPATIBILITY IDEOGRAPH-2F976
+ : 7F7A
+2F977 CJK COMPATIBILITY IDEOGRAPH-2F977
+ : 2633E
+2F978 CJK COMPATIBILITY IDEOGRAPH-2F978
+ : 7F95
+2F979 CJK COMPATIBILITY IDEOGRAPH-2F979
+ : 7FFA
+2F97A CJK COMPATIBILITY IDEOGRAPH-2F97A
+ : 8005
+2F97B CJK COMPATIBILITY IDEOGRAPH-2F97B
+ : 264DA
+2F97C CJK COMPATIBILITY IDEOGRAPH-2F97C
+ : 26523
+2F97D CJK COMPATIBILITY IDEOGRAPH-2F97D
+ : 8060
+2F97E CJK COMPATIBILITY IDEOGRAPH-2F97E
+ : 265A8
+2F97F CJK COMPATIBILITY IDEOGRAPH-2F97F
+ : 8070
+2F980 CJK COMPATIBILITY IDEOGRAPH-2F980
+ : 2335F
+2F981 CJK COMPATIBILITY IDEOGRAPH-2F981
+ : 43D5
+2F982 CJK COMPATIBILITY IDEOGRAPH-2F982
+ : 80B2
+2F983 CJK COMPATIBILITY IDEOGRAPH-2F983
+ : 8103
+2F984 CJK COMPATIBILITY IDEOGRAPH-2F984
+ : 440B
+2F985 CJK COMPATIBILITY IDEOGRAPH-2F985
+ : 813E
+2F986 CJK COMPATIBILITY IDEOGRAPH-2F986
+ : 5AB5
+2F987 CJK COMPATIBILITY IDEOGRAPH-2F987
+ : 267A7
+2F988 CJK COMPATIBILITY IDEOGRAPH-2F988
+ : 267B5
+2F989 CJK COMPATIBILITY IDEOGRAPH-2F989
+ : 23393
+2F98A CJK COMPATIBILITY IDEOGRAPH-2F98A
+ : 2339C
+2F98B CJK COMPATIBILITY IDEOGRAPH-2F98B
+ : 8201
+2F98C CJK COMPATIBILITY IDEOGRAPH-2F98C
+ : 8204
+2F98D CJK COMPATIBILITY IDEOGRAPH-2F98D
+ : 8F9E
+2F98E CJK COMPATIBILITY IDEOGRAPH-2F98E
+ : 446B
+2F98F CJK COMPATIBILITY IDEOGRAPH-2F98F
+ : 8291
+2F990 CJK COMPATIBILITY IDEOGRAPH-2F990
+ : 828B
+2F991 CJK COMPATIBILITY IDEOGRAPH-2F991
+ : 829D
+2F992 CJK COMPATIBILITY IDEOGRAPH-2F992
+ : 52B3
+2F993 CJK COMPATIBILITY IDEOGRAPH-2F993
+ : 82B1
+2F994 CJK COMPATIBILITY IDEOGRAPH-2F994
+ : 82B3
+2F995 CJK COMPATIBILITY IDEOGRAPH-2F995
+ : 82BD
+2F996 CJK COMPATIBILITY IDEOGRAPH-2F996
+ : 82E6
+2F997 CJK COMPATIBILITY IDEOGRAPH-2F997
+ : 26B3C
+2F998 CJK COMPATIBILITY IDEOGRAPH-2F998
+ : 82E5
+2F999 CJK COMPATIBILITY IDEOGRAPH-2F999
+ : 831D
+2F99A CJK COMPATIBILITY IDEOGRAPH-2F99A
+ : 8363
+2F99B CJK COMPATIBILITY IDEOGRAPH-2F99B
+ : 83AD
+2F99C CJK COMPATIBILITY IDEOGRAPH-2F99C
+ : 8323
+2F99D CJK COMPATIBILITY IDEOGRAPH-2F99D
+ : 83BD
+2F99E CJK COMPATIBILITY IDEOGRAPH-2F99E
+ : 83E7
+2F99F CJK COMPATIBILITY IDEOGRAPH-2F99F
+ : 8457
+2F9A0 CJK COMPATIBILITY IDEOGRAPH-2F9A0
+ : 8353
+2F9A1 CJK COMPATIBILITY IDEOGRAPH-2F9A1
+ : 83CA
+2F9A2 CJK COMPATIBILITY IDEOGRAPH-2F9A2
+ : 83CC
+2F9A3 CJK COMPATIBILITY IDEOGRAPH-2F9A3
+ : 83DC
+2F9A4 CJK COMPATIBILITY IDEOGRAPH-2F9A4
+ : 26C36
+2F9A5 CJK COMPATIBILITY IDEOGRAPH-2F9A5
+ : 26D6B
+2F9A6 CJK COMPATIBILITY IDEOGRAPH-2F9A6
+ : 26CD5
+2F9A7 CJK COMPATIBILITY IDEOGRAPH-2F9A7
+ : 452B
+2F9A8 CJK COMPATIBILITY IDEOGRAPH-2F9A8
+ : 84F1
+2F9A9 CJK COMPATIBILITY IDEOGRAPH-2F9A9
+ : 84F3
+2F9AA CJK COMPATIBILITY IDEOGRAPH-2F9AA
+ : 8516
+2F9AB CJK COMPATIBILITY IDEOGRAPH-2F9AB
+ : 273CA
+2F9AC CJK COMPATIBILITY IDEOGRAPH-2F9AC
+ : 8564
+2F9AD CJK COMPATIBILITY IDEOGRAPH-2F9AD
+ : 26F2C
+2F9AE CJK COMPATIBILITY IDEOGRAPH-2F9AE
+ : 455D
+2F9AF CJK COMPATIBILITY IDEOGRAPH-2F9AF
+ : 4561
+2F9B0 CJK COMPATIBILITY IDEOGRAPH-2F9B0
+ : 26FB1
+2F9B1 CJK COMPATIBILITY IDEOGRAPH-2F9B1
+ : 270D2
+2F9B2 CJK COMPATIBILITY IDEOGRAPH-2F9B2
+ x 5914
+ x 270CD
+ x 270F0
+ : 456B
+2F9B3 CJK COMPATIBILITY IDEOGRAPH-2F9B3
+ : 8650
+2F9B4 CJK COMPATIBILITY IDEOGRAPH-2F9B4
+ : 865C
+2F9B5 CJK COMPATIBILITY IDEOGRAPH-2F9B5
+ : 8667
+2F9B6 CJK COMPATIBILITY IDEOGRAPH-2F9B6
+ x 27205
+ : 8669
+2F9B7 CJK COMPATIBILITY IDEOGRAPH-2F9B7
+ : 86A9
+2F9B8 CJK COMPATIBILITY IDEOGRAPH-2F9B8
+ : 8688
+2F9B9 CJK COMPATIBILITY IDEOGRAPH-2F9B9
+ : 870E
+2F9BA CJK COMPATIBILITY IDEOGRAPH-2F9BA
+ : 86E2
+2F9BB CJK COMPATIBILITY IDEOGRAPH-2F9BB
+ : 8779
+2F9BC CJK COMPATIBILITY IDEOGRAPH-2F9BC
+ : 8728
+2F9BD CJK COMPATIBILITY IDEOGRAPH-2F9BD
+ : 876B
+2F9BE CJK COMPATIBILITY IDEOGRAPH-2F9BE
+ : 8786
+2F9BF CJK COMPATIBILITY IDEOGRAPH-2F9BF
+ : 45D7
+2F9C0 CJK COMPATIBILITY IDEOGRAPH-2F9C0
+ : 87E1
+2F9C1 CJK COMPATIBILITY IDEOGRAPH-2F9C1
+ : 8801
+2F9C2 CJK COMPATIBILITY IDEOGRAPH-2F9C2
+ : 45F9
+2F9C3 CJK COMPATIBILITY IDEOGRAPH-2F9C3
+ : 8860
+2F9C4 CJK COMPATIBILITY IDEOGRAPH-2F9C4
+ : 8863
+2F9C5 CJK COMPATIBILITY IDEOGRAPH-2F9C5
+ : 27667
+2F9C6 CJK COMPATIBILITY IDEOGRAPH-2F9C6
+ : 88D7
+2F9C7 CJK COMPATIBILITY IDEOGRAPH-2F9C7
+ : 88DE
+2F9C8 CJK COMPATIBILITY IDEOGRAPH-2F9C8
+ : 4635
+2F9C9 CJK COMPATIBILITY IDEOGRAPH-2F9C9
+ : 88FA
+2F9CA CJK COMPATIBILITY IDEOGRAPH-2F9CA
+ : 34BB
+2F9CB CJK COMPATIBILITY IDEOGRAPH-2F9CB
+ x 4695
+ : 278AE
+2F9CC CJK COMPATIBILITY IDEOGRAPH-2F9CC
+ : 27966
+2F9CD CJK COMPATIBILITY IDEOGRAPH-2F9CD
+ : 46BE
+2F9CE CJK COMPATIBILITY IDEOGRAPH-2F9CE
+ : 46C7
+2F9CF CJK COMPATIBILITY IDEOGRAPH-2F9CF
+ : 8AA0
+2F9D0 CJK COMPATIBILITY IDEOGRAPH-2F9D0
+ : 8AED
+2F9D1 CJK COMPATIBILITY IDEOGRAPH-2F9D1
+ : 8B8A
+2F9D2 CJK COMPATIBILITY IDEOGRAPH-2F9D2
+ : 8C55
+2F9D3 CJK COMPATIBILITY IDEOGRAPH-2F9D3
+ : 27CA8
+2F9D4 CJK COMPATIBILITY IDEOGRAPH-2F9D4
+ : 8CAB
+2F9D5 CJK COMPATIBILITY IDEOGRAPH-2F9D5
+ : 8CC1
+2F9D6 CJK COMPATIBILITY IDEOGRAPH-2F9D6
+ x 25AD4
+ : 8D1B
+2F9D7 CJK COMPATIBILITY IDEOGRAPH-2F9D7
+ : 8D77
+2F9D8 CJK COMPATIBILITY IDEOGRAPH-2F9D8
+ : 27F2F
+2F9D9 CJK COMPATIBILITY IDEOGRAPH-2F9D9
+ : 20804
+2F9DA CJK COMPATIBILITY IDEOGRAPH-2F9DA
+ : 8DCB
+2F9DB CJK COMPATIBILITY IDEOGRAPH-2F9DB
+ : 8DBC
+2F9DC CJK COMPATIBILITY IDEOGRAPH-2F9DC
+ : 8DF0
+2F9DD CJK COMPATIBILITY IDEOGRAPH-2F9DD
+ : 208DE
+2F9DE CJK COMPATIBILITY IDEOGRAPH-2F9DE
+ : 8ED4
+2F9DF CJK COMPATIBILITY IDEOGRAPH-2F9DF
+ : 8F38
+2F9E0 CJK COMPATIBILITY IDEOGRAPH-2F9E0
+ : 285D2
+2F9E1 CJK COMPATIBILITY IDEOGRAPH-2F9E1
+ : 285ED
+2F9E2 CJK COMPATIBILITY IDEOGRAPH-2F9E2
+ : 9094
+2F9E3 CJK COMPATIBILITY IDEOGRAPH-2F9E3
+ : 90F1
+2F9E4 CJK COMPATIBILITY IDEOGRAPH-2F9E4
+ : 9111
+2F9E5 CJK COMPATIBILITY IDEOGRAPH-2F9E5
+ : 2872E
+2F9E6 CJK COMPATIBILITY IDEOGRAPH-2F9E6
+ : 911B
+2F9E7 CJK COMPATIBILITY IDEOGRAPH-2F9E7
+ : 9238
+2F9E8 CJK COMPATIBILITY IDEOGRAPH-2F9E8
+ : 92D7
+2F9E9 CJK COMPATIBILITY IDEOGRAPH-2F9E9
+ : 92D8
+2F9EA CJK COMPATIBILITY IDEOGRAPH-2F9EA
+ : 927C
+2F9EB CJK COMPATIBILITY IDEOGRAPH-2F9EB
+ : 93F9
+2F9EC CJK COMPATIBILITY IDEOGRAPH-2F9EC
+ : 9415
+2F9ED CJK COMPATIBILITY IDEOGRAPH-2F9ED
+ : 28BFA
+2F9EE CJK COMPATIBILITY IDEOGRAPH-2F9EE
+ : 958B
+2F9EF CJK COMPATIBILITY IDEOGRAPH-2F9EF
+ : 4995
+2F9F0 CJK COMPATIBILITY IDEOGRAPH-2F9F0
+ : 95B7
+2F9F1 CJK COMPATIBILITY IDEOGRAPH-2F9F1
+ : 28D77
+2F9F2 CJK COMPATIBILITY IDEOGRAPH-2F9F2
+ : 49E6
+2F9F3 CJK COMPATIBILITY IDEOGRAPH-2F9F3
+ : 96C3
+2F9F4 CJK COMPATIBILITY IDEOGRAPH-2F9F4
+ : 5DB2
+2F9F5 CJK COMPATIBILITY IDEOGRAPH-2F9F5
+ : 9723
+2F9F6 CJK COMPATIBILITY IDEOGRAPH-2F9F6
+ : 29145
+2F9F7 CJK COMPATIBILITY IDEOGRAPH-2F9F7
+ : 2921A
+2F9F8 CJK COMPATIBILITY IDEOGRAPH-2F9F8
+ : 4A6E
+2F9F9 CJK COMPATIBILITY IDEOGRAPH-2F9F9
+ : 4A76
+2F9FA CJK COMPATIBILITY IDEOGRAPH-2F9FA
+ : 97E0
+2F9FB CJK COMPATIBILITY IDEOGRAPH-2F9FB
+ : 2940A
+2F9FC CJK COMPATIBILITY IDEOGRAPH-2F9FC
+ : 4AB2
+2F9FD CJK COMPATIBILITY IDEOGRAPH-2F9FD
+ : 29496
+2F9FE CJK COMPATIBILITY IDEOGRAPH-2F9FE
+ : 980B
+2F9FF CJK COMPATIBILITY IDEOGRAPH-2F9FF
+ : 980B
+2FA00 CJK COMPATIBILITY IDEOGRAPH-2FA00
+ : 9829
+2FA01 CJK COMPATIBILITY IDEOGRAPH-2FA01
+ : 295B6
+2FA02 CJK COMPATIBILITY IDEOGRAPH-2FA02
+ : 98E2
+2FA03 CJK COMPATIBILITY IDEOGRAPH-2FA03
+ : 4B33
+2FA04 CJK COMPATIBILITY IDEOGRAPH-2FA04
+ : 9929
+2FA05 CJK COMPATIBILITY IDEOGRAPH-2FA05
+ : 99A7
+2FA06 CJK COMPATIBILITY IDEOGRAPH-2FA06
+ : 99C2
+2FA07 CJK COMPATIBILITY IDEOGRAPH-2FA07
+ : 99FE
+2FA08 CJK COMPATIBILITY IDEOGRAPH-2FA08
+ : 4BCE
+2FA09 CJK COMPATIBILITY IDEOGRAPH-2FA09
+ : 29B30
+2FA0A CJK COMPATIBILITY IDEOGRAPH-2FA0A
+ : 9B12
+2FA0B CJK COMPATIBILITY IDEOGRAPH-2FA0B
+ : 9C40
+2FA0C CJK COMPATIBILITY IDEOGRAPH-2FA0C
+ : 9CFD
+2FA0D CJK COMPATIBILITY IDEOGRAPH-2FA0D
+ : 4CCE
+2FA0E CJK COMPATIBILITY IDEOGRAPH-2FA0E
+ : 4CED
+2FA0F CJK COMPATIBILITY IDEOGRAPH-2FA0F
+ : 9D67
+2FA10 CJK COMPATIBILITY IDEOGRAPH-2FA10
+ : 2A0CE
+2FA11 CJK COMPATIBILITY IDEOGRAPH-2FA11
+ : 4CF8
+2FA12 CJK COMPATIBILITY IDEOGRAPH-2FA12
+ : 2A105
+2FA13 CJK COMPATIBILITY IDEOGRAPH-2FA13
+ : 2A20E
+2FA14 CJK COMPATIBILITY IDEOGRAPH-2FA14
+ : 2A291
+2FA15 CJK COMPATIBILITY IDEOGRAPH-2FA15
+ : 9EBB
+2FA16 CJK COMPATIBILITY IDEOGRAPH-2FA16
+ : 4D56
+2FA17 CJK COMPATIBILITY IDEOGRAPH-2FA17
+ : 9EF9
+2FA18 CJK COMPATIBILITY IDEOGRAPH-2FA18
+ : 9EFE
+2FA19 CJK COMPATIBILITY IDEOGRAPH-2FA19
+ : 9F05
+2FA1A CJK COMPATIBILITY IDEOGRAPH-2FA1A
+ : 9F0F
+2FA1B CJK COMPATIBILITY IDEOGRAPH-2FA1B
+ : 9F16
+2FA1C CJK COMPATIBILITY IDEOGRAPH-2FA1C
+ : 9F3B
+2FA1D CJK COMPATIBILITY IDEOGRAPH-2FA1D
+ : 2A600
+@@ 2FF80 Unassigned 2FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+2FFFE <not a character>
+ * the value 2FFFE is guaranteed not to be a Unicode character at all
+2FFFF <not a character>
+ * the value 2FFFF is guaranteed not to be a Unicode character at all
+@@ 3FF80 Unassigned 3FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+3FFFE <not a character>
+ * the value 3FFFE is guaranteed not to be a Unicode character at all
+3FFFF <not a character>
+ * the value 3FFFF is guaranteed not to be a Unicode character at all
+@@ 4FF80 Unassigned 4FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+4FFFE <not a character>
+ * the value 4FFFE is guaranteed not to be a Unicode character at all
+4FFFF <not a character>
+ * the value 4FFFF is guaranteed not to be a Unicode character at all
+@@ 5FF80 Unassigned 5FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+5FFFE <not a character>
+ * the value 5FFFE is guaranteed not to be a Unicode character at all
+5FFFF <not a character>
+ * the value 5FFFF is guaranteed not to be a Unicode character at all
+@@ 6FF80 Unassigned 6FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+6FFFE <not a character>
+ * the value 6FFFE is guaranteed not to be a Unicode character at all
+6FFFF <not a character>
+ * the value 6FFFF is guaranteed not to be a Unicode character at all
+@@ 7FF80 Unassigned 7FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+7FFFE <not a character>
+ * the value 7FFFE is guaranteed not to be a Unicode character at all
+7FFFF <not a character>
+ * the value 7FFFF is guaranteed not to be a Unicode character at all
+@@ 8FF80 Unassigned 8FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+8FFFE <not a character>
+ * the value 8FFFE is guaranteed not to be a Unicode character at all
+8FFFF <not a character>
+ * the value 8FFFF is guaranteed not to be a Unicode character at all
+@@ 9FF80 Unassigned 9FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+9FFFE <not a character>
+ * the value 9FFFE is guaranteed not to be a Unicode character at all
+9FFFF <not a character>
+ * the value 9FFFF is guaranteed not to be a Unicode character at all
+@@ AFF80 Unassigned AFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+AFFFE <not a character>
+ * the value AFFFE is guaranteed not to be a Unicode character at all
+AFFFF <not a character>
+ * the value AFFFF is guaranteed not to be a Unicode character at all
+@@ BFF80 Unassigned BFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+BFFFE <not a character>
+ * the value BFFFE is guaranteed not to be a Unicode character at all
+BFFFF <not a character>
+ * the value BFFFF is guaranteed not to be a Unicode character at all
+@@ CFF80 Unassigned CFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+CFFFE <not a character>
+ * the value CFFFE is guaranteed not to be a Unicode character at all
+CFFFF <not a character>
+ * the value CFFFF is guaranteed not to be a Unicode character at all
+@@ DFF80 Unassigned DFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+DFFFE <not a character>
+ * the value DFFFE is guaranteed not to be a Unicode character at all
+DFFFF <not a character>
+ * the value DFFFF is guaranteed not to be a Unicode character at all
+@@ E0000 Tags E007F
+@ Tag identifiers
+E0001 LANGUAGE TAG
+@ Tag components
+E0020 TAG SPACE
+E0021 TAG EXCLAMATION MARK
+E0022 TAG QUOTATION MARK
+E0023 TAG NUMBER SIGN
+E0024 TAG DOLLAR SIGN
+E0025 TAG PERCENT SIGN
+E0026 TAG AMPERSAND
+E0027 TAG APOSTROPHE
+E0028 TAG LEFT PARENTHESIS
+E0029 TAG RIGHT PARENTHESIS
+E002A TAG ASTERISK
+E002B TAG PLUS SIGN
+E002C TAG COMMA
+E002D TAG HYPHEN-MINUS
+E002E TAG FULL STOP
+E002F TAG SOLIDUS
+E0030 TAG DIGIT ZERO
+E0031 TAG DIGIT ONE
+E0032 TAG DIGIT TWO
+E0033 TAG DIGIT THREE
+E0034 TAG DIGIT FOUR
+E0035 TAG DIGIT FIVE
+E0036 TAG DIGIT SIX
+E0037 TAG DIGIT SEVEN
+E0038 TAG DIGIT EIGHT
+E0039 TAG DIGIT NINE
+E003A TAG COLON
+E003B TAG SEMICOLON
+E003C TAG LESS-THAN SIGN
+E003D TAG EQUALS SIGN
+E003E TAG GREATER-THAN SIGN
+E003F TAG QUESTION MARK
+E0040 TAG COMMERCIAL AT
+E0041 TAG LATIN CAPITAL LETTER A
+E0042 TAG LATIN CAPITAL LETTER B
+E0043 TAG LATIN CAPITAL LETTER C
+E0044 TAG LATIN CAPITAL LETTER D
+E0045 TAG LATIN CAPITAL LETTER E
+E0046 TAG LATIN CAPITAL LETTER F
+E0047 TAG LATIN CAPITAL LETTER G
+E0048 TAG LATIN CAPITAL LETTER H
+E0049 TAG LATIN CAPITAL LETTER I
+E004A TAG LATIN CAPITAL LETTER J
+E004B TAG LATIN CAPITAL LETTER K
+E004C TAG LATIN CAPITAL LETTER L
+E004D TAG LATIN CAPITAL LETTER M
+E004E TAG LATIN CAPITAL LETTER N
+E004F TAG LATIN CAPITAL LETTER O
+E0050 TAG LATIN CAPITAL LETTER P
+E0051 TAG LATIN CAPITAL LETTER Q
+E0052 TAG LATIN CAPITAL LETTER R
+E0053 TAG LATIN CAPITAL LETTER S
+E0054 TAG LATIN CAPITAL LETTER T
+E0055 TAG LATIN CAPITAL LETTER U
+E0056 TAG LATIN CAPITAL LETTER V
+E0057 TAG LATIN CAPITAL LETTER W
+E0058 TAG LATIN CAPITAL LETTER X
+E0059 TAG LATIN CAPITAL LETTER Y
+E005A TAG LATIN CAPITAL LETTER Z
+E005B TAG LEFT SQUARE BRACKET
+E005C TAG REVERSE SOLIDUS
+E005D TAG RIGHT SQUARE BRACKET
+E005E TAG CIRCUMFLEX ACCENT
+E005F TAG LOW LINE
+E0060 TAG GRAVE ACCENT
+E0061 TAG LATIN SMALL LETTER A
+E0062 TAG LATIN SMALL LETTER B
+E0063 TAG LATIN SMALL LETTER C
+E0064 TAG LATIN SMALL LETTER D
+E0065 TAG LATIN SMALL LETTER E
+E0066 TAG LATIN SMALL LETTER F
+E0067 TAG LATIN SMALL LETTER G
+E0068 TAG LATIN SMALL LETTER H
+E0069 TAG LATIN SMALL LETTER I
+E006A TAG LATIN SMALL LETTER J
+E006B TAG LATIN SMALL LETTER K
+E006C TAG LATIN SMALL LETTER L
+E006D TAG LATIN SMALL LETTER M
+E006E TAG LATIN SMALL LETTER N
+E006F TAG LATIN SMALL LETTER O
+E0070 TAG LATIN SMALL LETTER P
+E0071 TAG LATIN SMALL LETTER Q
+E0072 TAG LATIN SMALL LETTER R
+E0073 TAG LATIN SMALL LETTER S
+E0074 TAG LATIN SMALL LETTER T
+E0075 TAG LATIN SMALL LETTER U
+E0076 TAG LATIN SMALL LETTER V
+E0077 TAG LATIN SMALL LETTER W
+E0078 TAG LATIN SMALL LETTER X
+E0079 TAG LATIN SMALL LETTER Y
+E007A TAG LATIN SMALL LETTER Z
+E007B TAG LEFT CURLY BRACKET
+E007C TAG VERTICAL LINE
+E007D TAG RIGHT CURLY BRACKET
+E007E TAG TILDE
+E007F CANCEL TAG
+@@ E0100 Variation Selectors Supplement E01EF
+@+ These complete the set started at FE00 to FE0F
+@ Variation selectors
+E0100 VARIATION SELECTOR-17
+ * these are abbreviated VS17, and so on
+E0101 VARIATION SELECTOR-18
+E0102 VARIATION SELECTOR-19
+E0103 VARIATION SELECTOR-20
+E0104 VARIATION SELECTOR-21
+E0105 VARIATION SELECTOR-22
+E0106 VARIATION SELECTOR-23
+E0107 VARIATION SELECTOR-24
+E0108 VARIATION SELECTOR-25
+E0109 VARIATION SELECTOR-26
+E010A VARIATION SELECTOR-27
+E010B VARIATION SELECTOR-28
+E010C VARIATION SELECTOR-29
+E010D VARIATION SELECTOR-30
+E010E VARIATION SELECTOR-31
+E010F VARIATION SELECTOR-32
+E0110 VARIATION SELECTOR-33
+E0111 VARIATION SELECTOR-34
+E0112 VARIATION SELECTOR-35
+E0113 VARIATION SELECTOR-36
+E0114 VARIATION SELECTOR-37
+E0115 VARIATION SELECTOR-38
+E0116 VARIATION SELECTOR-39
+E0117 VARIATION SELECTOR-40
+E0118 VARIATION SELECTOR-41
+E0119 VARIATION SELECTOR-42
+E011A VARIATION SELECTOR-43
+E011B VARIATION SELECTOR-44
+E011C VARIATION SELECTOR-45
+E011D VARIATION SELECTOR-46
+E011E VARIATION SELECTOR-47
+E011F VARIATION SELECTOR-48
+E0120 VARIATION SELECTOR-49
+E0121 VARIATION SELECTOR-50
+E0122 VARIATION SELECTOR-51
+E0123 VARIATION SELECTOR-52
+E0124 VARIATION SELECTOR-53
+E0125 VARIATION SELECTOR-54
+E0126 VARIATION SELECTOR-55
+E0127 VARIATION SELECTOR-56
+E0128 VARIATION SELECTOR-57
+E0129 VARIATION SELECTOR-58
+E012A VARIATION SELECTOR-59
+E012B VARIATION SELECTOR-60
+E012C VARIATION SELECTOR-61
+E012D VARIATION SELECTOR-62
+E012E VARIATION SELECTOR-63
+E012F VARIATION SELECTOR-64
+E0130 VARIATION SELECTOR-65
+E0131 VARIATION SELECTOR-66
+E0132 VARIATION SELECTOR-67
+E0133 VARIATION SELECTOR-68
+E0134 VARIATION SELECTOR-69
+E0135 VARIATION SELECTOR-70
+E0136 VARIATION SELECTOR-71
+E0137 VARIATION SELECTOR-72
+E0138 VARIATION SELECTOR-73
+E0139 VARIATION SELECTOR-74
+E013A VARIATION SELECTOR-75
+E013B VARIATION SELECTOR-76
+E013C VARIATION SELECTOR-77
+E013D VARIATION SELECTOR-78
+E013E VARIATION SELECTOR-79
+E013F VARIATION SELECTOR-80
+E0140 VARIATION SELECTOR-81
+E0141 VARIATION SELECTOR-82
+E0142 VARIATION SELECTOR-83
+E0143 VARIATION SELECTOR-84
+E0144 VARIATION SELECTOR-85
+E0145 VARIATION SELECTOR-86
+E0146 VARIATION SELECTOR-87
+E0147 VARIATION SELECTOR-88
+E0148 VARIATION SELECTOR-89
+E0149 VARIATION SELECTOR-90
+E014A VARIATION SELECTOR-91
+E014B VARIATION SELECTOR-92
+E014C VARIATION SELECTOR-93
+E014D VARIATION SELECTOR-94
+E014E VARIATION SELECTOR-95
+E014F VARIATION SELECTOR-96
+E0150 VARIATION SELECTOR-97
+E0151 VARIATION SELECTOR-98
+E0152 VARIATION SELECTOR-99
+E0153 VARIATION SELECTOR-100
+E0154 VARIATION SELECTOR-101
+E0155 VARIATION SELECTOR-102
+E0156 VARIATION SELECTOR-103
+E0157 VARIATION SELECTOR-104
+E0158 VARIATION SELECTOR-105
+E0159 VARIATION SELECTOR-106
+E015A VARIATION SELECTOR-107
+E015B VARIATION SELECTOR-108
+E015C VARIATION SELECTOR-109
+E015D VARIATION SELECTOR-110
+E015E VARIATION SELECTOR-111
+E015F VARIATION SELECTOR-112
+E0160 VARIATION SELECTOR-113
+E0161 VARIATION SELECTOR-114
+E0162 VARIATION SELECTOR-115
+E0163 VARIATION SELECTOR-116
+E0164 VARIATION SELECTOR-117
+E0165 VARIATION SELECTOR-118
+E0166 VARIATION SELECTOR-119
+E0167 VARIATION SELECTOR-120
+E0168 VARIATION SELECTOR-121
+E0169 VARIATION SELECTOR-122
+E016A VARIATION SELECTOR-123
+E016B VARIATION SELECTOR-124
+E016C VARIATION SELECTOR-125
+E016D VARIATION SELECTOR-126
+E016E VARIATION SELECTOR-127
+E016F VARIATION SELECTOR-128
+E0170 VARIATION SELECTOR-129
+E0171 VARIATION SELECTOR-130
+E0172 VARIATION SELECTOR-131
+E0173 VARIATION SELECTOR-132
+E0174 VARIATION SELECTOR-133
+E0175 VARIATION SELECTOR-134
+E0176 VARIATION SELECTOR-135
+E0177 VARIATION SELECTOR-136
+E0178 VARIATION SELECTOR-137
+E0179 VARIATION SELECTOR-138
+E017A VARIATION SELECTOR-139
+E017B VARIATION SELECTOR-140
+E017C VARIATION SELECTOR-141
+E017D VARIATION SELECTOR-142
+E017E VARIATION SELECTOR-143
+E017F VARIATION SELECTOR-144
+E0180 VARIATION SELECTOR-145
+E0181 VARIATION SELECTOR-146
+E0182 VARIATION SELECTOR-147
+E0183 VARIATION SELECTOR-148
+E0184 VARIATION SELECTOR-149
+E0185 VARIATION SELECTOR-150
+E0186 VARIATION SELECTOR-151
+E0187 VARIATION SELECTOR-152
+E0188 VARIATION SELECTOR-153
+E0189 VARIATION SELECTOR-154
+E018A VARIATION SELECTOR-155
+E018B VARIATION SELECTOR-156
+E018C VARIATION SELECTOR-157
+E018D VARIATION SELECTOR-158
+E018E VARIATION SELECTOR-159
+E018F VARIATION SELECTOR-160
+E0190 VARIATION SELECTOR-161
+E0191 VARIATION SELECTOR-162
+E0192 VARIATION SELECTOR-163
+E0193 VARIATION SELECTOR-164
+E0194 VARIATION SELECTOR-165
+E0195 VARIATION SELECTOR-166
+E0196 VARIATION SELECTOR-167
+E0197 VARIATION SELECTOR-168
+E0198 VARIATION SELECTOR-169
+E0199 VARIATION SELECTOR-170
+E019A VARIATION SELECTOR-171
+E019B VARIATION SELECTOR-172
+E019C VARIATION SELECTOR-173
+E019D VARIATION SELECTOR-174
+E019E VARIATION SELECTOR-175
+E019F VARIATION SELECTOR-176
+E01A0 VARIATION SELECTOR-177
+E01A1 VARIATION SELECTOR-178
+E01A2 VARIATION SELECTOR-179
+E01A3 VARIATION SELECTOR-180
+E01A4 VARIATION SELECTOR-181
+E01A5 VARIATION SELECTOR-182
+E01A6 VARIATION SELECTOR-183
+E01A7 VARIATION SELECTOR-184
+E01A8 VARIATION SELECTOR-185
+E01A9 VARIATION SELECTOR-186
+E01AA VARIATION SELECTOR-187
+E01AB VARIATION SELECTOR-188
+E01AC VARIATION SELECTOR-189
+E01AD VARIATION SELECTOR-190
+E01AE VARIATION SELECTOR-191
+E01AF VARIATION SELECTOR-192
+E01B0 VARIATION SELECTOR-193
+E01B1 VARIATION SELECTOR-194
+E01B2 VARIATION SELECTOR-195
+E01B3 VARIATION SELECTOR-196
+E01B4 VARIATION SELECTOR-197
+E01B5 VARIATION SELECTOR-198
+E01B6 VARIATION SELECTOR-199
+E01B7 VARIATION SELECTOR-200
+E01B8 VARIATION SELECTOR-201
+E01B9 VARIATION SELECTOR-202
+E01BA VARIATION SELECTOR-203
+E01BB VARIATION SELECTOR-204
+E01BC VARIATION SELECTOR-205
+E01BD VARIATION SELECTOR-206
+E01BE VARIATION SELECTOR-207
+E01BF VARIATION SELECTOR-208
+E01C0 VARIATION SELECTOR-209
+E01C1 VARIATION SELECTOR-210
+E01C2 VARIATION SELECTOR-211
+E01C3 VARIATION SELECTOR-212
+E01C4 VARIATION SELECTOR-213
+E01C5 VARIATION SELECTOR-214
+E01C6 VARIATION SELECTOR-215
+E01C7 VARIATION SELECTOR-216
+E01C8 VARIATION SELECTOR-217
+E01C9 VARIATION SELECTOR-218
+E01CA VARIATION SELECTOR-219
+E01CB VARIATION SELECTOR-220
+E01CC VARIATION SELECTOR-221
+E01CD VARIATION SELECTOR-222
+E01CE VARIATION SELECTOR-223
+E01CF VARIATION SELECTOR-224
+E01D0 VARIATION SELECTOR-225
+E01D1 VARIATION SELECTOR-226
+E01D2 VARIATION SELECTOR-227
+E01D3 VARIATION SELECTOR-228
+E01D4 VARIATION SELECTOR-229
+E01D5 VARIATION SELECTOR-230
+E01D6 VARIATION SELECTOR-231
+E01D7 VARIATION SELECTOR-232
+E01D8 VARIATION SELECTOR-233
+E01D9 VARIATION SELECTOR-234
+E01DA VARIATION SELECTOR-235
+E01DB VARIATION SELECTOR-236
+E01DC VARIATION SELECTOR-237
+E01DD VARIATION SELECTOR-238
+E01DE VARIATION SELECTOR-239
+E01DF VARIATION SELECTOR-240
+E01E0 VARIATION SELECTOR-241
+E01E1 VARIATION SELECTOR-242
+E01E2 VARIATION SELECTOR-243
+E01E3 VARIATION SELECTOR-244
+E01E4 VARIATION SELECTOR-245
+E01E5 VARIATION SELECTOR-246
+E01E6 VARIATION SELECTOR-247
+E01E7 VARIATION SELECTOR-248
+E01E8 VARIATION SELECTOR-249
+E01E9 VARIATION SELECTOR-250
+E01EA VARIATION SELECTOR-251
+E01EB VARIATION SELECTOR-252
+E01EC VARIATION SELECTOR-253
+E01ED VARIATION SELECTOR-254
+E01EE VARIATION SELECTOR-255
+E01EF VARIATION SELECTOR-256
+@@ EFF80 Unassigned EFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+EFFFE <not a character>
+ * the value EFFFE is guaranteed not to be a Unicode character at all
+EFFFF <not a character>
+ * the value EFFFF is guaranteed not to be a Unicode character at all
+@@ FFF80 Supplementary Private Use Area-A FFFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+FFFFE <not a character>
+ * the value FFFFE is guaranteed not to be a Unicode character at all
+FFFFF <not a character>
+ * the value FFFFF is guaranteed not to be a Unicode character at all
+@@ 10FF80 Supplementary Private Use Area-B 10FFFF
+@ Noncharacters
+@+ These codes are intended for process internal uses, but are not permitted for interchange.
+10FFFE <not a character>
+ * the value 10FFFE is guaranteed not to be a Unicode character at all
+10FFFF <not a character>
+ * the value 10FFFF is guaranteed not to be a Unicode character at all
diff --git a/Master/tlpkg/tlperl/lib/unicore/NormalizationCorrections.txt b/Master/tlpkg/tlperl/lib/unicore/NormalizationCorrections.txt
new file mode 100644
index 00000000000..9391acefbb7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/NormalizationCorrections.txt
@@ -0,0 +1,48 @@
+# NormalizationCorrections-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# The normalization stabilization policy of the Unicode
+# Consortium ordinarily precludes any change to the decomposition
+# for any character, once established in a relevant version
+# of the UnicodeData.txt data file. However, under certain
+# exceptional (and rare) conditions, an error in a decomposition
+# mapping may be discovered that is truly just an unintended
+# typo in the data, and not a matter of dubious interpretation.
+#
+# Whenever such an error may be found, and if it meets the
+# requirements for possible exceptions to normalization
+# stability, the correction is entered in this data file,
+# so that any implementation depending on absolute stability
+# of normalization, *including* any errors in the data, can
+# safely reconstruct the exact state of the data tables at
+# any given version of Unicode.
+#
+# Currently this list has exactly six entries in it, one for the
+# typo found and corrected in Corrigendum #3, and five for
+# the typos and misidentifications found and corrected in
+# Corrigendum #4. All efforts
+# will be made to keep the entries limited to just those fixes.
+#
+# Interpretation of the fields:
+# Field 1: Unicode code point
+# Field 2: Original (erroneous) decomposition
+# Field 3: Corrected decomposition
+# Field 4: Version of Unicode for which the correction was
+# entered into UnicodeData.txt, in n.n.n format.
+# Comment: Indicates the Unicode Corrigendum which documents
+# the correction
+#
+# For more information, see UAX #15, Unicode Normalization Forms.
+#
+F951;96FB;964B;3.2.0 # Corrigendum 3
+2F868;2136A;36FC;4.0.0 # Corrigendum 4
+2F874;5F33;5F53;4.0.0 # Corrigendum 4
+2F91F;43AB;243AB;4.0.0 # Corrigendum 4
+2F95F;7AAE;7AEE;4.0.0 # Corrigendum 4
+2F9BF;4D57;45D7;4.0.0 # Corrigendum 4
diff --git a/Master/tlpkg/tlperl/lib/unicore/PVA.pl b/Master/tlpkg/tlperl/lib/unicore/PVA.pl
new file mode 100644
index 00000000000..d836bdb7549
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/PVA.pl
@@ -0,0 +1,2044 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+%utf8::PropertyAlias = (
+'sc',
+'Script',
+'xonfkd',
+'ExpandsOnNFKD',
+'patsyn',
+'PatternSyntax',
+'nfkcqc',
+'NFKCQuickCheck',
+'oalpha',
+'OtherAlphabetic',
+'gcb',
+'GraphemeClusterBreak',
+'nfcqc',
+'NFCQuickCheck',
+'ids',
+'IDStart',
+'lb',
+'LineBreak',
+'stc',
+'SimpleTitlecaseMapping',
+'xonfkc',
+'ExpandsOnNFKC',
+'patws',
+'PatternWhiteSpace',
+'tc',
+'TitlecaseMapping',
+'lower',
+'Lowercase',
+'idst',
+'IDSTrinaryOperator',
+'radical',
+'Radical',
+'fcnfkc',
+'FCNFKCClosure',
+'dm',
+'DecompositionMapping',
+'slc',
+'SimpleLowercaseMapping',
+'wspace',
+'WhiteSpace',
+'di',
+'DefaultIgnorableCodePoint',
+'nt',
+'NumericType',
+'ea',
+'EastAsianWidth',
+'ahex',
+'ASCIIHexDigit',
+'alpha',
+'Alphabetic',
+'uc',
+'UppercaseMapping',
+'dia',
+'Diacritic',
+'gc',
+'GeneralCategory',
+'xids',
+'XIDStart',
+'oupper',
+'OtherUppercase',
+'wb',
+'WordBreak',
+'math',
+'Math',
+'sb',
+'SentenceBreak',
+'qmark',
+'QuotationMark',
+'nfdqc',
+'NFDQuickCheck',
+'ideo',
+'Ideographic',
+'blk',
+'Block',
+'odi',
+'OtherDefaultIgnorableCodePoint',
+'hst',
+'HangulSyllableType',
+'bidim',
+'BidiMirrored',
+'olower',
+'OtherLowercase',
+'na',
+'Name',
+'hyphen',
+'Hyphen',
+'xidc',
+'XIDContinue',
+'oidc',
+'OtherIDContinue',
+'bidic',
+'BidiControl',
+'na1',
+'Unicode1Name',
+'compex',
+'FullCompositionExclusion',
+'ext',
+'Extender',
+'cf',
+'CaseFolding',
+'grlink',
+'GraphemeLink',
+'xonfc',
+'ExpandsOnNFC',
+'sd',
+'SoftDotted',
+'ccc',
+'CanonicalCombiningClass',
+'dash',
+'Dash',
+'hex',
+'HexDigit',
+'grbase',
+'GraphemeBase',
+'dt',
+'DecompositionType',
+'xonfd',
+'ExpandsOnNFD',
+'scc',
+'SpecialCaseCondition',
+'idsb',
+'IDSBinaryOperator',
+'age',
+'Age',
+'loe',
+'LogicalOrderException',
+'term',
+'TerminalPunctuation',
+'ce',
+'CompositionExclusion',
+'isc',
+'ISOComment',
+'dep',
+'Deprecated',
+'sfc',
+'SimpleCaseFolding',
+'bc',
+'BidiClass',
+'nchar',
+'NoncharacterCodePoint',
+'jt',
+'JoiningType',
+'upper',
+'Uppercase',
+'uideo',
+'UnifiedIdeograph',
+'sterm',
+'STerm',
+'nfkdqc',
+'NFKDQuickCheck',
+'oids',
+'OtherIDStart',
+'joinc',
+'JoinControl',
+'nv',
+'NumericValue',
+'suc',
+'SimpleUppercaseMapping',
+'urs',
+'UnicodeRadicalStroke',
+'bmg',
+'BidiMirroringGlyph',
+'grext',
+'GraphemeExtend',
+'idc',
+'IDContinue',
+'vs',
+'VariationSelector',
+'omath',
+'OtherMath',
+'lc',
+'LowercaseMapping',
+'ogrext',
+'OtherGraphemeExtend',
+'jg',
+'JoiningGroup',
+);
+
+%utf8::PA_reverse = (
+'linebreak',
+'lb',
+'bidiclass',
+'bc',
+'terminalpunctuation',
+'Term',
+'expandsonnfkc',
+'XONFKC',
+'extender',
+'Ext',
+'simplecasefolding',
+'sfc',
+'patternsyntax',
+'PatSyn',
+'sentencebreak',
+'SB',
+'numericvalue',
+'nv',
+'patternwhitespace',
+'PatWS',
+'softdotted',
+'SD',
+'logicalorderexception',
+'LOE',
+'idstart',
+'IDS',
+'generalcategory',
+'gc',
+'decompositiontype',
+'dt',
+'name',
+'na',
+'numerictype',
+'nt',
+'otherlowercase',
+'OLower',
+'joininggroup',
+'jg',
+'expandsonnfkd',
+'XONFKD',
+'deprecated',
+'Dep',
+'radical',
+'Radical',
+'idstrinaryoperator',
+'IDST',
+'xidstart',
+'XIDS',
+'lowercase',
+'Lower',
+'unifiedideograph',
+'UIdeo',
+'othergraphemeextend',
+'OGrExt',
+'eastasianwidth',
+'ea',
+'math',
+'Math',
+'graphemelink',
+'GrLink',
+'noncharactercodepoint',
+'NChar',
+'graphemebase',
+'GrBase',
+'bidimirrored',
+'BidiM',
+'casefolding',
+'cf',
+'simpleuppercasemapping',
+'suc',
+'fullcompositionexclusion',
+'CompEx',
+'compositionexclusion',
+'CE',
+'uppercasemapping',
+'uc',
+'decompositionmapping',
+'dm',
+'whitespace',
+'WSpace',
+'hyphen',
+'Hyphen',
+'ideographic',
+'Ideo',
+'idcontinue',
+'IDC',
+'idsbinaryoperator',
+'IDSB',
+'hangulsyllabletype',
+'hst',
+'asciihexdigit',
+'AHex',
+'otheruppercase',
+'OUpper',
+'nfkdquickcheck',
+'NFKDQC',
+'simpletitlecasemapping',
+'stc',
+'nfcquickcheck',
+'NFCQC',
+'bidicontrol',
+'BidiC',
+'diacritic',
+'Dia',
+'joiningtype',
+'jt',
+'otheralphabetic',
+'OAlpha',
+'canonicalcombiningclass',
+'ccc',
+'alphabetic',
+'Alpha',
+'titlecasemapping',
+'tc',
+'unicoderadicalstroke',
+'URS',
+'hexdigit',
+'Hex',
+'unicode1name',
+'na1',
+'dash',
+'Dash',
+'fcnfkcclosure',
+'FCNFKC',
+'graphemeextend',
+'GrExt',
+'joincontrol',
+'JoinC',
+'xidcontinue',
+'XIDC',
+'quotationmark',
+'QMark',
+'expandsonnfd',
+'XONFD',
+'age',
+'age',
+'otheridcontinue',
+'OIDC',
+'uppercase',
+'Upper',
+'expandsonnfc',
+'XONFC',
+'defaultignorablecodepoint',
+'DI',
+'nfdquickcheck',
+'NFDQC',
+'isocomment',
+'isc',
+'otherdefaultignorablecodepoint',
+'ODI',
+'variationselector',
+'VS',
+'specialcasecondition',
+'scc',
+'script',
+'sc',
+'otheridstart',
+'OIDS',
+'sterm',
+'STerm',
+'graphemeclusterbreak',
+'GCB',
+'nfkcquickcheck',
+'NFKCQC',
+'bidimirroringglyph',
+'bmg',
+'othermath',
+'OMath',
+'block',
+'blk',
+'wordbreak',
+'WB',
+'lowercasemapping',
+'lc',
+'simplelowercasemapping',
+'slc',
+);
+
+%utf8::PropValueAlias = (
+'sc',
+{
+'tglg',
+'Tagalog',
+'runr',
+'Runic',
+'osma',
+'Osmanya',
+'hano',
+'Hanunoo',
+'cans',
+'CanadianAboriginal',
+'tagb',
+'Tagbanwa',
+'mlym',
+'Malayalam',
+'knda',
+'Kannada',
+'grek',
+'Greek',
+'ethi',
+'Ethiopic',
+'orya',
+'Oriya',
+'cher',
+'Cherokee',
+'mong',
+'Mongolian',
+'khmr',
+'Khmer',
+'ogam',
+'Ogham',
+'hrkt',
+'KatakanaOrHiragana',
+'armn',
+'Armenian',
+'ital',
+'OldItalic',
+'hani',
+'Han',
+'shaw',
+'Shavian',
+'taml',
+'Tamil',
+'tibt',
+'Tibetan',
+'guru',
+'Gurmukhi',
+'ugar',
+'Ugaritic',
+'qaai',
+'Inherited',
+'kana',
+'Katakana',
+'gujr',
+'Gujarati',
+'thaa',
+'Thaana',
+'cyrl',
+'Cyrillic',
+'copt',
+'Coptic',
+'sylo',
+'SylotiNagri',
+'thai',
+'Thai',
+'talu',
+'NewTaiLue',
+'laoo',
+'Lao',
+'sinh',
+'Sinhala',
+'beng',
+'Bengali',
+'hira',
+'Hiragana',
+'brai',
+'Braille',
+'telu',
+'Telugu',
+'limb',
+'Limbu',
+'geor',
+'Georgian',
+'mymr',
+'Myanmar',
+'glag',
+'Glagolitic',
+'hang',
+'Hangul',
+'syrc',
+'Syriac',
+'tfng',
+'Tifinagh',
+'dsrt',
+'Deseret',
+'buhd',
+'Buhid',
+'yiii',
+'Yi',
+'arab',
+'Arabic',
+'bopo',
+'Bopomofo',
+'khar',
+'Kharoshthi',
+'linb',
+'LinearB',
+'deva',
+'Devanagari',
+'xpeo',
+'OldPersian',
+'goth',
+'Gothic',
+'cprt',
+'Cypriot',
+'tale',
+'TaiLe',
+'zyyy',
+'Common',
+'latn',
+'Latin',
+'bugi',
+'Buginese',
+'hebr',
+'Hebrew',
+},
+'dt',
+{
+'fra',
+'Fraction',
+'none',
+'None',
+'sml',
+'Small',
+'enc',
+'Circle',
+'font',
+'Font',
+'init',
+'Initial',
+'nb',
+'Nobreak',
+'iso',
+'Isolated',
+'sup',
+'Super',
+'fin',
+'Final',
+'wide',
+'Wide',
+'nar',
+'Narrow',
+'can',
+'Canonical',
+'med',
+'Medial',
+'sub',
+'Sub',
+'vert',
+'Vertical',
+'sqr',
+'Square',
+'com',
+'Compat',
+},
+'nt',
+{
+'none',
+'None',
+'di',
+'Digit',
+'de',
+'Decimal',
+'nu',
+'Numeric',
+},
+'ea',
+{
+'w',
+'Wide',
+'n',
+'Neutral',
+'h',
+'Halfwidth',
+'a',
+'Ambiguous',
+'f',
+'Fullwidth',
+'na',
+'Narrow',
+},
+'NFKC_QC',
+{
+'y',
+'Yes',
+'n',
+'No',
+'m',
+'Maybe',
+},
+'bc',
+{
+'r',
+'RightToLeft',
+'rlo',
+'RightToLeftOverride',
+'es',
+'EuropeanSeparator',
+'ws',
+'WhiteSpace',
+'rle',
+'RightToLeftEmbedding',
+'on',
+'OtherNeutral',
+'bn',
+'BoundaryNeutral',
+'et',
+'EuropeanTerminator',
+'pdf',
+'PopDirectionalFormat',
+'lro',
+'LeftToRightOverride',
+'s',
+'SegmentSeparator',
+'al',
+'ArabicLetter',
+'en',
+'EuropeanNumber',
+'l',
+'LeftToRight',
+'b',
+'ParagraphSeparator',
+'lre',
+'LeftToRightEmbedding',
+'cs',
+'CommonSeparator',
+'nsm',
+'NonspacingMark',
+'an',
+'ArabicNumber',
+},
+'gc',
+{
+'sc',
+'CurrencySymbol',
+'mc',
+'SpacingMark',
+'lm',
+'ModifierLetter',
+'cn',
+'Unassigned',
+'pf',
+'FinalPunctuation',
+'no',
+'OtherNumber',
+'cc',
+'Control',
+'lo',
+'OtherLetter',
+'po',
+'OtherPunctuation',
+'zs',
+'SpaceSeparator',
+'co',
+'PrivateUse',
+'so',
+'OtherSymbol',
+'ll',
+'LowercaseLetter',
+'nd',
+'DecimalNumber',
+'cf',
+'Format',
+'me',
+'EnclosingMark',
+'s',
+'Symbol',
+'zp',
+'ParagraphSeparator',
+'pd',
+'DashPunctuation',
+'c',
+'Other',
+'lt',
+'TitlecaseLetter',
+'cs',
+'Surrogate',
+'l&',
+'CasedLetter',
+'z',
+'Separator',
+'ps',
+'OpenPunctuation',
+'zl',
+'LineSeparator',
+'pc',
+'ConnectorPunctuation',
+'pi',
+'InitialPunctuation',
+'n',
+'Number',
+'m',
+'Mark',
+'nl',
+'LetterNumber',
+'sm',
+'MathSymbol',
+'l',
+'Letter',
+'mn',
+'NonspacingMark',
+'p',
+'Punctuation',
+'lc',
+'CasedLetter',
+'sk',
+'ModifierSymbol',
+'lu',
+'UppercaseLetter',
+'pe',
+'ClosePunctuation',
+},
+'GCB',
+{
+'cn',
+'Control',
+'ex',
+'Extend',
+'v',
+'V',
+'lv',
+'LV',
+'xx',
+'Other',
+'l',
+'L',
+'lvt',
+'LVT',
+'cr',
+'CR',
+'lf',
+'LF',
+'t',
+'T',
+},
+'lb',
+{
+'sp',
+'Space',
+'ba',
+'BreakAfter',
+'gl',
+'Glue',
+'xx',
+'Unknown',
+'nu',
+'Numeric',
+'cb',
+'ContingentBreak',
+'sy',
+'BreakSymbols',
+'cr',
+'CarriageReturn',
+'in',
+'Inseparable',
+'bb',
+'BreakBefore',
+'sg',
+'Surrogate',
+'sa',
+'ComplexContext',
+'po',
+'PostfixNumeric',
+'jl',
+'JL',
+'id',
+'Ideographic',
+'al',
+'Alphabetic',
+'bk',
+'MandatoryBreak',
+'pr',
+'PrefixNumeric',
+'b2',
+'BreakBoth',
+'op',
+'OpenPunctuation',
+'cl',
+'ClosePunctuation',
+'is',
+'InfixNumeric',
+'qu',
+'Quotation',
+'hy',
+'Hyphen',
+'wj',
+'WordJoiner',
+'zw',
+'ZWSpace',
+'jt',
+'JT',
+'ex',
+'Exclamation',
+'cm',
+'CombiningMark',
+'h2',
+'H2',
+'nl',
+'NextLine',
+'ns',
+'Nonstarter',
+'h3',
+'H3',
+'ai',
+'Ambiguous',
+'lf',
+'LineFeed',
+'jv',
+'JV',
+},
+'jt',
+{
+'l',
+'LeftJoining',
+'u',
+'NonJoining',
+'c',
+'JoinCausing',
+'r',
+'RightJoining',
+'d',
+'DualJoining',
+'t',
+'Transparent',
+},
+'NFKD_QC',
+{
+'y',
+'Yes',
+'n',
+'No',
+},
+'NFC_QC',
+{
+'y',
+'Yes',
+'n',
+'No',
+'m',
+'Maybe',
+},
+'hst',
+{
+'l',
+'LeadingJamo',
+'lvt',
+'LVTSyllable',
+'v',
+'VowelJamo',
+'lv',
+'LVSyllable',
+'t',
+'TrailingJamo',
+'na',
+'NotApplicable',
+},
+'NFD_QC',
+{
+'y',
+'Yes',
+'n',
+'No',
+},
+'WB',
+{
+'ml',
+'MidLetter',
+'le',
+'ALetter',
+'ex',
+'ExtendNumLet',
+'xx',
+'Other',
+'nu',
+'Numeric',
+'fo',
+'Format',
+'mn',
+'MidNum',
+'ka',
+'Katakana',
+},
+'SB',
+{
+'sp',
+'Sp',
+'cl',
+'Close',
+'le',
+'OLetter',
+'up',
+'Upper',
+'st',
+'STerm',
+'xx',
+'Other',
+'nu',
+'Numeric',
+'fo',
+'Format',
+'se',
+'Sep',
+'lo',
+'Lower',
+'at',
+'ATerm',
+},
+'ccc',
+{
+'atb',
+'AttachedBelow',
+'db',
+'DoubleBelow',
+'a',
+'Above',
+'r',
+'Right',
+'da',
+'DoubleAbove',
+'is',
+'IotaSubscript',
+'nr',
+'NotReordered',
+'ov',
+'Overlay',
+'br',
+'BelowRight',
+'nk',
+'Nukta',
+'atbl',
+'AttachedBelowLeft',
+'al',
+'AboveLeft',
+'ar',
+'AboveRight',
+'atar',
+'AttachedAboveRight',
+'l',
+'Left',
+'b',
+'Below',
+'vr',
+'Virama',
+'kv',
+'KanaVoicing',
+'bl',
+'BelowLeft',
+},
+);
+
+%utf8::PVA_reverse = (
+'sc',
+{
+'newtailue',
+'Talu',
+'canadianaboriginal',
+'Cans',
+'gujarati',
+'Gujr',
+'latin',
+'Latn',
+'hangul',
+'Hang',
+'deseret',
+'Dsrt',
+'hebrew',
+'Hebr',
+'inherited',
+'Qaai',
+'linearb',
+'Linb',
+'ugaritic',
+'Ugar',
+'taile',
+'Tale',
+'armenian',
+'Armn',
+'tifinagh',
+'Tfng',
+'myanmar',
+'Mymr',
+'gurmukhi',
+'Guru',
+'greek',
+'Grek',
+'coptic',
+'Copt',
+'cyrillic',
+'Cyrl',
+'thaana',
+'Thaa',
+'lao',
+'Laoo',
+'katakana',
+'Kana',
+'khmer',
+'Khmr',
+'tibetan',
+'Tibt',
+'hiragana',
+'Hira',
+'mongolian',
+'Mong',
+'thai',
+'Thai',
+'yi',
+'Yiii',
+'sylotinagri',
+'Sylo',
+'bopomofo',
+'Bopo',
+'malayalam',
+'Mlym',
+'telugu',
+'Telu',
+'limbu',
+'Limb',
+'oriya',
+'Orya',
+'buhid',
+'Buhd',
+'cypriot',
+'Cprt',
+'bengali',
+'Beng',
+'katakanaorhiragana',
+'Hrkt',
+'oldpersian',
+'Xpeo',
+'tagalog',
+'Tglg',
+'syriac',
+'Syrc',
+'cherokee',
+'Cher',
+'ogham',
+'Ogam',
+'hanunoo',
+'Hano',
+'braille',
+'Brai',
+'tamil',
+'Taml',
+'common',
+'Zyyy',
+'runic',
+'Runr',
+'georgian',
+'Geor',
+'ethiopic',
+'Ethi',
+'glagolitic',
+'Glag',
+'han',
+'Hani',
+'kharoshthi',
+'Khar',
+'kannada',
+'Knda',
+'tagbanwa',
+'Tagb',
+'arabic',
+'Arab',
+'sinhala',
+'Sinh',
+'gothic',
+'Goth',
+'osmanya',
+'Osma',
+'olditalic',
+'Ital',
+'devanagari',
+'Deva',
+'buginese',
+'Bugi',
+'shavian',
+'Shaw',
+},
+'dt',
+{
+'small',
+'sml',
+'none',
+'none',
+'isolated',
+'iso',
+'narrow',
+'nar',
+'square',
+'sqr',
+'nobreak',
+'nb',
+'fraction',
+'fra',
+'font',
+'font',
+'medial',
+'med',
+'wide',
+'wide',
+'canonical',
+'can',
+'circle',
+'enc',
+'super',
+'sup',
+'vertical',
+'vert',
+'final',
+'fin',
+'compat',
+'com',
+'sub',
+'sub',
+'initial',
+'init',
+},
+'nt',
+{
+'none',
+'None',
+'digit',
+'Di',
+'numeric',
+'Nu',
+'decimal',
+'De',
+},
+'ea',
+{
+'halfwidth',
+'H',
+'fullwidth',
+'F',
+'ambiguous',
+'A',
+'narrow',
+'Na',
+'wide',
+'W',
+'neutral',
+'N',
+},
+'NFKC_QC',
+{
+'yes',
+'Y',
+'maybe',
+'M',
+'no',
+'N',
+},
+'bc',
+{
+'nonspacingmark',
+'NSM',
+'whitespace',
+'WS',
+'righttoleft',
+'R',
+'lefttoright',
+'L',
+'boundaryneutral',
+'BN',
+'segmentseparator',
+'S',
+'lefttorightembedding',
+'LRE',
+'europeanterminator',
+'ET',
+'righttoleftembedding',
+'RLE',
+'righttoleftoverride',
+'RLO',
+'lefttorightoverride',
+'LRO',
+'europeanseparator',
+'ES',
+'europeannumber',
+'EN',
+'commonseparator',
+'CS',
+'arabicletter',
+'AL',
+'paragraphseparator',
+'B',
+'otherneutral',
+'ON',
+'popdirectionalformat',
+'PDF',
+'arabicnumber',
+'AN',
+},
+'gc',
+{
+'modifiersymbol',
+'Sk',
+'letternumber',
+'Nl',
+'connectorpunctuation',
+'Pc',
+'spacingmark',
+'Mc',
+'mark',
+'M',
+'unassigned',
+'Cn',
+'enclosingmark',
+'Me',
+'lineseparator',
+'Zl',
+'lowercaseletter',
+'Ll',
+'symbol',
+'S',
+'letter',
+'L',
+'othernumber',
+'No',
+'paragraphseparator',
+'Zp',
+'modifierletter',
+'Lm',
+'titlecaseletter',
+'Lt',
+'decimalnumber',
+'Nd',
+'other',
+'C',
+'mathsymbol',
+'Sm',
+'surrogate',
+'Cs',
+'otherletter',
+'Lo',
+'nonspacingmark',
+'Mn',
+'number',
+'N',
+'uppercaseletter',
+'Lu',
+'spaceseparator',
+'Zs',
+'privateuse',
+'Co',
+'openpunctuation',
+'Ps',
+'punctuation',
+'P',
+'control',
+'Cc',
+'casedletter',
+'LC',
+'closepunctuation',
+'Pe',
+'otherpunctuation',
+'Po',
+'finalpunctuation',
+'Pf',
+'format',
+'Cf',
+'initialpunctuation',
+'Pi',
+'separator',
+'Z',
+'othersymbol',
+'So',
+'dashpunctuation',
+'Pd',
+'currencysymbol',
+'Sc',
+},
+'GCB',
+{
+'extend',
+'EX',
+'v',
+'V',
+'lv',
+'LV',
+'l',
+'L',
+'lvt',
+'LVT',
+'cr',
+'CR',
+'other',
+'XX',
+'lf',
+'LF',
+'control',
+'CN',
+'t',
+'T',
+},
+'lb',
+{
+'carriagereturn',
+'CR',
+'ideographic',
+'ID',
+'hyphen',
+'HY',
+'ambiguous',
+'AI',
+'contingentbreak',
+'CB',
+'complexcontext',
+'SA',
+'prefixnumeric',
+'PR',
+'jl',
+'JL',
+'inseparable',
+'IN',
+'breaksymbols',
+'SY',
+'breakafter',
+'BA',
+'breakbefore',
+'BB',
+'postfixnumeric',
+'PO',
+'glue',
+'GL',
+'wordjoiner',
+'WJ',
+'breakboth',
+'B2',
+'quotation',
+'QU',
+'combiningmark',
+'CM',
+'nonstarter',
+'NS',
+'linefeed',
+'LF',
+'alphabetic',
+'AL',
+'surrogate',
+'SG',
+'mandatorybreak',
+'BK',
+'unknown',
+'XX',
+'exclamation',
+'EX',
+'openpunctuation',
+'OP',
+'jt',
+'JT',
+'closepunctuation',
+'CL',
+'space',
+'SP',
+'zwspace',
+'ZW',
+'h2',
+'H2',
+'infixnumeric',
+'IS',
+'nextline',
+'NL',
+'numeric',
+'NU',
+'h3',
+'H3',
+'jv',
+'JV',
+},
+'jt',
+{
+'leftjoining',
+'L',
+'transparent',
+'T',
+'nonjoining',
+'U',
+'rightjoining',
+'R',
+'dualjoining',
+'D',
+'joincausing',
+'C',
+},
+'NFKD_QC',
+{
+'yes',
+'Y',
+'no',
+'N',
+},
+'NFC_QC',
+{
+'yes',
+'Y',
+'maybe',
+'M',
+'no',
+'N',
+},
+'hst',
+{
+'lvtsyllable',
+'LVT',
+'lvsyllable',
+'LV',
+'leadingjamo',
+'L',
+'notapplicable',
+'NA',
+'voweljamo',
+'V',
+'trailingjamo',
+'T',
+},
+'NFD_QC',
+{
+'yes',
+'Y',
+'no',
+'N',
+},
+'WB',
+{
+'midletter',
+'ML',
+'format',
+'FO',
+'katakana',
+'KA',
+'other',
+'XX',
+'midnum',
+'MN',
+'numeric',
+'NU',
+'extendnumlet',
+'EX',
+'aletter',
+'LE',
+},
+'SB',
+{
+'sp',
+'SP',
+'upper',
+'UP',
+'sterm',
+'ST',
+'aterm',
+'AT',
+'close',
+'CL',
+'oletter',
+'LE',
+'sep',
+'SE',
+'format',
+'FO',
+'other',
+'XX',
+'lower',
+'LO',
+'numeric',
+'NU',
+},
+'ccc',
+{
+'left',
+'L',
+'attachedbelowleft',
+'ATBL',
+'belowleft',
+'BL',
+'aboveright',
+'AR',
+'kanavoicing',
+'KV',
+'above',
+'A',
+'aboveleft',
+'AL',
+'nukta',
+'NK',
+'below',
+'B',
+'doublebelow',
+'DB',
+'virama',
+'VR',
+'belowright',
+'BR',
+'notreordered',
+'NR',
+'attachedbelow',
+'ATB',
+'right',
+'R',
+'iotasubscript',
+'IS',
+'doubleabove',
+'DA',
+'attachedaboveright',
+'ATAR',
+'overlay',
+'OV',
+},
+);
+
+%utf8::PVA_abbr_map = (
+'jt',
+{
+'l',
+'L',
+'u',
+'U',
+'c',
+'C',
+'r',
+'R',
+'d',
+'D',
+'t',
+'T',
+},
+'dt',
+{
+'fra',
+'fra',
+'none',
+'none',
+'sml',
+'sml',
+'enc',
+'enc',
+'font',
+'font',
+'init',
+'init',
+'nb',
+'nb',
+'iso',
+'iso',
+'sup',
+'sup',
+'fin',
+'fin',
+'wide',
+'wide',
+'nar',
+'nar',
+'can',
+'can',
+'med',
+'med',
+'sub',
+'sub',
+'vert',
+'vert',
+'sqr',
+'sqr',
+'com',
+'com',
+},
+'nt',
+{
+'none',
+'None',
+'di',
+'Di',
+'de',
+'De',
+'nu',
+'Nu',
+},
+'NFKD_QC',
+{
+'y',
+'Y',
+'n',
+'N',
+},
+'ea',
+{
+'w',
+'W',
+'n',
+'N',
+'h',
+'H',
+'a',
+'A',
+'f',
+'F',
+'na',
+'Na',
+},
+'gc_sc',
+{
+'runr',
+'Runr',
+'osma',
+'Osma',
+'sc',
+'Sc',
+'mc',
+'Mc',
+'hano',
+'Hano',
+'cans',
+'Cans',
+'lm',
+'Lm',
+'cn',
+'Cn',
+'knda',
+'Knda',
+'orya',
+'Orya',
+'cher',
+'Cher',
+'khmr',
+'Khmr',
+'ogam',
+'Ogam',
+'lo',
+'Lo',
+'po',
+'Po',
+'co',
+'Co',
+'ital',
+'Ital',
+'ll',
+'Ll',
+'tibt',
+'Tibt',
+'kana',
+'Kana',
+'zp',
+'Zp',
+'gujr',
+'Gujr',
+'thaa',
+'Thaa',
+'cs',
+'Cs',
+'copt',
+'Copt',
+'z',
+'Z',
+'ps',
+'Ps',
+'sylo',
+'Sylo',
+'talu',
+'Talu',
+'laoo',
+'Laoo',
+'sinh',
+'Sinh',
+'zl',
+'Zl',
+'pc',
+'Pc',
+'hira',
+'Hira',
+'limb',
+'Limb',
+'mymr',
+'Mymr',
+'yiii',
+'Yiii',
+'arab',
+'Arab',
+'deva',
+'Deva',
+'xpeo',
+'Xpeo',
+'cprt',
+'Cprt',
+'bugi',
+'Bugi',
+'sk',
+'Sk',
+'hebr',
+'Hebr',
+'lu',
+'Lu',
+'pe',
+'Pe',
+'tglg',
+'Tglg',
+'tagb',
+'Tagb',
+'mlym',
+'Mlym',
+'pf',
+'Pf',
+'no',
+'No',
+'grek',
+'Grek',
+'ethi',
+'Ethi',
+'mong',
+'Mong',
+'cc',
+'Cc',
+'hrkt',
+'Hrkt',
+'armn',
+'Armn',
+'zs',
+'Zs',
+'so',
+'So',
+'hani',
+'Hani',
+'shaw',
+'Shaw',
+'taml',
+'Taml',
+'me',
+'Me',
+'cf',
+'Cf',
+'nd',
+'Nd',
+'s',
+'S',
+'guru',
+'Guru',
+'ugar',
+'Ugar',
+'qaai',
+'Qaai',
+'lt',
+'Lt',
+'c',
+'C',
+'pd',
+'Pd',
+'cyrl',
+'Cyrl',
+'l&',
+'LC',
+'thai',
+'Thai',
+'beng',
+'Beng',
+'brai',
+'Brai',
+'telu',
+'Telu',
+'pi',
+'Pi',
+'geor',
+'Geor',
+'glag',
+'Glag',
+'hang',
+'Hang',
+'syrc',
+'Syrc',
+'tfng',
+'Tfng',
+'n',
+'N',
+'dsrt',
+'Dsrt',
+'buhd',
+'Buhd',
+'m',
+'M',
+'khar',
+'Khar',
+'sm',
+'Sm',
+'nl',
+'Nl',
+'bopo',
+'Bopo',
+'linb',
+'Linb',
+'mn',
+'Mn',
+'l',
+'L',
+'p',
+'P',
+'goth',
+'Goth',
+'tale',
+'Tale',
+'lc',
+'LC',
+'zyyy',
+'Zyyy',
+'latn',
+'Latn',
+},
+'NFC_QC',
+{
+'y',
+'Y',
+'n',
+'N',
+'m',
+'M',
+},
+'NFD_QC',
+{
+'y',
+'Y',
+'n',
+'N',
+},
+'hst',
+{
+'l',
+'L',
+'lvt',
+'LVT',
+'v',
+'V',
+'lv',
+'LV',
+'t',
+'T',
+'na',
+'NA',
+},
+'NFKC_QC',
+{
+'y',
+'Y',
+'n',
+'N',
+'m',
+'M',
+},
+'WB',
+{
+'ml',
+'ML',
+'le',
+'LE',
+'ex',
+'EX',
+'xx',
+'XX',
+'nu',
+'NU',
+'fo',
+'FO',
+'mn',
+'MN',
+'ka',
+'KA',
+},
+'SB',
+{
+'sp',
+'SP',
+'cl',
+'CL',
+'le',
+'LE',
+'up',
+'UP',
+'st',
+'ST',
+'xx',
+'XX',
+'nu',
+'NU',
+'fo',
+'FO',
+'se',
+'SE',
+'lo',
+'LO',
+'at',
+'AT',
+},
+'bc',
+{
+'r',
+'R',
+'rlo',
+'RLO',
+'es',
+'ES',
+'ws',
+'WS',
+'rle',
+'RLE',
+'on',
+'ON',
+'bn',
+'BN',
+'et',
+'ET',
+'pdf',
+'PDF',
+'lro',
+'LRO',
+'s',
+'S',
+'al',
+'AL',
+'en',
+'EN',
+'l',
+'L',
+'b',
+'B',
+'lre',
+'LRE',
+'cs',
+'CS',
+'nsm',
+'NSM',
+'an',
+'AN',
+},
+'GCB',
+{
+'cn',
+'CN',
+'ex',
+'EX',
+'v',
+'V',
+'lv',
+'LV',
+'xx',
+'XX',
+'l',
+'L',
+'lvt',
+'LVT',
+'cr',
+'CR',
+'lf',
+'LF',
+'t',
+'T',
+},
+'ccc',
+{
+'atb',
+'ATB',
+'db',
+'DB',
+'a',
+'A',
+'r',
+'R',
+'da',
+'DA',
+'is',
+'IS',
+'nr',
+'NR',
+'ov',
+'OV',
+'br',
+'BR',
+'nk',
+'NK',
+'atbl',
+'ATBL',
+'al',
+'AL',
+'ar',
+'AR',
+'atar',
+'ATAR',
+'l',
+'L',
+'b',
+'B',
+'vr',
+'VR',
+'kv',
+'KV',
+'bl',
+'BL',
+},
+'lb',
+{
+'sp',
+'SP',
+'ba',
+'BA',
+'gl',
+'GL',
+'xx',
+'XX',
+'nu',
+'NU',
+'cb',
+'CB',
+'sy',
+'SY',
+'cr',
+'CR',
+'in',
+'IN',
+'bb',
+'BB',
+'sg',
+'SG',
+'sa',
+'SA',
+'po',
+'PO',
+'jl',
+'JL',
+'id',
+'ID',
+'al',
+'AL',
+'bk',
+'BK',
+'pr',
+'PR',
+'b2',
+'B2',
+'op',
+'OP',
+'cl',
+'CL',
+'is',
+'IS',
+'qu',
+'QU',
+'hy',
+'HY',
+'wj',
+'WJ',
+'zw',
+'ZW',
+'jt',
+'JT',
+'ex',
+'EX',
+'cm',
+'CM',
+'h2',
+'H2',
+'nl',
+'NL',
+'ns',
+'NS',
+'h3',
+'H3',
+'ai',
+'AI',
+'lf',
+'LF',
+'jv',
+'JV',
+},
+);
+1;
diff --git a/Master/tlpkg/tlperl/lib/unicore/PropList.txt b/Master/tlpkg/tlperl/lib/unicore/PropList.txt
new file mode 100644
index 00000000000..befc49e8e64
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/PropList.txt
@@ -0,0 +1,1049 @@
+# PropList-4.1.0.txt
+# Date: 2005-03-26, 00:34:40 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+0009..000D ; White_Space # Cc [5] <control-0009>..<control-000D>
+0020 ; White_Space # Zs SPACE
+0085 ; White_Space # Cc <control-0085>
+00A0 ; White_Space # Zs NO-BREAK SPACE
+1680 ; White_Space # Zs OGHAM SPACE MARK
+180E ; White_Space # Zs MONGOLIAN VOWEL SEPARATOR
+2000..200A ; White_Space # Zs [11] EN QUAD..HAIR SPACE
+2028 ; White_Space # Zl LINE SEPARATOR
+2029 ; White_Space # Zp PARAGRAPH SEPARATOR
+202F ; White_Space # Zs NARROW NO-BREAK SPACE
+205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE
+3000 ; White_Space # Zs IDEOGRAPHIC SPACE
+
+# Total code points: 26
+
+# ================================================
+
+200E..200F ; Bidi_Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+202A..202E ; Bidi_Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+
+# Total code points: 7
+
+# ================================================
+
+200C..200D ; Join_Control # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+
+# Total code points: 2
+
+# ================================================
+
+002D ; Dash # Pd HYPHEN-MINUS
+058A ; Dash # Pd ARMENIAN HYPHEN
+1806 ; Dash # Pd MONGOLIAN TODO SOFT HYPHEN
+2010..2015 ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR
+2053 ; Dash # Po SWUNG DASH
+207B ; Dash # Sm SUPERSCRIPT MINUS
+208B ; Dash # Sm SUBSCRIPT MINUS
+2212 ; Dash # Sm MINUS SIGN
+2E17 ; Dash # Pd DOUBLE OBLIQUE HYPHEN
+301C ; Dash # Pd WAVE DASH
+3030 ; Dash # Pd WAVY DASH
+30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE58 ; Dash # Pd SMALL EM DASH
+FE63 ; Dash # Pd SMALL HYPHEN-MINUS
+FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
+
+# Total code points: 22
+
+# ================================================
+
+002D ; Hyphen # Pd HYPHEN-MINUS
+00AD ; Hyphen # Cf SOFT HYPHEN
+058A ; Hyphen # Pd ARMENIAN HYPHEN
+1806 ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN
+2010..2011 ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN
+2E17 ; Hyphen # Pd DOUBLE OBLIQUE HYPHEN
+30FB ; Hyphen # Po KATAKANA MIDDLE DOT
+FE63 ; Hyphen # Pd SMALL HYPHEN-MINUS
+FF0D ; Hyphen # Pd FULLWIDTH HYPHEN-MINUS
+FF65 ; Hyphen # Po HALFWIDTH KATAKANA MIDDLE DOT
+
+# Total code points: 11
+
+# ================================================
+
+0022 ; Quotation_Mark # Po QUOTATION MARK
+0027 ; Quotation_Mark # Po APOSTROPHE
+00AB ; Quotation_Mark # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BB ; Quotation_Mark # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+2018 ; Quotation_Mark # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Quotation_Mark # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Quotation_Mark # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Quotation_Mark # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Quotation_Mark # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Quotation_Mark # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Quotation_Mark # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2039 ; Quotation_Mark # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Quotation_Mark # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+300C ; Quotation_Mark # Ps LEFT CORNER BRACKET
+300D ; Quotation_Mark # Pe RIGHT CORNER BRACKET
+300E ; Quotation_Mark # Ps LEFT WHITE CORNER BRACKET
+300F ; Quotation_Mark # Pe RIGHT WHITE CORNER BRACKET
+301D ; Quotation_Mark # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Quotation_Mark # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+FE41 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FF02 ; Quotation_Mark # Po FULLWIDTH QUOTATION MARK
+FF07 ; Quotation_Mark # Po FULLWIDTH APOSTROPHE
+FF62 ; Quotation_Mark # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET
+
+# Total code points: 29
+
+# ================================================
+
+0021 ; Terminal_Punctuation # Po EXCLAMATION MARK
+002C ; Terminal_Punctuation # Po COMMA
+002E ; Terminal_Punctuation # Po FULL STOP
+003A..003B ; Terminal_Punctuation # Po [2] COLON..SEMICOLON
+003F ; Terminal_Punctuation # Po QUESTION MARK
+037E ; Terminal_Punctuation # Po GREEK QUESTION MARK
+0387 ; Terminal_Punctuation # Po GREEK ANO TELEIA
+0589 ; Terminal_Punctuation # Po ARMENIAN FULL STOP
+05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ
+060C ; Terminal_Punctuation # Po ARABIC COMMA
+061B ; Terminal_Punctuation # Po ARABIC SEMICOLON
+061F ; Terminal_Punctuation # Po ARABIC QUESTION MARK
+06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP
+0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
+070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS
+0964..0965 ; Terminal_Punctuation # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0E5A..0E5B ; Terminal_Punctuation # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0F08 ; Terminal_Punctuation # Po TIBETAN MARK SBRUL SHAD
+0F0D..0F12 ; Terminal_Punctuation # Po [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD
+104A..104B ; Terminal_Punctuation # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1361..1368 ; Terminal_Punctuation # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+166D..166E ; Terminal_Punctuation # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+16EB..16ED ; Terminal_Punctuation # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+17D4..17D6 ; Terminal_Punctuation # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17DA ; Terminal_Punctuation # Po KHMER SIGN KOOMUUT
+1802..1805 ; Terminal_Punctuation # Po [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS
+1808..1809 ; Terminal_Punctuation # Po [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP
+1944..1945 ; Terminal_Punctuation # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049 ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
+FE50..FE52 ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FF01 ; Terminal_Punctuation # Po FULLWIDTH EXCLAMATION MARK
+FF0C ; Terminal_Punctuation # Po FULLWIDTH COMMA
+FF0E ; Terminal_Punctuation # Po FULLWIDTH FULL STOP
+FF1A..FF1B ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1F ; Terminal_Punctuation # Po FULLWIDTH QUESTION MARK
+FF61 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
+
+# Total code points: 86
+
+# ================================================
+
+005E ; Other_Math # Sk CIRCUMFLEX ACCENT
+03D0..03D2 ; Other_Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5 ; Other_Math # L& GREEK PHI SYMBOL
+03F0..03F1 ; Other_Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5 ; Other_Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+2016 ; Other_Math # Po DOUBLE VERTICAL LINE
+2032..2034 ; Other_Math # Po [3] PRIME..TRIPLE PRIME
+2040 ; Other_Math # Pc CHARACTER TIE
+2061..2063 ; Other_Math # Cf [3] FUNCTION APPLICATION..INVISIBLE SEPARATOR
+207D ; Other_Math # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Other_Math # Pe SUPERSCRIPT RIGHT PARENTHESIS
+208D ; Other_Math # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Other_Math # Pe SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC ; Other_Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; Other_Math # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6 ; Other_Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+2102 ; Other_Math # L& DOUBLE-STRUCK CAPITAL C
+210A..2113 ; Other_Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Other_Math # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Other_Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Other_Math # L& DOUBLE-STRUCK CAPITAL Z
+2128 ; Other_Math # L& BLACK-LETTER CAPITAL Z
+2129 ; Other_Math # So TURNED GREEK SMALL LETTER IOTA
+212C..212D ; Other_Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131 ; Other_Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; Other_Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; Other_Math # Lo [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F ; Other_Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; Other_Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+23B7 ; Other_Math # So RADICAL SYMBOL BOTTOM
+23D0 ; Other_Math # So VERTICAL LINE EXTENSION
+27C5 ; Other_Math # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Other_Math # Pe RIGHT S-SHAPED BAG DELIMITER
+27E6 ; Other_Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Other_Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Other_Math # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Other_Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Other_Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Other_Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+2983 ; Other_Math # Ps LEFT WHITE CURLY BRACKET
+2984 ; Other_Math # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Other_Math # Ps LEFT WHITE PARENTHESIS
+2986 ; Other_Math # Pe RIGHT WHITE PARENTHESIS
+2987 ; Other_Math # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Other_Math # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Other_Math # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Other_Math # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Other_Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Other_Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Other_Math # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Other_Math # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Other_Math # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Other_Math # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Other_Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Other_Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Other_Math # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Other_Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+29D8 ; Other_Math # Ps LEFT WIGGLY FENCE
+29D9 ; Other_Math # Pe RIGHT WIGGLY FENCE
+29DA ; Other_Math # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Other_Math # Pe RIGHT DOUBLE WIGGLY FENCE
+29FC ; Other_Math # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Other_Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+FE61 ; Other_Math # Po SMALL ASTERISK
+FE63 ; Other_Math # Pd SMALL HYPHEN-MINUS
+FE68 ; Other_Math # Po SMALL REVERSE SOLIDUS
+FF3C ; Other_Math # Po FULLWIDTH REVERSE SOLIDUS
+FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT
+1D400..1D454 ; Other_Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Other_Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Other_Math # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Other_Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Other_Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Other_Math # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Other_Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Other_Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Other_Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Other_Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Other_Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Other_Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Other_Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Other_Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Other_Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Other_Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A3 ; Other_Math # L& [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
+1D6A8..1D6C0 ; Other_Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; Other_Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; Other_Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; Other_Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; Other_Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; Other_Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; Other_Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; Other_Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7C9 ; Other_Math # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 1102
+
+# ================================================
+
+0030..0039 ; Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..0046 ; Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066 ; Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+FF10..FF19 ; Hex_Digit # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF26 ; Hex_Digit # L& [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F
+FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F
+
+# Total code points: 44
+
+# ================================================
+
+0030..0039 ; ASCII_Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..0046 ; ASCII_Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F
+0061..0066 ; ASCII_Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F
+
+# Total code points: 22
+
+# ================================================
+
+0345 ; Other_Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI
+05B0..05B9 ; Other_Alphabetic # Mn [10] HEBREW POINT SHEVA..HEBREW POINT HOLAM
+05BB..05BD ; Other_Alphabetic # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BF ; Other_Alphabetic # Mn HEBREW POINT RAFE
+05C1..05C2 ; Other_Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Other_Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Other_Alphabetic # Mn HEBREW POINT QAMATS QATAN
+0610..0615 ; Other_Alphabetic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+064B..0657 ; Other_Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065E ; Other_Alphabetic # Mn [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS
+0670 ; Other_Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; Other_Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4 ; Other_Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; Other_Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED ; Other_Alphabetic # Mn ARABIC SMALL LOW MEEM
+0711 ; Other_Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..073F ; Other_Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+07A6..07B0 ; Other_Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN
+0901..0902 ; Other_Alphabetic # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA
+093E..0940 ; Other_Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; Other_Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; Other_Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+0962..0963 ; Other_Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; Other_Alphabetic # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; Other_Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+09BE..09C0 ; Other_Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; Other_Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09D7 ; Other_Alphabetic # Mc BENGALI AU LENGTH MARK
+09E2..09E3 ; Other_Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+0A01..0A02 ; Other_Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; Other_Alphabetic # Mc GURMUKHI SIGN VISARGA
+0A3E..0A40 ; Other_Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A70..0A71 ; Other_Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A81..0A82 ; Other_Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; Other_Alphabetic # Mc GUJARATI SIGN VISARGA
+0ABE..0AC0 ; Other_Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; Other_Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; Other_Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Other_Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AE2..0AE3 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0B01 ; Other_Alphabetic # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; Other_Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B3E ; Other_Alphabetic # Mc ORIYA VOWEL SIGN AA
+0B3F ; Other_Alphabetic # Mn ORIYA VOWEL SIGN I
+0B40 ; Other_Alphabetic # Mc ORIYA VOWEL SIGN II
+0B41..0B43 ; Other_Alphabetic # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
+0B47..0B48 ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B56 ; Other_Alphabetic # Mn ORIYA AI LENGTH MARK
+0B57 ; Other_Alphabetic # Mc ORIYA AU LENGTH MARK
+0B82 ; Other_Alphabetic # Mn TAMIL SIGN ANUSVARA
+0BBE..0BBF ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; Other_Alphabetic # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD7 ; Other_Alphabetic # Mc TAMIL AU LENGTH MARK
+0C01..0C03 ; Other_Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C3E..0C40 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; Other_Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4C ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU
+0C55..0C56 ; Other_Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C82..0C83 ; Other_Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0CBE ; Other_Alphabetic # Mc KANNADA VOWEL SIGN AA
+0CBF ; Other_Alphabetic # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; Other_Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; Other_Alphabetic # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC ; Other_Alphabetic # Mn KANNADA VOWEL SIGN AU
+0CD5..0CD6 ; Other_Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D02..0D03 ; Other_Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3E..0D40 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D43 ; Other_Alphabetic # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
+0D46..0D48 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D57 ; Other_Alphabetic # Mc MALAYALAM AU LENGTH MARK
+0D82..0D83 ; Other_Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0DCF..0DD1 ; Other_Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; Other_Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Other_Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; Other_Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; Other_Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E31 ; Other_Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; Other_Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E4D ; Other_Alphabetic # Mn THAI CHARACTER NIKHAHIT
+0EB1 ; Other_Alphabetic # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EB9 ; Other_Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; Other_Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0ECD ; Other_Alphabetic # Mn LAO NIGGAHITA
+0F71..0F7E ; Other_Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; Other_Alphabetic # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F81 ; Other_Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II
+0F90..0F97 ; Other_Alphabetic # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Other_Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+102C ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN AA
+102D..1030 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN E
+1032 ; Other_Alphabetic # Mn MYANMAR VOWEL SIGN AI
+1036 ; Other_Alphabetic # Mn MYANMAR SIGN ANUSVARA
+1038 ; Other_Alphabetic # Mc MYANMAR SIGN VISARGA
+1056..1057 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+135F ; Other_Alphabetic # Mn ETHIOPIC COMBINING GEMINATION MARK
+1712..1713 ; Other_Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
+1732..1733 ; Other_Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1752..1753 ; Other_Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; Other_Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B6 ; Other_Alphabetic # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; Other_Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; Other_Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; Other_Alphabetic # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; Other_Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+18A9 ; Other_Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; Other_Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; Other_Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; Other_Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; Other_Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+19B0..19C0 ; Other_Alphabetic # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C8..19C9 ; Other_Alphabetic # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B ; Other_Alphabetic # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
+FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+
+# Total code points: 488
+
+# ================================================
+
+3006 ; Ideographic # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; Ideographic # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FBB ; Ideographic # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
+F900..FA2D ; Ideographic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 71181
+
+# ================================================
+
+005E ; Diacritic # Sk CIRCUMFLEX ACCENT
+0060 ; Diacritic # Sk GRAVE ACCENT
+00A8 ; Diacritic # Sk DIAERESIS
+00AF ; Diacritic # Sk MACRON
+00B4 ; Diacritic # Sk ACUTE ACCENT
+00B7 ; Diacritic # Po MIDDLE DOT
+00B8 ; Diacritic # Sk CEDILLA
+02B0..02C1 ; Diacritic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Diacritic # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Diacritic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Diacritic # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4 ; Diacritic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02ED ; Diacritic # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED
+02EE ; Diacritic # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Diacritic # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..034E ; Diacritic # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW
+0350..0357 ; Diacritic # Mn [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE
+035D..0362 ; Diacritic # Mn [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+0374..0375 ; Diacritic # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN
+037A ; Diacritic # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0483..0486 ; Diacritic # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
+0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05B9 ; Diacritic # Mn [23] HEBREW ACCENT MUNAH..HEBREW POINT HOLAM
+05BB..05BD ; Diacritic # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BF ; Diacritic # Mn HEBREW POINT RAFE
+05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT
+064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN
+0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA
+06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+06E5..06E6 ; Diacritic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EA..06EC ; Diacritic # Mn [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+0730..074A ; Diacritic # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; Diacritic # Mn [11] THAANA ABAFILI..THAANA SUKUN
+093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
+094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
+0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+09BC ; Diacritic # Mn BENGALI SIGN NUKTA
+09CD ; Diacritic # Mn BENGALI SIGN VIRAMA
+0A3C ; Diacritic # Mn GURMUKHI SIGN NUKTA
+0A4D ; Diacritic # Mn GURMUKHI SIGN VIRAMA
+0ABC ; Diacritic # Mn GUJARATI SIGN NUKTA
+0ACD ; Diacritic # Mn GUJARATI SIGN VIRAMA
+0B3C ; Diacritic # Mn ORIYA SIGN NUKTA
+0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA
+0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA
+0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA
+0CBC ; Diacritic # Mn KANNADA SIGN NUKTA
+0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA
+0D4D ; Diacritic # Mn MALAYALAM SIGN VIRAMA
+0DCA ; Diacritic # Mn SINHALA SIGN AL-LAKUNA
+0E47..0E4C ; Diacritic # Mn [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT
+0E4E ; Diacritic # Mn THAI CHARACTER YAMAKKAN
+0EC8..0ECC ; Diacritic # Mn [5] LAO TONE MAI EK..LAO CANCELLATION MARK
+0F18..0F19 ; Diacritic # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; Diacritic # Mn TIBETAN MARK TSA -PHRU
+0F3E..0F3F ; Diacritic # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F82..0F84 ; Diacritic # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
+0F86..0F87 ; Diacritic # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0FC6 ; Diacritic # Mn TIBETAN SYMBOL PADMA GDAN
+1037 ; Diacritic # Mn MYANMAR SIGN DOT BELOW
+1039 ; Diacritic # Mn MYANMAR SIGN VIRAMA
+17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; Diacritic # Mn KHMER SIGN ATTHACAN
+1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1D2C..1D61 ; Diacritic # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D62..1D6A ; Diacritic # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI
+1FBD ; Diacritic # Sk GREEK KORONIS
+1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF ; Diacritic # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF ; Diacritic # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE ; Diacritic # Sk [2] GREEK OXIA..GREEK DASIA
+302A..302F ; Diacritic # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; Diacritic # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C ; Diacritic # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30FC ; Diacritic # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE20..FE23 ; Diacritic # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
+FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT
+FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE3 ; Diacritic # Sk FULLWIDTH MACRON
+1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+
+# Total code points: 482
+
+# ================================================
+
+00B7 ; Extender # Po MIDDLE DOT
+02D0..02D1 ; Extender # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
+0640 ; Extender # Lm ARABIC TATWEEL
+0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK
+0EC6 ; Extender # Lm LAO KO LA
+1843 ; Extender # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+3005 ; Extender # Lm IDEOGRAPHIC ITERATION MARK
+3031..3035 ; Extender # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+309D..309E ; Extender # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30FC..30FE ; Extender # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015 ; Extender # Lm YI SYLLABLE WU
+FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+
+# Total code points: 20
+
+# ================================================
+
+02B0..02B8 ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1 ; Other_Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4 ; Other_Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI
+037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI
+1D2C..1D61 ; Other_Lowercase # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D78 ; Other_Lowercase # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; Other_Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+2090..2094 ; Other_Lowercase # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+
+# Total code points: 157
+
+# ================================================
+
+2160..216F ; Other_Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+24B6..24CF ; Other_Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+
+# Total code points: 42
+
+# ================================================
+
+FDD0..FDEF ; Noncharacter_Code_Point # Cn [32] <noncharacter-FDD0>..<noncharacter-FDEF>
+FFFE..FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFE>..<noncharacter-FFFF>
+1FFFE..1FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-1FFFE>..<noncharacter-1FFFF>
+2FFFE..2FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-2FFFE>..<noncharacter-2FFFF>
+3FFFE..3FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-3FFFE>..<noncharacter-3FFFF>
+4FFFE..4FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-4FFFE>..<noncharacter-4FFFF>
+5FFFE..5FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-5FFFE>..<noncharacter-5FFFF>
+6FFFE..6FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-6FFFE>..<noncharacter-6FFFF>
+7FFFE..7FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-7FFFE>..<noncharacter-7FFFF>
+8FFFE..8FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-8FFFE>..<noncharacter-8FFFF>
+9FFFE..9FFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-9FFFE>..<noncharacter-9FFFF>
+AFFFE..AFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-AFFFE>..<noncharacter-AFFFF>
+BFFFE..BFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-BFFFE>..<noncharacter-BFFFF>
+CFFFE..CFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-CFFFE>..<noncharacter-CFFFF>
+DFFFE..DFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-DFFFE>..<noncharacter-DFFFF>
+EFFFE..EFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-EFFFE>..<noncharacter-EFFFF>
+FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+10FFFE..10FFFF; Noncharacter_Code_Point # Cn [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+
+# Total code points: 66
+
+# ================================================
+
+09BE ; Other_Grapheme_Extend # Mc BENGALI VOWEL SIGN AA
+09D7 ; Other_Grapheme_Extend # Mc BENGALI AU LENGTH MARK
+0B3E ; Other_Grapheme_Extend # Mc ORIYA VOWEL SIGN AA
+0B57 ; Other_Grapheme_Extend # Mc ORIYA AU LENGTH MARK
+0BBE ; Other_Grapheme_Extend # Mc TAMIL VOWEL SIGN AA
+0BD7 ; Other_Grapheme_Extend # Mc TAMIL AU LENGTH MARK
+0CC2 ; Other_Grapheme_Extend # Mc KANNADA VOWEL SIGN UU
+0CD5..0CD6 ; Other_Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D3E ; Other_Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA
+0D57 ; Other_Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK
+0DCF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DDF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA
+200C..200D ; Other_Grapheme_Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
+1D16E..1D172 ; Other_Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+
+# Total code points: 21
+
+# ================================================
+
+034F ; Grapheme_Link # Mn COMBINING GRAPHEME JOINER
+094D ; Grapheme_Link # Mn DEVANAGARI SIGN VIRAMA
+09CD ; Grapheme_Link # Mn BENGALI SIGN VIRAMA
+0A4D ; Grapheme_Link # Mn GURMUKHI SIGN VIRAMA
+0ACD ; Grapheme_Link # Mn GUJARATI SIGN VIRAMA
+0B4D ; Grapheme_Link # Mn ORIYA SIGN VIRAMA
+0BCD ; Grapheme_Link # Mn TAMIL SIGN VIRAMA
+0C4D ; Grapheme_Link # Mn TELUGU SIGN VIRAMA
+0CCD ; Grapheme_Link # Mn KANNADA SIGN VIRAMA
+0D4D ; Grapheme_Link # Mn MALAYALAM SIGN VIRAMA
+0DCA ; Grapheme_Link # Mn SINHALA SIGN AL-LAKUNA
+0E3A ; Grapheme_Link # Mn THAI CHARACTER PHINTHU
+1039 ; Grapheme_Link # Mn MYANMAR SIGN VIRAMA
+17D2 ; Grapheme_Link # Mn KHMER SIGN COENG
+A806 ; Grapheme_Link # Mn SYLOTI NAGRI SIGN HASANTA
+10A3F ; Grapheme_Link # Mn KHAROSHTHI VIRAMA
+
+# Total code points: 16
+
+# ================================================
+
+2FF0..2FF1 ; IDS_Binary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+2FF4..2FFB ; IDS_Binary_Operator # So [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+
+# Total code points: 10
+
+# ================================================
+
+2FF2..2FF3 ; IDS_Trinary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+
+# Total code points: 2
+
+# ================================================
+
+2E80..2E99 ; Radical # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; Radical # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+
+# Total code points: 329
+
+# ================================================
+
+3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FBB ; Unified_Ideograph # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
+FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+
+# Total code points: 70229
+
+# ================================================
+
+034F ; Other_Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER
+115F..1160 ; Other_Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+2064..2069 ; Other_Default_Ignorable_Code_Point # Cn [6] <reserved-2064>..<reserved-2069>
+3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER
+FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER
+FFF0..FFF8 ; Other_Default_Ignorable_Code_Point # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+E0000 ; Other_Default_Ignorable_Code_Point # Cn <reserved-E0000>
+E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 3779
+
+# ================================================
+
+0340..0341 ; Deprecated # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+17A3 ; Deprecated # Lo KHMER INDEPENDENT VOWEL QAQ
+17D3 ; Deprecated # Mn KHMER SIGN BATHAMASAT
+206A..206F ; Deprecated # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+
+# Total code points: 10
+
+# ================================================
+
+0069..006A ; Soft_Dotted # L& [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J
+012F ; Soft_Dotted # L& LATIN SMALL LETTER I WITH OGONEK
+0268 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE
+029D ; Soft_Dotted # L& LATIN SMALL LETTER J WITH CROSSED-TAIL
+02B2 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J
+03F3 ; Soft_Dotted # L& GREEK LETTER YOT
+0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE
+1D62 ; Soft_Dotted # L& LATIN SUBSCRIPT SMALL LETTER I
+1D96 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH RETROFLEX HOOK
+1DA4 ; Soft_Dotted # Lm MODIFIER LETTER SMALL I WITH STROKE
+1DA8 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1E2D ; Soft_Dotted # L& LATIN SMALL LETTER I WITH TILDE BELOW
+1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW
+2071 ; Soft_Dotted # L& SUPERSCRIPT LATIN SMALL LETTER I
+2148..2149 ; Soft_Dotted # L& [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J
+1D422..1D423 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J
+1D456..1D457 ; Soft_Dotted # L& [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J
+1D48A..1D48B ; Soft_Dotted # L& [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J
+1D4BE..1D4BF ; Soft_Dotted # L& [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J
+1D4F2..1D4F3 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J
+1D526..1D527 ; Soft_Dotted # L& [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J
+1D55A..1D55B ; Soft_Dotted # L& [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D58E..1D58F ; Soft_Dotted # L& [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J
+1D5C2..1D5C3 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J
+1D5F6..1D5F7 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J
+
+# Total code points: 44
+
+# ================================================
+
+0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI
+0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+
+# Total code points: 10
+
+# ================================================
+
+2118 ; Other_ID_Start # So SCRIPT CAPITAL P
+212E ; Other_ID_Start # So ESTIMATED SYMBOL
+309B..309C ; Other_ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+
+# Total code points: 4
+
+# ================================================
+
+1369..1371 ; Other_ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+
+# Total code points: 9
+
+# ================================================
+
+0021 ; STerm # Po EXCLAMATION MARK
+002E ; STerm # Po FULL STOP
+003F ; STerm # Po QUESTION MARK
+055C ; STerm # Po ARMENIAN EXCLAMATION MARK
+055E ; STerm # Po ARMENIAN QUESTION MARK
+0589 ; STerm # Po ARMENIAN FULL STOP
+061F ; STerm # Po ARABIC QUESTION MARK
+06D4 ; STerm # Po ARABIC FULL STOP
+0700..0702 ; STerm # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
+0964..0965 ; STerm # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+104A..104B ; STerm # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION
+1362 ; STerm # Po ETHIOPIC FULL STOP
+1367..1368 ; STerm # Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+166E ; STerm # Po CANADIAN SYLLABICS FULL STOP
+1803 ; STerm # Po MONGOLIAN FULL STOP
+1809 ; STerm # Po MONGOLIAN MANCHU FULL STOP
+1944..1945 ; STerm # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+203C..203D ; STerm # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+2047..2049 ; STerm # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+3002 ; STerm # Po IDEOGRAPHIC FULL STOP
+FE52 ; STerm # Po SMALL FULL STOP
+FE56..FE57 ; STerm # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
+FF01 ; STerm # Po FULLWIDTH EXCLAMATION MARK
+FF0E ; STerm # Po FULLWIDTH FULL STOP
+FF1F ; STerm # Po FULLWIDTH QUESTION MARK
+FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+
+# Total code points: 36
+
+# ================================================
+
+180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 259
+
+# ================================================
+
+0009..000D ; Pattern_White_Space # Cc [5] <control-0009>..<control-000D>
+0020 ; Pattern_White_Space # Zs SPACE
+0085 ; Pattern_White_Space # Cc <control-0085>
+200E..200F ; Pattern_White_Space # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2028 ; Pattern_White_Space # Zl LINE SEPARATOR
+2029 ; Pattern_White_Space # Zp PARAGRAPH SEPARATOR
+
+# Total code points: 11
+
+# ================================================
+
+0021..0023 ; Pattern_Syntax # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Pattern_Syntax # Sc DOLLAR SIGN
+0025..0027 ; Pattern_Syntax # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Pattern_Syntax # Ps LEFT PARENTHESIS
+0029 ; Pattern_Syntax # Pe RIGHT PARENTHESIS
+002A ; Pattern_Syntax # Po ASTERISK
+002B ; Pattern_Syntax # Sm PLUS SIGN
+002C ; Pattern_Syntax # Po COMMA
+002D ; Pattern_Syntax # Pd HYPHEN-MINUS
+002E..002F ; Pattern_Syntax # Po [2] FULL STOP..SOLIDUS
+003A..003B ; Pattern_Syntax # Po [2] COLON..SEMICOLON
+003C..003E ; Pattern_Syntax # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Pattern_Syntax # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET
+005C ; Pattern_Syntax # Po REVERSE SOLIDUS
+005D ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET
+005E ; Pattern_Syntax # Sk CIRCUMFLEX ACCENT
+0060 ; Pattern_Syntax # Sk GRAVE ACCENT
+007B ; Pattern_Syntax # Ps LEFT CURLY BRACKET
+007C ; Pattern_Syntax # Sm VERTICAL LINE
+007D ; Pattern_Syntax # Pe RIGHT CURLY BRACKET
+007E ; Pattern_Syntax # Sm TILDE
+00A1 ; Pattern_Syntax # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Pattern_Syntax # Sc [4] CENT SIGN..YEN SIGN
+00A6..00A7 ; Pattern_Syntax # So [2] BROKEN BAR..SECTION SIGN
+00A9 ; Pattern_Syntax # So COPYRIGHT SIGN
+00AB ; Pattern_Syntax # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Pattern_Syntax # Sm NOT SIGN
+00AE ; Pattern_Syntax # So REGISTERED SIGN
+00B0 ; Pattern_Syntax # So DEGREE SIGN
+00B1 ; Pattern_Syntax # Sm PLUS-MINUS SIGN
+00B6 ; Pattern_Syntax # So PILCROW SIGN
+00BB ; Pattern_Syntax # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF ; Pattern_Syntax # Po INVERTED QUESTION MARK
+00D7 ; Pattern_Syntax # Sm MULTIPLICATION SIGN
+00F7 ; Pattern_Syntax # Sm DIVISION SIGN
+2010..2015 ; Pattern_Syntax # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Pattern_Syntax # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Pattern_Syntax # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Pattern_Syntax # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Pattern_Syntax # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Pattern_Syntax # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Pattern_Syntax # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Pattern_Syntax # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Pattern_Syntax # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Pattern_Syntax # Po [8] DAGGER..HYPHENATION POINT
+2030..2038 ; Pattern_Syntax # Po [9] PER MILLE SIGN..CARET
+2039 ; Pattern_Syntax # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Pattern_Syntax # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Pattern_Syntax # Po [4] REFERENCE MARK..OVERLINE
+2041..2043 ; Pattern_Syntax # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Pattern_Syntax # Sm FRACTION SLASH
+2045 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Pattern_Syntax # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Pattern_Syntax # Sm COMMERCIAL MINUS SIGN
+2053 ; Pattern_Syntax # Po SWUNG DASH
+2055..205E ; Pattern_Syntax # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+2190..2194 ; Pattern_Syntax # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Pattern_Syntax # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Pattern_Syntax # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Pattern_Syntax # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Pattern_Syntax # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Pattern_Syntax # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Pattern_Syntax # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Pattern_Syntax # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Pattern_Syntax # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Pattern_Syntax # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Pattern_Syntax # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Pattern_Syntax # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Pattern_Syntax # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Pattern_Syntax # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Pattern_Syntax # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Pattern_Syntax # So DOWNWARDS DOUBLE ARROW
+21D4 ; Pattern_Syntax # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Pattern_Syntax # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Pattern_Syntax # So [8] DIAMETER SIGN..WAVY LINE
+2308..230B ; Pattern_Syntax # Sm [4] LEFT CEILING..RIGHT FLOOR
+230C..231F ; Pattern_Syntax # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Pattern_Syntax # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Pattern_Syntax # So [7] FROWN..KEYBOARD
+2329 ; Pattern_Syntax # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Pattern_Syntax # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Pattern_Syntax # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Pattern_Syntax # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Pattern_Syntax # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Pattern_Syntax # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4 ; Pattern_Syntax # Ps TOP SQUARE BRACKET
+23B5 ; Pattern_Syntax # Pe BOTTOM SQUARE BRACKET
+23B6 ; Pattern_Syntax # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7..23DB ; Pattern_Syntax # So [37] RADICAL SYMBOL BOTTOM..FUSE
+23DC..23FF ; Pattern_Syntax # Cn [36] <reserved-23DC>..<reserved-23FF>
+2400..2426 ; Pattern_Syntax # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2427..243F ; Pattern_Syntax # Cn [25] <reserved-2427>..<reserved-243F>
+2440..244A ; Pattern_Syntax # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+244B..245F ; Pattern_Syntax # Cn [21] <reserved-244B>..<reserved-245F>
+2500..25B6 ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Pattern_Syntax # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Pattern_Syntax # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Pattern_Syntax # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Pattern_Syntax # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Pattern_Syntax # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Pattern_Syntax # Sm MUSIC SHARP SIGN
+2670..269C ; Pattern_Syntax # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS
+269D..269F ; Pattern_Syntax # Cn [3] <reserved-269D>..<reserved-269F>
+26A0..26B1 ; Pattern_Syntax # So [18] WARNING SIGN..FUNERAL URN
+26B2..2700 ; Pattern_Syntax # Cn [79] <reserved-26B2>..<reserved-2700>
+2701..2704 ; Pattern_Syntax # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2705 ; Pattern_Syntax # Cn <reserved-2705>
+2706..2709 ; Pattern_Syntax # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270A..270B ; Pattern_Syntax # Cn [2] <reserved-270A>..<reserved-270B>
+270C..2727 ; Pattern_Syntax # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2728 ; Pattern_Syntax # Cn <reserved-2728>
+2729..274B ; Pattern_Syntax # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C ; Pattern_Syntax # Cn <reserved-274C>
+274D ; Pattern_Syntax # So SHADOWED WHITE CIRCLE
+274E ; Pattern_Syntax # Cn <reserved-274E>
+274F..2752 ; Pattern_Syntax # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2753..2755 ; Pattern_Syntax # Cn [3] <reserved-2753>..<reserved-2755>
+2756 ; Pattern_Syntax # So BLACK DIAMOND MINUS WHITE X
+2757 ; Pattern_Syntax # Cn <reserved-2757>
+2758..275E ; Pattern_Syntax # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+275F..2760 ; Pattern_Syntax # Cn [2] <reserved-275F>..<reserved-2760>
+2761..2767 ; Pattern_Syntax # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768 ; Pattern_Syntax # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Pattern_Syntax # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Pattern_Syntax # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Pattern_Syntax # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Pattern_Syntax # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Pattern_Syntax # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Pattern_Syntax # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Pattern_Syntax # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Pattern_Syntax # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Pattern_Syntax # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2794 ; Pattern_Syntax # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795..2797 ; Pattern_Syntax # Cn [3] <reserved-2795>..<reserved-2797>
+2798..27AF ; Pattern_Syntax # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0 ; Pattern_Syntax # Cn <reserved-27B0>
+27B1..27BE ; Pattern_Syntax # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27BF ; Pattern_Syntax # Cn <reserved-27BF>
+27C0..27C4 ; Pattern_Syntax # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Pattern_Syntax # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Pattern_Syntax # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27CF ; Pattern_Syntax # Cn [9] <reserved-27C7>..<reserved-27CF>
+27D0..27E5 ; Pattern_Syntax # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Pattern_Syntax # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Pattern_Syntax # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Pattern_Syntax # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC..27EF ; Pattern_Syntax # Cn [4] <reserved-27EC>..<reserved-27EF>
+27F0..27FF ; Pattern_Syntax # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982 ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Pattern_Syntax # Ps LEFT WHITE CURLY BRACKET
+2984 ; Pattern_Syntax # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Pattern_Syntax # Ps LEFT WHITE PARENTHESIS
+2986 ; Pattern_Syntax # Pe RIGHT WHITE PARENTHESIS
+2987 ; Pattern_Syntax # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Pattern_Syntax # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Pattern_Syntax # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Pattern_Syntax # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Pattern_Syntax # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Pattern_Syntax # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Pattern_Syntax # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Pattern_Syntax # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Pattern_Syntax # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Pattern_Syntax # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Pattern_Syntax # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Pattern_Syntax # Ps LEFT WIGGLY FENCE
+29D9 ; Pattern_Syntax # Pe RIGHT WIGGLY FENCE
+29DA ; Pattern_Syntax # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Pattern_Syntax # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Pattern_Syntax # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Pattern_Syntax # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Pattern_Syntax # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B13 ; Pattern_Syntax # So [20] NORTH EAST WHITE ARROW..SQUARE WITH BOTTOM HALF BLACK
+2B14..2BFF ; Pattern_Syntax # Cn [236] <reserved-2B14>..<reserved-2BFF>
+2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
+2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
+2E04 ; Pattern_Syntax # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Pattern_Syntax # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Pattern_Syntax # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Pattern_Syntax # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Pattern_Syntax # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Pattern_Syntax # Po RAISED SQUARE
+2E0C ; Pattern_Syntax # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Pattern_Syntax # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Pattern_Syntax # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Pattern_Syntax # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E1B ; Pattern_Syntax # Cn [4] <reserved-2E18>..<reserved-2E1B>
+2E1C ; Pattern_Syntax # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Pattern_Syntax # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E7F ; Pattern_Syntax # Cn [98] <reserved-2E1E>..<reserved-2E7F>
+3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
+3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
+300A ; Pattern_Syntax # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Pattern_Syntax # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Pattern_Syntax # Ps LEFT CORNER BRACKET
+300D ; Pattern_Syntax # Pe RIGHT CORNER BRACKET
+300E ; Pattern_Syntax # Ps LEFT WHITE CORNER BRACKET
+300F ; Pattern_Syntax # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Pattern_Syntax # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Pattern_Syntax # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Pattern_Syntax # So [2] POSTAL MARK..GETA MARK
+3014 ; Pattern_Syntax # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Pattern_Syntax # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Pattern_Syntax # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Pattern_Syntax # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Pattern_Syntax # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Pattern_Syntax # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Pattern_Syntax # Ps LEFT WHITE SQUARE BRACKET
+301B ; Pattern_Syntax # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Pattern_Syntax # Pd WAVE DASH
+301D ; Pattern_Syntax # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Pattern_Syntax # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Pattern_Syntax # So POSTAL MARK FACE
+3030 ; Pattern_Syntax # Pd WAVY DASH
+FD3E ; Pattern_Syntax # Ps ORNATE LEFT PARENTHESIS
+FD3F ; Pattern_Syntax # Pe ORNATE RIGHT PARENTHESIS
+FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT
+
+# Total code points: 2760
diff --git a/Master/tlpkg/tlperl/lib/unicore/PropValueAliases.txt b/Master/tlpkg/tlperl/lib/unicore/PropValueAliases.txt
new file mode 100644
index 00000000000..3f7aad206e5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/PropValueAliases.txt
@@ -0,0 +1,578 @@
+# PropertyValueAliases-4.1.0.txt
+# Date: 2005-03-28, 17:21:48 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# This file contains aliases for property values used in the UCD.
+# These names can be used for XML formats of UCD data, for regular-expression
+# property tests, and other programmatic textual descriptions of Unicode data.
+# For information on which properties are normative, see UCD.html.
+#
+# The names may be translated in appropriate environments, and additional
+# aliases may be useful.
+#
+# FORMAT
+#
+# Each line describes a property value name.
+# This consists of three or more fields, separated by semicolons.
+#
+# First Field: The first field describes the property for which that
+# property value name is used.
+#
+# Second Field: The second field is an abbreviated name.
+# If there is no abbreviated name available, the field is marked with "n/a".
+#
+# Third Field: The third field is a long name.
+#
+# In the case of ccc, there are 4 fields. The second field is numeric, third
+# is abbreviated, and fourth is long.
+#
+# The above are the preferred aliases. Other aliases may be listed in additional fields.
+#
+# Loose matching should be applied to all property names and property values, with
+# the exception of String Property values. With loose matching of property names and
+# values, the case distinctions, whitespace, and '_' are ignored. For Numeric Property
+# values, numeric equivalencies are applied: thus "01.00" is equivalent to "1".
+#
+# NOTE: Property value names are NOT unique across properties. For example:
+#
+# AL means Arabic Letter for the Bidi_Class property, and
+# AL means Alpha_Left for the Combining_Class property, and
+# AL means Alphabetic for the Line_Break property.
+#
+# In addition, some property names may be the same as some property value names.
+# For example:
+#
+# sc means the Script property, and
+# Sc means the General_Category property value Currency_Symbol (Sc)
+#
+# The combination of property value and property name is, however, unique.
+#
+# For more information, see UTS #18: Regular Expression Guidelines
+# ================================================
+
+
+# Age (age)
+
+age; n/a ; 1.1
+age; n/a ; 2.0
+age; n/a ; 2.1
+age; n/a ; 3.0
+age; n/a ; 3.1
+age; n/a ; 3.2
+age; n/a ; 4.0
+age; n/a ; 4.1
+age; n/a ; unassigned
+
+# Bidi_Class (bc)
+
+bc ; AL ; Arabic_Letter
+bc ; AN ; Arabic_Number
+bc ; B ; Paragraph_Separator
+bc ; BN ; Boundary_Neutral
+bc ; CS ; Common_Separator
+bc ; EN ; European_Number
+bc ; ES ; European_Separator
+bc ; ET ; European_Terminator
+bc ; L ; Left_To_Right
+bc ; LRE ; Left_To_Right_Embedding
+bc ; LRO ; Left_To_Right_Override
+bc ; NSM ; Nonspacing_Mark
+bc ; ON ; Other_Neutral
+bc ; PDF ; Pop_Directional_Format
+bc ; R ; Right_To_Left
+bc ; RLE ; Right_To_Left_Embedding
+bc ; RLO ; Right_To_Left_Override
+bc ; S ; Segment_Separator
+bc ; WS ; White_Space
+
+# Block (blk)
+
+blk; n/a ; Aegean_Numbers
+blk; n/a ; Alphabetic_Presentation_Forms
+blk; n/a ; Ancient_Greek_Musical_Notation
+blk; n/a ; Ancient_Greek_Numbers
+blk; n/a ; Arabic
+blk; n/a ; Arabic_Presentation_Forms-A
+blk; n/a ; Arabic_Presentation_Forms-B
+blk; n/a ; Arabic_Supplement
+blk; n/a ; Armenian
+blk; n/a ; Arrows
+blk; n/a ; Basic_Latin
+blk; n/a ; Bengali
+blk; n/a ; Block_Elements
+blk; n/a ; Bopomofo
+blk; n/a ; Bopomofo_Extended
+blk; n/a ; Box_Drawing
+blk; n/a ; Braille_Patterns
+blk; n/a ; Buginese
+blk; n/a ; Buhid
+blk; n/a ; Byzantine_Musical_Symbols
+blk; n/a ; Cherokee
+blk; n/a ; CJK_Compatibility
+blk; n/a ; CJK_Compatibility_Forms
+blk; n/a ; CJK_Compatibility_Ideographs
+blk; n/a ; CJK_Compatibility_Ideographs_Supplement
+blk; n/a ; CJK_Radicals_Supplement
+blk; n/a ; CJK_Strokes
+blk; n/a ; CJK_Symbols_and_Punctuation
+blk; n/a ; CJK_Unified_Ideographs
+blk; n/a ; CJK_Unified_Ideographs_Extension_A
+blk; n/a ; CJK_Unified_Ideographs_Extension_B
+blk; n/a ; Combining_Diacritical_Marks
+blk; n/a ; Combining_Diacritical_Marks_for_Symbols
+blk; n/a ; Combining_Diacritical_Marks_Supplement
+blk; n/a ; Combining_Half_Marks
+blk; n/a ; Control_Pictures
+blk; n/a ; Coptic
+blk; n/a ; Currency_Symbols
+blk; n/a ; Cypriot_Syllabary
+blk; n/a ; Cyrillic
+blk; n/a ; Cyrillic_Supplement ; Cyrillic_Supplementary
+blk; n/a ; Deseret
+blk; n/a ; Devanagari
+blk; n/a ; Dingbats
+blk; n/a ; Enclosed_Alphanumerics
+blk; n/a ; Enclosed_CJK_Letters_and_Months
+blk; n/a ; Ethiopic
+blk; n/a ; Ethiopic_Extended
+blk; n/a ; Ethiopic_Supplement
+blk; n/a ; General_Punctuation
+blk; n/a ; Geometric_Shapes
+blk; n/a ; Georgian
+blk; n/a ; Georgian_Supplement
+blk; n/a ; Glagolitic
+blk; n/a ; Gothic
+blk; n/a ; Greek_and_Coptic
+blk; n/a ; Greek_Extended
+blk; n/a ; Gujarati
+blk; n/a ; Gurmukhi
+blk; n/a ; Halfwidth_and_Fullwidth_Forms
+blk; n/a ; Hangul_Compatibility_Jamo
+blk; n/a ; Hangul_Jamo
+blk; n/a ; Hangul_Syllables
+blk; n/a ; Hanunoo
+blk; n/a ; Hebrew
+blk; n/a ; High_Private_Use_Surrogates
+blk; n/a ; High_Surrogates
+blk; n/a ; Hiragana
+blk; n/a ; Ideographic_Description_Characters
+blk; n/a ; IPA_Extensions
+blk; n/a ; Kanbun
+blk; n/a ; Kangxi_Radicals
+blk; n/a ; Kannada
+blk; n/a ; Katakana
+blk; n/a ; Katakana_Phonetic_Extensions
+blk; n/a ; Kharoshthi
+blk; n/a ; Khmer
+blk; n/a ; Khmer_Symbols
+blk; n/a ; Lao
+blk; n/a ; Latin-1_Supplement
+blk; n/a ; Latin_Extended-A
+blk; n/a ; Latin_Extended-B
+blk; n/a ; Latin_Extended_Additional
+blk; n/a ; Letterlike_Symbols
+blk; n/a ; Limbu
+blk; n/a ; Linear_B_Ideograms
+blk; n/a ; Linear_B_Syllabary
+blk; n/a ; Low_Surrogates
+blk; n/a ; Malayalam
+blk; n/a ; Mathematical_Alphanumeric_Symbols
+blk; n/a ; Mathematical_Operators
+blk; n/a ; Miscellaneous_Mathematical_Symbols-A
+blk; n/a ; Miscellaneous_Mathematical_Symbols-B
+blk; n/a ; Miscellaneous_Symbols
+blk; n/a ; Miscellaneous_Symbols_and_Arrows
+blk; n/a ; Miscellaneous_Technical
+blk; n/a ; Modifier_Tone_Letters
+blk; n/a ; Mongolian
+blk; n/a ; Musical_Symbols
+blk; n/a ; Myanmar
+blk; n/a ; New_Tai_Lue
+blk; n/a ; No_Block
+blk; n/a ; Number_Forms
+blk; n/a ; Ogham
+blk; n/a ; Old_Italic
+blk; n/a ; Old_Persian
+blk; n/a ; Optical_Character_Recognition
+blk; n/a ; Oriya
+blk; n/a ; Osmanya
+blk; n/a ; Phonetic_Extensions
+blk; n/a ; Phonetic_Extensions_Supplement
+blk; n/a ; Private_Use_Area
+blk; n/a ; Runic
+blk; n/a ; Shavian
+blk; n/a ; Sinhala
+blk; n/a ; Small_Form_Variants
+blk; n/a ; Spacing_Modifier_Letters
+blk; n/a ; Specials
+blk; n/a ; Superscripts_and_Subscripts
+blk; n/a ; Supplemental_Arrows-A
+blk; n/a ; Supplemental_Arrows-B
+blk; n/a ; Supplemental_Mathematical_Operators
+blk; n/a ; Supplemental_Punctuation
+blk; n/a ; Supplementary_Private_Use_Area-A
+blk; n/a ; Supplementary_Private_Use_Area-B
+blk; n/a ; Syloti_Nagri
+blk; n/a ; Syriac
+blk; n/a ; Tagalog
+blk; n/a ; Tagbanwa
+blk; n/a ; Tags
+blk; n/a ; Tai_Le
+blk; n/a ; Tai_Xuan_Jing_Symbols
+blk; n/a ; Tamil
+blk; n/a ; Telugu
+blk; n/a ; Thaana
+blk; n/a ; Thai
+blk; n/a ; Tibetan
+blk; n/a ; Tifinagh
+blk; n/a ; Ugaritic
+blk; n/a ; Unified_Canadian_Aboriginal_Syllabics
+blk; n/a ; Variation_Selectors
+blk; n/a ; Variation_Selectors_Supplement
+blk; n/a ; Vertical_Forms
+blk; n/a ; Yi_Radicals
+blk; n/a ; Yi_Syllables
+blk; n/a ; Yijing_Hexagram_Symbols
+
+# Canonical_Combining_Class (ccc)
+
+ccc; 0; NR ; Not_Reordered
+ccc; 1; OV ; Overlay
+ccc; 7; NK ; Nukta
+ccc; 8; KV ; Kana_Voicing
+ccc; 9; VR ; Virama
+ccc; 200; ATBL ; Attached_Below_Left
+ccc; 202; ATB ; Attached_Below
+ccc; 216; ATAR ; Attached_Above_Right
+ccc; 218; BL ; Below_Left
+ccc; 220; B ; Below
+ccc; 222; BR ; Below_Right
+ccc; 224; L ; Left
+ccc; 226; R ; Right
+ccc; 228; AL ; Above_Left
+ccc; 230; A ; Above
+ccc; 232; AR ; Above_Right
+ccc; 233; DB ; Double_Below
+ccc; 234; DA ; Double_Above
+ccc; 240; IS ; Iota_Subscript
+
+# Decomposition_Type (dt)
+
+dt ; can ; Canonical
+dt ; com ; Compat
+dt ; enc ; Circle
+dt ; fin ; Final
+dt ; font ; Font
+dt ; fra ; Fraction
+dt ; init ; Initial
+dt ; iso ; Isolated
+dt ; med ; Medial
+dt ; nar ; Narrow
+dt ; nb ; Nobreak
+dt ; none ; None
+dt ; sml ; Small
+dt ; sqr ; Square
+dt ; sub ; Sub
+dt ; sup ; Super
+dt ; vert ; Vertical
+dt ; wide ; Wide
+
+# East_Asian_Width (ea)
+
+ea ; A ; Ambiguous
+ea ; F ; Fullwidth
+ea ; H ; Halfwidth
+ea ; N ; Neutral
+ea ; Na ; Narrow
+ea ; W ; Wide
+
+# General_Category (gc)
+
+gc ; C ; Other # Cc | Cf | Cn | Co | Cs
+gc ; Cc ; Control ; cntrl
+gc ; Cf ; Format
+gc ; Cn ; Unassigned
+gc ; Co ; Private_Use
+gc ; Cs ; Surrogate
+gc ; L ; Letter # Ll | Lm | Lo | Lt | Lu
+gc ; LC ; Cased_Letter # Ll | Lt | Lu
+gc ; Ll ; Lowercase_Letter
+gc ; Lm ; Modifier_Letter
+gc ; Lo ; Other_Letter
+gc ; Lt ; Titlecase_Letter
+gc ; Lu ; Uppercase_Letter
+gc ; M ; Mark # Mc | Me | Mn
+gc ; Mc ; Spacing_Mark
+gc ; Me ; Enclosing_Mark
+gc ; Mn ; Nonspacing_Mark
+gc ; N ; Number # Nd | Nl | No
+gc ; Nd ; Decimal_Number ; digit
+gc ; Nl ; Letter_Number
+gc ; No ; Other_Number
+gc ; P ; Punctuation ; punct # Pc | Pd | Pe | Pf | Pi | Po | Ps
+gc ; Pc ; Connector_Punctuation
+gc ; Pd ; Dash_Punctuation
+gc ; Pe ; Close_Punctuation
+gc ; Pf ; Final_Punctuation
+gc ; Pi ; Initial_Punctuation
+gc ; Po ; Other_Punctuation
+gc ; Ps ; Open_Punctuation
+gc ; S ; Symbol # Sc | Sk | Sm | So
+gc ; Sc ; Currency_Symbol
+gc ; Sk ; Modifier_Symbol
+gc ; Sm ; Math_Symbol
+gc ; So ; Other_Symbol
+gc ; Z ; Separator # Zl | Zp | Zs
+gc ; Zl ; Line_Separator
+gc ; Zp ; Paragraph_Separator
+gc ; Zs ; Space_Separator
+
+# Grapheme_Cluster_Break (GCB)
+
+GCB; CN ; Control
+GCB; CR ; CR
+GCB; EX ; Extend
+GCB; L ; L
+GCB; LF ; LF
+GCB; LV ; LV
+GCB; LVT ; LVT
+GCB; T ; T
+GCB; V ; V
+GCB; XX ; Other
+
+# Hangul_Syllable_Type (hst)
+
+hst; L ; Leading_Jamo
+hst; LV ; LV_Syllable
+hst; LVT ; LVT_Syllable
+hst; NA ; Not_Applicable
+hst; T ; Trailing_Jamo
+hst; V ; Vowel_Jamo
+
+# Joining_Group (jg)
+
+jg ; n/a ; Ain
+jg ; n/a ; Alaph
+jg ; n/a ; Alef
+jg ; n/a ; Beh
+jg ; n/a ; Beth
+jg ; n/a ; Dal
+jg ; n/a ; Dalath_Rish
+jg ; n/a ; E
+jg ; n/a ; Fe
+jg ; n/a ; Feh
+jg ; n/a ; Final_Semkath
+jg ; n/a ; Gaf
+jg ; n/a ; Gamal
+jg ; n/a ; Hah
+jg ; n/a ; Hamza_On_Heh_Goal
+jg ; n/a ; He
+jg ; n/a ; Heh
+jg ; n/a ; Heh_Goal
+jg ; n/a ; Heth
+jg ; n/a ; Kaf
+jg ; n/a ; Kaph
+jg ; n/a ; Khaph
+jg ; n/a ; Knotted_Heh
+jg ; n/a ; Lam
+jg ; n/a ; Lamadh
+jg ; n/a ; Meem
+jg ; n/a ; Mim
+jg ; n/a ; No_Joining_Group
+jg ; n/a ; Noon
+jg ; n/a ; Nun
+jg ; n/a ; Pe
+jg ; n/a ; Qaf
+jg ; n/a ; Qaph
+jg ; n/a ; Reh
+jg ; n/a ; Reversed_Pe
+jg ; n/a ; Sad
+jg ; n/a ; Sadhe
+jg ; n/a ; Seen
+jg ; n/a ; Semkath
+jg ; n/a ; Shin
+jg ; n/a ; Swash_Kaf
+jg ; n/a ; Syriac_Waw
+jg ; n/a ; Tah
+jg ; n/a ; Taw
+jg ; n/a ; Teh_Marbuta
+jg ; n/a ; Teth
+jg ; n/a ; Waw
+jg ; n/a ; Yeh
+jg ; n/a ; Yeh_Barree
+jg ; n/a ; Yeh_With_Tail
+jg ; n/a ; Yudh
+jg ; n/a ; Yudh_He
+jg ; n/a ; Zain
+jg ; n/a ; Zhain
+
+# Joining_Type (jt)
+
+jt ; C ; Join_Causing
+jt ; D ; Dual_Joining
+jt ; L ; Left_Joining
+jt ; R ; Right_Joining
+jt ; T ; Transparent
+jt ; U ; Non_Joining
+
+# Line_Break (lb)
+
+lb ; AI ; Ambiguous
+lb ; AL ; Alphabetic
+lb ; B2 ; Break_Both
+lb ; BA ; Break_After
+lb ; BB ; Break_Before
+lb ; BK ; Mandatory_Break
+lb ; CB ; Contingent_Break
+lb ; CL ; Close_Punctuation
+lb ; CM ; Combining_Mark
+lb ; CR ; Carriage_Return
+lb ; EX ; Exclamation
+lb ; GL ; Glue
+lb ; H2 ; H2
+lb ; H3 ; H3
+lb ; HY ; Hyphen
+lb ; ID ; Ideographic
+lb ; IN ; Inseparable ; Inseperable
+lb ; IS ; Infix_Numeric
+lb ; JL ; JL
+lb ; JT ; JT
+lb ; JV ; JV
+lb ; LF ; Line_Feed
+lb ; NL ; Next_Line
+lb ; NS ; Nonstarter
+lb ; NU ; Numeric
+lb ; OP ; Open_Punctuation
+lb ; PO ; Postfix_Numeric
+lb ; PR ; Prefix_Numeric
+lb ; QU ; Quotation
+lb ; SA ; Complex_Context
+lb ; SG ; Surrogate
+lb ; SP ; Space
+lb ; SY ; Break_Symbols
+lb ; WJ ; Word_Joiner
+lb ; XX ; Unknown
+lb ; ZW ; ZWSpace
+
+# NFC_Quick_Check (NFC_QC)
+
+NFC_QC; M ; Maybe
+NFC_QC; N ; No
+NFC_QC; Y ; Yes
+
+# NFD_Quick_Check (NFD_QC)
+
+NFD_QC; N ; No
+NFD_QC; Y ; Yes
+
+# NFKC_Quick_Check (NFKC_QC)
+
+NFKC_QC; M ; Maybe
+NFKC_QC; N ; No
+NFKC_QC; Y ; Yes
+
+# NFKD_Quick_Check (NFKD_QC)
+
+NFKD_QC; N ; No
+NFKD_QC; Y ; Yes
+
+# Numeric_Type (nt)
+
+nt ; De ; Decimal
+nt ; Di ; Digit
+nt ; None ; None
+nt ; Nu ; Numeric
+
+# Script (sc)
+
+sc ; Arab ; Arabic
+sc ; Armn ; Armenian
+sc ; Beng ; Bengali
+sc ; Bopo ; Bopomofo
+sc ; Brai ; Braille
+sc ; Bugi ; Buginese
+sc ; Buhd ; Buhid
+sc ; Cans ; Canadian_Aboriginal
+sc ; Cher ; Cherokee
+sc ; Copt ; Coptic ; Qaac
+sc ; Cprt ; Cypriot
+sc ; Cyrl ; Cyrillic
+sc ; Deva ; Devanagari
+sc ; Dsrt ; Deseret
+sc ; Ethi ; Ethiopic
+sc ; Geor ; Georgian
+sc ; Glag ; Glagolitic
+sc ; Goth ; Gothic
+sc ; Grek ; Greek
+sc ; Gujr ; Gujarati
+sc ; Guru ; Gurmukhi
+sc ; Hang ; Hangul
+sc ; Hani ; Han
+sc ; Hano ; Hanunoo
+sc ; Hebr ; Hebrew
+sc ; Hira ; Hiragana
+sc ; Hrkt ; Katakana_Or_Hiragana
+sc ; Ital ; Old_Italic
+sc ; Kana ; Katakana
+sc ; Khar ; Kharoshthi
+sc ; Khmr ; Khmer
+sc ; Knda ; Kannada
+sc ; Laoo ; Lao
+sc ; Latn ; Latin
+sc ; Limb ; Limbu
+sc ; Linb ; Linear_B
+sc ; Mlym ; Malayalam
+sc ; Mong ; Mongolian
+sc ; Mymr ; Myanmar
+sc ; Ogam ; Ogham
+sc ; Orya ; Oriya
+sc ; Osma ; Osmanya
+sc ; Qaai ; Inherited
+sc ; Runr ; Runic
+sc ; Shaw ; Shavian
+sc ; Sinh ; Sinhala
+sc ; Sylo ; Syloti_Nagri
+sc ; Syrc ; Syriac
+sc ; Tagb ; Tagbanwa
+sc ; Tale ; Tai_Le
+sc ; Talu ; New_Tai_Lue
+sc ; Taml ; Tamil
+sc ; Telu ; Telugu
+sc ; Tfng ; Tifinagh
+sc ; Tglg ; Tagalog
+sc ; Thaa ; Thaana
+sc ; Thai ; Thai
+sc ; Tibt ; Tibetan
+sc ; Ugar ; Ugaritic
+sc ; Xpeo ; Old_Persian
+sc ; Yiii ; Yi
+sc ; Zyyy ; Common
+
+# Sentence_Break (SB)
+
+SB ; AT ; ATerm
+SB ; CL ; Close
+SB ; FO ; Format
+SB ; LE ; OLetter
+SB ; LO ; Lower
+SB ; NU ; Numeric
+SB ; SE ; Sep
+SB ; SP ; Sp
+SB ; ST ; STerm
+SB ; UP ; Upper
+SB ; XX ; Other
+
+# Word_Break (WB)
+
+WB ; EX ; ExtendNumLet
+WB ; FO ; Format
+WB ; KA ; Katakana
+WB ; LE ; ALetter
+WB ; ML ; MidLetter
+WB ; MN ; MidNum
+WB ; NU ; Numeric
+WB ; XX ; Other
diff --git a/Master/tlpkg/tlperl/lib/unicore/Properties b/Master/tlpkg/tlperl/lib/unicore/Properties
new file mode 100644
index 00000000000..274db8f58f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Properties
@@ -0,0 +1,350 @@
+##
+## This file created by mktables
+## List of built-in \p{...}/\P{...} properties.
+##
+## '*' means name may be 'fuzzy'
+##
+
+ \p{ASCII} [[:ASCII:]]
+ \p{Alnum} [[:Alnum:]]
+* \p{Alphabetic} [\p{L}\p{OtherAlphabetic}]
+ \p{Alpha} [[:Alpha:]]
+ \p{Any} Alias for \p{Any} ([\x{0000}-\x{10FFFF}])
+ \p{Any} [\x{0000}-\x{10FFFF}]
+* \p{Arabic} Script 'Arabic'
+* \p{Armenian} Script 'Armenian'
+* \p{AsciiHexDigit} Extended property 'ASCII_Hex_Digit'
+ \p{Assigned} All assigned code points
+* \p{Bengali} Script 'Bengali'
+* \p{BidiControl} Extended property 'Bidi_Control'
+ \p{Blank} [[:Blank:]]
+* \p{Bopomofo} Script 'Bopomofo'
+* \p{Braille} Script 'Braille'
+* \p{Buginese} Script 'Buginese'
+* \p{Buhid} Script 'Buhid'
+* \p{CanadianAboriginal} Script 'Canadian_Aboriginal'
+* \p{Cc} Alias for \p{Cc} (General Category 'Cc')
+ \p{Cc} General Category 'Cc'
+* \p{Cf} Alias for \p{Cf} (General Category 'Cf')
+ \p{Cf} General Category 'Cf'
+* \p{Cherokee} Script 'Cherokee'
+ \p{Cntrl} [[:Cntrl:]]
+* \p{Cn} Alias for \p{Cn} (General Category 'Cn' [not functional in Perl])
+ \p{Cn} General Category 'Cn' [not functional in Perl]
+* \p{Common} Script 'Common'
+* \p{Coptic} Script 'Coptic'
+* \p{Co} Alias for \p{Co} (General Category 'Co')
+ \p{Co} General Category 'Co'
+* \p{Cs} Alias for \p{Cs} (General Category 'Cs')
+ \p{Cs} General Category 'Cs'
+* \p{Cypriot} Script 'Cypriot'
+* \p{Cyrillic} Script 'Cyrillic'
+* \p{C} Alias for \p{C} (Major Category 'C')
+ \p{C} Major Category 'C'
+* \p{Dash} Extended property 'Dash'
+* \p{Deprecated} Extended property 'Deprecated'
+* \p{Deseret} Script 'Deseret'
+* \p{Devanagari} Script 'Devanagari'
+* \p{Diacritic} Extended property 'Diacritic'
+ \p{Digit} [[:Digit:]]
+* \p{Ethiopic} Script 'Ethiopic'
+* \p{Extender} Extended property 'Extender'
+* \p{Georgian} Script 'Georgian'
+* \p{Glagolitic} Script 'Glagolitic'
+* \p{Gothic} Script 'Gothic'
+* \p{GraphemeLink} Extended property 'Grapheme_Link'
+ \p{Graph} [[:Graph:]]
+* \p{Greek} Script 'Greek'
+* \p{Gujarati} Script 'Gujarati'
+* \p{Gurmukhi} Script 'Gurmukhi'
+* \p{Hangul} Script 'Hangul'
+* \p{Hanunoo} Script 'Hanunoo'
+* \p{Han} Script 'Han'
+* \p{Hebrew} Script 'Hebrew'
+* \p{HexDigit} Extended property 'Hex_Digit'
+* \p{Hiragana} Script 'Hiragana'
+* \p{Hyphen} Extended property 'Hyphen'
+* \p{IdContinue} [\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}]
+* \p{IdStart} [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]
+* \p{Ideographic} Extended property 'Ideographic'
+* \p{IdsBinaryOperator} Extended property 'IDS_Binary_Operator'
+* \p{IdsTrinaryOperator} Extended property 'IDS_Trinary_Operator'
+* \p{InAegeanNumbers} Block 'Aegean Numbers'
+* \p{InAlphabeticPresentationForms} Block 'Alphabetic Presentation Forms'
+* \p{InAncientGreekMusicalNotation} Block 'Ancient Greek Musical Notation'
+* \p{InAncientGreekNumbers} Block 'Ancient Greek Numbers'
+* \p{InArabicPresentationFormsA} Block 'Arabic Presentation Forms-A'
+* \p{InArabicPresentationFormsB} Block 'Arabic Presentation Forms-B'
+* \p{InArabicSupplement} Block 'Arabic Supplement'
+* \p{InArabic} Block 'Arabic'
+* \p{InArmenian} Block 'Armenian'
+* \p{InArrows} Block 'Arrows'
+* \p{InBasicLatin} Block 'Basic Latin'
+* \p{InBengali} Block 'Bengali'
+* \p{InBlockElements} Block 'Block Elements'
+* \p{InBopomofoExtended} Block 'Bopomofo Extended'
+* \p{InBopomofo} Block 'Bopomofo'
+* \p{InBoxDrawing} Block 'Box Drawing'
+* \p{InBraillePatterns} Block 'Braille Patterns'
+* \p{InBuginese} Block 'Buginese'
+* \p{InBuhid} Block 'Buhid'
+* \p{InByzantineMusicalSymbols} Block 'Byzantine Musical Symbols'
+* \p{InCherokee} Block 'Cherokee'
+* \p{InCjkCompatibilityForms} Block 'CJK Compatibility Forms'
+* \p{InCjkCompatibilityIdeographsSupplement} Block 'CJK Compatibility Ideographs Supplement'
+* \p{InCjkCompatibilityIdeographs} Block 'CJK Compatibility Ideographs'
+* \p{InCjkCompatibility} Block 'CJK Compatibility'
+* \p{InCjkRadicalsSupplement} Block 'CJK Radicals Supplement'
+* \p{InCjkStrokes} Block 'CJK Strokes'
+* \p{InCjkSymbolsAndPunctuation} Block 'CJK Symbols and Punctuation'
+* \p{InCjkUnifiedIdeographsExtensionA} Block 'CJK Unified Ideographs Extension A'
+* \p{InCjkUnifiedIdeographsExtensionB} Block 'CJK Unified Ideographs Extension B'
+* \p{InCjkUnifiedIdeographs} Block 'CJK Unified Ideographs'
+* \p{InCombiningDiacriticalMarksForSymbols} Block 'Combining Diacritical Marks for Symbols'
+* \p{InCombiningDiacriticalMarksSupplement} Block 'Combining Diacritical Marks Supplement'
+* \p{InCombiningDiacriticalMarks} Block 'Combining Diacritical Marks'
+* \p{InCombiningHalfMarks} Block 'Combining Half Marks'
+* \p{InControlPictures} Block 'Control Pictures'
+* \p{InCoptic} Block 'Coptic'
+* \p{InCurrencySymbols} Block 'Currency Symbols'
+* \p{InCypriotSyllabary} Block 'Cypriot Syllabary'
+* \p{InCyrillicSupplement} Block 'Cyrillic Supplement'
+* \p{InCyrillic} Block 'Cyrillic'
+* \p{InDeseret} Block 'Deseret'
+* \p{InDevanagari} Block 'Devanagari'
+* \p{InDingbats} Block 'Dingbats'
+* \p{InEnclosedAlphanumerics} Block 'Enclosed Alphanumerics'
+* \p{InEnclosedCjkLettersAndMonths} Block 'Enclosed CJK Letters and Months'
+* \p{InEthiopicExtended} Block 'Ethiopic Extended'
+* \p{InEthiopicSupplement} Block 'Ethiopic Supplement'
+* \p{InEthiopic} Block 'Ethiopic'
+* \p{InGeneralPunctuation} Block 'General Punctuation'
+* \p{InGeometricShapes} Block 'Geometric Shapes'
+* \p{InGeorgianSupplement} Block 'Georgian Supplement'
+* \p{InGeorgian} Block 'Georgian'
+* \p{InGlagolitic} Block 'Glagolitic'
+* \p{InGothic} Block 'Gothic'
+* \p{InGreekAndCoptic} Block 'Greek and Coptic'
+* \p{InGreekExtended} Block 'Greek Extended'
+* \p{InGujarati} Block 'Gujarati'
+* \p{InGurmukhi} Block 'Gurmukhi'
+* \p{InHalfwidthAndFullwidthForms} Block 'Halfwidth and Fullwidth Forms'
+* \p{InHangulCompatibilityJamo} Block 'Hangul Compatibility Jamo'
+* \p{InHangulJamo} Block 'Hangul Jamo'
+* \p{InHangulSyllables} Block 'Hangul Syllables'
+* \p{InHanunoo} Block 'Hanunoo'
+* \p{InHebrew} Block 'Hebrew'
+* \p{InHighPrivateUseSurrogates} Block 'High Private Use Surrogates'
+* \p{InHighSurrogates} Block 'High Surrogates'
+* \p{InHiragana} Block 'Hiragana'
+* \p{InIdeographicDescriptionCharacters} Block 'Ideographic Description Characters'
+* \p{InIpaExtensions} Block 'IPA Extensions'
+* \p{InKanbun} Block 'Kanbun'
+* \p{InKangxiRadicals} Block 'Kangxi Radicals'
+* \p{InKannada} Block 'Kannada'
+* \p{InKatakanaPhoneticExtensions} Block 'Katakana Phonetic Extensions'
+* \p{InKatakana} Block 'Katakana'
+* \p{InKharoshthi} Block 'Kharoshthi'
+* \p{InKhmerSymbols} Block 'Khmer Symbols'
+* \p{InKhmer} Block 'Khmer'
+* \p{InLao} Block 'Lao'
+* \p{InLatin1Supplement} Block 'Latin-1 Supplement'
+* \p{InLatinExtendedAdditional} Block 'Latin Extended Additional'
+* \p{InLatinExtendedA} Block 'Latin Extended-A'
+* \p{InLatinExtendedB} Block 'Latin Extended-B'
+* \p{InLetterlikeSymbols} Block 'Letterlike Symbols'
+* \p{InLimbu} Block 'Limbu'
+* \p{InLinearBIdeograms} Block 'Linear B Ideograms'
+* \p{InLinearBSyllabary} Block 'Linear B Syllabary'
+* \p{InLowSurrogates} Block 'Low Surrogates'
+* \p{InMalayalam} Block 'Malayalam'
+* \p{InMathematicalAlphanumericSymbols} Block 'Mathematical Alphanumeric Symbols'
+* \p{InMathematicalOperators} Block 'Mathematical Operators'
+* \p{InMiscellaneousMathematicalSymbolsA} Block 'Miscellaneous Mathematical Symbols-A'
+* \p{InMiscellaneousMathematicalSymbolsB} Block 'Miscellaneous Mathematical Symbols-B'
+* \p{InMiscellaneousSymbolsAndArrows} Block 'Miscellaneous Symbols and Arrows'
+* \p{InMiscellaneousSymbols} Block 'Miscellaneous Symbols'
+* \p{InMiscellaneousTechnical} Block 'Miscellaneous Technical'
+* \p{InModifierToneLetters} Block 'Modifier Tone Letters'
+* \p{InMongolian} Block 'Mongolian'
+* \p{InMusicalSymbols} Block 'Musical Symbols'
+* \p{InMyanmar} Block 'Myanmar'
+* \p{InNewTaiLue} Block 'New Tai Lue'
+* \p{InNumberForms} Block 'Number Forms'
+* \p{InOgham} Block 'Ogham'
+* \p{InOldItalic} Block 'Old Italic'
+* \p{InOldPersian} Block 'Old Persian'
+* \p{InOpticalCharacterRecognition} Block 'Optical Character Recognition'
+* \p{InOriya} Block 'Oriya'
+* \p{InOsmanya} Block 'Osmanya'
+* \p{InPhoneticExtensionsSupplement} Block 'Phonetic Extensions Supplement'
+* \p{InPhoneticExtensions} Block 'Phonetic Extensions'
+* \p{InPrivateUseArea} Block 'Private Use Area'
+* \p{InRunic} Block 'Runic'
+* \p{InShavian} Block 'Shavian'
+* \p{InSinhala} Block 'Sinhala'
+* \p{InSmallFormVariants} Block 'Small Form Variants'
+* \p{InSpacingModifierLetters} Block 'Spacing Modifier Letters'
+* \p{InSpecials} Block 'Specials'
+* \p{InSuperscriptsAndSubscripts} Block 'Superscripts and Subscripts'
+* \p{InSupplementalArrowsA} Block 'Supplemental Arrows-A'
+* \p{InSupplementalArrowsB} Block 'Supplemental Arrows-B'
+* \p{InSupplementalMathematicalOperators} Block 'Supplemental Mathematical Operators'
+* \p{InSupplementalPunctuation} Block 'Supplemental Punctuation'
+* \p{InSupplementaryPrivateUseAreaA} Block 'Supplementary Private Use Area-A'
+* \p{InSupplementaryPrivateUseAreaB} Block 'Supplementary Private Use Area-B'
+* \p{InSylotiNagri} Block 'Syloti Nagri'
+* \p{InSyriac} Block 'Syriac'
+* \p{InTagalog} Block 'Tagalog'
+* \p{InTagbanwa} Block 'Tagbanwa'
+* \p{InTags} Block 'Tags'
+* \p{InTaiLe} Block 'Tai Le'
+* \p{InTaiXuanJingSymbols} Block 'Tai Xuan Jing Symbols'
+* \p{InTamil} Block 'Tamil'
+* \p{InTelugu} Block 'Telugu'
+* \p{InThaana} Block 'Thaana'
+* \p{InThai} Block 'Thai'
+* \p{InTibetan} Block 'Tibetan'
+* \p{InTifinagh} Block 'Tifinagh'
+* \p{InUgaritic} Block 'Ugaritic'
+* \p{InUnifiedCanadianAboriginalSyllabics} Block 'Unified Canadian Aboriginal Syllabics'
+* \p{InVariationSelectorsSupplement} Block 'Variation Selectors Supplement'
+* \p{InVariationSelectors} Block 'Variation Selectors'
+* \p{InVerticalForms} Block 'Vertical Forms'
+* \p{InYiRadicals} Block 'Yi Radicals'
+* \p{InYiSyllables} Block 'Yi Syllables'
+* \p{InYijingHexagramSymbols} Block 'Yijing Hexagram Symbols'
+* \p{Inherited} Script 'Inherited'
+* \p{JoinControl} Extended property 'Join_Control'
+* \p{Kannada} Script 'Kannada'
+* \p{Katakana} Script 'Katakana'
+* \p{Kharoshthi} Script 'Kharoshthi'
+* \p{Khmer} Script 'Khmer'
+* \p{LC} Alias for \p{LC} ([\p{Ll}\p{Lu}\p{Lt}])
+ \p{LC} [\p{Ll}\p{Lu}\p{Lt}]
+* \p{Lao} Script 'Lao'
+* \p{Latin} Script 'Latin'
+* \p{Limbu} Script 'Limbu'
+* \p{LinearB} Script 'Linear_B'
+* \p{Ll} Alias for \p{Ll} (General Category 'Ll')
+ \p{Ll} General Category 'Ll'
+* \p{Lm} Alias for \p{Lm} (General Category 'Lm')
+ \p{Lm} General Category 'Lm'
+* \p{LogicalOrderException} Extended property 'Logical_Order_Exception'
+* \p{Lowercase} [\p{Ll}\p{OtherLowercase}]
+ \p{Lower} [[:Lower:]]
+* \p{Lo} Alias for \p{Lo} (General Category 'Lo')
+ \p{Lo} General Category 'Lo'
+* \p{Lt} Alias for \p{Lt} (General Category 'Lt')
+ \p{Lt} General Category 'Lt'
+* \p{Lu} Alias for \p{Lu} (General Category 'Lu')
+ \p{Lu} General Category 'Lu'
+* \p{L} Alias for \p{L} (Major Category 'L')
+ \p{L} Major Category 'L'
+* \p{Malayalam} Script 'Malayalam'
+* \p{Math} [\p{Sm}\p{OtherMath}]
+* \p{Mc} Alias for \p{Mc} (General Category 'Mc')
+ \p{Mc} General Category 'Mc'
+* \p{Me} Alias for \p{Me} (General Category 'Me')
+ \p{Me} General Category 'Me'
+* \p{Mn} Alias for \p{Mn} (General Category 'Mn')
+ \p{Mn} General Category 'Mn'
+* \p{Mongolian} Script 'Mongolian'
+* \p{Myanmar} Script 'Myanmar'
+* \p{M} Alias for \p{M} (Major Category 'M')
+ \p{M} Major Category 'M'
+* \p{Nd} Alias for \p{Nd} (General Category 'Nd')
+ \p{Nd} General Category 'Nd'
+* \p{NewTaiLue} Script 'New_Tai_Lue'
+* \p{Nl} Alias for \p{Nl} (General Category 'Nl')
+ \p{Nl} General Category 'Nl'
+* \p{NoncharacterCodePoint} Extended property 'Noncharacter_Code_Point'
+* \p{No} Alias for \p{No} (General Category 'No')
+ \p{No} General Category 'No'
+* \p{N} Alias for \p{N} (Major Category 'N')
+ \p{N} Major Category 'N'
+* \p{Ogham} Script 'Ogham'
+* \p{OldItalic} Script 'Old_Italic'
+* \p{OldPersian} Script 'Old_Persian'
+* \p{Oriya} Script 'Oriya'
+* \p{Osmanya} Script 'Osmanya'
+* \p{OtherAlphabetic} Extended property 'Other_Alphabetic'
+* \p{OtherDefaultIgnorableCodePoint} Extended property 'Other_Default_Ignorable_Code_Point'
+* \p{OtherGraphemeExtend} Extended property 'Other_Grapheme_Extend'
+* \p{OtherIdContinue} Extended property 'Other_ID_Continue'
+* \p{OtherIdStart} Extended property 'Other_ID_Start'
+* \p{OtherLowercase} Extended property 'Other_Lowercase'
+* \p{OtherMath} Extended property 'Other_Math'
+* \p{OtherUppercase} Extended property 'Other_Uppercase'
+* \p{PatternSyntax} Extended property 'Pattern_Syntax'
+* \p{PatternWhiteSpace} Extended property 'Pattern_White_Space'
+* \p{Pc} Alias for \p{Pc} (General Category 'Pc')
+ \p{Pc} General Category 'Pc'
+* \p{Pd} Alias for \p{Pd} (General Category 'Pd')
+ \p{Pd} General Category 'Pd'
+* \p{Pe} Alias for \p{Pe} (General Category 'Pe')
+ \p{Pe} General Category 'Pe'
+* \p{Pf} Alias for \p{Pf} (General Category 'Pf')
+ \p{Pf} General Category 'Pf'
+* \p{Pi} Alias for \p{Pi} (General Category 'Pi')
+ \p{Pi} General Category 'Pi'
+* \p{Po} Alias for \p{Po} (General Category 'Po')
+ \p{Po} General Category 'Po'
+ \p{Print} [[:Print:]]
+* \p{Ps} Alias for \p{Ps} (General Category 'Ps')
+ \p{Ps} General Category 'Ps'
+ \p{Punct} [[:Punct:]]
+* \p{P} Alias for \p{P} (Major Category 'P')
+ \p{P} Major Category 'P'
+* \p{QuotationMark} Extended property 'Quotation_Mark'
+* \p{Radical} Extended property 'Radical'
+* \p{Runic} Script 'Runic'
+* \p{Sc} Alias for \p{Sc} (General Category 'Sc')
+ \p{Sc} General Category 'Sc'
+* \p{Shavian} Script 'Shavian'
+* \p{Sinhala} Script 'Sinhala'
+* \p{Sk} Alias for \p{Sk} (General Category 'Sk')
+ \p{Sk} General Category 'Sk'
+* \p{Sm} Alias for \p{Sm} (General Category 'Sm')
+ \p{Sm} General Category 'Sm'
+* \p{SoftDotted} Extended property 'Soft_Dotted'
+* \p{So} Alias for \p{So} (General Category 'So')
+ \p{So} General Category 'So'
+ \p{SpacePerl} \s
+ \p{Space} [[:Space:]]
+* \p{Sterm} Extended property 'STerm'
+* \p{SylotiNagri} Script 'Syloti_Nagri'
+* \p{Syriac} Script 'Syriac'
+* \p{S} Alias for \p{S} (Major Category 'S')
+ \p{S} Major Category 'S'
+* \p{Tagalog} Script 'Tagalog'
+* \p{Tagbanwa} Script 'Tagbanwa'
+* \p{TaiLe} Script 'Tai_Le'
+* \p{Tamil} Script 'Tamil'
+* \p{Telugu} Script 'Telugu'
+* \p{TerminalPunctuation} Extended property 'Terminal_Punctuation'
+* \p{Thaana} Script 'Thaana'
+* \p{Thai} Script 'Thai'
+* \p{Tibetan} Script 'Tibetan'
+* \p{Tifinagh} Script 'Tifinagh'
+ \p{Title} [[:Title:]]
+* \p{Ugaritic} Script 'Ugaritic'
+* \p{UnifiedIdeograph} Extended property 'Unified_Ideograph'
+* \p{Uppercase} [\p{Lu}\p{Other_Uppercase}]
+ \p{Upper} [[:Upper:]]
+* \p{VariationSelector} Extended property 'Variation_Selector'
+* \p{WhiteSpace} Extended property 'White_Space'
+ \p{Word} [[:Word:]]
+ \p{XDigit} [[:XDigit:]]
+* \p{Yi} Script 'Yi'
+* \p{Zl} Alias for \p{Zl} (General Category 'Zl')
+ \p{Zl} General Category 'Zl'
+* \p{Zp} Alias for \p{Zp} (General Category 'Zp')
+ \p{Zp} General Category 'Zp'
+* \p{Zs} Alias for \p{Zs} (General Category 'Zs')
+ \p{Zs} General Category 'Zs'
+* \p{Z} Alias for \p{Z} (Major Category 'Z')
+ \p{Z} Major Category 'Z'
+ \p{_CanonDCIJ} (for internal casefolding use)
+ \p{_CaseIgnorable} (for internal casefolding use)
+ \p{_CombAbove} (for internal casefolding use)
diff --git a/Master/tlpkg/tlperl/lib/unicore/PropertyAliases.txt b/Master/tlpkg/tlperl/lib/unicore/PropertyAliases.txt
new file mode 100644
index 00000000000..39b14e5e6f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/PropertyAliases.txt
@@ -0,0 +1,163 @@
+# PropertyAliases-4.1.0.txt
+# Date: 2005-02-26, 11:13:41 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+# This file contains aliases for properties used in the UCD.
+# These names can be used for XML formats of UCD data, for regular-expression
+# property tests, and other programmatic textual descriptions of Unicode data.
+# For information on which properties are normative, see UCD.html.
+#
+# The names may be translated in appropriate environments, and additional
+# aliases may be useful.
+#
+# FORMAT
+#
+# Each line has two or more fields, separated by semicolons.
+#
+# First Field: The first field is an abbreviated name for the property.
+#
+# Second Field: The second field is a long name
+#
+# The above are the preferred aliases. Other aliases may be listed in additional fields.
+#
+# Loose matching should be applied to all property names and property values, with
+# the exception of String Property values. With loose matching of property names and
+# values, the case distinctions, whitespace, and '_' are ignored. For Numeric Property
+# values, numeric equivalencies are applied: thus "01.00" is equivalent to "1".
+#
+# NOTE: Property value names are NOT unique across properties. For example:
+#
+# AL means Arabic Letter for the Bidi_Class property, and
+# AL means Alpha_Left for the Combining_Class property, and
+# AL means Alphabetic for the Line_Break property.
+#
+# In addition, some property names may be the same as some property value names.
+# For example:
+#
+# sc means the Script property, and
+# Sc means the General_Category property value Currency_Symbol (Sc)
+#
+# The combination of property value and property name is, however, unique.
+#
+# For more information, see UTS #18: Regular Expression Guidelines
+# ================================================
+
+
+# ================================================
+# Numeric Properties
+# ================================================
+nv ; Numeric_Value
+
+# ================================================
+# String Properties
+# ================================================
+bmg ; Bidi_Mirroring_Glyph
+cf ; Case_Folding
+dm ; Decomposition_Mapping
+FC_NFKC ; FC_NFKC_Closure
+lc ; Lowercase_Mapping
+scc ; Special_Case_Condition
+sfc ; Simple_Case_Folding
+slc ; Simple_Lowercase_Mapping
+stc ; Simple_Titlecase_Mapping
+suc ; Simple_Uppercase_Mapping
+tc ; Titlecase_Mapping
+uc ; Uppercase_Mapping
+
+# ================================================
+# Miscellaneous Properties
+# ================================================
+isc ; ISO_Comment
+na ; Name
+na1 ; Unicode_1_Name
+URS ; Unicode_Radical_Stroke
+
+# ================================================
+# Catalog Properties
+# ================================================
+age ; Age
+blk ; Block
+sc ; Script
+
+# ================================================
+# Enumerated Properties
+# ================================================
+bc ; Bidi_Class
+ccc ; Canonical_Combining_Class
+dt ; Decomposition_Type
+ea ; East_Asian_Width
+gc ; General_Category
+GCB ; Grapheme_Cluster_Break
+hst ; Hangul_Syllable_Type
+jg ; Joining_Group
+jt ; Joining_Type
+lb ; Line_Break
+NFC_QC ; NFC_Quick_Check
+NFD_QC ; NFD_Quick_Check
+NFKC_QC ; NFKC_Quick_Check
+NFKD_QC ; NFKD_Quick_Check
+nt ; Numeric_Type
+SB ; Sentence_Break
+WB ; Word_Break
+
+# ================================================
+# Binary Properties
+# ================================================
+AHex ; ASCII_Hex_Digit
+Alpha ; Alphabetic
+Bidi_C ; Bidi_Control
+Bidi_M ; Bidi_Mirrored
+CE ; Composition_Exclusion
+Comp_Ex ; Full_Composition_Exclusion
+Dash ; Dash
+Dep ; Deprecated
+DI ; Default_Ignorable_Code_Point
+Dia ; Diacritic
+Ext ; Extender
+Gr_Base ; Grapheme_Base
+Gr_Ext ; Grapheme_Extend
+Gr_Link ; Grapheme_Link
+Hex ; Hex_Digit
+Hyphen ; Hyphen
+IDC ; ID_Continue
+Ideo ; Ideographic
+IDS ; ID_Start
+IDSB ; IDS_Binary_Operator
+IDST ; IDS_Trinary_Operator
+Join_C ; Join_Control
+LOE ; Logical_Order_Exception
+Lower ; Lowercase
+Math ; Math
+NChar ; Noncharacter_Code_Point
+OAlpha ; Other_Alphabetic
+ODI ; Other_Default_Ignorable_Code_Point
+OGr_Ext ; Other_Grapheme_Extend
+OIDC ; Other_ID_Continue
+OIDS ; Other_ID_Start
+OLower ; Other_Lowercase
+OMath ; Other_Math
+OUpper ; Other_Uppercase
+Pat_Syn ; Pattern_Syntax
+Pat_WS ; Pattern_White_Space
+QMark ; Quotation_Mark
+Radical ; Radical
+SD ; Soft_Dotted
+STerm ; STerm
+Term ; Terminal_Punctuation
+UIdeo ; Unified_Ideograph
+Upper ; Uppercase
+VS ; Variation_Selector
+WSpace ; White_Space ; space
+XIDC ; XID_Continue
+XIDS ; XID_Start
+XO_NFC ; Expands_On_NFC
+XO_NFD ; Expands_On_NFD
+XO_NFKC ; Expands_On_NFKC
+XO_NFKD ; Expands_On_NFKD
+
+# ================================================
+# Total: 88
+
diff --git a/Master/tlpkg/tlperl/lib/unicore/ReadMe.txt b/Master/tlpkg/tlperl/lib/unicore/ReadMe.txt
new file mode 100644
index 00000000000..0ad5623c830
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/ReadMe.txt
@@ -0,0 +1,24 @@
+2005 March 30
+
+Welcome to the Unicode Character Database
+
+This directory contains contributory data files
+for the Unicode Character Database of the Unicode Standard.
+
+Copyright (c) 1991-2005 Unicode, Inc.
+For terms of use, see http://www.unicode.org/terms_of_use.html
+
+For an overview of how to access a specific version of
+the Unicode Character Database (UCD) and other information, see:
+
+http://www.unicode.org/ucd/
+
+If you accessed this file via the URL:
+
+http://www.unicode.org/Public/UNIDATA/ReadMe.txt
+
+then you are looking at the most current version of the UCD.
+Otherwise the version number of the UCD is part of the path name.
+
+The file UCD.html in this directory, as well as any file
+headers, where present, also identify the version of the UCD.
diff --git a/Master/tlpkg/tlperl/lib/unicore/Scripts.txt b/Master/tlpkg/tlperl/lib/unicore/Scripts.txt
new file mode 100644
index 00000000000..8e2bae372ad
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/Scripts.txt
@@ -0,0 +1,1464 @@
+# Scripts-4.1.0.txt
+# Date: 2005-03-10, 01:56:19 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+
+# ================================================
+
+# Property: Script
+
+# All code points not explicitly listed for Script
+# have the value Common (Zyyy).
+
+# ================================================
+
+0000..001F ; Common # Cc [32] <control-0000>..<control-001F>
+0020 ; Common # Zs SPACE
+0021..0023 ; Common # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Common # Sc DOLLAR SIGN
+0025..0027 ; Common # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Common # Ps LEFT PARENTHESIS
+0029 ; Common # Pe RIGHT PARENTHESIS
+002A ; Common # Po ASTERISK
+002B ; Common # Sm PLUS SIGN
+002C ; Common # Po COMMA
+002D ; Common # Pd HYPHEN-MINUS
+002E..002F ; Common # Po [2] FULL STOP..SOLIDUS
+0030..0039 ; Common # Nd [10] DIGIT ZERO..DIGIT NINE
+003A..003B ; Common # Po [2] COLON..SEMICOLON
+003C..003E ; Common # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Common # Po [2] QUESTION MARK..COMMERCIAL AT
+005B ; Common # Ps LEFT SQUARE BRACKET
+005C ; Common # Po REVERSE SOLIDUS
+005D ; Common # Pe RIGHT SQUARE BRACKET
+005E ; Common # Sk CIRCUMFLEX ACCENT
+005F ; Common # Pc LOW LINE
+0060 ; Common # Sk GRAVE ACCENT
+007B ; Common # Ps LEFT CURLY BRACKET
+007C ; Common # Sm VERTICAL LINE
+007D ; Common # Pe RIGHT CURLY BRACKET
+007E ; Common # Sm TILDE
+007F..009F ; Common # Cc [33] <control-007F>..<control-009F>
+00A0 ; Common # Zs NO-BREAK SPACE
+00A1 ; Common # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Common # Sc [4] CENT SIGN..YEN SIGN
+00A6..00A7 ; Common # So [2] BROKEN BAR..SECTION SIGN
+00A8 ; Common # Sk DIAERESIS
+00A9 ; Common # So COPYRIGHT SIGN
+00AB ; Common # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Common # Sm NOT SIGN
+00AD ; Common # Cf SOFT HYPHEN
+00AE ; Common # So REGISTERED SIGN
+00AF ; Common # Sk MACRON
+00B0 ; Common # So DEGREE SIGN
+00B1 ; Common # Sm PLUS-MINUS SIGN
+00B2..00B3 ; Common # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; Common # Sk ACUTE ACCENT
+00B5 ; Common # L& MICRO SIGN
+00B6 ; Common # So PILCROW SIGN
+00B7 ; Common # Po MIDDLE DOT
+00B8 ; Common # Sk CEDILLA
+00B9 ; Common # No SUPERSCRIPT ONE
+00BB ; Common # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE ; Common # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF ; Common # Po INVERTED QUESTION MARK
+00D7 ; Common # Sm MULTIPLICATION SIGN
+00F7 ; Common # Sm DIVISION SIGN
+02B9..02C1 ; Common # Lm [9] MODIFIER LETTER PRIME..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Common # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Common # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Common # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E5..02ED ; Common # Sk [9] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER UNASPIRATED
+02EE ; Common # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Common # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+037E ; Common # Po GREEK QUESTION MARK
+0387 ; Common # Po GREEK ANO TELEIA
+0589 ; Common # Po ARMENIAN FULL STOP
+0600..0603 ; Common # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+060C ; Common # Po ARABIC COMMA
+061B ; Common # Po ARABIC SEMICOLON
+061F ; Common # Po ARABIC QUESTION MARK
+0640 ; Common # Lm ARABIC TATWEEL
+0660..0669 ; Common # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+06DD ; Common # Cf ARABIC END OF AYAH
+0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
+0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
+10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
+16EB..16ED ; Common # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+1735..1736 ; Common # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE
+200B ; Common # Cf ZERO WIDTH SPACE
+200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+2010..2015 ; Common # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Common # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Common # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Common # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Common # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Common # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Common # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Common # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Common # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Common # Po [8] DAGGER..HYPHENATION POINT
+2028 ; Common # Zl LINE SEPARATOR
+2029 ; Common # Zp PARAGRAPH SEPARATOR
+202A..202E ; Common # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F ; Common # Zs NARROW NO-BREAK SPACE
+2030..2038 ; Common # Po [9] PER MILLE SIGN..CARET
+2039 ; Common # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Common # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Common # Po [4] REFERENCE MARK..OVERLINE
+203F..2040 ; Common # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043 ; Common # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Common # Sm FRACTION SLASH
+2045 ; Common # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Common # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Common # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Common # Sm COMMERCIAL MINUS SIGN
+2053 ; Common # Po SWUNG DASH
+2054 ; Common # Pc INVERTED UNDERTIE
+2055..205E ; Common # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F ; Common # Zs MEDIUM MATHEMATICAL SPACE
+2060..2063 ; Common # Cf [4] WORD JOINER..INVISIBLE SEPARATOR
+206A..206F ; Common # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2070 ; Common # No SUPERSCRIPT ZERO
+2074..2079 ; Common # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; Common # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Common # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Common # Pe SUPERSCRIPT RIGHT PARENTHESIS
+2080..2089 ; Common # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
+20A0..20B5 ; Common # Sc [22] EURO-CURRENCY SIGN..CEDI SIGN
+2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
+2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
+2107 ; Common # L& EULER CONSTANT
+2108..2109 ; Common # So [2] SCRUPLE..DEGREE FAHRENHEIT
+210A..2113 ; Common # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2114 ; Common # So L B BAR SYMBOL
+2115 ; Common # L& DOUBLE-STRUCK CAPITAL N
+2116..2118 ; Common # So [3] NUMERO SIGN..SCRIPT CAPITAL P
+2119..211D ; Common # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2123 ; Common # So [6] PRESCRIPTION TAKE..VERSICLE
+2124 ; Common # L& DOUBLE-STRUCK CAPITAL Z
+2125 ; Common # So OUNCE SIGN
+2127 ; Common # So INVERTED OHM SIGN
+2128 ; Common # L& BLACK-LETTER CAPITAL Z
+2129 ; Common # So TURNED GREEK SMALL LETTER IOTA
+212C..212D ; Common # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212E ; Common # So ESTIMATED SYMBOL
+212F..2131 ; Common # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2132 ; Common # So TURNED CAPITAL F
+2133..2134 ; Common # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; Common # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; Common # L& INFORMATION SOURCE
+213A..213B ; Common # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F ; Common # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144 ; Common # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149 ; Common # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A ; Common # So PROPERTY LINE
+214B ; Common # Sm TURNED AMPERSAND
+214C ; Common # So PER SIGN
+2153..215F ; Common # No [13] VULGAR FRACTION ONE THIRD..FRACTION NUMERATOR ONE
+2160..2183 ; Common # Nl [36] ROMAN NUMERAL ONE..ROMAN NUMERAL REVERSED ONE HUNDRED
+2190..2194 ; Common # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Common # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Common # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Common # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Common # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Common # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Common # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Common # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Common # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Common # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Common # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Common # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Common # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Common # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Common # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Common # So DOWNWARDS DOUBLE ARROW
+21D4 ; Common # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Common # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Common # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Common # So [8] DIAMETER SIGN..WAVY LINE
+2308..230B ; Common # Sm [4] LEFT CEILING..RIGHT FLOOR
+230C..231F ; Common # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Common # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Common # So [7] FROWN..KEYBOARD
+2329 ; Common # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Common # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Common # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Common # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Common # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4 ; Common # Ps TOP SQUARE BRACKET
+23B5 ; Common # Pe BOTTOM SQUARE BRACKET
+23B6 ; Common # Po BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+23B7..23DB ; Common # So [37] RADICAL SYMBOL BOTTOM..FUSE
+2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; Common # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FF ; Common # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6 ; Common # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Common # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Common # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Common # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Common # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Common # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Common # Sm MUSIC SHARP SIGN
+2670..269C ; Common # So [45] WEST SYRIAC CROSS..FLEUR-DE-LIS
+26A0..26B1 ; Common # So [18] WARNING SIGN..FUNERAL URN
+2701..2704 ; Common # So [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2706..2709 ; Common # So [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270C..2727 ; Common # So [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2729..274B ; Common # So [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274D ; Common # So SHADOWED WHITE CIRCLE
+274F..2752 ; Common # So [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2756 ; Common # So BLACK DIAMOND MINUS WHITE X
+2758..275E ; Common # So [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761..2767 ; Common # So [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768 ; Common # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Common # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Common # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Common # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Common # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Common # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Common # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Common # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Common # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Common # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Common # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Common # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Common # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Common # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793 ; Common # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794 ; Common # So HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2798..27AF ; Common # So [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B1..27BE ; Common # So [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
+27D0..27E5 ; Common # Sm [22] WHITE DIAMOND WITH CENTRED DOT..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Common # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Common # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Common # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27F0..27FF ; Common # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982 ; Common # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Common # Ps LEFT WHITE CURLY BRACKET
+2984 ; Common # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Common # Ps LEFT WHITE PARENTHESIS
+2986 ; Common # Pe RIGHT WHITE PARENTHESIS
+2987 ; Common # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Common # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Common # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Common # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Common # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Common # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Common # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Common # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Common # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Common # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Common # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Common # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Common # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Common # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Common # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Common # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Common # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Common # Ps LEFT WIGGLY FENCE
+29D9 ; Common # Pe RIGHT WIGGLY FENCE
+29DA ; Common # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Common # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Common # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Common # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Common # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Common # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B13 ; Common # So [20] NORTH EAST WHITE ARROW..SQUARE WITH BOTTOM HALF BLACK
+2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
+2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
+2E04 ; Common # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Common # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Common # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Common # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Common # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Common # Po RAISED SQUARE
+2E0C ; Common # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Common # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Common # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Common # Pd DOUBLE OBLIQUE HYPHEN
+2E1C ; Common # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Common # Pf RIGHT LOW PARAPHRASE BRACKET
+2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 ; Common # Zs IDEOGRAPHIC SPACE
+3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004 ; Common # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3006 ; Common # Lo IDEOGRAPHIC CLOSING MARK
+3008 ; Common # Ps LEFT ANGLE BRACKET
+3009 ; Common # Pe RIGHT ANGLE BRACKET
+300A ; Common # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Common # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Common # Ps LEFT CORNER BRACKET
+300D ; Common # Pe RIGHT CORNER BRACKET
+300E ; Common # Ps LEFT WHITE CORNER BRACKET
+300F ; Common # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Common # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Common # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Common # So [2] POSTAL MARK..GETA MARK
+3014 ; Common # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Common # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Common # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Common # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Common # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Common # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Common # Ps LEFT WHITE SQUARE BRACKET
+301B ; Common # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Common # Pd WAVE DASH
+301D ; Common # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Common # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Common # So POSTAL MARK FACE
+3030 ; Common # Pd WAVY DASH
+3031..3035 ; Common # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037 ; Common # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303C ; Common # Lo MASU MARK
+303D ; Common # Po PART ALTERNATION MARK
+303E..303F ; Common # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+309B..309C ; Common # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+30A0 ; Common # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB ; Common # Po KATAKANA MIDDLE DOT
+30FC ; Common # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
+3190..3191 ; Common # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195 ; Common # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31C0..31CF ; Common # So [16] CJK STROKE T..CJK STROKE N
+3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3243 ; Common # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
+3250 ; Common # So PARTNERSHIP SIGN
+3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+327E..327F ; Common # So [2] CIRCLED HANGUL IEUNG U..KOREAN STANDARD SYMBOL
+3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Common # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; Common # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32FE ; Common # So [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO
+3300..33FF ; Common # So [256] SQUARE APAATO..SQUARE GAL
+4DC0..4DFF ; Common # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A700..A716 ; Common # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+E000..F8FF ; Common # Co [6400] <private-use-E000>..<private-use-F8FF>
+FD3E ; Common # Ps ORNATE LEFT PARENTHESIS
+FD3F ; Common # Pe ORNATE RIGHT PARENTHESIS
+FDFD ; Common # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE10..FE16 ; Common # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; Common # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Common # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; Common # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; Common # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46 ; Common # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47 ; Common # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; Common # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; Common # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; Common # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; Common # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Common # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; Common # Pd SMALL EM DASH
+FE59 ; Common # Ps SMALL LEFT PARENTHESIS
+FE5A ; Common # Pe SMALL RIGHT PARENTHESIS
+FE5B ; Common # Ps SMALL LEFT CURLY BRACKET
+FE5C ; Common # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; Common # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; Common # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; Common # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; Common # Sm SMALL PLUS SIGN
+FE63 ; Common # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Common # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Common # Po SMALL REVERSE SOLIDUS
+FE69 ; Common # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; Common # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FEFF ; Common # Cf ZERO WIDTH NO-BREAK SPACE
+FF01..FF03 ; Common # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; Common # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; Common # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; Common # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; Common # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; Common # Po FULLWIDTH ASTERISK
+FF0B ; Common # Sm FULLWIDTH PLUS SIGN
+FF0C ; Common # Po FULLWIDTH COMMA
+FF0D ; Common # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; Common # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; Common # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; Common # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; Common # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; Common # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF3B ; Common # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; Common # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; Common # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; Common # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; Common # Pc FULLWIDTH LOW LINE
+FF40 ; Common # Sk FULLWIDTH GRAVE ACCENT
+FF5B ; Common # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; Common # Sm FULLWIDTH VERTICAL LINE
+FF5D ; Common # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; Common # Sm FULLWIDTH TILDE
+FF5F ; Common # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; Common # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; Common # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Common # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Common # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; Common # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF70 ; Common # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Common # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE0..FFE1 ; Common # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; Common # Sm FULLWIDTH NOT SIGN
+FFE3 ; Common # Sk FULLWIDTH MACRON
+FFE4 ; Common # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; Common # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; Common # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; Common # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; Common # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF9..FFFB ; Common # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10100..10101 ; Common # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
+10102 ; Common # So AEGEAN CHECK MARK
+10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D12A..1D164 ; Common # So [59] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D165..1D166 ; Common # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C ; Common # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D..1D172 ; Common # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1DD ; Common # So [48] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL PES SUBPUNCTIS
+1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D400..1D454 ; Common # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Common # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Common # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Common # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Common # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Common # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Common # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Common # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Common # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Common # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Common # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Common # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Common # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Common # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Common # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Common # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Common # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Common # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Common # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Common # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Common # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Common # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Common # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Common # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Common # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Common # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Common # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Common # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Common # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Common # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Common # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Common # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Common # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Common # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Common # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7C9 ; Common # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CE..1D7FF ; Common # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+E0001 ; Common # Cf LANGUAGE TAG
+E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
+F0000..FFFFD ; Common # Co [65534] <private-use-F0000>..<private-use-FFFFD>
+100000..10FFFD; Common # Co [65534] <private-use-100000>..<private-use-10FFFD>
+
+# The above property value applies to 878924 code points not listed here.
+# Total code points: 1021355
+
+# ================================================
+
+0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; Latin # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; Latin # L& FEMININE ORDINAL INDICATOR
+00BA ; Latin # L& MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; Latin # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; Latin # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; Latin # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; Latin # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; Latin # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0241 ; Latin # L& [126] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER GLOTTAL STOP
+0250..02AF ; Latin # L& [96] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8 ; Latin # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN
+1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN
+1D62..1D65 ; Latin # L& [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
+1D6B..1D77 ; Latin # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D79..1D9A ; Latin # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Latin # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1E9B ; Latin # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; Latin # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+2071 ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Latin # L& SUPERSCRIPT LATIN SMALL LETTER N
+2090..2094 ; Latin # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+212A..212B ; Latin # L& [2] KELVIN SIGN..ANGSTROM SIGN
+FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+
+# Total code points: 1037
+
+# ================================================
+
+0374..0375 ; Greek # Sk [2] GREEK NUMERAL SIGN..GREEK LOWER NUMERAL SIGN
+037A ; Greek # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Greek # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386 ; Greek # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Greek # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Greek # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Greek # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03CE ; Greek # L& [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03E1 ; Greek # L& [18] GREEK BETA SYMBOL..GREEK SMALL LETTER SAMPI
+03F0..03F5 ; Greek # L& [6] GREEK KAPPA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6 ; Greek # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..03FF ; Greek # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI
+1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI
+1D66..1D6A ; Greek # L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
+1F00..1F15 ; Greek # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Greek # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Greek # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Greek # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Greek # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Greek # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Greek # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Greek # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Greek # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; Greek # Sk GREEK KORONIS
+1FBE ; Greek # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; Greek # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Greek # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Greek # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Greek # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Greek # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Greek # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Greek # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Greek # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; Greek # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; Greek # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Greek # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; Greek # Sk [2] GREEK OXIA..GREEK DASIA
+2126 ; Greek # L& OHM SIGN
+10140..10174 ; Greek # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178 ; Greek # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189 ; Greek # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A ; Greek # No GREEK ZERO SIGN
+1D200..1D241 ; Greek # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D242..1D244 ; Greek # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D245 ; Greek # So GREEK MUSICAL LEIMMA
+
+# Total code points: 502
+
+# ================================================
+
+0400..0481 ; Cyrillic # L& [130] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER KOPPA
+0482 ; Cyrillic # So CYRILLIC THOUSANDS SIGN
+0483..0486 ; Cyrillic # Mn [4] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC PSILI PNEUMATA
+0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+048A..04CE ; Cyrillic # L& [69] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL
+04D0..04F9 ; Cyrillic # L& [42] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0500..050F ; Cyrillic # L& [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE
+1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
+1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
+
+# Total code points: 266
+
+# ================================================
+
+0531..0556 ; Armenian # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+058A ; Armenian # Pd ARMENIAN HYPHEN
+FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+
+# Total code points: 90
+
+# ================================================
+
+0591..05B9 ; Hebrew # Mn [41] HEBREW ACCENT ETNAHTA..HEBREW POINT HOLAM
+05BB..05BD ; Hebrew # Mn [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BE ; Hebrew # Po HEBREW PUNCTUATION MAQAF
+05BF ; Hebrew # Mn HEBREW POINT RAFE
+05C0 ; Hebrew # Po HEBREW PUNCTUATION PASEQ
+05C1..05C2 ; Hebrew # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C3 ; Hebrew # Po HEBREW PUNCTUATION SOF PASUQ
+05C4..05C5 ; Hebrew # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C6 ; Hebrew # Po HEBREW PUNCTUATION NUN HAFUKHA
+05C7 ; Hebrew # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA ; Hebrew # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2 ; Hebrew # Lo [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4 ; Hebrew # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+FB1D ; Hebrew # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E ; Hebrew # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28 ; Hebrew # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; Hebrew # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; Hebrew # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Hebrew # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Hebrew # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Hebrew # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Hebrew # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+
+# Total code points: 132
+
+# ================================================
+
+060B ; Arabic # Sc AFGHANI SIGN
+060D ; Arabic # Po ARABIC DATE SEPARATOR
+060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+0610..0615 ; Arabic # Mn [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
+0621..063A ; Arabic # Lo [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
+0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0656..065E ; Arabic # Mn [9] ARABIC SUBSCRIPT ALEF..ARABIC FATHA WITH TWO DOTS
+066A..066D ; Arabic # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F ; Arabic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; Arabic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ; Arabic # Po ARABIC FULL STOP
+06D5 ; Arabic # Lo ARABIC LETTER AE
+06D6..06DC ; Arabic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DE ; Arabic # Me ARABIC START OF RUB EL HIZB
+06DF..06E4 ; Arabic # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; Arabic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; Arabic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06E9 ; Arabic # So ARABIC PLACE OF SAJDAH
+06EA..06ED ; Arabic # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF ; Arabic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9 ; Arabic # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC ; Arabic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
+0750..076D ; Arabic # Lo [30] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Arabic # Sc RIAL SIGN
+FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+
+# Total code points: 966
+
+# ================================================
+
+0700..070D ; Syriac # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F ; Syriac # Cf SYRIAC ABBREVIATION MARK
+0710 ; Syriac # Lo SYRIAC LETTER ALAPH
+0711 ; Syriac # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F ; Syriac # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A ; Syriac # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..074F ; Syriac # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+
+# Total code points: 77
+
+# ================================================
+
+0780..07A5 ; Thaana # Lo [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+07A6..07B0 ; Thaana # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1 ; Thaana # Lo THAANA LETTER NAA
+
+# Total code points: 50
+
+# ================================================
+
+0901..0902 ; Devanagari # Mn [2] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903 ; Devanagari # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; Devanagari # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093C ; Devanagari # Mn DEVANAGARI SIGN NUKTA
+093D ; Devanagari # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; Devanagari # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; Devanagari # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; Devanagari # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D ; Devanagari # Mn DEVANAGARI SIGN VIRAMA
+0950 ; Devanagari # Lo DEVANAGARI OM
+0951..0954 ; Devanagari # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
+0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+097D ; Devanagari # Lo DEVANAGARI LETTER GLOTTAL STOP
+
+# Total code points: 103
+
+# ================================================
+
+0981 ; Bengali # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; Bengali # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; Bengali # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; Bengali # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; Bengali # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; Bengali # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; Bengali # Lo BENGALI LETTER LA
+09B6..09B9 ; Bengali # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC ; Bengali # Mn BENGALI SIGN NUKTA
+09BD ; Bengali # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; Bengali # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; Bengali # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; Bengali # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Bengali # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD ; Bengali # Mn BENGALI SIGN VIRAMA
+09CE ; Bengali # Lo BENGALI LETTER KHANDA TA
+09D7 ; Bengali # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; Bengali # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; Bengali # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3 ; Bengali # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF ; Bengali # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; Bengali # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3 ; Bengali # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA ; Bengali # So BENGALI ISSHAR
+
+# Total code points: 91
+
+# ================================================
+
+0A01..0A02 ; Gurmukhi # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; Gurmukhi # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; Gurmukhi # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; Gurmukhi # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; Gurmukhi # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; Gurmukhi # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; Gurmukhi # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; Gurmukhi # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; Gurmukhi # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C ; Gurmukhi # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40 ; Gurmukhi # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Gurmukhi # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; Gurmukhi # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A59..0A5C ; Gurmukhi # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; Gurmukhi # Lo GURMUKHI LETTER FA
+0A66..0A6F ; Gurmukhi # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71 ; Gurmukhi # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74 ; Gurmukhi # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+
+# Total code points: 77
+
+# ================================================
+
+0A81..0A82 ; Gujarati # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; Gujarati # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; Gujarati # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; Gujarati # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; Gujarati # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; Gujarati # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; Gujarati # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; Gujarati # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC ; Gujarati # Mn GUJARATI SIGN NUKTA
+0ABD ; Gujarati # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; Gujarati # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; Gujarati # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; Gujarati # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Gujarati # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD ; Gujarati # Mn GUJARATI SIGN VIRAMA
+0AD0 ; Gujarati # Lo GUJARATI OM
+0AE0..0AE1 ; Gujarati # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
+
+# Total code points: 83
+
+# ================================================
+
+0B01 ; Oriya # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; Oriya # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; Oriya # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; Oriya # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; Oriya # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; Oriya # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; Oriya # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; Oriya # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C ; Oriya # Mn ORIYA SIGN NUKTA
+0B3D ; Oriya # Lo ORIYA SIGN AVAGRAHA
+0B3E ; Oriya # Mc ORIYA VOWEL SIGN AA
+0B3F ; Oriya # Mn ORIYA VOWEL SIGN I
+0B40 ; Oriya # Mc ORIYA VOWEL SIGN II
+0B41..0B43 ; Oriya # Mn [3] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC R
+0B47..0B48 ; Oriya # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Oriya # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D ; Oriya # Mn ORIYA SIGN VIRAMA
+0B56 ; Oriya # Mn ORIYA AI LENGTH MARK
+0B57 ; Oriya # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; Oriya # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; Oriya # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F ; Oriya # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70 ; Oriya # So ORIYA ISSHAR
+0B71 ; Oriya # Lo ORIYA LETTER WA
+
+# Total code points: 81
+
+# ================================================
+
+0B82 ; Tamil # Mn TAMIL SIGN ANUSVARA
+0B83 ; Tamil # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; Tamil # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; Tamil # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; Tamil # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; Tamil # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; Tamil # Lo TAMIL LETTER JA
+0B9E..0B9F ; Tamil # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; Tamil # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; Tamil # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; Tamil # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF ; Tamil # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; Tamil # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; Tamil # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Tamil # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Tamil # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD ; Tamil # Mn TAMIL SIGN VIRAMA
+0BD7 ; Tamil # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF ; Tamil # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2 ; Tamil # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8 ; Tamil # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9 ; Tamil # Sc TAMIL RUPEE SIGN
+0BFA ; Tamil # So TAMIL NUMBER SIGN
+
+# Total code points: 71
+
+# ================================================
+
+0C01..0C03 ; Telugu # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C ; Telugu # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33 ; Telugu # Lo [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39 ; Telugu # Lo [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3E..0C40 ; Telugu # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; Telugu # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; Telugu # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+
+# Total code points: 80
+
+# ================================================
+
+0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; Kannada # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; Kannada # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; Kannada # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; Kannada # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC ; Kannada # Mn KANNADA SIGN NUKTA
+0CBD ; Kannada # Lo KANNADA SIGN AVAGRAHA
+0CBE ; Kannada # Mc KANNADA VOWEL SIGN AA
+0CBF ; Kannada # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; Kannada # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; Kannada # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; Kannada # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDE ; Kannada # Lo KANNADA LETTER FA
+0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+
+# Total code points: 82
+
+# ================================================
+
+0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28 ; Malayalam # Lo [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D2A..0D39 ; Malayalam # Lo [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D43 ; Malayalam # Mn [3] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC R
+0D46..0D48 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
+0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
+0D60..0D61 ; Malayalam # Lo [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+
+# Total code points: 78
+
+# ================================================
+
+0D82..0D83 ; Sinhala # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; Sinhala # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; Sinhala # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; Sinhala # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; Sinhala # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; Sinhala # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA ; Sinhala # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1 ; Sinhala # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; Sinhala # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Sinhala # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; Sinhala # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; Sinhala # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 ; Sinhala # Po SINHALA PUNCTUATION KUNDDALIYA
+
+# Total code points: 80
+
+# ================================================
+
+0E01..0E30 ; Thai # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31 ; Thai # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33 ; Thai # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A ; Thai # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45 ; Thai # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; Thai # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E ; Thai # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E4F ; Thai # Po THAI CHARACTER FONGMAN
+0E50..0E59 ; Thai # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B ; Thai # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+
+# Total code points: 86
+
+# ================================================
+
+0E81..0E82 ; Lao # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; Lao # Lo LAO LETTER KHO TAM
+0E87..0E88 ; Lao # Lo [2] LAO LETTER NGO..LAO LETTER CO
+0E8A ; Lao # Lo LAO LETTER SO TAM
+0E8D ; Lao # Lo LAO LETTER NYO
+0E94..0E97 ; Lao # Lo [4] LAO LETTER DO..LAO LETTER THO TAM
+0E99..0E9F ; Lao # Lo [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA1..0EA3 ; Lao # Lo [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5 ; Lao # Lo LAO LETTER LO LOOT
+0EA7 ; Lao # Lo LAO LETTER WO
+0EAA..0EAB ; Lao # Lo [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAD..0EB0 ; Lao # Lo [4] LAO LETTER O..LAO VOWEL SIGN A
+0EB1 ; Lao # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3 ; Lao # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9 ; Lao # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; Lao # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD ; Lao # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; Lao # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; Lao # Lm LAO KO LA
+0EC8..0ECD ; Lao # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9 ; Lao # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDD ; Lao # Lo [2] LAO HO NO..LAO HO MO
+
+# Total code points: 65
+
+# ================================================
+
+0F00 ; Tibetan # Lo TIBETAN SYLLABLE OM
+0F01..0F03 ; Tibetan # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12 ; Tibetan # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13..0F17 ; Tibetan # So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F18..0F19 ; Tibetan # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F1A..0F1F ; Tibetan # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29 ; Tibetan # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33 ; Tibetan # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34 ; Tibetan # So TIBETAN MARK BSDUS RTAGS
+0F35 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F36 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F37 ; Tibetan # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F38 ; Tibetan # So TIBETAN MARK CHE MGO
+0F39 ; Tibetan # Mn TIBETAN MARK TSA -PHRU
+0F3A ; Tibetan # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B ; Tibetan # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C ; Tibetan # Ps TIBETAN MARK ANG KHANG GYON
+0F3D ; Tibetan # Pe TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F ; Tibetan # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; Tibetan # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6A ; Tibetan # Lo [34] TIBETAN LETTER NYA..TIBETAN LETTER FIXED-FORM RA
+0F71..0F7E ; Tibetan # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; Tibetan # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84 ; Tibetan # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F85 ; Tibetan # Po TIBETAN MARK PALUTA
+0F86..0F87 ; Tibetan # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8B ; Tibetan # Lo [4] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN GRU MED RGYINGS
+0F90..0F97 ; Tibetan # Mn [8] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Tibetan # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FBE..0FC5 ; Tibetan # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC6 ; Tibetan # Mn TIBETAN SYMBOL PADMA GDAN
+0FC7..0FCC ; Tibetan # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCF ; Tibetan # So TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD1 ; Tibetan # Po [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
+
+# Total code points: 195
+
+# ================================================
+
+1000..1021 ; Myanmar # Lo [34] MYANMAR LETTER KA..MYANMAR LETTER A
+1023..1027 ; Myanmar # Lo [5] MYANMAR LETTER I..MYANMAR LETTER E
+1029..102A ; Myanmar # Lo [2] MYANMAR LETTER O..MYANMAR LETTER AU
+102C ; Myanmar # Mc MYANMAR VOWEL SIGN AA
+102D..1030 ; Myanmar # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; Myanmar # Mc MYANMAR VOWEL SIGN E
+1032 ; Myanmar # Mn MYANMAR VOWEL SIGN AI
+1036..1037 ; Myanmar # Mn [2] MYANMAR SIGN ANUSVARA..MYANMAR SIGN DOT BELOW
+1038 ; Myanmar # Mc MYANMAR SIGN VISARGA
+1039 ; Myanmar # Mn MYANMAR SIGN VIRAMA
+1040..1049 ; Myanmar # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F ; Myanmar # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055 ; Myanmar # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; Myanmar # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; Myanmar # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+
+# Total code points: 78
+
+# ================================================
+
+10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
+2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+
+# Total code points: 120
+
+# ================================================
+
+1100..1159 ; Hangul # Lo [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
+115F..11A2 ; Hangul # Lo [68] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG SSANGARAEA
+11A8..11F9 ; Hangul # Lo [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
+3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3260..327D ; Hangul # So [30] CIRCLED HANGUL KIYEOK..CIRCLED KOREAN CHARACTER JUEUI
+AC00..D7A3 ; Hangul # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+FFA0..FFBE ; Hangul # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Hangul # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+
+# Total code points: 11619
+
+# ================================================
+
+1200..1248 ; Ethiopic # Lo [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+124A..124D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; Ethiopic # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; Ethiopic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; Ethiopic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; Ethiopic # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; Ethiopic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; Ethiopic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135F ; Ethiopic # Mn ETHIOPIC COMBINING GEMINATION MARK
+1360 ; Ethiopic # So ETHIOPIC SECTION MARK
+1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F ; Ethiopic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399 ; Ethiopic # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+2D80..2D96 ; Ethiopic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+
+# Total code points: 461
+
+# ================================================
+
+13A0..13F4 ; Cherokee # Lo [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+
+# Total code points: 85
+
+# ================================================
+
+1401..166C ; Canadian_Aboriginal # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D..166E ; Canadian_Aboriginal # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+166F..1676 ; Canadian_Aboriginal # Lo [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
+
+# Total code points: 630
+
+# ================================================
+
+1680 ; Ogham # Zs OGHAM SPACE MARK
+1681..169A ; Ogham # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B ; Ogham # Ps OGHAM FEATHER MARK
+169C ; Ogham # Pe OGHAM REVERSED FEATHER MARK
+
+# Total code points: 29
+
+# ================================================
+
+16A0..16EA ; Runic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; Runic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+
+# Total code points: 78
+
+# ================================================
+
+1780..17B3 ; Khmer # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5 ; Khmer # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6 ; Khmer # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; Khmer # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; Khmer # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; Khmer # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; Khmer # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3 ; Khmer # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D4..17D6 ; Khmer # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7 ; Khmer # Lm KHMER SIGN LEK TOO
+17D8..17DA ; Khmer # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB ; Khmer # Sc KHMER CURRENCY SYMBOL RIEL
+17DC ; Khmer # Lo KHMER SIGN AVAKRAHASANYA
+17DD ; Khmer # Mn KHMER SIGN ATTHACAN
+17E0..17E9 ; Khmer # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9 ; Khmer # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+19E0..19FF ; Khmer # So [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+
+# Total code points: 146
+
+# ================================================
+
+1800..1805 ; Mongolian # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+1806 ; Mongolian # Pd MONGOLIAN TODO SOFT HYPHEN
+1807..180A ; Mongolian # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+180B..180D ; Mongolian # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; Mongolian # Zs MONGOLIAN VOWEL SEPARATOR
+1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
+1880..18A8 ; Mongolian # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 ; Mongolian # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+
+# Total code points: 155
+
+# ================================================
+
+3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
+
+# Total code points: 89
+
+# ================================================
+
+30A1..30FA ; Katakana # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FD..30FE ; Katakana # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
+30FF ; Katakana # Lo KATAKANA DIGRAPH KOTO
+31F0..31FF ; Katakana # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+
+# Total code points: 164
+
+# ================================================
+
+3105..312C ; Bopomofo # Lo [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
+31A0..31B7 ; Bopomofo # Lo [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+
+# Total code points: 64
+
+# ================================================
+
+2E80..2E99 ; Han # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; Han # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Han # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3005 ; Han # Lm IDEOGRAPHIC ITERATION MARK
+3007 ; Han # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4E00..9FBB ; Han # Lo [20924] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FBB
+F900..FA2D ; Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA30..FA6A ; Han # Lo [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 71570
+
+# ================================================
+
+A000..A014 ; Yi # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
+A015 ; Yi # Lm YI SYLLABLE WU
+A016..A48C ; Yi # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
+
+# Total code points: 1220
+
+# ================================================
+
+10300..1031E ; Old_Italic # Lo [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+10320..10323 ; Old_Italic # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+
+# Total code points: 35
+
+# ================================================
+
+10330..10349 ; Gothic # Lo [26] GOTHIC LETTER AHSA..GOTHIC LETTER OTHAL
+1034A ; Gothic # Nl GOTHIC LETTER NINE HUNDRED
+
+# Total code points: 27
+
+# ================================================
+
+10400..1044F ; Deseret # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+
+# Total code points: 80
+
+# ================================================
+
+0300..036F ; Inherited # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+064B..0655 ; Inherited # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW
+0670 ; Inherited # Mn ARABIC LETTER SUPERSCRIPT ALEF
+1DC0..1DC3 ; Inherited # Mn [4] COMBINING DOTTED GRAVE ACCENT..COMBINING SUSPENSION MARK
+200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; Inherited # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; Inherited # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20EB ; Inherited # Mn [7] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LONG DOUBLE SOLIDUS OVERLAY
+302A..302F ; Inherited # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; Inherited # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+FE00..FE0F ; Inherited # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE23 ; Inherited # Mn [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
+1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 448
+
+# ================================================
+
+1700..170C ; Tagalog # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1711 ; Tagalog # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1712..1714 ; Tagalog # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+
+# Total code points: 20
+
+# ================================================
+
+1720..1731 ; Hanunoo # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
+1732..1734 ; Hanunoo # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+
+# Total code points: 21
+
+# ================================================
+
+1740..1751 ; Buhid # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753 ; Buhid # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+
+# Total code points: 20
+
+# ================================================
+
+1760..176C ; Tagbanwa # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; Tagbanwa # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773 ; Tagbanwa # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+
+# Total code points: 18
+
+# ================================================
+
+1900..191C ; Limbu # Lo [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+1920..1922 ; Limbu # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; Limbu # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; Limbu # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; Limbu # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Limbu # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; Limbu # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; Limbu # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B ; Limbu # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1940 ; Limbu # So LIMBU SIGN LOO
+1944..1945 ; Limbu # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F ; Limbu # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+
+# Total code points: 66
+
+# ================================================
+
+1950..196D ; Tai_Le # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; Tai_Le # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+
+# Total code points: 35
+
+# ================================================
+
+10000..1000B ; Linear_B # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; Linear_B # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; Linear_B # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; Linear_B # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; Linear_B # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; Linear_B # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; Linear_B # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+
+# Total code points: 211
+
+# ================================================
+
+10380..1039D ; Ugaritic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F ; Ugaritic # Po UGARITIC WORD DIVIDER
+
+# Total code points: 31
+
+# ================================================
+
+10450..1047F ; Shavian # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+
+# Total code points: 48
+
+# ================================================
+
+10480..1049D ; Osmanya # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+104A0..104A9 ; Osmanya # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+
+# Total code points: 40
+
+# ================================================
+
+10800..10805 ; Cypriot # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; Cypriot # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; Cypriot # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; Cypriot # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; Cypriot # Lo CYPRIOT SYLLABLE ZA
+1083F ; Cypriot # Lo CYPRIOT SYLLABLE ZO
+
+# Total code points: 55
+
+# ================================================
+
+2800..28FF ; Braille # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+
+# Total code points: 256
+
+# ================================================
+
+1A00..1A16 ; Buginese # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; Buginese # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1B ; Buginese # Mc [3] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN AE
+1A1E..1A1F ; Buginese # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+
+# Total code points: 30
+
+# ================================================
+
+03E2..03EF ; Coptic # L& [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI
+2C80..2CE4 ; Coptic # L& [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CE5..2CEA ; Coptic # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CF9..2CFC ; Coptic # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD ; Coptic # No COPTIC FRACTION ONE HALF
+2CFE..2CFF ; Coptic # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+
+# Total code points: 128
+
+# ================================================
+
+1980..19A9 ; New_Tai_Lue # Lo [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA
+19B0..19C0 ; New_Tai_Lue # Mc [17] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE VOWEL SIGN IY
+19C1..19C7 ; New_Tai_Lue # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B
+19C8..19C9 ; New_Tai_Lue # Mc [2] NEW TAI LUE TONE MARK-1..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; New_Tai_Lue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DE..19DF ; New_Tai_Lue # Po [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+
+# Total code points: 80
+
+# ================================================
+
+2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+
+# Total code points: 94
+
+# ================================================
+
+2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+
+# Total code points: 55
+
+# ================================================
+
+A800..A801 ; Syloti_Nagri # Lo [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+A802 ; Syloti_Nagri # Mc SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; Syloti_Nagri # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806 ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A ; Syloti_Nagri # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; Syloti_Nagri # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; Syloti_Nagri # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Syloti_Nagri # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Syloti_Nagri # Mc SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B ; Syloti_Nagri # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+
+# Total code points: 44
+
+# ================================================
+
+103A0..103C3 ; Old_Persian # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; Old_Persian # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0 ; Old_Persian # So OLD PERSIAN WORD DIVIDER
+103D1..103D5 ; Old_Persian # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+
+# Total code points: 50
+
+# ================================================
+
+10A00 ; Kharoshthi # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; Kharoshthi # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Kharoshthi # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Kharoshthi # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; Kharoshthi # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; Kharoshthi # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33 ; Kharoshthi # Lo [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A38..10A3A ; Kharoshthi # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Kharoshthi # Mn KHAROSHTHI VIRAMA
+10A40..10A47 ; Kharoshthi # No [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A50..10A58 ; Kharoshthi # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+
+# Total code points: 65
diff --git a/Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt b/Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt
new file mode 100644
index 00000000000..11a5b1d69e1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt
@@ -0,0 +1,260 @@
+# SpecialCasing-4.1.0.txt
+# Date: 2005-03-26, 00:35:45 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see UCD.html
+#
+# Special Casing Properties
+#
+# This file is a supplement to the UnicodeData file.
+# It contains additional information about the casing of Unicode characters.
+# (For compatibility, the UnicodeData.txt file only contains case mappings for
+# characters where they are 1-1, and does not have locale-specific mappings.)
+# For more information, see the discussion of Case Mappings in the Unicode Standard.
+#
+# All code points not listed in this file that do not have a simple case mappings
+# in UnicodeData.txt map to themselves.
+# ================================================================================
+# Format
+# ================================================================================
+# The entries in this file are in the following machine-readable format:
+#
+# <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment>
+#
+# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more
+# than one character, they are separated by spaces. Other than as used to separate
+# elements, spaces are to be ignored.
+#
+# The <condition_list> is optional. Where present, it consists of one or more locale IDs
+# or contexts, separated by spaces. In these conditions:
+# - A condition list overrides the normal behavior if all of the listed conditions are true.
+# - The context is always the context of the characters in the original string,
+# NOT in the resulting string.
+# - Case distinctions in the condition list are not significant.
+# - Conditions preceded by "Not_" represent the negation of the condition.
+#
+# A locale ID is defined by taking any language tag as defined by
+# RFC 3066 (or its successor), and replacing '-' by '_'.
+#
+# A context for a character C is defined by Section 3.13 Default Case Operations,
+# on p. 89-90 of The Unicode Standard, Version 4.0, as amended by Unicode 4.1.0,
+# as specified in http://www.unicode.org/versions/Unicode4.1.0/
+#
+# Parsers of this file must be prepared to deal with future additions to this format:
+# * Additional contexts
+# * Additional fields
+# ================================================================================
+
+# ================================================================================
+# Unconditional mappings
+# ================================================================================
+
+# The German es-zed is special--the normal mapping is to SS.
+# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))
+
+00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S
+
+# Preserve canonical equivalence for I with dot. Turkic is handled below.
+
+0130; 0069 0307; 0130; 0130; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+
+# Ligatures
+
+FB00; FB00; 0046 0066; 0046 0046; # LATIN SMALL LIGATURE FF
+FB01; FB01; 0046 0069; 0046 0049; # LATIN SMALL LIGATURE FI
+FB02; FB02; 0046 006C; 0046 004C; # LATIN SMALL LIGATURE FL
+FB03; FB03; 0046 0066 0069; 0046 0046 0049; # LATIN SMALL LIGATURE FFI
+FB04; FB04; 0046 0066 006C; 0046 0046 004C; # LATIN SMALL LIGATURE FFL
+FB05; FB05; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE LONG S T
+FB06; FB06; 0053 0074; 0053 0054; # LATIN SMALL LIGATURE ST
+
+0587; 0587; 0535 0582; 0535 0552; # ARMENIAN SMALL LIGATURE ECH YIWN
+FB13; FB13; 0544 0576; 0544 0546; # ARMENIAN SMALL LIGATURE MEN NOW
+FB14; FB14; 0544 0565; 0544 0535; # ARMENIAN SMALL LIGATURE MEN ECH
+FB15; FB15; 0544 056B; 0544 053B; # ARMENIAN SMALL LIGATURE MEN INI
+FB16; FB16; 054E 0576; 054E 0546; # ARMENIAN SMALL LIGATURE VEW NOW
+FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
+
+# No corresponding uppercase precomposed character
+
+0149; 0149; 02BC 004E; 02BC 004E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0390; 0390; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03B0; 03B0; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+01F0; 01F0; 004A 030C; 004A 030C; # LATIN SMALL LETTER J WITH CARON
+1E96; 1E96; 0048 0331; 0048 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+1E97; 1E97; 0054 0308; 0054 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+1E98; 1E98; 0057 030A; 0057 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+1E99; 1E99; 0059 030A; 0059 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+1E9A; 1E9A; 0041 02BE; 0041 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+1F50; 1F50; 03A5 0313; 03A5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+1F52; 1F52; 03A5 0313 0300; 03A5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+1F54; 1F54; 03A5 0313 0301; 03A5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+1F56; 1F56; 03A5 0313 0342; 03A5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+1FB6; 1FB6; 0391 0342; 0391 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+1FC6; 1FC6; 0397 0342; 0397 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+1FD2; 1FD2; 0399 0308 0300; 0399 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD3; 1FD3; 0399 0308 0301; 0399 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6; 1FD6; 0399 0342; 0399 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
+1FD7; 1FD7; 0399 0308 0342; 0399 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE2; 1FE2; 03A5 0308 0300; 03A5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE3; 1FE3; 03A5 0308 0301; 03A5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE4; 1FE4; 03A1 0313; 03A1 0313; # GREEK SMALL LETTER RHO WITH PSILI
+1FE6; 1FE6; 03A5 0342; 03A5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+1FE7; 1FE7; 03A5 0308 0342; 03A5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF6; 1FF6; 03A9 0342; 03A9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+
+# IMPORTANT-when capitalizing iota-subscript (0345)
+# It MUST be in normalized form--moved to the end of any sequence of combining marks.
+# This is because logically it represents a following base character!
+# E.g. <iota_subscript> (<Mn> | <Mc> | <Me>)+ => (<Mn> | <Mc> | <Me>)+ <iota_subscript>
+# It should never be the first character in a word, so in titlecasing it can be left as is.
+
+# The following cases are already in the UnicodeData file, so are only commented here.
+
+# 0345; 0345; 0345; 0399; # COMBINING GREEK YPOGEGRAMMENI
+
+# All letters with YPOGEGRAMMENI (iota-subscript) or PROSGEGRAMMENI (iota adscript)
+# have special uppercases.
+# Note: characters with PROSGEGRAMMENI are actually titlecase, not uppercase!
+
+1F80; 1F80; 1F88; 1F08 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81; 1F81; 1F89; 1F09 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82; 1F82; 1F8A; 1F0A 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83; 1F83; 1F8B; 1F0B 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84; 1F84; 1F8C; 1F0C 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85; 1F85; 1F8D; 1F0D 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86; 1F86; 1F8E; 1F0E 0399; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87; 1F87; 1F8F; 1F0F 0399; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88; 1F80; 1F88; 1F08 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89; 1F81; 1F89; 1F09 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A; 1F82; 1F8A; 1F0A 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B; 1F83; 1F8B; 1F0B 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C; 1F84; 1F8C; 1F0C 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D; 1F85; 1F8D; 1F0D 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E; 1F86; 1F8E; 1F0E 0399; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F; 1F87; 1F8F; 1F0F 0399; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90; 1F90; 1F98; 1F28 0399; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91; 1F91; 1F99; 1F29 0399; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92; 1F92; 1F9A; 1F2A 0399; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93; 1F93; 1F9B; 1F2B 0399; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94; 1F94; 1F9C; 1F2C 0399; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95; 1F95; 1F9D; 1F2D 0399; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96; 1F96; 1F9E; 1F2E 0399; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97; 1F97; 1F9F; 1F2F 0399; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98; 1F90; 1F98; 1F28 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99; 1F91; 1F99; 1F29 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A; 1F92; 1F9A; 1F2A 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B; 1F93; 1F9B; 1F2B 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C; 1F94; 1F9C; 1F2C 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D; 1F95; 1F9D; 1F2D 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E; 1F96; 1F9E; 1F2E 0399; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F; 1F97; 1F9F; 1F2F 0399; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0; 1FA0; 1FA8; 1F68 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1; 1FA1; 1FA9; 1F69 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2; 1FA2; 1FAA; 1F6A 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3; 1FA3; 1FAB; 1F6B 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4; 1FA4; 1FAC; 1F6C 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5; 1FA5; 1FAD; 1F6D 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6; 1FA6; 1FAE; 1F6E 0399; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7; 1FA7; 1FAF; 1F6F 0399; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8; 1FA0; 1FA8; 1F68 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9; 1FA1; 1FA9; 1F69 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA; 1FA2; 1FAA; 1F6A 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB; 1FA3; 1FAB; 1F6B 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC; 1FA4; 1FAC; 1F6C 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD; 1FA5; 1FAD; 1F6D 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE; 1FA6; 1FAE; 1F6E 0399; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF; 1FA7; 1FAF; 1F6F 0399; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB3; 1FB3; 1FBC; 0391 0399; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FBC; 1FB3; 1FBC; 0391 0399; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC3; 1FC3; 1FCC; 0397 0399; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FCC; 1FC3; 1FCC; 0397 0399; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+
+# Some characters with YPOGEGRAMMENI also have no corresponding titlecases
+
+1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FC2; 1FC2; 1FCA 0345; 1FCA 0399; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC4; 1FC4; 0389 0345; 0389 0399; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FF2; 1FF2; 1FFA 0345; 1FFA 0399; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF4; 1FF4; 038F 0345; 038F 0399; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+
+1FB7; 1FB7; 0391 0342 0345; 0391 0342 0399; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC7; 1FC7; 0397 0342 0345; 0397 0342 0399; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+
+# ================================================================================
+# Conditional mappings
+# ================================================================================
+
+# Special case for final form of sigma
+
+03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
+
+# Note: the following cases for non-final are already in the UnicodeData file.
+
+# 03A3; 03C3; 03A3; 03A3; # GREEK CAPITAL LETTER SIGMA
+# 03C3; 03C3; 03A3; 03A3; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C2; 03A3; 03A3; # GREEK SMALL LETTER FINAL SIGMA
+
+# Note: the following cases are not included, since they would case-fold in lowercasing
+
+# 03C3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK SMALL LETTER SIGMA
+# 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
+
+# ================================================================================
+# Locale-sensitive mappings
+# ================================================================================
+
+# Lithuanian
+
+# Lithuanian retains the dot in a lowercase i when followed by accents.
+
+# Remove DOT ABOVE after "i" with upper or titlecase
+
+0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
+
+# Introduce an explicit dot above when lowercasing capital I's and J's
+# whenever there are more accents above.
+# (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
+
+0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
+004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
+012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
+00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
+00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
+0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
+
+# ================================================================================
+
+# Turkish and Azeri
+
+# I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
+# The following rules handle those cases.
+
+0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0130; 0069; 0130; 0130; az; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+
+# When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
+# This matches the behavior of the canonically equivalent I-dot_above
+
+0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
+0307; ; 0307; 0307; az After_I; # COMBINING DOT ABOVE
+
+# When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
+
+0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
+0049; 0131; 0049; 0049; az Not_Before_Dot; # LATIN CAPITAL LETTER I
+
+# When uppercasing, i turns into a dotted capital I
+
+0069; 0069; 0130; 0130; tr; # LATIN SMALL LETTER I
+0069; 0069; 0130; 0130; az; # LATIN SMALL LETTER I
+
+# Note: the following case is already in the UnicodeData file.
+
+# 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
diff --git a/Master/tlpkg/tlperl/lib/unicore/StandardizedVariants.txt b/Master/tlpkg/tlperl/lib/unicore/StandardizedVariants.txt
new file mode 100644
index 00000000000..f049159dd3f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/StandardizedVariants.txt
@@ -0,0 +1,122 @@
+# StandardizedVariants-4.1.0.txt
+# Date: 2005-03-17, 15:21:00 PST [KW]
+#
+# Specification of the variant sequences that are defined in the
+# Unicode Standard.
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2005 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Warning: Only the variation sequences specifically defined in this file
+# are sanctioned for standard use. In all other cases the variation selector
+# cannot change the visual appearance of the preceding base character from
+# what it would have had in the absence of the variation selector.
+#
+# For more information, see Section 15.6, Variation Selectors,
+# in The Unicode Standard, Version 4.0.
+#
+# Format:
+# Field 0: the variation sequence
+# Field 1: the description of the desired appearance
+# Field 2: where the appearance is only different in in particular shaping environments
+# this field lists them. The possible values are: isolate, initial, medial, final.
+# If more than one is present, there are spaces between them.
+# =============================
+
+# Mathematical
+
+2229 FE00; with serifs; # INTERSECTION
+222A FE00; with serifs; # UNION
+2268 FE00; with vertical stroke; # LESS-THAN BUT NOT EQUAL TO
+2269 FE00; with vertical stroke; # GREATER-THAN AND NOT DOUBLE EQUAL
+2272 FE00; following the slant of the lower leg; # LESS-THAN OR EQUIVALENT TO
+2273 FE00; following the slant of the lower leg; # GREATER-THAN OR EQUIVALENT TO
+#2278 FE00; with vertical stroke; # NEITHER LESS-THAN NOR GREATER-THAN
+#2279 FE00; with vertical stroke; # NEITHER GREATER-THAN NOR LESS-THAN
+228A FE00; with stroke through bottom members; # SUBSET OF WITH NOT EQUAL TO
+228B FE00; with stroke through bottom members; # SUPERSET OF WITH NOT EQUAL TO
+2293 FE00; with serifs; # SQUARE CAP
+2294 FE00; with serifs; # SQUARE CUP
+2295 FE00; with white rim; # CIRCLED PLUS
+2297 FE00; with white rim; # CIRCLED TIMES
+229C FE00; with equal sign touching the circle; # CIRCLED EQUALS
+22DA FE00; with slanted equal; # LESS-THAN EQUAL TO OR GREATER-THAN
+22DB FE00; with slanted equal; # GREATER-THAN EQUAL TO OR LESS-THAN
+2A3C FE00; tall variant with narrow foot; # INTERIOR PRODUCT
+2A3D FE00; tall variant with narrow foot; # RIGHTHAND INTERIOR PRODUCT
+2A9D FE00; with similar following the slant of the upper leg; # SIMILAR OR LESS-THAN
+2A9E FE00; with similar following the slant of the upper leg; # SIMILAR OR GREATER-THAN
+2AAC FE00; with slanted equal; # SMALLER THAN OR EQUAL TO
+2AAD FE00; with slanted equal; # LARGER THAN OR EQUAL TO
+2ACB FE00; with stroke through bottom members; # SUBSET OF ABOVE NOT EQUAL TO
+2ACC FE00; with stroke through bottom members; # SUPERSET OF ABOVE NOT EQUAL TO
+
+#Mongolian
+
+1820 180B; second form; isolate medial final # MONGOLIAN LETTER A
+1820 180C; third form; medial # MONGOLIAN LETTER A
+1821 180B; second form; initial final # MONGOLIAN LETTER E
+1822 180B; second form; medial # MONGOLIAN LETTER I
+1823 180B; second form; medial final # MONGOLIAN LETTER O
+1824 180B; second form; medial # MONGOLIAN LETTER U
+1825 180B; second form; medial final # MONGOLIAN LETTER OE
+1825 180C; third form; medial # MONGOLIAN LETTER OE
+1826 180B; second form; isolate medial final # MONGOLIAN LETTER UE
+1826 180C; third form; medial # MONGOLIAN LETTER UE
+1828 180B; second form; initial medial # MONGOLIAN LETTER NA
+1828 180C; third form; medial # MONGOLIAN LETTER NA
+1828 180D; separate form; medial # MONGOLIAN LETTER NA
+182A 180B; alternative form; final # MONGOLIAN LETTER BA
+182C 180B; second form; initial medial # MONGOLIAN LETTER QA
+182C 180B; feminine second form; isolate # MONGOLIAN LETTER QA
+182C 180C; third form; medial # MONGOLIAN LETTER QA
+182C 180D; fourth form; medial # MONGOLIAN LETTER QA
+182D 180B; second form; initial medial # MONGOLIAN LETTER GA
+182D 180B; feminine form; final # MONGOLIAN LETTER GA
+182D 180C; third form; medial # MONGOLIAN LETTER GA
+182D 180D; feminine form; medial # MONGOLIAN LETTER GA
+1830 180B; second form; final # MONGOLIAN LETTER SA
+1830 180C; third form; final # MONGOLIAN LETTER SA
+1832 180B; second form; medial # MONGOLIAN LETTER TA
+1833 180B; second form; initial medial final # MONGOLIAN LETTER DA
+1835 180B; second form; medial # MONGOLIAN LETTER JA
+1836 180B; second form; initial medial # # MONGOLIAN LETTER YA
+1836 180C; third form; medial # MONGOLIAN LETTER YA
+1838 180B; second form; final # MONGOLIAN LETTER WA
+1844 180B; second form; medial # MONGOLIAN LETTER TODO E
+1845 180B; second form; medial # MONGOLIAN LETTER TODO I
+1846 180B; second form; medial # MONGOLIAN LETTER TODO O
+1847 180B; second form; isolate medial final # MONGOLIAN LETTER TODO U
+1847 180C; third form; medial # MONGOLIAN LETTER TODO U
+1848 180B; second form; medial # MONGOLIAN LETTER TODO OE
+1849 180B; second form; isolate medial # MONGOLIAN LETTER TODO UE
+184D 180B; feminine form; initial medial # MONGOLIAN LETTER TODO QA
+184E 180B; second form; medial # MONGOLIAN LETTER TODO GA
+185D 180B; second form; medial final # MONGOLIAN LETTER SIBE E
+185E 180B; second form; medial final # MONGOLIAN LETTER SIBE I
+185E 180C; third form; medial final # MONGOLIAN LETTER SIBE I
+1860 180B; second form; medial final # MONGOLIAN LETTER SIBE UE
+1863 180B; second form; medial # MONGOLIAN LETTER SIBE KA
+1868 180B; second form; initial medial # MONGOLIAN LETTER SIBE TA
+1868 180C; third form; medial # MONGOLIAN LETTER SIBE TA
+1869 180B; second form; initial medial # MONGOLIAN LETTER SIBE DA
+186F 180B; second form; initial medial # MONGOLIAN LETTER SIBE ZA
+1873 180B; second form; medial final # MONGOLIAN LETTER MANCHU I
+1873 180C; third form; medial final # MONGOLIAN LETTER MANCHU I
+1873 180D; fourth form; medial # MONGOLIAN LETTER MANCHU I
+1874 180B; second form; medial # MONGOLIAN LETTER MANCHU KA
+1874 180B; feminine first final form; final # MONGOLIAN LETTER MANCHU KA
+1874 180C; feminine first medial form; medial # MONGOLIAN LETTER MANCHU KA
+1874 180C; feminine second final form; final # MONGOLIAN LETTER MANCHU KA
+1874 180D; feminine second medial form; medial # MONGOLIAN LETTER MANCHU KA
+1876 180B; second form; initial medial # MONGOLIAN LETTER MANCHU FA
+1880 180B; second form; # MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+1881 180B; second form; # MONGOLIAN LETTER ALI GALI VISARGA ONE
+1887 180B; second form; isolate final # MONGOLIAN LETTER ALI GALI A
+1887 180C; third form; final # MONGOLIAN LETTER ALI GALI A
+1887 180D; fourth form; final # MONGOLIAN LETTER ALI GALI A
+1888 180B; second form; final # MONGOLIAN LETTER ALI GALI I
+188A 180B; second form; initial medial # MONGOLIAN LETTER ALI GALI NGA
diff --git a/Master/tlpkg/tlperl/lib/unicore/To/Digit.pl b/Master/tlpkg/tlperl/lib/unicore/To/Digit.pl
new file mode 100644
index 00000000000..25af374eadf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/To/Digit.pl
@@ -0,0 +1,276 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+return <<'END';
+0030 0
+0031 1
+0032 2
+0033 3
+0034 4
+0035 5
+0036 6
+0037 7
+0038 8
+0039 9
+0660 0
+0661 1
+0662 2
+0663 3
+0664 4
+0665 5
+0666 6
+0667 7
+0668 8
+0669 9
+06F0 0
+06F1 1
+06F2 2
+06F3 3
+06F4 4
+06F5 5
+06F6 6
+06F7 7
+06F8 8
+06F9 9
+0966 0
+0967 1
+0968 2
+0969 3
+096A 4
+096B 5
+096C 6
+096D 7
+096E 8
+096F 9
+09E6 0
+09E7 1
+09E8 2
+09E9 3
+09EA 4
+09EB 5
+09EC 6
+09ED 7
+09EE 8
+09EF 9
+0A66 0
+0A67 1
+0A68 2
+0A69 3
+0A6A 4
+0A6B 5
+0A6C 6
+0A6D 7
+0A6E 8
+0A6F 9
+0AE6 0
+0AE7 1
+0AE8 2
+0AE9 3
+0AEA 4
+0AEB 5
+0AEC 6
+0AED 7
+0AEE 8
+0AEF 9
+0B66 0
+0B67 1
+0B68 2
+0B69 3
+0B6A 4
+0B6B 5
+0B6C 6
+0B6D 7
+0B6E 8
+0B6F 9
+0BE6 0
+0BE7 1
+0BE8 2
+0BE9 3
+0BEA 4
+0BEB 5
+0BEC 6
+0BED 7
+0BEE 8
+0BEF 9
+0C66 0
+0C67 1
+0C68 2
+0C69 3
+0C6A 4
+0C6B 5
+0C6C 6
+0C6D 7
+0C6E 8
+0C6F 9
+0CE6 0
+0CE7 1
+0CE8 2
+0CE9 3
+0CEA 4
+0CEB 5
+0CEC 6
+0CED 7
+0CEE 8
+0CEF 9
+0D66 0
+0D67 1
+0D68 2
+0D69 3
+0D6A 4
+0D6B 5
+0D6C 6
+0D6D 7
+0D6E 8
+0D6F 9
+0E50 0
+0E51 1
+0E52 2
+0E53 3
+0E54 4
+0E55 5
+0E56 6
+0E57 7
+0E58 8
+0E59 9
+0ED0 0
+0ED1 1
+0ED2 2
+0ED3 3
+0ED4 4
+0ED5 5
+0ED6 6
+0ED7 7
+0ED8 8
+0ED9 9
+0F20 0
+0F21 1
+0F22 2
+0F23 3
+0F24 4
+0F25 5
+0F26 6
+0F27 7
+0F28 8
+0F29 9
+1040 0
+1041 1
+1042 2
+1043 3
+1044 4
+1045 5
+1046 6
+1047 7
+1048 8
+1049 9
+17E0 0
+17E1 1
+17E2 2
+17E3 3
+17E4 4
+17E5 5
+17E6 6
+17E7 7
+17E8 8
+17E9 9
+1810 0
+1811 1
+1812 2
+1813 3
+1814 4
+1815 5
+1816 6
+1817 7
+1818 8
+1819 9
+1946 0
+1947 1
+1948 2
+1949 3
+194A 4
+194B 5
+194C 6
+194D 7
+194E 8
+194F 9
+19D0 0
+19D1 1
+19D2 2
+19D3 3
+19D4 4
+19D5 5
+19D6 6
+19D7 7
+19D8 8
+19D9 9
+FF10 0
+FF11 1
+FF12 2
+FF13 3
+FF14 4
+FF15 5
+FF16 6
+FF17 7
+FF18 8
+FF19 9
+104A0 0
+104A1 1
+104A2 2
+104A3 3
+104A4 4
+104A5 5
+104A6 6
+104A7 7
+104A8 8
+104A9 9
+1D7CE 0
+1D7CF 1
+1D7D0 2
+1D7D1 3
+1D7D2 4
+1D7D3 5
+1D7D4 6
+1D7D5 7
+1D7D6 8
+1D7D7 9
+1D7D8 0
+1D7D9 1
+1D7DA 2
+1D7DB 3
+1D7DC 4
+1D7DD 5
+1D7DE 6
+1D7DF 7
+1D7E0 8
+1D7E1 9
+1D7E2 0
+1D7E3 1
+1D7E4 2
+1D7E5 3
+1D7E6 4
+1D7E7 5
+1D7E8 6
+1D7E9 7
+1D7EA 8
+1D7EB 9
+1D7EC 0
+1D7ED 1
+1D7EE 2
+1D7EF 3
+1D7F0 4
+1D7F1 5
+1D7F2 6
+1D7F3 7
+1D7F4 8
+1D7F5 9
+1D7F6 0
+1D7F7 1
+1D7F8 2
+1D7F9 3
+1D7FA 4
+1D7FB 5
+1D7FC 6
+1D7FD 7
+1D7FE 8
+1D7FF 9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/To/Fold.pl b/Master/tlpkg/tlperl/lib/unicore/To/Fold.pl
new file mode 100644
index 00000000000..4555e9fd5bd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/To/Fold.pl
@@ -0,0 +1,993 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+# The ke UTF-8 _bytes_, the value UTF-8 (speed hack)
+%utf8::ToSpecFold =
+(
+"\xC3\x9F" => "\x{0073}\x{0073}",
+"\xC4\xB0" => "\x{0069}\x{0307}",
+"\xC5\x89" => "\x{02BC}\x{006E}",
+"\xC7\xB0" => "\x{006A}\x{030C}",
+"\xCE\x90" => "\x{03B9}\x{0308}\x{0301}",
+"\xCE\xB0" => "\x{03C5}\x{0308}\x{0301}",
+"\xD6\x87" => "\x{0565}\x{0582}",
+"\xE1\xBA\x96" => "\x{0068}\x{0331}",
+"\xE1\xBA\x97" => "\x{0074}\x{0308}",
+"\xE1\xBA\x98" => "\x{0077}\x{030A}",
+"\xE1\xBA\x99" => "\x{0079}\x{030A}",
+"\xE1\xBA\x9A" => "\x{0061}\x{02BE}",
+"\xE1\xBD\x90" => "\x{03C5}\x{0313}",
+"\xE1\xBD\x92" => "\x{03C5}\x{0313}\x{0300}",
+"\xE1\xBD\x94" => "\x{03C5}\x{0313}\x{0301}",
+"\xE1\xBD\x96" => "\x{03C5}\x{0313}\x{0342}",
+"\xE1\xBE\x80" => "\x{1F00}\x{03B9}",
+"\xE1\xBE\x81" => "\x{1F01}\x{03B9}",
+"\xE1\xBE\x82" => "\x{1F02}\x{03B9}",
+"\xE1\xBE\x83" => "\x{1F03}\x{03B9}",
+"\xE1\xBE\x84" => "\x{1F04}\x{03B9}",
+"\xE1\xBE\x85" => "\x{1F05}\x{03B9}",
+"\xE1\xBE\x86" => "\x{1F06}\x{03B9}",
+"\xE1\xBE\x87" => "\x{1F07}\x{03B9}",
+"\xE1\xBE\x88" => "\x{1F00}\x{03B9}",
+"\xE1\xBE\x89" => "\x{1F01}\x{03B9}",
+"\xE1\xBE\x8A" => "\x{1F02}\x{03B9}",
+"\xE1\xBE\x8B" => "\x{1F03}\x{03B9}",
+"\xE1\xBE\x8C" => "\x{1F04}\x{03B9}",
+"\xE1\xBE\x8D" => "\x{1F05}\x{03B9}",
+"\xE1\xBE\x8E" => "\x{1F06}\x{03B9}",
+"\xE1\xBE\x8F" => "\x{1F07}\x{03B9}",
+"\xE1\xBE\x90" => "\x{1F20}\x{03B9}",
+"\xE1\xBE\x91" => "\x{1F21}\x{03B9}",
+"\xE1\xBE\x92" => "\x{1F22}\x{03B9}",
+"\xE1\xBE\x93" => "\x{1F23}\x{03B9}",
+"\xE1\xBE\x94" => "\x{1F24}\x{03B9}",
+"\xE1\xBE\x95" => "\x{1F25}\x{03B9}",
+"\xE1\xBE\x96" => "\x{1F26}\x{03B9}",
+"\xE1\xBE\x97" => "\x{1F27}\x{03B9}",
+"\xE1\xBE\x98" => "\x{1F20}\x{03B9}",
+"\xE1\xBE\x99" => "\x{1F21}\x{03B9}",
+"\xE1\xBE\x9A" => "\x{1F22}\x{03B9}",
+"\xE1\xBE\x9B" => "\x{1F23}\x{03B9}",
+"\xE1\xBE\x9C" => "\x{1F24}\x{03B9}",
+"\xE1\xBE\x9D" => "\x{1F25}\x{03B9}",
+"\xE1\xBE\x9E" => "\x{1F26}\x{03B9}",
+"\xE1\xBE\x9F" => "\x{1F27}\x{03B9}",
+"\xE1\xBE\xA0" => "\x{1F60}\x{03B9}",
+"\xE1\xBE\xA1" => "\x{1F61}\x{03B9}",
+"\xE1\xBE\xA2" => "\x{1F62}\x{03B9}",
+"\xE1\xBE\xA3" => "\x{1F63}\x{03B9}",
+"\xE1\xBE\xA4" => "\x{1F64}\x{03B9}",
+"\xE1\xBE\xA5" => "\x{1F65}\x{03B9}",
+"\xE1\xBE\xA6" => "\x{1F66}\x{03B9}",
+"\xE1\xBE\xA7" => "\x{1F67}\x{03B9}",
+"\xE1\xBE\xA8" => "\x{1F60}\x{03B9}",
+"\xE1\xBE\xA9" => "\x{1F61}\x{03B9}",
+"\xE1\xBE\xAA" => "\x{1F62}\x{03B9}",
+"\xE1\xBE\xAB" => "\x{1F63}\x{03B9}",
+"\xE1\xBE\xAC" => "\x{1F64}\x{03B9}",
+"\xE1\xBE\xAD" => "\x{1F65}\x{03B9}",
+"\xE1\xBE\xAE" => "\x{1F66}\x{03B9}",
+"\xE1\xBE\xAF" => "\x{1F67}\x{03B9}",
+"\xE1\xBE\xB2" => "\x{1F70}\x{03B9}",
+"\xE1\xBE\xB3" => "\x{03B1}\x{03B9}",
+"\xE1\xBE\xB4" => "\x{03AC}\x{03B9}",
+"\xE1\xBE\xB6" => "\x{03B1}\x{0342}",
+"\xE1\xBE\xB7" => "\x{03B1}\x{0342}\x{03B9}",
+"\xE1\xBE\xBC" => "\x{03B1}\x{03B9}",
+"\xE1\xBF\x82" => "\x{1F74}\x{03B9}",
+"\xE1\xBF\x83" => "\x{03B7}\x{03B9}",
+"\xE1\xBF\x84" => "\x{03AE}\x{03B9}",
+"\xE1\xBF\x86" => "\x{03B7}\x{0342}",
+"\xE1\xBF\x87" => "\x{03B7}\x{0342}\x{03B9}",
+"\xE1\xBF\x8C" => "\x{03B7}\x{03B9}",
+"\xE1\xBF\x92" => "\x{03B9}\x{0308}\x{0300}",
+"\xE1\xBF\x93" => "\x{03B9}\x{0308}\x{0301}",
+"\xE1\xBF\x96" => "\x{03B9}\x{0342}",
+"\xE1\xBF\x97" => "\x{03B9}\x{0308}\x{0342}",
+"\xE1\xBF\xA2" => "\x{03C5}\x{0308}\x{0300}",
+"\xE1\xBF\xA3" => "\x{03C5}\x{0308}\x{0301}",
+"\xE1\xBF\xA4" => "\x{03C1}\x{0313}",
+"\xE1\xBF\xA6" => "\x{03C5}\x{0342}",
+"\xE1\xBF\xA7" => "\x{03C5}\x{0308}\x{0342}",
+"\xE1\xBF\xB2" => "\x{1F7C}\x{03B9}",
+"\xE1\xBF\xB3" => "\x{03C9}\x{03B9}",
+"\xE1\xBF\xB4" => "\x{03CE}\x{03B9}",
+"\xE1\xBF\xB6" => "\x{03C9}\x{0342}",
+"\xE1\xBF\xB7" => "\x{03C9}\x{0342}\x{03B9}",
+"\xE1\xBF\xBC" => "\x{03C9}\x{03B9}",
+"\xEF\xAC\x80" => "\x{0066}\x{0066}",
+"\xEF\xAC\x81" => "\x{0066}\x{0069}",
+"\xEF\xAC\x82" => "\x{0066}\x{006C}",
+"\xEF\xAC\x83" => "\x{0066}\x{0066}\x{0069}",
+"\xEF\xAC\x84" => "\x{0066}\x{0066}\x{006C}",
+"\xEF\xAC\x85" => "\x{0073}\x{0074}",
+"\xEF\xAC\x86" => "\x{0073}\x{0074}",
+"\xEF\xAC\x93" => "\x{0574}\x{0576}",
+"\xEF\xAC\x94" => "\x{0574}\x{0565}",
+"\xEF\xAC\x95" => "\x{0574}\x{056B}",
+"\xEF\xAC\x96" => "\x{057E}\x{0576}",
+"\xEF\xAC\x97" => "\x{0574}\x{056D}",
+);
+
+return <<'END';
+0041 0061
+0042 0062
+0043 0063
+0044 0064
+0045 0065
+0046 0066
+0047 0067
+0048 0068
+0049 0069
+004A 006A
+004B 006B
+004C 006C
+004D 006D
+004E 006E
+004F 006F
+0050 0070
+0051 0071
+0052 0072
+0053 0073
+0054 0074
+0055 0075
+0056 0076
+0057 0077
+0058 0078
+0059 0079
+005A 007A
+00B5 03BC
+00C0 00E0
+00C1 00E1
+00C2 00E2
+00C3 00E3
+00C4 00E4
+00C5 00E5
+00C6 00E6
+00C7 00E7
+00C8 00E8
+00C9 00E9
+00CA 00EA
+00CB 00EB
+00CC 00EC
+00CD 00ED
+00CE 00EE
+00CF 00EF
+00D0 00F0
+00D1 00F1
+00D2 00F2
+00D3 00F3
+00D4 00F4
+00D5 00F5
+00D6 00F6
+00D8 00F8
+00D9 00F9
+00DA 00FA
+00DB 00FB
+00DC 00FC
+00DD 00FD
+00DE 00FE
+0100 0101
+0102 0103
+0104 0105
+0106 0107
+0108 0109
+010A 010B
+010C 010D
+010E 010F
+0110 0111
+0112 0113
+0114 0115
+0116 0117
+0118 0119
+011A 011B
+011C 011D
+011E 011F
+0120 0121
+0122 0123
+0124 0125
+0126 0127
+0128 0129
+012A 012B
+012C 012D
+012E 012F
+0132 0133
+0134 0135
+0136 0137
+0139 013A
+013B 013C
+013D 013E
+013F 0140
+0141 0142
+0143 0144
+0145 0146
+0147 0148
+014A 014B
+014C 014D
+014E 014F
+0150 0151
+0152 0153
+0154 0155
+0156 0157
+0158 0159
+015A 015B
+015C 015D
+015E 015F
+0160 0161
+0162 0163
+0164 0165
+0166 0167
+0168 0169
+016A 016B
+016C 016D
+016E 016F
+0170 0171
+0172 0173
+0174 0175
+0176 0177
+0178 00FF
+0179 017A
+017B 017C
+017D 017E
+017F 0073
+0181 0253
+0182 0183
+0184 0185
+0186 0254
+0187 0188
+0189 0256
+018A 0257
+018B 018C
+018E 01DD
+018F 0259
+0190 025B
+0191 0192
+0193 0260
+0194 0263
+0196 0269
+0197 0268
+0198 0199
+019C 026F
+019D 0272
+019F 0275
+01A0 01A1
+01A2 01A3
+01A4 01A5
+01A6 0280
+01A7 01A8
+01A9 0283
+01AC 01AD
+01AE 0288
+01AF 01B0
+01B1 028A
+01B2 028B
+01B3 01B4
+01B5 01B6
+01B7 0292
+01B8 01B9
+01BC 01BD
+01C4 01C6
+01C5 01C6
+01C7 01C9
+01C8 01C9
+01CA 01CC
+01CB 01CC
+01CD 01CE
+01CF 01D0
+01D1 01D2
+01D3 01D4
+01D5 01D6
+01D7 01D8
+01D9 01DA
+01DB 01DC
+01DE 01DF
+01E0 01E1
+01E2 01E3
+01E4 01E5
+01E6 01E7
+01E8 01E9
+01EA 01EB
+01EC 01ED
+01EE 01EF
+01F1 01F3
+01F2 01F3
+01F4 01F5
+01F6 0195
+01F7 01BF
+01F8 01F9
+01FA 01FB
+01FC 01FD
+01FE 01FF
+0200 0201
+0202 0203
+0204 0205
+0206 0207
+0208 0209
+020A 020B
+020C 020D
+020E 020F
+0210 0211
+0212 0213
+0214 0215
+0216 0217
+0218 0219
+021A 021B
+021C 021D
+021E 021F
+0220 019E
+0222 0223
+0224 0225
+0226 0227
+0228 0229
+022A 022B
+022C 022D
+022E 022F
+0230 0231
+0232 0233
+023B 023C
+023D 019A
+0241 0294
+0345 03B9
+0386 03AC
+0388 03AD
+0389 03AE
+038A 03AF
+038C 03CC
+038E 03CD
+038F 03CE
+0391 03B1
+0392 03B2
+0393 03B3
+0394 03B4
+0395 03B5
+0396 03B6
+0397 03B7
+0398 03B8
+0399 03B9
+039A 03BA
+039B 03BB
+039C 03BC
+039D 03BD
+039E 03BE
+039F 03BF
+03A0 03C0
+03A1 03C1
+03A3 03C3
+03A4 03C4
+03A5 03C5
+03A6 03C6
+03A7 03C7
+03A8 03C8
+03A9 03C9
+03AA 03CA
+03AB 03CB
+03C2 03C3
+03D0 03B2
+03D1 03B8
+03D5 03C6
+03D6 03C0
+03D8 03D9
+03DA 03DB
+03DC 03DD
+03DE 03DF
+03E0 03E1
+03E2 03E3
+03E4 03E5
+03E6 03E7
+03E8 03E9
+03EA 03EB
+03EC 03ED
+03EE 03EF
+03F0 03BA
+03F1 03C1
+03F4 03B8
+03F5 03B5
+03F7 03F8
+03F9 03F2
+03FA 03FB
+0400 0450
+0401 0451
+0402 0452
+0403 0453
+0404 0454
+0405 0455
+0406 0456
+0407 0457
+0408 0458
+0409 0459
+040A 045A
+040B 045B
+040C 045C
+040D 045D
+040E 045E
+040F 045F
+0410 0430
+0411 0431
+0412 0432
+0413 0433
+0414 0434
+0415 0435
+0416 0436
+0417 0437
+0418 0438
+0419 0439
+041A 043A
+041B 043B
+041C 043C
+041D 043D
+041E 043E
+041F 043F
+0420 0440
+0421 0441
+0422 0442
+0423 0443
+0424 0444
+0425 0445
+0426 0446
+0427 0447
+0428 0448
+0429 0449
+042A 044A
+042B 044B
+042C 044C
+042D 044D
+042E 044E
+042F 044F
+0460 0461
+0462 0463
+0464 0465
+0466 0467
+0468 0469
+046A 046B
+046C 046D
+046E 046F
+0470 0471
+0472 0473
+0474 0475
+0476 0477
+0478 0479
+047A 047B
+047C 047D
+047E 047F
+0480 0481
+048A 048B
+048C 048D
+048E 048F
+0490 0491
+0492 0493
+0494 0495
+0496 0497
+0498 0499
+049A 049B
+049C 049D
+049E 049F
+04A0 04A1
+04A2 04A3
+04A4 04A5
+04A6 04A7
+04A8 04A9
+04AA 04AB
+04AC 04AD
+04AE 04AF
+04B0 04B1
+04B2 04B3
+04B4 04B5
+04B6 04B7
+04B8 04B9
+04BA 04BB
+04BC 04BD
+04BE 04BF
+04C1 04C2
+04C3 04C4
+04C5 04C6
+04C7 04C8
+04C9 04CA
+04CB 04CC
+04CD 04CE
+04D0 04D1
+04D2 04D3
+04D4 04D5
+04D6 04D7
+04D8 04D9
+04DA 04DB
+04DC 04DD
+04DE 04DF
+04E0 04E1
+04E2 04E3
+04E4 04E5
+04E6 04E7
+04E8 04E9
+04EA 04EB
+04EC 04ED
+04EE 04EF
+04F0 04F1
+04F2 04F3
+04F4 04F5
+04F6 04F7
+04F8 04F9
+0500 0501
+0502 0503
+0504 0505
+0506 0507
+0508 0509
+050A 050B
+050C 050D
+050E 050F
+0531 0561
+0532 0562
+0533 0563
+0534 0564
+0535 0565
+0536 0566
+0537 0567
+0538 0568
+0539 0569
+053A 056A
+053B 056B
+053C 056C
+053D 056D
+053E 056E
+053F 056F
+0540 0570
+0541 0571
+0542 0572
+0543 0573
+0544 0574
+0545 0575
+0546 0576
+0547 0577
+0548 0578
+0549 0579
+054A 057A
+054B 057B
+054C 057C
+054D 057D
+054E 057E
+054F 057F
+0550 0580
+0551 0581
+0552 0582
+0553 0583
+0554 0584
+0555 0585
+0556 0586
+10A0 2D00
+10A1 2D01
+10A2 2D02
+10A3 2D03
+10A4 2D04
+10A5 2D05
+10A6 2D06
+10A7 2D07
+10A8 2D08
+10A9 2D09
+10AA 2D0A
+10AB 2D0B
+10AC 2D0C
+10AD 2D0D
+10AE 2D0E
+10AF 2D0F
+10B0 2D10
+10B1 2D11
+10B2 2D12
+10B3 2D13
+10B4 2D14
+10B5 2D15
+10B6 2D16
+10B7 2D17
+10B8 2D18
+10B9 2D19
+10BA 2D1A
+10BB 2D1B
+10BC 2D1C
+10BD 2D1D
+10BE 2D1E
+10BF 2D1F
+10C0 2D20
+10C1 2D21
+10C2 2D22
+10C3 2D23
+10C4 2D24
+10C5 2D25
+1E00 1E01
+1E02 1E03
+1E04 1E05
+1E06 1E07
+1E08 1E09
+1E0A 1E0B
+1E0C 1E0D
+1E0E 1E0F
+1E10 1E11
+1E12 1E13
+1E14 1E15
+1E16 1E17
+1E18 1E19
+1E1A 1E1B
+1E1C 1E1D
+1E1E 1E1F
+1E20 1E21
+1E22 1E23
+1E24 1E25
+1E26 1E27
+1E28 1E29
+1E2A 1E2B
+1E2C 1E2D
+1E2E 1E2F
+1E30 1E31
+1E32 1E33
+1E34 1E35
+1E36 1E37
+1E38 1E39
+1E3A 1E3B
+1E3C 1E3D
+1E3E 1E3F
+1E40 1E41
+1E42 1E43
+1E44 1E45
+1E46 1E47
+1E48 1E49
+1E4A 1E4B
+1E4C 1E4D
+1E4E 1E4F
+1E50 1E51
+1E52 1E53
+1E54 1E55
+1E56 1E57
+1E58 1E59
+1E5A 1E5B
+1E5C 1E5D
+1E5E 1E5F
+1E60 1E61
+1E62 1E63
+1E64 1E65
+1E66 1E67
+1E68 1E69
+1E6A 1E6B
+1E6C 1E6D
+1E6E 1E6F
+1E70 1E71
+1E72 1E73
+1E74 1E75
+1E76 1E77
+1E78 1E79
+1E7A 1E7B
+1E7C 1E7D
+1E7E 1E7F
+1E80 1E81
+1E82 1E83
+1E84 1E85
+1E86 1E87
+1E88 1E89
+1E8A 1E8B
+1E8C 1E8D
+1E8E 1E8F
+1E90 1E91
+1E92 1E93
+1E94 1E95
+1E9B 1E61
+1EA0 1EA1
+1EA2 1EA3
+1EA4 1EA5
+1EA6 1EA7
+1EA8 1EA9
+1EAA 1EAB
+1EAC 1EAD
+1EAE 1EAF
+1EB0 1EB1
+1EB2 1EB3
+1EB4 1EB5
+1EB6 1EB7
+1EB8 1EB9
+1EBA 1EBB
+1EBC 1EBD
+1EBE 1EBF
+1EC0 1EC1
+1EC2 1EC3
+1EC4 1EC5
+1EC6 1EC7
+1EC8 1EC9
+1ECA 1ECB
+1ECC 1ECD
+1ECE 1ECF
+1ED0 1ED1
+1ED2 1ED3
+1ED4 1ED5
+1ED6 1ED7
+1ED8 1ED9
+1EDA 1EDB
+1EDC 1EDD
+1EDE 1EDF
+1EE0 1EE1
+1EE2 1EE3
+1EE4 1EE5
+1EE6 1EE7
+1EE8 1EE9
+1EEA 1EEB
+1EEC 1EED
+1EEE 1EEF
+1EF0 1EF1
+1EF2 1EF3
+1EF4 1EF5
+1EF6 1EF7
+1EF8 1EF9
+1F08 1F00
+1F09 1F01
+1F0A 1F02
+1F0B 1F03
+1F0C 1F04
+1F0D 1F05
+1F0E 1F06
+1F0F 1F07
+1F18 1F10
+1F19 1F11
+1F1A 1F12
+1F1B 1F13
+1F1C 1F14
+1F1D 1F15
+1F28 1F20
+1F29 1F21
+1F2A 1F22
+1F2B 1F23
+1F2C 1F24
+1F2D 1F25
+1F2E 1F26
+1F2F 1F27
+1F38 1F30
+1F39 1F31
+1F3A 1F32
+1F3B 1F33
+1F3C 1F34
+1F3D 1F35
+1F3E 1F36
+1F3F 1F37
+1F48 1F40
+1F49 1F41
+1F4A 1F42
+1F4B 1F43
+1F4C 1F44
+1F4D 1F45
+1F59 1F51
+1F5B 1F53
+1F5D 1F55
+1F5F 1F57
+1F68 1F60
+1F69 1F61
+1F6A 1F62
+1F6B 1F63
+1F6C 1F64
+1F6D 1F65
+1F6E 1F66
+1F6F 1F67
+1FB8 1FB0
+1FB9 1FB1
+1FBA 1F70
+1FBB 1F71
+1FBE 03B9
+1FC8 1F72
+1FC9 1F73
+1FCA 1F74
+1FCB 1F75
+1FD8 1FD0
+1FD9 1FD1
+1FDA 1F76
+1FDB 1F77
+1FE8 1FE0
+1FE9 1FE1
+1FEA 1F7A
+1FEB 1F7B
+1FEC 1FE5
+1FF8 1F78
+1FF9 1F79
+1FFA 1F7C
+1FFB 1F7D
+2126 03C9
+212A 006B
+212B 00E5
+2160 2170
+2161 2171
+2162 2172
+2163 2173
+2164 2174
+2165 2175
+2166 2176
+2167 2177
+2168 2178
+2169 2179
+216A 217A
+216B 217B
+216C 217C
+216D 217D
+216E 217E
+216F 217F
+24B6 24D0
+24B7 24D1
+24B8 24D2
+24B9 24D3
+24BA 24D4
+24BB 24D5
+24BC 24D6
+24BD 24D7
+24BE 24D8
+24BF 24D9
+24C0 24DA
+24C1 24DB
+24C2 24DC
+24C3 24DD
+24C4 24DE
+24C5 24DF
+24C6 24E0
+24C7 24E1
+24C8 24E2
+24C9 24E3
+24CA 24E4
+24CB 24E5
+24CC 24E6
+24CD 24E7
+24CE 24E8
+24CF 24E9
+2C00 2C30
+2C01 2C31
+2C02 2C32
+2C03 2C33
+2C04 2C34
+2C05 2C35
+2C06 2C36
+2C07 2C37
+2C08 2C38
+2C09 2C39
+2C0A 2C3A
+2C0B 2C3B
+2C0C 2C3C
+2C0D 2C3D
+2C0E 2C3E
+2C0F 2C3F
+2C10 2C40
+2C11 2C41
+2C12 2C42
+2C13 2C43
+2C14 2C44
+2C15 2C45
+2C16 2C46
+2C17 2C47
+2C18 2C48
+2C19 2C49
+2C1A 2C4A
+2C1B 2C4B
+2C1C 2C4C
+2C1D 2C4D
+2C1E 2C4E
+2C1F 2C4F
+2C20 2C50
+2C21 2C51
+2C22 2C52
+2C23 2C53
+2C24 2C54
+2C25 2C55
+2C26 2C56
+2C27 2C57
+2C28 2C58
+2C29 2C59
+2C2A 2C5A
+2C2B 2C5B
+2C2C 2C5C
+2C2D 2C5D
+2C2E 2C5E
+2C80 2C81
+2C82 2C83
+2C84 2C85
+2C86 2C87
+2C88 2C89
+2C8A 2C8B
+2C8C 2C8D
+2C8E 2C8F
+2C90 2C91
+2C92 2C93
+2C94 2C95
+2C96 2C97
+2C98 2C99
+2C9A 2C9B
+2C9C 2C9D
+2C9E 2C9F
+2CA0 2CA1
+2CA2 2CA3
+2CA4 2CA5
+2CA6 2CA7
+2CA8 2CA9
+2CAA 2CAB
+2CAC 2CAD
+2CAE 2CAF
+2CB0 2CB1
+2CB2 2CB3
+2CB4 2CB5
+2CB6 2CB7
+2CB8 2CB9
+2CBA 2CBB
+2CBC 2CBD
+2CBE 2CBF
+2CC0 2CC1
+2CC2 2CC3
+2CC4 2CC5
+2CC6 2CC7
+2CC8 2CC9
+2CCA 2CCB
+2CCC 2CCD
+2CCE 2CCF
+2CD0 2CD1
+2CD2 2CD3
+2CD4 2CD5
+2CD6 2CD7
+2CD8 2CD9
+2CDA 2CDB
+2CDC 2CDD
+2CDE 2CDF
+2CE0 2CE1
+2CE2 2CE3
+FF21 FF41
+FF22 FF42
+FF23 FF43
+FF24 FF44
+FF25 FF45
+FF26 FF46
+FF27 FF47
+FF28 FF48
+FF29 FF49
+FF2A FF4A
+FF2B FF4B
+FF2C FF4C
+FF2D FF4D
+FF2E FF4E
+FF2F FF4F
+FF30 FF50
+FF31 FF51
+FF32 FF52
+FF33 FF53
+FF34 FF54
+FF35 FF55
+FF36 FF56
+FF37 FF57
+FF38 FF58
+FF39 FF59
+FF3A FF5A
+10400 10428
+10401 10429
+10402 1042A
+10403 1042B
+10404 1042C
+10405 1042D
+10406 1042E
+10407 1042F
+10408 10430
+10409 10431
+1040A 10432
+1040B 10433
+1040C 10434
+1040D 10435
+1040E 10436
+1040F 10437
+10410 10438
+10411 10439
+10412 1043A
+10413 1043B
+10414 1043C
+10415 1043D
+10416 1043E
+10417 1043F
+10418 10440
+10419 10441
+1041A 10442
+1041B 10443
+1041C 10444
+1041D 10445
+1041E 10446
+1041F 10447
+10420 10448
+10421 10449
+10422 1044A
+10423 1044B
+10424 1044C
+10425 1044D
+10426 1044E
+10427 1044F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/To/Lower.pl b/Master/tlpkg/tlperl/lib/unicore/To/Lower.pl
new file mode 100644
index 00000000000..77a7a7fb0e0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/To/Lower.pl
@@ -0,0 +1,905 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+# The key UTF-8 _bytes_, the value UTF-8 (speed hack)
+%utf8::ToSpecLower =
+(
+"\xC4\xB0" => "\x{0069}\x{0307}",
+"\xE1\xBE\x88" => "\x{1F80}",
+"\xE1\xBE\x89" => "\x{1F81}",
+"\xE1\xBE\x8A" => "\x{1F82}",
+"\xE1\xBE\x8B" => "\x{1F83}",
+"\xE1\xBE\x8C" => "\x{1F84}",
+"\xE1\xBE\x8D" => "\x{1F85}",
+"\xE1\xBE\x8E" => "\x{1F86}",
+"\xE1\xBE\x8F" => "\x{1F87}",
+"\xE1\xBE\x98" => "\x{1F90}",
+"\xE1\xBE\x99" => "\x{1F91}",
+"\xE1\xBE\x9A" => "\x{1F92}",
+"\xE1\xBE\x9B" => "\x{1F93}",
+"\xE1\xBE\x9C" => "\x{1F94}",
+"\xE1\xBE\x9D" => "\x{1F95}",
+"\xE1\xBE\x9E" => "\x{1F96}",
+"\xE1\xBE\x9F" => "\x{1F97}",
+"\xE1\xBE\xA8" => "\x{1FA0}",
+"\xE1\xBE\xA9" => "\x{1FA1}",
+"\xE1\xBE\xAA" => "\x{1FA2}",
+"\xE1\xBE\xAB" => "\x{1FA3}",
+"\xE1\xBE\xAC" => "\x{1FA4}",
+"\xE1\xBE\xAD" => "\x{1FA5}",
+"\xE1\xBE\xAE" => "\x{1FA6}",
+"\xE1\xBE\xAF" => "\x{1FA7}",
+"\xE1\xBE\xBC" => "\x{1FB3}",
+"\xE1\xBF\x8C" => "\x{1FC3}",
+"\xE1\xBF\xBC" => "\x{1FF3}",
+);
+
+return <<'END';
+0041 0061
+0042 0062
+0043 0063
+0044 0064
+0045 0065
+0046 0066
+0047 0067
+0048 0068
+0049 0069
+004A 006A
+004B 006B
+004C 006C
+004D 006D
+004E 006E
+004F 006F
+0050 0070
+0051 0071
+0052 0072
+0053 0073
+0054 0074
+0055 0075
+0056 0076
+0057 0077
+0058 0078
+0059 0079
+005A 007A
+00C0 00E0
+00C1 00E1
+00C2 00E2
+00C3 00E3
+00C4 00E4
+00C5 00E5
+00C6 00E6
+00C7 00E7
+00C8 00E8
+00C9 00E9
+00CA 00EA
+00CB 00EB
+00CC 00EC
+00CD 00ED
+00CE 00EE
+00CF 00EF
+00D0 00F0
+00D1 00F1
+00D2 00F2
+00D3 00F3
+00D4 00F4
+00D5 00F5
+00D6 00F6
+00D8 00F8
+00D9 00F9
+00DA 00FA
+00DB 00FB
+00DC 00FC
+00DD 00FD
+00DE 00FE
+0100 0101
+0102 0103
+0104 0105
+0106 0107
+0108 0109
+010A 010B
+010C 010D
+010E 010F
+0110 0111
+0112 0113
+0114 0115
+0116 0117
+0118 0119
+011A 011B
+011C 011D
+011E 011F
+0120 0121
+0122 0123
+0124 0125
+0126 0127
+0128 0129
+012A 012B
+012C 012D
+012E 012F
+0132 0133
+0134 0135
+0136 0137
+0139 013A
+013B 013C
+013D 013E
+013F 0140
+0141 0142
+0143 0144
+0145 0146
+0147 0148
+014A 014B
+014C 014D
+014E 014F
+0150 0151
+0152 0153
+0154 0155
+0156 0157
+0158 0159
+015A 015B
+015C 015D
+015E 015F
+0160 0161
+0162 0163
+0164 0165
+0166 0167
+0168 0169
+016A 016B
+016C 016D
+016E 016F
+0170 0171
+0172 0173
+0174 0175
+0176 0177
+0178 00FF
+0179 017A
+017B 017C
+017D 017E
+0181 0253
+0182 0183
+0184 0185
+0186 0254
+0187 0188
+0189 0256
+018A 0257
+018B 018C
+018E 01DD
+018F 0259
+0190 025B
+0191 0192
+0193 0260
+0194 0263
+0196 0269
+0197 0268
+0198 0199
+019C 026F
+019D 0272
+019F 0275
+01A0 01A1
+01A2 01A3
+01A4 01A5
+01A6 0280
+01A7 01A8
+01A9 0283
+01AC 01AD
+01AE 0288
+01AF 01B0
+01B1 028A
+01B2 028B
+01B3 01B4
+01B5 01B6
+01B7 0292
+01B8 01B9
+01BC 01BD
+01C4 01C6
+01C5 01C6
+01C7 01C9
+01C8 01C9
+01CA 01CC
+01CB 01CC
+01CD 01CE
+01CF 01D0
+01D1 01D2
+01D3 01D4
+01D5 01D6
+01D7 01D8
+01D9 01DA
+01DB 01DC
+01DE 01DF
+01E0 01E1
+01E2 01E3
+01E4 01E5
+01E6 01E7
+01E8 01E9
+01EA 01EB
+01EC 01ED
+01EE 01EF
+01F1 01F3
+01F2 01F3
+01F4 01F5
+01F6 0195
+01F7 01BF
+01F8 01F9
+01FA 01FB
+01FC 01FD
+01FE 01FF
+0200 0201
+0202 0203
+0204 0205
+0206 0207
+0208 0209
+020A 020B
+020C 020D
+020E 020F
+0210 0211
+0212 0213
+0214 0215
+0216 0217
+0218 0219
+021A 021B
+021C 021D
+021E 021F
+0220 019E
+0222 0223
+0224 0225
+0226 0227
+0228 0229
+022A 022B
+022C 022D
+022E 022F
+0230 0231
+0232 0233
+023B 023C
+023D 019A
+0241 0294
+0386 03AC
+0388 03AD
+0389 03AE
+038A 03AF
+038C 03CC
+038E 03CD
+038F 03CE
+0391 03B1
+0392 03B2
+0393 03B3
+0394 03B4
+0395 03B5
+0396 03B6
+0397 03B7
+0398 03B8
+0399 03B9
+039A 03BA
+039B 03BB
+039C 03BC
+039D 03BD
+039E 03BE
+039F 03BF
+03A0 03C0
+03A1 03C1
+03A3 03C3
+03A4 03C4
+03A5 03C5
+03A6 03C6
+03A7 03C7
+03A8 03C8
+03A9 03C9
+03AA 03CA
+03AB 03CB
+03D8 03D9
+03DA 03DB
+03DC 03DD
+03DE 03DF
+03E0 03E1
+03E2 03E3
+03E4 03E5
+03E6 03E7
+03E8 03E9
+03EA 03EB
+03EC 03ED
+03EE 03EF
+03F4 03B8
+03F7 03F8
+03F9 03F2
+03FA 03FB
+0400 0450
+0401 0451
+0402 0452
+0403 0453
+0404 0454
+0405 0455
+0406 0456
+0407 0457
+0408 0458
+0409 0459
+040A 045A
+040B 045B
+040C 045C
+040D 045D
+040E 045E
+040F 045F
+0410 0430
+0411 0431
+0412 0432
+0413 0433
+0414 0434
+0415 0435
+0416 0436
+0417 0437
+0418 0438
+0419 0439
+041A 043A
+041B 043B
+041C 043C
+041D 043D
+041E 043E
+041F 043F
+0420 0440
+0421 0441
+0422 0442
+0423 0443
+0424 0444
+0425 0445
+0426 0446
+0427 0447
+0428 0448
+0429 0449
+042A 044A
+042B 044B
+042C 044C
+042D 044D
+042E 044E
+042F 044F
+0460 0461
+0462 0463
+0464 0465
+0466 0467
+0468 0469
+046A 046B
+046C 046D
+046E 046F
+0470 0471
+0472 0473
+0474 0475
+0476 0477
+0478 0479
+047A 047B
+047C 047D
+047E 047F
+0480 0481
+048A 048B
+048C 048D
+048E 048F
+0490 0491
+0492 0493
+0494 0495
+0496 0497
+0498 0499
+049A 049B
+049C 049D
+049E 049F
+04A0 04A1
+04A2 04A3
+04A4 04A5
+04A6 04A7
+04A8 04A9
+04AA 04AB
+04AC 04AD
+04AE 04AF
+04B0 04B1
+04B2 04B3
+04B4 04B5
+04B6 04B7
+04B8 04B9
+04BA 04BB
+04BC 04BD
+04BE 04BF
+04C1 04C2
+04C3 04C4
+04C5 04C6
+04C7 04C8
+04C9 04CA
+04CB 04CC
+04CD 04CE
+04D0 04D1
+04D2 04D3
+04D4 04D5
+04D6 04D7
+04D8 04D9
+04DA 04DB
+04DC 04DD
+04DE 04DF
+04E0 04E1
+04E2 04E3
+04E4 04E5
+04E6 04E7
+04E8 04E9
+04EA 04EB
+04EC 04ED
+04EE 04EF
+04F0 04F1
+04F2 04F3
+04F4 04F5
+04F6 04F7
+04F8 04F9
+0500 0501
+0502 0503
+0504 0505
+0506 0507
+0508 0509
+050A 050B
+050C 050D
+050E 050F
+0531 0561
+0532 0562
+0533 0563
+0534 0564
+0535 0565
+0536 0566
+0537 0567
+0538 0568
+0539 0569
+053A 056A
+053B 056B
+053C 056C
+053D 056D
+053E 056E
+053F 056F
+0540 0570
+0541 0571
+0542 0572
+0543 0573
+0544 0574
+0545 0575
+0546 0576
+0547 0577
+0548 0578
+0549 0579
+054A 057A
+054B 057B
+054C 057C
+054D 057D
+054E 057E
+054F 057F
+0550 0580
+0551 0581
+0552 0582
+0553 0583
+0554 0584
+0555 0585
+0556 0586
+10A0 2D00
+10A1 2D01
+10A2 2D02
+10A3 2D03
+10A4 2D04
+10A5 2D05
+10A6 2D06
+10A7 2D07
+10A8 2D08
+10A9 2D09
+10AA 2D0A
+10AB 2D0B
+10AC 2D0C
+10AD 2D0D
+10AE 2D0E
+10AF 2D0F
+10B0 2D10
+10B1 2D11
+10B2 2D12
+10B3 2D13
+10B4 2D14
+10B5 2D15
+10B6 2D16
+10B7 2D17
+10B8 2D18
+10B9 2D19
+10BA 2D1A
+10BB 2D1B
+10BC 2D1C
+10BD 2D1D
+10BE 2D1E
+10BF 2D1F
+10C0 2D20
+10C1 2D21
+10C2 2D22
+10C3 2D23
+10C4 2D24
+10C5 2D25
+1E00 1E01
+1E02 1E03
+1E04 1E05
+1E06 1E07
+1E08 1E09
+1E0A 1E0B
+1E0C 1E0D
+1E0E 1E0F
+1E10 1E11
+1E12 1E13
+1E14 1E15
+1E16 1E17
+1E18 1E19
+1E1A 1E1B
+1E1C 1E1D
+1E1E 1E1F
+1E20 1E21
+1E22 1E23
+1E24 1E25
+1E26 1E27
+1E28 1E29
+1E2A 1E2B
+1E2C 1E2D
+1E2E 1E2F
+1E30 1E31
+1E32 1E33
+1E34 1E35
+1E36 1E37
+1E38 1E39
+1E3A 1E3B
+1E3C 1E3D
+1E3E 1E3F
+1E40 1E41
+1E42 1E43
+1E44 1E45
+1E46 1E47
+1E48 1E49
+1E4A 1E4B
+1E4C 1E4D
+1E4E 1E4F
+1E50 1E51
+1E52 1E53
+1E54 1E55
+1E56 1E57
+1E58 1E59
+1E5A 1E5B
+1E5C 1E5D
+1E5E 1E5F
+1E60 1E61
+1E62 1E63
+1E64 1E65
+1E66 1E67
+1E68 1E69
+1E6A 1E6B
+1E6C 1E6D
+1E6E 1E6F
+1E70 1E71
+1E72 1E73
+1E74 1E75
+1E76 1E77
+1E78 1E79
+1E7A 1E7B
+1E7C 1E7D
+1E7E 1E7F
+1E80 1E81
+1E82 1E83
+1E84 1E85
+1E86 1E87
+1E88 1E89
+1E8A 1E8B
+1E8C 1E8D
+1E8E 1E8F
+1E90 1E91
+1E92 1E93
+1E94 1E95
+1EA0 1EA1
+1EA2 1EA3
+1EA4 1EA5
+1EA6 1EA7
+1EA8 1EA9
+1EAA 1EAB
+1EAC 1EAD
+1EAE 1EAF
+1EB0 1EB1
+1EB2 1EB3
+1EB4 1EB5
+1EB6 1EB7
+1EB8 1EB9
+1EBA 1EBB
+1EBC 1EBD
+1EBE 1EBF
+1EC0 1EC1
+1EC2 1EC3
+1EC4 1EC5
+1EC6 1EC7
+1EC8 1EC9
+1ECA 1ECB
+1ECC 1ECD
+1ECE 1ECF
+1ED0 1ED1
+1ED2 1ED3
+1ED4 1ED5
+1ED6 1ED7
+1ED8 1ED9
+1EDA 1EDB
+1EDC 1EDD
+1EDE 1EDF
+1EE0 1EE1
+1EE2 1EE3
+1EE4 1EE5
+1EE6 1EE7
+1EE8 1EE9
+1EEA 1EEB
+1EEC 1EED
+1EEE 1EEF
+1EF0 1EF1
+1EF2 1EF3
+1EF4 1EF5
+1EF6 1EF7
+1EF8 1EF9
+1F08 1F00
+1F09 1F01
+1F0A 1F02
+1F0B 1F03
+1F0C 1F04
+1F0D 1F05
+1F0E 1F06
+1F0F 1F07
+1F18 1F10
+1F19 1F11
+1F1A 1F12
+1F1B 1F13
+1F1C 1F14
+1F1D 1F15
+1F28 1F20
+1F29 1F21
+1F2A 1F22
+1F2B 1F23
+1F2C 1F24
+1F2D 1F25
+1F2E 1F26
+1F2F 1F27
+1F38 1F30
+1F39 1F31
+1F3A 1F32
+1F3B 1F33
+1F3C 1F34
+1F3D 1F35
+1F3E 1F36
+1F3F 1F37
+1F48 1F40
+1F49 1F41
+1F4A 1F42
+1F4B 1F43
+1F4C 1F44
+1F4D 1F45
+1F59 1F51
+1F5B 1F53
+1F5D 1F55
+1F5F 1F57
+1F68 1F60
+1F69 1F61
+1F6A 1F62
+1F6B 1F63
+1F6C 1F64
+1F6D 1F65
+1F6E 1F66
+1F6F 1F67
+1FB8 1FB0
+1FB9 1FB1
+1FBA 1F70
+1FBB 1F71
+1FC8 1F72
+1FC9 1F73
+1FCA 1F74
+1FCB 1F75
+1FD8 1FD0
+1FD9 1FD1
+1FDA 1F76
+1FDB 1F77
+1FE8 1FE0
+1FE9 1FE1
+1FEA 1F7A
+1FEB 1F7B
+1FEC 1FE5
+1FF8 1F78
+1FF9 1F79
+1FFA 1F7C
+1FFB 1F7D
+2126 03C9
+212A 006B
+212B 00E5
+2160 2170
+2161 2171
+2162 2172
+2163 2173
+2164 2174
+2165 2175
+2166 2176
+2167 2177
+2168 2178
+2169 2179
+216A 217A
+216B 217B
+216C 217C
+216D 217D
+216E 217E
+216F 217F
+24B6 24D0
+24B7 24D1
+24B8 24D2
+24B9 24D3
+24BA 24D4
+24BB 24D5
+24BC 24D6
+24BD 24D7
+24BE 24D8
+24BF 24D9
+24C0 24DA
+24C1 24DB
+24C2 24DC
+24C3 24DD
+24C4 24DE
+24C5 24DF
+24C6 24E0
+24C7 24E1
+24C8 24E2
+24C9 24E3
+24CA 24E4
+24CB 24E5
+24CC 24E6
+24CD 24E7
+24CE 24E8
+24CF 24E9
+2C00 2C30
+2C01 2C31
+2C02 2C32
+2C03 2C33
+2C04 2C34
+2C05 2C35
+2C06 2C36
+2C07 2C37
+2C08 2C38
+2C09 2C39
+2C0A 2C3A
+2C0B 2C3B
+2C0C 2C3C
+2C0D 2C3D
+2C0E 2C3E
+2C0F 2C3F
+2C10 2C40
+2C11 2C41
+2C12 2C42
+2C13 2C43
+2C14 2C44
+2C15 2C45
+2C16 2C46
+2C17 2C47
+2C18 2C48
+2C19 2C49
+2C1A 2C4A
+2C1B 2C4B
+2C1C 2C4C
+2C1D 2C4D
+2C1E 2C4E
+2C1F 2C4F
+2C20 2C50
+2C21 2C51
+2C22 2C52
+2C23 2C53
+2C24 2C54
+2C25 2C55
+2C26 2C56
+2C27 2C57
+2C28 2C58
+2C29 2C59
+2C2A 2C5A
+2C2B 2C5B
+2C2C 2C5C
+2C2D 2C5D
+2C2E 2C5E
+2C80 2C81
+2C82 2C83
+2C84 2C85
+2C86 2C87
+2C88 2C89
+2C8A 2C8B
+2C8C 2C8D
+2C8E 2C8F
+2C90 2C91
+2C92 2C93
+2C94 2C95
+2C96 2C97
+2C98 2C99
+2C9A 2C9B
+2C9C 2C9D
+2C9E 2C9F
+2CA0 2CA1
+2CA2 2CA3
+2CA4 2CA5
+2CA6 2CA7
+2CA8 2CA9
+2CAA 2CAB
+2CAC 2CAD
+2CAE 2CAF
+2CB0 2CB1
+2CB2 2CB3
+2CB4 2CB5
+2CB6 2CB7
+2CB8 2CB9
+2CBA 2CBB
+2CBC 2CBD
+2CBE 2CBF
+2CC0 2CC1
+2CC2 2CC3
+2CC4 2CC5
+2CC6 2CC7
+2CC8 2CC9
+2CCA 2CCB
+2CCC 2CCD
+2CCE 2CCF
+2CD0 2CD1
+2CD2 2CD3
+2CD4 2CD5
+2CD6 2CD7
+2CD8 2CD9
+2CDA 2CDB
+2CDC 2CDD
+2CDE 2CDF
+2CE0 2CE1
+2CE2 2CE3
+FF21 FF41
+FF22 FF42
+FF23 FF43
+FF24 FF44
+FF25 FF45
+FF26 FF46
+FF27 FF47
+FF28 FF48
+FF29 FF49
+FF2A FF4A
+FF2B FF4B
+FF2C FF4C
+FF2D FF4D
+FF2E FF4E
+FF2F FF4F
+FF30 FF50
+FF31 FF51
+FF32 FF52
+FF33 FF53
+FF34 FF54
+FF35 FF55
+FF36 FF56
+FF37 FF57
+FF38 FF58
+FF39 FF59
+FF3A FF5A
+10400 10428
+10401 10429
+10402 1042A
+10403 1042B
+10404 1042C
+10405 1042D
+10406 1042E
+10407 1042F
+10408 10430
+10409 10431
+1040A 10432
+1040B 10433
+1040C 10434
+1040D 10435
+1040E 10436
+1040F 10437
+10410 10438
+10411 10439
+10412 1043A
+10413 1043B
+10414 1043C
+10415 1043D
+10416 1043E
+10417 1043F
+10418 10440
+10419 10441
+1041A 10442
+1041B 10443
+1041C 10444
+1041D 10445
+1041E 10446
+1041F 10447
+10420 10448
+10421 10449
+10422 1044A
+10423 1044B
+10424 1044C
+10425 1044D
+10426 1044E
+10427 1044F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/To/Title.pl b/Master/tlpkg/tlperl/lib/unicore/To/Title.pl
new file mode 100644
index 00000000000..761767520c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/To/Title.pl
@@ -0,0 +1,966 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+# The key UTF-8 _bytes_, the value UTF-8 (speed hack)
+%utf8::ToSpecTitle =
+(
+"\xC3\x9F" => "\x{0053}\x{0073}",
+"\xC5\x89" => "\x{02BC}\x{004E}",
+"\xC7\xB0" => "\x{004A}\x{030C}",
+"\xCE\x90" => "\x{0399}\x{0308}\x{0301}",
+"\xCE\xB0" => "\x{03A5}\x{0308}\x{0301}",
+"\xD6\x87" => "\x{0535}\x{0582}",
+"\xE1\xBA\x96" => "\x{0048}\x{0331}",
+"\xE1\xBA\x97" => "\x{0054}\x{0308}",
+"\xE1\xBA\x98" => "\x{0057}\x{030A}",
+"\xE1\xBA\x99" => "\x{0059}\x{030A}",
+"\xE1\xBA\x9A" => "\x{0041}\x{02BE}",
+"\xE1\xBD\x90" => "\x{03A5}\x{0313}",
+"\xE1\xBD\x92" => "\x{03A5}\x{0313}\x{0300}",
+"\xE1\xBD\x94" => "\x{03A5}\x{0313}\x{0301}",
+"\xE1\xBD\x96" => "\x{03A5}\x{0313}\x{0342}",
+"\xE1\xBE\x80" => "\x{1F88}",
+"\xE1\xBE\x81" => "\x{1F89}",
+"\xE1\xBE\x82" => "\x{1F8A}",
+"\xE1\xBE\x83" => "\x{1F8B}",
+"\xE1\xBE\x84" => "\x{1F8C}",
+"\xE1\xBE\x85" => "\x{1F8D}",
+"\xE1\xBE\x86" => "\x{1F8E}",
+"\xE1\xBE\x87" => "\x{1F8F}",
+"\xE1\xBE\x90" => "\x{1F98}",
+"\xE1\xBE\x91" => "\x{1F99}",
+"\xE1\xBE\x92" => "\x{1F9A}",
+"\xE1\xBE\x93" => "\x{1F9B}",
+"\xE1\xBE\x94" => "\x{1F9C}",
+"\xE1\xBE\x95" => "\x{1F9D}",
+"\xE1\xBE\x96" => "\x{1F9E}",
+"\xE1\xBE\x97" => "\x{1F9F}",
+"\xE1\xBE\xA0" => "\x{1FA8}",
+"\xE1\xBE\xA1" => "\x{1FA9}",
+"\xE1\xBE\xA2" => "\x{1FAA}",
+"\xE1\xBE\xA3" => "\x{1FAB}",
+"\xE1\xBE\xA4" => "\x{1FAC}",
+"\xE1\xBE\xA5" => "\x{1FAD}",
+"\xE1\xBE\xA6" => "\x{1FAE}",
+"\xE1\xBE\xA7" => "\x{1FAF}",
+"\xE1\xBE\xB2" => "\x{1FBA}\x{0345}",
+"\xE1\xBE\xB3" => "\x{1FBC}",
+"\xE1\xBE\xB4" => "\x{0386}\x{0345}",
+"\xE1\xBE\xB6" => "\x{0391}\x{0342}",
+"\xE1\xBE\xB7" => "\x{0391}\x{0342}\x{0345}",
+"\xE1\xBF\x82" => "\x{1FCA}\x{0345}",
+"\xE1\xBF\x83" => "\x{1FCC}",
+"\xE1\xBF\x84" => "\x{0389}\x{0345}",
+"\xE1\xBF\x86" => "\x{0397}\x{0342}",
+"\xE1\xBF\x87" => "\x{0397}\x{0342}\x{0345}",
+"\xE1\xBF\x92" => "\x{0399}\x{0308}\x{0300}",
+"\xE1\xBF\x93" => "\x{0399}\x{0308}\x{0301}",
+"\xE1\xBF\x96" => "\x{0399}\x{0342}",
+"\xE1\xBF\x97" => "\x{0399}\x{0308}\x{0342}",
+"\xE1\xBF\xA2" => "\x{03A5}\x{0308}\x{0300}",
+"\xE1\xBF\xA3" => "\x{03A5}\x{0308}\x{0301}",
+"\xE1\xBF\xA4" => "\x{03A1}\x{0313}",
+"\xE1\xBF\xA6" => "\x{03A5}\x{0342}",
+"\xE1\xBF\xA7" => "\x{03A5}\x{0308}\x{0342}",
+"\xE1\xBF\xB2" => "\x{1FFA}\x{0345}",
+"\xE1\xBF\xB3" => "\x{1FFC}",
+"\xE1\xBF\xB4" => "\x{038F}\x{0345}",
+"\xE1\xBF\xB6" => "\x{03A9}\x{0342}",
+"\xE1\xBF\xB7" => "\x{03A9}\x{0342}\x{0345}",
+"\xEF\xAC\x80" => "\x{0046}\x{0066}",
+"\xEF\xAC\x81" => "\x{0046}\x{0069}",
+"\xEF\xAC\x82" => "\x{0046}\x{006C}",
+"\xEF\xAC\x83" => "\x{0046}\x{0066}\x{0069}",
+"\xEF\xAC\x84" => "\x{0046}\x{0066}\x{006C}",
+"\xEF\xAC\x85" => "\x{0053}\x{0074}",
+"\xEF\xAC\x86" => "\x{0053}\x{0074}",
+"\xEF\xAC\x93" => "\x{0544}\x{0576}",
+"\xEF\xAC\x94" => "\x{0544}\x{0565}",
+"\xEF\xAC\x95" => "\x{0544}\x{056B}",
+"\xEF\xAC\x96" => "\x{054E}\x{0576}",
+"\xEF\xAC\x97" => "\x{0544}\x{056D}",
+);
+
+return <<'END';
+0061 0041
+0062 0042
+0063 0043
+0064 0044
+0065 0045
+0066 0046
+0067 0047
+0068 0048
+0069 0049
+006A 004A
+006B 004B
+006C 004C
+006D 004D
+006E 004E
+006F 004F
+0070 0050
+0071 0051
+0072 0052
+0073 0053
+0074 0054
+0075 0055
+0076 0056
+0077 0057
+0078 0058
+0079 0059
+007A 005A
+00B5 039C
+00E0 00C0
+00E1 00C1
+00E2 00C2
+00E3 00C3
+00E4 00C4
+00E5 00C5
+00E6 00C6
+00E7 00C7
+00E8 00C8
+00E9 00C9
+00EA 00CA
+00EB 00CB
+00EC 00CC
+00ED 00CD
+00EE 00CE
+00EF 00CF
+00F0 00D0
+00F1 00D1
+00F2 00D2
+00F3 00D3
+00F4 00D4
+00F5 00D5
+00F6 00D6
+00F8 00D8
+00F9 00D9
+00FA 00DA
+00FB 00DB
+00FC 00DC
+00FD 00DD
+00FE 00DE
+00FF 0178
+0101 0100
+0103 0102
+0105 0104
+0107 0106
+0109 0108
+010B 010A
+010D 010C
+010F 010E
+0111 0110
+0113 0112
+0115 0114
+0117 0116
+0119 0118
+011B 011A
+011D 011C
+011F 011E
+0121 0120
+0123 0122
+0125 0124
+0127 0126
+0129 0128
+012B 012A
+012D 012C
+012F 012E
+0131 0049
+0133 0132
+0135 0134
+0137 0136
+013A 0139
+013C 013B
+013E 013D
+0140 013F
+0142 0141
+0144 0143
+0146 0145
+0148 0147
+014B 014A
+014D 014C
+014F 014E
+0151 0150
+0153 0152
+0155 0154
+0157 0156
+0159 0158
+015B 015A
+015D 015C
+015F 015E
+0161 0160
+0163 0162
+0165 0164
+0167 0166
+0169 0168
+016B 016A
+016D 016C
+016F 016E
+0171 0170
+0173 0172
+0175 0174
+0177 0176
+017A 0179
+017C 017B
+017E 017D
+017F 0053
+0183 0182
+0185 0184
+0188 0187
+018C 018B
+0192 0191
+0195 01F6
+0199 0198
+019A 023D
+019E 0220
+01A1 01A0
+01A3 01A2
+01A5 01A4
+01A8 01A7
+01AD 01AC
+01B0 01AF
+01B4 01B3
+01B6 01B5
+01B9 01B8
+01BD 01BC
+01BF 01F7
+01C4 01C5
+01C5 01C5
+01C6 01C5
+01C7 01C8
+01C8 01C8
+01C9 01C8
+01CA 01CB
+01CB 01CB
+01CC 01CB
+01CE 01CD
+01D0 01CF
+01D2 01D1
+01D4 01D3
+01D6 01D5
+01D8 01D7
+01DA 01D9
+01DC 01DB
+01DD 018E
+01DF 01DE
+01E1 01E0
+01E3 01E2
+01E5 01E4
+01E7 01E6
+01E9 01E8
+01EB 01EA
+01ED 01EC
+01EF 01EE
+01F1 01F2
+01F2 01F2
+01F3 01F2
+01F5 01F4
+01F9 01F8
+01FB 01FA
+01FD 01FC
+01FF 01FE
+0201 0200
+0203 0202
+0205 0204
+0207 0206
+0209 0208
+020B 020A
+020D 020C
+020F 020E
+0211 0210
+0213 0212
+0215 0214
+0217 0216
+0219 0218
+021B 021A
+021D 021C
+021F 021E
+0223 0222
+0225 0224
+0227 0226
+0229 0228
+022B 022A
+022D 022C
+022F 022E
+0231 0230
+0233 0232
+023C 023B
+0253 0181
+0254 0186
+0256 0189
+0257 018A
+0259 018F
+025B 0190
+0260 0193
+0263 0194
+0268 0197
+0269 0196
+026F 019C
+0272 019D
+0275 019F
+0280 01A6
+0283 01A9
+0288 01AE
+028A 01B1
+028B 01B2
+0292 01B7
+0294 0241
+0345 0399
+03AC 0386
+03AD 0388
+03AE 0389
+03AF 038A
+03B1 0391
+03B2 0392
+03B3 0393
+03B4 0394
+03B5 0395
+03B6 0396
+03B7 0397
+03B8 0398
+03B9 0399
+03BA 039A
+03BB 039B
+03BC 039C
+03BD 039D
+03BE 039E
+03BF 039F
+03C0 03A0
+03C1 03A1
+03C2 03A3
+03C3 03A3
+03C4 03A4
+03C5 03A5
+03C6 03A6
+03C7 03A7
+03C8 03A8
+03C9 03A9
+03CA 03AA
+03CB 03AB
+03CC 038C
+03CD 038E
+03CE 038F
+03D0 0392
+03D1 0398
+03D5 03A6
+03D6 03A0
+03D9 03D8
+03DB 03DA
+03DD 03DC
+03DF 03DE
+03E1 03E0
+03E3 03E2
+03E5 03E4
+03E7 03E6
+03E9 03E8
+03EB 03EA
+03ED 03EC
+03EF 03EE
+03F0 039A
+03F1 03A1
+03F2 03F9
+03F5 0395
+03F8 03F7
+03FB 03FA
+0430 0410
+0431 0411
+0432 0412
+0433 0413
+0434 0414
+0435 0415
+0436 0416
+0437 0417
+0438 0418
+0439 0419
+043A 041A
+043B 041B
+043C 041C
+043D 041D
+043E 041E
+043F 041F
+0440 0420
+0441 0421
+0442 0422
+0443 0423
+0444 0424
+0445 0425
+0446 0426
+0447 0427
+0448 0428
+0449 0429
+044A 042A
+044B 042B
+044C 042C
+044D 042D
+044E 042E
+044F 042F
+0450 0400
+0451 0401
+0452 0402
+0453 0403
+0454 0404
+0455 0405
+0456 0406
+0457 0407
+0458 0408
+0459 0409
+045A 040A
+045B 040B
+045C 040C
+045D 040D
+045E 040E
+045F 040F
+0461 0460
+0463 0462
+0465 0464
+0467 0466
+0469 0468
+046B 046A
+046D 046C
+046F 046E
+0471 0470
+0473 0472
+0475 0474
+0477 0476
+0479 0478
+047B 047A
+047D 047C
+047F 047E
+0481 0480
+048B 048A
+048D 048C
+048F 048E
+0491 0490
+0493 0492
+0495 0494
+0497 0496
+0499 0498
+049B 049A
+049D 049C
+049F 049E
+04A1 04A0
+04A3 04A2
+04A5 04A4
+04A7 04A6
+04A9 04A8
+04AB 04AA
+04AD 04AC
+04AF 04AE
+04B1 04B0
+04B3 04B2
+04B5 04B4
+04B7 04B6
+04B9 04B8
+04BB 04BA
+04BD 04BC
+04BF 04BE
+04C2 04C1
+04C4 04C3
+04C6 04C5
+04C8 04C7
+04CA 04C9
+04CC 04CB
+04CE 04CD
+04D1 04D0
+04D3 04D2
+04D5 04D4
+04D7 04D6
+04D9 04D8
+04DB 04DA
+04DD 04DC
+04DF 04DE
+04E1 04E0
+04E3 04E2
+04E5 04E4
+04E7 04E6
+04E9 04E8
+04EB 04EA
+04ED 04EC
+04EF 04EE
+04F1 04F0
+04F3 04F2
+04F5 04F4
+04F7 04F6
+04F9 04F8
+0501 0500
+0503 0502
+0505 0504
+0507 0506
+0509 0508
+050B 050A
+050D 050C
+050F 050E
+0561 0531
+0562 0532
+0563 0533
+0564 0534
+0565 0535
+0566 0536
+0567 0537
+0568 0538
+0569 0539
+056A 053A
+056B 053B
+056C 053C
+056D 053D
+056E 053E
+056F 053F
+0570 0540
+0571 0541
+0572 0542
+0573 0543
+0574 0544
+0575 0545
+0576 0546
+0577 0547
+0578 0548
+0579 0549
+057A 054A
+057B 054B
+057C 054C
+057D 054D
+057E 054E
+057F 054F
+0580 0550
+0581 0551
+0582 0552
+0583 0553
+0584 0554
+0585 0555
+0586 0556
+1E01 1E00
+1E03 1E02
+1E05 1E04
+1E07 1E06
+1E09 1E08
+1E0B 1E0A
+1E0D 1E0C
+1E0F 1E0E
+1E11 1E10
+1E13 1E12
+1E15 1E14
+1E17 1E16
+1E19 1E18
+1E1B 1E1A
+1E1D 1E1C
+1E1F 1E1E
+1E21 1E20
+1E23 1E22
+1E25 1E24
+1E27 1E26
+1E29 1E28
+1E2B 1E2A
+1E2D 1E2C
+1E2F 1E2E
+1E31 1E30
+1E33 1E32
+1E35 1E34
+1E37 1E36
+1E39 1E38
+1E3B 1E3A
+1E3D 1E3C
+1E3F 1E3E
+1E41 1E40
+1E43 1E42
+1E45 1E44
+1E47 1E46
+1E49 1E48
+1E4B 1E4A
+1E4D 1E4C
+1E4F 1E4E
+1E51 1E50
+1E53 1E52
+1E55 1E54
+1E57 1E56
+1E59 1E58
+1E5B 1E5A
+1E5D 1E5C
+1E5F 1E5E
+1E61 1E60
+1E63 1E62
+1E65 1E64
+1E67 1E66
+1E69 1E68
+1E6B 1E6A
+1E6D 1E6C
+1E6F 1E6E
+1E71 1E70
+1E73 1E72
+1E75 1E74
+1E77 1E76
+1E79 1E78
+1E7B 1E7A
+1E7D 1E7C
+1E7F 1E7E
+1E81 1E80
+1E83 1E82
+1E85 1E84
+1E87 1E86
+1E89 1E88
+1E8B 1E8A
+1E8D 1E8C
+1E8F 1E8E
+1E91 1E90
+1E93 1E92
+1E95 1E94
+1E9B 1E60
+1EA1 1EA0
+1EA3 1EA2
+1EA5 1EA4
+1EA7 1EA6
+1EA9 1EA8
+1EAB 1EAA
+1EAD 1EAC
+1EAF 1EAE
+1EB1 1EB0
+1EB3 1EB2
+1EB5 1EB4
+1EB7 1EB6
+1EB9 1EB8
+1EBB 1EBA
+1EBD 1EBC
+1EBF 1EBE
+1EC1 1EC0
+1EC3 1EC2
+1EC5 1EC4
+1EC7 1EC6
+1EC9 1EC8
+1ECB 1ECA
+1ECD 1ECC
+1ECF 1ECE
+1ED1 1ED0
+1ED3 1ED2
+1ED5 1ED4
+1ED7 1ED6
+1ED9 1ED8
+1EDB 1EDA
+1EDD 1EDC
+1EDF 1EDE
+1EE1 1EE0
+1EE3 1EE2
+1EE5 1EE4
+1EE7 1EE6
+1EE9 1EE8
+1EEB 1EEA
+1EED 1EEC
+1EEF 1EEE
+1EF1 1EF0
+1EF3 1EF2
+1EF5 1EF4
+1EF7 1EF6
+1EF9 1EF8
+1F00 1F08
+1F01 1F09
+1F02 1F0A
+1F03 1F0B
+1F04 1F0C
+1F05 1F0D
+1F06 1F0E
+1F07 1F0F
+1F10 1F18
+1F11 1F19
+1F12 1F1A
+1F13 1F1B
+1F14 1F1C
+1F15 1F1D
+1F20 1F28
+1F21 1F29
+1F22 1F2A
+1F23 1F2B
+1F24 1F2C
+1F25 1F2D
+1F26 1F2E
+1F27 1F2F
+1F30 1F38
+1F31 1F39
+1F32 1F3A
+1F33 1F3B
+1F34 1F3C
+1F35 1F3D
+1F36 1F3E
+1F37 1F3F
+1F40 1F48
+1F41 1F49
+1F42 1F4A
+1F43 1F4B
+1F44 1F4C
+1F45 1F4D
+1F51 1F59
+1F53 1F5B
+1F55 1F5D
+1F57 1F5F
+1F60 1F68
+1F61 1F69
+1F62 1F6A
+1F63 1F6B
+1F64 1F6C
+1F65 1F6D
+1F66 1F6E
+1F67 1F6F
+1F70 1FBA
+1F71 1FBB
+1F72 1FC8
+1F73 1FC9
+1F74 1FCA
+1F75 1FCB
+1F76 1FDA
+1F77 1FDB
+1F78 1FF8
+1F79 1FF9
+1F7A 1FEA
+1F7B 1FEB
+1F7C 1FFA
+1F7D 1FFB
+1FB0 1FB8
+1FB1 1FB9
+1FBE 0399
+1FD0 1FD8
+1FD1 1FD9
+1FE0 1FE8
+1FE1 1FE9
+1FE5 1FEC
+2170 2160
+2171 2161
+2172 2162
+2173 2163
+2174 2164
+2175 2165
+2176 2166
+2177 2167
+2178 2168
+2179 2169
+217A 216A
+217B 216B
+217C 216C
+217D 216D
+217E 216E
+217F 216F
+24D0 24B6
+24D1 24B7
+24D2 24B8
+24D3 24B9
+24D4 24BA
+24D5 24BB
+24D6 24BC
+24D7 24BD
+24D8 24BE
+24D9 24BF
+24DA 24C0
+24DB 24C1
+24DC 24C2
+24DD 24C3
+24DE 24C4
+24DF 24C5
+24E0 24C6
+24E1 24C7
+24E2 24C8
+24E3 24C9
+24E4 24CA
+24E5 24CB
+24E6 24CC
+24E7 24CD
+24E8 24CE
+24E9 24CF
+2C30 2C00
+2C31 2C01
+2C32 2C02
+2C33 2C03
+2C34 2C04
+2C35 2C05
+2C36 2C06
+2C37 2C07
+2C38 2C08
+2C39 2C09
+2C3A 2C0A
+2C3B 2C0B
+2C3C 2C0C
+2C3D 2C0D
+2C3E 2C0E
+2C3F 2C0F
+2C40 2C10
+2C41 2C11
+2C42 2C12
+2C43 2C13
+2C44 2C14
+2C45 2C15
+2C46 2C16
+2C47 2C17
+2C48 2C18
+2C49 2C19
+2C4A 2C1A
+2C4B 2C1B
+2C4C 2C1C
+2C4D 2C1D
+2C4E 2C1E
+2C4F 2C1F
+2C50 2C20
+2C51 2C21
+2C52 2C22
+2C53 2C23
+2C54 2C24
+2C55 2C25
+2C56 2C26
+2C57 2C27
+2C58 2C28
+2C59 2C29
+2C5A 2C2A
+2C5B 2C2B
+2C5C 2C2C
+2C5D 2C2D
+2C5E 2C2E
+2C81 2C80
+2C83 2C82
+2C85 2C84
+2C87 2C86
+2C89 2C88
+2C8B 2C8A
+2C8D 2C8C
+2C8F 2C8E
+2C91 2C90
+2C93 2C92
+2C95 2C94
+2C97 2C96
+2C99 2C98
+2C9B 2C9A
+2C9D 2C9C
+2C9F 2C9E
+2CA1 2CA0
+2CA3 2CA2
+2CA5 2CA4
+2CA7 2CA6
+2CA9 2CA8
+2CAB 2CAA
+2CAD 2CAC
+2CAF 2CAE
+2CB1 2CB0
+2CB3 2CB2
+2CB5 2CB4
+2CB7 2CB6
+2CB9 2CB8
+2CBB 2CBA
+2CBD 2CBC
+2CBF 2CBE
+2CC1 2CC0
+2CC3 2CC2
+2CC5 2CC4
+2CC7 2CC6
+2CC9 2CC8
+2CCB 2CCA
+2CCD 2CCC
+2CCF 2CCE
+2CD1 2CD0
+2CD3 2CD2
+2CD5 2CD4
+2CD7 2CD6
+2CD9 2CD8
+2CDB 2CDA
+2CDD 2CDC
+2CDF 2CDE
+2CE1 2CE0
+2CE3 2CE2
+2D00 10A0
+2D01 10A1
+2D02 10A2
+2D03 10A3
+2D04 10A4
+2D05 10A5
+2D06 10A6
+2D07 10A7
+2D08 10A8
+2D09 10A9
+2D0A 10AA
+2D0B 10AB
+2D0C 10AC
+2D0D 10AD
+2D0E 10AE
+2D0F 10AF
+2D10 10B0
+2D11 10B1
+2D12 10B2
+2D13 10B3
+2D14 10B4
+2D15 10B5
+2D16 10B6
+2D17 10B7
+2D18 10B8
+2D19 10B9
+2D1A 10BA
+2D1B 10BB
+2D1C 10BC
+2D1D 10BD
+2D1E 10BE
+2D1F 10BF
+2D20 10C0
+2D21 10C1
+2D22 10C2
+2D23 10C3
+2D24 10C4
+2D25 10C5
+FF41 FF21
+FF42 FF22
+FF43 FF23
+FF44 FF24
+FF45 FF25
+FF46 FF26
+FF47 FF27
+FF48 FF28
+FF49 FF29
+FF4A FF2A
+FF4B FF2B
+FF4C FF2C
+FF4D FF2D
+FF4E FF2E
+FF4F FF2F
+FF50 FF30
+FF51 FF31
+FF52 FF32
+FF53 FF33
+FF54 FF34
+FF55 FF35
+FF56 FF36
+FF57 FF37
+FF58 FF38
+FF59 FF39
+FF5A FF3A
+10428 10400
+10429 10401
+1042A 10402
+1042B 10403
+1042C 10404
+1042D 10405
+1042E 10406
+1042F 10407
+10430 10408
+10431 10409
+10432 1040A
+10433 1040B
+10434 1040C
+10435 1040D
+10436 1040E
+10437 1040F
+10438 10410
+10439 10411
+1043A 10412
+1043B 10413
+1043C 10414
+1043D 10415
+1043E 10416
+1043F 10417
+10440 10418
+10441 10419
+10442 1041A
+10443 1041B
+10444 1041C
+10445 1041D
+10446 1041E
+10447 1041F
+10448 10420
+10449 10421
+1044A 10422
+1044B 10423
+1044C 10424
+1044D 10425
+1044E 10426
+1044F 10427
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/To/Upper.pl b/Master/tlpkg/tlperl/lib/unicore/To/Upper.pl
new file mode 100644
index 00000000000..6b1f3e29c47
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/To/Upper.pl
@@ -0,0 +1,989 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+
+# The key UTF-8 _bytes_, the value UTF-8 (speed hack)
+%utf8::ToSpecUpper =
+(
+"\xC3\x9F" => "\x{0053}\x{0053}",
+"\xC5\x89" => "\x{02BC}\x{004E}",
+"\xC7\xB0" => "\x{004A}\x{030C}",
+"\xCE\x90" => "\x{0399}\x{0308}\x{0301}",
+"\xCE\xB0" => "\x{03A5}\x{0308}\x{0301}",
+"\xD6\x87" => "\x{0535}\x{0552}",
+"\xE1\xBA\x96" => "\x{0048}\x{0331}",
+"\xE1\xBA\x97" => "\x{0054}\x{0308}",
+"\xE1\xBA\x98" => "\x{0057}\x{030A}",
+"\xE1\xBA\x99" => "\x{0059}\x{030A}",
+"\xE1\xBA\x9A" => "\x{0041}\x{02BE}",
+"\xE1\xBD\x90" => "\x{03A5}\x{0313}",
+"\xE1\xBD\x92" => "\x{03A5}\x{0313}\x{0300}",
+"\xE1\xBD\x94" => "\x{03A5}\x{0313}\x{0301}",
+"\xE1\xBD\x96" => "\x{03A5}\x{0313}\x{0342}",
+"\xE1\xBE\x80" => "\x{1F08}\x{0399}",
+"\xE1\xBE\x81" => "\x{1F09}\x{0399}",
+"\xE1\xBE\x82" => "\x{1F0A}\x{0399}",
+"\xE1\xBE\x83" => "\x{1F0B}\x{0399}",
+"\xE1\xBE\x84" => "\x{1F0C}\x{0399}",
+"\xE1\xBE\x85" => "\x{1F0D}\x{0399}",
+"\xE1\xBE\x86" => "\x{1F0E}\x{0399}",
+"\xE1\xBE\x87" => "\x{1F0F}\x{0399}",
+"\xE1\xBE\x88" => "\x{1F08}\x{0399}",
+"\xE1\xBE\x89" => "\x{1F09}\x{0399}",
+"\xE1\xBE\x8A" => "\x{1F0A}\x{0399}",
+"\xE1\xBE\x8B" => "\x{1F0B}\x{0399}",
+"\xE1\xBE\x8C" => "\x{1F0C}\x{0399}",
+"\xE1\xBE\x8D" => "\x{1F0D}\x{0399}",
+"\xE1\xBE\x8E" => "\x{1F0E}\x{0399}",
+"\xE1\xBE\x8F" => "\x{1F0F}\x{0399}",
+"\xE1\xBE\x90" => "\x{1F28}\x{0399}",
+"\xE1\xBE\x91" => "\x{1F29}\x{0399}",
+"\xE1\xBE\x92" => "\x{1F2A}\x{0399}",
+"\xE1\xBE\x93" => "\x{1F2B}\x{0399}",
+"\xE1\xBE\x94" => "\x{1F2C}\x{0399}",
+"\xE1\xBE\x95" => "\x{1F2D}\x{0399}",
+"\xE1\xBE\x96" => "\x{1F2E}\x{0399}",
+"\xE1\xBE\x97" => "\x{1F2F}\x{0399}",
+"\xE1\xBE\x98" => "\x{1F28}\x{0399}",
+"\xE1\xBE\x99" => "\x{1F29}\x{0399}",
+"\xE1\xBE\x9A" => "\x{1F2A}\x{0399}",
+"\xE1\xBE\x9B" => "\x{1F2B}\x{0399}",
+"\xE1\xBE\x9C" => "\x{1F2C}\x{0399}",
+"\xE1\xBE\x9D" => "\x{1F2D}\x{0399}",
+"\xE1\xBE\x9E" => "\x{1F2E}\x{0399}",
+"\xE1\xBE\x9F" => "\x{1F2F}\x{0399}",
+"\xE1\xBE\xA0" => "\x{1F68}\x{0399}",
+"\xE1\xBE\xA1" => "\x{1F69}\x{0399}",
+"\xE1\xBE\xA2" => "\x{1F6A}\x{0399}",
+"\xE1\xBE\xA3" => "\x{1F6B}\x{0399}",
+"\xE1\xBE\xA4" => "\x{1F6C}\x{0399}",
+"\xE1\xBE\xA5" => "\x{1F6D}\x{0399}",
+"\xE1\xBE\xA6" => "\x{1F6E}\x{0399}",
+"\xE1\xBE\xA7" => "\x{1F6F}\x{0399}",
+"\xE1\xBE\xA8" => "\x{1F68}\x{0399}",
+"\xE1\xBE\xA9" => "\x{1F69}\x{0399}",
+"\xE1\xBE\xAA" => "\x{1F6A}\x{0399}",
+"\xE1\xBE\xAB" => "\x{1F6B}\x{0399}",
+"\xE1\xBE\xAC" => "\x{1F6C}\x{0399}",
+"\xE1\xBE\xAD" => "\x{1F6D}\x{0399}",
+"\xE1\xBE\xAE" => "\x{1F6E}\x{0399}",
+"\xE1\xBE\xAF" => "\x{1F6F}\x{0399}",
+"\xE1\xBE\xB2" => "\x{1FBA}\x{0399}",
+"\xE1\xBE\xB3" => "\x{0391}\x{0399}",
+"\xE1\xBE\xB4" => "\x{0386}\x{0399}",
+"\xE1\xBE\xB6" => "\x{0391}\x{0342}",
+"\xE1\xBE\xB7" => "\x{0391}\x{0342}\x{0399}",
+"\xE1\xBE\xBC" => "\x{0391}\x{0399}",
+"\xE1\xBF\x82" => "\x{1FCA}\x{0399}",
+"\xE1\xBF\x83" => "\x{0397}\x{0399}",
+"\xE1\xBF\x84" => "\x{0389}\x{0399}",
+"\xE1\xBF\x86" => "\x{0397}\x{0342}",
+"\xE1\xBF\x87" => "\x{0397}\x{0342}\x{0399}",
+"\xE1\xBF\x8C" => "\x{0397}\x{0399}",
+"\xE1\xBF\x92" => "\x{0399}\x{0308}\x{0300}",
+"\xE1\xBF\x93" => "\x{0399}\x{0308}\x{0301}",
+"\xE1\xBF\x96" => "\x{0399}\x{0342}",
+"\xE1\xBF\x97" => "\x{0399}\x{0308}\x{0342}",
+"\xE1\xBF\xA2" => "\x{03A5}\x{0308}\x{0300}",
+"\xE1\xBF\xA3" => "\x{03A5}\x{0308}\x{0301}",
+"\xE1\xBF\xA4" => "\x{03A1}\x{0313}",
+"\xE1\xBF\xA6" => "\x{03A5}\x{0342}",
+"\xE1\xBF\xA7" => "\x{03A5}\x{0308}\x{0342}",
+"\xE1\xBF\xB2" => "\x{1FFA}\x{0399}",
+"\xE1\xBF\xB3" => "\x{03A9}\x{0399}",
+"\xE1\xBF\xB4" => "\x{038F}\x{0399}",
+"\xE1\xBF\xB6" => "\x{03A9}\x{0342}",
+"\xE1\xBF\xB7" => "\x{03A9}\x{0342}\x{0399}",
+"\xE1\xBF\xBC" => "\x{03A9}\x{0399}",
+"\xEF\xAC\x80" => "\x{0046}\x{0046}",
+"\xEF\xAC\x81" => "\x{0046}\x{0049}",
+"\xEF\xAC\x82" => "\x{0046}\x{004C}",
+"\xEF\xAC\x83" => "\x{0046}\x{0046}\x{0049}",
+"\xEF\xAC\x84" => "\x{0046}\x{0046}\x{004C}",
+"\xEF\xAC\x85" => "\x{0053}\x{0054}",
+"\xEF\xAC\x86" => "\x{0053}\x{0054}",
+"\xEF\xAC\x93" => "\x{0544}\x{0546}",
+"\xEF\xAC\x94" => "\x{0544}\x{0535}",
+"\xEF\xAC\x95" => "\x{0544}\x{053B}",
+"\xEF\xAC\x96" => "\x{054E}\x{0546}",
+"\xEF\xAC\x97" => "\x{0544}\x{053D}",
+);
+
+return <<'END';
+0061 0041
+0062 0042
+0063 0043
+0064 0044
+0065 0045
+0066 0046
+0067 0047
+0068 0048
+0069 0049
+006A 004A
+006B 004B
+006C 004C
+006D 004D
+006E 004E
+006F 004F
+0070 0050
+0071 0051
+0072 0052
+0073 0053
+0074 0054
+0075 0055
+0076 0056
+0077 0057
+0078 0058
+0079 0059
+007A 005A
+00B5 039C
+00E0 00C0
+00E1 00C1
+00E2 00C2
+00E3 00C3
+00E4 00C4
+00E5 00C5
+00E6 00C6
+00E7 00C7
+00E8 00C8
+00E9 00C9
+00EA 00CA
+00EB 00CB
+00EC 00CC
+00ED 00CD
+00EE 00CE
+00EF 00CF
+00F0 00D0
+00F1 00D1
+00F2 00D2
+00F3 00D3
+00F4 00D4
+00F5 00D5
+00F6 00D6
+00F8 00D8
+00F9 00D9
+00FA 00DA
+00FB 00DB
+00FC 00DC
+00FD 00DD
+00FE 00DE
+00FF 0178
+0101 0100
+0103 0102
+0105 0104
+0107 0106
+0109 0108
+010B 010A
+010D 010C
+010F 010E
+0111 0110
+0113 0112
+0115 0114
+0117 0116
+0119 0118
+011B 011A
+011D 011C
+011F 011E
+0121 0120
+0123 0122
+0125 0124
+0127 0126
+0129 0128
+012B 012A
+012D 012C
+012F 012E
+0131 0049
+0133 0132
+0135 0134
+0137 0136
+013A 0139
+013C 013B
+013E 013D
+0140 013F
+0142 0141
+0144 0143
+0146 0145
+0148 0147
+014B 014A
+014D 014C
+014F 014E
+0151 0150
+0153 0152
+0155 0154
+0157 0156
+0159 0158
+015B 015A
+015D 015C
+015F 015E
+0161 0160
+0163 0162
+0165 0164
+0167 0166
+0169 0168
+016B 016A
+016D 016C
+016F 016E
+0171 0170
+0173 0172
+0175 0174
+0177 0176
+017A 0179
+017C 017B
+017E 017D
+017F 0053
+0183 0182
+0185 0184
+0188 0187
+018C 018B
+0192 0191
+0195 01F6
+0199 0198
+019A 023D
+019E 0220
+01A1 01A0
+01A3 01A2
+01A5 01A4
+01A8 01A7
+01AD 01AC
+01B0 01AF
+01B4 01B3
+01B6 01B5
+01B9 01B8
+01BD 01BC
+01BF 01F7
+01C5 01C4
+01C6 01C4
+01C8 01C7
+01C9 01C7
+01CB 01CA
+01CC 01CA
+01CE 01CD
+01D0 01CF
+01D2 01D1
+01D4 01D3
+01D6 01D5
+01D8 01D7
+01DA 01D9
+01DC 01DB
+01DD 018E
+01DF 01DE
+01E1 01E0
+01E3 01E2
+01E5 01E4
+01E7 01E6
+01E9 01E8
+01EB 01EA
+01ED 01EC
+01EF 01EE
+01F2 01F1
+01F3 01F1
+01F5 01F4
+01F9 01F8
+01FB 01FA
+01FD 01FC
+01FF 01FE
+0201 0200
+0203 0202
+0205 0204
+0207 0206
+0209 0208
+020B 020A
+020D 020C
+020F 020E
+0211 0210
+0213 0212
+0215 0214
+0217 0216
+0219 0218
+021B 021A
+021D 021C
+021F 021E
+0223 0222
+0225 0224
+0227 0226
+0229 0228
+022B 022A
+022D 022C
+022F 022E
+0231 0230
+0233 0232
+023C 023B
+0253 0181
+0254 0186
+0256 0189
+0257 018A
+0259 018F
+025B 0190
+0260 0193
+0263 0194
+0268 0197
+0269 0196
+026F 019C
+0272 019D
+0275 019F
+0280 01A6
+0283 01A9
+0288 01AE
+028A 01B1
+028B 01B2
+0292 01B7
+0294 0241
+0345 0399
+03AC 0386
+03AD 0388
+03AE 0389
+03AF 038A
+03B1 0391
+03B2 0392
+03B3 0393
+03B4 0394
+03B5 0395
+03B6 0396
+03B7 0397
+03B8 0398
+03B9 0399
+03BA 039A
+03BB 039B
+03BC 039C
+03BD 039D
+03BE 039E
+03BF 039F
+03C0 03A0
+03C1 03A1
+03C2 03A3
+03C3 03A3
+03C4 03A4
+03C5 03A5
+03C6 03A6
+03C7 03A7
+03C8 03A8
+03C9 03A9
+03CA 03AA
+03CB 03AB
+03CC 038C
+03CD 038E
+03CE 038F
+03D0 0392
+03D1 0398
+03D5 03A6
+03D6 03A0
+03D9 03D8
+03DB 03DA
+03DD 03DC
+03DF 03DE
+03E1 03E0
+03E3 03E2
+03E5 03E4
+03E7 03E6
+03E9 03E8
+03EB 03EA
+03ED 03EC
+03EF 03EE
+03F0 039A
+03F1 03A1
+03F2 03F9
+03F5 0395
+03F8 03F7
+03FB 03FA
+0430 0410
+0431 0411
+0432 0412
+0433 0413
+0434 0414
+0435 0415
+0436 0416
+0437 0417
+0438 0418
+0439 0419
+043A 041A
+043B 041B
+043C 041C
+043D 041D
+043E 041E
+043F 041F
+0440 0420
+0441 0421
+0442 0422
+0443 0423
+0444 0424
+0445 0425
+0446 0426
+0447 0427
+0448 0428
+0449 0429
+044A 042A
+044B 042B
+044C 042C
+044D 042D
+044E 042E
+044F 042F
+0450 0400
+0451 0401
+0452 0402
+0453 0403
+0454 0404
+0455 0405
+0456 0406
+0457 0407
+0458 0408
+0459 0409
+045A 040A
+045B 040B
+045C 040C
+045D 040D
+045E 040E
+045F 040F
+0461 0460
+0463 0462
+0465 0464
+0467 0466
+0469 0468
+046B 046A
+046D 046C
+046F 046E
+0471 0470
+0473 0472
+0475 0474
+0477 0476
+0479 0478
+047B 047A
+047D 047C
+047F 047E
+0481 0480
+048B 048A
+048D 048C
+048F 048E
+0491 0490
+0493 0492
+0495 0494
+0497 0496
+0499 0498
+049B 049A
+049D 049C
+049F 049E
+04A1 04A0
+04A3 04A2
+04A5 04A4
+04A7 04A6
+04A9 04A8
+04AB 04AA
+04AD 04AC
+04AF 04AE
+04B1 04B0
+04B3 04B2
+04B5 04B4
+04B7 04B6
+04B9 04B8
+04BB 04BA
+04BD 04BC
+04BF 04BE
+04C2 04C1
+04C4 04C3
+04C6 04C5
+04C8 04C7
+04CA 04C9
+04CC 04CB
+04CE 04CD
+04D1 04D0
+04D3 04D2
+04D5 04D4
+04D7 04D6
+04D9 04D8
+04DB 04DA
+04DD 04DC
+04DF 04DE
+04E1 04E0
+04E3 04E2
+04E5 04E4
+04E7 04E6
+04E9 04E8
+04EB 04EA
+04ED 04EC
+04EF 04EE
+04F1 04F0
+04F3 04F2
+04F5 04F4
+04F7 04F6
+04F9 04F8
+0501 0500
+0503 0502
+0505 0504
+0507 0506
+0509 0508
+050B 050A
+050D 050C
+050F 050E
+0561 0531
+0562 0532
+0563 0533
+0564 0534
+0565 0535
+0566 0536
+0567 0537
+0568 0538
+0569 0539
+056A 053A
+056B 053B
+056C 053C
+056D 053D
+056E 053E
+056F 053F
+0570 0540
+0571 0541
+0572 0542
+0573 0543
+0574 0544
+0575 0545
+0576 0546
+0577 0547
+0578 0548
+0579 0549
+057A 054A
+057B 054B
+057C 054C
+057D 054D
+057E 054E
+057F 054F
+0580 0550
+0581 0551
+0582 0552
+0583 0553
+0584 0554
+0585 0555
+0586 0556
+1E01 1E00
+1E03 1E02
+1E05 1E04
+1E07 1E06
+1E09 1E08
+1E0B 1E0A
+1E0D 1E0C
+1E0F 1E0E
+1E11 1E10
+1E13 1E12
+1E15 1E14
+1E17 1E16
+1E19 1E18
+1E1B 1E1A
+1E1D 1E1C
+1E1F 1E1E
+1E21 1E20
+1E23 1E22
+1E25 1E24
+1E27 1E26
+1E29 1E28
+1E2B 1E2A
+1E2D 1E2C
+1E2F 1E2E
+1E31 1E30
+1E33 1E32
+1E35 1E34
+1E37 1E36
+1E39 1E38
+1E3B 1E3A
+1E3D 1E3C
+1E3F 1E3E
+1E41 1E40
+1E43 1E42
+1E45 1E44
+1E47 1E46
+1E49 1E48
+1E4B 1E4A
+1E4D 1E4C
+1E4F 1E4E
+1E51 1E50
+1E53 1E52
+1E55 1E54
+1E57 1E56
+1E59 1E58
+1E5B 1E5A
+1E5D 1E5C
+1E5F 1E5E
+1E61 1E60
+1E63 1E62
+1E65 1E64
+1E67 1E66
+1E69 1E68
+1E6B 1E6A
+1E6D 1E6C
+1E6F 1E6E
+1E71 1E70
+1E73 1E72
+1E75 1E74
+1E77 1E76
+1E79 1E78
+1E7B 1E7A
+1E7D 1E7C
+1E7F 1E7E
+1E81 1E80
+1E83 1E82
+1E85 1E84
+1E87 1E86
+1E89 1E88
+1E8B 1E8A
+1E8D 1E8C
+1E8F 1E8E
+1E91 1E90
+1E93 1E92
+1E95 1E94
+1E9B 1E60
+1EA1 1EA0
+1EA3 1EA2
+1EA5 1EA4
+1EA7 1EA6
+1EA9 1EA8
+1EAB 1EAA
+1EAD 1EAC
+1EAF 1EAE
+1EB1 1EB0
+1EB3 1EB2
+1EB5 1EB4
+1EB7 1EB6
+1EB9 1EB8
+1EBB 1EBA
+1EBD 1EBC
+1EBF 1EBE
+1EC1 1EC0
+1EC3 1EC2
+1EC5 1EC4
+1EC7 1EC6
+1EC9 1EC8
+1ECB 1ECA
+1ECD 1ECC
+1ECF 1ECE
+1ED1 1ED0
+1ED3 1ED2
+1ED5 1ED4
+1ED7 1ED6
+1ED9 1ED8
+1EDB 1EDA
+1EDD 1EDC
+1EDF 1EDE
+1EE1 1EE0
+1EE3 1EE2
+1EE5 1EE4
+1EE7 1EE6
+1EE9 1EE8
+1EEB 1EEA
+1EED 1EEC
+1EEF 1EEE
+1EF1 1EF0
+1EF3 1EF2
+1EF5 1EF4
+1EF7 1EF6
+1EF9 1EF8
+1F00 1F08
+1F01 1F09
+1F02 1F0A
+1F03 1F0B
+1F04 1F0C
+1F05 1F0D
+1F06 1F0E
+1F07 1F0F
+1F10 1F18
+1F11 1F19
+1F12 1F1A
+1F13 1F1B
+1F14 1F1C
+1F15 1F1D
+1F20 1F28
+1F21 1F29
+1F22 1F2A
+1F23 1F2B
+1F24 1F2C
+1F25 1F2D
+1F26 1F2E
+1F27 1F2F
+1F30 1F38
+1F31 1F39
+1F32 1F3A
+1F33 1F3B
+1F34 1F3C
+1F35 1F3D
+1F36 1F3E
+1F37 1F3F
+1F40 1F48
+1F41 1F49
+1F42 1F4A
+1F43 1F4B
+1F44 1F4C
+1F45 1F4D
+1F51 1F59
+1F53 1F5B
+1F55 1F5D
+1F57 1F5F
+1F60 1F68
+1F61 1F69
+1F62 1F6A
+1F63 1F6B
+1F64 1F6C
+1F65 1F6D
+1F66 1F6E
+1F67 1F6F
+1F70 1FBA
+1F71 1FBB
+1F72 1FC8
+1F73 1FC9
+1F74 1FCA
+1F75 1FCB
+1F76 1FDA
+1F77 1FDB
+1F78 1FF8
+1F79 1FF9
+1F7A 1FEA
+1F7B 1FEB
+1F7C 1FFA
+1F7D 1FFB
+1FB0 1FB8
+1FB1 1FB9
+1FBE 0399
+1FD0 1FD8
+1FD1 1FD9
+1FE0 1FE8
+1FE1 1FE9
+1FE5 1FEC
+2170 2160
+2171 2161
+2172 2162
+2173 2163
+2174 2164
+2175 2165
+2176 2166
+2177 2167
+2178 2168
+2179 2169
+217A 216A
+217B 216B
+217C 216C
+217D 216D
+217E 216E
+217F 216F
+24D0 24B6
+24D1 24B7
+24D2 24B8
+24D3 24B9
+24D4 24BA
+24D5 24BB
+24D6 24BC
+24D7 24BD
+24D8 24BE
+24D9 24BF
+24DA 24C0
+24DB 24C1
+24DC 24C2
+24DD 24C3
+24DE 24C4
+24DF 24C5
+24E0 24C6
+24E1 24C7
+24E2 24C8
+24E3 24C9
+24E4 24CA
+24E5 24CB
+24E6 24CC
+24E7 24CD
+24E8 24CE
+24E9 24CF
+2C30 2C00
+2C31 2C01
+2C32 2C02
+2C33 2C03
+2C34 2C04
+2C35 2C05
+2C36 2C06
+2C37 2C07
+2C38 2C08
+2C39 2C09
+2C3A 2C0A
+2C3B 2C0B
+2C3C 2C0C
+2C3D 2C0D
+2C3E 2C0E
+2C3F 2C0F
+2C40 2C10
+2C41 2C11
+2C42 2C12
+2C43 2C13
+2C44 2C14
+2C45 2C15
+2C46 2C16
+2C47 2C17
+2C48 2C18
+2C49 2C19
+2C4A 2C1A
+2C4B 2C1B
+2C4C 2C1C
+2C4D 2C1D
+2C4E 2C1E
+2C4F 2C1F
+2C50 2C20
+2C51 2C21
+2C52 2C22
+2C53 2C23
+2C54 2C24
+2C55 2C25
+2C56 2C26
+2C57 2C27
+2C58 2C28
+2C59 2C29
+2C5A 2C2A
+2C5B 2C2B
+2C5C 2C2C
+2C5D 2C2D
+2C5E 2C2E
+2C81 2C80
+2C83 2C82
+2C85 2C84
+2C87 2C86
+2C89 2C88
+2C8B 2C8A
+2C8D 2C8C
+2C8F 2C8E
+2C91 2C90
+2C93 2C92
+2C95 2C94
+2C97 2C96
+2C99 2C98
+2C9B 2C9A
+2C9D 2C9C
+2C9F 2C9E
+2CA1 2CA0
+2CA3 2CA2
+2CA5 2CA4
+2CA7 2CA6
+2CA9 2CA8
+2CAB 2CAA
+2CAD 2CAC
+2CAF 2CAE
+2CB1 2CB0
+2CB3 2CB2
+2CB5 2CB4
+2CB7 2CB6
+2CB9 2CB8
+2CBB 2CBA
+2CBD 2CBC
+2CBF 2CBE
+2CC1 2CC0
+2CC3 2CC2
+2CC5 2CC4
+2CC7 2CC6
+2CC9 2CC8
+2CCB 2CCA
+2CCD 2CCC
+2CCF 2CCE
+2CD1 2CD0
+2CD3 2CD2
+2CD5 2CD4
+2CD7 2CD6
+2CD9 2CD8
+2CDB 2CDA
+2CDD 2CDC
+2CDF 2CDE
+2CE1 2CE0
+2CE3 2CE2
+2D00 10A0
+2D01 10A1
+2D02 10A2
+2D03 10A3
+2D04 10A4
+2D05 10A5
+2D06 10A6
+2D07 10A7
+2D08 10A8
+2D09 10A9
+2D0A 10AA
+2D0B 10AB
+2D0C 10AC
+2D0D 10AD
+2D0E 10AE
+2D0F 10AF
+2D10 10B0
+2D11 10B1
+2D12 10B2
+2D13 10B3
+2D14 10B4
+2D15 10B5
+2D16 10B6
+2D17 10B7
+2D18 10B8
+2D19 10B9
+2D1A 10BA
+2D1B 10BB
+2D1C 10BC
+2D1D 10BD
+2D1E 10BE
+2D1F 10BF
+2D20 10C0
+2D21 10C1
+2D22 10C2
+2D23 10C3
+2D24 10C4
+2D25 10C5
+FF41 FF21
+FF42 FF22
+FF43 FF23
+FF44 FF24
+FF45 FF25
+FF46 FF26
+FF47 FF27
+FF48 FF28
+FF49 FF29
+FF4A FF2A
+FF4B FF2B
+FF4C FF2C
+FF4D FF2D
+FF4E FF2E
+FF4F FF2F
+FF50 FF30
+FF51 FF31
+FF52 FF32
+FF53 FF33
+FF54 FF34
+FF55 FF35
+FF56 FF36
+FF57 FF37
+FF58 FF38
+FF59 FF39
+FF5A FF3A
+10428 10400
+10429 10401
+1042A 10402
+1042B 10403
+1042C 10404
+1042D 10405
+1042E 10406
+1042F 10407
+10430 10408
+10431 10409
+10432 1040A
+10433 1040B
+10434 1040C
+10435 1040D
+10436 1040E
+10437 1040F
+10438 10410
+10439 10411
+1043A 10412
+1043B 10413
+1043C 10414
+1043D 10415
+1043E 10416
+1043F 10417
+10440 10418
+10441 10419
+10442 1041A
+10443 1041B
+10444 1041C
+10445 1041D
+10446 1041E
+10447 1041F
+10448 10420
+10449 10421
+1044A 10422
+1044B 10423
+1044C 10424
+1044D 10425
+1044E 10426
+1044F 10427
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/UnicodeData.txt b/Master/tlpkg/tlperl/lib/unicore/UnicodeData.txt
new file mode 100644
index 00000000000..f314186b29c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/UnicodeData.txt
@@ -0,0 +1,16351 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
+0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
+0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
+0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0294;
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
+02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
+02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
+02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
+02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
+02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
+0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
+0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
+0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
+035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
+035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
+0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
+0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
+0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
+0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
+0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
+0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
+036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
+036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
+036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
+036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
+036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
+036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
+03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
+03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
+03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
+03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
+03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
+03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
+03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
+03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
+048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
+04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
+04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
+04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
+0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
+0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
+0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
+0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
+0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
+0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
+0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
+0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
+0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
+050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
+050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
+050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
+050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
+050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
+050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
+072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
+072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
+074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
+074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
+10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
+10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
+10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;;
+1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
+1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
+1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
+1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
+1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
+1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
+1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
+1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
+1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
+1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
+170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
+170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
+170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
+170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
+1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
+1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
+1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
+1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
+1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
+1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
+1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
+1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
+1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
+1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
+1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
+172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
+172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
+172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
+172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
+172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
+172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
+1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
+1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
+1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
+1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
+1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
+1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
+1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
+1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
+1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
+1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
+1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
+1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
+174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
+174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
+174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
+174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
+174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
+174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
+1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
+1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
+1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
+1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
+1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
+1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
+1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
+1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
+1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
+1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
+176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
+176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
+176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
+176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
+176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
+1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
+1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;;
+17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
+17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
+17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
+17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
+17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
+17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
+17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
+17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
+17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
+17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
+17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
+1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
+1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
+1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
+1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
+1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
+1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
+1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
+1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
+190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
+190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
+190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
+190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
+190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
+190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
+1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
+1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
+1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
+1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
+1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
+1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
+1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
+1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
+1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
+1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
+191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
+191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
+191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
+1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;;
+192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;;
+192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;;
+1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
+1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
+1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
+1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
+1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
+1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
+1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
+1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
+1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
+193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
+193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
+1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
+1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
+1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
+1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
+1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
+1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
+1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
+1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
+1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
+1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
+1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
+195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
+195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
+195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
+195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
+195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
+195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
+1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
+1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
+1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
+1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
+1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
+1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
+1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
+1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
+196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
+196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
+196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
+196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
+1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
+1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
+1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
+1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
+1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
+19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
+19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
+19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
+19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
+19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
+19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
+19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
+19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
+19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
+19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
+19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
+19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
+19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
+19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
+19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
+19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
+19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
+19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
+19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
+19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
+19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
+19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
+19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
+19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
+19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
+19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
+19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
+19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
+19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
+19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
+19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
+19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
+1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
+1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
+1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
+1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
+1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
+1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
+1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
+1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
+1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
+1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
+1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
+1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
+1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
+1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
+1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
+1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
+1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
+1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
+1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
+1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
+1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
+1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
+1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
+1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
+1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
+1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
+1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
+1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
+1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
+1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
+1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
+1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
+1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
+1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
+1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
+1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
+1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
+1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
+1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
+1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
+1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
+1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
+1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
+1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
+1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
+1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
+1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
+1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
+1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
+1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
+1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
+1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
+1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
+1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
+1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
+1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
+1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
+1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
+1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
+1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
+1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
+1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
+1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
+1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
+1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
+1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
+1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
+1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
+1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
+1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
+1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
+1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
+1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
+1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
+1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
+1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
+1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
+1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
+1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
+1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
+1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
+1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
+1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
+1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
+1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
+1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
+1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
+1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
+1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
+1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
+1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
+1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
+1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
+1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
+1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L;<sub> 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
+1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;;;
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
+204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
+2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
+2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
+2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
+205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
+2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
+2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
+2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L;<super> 0069;;;;N;;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
+20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
+20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
+20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
+20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
+2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
+2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
+2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
+214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
+22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
+23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
+23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
+23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;;
+23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;;
+23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;;
+23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
+23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
+23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
+23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
+23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
+23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
+23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
+23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
+23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
+23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
+23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
+23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
+23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
+23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
+24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
+24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
+24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
+24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
+24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
+24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
+24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
+24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
+24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
+24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
+24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
+24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
+24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
+24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
+24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
+24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
+24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
+24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
+24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
+2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
+2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
+2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
+259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
+2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
+2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;;
+2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;;
+2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;;
+2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;;
+2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;;
+2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;;
+2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;;
+267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
+267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
+2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
+2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
+2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
+2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
+2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
+2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
+2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
+2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
+2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
+268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
+268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
+268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
+268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
+268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
+268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
+2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
+2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
+26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
+26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
+27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
+27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
+27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
+27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
+27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
+27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
+27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
+27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
+27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
+27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
+2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
+2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
+2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
+2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
+2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
+293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
+293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
+2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
+297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
+2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
+2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
+2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
+2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
+2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
+2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
+2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
+2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
+298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
+298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
+298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
+298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
+298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
+298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
+2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
+2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
+2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
+2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
+299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
+299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
+299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
+299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
+299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
+29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
+29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
+29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
+29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
+29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
+29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
+29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
+29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
+29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
+29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
+29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
+29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
+29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
+29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
+29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
+29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
+29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
+29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
+29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
+29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
+29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
+29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
+29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
+29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
+29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
+29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+29FE;TINY;Sm;0;ON;;;;;N;;;;;
+29FF;MINY;Sm;0;ON;;;;;N;;;;;
+2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
+2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
+2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
+2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
+2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
+2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
+2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
+2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
+2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
+2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
+2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
+2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
+2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
+2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
+2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
+2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
+2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
+2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
+2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
+2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
+2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
+2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
+2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
+2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
+2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
+2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
+2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
+2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
+2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
+2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
+2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
+2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
+2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
+2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
+2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
+2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
+2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
+2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;;
+2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;;
+2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
+2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
+2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
+2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
+2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
+2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
+2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
+2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+303C;MASU MARK;Lo;0;L;;;;;N;;;;;
+303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
+30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
+31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
+31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
+31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
+31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
+31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
+31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
+31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
+31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
+31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
+31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
+31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
+31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
+31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
+31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
+31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
+31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
+31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
+31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
+321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
+3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
+3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
+3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
+3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
+3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
+3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
+3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
+3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
+3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
+325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
+325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
+325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
+325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
+325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
+325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
+327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
+32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
+32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
+32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
+32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
+32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
+32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
+32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
+32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
+32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
+32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
+32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
+32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
+32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
+32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
+32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
+32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
+32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
+3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
+3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
+337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
+33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
+4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
+4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
+4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
+4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
+4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
+4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
+4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
+4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
+4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
+4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
+4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
+4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
+4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
+4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
+4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
+4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
+4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
+4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
+4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
+4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
+4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
+4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
+4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
+4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
+4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
+4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
+4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
+4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
+4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
+4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
+4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
+4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
+4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
+4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
+4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
+4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
+4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
+4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
+4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
+4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
+4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
+4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
+4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
+4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
+4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
+4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
+4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
+4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
+4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
+4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
+4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
+4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
+4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
+4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
+4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
+4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
+4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FBB;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
+A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mc;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
+A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
+A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
+A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
+FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
+FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
+FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
+FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
+FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
+FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
+FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
+FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
+FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
+FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
+FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
+FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
+FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
+FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
+FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
+FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
+FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
+FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
+FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
+FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
+FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
+FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
+FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
+FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
+FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
+FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
+FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
+FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
+FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
+FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
+FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
+FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
+FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
+FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
+FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
+FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
+FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
+FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
+FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
+FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
+FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
+FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
+FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
+FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
+FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
+FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
+FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
+FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
+FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
+FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
+FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
+FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
+FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
+FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
+FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
+FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
+FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
+FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;;
+FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
+10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
+10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
+10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
+10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
+10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
+10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
+10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
+10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
+10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
+1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
+1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
+1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
+1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
+1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
+10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
+10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
+10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
+10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
+10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
+10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
+10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
+10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
+10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
+10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
+1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
+1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
+1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
+1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
+1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
+1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
+10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
+10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
+10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
+10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
+10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
+10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
+10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
+10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
+10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
+1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
+1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
+1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
+1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
+1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
+1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
+10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
+10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
+10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
+10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
+10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
+10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
+10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
+10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
+10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
+10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
+1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
+1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
+1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
+1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
+10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
+10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
+10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
+10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
+10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
+10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
+10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
+10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
+10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
+10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
+1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
+1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
+1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
+1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
+10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
+10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
+10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
+10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
+10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
+10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
+10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
+10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
+10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
+10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
+1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
+1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
+1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
+1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
+10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
+10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
+10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
+10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
+10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
+10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
+10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
+10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
+10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
+10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
+1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
+1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
+1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
+1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
+1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
+1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
+10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
+10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
+10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
+10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
+10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
+10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
+10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
+10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
+10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
+10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
+1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
+1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
+1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
+1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
+1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
+1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
+100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
+100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
+100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
+100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
+100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
+100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
+100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
+100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
+100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
+100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
+100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
+100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
+100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
+100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
+100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
+100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
+100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
+100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
+100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
+100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
+100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
+100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
+100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
+100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
+100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
+100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
+100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
+100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
+100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
+100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
+100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
+100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
+100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
+100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
+100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
+100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
+100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
+100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
+100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
+100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
+100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
+100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;;
+100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
+100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;;
+100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
+100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
+100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
+100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
+100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
+100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
+100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
+100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
+100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
+100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
+100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
+100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
+100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
+100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
+100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
+100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
+100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
+100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
+100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
+100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
+100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
+100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
+100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
+100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
+100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
+100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
+100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
+100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
+100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
+100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
+100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
+100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
+100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
+100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
+100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
+100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
+100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
+100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
+100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
+100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
+100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
+100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
+100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
+100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
+100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
+100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
+100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
+10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
+10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;;
+10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
+10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
+10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
+1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
+1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
+1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
+1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
+10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
+10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
+10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
+10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
+1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
+1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
+1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
+1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
+1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
+10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
+10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
+10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
+10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
+10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
+10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
+10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
+10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
+10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
+1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
+1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
+1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
+1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
+1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
+10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
+10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
+10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
+10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
+10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
+10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
+1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
+10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
+10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
+10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
+10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
+10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
+10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
+10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
+10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
+10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
+10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
+1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
+1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
+1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
+1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
+1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
+1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;;
+10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
+10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
+10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
+10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
+10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
+10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
+10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
+10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;;
+10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
+10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
+1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;;
+1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;;
+1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;;
+1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;;
+10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
+10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
+10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
+10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
+10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
+10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
+10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
+10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
+10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
+10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
+10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
+10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
+1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
+1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
+1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
+1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
+1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
+1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
+10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
+10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;;
+10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
+10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
+10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
+10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
+10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
+10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
+10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
+10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
+10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
+10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
+10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
+10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
+10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
+10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
+10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
+10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
+10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
+10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
+1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
+1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
+1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
+1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
+1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
+1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
+10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
+10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
+10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
+10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
+10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
+10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
+10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
+10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
+10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
+10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
+1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
+1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
+1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
+1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
+1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;So;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;ON;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;ON;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;ON;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;ON;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;ON;;;;100;N;;;;;
+10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
+10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
+10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
+10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
+10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
+10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
+10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
+10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
+10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
+10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
+1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
+1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
+1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
+1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
+1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
+1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
+10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
+10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
+10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
+10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
+10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
+10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
+10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
+10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
+10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
+10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
+1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
+1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
+1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
+1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
+1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
+1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
+10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
+10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
+10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
+10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
+10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
+10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
+10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
+10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
+10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
+10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
+1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
+1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
+1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
+1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
+1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
+1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
+10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
+10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
+10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
+10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
+10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
+10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
+10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
+10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
+10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
+10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
+1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
+1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
+1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
+1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
+1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
+1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
+10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
+10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
+10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
+10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
+10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
+10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
+10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
+10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
+10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
+10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
+1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
+1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
+1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
+1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
+1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
+1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
+10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
+10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
+10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
+10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
+10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
+10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
+10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
+10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
+10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
+10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
+1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
+1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
+1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
+1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
+1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
+1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
+10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
+10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
+10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
+10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
+10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
+10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
+10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
+10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
+10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
+10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
+1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
+1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
+1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
+1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
+1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
+10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
+10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
+10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
+10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
+10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
+10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
+10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
+10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
+10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
+10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
+1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
+1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
+1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
+1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
+1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
+1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
+10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
+10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
+10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
+10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
+10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
+10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
+10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
+10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
+10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
+1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
+1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
+1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
+1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
+1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
+10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
+10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
+10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
+10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
+10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
+10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
+10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
+10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
+10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
+10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
+1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
+1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
+1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
+1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
+104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
+10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
+10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
+10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
+10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
+10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
+10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
+1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
+1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
+1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
+1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
+1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
+1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
+10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
+10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
+10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
+10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
+10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
+10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
+10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
+10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
+10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
+10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
+1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
+1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
+1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
+1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
+1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
+1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
+10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
+10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
+10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
+10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
+10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
+10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
+10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
+10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
+10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
+10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
+1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
+1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
+1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
+1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
+1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
+1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
+10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
+10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
+10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
+10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
+10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
+10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
+10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
+10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
+1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
+1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
+1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
+1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
+1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
+1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
+1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
+1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
+1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
+1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
+1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
+1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
+1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
+1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
+1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
+1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
+1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
+1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
+1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
+1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
+1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
+1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
+1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
+1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
+1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
+1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
+1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
+1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
+1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
+1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
+1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
+1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
+1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
+1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
+1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
+1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
+1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
+1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
+1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
+1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
+1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
+1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
+1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
+1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
+1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
+1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
+1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
+1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
+1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
+1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
+1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
+1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
+1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
+1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
+1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
+1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
+1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
+1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
+1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
+1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
+1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
+1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
+1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
+1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
+1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
+1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
+1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
+1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
+1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
+1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
+1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
+1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
+1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
+1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
+1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
+1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
+1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
+1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
+1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
+1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
+1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
+1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
+1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
+1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
+1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
+1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
+1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
+1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
+1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
+1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
+1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
+1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
+1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
+1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
+1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
+1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
+1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
+1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
+1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
+1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
+1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
+1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
+1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
+1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
+1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
+1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
+1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
+1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
+1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
+1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
+1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
+1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
+1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
+1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
+1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
+1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
+1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
+1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
+1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
+1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
+1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
+1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
+1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
+1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
+1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
+1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
+1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
+1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
+1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
+1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
+1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
+1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
+1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
+1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
+1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
+1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
+1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
+1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
+1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
+1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
+1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
+1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
+1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
+1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
+1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
+1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
+1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
+1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
+1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
+1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
+1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
+1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
+1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
+1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
+1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
+1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
+1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
+1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
+1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
+1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
+1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
+1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
+1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
+1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
+1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
+1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
+1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
+1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
+1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
+1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
+1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
+1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
+1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
+1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
+1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
+1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
+1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
+1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
+1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
+1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
+1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
+1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
+1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
+1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
+1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
+1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
+1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
+1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
+1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
+1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
+1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
+1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
+1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
+1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
+1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
+1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
+1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
+1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
+1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
+1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
+1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
+1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
+1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
+1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
+1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
+1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
+1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
+1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
+1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
+1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
+1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
+1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
+1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
+1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
+1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
+1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
+1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
+1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
+1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
+1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
+1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
+1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
+1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
+1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
+1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
+1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
+1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
+1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
+1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
+1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
+1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
+1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
+1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
+1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
+1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
+1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
+1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
+1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
+1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
+1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
+1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
+1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
+1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
+1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
+1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
+1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
+1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
+1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
+1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
+1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
+1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
+1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
+1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
+1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
+1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
+1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
+1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
+1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
+1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
+1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
+1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
+1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
+1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
+1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
+1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
+1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
+1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
+1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
+1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
+1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
+1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
+1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
+1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
+1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
+1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
+1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
+1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
+1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
+1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
+1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
+1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
+1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
+1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
+1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
+1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
+1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
+1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
+1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
+1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
+1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
+1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
+1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
+1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
+1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
+1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
+1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
+1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
+1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
+1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
+1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
+1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
+1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
+1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
+1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
+1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
+1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
+1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
+1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
+1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
+1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
+1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
+1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
+1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
+1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
+1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
+1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
+1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
+1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
+1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
+1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
+1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
+1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
+1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
+1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
+1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
+1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
+1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
+1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
+1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
+1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
+1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
+1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
+1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
+1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
+1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
+1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
+1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
+1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
+1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
+1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
+1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
+1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
+1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
+1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
+1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
+1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
+1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
+1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
+1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
+1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
+1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
+1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
+1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
+1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
+1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
+1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
+1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
+1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
+1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
+1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
+1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
+1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
+1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
+1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
+1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
+1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
+1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
+1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
+1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
+1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
+1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
+1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
+1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
+1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
+1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
+1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
+1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
+1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
+1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
+1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
+1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
+1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
+1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
+1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
+1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
+1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
+1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
+1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
+1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
+1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
+1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
+1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
+1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
+1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
+1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
+1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
+1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
+1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
+1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
+1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
+1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
+1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
+1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
+1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
+1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
+1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
+1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
+1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
+1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
+1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
+1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
+1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
+1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
+1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
+1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
+1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
+1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
+1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
+1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
+1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
+1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
+1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
+1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
+1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
+1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
+1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
+1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
+1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
+1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
+1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
+1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
+1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
+1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
+1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
+1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
+2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
+2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
+2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
+2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
+2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
+2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
+2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
+2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
+2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
+2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
+2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
+2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
+2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
+2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
+2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
+2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
+2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
+2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
+2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
+2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
+2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
+2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
+2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
+2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
+2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
+2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
+2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
+2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
+2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
+2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
+2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
+2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
+2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
+2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
+2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
+2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
+2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
+2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
+2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
+2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
+2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
+2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
+2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
+2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
+2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
+2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
+2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
+2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
+2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
+2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
+2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
+2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
+2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
+2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
+2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
+2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
+2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
+2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
+2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
+2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
+2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
+2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
+2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
+2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
+2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
+2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
+2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
+2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
+2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
+2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
+2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
+2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
+2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
+2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
+2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
+2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
+2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
+2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
+2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
+2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
+2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
+2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
+2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
+2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
+2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
+2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
+2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
+2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
+2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
+2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
+2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
+2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
+2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
+2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
+2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
+2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
+2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
+2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
+2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
+2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
+2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
+2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
+2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
+2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
+2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
+2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
+2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
+2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
+2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
+2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
+2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
+2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
+2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
+2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
+2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
+2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
+2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
+2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
+2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
+2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
+2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
+2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
+2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
+2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
+2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
+2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
+2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
+2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
+2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
+2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
+2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
+2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
+2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
+2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
+2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
+2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
+2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
+2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
+2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
+2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
+2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
+2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
+2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
+2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
+2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;;
+2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
+2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
+2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
+2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
+2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
+2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
+2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
+2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
+2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
+2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
+2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
+2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
+2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
+2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
+2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
+2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
+2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
+2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
+2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
+2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
+2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
+2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
+2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
+2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
+2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
+2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
+2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
+2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
+2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
+2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
+2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
+2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
+2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
+2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
+2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
+2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
+2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
+2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
+2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
+2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
+2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
+2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
+2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
+2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
+2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
+2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
+2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
+2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
+2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
+2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
+2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
+2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
+2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
+2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
+2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
+2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
+2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
+2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
+2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
+2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
+2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
+2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
+2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
+2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
+2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
+2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
+2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
+2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
+2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
+2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
+2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
+2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
+2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
+2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
+2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
+2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
+2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
+2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
+2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
+2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
+2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
+2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
+2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
+2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
+2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
+2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
+2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
+2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
+2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
+2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
+2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
+2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
+2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
+2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
+2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
+2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
+2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
+2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
+2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
+2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
+2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
+2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
+2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
+2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
+2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
+2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
+2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
+2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
+2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
+2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
+2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
+2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
+2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
+2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
+2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
+2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
+2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
+2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
+2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
+2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
+2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
+2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
+2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
+2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
+2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
+2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
+2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
+2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
+2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
+2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
+2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
+2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
+2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
+2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
+2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
+2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
+2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
+2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
+2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
+2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
+2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
+2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
+2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
+2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
+2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
+2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
+2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
+2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
+2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
+2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
+2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
+2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
+2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
+2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
+2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
+2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
+2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
+2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
+2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
+2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
+2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
+2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
+2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
+2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
+2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
+2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
+2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
+2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
+2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
+2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
+2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
+2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
+2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
+2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
+2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
+2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
+2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
+2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
+2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
+2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
+2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
+2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
+2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
+2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
+2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
+2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
+2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
+2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
+2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
+2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
+2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
+2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
+2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
+2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
+2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
+2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
+2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
+2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
+2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
+2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
+2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
+2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
+2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
+2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
+2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
+2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
+2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
+2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
+2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
+2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
+2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
+2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
+2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
+2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
+2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
+2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
+2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
+2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
+2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
+2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
+2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
+2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
+2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
+2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
+2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
+2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
+2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
+2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
+2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
+2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
+2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
+2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
+2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
+2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
+2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
+2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
+2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
+2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
+2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
+2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
+2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
+2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
+2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
+2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
+2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
+2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
+2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
+2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
+2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
+2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
+2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
+2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
+2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
+2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
+2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
+2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
+2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
+2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
+2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
+2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
+2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
+2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
+2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
+2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
+2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
+2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
+2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
+2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
+2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
+2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
+2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
+2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
+2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
+2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
+2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
+2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
+2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
+2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
+2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
+2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
+2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
+2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
+2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
+2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
+2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
+2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
+2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
+2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
+2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
+2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
+2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
+2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
+2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
+2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
+2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
+2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
+2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
+2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
+2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
+2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
+2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
+2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
+2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
+2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
+2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
+2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
+2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
+2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
+2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
+2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
+2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
+2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
+2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
+2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
+2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
+2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
+2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
+2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
+2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
+2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
+2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
+2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
+2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
+2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
+2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
+2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
+2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
+2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
+2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
+2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
+2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
+2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
+2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
+2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
+2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
+2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
+2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
+2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
+2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
+2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
+2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
+2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
+2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
+2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
+2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
+2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
+2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
+2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
+2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
+2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
+2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
+2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
+2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
+2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
+2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
+2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
+2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
+2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
+2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
+2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
+2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
+2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
+2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
+2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
+2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
+2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
+2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
+2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
+2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
+2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
+2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
+2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
+2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
+2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
+2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
+2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
+2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
+2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
+2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
+2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
+2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
+2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
+2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
+2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
+2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
+2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
+2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
+2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
+2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
+2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
+2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
+2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
+2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
+2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
+2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
+2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
+2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
+E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
+E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
+E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
+E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
+E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
+E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
+E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
+E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
+E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
+E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
+E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
+E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
+E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
+E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
+E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
+E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
+E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
+E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
+E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
+E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
+E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
+E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
+E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
+E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
+E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
+E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
+E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
+E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
+E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
+E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
+E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
+E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
+E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
+E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
+E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
+E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
+E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
+E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
+E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
+E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
+E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
+E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
+E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
+E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
+E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
+E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
+E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
+E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
+E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
+E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
+E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
+E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
+E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
+E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
+E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
+E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
+E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
+E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
+E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
+E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
+E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
+E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
+E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
+E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
+E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
+E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
+E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
+E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
+E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
+E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
+E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
+E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
+E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
+E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
+E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
+E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
+E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
+E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
+E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
+E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
+E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
+E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
+E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
+E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
+E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
+E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
+E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
+E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
+E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
+E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
+E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
+E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
+E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
+E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
+E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
+E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
+E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
+E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
+E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
+E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
+E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
+E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
+E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
+E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
+E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
+E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
+E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
+E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
+E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
+E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
+E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
+E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
+E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
+E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
+E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
+E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
+E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
+E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
+E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
+E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
+E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
+E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
+E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
+E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
+E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
+E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
+E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
+E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
+E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
+E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
+E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
+E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
+E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
+E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
+E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
+E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
+E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
+E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
+E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
+E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
+E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
+E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
+E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
+E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
+E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
+E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
+E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
+E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
+E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
+E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
+E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
+E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
+E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
+E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
+E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
+E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
+E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
+E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
+E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
+E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
+E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
+E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
+E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
+E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
+E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
+E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
+E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
+E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
+E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
+E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
+E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
+E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
+E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
+E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
+E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
+E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
+E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
+E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
+E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
+E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
+E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
+E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
+E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
+E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
+E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
+E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
+E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
+E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
+E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
+E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
+E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
+E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
+E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
+E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
+E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
+E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
+E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
+E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
+E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
+E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
+E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
+E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
+E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
+E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
+E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
+E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
+E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
+E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
+E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
+E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
+E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
+E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
+E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
+E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
+E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
+E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
+E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
+E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
+E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
+E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
+E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
+E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
+E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
+E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
+E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
+E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
+E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
+E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
+E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
+E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
+E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
+E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
+E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
+E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
+E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
+E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
+E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
+E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
+E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
+E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
+E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
+E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
+E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
+E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
+E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
+E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
+E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
+E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
+E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
+E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
+E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
+E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
+E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
+E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
+E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
+E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
+E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
+E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
+E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
+E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
+E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
+E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
+E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
+E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
+E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
+E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
+E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
+E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
+E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
+E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
+E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
+E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
+E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
+E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
+E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
+E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
+E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
+E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
+E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
+E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
+E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
+E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
+E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
+E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
+E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
+E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
+F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
+FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
+100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
+10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/AL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/AL.pl
new file mode 100644
index 00000000000..f8fa70d730f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/AL.pl
@@ -0,0 +1,34 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Arabic_Letter'
+#
+return <<'END';
+0600 0603
+060B
+060D
+061B
+061E 061F
+0621 063A
+0640 064A
+066D 066F
+0671 06D5
+06DD
+06E5 06E6
+06EE 06EF
+06FA 070D
+0710
+0712 072F
+074D 076D
+0780 07A5
+07B1
+FB50 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE70 FE74
+FE76 FEFC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/AN.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/AN.pl
new file mode 100644
index 00000000000..018e6977a86
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/AN.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Arabic_Number'
+#
+return <<'END';
+0660 0669
+066B 066C
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/B.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/B.pl
new file mode 100644
index 00000000000..d6402e620cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/B.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Paragraph_Separator'
+#
+return <<'END';
+000A
+000D
+001C 001E
+0085
+2029
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/BN.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/BN.pl
new file mode 100644
index 00000000000..3e87d4e6ddd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/BN.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Boundary_Neutral'
+#
+return <<'END';
+0000 0008
+000E 001B
+007F 0084
+0086 009F
+00AD
+070F
+200B 200D
+2060 2063
+206A 206F
+FEFF
+1D173 1D17A
+E0001
+E0020 E007F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/CS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/CS.pl
new file mode 100644
index 00000000000..b1470ad0bb9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/CS.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Common_Separator'
+#
+return <<'END';
+002C
+002E 002F
+003A
+00A0
+060C
+202F
+2044
+FE50
+FE52
+FE55
+FF0C
+FF0E FF0F
+FF1A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/EN.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/EN.pl
new file mode 100644
index 00000000000..a0186d50cd3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/EN.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'European_Number'
+#
+return <<'END';
+0030 0039
+00B2 00B3
+00B9
+06F0 06F9
+2070
+2074 2079
+2080 2089
+2488 249B
+FF10 FF19
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/ES.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ES.pl
new file mode 100644
index 00000000000..c33abdfb3a6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ES.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'European_Separator'
+#
+return <<'END';
+002B
+002D
+207A 207B
+208A 208B
+2212
+FB29
+FE62 FE63
+FF0B
+FF0D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/ET.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ET.pl
new file mode 100644
index 00000000000..f27a05ca3db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ET.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'European_Terminator'
+#
+return <<'END';
+0023 0025
+00A2 00A5
+00B0 00B1
+066A
+09F2 09F3
+0AF1
+0BF9
+0E3F
+17DB
+2030 2034
+20A0 20B5
+212E
+2213
+FE5F
+FE69 FE6A
+FF03 FF05
+FFE0 FFE1
+FFE5 FFE6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/L.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/L.pl
new file mode 100644
index 00000000000..020f5b36396
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/L.pl
@@ -0,0 +1,400 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Left_To_Right'
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02B8
+02BB 02C1
+02D0 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0482
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589
+0903 0939
+093D 0940
+0949 094C
+0950
+0958 0961
+0964 0970
+097D
+0982 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD 09C0
+09C7 09C8
+09CB 09CC
+09CE
+09D7
+09DC 09DD
+09DF 09E1
+09E6 09F1
+09F4 09FA
+0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3E 0A40
+0A59 0A5C
+0A5E
+0A66 0A6F
+0A72 0A74
+0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD 0AC0
+0AC9
+0ACB 0ACC
+0AD0
+0AE0 0AE1
+0AE6 0AEF
+0B02 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D 0B3E
+0B40
+0B47 0B48
+0B4B 0B4C
+0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B71
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BBF
+0BC1 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0BE6 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C41 0C44
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD 0CC4
+0CC6 0CC8
+0CCA 0CCB
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D40
+0D46 0D48
+0D4A 0D4C
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCF 0DD1
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E4F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F17
+0F1A 0F34
+0F36
+0F38
+0F3E 0F47
+0F49 0F6A
+0F7F
+0F85
+0F88 0F8B
+0FBE 0FC5
+0FC7 0FCC
+0FCF 0FD1
+1000 1021
+1023 1027
+1029 102A
+102C
+1031
+1038
+1040 1057
+10A0 10C5
+10D0 10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+1360 137C
+1380 138F
+13A0 13F4
+1401 1676
+1681 169A
+16A0 16F0
+1700 170C
+170E 1711
+1720 1731
+1735 1736
+1740 1751
+1760 176C
+176E 1770
+1780 17B6
+17BE 17C5
+17C7 17C8
+17D4 17DA
+17DC
+17E0 17E9
+1810 1819
+1820 1877
+1880 18A8
+1900 191C
+1923 1926
+1930 1931
+1933 1938
+1946 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+1A00 1A16
+1A19 1A1B
+1A1E 1A1F
+1D00 1DBF
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+200E
+2071
+207F
+2090 2094
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2160 2183
+2336 237A
+2395
+249C 24E9
+26AC
+2800 28FF
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3007
+3021 3029
+3031 3035
+3038 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+3190 31B7
+31F0 321C
+3220 3243
+3260 327B
+327F 32B0
+32C0 32CB
+32D0 32FE
+3300 3376
+337B 33DD
+33E0 33FE
+A000 A48C
+A800 A801
+A803 A805
+A807 A80A
+A80C A824
+A827
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10100
+10102
+10107 10133
+10137 1013F
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+1039F 103C3
+103C8 103D0
+10400 1049D
+104A0 104A9
+1D000 1D0F5
+1D100 1D126
+1D12A 1D166
+1D16A 1D172
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRE.pl
new file mode 100644
index 00000000000..22129c44f2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRE.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Left_To_Right_Embedding'
+#
+return <<'END';
+202A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRO.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRO.pl
new file mode 100644
index 00000000000..10790d181d8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/LRO.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Left_To_Right_Override'
+#
+return <<'END';
+202D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/NSM.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/NSM.pl
new file mode 100644
index 00000000000..75a8e8adc67
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/NSM.pl
@@ -0,0 +1,131 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Nonspacing_Mark'
+#
+return <<'END';
+0300 036F
+0483 0486
+0488 0489
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+0610 0615
+064B 065E
+0670
+06D6 06DC
+06DE 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A01 0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0AE2 0AE3
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBC
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+135F
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+17DD
+180B 180D
+18A9
+1920 1922
+1927 192B
+1932
+1939 193B
+1A17 1A18
+1DC0 1DC3
+20D0 20EB
+302A 302F
+3099 309A
+A802
+A806
+A80B
+A825 A826
+FB1E
+FE00 FE0F
+FE20 FE23
+10A01 10A03
+10A05 10A06
+10A0C 10A0F
+10A38 10A3A
+10A3F
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/ON.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ON.pl
new file mode 100644
index 00000000000..7d51dcbdd50
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/ON.pl
@@ -0,0 +1,150 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Other_Neutral'
+#
+return <<'END';
+0021 0022
+0026 002A
+003B 0040
+005B 0060
+007B 007E
+00A1
+00A6 00A9
+00AB 00AC
+00AE 00AF
+00B4
+00B6 00B8
+00BB 00BF
+00D7
+00F7
+02B9 02BA
+02C2 02CF
+02D2 02DF
+02E5 02ED
+02EF 02FF
+0374 0375
+037E
+0384 0385
+0387
+03F6
+058A
+060E 060F
+06E9
+0BF3 0BF8
+0BFA
+0F3A 0F3D
+1390 1399
+169B 169C
+17F0 17F9
+1800 180A
+1940
+1944 1945
+19DE 19FF
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+2010 2027
+2035 2043
+2045 205E
+207C 207E
+208C 208E
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+2132
+213A 213B
+2140 2144
+214A 214C
+2153 215F
+2190 2211
+2214 2335
+237B 2394
+2396 23DB
+2400 2426
+2440 244A
+2460 2487
+24EA 269C
+26A0 26AB
+26AD 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27C0 27C6
+27D0 27EB
+27F0 27FF
+2900 2B13
+2CE5 2CEA
+2CF9 2CFF
+2E00 2E17
+2E1C 2E1D
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3001 3004
+3008 3020
+3030
+3036 3037
+303D 303F
+309B 309C
+30A0
+30FB
+31C0 31CF
+321D 321E
+3250 325F
+327C 327E
+32B1 32BF
+32CC 32CF
+3377 337A
+33DE 33DF
+33FF
+4DC0 4DFF
+A490 A4C6
+A700 A716
+A828 A82B
+FD3E FD3F
+FDFD
+FE10 FE19
+FE30 FE4F
+FE51
+FE54
+FE56 FE5E
+FE60 FE61
+FE64 FE66
+FE68
+FE6B
+FF01 FF02
+FF06 FF0A
+FF1B FF20
+FF3B FF40
+FF5B FF65
+FFE2 FFE4
+FFE8 FFEE
+FFF9 FFFD
+10101
+10140 1018A
+103D1 103D5
+1D200 1D241
+1D245
+1D300 1D356
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/PDF.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/PDF.pl
new file mode 100644
index 00000000000..6cbfb1f8d1b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/PDF.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Pop_Directional_Format'
+#
+return <<'END';
+202C
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/R.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/R.pl
new file mode 100644
index 00000000000..65ba799e3bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/R.pl
@@ -0,0 +1,36 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Right_To_Left'
+#
+return <<'END';
+05BE
+05C0
+05C3
+05C6
+05D0 05EA
+05F0 05F4
+200F
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FB4F
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00
+10A10 10A13
+10A15 10A17
+10A19 10A33
+10A40 10A47
+10A50 10A58
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLE.pl
new file mode 100644
index 00000000000..851f1fd3513
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLE.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Right_To_Left_Embedding'
+#
+return <<'END';
+202B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLO.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLO.pl
new file mode 100644
index 00000000000..565941526ff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/RLO.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Right_To_Left_Override'
+#
+return <<'END';
+202E
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/S.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/S.pl
new file mode 100644
index 00000000000..ac494648f0f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/S.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'Segment_Separator'
+#
+return <<'END';
+0009
+000B
+001F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/bc/WS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/bc/WS.pl
new file mode 100644
index 00000000000..98f3a5ea3fb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/bc/WS.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# BidiClass category 'White_Space'
+#
+return <<'END';
+000C
+0020
+1680
+180E
+2000 200A
+2028
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/A.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/A.pl
new file mode 100644
index 00000000000..0a094e60306
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/A.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Above'
+#
+return <<'END';
+00E6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AL.pl
new file mode 100644
index 00000000000..9d820799c98
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AL.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Above_Left'
+#
+return <<'END';
+00E4
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AR.pl
new file mode 100644
index 00000000000..c0f80d057b0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/AR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Above_Right'
+#
+return <<'END';
+00E8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATAR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATAR.pl
new file mode 100644
index 00000000000..e5af6df6d8e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATAR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Attached_Above_Right'
+#
+return <<'END';
+00D8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATB.pl
new file mode 100644
index 00000000000..186ef05559a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATB.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Attached_Below'
+#
+return <<'END';
+00CA
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATBL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATBL.pl
new file mode 100644
index 00000000000..c67cd441643
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/ATBL.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Attached_Below_Left'
+#
+return <<'END';
+00C8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/B.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/B.pl
new file mode 100644
index 00000000000..33ed0f6c825
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/B.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Below'
+#
+return <<'END';
+00DC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BL.pl
new file mode 100644
index 00000000000..6f3377bbdfa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BL.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Below_Left'
+#
+return <<'END';
+00DA
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BR.pl
new file mode 100644
index 00000000000..c836d184506
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/BR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Below_Right'
+#
+return <<'END';
+00DE
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DA.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DA.pl
new file mode 100644
index 00000000000..8fd33b2e57e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DA.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Double_Above'
+#
+return <<'END';
+00EA
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DB.pl
new file mode 100644
index 00000000000..a151b8bf94c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/DB.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Double_Below'
+#
+return <<'END';
+00E9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/IS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/IS.pl
new file mode 100644
index 00000000000..5d0573a5ee3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/IS.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Iota_Subscript'
+#
+return <<'END';
+00F0
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/KV.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/KV.pl
new file mode 100644
index 00000000000..b3a98646ca4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/KV.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Kana_Voicing'
+#
+return <<'END';
+0008
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/L.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/L.pl
new file mode 100644
index 00000000000..587a1c4d9c2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/L.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Left'
+#
+return <<'END';
+00E0
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NK.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NK.pl
new file mode 100644
index 00000000000..ff831830fe2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NK.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Nukta'
+#
+return <<'END';
+0007
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NR.pl
new file mode 100644
index 00000000000..d6bf5574952
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/NR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Not_Reordered'
+#
+return <<'END';
+0000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/OV.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/OV.pl
new file mode 100644
index 00000000000..1ebefafb28f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/OV.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Overlay'
+#
+return <<'END';
+0001
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/R.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/R.pl
new file mode 100644
index 00000000000..4046b71875d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/R.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Right'
+#
+return <<'END';
+00E2
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ccc/VR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/VR.pl
new file mode 100644
index 00000000000..482ff128797
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ccc/VR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# CombiningClass category 'Virama'
+#
+return <<'END';
+0009
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/can.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/can.pl
new file mode 100644
index 00000000000..08ddf367ee4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/can.pl
@@ -0,0 +1,222 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Canonical'
+#
+return <<'END';
+00C0 00C5
+00C7 00CF
+00D1 00D6
+00D9 00DD
+00E0 00E5
+00E7 00EF
+00F1 00F6
+00F9 00FD
+00FF 010F
+0112 0125
+0128 0130
+0134 0137
+0139 013E
+0143 0148
+014C 0151
+0154 0165
+0168 017E
+01A0 01A1
+01AF 01B0
+01CD 01DC
+01DE 01E3
+01E6 01F0
+01F4 01F5
+01F8 021B
+021E 021F
+0226 0233
+0340 0341
+0343 0344
+0374
+037E
+0385 038A
+038C
+038E 0390
+03AA 03B0
+03CA 03CE
+03D3 03D4
+0400 0401
+0403
+0407
+040C 040E
+0419
+0439
+0450 0451
+0453
+0457
+045C 045E
+0476 0477
+04C1 04C2
+04D0 04D3
+04D6 04D7
+04DA 04DF
+04E2 04E7
+04EA 04F5
+04F8 04F9
+0622 0626
+06C0
+06C2
+06D3
+0929
+0931
+0934
+0958 095F
+09CB 09CC
+09DC 09DD
+09DF
+0A33
+0A36
+0A59 0A5B
+0A5E
+0B48
+0B4B 0B4C
+0B5C 0B5D
+0B94
+0BCA 0BCC
+0C48
+0CC0
+0CC7 0CC8
+0CCA 0CCB
+0D4A 0D4C
+0DDA
+0DDC 0DDE
+0F43
+0F4D
+0F52
+0F57
+0F5C
+0F69
+0F73
+0F75 0F76
+0F78
+0F81
+0F93
+0F9D
+0FA2
+0FA7
+0FAC
+0FB9
+1026
+1E00 1E99
+1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC1 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFD
+2000 2001
+2126
+212A 212B
+219A 219B
+21AE
+21CD 21CF
+2204
+2209
+220C
+2224
+2226
+2241
+2244
+2247
+2249
+2260
+2262
+226D 2271
+2274 2275
+2278 2279
+2280 2281
+2284 2285
+2288 2289
+22AC 22AF
+22E0 22E3
+22EA 22ED
+2329 232A
+2ADC
+304C
+304E
+3050
+3052
+3054
+3056
+3058
+305A
+305C
+305E
+3060
+3062
+3065
+3067
+3069
+3070 3071
+3073 3074
+3076 3077
+3079 307A
+307C 307D
+3094
+309E
+30AC
+30AE
+30B0
+30B2
+30B4
+30B6
+30B8
+30BA
+30BC
+30BE
+30C0
+30C2
+30C5
+30C7
+30C9
+30D0 30D1
+30D3 30D4
+30D6 30D7
+30D9 30DA
+30DC 30DD
+30F4
+30F7 30FA
+30FE
+F900 FA0D
+FA10
+FA12
+FA15 FA1E
+FA20
+FA22
+FA25 FA26
+FA2A FA2D
+FA30 FA6A
+FA70 FAD9
+FB1D
+FB1F
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FB4E
+1D15E 1D164
+1D1BB 1D1C0
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/com.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/com.pl
new file mode 100644
index 00000000000..973c63cfdad
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/com.pl
@@ -0,0 +1,820 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Compat'
+#
+return <<'END';
+00A0
+00A8
+00A8
+00AA
+00AF
+00AF
+00B2 00B4
+00B4 00B5
+00B5
+00B8
+00B8 00BA
+00BC 00BE
+0132
+0132 0133
+0133
+013F
+013F 0140
+0140
+0149
+0149
+017F
+017F
+01C4
+01C4 01C5
+01C5 01C6
+01C6 01C7
+01C7 01C8
+01C8 01C9
+01C9 01CA
+01CA 01CB
+01CB 01CC
+01CC
+01F1
+01F1 01F2
+01F2 01F3
+01F3
+02B0 02B8
+02D8
+02D8 02D9
+02D9 02DA
+02DA 02DB
+02DB 02DC
+02DC 02DD
+02DD
+02E0 02E4
+037A
+037A
+0384
+0384
+03D0
+03D0 03D1
+03D1 03D2
+03D2
+03D5
+03D5 03D6
+03D6
+03F0
+03F0 03F1
+03F1 03F2
+03F2
+03F4
+03F4 03F5
+03F5
+03F9
+03F9
+0587
+0587
+0675
+0675 0676
+0676 0677
+0677 0678
+0678
+0E33
+0E33
+0EB3
+0EB3
+0EDC
+0EDC 0EDD
+0EDD
+0F0C
+0F77
+0F77
+0F79
+0F79
+10FC
+1D2C 1D2E
+1D30 1D3A
+1D3C 1D4D
+1D4F 1D6A
+1D78
+1D9B 1DBF
+1E9A
+1E9A
+1FBD
+1FBD
+1FBF
+1FBF 1FC0
+1FC0
+1FFE
+1FFE
+2002
+2002 2003
+2003 2004
+2004 2005
+2005 2006
+2006 2008
+2008 2009
+2009 200A
+200A
+2011
+2017
+2017
+2024
+2024 2025
+2025 2026
+2026
+202F
+2033
+2033 2034
+2034
+2036
+2036 2037
+2037
+203C
+203C
+203E
+203E
+2047
+2047 2048
+2048 2049
+2049
+2057
+2057
+205F
+205F
+2070 2071
+2074 208E
+2090 2094
+20A8
+20A8
+2100
+2100 2101
+2101 2103
+2103
+2105
+2105 2106
+2106 2107
+2107
+2109
+2109 2113
+2115 2116
+2116
+2119 211D
+2120 2121
+2121 2122
+2124
+2128
+212C 212D
+212F 2131
+2133 2135
+2135 2136
+2136 2137
+2137 2138
+2138 2139
+213B
+213B 2140
+2145 2149
+2153 2160
+2160 2161
+2161 2162
+2162 2163
+2163 2164
+2164 2165
+2165 2166
+2166 2167
+2167 2168
+2168 2169
+2169 216A
+216A 216B
+216B 216C
+216C 216D
+216D 216E
+216E 216F
+216F 2170
+2170 2171
+2171 2172
+2172 2173
+2173 2174
+2174 2175
+2175 2176
+2176 2177
+2177 2178
+2178 2179
+2179 217A
+217A 217B
+217B 217C
+217C 217D
+217D 217E
+217E 217F
+217F
+222C
+222C 222D
+222D
+222F
+222F 2230
+2230
+2460 2474
+2474 2475
+2475 2476
+2476 2477
+2477 2478
+2478 2479
+2479 247A
+247A 247B
+247B 247C
+247C 247D
+247D 247E
+247E 247F
+247F 2480
+2480 2481
+2481 2482
+2482 2483
+2483 2484
+2484 2485
+2485 2486
+2486 2487
+2487 2488
+2488 2489
+2489 248A
+248A 248B
+248B 248C
+248C 248D
+248D 248E
+248E 248F
+248F 2490
+2490 2491
+2491 2492
+2492 2493
+2493 2494
+2494 2495
+2495 2496
+2496 2497
+2497 2498
+2498 2499
+2499 249A
+249A 249B
+249B 249C
+249C 249D
+249D 249E
+249E 249F
+249F 24A0
+24A0 24A1
+24A1 24A2
+24A2 24A3
+24A3 24A4
+24A4 24A5
+24A5 24A6
+24A6 24A7
+24A7 24A8
+24A8 24A9
+24A9 24AA
+24AA 24AB
+24AB 24AC
+24AC 24AD
+24AD 24AE
+24AE 24AF
+24AF 24B0
+24B0 24B1
+24B1 24B2
+24B2 24B3
+24B3 24B4
+24B4 24B5
+24B5 24EA
+2A0C
+2A0C
+2A74
+2A74 2A75
+2A75 2A76
+2A76
+2D6F
+2E9F
+2E9F
+2EF3
+2EF3
+2F00
+2F00 2F01
+2F01 2F02
+2F02 2F03
+2F03 2F04
+2F04 2F05
+2F05 2F06
+2F06 2F07
+2F07 2F08
+2F08 2F09
+2F09 2F0A
+2F0A 2F0B
+2F0B 2F0C
+2F0C 2F0D
+2F0D 2F0E
+2F0E 2F0F
+2F0F 2F10
+2F10 2F11
+2F11 2F12
+2F12 2F13
+2F13 2F14
+2F14 2F15
+2F15 2F16
+2F16 2F17
+2F17 2F18
+2F18 2F19
+2F19 2F1A
+2F1A 2F1B
+2F1B 2F1C
+2F1C 2F1D
+2F1D 2F1E
+2F1E 2F1F
+2F1F 2F20
+2F20 2F21
+2F21 2F22
+2F22 2F23
+2F23 2F24
+2F24 2F25
+2F25 2F26
+2F26 2F27
+2F27 2F28
+2F28 2F29
+2F29 2F2A
+2F2A 2F2B
+2F2B 2F2C
+2F2C 2F2D
+2F2D 2F2E
+2F2E 2F2F
+2F2F 2F30
+2F30 2F31
+2F31 2F32
+2F32 2F33
+2F33 2F34
+2F34 2F35
+2F35 2F36
+2F36 2F37
+2F37 2F38
+2F38 2F39
+2F39 2F3A
+2F3A 2F3B
+2F3B 2F3C
+2F3C 2F3D
+2F3D 2F3E
+2F3E 2F3F
+2F3F 2F40
+2F40 2F41
+2F41 2F42
+2F42 2F43
+2F43 2F44
+2F44 2F45
+2F45 2F46
+2F46 2F47
+2F47 2F48
+2F48 2F49
+2F49 2F4A
+2F4A 2F4B
+2F4B 2F4C
+2F4C 2F4D
+2F4D 2F4E
+2F4E 2F4F
+2F4F 2F50
+2F50 2F51
+2F51 2F52
+2F52 2F53
+2F53 2F54
+2F54 2F55
+2F55 2F56
+2F56 2F57
+2F57 2F58
+2F58 2F59
+2F59 2F5A
+2F5A 2F5B
+2F5B 2F5C
+2F5C 2F5D
+2F5D 2F5E
+2F5E 2F5F
+2F5F 2F60
+2F60 2F61
+2F61 2F62
+2F62 2F63
+2F63 2F64
+2F64 2F65
+2F65 2F66
+2F66 2F67
+2F67 2F68
+2F68 2F69
+2F69 2F6A
+2F6A 2F6B
+2F6B 2F6C
+2F6C 2F6D
+2F6D 2F6E
+2F6E 2F6F
+2F6F 2F70
+2F70 2F71
+2F71 2F72
+2F72 2F73
+2F73 2F74
+2F74 2F75
+2F75 2F76
+2F76 2F77
+2F77 2F78
+2F78 2F79
+2F79 2F7A
+2F7A 2F7B
+2F7B 2F7C
+2F7C 2F7D
+2F7D 2F7E
+2F7E 2F7F
+2F7F 2F80
+2F80 2F81
+2F81 2F82
+2F82 2F83
+2F83 2F84
+2F84 2F85
+2F85 2F86
+2F86 2F87
+2F87 2F88
+2F88 2F89
+2F89 2F8A
+2F8A 2F8B
+2F8B 2F8C
+2F8C 2F8D
+2F8D 2F8E
+2F8E 2F8F
+2F8F 2F90
+2F90 2F91
+2F91 2F92
+2F92 2F93
+2F93 2F94
+2F94 2F95
+2F95 2F96
+2F96 2F97
+2F97 2F98
+2F98 2F99
+2F99 2F9A
+2F9A 2F9B
+2F9B 2F9C
+2F9C 2F9D
+2F9D 2F9E
+2F9E 2F9F
+2F9F 2FA0
+2FA0 2FA1
+2FA1 2FA2
+2FA2 2FA3
+2FA3 2FA4
+2FA4 2FA5
+2FA5 2FA6
+2FA6 2FA7
+2FA7 2FA8
+2FA8 2FA9
+2FA9 2FAA
+2FAA 2FAB
+2FAB 2FAC
+2FAC 2FAD
+2FAD 2FAE
+2FAE 2FAF
+2FAF 2FB0
+2FB0 2FB1
+2FB1 2FB2
+2FB2 2FB3
+2FB3 2FB4
+2FB4 2FB5
+2FB5 2FB6
+2FB6 2FB7
+2FB7 2FB8
+2FB8 2FB9
+2FB9 2FBA
+2FBA 2FBB
+2FBB 2FBC
+2FBC 2FBD
+2FBD 2FBE
+2FBE 2FBF
+2FBF 2FC0
+2FC0 2FC1
+2FC1 2FC2
+2FC2 2FC3
+2FC3 2FC4
+2FC4 2FC5
+2FC5 2FC6
+2FC6 2FC7
+2FC7 2FC8
+2FC8 2FC9
+2FC9 2FCA
+2FCA 2FCB
+2FCB 2FCC
+2FCC 2FCD
+2FCD 2FCE
+2FCE 2FCF
+2FCF 2FD0
+2FD0 2FD1
+2FD1 2FD2
+2FD2 2FD3
+2FD3 2FD4
+2FD4 2FD5
+2FD5
+3000
+3036
+3036
+3038
+3038 3039
+3039 303A
+303A
+309B
+309B 309C
+309C
+309F
+30FF
+3131
+3131 3132
+3132 3133
+3133 3134
+3134 3135
+3135 3136
+3136 3137
+3137 3138
+3138 3139
+3139 313A
+313A 313B
+313B 313C
+313C 313D
+313D 313E
+313E 313F
+313F 3140
+3140 3141
+3141 3142
+3142 3143
+3143 3144
+3144 3145
+3145 3146
+3146 3147
+3147 3148
+3148 3149
+3149 314A
+314A 314B
+314B 314C
+314C 314D
+314D 314E
+314E 314F
+314F 3150
+3150 3151
+3151 3152
+3152 3153
+3153 3154
+3154 3155
+3155 3156
+3156 3157
+3157 3158
+3158 3159
+3159 315A
+315A 315B
+315B 315C
+315C 315D
+315D 315E
+315E 315F
+315F 3160
+3160 3161
+3161 3162
+3162 3163
+3163 3164
+3164 3165
+3165 3166
+3166 3167
+3167 3168
+3168 3169
+3169 316A
+316A 316B
+316B 316C
+316C 316D
+316D 316E
+316E 316F
+316F 3170
+3170 3171
+3171 3172
+3172 3173
+3173 3174
+3174 3175
+3175 3176
+3176 3177
+3177 3178
+3178 3179
+3179 317A
+317A 317B
+317B 317C
+317C 317D
+317D 317E
+317E 317F
+317F 3180
+3180 3181
+3181 3182
+3182 3183
+3183 3184
+3184 3185
+3185 3186
+3186 3187
+3187 3188
+3188 3189
+3189 318A
+318A 318B
+318B 318C
+318C 318D
+318D 318E
+318E
+3192 319F
+3200
+3200 3201
+3201 3202
+3202 3203
+3203 3204
+3204 3205
+3205 3206
+3206 3207
+3207 3208
+3208 3209
+3209 320A
+320A 320B
+320B 320C
+320C 320D
+320D 320E
+320E 320F
+320F 3210
+3210 3211
+3211 3212
+3212 3213
+3213 3214
+3214 3215
+3215 3216
+3216 3217
+3217 3218
+3218 3219
+3219 321A
+321A 321B
+321B 321C
+321C 321D
+321D 321E
+321E
+3220
+3220 3221
+3221 3222
+3222 3223
+3223 3224
+3224 3225
+3225 3226
+3226 3227
+3227 3228
+3228 3229
+3229 322A
+322A 322B
+322B 322C
+322C 322D
+322D 322E
+322E 322F
+322F 3230
+3230 3231
+3231 3232
+3232 3233
+3233 3234
+3234 3235
+3235 3236
+3236 3237
+3237 3238
+3238 3239
+3239 323A
+323A 323B
+323B 323C
+323C 323D
+323D 323E
+323E 323F
+323F 3240
+3240 3241
+3241 3242
+3242 3243
+3243
+3250 327E
+3280 32C0
+32C0 32C1
+32C1 32C2
+32C2 32C3
+32C3 32C4
+32C4 32C5
+32C5 32C6
+32C6 32C7
+32C7 32C8
+32C8 32C9
+32C9 32CA
+32CA 32CB
+32CB 32FE
+3300 3358
+3358 3359
+3359 335A
+335A 335B
+335B 335C
+335C 335D
+335D 335E
+335E 335F
+335F 3360
+3360 3361
+3361 3362
+3362 3363
+3363 3364
+3364 3365
+3365 3366
+3366 3367
+3367 3368
+3368 3369
+3369 336A
+336A 336B
+336B 336C
+336C 336D
+336D 336E
+336E 336F
+336F 3370
+3370 33E0
+33E0 33E1
+33E1 33E2
+33E2 33E3
+33E3 33E4
+33E4 33E5
+33E5 33E6
+33E6 33E7
+33E7 33E8
+33E8 33E9
+33E9 33EA
+33EA 33EB
+33EB 33EC
+33EC 33ED
+33ED 33EE
+33EE 33EF
+33EF 33F0
+33F0 33F1
+33F1 33F2
+33F2 33F3
+33F3 33F4
+33F4 33F5
+33F5 33F6
+33F6 33F7
+33F7 33F8
+33F8 33F9
+33F9 33FA
+33FA 33FB
+33FB 33FC
+33FC 33FD
+33FD 33FE
+33FE 33FF
+FB00
+FB00 FB01
+FB01 FB02
+FB02 FB03
+FB03 FB04
+FB04 FB05
+FB05 FB06
+FB06
+FB13
+FB13 FB14
+FB14 FB15
+FB15 FB16
+FB16 FB17
+FB17
+FB20 FB29
+FB4F
+FB4F FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFC
+FE10 FE19
+FE30 FE44
+FE47 FE49
+FE49 FE4A
+FE4A FE4B
+FE4B FE4C
+FE4C FE4D
+FE4D FE4E
+FE4E FE4F
+FE4F FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE72
+FE74
+FE76 FEFC
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/enc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/enc.pl
new file mode 100644
index 00000000000..e5cb3a29692
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/enc.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Circle'
+#
+return <<'END';
+2460 2473
+24B6 24EA
+3251 327E
+3280 32BF
+32D0 32FE
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/fin.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/fin.pl
new file mode 100644
index 00000000000..904383302ff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/fin.pl
@@ -0,0 +1,122 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Final'
+#
+return <<'END';
+FB51
+FB53
+FB57
+FB5B
+FB5F
+FB63
+FB67
+FB6B
+FB6F
+FB73
+FB77
+FB7B
+FB7F
+FB83
+FB85
+FB87
+FB89
+FB8B
+FB8D
+FB8F
+FB93
+FB97
+FB9B
+FB9F
+FBA1
+FBA5
+FBA7
+FBAB
+FBAF
+FBB1
+FBD4
+FBD8
+FBDA
+FBDC
+FBDF
+FBE1
+FBE3
+FBE5
+FBEB
+FBED
+FBEF
+FBF1
+FBF3
+FBF5
+FBF7
+FBFA
+FBFD
+FC64 FC96
+FD11 FD2C
+FD3C
+FD51
+FD58
+FD5A FD5B
+FD5E FD5F
+FD62
+FD64
+FD66 FD67
+FD69 FD6A
+FD6C
+FD6E FD6F
+FD71
+FD74 FD76
+FD78 FD7C
+FD7E FD82
+FD84 FD85
+FD87
+FD8B
+FD96 FD97
+FD99 FD9C
+FD9E FDB3
+FDB6 FDB7
+FDB9
+FDBB FDC2
+FDC6 FDC7
+FE82
+FE84
+FE86
+FE88
+FE8A
+FE8E
+FE90
+FE94
+FE96
+FE9A
+FE9E
+FEA2
+FEA6
+FEAA
+FEAC
+FEAE
+FEB0
+FEB2
+FEB6
+FEBA
+FEBE
+FEC2
+FEC6
+FECA
+FECE
+FED2
+FED6
+FEDA
+FEDE
+FEE2
+FEE6
+FEEA
+FEEE
+FEF0
+FEF2
+FEF6
+FEF8
+FEFA
+FEFC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/font.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/font.pl
new file mode 100644
index 00000000000..849112dbd4d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/font.pl
@@ -0,0 +1,43 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Font'
+#
+return <<'END';
+2102
+210A 2113
+2115
+2119 211D
+2124
+2128
+212C 212D
+212F 2131
+2133 2134
+2139
+213C 2140
+2145 2149
+FB20 FB29
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/fra.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/fra.pl
new file mode 100644
index 00000000000..94db2d36735
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/fra.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Fraction'
+#
+return <<'END';
+00BC 00BE
+2153 215F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/init.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/init.pl
new file mode 100644
index 00000000000..7fd35d29ae5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/init.pl
@@ -0,0 +1,84 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Initial'
+#
+return <<'END';
+FB54
+FB58
+FB5C
+FB60
+FB64
+FB68
+FB6C
+FB70
+FB74
+FB78
+FB7C
+FB80
+FB90
+FB94
+FB98
+FB9C
+FBA2
+FBA8
+FBAC
+FBD5
+FBE6
+FBE8
+FBF8
+FBFB
+FBFE
+FC97 FCDE
+FD2D FD33
+FD50
+FD52 FD57
+FD59
+FD5C FD5D
+FD60 FD61
+FD63
+FD65
+FD68
+FD6B
+FD6D
+FD70
+FD72 FD73
+FD77
+FD7D
+FD83
+FD86
+FD88 FD8A
+FD8C FD8F
+FD92 FD95
+FD98
+FD9D
+FDB4 FDB5
+FDB8
+FDBA
+FDC3 FDC5
+FE8B
+FE91
+FE97
+FE9B
+FE9F
+FEA3
+FEA7
+FEB3
+FEB7
+FEBB
+FEBF
+FEC3
+FEC7
+FECB
+FECF
+FED3
+FED7
+FEDB
+FEDF
+FEE3
+FEE7
+FEEB
+FEF3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/iso.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/iso.pl
new file mode 100644
index 00000000000..1c39772d1a4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/iso.pl
@@ -0,0 +1,107 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Isolated'
+#
+return <<'END';
+FB50
+FB52
+FB56
+FB5A
+FB5E
+FB62
+FB66
+FB6A
+FB6E
+FB72
+FB76
+FB7A
+FB7E
+FB82
+FB84
+FB86
+FB88
+FB8A
+FB8C
+FB8E
+FB92
+FB96
+FB9A
+FB9E
+FBA0
+FBA4
+FBA6
+FBAA
+FBAE
+FBB0
+FBD3
+FBD7
+FBD9
+FBDB
+FBDD FBDE
+FBE0
+FBE2
+FBE4
+FBEA
+FBEC
+FBEE
+FBF0
+FBF2
+FBF4
+FBF6
+FBF9
+FBFC
+FC00 FC63
+FCF5 FD10
+FD3D
+FDF0 FDFC
+FE70
+FE72
+FE74
+FE76
+FE78
+FE7A
+FE7C
+FE7E
+FE80 FE81
+FE83
+FE85
+FE87
+FE89
+FE8D
+FE8F
+FE93
+FE95
+FE99
+FE9D
+FEA1
+FEA5
+FEA9
+FEAB
+FEAD
+FEAF
+FEB1
+FEB5
+FEB9
+FEBD
+FEC1
+FEC5
+FEC9
+FECD
+FED1
+FED5
+FED9
+FEDD
+FEE1
+FEE5
+FEE9
+FEED
+FEEF
+FEF1
+FEF5
+FEF7
+FEF9
+FEFB
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/med.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/med.pl
new file mode 100644
index 00000000000..88ae9102947
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/med.pl
@@ -0,0 +1,63 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Medial'
+#
+return <<'END';
+FB55
+FB59
+FB5D
+FB61
+FB65
+FB69
+FB6D
+FB71
+FB75
+FB79
+FB7D
+FB81
+FB91
+FB95
+FB99
+FB9D
+FBA3
+FBA9
+FBAD
+FBD6
+FBE7
+FBE9
+FBFF
+FCDF FCF4
+FD34 FD3B
+FE71
+FE77
+FE79
+FE7B
+FE7D
+FE7F
+FE8C
+FE92
+FE98
+FE9C
+FEA0
+FEA4
+FEA8
+FEB4
+FEB8
+FEBC
+FEC0
+FEC4
+FEC8
+FECC
+FED0
+FED4
+FED8
+FEDC
+FEE0
+FEE4
+FEE8
+FEEC
+FEF4
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/nar.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/nar.pl
new file mode 100644
index 00000000000..03d169a7250
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/nar.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Narrow'
+#
+return <<'END';
+FF61 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE8 FFEE
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/nb.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/nb.pl
new file mode 100644
index 00000000000..bdf1ac40251
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/nb.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Nobreak'
+#
+return <<'END';
+00A0
+0F0C
+2007
+2011
+202F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/sml.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sml.pl
new file mode 100644
index 00000000000..ca6b15f36f8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sml.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Small'
+#
+return <<'END';
+FE50 FE52
+FE54 FE66
+FE68 FE6B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/sqr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sqr.pl
new file mode 100644
index 00000000000..604d8978744
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sqr.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Square'
+#
+return <<'END';
+3250
+32CC 32CF
+3300 3357
+3371 33DF
+33FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/sub.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sub.pl
new file mode 100644
index 00000000000..c5eee14337c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sub.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Sub'
+#
+return <<'END';
+1D62 1D6A
+2080 208E
+2090 2094
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/sup.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sup.pl
new file mode 100644
index 00000000000..ae522e76b37
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/sup.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Super'
+#
+return <<'END';
+00AA
+00B2 00B3
+00B9 00BA
+02B0 02B8
+02E0 02E4
+10FC
+1D2C 1D2E
+1D30 1D3A
+1D3C 1D4D
+1D4F 1D61
+1D78
+1D9B 1DBF
+2070 2071
+2074 207F
+2120
+2122
+2D6F
+3192 319F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/vert.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/vert.pl
new file mode 100644
index 00000000000..6edf400e8e1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/vert.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Vertical'
+#
+return <<'END';
+309F
+30FF
+FE10 FE19
+FE30 FE44
+FE47 FE48
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/dt/wide.pl b/Master/tlpkg/tlperl/lib/unicore/lib/dt/wide.pl
new file mode 100644
index 00000000000..99ef5131f17
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/dt/wide.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# DecompositionType category 'Wide'
+#
+return <<'END';
+3000
+FF01 FF60
+FFE0 FFE6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/A.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/A.pl
new file mode 100644
index 00000000000..4a0cbd04120
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/A.pl
@@ -0,0 +1,168 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Ambiguous'
+#
+return <<'END';
+00A1
+00A4
+00A7 00A8
+00AA
+00AD 00AE
+00B0 00B4
+00B6 00BA
+00BC 00BF
+00C6
+00D0
+00D7 00D8
+00DE 00E1
+00E6
+00E8 00EA
+00EC 00ED
+00F0
+00F2 00F3
+00F7 00FA
+00FC
+00FE
+0101
+0111
+0113
+011B
+0126 0127
+012B
+0131 0133
+0138
+013F 0142
+0144
+0148 014B
+014D
+0152 0153
+0166 0167
+016B
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC
+0251
+0261
+02C4
+02C7
+02C9 02CB
+02CD
+02D0
+02D8 02DB
+02DD
+02DF
+0300 036F
+0391 03A1
+03A3 03A9
+03B1 03C1
+03C3 03C9
+0401
+0410 044F
+0451
+2010
+2013 2016
+2018 2019
+201C 201D
+2020 2022
+2024 2027
+2030
+2032 2033
+2035
+203B
+203E
+2074
+207F
+2081 2084
+20AC
+2103
+2105
+2109
+2113
+2116
+2121 2122
+2126
+212B
+2153 2154
+215B 215E
+2160 216B
+2170 2179
+2190 2199
+21B8 21B9
+21D2
+21D4
+21E7
+2200
+2202 2203
+2207 2208
+220B
+220F
+2211
+2215
+221A
+221D 2220
+2223
+2225
+2227 222C
+222E
+2234 2237
+223C 223D
+2248
+224C
+2252
+2260 2261
+2264 2267
+226A 226B
+226E 226F
+2282 2283
+2286 2287
+2295
+2299
+22A5
+22BF
+2312
+2460 24E9
+24EB 254B
+2550 2573
+2580 258F
+2592 2595
+25A0 25A1
+25A3 25A9
+25B2 25B3
+25B6 25B7
+25BC 25BD
+25C0 25C1
+25C6 25C8
+25CB
+25CE 25D1
+25E2 25E5
+25EF
+2605 2606
+2609
+260E 260F
+2614 2615
+261C
+261E
+2640
+2642
+2660 2661
+2663 2665
+2667 266A
+266C 266D
+266F
+273D
+2776 277F
+E000 F8FF
+FE00 FE0F
+FFFD
+E0100 E01EF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/F.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/F.pl
new file mode 100644
index 00000000000..593b4680ec2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/F.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Fullwidth'
+#
+return <<'END';
+3000
+FF01 FF60
+FFE0 FFE6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/H.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/H.pl
new file mode 100644
index 00000000000..ad6e3280b78
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/H.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Halfwidth'
+#
+return <<'END';
+20A9
+FF61 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE8 FFEE
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/N.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/N.pl
new file mode 100644
index 00000000000..fc34014ca7a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/N.pl
@@ -0,0 +1,540 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Neutral'
+#
+return <<'END';
+0000 001F
+007F 00A0
+00A9
+00AB
+00B5
+00BB
+00C0 00C5
+00C7 00CF
+00D1 00D6
+00D9 00DD
+00E2 00E5
+00E7
+00EB
+00EE 00EF
+00F1
+00F4 00F6
+00FB
+00FD
+00FF 0100
+0102 0110
+0112
+0114 011A
+011C 0125
+0128 012A
+012C 0130
+0134 0137
+0139 013E
+0143
+0145 0147
+014C
+014E 0151
+0154 0165
+0168 016A
+016C 01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DD 0241
+0250
+0252 0260
+0262 02C3
+02C5 02C6
+02C8
+02CC
+02CE 02CF
+02D1 02D7
+02DC
+02DE
+02E0 02FF
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 0390
+03AA 03B0
+03C2
+03CA 03CE
+03D0 0400
+0402 040F
+0450
+0452 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05B9
+05BB 05C7
+05D0 05EA
+05F0 05F4
+0600 0603
+060B 0615
+061B
+061E 061F
+0621 063A
+0640 065E
+0660 070D
+070F 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0970
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0AF1
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BFA
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF 0FD1
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10FC
+1160 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F 137C
+1380 1399
+13A0 13F4
+1401 1676
+1680 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DD
+17E0 17E9
+17F0 17F9
+1800 180E
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1940
+1944 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+19DE 1A1B
+1A1E 1A1F
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2000 200F
+2011 2012
+2017
+201A 201B
+201E 201F
+2023
+2028 202F
+2031
+2034
+2036 203A
+203C 203D
+203F 2063
+206A 2071
+2075 207E
+2080
+2085 208E
+2090 2094
+20A0 20A8
+20AA 20AB
+20AD 20B5
+20D0 20EB
+2100 2102
+2104
+2106 2108
+210A 2112
+2114 2115
+2117 2120
+2123 2125
+2127 212A
+212C 214C
+2155 215A
+215F
+216C 216F
+217A 2183
+219A 21B7
+21BA 21D1
+21D3
+21D5 21E6
+21E8 21FF
+2201
+2204 2206
+2209 220A
+220C 220E
+2210
+2212 2214
+2216 2219
+221B 221C
+2221 2222
+2224
+2226
+222D
+222F 2233
+2238 223B
+223E 2247
+2249 224B
+224D 2251
+2253 225F
+2262 2263
+2268 2269
+226C 226D
+2270 2281
+2284 2285
+2288 2294
+2296 2298
+229A 22A4
+22A6 22BE
+22C0 2311
+2313 2328
+232B 23DB
+2400 2426
+2440 244A
+24EA
+254C 254F
+2574 257F
+2590 2591
+2596 259F
+25A2
+25AA 25B1
+25B4 25B5
+25B8 25BB
+25BE 25BF
+25C2 25C5
+25C9 25CA
+25CC 25CD
+25D2 25E1
+25E6 25EE
+25F0 2604
+2607 2608
+260A 260D
+2610 2613
+2616 261B
+261D
+261F 263F
+2641
+2643 265F
+2662
+2666
+266B
+266E
+2670 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 273C
+273E 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2775
+2780 2794
+2798 27AF
+27B1 27BE
+27C0 27C6
+27D0 27E5
+27F0 2984
+2987 2B13
+2C00 2C2E
+2C30 2C5E
+2C80 2CEA
+2CF9 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+2E00 2E17
+2E1C 2E1D
+303F
+4DC0 4DFF
+A700 A716
+A800 A82B
+D800 DFFF
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFD
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FEFF
+FFF9 FFFC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10100 10102
+10107 10133
+10137 1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+1039F 103C3
+103C8 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F 10A47
+10A50 10A58
+1D000 1D0F5
+1D100 1D126
+1D12A 1D1DD
+1D200 1D245
+1D300 1D356
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+E0001
+E0020 E007F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/Na.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/Na.pl
new file mode 100644
index 00000000000..3e74768687b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/Na.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Narrow'
+#
+return <<'END';
+0020 007E
+00A2 00A3
+00A5 00A6
+00AC
+00AF
+27E6 27EB
+2985 2986
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/ea/W.pl b/Master/tlpkg/tlperl/lib/unicore/lib/ea/W.pl
new file mode 100644
index 00000000000..5976941c199
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/ea/W.pl
@@ -0,0 +1,40 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# EastAsianWidth category 'Wide'
+#
+return <<'END';
+1100 1159
+115F
+2329 232A
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3001 303E
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31C0 31CF
+31F0 321E
+3220 3243
+3250 32FE
+3300 4DB5
+4E00 9FBB
+A000 A48C
+A490 A4C6
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FE10 FE19
+FE30 FE52
+FE54 FE66
+FE68 FE6B
+20000 2FFFD
+30000 3FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AHex.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AHex.pl
new file mode 100644
index 00000000000..917392baafc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AHex.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'ASCII_Hex_Digit'
+#
+return <<'END';
+0030 0039 ASCII_Hex_Digit
+0041 0046 ASCII_Hex_Digit
+0061 0066 ASCII_Hex_Digit
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ASCII.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ASCII.pl
new file mode 100644
index 00000000000..dc7db1e1773
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ASCII.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{ASCII}
+#
+# Meaning: [[:ASCII:]]
+#
+return <<'END';
+0000 007F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alnum.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alnum.pl
new file mode 100644
index 00000000000..58176b0bb58
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alnum.pl
@@ -0,0 +1,448 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alnum}
+#
+# Meaning: [[:Alnum:]]
+#
+return <<'END';
+0030 0039
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+0300 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+0483 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+05D0 05EA
+05F0 05F2
+0610 0615
+0621 063A
+0640 065E
+0660 0669
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06FC
+06FF
+0710 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BEF
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F29
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17B3
+17B6 17D3
+17D7
+17DC 17DD
+17E0 17E9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1946 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+1A00 1A1B
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2090 2094
+20D0 20EB
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3006
+302A 302F
+3031 3035
+303B 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A827
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10300 1031E
+10330 10349
+10380 1039D
+103A0 103C3
+103C8 103CF
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alpha.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alpha.pl
new file mode 100644
index 00000000000..54a4bda4b05
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alpha.pl
@@ -0,0 +1,430 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alpha}
+#
+# Meaning: [[:Alpha:]]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+0300 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+0483 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+05D0 05EA
+05F0 05F2
+0610 0615
+0621 063A
+0640 065E
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06EF
+06FA 06FC
+06FF
+0710 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0963
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09F0 09F1
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A70 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0EDC 0EDD
+0F00
+0F18 0F19
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1050 1059
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17B3
+17B6 17D3
+17D7
+17DC 17DD
+180B 180D
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1950 196D
+1970 1974
+1980 19A9
+19B0 19C9
+1A00 1A1B
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2090 2094
+20D0 20EB
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3006
+302A 302F
+3031 3035
+303B 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A827
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10300 1031E
+10330 10349
+10380 1039D
+103A0 103C3
+103C8 103CF
+10400 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alphabet.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alphabet.pl
new file mode 100644
index 00000000000..17b2548e144
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Alphabet.pl
@@ -0,0 +1,415 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Alphabetic} (and fuzzy permutations)
+#
+# Meaning: [\p{L}\p{OtherAlphabetic}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+0345
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05B0 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+05D0 05EA
+05F0 05F2
+0610 0615
+0621 063A
+0640 0657
+0659 065E
+066E 06D3
+06D5 06DC
+06E1 06E8
+06ED 06EF
+06FA 06FC
+06FF
+0710 073F
+074D 076D
+0780 07B1
+0901 0939
+093D 094C
+0950
+0958 0963
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD 09C4
+09C7 09C8
+09CB 09CC
+09CE
+09D7
+09DC 09DD
+09DF 09E3
+09F0 09F1
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3E 0A42
+0A47 0A48
+0A4B 0A4C
+0A59 0A5C
+0A5E
+0A70 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD 0AC5
+0AC7 0AC9
+0ACB 0ACC
+0AD0
+0AE0 0AE3
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D 0B43
+0B47 0B48
+0B4B 0B4C
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4C
+0C55 0C56
+0C60 0C61
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD 0CC4
+0CC6 0CC8
+0CCA 0CCC
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4C
+0D57
+0D60 0D61
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E46
+0E4D
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0ECD
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F71 0F81
+0F88 0F8B
+0F90 0F97
+0F99 0FBC
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036
+1038
+1050 1059
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1713
+1720 1733
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17B3
+17B6 17C8
+17D7
+17DC
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 1938
+1950 196D
+1970 1974
+1980 19A9
+19B0 19C9
+1A00 1A1B
+1D00 1DBF
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2090 2094
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+24B6 24E9
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3006
+3031 3035
+303B 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A801
+A803 A805
+A807 A80A
+A80C A827
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10300 1031E
+10330 10349
+10380 1039D
+103A0 103C3
+103C8 103CF
+10400 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Any.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Any.pl
new file mode 100644
index 00000000000..f98cd73ced4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Any.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Any}
+# \p{Any}
+#
+# Meaning: [\x{0000}-\x{10FFFF}]
+#
+return <<'END';
+0000 10FFFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Arab.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Arab.pl
new file mode 100644
index 00000000000..ed9ebd5c069
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Arab.pl
@@ -0,0 +1,29 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Arabic} (and fuzzy permutations)
+#
+# Meaning: Script 'Arabic'
+#
+return <<'END';
+060B Arabic
+060D 0615 Arabic
+061E Arabic
+0621 063A Arabic
+0641 064A Arabic
+0656 065E Arabic
+066A 066F Arabic
+0671 06DC Arabic
+06DE 06FF Arabic
+0750 076D Arabic
+FB50 FBB1 Arabic
+FBD3 FD3D Arabic
+FD50 FD8F Arabic
+FD92 FDC7 Arabic
+FDF0 FDFC Arabic
+FE70 FE74 Arabic
+FE76 FEFC Arabic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Armn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Armn.pl
new file mode 100644
index 00000000000..0aa98b8de20
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Armn.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Armenian} (and fuzzy permutations)
+#
+# Meaning: Script 'Armenian'
+#
+return <<'END';
+0531 0556 Armenian
+0559 055F Armenian
+0561 0587 Armenian
+058A Armenian
+FB13 FB17 Armenian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AsciiHex.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AsciiHex.pl
new file mode 100644
index 00000000000..be2637d80ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/AsciiHex.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{AsciiHexDigit} (and fuzzy permutations)
+#
+# Meaning: Extended property 'ASCII_Hex_Digit'
+#
+return <<'END';
+0030 0039 ASCII_Hex_Digit
+0041 0046 ASCII_Hex_Digit
+0061 0066 ASCII_Hex_Digit
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Assigned.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Assigned.pl
new file mode 100644
index 00000000000..66a7c540201
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Assigned.pl
@@ -0,0 +1,432 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Assigned}
+#
+# Meaning: All assigned code points
+#
+return <<'END';
+0000 0241
+0250 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05B9
+05BB 05C7
+05D0 05EA
+05F0 05F4
+0600 0603
+060B 0615
+061B
+061E 061F
+0621 063A
+0640 065E
+0660 070D
+070F 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0970
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0AF1
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BFA
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF 0FD1
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F 137C
+1380 1399
+13A0 13F4
+1401 1676
+1680 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DD
+17E0 17E9
+17F0 17F9
+1800 180E
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1940
+1944 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+19DE 1A1B
+1A1E 1A1F
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2000 2063
+206A 2071
+2074 208E
+2090 2094
+20A0 20B5
+20D0 20EB
+2100 214C
+2153 2183
+2190 23DB
+2400 2426
+2440 244A
+2460 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27C0 27C6
+27D0 27EB
+27F0 2B13
+2C00 2C2E
+2C30 2C5E
+2C80 2CEA
+2CF9 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+2E00 2E17
+2E1C 2E1D
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3000 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31C0 31CF
+31F0 321E
+3220 3243
+3250 32FE
+3300 4DB5
+4DC0 9FBB
+A000 A48C
+A490 A4C6
+A700 A716
+A800 A82B
+AC00 D7A3
+D800 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFD
+FE00 FE19
+FE20 FE23
+FE30 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FEFF
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFF9 FFFD
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10100 10102
+10107 10133
+10137 1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+1039F 103C3
+103C8 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F 10A47
+10A50 10A58
+1D000 1D0F5
+1D100 1D126
+1D12A 1D1DD
+1D200 1D245
+1D300 1D356
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0001
+E0020 E007F
+E0100 E01EF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Beng.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Beng.pl
new file mode 100644
index 00000000000..2df6a3ccfa4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Beng.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Bengali} (and fuzzy permutations)
+#
+# Meaning: Script 'Bengali'
+#
+return <<'END';
+0981 0983 Bengali
+0985 098C Bengali
+098F 0990 Bengali
+0993 09A8 Bengali
+09AA 09B0 Bengali
+09B2 Bengali
+09B6 09B9 Bengali
+09BC 09C4 Bengali
+09C7 09C8 Bengali
+09CB 09CE Bengali
+09D7 Bengali
+09DC 09DD Bengali
+09DF 09E3 Bengali
+09E6 09FA Bengali
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiC.pl
new file mode 100644
index 00000000000..634625fc6f2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiC.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Bidi_Control'
+#
+return <<'END';
+200E 200F Bidi_Control
+202A 202E Bidi_Control
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiCont.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiCont.pl
new file mode 100644
index 00000000000..7f51ac42b26
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/BidiCont.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{BidiControl} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Bidi_Control'
+#
+return <<'END';
+200E 200F Bidi_Control
+202A 202E Bidi_Control
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Blank.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Blank.pl
new file mode 100644
index 00000000000..6d8519ac41c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Blank.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Blank}
+#
+# Meaning: [[:Blank:]]
+#
+return <<'END';
+0009
+0020
+00A0
+1680
+180E
+2000 200A
+202F
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bopo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bopo.pl
new file mode 100644
index 00000000000..955e0c99a2d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bopo.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Bopomofo} (and fuzzy permutations)
+#
+# Meaning: Script 'Bopomofo'
+#
+return <<'END';
+3105 312C Bopomofo
+31A0 31B7 Bopomofo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Brai.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Brai.pl
new file mode 100644
index 00000000000..368ded7e411
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Brai.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Braille} (and fuzzy permutations)
+#
+# Meaning: Script 'Braille'
+#
+return <<'END';
+2800 28FF Braille
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bugi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bugi.pl
new file mode 100644
index 00000000000..41957df22fe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Bugi.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Buginese} (and fuzzy permutations)
+#
+# Meaning: Script 'Buginese'
+#
+return <<'END';
+1A00 1A1B Buginese
+1A1E 1A1F Buginese
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Buhd.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Buhd.pl
new file mode 100644
index 00000000000..47e8b1f6134
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Buhd.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Buhid} (and fuzzy permutations)
+#
+# Meaning: Script 'Buhid'
+#
+return <<'END';
+1740 1753 Buhid
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/C.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/C.pl
new file mode 100644
index 00000000000..9d6c14681d9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/C.pl
@@ -0,0 +1,435 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{C}
+# \p{C} (and fuzzy permutations)
+#
+# Meaning: Major Category 'C'
+#
+return <<'END';
+0000 001F
+007F 009F
+00AD
+0242 024F
+0370 0373
+0376 0379
+037B 037D
+037F 0383
+038B
+038D
+03A2
+03CF
+0487
+04CF
+04FA 04FF
+0510 0530
+0557 0558
+0560
+0588
+058B 0590
+05BA
+05C8 05CF
+05EB 05EF
+05F5 060A
+0616 061A
+061C 061D
+0620
+063B 063F
+065F
+06DD
+070E 070F
+074B 074C
+076E 077F
+07B2 0900
+093A 093B
+094E 094F
+0955 0957
+0971 097C
+097E 0980
+0984
+098D 098E
+0991 0992
+09A9
+09B1
+09B3 09B5
+09BA 09BB
+09C5 09C6
+09C9 09CA
+09CF 09D6
+09D8 09DB
+09DE
+09E4 09E5
+09FB 0A00
+0A04
+0A0B 0A0E
+0A11 0A12
+0A29
+0A31
+0A34
+0A37
+0A3A 0A3B
+0A3D
+0A43 0A46
+0A49 0A4A
+0A4E 0A58
+0A5D
+0A5F 0A65
+0A75 0A80
+0A84
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA 0ABB
+0AC6
+0ACA
+0ACE 0ACF
+0AD1 0ADF
+0AE4 0AE5
+0AF0
+0AF2 0B00
+0B04
+0B0D 0B0E
+0B11 0B12
+0B29
+0B31
+0B34
+0B3A 0B3B
+0B44 0B46
+0B49 0B4A
+0B4E 0B55
+0B58 0B5B
+0B5E
+0B62 0B65
+0B72 0B81
+0B84
+0B8B 0B8D
+0B91
+0B96 0B98
+0B9B
+0B9D
+0BA0 0BA2
+0BA5 0BA7
+0BAB 0BAD
+0BBA 0BBD
+0BC3 0BC5
+0BC9
+0BCE 0BD6
+0BD8 0BE5
+0BFB 0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A 0C3D
+0C45
+0C49
+0C4E 0C54
+0C57 0C5F
+0C62 0C65
+0C70 0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA 0CBB
+0CC5
+0CC9
+0CCE 0CD4
+0CD7 0CDD
+0CDF
+0CE2 0CE5
+0CF0 0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A 0D3D
+0D44 0D45
+0D49
+0D4E 0D56
+0D58 0D5F
+0D62 0D65
+0D70 0D81
+0D84
+0D97 0D99
+0DB2
+0DBC
+0DBE 0DBF
+0DC7 0DC9
+0DCB 0DCE
+0DD5
+0DD7
+0DE0 0DF1
+0DF5 0E00
+0E3B 0E3E
+0E5C 0E80
+0E83
+0E85 0E86
+0E89
+0E8B 0E8C
+0E8E 0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8 0EA9
+0EAC
+0EBA
+0EBE 0EBF
+0EC5
+0EC7
+0ECE 0ECF
+0EDA 0EDB
+0EDE 0EFF
+0F48
+0F6B 0F70
+0F8C 0F8F
+0F98
+0FBD
+0FCD 0FCE
+0FD2 0FFF
+1022
+1028
+102B
+1033 1035
+103A 103F
+105A 109F
+10C6 10CF
+10FD 10FF
+115A 115E
+11A3 11A7
+11FA 11FF
+1249
+124E 124F
+1257
+1259
+125E 125F
+1289
+128E 128F
+12B1
+12B6 12B7
+12BF
+12C1
+12C6 12C7
+12D7
+1311
+1316 1317
+135B 135E
+137D 137F
+139A 139F
+13F5 1400
+1677 167F
+169D 169F
+16F1 16FF
+170D
+1715 171F
+1737 173F
+1754 175F
+176D
+1771
+1774 177F
+17B4 17B5
+17DE 17DF
+17EA 17EF
+17FA 17FF
+180F
+181A 181F
+1878 187F
+18AA 18FF
+191D 191F
+192C 192F
+193C 193F
+1941 1943
+196E 196F
+1975 197F
+19AA 19AF
+19CA 19CF
+19DA 19DD
+1A1C 1A1D
+1A20 1CFF
+1DC4 1DFF
+1E9C 1E9F
+1EFA 1EFF
+1F16 1F17
+1F1E 1F1F
+1F46 1F47
+1F4E 1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E 1F7F
+1FB5
+1FC5
+1FD4 1FD5
+1FDC
+1FF0 1FF1
+1FF5
+1FFF
+200B 200F
+202A 202E
+2060 206F
+2072 2073
+208F
+2095 209F
+20B6 20CF
+20EC 20FF
+214D 2152
+2184 218F
+23DC 23FF
+2427 243F
+244B 245F
+269D 269F
+26B2 2700
+2705
+270A 270B
+2728
+274C
+274E
+2753 2755
+2757
+275F 2760
+2795 2797
+27B0
+27BF
+27C7 27CF
+27EC 27EF
+2B14 2BFF
+2C2F
+2C5F 2C7F
+2CEB 2CF8
+2D26 2D2F
+2D66 2D6E
+2D70 2D7F
+2D97 2D9F
+2DA7
+2DAF
+2DB7
+2DBF
+2DC7
+2DCF
+2DD7
+2DDF 2DFF
+2E18 2E1B
+2E1E 2E7F
+2E9A
+2EF4 2EFF
+2FD6 2FEF
+2FFC 2FFF
+3040
+3097 3098
+3100 3104
+312D 3130
+318F
+31B8 31BF
+31D0 31EF
+321F
+3244 324F
+32FF
+4DB6 4DBF
+9FBC 9FFF
+A48D A48F
+A4C7 A6FF
+A717 A7FF
+A82C ABFF
+D7A4 F8FF
+FA2E FA2F
+FA6B FA6F
+FADA FAFF
+FB07 FB12
+FB18 FB1C
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2 FBD2
+FD40 FD4F
+FD90 FD91
+FDC8 FDEF
+FDFE FDFF
+FE1A FE1F
+FE24 FE2F
+FE53
+FE67
+FE6C FE6F
+FE75
+FEFD FF00
+FFBF FFC1
+FFC8 FFC9
+FFD0 FFD1
+FFD8 FFD9
+FFDD FFDF
+FFE7
+FFEF FFFB
+FFFE FFFF
+1000C
+10027
+1003B
+1003E
+1004E 1004F
+1005E 1007F
+100FB 100FF
+10103 10106
+10134 10136
+1018B 102FF
+1031F
+10324 1032F
+1034B 1037F
+1039E
+103C4 103C7
+103D6 103FF
+1049E 1049F
+104AA 107FF
+10806 10807
+10809
+10836
+10839 1083B
+1083D 1083E
+10840 109FF
+10A04
+10A07 10A0B
+10A14
+10A18
+10A34 10A37
+10A3B 10A3E
+10A48 10A4F
+10A59 1CFFF
+1D0F6 1D0FF
+1D127 1D129
+1D173 1D17A
+1D1DE 1D1FF
+1D246 1D2FF
+1D357 1D3FF
+1D455
+1D49D
+1D4A0 1D4A1
+1D4A3 1D4A4
+1D4A7 1D4A8
+1D4AD
+1D4BA
+1D4BC
+1D4C4
+1D506
+1D50B 1D50C
+1D515
+1D51D
+1D53A
+1D53F
+1D545
+1D547 1D549
+1D551
+1D6A6 1D6A7
+1D7CA 1D7CD
+1D800 1FFFF
+2A6D7 2F7FF
+2FA1E E00FF
+E01F0 10FFFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Canadian.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Canadian.pl
new file mode 100644
index 00000000000..6eb1c061bad
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Canadian.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{CanadianAboriginal} (and fuzzy permutations)
+#
+# Meaning: Script 'Canadian_Aboriginal'
+#
+return <<'END';
+1401 1676 Canadian_Aboriginal
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cc.pl
new file mode 100644
index 00000000000..f7715fc9d24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cc.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cc}
+# \p{Cc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cc'
+#
+return <<'END';
+0000 001F
+007F 009F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cf.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cf.pl
new file mode 100644
index 00000000000..d2291e2bce5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cf.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cf}
+# \p{Cf} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cf'
+#
+return <<'END';
+00AD
+0600 0603
+06DD
+070F
+17B4 17B5
+200B 200F
+202A 202E
+2060 2063
+206A 206F
+FEFF
+FFF9 FFFB
+1D173 1D17A
+E0001
+E0020 E007F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cher.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cher.pl
new file mode 100644
index 00000000000..11e7733fcb7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cher.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cherokee} (and fuzzy permutations)
+#
+# Meaning: Script 'Cherokee'
+#
+return <<'END';
+13A0 13F4 Cherokee
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cn.pl
new file mode 100644
index 00000000000..d94d4bc7e11
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cn.pl
@@ -0,0 +1,433 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cn}
+# \p{Cn} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cn' [not functional in Perl]
+#
+return <<'END';
+0242 024F
+0370 0373
+0376 0379
+037B 037D
+037F 0383
+038B
+038D
+03A2
+03CF
+0487
+04CF
+04FA 04FF
+0510 0530
+0557 0558
+0560
+0588
+058B 0590
+05BA
+05C8 05CF
+05EB 05EF
+05F5 05FF
+0604 060A
+0616 061A
+061C 061D
+0620
+063B 063F
+065F
+070E
+074B 074C
+076E 077F
+07B2 0900
+093A 093B
+094E 094F
+0955 0957
+0971 097C
+097E 0980
+0984
+098D 098E
+0991 0992
+09A9
+09B1
+09B3 09B5
+09BA 09BB
+09C5 09C6
+09C9 09CA
+09CF 09D6
+09D8 09DB
+09DE
+09E4 09E5
+09FB 0A00
+0A04
+0A0B 0A0E
+0A11 0A12
+0A29
+0A31
+0A34
+0A37
+0A3A 0A3B
+0A3D
+0A43 0A46
+0A49 0A4A
+0A4E 0A58
+0A5D
+0A5F 0A65
+0A75 0A80
+0A84
+0A8E
+0A92
+0AA9
+0AB1
+0AB4
+0ABA 0ABB
+0AC6
+0ACA
+0ACE 0ACF
+0AD1 0ADF
+0AE4 0AE5
+0AF0
+0AF2 0B00
+0B04
+0B0D 0B0E
+0B11 0B12
+0B29
+0B31
+0B34
+0B3A 0B3B
+0B44 0B46
+0B49 0B4A
+0B4E 0B55
+0B58 0B5B
+0B5E
+0B62 0B65
+0B72 0B81
+0B84
+0B8B 0B8D
+0B91
+0B96 0B98
+0B9B
+0B9D
+0BA0 0BA2
+0BA5 0BA7
+0BAB 0BAD
+0BBA 0BBD
+0BC3 0BC5
+0BC9
+0BCE 0BD6
+0BD8 0BE5
+0BFB 0C00
+0C04
+0C0D
+0C11
+0C29
+0C34
+0C3A 0C3D
+0C45
+0C49
+0C4E 0C54
+0C57 0C5F
+0C62 0C65
+0C70 0C81
+0C84
+0C8D
+0C91
+0CA9
+0CB4
+0CBA 0CBB
+0CC5
+0CC9
+0CCE 0CD4
+0CD7 0CDD
+0CDF
+0CE2 0CE5
+0CF0 0D01
+0D04
+0D0D
+0D11
+0D29
+0D3A 0D3D
+0D44 0D45
+0D49
+0D4E 0D56
+0D58 0D5F
+0D62 0D65
+0D70 0D81
+0D84
+0D97 0D99
+0DB2
+0DBC
+0DBE 0DBF
+0DC7 0DC9
+0DCB 0DCE
+0DD5
+0DD7
+0DE0 0DF1
+0DF5 0E00
+0E3B 0E3E
+0E5C 0E80
+0E83
+0E85 0E86
+0E89
+0E8B 0E8C
+0E8E 0E93
+0E98
+0EA0
+0EA4
+0EA6
+0EA8 0EA9
+0EAC
+0EBA
+0EBE 0EBF
+0EC5
+0EC7
+0ECE 0ECF
+0EDA 0EDB
+0EDE 0EFF
+0F48
+0F6B 0F70
+0F8C 0F8F
+0F98
+0FBD
+0FCD 0FCE
+0FD2 0FFF
+1022
+1028
+102B
+1033 1035
+103A 103F
+105A 109F
+10C6 10CF
+10FD 10FF
+115A 115E
+11A3 11A7
+11FA 11FF
+1249
+124E 124F
+1257
+1259
+125E 125F
+1289
+128E 128F
+12B1
+12B6 12B7
+12BF
+12C1
+12C6 12C7
+12D7
+1311
+1316 1317
+135B 135E
+137D 137F
+139A 139F
+13F5 1400
+1677 167F
+169D 169F
+16F1 16FF
+170D
+1715 171F
+1737 173F
+1754 175F
+176D
+1771
+1774 177F
+17DE 17DF
+17EA 17EF
+17FA 17FF
+180F
+181A 181F
+1878 187F
+18AA 18FF
+191D 191F
+192C 192F
+193C 193F
+1941 1943
+196E 196F
+1975 197F
+19AA 19AF
+19CA 19CF
+19DA 19DD
+1A1C 1A1D
+1A20 1CFF
+1DC4 1DFF
+1E9C 1E9F
+1EFA 1EFF
+1F16 1F17
+1F1E 1F1F
+1F46 1F47
+1F4E 1F4F
+1F58
+1F5A
+1F5C
+1F5E
+1F7E 1F7F
+1FB5
+1FC5
+1FD4 1FD5
+1FDC
+1FF0 1FF1
+1FF5
+1FFF
+2064 2069
+2072 2073
+208F
+2095 209F
+20B6 20CF
+20EC 20FF
+214D 2152
+2184 218F
+23DC 23FF
+2427 243F
+244B 245F
+269D 269F
+26B2 2700
+2705
+270A 270B
+2728
+274C
+274E
+2753 2755
+2757
+275F 2760
+2795 2797
+27B0
+27BF
+27C7 27CF
+27EC 27EF
+2B14 2BFF
+2C2F
+2C5F 2C7F
+2CEB 2CF8
+2D26 2D2F
+2D66 2D6E
+2D70 2D7F
+2D97 2D9F
+2DA7
+2DAF
+2DB7
+2DBF
+2DC7
+2DCF
+2DD7
+2DDF 2DFF
+2E18 2E1B
+2E1E 2E7F
+2E9A
+2EF4 2EFF
+2FD6 2FEF
+2FFC 2FFF
+3040
+3097 3098
+3100 3104
+312D 3130
+318F
+31B8 31BF
+31D0 31EF
+321F
+3244 324F
+32FF
+4DB6 4DBF
+9FBC 9FFF
+A48D A48F
+A4C7 A6FF
+A717 A7FF
+A82C ABFF
+D7A4 D7FF
+FA2E FA2F
+FA6B FA6F
+FADA FAFF
+FB07 FB12
+FB18 FB1C
+FB37
+FB3D
+FB3F
+FB42
+FB45
+FBB2 FBD2
+FD40 FD4F
+FD90 FD91
+FDC8 FDEF
+FDFE FDFF
+FE1A FE1F
+FE24 FE2F
+FE53
+FE67
+FE6C FE6F
+FE75
+FEFD FEFE
+FF00
+FFBF FFC1
+FFC8 FFC9
+FFD0 FFD1
+FFD8 FFD9
+FFDD FFDF
+FFE7
+FFEF FFF8
+FFFE FFFF
+1000C
+10027
+1003B
+1003E
+1004E 1004F
+1005E 1007F
+100FB 100FF
+10103 10106
+10134 10136
+1018B 102FF
+1031F
+10324 1032F
+1034B 1037F
+1039E
+103C4 103C7
+103D6 103FF
+1049E 1049F
+104AA 107FF
+10806 10807
+10809
+10836
+10839 1083B
+1083D 1083E
+10840 109FF
+10A04
+10A07 10A0B
+10A14
+10A18
+10A34 10A37
+10A3B 10A3E
+10A48 10A4F
+10A59 1CFFF
+1D0F6 1D0FF
+1D127 1D129
+1D1DE 1D1FF
+1D246 1D2FF
+1D357 1D3FF
+1D455
+1D49D
+1D4A0 1D4A1
+1D4A3 1D4A4
+1D4A7 1D4A8
+1D4AD
+1D4BA
+1D4BC
+1D4C4
+1D506
+1D50B 1D50C
+1D515
+1D51D
+1D53A
+1D53F
+1D545
+1D547 1D549
+1D551
+1D6A6 1D6A7
+1D7CA 1D7CD
+1D800 1FFFF
+2A6D7 2F7FF
+2FA1E E0000
+E0002 E001F
+E0080 E00FF
+E01F0 EFFFF
+FFFFE FFFFF
+10FFFE 10FFFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cntrl.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cntrl.pl
new file mode 100644
index 00000000000..9d9f7407318
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cntrl.pl
@@ -0,0 +1,31 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cntrl}
+#
+# Meaning: [[:Cntrl:]]
+#
+return <<'END';
+0000 001F
+007F 009F
+00AD
+0600 0603
+06DD
+070F
+17B4 17B5
+200B 200F
+202A 202E
+2060 2063
+206A 206F
+D800 F8FF
+FEFF
+FFF9 FFFB
+1D173 1D17A
+E0001
+E0020 E007F
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Co.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Co.pl
new file mode 100644
index 00000000000..5cb8379366e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Co.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Co}
+# \p{Co} (and fuzzy permutations)
+#
+# Meaning: General Category 'Co'
+#
+return <<'END';
+E000 F8FF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Copt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Copt.pl
new file mode 100644
index 00000000000..f8942a996f9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Copt.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Coptic} (and fuzzy permutations)
+#
+# Meaning: Script 'Coptic'
+#
+return <<'END';
+03E2 03EF Coptic
+2C80 2CEA Coptic
+2CF9 2CFF Coptic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cprt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cprt.pl
new file mode 100644
index 00000000000..95b9922a16e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cprt.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cypriot} (and fuzzy permutations)
+#
+# Meaning: Script 'Cypriot'
+#
+return <<'END';
+10800 10805 Cypriot
+10808 Cypriot
+1080A 10835 Cypriot
+10837 10838 Cypriot
+1083C Cypriot
+1083F Cypriot
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cs.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cs.pl
new file mode 100644
index 00000000000..02ccb70cae6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cs.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cs}
+# \p{Cs} (and fuzzy permutations)
+#
+# Meaning: General Category 'Cs'
+#
+return <<'END';
+D800 DFFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cyrl.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cyrl.pl
new file mode 100644
index 00000000000..1b3412ffffe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Cyrl.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Cyrillic} (and fuzzy permutations)
+#
+# Meaning: Script 'Cyrillic'
+#
+return <<'END';
+0400 0486 Cyrillic
+0488 04CE Cyrillic
+04D0 04F9 Cyrillic
+0500 050F Cyrillic
+1D2B Cyrillic
+1D78 Cyrillic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash.pl
new file mode 100644
index 00000000000..98b7e3401ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Dash'
+#
+return <<'END';
+002D Dash
+058A Dash
+1806 Dash
+2010 2015 Dash
+2053 Dash
+207B Dash
+208B Dash
+2212 Dash
+2E17 Dash
+301C Dash
+3030 Dash
+30A0 Dash
+FE31 FE32 Dash
+FE58 Dash
+FE63 Dash
+FF0D Dash
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash2.pl
new file mode 100644
index 00000000000..b6c40f34bb5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dash2.pl
@@ -0,0 +1,28 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Dash} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Dash'
+#
+return <<'END';
+002D Dash
+058A Dash
+1806 Dash
+2010 2015 Dash
+2053 Dash
+207B Dash
+208B Dash
+2212 Dash
+2E17 Dash
+301C Dash
+3030 Dash
+30A0 Dash
+FE31 FE32 Dash
+FE58 Dash
+FE63 Dash
+FF0D Dash
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dep.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dep.pl
new file mode 100644
index 00000000000..c2b4606d967
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dep.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Deprecated'
+#
+return <<'END';
+0340 0341 Deprecated
+17A3 Deprecated
+17D3 Deprecated
+206A 206F Deprecated
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deprecat.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deprecat.pl
new file mode 100644
index 00000000000..b9adc5df2a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deprecat.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Deprecated} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Deprecated'
+#
+return <<'END';
+0340 0341 Deprecated
+17A3 Deprecated
+17D3 Deprecated
+206A 206F Deprecated
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deva.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deva.pl
new file mode 100644
index 00000000000..53bab955a4e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Deva.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Devanagari} (and fuzzy permutations)
+#
+# Meaning: Script 'Devanagari'
+#
+return <<'END';
+0901 0939 Devanagari
+093C 094D Devanagari
+0950 0954 Devanagari
+0958 0963 Devanagari
+0966 096F Devanagari
+097D Devanagari
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dia.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dia.pl
new file mode 100644
index 00000000000..2d790de5e5d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dia.pl
@@ -0,0 +1,91 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Diacritic'
+#
+return <<'END';
+005E Diacritic
+0060 Diacritic
+00A8 Diacritic
+00AF Diacritic
+00B4 Diacritic
+00B7 00B8 Diacritic
+02B0 034E Diacritic
+0350 0357 Diacritic
+035D 0362 Diacritic
+0374 0375 Diacritic
+037A Diacritic
+0384 0385 Diacritic
+0483 0486 Diacritic
+0559 Diacritic
+0591 05A1 Diacritic
+05A3 05B9 Diacritic
+05BB 05BD Diacritic
+05BF Diacritic
+05C1 05C2 Diacritic
+05C4 Diacritic
+064B 0652 Diacritic
+0657 0658 Diacritic
+06DF 06E0 Diacritic
+06E5 06E6 Diacritic
+06EA 06EC Diacritic
+0730 074A Diacritic
+07A6 07B0 Diacritic
+093C Diacritic
+094D Diacritic
+0951 0954 Diacritic
+09BC Diacritic
+09CD Diacritic
+0A3C Diacritic
+0A4D Diacritic
+0ABC Diacritic
+0ACD Diacritic
+0B3C Diacritic
+0B4D Diacritic
+0BCD Diacritic
+0C4D Diacritic
+0CBC Diacritic
+0CCD Diacritic
+0D4D Diacritic
+0DCA Diacritic
+0E47 0E4C Diacritic
+0E4E Diacritic
+0EC8 0ECC Diacritic
+0F18 0F19 Diacritic
+0F35 Diacritic
+0F37 Diacritic
+0F39 Diacritic
+0F3E 0F3F Diacritic
+0F82 0F84 Diacritic
+0F86 0F87 Diacritic
+0FC6 Diacritic
+1037 Diacritic
+1039 Diacritic
+17C9 17D3 Diacritic
+17DD Diacritic
+1939 193B Diacritic
+1D2C 1D6A Diacritic
+1FBD Diacritic
+1FBF 1FC1 Diacritic
+1FCD 1FCF Diacritic
+1FDD 1FDF Diacritic
+1FED 1FEF Diacritic
+1FFD 1FFE Diacritic
+302A 302F Diacritic
+3099 309C Diacritic
+30FC Diacritic
+FB1E Diacritic
+FE20 FE23 Diacritic
+FF3E Diacritic
+FF40 Diacritic
+FF70 Diacritic
+FF9E FF9F Diacritic
+FFE3 Diacritic
+1D167 1D169 Diacritic
+1D16D 1D172 Diacritic
+1D17B 1D182 Diacritic
+1D185 1D18B Diacritic
+1D1AA 1D1AD Diacritic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Diacriti.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Diacriti.pl
new file mode 100644
index 00000000000..6b4cf421db0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Diacriti.pl
@@ -0,0 +1,94 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Diacritic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Diacritic'
+#
+return <<'END';
+005E Diacritic
+0060 Diacritic
+00A8 Diacritic
+00AF Diacritic
+00B4 Diacritic
+00B7 00B8 Diacritic
+02B0 034E Diacritic
+0350 0357 Diacritic
+035D 0362 Diacritic
+0374 0375 Diacritic
+037A Diacritic
+0384 0385 Diacritic
+0483 0486 Diacritic
+0559 Diacritic
+0591 05A1 Diacritic
+05A3 05B9 Diacritic
+05BB 05BD Diacritic
+05BF Diacritic
+05C1 05C2 Diacritic
+05C4 Diacritic
+064B 0652 Diacritic
+0657 0658 Diacritic
+06DF 06E0 Diacritic
+06E5 06E6 Diacritic
+06EA 06EC Diacritic
+0730 074A Diacritic
+07A6 07B0 Diacritic
+093C Diacritic
+094D Diacritic
+0951 0954 Diacritic
+09BC Diacritic
+09CD Diacritic
+0A3C Diacritic
+0A4D Diacritic
+0ABC Diacritic
+0ACD Diacritic
+0B3C Diacritic
+0B4D Diacritic
+0BCD Diacritic
+0C4D Diacritic
+0CBC Diacritic
+0CCD Diacritic
+0D4D Diacritic
+0DCA Diacritic
+0E47 0E4C Diacritic
+0E4E Diacritic
+0EC8 0ECC Diacritic
+0F18 0F19 Diacritic
+0F35 Diacritic
+0F37 Diacritic
+0F39 Diacritic
+0F3E 0F3F Diacritic
+0F82 0F84 Diacritic
+0F86 0F87 Diacritic
+0FC6 Diacritic
+1037 Diacritic
+1039 Diacritic
+17C9 17D3 Diacritic
+17DD Diacritic
+1939 193B Diacritic
+1D2C 1D6A Diacritic
+1FBD Diacritic
+1FBF 1FC1 Diacritic
+1FCD 1FCF Diacritic
+1FDD 1FDF Diacritic
+1FED 1FEF Diacritic
+1FFD 1FFE Diacritic
+302A 302F Diacritic
+3099 309C Diacritic
+30FC Diacritic
+FB1E Diacritic
+FE20 FE23 Diacritic
+FF3E Diacritic
+FF40 Diacritic
+FF70 Diacritic
+FF9E FF9F Diacritic
+FFE3 Diacritic
+1D167 1D169 Diacritic
+1D16D 1D172 Diacritic
+1D17B 1D182 Diacritic
+1D185 1D18B Diacritic
+1D1AA 1D1AD Diacritic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Digit.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Digit.pl
new file mode 100644
index 00000000000..bdcab28dd2b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Digit.pl
@@ -0,0 +1,35 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Digit}
+#
+# Meaning: [[:Digit:]]
+#
+return <<'END';
+0030 0039
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE6 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+17E0 17E9
+1810 1819
+1946 194F
+19D0 19D9
+FF10 FF19
+104A0 104A9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dsrt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dsrt.pl
new file mode 100644
index 00000000000..dcc68e83478
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Dsrt.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Deseret} (and fuzzy permutations)
+#
+# Meaning: Script 'Deseret'
+#
+return <<'END';
+10400 1044F Deseret
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ethi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ethi.pl
new file mode 100644
index 00000000000..318289d6a2c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ethi.pl
@@ -0,0 +1,39 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ethiopic} (and fuzzy permutations)
+#
+# Meaning: Script 'Ethiopic'
+#
+return <<'END';
+1200 1248 Ethiopic
+124A 124D Ethiopic
+1250 1256 Ethiopic
+1258 Ethiopic
+125A 125D Ethiopic
+1260 1288 Ethiopic
+128A 128D Ethiopic
+1290 12B0 Ethiopic
+12B2 12B5 Ethiopic
+12B8 12BE Ethiopic
+12C0 Ethiopic
+12C2 12C5 Ethiopic
+12C8 12D6 Ethiopic
+12D8 1310 Ethiopic
+1312 1315 Ethiopic
+1318 135A Ethiopic
+135F 137C Ethiopic
+1380 1399 Ethiopic
+2D80 2D96 Ethiopic
+2DA0 2DA6 Ethiopic
+2DA8 2DAE Ethiopic
+2DB0 2DB6 Ethiopic
+2DB8 2DBE Ethiopic
+2DC0 2DC6 Ethiopic
+2DC8 2DCE Ethiopic
+2DD0 2DD6 Ethiopic
+2DD8 2DDE Ethiopic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ext.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ext.pl
new file mode 100644
index 00000000000..0166715de23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ext.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Extender'
+#
+return <<'END';
+00B7 Extender
+02D0 02D1 Extender
+0640 Extender
+0E46 Extender
+0EC6 Extender
+1843 Extender
+3005 Extender
+3031 3035 Extender
+309D 309E Extender
+30FC 30FE Extender
+A015 Extender
+FF70 Extender
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Extender.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Extender.pl
new file mode 100644
index 00000000000..c9131e041dd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Extender.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Extender} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Extender'
+#
+return <<'END';
+00B7 Extender
+02D0 02D1 Extender
+0640 Extender
+0E46 Extender
+0EC6 Extender
+1843 Extender
+3005 Extender
+3031 3035 Extender
+309D 309E Extender
+30FC 30FE Extender
+A015 Extender
+FF70 Extender
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Geor.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Geor.pl
new file mode 100644
index 00000000000..63033e2f429
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Geor.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Georgian} (and fuzzy permutations)
+#
+# Meaning: Script 'Georgian'
+#
+return <<'END';
+10A0 10C5 Georgian
+10D0 10FA Georgian
+10FC Georgian
+2D00 2D25 Georgian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Glag.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Glag.pl
new file mode 100644
index 00000000000..2b873484e1e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Glag.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Glagolitic} (and fuzzy permutations)
+#
+# Meaning: Script 'Glagolitic'
+#
+return <<'END';
+2C00 2C2E Glagolitic
+2C30 2C5E Glagolitic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Goth.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Goth.pl
new file mode 100644
index 00000000000..7637cc65826
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Goth.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gothic} (and fuzzy permutations)
+#
+# Meaning: Script 'Gothic'
+#
+return <<'END';
+10330 1034A Gothic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/GrLink.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/GrLink.pl
new file mode 100644
index 00000000000..58bca9fe1a7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/GrLink.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Grapheme_Link'
+#
+return <<'END';
+034F Grapheme_Link
+094D Grapheme_Link
+09CD Grapheme_Link
+0A4D Grapheme_Link
+0ACD Grapheme_Link
+0B4D Grapheme_Link
+0BCD Grapheme_Link
+0C4D Grapheme_Link
+0CCD Grapheme_Link
+0D4D Grapheme_Link
+0DCA Grapheme_Link
+0E3A Grapheme_Link
+1039 Grapheme_Link
+17D2 Grapheme_Link
+A806 Grapheme_Link
+10A3F Grapheme_Link
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Graph.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Graph.pl
new file mode 100644
index 00000000000..be38ba9505c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Graph.pl
@@ -0,0 +1,436 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Graph}
+#
+# Meaning: [[:Graph:]]
+#
+return <<'END';
+0021 007E
+00A1 0241
+0250 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05B9
+05BB 05C7
+05D0 05EA
+05F0 05F4
+0600 0603
+060B 0615
+061B
+061E 061F
+0621 063A
+0640 065E
+0660 070D
+070F 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0970
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0AF1
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BFA
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF 0FD1
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F 137C
+1380 1399
+13A0 13F4
+1401 1676
+1681 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DD
+17E0 17E9
+17F0 17F9
+1800 180D
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1940
+1944 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+19DE 1A1B
+1A1E 1A1F
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+200B 2027
+202A 202E
+2030 205E
+2060 2063
+206A 2071
+2074 208E
+2090 2094
+20A0 20B5
+20D0 20EB
+2100 214C
+2153 2183
+2190 23DB
+2400 2426
+2440 244A
+2460 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27C0 27C6
+27D0 27EB
+27F0 2B13
+2C00 2C2E
+2C30 2C5E
+2C80 2CEA
+2CF9 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+2E00 2E17
+2E1C 2E1D
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3001 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31C0 31CF
+31F0 321E
+3220 3243
+3250 32FE
+3300 4DB5
+4DC0 9FBB
+A000 A48C
+A490 A4C6
+A700 A716
+A800 A82B
+AC00 D7A3
+E000 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFD
+FE00 FE19
+FE20 FE23
+FE30 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FEFF
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFF9 FFFD
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10100 10102
+10107 10133
+10137 1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+1039F 103C3
+103C8 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F 10A47
+10A50 10A58
+1D000 1D0F5
+1D100 1D126
+1D12A 1D1DD
+1D200 1D245
+1D300 1D356
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0001
+E0020 E007F
+E0100 E01EF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grapheme.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grapheme.pl
new file mode 100644
index 00000000000..b01db81fb31
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grapheme.pl
@@ -0,0 +1,28 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{GraphemeLink} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Grapheme_Link'
+#
+return <<'END';
+034F Grapheme_Link
+094D Grapheme_Link
+09CD Grapheme_Link
+0A4D Grapheme_Link
+0ACD Grapheme_Link
+0B4D Grapheme_Link
+0BCD Grapheme_Link
+0C4D Grapheme_Link
+0CCD Grapheme_Link
+0D4D Grapheme_Link
+0DCA Grapheme_Link
+0E3A Grapheme_Link
+1039 Grapheme_Link
+17D2 Grapheme_Link
+A806 Grapheme_Link
+10A3F Grapheme_Link
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grek.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grek.pl
new file mode 100644
index 00000000000..6dce82bb2db
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Grek.pl
@@ -0,0 +1,43 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Greek} (and fuzzy permutations)
+#
+# Meaning: Script 'Greek'
+#
+return <<'END';
+0374 0375 Greek
+037A Greek
+0384 0386 Greek
+0388 038A Greek
+038C Greek
+038E 03A1 Greek
+03A3 03CE Greek
+03D0 03E1 Greek
+03F0 03FF Greek
+1D26 1D2A Greek
+1D5D 1D61 Greek
+1D66 1D6A Greek
+1F00 1F15 Greek
+1F18 1F1D Greek
+1F20 1F45 Greek
+1F48 1F4D Greek
+1F50 1F57 Greek
+1F59 Greek
+1F5B Greek
+1F5D Greek
+1F5F 1F7D Greek
+1F80 1FB4 Greek
+1FB6 1FC4 Greek
+1FC6 1FD3 Greek
+1FD6 1FDB Greek
+1FDD 1FEF Greek
+1FF2 1FF4 Greek
+1FF6 1FFE Greek
+2126 Greek
+10140 1018A Greek
+1D200 1D245 Greek
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Gujr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Gujr.pl
new file mode 100644
index 00000000000..b35bce38c9f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Gujr.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gujarati} (and fuzzy permutations)
+#
+# Meaning: Script 'Gujarati'
+#
+return <<'END';
+0A81 0A83 Gujarati
+0A85 0A8D Gujarati
+0A8F 0A91 Gujarati
+0A93 0AA8 Gujarati
+0AAA 0AB0 Gujarati
+0AB2 0AB3 Gujarati
+0AB5 0AB9 Gujarati
+0ABC 0AC5 Gujarati
+0AC7 0AC9 Gujarati
+0ACB 0ACD Gujarati
+0AD0 Gujarati
+0AE0 0AE3 Gujarati
+0AE6 0AEF Gujarati
+0AF1 Gujarati
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Guru.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Guru.pl
new file mode 100644
index 00000000000..7525edc2ef0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Guru.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Gurmukhi} (and fuzzy permutations)
+#
+# Meaning: Script 'Gurmukhi'
+#
+return <<'END';
+0A01 0A03 Gurmukhi
+0A05 0A0A Gurmukhi
+0A0F 0A10 Gurmukhi
+0A13 0A28 Gurmukhi
+0A2A 0A30 Gurmukhi
+0A32 0A33 Gurmukhi
+0A35 0A36 Gurmukhi
+0A38 0A39 Gurmukhi
+0A3C Gurmukhi
+0A3E 0A42 Gurmukhi
+0A47 0A48 Gurmukhi
+0A4B 0A4D Gurmukhi
+0A59 0A5C Gurmukhi
+0A5E Gurmukhi
+0A66 0A74 Gurmukhi
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hang.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hang.pl
new file mode 100644
index 00000000000..d7de1eaf34e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hang.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hangul} (and fuzzy permutations)
+#
+# Meaning: Script 'Hangul'
+#
+return <<'END';
+1100 1159 Hangul
+115F 11A2 Hangul
+11A8 11F9 Hangul
+3131 318E Hangul
+3200 321E Hangul
+3260 327D Hangul
+AC00 D7A3 Hangul
+FFA0 FFBE Hangul
+FFC2 FFC7 Hangul
+FFCA FFCF Hangul
+FFD2 FFD7 Hangul
+FFDA FFDC Hangul
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hani.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hani.pl
new file mode 100644
index 00000000000..e641a71d69e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hani.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Han} (and fuzzy permutations)
+#
+# Meaning: Script 'Han'
+#
+return <<'END';
+2E80 2E99 Han
+2E9B 2EF3 Han
+2F00 2FD5 Han
+3005 Han
+3007 Han
+3021 3029 Han
+3038 303B Han
+3400 4DB5 Han
+4E00 9FBB Han
+F900 FA2D Han
+FA30 FA6A Han
+FA70 FAD9 Han
+20000 2A6D6 Han
+2F800 2FA1D Han
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hano.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hano.pl
new file mode 100644
index 00000000000..f11def791e4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hano.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hanunoo} (and fuzzy permutations)
+#
+# Meaning: Script 'Hanunoo'
+#
+return <<'END';
+1720 1734 Hanunoo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hebr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hebr.pl
new file mode 100644
index 00000000000..bdb6829c218
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hebr.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hebrew} (and fuzzy permutations)
+#
+# Meaning: Script 'Hebrew'
+#
+return <<'END';
+0591 05B9 Hebrew
+05BB 05C7 Hebrew
+05D0 05EA Hebrew
+05F0 05F4 Hebrew
+FB1D FB36 Hebrew
+FB38 FB3C Hebrew
+FB3E Hebrew
+FB40 FB41 Hebrew
+FB43 FB44 Hebrew
+FB46 FB4F Hebrew
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hex.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hex.pl
new file mode 100644
index 00000000000..328d4abaaf1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hex.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Hex_Digit'
+#
+return <<'END';
+0030 0039 Hex_Digit
+0041 0046 Hex_Digit
+0061 0066 Hex_Digit
+FF10 FF19 Hex_Digit
+FF21 FF26 Hex_Digit
+FF41 FF46 Hex_Digit
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/HexDigit.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/HexDigit.pl
new file mode 100644
index 00000000000..83ce8547cf3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/HexDigit.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{HexDigit} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Hex_Digit'
+#
+return <<'END';
+0030 0039 Hex_Digit
+0041 0046 Hex_Digit
+0061 0066 Hex_Digit
+FF10 FF19 Hex_Digit
+FF21 FF26 Hex_Digit
+FF41 FF46 Hex_Digit
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hira.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hira.pl
new file mode 100644
index 00000000000..1b98d7c690c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hira.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hiragana} (and fuzzy permutations)
+#
+# Meaning: Script 'Hiragana'
+#
+return <<'END';
+3041 3096 Hiragana
+309D 309F Hiragana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen.pl
new file mode 100644
index 00000000000..8741bf21b0a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Hyphen'
+#
+return <<'END';
+002D Hyphen
+00AD Hyphen
+058A Hyphen
+1806 Hyphen
+2010 2011 Hyphen
+2E17 Hyphen
+30FB Hyphen
+FE63 Hyphen
+FF0D Hyphen
+FF65 Hyphen
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen2.pl
new file mode 100644
index 00000000000..387bfc0fa40
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Hyphen2.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Hyphen} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Hyphen'
+#
+return <<'END';
+002D Hyphen
+00AD Hyphen
+058A Hyphen
+1806 Hyphen
+2010 2011 Hyphen
+2E17 Hyphen
+30FB Hyphen
+FE63 Hyphen
+FF0D Hyphen
+FF65 Hyphen
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDSB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDSB.pl
new file mode 100644
index 00000000000..b0282c29d26
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDSB.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'IDS_Binary_Operator'
+#
+return <<'END';
+2FF0 2FF1 IDS_Binary_Operator
+2FF4 2FFB IDS_Binary_Operator
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDST.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDST.pl
new file mode 100644
index 00000000000..7bafc477652
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IDST.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'IDS_Trinary_Operator'
+#
+return <<'END';
+2FF2 2FF3 IDS_Trinary_Operator
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdContin.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdContin.pl
new file mode 100644
index 00000000000..324e85f68f8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdContin.pl
@@ -0,0 +1,460 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdContinue} (and fuzzy permutations)
+#
+# Meaning: [\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}]
+#
+return <<'END';
+0030 0039
+0041 005A
+005F
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+0300 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+0483 0486
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+05D0 05EA
+05F0 05F2
+0610 0615
+0621 063A
+0640 065E
+0660 0669
+066E 06D3
+06D5 06DC
+06DF 06E8
+06EA 06FC
+06FF
+0710 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BEF
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F29
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17B3
+17B6 17D3
+17D7
+17DC 17DD
+17E0 17E9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1946 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+1A00 1A1B
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+203F 2040
+2054
+2071
+207F
+2090 2094
+20D0 20DC
+20E1
+20E5 20EB
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2160 2183
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3007
+3021 302F
+3031 3035
+3038 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A827
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE33 FE34
+FE4D FE4F
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF3F
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10140 10174
+10300 1031E
+10330 1034A
+10380 1039D
+103A0 103C3
+103C8 103CF
+103D1 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdStart.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdStart.pl
new file mode 100644
index 00000000000..36b6b51a205
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdStart.pl
@@ -0,0 +1,364 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdStart} (and fuzzy permutations)
+#
+# Meaning: [\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 064A
+066E 066F
+0671 06D3
+06D5
+06E5 06E6
+06EE 06EF
+06FA 06FC
+06FF
+0710
+0712 072F
+074D 076D
+0780 07A5
+07B1
+0904 0939
+093D
+0950
+0958 0961
+097D
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD
+09CE
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0 0AE1
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B71
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17D7
+17DC
+1820 1877
+1880 18A8
+1900 191C
+1950 196D
+1970 1974
+1980 19A9
+19C1 19C7
+1A00 1A16
+1D00 1DBF
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2090 2094
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2160 2183
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3007
+3021 3029
+3031 3035
+3038 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A801
+A803 A805
+A807 A80A
+A80C A822
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10140 10174
+10300 1031E
+10330 1034A
+10380 1039D
+103A0 103C3
+103C8 103CF
+103D1 103D5
+10400 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00
+10A10 10A13
+10A15 10A17
+10A19 10A33
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideo.pl
new file mode 100644
index 00000000000..1c5231cf614
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideo.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Ideographic'
+#
+return <<'END';
+3006 3007 Ideographic
+3021 3029 Ideographic
+3038 303A Ideographic
+3400 4DB5 Ideographic
+4E00 9FBB Ideographic
+F900 FA2D Ideographic
+FA70 FAD9 Ideographic
+20000 2A6D6 Ideographic
+2F800 2FA1D Ideographic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideograp.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideograp.pl
new file mode 100644
index 00000000000..e102ddc5f9c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ideograp.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ideographic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Ideographic'
+#
+return <<'END';
+3006 3007 Ideographic
+3021 3029 Ideographic
+3038 303A Ideographic
+3400 4DB5 Ideographic
+4E00 9FBB Ideographic
+F900 FA2D Ideographic
+FA70 FAD9 Ideographic
+20000 2A6D6 Ideographic
+2F800 2FA1D Ideographic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsBinar.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsBinar.pl
new file mode 100644
index 00000000000..f4369d3c5d5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsBinar.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdsBinaryOperator} (and fuzzy permutations)
+#
+# Meaning: Extended property 'IDS_Binary_Operator'
+#
+return <<'END';
+2FF0 2FF1 IDS_Binary_Operator
+2FF4 2FFB IDS_Binary_Operator
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsTrina.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsTrina.pl
new file mode 100644
index 00000000000..c670c87c9fd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/IdsTrina.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{IdsTrinaryOperator} (and fuzzy permutations)
+#
+# Meaning: Extended property 'IDS_Trinary_Operator'
+#
+return <<'END';
+2FF2 2FF3 IDS_Trinary_Operator
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAegean.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAegean.pl
new file mode 100644
index 00000000000..cc79a027883
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAegean.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InAegeanNumbers} (and fuzzy permutations)
+#
+# Meaning: Block 'Aegean Numbers'
+#
+return <<'END';
+10100 1013F Aegean Numbers
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAlphab.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAlphab.pl
new file mode 100644
index 00000000000..077354b7014
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAlphab.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InAlphabeticPresentationForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Alphabetic Presentation Forms'
+#
+return <<'END';
+FB00 FB4F Alphabetic Presentation Forms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncie2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncie2.pl
new file mode 100644
index 00000000000..86bb0d1e934
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncie2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InAncientGreekMusicalNotation} (and fuzzy permutations)
+#
+# Meaning: Block 'Ancient Greek Musical Notation'
+#
+return <<'END';
+1D200 1D24F Ancient Greek Musical Notation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncien.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncien.pl
new file mode 100644
index 00000000000..7bd66942de4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InAncien.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InAncientGreekNumbers} (and fuzzy permutations)
+#
+# Meaning: Block 'Ancient Greek Numbers'
+#
+return <<'END';
+10140 1018F Ancient Greek Numbers
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi2.pl
new file mode 100644
index 00000000000..8f51aa9c114
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabicSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic Supplement'
+#
+return <<'END';
+0750 077F Arabic Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi3.pl
new file mode 100644
index 00000000000..0c73cbaddba
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabicPresentationFormsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic Presentation Forms-B'
+#
+return <<'END';
+FE70 FEFF Arabic Presentation Forms-B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi4.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi4.pl
new file mode 100644
index 00000000000..d05b7d9e62e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabi4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabicPresentationFormsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic Presentation Forms-A'
+#
+return <<'END';
+FB50 FDFF Arabic Presentation Forms-A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabic.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabic.pl
new file mode 100644
index 00000000000..aa60b068c6b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArabic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArabic} (and fuzzy permutations)
+#
+# Meaning: Block 'Arabic'
+#
+return <<'END';
+0600 06FF Arabic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArmeni.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArmeni.pl
new file mode 100644
index 00000000000..789cbc27e18
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArmeni.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArmenian} (and fuzzy permutations)
+#
+# Meaning: Block 'Armenian'
+#
+return <<'END';
+0530 058F Armenian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArrows.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArrows.pl
new file mode 100644
index 00000000000..028e3e75465
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InArrows.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InArrows} (and fuzzy permutations)
+#
+# Meaning: Block 'Arrows'
+#
+return <<'END';
+2190 21FF Arrows
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBasicL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBasicL.pl
new file mode 100644
index 00000000000..e1b019a4007
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBasicL.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBasicLatin} (and fuzzy permutations)
+#
+# Meaning: Block 'Basic Latin'
+#
+return <<'END';
+0000 007F Basic Latin
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBengal.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBengal.pl
new file mode 100644
index 00000000000..50b23eed58c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBengal.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBengali} (and fuzzy permutations)
+#
+# Meaning: Block 'Bengali'
+#
+return <<'END';
+0980 09FF Bengali
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBlockE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBlockE.pl
new file mode 100644
index 00000000000..a7fb74e514b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBlockE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBlockElements} (and fuzzy permutations)
+#
+# Meaning: Block 'Block Elements'
+#
+return <<'END';
+2580 259F Block Elements
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopom2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopom2.pl
new file mode 100644
index 00000000000..2e68025f4ba
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopom2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBopomofoExtended} (and fuzzy permutations)
+#
+# Meaning: Block 'Bopomofo Extended'
+#
+return <<'END';
+31A0 31BF Bopomofo Extended
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopomo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopomo.pl
new file mode 100644
index 00000000000..b5ef89cfd72
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBopomo.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBopomofo} (and fuzzy permutations)
+#
+# Meaning: Block 'Bopomofo'
+#
+return <<'END';
+3100 312F Bopomofo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBoxDra.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBoxDra.pl
new file mode 100644
index 00000000000..f98d5b9ceff
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBoxDra.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBoxDrawing} (and fuzzy permutations)
+#
+# Meaning: Block 'Box Drawing'
+#
+return <<'END';
+2500 257F Box Drawing
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBraill.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBraill.pl
new file mode 100644
index 00000000000..c3229754d8e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBraill.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBraillePatterns} (and fuzzy permutations)
+#
+# Meaning: Block 'Braille Patterns'
+#
+return <<'END';
+2800 28FF Braille Patterns
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBugine.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBugine.pl
new file mode 100644
index 00000000000..c9c343866bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBugine.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBuginese} (and fuzzy permutations)
+#
+# Meaning: Block 'Buginese'
+#
+return <<'END';
+1A00 1A1F Buginese
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBuhid.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBuhid.pl
new file mode 100644
index 00000000000..53c924ed26c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InBuhid.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InBuhid} (and fuzzy permutations)
+#
+# Meaning: Block 'Buhid'
+#
+return <<'END';
+1740 175F Buhid
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InByzant.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InByzant.pl
new file mode 100644
index 00000000000..85d4bd0cc31
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InByzant.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InByzantineMusicalSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Byzantine Musical Symbols'
+#
+return <<'END';
+1D000 1D0FF Byzantine Musical Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCherok.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCherok.pl
new file mode 100644
index 00000000000..cd72f1c1364
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCherok.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCherokee} (and fuzzy permutations)
+#
+# Meaning: Block 'Cherokee'
+#
+return <<'END';
+13A0 13FF Cherokee
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo2.pl
new file mode 100644
index 00000000000..cc47a3717f4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityForms} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Forms'
+#
+return <<'END';
+FE30 FE4F CJK Compatibility Forms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo3.pl
new file mode 100644
index 00000000000..bf3387cd61d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityIdeographs} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Ideographs'
+#
+return <<'END';
+F900 FAFF CJK Compatibility Ideographs
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo4.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo4.pl
new file mode 100644
index 00000000000..0e280e12d80
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCo4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibilityIdeographsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility Ideographs Supplement'
+#
+return <<'END';
+2F800 2FA1F CJK Compatibility Ideographs Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCom.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCom.pl
new file mode 100644
index 00000000000..28ddd82a363
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkCom.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkCompatibility} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Compatibility'
+#
+return <<'END';
+3300 33FF CJK Compatibility
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkRad.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkRad.pl
new file mode 100644
index 00000000000..d89d3db21ab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkRad.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkRadicalsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Radicals Supplement'
+#
+return <<'END';
+2E80 2EFF CJK Radicals Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkStr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkStr.pl
new file mode 100644
index 00000000000..0b3751b44cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkStr.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkStrokes} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Strokes'
+#
+return <<'END';
+31C0 31EF CJK Strokes
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkSym.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkSym.pl
new file mode 100644
index 00000000000..d40cb8942ad
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkSym.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkSymbolsAndPunctuation} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Symbols and Punctuation'
+#
+return <<'END';
+3000 303F CJK Symbols and Punctuation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn2.pl
new file mode 100644
index 00000000000..1ef3202509b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographsExtensionB} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs Extension B'
+#
+return <<'END';
+20000 2A6DF CJK Unified Ideographs Extension B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn3.pl
new file mode 100644
index 00000000000..49496758c55
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUn3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographsExtensionA} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs Extension A'
+#
+return <<'END';
+3400 4DBF CJK Unified Ideographs Extension A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUni.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUni.pl
new file mode 100644
index 00000000000..b6f4934beb3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCjkUni.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCjkUnifiedIdeographs} (and fuzzy permutations)
+#
+# Meaning: Block 'CJK Unified Ideographs'
+#
+return <<'END';
+4E00 9FFF CJK Unified Ideographs
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi2.pl
new file mode 100644
index 00000000000..1d3f01809f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningDiacriticalMarks} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Diacritical Marks'
+#
+return <<'END';
+0300 036F Combining Diacritical Marks
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi3.pl
new file mode 100644
index 00000000000..db10c12f5ee
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningDiacriticalMarksSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Diacritical Marks Supplement'
+#
+return <<'END';
+1DC0 1DFF Combining Diacritical Marks Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi4.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi4.pl
new file mode 100644
index 00000000000..192f74bf1b0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombi4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningDiacriticalMarksForSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Diacritical Marks for Symbols'
+#
+return <<'END';
+20D0 20FF Combining Diacritical Marks for Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombin.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombin.pl
new file mode 100644
index 00000000000..0bcbaa88331
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCombin.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCombiningHalfMarks} (and fuzzy permutations)
+#
+# Meaning: Block 'Combining Half Marks'
+#
+return <<'END';
+FE20 FE2F Combining Half Marks
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InContro.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InContro.pl
new file mode 100644
index 00000000000..58274485166
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InContro.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InControlPictures} (and fuzzy permutations)
+#
+# Meaning: Block 'Control Pictures'
+#
+return <<'END';
+2400 243F Control Pictures
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCoptic.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCoptic.pl
new file mode 100644
index 00000000000..0e60f4faf9a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCoptic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCoptic} (and fuzzy permutations)
+#
+# Meaning: Block 'Coptic'
+#
+return <<'END';
+2C80 2CFF Coptic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCurren.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCurren.pl
new file mode 100644
index 00000000000..c5778875dd4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCurren.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCurrencySymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Currency Symbols'
+#
+return <<'END';
+20A0 20CF Currency Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyprio.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyprio.pl
new file mode 100644
index 00000000000..f1f53874a92
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyprio.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCypriotSyllabary} (and fuzzy permutations)
+#
+# Meaning: Block 'Cypriot Syllabary'
+#
+return <<'END';
+10800 1083F Cypriot Syllabary
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyril2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyril2.pl
new file mode 100644
index 00000000000..0f748ef501f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyril2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCyrillicSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Cyrillic Supplement'
+#
+return <<'END';
+0500 052F Cyrillic Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyrill.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyrill.pl
new file mode 100644
index 00000000000..fc252cfcd5e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InCyrill.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InCyrillic} (and fuzzy permutations)
+#
+# Meaning: Block 'Cyrillic'
+#
+return <<'END';
+0400 04FF Cyrillic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDesere.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDesere.pl
new file mode 100644
index 00000000000..1f670a5e540
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDesere.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDeseret} (and fuzzy permutations)
+#
+# Meaning: Block 'Deseret'
+#
+return <<'END';
+10400 1044F Deseret
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDevana.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDevana.pl
new file mode 100644
index 00000000000..147b3ba239c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDevana.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDevanagari} (and fuzzy permutations)
+#
+# Meaning: Block 'Devanagari'
+#
+return <<'END';
+0900 097F Devanagari
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDingba.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDingba.pl
new file mode 100644
index 00000000000..758fe902a39
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InDingba.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InDingbats} (and fuzzy permutations)
+#
+# Meaning: Block 'Dingbats'
+#
+return <<'END';
+2700 27BF Dingbats
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclo2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclo2.pl
new file mode 100644
index 00000000000..8f040d22cf3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclo2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEnclosedCjkLettersAndMonths} (and fuzzy permutations)
+#
+# Meaning: Block 'Enclosed CJK Letters and Months'
+#
+return <<'END';
+3200 32FF Enclosed CJK Letters and Months
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclos.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclos.pl
new file mode 100644
index 00000000000..2a8fc240d4e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEnclos.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEnclosedAlphanumerics} (and fuzzy permutations)
+#
+# Meaning: Block 'Enclosed Alphanumerics'
+#
+return <<'END';
+2460 24FF Enclosed Alphanumerics
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio2.pl
new file mode 100644
index 00000000000..0c3c5c9b66f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEthiopicExtended} (and fuzzy permutations)
+#
+# Meaning: Block 'Ethiopic Extended'
+#
+return <<'END';
+2D80 2DDF Ethiopic Extended
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio3.pl
new file mode 100644
index 00000000000..026972adc84
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthio3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEthiopicSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Ethiopic Supplement'
+#
+return <<'END';
+1380 139F Ethiopic Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthiop.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthiop.pl
new file mode 100644
index 00000000000..5a9c8058c90
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InEthiop.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InEthiopic} (and fuzzy permutations)
+#
+# Meaning: Block 'Ethiopic'
+#
+return <<'END';
+1200 137F Ethiopic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGenera.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGenera.pl
new file mode 100644
index 00000000000..c8f64b98c15
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGenera.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeneralPunctuation} (and fuzzy permutations)
+#
+# Meaning: Block 'General Punctuation'
+#
+return <<'END';
+2000 206F General Punctuation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeomet.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeomet.pl
new file mode 100644
index 00000000000..f6f80ef24e9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeomet.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeometricShapes} (and fuzzy permutations)
+#
+# Meaning: Block 'Geometric Shapes'
+#
+return <<'END';
+25A0 25FF Geometric Shapes
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorg2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorg2.pl
new file mode 100644
index 00000000000..0af43cd13e1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorg2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeorgianSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Georgian Supplement'
+#
+return <<'END';
+2D00 2D2F Georgian Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorgi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorgi.pl
new file mode 100644
index 00000000000..c91f2e01ddd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGeorgi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGeorgian} (and fuzzy permutations)
+#
+# Meaning: Block 'Georgian'
+#
+return <<'END';
+10A0 10FF Georgian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGlagol.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGlagol.pl
new file mode 100644
index 00000000000..c9f8d6ab8d6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGlagol.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGlagolitic} (and fuzzy permutations)
+#
+# Meaning: Block 'Glagolitic'
+#
+return <<'END';
+2C00 2C5F Glagolitic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGothic.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGothic.pl
new file mode 100644
index 00000000000..8e6db64ce9f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGothic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGothic} (and fuzzy permutations)
+#
+# Meaning: Block 'Gothic'
+#
+return <<'END';
+10330 1034F Gothic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekA.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekA.pl
new file mode 100644
index 00000000000..404e9687525
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekA.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGreekAndCoptic} (and fuzzy permutations)
+#
+# Meaning: Block 'Greek and Coptic'
+#
+return <<'END';
+0370 03FF Greek and Coptic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekE.pl
new file mode 100644
index 00000000000..941e892f9cf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGreekE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGreekExtended} (and fuzzy permutations)
+#
+# Meaning: Block 'Greek Extended'
+#
+return <<'END';
+1F00 1FFF Greek Extended
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGujara.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGujara.pl
new file mode 100644
index 00000000000..6028b4411ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGujara.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGujarati} (and fuzzy permutations)
+#
+# Meaning: Block 'Gujarati'
+#
+return <<'END';
+0A80 0AFF Gujarati
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGurmuk.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGurmuk.pl
new file mode 100644
index 00000000000..53dbbdbde9b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InGurmuk.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InGurmukhi} (and fuzzy permutations)
+#
+# Meaning: Block 'Gurmukhi'
+#
+return <<'END';
+0A00 0A7F Gurmukhi
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHalfwi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHalfwi.pl
new file mode 100644
index 00000000000..a03cb114347
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHalfwi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHalfwidthAndFullwidthForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Halfwidth and Fullwidth Forms'
+#
+return <<'END';
+FF00 FFEF Halfwidth and Fullwidth Forms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu2.pl
new file mode 100644
index 00000000000..558674c704b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulSyllables} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Syllables'
+#
+return <<'END';
+AC00 D7AF Hangul Syllables
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu3.pl
new file mode 100644
index 00000000000..87e35ea36e4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangu3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulCompatibilityJamo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Compatibility Jamo'
+#
+return <<'END';
+3130 318F Hangul Compatibility Jamo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangul.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangul.pl
new file mode 100644
index 00000000000..c73c1650994
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHangul.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHangulJamo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hangul Jamo'
+#
+return <<'END';
+1100 11FF Hangul Jamo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHanuno.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHanuno.pl
new file mode 100644
index 00000000000..38802fff087
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHanuno.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHanunoo} (and fuzzy permutations)
+#
+# Meaning: Block 'Hanunoo'
+#
+return <<'END';
+1720 173F Hanunoo
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHebrew.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHebrew.pl
new file mode 100644
index 00000000000..ab060cc410f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHebrew.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHebrew} (and fuzzy permutations)
+#
+# Meaning: Block 'Hebrew'
+#
+return <<'END';
+0590 05FF Hebrew
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighPr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighPr.pl
new file mode 100644
index 00000000000..df0eaebc3cd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighPr.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHighPrivateUseSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'High Private Use Surrogates'
+#
+return <<'END';
+DB80 DBFF High Private Use Surrogates
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighSu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighSu.pl
new file mode 100644
index 00000000000..52d75820482
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHighSu.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHighSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'High Surrogates'
+#
+return <<'END';
+D800 DB7F High Surrogates
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHiraga.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHiraga.pl
new file mode 100644
index 00000000000..d683fc34abe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InHiraga.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InHiragana} (and fuzzy permutations)
+#
+# Meaning: Block 'Hiragana'
+#
+return <<'END';
+3040 309F Hiragana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIdeogr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIdeogr.pl
new file mode 100644
index 00000000000..9e5798a4792
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIdeogr.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InIdeographicDescriptionCharacters} (and fuzzy permutations)
+#
+# Meaning: Block 'Ideographic Description Characters'
+#
+return <<'END';
+2FF0 2FFF Ideographic Description Characters
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIpaExt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIpaExt.pl
new file mode 100644
index 00000000000..ad4bd5f3daf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InIpaExt.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InIpaExtensions} (and fuzzy permutations)
+#
+# Meaning: Block 'IPA Extensions'
+#
+return <<'END';
+0250 02AF IPA Extensions
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKanbun.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKanbun.pl
new file mode 100644
index 00000000000..86a2c184c53
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKanbun.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKanbun} (and fuzzy permutations)
+#
+# Meaning: Block 'Kanbun'
+#
+return <<'END';
+3190 319F Kanbun
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKangxi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKangxi.pl
new file mode 100644
index 00000000000..4ad505a139f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKangxi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKangxiRadicals} (and fuzzy permutations)
+#
+# Meaning: Block 'Kangxi Radicals'
+#
+return <<'END';
+2F00 2FDF Kangxi Radicals
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKannad.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKannad.pl
new file mode 100644
index 00000000000..fa11e21ef26
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKannad.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKannada} (and fuzzy permutations)
+#
+# Meaning: Block 'Kannada'
+#
+return <<'END';
+0C80 0CFF Kannada
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKatak2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKatak2.pl
new file mode 100644
index 00000000000..5be44f8eb36
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKatak2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKatakanaPhoneticExtensions} (and fuzzy permutations)
+#
+# Meaning: Block 'Katakana Phonetic Extensions'
+#
+return <<'END';
+31F0 31FF Katakana Phonetic Extensions
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKataka.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKataka.pl
new file mode 100644
index 00000000000..00abc4a8eab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKataka.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKatakana} (and fuzzy permutations)
+#
+# Meaning: Block 'Katakana'
+#
+return <<'END';
+30A0 30FF Katakana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKharos.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKharos.pl
new file mode 100644
index 00000000000..d504623a164
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKharos.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKharoshthi} (and fuzzy permutations)
+#
+# Meaning: Block 'Kharoshthi'
+#
+return <<'END';
+10A00 10A5F Kharoshthi
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmer.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmer.pl
new file mode 100644
index 00000000000..062e5448eca
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmer.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKhmer} (and fuzzy permutations)
+#
+# Meaning: Block 'Khmer'
+#
+return <<'END';
+1780 17FF Khmer
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmerS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmerS.pl
new file mode 100644
index 00000000000..4de36f31bfc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InKhmerS.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InKhmerSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Khmer Symbols'
+#
+return <<'END';
+19E0 19FF Khmer Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLao.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLao.pl
new file mode 100644
index 00000000000..48d350e6b6a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLao.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLao} (and fuzzy permutations)
+#
+# Meaning: Block 'Lao'
+#
+return <<'END';
+0E80 0EFF Lao
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin1.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin1.pl
new file mode 100644
index 00000000000..0c226d9dfe0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin1.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatin1Supplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin-1 Supplement'
+#
+return <<'END';
+0080 00FF Latin-1 Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin2.pl
new file mode 100644
index 00000000000..0cc83e013b3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedA} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended-A'
+#
+return <<'END';
+0100 017F Latin Extended-A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin3.pl
new file mode 100644
index 00000000000..9e507e3698c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatin3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedAdditional} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended Additional'
+#
+return <<'END';
+1E00 1EFF Latin Extended Additional
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatinE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatinE.pl
new file mode 100644
index 00000000000..bcd85ce3f23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLatinE.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLatinExtendedB} (and fuzzy permutations)
+#
+# Meaning: Block 'Latin Extended-B'
+#
+return <<'END';
+0180 024F Latin Extended-B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLetter.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLetter.pl
new file mode 100644
index 00000000000..30cb9322c04
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLetter.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLetterlikeSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Letterlike Symbols'
+#
+return <<'END';
+2100 214F Letterlike Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLimbu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLimbu.pl
new file mode 100644
index 00000000000..18f69237c30
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLimbu.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLimbu} (and fuzzy permutations)
+#
+# Meaning: Block 'Limbu'
+#
+return <<'END';
+1900 194F Limbu
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinea2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinea2.pl
new file mode 100644
index 00000000000..d988b319af2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinea2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLinearBSyllabary} (and fuzzy permutations)
+#
+# Meaning: Block 'Linear B Syllabary'
+#
+return <<'END';
+10000 1007F Linear B Syllabary
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinear.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinear.pl
new file mode 100644
index 00000000000..26fa532dbc4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLinear.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLinearBIdeograms} (and fuzzy permutations)
+#
+# Meaning: Block 'Linear B Ideograms'
+#
+return <<'END';
+10080 100FF Linear B Ideograms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLowSur.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLowSur.pl
new file mode 100644
index 00000000000..2a8df1afd9c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InLowSur.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InLowSurrogates} (and fuzzy permutations)
+#
+# Meaning: Block 'Low Surrogates'
+#
+return <<'END';
+DC00 DFFF Low Surrogates
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMalaya.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMalaya.pl
new file mode 100644
index 00000000000..4963a2e752f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMalaya.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMalayalam} (and fuzzy permutations)
+#
+# Meaning: Block 'Malayalam'
+#
+return <<'END';
+0D00 0D7F Malayalam
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathe2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathe2.pl
new file mode 100644
index 00000000000..28fad1fe920
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathe2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMathematicalAlphanumericSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Mathematical Alphanumeric Symbols'
+#
+return <<'END';
+1D400 1D7FF Mathematical Alphanumeric Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathem.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathem.pl
new file mode 100644
index 00000000000..7e4b77e48a1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMathem.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMathematicalOperators} (and fuzzy permutations)
+#
+# Meaning: Block 'Mathematical Operators'
+#
+return <<'END';
+2200 22FF Mathematical Operators
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce2.pl
new file mode 100644
index 00000000000..cb5de83c684
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousTechnical} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Technical'
+#
+return <<'END';
+2300 23FF Miscellaneous Technical
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce3.pl
new file mode 100644
index 00000000000..2df83f9e504
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousSymbolsAndArrows} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Symbols and Arrows'
+#
+return <<'END';
+2B00 2BFF Miscellaneous Symbols and Arrows
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce4.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce4.pl
new file mode 100644
index 00000000000..1be2bed9102
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousMathematicalSymbolsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Mathematical Symbols-A'
+#
+return <<'END';
+27C0 27EF Miscellaneous Mathematical Symbols-A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce5.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce5.pl
new file mode 100644
index 00000000000..765410a21cd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMisce5.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousMathematicalSymbolsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Mathematical Symbols-B'
+#
+return <<'END';
+2980 29FF Miscellaneous Mathematical Symbols-B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMiscel.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMiscel.pl
new file mode 100644
index 00000000000..e03e58a6407
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMiscel.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMiscellaneousSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Miscellaneous Symbols'
+#
+return <<'END';
+2600 26FF Miscellaneous Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InModifi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InModifi.pl
new file mode 100644
index 00000000000..301b68e2c7f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InModifi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InModifierToneLetters} (and fuzzy permutations)
+#
+# Meaning: Block 'Modifier Tone Letters'
+#
+return <<'END';
+A700 A71F Modifier Tone Letters
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMongol.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMongol.pl
new file mode 100644
index 00000000000..facdf8583bf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMongol.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMongolian} (and fuzzy permutations)
+#
+# Meaning: Block 'Mongolian'
+#
+return <<'END';
+1800 18AF Mongolian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMusica.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMusica.pl
new file mode 100644
index 00000000000..e13a83ed3d2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMusica.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMusicalSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Musical Symbols'
+#
+return <<'END';
+1D100 1D1FF Musical Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMyanma.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMyanma.pl
new file mode 100644
index 00000000000..4fc596ad29d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InMyanma.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InMyanmar} (and fuzzy permutations)
+#
+# Meaning: Block 'Myanmar'
+#
+return <<'END';
+1000 109F Myanmar
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNewTai.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNewTai.pl
new file mode 100644
index 00000000000..8eb2d94520c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNewTai.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InNewTaiLue} (and fuzzy permutations)
+#
+# Meaning: Block 'New Tai Lue'
+#
+return <<'END';
+1980 19DF New Tai Lue
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNumber.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNumber.pl
new file mode 100644
index 00000000000..e962dad1830
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InNumber.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InNumberForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Number Forms'
+#
+return <<'END';
+2150 218F Number Forms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOgham.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOgham.pl
new file mode 100644
index 00000000000..aabf05a0460
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOgham.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOgham} (and fuzzy permutations)
+#
+# Meaning: Block 'Ogham'
+#
+return <<'END';
+1680 169F Ogham
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldIta.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldIta.pl
new file mode 100644
index 00000000000..4a20df50380
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldIta.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOldItalic} (and fuzzy permutations)
+#
+# Meaning: Block 'Old Italic'
+#
+return <<'END';
+10300 1032F Old Italic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldPer.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldPer.pl
new file mode 100644
index 00000000000..8cc534e29fe
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOldPer.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOldPersian} (and fuzzy permutations)
+#
+# Meaning: Block 'Old Persian'
+#
+return <<'END';
+103A0 103DF Old Persian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOptica.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOptica.pl
new file mode 100644
index 00000000000..a191ec9621e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOptica.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOpticalCharacterRecognition} (and fuzzy permutations)
+#
+# Meaning: Block 'Optical Character Recognition'
+#
+return <<'END';
+2440 245F Optical Character Recognition
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOriya.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOriya.pl
new file mode 100644
index 00000000000..a44c55a2615
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOriya.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOriya} (and fuzzy permutations)
+#
+# Meaning: Block 'Oriya'
+#
+return <<'END';
+0B00 0B7F Oriya
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOsmany.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOsmany.pl
new file mode 100644
index 00000000000..9ec5f8b7032
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InOsmany.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InOsmanya} (and fuzzy permutations)
+#
+# Meaning: Block 'Osmanya'
+#
+return <<'END';
+10480 104AF Osmanya
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhone2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhone2.pl
new file mode 100644
index 00000000000..f22e8d16d96
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhone2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InPhoneticExtensionsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Phonetic Extensions Supplement'
+#
+return <<'END';
+1D80 1DBF Phonetic Extensions Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhonet.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhonet.pl
new file mode 100644
index 00000000000..017d026a9b1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPhonet.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InPhoneticExtensions} (and fuzzy permutations)
+#
+# Meaning: Block 'Phonetic Extensions'
+#
+return <<'END';
+1D00 1D7F Phonetic Extensions
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPrivat.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPrivat.pl
new file mode 100644
index 00000000000..42fcd64103a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InPrivat.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InPrivateUseArea} (and fuzzy permutations)
+#
+# Meaning: Block 'Private Use Area'
+#
+return <<'END';
+E000 F8FF Private Use Area
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InRunic.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InRunic.pl
new file mode 100644
index 00000000000..786799e7052
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InRunic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InRunic} (and fuzzy permutations)
+#
+# Meaning: Block 'Runic'
+#
+return <<'END';
+16A0 16FF Runic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InShavia.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InShavia.pl
new file mode 100644
index 00000000000..341fb513954
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InShavia.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InShavian} (and fuzzy permutations)
+#
+# Meaning: Block 'Shavian'
+#
+return <<'END';
+10450 1047F Shavian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSinhal.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSinhal.pl
new file mode 100644
index 00000000000..6a374728ff2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSinhal.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSinhala} (and fuzzy permutations)
+#
+# Meaning: Block 'Sinhala'
+#
+return <<'END';
+0D80 0DFF Sinhala
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSmallF.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSmallF.pl
new file mode 100644
index 00000000000..011abec7579
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSmallF.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSmallFormVariants} (and fuzzy permutations)
+#
+# Meaning: Block 'Small Form Variants'
+#
+return <<'END';
+FE50 FE6F Small Form Variants
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpacin.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpacin.pl
new file mode 100644
index 00000000000..960ec0adde1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpacin.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSpacingModifierLetters} (and fuzzy permutations)
+#
+# Meaning: Block 'Spacing Modifier Letters'
+#
+return <<'END';
+02B0 02FF Spacing Modifier Letters
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpecia.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpecia.pl
new file mode 100644
index 00000000000..85771f6a27c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSpecia.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSpecials} (and fuzzy permutations)
+#
+# Meaning: Block 'Specials'
+#
+return <<'END';
+FFF0 FFFF Specials
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupers.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupers.pl
new file mode 100644
index 00000000000..df6a9adf689
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupers.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSuperscriptsAndSubscripts} (and fuzzy permutations)
+#
+# Meaning: Block 'Superscripts and Subscripts'
+#
+return <<'END';
+2070 209F Superscripts and Subscripts
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl2.pl
new file mode 100644
index 00000000000..d6201c7377c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalArrowsA} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Arrows-A'
+#
+return <<'END';
+27F0 27FF Supplemental Arrows-A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl3.pl
new file mode 100644
index 00000000000..a1fe7ce5c03
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl3.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalPunctuation} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Punctuation'
+#
+return <<'END';
+2E00 2E7F Supplemental Punctuation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl4.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl4.pl
new file mode 100644
index 00000000000..ed610354f9d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl4.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementaryPrivateUseAreaA} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplementary Private Use Area-A'
+#
+return <<'END';
+F0000 FFFFF Supplementary Private Use Area-A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl5.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl5.pl
new file mode 100644
index 00000000000..19e3d669059
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl5.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementaryPrivateUseAreaB} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplementary Private Use Area-B'
+#
+return <<'END';
+100000 10FFFF Supplementary Private Use Area-B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl6.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl6.pl
new file mode 100644
index 00000000000..a5efef621a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSuppl6.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalMathematicalOperators} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Mathematical Operators'
+#
+return <<'END';
+2A00 2AFF Supplemental Mathematical Operators
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupple.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupple.pl
new file mode 100644
index 00000000000..755dc683567
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSupple.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSupplementalArrowsB} (and fuzzy permutations)
+#
+# Meaning: Block 'Supplemental Arrows-B'
+#
+return <<'END';
+2900 297F Supplemental Arrows-B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyloti.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyloti.pl
new file mode 100644
index 00000000000..d29f285b5e3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyloti.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSylotiNagri} (and fuzzy permutations)
+#
+# Meaning: Block 'Syloti Nagri'
+#
+return <<'END';
+A800 A82F Syloti Nagri
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyriac.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyriac.pl
new file mode 100644
index 00000000000..aed8b10fabf
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InSyriac.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InSyriac} (and fuzzy permutations)
+#
+# Meaning: Block 'Syriac'
+#
+return <<'END';
+0700 074F Syriac
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagalo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagalo.pl
new file mode 100644
index 00000000000..32a9c5840df
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagalo.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTagalog} (and fuzzy permutations)
+#
+# Meaning: Block 'Tagalog'
+#
+return <<'END';
+1700 171F Tagalog
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagban.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagban.pl
new file mode 100644
index 00000000000..ed664910df1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTagban.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTagbanwa} (and fuzzy permutations)
+#
+# Meaning: Block 'Tagbanwa'
+#
+return <<'END';
+1760 177F Tagbanwa
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTags.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTags.pl
new file mode 100644
index 00000000000..6dff3c0bff5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTags.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTags} (and fuzzy permutations)
+#
+# Meaning: Block 'Tags'
+#
+return <<'END';
+E0000 E007F Tags
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiLe.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiLe.pl
new file mode 100644
index 00000000000..f5e01dc6504
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiLe.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTaiLe} (and fuzzy permutations)
+#
+# Meaning: Block 'Tai Le'
+#
+return <<'END';
+1950 197F Tai Le
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiXua.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiXua.pl
new file mode 100644
index 00000000000..16bb6ec493a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTaiXua.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTaiXuanJingSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Tai Xuan Jing Symbols'
+#
+return <<'END';
+1D300 1D35F Tai Xuan Jing Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTamil.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTamil.pl
new file mode 100644
index 00000000000..8880319d95b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTamil.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTamil} (and fuzzy permutations)
+#
+# Meaning: Block 'Tamil'
+#
+return <<'END';
+0B80 0BFF Tamil
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTelugu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTelugu.pl
new file mode 100644
index 00000000000..a67de0ac2ae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTelugu.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTelugu} (and fuzzy permutations)
+#
+# Meaning: Block 'Telugu'
+#
+return <<'END';
+0C00 0C7F Telugu
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThaana.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThaana.pl
new file mode 100644
index 00000000000..118ea7217bd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThaana.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InThaana} (and fuzzy permutations)
+#
+# Meaning: Block 'Thaana'
+#
+return <<'END';
+0780 07BF Thaana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThai.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThai.pl
new file mode 100644
index 00000000000..584ac9c236f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InThai.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InThai} (and fuzzy permutations)
+#
+# Meaning: Block 'Thai'
+#
+return <<'END';
+0E00 0E7F Thai
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTibeta.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTibeta.pl
new file mode 100644
index 00000000000..c91c5278534
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTibeta.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTibetan} (and fuzzy permutations)
+#
+# Meaning: Block 'Tibetan'
+#
+return <<'END';
+0F00 0FFF Tibetan
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTifina.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTifina.pl
new file mode 100644
index 00000000000..4035719d5a0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InTifina.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InTifinagh} (and fuzzy permutations)
+#
+# Meaning: Block 'Tifinagh'
+#
+return <<'END';
+2D30 2D7F Tifinagh
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUgarit.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUgarit.pl
new file mode 100644
index 00000000000..e2b8b1a2f1c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUgarit.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InUgaritic} (and fuzzy permutations)
+#
+# Meaning: Block 'Ugaritic'
+#
+return <<'END';
+10380 1039F Ugaritic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUnifie.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUnifie.pl
new file mode 100644
index 00000000000..0eb4ecbe8f3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InUnifie.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InUnifiedCanadianAboriginalSyllabics} (and fuzzy permutations)
+#
+# Meaning: Block 'Unified Canadian Aboriginal Syllabics'
+#
+return <<'END';
+1400 167F Unified Canadian Aboriginal Syllabics
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVaria2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVaria2.pl
new file mode 100644
index 00000000000..d6633f7ec5b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVaria2.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InVariationSelectorsSupplement} (and fuzzy permutations)
+#
+# Meaning: Block 'Variation Selectors Supplement'
+#
+return <<'END';
+E0100 E01EF Variation Selectors Supplement
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVariat.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVariat.pl
new file mode 100644
index 00000000000..edd7cb38ea5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVariat.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InVariationSelectors} (and fuzzy permutations)
+#
+# Meaning: Block 'Variation Selectors'
+#
+return <<'END';
+FE00 FE0F Variation Selectors
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVertic.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVertic.pl
new file mode 100644
index 00000000000..c3a67dcd8a7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InVertic.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InVerticalForms} (and fuzzy permutations)
+#
+# Meaning: Block 'Vertical Forms'
+#
+return <<'END';
+FE10 FE1F Vertical Forms
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiRadi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiRadi.pl
new file mode 100644
index 00000000000..92a91f2621f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiRadi.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InYiRadicals} (and fuzzy permutations)
+#
+# Meaning: Block 'Yi Radicals'
+#
+return <<'END';
+A490 A4CF Yi Radicals
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiSyll.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiSyll.pl
new file mode 100644
index 00000000000..1570090781b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYiSyll.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InYiSyllables} (and fuzzy permutations)
+#
+# Meaning: Block 'Yi Syllables'
+#
+return <<'END';
+A000 A48F Yi Syllables
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYijing.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYijing.pl
new file mode 100644
index 00000000000..4253e74bc23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/InYijing.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{InYijingHexagramSymbols} (and fuzzy permutations)
+#
+# Meaning: Block 'Yijing Hexagram Symbols'
+#
+return <<'END';
+4DC0 4DFF Yijing Hexagram Symbols
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinC.pl
new file mode 100644
index 00000000000..eefe1c748b6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinC.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Join_Control'
+#
+return <<'END';
+200C 200D Join_Control
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinCont.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinCont.pl
new file mode 100644
index 00000000000..b75583f586e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/JoinCont.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{JoinControl} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Join_Control'
+#
+return <<'END';
+200C 200D Join_Control
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Kana.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Kana.pl
new file mode 100644
index 00000000000..d544196323f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Kana.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Katakana} (and fuzzy permutations)
+#
+# Meaning: Script 'Katakana'
+#
+return <<'END';
+30A1 30FA Katakana
+30FD 30FF Katakana
+31F0 31FF Katakana
+FF66 FF6F Katakana
+FF71 FF9D Katakana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khar.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khar.pl
new file mode 100644
index 00000000000..8197e1534b0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khar.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Kharoshthi} (and fuzzy permutations)
+#
+# Meaning: Script 'Kharoshthi'
+#
+return <<'END';
+10A00 10A03 Kharoshthi
+10A05 10A06 Kharoshthi
+10A0C 10A13 Kharoshthi
+10A15 10A17 Kharoshthi
+10A19 10A33 Kharoshthi
+10A38 10A3A Kharoshthi
+10A3F 10A47 Kharoshthi
+10A50 10A58 Kharoshthi
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khmr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khmr.pl
new file mode 100644
index 00000000000..d1850f5b5a8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Khmr.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Khmer} (and fuzzy permutations)
+#
+# Meaning: Script 'Khmer'
+#
+return <<'END';
+1780 17DD Khmer
+17E0 17E9 Khmer
+17F0 17F9 Khmer
+19E0 19FF Khmer
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Knda.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Knda.pl
new file mode 100644
index 00000000000..0c2c23aa10b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Knda.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Kannada} (and fuzzy permutations)
+#
+# Meaning: Script 'Kannada'
+#
+return <<'END';
+0C82 0C83 Kannada
+0C85 0C8C Kannada
+0C8E 0C90 Kannada
+0C92 0CA8 Kannada
+0CAA 0CB3 Kannada
+0CB5 0CB9 Kannada
+0CBC 0CC4 Kannada
+0CC6 0CC8 Kannada
+0CCA 0CCD Kannada
+0CD5 0CD6 Kannada
+0CDE Kannada
+0CE0 0CE1 Kannada
+0CE6 0CEF Kannada
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/L.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/L.pl
new file mode 100644
index 00000000000..bae3355a4b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/L.pl
@@ -0,0 +1,360 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{L}
+# \p{L} (and fuzzy permutations)
+#
+# Meaning: Major Category 'L'
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+05D0 05EA
+05F0 05F2
+0621 063A
+0640 064A
+066E 066F
+0671 06D3
+06D5
+06E5 06E6
+06EE 06EF
+06FA 06FC
+06FF
+0710
+0712 072F
+074D 076D
+0780 07A5
+07B1
+0904 0939
+093D
+0950
+0958 0961
+097D
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD
+09CE
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0 0AE1
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B71
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17D7
+17DC
+1820 1877
+1880 18A8
+1900 191C
+1950 196D
+1970 1974
+1980 19A9
+19C1 19C7
+1A00 1A16
+1D00 1DBF
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2090 2094
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3006
+3031 3035
+303B 303C
+3041 3096
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A801
+A803 A805
+A807 A80A
+A80C A822
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF21 FF3A
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10300 1031E
+10330 10349
+10380 1039D
+103A0 103C3
+103C8 103CF
+10400 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00
+10A10 10A13
+10A15 10A17
+10A19 10A33
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LC.pl
new file mode 100644
index 00000000000..c86b0a6af8a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LC.pl
@@ -0,0 +1,116 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{LC}
+# \p{LC} (and fuzzy permutations)
+#
+# Meaning: [\p{Ll}\p{Lu}\p{Lt}]
+#
+return <<'END';
+0041 005A
+0061 007A
+00AA
+00B5
+00BA
+00C0 00D6
+00D8 00F6
+00F8 01BA
+01BC 01BF
+01C4 0241
+0250 02AF
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0561 0587
+10A0 10C5
+1D00 1D2B
+1D62 1D77
+1D79 1D9A
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+2071
+207F
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2134
+2139
+213C 213F
+2145 2149
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2D00 2D25
+FB00 FB06
+FB13 FB17
+FF21 FF3A
+FF41 FF5A
+10400 1044F
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LOE.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LOE.pl
new file mode 100644
index 00000000000..f82a91f1cf9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LOE.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Logical_Order_Exception'
+#
+return <<'END';
+0E40 0E44 Logical_Order_Exception
+0EC0 0EC4 Logical_Order_Exception
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Laoo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Laoo.pl
new file mode 100644
index 00000000000..e34a6e44bc8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Laoo.pl
@@ -0,0 +1,30 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lao} (and fuzzy permutations)
+#
+# Meaning: Script 'Lao'
+#
+return <<'END';
+0E81 0E82 Lao
+0E84 Lao
+0E87 0E88 Lao
+0E8A Lao
+0E8D Lao
+0E94 0E97 Lao
+0E99 0E9F Lao
+0EA1 0EA3 Lao
+0EA5 Lao
+0EA7 Lao
+0EAA 0EAB Lao
+0EAD 0EB9 Lao
+0EBB 0EBD Lao
+0EC0 0EC4 Lao
+0EC6 Lao
+0EC8 0ECD Lao
+0ED0 0ED9 Lao
+0EDC 0EDD Lao
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Latn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Latn.pl
new file mode 100644
index 00000000000..c5d4b83d5b2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Latn.pl
@@ -0,0 +1,35 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Latin} (and fuzzy permutations)
+#
+# Meaning: Script 'Latin'
+#
+return <<'END';
+0041 005A Latin
+0061 007A Latin
+00AA Latin
+00BA Latin
+00C0 00D6 Latin
+00D8 00F6 Latin
+00F8 0241 Latin
+0250 02B8 Latin
+02E0 02E4 Latin
+1D00 1D25 Latin
+1D2C 1D5C Latin
+1D62 1D65 Latin
+1D6B 1D77 Latin
+1D79 1DBF Latin
+1E00 1E9B Latin
+1EA0 1EF9 Latin
+2071 Latin
+207F Latin
+2090 2094 Latin
+212A 212B Latin
+FB00 FB06 Latin
+FF21 FF3A Latin
+FF41 FF5A Latin
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Limb.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Limb.pl
new file mode 100644
index 00000000000..be5d715d4e2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Limb.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Limbu} (and fuzzy permutations)
+#
+# Meaning: Script 'Limbu'
+#
+return <<'END';
+1900 191C Limbu
+1920 192B Limbu
+1930 193B Limbu
+1940 Limbu
+1944 194F Limbu
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LinearB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LinearB.pl
new file mode 100644
index 00000000000..04fb45a392b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LinearB.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{LinearB} (and fuzzy permutations)
+#
+# Meaning: Script 'Linear_B'
+#
+return <<'END';
+10000 1000B Linear_B
+1000D 10026 Linear_B
+10028 1003A Linear_B
+1003C 1003D Linear_B
+1003F 1004D Linear_B
+10050 1005D Linear_B
+10080 100FA Linear_B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ll.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ll.pl
new file mode 100644
index 00000000000..1d4db7696e3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ll.pl
@@ -0,0 +1,493 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ll}
+# \p{Ll} (and fuzzy permutations)
+#
+# Meaning: General Category 'Ll'
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0221
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233 0239
+023C
+023F 0240
+0250 02AF
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+03F8
+03FB 03FC
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F7
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1D00 1D2B
+1D62 1D77
+1D79 1D9A
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213C 213D
+2146 2149
+2C30 2C5E
+2C81
+2C83
+2C85
+2C87
+2C89
+2C8B
+2C8D
+2C8F
+2C91
+2C93
+2C95
+2C97
+2C99
+2C9B
+2C9D
+2C9F
+2CA1
+2CA3
+2CA5
+2CA7
+2CA9
+2CAB
+2CAD
+2CAF
+2CB1
+2CB3
+2CB5
+2CB7
+2CB9
+2CBB
+2CBD
+2CBF
+2CC1
+2CC3
+2CC5
+2CC7
+2CC9
+2CCB
+2CCD
+2CCF
+2CD1
+2CD3
+2CD5
+2CD7
+2CD9
+2CDB
+2CDD
+2CDF
+2CE1
+2CE3 2CE4
+2D00 2D25
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044F
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A5
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lm.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lm.pl
new file mode 100644
index 00000000000..7e1e28af9ed
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lm.pl
@@ -0,0 +1,39 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lm}
+# \p{Lm} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lm'
+#
+return <<'END';
+02B0 02C1
+02C6 02D1
+02E0 02E4
+02EE
+037A
+0559
+0640
+06E5 06E6
+0E46
+0EC6
+10FC
+17D7
+1843
+1D2C 1D61
+1D78
+1D9B 1DBF
+2090 2094
+2D6F
+3005
+3031 3035
+303B
+309D 309E
+30FC 30FE
+A015
+FF70
+FF9E FF9F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lo.pl
new file mode 100644
index 00000000000..7721bac7e20
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lo.pl
@@ -0,0 +1,258 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lo}
+# \p{Lo} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lo'
+#
+return <<'END';
+01BB
+01C0 01C3
+05D0 05EA
+05F0 05F2
+0621 063A
+0641 064A
+066E 066F
+0671 06D3
+06D5
+06EE 06EF
+06FA 06FC
+06FF
+0710
+0712 072F
+074D 076D
+0780 07A5
+07B1
+0904 0939
+093D
+0950
+0958 0961
+097D
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD
+09CE
+09DC 09DD
+09DF 09E1
+09F0 09F1
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0 0AE1
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B71
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0E01 0E30
+0E32 0E33
+0E40 0E45
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EDC 0EDD
+0F00
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+10D0 10FA
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+1700 170C
+170E 1711
+1720 1731
+1740 1751
+1760 176C
+176E 1770
+1780 17B3
+17DC
+1820 1842
+1844 1877
+1880 18A8
+1900 191C
+1950 196D
+1970 1974
+1980 19A9
+19C1 19C7
+1A00 1A16
+2135 2138
+2D30 2D65
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3006
+303C
+3041 3096
+309F
+30A1 30FA
+30FF
+3105 312C
+3131 318E
+31A0 31B7
+31F0 31FF
+3400 4DB5
+4E00 9FBB
+A000 A014
+A016 A48C
+A800 A801
+A803 A805
+A807 A80A
+A80C A822
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB1D
+FB1F FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE70 FE74
+FE76 FEFC
+FF66 FF6F
+FF71 FF9D
+FFA0 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10300 1031E
+10330 10349
+10380 1039D
+103A0 103C3
+103C8 103CF
+10450 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00
+10A10 10A13
+10A15 10A17
+10A19 10A33
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LogicalO.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LogicalO.pl
new file mode 100644
index 00000000000..72ed9fe581d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/LogicalO.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{LogicalOrderException} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Logical_Order_Exception'
+#
+return <<'END';
+0E40 0E44 Logical_Order_Exception
+0EC0 0EC4 Logical_Order_Exception
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lower.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lower.pl
new file mode 100644
index 00000000000..f4208ffd909
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lower.pl
@@ -0,0 +1,492 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lower}
+#
+# Meaning: [[:Lower:]]
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0221
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233 0239
+023C
+023F 0240
+0250 02AF
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+03F8
+03FB 03FC
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F7
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1D00 1D2B
+1D62 1D77
+1D79 1D9A
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213C 213D
+2146 2149
+2C30 2C5E
+2C81
+2C83
+2C85
+2C87
+2C89
+2C8B
+2C8D
+2C8F
+2C91
+2C93
+2C95
+2C97
+2C99
+2C9B
+2C9D
+2C9F
+2CA1
+2CA3
+2CA5
+2CA7
+2CA9
+2CAB
+2CAD
+2CAF
+2CB1
+2CB3
+2CB5
+2CB7
+2CB9
+2CBB
+2CBD
+2CBF
+2CC1
+2CC3
+2CC5
+2CC7
+2CC9
+2CCB
+2CCD
+2CCF
+2CD1
+2CD3
+2CD5
+2CD7
+2CD9
+2CDB
+2CDD
+2CDF
+2CE1
+2CE3 2CE4
+2D00 2D25
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044F
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A5
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lowercas.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lowercas.pl
new file mode 100644
index 00000000000..86dd301eec8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lowercas.pl
@@ -0,0 +1,497 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lowercase} (and fuzzy permutations)
+#
+# Meaning: [\p{Ll}\p{OtherLowercase}]
+#
+return <<'END';
+0061 007A
+00AA
+00B5
+00BA
+00DF 00F6
+00F8 00FF
+0101
+0103
+0105
+0107
+0109
+010B
+010D
+010F
+0111
+0113
+0115
+0117
+0119
+011B
+011D
+011F
+0121
+0123
+0125
+0127
+0129
+012B
+012D
+012F
+0131
+0133
+0135
+0137 0138
+013A
+013C
+013E
+0140
+0142
+0144
+0146
+0148 0149
+014B
+014D
+014F
+0151
+0153
+0155
+0157
+0159
+015B
+015D
+015F
+0161
+0163
+0165
+0167
+0169
+016B
+016D
+016F
+0171
+0173
+0175
+0177
+017A
+017C
+017E 0180
+0183
+0185
+0188
+018C 018D
+0192
+0195
+0199 019B
+019E
+01A1
+01A3
+01A5
+01A8
+01AA 01AB
+01AD
+01B0
+01B4
+01B6
+01B9 01BA
+01BD 01BF
+01C6
+01C9
+01CC
+01CE
+01D0
+01D2
+01D4
+01D6
+01D8
+01DA
+01DC 01DD
+01DF
+01E1
+01E3
+01E5
+01E7
+01E9
+01EB
+01ED
+01EF 01F0
+01F3
+01F5
+01F9
+01FB
+01FD
+01FF
+0201
+0203
+0205
+0207
+0209
+020B
+020D
+020F
+0211
+0213
+0215
+0217
+0219
+021B
+021D
+021F
+0221
+0223
+0225
+0227
+0229
+022B
+022D
+022F
+0231
+0233 0239
+023C
+023F 0240
+0250 02B8
+02C0 02C1
+02E0 02E4
+0345
+037A
+0390
+03AC 03CE
+03D0 03D1
+03D5 03D7
+03D9
+03DB
+03DD
+03DF
+03E1
+03E3
+03E5
+03E7
+03E9
+03EB
+03ED
+03EF 03F3
+03F5
+03F8
+03FB 03FC
+0430 045F
+0461
+0463
+0465
+0467
+0469
+046B
+046D
+046F
+0471
+0473
+0475
+0477
+0479
+047B
+047D
+047F
+0481
+048B
+048D
+048F
+0491
+0493
+0495
+0497
+0499
+049B
+049D
+049F
+04A1
+04A3
+04A5
+04A7
+04A9
+04AB
+04AD
+04AF
+04B1
+04B3
+04B5
+04B7
+04B9
+04BB
+04BD
+04BF
+04C2
+04C4
+04C6
+04C8
+04CA
+04CC
+04CE
+04D1
+04D3
+04D5
+04D7
+04D9
+04DB
+04DD
+04DF
+04E1
+04E3
+04E5
+04E7
+04E9
+04EB
+04ED
+04EF
+04F1
+04F3
+04F5
+04F7
+04F9
+0501
+0503
+0505
+0507
+0509
+050B
+050D
+050F
+0561 0587
+1D00 1DBF
+1E01
+1E03
+1E05
+1E07
+1E09
+1E0B
+1E0D
+1E0F
+1E11
+1E13
+1E15
+1E17
+1E19
+1E1B
+1E1D
+1E1F
+1E21
+1E23
+1E25
+1E27
+1E29
+1E2B
+1E2D
+1E2F
+1E31
+1E33
+1E35
+1E37
+1E39
+1E3B
+1E3D
+1E3F
+1E41
+1E43
+1E45
+1E47
+1E49
+1E4B
+1E4D
+1E4F
+1E51
+1E53
+1E55
+1E57
+1E59
+1E5B
+1E5D
+1E5F
+1E61
+1E63
+1E65
+1E67
+1E69
+1E6B
+1E6D
+1E6F
+1E71
+1E73
+1E75
+1E77
+1E79
+1E7B
+1E7D
+1E7F
+1E81
+1E83
+1E85
+1E87
+1E89
+1E8B
+1E8D
+1E8F
+1E91
+1E93
+1E95 1E9B
+1EA1
+1EA3
+1EA5
+1EA7
+1EA9
+1EAB
+1EAD
+1EAF
+1EB1
+1EB3
+1EB5
+1EB7
+1EB9
+1EBB
+1EBD
+1EBF
+1EC1
+1EC3
+1EC5
+1EC7
+1EC9
+1ECB
+1ECD
+1ECF
+1ED1
+1ED3
+1ED5
+1ED7
+1ED9
+1EDB
+1EDD
+1EDF
+1EE1
+1EE3
+1EE5
+1EE7
+1EE9
+1EEB
+1EED
+1EEF
+1EF1
+1EF3
+1EF5
+1EF7
+1EF9
+1F00 1F07
+1F10 1F15
+1F20 1F27
+1F30 1F37
+1F40 1F45
+1F50 1F57
+1F60 1F67
+1F70 1F7D
+1F80 1F87
+1F90 1F97
+1FA0 1FA7
+1FB0 1FB4
+1FB6 1FB7
+1FBE
+1FC2 1FC4
+1FC6 1FC7
+1FD0 1FD3
+1FD6 1FD7
+1FE0 1FE7
+1FF2 1FF4
+1FF6 1FF7
+2071
+207F
+2090 2094
+210A
+210E 210F
+2113
+212F
+2134
+2139
+213C 213D
+2146 2149
+2170 217F
+24D0 24E9
+2C30 2C5E
+2C81
+2C83
+2C85
+2C87
+2C89
+2C8B
+2C8D
+2C8F
+2C91
+2C93
+2C95
+2C97
+2C99
+2C9B
+2C9D
+2C9F
+2CA1
+2CA3
+2CA5
+2CA7
+2CA9
+2CAB
+2CAD
+2CAF
+2CB1
+2CB3
+2CB5
+2CB7
+2CB9
+2CBB
+2CBD
+2CBF
+2CC1
+2CC3
+2CC5
+2CC7
+2CC9
+2CCB
+2CCD
+2CCF
+2CD1
+2CD3
+2CD5
+2CD7
+2CD9
+2CDB
+2CDD
+2CDF
+2CE1
+2CE3 2CE4
+2D00 2D25
+FB00 FB06
+FB13 FB17
+FF41 FF5A
+10428 1044F
+1D41A 1D433
+1D44E 1D454
+1D456 1D467
+1D482 1D49B
+1D4B6 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D4CF
+1D4EA 1D503
+1D51E 1D537
+1D552 1D56B
+1D586 1D59F
+1D5BA 1D5D3
+1D5EE 1D607
+1D622 1D63B
+1D656 1D66F
+1D68A 1D6A5
+1D6C2 1D6DA
+1D6DC 1D6E1
+1D6FC 1D714
+1D716 1D71B
+1D736 1D74E
+1D750 1D755
+1D770 1D788
+1D78A 1D78F
+1D7AA 1D7C2
+1D7C4 1D7C9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lt.pl
new file mode 100644
index 00000000000..6518f8e079c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lt.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lt}
+# \p{Lt} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lt'
+#
+return <<'END';
+01C5
+01C8
+01CB
+01F2
+1F88 1F8F
+1F98 1F9F
+1FA8 1FAF
+1FBC
+1FCC
+1FFC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lu.pl
new file mode 100644
index 00000000000..18634cb627e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Lu.pl
@@ -0,0 +1,489 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Lu}
+# \p{Lu} (and fuzzy permutations)
+#
+# Meaning: General Category 'Lu'
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+023A 023B
+023D 023E
+0241
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+03F7
+03F9 03FA
+03FD 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F6
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+2C00 2C2E
+2C80
+2C82
+2C84
+2C86
+2C88
+2C8A
+2C8C
+2C8E
+2C90
+2C92
+2C94
+2C96
+2C98
+2C9A
+2C9C
+2C9E
+2CA0
+2CA2
+2CA4
+2CA6
+2CA8
+2CAA
+2CAC
+2CAE
+2CB0
+2CB2
+2CB4
+2CB6
+2CB8
+2CBA
+2CBC
+2CBE
+2CC0
+2CC2
+2CC4
+2CC6
+2CC8
+2CCA
+2CCC
+2CCE
+2CD0
+2CD2
+2CD4
+2CD6
+2CD8
+2CDA
+2CDC
+2CDE
+2CE0
+2CE2
+FF21 FF3A
+10400 10427
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/M.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/M.pl
new file mode 100644
index 00000000000..10d6c61a669
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/M.pl
@@ -0,0 +1,146 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{M}
+# \p{M} (and fuzzy permutations)
+#
+# Meaning: Major Category 'M'
+#
+return <<'END';
+0300 036F
+0483 0486
+0488 0489
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+0610 0615
+064B 065E
+0670
+06D6 06DC
+06DE 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0903
+093C
+093E 094D
+0951 0954
+0962 0963
+0981 0983
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09E2 09E3
+0A01 0A03
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A83
+0ABC
+0ABE 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AE2 0AE3
+0B01 0B03
+0B3C
+0B3E 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B82
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0C01 0C03
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C82 0C83
+0CBC
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0D02 0D03
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D82 0D83
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F3E 0F3F
+0F71 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102C 1032
+1036 1039
+1056 1059
+135F
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B6 17D3
+17DD
+180B 180D
+18A9
+1920 192B
+1930 193B
+19B0 19C0
+19C8 19C9
+1A17 1A1B
+1DC0 1DC3
+20D0 20EB
+302A 302F
+3099 309A
+A802
+A806
+A80B
+A823 A827
+FB1E
+FE00 FE0F
+FE20 FE23
+10A01 10A03
+10A05 10A06
+10A0C 10A0F
+10A38 10A3A
+10A3F
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Math.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Math.pl
new file mode 100644
index 00000000000..a8cb569a258
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Math.pl
@@ -0,0 +1,103 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Math} (and fuzzy permutations)
+#
+# Meaning: [\p{Sm}\p{OtherMath}]
+#
+return <<'END';
+002B
+003C 003E
+005E
+007C
+007E
+00AC
+00B1
+00D7
+00F7
+03D0 03D2
+03D5
+03F0 03F1
+03F4 03F6
+2016
+2032 2034
+2040
+2044
+2052
+2061 2063
+207A 207E
+208A 208E
+20D0 20DC
+20E1
+20E5 20E6
+2102
+210A 2113
+2115
+2119 211D
+2124
+2128 2129
+212C 212D
+212F 2131
+2133 2138
+213C 2149
+214B
+2190 2194
+219A 219B
+21A0
+21A3
+21A6
+21AE
+21CE 21CF
+21D2
+21D4
+21F4 22FF
+2308 230B
+2320 2321
+237C
+239B 23B3
+23B7
+23D0
+25B7
+25C1
+25F8 25FF
+266F
+27C0 27C6
+27D0 27EB
+27F0 27FF
+2900 2AFF
+FB29
+FE61 FE66
+FE68
+FF0B
+FF1C FF1E
+FF3C
+FF3E
+FF5C
+FF5E
+FFE2
+FFE9 FFEC
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A3
+1D6A8 1D7C9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mc.pl
new file mode 100644
index 00000000000..26e02469f02
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mc.pl
@@ -0,0 +1,76 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mc}
+# \p{Mc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Mc'
+#
+return <<'END';
+0903
+093E 0940
+0949 094C
+0982 0983
+09BE 09C0
+09C7 09C8
+09CB 09CC
+09D7
+0A03
+0A3E 0A40
+0A83
+0ABE 0AC0
+0AC9
+0ACB 0ACC
+0B02 0B03
+0B3E
+0B40
+0B47 0B48
+0B4B 0B4C
+0B57
+0BBE 0BBF
+0BC1 0BC2
+0BC6 0BC8
+0BCA 0BCC
+0BD7
+0C01 0C03
+0C41 0C44
+0C82 0C83
+0CBE
+0CC0 0CC4
+0CC7 0CC8
+0CCA 0CCB
+0CD5 0CD6
+0D02 0D03
+0D3E 0D40
+0D46 0D48
+0D4A 0D4C
+0D57
+0D82 0D83
+0DCF 0DD1
+0DD8 0DDF
+0DF2 0DF3
+0F3E 0F3F
+0F7F
+102C
+1031
+1038
+1056 1057
+17B6
+17BE 17C5
+17C7 17C8
+1923 1926
+1929 192B
+1930 1931
+1933 1938
+19B0 19C0
+19C8 19C9
+1A19 1A1B
+A802
+A823 A824
+A827
+1D165 1D166
+1D16D 1D172
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Me.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Me.pl
new file mode 100644
index 00000000000..a8ffc8fee21
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Me.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Me}
+# \p{Me} (and fuzzy permutations)
+#
+# Meaning: General Category 'Me'
+#
+return <<'END';
+0488 0489
+06DE
+20DD 20E0
+20E2 20E4
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mlym.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mlym.pl
new file mode 100644
index 00000000000..9a3ad1b56cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mlym.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Malayalam} (and fuzzy permutations)
+#
+# Meaning: Script 'Malayalam'
+#
+return <<'END';
+0D02 0D03 Malayalam
+0D05 0D0C Malayalam
+0D0E 0D10 Malayalam
+0D12 0D28 Malayalam
+0D2A 0D39 Malayalam
+0D3E 0D43 Malayalam
+0D46 0D48 Malayalam
+0D4A 0D4D Malayalam
+0D57 Malayalam
+0D60 0D61 Malayalam
+0D66 0D6F Malayalam
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mn.pl
new file mode 100644
index 00000000000..a37b319a1cb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mn.pl
@@ -0,0 +1,137 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mn}
+# \p{Mn} (and fuzzy permutations)
+#
+# Meaning: General Category 'Mn'
+#
+return <<'END';
+0300 036F
+0483 0486
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+0610 0615
+064B 065E
+0670
+06D6 06DC
+06DF 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A01 0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0AE2 0AE3
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBC
+0CBF
+0CC6
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+135F
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+17DD
+180B 180D
+18A9
+1920 1922
+1927 1928
+1932
+1939 193B
+1A17 1A18
+1DC0 1DC3
+20D0 20DC
+20E1
+20E5 20EB
+302A 302F
+3099 309A
+A806
+A80B
+A825 A826
+FB1E
+FE00 FE0F
+FE20 FE23
+10A01 10A03
+10A05 10A06
+10A0C 10A0F
+10A38 10A3A
+10A3F
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mong.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mong.pl
new file mode 100644
index 00000000000..b72e78316c8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mong.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Mongolian} (and fuzzy permutations)
+#
+# Meaning: Script 'Mongolian'
+#
+return <<'END';
+1800 180E Mongolian
+1810 1819 Mongolian
+1820 1877 Mongolian
+1880 18A9 Mongolian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mymr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mymr.pl
new file mode 100644
index 00000000000..dc737eee2c9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Mymr.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Myanmar} (and fuzzy permutations)
+#
+# Meaning: Script 'Myanmar'
+#
+return <<'END';
+1000 1021 Myanmar
+1023 1027 Myanmar
+1029 102A Myanmar
+102C 1032 Myanmar
+1036 1039 Myanmar
+1040 1059 Myanmar
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/N.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/N.pl
new file mode 100644
index 00000000000..c94d2d97317
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/N.pl
@@ -0,0 +1,66 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{N}
+# \p{N} (and fuzzy permutations)
+#
+# Meaning: Major Category 'N'
+#
+return <<'END';
+0030 0039
+00B2 00B3
+00B9
+00BC 00BE
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+09F4 09F9
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE6 0BF2
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F33
+1040 1049
+1369 137C
+16EE 16F0
+17E0 17E9
+17F0 17F9
+1810 1819
+1946 194F
+19D0 19D9
+2070
+2074 2079
+2080 2089
+2153 2183
+2460 249B
+24EA 24FF
+2776 2793
+2CFD
+3007
+3021 3029
+3038 303A
+3192 3195
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+FF10 FF19
+10107 10133
+10140 10178
+1018A
+10320 10323
+1034A
+103D1 103D5
+104A0 104A9
+10A40 10A47
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NChar.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NChar.pl
new file mode 100644
index 00000000000..46f865d878c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NChar.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Noncharacter_Code_Point'
+#
+return <<'END';
+FDD0 FDEF Noncharacter_Code_Point
+FFFE FFFF Noncharacter_Code_Point
+1FFFE 1FFFF Noncharacter_Code_Point
+2FFFE 2FFFF Noncharacter_Code_Point
+3FFFE 3FFFF Noncharacter_Code_Point
+4FFFE 4FFFF Noncharacter_Code_Point
+5FFFE 5FFFF Noncharacter_Code_Point
+6FFFE 6FFFF Noncharacter_Code_Point
+7FFFE 7FFFF Noncharacter_Code_Point
+8FFFE 8FFFF Noncharacter_Code_Point
+9FFFE 9FFFF Noncharacter_Code_Point
+AFFFE AFFFF Noncharacter_Code_Point
+BFFFE BFFFF Noncharacter_Code_Point
+CFFFE CFFFF Noncharacter_Code_Point
+DFFFE DFFFF Noncharacter_Code_Point
+EFFFE EFFFF Noncharacter_Code_Point
+FFFFE FFFFF Noncharacter_Code_Point
+10FFFE 10FFFF Noncharacter_Code_Point
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nd.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nd.pl
new file mode 100644
index 00000000000..e38926a9880
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nd.pl
@@ -0,0 +1,36 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Nd}
+# \p{Nd} (and fuzzy permutations)
+#
+# Meaning: General Category 'Nd'
+#
+return <<'END';
+0030 0039
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE6 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+17E0 17E9
+1810 1819
+1946 194F
+19D0 19D9
+FF10 FF19
+104A0 104A9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NewTaiLu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NewTaiLu.pl
new file mode 100644
index 00000000000..506c6011ab5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/NewTaiLu.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{NewTaiLue} (and fuzzy permutations)
+#
+# Meaning: Script 'New_Tai_Lue'
+#
+return <<'END';
+1980 19A9 New_Tai_Lue
+19B0 19C9 New_Tai_Lue
+19D0 19D9 New_Tai_Lue
+19DE 19DF New_Tai_Lue
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nl.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nl.pl
new file mode 100644
index 00000000000..3acf890e1e9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nl.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Nl}
+# \p{Nl} (and fuzzy permutations)
+#
+# Meaning: General Category 'Nl'
+#
+return <<'END';
+16EE 16F0
+2160 2183
+3007
+3021 3029
+3038 303A
+10140 10174
+1034A
+103D1 103D5
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/No.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/No.pl
new file mode 100644
index 00000000000..4e8b11c2ab6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/No.pl
@@ -0,0 +1,39 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{No}
+# \p{No} (and fuzzy permutations)
+#
+# Meaning: General Category 'No'
+#
+return <<'END';
+00B2 00B3
+00B9
+00BC 00BE
+09F4 09F9
+0BF0 0BF2
+0F2A 0F33
+1369 137C
+17F0 17F9
+2070
+2074 2079
+2080 2089
+2153 215F
+2460 249B
+24EA 24FF
+2776 2793
+2CFD
+3192 3195
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+10107 10133
+10175 10178
+1018A
+10320 10323
+10A40 10A47
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nonchara.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nonchara.pl
new file mode 100644
index 00000000000..02624831133
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Nonchara.pl
@@ -0,0 +1,30 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{NoncharacterCodePoint} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Noncharacter_Code_Point'
+#
+return <<'END';
+FDD0 FDEF Noncharacter_Code_Point
+FFFE FFFF Noncharacter_Code_Point
+1FFFE 1FFFF Noncharacter_Code_Point
+2FFFE 2FFFF Noncharacter_Code_Point
+3FFFE 3FFFF Noncharacter_Code_Point
+4FFFE 4FFFF Noncharacter_Code_Point
+5FFFE 5FFFF Noncharacter_Code_Point
+6FFFE 6FFFF Noncharacter_Code_Point
+7FFFE 7FFFF Noncharacter_Code_Point
+8FFFE 8FFFF Noncharacter_Code_Point
+9FFFE 9FFFF Noncharacter_Code_Point
+AFFFE AFFFF Noncharacter_Code_Point
+BFFFE BFFFF Noncharacter_Code_Point
+CFFFE CFFFF Noncharacter_Code_Point
+DFFFE DFFFF Noncharacter_Code_Point
+EFFFE EFFFF Noncharacter_Code_Point
+FFFFE FFFFF Noncharacter_Code_Point
+10FFFE 10FFFF Noncharacter_Code_Point
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OAlpha.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OAlpha.pl
new file mode 100644
index 00000000000..ad6b3b331dd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OAlpha.pl
@@ -0,0 +1,108 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Alphabetic'
+#
+return <<'END';
+0345 Other_Alphabetic
+05B0 05B9 Other_Alphabetic
+05BB 05BD Other_Alphabetic
+05BF Other_Alphabetic
+05C1 05C2 Other_Alphabetic
+05C4 05C5 Other_Alphabetic
+05C7 Other_Alphabetic
+0610 0615 Other_Alphabetic
+064B 0657 Other_Alphabetic
+0659 065E Other_Alphabetic
+0670 Other_Alphabetic
+06D6 06DC Other_Alphabetic
+06E1 06E4 Other_Alphabetic
+06E7 06E8 Other_Alphabetic
+06ED Other_Alphabetic
+0711 Other_Alphabetic
+0730 073F Other_Alphabetic
+07A6 07B0 Other_Alphabetic
+0901 0903 Other_Alphabetic
+093E 094C Other_Alphabetic
+0962 0963 Other_Alphabetic
+0981 0983 Other_Alphabetic
+09BE 09C4 Other_Alphabetic
+09C7 09C8 Other_Alphabetic
+09CB 09CC Other_Alphabetic
+09D7 Other_Alphabetic
+09E2 09E3 Other_Alphabetic
+0A01 0A03 Other_Alphabetic
+0A3E 0A42 Other_Alphabetic
+0A47 0A48 Other_Alphabetic
+0A4B 0A4C Other_Alphabetic
+0A70 0A71 Other_Alphabetic
+0A81 0A83 Other_Alphabetic
+0ABE 0AC5 Other_Alphabetic
+0AC7 0AC9 Other_Alphabetic
+0ACB 0ACC Other_Alphabetic
+0AE2 0AE3 Other_Alphabetic
+0B01 0B03 Other_Alphabetic
+0B3E 0B43 Other_Alphabetic
+0B47 0B48 Other_Alphabetic
+0B4B 0B4C Other_Alphabetic
+0B56 0B57 Other_Alphabetic
+0B82 Other_Alphabetic
+0BBE 0BC2 Other_Alphabetic
+0BC6 0BC8 Other_Alphabetic
+0BCA 0BCC Other_Alphabetic
+0BD7 Other_Alphabetic
+0C01 0C03 Other_Alphabetic
+0C3E 0C44 Other_Alphabetic
+0C46 0C48 Other_Alphabetic
+0C4A 0C4C Other_Alphabetic
+0C55 0C56 Other_Alphabetic
+0C82 0C83 Other_Alphabetic
+0CBE 0CC4 Other_Alphabetic
+0CC6 0CC8 Other_Alphabetic
+0CCA 0CCC Other_Alphabetic
+0CD5 0CD6 Other_Alphabetic
+0D02 0D03 Other_Alphabetic
+0D3E 0D43 Other_Alphabetic
+0D46 0D48 Other_Alphabetic
+0D4A 0D4C Other_Alphabetic
+0D57 Other_Alphabetic
+0D82 0D83 Other_Alphabetic
+0DCF 0DD4 Other_Alphabetic
+0DD6 Other_Alphabetic
+0DD8 0DDF Other_Alphabetic
+0DF2 0DF3 Other_Alphabetic
+0E31 Other_Alphabetic
+0E34 0E3A Other_Alphabetic
+0E4D Other_Alphabetic
+0EB1 Other_Alphabetic
+0EB4 0EB9 Other_Alphabetic
+0EBB 0EBC Other_Alphabetic
+0ECD Other_Alphabetic
+0F71 0F81 Other_Alphabetic
+0F90 0F97 Other_Alphabetic
+0F99 0FBC Other_Alphabetic
+102C 1032 Other_Alphabetic
+1036 Other_Alphabetic
+1038 Other_Alphabetic
+1056 1059 Other_Alphabetic
+135F Other_Alphabetic
+1712 1713 Other_Alphabetic
+1732 1733 Other_Alphabetic
+1752 1753 Other_Alphabetic
+1772 1773 Other_Alphabetic
+17B6 17C8 Other_Alphabetic
+18A9 Other_Alphabetic
+1920 192B Other_Alphabetic
+1930 1938 Other_Alphabetic
+19B0 19C0 Other_Alphabetic
+19C8 19C9 Other_Alphabetic
+1A17 1A1B Other_Alphabetic
+24B6 24E9 Other_Alphabetic
+A823 A827 Other_Alphabetic
+FB1E Other_Alphabetic
+10A01 10A03 Other_Alphabetic
+10A05 10A06 Other_Alphabetic
+10A0C 10A0F Other_Alphabetic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ODI.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ODI.pl
new file mode 100644
index 00000000000..0bcb43d5650
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/ODI.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Default_Ignorable_Code_Point'
+#
+return <<'END';
+034F Other_Default_Ignorable_Code_Point
+115F 1160 Other_Default_Ignorable_Code_Point
+2064 2069 Other_Default_Ignorable_Code_Point
+3164 Other_Default_Ignorable_Code_Point
+FFA0 Other_Default_Ignorable_Code_Point
+FFF0 FFF8 Other_Default_Ignorable_Code_Point
+E0000 Other_Default_Ignorable_Code_Point
+E0002 E001F Other_Default_Ignorable_Code_Point
+E0080 E00FF Other_Default_Ignorable_Code_Point
+E01F0 E0FFF Other_Default_Ignorable_Code_Point
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OGrExt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OGrExt.pl
new file mode 100644
index 00000000000..1db852615cc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OGrExt.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Grapheme_Extend'
+#
+return <<'END';
+09BE Other_Grapheme_Extend
+09D7 Other_Grapheme_Extend
+0B3E Other_Grapheme_Extend
+0B57 Other_Grapheme_Extend
+0BBE Other_Grapheme_Extend
+0BD7 Other_Grapheme_Extend
+0CC2 Other_Grapheme_Extend
+0CD5 0CD6 Other_Grapheme_Extend
+0D3E Other_Grapheme_Extend
+0D57 Other_Grapheme_Extend
+0DCF Other_Grapheme_Extend
+0DDF Other_Grapheme_Extend
+200C 200D Other_Grapheme_Extend
+1D165 Other_Grapheme_Extend
+1D16E 1D172 Other_Grapheme_Extend
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDC.pl
new file mode 100644
index 00000000000..3c66febbd46
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDC.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_ID_Continue'
+#
+return <<'END';
+1369 1371 Other_ID_Continue
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDS.pl
new file mode 100644
index 00000000000..2fa61e8bf7d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OIDS.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_ID_Start'
+#
+return <<'END';
+2118 Other_ID_Start
+212E Other_ID_Start
+309B 309C Other_ID_Start
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OLower.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OLower.pl
new file mode 100644
index 00000000000..d403c834e8a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OLower.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Lowercase'
+#
+return <<'END';
+02B0 02B8 Other_Lowercase
+02C0 02C1 Other_Lowercase
+02E0 02E4 Other_Lowercase
+0345 Other_Lowercase
+037A Other_Lowercase
+1D2C 1D61 Other_Lowercase
+1D78 Other_Lowercase
+1D9B 1DBF Other_Lowercase
+2090 2094 Other_Lowercase
+2170 217F Other_Lowercase
+24D0 24E9 Other_Lowercase
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OMath.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OMath.pl
new file mode 100644
index 00000000000..a04d5d44761
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OMath.pl
@@ -0,0 +1,77 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Math'
+#
+return <<'END';
+005E Other_Math
+03D0 03D2 Other_Math
+03D5 Other_Math
+03F0 03F1 Other_Math
+03F4 03F5 Other_Math
+2016 Other_Math
+2032 2034 Other_Math
+2040 Other_Math
+2061 2063 Other_Math
+207D 207E Other_Math
+208D 208E Other_Math
+20D0 20DC Other_Math
+20E1 Other_Math
+20E5 20E6 Other_Math
+2102 Other_Math
+210A 2113 Other_Math
+2115 Other_Math
+2119 211D Other_Math
+2124 Other_Math
+2128 2129 Other_Math
+212C 212D Other_Math
+212F 2131 Other_Math
+2133 2138 Other_Math
+213C 213F Other_Math
+2145 2149 Other_Math
+23B7 Other_Math
+23D0 Other_Math
+27C5 27C6 Other_Math
+27E6 27EB Other_Math
+2983 2998 Other_Math
+29D8 29DB Other_Math
+29FC 29FD Other_Math
+FE61 Other_Math
+FE63 Other_Math
+FE68 Other_Math
+FF3C Other_Math
+FF3E Other_Math
+1D400 1D454 Other_Math
+1D456 1D49C Other_Math
+1D49E 1D49F Other_Math
+1D4A2 Other_Math
+1D4A5 1D4A6 Other_Math
+1D4A9 1D4AC Other_Math
+1D4AE 1D4B9 Other_Math
+1D4BB Other_Math
+1D4BD 1D4C3 Other_Math
+1D4C5 1D505 Other_Math
+1D507 1D50A Other_Math
+1D50D 1D514 Other_Math
+1D516 1D51C Other_Math
+1D51E 1D539 Other_Math
+1D53B 1D53E Other_Math
+1D540 1D544 Other_Math
+1D546 Other_Math
+1D54A 1D550 Other_Math
+1D552 1D6A3 Other_Math
+1D6A8 1D6C0 Other_Math
+1D6C2 1D6DA Other_Math
+1D6DC 1D6FA Other_Math
+1D6FC 1D714 Other_Math
+1D716 1D734 Other_Math
+1D736 1D74E Other_Math
+1D750 1D76E Other_Math
+1D770 1D788 Other_Math
+1D78A 1D7A8 Other_Math
+1D7AA 1D7C2 Other_Math
+1D7C4 1D7C9 Other_Math
+1D7CE 1D7FF Other_Math
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OUpper.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OUpper.pl
new file mode 100644
index 00000000000..28ae9bec896
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OUpper.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Other_Uppercase'
+#
+return <<'END';
+2160 216F Other_Uppercase
+24B6 24CF Other_Uppercase
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ogam.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ogam.pl
new file mode 100644
index 00000000000..febdcd5f0f9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ogam.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ogham} (and fuzzy permutations)
+#
+# Meaning: Script 'Ogham'
+#
+return <<'END';
+1680 169C Ogham
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldItali.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldItali.pl
new file mode 100644
index 00000000000..d2084536937
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldItali.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OldItalic} (and fuzzy permutations)
+#
+# Meaning: Script 'Old_Italic'
+#
+return <<'END';
+10300 1031E Old_Italic
+10320 10323 Old_Italic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldPersi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldPersi.pl
new file mode 100644
index 00000000000..9558e2e822e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OldPersi.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OldPersian} (and fuzzy permutations)
+#
+# Meaning: Script 'Old_Persian'
+#
+return <<'END';
+103A0 103C3 Old_Persian
+103C8 103D5 Old_Persian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Orya.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Orya.pl
new file mode 100644
index 00000000000..9b96b1f7dee
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Orya.pl
@@ -0,0 +1,26 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Oriya} (and fuzzy permutations)
+#
+# Meaning: Script 'Oriya'
+#
+return <<'END';
+0B01 0B03 Oriya
+0B05 0B0C Oriya
+0B0F 0B10 Oriya
+0B13 0B28 Oriya
+0B2A 0B30 Oriya
+0B32 0B33 Oriya
+0B35 0B39 Oriya
+0B3C 0B43 Oriya
+0B47 0B48 Oriya
+0B4B 0B4D Oriya
+0B56 0B57 Oriya
+0B5C 0B5D Oriya
+0B5F 0B61 Oriya
+0B66 0B71 Oriya
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Osma.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Osma.pl
new file mode 100644
index 00000000000..de7a8935552
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Osma.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Osmanya} (and fuzzy permutations)
+#
+# Meaning: Script 'Osmanya'
+#
+return <<'END';
+10480 1049D Osmanya
+104A0 104A9 Osmanya
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherAlp.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherAlp.pl
new file mode 100644
index 00000000000..a786ad9fb6e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherAlp.pl
@@ -0,0 +1,111 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherAlphabetic} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Alphabetic'
+#
+return <<'END';
+0345 Other_Alphabetic
+05B0 05B9 Other_Alphabetic
+05BB 05BD Other_Alphabetic
+05BF Other_Alphabetic
+05C1 05C2 Other_Alphabetic
+05C4 05C5 Other_Alphabetic
+05C7 Other_Alphabetic
+0610 0615 Other_Alphabetic
+064B 0657 Other_Alphabetic
+0659 065E Other_Alphabetic
+0670 Other_Alphabetic
+06D6 06DC Other_Alphabetic
+06E1 06E4 Other_Alphabetic
+06E7 06E8 Other_Alphabetic
+06ED Other_Alphabetic
+0711 Other_Alphabetic
+0730 073F Other_Alphabetic
+07A6 07B0 Other_Alphabetic
+0901 0903 Other_Alphabetic
+093E 094C Other_Alphabetic
+0962 0963 Other_Alphabetic
+0981 0983 Other_Alphabetic
+09BE 09C4 Other_Alphabetic
+09C7 09C8 Other_Alphabetic
+09CB 09CC Other_Alphabetic
+09D7 Other_Alphabetic
+09E2 09E3 Other_Alphabetic
+0A01 0A03 Other_Alphabetic
+0A3E 0A42 Other_Alphabetic
+0A47 0A48 Other_Alphabetic
+0A4B 0A4C Other_Alphabetic
+0A70 0A71 Other_Alphabetic
+0A81 0A83 Other_Alphabetic
+0ABE 0AC5 Other_Alphabetic
+0AC7 0AC9 Other_Alphabetic
+0ACB 0ACC Other_Alphabetic
+0AE2 0AE3 Other_Alphabetic
+0B01 0B03 Other_Alphabetic
+0B3E 0B43 Other_Alphabetic
+0B47 0B48 Other_Alphabetic
+0B4B 0B4C Other_Alphabetic
+0B56 0B57 Other_Alphabetic
+0B82 Other_Alphabetic
+0BBE 0BC2 Other_Alphabetic
+0BC6 0BC8 Other_Alphabetic
+0BCA 0BCC Other_Alphabetic
+0BD7 Other_Alphabetic
+0C01 0C03 Other_Alphabetic
+0C3E 0C44 Other_Alphabetic
+0C46 0C48 Other_Alphabetic
+0C4A 0C4C Other_Alphabetic
+0C55 0C56 Other_Alphabetic
+0C82 0C83 Other_Alphabetic
+0CBE 0CC4 Other_Alphabetic
+0CC6 0CC8 Other_Alphabetic
+0CCA 0CCC Other_Alphabetic
+0CD5 0CD6 Other_Alphabetic
+0D02 0D03 Other_Alphabetic
+0D3E 0D43 Other_Alphabetic
+0D46 0D48 Other_Alphabetic
+0D4A 0D4C Other_Alphabetic
+0D57 Other_Alphabetic
+0D82 0D83 Other_Alphabetic
+0DCF 0DD4 Other_Alphabetic
+0DD6 Other_Alphabetic
+0DD8 0DDF Other_Alphabetic
+0DF2 0DF3 Other_Alphabetic
+0E31 Other_Alphabetic
+0E34 0E3A Other_Alphabetic
+0E4D Other_Alphabetic
+0EB1 Other_Alphabetic
+0EB4 0EB9 Other_Alphabetic
+0EBB 0EBC Other_Alphabetic
+0ECD Other_Alphabetic
+0F71 0F81 Other_Alphabetic
+0F90 0F97 Other_Alphabetic
+0F99 0FBC Other_Alphabetic
+102C 1032 Other_Alphabetic
+1036 Other_Alphabetic
+1038 Other_Alphabetic
+1056 1059 Other_Alphabetic
+135F Other_Alphabetic
+1712 1713 Other_Alphabetic
+1732 1733 Other_Alphabetic
+1752 1753 Other_Alphabetic
+1772 1773 Other_Alphabetic
+17B6 17C8 Other_Alphabetic
+18A9 Other_Alphabetic
+1920 192B Other_Alphabetic
+1930 1938 Other_Alphabetic
+19B0 19C0 Other_Alphabetic
+19C8 19C9 Other_Alphabetic
+1A17 1A1B Other_Alphabetic
+24B6 24E9 Other_Alphabetic
+A823 A827 Other_Alphabetic
+FB1E Other_Alphabetic
+10A01 10A03 Other_Alphabetic
+10A05 10A06 Other_Alphabetic
+10A0C 10A0F Other_Alphabetic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherDef.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherDef.pl
new file mode 100644
index 00000000000..ced4761b930
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherDef.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherDefaultIgnorableCodePoint} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Default_Ignorable_Code_Point'
+#
+return <<'END';
+034F Other_Default_Ignorable_Code_Point
+115F 1160 Other_Default_Ignorable_Code_Point
+2064 2069 Other_Default_Ignorable_Code_Point
+3164 Other_Default_Ignorable_Code_Point
+FFA0 Other_Default_Ignorable_Code_Point
+FFF0 FFF8 Other_Default_Ignorable_Code_Point
+E0000 Other_Default_Ignorable_Code_Point
+E0002 E001F Other_Default_Ignorable_Code_Point
+E0080 E00FF Other_Default_Ignorable_Code_Point
+E01F0 E0FFF Other_Default_Ignorable_Code_Point
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherGra.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherGra.pl
new file mode 100644
index 00000000000..00e75a8c5fa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherGra.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherGraphemeExtend} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Grapheme_Extend'
+#
+return <<'END';
+09BE Other_Grapheme_Extend
+09D7 Other_Grapheme_Extend
+0B3E Other_Grapheme_Extend
+0B57 Other_Grapheme_Extend
+0BBE Other_Grapheme_Extend
+0BD7 Other_Grapheme_Extend
+0CC2 Other_Grapheme_Extend
+0CD5 0CD6 Other_Grapheme_Extend
+0D3E Other_Grapheme_Extend
+0D57 Other_Grapheme_Extend
+0DCF Other_Grapheme_Extend
+0DDF Other_Grapheme_Extend
+200C 200D Other_Grapheme_Extend
+1D165 Other_Grapheme_Extend
+1D16E 1D172 Other_Grapheme_Extend
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdC.pl
new file mode 100644
index 00000000000..ddd390b2241
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdC.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherIdContinue} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_ID_Continue'
+#
+return <<'END';
+1369 1371 Other_ID_Continue
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdS.pl
new file mode 100644
index 00000000000..1f165d1ce17
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherIdS.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherIdStart} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_ID_Start'
+#
+return <<'END';
+2118 Other_ID_Start
+212E Other_ID_Start
+309B 309C Other_ID_Start
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherLow.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherLow.pl
new file mode 100644
index 00000000000..b2804306e65
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherLow.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherLowercase} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Lowercase'
+#
+return <<'END';
+02B0 02B8 Other_Lowercase
+02C0 02C1 Other_Lowercase
+02E0 02E4 Other_Lowercase
+0345 Other_Lowercase
+037A Other_Lowercase
+1D2C 1D61 Other_Lowercase
+1D78 Other_Lowercase
+1D9B 1DBF Other_Lowercase
+2090 2094 Other_Lowercase
+2170 217F Other_Lowercase
+24D0 24E9 Other_Lowercase
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherMat.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherMat.pl
new file mode 100644
index 00000000000..6264a6b0d89
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherMat.pl
@@ -0,0 +1,80 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherMath} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Math'
+#
+return <<'END';
+005E Other_Math
+03D0 03D2 Other_Math
+03D5 Other_Math
+03F0 03F1 Other_Math
+03F4 03F5 Other_Math
+2016 Other_Math
+2032 2034 Other_Math
+2040 Other_Math
+2061 2063 Other_Math
+207D 207E Other_Math
+208D 208E Other_Math
+20D0 20DC Other_Math
+20E1 Other_Math
+20E5 20E6 Other_Math
+2102 Other_Math
+210A 2113 Other_Math
+2115 Other_Math
+2119 211D Other_Math
+2124 Other_Math
+2128 2129 Other_Math
+212C 212D Other_Math
+212F 2131 Other_Math
+2133 2138 Other_Math
+213C 213F Other_Math
+2145 2149 Other_Math
+23B7 Other_Math
+23D0 Other_Math
+27C5 27C6 Other_Math
+27E6 27EB Other_Math
+2983 2998 Other_Math
+29D8 29DB Other_Math
+29FC 29FD Other_Math
+FE61 Other_Math
+FE63 Other_Math
+FE68 Other_Math
+FF3C Other_Math
+FF3E Other_Math
+1D400 1D454 Other_Math
+1D456 1D49C Other_Math
+1D49E 1D49F Other_Math
+1D4A2 Other_Math
+1D4A5 1D4A6 Other_Math
+1D4A9 1D4AC Other_Math
+1D4AE 1D4B9 Other_Math
+1D4BB Other_Math
+1D4BD 1D4C3 Other_Math
+1D4C5 1D505 Other_Math
+1D507 1D50A Other_Math
+1D50D 1D514 Other_Math
+1D516 1D51C Other_Math
+1D51E 1D539 Other_Math
+1D53B 1D53E Other_Math
+1D540 1D544 Other_Math
+1D546 Other_Math
+1D54A 1D550 Other_Math
+1D552 1D6A3 Other_Math
+1D6A8 1D6C0 Other_Math
+1D6C2 1D6DA Other_Math
+1D6DC 1D6FA Other_Math
+1D6FC 1D714 Other_Math
+1D716 1D734 Other_Math
+1D736 1D74E Other_Math
+1D750 1D76E Other_Math
+1D770 1D788 Other_Math
+1D78A 1D7A8 Other_Math
+1D7AA 1D7C2 Other_Math
+1D7C4 1D7C9 Other_Math
+1D7CE 1D7FF Other_Math
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherUpp.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherUpp.pl
new file mode 100644
index 00000000000..4ee526f338e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/OtherUpp.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{OtherUppercase} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Other_Uppercase'
+#
+return <<'END';
+2160 216F Other_Uppercase
+24B6 24CF Other_Uppercase
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/P.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/P.pl
new file mode 100644
index 00000000000..9633611f351
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/P.pl
@@ -0,0 +1,109 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{P}
+# \p{P} (and fuzzy permutations)
+#
+# Meaning: Major Category 'P'
+#
+return <<'END';
+0021 0023
+0025 002A
+002C 002F
+003A 003B
+003F 0040
+005B 005D
+005F
+007B
+007D
+00A1
+00AB
+00B7
+00BB
+00BF
+037E
+0387
+055A 055F
+0589 058A
+05BE
+05C0
+05C3
+05C6
+05F3 05F4
+060C 060D
+061B
+061E 061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F3A 0F3D
+0F85
+0FD0 0FD1
+104A 104F
+10FB
+1361 1368
+166D 166E
+169B 169C
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 180A
+1944 1945
+19DE 19DF
+1A1E 1A1F
+2010 2027
+2030 2043
+2045 2051
+2053 205E
+207D 207E
+208D 208E
+2329 232A
+23B4 23B6
+2768 2775
+27C5 27C6
+27E6 27EB
+2983 2998
+29D8 29DB
+29FC 29FD
+2CF9 2CFC
+2CFE 2CFF
+2E00 2E17
+2E1C 2E1D
+3001 3003
+3008 3011
+3014 301F
+3030
+303D
+30A0
+30FB
+FD3E FD3F
+FE10 FE19
+FE30 FE52
+FE54 FE61
+FE63
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF0A
+FF0C FF0F
+FF1A FF1B
+FF1F FF20
+FF3B FF3D
+FF3F
+FF5B
+FF5D
+FF5F FF65
+10100 10101
+1039F
+10A50 10A58
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatSyn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatSyn.pl
new file mode 100644
index 00000000000..bb53683d6e4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatSyn.pl
@@ -0,0 +1,37 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Pattern_Syntax'
+#
+return <<'END';
+0021 002F Pattern_Syntax
+003A 0040 Pattern_Syntax
+005B 005E Pattern_Syntax
+0060 Pattern_Syntax
+007B 007E Pattern_Syntax
+00A1 00A7 Pattern_Syntax
+00A9 Pattern_Syntax
+00AB 00AC Pattern_Syntax
+00AE Pattern_Syntax
+00B0 00B1 Pattern_Syntax
+00B6 Pattern_Syntax
+00BB Pattern_Syntax
+00BF Pattern_Syntax
+00D7 Pattern_Syntax
+00F7 Pattern_Syntax
+2010 2027 Pattern_Syntax
+2030 203E Pattern_Syntax
+2041 2053 Pattern_Syntax
+2055 205E Pattern_Syntax
+2190 245F Pattern_Syntax
+2500 2775 Pattern_Syntax
+2794 2BFF Pattern_Syntax
+2E00 2E7F Pattern_Syntax
+3001 3003 Pattern_Syntax
+3008 3020 Pattern_Syntax
+3030 Pattern_Syntax
+FD3E FD3F Pattern_Syntax
+FE45 FE46 Pattern_Syntax
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatWS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatWS.pl
new file mode 100644
index 00000000000..4157e6479c7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatWS.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Pattern_White_Space'
+#
+return <<'END';
+0009 000D Pattern_White_Space
+0020 Pattern_White_Space
+0085 Pattern_White_Space
+200E 200F Pattern_White_Space
+2028 2029 Pattern_White_Space
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternS.pl
new file mode 100644
index 00000000000..ef8441d6b6f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternS.pl
@@ -0,0 +1,40 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{PatternSyntax} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Pattern_Syntax'
+#
+return <<'END';
+0021 002F Pattern_Syntax
+003A 0040 Pattern_Syntax
+005B 005E Pattern_Syntax
+0060 Pattern_Syntax
+007B 007E Pattern_Syntax
+00A1 00A7 Pattern_Syntax
+00A9 Pattern_Syntax
+00AB 00AC Pattern_Syntax
+00AE Pattern_Syntax
+00B0 00B1 Pattern_Syntax
+00B6 Pattern_Syntax
+00BB Pattern_Syntax
+00BF Pattern_Syntax
+00D7 Pattern_Syntax
+00F7 Pattern_Syntax
+2010 2027 Pattern_Syntax
+2030 203E Pattern_Syntax
+2041 2053 Pattern_Syntax
+2055 205E Pattern_Syntax
+2190 245F Pattern_Syntax
+2500 2775 Pattern_Syntax
+2794 2BFF Pattern_Syntax
+2E00 2E7F Pattern_Syntax
+3001 3003 Pattern_Syntax
+3008 3020 Pattern_Syntax
+3030 Pattern_Syntax
+FD3E FD3F Pattern_Syntax
+FE45 FE46 Pattern_Syntax
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternW.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternW.pl
new file mode 100644
index 00000000000..9d63eca6541
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/PatternW.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{PatternWhiteSpace} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Pattern_White_Space'
+#
+return <<'END';
+0009 000D Pattern_White_Space
+0020 Pattern_White_Space
+0085 Pattern_White_Space
+200E 200F Pattern_White_Space
+2028 2029 Pattern_White_Space
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pc.pl
new file mode 100644
index 00000000000..2a2cbe552dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pc.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pc}
+# \p{Pc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pc'
+#
+return <<'END';
+005F
+203F 2040
+2054
+FE33 FE34
+FE4D FE4F
+FF3F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pd.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pd.pl
new file mode 100644
index 00000000000..5aa3eb3ee32
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pd.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pd}
+# \p{Pd} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pd'
+#
+return <<'END';
+002D
+058A
+1806
+2010 2015
+2E17
+301C
+3030
+30A0
+FE31 FE32
+FE58
+FE63
+FF0D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pe.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pe.pl
new file mode 100644
index 00000000000..c22445a2790
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pe.pl
@@ -0,0 +1,78 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pe}
+# \p{Pe} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pe'
+#
+return <<'END';
+0029
+005D
+007D
+0F3B
+0F3D
+169C
+2046
+207E
+208E
+232A
+23B5
+2769
+276B
+276D
+276F
+2771
+2773
+2775
+27C6
+27E7
+27E9
+27EB
+2984
+2986
+2988
+298A
+298C
+298E
+2990
+2992
+2994
+2996
+2998
+29D9
+29DB
+29FD
+3009
+300B
+300D
+300F
+3011
+3015
+3017
+3019
+301B
+301E 301F
+FD3F
+FE18
+FE36
+FE38
+FE3A
+FE3C
+FE3E
+FE40
+FE42
+FE44
+FE48
+FE5A
+FE5C
+FE5E
+FF09
+FF3D
+FF5D
+FF60
+FF63
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pf.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pf.pl
new file mode 100644
index 00000000000..256bef78d23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pf.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pf}
+# \p{Pf} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pf'
+#
+return <<'END';
+00BB
+2019
+201D
+203A
+2E03
+2E05
+2E0A
+2E0D
+2E1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pi.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pi.pl
new file mode 100644
index 00000000000..d1e23c27b3d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Pi.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Pi}
+# \p{Pi} (and fuzzy permutations)
+#
+# Meaning: General Category 'Pi'
+#
+return <<'END';
+00AB
+2018
+201B 201C
+201F
+2039
+2E02
+2E04
+2E09
+2E0C
+2E1C
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Po.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Po.pl
new file mode 100644
index 00000000000..55ca20ca1e7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Po.pl
@@ -0,0 +1,101 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Po}
+# \p{Po} (and fuzzy permutations)
+#
+# Meaning: General Category 'Po'
+#
+return <<'END';
+0021 0023
+0025 0027
+002A
+002C
+002E 002F
+003A 003B
+003F 0040
+005C
+00A1
+00B7
+00BF
+037E
+0387
+055A 055F
+0589
+05BE
+05C0
+05C3
+05C6
+05F3 05F4
+060C 060D
+061B
+061E 061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F85
+0FD0 0FD1
+104A 104F
+10FB
+1361 1368
+166D 166E
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 1805
+1807 180A
+1944 1945
+19DE 19DF
+1A1E 1A1F
+2016 2017
+2020 2027
+2030 2038
+203B 203E
+2041 2043
+2047 2051
+2053
+2055 205E
+23B6
+2CF9 2CFC
+2CFE 2CFF
+2E00 2E01
+2E06 2E08
+2E0B
+2E0E 2E16
+3001 3003
+303D
+30FB
+FE10 FE16
+FE19
+FE30
+FE45 FE46
+FE49 FE4C
+FE50 FE52
+FE54 FE57
+FE5F FE61
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF07
+FF0A
+FF0C
+FF0E FF0F
+FF1A FF1B
+FF1F FF20
+FF3C
+FF61
+FF64 FF65
+10100 10101
+1039F
+10A50 10A58
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Print.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Print.pl
new file mode 100644
index 00000000000..e2df8d7b884
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Print.pl
@@ -0,0 +1,435 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Print}
+#
+# Meaning: [[:Print:]]
+#
+return <<'END';
+0009 000D
+0020 007E
+0085
+00A0 0241
+0250 036F
+0374 0375
+037A
+037E
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+0589 058A
+0591 05B9
+05BB 05C7
+05D0 05EA
+05F0 05F4
+0600 0603
+060B 0615
+061B
+061E 061F
+0621 063A
+0640 065E
+0660 070D
+070F 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0970
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09FA
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0AF1
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BFA
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF4
+0E01 0E3A
+0E3F 0E5B
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00 0F47
+0F49 0F6A
+0F71 0F8B
+0F90 0F97
+0F99 0FBC
+0FBE 0FCC
+0FCF 0FD1
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1059
+10A0 10C5
+10D0 10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F 137C
+1380 1399
+13A0 13F4
+1401 1676
+1680 169C
+16A0 16F0
+1700 170C
+170E 1714
+1720 1736
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17DD
+17E0 17E9
+17F0 17F9
+1800 180E
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1940
+1944 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+19DE 1A1B
+1A1E 1A1F
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2000 2063
+206A 2071
+2074 208E
+2090 2094
+20A0 20B5
+20D0 20EB
+2100 214C
+2153 2183
+2190 23DB
+2400 2426
+2440 244A
+2460 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2794
+2798 27AF
+27B1 27BE
+27C0 27C6
+27D0 27EB
+27F0 2B13
+2C00 2C2E
+2C30 2C5E
+2C80 2CEA
+2CF9 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+2E00 2E17
+2E1C 2E1D
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3000 303F
+3041 3096
+3099 30FF
+3105 312C
+3131 318E
+3190 31B7
+31C0 31CF
+31F0 321E
+3220 3243
+3250 32FE
+3300 4DB5
+4DC0 9FBB
+A000 A48C
+A490 A4C6
+A700 A716
+A800 A82B
+AC00 D7A3
+E000 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3F
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFD
+FE00 FE19
+FE20 FE23
+FE30 FE52
+FE54 FE66
+FE68 FE6B
+FE70 FE74
+FE76 FEFC
+FEFF
+FF01 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE0 FFE6
+FFE8 FFEE
+FFF9 FFFD
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10100 10102
+10107 10133
+10137 1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+1039F 103C3
+103C8 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F 10A47
+10A50 10A58
+1D000 1D0F5
+1D100 1D126
+1D12A 1D1DD
+1D200 1D245
+1D300 1D356
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0001
+E0020 E007F
+E0100 E01EF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ps.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ps.pl
new file mode 100644
index 00000000000..f08bebe61ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ps.pl
@@ -0,0 +1,80 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ps}
+# \p{Ps} (and fuzzy permutations)
+#
+# Meaning: General Category 'Ps'
+#
+return <<'END';
+0028
+005B
+007B
+0F3A
+0F3C
+169B
+201A
+201E
+2045
+207D
+208D
+2329
+23B4
+2768
+276A
+276C
+276E
+2770
+2772
+2774
+27C5
+27E6
+27E8
+27EA
+2983
+2985
+2987
+2989
+298B
+298D
+298F
+2991
+2993
+2995
+2997
+29D8
+29DA
+29FC
+3008
+300A
+300C
+300E
+3010
+3014
+3016
+3018
+301A
+301D
+FD3E
+FE17
+FE35
+FE37
+FE39
+FE3B
+FE3D
+FE3F
+FE41
+FE43
+FE47
+FE59
+FE5B
+FE5D
+FF08
+FF3B
+FF5B
+FF5F
+FF62
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Punct.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Punct.pl
new file mode 100644
index 00000000000..d6cfefe06e2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Punct.pl
@@ -0,0 +1,108 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Punct}
+#
+# Meaning: [[:Punct:]]
+#
+return <<'END';
+0021 0023
+0025 002A
+002C 002F
+003A 003B
+003F 0040
+005B 005D
+005F
+007B
+007D
+00A1
+00AB
+00B7
+00BB
+00BF
+037E
+0387
+055A 055F
+0589 058A
+05BE
+05C0
+05C3
+05C6
+05F3 05F4
+060C 060D
+061B
+061E 061F
+066A 066D
+06D4
+0700 070D
+0964 0965
+0970
+0DF4
+0E4F
+0E5A 0E5B
+0F04 0F12
+0F3A 0F3D
+0F85
+0FD0 0FD1
+104A 104F
+10FB
+1361 1368
+166D 166E
+169B 169C
+16EB 16ED
+1735 1736
+17D4 17D6
+17D8 17DA
+1800 180A
+1944 1945
+19DE 19DF
+1A1E 1A1F
+2010 2027
+2030 2043
+2045 2051
+2053 205E
+207D 207E
+208D 208E
+2329 232A
+23B4 23B6
+2768 2775
+27C5 27C6
+27E6 27EB
+2983 2998
+29D8 29DB
+29FC 29FD
+2CF9 2CFC
+2CFE 2CFF
+2E00 2E17
+2E1C 2E1D
+3001 3003
+3008 3011
+3014 301F
+3030
+303D
+30A0
+30FB
+FD3E FD3F
+FE10 FE19
+FE30 FE52
+FE54 FE61
+FE63
+FE68
+FE6A FE6B
+FF01 FF03
+FF05 FF0A
+FF0C FF0F
+FF1A FF1B
+FF1F FF20
+FF3B FF3D
+FF3F
+FF5B
+FF5D
+FF5F FF65
+10100 10101
+1039F
+10A50 10A58
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/QMark.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/QMark.pl
new file mode 100644
index 00000000000..9778cd953bb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/QMark.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Quotation_Mark'
+#
+return <<'END';
+0022 Quotation_Mark
+0027 Quotation_Mark
+00AB Quotation_Mark
+00BB Quotation_Mark
+2018 201F Quotation_Mark
+2039 203A Quotation_Mark
+300C 300F Quotation_Mark
+301D 301F Quotation_Mark
+FE41 FE44 Quotation_Mark
+FF02 Quotation_Mark
+FF07 Quotation_Mark
+FF62 FF63 Quotation_Mark
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Qaai.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Qaai.pl
new file mode 100644
index 00000000000..afbf5fea80d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Qaai.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Inherited} (and fuzzy permutations)
+#
+# Meaning: Script 'Inherited'
+#
+return <<'END';
+0300 036F Inherited
+064B 0655 Inherited
+0670 Inherited
+1DC0 1DC3 Inherited
+200C 200D Inherited
+20D0 20EB Inherited
+302A 302F Inherited
+3099 309A Inherited
+FE00 FE0F Inherited
+FE20 FE23 Inherited
+1D167 1D169 Inherited
+1D17B 1D182 Inherited
+1D185 1D18B Inherited
+1D1AA 1D1AD Inherited
+E0100 E01EF Inherited
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Quotatio.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Quotatio.pl
new file mode 100644
index 00000000000..255d986ff3b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Quotatio.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{QuotationMark} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Quotation_Mark'
+#
+return <<'END';
+0022 Quotation_Mark
+0027 Quotation_Mark
+00AB Quotation_Mark
+00BB Quotation_Mark
+2018 201F Quotation_Mark
+2039 203A Quotation_Mark
+300C 300F Quotation_Mark
+301D 301F Quotation_Mark
+FE41 FE44 Quotation_Mark
+FF02 Quotation_Mark
+FF07 Quotation_Mark
+FF62 FF63 Quotation_Mark
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical.pl
new file mode 100644
index 00000000000..aeb66ed45b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Radical'
+#
+return <<'END';
+2E80 2E99 Radical
+2E9B 2EF3 Radical
+2F00 2FD5 Radical
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical2.pl
new file mode 100644
index 00000000000..1bd455af14a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Radical2.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Radical} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Radical'
+#
+return <<'END';
+2E80 2E99 Radical
+2E9B 2EF3 Radical
+2F00 2FD5 Radical
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Runr.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Runr.pl
new file mode 100644
index 00000000000..02f180a46aa
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Runr.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Runic} (and fuzzy permutations)
+#
+# Meaning: Script 'Runic'
+#
+return <<'END';
+16A0 16EA Runic
+16EE 16F0 Runic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/S.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/S.pl
new file mode 100644
index 00000000000..58f6e311eab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/S.pl
@@ -0,0 +1,175 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{S}
+# \p{S} (and fuzzy permutations)
+#
+# Meaning: Major Category 'S'
+#
+return <<'END';
+0024
+002B
+003C 003E
+005E
+0060
+007C
+007E
+00A2 00A9
+00AC
+00AE 00B1
+00B4
+00B6
+00B8
+00D7
+00F7
+02C2 02C5
+02D2 02DF
+02E5 02ED
+02EF 02FF
+0374 0375
+0384 0385
+03F6
+0482
+060B
+060E 060F
+06E9
+06FD 06FE
+09F2 09F3
+09FA
+0AF1
+0B70
+0BF3 0BFA
+0E3F
+0F01 0F03
+0F13 0F17
+0F1A 0F1F
+0F34
+0F36
+0F38
+0FBE 0FC5
+0FC7 0FCC
+0FCF
+1360
+1390 1399
+17DB
+1940
+19E0 19FF
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+2044
+2052
+207A 207C
+208A 208C
+20A0 20B5
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+212E
+2132
+213A 213B
+2140 2144
+214A 214C
+2190 2328
+232B 23B3
+23B7 23DB
+2400 2426
+2440 244A
+249C 24E9
+2500 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2767
+2794
+2798 27AF
+27B1 27BE
+27C0 27C4
+27D0 27E5
+27F0 2982
+2999 29D7
+29DC 29FB
+29FE 2B13
+2CE5 2CEA
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3004
+3012 3013
+3020
+3036 3037
+303E 303F
+309B 309C
+3190 3191
+3196 319F
+31C0 31CF
+3200 321E
+322A 3243
+3250
+3260 327F
+328A 32B0
+32C0 32FE
+3300 33FF
+4DC0 4DFF
+A490 A4C6
+A700 A716
+A828 A82B
+FB29
+FDFC FDFD
+FE62
+FE64 FE66
+FE69
+FF04
+FF0B
+FF1C FF1E
+FF3E
+FF40
+FF5C
+FF5E
+FFE0 FFE6
+FFE8 FFEE
+FFFC FFFD
+10102
+10137 1013F
+10179 10189
+103D0
+1D000 1D0F5
+1D100 1D126
+1D12A 1D164
+1D16A 1D16C
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D200 1D241
+1D245
+1D300 1D356
+1D6C1
+1D6DB
+1D6FB
+1D715
+1D735
+1D74F
+1D76F
+1D789
+1D7A9
+1D7C3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SD.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SD.pl
new file mode 100644
index 00000000000..f8d12d548ae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SD.pl
@@ -0,0 +1,38 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Soft_Dotted'
+#
+return <<'END';
+0069 006A Soft_Dotted
+012F Soft_Dotted
+0268 Soft_Dotted
+029D Soft_Dotted
+02B2 Soft_Dotted
+03F3 Soft_Dotted
+0456 Soft_Dotted
+0458 Soft_Dotted
+1D62 Soft_Dotted
+1D96 Soft_Dotted
+1DA4 Soft_Dotted
+1DA8 Soft_Dotted
+1E2D Soft_Dotted
+1ECB Soft_Dotted
+2071 Soft_Dotted
+2148 2149 Soft_Dotted
+1D422 1D423 Soft_Dotted
+1D456 1D457 Soft_Dotted
+1D48A 1D48B Soft_Dotted
+1D4BE 1D4BF Soft_Dotted
+1D4F2 1D4F3 Soft_Dotted
+1D526 1D527 Soft_Dotted
+1D55A 1D55B Soft_Dotted
+1D58E 1D58F Soft_Dotted
+1D5C2 1D5C3 Soft_Dotted
+1D5F6 1D5F7 Soft_Dotted
+1D62A 1D62B Soft_Dotted
+1D65E 1D65F Soft_Dotted
+1D692 1D693 Soft_Dotted
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/STerm.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/STerm.pl
new file mode 100644
index 00000000000..2e1ac3958dc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/STerm.pl
@@ -0,0 +1,35 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'STerm'
+#
+return <<'END';
+0021 STerm
+002E STerm
+003F STerm
+055C STerm
+055E STerm
+0589 STerm
+061F STerm
+06D4 STerm
+0700 0702 STerm
+0964 0965 STerm
+104A 104B STerm
+1362 STerm
+1367 1368 STerm
+166E STerm
+1803 STerm
+1809 STerm
+1944 1945 STerm
+203C 203D STerm
+2047 2049 STerm
+3002 STerm
+FE52 STerm
+FE56 FE57 STerm
+FF01 STerm
+FF0E STerm
+FF1F STerm
+FF61 STerm
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sc.pl
new file mode 100644
index 00000000000..c85cf4175b3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sc.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sc}
+# \p{Sc} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sc'
+#
+return <<'END';
+0024
+00A2 00A5
+060B
+09F2 09F3
+0AF1
+0BF9
+0E3F
+17DB
+20A0 20B5
+FDFC
+FE69
+FF04
+FFE0 FFE1
+FFE5 FFE6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Shaw.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Shaw.pl
new file mode 100644
index 00000000000..385dd06f31d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Shaw.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Shavian} (and fuzzy permutations)
+#
+# Meaning: Script 'Shavian'
+#
+return <<'END';
+10450 1047F Shavian
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sinh.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sinh.pl
new file mode 100644
index 00000000000..154fcd4fddb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sinh.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sinhala} (and fuzzy permutations)
+#
+# Meaning: Script 'Sinhala'
+#
+return <<'END';
+0D82 0D83 Sinhala
+0D85 0D96 Sinhala
+0D9A 0DB1 Sinhala
+0DB3 0DBB Sinhala
+0DBD Sinhala
+0DC0 0DC6 Sinhala
+0DCA Sinhala
+0DCF 0DD4 Sinhala
+0DD6 Sinhala
+0DD8 0DDF Sinhala
+0DF2 0DF4 Sinhala
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sk.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sk.pl
new file mode 100644
index 00000000000..7e202b38f32
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sk.pl
@@ -0,0 +1,36 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sk}
+# \p{Sk} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sk'
+#
+return <<'END';
+005E
+0060
+00A8
+00AF
+00B4
+00B8
+02C2 02C5
+02D2 02DF
+02E5 02ED
+02EF 02FF
+0374 0375
+0384 0385
+1FBD
+1FBF 1FC1
+1FCD 1FCF
+1FDD 1FDF
+1FED 1FEF
+1FFD 1FFE
+309B 309C
+A700 A716
+FF3E
+FF40
+FFE3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sm.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sm.pl
new file mode 100644
index 00000000000..e5b5e4d0320
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sm.pl
@@ -0,0 +1,72 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sm}
+# \p{Sm} (and fuzzy permutations)
+#
+# Meaning: General Category 'Sm'
+#
+return <<'END';
+002B
+003C 003E
+007C
+007E
+00AC
+00B1
+00D7
+00F7
+03F6
+2044
+2052
+207A 207C
+208A 208C
+2140 2144
+214B
+2190 2194
+219A 219B
+21A0
+21A3
+21A6
+21AE
+21CE 21CF
+21D2
+21D4
+21F4 22FF
+2308 230B
+2320 2321
+237C
+239B 23B3
+25B7
+25C1
+25F8 25FF
+266F
+27C0 27C4
+27D0 27E5
+27F0 27FF
+2900 2982
+2999 29D7
+29DC 29FB
+29FE 2AFF
+FB29
+FE62
+FE64 FE66
+FF0B
+FF1C FF1E
+FF5C
+FF5E
+FFE2
+FFE9 FFEC
+1D6C1
+1D6DB
+1D6FB
+1D715
+1D735
+1D74F
+1D76F
+1D789
+1D7A9
+1D7C3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/So.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/So.pl
new file mode 100644
index 00000000000..d50e3f63bf4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/So.pl
@@ -0,0 +1,133 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{So}
+# \p{So} (and fuzzy permutations)
+#
+# Meaning: General Category 'So'
+#
+return <<'END';
+00A6 00A7
+00A9
+00AE
+00B0
+00B6
+0482
+060E 060F
+06E9
+06FD 06FE
+09FA
+0B70
+0BF3 0BF8
+0BFA
+0F01 0F03
+0F13 0F17
+0F1A 0F1F
+0F34
+0F36
+0F38
+0FBE 0FC5
+0FC7 0FCC
+0FCF
+1360
+1390 1399
+1940
+19E0 19FF
+2100 2101
+2103 2106
+2108 2109
+2114
+2116 2118
+211E 2123
+2125
+2127
+2129
+212E
+2132
+213A 213B
+214A
+214C
+2195 2199
+219C 219F
+21A1 21A2
+21A4 21A5
+21A7 21AD
+21AF 21CD
+21D0 21D1
+21D3
+21D5 21F3
+2300 2307
+230C 231F
+2322 2328
+232B 237B
+237D 239A
+23B7 23DB
+2400 2426
+2440 244A
+249C 24E9
+2500 25B6
+25B8 25C0
+25C2 25F7
+2600 266E
+2670 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275E
+2761 2767
+2794
+2798 27AF
+27B1 27BE
+2800 28FF
+2B00 2B13
+2CE5 2CEA
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3004
+3012 3013
+3020
+3036 3037
+303E 303F
+3190 3191
+3196 319F
+31C0 31CF
+3200 321E
+322A 3243
+3250
+3260 327F
+328A 32B0
+32C0 32FE
+3300 33FF
+4DC0 4DFF
+A490 A4C6
+A828 A82B
+FDFD
+FFE4
+FFE8
+FFED FFEE
+FFFC FFFD
+10102
+10137 1013F
+10179 10189
+103D0
+1D000 1D0F5
+1D100 1D126
+1D12A 1D164
+1D16A 1D16C
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D200 1D241
+1D245
+1D300 1D356
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SoftDott.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SoftDott.pl
new file mode 100644
index 00000000000..0542df885ef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SoftDott.pl
@@ -0,0 +1,41 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{SoftDotted} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Soft_Dotted'
+#
+return <<'END';
+0069 006A Soft_Dotted
+012F Soft_Dotted
+0268 Soft_Dotted
+029D Soft_Dotted
+02B2 Soft_Dotted
+03F3 Soft_Dotted
+0456 Soft_Dotted
+0458 Soft_Dotted
+1D62 Soft_Dotted
+1D96 Soft_Dotted
+1DA4 Soft_Dotted
+1DA8 Soft_Dotted
+1E2D Soft_Dotted
+1ECB Soft_Dotted
+2071 Soft_Dotted
+2148 2149 Soft_Dotted
+1D422 1D423 Soft_Dotted
+1D456 1D457 Soft_Dotted
+1D48A 1D48B Soft_Dotted
+1D4BE 1D4BF Soft_Dotted
+1D4F2 1D4F3 Soft_Dotted
+1D526 1D527 Soft_Dotted
+1D55A 1D55B Soft_Dotted
+1D58E 1D58F Soft_Dotted
+1D5C2 1D5C3 Soft_Dotted
+1D5F6 1D5F7 Soft_Dotted
+1D62A 1D62B Soft_Dotted
+1D65E 1D65F Soft_Dotted
+1D692 1D693 Soft_Dotted
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Space.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Space.pl
new file mode 100644
index 00000000000..44b8a618ad8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Space.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Space}
+#
+# Meaning: [[:Space:]]
+#
+return <<'END';
+0009 000D
+0020
+0085
+00A0
+1680
+180E
+2000 200A
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SpacePer.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SpacePer.pl
new file mode 100644
index 00000000000..97281a6f1a6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SpacePer.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{SpacePerl}
+#
+# Meaning: \s
+#
+return <<'END';
+0009 000A
+000C 000D
+0020
+0085
+00A0
+1680
+180E
+2000 200A
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sterm2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sterm2.pl
new file mode 100644
index 00000000000..c76da9a15b8
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Sterm2.pl
@@ -0,0 +1,38 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Sterm} (and fuzzy permutations)
+#
+# Meaning: Extended property 'STerm'
+#
+return <<'END';
+0021 STerm
+002E STerm
+003F STerm
+055C STerm
+055E STerm
+0589 STerm
+061F STerm
+06D4 STerm
+0700 0702 STerm
+0964 0965 STerm
+104A 104B STerm
+1362 STerm
+1367 1368 STerm
+166E STerm
+1803 STerm
+1809 STerm
+1944 1945 STerm
+203C 203D STerm
+2047 2049 STerm
+3002 STerm
+FE52 STerm
+FE56 FE57 STerm
+FF01 STerm
+FF0E STerm
+FF1F STerm
+FF61 STerm
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SylotiNa.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SylotiNa.pl
new file mode 100644
index 00000000000..d95b569f671
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/SylotiNa.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{SylotiNagri} (and fuzzy permutations)
+#
+# Meaning: Script 'Syloti_Nagri'
+#
+return <<'END';
+A800 A82B Syloti_Nagri
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Syrc.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Syrc.pl
new file mode 100644
index 00000000000..8c7aa69187a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Syrc.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Syriac} (and fuzzy permutations)
+#
+# Meaning: Script 'Syriac'
+#
+return <<'END';
+0700 070D Syriac
+070F 074A Syriac
+074D 074F Syriac
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tagb.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tagb.pl
new file mode 100644
index 00000000000..5ea4e4a29d9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tagb.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tagbanwa} (and fuzzy permutations)
+#
+# Meaning: Script 'Tagbanwa'
+#
+return <<'END';
+1760 176C Tagbanwa
+176E 1770 Tagbanwa
+1772 1773 Tagbanwa
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/TaiLe.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/TaiLe.pl
new file mode 100644
index 00000000000..92d901046dd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/TaiLe.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{TaiLe} (and fuzzy permutations)
+#
+# Meaning: Script 'Tai_Le'
+#
+return <<'END';
+1950 196D Tai_Le
+1970 1974 Tai_Le
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Taml.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Taml.pl
new file mode 100644
index 00000000000..6c4c5fff8d7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Taml.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tamil} (and fuzzy permutations)
+#
+# Meaning: Script 'Tamil'
+#
+return <<'END';
+0B82 0B83 Tamil
+0B85 0B8A Tamil
+0B8E 0B90 Tamil
+0B92 0B95 Tamil
+0B99 0B9A Tamil
+0B9C Tamil
+0B9E 0B9F Tamil
+0BA3 0BA4 Tamil
+0BA8 0BAA Tamil
+0BAE 0BB9 Tamil
+0BBE 0BC2 Tamil
+0BC6 0BC8 Tamil
+0BCA 0BCD Tamil
+0BD7 Tamil
+0BE6 0BFA Tamil
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Telu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Telu.pl
new file mode 100644
index 00000000000..74de197eeb9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Telu.pl
@@ -0,0 +1,24 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Telugu} (and fuzzy permutations)
+#
+# Meaning: Script 'Telugu'
+#
+return <<'END';
+0C01 0C03 Telugu
+0C05 0C0C Telugu
+0C0E 0C10 Telugu
+0C12 0C28 Telugu
+0C2A 0C33 Telugu
+0C35 0C39 Telugu
+0C3E 0C44 Telugu
+0C46 0C48 Telugu
+0C4A 0C4D Telugu
+0C55 0C56 Telugu
+0C60 0C61 Telugu
+0C66 0C6F Telugu
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Term.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Term.pl
new file mode 100644
index 00000000000..124872bd54c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Term.pl
@@ -0,0 +1,49 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Terminal_Punctuation'
+#
+return <<'END';
+0021 Terminal_Punctuation
+002C Terminal_Punctuation
+002E Terminal_Punctuation
+003A 003B Terminal_Punctuation
+003F Terminal_Punctuation
+037E Terminal_Punctuation
+0387 Terminal_Punctuation
+0589 Terminal_Punctuation
+05C3 Terminal_Punctuation
+060C Terminal_Punctuation
+061B Terminal_Punctuation
+061F Terminal_Punctuation
+06D4 Terminal_Punctuation
+0700 070A Terminal_Punctuation
+070C Terminal_Punctuation
+0964 0965 Terminal_Punctuation
+0E5A 0E5B Terminal_Punctuation
+0F08 Terminal_Punctuation
+0F0D 0F12 Terminal_Punctuation
+104A 104B Terminal_Punctuation
+1361 1368 Terminal_Punctuation
+166D 166E Terminal_Punctuation
+16EB 16ED Terminal_Punctuation
+17D4 17D6 Terminal_Punctuation
+17DA Terminal_Punctuation
+1802 1805 Terminal_Punctuation
+1808 1809 Terminal_Punctuation
+1944 1945 Terminal_Punctuation
+203C 203D Terminal_Punctuation
+2047 2049 Terminal_Punctuation
+3001 3002 Terminal_Punctuation
+FE50 FE52 Terminal_Punctuation
+FE54 FE57 Terminal_Punctuation
+FF01 Terminal_Punctuation
+FF0C Terminal_Punctuation
+FF0E Terminal_Punctuation
+FF1A FF1B Terminal_Punctuation
+FF1F Terminal_Punctuation
+FF61 Terminal_Punctuation
+FF64 Terminal_Punctuation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Terminal.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Terminal.pl
new file mode 100644
index 00000000000..da5860f1fe3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Terminal.pl
@@ -0,0 +1,52 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{TerminalPunctuation} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Terminal_Punctuation'
+#
+return <<'END';
+0021 Terminal_Punctuation
+002C Terminal_Punctuation
+002E Terminal_Punctuation
+003A 003B Terminal_Punctuation
+003F Terminal_Punctuation
+037E Terminal_Punctuation
+0387 Terminal_Punctuation
+0589 Terminal_Punctuation
+05C3 Terminal_Punctuation
+060C Terminal_Punctuation
+061B Terminal_Punctuation
+061F Terminal_Punctuation
+06D4 Terminal_Punctuation
+0700 070A Terminal_Punctuation
+070C Terminal_Punctuation
+0964 0965 Terminal_Punctuation
+0E5A 0E5B Terminal_Punctuation
+0F08 Terminal_Punctuation
+0F0D 0F12 Terminal_Punctuation
+104A 104B Terminal_Punctuation
+1361 1368 Terminal_Punctuation
+166D 166E Terminal_Punctuation
+16EB 16ED Terminal_Punctuation
+17D4 17D6 Terminal_Punctuation
+17DA Terminal_Punctuation
+1802 1805 Terminal_Punctuation
+1808 1809 Terminal_Punctuation
+1944 1945 Terminal_Punctuation
+203C 203D Terminal_Punctuation
+2047 2049 Terminal_Punctuation
+3001 3002 Terminal_Punctuation
+FE50 FE52 Terminal_Punctuation
+FE54 FE57 Terminal_Punctuation
+FF01 Terminal_Punctuation
+FF0C Terminal_Punctuation
+FF0E Terminal_Punctuation
+FF1A FF1B Terminal_Punctuation
+FF1F Terminal_Punctuation
+FF61 Terminal_Punctuation
+FF64 Terminal_Punctuation
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tfng.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tfng.pl
new file mode 100644
index 00000000000..4ee12034069
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tfng.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tifinagh} (and fuzzy permutations)
+#
+# Meaning: Script 'Tifinagh'
+#
+return <<'END';
+2D30 2D65 Tifinagh
+2D6F Tifinagh
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tglg.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tglg.pl
new file mode 100644
index 00000000000..f9d24576279
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tglg.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tagalog} (and fuzzy permutations)
+#
+# Meaning: Script 'Tagalog'
+#
+return <<'END';
+1700 170C Tagalog
+170E 1714 Tagalog
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thaa.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thaa.pl
new file mode 100644
index 00000000000..7ab38dc4eab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thaa.pl
@@ -0,0 +1,13 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Thaana} (and fuzzy permutations)
+#
+# Meaning: Script 'Thaana'
+#
+return <<'END';
+0780 07B1 Thaana
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thai.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thai.pl
new file mode 100644
index 00000000000..03467d4b8ec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Thai.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Thai} (and fuzzy permutations)
+#
+# Meaning: Script 'Thai'
+#
+return <<'END';
+0E01 0E3A Thai
+0E40 0E5B Thai
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tibt.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tibt.pl
new file mode 100644
index 00000000000..aa6be295479
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Tibt.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Tibetan} (and fuzzy permutations)
+#
+# Meaning: Script 'Tibetan'
+#
+return <<'END';
+0F00 0F47 Tibetan
+0F49 0F6A Tibetan
+0F71 0F8B Tibetan
+0F90 0F97 Tibetan
+0F99 0FBC Tibetan
+0FBE 0FCC Tibetan
+0FCF 0FD1 Tibetan
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Title.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Title.pl
new file mode 100644
index 00000000000..158a6cd6eb5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Title.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Title}
+#
+# Meaning: [[:Title:]]
+#
+return <<'END';
+01C5
+01C8
+01CB
+01F2
+1F88 1F8F
+1F98 1F9F
+1FA8 1FAF
+1FBC
+1FCC
+1FFC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UIdeo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UIdeo.pl
new file mode 100644
index 00000000000..e0629a335d0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UIdeo.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Unified_Ideograph'
+#
+return <<'END';
+3400 4DB5 Unified_Ideograph
+4E00 9FBB Unified_Ideograph
+FA0E FA0F Unified_Ideograph
+FA11 Unified_Ideograph
+FA13 FA14 Unified_Ideograph
+FA1F Unified_Ideograph
+FA21 Unified_Ideograph
+FA23 FA24 Unified_Ideograph
+FA27 FA29 Unified_Ideograph
+20000 2A6D6 Unified_Ideograph
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ugar.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ugar.pl
new file mode 100644
index 00000000000..e79e6c67738
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Ugar.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Ugaritic} (and fuzzy permutations)
+#
+# Meaning: Script 'Ugaritic'
+#
+return <<'END';
+10380 1039D Ugaritic
+1039F Ugaritic
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UnifiedI.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UnifiedI.pl
new file mode 100644
index 00000000000..440dc126aae
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/UnifiedI.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{UnifiedIdeograph} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Unified_Ideograph'
+#
+return <<'END';
+3400 4DB5 Unified_Ideograph
+4E00 9FBB Unified_Ideograph
+FA0E FA0F Unified_Ideograph
+FA11 Unified_Ideograph
+FA13 FA14 Unified_Ideograph
+FA1F Unified_Ideograph
+FA21 Unified_Ideograph
+FA23 FA24 Unified_Ideograph
+FA27 FA29 Unified_Ideograph
+20000 2A6D6 Unified_Ideograph
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Upper.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Upper.pl
new file mode 100644
index 00000000000..214ab48efef
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Upper.pl
@@ -0,0 +1,488 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Upper}
+#
+# Meaning: [[:Upper:]]
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+023A 023B
+023D 023E
+0241
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+03F7
+03F9 03FA
+03FD 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F6
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+2C00 2C2E
+2C80
+2C82
+2C84
+2C86
+2C88
+2C8A
+2C8C
+2C8E
+2C90
+2C92
+2C94
+2C96
+2C98
+2C9A
+2C9C
+2C9E
+2CA0
+2CA2
+2CA4
+2CA6
+2CA8
+2CAA
+2CAC
+2CAE
+2CB0
+2CB2
+2CB4
+2CB6
+2CB8
+2CBA
+2CBC
+2CBE
+2CC0
+2CC2
+2CC4
+2CC6
+2CC8
+2CCA
+2CCC
+2CCE
+2CD0
+2CD2
+2CD4
+2CD6
+2CD8
+2CDA
+2CDC
+2CDE
+2CE0
+2CE2
+FF21 FF3A
+10400 10427
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Uppercas.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Uppercas.pl
new file mode 100644
index 00000000000..4778dc3ab52
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Uppercas.pl
@@ -0,0 +1,490 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Uppercase} (and fuzzy permutations)
+#
+# Meaning: [\p{Lu}\p{Other_Uppercase}]
+#
+return <<'END';
+0041 005A
+00C0 00D6
+00D8 00DE
+0100
+0102
+0104
+0106
+0108
+010A
+010C
+010E
+0110
+0112
+0114
+0116
+0118
+011A
+011C
+011E
+0120
+0122
+0124
+0126
+0128
+012A
+012C
+012E
+0130
+0132
+0134
+0136
+0139
+013B
+013D
+013F
+0141
+0143
+0145
+0147
+014A
+014C
+014E
+0150
+0152
+0154
+0156
+0158
+015A
+015C
+015E
+0160
+0162
+0164
+0166
+0168
+016A
+016C
+016E
+0170
+0172
+0174
+0176
+0178 0179
+017B
+017D
+0181 0182
+0184
+0186 0187
+0189 018B
+018E 0191
+0193 0194
+0196 0198
+019C 019D
+019F 01A0
+01A2
+01A4
+01A6 01A7
+01A9
+01AC
+01AE 01AF
+01B1 01B3
+01B5
+01B7 01B8
+01BC
+01C4
+01C7
+01CA
+01CD
+01CF
+01D1
+01D3
+01D5
+01D7
+01D9
+01DB
+01DE
+01E0
+01E2
+01E4
+01E6
+01E8
+01EA
+01EC
+01EE
+01F1
+01F4
+01F6 01F8
+01FA
+01FC
+01FE
+0200
+0202
+0204
+0206
+0208
+020A
+020C
+020E
+0210
+0212
+0214
+0216
+0218
+021A
+021C
+021E
+0220
+0222
+0224
+0226
+0228
+022A
+022C
+022E
+0230
+0232
+023A 023B
+023D 023E
+0241
+0386
+0388 038A
+038C
+038E 038F
+0391 03A1
+03A3 03AB
+03D2 03D4
+03D8
+03DA
+03DC
+03DE
+03E0
+03E2
+03E4
+03E6
+03E8
+03EA
+03EC
+03EE
+03F4
+03F7
+03F9 03FA
+03FD 042F
+0460
+0462
+0464
+0466
+0468
+046A
+046C
+046E
+0470
+0472
+0474
+0476
+0478
+047A
+047C
+047E
+0480
+048A
+048C
+048E
+0490
+0492
+0494
+0496
+0498
+049A
+049C
+049E
+04A0
+04A2
+04A4
+04A6
+04A8
+04AA
+04AC
+04AE
+04B0
+04B2
+04B4
+04B6
+04B8
+04BA
+04BC
+04BE
+04C0 04C1
+04C3
+04C5
+04C7
+04C9
+04CB
+04CD
+04D0
+04D2
+04D4
+04D6
+04D8
+04DA
+04DC
+04DE
+04E0
+04E2
+04E4
+04E6
+04E8
+04EA
+04EC
+04EE
+04F0
+04F2
+04F4
+04F6
+04F8
+0500
+0502
+0504
+0506
+0508
+050A
+050C
+050E
+0531 0556
+10A0 10C5
+1E00
+1E02
+1E04
+1E06
+1E08
+1E0A
+1E0C
+1E0E
+1E10
+1E12
+1E14
+1E16
+1E18
+1E1A
+1E1C
+1E1E
+1E20
+1E22
+1E24
+1E26
+1E28
+1E2A
+1E2C
+1E2E
+1E30
+1E32
+1E34
+1E36
+1E38
+1E3A
+1E3C
+1E3E
+1E40
+1E42
+1E44
+1E46
+1E48
+1E4A
+1E4C
+1E4E
+1E50
+1E52
+1E54
+1E56
+1E58
+1E5A
+1E5C
+1E5E
+1E60
+1E62
+1E64
+1E66
+1E68
+1E6A
+1E6C
+1E6E
+1E70
+1E72
+1E74
+1E76
+1E78
+1E7A
+1E7C
+1E7E
+1E80
+1E82
+1E84
+1E86
+1E88
+1E8A
+1E8C
+1E8E
+1E90
+1E92
+1E94
+1EA0
+1EA2
+1EA4
+1EA6
+1EA8
+1EAA
+1EAC
+1EAE
+1EB0
+1EB2
+1EB4
+1EB6
+1EB8
+1EBA
+1EBC
+1EBE
+1EC0
+1EC2
+1EC4
+1EC6
+1EC8
+1ECA
+1ECC
+1ECE
+1ED0
+1ED2
+1ED4
+1ED6
+1ED8
+1EDA
+1EDC
+1EDE
+1EE0
+1EE2
+1EE4
+1EE6
+1EE8
+1EEA
+1EEC
+1EEE
+1EF0
+1EF2
+1EF4
+1EF6
+1EF8
+1F08 1F0F
+1F18 1F1D
+1F28 1F2F
+1F38 1F3F
+1F48 1F4D
+1F59
+1F5B
+1F5D
+1F5F
+1F68 1F6F
+1FB8 1FBB
+1FC8 1FCB
+1FD8 1FDB
+1FE8 1FEC
+1FF8 1FFB
+2102
+2107
+210B 210D
+2110 2112
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+2130 2131
+2133
+213E 213F
+2145
+2160 216F
+24B6 24CF
+2C00 2C2E
+2C80
+2C82
+2C84
+2C86
+2C88
+2C8A
+2C8C
+2C8E
+2C90
+2C92
+2C94
+2C96
+2C98
+2C9A
+2C9C
+2C9E
+2CA0
+2CA2
+2CA4
+2CA6
+2CA8
+2CAA
+2CAC
+2CAE
+2CB0
+2CB2
+2CB4
+2CB6
+2CB8
+2CBA
+2CBC
+2CBE
+2CC0
+2CC2
+2CC4
+2CC6
+2CC8
+2CCA
+2CCC
+2CCE
+2CD0
+2CD2
+2CD4
+2CD6
+2CD8
+2CDA
+2CDC
+2CDE
+2CE0
+2CE2
+FF21 FF3A
+10400 10427
+1D400 1D419
+1D434 1D44D
+1D468 1D481
+1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B5
+1D4D0 1D4E9
+1D504 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D538 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D56C 1D585
+1D5A0 1D5B9
+1D5D4 1D5ED
+1D608 1D621
+1D63C 1D655
+1D670 1D689
+1D6A8 1D6C0
+1D6E2 1D6FA
+1D71C 1D734
+1D756 1D76E
+1D790 1D7A8
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/VS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/VS.pl
new file mode 100644
index 00000000000..ca505d75531
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/VS.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'Variation_Selector'
+#
+return <<'END';
+180B 180D Variation_Selector
+FE00 FE0F Variation_Selector
+E0100 E01EF Variation_Selector
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Variatio.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Variatio.pl
new file mode 100644
index 00000000000..74173e857ce
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Variatio.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{VariationSelector} (and fuzzy permutations)
+#
+# Meaning: Extended property 'Variation_Selector'
+#
+return <<'END';
+180B 180D Variation_Selector
+FE00 FE0F Variation_Selector
+E0100 E01EF Variation_Selector
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WSpace.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WSpace.pl
new file mode 100644
index 00000000000..0078091db50
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WSpace.pl
@@ -0,0 +1,20 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Binary property 'White_Space'
+#
+return <<'END';
+0009 000D White_Space
+0020 White_Space
+0085 White_Space
+00A0 White_Space
+1680 White_Space
+180E White_Space
+2000 200A White_Space
+2028 2029 White_Space
+202F White_Space
+205F White_Space
+3000 White_Space
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WhiteSpa.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WhiteSpa.pl
new file mode 100644
index 00000000000..0284bc05318
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/WhiteSpa.pl
@@ -0,0 +1,23 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{WhiteSpace} (and fuzzy permutations)
+#
+# Meaning: Extended property 'White_Space'
+#
+return <<'END';
+0009 000D White_Space
+0020 White_Space
+0085 White_Space
+00A0 White_Space
+1680 White_Space
+180E White_Space
+2000 200A White_Space
+2028 2029 White_Space
+202F White_Space
+205F White_Space
+3000 White_Space
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Word.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Word.pl
new file mode 100644
index 00000000000..fcae9e4d565
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Word.pl
@@ -0,0 +1,476 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Word}
+#
+# Meaning: [[:Word:]]
+#
+return <<'END';
+0030 0039
+0041 005A
+005F
+0061 007A
+00AA
+00B2 00B3
+00B5
+00B9 00BA
+00BC 00BE
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C1
+02C6 02D1
+02E0 02E4
+02EE
+0300 036F
+037A
+0386
+0388 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 03F5
+03F7 0481
+0483 0486
+0488 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559
+0561 0587
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+05D0 05EA
+05F0 05F2
+0610 0615
+0621 063A
+0640 065E
+0660 0669
+066E 06D3
+06D5 06DC
+06DE 06E8
+06EA 06FC
+06FF
+0710 074A
+074D 076D
+0780 07B1
+0901 0939
+093C 094D
+0950 0954
+0958 0963
+0966 096F
+097D
+0981 0983
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BC 09C4
+09C7 09C8
+09CB 09CE
+09D7
+09DC 09DD
+09DF 09E3
+09E6 09F1
+09F4 09F9
+0A01 0A03
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A59 0A5C
+0A5E
+0A66 0A74
+0A81 0A83
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABC 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AD0
+0AE0 0AE3
+0AE6 0AEF
+0B01 0B03
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3C 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B5C 0B5D
+0B5F 0B61
+0B66 0B6F
+0B71
+0B82 0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0BE6 0BF2
+0C01 0C03
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C60 0C61
+0C66 0C6F
+0C82 0C83
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBC 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0CDE
+0CE0 0CE1
+0CE6 0CEF
+0D02 0D03
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D60 0D61
+0D66 0D6F
+0D82 0D83
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E01 0E3A
+0E40 0E4E
+0E50 0E59
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB9
+0EBB 0EBD
+0EC0 0EC4
+0EC6
+0EC8 0ECD
+0ED0 0ED9
+0EDC 0EDD
+0F00
+0F18 0F19
+0F20 0F33
+0F35
+0F37
+0F39
+0F3E 0F47
+0F49 0F6A
+0F71 0F84
+0F86 0F8B
+0F90 0F97
+0F99 0FBC
+0FC6
+1000 1021
+1023 1027
+1029 102A
+102C 1032
+1036 1039
+1040 1049
+1050 1059
+10A0 10C5
+10D0 10FA
+10FC
+1100 1159
+115F 11A2
+11A8 11F9
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+135F
+1369 137C
+1380 138F
+13A0 13F4
+1401 166C
+166F 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1714
+1720 1734
+1740 1753
+1760 176C
+176E 1770
+1772 1773
+1780 17B3
+17B6 17D3
+17D7
+17DC 17DD
+17E0 17E9
+17F0 17F9
+180B 180D
+1810 1819
+1820 1877
+1880 18A9
+1900 191C
+1920 192B
+1930 193B
+1946 196D
+1970 1974
+1980 19A9
+19B0 19C9
+19D0 19D9
+1A00 1A1B
+1D00 1DC3
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FBC
+1FBE
+1FC2 1FC4
+1FC6 1FCC
+1FD0 1FD3
+1FD6 1FDB
+1FE0 1FEC
+1FF2 1FF4
+1FF6 1FFC
+203F 2040
+2054
+2070 2071
+2074 2079
+207F 2089
+2090 2094
+20D0 20EB
+2102
+2107
+210A 2113
+2115
+2119 211D
+2124
+2126
+2128
+212A 212D
+212F 2131
+2133 2139
+213C 213F
+2145 2149
+2153 2183
+2460 249B
+24EA 24FF
+2776 2793
+2C00 2C2E
+2C30 2C5E
+2C80 2CE4
+2CFD
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+3005 3007
+3021 302F
+3031 3035
+3038 303C
+3041 3096
+3099 309A
+309D 309F
+30A1 30FA
+30FC 30FF
+3105 312C
+3131 318E
+3192 3195
+31A0 31B7
+31F0 31FF
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+3400 4DB5
+4E00 9FBB
+A000 A48C
+A800 A827
+AC00 D7A3
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FB00 FB06
+FB13 FB17
+FB1D FB28
+FB2A FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FE00 FE0F
+FE20 FE23
+FE33 FE34
+FE4D FE4F
+FE70 FE74
+FE76 FEFC
+FF10 FF19
+FF21 FF3A
+FF3F
+FF41 FF5A
+FF66 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10107 10133
+10140 10178
+1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+103A0 103C3
+103C8 103CF
+103D1 103D5
+10400 1049D
+104A0 104A9
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00 10A03
+10A05 10A06
+10A0C 10A13
+10A15 10A17
+10A19 10A33
+10A38 10A3A
+10A3F 10A47
+1D165 1D169
+1D16D 1D172
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D6C0
+1D6C2 1D6DA
+1D6DC 1D6FA
+1D6FC 1D714
+1D716 1D734
+1D736 1D74E
+1D750 1D76E
+1D770 1D788
+1D78A 1D7A8
+1D7AA 1D7C2
+1D7C4 1D7C9
+1D7CE 1D7FF
+20000 2A6D6
+2F800 2FA1D
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/XDigit.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/XDigit.pl
new file mode 100644
index 00000000000..62350a4646f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/XDigit.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{XDigit}
+#
+# Meaning: [[:XDigit:]]
+#
+return <<'END';
+0030 0039
+0041 0046
+0061 0066
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Yiii.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Yiii.pl
new file mode 100644
index 00000000000..628bd87ba41
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Yiii.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Yi} (and fuzzy permutations)
+#
+# Meaning: Script 'Yi'
+#
+return <<'END';
+A000 A48C Yi
+A490 A4C6 Yi
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Z.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Z.pl
new file mode 100644
index 00000000000..361c4a92e23
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Z.pl
@@ -0,0 +1,22 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Z}
+# \p{Z} (and fuzzy permutations)
+#
+# Meaning: Major Category 'Z'
+#
+return <<'END';
+0020
+00A0
+1680
+180E
+2000 200A
+2028 2029
+202F
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zl.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zl.pl
new file mode 100644
index 00000000000..ed1819bd008
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zl.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zl}
+# \p{Zl} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zl'
+#
+return <<'END';
+2028
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zp.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zp.pl
new file mode 100644
index 00000000000..bd18ea4696f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zp.pl
@@ -0,0 +1,14 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zp}
+# \p{Zp} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zp'
+#
+return <<'END';
+2029
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zs.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zs.pl
new file mode 100644
index 00000000000..32c9497794c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zs.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Zs}
+# \p{Zs} (and fuzzy permutations)
+#
+# Meaning: General Category 'Zs'
+#
+return <<'END';
+0020
+00A0
+1680
+180E
+2000 200A
+202F
+205F
+3000
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zyyy.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zyyy.pl
new file mode 100644
index 00000000000..a6eaa6a6887
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/Zyyy.pl
@@ -0,0 +1,138 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{Common} (and fuzzy permutations)
+#
+# Meaning: Script 'Common'
+#
+return <<'END';
+0000 0040 Common
+005B 0060 Common
+007B 00A9 Common
+00AB 00B9 Common
+00BB 00BF Common
+00D7 Common
+00F7 Common
+02B9 02DF Common
+02E5 02FF Common
+037E Common
+0387 Common
+0589 Common
+0600 0603 Common
+060C Common
+061B Common
+061F Common
+0640 Common
+0660 0669 Common
+06DD Common
+0964 0965 Common
+0970 Common
+0E3F Common
+10FB Common
+16EB 16ED Common
+1735 1736 Common
+2000 200B Common
+200E 2063 Common
+206A 2070 Common
+2074 207E Common
+2080 208E Common
+20A0 20B5 Common
+2100 2125 Common
+2127 2129 Common
+212C 214C Common
+2153 2183 Common
+2190 23DB Common
+2400 2426 Common
+2440 244A Common
+2460 269C Common
+26A0 26B1 Common
+2701 2704 Common
+2706 2709 Common
+270C 2727 Common
+2729 274B Common
+274D Common
+274F 2752 Common
+2756 Common
+2758 275E Common
+2761 2794 Common
+2798 27AF Common
+27B1 27BE Common
+27C0 27C6 Common
+27D0 27EB Common
+27F0 27FF Common
+2900 2B13 Common
+2E00 2E17 Common
+2E1C 2E1D Common
+2FF0 2FFB Common
+3000 3004 Common
+3006 Common
+3008 3020 Common
+3030 3037 Common
+303C 303F Common
+309B 309C Common
+30A0 Common
+30FB 30FC Common
+3190 319F Common
+31C0 31CF Common
+3220 3243 Common
+3250 325F Common
+327E 32FE Common
+3300 33FF Common
+4DC0 4DFF Common
+A700 A716 Common
+E000 F8FF Common
+FD3E FD3F Common
+FDFD Common
+FE10 FE19 Common
+FE30 FE52 Common
+FE54 FE66 Common
+FE68 FE6B Common
+FEFF Common
+FF01 FF20 Common
+FF3B FF40 Common
+FF5B FF65 Common
+FF70 Common
+FF9E FF9F Common
+FFE0 FFE6 Common
+FFE8 FFEE Common
+FFF9 FFFD Common
+10100 10102 Common
+10107 10133 Common
+10137 1013F Common
+1D000 1D0F5 Common
+1D100 1D126 Common
+1D12A 1D166 Common
+1D16A 1D17A Common
+1D183 1D184 Common
+1D18C 1D1A9 Common
+1D1AE 1D1DD Common
+1D300 1D356 Common
+1D400 1D454 Common
+1D456 1D49C Common
+1D49E 1D49F Common
+1D4A2 Common
+1D4A5 1D4A6 Common
+1D4A9 1D4AC Common
+1D4AE 1D4B9 Common
+1D4BB Common
+1D4BD 1D4C3 Common
+1D4C5 1D505 Common
+1D507 1D50A Common
+1D50D 1D514 Common
+1D516 1D51C Common
+1D51E 1D539 Common
+1D53B 1D53E Common
+1D540 1D544 Common
+1D546 Common
+1D54A 1D550 Common
+1D552 1D6A5 Common
+1D6A8 1D7C9 Common
+1D7CE 1D7FF Common
+E0001 Common
+E0020 E007F Common
+F0000 FFFFD Common
+100000 10FFFD Common
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CanonDC.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CanonDC.pl
new file mode 100644
index 00000000000..5da8da98335
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CanonDC.pl
@@ -0,0 +1,16 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CanonDCIJ}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+0069 006A
+012F
+1E2D
+1ECB
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CaseIgn.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CaseIgn.pl
new file mode 100644
index 00000000000..e6c2b6619d3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CaseIgn.pl
@@ -0,0 +1,138 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CaseIgnorable}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+00AD
+0300 036F
+0483 0486
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+0610 0615
+064B 065E
+0670
+06D6 06DC
+06DF 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0902
+093C
+0941 0948
+094D
+0951 0954
+0962 0963
+0981
+09BC
+09C1 09C4
+09CD
+09E2 09E3
+0A01 0A02
+0A3C
+0A41 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A82
+0ABC
+0AC1 0AC5
+0AC7 0AC8
+0ACD
+0AE2 0AE3
+0B01
+0B3C
+0B3F
+0B41 0B43
+0B4D
+0B56
+0B82
+0BC0
+0BCD
+0C3E 0C40
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0CBC
+0CBF
+0CC6
+0CCC 0CCD
+0D41 0D43
+0D4D
+0DCA
+0DD2 0DD4
+0DD6
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102D 1030
+1032
+1036 1037
+1039
+1058 1059
+135F
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B7 17BD
+17C6
+17C9 17D3
+17DD
+180B 180D
+18A9
+1920 1922
+1927 1928
+1932
+1939 193B
+1A17 1A18
+1DC0 1DC3
+2010
+20D0 20DC
+20E1
+20E5 20EB
+302A 302F
+3099 309A
+A806
+A80B
+A825 A826
+FB1E
+FE00 FE0F
+FE20 FE23
+10A01 10A03
+10A05 10A06
+10A0C 10A0F
+10A38 10A3A
+10A3F
+1D167 1D169
+1D17B 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CombAbo.pl b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CombAbo.pl
new file mode 100644
index 00000000000..0bf4915039c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/gc_sc/_CombAbo.pl
@@ -0,0 +1,69 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# This file supports:
+# \p{_CombAbove}
+#
+# Meaning: (for internal casefolding use)
+#
+return <<'END';
+0300 0314
+033D 0344
+0346
+034A 034C
+0350 0352
+0357
+035B
+0363 036F
+0483 0486
+0592 0595
+0597 0599
+059C 05A1
+05A8 05A9
+05AB 05AC
+05AF
+05C4
+0610 0615
+0653 0654
+0657 065B
+065D 065E
+06D6 06DC
+06DF 06E2
+06E4
+06E7 06E8
+06EB 06EC
+0730
+0732 0733
+0735 0736
+073A
+073D
+073F 0741
+0743
+0745
+0747
+0749 074A
+0951
+0953 0954
+0F82 0F83
+0F86 0F87
+135F
+17DD
+193A
+1A17
+1DC0 1DC1
+1DC3
+20D0 20D1
+20D4 20D7
+20DB 20DC
+20E1
+20E7
+20E9
+FE20 FE23
+10A0F
+10A38
+1D185 1D189
+1D1AA 1D1AD
+1D242 1D244
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/hst/L.pl b/Master/tlpkg/tlperl/lib/unicore/lib/hst/L.pl
new file mode 100644
index 00000000000..945fc18394f
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/hst/L.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# HangulSyllableType category 'Leading_Jamo'
+#
+return <<'END';
+1100 1159
+115F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/hst/LV.pl b/Master/tlpkg/tlperl/lib/unicore/lib/hst/LV.pl
new file mode 100644
index 00000000000..13d12ad5f31
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/hst/LV.pl
@@ -0,0 +1,408 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# HangulSyllableType category 'LV_Syllable'
+#
+return <<'END';
+AC00
+AC1C
+AC38
+AC54
+AC70
+AC8C
+ACA8
+ACC4
+ACE0
+ACFC
+AD18
+AD34
+AD50
+AD6C
+AD88
+ADA4
+ADC0
+ADDC
+ADF8
+AE14
+AE30
+AE4C
+AE68
+AE84
+AEA0
+AEBC
+AED8
+AEF4
+AF10
+AF2C
+AF48
+AF64
+AF80
+AF9C
+AFB8
+AFD4
+AFF0
+B00C
+B028
+B044
+B060
+B07C
+B098
+B0B4
+B0D0
+B0EC
+B108
+B124
+B140
+B15C
+B178
+B194
+B1B0
+B1CC
+B1E8
+B204
+B220
+B23C
+B258
+B274
+B290
+B2AC
+B2C8
+B2E4
+B300
+B31C
+B338
+B354
+B370
+B38C
+B3A8
+B3C4
+B3E0
+B3FC
+B418
+B434
+B450
+B46C
+B488
+B4A4
+B4C0
+B4DC
+B4F8
+B514
+B530
+B54C
+B568
+B584
+B5A0
+B5BC
+B5D8
+B5F4
+B610
+B62C
+B648
+B664
+B680
+B69C
+B6B8
+B6D4
+B6F0
+B70C
+B728
+B744
+B760
+B77C
+B798
+B7B4
+B7D0
+B7EC
+B808
+B824
+B840
+B85C
+B878
+B894
+B8B0
+B8CC
+B8E8
+B904
+B920
+B93C
+B958
+B974
+B990
+B9AC
+B9C8
+B9E4
+BA00
+BA1C
+BA38
+BA54
+BA70
+BA8C
+BAA8
+BAC4
+BAE0
+BAFC
+BB18
+BB34
+BB50
+BB6C
+BB88
+BBA4
+BBC0
+BBDC
+BBF8
+BC14
+BC30
+BC4C
+BC68
+BC84
+BCA0
+BCBC
+BCD8
+BCF4
+BD10
+BD2C
+BD48
+BD64
+BD80
+BD9C
+BDB8
+BDD4
+BDF0
+BE0C
+BE28
+BE44
+BE60
+BE7C
+BE98
+BEB4
+BED0
+BEEC
+BF08
+BF24
+BF40
+BF5C
+BF78
+BF94
+BFB0
+BFCC
+BFE8
+C004
+C020
+C03C
+C058
+C074
+C090
+C0AC
+C0C8
+C0E4
+C100
+C11C
+C138
+C154
+C170
+C18C
+C1A8
+C1C4
+C1E0
+C1FC
+C218
+C234
+C250
+C26C
+C288
+C2A4
+C2C0
+C2DC
+C2F8
+C314
+C330
+C34C
+C368
+C384
+C3A0
+C3BC
+C3D8
+C3F4
+C410
+C42C
+C448
+C464
+C480
+C49C
+C4B8
+C4D4
+C4F0
+C50C
+C528
+C544
+C560
+C57C
+C598
+C5B4
+C5D0
+C5EC
+C608
+C624
+C640
+C65C
+C678
+C694
+C6B0
+C6CC
+C6E8
+C704
+C720
+C73C
+C758
+C774
+C790
+C7AC
+C7C8
+C7E4
+C800
+C81C
+C838
+C854
+C870
+C88C
+C8A8
+C8C4
+C8E0
+C8FC
+C918
+C934
+C950
+C96C
+C988
+C9A4
+C9C0
+C9DC
+C9F8
+CA14
+CA30
+CA4C
+CA68
+CA84
+CAA0
+CABC
+CAD8
+CAF4
+CB10
+CB2C
+CB48
+CB64
+CB80
+CB9C
+CBB8
+CBD4
+CBF0
+CC0C
+CC28
+CC44
+CC60
+CC7C
+CC98
+CCB4
+CCD0
+CCEC
+CD08
+CD24
+CD40
+CD5C
+CD78
+CD94
+CDB0
+CDCC
+CDE8
+CE04
+CE20
+CE3C
+CE58
+CE74
+CE90
+CEAC
+CEC8
+CEE4
+CF00
+CF1C
+CF38
+CF54
+CF70
+CF8C
+CFA8
+CFC4
+CFE0
+CFFC
+D018
+D034
+D050
+D06C
+D088
+D0A4
+D0C0
+D0DC
+D0F8
+D114
+D130
+D14C
+D168
+D184
+D1A0
+D1BC
+D1D8
+D1F4
+D210
+D22C
+D248
+D264
+D280
+D29C
+D2B8
+D2D4
+D2F0
+D30C
+D328
+D344
+D360
+D37C
+D398
+D3B4
+D3D0
+D3EC
+D408
+D424
+D440
+D45C
+D478
+D494
+D4B0
+D4CC
+D4E8
+D504
+D520
+D53C
+D558
+D574
+D590
+D5AC
+D5C8
+D5E4
+D600
+D61C
+D638
+D654
+D670
+D68C
+D6A8
+D6C4
+D6E0
+D6FC
+D718
+D734
+D750
+D76C
+D788
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/hst/LVT.pl b/Master/tlpkg/tlperl/lib/unicore/lib/hst/LVT.pl
new file mode 100644
index 00000000000..c429e0216ee
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/hst/LVT.pl
@@ -0,0 +1,408 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# HangulSyllableType category 'LVT_Syllable'
+#
+return <<'END';
+AC01 AC1B
+AC1D AC37
+AC39 AC53
+AC55 AC6F
+AC71 AC8B
+AC8D ACA7
+ACA9 ACC3
+ACC5 ACDF
+ACE1 ACFB
+ACFD AD17
+AD19 AD33
+AD35 AD4F
+AD51 AD6B
+AD6D AD87
+AD89 ADA3
+ADA5 ADBF
+ADC1 ADDB
+ADDD ADF7
+ADF9 AE13
+AE15 AE2F
+AE31 AE4B
+AE4D AE67
+AE69 AE83
+AE85 AE9F
+AEA1 AEBB
+AEBD AED7
+AED9 AEF3
+AEF5 AF0F
+AF11 AF2B
+AF2D AF47
+AF49 AF63
+AF65 AF7F
+AF81 AF9B
+AF9D AFB7
+AFB9 AFD3
+AFD5 AFEF
+AFF1 B00B
+B00D B027
+B029 B043
+B045 B05F
+B061 B07B
+B07D B097
+B099 B0B3
+B0B5 B0CF
+B0D1 B0EB
+B0ED B107
+B109 B123
+B125 B13F
+B141 B15B
+B15D B177
+B179 B193
+B195 B1AF
+B1B1 B1CB
+B1CD B1E7
+B1E9 B203
+B205 B21F
+B221 B23B
+B23D B257
+B259 B273
+B275 B28F
+B291 B2AB
+B2AD B2C7
+B2C9 B2E3
+B2E5 B2FF
+B301 B31B
+B31D B337
+B339 B353
+B355 B36F
+B371 B38B
+B38D B3A7
+B3A9 B3C3
+B3C5 B3DF
+B3E1 B3FB
+B3FD B417
+B419 B433
+B435 B44F
+B451 B46B
+B46D B487
+B489 B4A3
+B4A5 B4BF
+B4C1 B4DB
+B4DD B4F7
+B4F9 B513
+B515 B52F
+B531 B54B
+B54D B567
+B569 B583
+B585 B59F
+B5A1 B5BB
+B5BD B5D7
+B5D9 B5F3
+B5F5 B60F
+B611 B62B
+B62D B647
+B649 B663
+B665 B67F
+B681 B69B
+B69D B6B7
+B6B9 B6D3
+B6D5 B6EF
+B6F1 B70B
+B70D B727
+B729 B743
+B745 B75F
+B761 B77B
+B77D B797
+B799 B7B3
+B7B5 B7CF
+B7D1 B7EB
+B7ED B807
+B809 B823
+B825 B83F
+B841 B85B
+B85D B877
+B879 B893
+B895 B8AF
+B8B1 B8CB
+B8CD B8E7
+B8E9 B903
+B905 B91F
+B921 B93B
+B93D B957
+B959 B973
+B975 B98F
+B991 B9AB
+B9AD B9C7
+B9C9 B9E3
+B9E5 B9FF
+BA01 BA1B
+BA1D BA37
+BA39 BA53
+BA55 BA6F
+BA71 BA8B
+BA8D BAA7
+BAA9 BAC3
+BAC5 BADF
+BAE1 BAFB
+BAFD BB17
+BB19 BB33
+BB35 BB4F
+BB51 BB6B
+BB6D BB87
+BB89 BBA3
+BBA5 BBBF
+BBC1 BBDB
+BBDD BBF7
+BBF9 BC13
+BC15 BC2F
+BC31 BC4B
+BC4D BC67
+BC69 BC83
+BC85 BC9F
+BCA1 BCBB
+BCBD BCD7
+BCD9 BCF3
+BCF5 BD0F
+BD11 BD2B
+BD2D BD47
+BD49 BD63
+BD65 BD7F
+BD81 BD9B
+BD9D BDB7
+BDB9 BDD3
+BDD5 BDEF
+BDF1 BE0B
+BE0D BE27
+BE29 BE43
+BE45 BE5F
+BE61 BE7B
+BE7D BE97
+BE99 BEB3
+BEB5 BECF
+BED1 BEEB
+BEED BF07
+BF09 BF23
+BF25 BF3F
+BF41 BF5B
+BF5D BF77
+BF79 BF93
+BF95 BFAF
+BFB1 BFCB
+BFCD BFE7
+BFE9 C003
+C005 C01F
+C021 C03B
+C03D C057
+C059 C073
+C075 C08F
+C091 C0AB
+C0AD C0C7
+C0C9 C0E3
+C0E5 C0FF
+C101 C11B
+C11D C137
+C139 C153
+C155 C16F
+C171 C18B
+C18D C1A7
+C1A9 C1C3
+C1C5 C1DF
+C1E1 C1FB
+C1FD C217
+C219 C233
+C235 C24F
+C251 C26B
+C26D C287
+C289 C2A3
+C2A5 C2BF
+C2C1 C2DB
+C2DD C2F7
+C2F9 C313
+C315 C32F
+C331 C34B
+C34D C367
+C369 C383
+C385 C39F
+C3A1 C3BB
+C3BD C3D7
+C3D9 C3F3
+C3F5 C40F
+C411 C42B
+C42D C447
+C449 C463
+C465 C47F
+C481 C49B
+C49D C4B7
+C4B9 C4D3
+C4D5 C4EF
+C4F1 C50B
+C50D C527
+C529 C543
+C545 C55F
+C561 C57B
+C57D C597
+C599 C5B3
+C5B5 C5CF
+C5D1 C5EB
+C5ED C607
+C609 C623
+C625 C63F
+C641 C65B
+C65D C677
+C679 C693
+C695 C6AF
+C6B1 C6CB
+C6CD C6E7
+C6E9 C703
+C705 C71F
+C721 C73B
+C73D C757
+C759 C773
+C775 C78F
+C791 C7AB
+C7AD C7C7
+C7C9 C7E3
+C7E5 C7FF
+C801 C81B
+C81D C837
+C839 C853
+C855 C86F
+C871 C88B
+C88D C8A7
+C8A9 C8C3
+C8C5 C8DF
+C8E1 C8FB
+C8FD C917
+C919 C933
+C935 C94F
+C951 C96B
+C96D C987
+C989 C9A3
+C9A5 C9BF
+C9C1 C9DB
+C9DD C9F7
+C9F9 CA13
+CA15 CA2F
+CA31 CA4B
+CA4D CA67
+CA69 CA83
+CA85 CA9F
+CAA1 CABB
+CABD CAD7
+CAD9 CAF3
+CAF5 CB0F
+CB11 CB2B
+CB2D CB47
+CB49 CB63
+CB65 CB7F
+CB81 CB9B
+CB9D CBB7
+CBB9 CBD3
+CBD5 CBEF
+CBF1 CC0B
+CC0D CC27
+CC29 CC43
+CC45 CC5F
+CC61 CC7B
+CC7D CC97
+CC99 CCB3
+CCB5 CCCF
+CCD1 CCEB
+CCED CD07
+CD09 CD23
+CD25 CD3F
+CD41 CD5B
+CD5D CD77
+CD79 CD93
+CD95 CDAF
+CDB1 CDCB
+CDCD CDE7
+CDE9 CE03
+CE05 CE1F
+CE21 CE3B
+CE3D CE57
+CE59 CE73
+CE75 CE8F
+CE91 CEAB
+CEAD CEC7
+CEC9 CEE3
+CEE5 CEFF
+CF01 CF1B
+CF1D CF37
+CF39 CF53
+CF55 CF6F
+CF71 CF8B
+CF8D CFA7
+CFA9 CFC3
+CFC5 CFDF
+CFE1 CFFB
+CFFD D017
+D019 D033
+D035 D04F
+D051 D06B
+D06D D087
+D089 D0A3
+D0A5 D0BF
+D0C1 D0DB
+D0DD D0F7
+D0F9 D113
+D115 D12F
+D131 D14B
+D14D D167
+D169 D183
+D185 D19F
+D1A1 D1BB
+D1BD D1D7
+D1D9 D1F3
+D1F5 D20F
+D211 D22B
+D22D D247
+D249 D263
+D265 D27F
+D281 D29B
+D29D D2B7
+D2B9 D2D3
+D2D5 D2EF
+D2F1 D30B
+D30D D327
+D329 D343
+D345 D35F
+D361 D37B
+D37D D397
+D399 D3B3
+D3B5 D3CF
+D3D1 D3EB
+D3ED D407
+D409 D423
+D425 D43F
+D441 D45B
+D45D D477
+D479 D493
+D495 D4AF
+D4B1 D4CB
+D4CD D4E7
+D4E9 D503
+D505 D51F
+D521 D53B
+D53D D557
+D559 D573
+D575 D58F
+D591 D5AB
+D5AD D5C7
+D5C9 D5E3
+D5E5 D5FF
+D601 D61B
+D61D D637
+D639 D653
+D655 D66F
+D671 D68B
+D68D D6A7
+D6A9 D6C3
+D6C5 D6DF
+D6E1 D6FB
+D6FD D717
+D719 D733
+D735 D74F
+D751 D76B
+D76D D787
+D789 D7A3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/hst/T.pl b/Master/tlpkg/tlperl/lib/unicore/lib/hst/T.pl
new file mode 100644
index 00000000000..7a319da9208
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/hst/T.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# HangulSyllableType category 'Trailing_Jamo'
+#
+return <<'END';
+11A8 11F9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/hst/V.pl b/Master/tlpkg/tlperl/lib/unicore/lib/hst/V.pl
new file mode 100644
index 00000000000..a15ff227215
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/hst/V.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# HangulSyllableType category 'Vowel_Jamo'
+#
+return <<'END';
+1160 11A2
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/jt/C.pl b/Master/tlpkg/tlperl/lib/unicore/lib/jt/C.pl
new file mode 100644
index 00000000000..ff7d7801b8d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/jt/C.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# JoiningType category 'Join_Causing'
+#
+return <<'END';
+0640
+200D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/jt/D.pl b/Master/tlpkg/tlperl/lib/unicore/lib/jt/D.pl
new file mode 100644
index 00000000000..b5fe86b95c5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/jt/D.pl
@@ -0,0 +1,33 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# JoiningType category 'Dual_Joining'
+#
+return <<'END';
+0626
+0628
+062A 062E
+0633 063A
+0641 0647
+0649 064A
+066E 066F
+0678 0687
+069A 06BF
+06C1 06C2
+06CC
+06CE
+06D0 06D1
+06FA 06FC
+06FF
+0712 0714
+071A 071D
+071F 0727
+0729
+072B
+072D 072E
+074E 0758
+075C 076A
+076D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/jt/R.pl b/Master/tlpkg/tlperl/lib/unicore/lib/jt/R.pl
new file mode 100644
index 00000000000..5ab772036f0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/jt/R.pl
@@ -0,0 +1,34 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# JoiningType category 'Right_Joining'
+#
+return <<'END';
+0622 0625
+0627
+0629
+062F 0632
+0648
+0671 0673
+0675 0677
+0688 0699
+06C0
+06C3 06CB
+06CD
+06CF
+06D2 06D3
+06D5
+06EE 06EF
+0710
+0715 0719
+071E
+0728
+072A
+072C
+072F
+074D
+0759 075B
+076B 076C
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/jt/U.pl b/Master/tlpkg/tlperl/lib/unicore/lib/jt/U.pl
new file mode 100644
index 00000000000..5d344f64f3a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/jt/U.pl
@@ -0,0 +1,15 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# JoiningType category 'Non_Joining'
+#
+return <<'END';
+0600 0603
+060B
+0621
+0674
+06DD
+200C
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/AI.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/AI.pl
new file mode 100644
index 00000000000..2837c8eca14
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/AI.pl
@@ -0,0 +1,101 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Ambiguous'
+#
+return <<'END';
+00A1
+00A7 00A8
+00AA
+00B2 00B3
+00B6 00BA
+00BC 00BF
+00D7
+00F7
+02C7
+02C9 02CB
+02CD
+02D0
+02D8 02DB
+02DD
+2015 2016
+2020 2021
+203B
+2074
+207F
+2081 2084
+2105
+2113
+2121 2122
+212B
+2154 2155
+215B
+215E
+2160 216B
+2170 2179
+2190 2199
+21D2
+21D4
+2200
+2202 2203
+2207 2208
+220B
+220F
+2211
+2215
+221A
+221D 2220
+2223
+2225
+2227 222C
+222E
+2234 2237
+223C 223D
+2248
+224C
+2252
+2260 2261
+2264 2267
+226A 226B
+226E 226F
+2282 2283
+2286 2287
+2295
+2299
+22A5
+22BF
+2312
+2460 24FE
+2500 254B
+2550 2574
+2580 258F
+2592 2595
+25A0 25A1
+25A3 25A9
+25B2 25B3
+25B6 25B7
+25BC 25BD
+25C0 25C1
+25C6 25C8
+25CB
+25CE 25D1
+25E2 25E5
+25EF
+2605 2606
+2609
+260E 260F
+2614 2617
+261C
+261E
+2640
+2642
+2660 2661
+2663 2665
+2667 266A
+266C 266D
+266F
+2776 2793
+FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/AL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/AL.pl
new file mode 100644
index 00000000000..7263f9ca1e6
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/AL.pl
@@ -0,0 +1,449 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Alphabetic'
+#
+return <<'END';
+0023
+0026
+002A
+003C 003E
+0040 005A
+005E 007A
+007E
+00A6
+00A9
+00AC
+00AE 00AF
+00B5
+00C0 00D6
+00D8 00F6
+00F8 0241
+0250 02C6
+02CE 02CF
+02D1 02D7
+02DC
+02DE 02FF
+0374 0375
+037A
+0384 038A
+038C
+038E 03A1
+03A3 03CE
+03D0 0482
+048A 04CE
+04D0 04F9
+0500 050F
+0531 0556
+0559 055F
+0561 0587
+05BE
+05C0
+05C3
+05D0 05EA
+05F0 05F4
+0600 0603
+060E 060F
+0621 063A
+0640 064A
+066D 066F
+0671 06D3
+06D5
+06DD
+06E5 06E6
+06E9
+06EE 06EF
+06FA 070D
+070F 0710
+0712 072F
+074D 076D
+0780 07A5
+07B1
+0904 0939
+093D
+0950
+0958 0961
+0970
+097D
+0985 098C
+098F 0990
+0993 09A8
+09AA 09B0
+09B2
+09B6 09B9
+09BD
+09CE
+09DC 09DD
+09DF 09E1
+09F0 09F1
+09F4 09FA
+0A05 0A0A
+0A0F 0A10
+0A13 0A28
+0A2A 0A30
+0A32 0A33
+0A35 0A36
+0A38 0A39
+0A59 0A5C
+0A5E
+0A72 0A74
+0A85 0A8D
+0A8F 0A91
+0A93 0AA8
+0AAA 0AB0
+0AB2 0AB3
+0AB5 0AB9
+0ABD
+0AD0
+0AE0 0AE1
+0B05 0B0C
+0B0F 0B10
+0B13 0B28
+0B2A 0B30
+0B32 0B33
+0B35 0B39
+0B3D
+0B5C 0B5D
+0B5F 0B61
+0B70 0B71
+0B83
+0B85 0B8A
+0B8E 0B90
+0B92 0B95
+0B99 0B9A
+0B9C
+0B9E 0B9F
+0BA3 0BA4
+0BA8 0BAA
+0BAE 0BB9
+0BF0 0BF8
+0BFA
+0C05 0C0C
+0C0E 0C10
+0C12 0C28
+0C2A 0C33
+0C35 0C39
+0C60 0C61
+0C85 0C8C
+0C8E 0C90
+0C92 0CA8
+0CAA 0CB3
+0CB5 0CB9
+0CBD
+0CDE
+0CE0 0CE1
+0D05 0D0C
+0D0E 0D10
+0D12 0D28
+0D2A 0D39
+0D60 0D61
+0D85 0D96
+0D9A 0DB1
+0DB3 0DBB
+0DBD
+0DC0 0DC6
+0DF4
+0E4F
+0F00
+0F05
+0F13
+0F15 0F17
+0F1A 0F1F
+0F2A 0F33
+0F36
+0F38
+0F40 0F47
+0F49 0F6A
+0F88 0F8B
+0FC0 0FC5
+0FC7 0FCC
+0FCF
+104C 104F
+10A0 10C5
+10D0 10FC
+1200 1248
+124A 124D
+1250 1256
+1258
+125A 125D
+1260 1288
+128A 128D
+1290 12B0
+12B2 12B5
+12B8 12BE
+12C0
+12C2 12C5
+12C8 12D6
+12D8 1310
+1312 1315
+1318 135A
+1360
+1362 137C
+1380 1399
+13A0 13F4
+1401 1676
+1681 169A
+16A0 16EA
+16EE 16F0
+1700 170C
+170E 1711
+1720 1731
+1735 1736
+1740 1751
+1760 176C
+176E 1770
+17DC
+17F0 17F9
+1800 1801
+1807
+180A
+1820 1877
+1880 18A8
+1900 191C
+1940
+1950 196D
+1970 1974
+1980 19A9
+19C1 19C7
+19DE 1A16
+1A1F
+1D00 1DBF
+1E00 1E9B
+1EA0 1EF9
+1F00 1F15
+1F18 1F1D
+1F20 1F45
+1F48 1F4D
+1F50 1F57
+1F59
+1F5B
+1F5D
+1F5F 1F7D
+1F80 1FB4
+1FB6 1FC4
+1FC6 1FD3
+1FD6 1FDB
+1FDD 1FEF
+1FF2 1FF4
+1FF6 1FFE
+2017
+2022 2023
+2038
+203D 2043
+2047 2055
+2057
+205C
+2061 2063
+2070 2071
+2075 207C
+2080
+2085 208C
+2090 2094
+2100 2102
+2104
+2106 2108
+210A 2112
+2114 2115
+2117 2120
+2123 212A
+212C 214C
+2153
+2156 215A
+215C 215D
+215F
+216C 216F
+217A 2183
+219A 21D1
+21D3
+21D5 21FF
+2201
+2204 2206
+2209 220A
+220C 220E
+2210
+2214
+2216 2219
+221B 221C
+2221 2222
+2224
+2226
+222D
+222F 2233
+2238 223B
+223E 2247
+2249 224B
+224D 2251
+2253 225F
+2262 2263
+2268 2269
+226C 226D
+2270 2281
+2284 2285
+2288 2294
+2296 2298
+229A 22A4
+22A6 22BE
+22C0 2311
+2313 2328
+232B 23B3
+23B7 23DB
+2400 2426
+2440 244A
+24FF
+254C 254F
+2575 257F
+2590 2591
+2596 259F
+25A2
+25AA 25B1
+25B4 25B5
+25B8 25BB
+25BE 25BF
+25C2 25C5
+25C9 25CA
+25CC 25CD
+25D2 25E1
+25E6 25EE
+25F0 2604
+2607 2608
+260A 260D
+2610 2613
+2618 261B
+261D
+261F 263F
+2641
+2643 265F
+2662
+2666
+266B
+266E
+2670 269C
+26A0 26B1
+2701 2704
+2706 2709
+270C 2727
+2729 274B
+274D
+274F 2752
+2756
+2758 275A
+2761
+2764 2767
+2794
+2798 27AF
+27B1 27BE
+27C0 27C4
+27D0 27E5
+27F0 2982
+2999 29D7
+29DC 29FB
+29FE 2B13
+2C00 2C2E
+2C30 2C5E
+2C80 2CEA
+2CFD
+2D00 2D25
+2D30 2D65
+2D6F
+2D80 2D96
+2DA0 2DA6
+2DA8 2DAE
+2DB0 2DB6
+2DB8 2DBE
+2DC0 2DC6
+2DC8 2DCE
+2DD0 2DD6
+2DD8 2DDE
+2E16
+4DC0 4DFF
+A700 A716
+A800 A801
+A803 A805
+A807 A80A
+A80C A822
+A828 A82B
+FB00 FB06
+FB13 FB17
+FB1D
+FB1F FB36
+FB38 FB3C
+FB3E
+FB40 FB41
+FB43 FB44
+FB46 FBB1
+FBD3 FD3D
+FD50 FD8F
+FD92 FDC7
+FDF0 FDFB
+FDFD
+FE70 FE74
+FE76 FEFC
+FF66
+FF71 FF9D
+FFA0 FFBE
+FFC2 FFC7
+FFCA FFCF
+FFD2 FFD7
+FFDA FFDC
+FFE8 FFEE
+10000 1000B
+1000D 10026
+10028 1003A
+1003C 1003D
+1003F 1004D
+10050 1005D
+10080 100FA
+10107 10133
+10137 1018A
+10300 1031E
+10320 10323
+10330 1034A
+10380 1039D
+103A0 103C3
+103C8 103D5
+10400 1049D
+10800 10805
+10808
+1080A 10835
+10837 10838
+1083C
+1083F
+10A00
+10A10 10A13
+10A15 10A17
+10A19 10A33
+10A40 10A47
+10A58
+1D000 1D0F5
+1D100 1D126
+1D12A 1D164
+1D16A 1D16C
+1D183 1D184
+1D18C 1D1A9
+1D1AE 1D1DD
+1D200 1D241
+1D245
+1D300 1D356
+1D400 1D454
+1D456 1D49C
+1D49E 1D49F
+1D4A2
+1D4A5 1D4A6
+1D4A9 1D4AC
+1D4AE 1D4B9
+1D4BB
+1D4BD 1D4C3
+1D4C5 1D505
+1D507 1D50A
+1D50D 1D514
+1D516 1D51C
+1D51E 1D539
+1D53B 1D53E
+1D540 1D544
+1D546
+1D54A 1D550
+1D552 1D6A5
+1D6A8 1D7C9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/B2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/B2.pl
new file mode 100644
index 00000000000..d00f5791082
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/B2.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Break_Both'
+#
+return <<'END';
+2014
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/BA.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BA.pl
new file mode 100644
index 00000000000..48d2f10faf0
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BA.pl
@@ -0,0 +1,45 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Break_After'
+#
+return <<'END';
+0009
+007C
+00AD
+058A
+0964 0965
+0E5A 0E5B
+0F0B
+0F34
+0F7F
+0F85
+0FBE 0FBF
+104A 104B
+1361
+1680
+16EB 16ED
+17D4 17D5
+17D8
+17DA
+1802 1805
+1808 1809
+1A1E
+2000 2006
+2008 200A
+2010
+2012 2013
+2027
+2056
+2058 205B
+205D 205F
+2CF9 2CFC
+2CFE 2CFF
+2E0E 2E15
+2E17
+10100 10102
+1039F
+10A50 10A57
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/BB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BB.pl
new file mode 100644
index 00000000000..497a4b89835
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BB.pl
@@ -0,0 +1,17 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Break_Before'
+#
+return <<'END';
+00B4
+02C8
+02CC
+0F01 0F04
+0F06 0F07
+0F09 0F0A
+0FD0 0FD1
+1806
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/BK.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BK.pl
new file mode 100644
index 00000000000..c55b1be7ebd
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/BK.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Mandatory_Break'
+#
+return <<'END';
+000C
+2028 2029
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/CB.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CB.pl
new file mode 100644
index 00000000000..eb229b7bf98
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CB.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Contingent_Break'
+#
+return <<'END';
+FFFC
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/CL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CL.pl
new file mode 100644
index 00000000000..337639a26a5
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CL.pl
@@ -0,0 +1,80 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Close_Punctuation'
+#
+return <<'END';
+0029
+005D
+007D
+0F3B
+0F3D
+169C
+2046
+207E
+208E
+232A
+23B5
+2769
+276B
+276D
+276F
+2771
+2773
+2775
+27C6
+27E7
+27E9
+27EB
+2984
+2986
+2988
+298A
+298C
+298E
+2990
+2992
+2994
+2996
+2998
+29D9
+29DB
+29FD
+3001 3002
+3009
+300B
+300D
+300F
+3011
+3015
+3017
+3019
+301B
+301E 301F
+FD3F
+FE11 FE12
+FE18
+FE36
+FE38
+FE3A
+FE3C
+FE3E
+FE40
+FE42
+FE44
+FE48
+FE50
+FE52
+FE5A
+FE5C
+FE5E
+FF09
+FF0C
+FF0E
+FF3D
+FF5D
+FF60 FF61
+FF63 FF64
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/CM.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CM.pl
new file mode 100644
index 00000000000..56aff56a330
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CM.pl
@@ -0,0 +1,155 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Combining_Mark'
+#
+return <<'END';
+0000 0008
+000B
+000E 001F
+007F 0084
+0086 009F
+0300 034E
+0350 035C
+0363 036F
+0483 0486
+0488 0489
+0591 05B9
+05BB 05BD
+05BF
+05C1 05C2
+05C4 05C5
+05C7
+0610 0615
+064B 065E
+0670
+06D6 06DC
+06DE 06E4
+06E7 06E8
+06EA 06ED
+0711
+0730 074A
+07A6 07B0
+0901 0903
+093C
+093E 094D
+0951 0954
+0962 0963
+0981 0983
+09BC
+09BE 09C4
+09C7 09C8
+09CB 09CD
+09D7
+09E2 09E3
+0A01 0A03
+0A3C
+0A3E 0A42
+0A47 0A48
+0A4B 0A4D
+0A70 0A71
+0A81 0A83
+0ABC
+0ABE 0AC5
+0AC7 0AC9
+0ACB 0ACD
+0AE2 0AE3
+0B01 0B03
+0B3C
+0B3E 0B43
+0B47 0B48
+0B4B 0B4D
+0B56 0B57
+0B82
+0BBE 0BC2
+0BC6 0BC8
+0BCA 0BCD
+0BD7
+0C01 0C03
+0C3E 0C44
+0C46 0C48
+0C4A 0C4D
+0C55 0C56
+0C82 0C83
+0CBC
+0CBE 0CC4
+0CC6 0CC8
+0CCA 0CCD
+0CD5 0CD6
+0D02 0D03
+0D3E 0D43
+0D46 0D48
+0D4A 0D4D
+0D57
+0D82 0D83
+0DCA
+0DCF 0DD4
+0DD6
+0DD8 0DDF
+0DF2 0DF3
+0E31
+0E34 0E3A
+0E47 0E4E
+0EB1
+0EB4 0EB9
+0EBB 0EBC
+0EC8 0ECD
+0F18 0F19
+0F35
+0F37
+0F39
+0F3E 0F3F
+0F71 0F7E
+0F80 0F84
+0F86 0F87
+0F90 0F97
+0F99 0FBC
+0FC6
+102C 1032
+1036 1039
+1056 1059
+135F
+1712 1714
+1732 1734
+1752 1753
+1772 1773
+17B6 17D3
+17DD
+180B 180D
+18A9
+1920 192B
+1930 193B
+19B0 19C0
+19C8 19C9
+1A17 1A1B
+1DC0 1DC3
+200C 200F
+202A 202E
+206A 206F
+20D0 20EB
+302A 302F
+3099 309A
+A802
+A806
+A80B
+A823 A827
+FB1E
+FE00 FE0F
+FE20 FE23
+FFF9 FFFB
+10A01 10A03
+10A05 10A06
+10A0C 10A0F
+10A38 10A3A
+10A3F
+1D165 1D169
+1D16D 1D182
+1D185 1D18B
+1D1AA 1D1AD
+1D242 1D244
+E0001
+E0020 E007F
+E0100 E01EF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/CR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CR.pl
new file mode 100644
index 00000000000..b4c096404b2
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/CR.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Carriage_Return'
+#
+return <<'END';
+000D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/EX.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/EX.pl
new file mode 100644
index 00000000000..c459ef107a4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/EX.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Exclamation'
+#
+return <<'END';
+0021
+003F
+05C6
+060C
+061B
+061E 061F
+066A
+06D4
+0F0D 0F11
+0F14
+1944 1945
+2762 2763
+FE15 FE16
+FE56 FE57
+FF01
+FF1F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/GL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/GL.pl
new file mode 100644
index 00000000000..5ec8b1513d4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/GL.pl
@@ -0,0 +1,19 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Glue'
+#
+return <<'END';
+00A0
+034F
+035D 0362
+0F08
+0F0C
+0F12
+180E
+2007
+2011
+202F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/H2.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/H2.pl
new file mode 100644
index 00000000000..c4b8a0a65eb
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/H2.pl
@@ -0,0 +1,408 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'H2'
+#
+return <<'END';
+AC00
+AC1C
+AC38
+AC54
+AC70
+AC8C
+ACA8
+ACC4
+ACE0
+ACFC
+AD18
+AD34
+AD50
+AD6C
+AD88
+ADA4
+ADC0
+ADDC
+ADF8
+AE14
+AE30
+AE4C
+AE68
+AE84
+AEA0
+AEBC
+AED8
+AEF4
+AF10
+AF2C
+AF48
+AF64
+AF80
+AF9C
+AFB8
+AFD4
+AFF0
+B00C
+B028
+B044
+B060
+B07C
+B098
+B0B4
+B0D0
+B0EC
+B108
+B124
+B140
+B15C
+B178
+B194
+B1B0
+B1CC
+B1E8
+B204
+B220
+B23C
+B258
+B274
+B290
+B2AC
+B2C8
+B2E4
+B300
+B31C
+B338
+B354
+B370
+B38C
+B3A8
+B3C4
+B3E0
+B3FC
+B418
+B434
+B450
+B46C
+B488
+B4A4
+B4C0
+B4DC
+B4F8
+B514
+B530
+B54C
+B568
+B584
+B5A0
+B5BC
+B5D8
+B5F4
+B610
+B62C
+B648
+B664
+B680
+B69C
+B6B8
+B6D4
+B6F0
+B70C
+B728
+B744
+B760
+B77C
+B798
+B7B4
+B7D0
+B7EC
+B808
+B824
+B840
+B85C
+B878
+B894
+B8B0
+B8CC
+B8E8
+B904
+B920
+B93C
+B958
+B974
+B990
+B9AC
+B9C8
+B9E4
+BA00
+BA1C
+BA38
+BA54
+BA70
+BA8C
+BAA8
+BAC4
+BAE0
+BAFC
+BB18
+BB34
+BB50
+BB6C
+BB88
+BBA4
+BBC0
+BBDC
+BBF8
+BC14
+BC30
+BC4C
+BC68
+BC84
+BCA0
+BCBC
+BCD8
+BCF4
+BD10
+BD2C
+BD48
+BD64
+BD80
+BD9C
+BDB8
+BDD4
+BDF0
+BE0C
+BE28
+BE44
+BE60
+BE7C
+BE98
+BEB4
+BED0
+BEEC
+BF08
+BF24
+BF40
+BF5C
+BF78
+BF94
+BFB0
+BFCC
+BFE8
+C004
+C020
+C03C
+C058
+C074
+C090
+C0AC
+C0C8
+C0E4
+C100
+C11C
+C138
+C154
+C170
+C18C
+C1A8
+C1C4
+C1E0
+C1FC
+C218
+C234
+C250
+C26C
+C288
+C2A4
+C2C0
+C2DC
+C2F8
+C314
+C330
+C34C
+C368
+C384
+C3A0
+C3BC
+C3D8
+C3F4
+C410
+C42C
+C448
+C464
+C480
+C49C
+C4B8
+C4D4
+C4F0
+C50C
+C528
+C544
+C560
+C57C
+C598
+C5B4
+C5D0
+C5EC
+C608
+C624
+C640
+C65C
+C678
+C694
+C6B0
+C6CC
+C6E8
+C704
+C720
+C73C
+C758
+C774
+C790
+C7AC
+C7C8
+C7E4
+C800
+C81C
+C838
+C854
+C870
+C88C
+C8A8
+C8C4
+C8E0
+C8FC
+C918
+C934
+C950
+C96C
+C988
+C9A4
+C9C0
+C9DC
+C9F8
+CA14
+CA30
+CA4C
+CA68
+CA84
+CAA0
+CABC
+CAD8
+CAF4
+CB10
+CB2C
+CB48
+CB64
+CB80
+CB9C
+CBB8
+CBD4
+CBF0
+CC0C
+CC28
+CC44
+CC60
+CC7C
+CC98
+CCB4
+CCD0
+CCEC
+CD08
+CD24
+CD40
+CD5C
+CD78
+CD94
+CDB0
+CDCC
+CDE8
+CE04
+CE20
+CE3C
+CE58
+CE74
+CE90
+CEAC
+CEC8
+CEE4
+CF00
+CF1C
+CF38
+CF54
+CF70
+CF8C
+CFA8
+CFC4
+CFE0
+CFFC
+D018
+D034
+D050
+D06C
+D088
+D0A4
+D0C0
+D0DC
+D0F8
+D114
+D130
+D14C
+D168
+D184
+D1A0
+D1BC
+D1D8
+D1F4
+D210
+D22C
+D248
+D264
+D280
+D29C
+D2B8
+D2D4
+D2F0
+D30C
+D328
+D344
+D360
+D37C
+D398
+D3B4
+D3D0
+D3EC
+D408
+D424
+D440
+D45C
+D478
+D494
+D4B0
+D4CC
+D4E8
+D504
+D520
+D53C
+D558
+D574
+D590
+D5AC
+D5C8
+D5E4
+D600
+D61C
+D638
+D654
+D670
+D68C
+D6A8
+D6C4
+D6E0
+D6FC
+D718
+D734
+D750
+D76C
+D788
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/H3.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/H3.pl
new file mode 100644
index 00000000000..fdb4a80a8b9
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/H3.pl
@@ -0,0 +1,408 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'H3'
+#
+return <<'END';
+AC01 AC1B
+AC1D AC37
+AC39 AC53
+AC55 AC6F
+AC71 AC8B
+AC8D ACA7
+ACA9 ACC3
+ACC5 ACDF
+ACE1 ACFB
+ACFD AD17
+AD19 AD33
+AD35 AD4F
+AD51 AD6B
+AD6D AD87
+AD89 ADA3
+ADA5 ADBF
+ADC1 ADDB
+ADDD ADF7
+ADF9 AE13
+AE15 AE2F
+AE31 AE4B
+AE4D AE67
+AE69 AE83
+AE85 AE9F
+AEA1 AEBB
+AEBD AED7
+AED9 AEF3
+AEF5 AF0F
+AF11 AF2B
+AF2D AF47
+AF49 AF63
+AF65 AF7F
+AF81 AF9B
+AF9D AFB7
+AFB9 AFD3
+AFD5 AFEF
+AFF1 B00B
+B00D B027
+B029 B043
+B045 B05F
+B061 B07B
+B07D B097
+B099 B0B3
+B0B5 B0CF
+B0D1 B0EB
+B0ED B107
+B109 B123
+B125 B13F
+B141 B15B
+B15D B177
+B179 B193
+B195 B1AF
+B1B1 B1CB
+B1CD B1E7
+B1E9 B203
+B205 B21F
+B221 B23B
+B23D B257
+B259 B273
+B275 B28F
+B291 B2AB
+B2AD B2C7
+B2C9 B2E3
+B2E5 B2FF
+B301 B31B
+B31D B337
+B339 B353
+B355 B36F
+B371 B38B
+B38D B3A7
+B3A9 B3C3
+B3C5 B3DF
+B3E1 B3FB
+B3FD B417
+B419 B433
+B435 B44F
+B451 B46B
+B46D B487
+B489 B4A3
+B4A5 B4BF
+B4C1 B4DB
+B4DD B4F7
+B4F9 B513
+B515 B52F
+B531 B54B
+B54D B567
+B569 B583
+B585 B59F
+B5A1 B5BB
+B5BD B5D7
+B5D9 B5F3
+B5F5 B60F
+B611 B62B
+B62D B647
+B649 B663
+B665 B67F
+B681 B69B
+B69D B6B7
+B6B9 B6D3
+B6D5 B6EF
+B6F1 B70B
+B70D B727
+B729 B743
+B745 B75F
+B761 B77B
+B77D B797
+B799 B7B3
+B7B5 B7CF
+B7D1 B7EB
+B7ED B807
+B809 B823
+B825 B83F
+B841 B85B
+B85D B877
+B879 B893
+B895 B8AF
+B8B1 B8CB
+B8CD B8E7
+B8E9 B903
+B905 B91F
+B921 B93B
+B93D B957
+B959 B973
+B975 B98F
+B991 B9AB
+B9AD B9C7
+B9C9 B9E3
+B9E5 B9FF
+BA01 BA1B
+BA1D BA37
+BA39 BA53
+BA55 BA6F
+BA71 BA8B
+BA8D BAA7
+BAA9 BAC3
+BAC5 BADF
+BAE1 BAFB
+BAFD BB17
+BB19 BB33
+BB35 BB4F
+BB51 BB6B
+BB6D BB87
+BB89 BBA3
+BBA5 BBBF
+BBC1 BBDB
+BBDD BBF7
+BBF9 BC13
+BC15 BC2F
+BC31 BC4B
+BC4D BC67
+BC69 BC83
+BC85 BC9F
+BCA1 BCBB
+BCBD BCD7
+BCD9 BCF3
+BCF5 BD0F
+BD11 BD2B
+BD2D BD47
+BD49 BD63
+BD65 BD7F
+BD81 BD9B
+BD9D BDB7
+BDB9 BDD3
+BDD5 BDEF
+BDF1 BE0B
+BE0D BE27
+BE29 BE43
+BE45 BE5F
+BE61 BE7B
+BE7D BE97
+BE99 BEB3
+BEB5 BECF
+BED1 BEEB
+BEED BF07
+BF09 BF23
+BF25 BF3F
+BF41 BF5B
+BF5D BF77
+BF79 BF93
+BF95 BFAF
+BFB1 BFCB
+BFCD BFE7
+BFE9 C003
+C005 C01F
+C021 C03B
+C03D C057
+C059 C073
+C075 C08F
+C091 C0AB
+C0AD C0C7
+C0C9 C0E3
+C0E5 C0FF
+C101 C11B
+C11D C137
+C139 C153
+C155 C16F
+C171 C18B
+C18D C1A7
+C1A9 C1C3
+C1C5 C1DF
+C1E1 C1FB
+C1FD C217
+C219 C233
+C235 C24F
+C251 C26B
+C26D C287
+C289 C2A3
+C2A5 C2BF
+C2C1 C2DB
+C2DD C2F7
+C2F9 C313
+C315 C32F
+C331 C34B
+C34D C367
+C369 C383
+C385 C39F
+C3A1 C3BB
+C3BD C3D7
+C3D9 C3F3
+C3F5 C40F
+C411 C42B
+C42D C447
+C449 C463
+C465 C47F
+C481 C49B
+C49D C4B7
+C4B9 C4D3
+C4D5 C4EF
+C4F1 C50B
+C50D C527
+C529 C543
+C545 C55F
+C561 C57B
+C57D C597
+C599 C5B3
+C5B5 C5CF
+C5D1 C5EB
+C5ED C607
+C609 C623
+C625 C63F
+C641 C65B
+C65D C677
+C679 C693
+C695 C6AF
+C6B1 C6CB
+C6CD C6E7
+C6E9 C703
+C705 C71F
+C721 C73B
+C73D C757
+C759 C773
+C775 C78F
+C791 C7AB
+C7AD C7C7
+C7C9 C7E3
+C7E5 C7FF
+C801 C81B
+C81D C837
+C839 C853
+C855 C86F
+C871 C88B
+C88D C8A7
+C8A9 C8C3
+C8C5 C8DF
+C8E1 C8FB
+C8FD C917
+C919 C933
+C935 C94F
+C951 C96B
+C96D C987
+C989 C9A3
+C9A5 C9BF
+C9C1 C9DB
+C9DD C9F7
+C9F9 CA13
+CA15 CA2F
+CA31 CA4B
+CA4D CA67
+CA69 CA83
+CA85 CA9F
+CAA1 CABB
+CABD CAD7
+CAD9 CAF3
+CAF5 CB0F
+CB11 CB2B
+CB2D CB47
+CB49 CB63
+CB65 CB7F
+CB81 CB9B
+CB9D CBB7
+CBB9 CBD3
+CBD5 CBEF
+CBF1 CC0B
+CC0D CC27
+CC29 CC43
+CC45 CC5F
+CC61 CC7B
+CC7D CC97
+CC99 CCB3
+CCB5 CCCF
+CCD1 CCEB
+CCED CD07
+CD09 CD23
+CD25 CD3F
+CD41 CD5B
+CD5D CD77
+CD79 CD93
+CD95 CDAF
+CDB1 CDCB
+CDCD CDE7
+CDE9 CE03
+CE05 CE1F
+CE21 CE3B
+CE3D CE57
+CE59 CE73
+CE75 CE8F
+CE91 CEAB
+CEAD CEC7
+CEC9 CEE3
+CEE5 CEFF
+CF01 CF1B
+CF1D CF37
+CF39 CF53
+CF55 CF6F
+CF71 CF8B
+CF8D CFA7
+CFA9 CFC3
+CFC5 CFDF
+CFE1 CFFB
+CFFD D017
+D019 D033
+D035 D04F
+D051 D06B
+D06D D087
+D089 D0A3
+D0A5 D0BF
+D0C1 D0DB
+D0DD D0F7
+D0F9 D113
+D115 D12F
+D131 D14B
+D14D D167
+D169 D183
+D185 D19F
+D1A1 D1BB
+D1BD D1D7
+D1D9 D1F3
+D1F5 D20F
+D211 D22B
+D22D D247
+D249 D263
+D265 D27F
+D281 D29B
+D29D D2B7
+D2B9 D2D3
+D2D5 D2EF
+D2F1 D30B
+D30D D327
+D329 D343
+D345 D35F
+D361 D37B
+D37D D397
+D399 D3B3
+D3B5 D3CF
+D3D1 D3EB
+D3ED D407
+D409 D423
+D425 D43F
+D441 D45B
+D45D D477
+D479 D493
+D495 D4AF
+D4B1 D4CB
+D4CD D4E7
+D4E9 D503
+D505 D51F
+D521 D53B
+D53D D557
+D559 D573
+D575 D58F
+D591 D5AB
+D5AD D5C7
+D5C9 D5E3
+D5E5 D5FF
+D601 D61B
+D61D D637
+D639 D653
+D655 D66F
+D671 D68B
+D68D D6A7
+D6A9 D6C3
+D6C5 D6DF
+D6E1 D6FB
+D6FD D717
+D719 D733
+D735 D74F
+D751 D76B
+D76D D787
+D789 D7A3
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/HY.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/HY.pl
new file mode 100644
index 00000000000..321218960fc
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/HY.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Hyphen'
+#
+return <<'END';
+002D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/ID.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/ID.pl
new file mode 100644
index 00000000000..9e6b32e5bab
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/ID.pl
@@ -0,0 +1,80 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Ideographic'
+#
+return <<'END';
+2E80 2E99
+2E9B 2EF3
+2F00 2FD5
+2FF0 2FFB
+3000
+3003 3004
+3006 3007
+3012 3013
+3020 3029
+3030 303A
+303D 303F
+3042
+3044
+3046
+3048
+304A 3062
+3064 3082
+3084
+3086
+3088 308D
+308F 3094
+309F
+30A2
+30A4
+30A6
+30A8
+30AA 30C2
+30C4 30E2
+30E4
+30E6
+30E8 30ED
+30EF 30F4
+30F7 30FA
+30FF
+3105 312C
+3131 318E
+3190 31B7
+31C0 31CF
+3200 321E
+3220 3243
+3250 32FE
+3300 4DB5
+4E00 9FBB
+A000 A014
+A016 A48C
+A490 A4C6
+F900 FA2D
+FA30 FA6A
+FA70 FAD9
+FE30 FE34
+FE45 FE46
+FE49 FE4F
+FE51
+FE58
+FE5F FE66
+FE68
+FE6B
+FF02 FF03
+FF06 FF07
+FF0A FF0B
+FF0D
+FF0F FF19
+FF1C FF1E
+FF20 FF3A
+FF3C
+FF3E FF5A
+FF5C
+FF5E
+FFE2 FFE4
+20000 2A6D6
+2F800 2FA1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/IN.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/IN.pl
new file mode 100644
index 00000000000..c13572b1169
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/IN.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Inseparable'
+#
+return <<'END';
+2024 2026
+FE19
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/IS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/IS.pl
new file mode 100644
index 00000000000..7ce2318e40e
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/IS.pl
@@ -0,0 +1,18 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Infix_Numeric'
+#
+return <<'END';
+002C
+002E
+003A 003B
+037E
+0589
+060D
+2044
+FE10
+FE13 FE14
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/JL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JL.pl
new file mode 100644
index 00000000000..c771ea9bd0d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JL.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'JL'
+#
+return <<'END';
+1100 1159
+115F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/JT.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JT.pl
new file mode 100644
index 00000000000..8697ef25a76
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JT.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'JT'
+#
+return <<'END';
+11A8 11F9
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/JV.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JV.pl
new file mode 100644
index 00000000000..5d615ad6fec
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/JV.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'JV'
+#
+return <<'END';
+1160 11A2
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/LF.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/LF.pl
new file mode 100644
index 00000000000..08bb773718d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/LF.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Line_Feed'
+#
+return <<'END';
+000A
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/NL.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NL.pl
new file mode 100644
index 00000000000..c1c59b268ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NL.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Next_Line'
+#
+return <<'END';
+0085
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/NS.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NS.pl
new file mode 100644
index 00000000000..babb9c703c7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NS.pl
@@ -0,0 +1,46 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Nonstarter'
+#
+return <<'END';
+17D6 17D7
+17D9
+203C
+3005
+301C
+303B 303C
+3041
+3043
+3045
+3047
+3049
+3063
+3083
+3085
+3087
+308E
+3095 3096
+309B 309E
+30A0 30A1
+30A3
+30A5
+30A7
+30A9
+30C3
+30E3
+30E5
+30E7
+30EE
+30F5 30F6
+30FB 30FE
+31F0 31FF
+A015
+FE54 FE55
+FF1A FF1B
+FF65
+FF67 FF70
+FF9E FF9F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/NU.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NU.pl
new file mode 100644
index 00000000000..aa493a09add
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/NU.pl
@@ -0,0 +1,32 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Numeric'
+#
+return <<'END';
+0030 0039
+0660 0669
+066B 066C
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE6 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+17E0 17E9
+1810 1819
+1946 194F
+19D0 19D9
+104A0 104A9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/OP.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/OP.pl
new file mode 100644
index 00000000000..01c0761ad8a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/OP.pl
@@ -0,0 +1,76 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Open_Punctuation'
+#
+return <<'END';
+0028
+005B
+007B
+0F3A
+0F3C
+169B
+201A
+201E
+2045
+207D
+208D
+2329
+23B4
+2768
+276A
+276C
+276E
+2770
+2772
+2774
+27C5
+27E6
+27E8
+27EA
+2983
+2985
+2987
+2989
+298B
+298D
+298F
+2991
+2993
+2995
+2997
+29D8
+29DA
+29FC
+3008
+300A
+300C
+300E
+3010
+3014
+3016
+3018
+301A
+301D
+FD3E
+FE17
+FE35
+FE37
+FE39
+FE3B
+FE3D
+FE3F
+FE41
+FE43
+FE47
+FE59
+FE5B
+FE5D
+FF08
+FF3B
+FF5B
+FF5F
+FF62
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/PO.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/PO.pl
new file mode 100644
index 00000000000..f3765ef7b61
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/PO.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Postfix_Numeric'
+#
+return <<'END';
+0025
+00A2
+00B0
+060B
+2030 2037
+20A7
+2103
+2109
+FDFC
+FE6A
+FF05
+FFE0
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/PR.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/PR.pl
new file mode 100644
index 00000000000..65195054dd1
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/PR.pl
@@ -0,0 +1,27 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Prefix_Numeric'
+#
+return <<'END';
+0024
+002B
+005C
+00A3 00A5
+00B1
+09F2 09F3
+0AF1
+0BF9
+0E3F
+17DB
+20A0 20A6
+20A8 20B5
+2116
+2212 2213
+FE69
+FF04
+FFE1
+FFE5 FFE6
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/QU.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/QU.pl
new file mode 100644
index 00000000000..6f4386b1d24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/QU.pl
@@ -0,0 +1,21 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Quotation'
+#
+return <<'END';
+0022
+0027
+00AB
+00BB
+2018 2019
+201B 201D
+201F
+2039 203A
+23B6
+275B 275E
+2E00 2E0D
+2E1C 2E1D
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/SA.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SA.pl
new file mode 100644
index 00000000000..e6308583bf4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SA.pl
@@ -0,0 +1,34 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Complex_Context'
+#
+return <<'END';
+0E01 0E30
+0E32 0E33
+0E40 0E46
+0E81 0E82
+0E84
+0E87 0E88
+0E8A
+0E8D
+0E94 0E97
+0E99 0E9F
+0EA1 0EA3
+0EA5
+0EA7
+0EAA 0EAB
+0EAD 0EB0
+0EB2 0EB3
+0EBD
+0EC0 0EC4
+0EC6
+0EDC 0EDD
+1000 1021
+1023 1027
+1029 102A
+1050 1055
+1780 17B5
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/SG.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SG.pl
new file mode 100644
index 00000000000..65be30b6844
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SG.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Surrogate'
+#
+return <<'END';
+D800 DFFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/SP.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SP.pl
new file mode 100644
index 00000000000..ae815232b92
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SP.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Space'
+#
+return <<'END';
+0020
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/SY.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SY.pl
new file mode 100644
index 00000000000..ae43e49e922
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/SY.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Break_Symbols'
+#
+return <<'END';
+002F
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/WJ.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/WJ.pl
new file mode 100644
index 00000000000..e4375785a47
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/WJ.pl
@@ -0,0 +1,11 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Word_Joiner'
+#
+return <<'END';
+2060
+FEFF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/XX.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/XX.pl
new file mode 100644
index 00000000000..552f71808a7
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/XX.pl
@@ -0,0 +1,12 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'Unknown'
+#
+return <<'END';
+E000 F8FF
+F0000 FFFFD
+100000 10FFFD
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/lb/ZW.pl b/Master/tlpkg/tlperl/lib/unicore/lib/lb/ZW.pl
new file mode 100644
index 00000000000..8cc1e823e24
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/lb/ZW.pl
@@ -0,0 +1,10 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# Linebreak category 'ZWSpace'
+#
+return <<'END';
+200B
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/nt/De.pl b/Master/tlpkg/tlperl/lib/unicore/lib/nt/De.pl
new file mode 100644
index 00000000000..af3697fc7ac
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/nt/De.pl
@@ -0,0 +1,32 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# NumericType category 'Decimal'
+#
+return <<'END';
+0030 0039
+0660 0669
+06F0 06F9
+0966 096F
+09E6 09EF
+0A66 0A6F
+0AE6 0AEF
+0B66 0B6F
+0BE6 0BEF
+0C66 0C6F
+0CE6 0CEF
+0D66 0D6F
+0E50 0E59
+0ED0 0ED9
+0F20 0F29
+1040 1049
+17E0 17E9
+1810 1819
+1946 194F
+19D0 19D9
+FF10 FF19
+104A0 104A9
+1D7CE 1D7FF
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/nt/Di.pl b/Master/tlpkg/tlperl/lib/unicore/lib/nt/Di.pl
new file mode 100644
index 00000000000..8a29b9db9c3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/nt/Di.pl
@@ -0,0 +1,25 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# NumericType category 'Digit'
+#
+return <<'END';
+00B2 00B3
+00B9
+1369 1371
+2070
+2074 2079
+2080 2089
+2460 2468
+2474 247C
+2488 2490
+24EA
+24F5 24FD
+24FF
+2776 277E
+2780 2788
+278A 2792
+10A40 10A43
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/lib/nt/Nu.pl b/Master/tlpkg/tlperl/lib/unicore/lib/nt/Nu.pl
new file mode 100644
index 00000000000..587a3a6e113
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/lib/nt/Nu.pl
@@ -0,0 +1,42 @@
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by mktables from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+#
+# NumericType category 'Numeric'
+#
+return <<'END';
+00BC 00BE
+09F4 09F7
+09F9
+0BF0 0BF2
+0F2A 0F33
+1372 137C
+16EE 16F0
+17F0 17F9
+2153 2182
+2469 2473
+247D 2487
+2491 249B
+24EB 24F4
+24FE
+277F
+2789
+2793
+2CFD
+3007
+3021 3029
+3038 303A
+3192 3195
+3220 3229
+3251 325F
+3280 3289
+32B1 32BF
+10107 10133
+10140 10178
+1018A
+10320 10323
+1034A
+103D1 103D5
+10A44 10A47
+END
diff --git a/Master/tlpkg/tlperl/lib/unicore/mktables b/Master/tlpkg/tlperl/lib/unicore/mktables
new file mode 100644
index 00000000000..42003663849
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/mktables
@@ -0,0 +1,2197 @@
+## !!!!!!!!!!!!!! IF YOU MODIFY THIS FILE !!!!!!!!!!!!!!!!!!!!!!!!!
+## Any files created or read by this program should be listed in 'mktables.lst'
+
+#!/usr/bin/perl -w
+require 5.008; # Needs pack "U". Probably safest to run on 5.8.x
+use strict;
+use Carp;
+use File::Spec;
+
+##
+## mktables -- create the runtime Perl Unicode files (lib/unicore/**/*.pl)
+## from the Unicode database files (lib/unicore/*.txt).
+##
+
+## "Fuzzy" means this section in Unicode TR18:
+##
+## The recommended names for UCD properties and property values are in
+## PropertyAliases.txt [Prop] and PropertyValueAliases.txt
+## [PropValue]. There are both abbreviated names and longer, more
+## descriptive names. It is strongly recommended that both names be
+## recognized, and that loose matching of property names be used,
+## whereby the case distinctions, whitespace, hyphens, and underbar
+## are ignored.
+
+## Base names already used in lib/gc_sc (for avoiding 8.3 conflicts)
+my %BaseNames;
+
+##
+## Process any args.
+##
+my $Verbose = 0;
+my $MakeTestScript = 0;
+my $AlwaysWrite = 0;
+my $UseDir = "";
+my $FileList = "$0.lst";
+my $MakeList = 0;
+
+while (@ARGV)
+{
+ my $arg = shift @ARGV;
+ if ($arg eq '-v') {
+ $Verbose = 1;
+ } elsif ($arg eq '-q') {
+ $Verbose = 0;
+ } elsif ($arg eq '-w') {
+ $AlwaysWrite = 1; # update the files even if they havent changed
+ $FileList = "";
+ } elsif ($arg eq '-maketest') {
+ $MakeTestScript = 1;
+ } elsif ($arg eq '-makelist') {
+ $MakeList = 1;
+ } elsif ($arg eq '-C' && defined ($UseDir = shift)) {
+ -d $UseDir or die "Unknown directory '$UseDir'";
+ } elsif ($arg eq '-L' && defined ($FileList = shift)) {
+ -e $FileList or die "Filelist '$FileList' doesn't appear to exist!";
+ } else {
+ die "usage: $0 [-v|-q|-w|-C dir|-L filelist] [-maketest] [-makelist]\n",
+ " -v : Verbose Mode\n",
+ " -q : Quiet Mode\n",
+ " -w : Write files regardless\n",
+ " -maketest : Make test script\n",
+ " -makelist : Rewrite the file list based on current setup\n",
+ " -L filelist : Use this file list, (defaults to $0)\n",
+ " -C dir : Change to this directory before proceding\n";
+ }
+}
+
+if ($FileList) {
+ print "Reading file list '$FileList'\n"
+ if $Verbose;
+ open my $fh,"<",$FileList or die "Failed to read '$FileList':$!";
+ my @input;
+ my @output;
+ for my $list ( \@input, \@output ) {
+ while (<$fh>) {
+ s/^ \s+ | \s+ $//xg;
+ next if /^ \s* (?: \# .* )? $/x;
+ last if /^ =+ $/x;
+ my ( $file ) = split /\t/, $_;
+ push @$list, $file;
+ }
+ my %dupe;
+ @$list = grep !$dupe{ $_ }++, @$list;
+ }
+ close $fh;
+ die "No input or output files in '$FileList'!"
+ if !@input or !@output;
+ if ( $MakeList ) {
+ foreach my $file (@output) {
+ unlink $file;
+ }
+ }
+ if ( $Verbose ) {
+ print "Expecting ".scalar( @input )." input files. ",
+ "Checking ".scalar( @output )." output files.\n";
+ }
+ # we set maxtime to be the youngest input file, including $0 itself.
+ my $maxtime = -M $0; # do this before the chdir!
+ if ($UseDir) {
+ chdir $UseDir or die "Failed to chdir to '$UseDir':$!";
+ }
+ foreach my $in (@input) {
+ my $time = -M $in;
+ die "Missing input file '$in'" unless defined $time;
+ $maxtime = $time if $maxtime < $time;
+ }
+
+ # now we check to see if any output files are older than maxtime, if
+ # they are we need to continue on, otherwise we can presumably bail.
+ my $ok = 1;
+ foreach my $out (@output) {
+ if ( ! -e $out ) {
+ print "'$out' is missing.\n"
+ if $Verbose;
+ $ok = 0;
+ last;
+ }
+ if ( -M $out > $maxtime ) {
+ print "'$out' is too old.\n"
+ if $Verbose;
+ $ok = 0;
+ last;
+ }
+ }
+ if ($ok) {
+ print "Files seem to be ok, not bothering to rebuild.\n";
+ exit(0);
+ }
+ print "Must rebuild tables.\n"
+ if $Verbose;
+} else {
+ if ($Verbose) {
+ print "Not checking filelist.\n";
+ }
+ if ($UseDir) {
+ chdir $UseDir or die "Failed to chdir to '$UseDir':$!";
+ }
+}
+
+foreach my $lib ('To', 'lib',
+ map {File::Spec->catdir("lib",$_)}
+ qw(gc_sc dt bc hst ea jt lb nt ccc)) {
+ next if -d $lib;
+ mkdir $lib, 0755 or die "mkdir '$lib': $!";
+}
+
+my $LastUnicodeCodepoint = 0x10FFFF; # As of Unicode 3.1.1.
+
+my $HEADER=<<"EOF";
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file is built by $0 from e.g. UnicodeData.txt.
+# Any changes made here will be lost!
+
+EOF
+
+sub force_unlink {
+ my $filename = shift;
+ return unless -e $filename;
+ return if CORE::unlink($filename);
+ # We might need write permission
+ chmod 0777, $filename;
+ CORE::unlink($filename) or die "Couldn't unlink $filename: $!\n";
+}
+
+##
+## Given a filename and a reference to an array of lines,
+## write the lines to the file only if the contents have not changed.
+## Filename can be given as an arrayref of directory names
+##
+sub WriteIfChanged($\@)
+{
+ my $file = shift;
+ my $lines = shift;
+
+ $file = File::Spec->catfile(@$file) if ref $file;
+
+ my $TextToWrite = join '', @$lines;
+ if (open IN, $file) {
+ local($/) = undef;
+ my $PreviousText = <IN>;
+ close IN;
+ if ($PreviousText eq $TextToWrite) {
+ print "$file unchanged.\n" if $Verbose;
+ return unless $AlwaysWrite;
+ }
+ }
+ force_unlink ($file);
+ if (not open OUT, ">$file") {
+ die "$0: can't open $file for output: $!\n";
+ }
+ print "$file written.\n" if $Verbose;
+
+ print OUT $TextToWrite;
+ close OUT;
+}
+
+##
+## The main datastructure (a "Table") represents a set of code points that
+## are part of a particular quality (that are part of \pL, \p{InGreek},
+## etc.). They are kept as ranges of code points (starting and ending of
+## each range).
+##
+## For example, a range ASCII LETTERS would be represented as:
+## [ [ 0x41 => 0x5A, 'UPPER' ],
+## [ 0x61 => 0x7A, 'LOWER, ] ]
+##
+sub RANGE_START() { 0 } ## index into range element
+sub RANGE_END() { 1 } ## index into range element
+sub RANGE_NAME() { 2 } ## index into range element
+
+## Conceptually, these should really be folded into the 'Table' objects
+my %TableInfo;
+my %TableDesc;
+my %FuzzyNames;
+my %AliasInfo;
+my %CanonicalToOrig;
+
+##
+## Turn something like
+## OLD-ITALIC
+## into
+## OldItalic
+##
+sub CanonicalName($)
+{
+ my $orig = shift;
+ my $name = lc $orig;
+ $name =~ s/(?<![a-z])(\w)/\u$1/g;
+ $name =~ s/[-_\s]+//g;
+
+ $CanonicalToOrig{$name} = $orig if not $CanonicalToOrig{$name};
+ return $name;
+}
+
+
+##
+## Store the alias definitions for later use.
+##
+my %PropertyAlias;
+my %PropValueAlias;
+
+my %PA_reverse;
+my %PVA_reverse;
+
+sub Build_Aliases()
+{
+ ##
+ ## Most of the work with aliases doesn't occur here,
+ ## but rather in utf8_heavy.pl, which uses PVA.pl,
+
+ # Placate the warnings about used only once. (They are used again, but
+ # via a typeglob lookup)
+ %utf8::PropertyAlias = ();
+ %utf8::PA_reverse = ();
+ %utf8::PropValueAlias = ();
+ %utf8::PVA_reverse = ();
+ %utf8::PVA_abbr_map = ();
+
+ open PA, "< PropertyAliases.txt"
+ or confess "Can't open PropertyAliases.txt: $!";
+ while (<PA>) {
+ s/#.*//;
+ s/\s+$//;
+ next if /^$/;
+
+ my ($abbrev, $name) = split /\s*;\s*/;
+ next if $abbrev eq "n/a";
+ $PropertyAlias{$abbrev} = $name;
+ $PA_reverse{$name} = $abbrev;
+
+ # The %utf8::... versions use japhy's code originally from utf8_pva.pl
+ # However, it's moved here so that we build the tables at runtime.
+ tr/ _-//d for $abbrev, $name;
+ $utf8::PropertyAlias{lc $abbrev} = $name;
+ $utf8::PA_reverse{lc $name} = $abbrev;
+ }
+ close PA;
+
+ open PVA, "< PropValueAliases.txt"
+ or confess "Can't open PropValueAliases.txt: $!";
+ while (<PVA>) {
+ s/#.*//;
+ s/\s+$//;
+ next if /^$/;
+
+ my ($prop, @data) = split /\s*;\s*/;
+
+ if ($prop eq 'ccc') {
+ $PropValueAlias{$prop}{$data[1]} = [ @data[0,2] ];
+ $PVA_reverse{$prop}{$data[2]} = [ @data[0,1] ];
+ }
+ else {
+ next if $data[0] eq "n/a";
+ $PropValueAlias{$prop}{$data[0]} = $data[1];
+ $PVA_reverse{$prop}{$data[1]} = $data[0];
+ }
+
+ shift @data if $prop eq 'ccc';
+ next if $data[0] eq "n/a";
+
+ $data[1] =~ tr/ _-//d;
+ $utf8::PropValueAlias{$prop}{lc $data[0]} = $data[1];
+ $utf8::PVA_reverse{$prop}{lc $data[1]} = $data[0];
+
+ my $abbr_class = ($prop eq 'gc' or $prop eq 'sc') ? 'gc_sc' : $prop;
+ $utf8::PVA_abbr_map{$abbr_class}{lc $data[0]} = $data[0];
+ }
+ close PVA;
+
+ # backwards compatibility for L& -> LC
+ $utf8::PropValueAlias{gc}{'l&'} = $utf8::PropValueAlias{gc}{lc};
+ $utf8::PVA_abbr_map{gc_sc}{'l&'} = $utf8::PVA_abbr_map{gc_sc}{lc};
+
+}
+
+
+##
+## Associates a property ("Greek", "Lu", "Assigned",...) with a Table.
+##
+## Called like:
+## New_Prop(In => 'Greek', $Table, Desc => 'Greek Block', Fuzzy => 1);
+##
+## Normally, these parameters are set when the Table is created (when the
+## Table->New constructor is called), but there are times when it needs to
+## be done after-the-fact...)
+##
+sub New_Prop($$$@)
+{
+ my $Type = shift; ## "Is" or "In";
+ my $Name = shift;
+ my $Table = shift;
+
+ ## remaining args are optional key/val
+ my %Args = @_;
+
+ my $Fuzzy = delete $Args{Fuzzy};
+ my $Desc = delete $Args{Desc}; # description
+
+ $Name = CanonicalName($Name) if $Fuzzy;
+
+ ## sanity check a few args
+ if (%Args or ($Type ne 'Is' and $Type ne 'In') or not ref $Table) {
+ confess "$0: bad args to New_Prop"
+ }
+
+ if (not $TableInfo{$Type}->{$Name})
+ {
+ $TableInfo{$Type}->{$Name} = $Table;
+ $TableDesc{$Type}->{$Name} = $Desc;
+ if ($Fuzzy) {
+ $FuzzyNames{$Type}->{$Name} = $Name;
+ }
+ }
+}
+
+
+##
+## Creates a new Table object.
+##
+## Args are key/value pairs:
+## In => Name -- Name of "In" property to be associated with
+## Is => Name -- Name of "Is" property to be associated with
+## Fuzzy => Boolean -- True if name can be accessed "fuzzily"
+## Desc => String -- Description of the property
+##
+## No args are required.
+##
+sub Table::New
+{
+ my $class = shift;
+ my %Args = @_;
+
+ my $Table = bless [], $class;
+
+ my $Fuzzy = delete $Args{Fuzzy};
+ my $Desc = delete $Args{Desc};
+
+ for my $Type ('Is', 'In')
+ {
+ if (my $Name = delete $Args{$Type}) {
+ New_Prop($Type => $Name, $Table, Desc => $Desc, Fuzzy => $Fuzzy);
+ }
+ }
+
+ ## shouldn't have any left over
+ if (%Args) {
+ confess "$0: bad args to Table->New"
+ }
+
+ return $Table;
+}
+
+
+##
+## Returns the maximum code point currently in the table.
+##
+sub Table::Max
+{
+ my $last = $_[0]->[-1]; ## last code point
+ confess "oops" unless $last; ## must have code points to have a max
+ return $last->[RANGE_END];
+}
+
+##
+## Replaces the codepoints in the Table with those in the Table given
+## as an arg. (NOTE: this is not a "deep copy").
+##
+sub Table::Replace($$)
+{
+ my $Table = shift; #self
+ my $New = shift;
+
+ @$Table = @$New;
+}
+
+##
+## Given a new code point, make the last range of the Table extend to
+## include the new (and all intervening) code points.
+##
+## Takes the time to make sure that the extension is valid.
+##
+sub Table::Extend
+{
+ my $Table = shift; #self
+ my $codepoint = shift;
+
+ my $PrevMax = $Table->Max;
+
+ confess "oops ($codepoint <= $PrevMax)" if $codepoint <= $PrevMax;
+
+ $Table->ExtendNoCheck($codepoint);
+}
+
+
+##
+## Given a new code point, make the last range of the Table extend to
+## include the new (and all intervening) code points.
+##
+## Does NOT check that the extension is valid. Assumes that the caller
+## has already made this check.
+##
+sub Table::ExtendNoCheck
+{
+ ## Optmized adding: Assumes $Table and $codepoint as parms
+ $_[0]->[-1]->[RANGE_END] = $_[1];
+}
+
+##
+## Given a code point range start and end (and optional name), blindly
+## append them to the list of ranges for the Table.
+##
+## NOTE: Code points must be added in strictly ascending numeric order.
+##
+sub Table::RawAppendRange
+{
+ my $Table = shift; #self
+ my $start = shift;
+ my $end = shift;
+ my $name = shift;
+ $name = "" if not defined $name; ## warning: $name can be "0"
+
+ push @$Table, [ $start, # RANGE_START
+ $end, # RANGE_END
+ $name ]; # RANGE_NAME
+}
+
+##
+## Given a code point (and optional name), add it to the Table.
+##
+## NOTE: Code points must be added in strictly ascending numeric order.
+##
+sub Table::Append
+{
+ my $Table = shift; #self
+ my $codepoint = shift;
+ my $name = shift;
+ $name = "" if not defined $name; ## warning: $name can be "0"
+
+ ##
+ ## If we've already got a range working, and this code point is the next
+ ## one in line, and if the name is the same, just extend the current range.
+ ##
+ my $last = $Table->[-1];
+ if ($last
+ and
+ $last->[RANGE_END] == $codepoint - 1
+ and
+ $last->[RANGE_NAME] eq $name)
+ {
+ $Table->ExtendNoCheck($codepoint);
+ }
+ else
+ {
+ $Table->RawAppendRange($codepoint, $codepoint, $name);
+ }
+}
+
+##
+## Given a code point range starting value and ending value (and name),
+## Add the range to teh Table.
+##
+## NOTE: Code points must be added in strictly ascending numeric order.
+##
+sub Table::AppendRange
+{
+ my $Table = shift; #self
+ my $start = shift;
+ my $end = shift;
+ my $name = shift;
+ $name = "" if not defined $name; ## warning: $name can be "0"
+
+ $Table->Append($start, $name);
+ $Table->Extend($end) if $end > $start;
+}
+
+##
+## Return a new Table that represents all code points not in the Table.
+##
+sub Table::Invert
+{
+ my $Table = shift; #self
+
+ my $New = Table->New();
+ my $max = -1;
+ for my $range (@$Table)
+ {
+ my $start = $range->[RANGE_START];
+ my $end = $range->[RANGE_END];
+ if ($start-1 >= $max+1) {
+ $New->AppendRange($max+1, $start-1, "");
+ }
+ $max = $end;
+ }
+ if ($max+1 < $LastUnicodeCodepoint) {
+ $New->AppendRange($max+1, $LastUnicodeCodepoint);
+ }
+ return $New;
+}
+
+##
+## Merges any number of other tables with $self, returning the new table.
+## (existing tables are not modified)
+##
+##
+## Args may be Tables, or individual code points (as integers).
+##
+## Can be called as either a constructor or a method.
+##
+sub Table::Merge
+{
+ shift(@_) if not ref $_[0]; ## if called as a constructor, lose the class
+ my @Tables = @_;
+
+ ## Accumulate all records from all tables
+ my @Records;
+ for my $Arg (@Tables)
+ {
+ if (ref $Arg) {
+ ## arg is a table -- get its ranges
+ push @Records, @$Arg;
+ } else {
+ ## arg is a codepoint, make a range
+ push @Records, [ $Arg, $Arg ]
+ }
+ }
+
+ ## sort by range start, with longer ranges coming first.
+ my ($first, @Rest) = sort {
+ ($a->[RANGE_START] <=> $b->[RANGE_START])
+ or
+ ($b->[RANGE_END] <=> $b->[RANGE_END])
+ } @Records;
+
+ my $New = Table->New();
+
+ ## Ensuring the first range is there makes the subsequent loop easier
+ $New->AppendRange($first->[RANGE_START],
+ $first->[RANGE_END]);
+
+ ## Fold in records so long as they add new information.
+ for my $set (@Rest)
+ {
+ my $start = $set->[RANGE_START];
+ my $end = $set->[RANGE_END];
+ if ($start > $New->Max) {
+ $New->AppendRange($start, $end);
+ } elsif ($end > $New->Max) {
+ $New->ExtendNoCheck($end);
+ }
+ }
+
+ return $New;
+}
+
+##
+## Given a filename, write a representation of the Table to a file.
+## May have an optional comment as a 2nd arg.
+## Filename may actually be an arrayref of directories
+##
+sub Table::Write
+{
+ my $Table = shift; #self
+ my $filename = shift;
+ my $comment = shift;
+
+ my @OUT = $HEADER;
+ if (defined $comment) {
+ $comment =~ s/\s+\Z//;
+ $comment =~ s/^/# /gm;
+ push @OUT, "#\n$comment\n#\n";
+ }
+ push @OUT, "return <<'END';\n";
+
+ for my $set (@$Table)
+ {
+ my $start = $set->[RANGE_START];
+ my $end = $set->[RANGE_END];
+ my $name = $set->[RANGE_NAME];
+
+ if ($start == $end) {
+ push @OUT, sprintf "%04X\t\t%s\n", $start, $name;
+ } else {
+ push @OUT, sprintf "%04X\t%04X\t%s\n", $start, $end, $name;
+ }
+ }
+
+ push @OUT, "END\n";
+
+ WriteIfChanged($filename, @OUT);
+}
+
+## This used only for making the test script.
+## helper function
+sub IsUsable($)
+{
+ my $code = shift;
+ return 0 if $code <= 0x0000; ## don't use null
+ return 0 if $code >= $LastUnicodeCodepoint; ## keep in range
+ return 0 if ($code >= 0xD800 and $code <= 0xDFFF); ## no surrogates
+ return 0 if ($code >= 0xFDD0 and $code <= 0xFDEF); ## utf8.c says no good
+ return 0 if (($code & 0xFFFF) == 0xFFFE); ## utf8.c says no good
+ return 0 if (($code & 0xFFFF) == 0xFFFF); ## utf8.c says no good
+ return 1;
+}
+
+## Return a code point that's part of the table.
+## Returns nothing if the table is empty (or covers only surrogates).
+## This used only for making the test script.
+sub Table::ValidCode
+{
+ my $Table = shift; #self
+ for my $set (@$Table) {
+ return $set->[RANGE_END] if IsUsable($set->[RANGE_END]);
+ }
+ return ();
+}
+
+## Return a code point that's not part of the table
+## Returns nothing if the table covers all code points.
+## This used only for making the test script.
+sub Table::InvalidCode
+{
+ my $Table = shift; #self
+
+ return 0x1234 if not @$Table;
+
+ for my $set (@$Table)
+ {
+ if (IsUsable($set->[RANGE_END] + 1))
+ {
+ return $set->[RANGE_END] + 1;
+ }
+
+ if (IsUsable($set->[RANGE_START] - 1))
+ {
+ return $set->[RANGE_START] - 1;
+ }
+ }
+ return ();
+}
+
+###########################################################################
+###########################################################################
+###########################################################################
+
+
+##
+## Called like:
+## New_Alias(Is => 'All', SameAs => 'Any', Fuzzy => 1);
+##
+## The args must be in that order, although the Fuzzy pair may be omitted.
+##
+## This creates 'IsAll' as an alias for 'IsAny'
+##
+sub New_Alias($$$@)
+{
+ my $Type = shift; ## "Is" or "In"
+ my $Alias = shift;
+ my $SameAs = shift; # expecting "SameAs" -- just ignored
+ my $Name = shift;
+
+ ## remaining args are optional key/val
+ my %Args = @_;
+
+ my $Fuzzy = delete $Args{Fuzzy};
+
+ ## sanity check a few args
+ if (%Args or ($Type ne 'Is' and $Type ne 'In') or $SameAs ne 'SameAs') {
+ confess "$0: bad args to New_Alias"
+ }
+
+ $Alias = CanonicalName($Alias) if $Fuzzy;
+
+ if (not $TableInfo{$Type}->{$Name})
+ {
+ my $CName = CanonicalName($Name);
+ if ($TableInfo{$Type}->{$CName}) {
+ confess "$0: Use canonical form '$CName' instead of '$Name' for alias.";
+ } else {
+ confess "$0: don't have original $Type => $Name to make alias\n";
+ }
+ }
+ if ($TableInfo{$Alias}) {
+ confess "$0: already have original $Type => $Alias; can't make alias";
+ }
+ $AliasInfo{$Type}->{$Name} = $Alias;
+ if ($Fuzzy) {
+ $FuzzyNames{$Type}->{$Alias} = $Name;
+ }
+
+}
+
+
+## All assigned code points
+my $Assigned = Table->New(Is => 'Assigned',
+ Desc => "All assigned code points",
+ Fuzzy => 0);
+
+my $Name = Table->New(); ## all characters, individually by name
+my $General = Table->New(); ## all characters, grouped by category
+my %General;
+my %Cat;
+
+## Simple Data::Dumper alike. Good enough for our needs. We can't use the real
+## thing as we have to run under miniperl
+sub simple_dumper {
+ my @lines;
+ my $item;
+ foreach $item (@_) {
+ if (ref $item) {
+ if (ref $item eq 'ARRAY') {
+ push @lines, "[\n", simple_dumper (@$item), "],\n";
+ } elsif (ref $item eq 'HASH') {
+ push @lines, "{\n", simple_dumper (%$item), "},\n";
+ } else {
+ die "Can't cope with $item";
+ }
+ } else {
+ if (defined $item) {
+ my $copy = $item;
+ $copy =~ s/([\'\\])/\\$1/gs;
+ push @lines, "'$copy',\n";
+ } else {
+ push @lines, "undef,\n";
+ }
+ }
+ }
+ @lines;
+}
+
+##
+## Process UnicodeData.txt (Categories, etc.)
+##
+sub UnicodeData_Txt()
+{
+ my $Bidi = Table->New();
+ my $Deco = Table->New();
+ my $Comb = Table->New();
+ my $Number = Table->New();
+ my $Mirrored = Table->New();#Is => 'Mirrored',
+ #Desc => "Mirrored in bidirectional text",
+ #Fuzzy => 0);
+
+ my %DC;
+ my %Bidi;
+ my %Number;
+ $DC{can} = Table->New();
+ $DC{com} = Table->New();
+
+ ## Initialize Perl-generated categories
+ ## (Categories from UnicodeData.txt are auto-initialized in gencat)
+ $Cat{Alnum} =
+ Table->New(Is => 'Alnum', Desc => "[[:Alnum:]]", Fuzzy => 0);
+ $Cat{Alpha} =
+ Table->New(Is => 'Alpha', Desc => "[[:Alpha:]]", Fuzzy => 0);
+ $Cat{ASCII} =
+ Table->New(Is => 'ASCII', Desc => "[[:ASCII:]]", Fuzzy => 0);
+ $Cat{Blank} =
+ Table->New(Is => 'Blank', Desc => "[[:Blank:]]", Fuzzy => 0);
+ $Cat{Cntrl} =
+ Table->New(Is => 'Cntrl', Desc => "[[:Cntrl:]]", Fuzzy => 0);
+ $Cat{Digit} =
+ Table->New(Is => 'Digit', Desc => "[[:Digit:]]", Fuzzy => 0);
+ $Cat{Graph} =
+ Table->New(Is => 'Graph', Desc => "[[:Graph:]]", Fuzzy => 0);
+ $Cat{Lower} =
+ Table->New(Is => 'Lower', Desc => "[[:Lower:]]", Fuzzy => 0);
+ $Cat{Print} =
+ Table->New(Is => 'Print', Desc => "[[:Print:]]", Fuzzy => 0);
+ $Cat{Punct} =
+ Table->New(Is => 'Punct', Desc => "[[:Punct:]]", Fuzzy => 0);
+ $Cat{Space} =
+ Table->New(Is => 'Space', Desc => "[[:Space:]]", Fuzzy => 0);
+ $Cat{Title} =
+ Table->New(Is => 'Title', Desc => "[[:Title:]]", Fuzzy => 0);
+ $Cat{Upper} =
+ Table->New(Is => 'Upper', Desc => "[[:Upper:]]", Fuzzy => 0);
+ $Cat{XDigit} =
+ Table->New(Is => 'XDigit', Desc => "[[:XDigit:]]", Fuzzy => 0);
+ $Cat{Word} =
+ Table->New(Is => 'Word', Desc => "[[:Word:]]", Fuzzy => 0);
+ $Cat{SpacePerl} =
+ Table->New(Is => 'SpacePerl', Desc => '\s', Fuzzy => 0);
+
+ my %To;
+ $To{Upper} = Table->New();
+ $To{Lower} = Table->New();
+ $To{Title} = Table->New();
+ $To{Digit} = Table->New();
+
+ sub gencat($$$$)
+ {
+ my ($name, ## Name ("LATIN CAPITAL LETTER A")
+ $cat, ## Category ("Lu", "Zp", "Nd", etc.)
+ $code, ## Code point (as an integer)
+ $op) = @_;
+
+ my $MajorCat = substr($cat, 0, 1); ## L, M, Z, S, etc
+
+ $Assigned->$op($code);
+ $Name->$op($code, $name);
+ $General->$op($code, $cat);
+
+ ## add to the sub category (e.g. "Lu", "Nd", "Cf", ..)
+ $Cat{$cat} ||= Table->New(Is => $cat,
+ Desc => "General Category '$cat'",
+ Fuzzy => 0);
+ $Cat{$cat}->$op($code);
+
+ ## add to the major category (e.g. "L", "N", "C", ...)
+ $Cat{$MajorCat} ||= Table->New(Is => $MajorCat,
+ Desc => "Major Category '$MajorCat'",
+ Fuzzy => 0);
+ $Cat{$MajorCat}->$op($code);
+
+ ($General{$name} ||= Table->New)->$op($code, $name);
+
+ # 005F: SPACING UNDERSCORE
+ $Cat{Word}->$op($code) if $cat =~ /^[LMN]|Pc/;
+ $Cat{Alnum}->$op($code) if $cat =~ /^[LM]|Nd/;
+ $Cat{Alpha}->$op($code) if $cat =~ /^[LM]/;
+
+ my $isspace =
+ ($cat =~ /Zs|Zl|Zp/ &&
+ $code != 0x200B) # 200B is ZWSP which is for line break control
+ # and therefore it is not part of "space" even while it is "Zs".
+ || $code == 0x0009 # 0009: HORIZONTAL TAB
+ || $code == 0x000A # 000A: LINE FEED
+ || $code == 0x000B # 000B: VERTICAL TAB
+ || $code == 0x000C # 000C: FORM FEED
+ || $code == 0x000D # 000D: CARRIAGE RETURN
+ || $code == 0x0085 # 0085: NEL
+
+ ;
+
+ $Cat{Space}->$op($code) if $isspace;
+
+ $Cat{SpacePerl}->$op($code) if $isspace
+ && $code != 0x000B; # Backward compat.
+
+ $Cat{Blank}->$op($code) if $isspace
+ && !($code == 0x000A ||
+ $code == 0x000B ||
+ $code == 0x000C ||
+ $code == 0x000D ||
+ $code == 0x0085 ||
+ $cat =~ /^Z[lp]/);
+
+ $Cat{Digit}->$op($code) if $cat eq "Nd";
+ $Cat{Upper}->$op($code) if $cat eq "Lu";
+ $Cat{Lower}->$op($code) if $cat eq "Ll";
+ $Cat{Title}->$op($code) if $cat eq "Lt";
+ $Cat{ASCII}->$op($code) if $code <= 0x007F;
+ $Cat{Cntrl}->$op($code) if $cat =~ /^C/;
+ my $isgraph = !$isspace && $cat !~ /Cc|Cs|Cn/;
+ $Cat{Graph}->$op($code) if $isgraph;
+ $Cat{Print}->$op($code) if $isgraph || $isspace;
+ $Cat{Punct}->$op($code) if $cat =~ /^P/;
+
+ $Cat{XDigit}->$op($code) if ($code >= 0x30 && $code <= 0x39) ## 0..9
+ || ($code >= 0x41 && $code <= 0x46) ## A..F
+ || ($code >= 0x61 && $code <= 0x66); ## a..f
+ }
+
+ ## open ane read file.....
+ if (not open IN, "UnicodeData.txt") {
+ die "$0: UnicodeData.txt: $!\n";
+ }
+
+ ##
+ ## For building \p{_CombAbove} and \p{_CanonDCIJ}
+ ##
+ my %_Above_HexCodes; ## Hexcodes for chars with $comb == 230 ("ABOVE")
+
+ my %CodeToDeco; ## Maps code to decomp. list for chars with first
+ ## decomp. char an "i" or "j" (for \p{_CanonDCIJ})
+
+ ## This is filled in as we go....
+ my $CombAbove = Table->New(Is => '_CombAbove',
+ Desc => '(for internal casefolding use)',
+ Fuzzy => 0);
+
+ while (<IN>)
+ {
+ next unless /^[0-9A-Fa-f]+;/;
+ s/\s+$//;
+
+ my ($hexcode, ## code point in hex (e.g. "0041")
+ $name, ## character name (e.g. "LATIN CAPITAL LETTER A")
+ $cat, ## category (e.g. "Lu")
+ $comb, ## Canonical combining class (e.t. "230")
+ $bidi, ## directional category (e.g. "L")
+ $deco, ## decomposition mapping
+ $decimal, ## decimal digit value
+ $digit, ## digit value
+ $number, ## numeric value
+ $mirrored, ## mirrored
+ $unicode10, ## name in Unicode 1.0
+ $comment, ## comment field
+ $upper, ## uppercase mapping
+ $lower, ## lowercase mapping
+ $title, ## titlecase mapping
+ ) = split(/\s*;\s*/);
+
+ # Note that in Unicode 3.2 there will be names like
+ # LINE FEED (LF), which probably means that \N{} needs
+ # to cope also with LINE FEED and LF.
+ $name = $unicode10 if $name eq '<control>' && $unicode10 ne '';
+
+ my $code = hex($hexcode);
+
+ if ($comb and $comb == 230) {
+ $CombAbove->Append($code);
+ $_Above_HexCodes{$hexcode} = 1;
+ }
+
+ ## Used in building \p{_CanonDCIJ}
+ if ($deco and $deco =~ m/^006[9A]\b/) {
+ $CodeToDeco{$code} = $deco;
+ }
+
+ ##
+ ## There are a few pairs of lines like:
+ ## AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+ ## D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+ ## that define ranges.
+ ##
+ if ($name =~ /^<(.+), (First|Last)>$/)
+ {
+ $name = $1;
+ gencat($name, $cat, $code, $2 eq 'First' ? 'Append' : 'Extend');
+ #New_Prop(In => $name, $General{$name}, Fuzzy => 1);
+ }
+ else
+ {
+ ## normal (single-character) lines
+ gencat($name, $cat, $code, 'Append');
+
+ # No Append() here since since several codes may map into one.
+ $To{Upper}->RawAppendRange($code, $code, $upper) if $upper;
+ $To{Lower}->RawAppendRange($code, $code, $lower) if $lower;
+ $To{Title}->RawAppendRange($code, $code, $title) if $title;
+ $To{Digit}->Append($code, $decimal) if length $decimal;
+
+ $Bidi->Append($code, $bidi);
+ $Comb->Append($code, $comb) if $comb;
+ $Number->Append($code, $number) if length $number;
+
+ length($decimal) and ($Number{De} ||= Table->New())->Append($code)
+ or
+ length($digit) and ($Number{Di} ||= Table->New())->Append($code)
+ or
+ length($number) and ($Number{Nu} ||= Table->New())->Append($code);
+
+ $Mirrored->Append($code) if $mirrored eq "Y";
+
+ $Bidi{$bidi} ||= Table->New();#Is => "bt/$bidi",
+ #Desc => "Bi-directional category '$bidi'",
+ #Fuzzy => 0);
+ $Bidi{$bidi}->Append($code);
+
+ if ($deco)
+ {
+ $Deco->Append($code, $deco);
+ if ($deco =~/^<(\w+)>/)
+ {
+ my $dshort = $PVA_reverse{dt}{ucfirst lc $1};
+ $DC{com}->Append($code);
+
+ $DC{$dshort} ||= Table->New();
+ $DC{$dshort}->Append($code);
+ }
+ else
+ {
+ $DC{can}->Append($code);
+ }
+ }
+ }
+ }
+ close IN;
+
+ ##
+ ## Tidy up a few special cases....
+ ##
+
+ $Cat{Cn} = $Assigned->Invert; ## Cn is everything that doesn't exist
+ New_Prop(Is => 'Cn',
+ $Cat{Cn},
+ Desc => "General Category 'Cn' [not functional in Perl]",
+ Fuzzy => 0);
+
+ ## Unassigned is the same as 'Cn'
+ New_Alias(Is => 'Unassigned', SameAs => 'Cn', Fuzzy => 0);
+
+ $Cat{C}->Replace($Cat{C}->Merge($Cat{Cn})); ## Now merge in Cn into C
+
+
+ # LC is Ll, Lu, and Lt.
+ # (used to be L& or L_, but PropValueAliases.txt defines it as LC)
+ New_Prop(Is => 'LC',
+ Table->Merge(@Cat{qw[Ll Lu Lt]}),
+ Desc => '[\p{Ll}\p{Lu}\p{Lt}]',
+ Fuzzy => 0);
+
+ ## Any and All are all code points.
+ my $Any = Table->New(Is => 'Any',
+ Desc => sprintf("[\\x{0000}-\\x{%X}]",
+ $LastUnicodeCodepoint),
+ Fuzzy => 0);
+ $Any->RawAppendRange(0, $LastUnicodeCodepoint);
+
+ New_Alias(Is => 'All', SameAs => 'Any', Fuzzy => 0);
+
+ ##
+ ## Build special properties for Perl's internal case-folding needs:
+ ## \p{_CaseIgnorable}
+ ## \p{_CanonDCIJ}
+ ## \p{_CombAbove}
+ ## _CombAbove was built above. Others are built here....
+ ##
+
+ ## \p{_CaseIgnorable} is [\p{Mn}\0x00AD\x2010]
+ New_Prop(Is => '_CaseIgnorable',
+ Table->Merge($Cat{Mn},
+ 0x00AD, #SOFT HYPHEN
+ 0x2010), #HYPHEN
+ Desc => '(for internal casefolding use)',
+ Fuzzy => 0);
+
+
+ ## \p{_CanonDCIJ} is fairly complex...
+ my $CanonCDIJ = Table->New(Is => '_CanonDCIJ',
+ Desc => '(for internal casefolding use)',
+ Fuzzy => 0);
+ ## It contains the ASCII 'i' and 'j'....
+ $CanonCDIJ->Append(0x0069); # ASCII ord("i")
+ $CanonCDIJ->Append(0x006A); # ASCII ord("j")
+ ## ...and any character with a decomposition that starts with either of
+ ## those code points, but only if the decomposition does not have any
+ ## combining character with the "ABOVE" canonical combining class.
+ for my $code (sort { $a <=> $b} keys %CodeToDeco)
+ {
+ ## Need to ensure that all decomposition characters do not have
+ ## a %HexCodeToComb in %AboveCombClasses.
+ my $want = 1;
+ for my $deco_hexcode (split / /, $CodeToDeco{$code})
+ {
+ if (exists $_Above_HexCodes{$deco_hexcode}) {
+ ## one of the decmposition chars has an ABOVE combination
+ ## class, so we're not interested in this one
+ $want = 0;
+ last;
+ }
+ }
+ if ($want) {
+ $CanonCDIJ->Append($code);
+ }
+ }
+
+
+
+ ##
+ ## Now dump the files.
+ ##
+ $Name->Write("Name.pl");
+
+ {
+ my @PVA = $HEADER;
+ foreach my $name (qw (PropertyAlias PA_reverse PropValueAlias
+ PVA_reverse PVA_abbr_map)) {
+ # Should I really jump through typeglob hoops just to avoid a
+ # symbolic reference? (%{"utf8::$name})
+ push @PVA, "\n", "\%utf8::$name = (\n",
+ simple_dumper (%{$utf8::{$name}}), ");\n";
+ }
+ push @PVA, "1;\n";
+ WriteIfChanged("PVA.pl", @PVA);
+ }
+
+ # $Bidi->Write("Bidirectional.pl");
+ for (keys %Bidi) {
+ $Bidi{$_}->Write(
+ ["lib","bc","$_.pl"],
+ "BidiClass category '$PropValueAlias{bc}{$_}'"
+ );
+ }
+
+ $Comb->Write("CombiningClass.pl");
+ for (keys %{ $PropValueAlias{ccc} }) {
+ my ($code, $name) = @{ $PropValueAlias{ccc}{$_} };
+ (my $c = Table->New())->Append($code);
+ $c->Write(
+ ["lib","ccc","$_.pl"],
+ "CombiningClass category '$name'"
+ );
+ }
+
+ $Deco->Write("Decomposition.pl");
+ for (keys %DC) {
+ $DC{$_}->Write(
+ ["lib","dt","$_.pl"],
+ "DecompositionType category '$PropValueAlias{dt}{$_}'"
+ );
+ }
+
+ # $Number->Write("Number.pl");
+ for (keys %Number) {
+ $Number{$_}->Write(
+ ["lib","nt","$_.pl"],
+ "NumericType category '$PropValueAlias{nt}{$_}'"
+ );
+ }
+
+ # $General->Write("Category.pl");
+
+ for my $to (sort keys %To) {
+ $To{$to}->Write(["To","$to.pl"]);
+ }
+
+ for (keys %{ $PropValueAlias{gc} }) {
+ New_Alias(Is => $PropValueAlias{gc}{$_}, SameAs => $_, Fuzzy => 1);
+ }
+}
+
+##
+## Process LineBreak.txt
+##
+sub LineBreak_Txt()
+{
+ if (not open IN, "LineBreak.txt") {
+ die "$0: LineBreak.txt: $!\n";
+ }
+
+ my $Lbrk = Table->New();
+ my %Lbrk;
+
+ while (<IN>)
+ {
+ next unless /^([0-9A-Fa-f]+)(?:\.\.([0-9A-Fa-f]+))?\s*;\s*(\w+)/;
+
+ my ($first, $last, $lbrk) = (hex($1), hex($2||""), $3);
+
+ $Lbrk->Append($first, $lbrk);
+
+ $Lbrk{$lbrk} ||= Table->New();
+ $Lbrk{$lbrk}->Append($first);
+
+ if ($last) {
+ $Lbrk->Extend($last);
+ $Lbrk{$lbrk}->Extend($last);
+ }
+ }
+ close IN;
+
+ # $Lbrk->Write("Lbrk.pl");
+
+
+ for (keys %Lbrk) {
+ $Lbrk{$_}->Write(
+ ["lib","lb","$_.pl"],
+ "Linebreak category '$PropValueAlias{lb}{$_}'"
+ );
+ }
+}
+
+##
+## Process ArabicShaping.txt.
+##
+sub ArabicShaping_txt()
+{
+ if (not open IN, "ArabicShaping.txt") {
+ die "$0: ArabicShaping.txt: $!\n";
+ }
+
+ my $ArabLink = Table->New();
+ my $ArabLinkGroup = Table->New();
+
+ my %JoinType;
+
+ while (<IN>)
+ {
+ next unless /^[0-9A-Fa-f]+;/;
+ s/\s+$//;
+
+ my ($hexcode, $name, $link, $linkgroup) = split(/\s*;\s*/);
+ my $code = hex($hexcode);
+ $ArabLink->Append($code, $link);
+ $ArabLinkGroup->Append($code, $linkgroup);
+
+ $JoinType{$link} ||= Table->New(Is => "JoinType$link");
+ $JoinType{$link}->Append($code);
+ }
+ close IN;
+
+ # $ArabLink->Write("ArabLink.pl");
+ # $ArabLinkGroup->Write("ArabLnkGrp.pl");
+
+
+ for (keys %JoinType) {
+ $JoinType{$_}->Write(
+ ["lib","jt","$_.pl"],
+ "JoiningType category '$PropValueAlias{jt}{$_}'"
+ );
+ }
+}
+
+##
+## Process EastAsianWidth.txt.
+##
+sub EastAsianWidth_txt()
+{
+ if (not open IN, "EastAsianWidth.txt") {
+ die "$0: EastAsianWidth.txt: $!\n";
+ }
+
+ my %EAW;
+
+ while (<IN>)
+ {
+ next unless /^[0-9A-Fa-f]+(\.\.[0-9A-Fa-f]+)?;/;
+ s/#.*//;
+ s/\s+$//;
+
+ my ($hexcodes, $pv) = split(/\s*;\s*/);
+ $EAW{$pv} ||= Table->New(Is => "EastAsianWidth$pv");
+ my ($start, $end) = split(/\.\./, $hexcodes);
+ if (defined $end) {
+ $EAW{$pv}->AppendRange(hex($start), hex($end));
+ } else {
+ $EAW{$pv}->Append(hex($start));
+ }
+ }
+ close IN;
+
+
+ for (keys %EAW) {
+ $EAW{$_}->Write(
+ ["lib","ea","$_.pl"],
+ "EastAsianWidth category '$PropValueAlias{ea}{$_}'"
+ );
+ }
+}
+
+##
+## Process HangulSyllableType.txt.
+##
+sub HangulSyllableType_txt()
+{
+ if (not open IN, "HangulSyllableType.txt") {
+ die "$0: HangulSyllableType.txt: $!\n";
+ }
+
+ my %HST;
+
+ while (<IN>)
+ {
+ next unless /^([0-9A-Fa-f]+)(?:\.\.([0-9A-Fa-f]+))?\s*;\s*(\w+)/;
+ my ($first, $last, $pv) = (hex($1), hex($2||""), $3);
+
+ $HST{$pv} ||= Table->New(Is => "HangulSyllableType$pv");
+ $HST{$pv}->Append($first);
+
+ if ($last) { $HST{$pv}->Extend($last) }
+ }
+ close IN;
+
+ for (keys %HST) {
+ $HST{$_}->Write(
+ ["lib","hst","$_.pl"],
+ "HangulSyllableType category '$PropValueAlias{hst}{$_}'"
+ );
+ }
+}
+
+##
+## Process Jamo.txt.
+##
+sub Jamo_txt()
+{
+ if (not open IN, "Jamo.txt") {
+ die "$0: Jamo.txt: $!\n";
+ }
+ my $Short = Table->New();
+
+ while (<IN>)
+ {
+ next unless /^([0-9A-Fa-f]+)\s*;\s*(\w*)/;
+ my ($code, $short) = (hex($1), $2);
+
+ $Short->Append($code, $short);
+ }
+ close IN;
+ # $Short->Write("JamoShort.pl");
+}
+
+##
+## Process Scripts.txt.
+##
+sub Scripts_txt()
+{
+ my @ScriptInfo;
+
+ if (not open(IN, "Scripts.txt")) {
+ die "$0: Scripts.txt: $!\n";
+ }
+ while (<IN>) {
+ next unless /^([0-9A-Fa-f]+)(?:\.\.([0-9A-Fa-f]+))?\s*;\s*(.+?)\s*\#/;
+
+ # Wait until all the scripts have been read since
+ # they are not listed in numeric order.
+ push @ScriptInfo, [ hex($1), hex($2||""), $3 ];
+ }
+ close IN;
+
+ # Now append the scripts properties in their code point order.
+
+ my %Script;
+ my $Scripts = Table->New();
+
+ for my $script (sort { $a->[0] <=> $b->[0] } @ScriptInfo)
+ {
+ my ($first, $last, $name) = @$script;
+ $Scripts->Append($first, $name);
+
+ $Script{$name} ||= Table->New(Is => $name,
+ Desc => "Script '$name'",
+ Fuzzy => 1);
+ $Script{$name}->Append($first, $name);
+
+ if ($last) {
+ $Scripts->Extend($last);
+ $Script{$name}->Extend($last);
+ }
+ }
+
+ # $Scripts->Write("Scripts.pl");
+
+ ## Common is everything not explicitly assigned to a Script
+ ##
+ ## ***shouldn't this be intersected with \p{Assigned}? ******
+ ##
+ New_Prop(Is => 'Common',
+ $Scripts->Invert,
+ Desc => 'Pseudo-Script of codepoints not in other Unicode scripts',
+ Fuzzy => 1);
+}
+
+##
+## Given a name like "Close Punctuation", return a regex (that when applied
+## with /i) matches any valid form of that name (e.g. "ClosePunctuation",
+## "Close-Punctuation", etc.)
+##
+## Accept any space, dash, or underbar where in the official name there is
+## space or a dash (or underbar, but there never is).
+##
+##
+sub NameToRegex($)
+{
+ my $Name = shift;
+ $Name =~ s/[- _]/(?:[-_]|\\s+)?/g;
+ return $Name;
+}
+
+##
+## Process Blocks.txt.
+##
+sub Blocks_txt()
+{
+ my $Blocks = Table->New();
+ my %Blocks;
+
+ if (not open IN, "Blocks.txt") {
+ die "$0: Blocks.txt: $!\n";
+ }
+
+ while (<IN>)
+ {
+ #next if not /Private Use$/;
+ next if not /^([0-9A-Fa-f]+)\.\.([0-9A-Fa-f]+)\s*;\s*(.+?)\s*$/;
+
+ my ($first, $last, $name) = (hex($1), hex($2), $3);
+
+ $Blocks->Append($first, $name);
+
+ $Blocks{$name} ||= Table->New(In => $name,
+ Desc => "Block '$name'",
+ Fuzzy => 1);
+ $Blocks{$name}->Append($first, $name);
+
+ if ($last and $last != $first) {
+ $Blocks->Extend($last);
+ $Blocks{$name}->Extend($last);
+ }
+ }
+ close IN;
+
+ # $Blocks->Write("Blocks.pl");
+}
+
+##
+## Read in the PropList.txt. It contains extended properties not
+## listed in the UnicodeData.txt, such as 'Other_Alphabetic':
+## alphabetic but not of the general category L; many modifiers
+## belong to this extended property category: while they are not
+## alphabets, they are alphabetic in nature.
+##
+sub PropList_txt()
+{
+ my @PropInfo;
+
+ if (not open IN, "PropList.txt") {
+ die "$0: PropList.txt: $!\n";
+ }
+
+ while (<IN>)
+ {
+ next unless /^([0-9A-Fa-f]+)(?:\.\.([0-9A-Fa-f]+))?\s*;\s*(.+?)\s*\#/;
+
+ # Wait until all the extended properties have been read since
+ # they are not listed in numeric order.
+ push @PropInfo, [ hex($1), hex($2||""), $3 ];
+ }
+ close IN;
+
+ # Now append the extended properties in their code point order.
+ my $Props = Table->New();
+ my %Prop;
+
+ for my $prop (sort { $a->[0] <=> $b->[0] } @PropInfo)
+ {
+ my ($first, $last, $name) = @$prop;
+ $Props->Append($first, $name);
+
+ $Prop{$name} ||= Table->New(Is => $name,
+ Desc => "Extended property '$name'",
+ Fuzzy => 1);
+ $Prop{$name}->Append($first, $name);
+
+ if ($last) {
+ $Props->Extend($last);
+ $Prop{$name}->Extend($last);
+ }
+ }
+
+ for (keys %Prop) {
+ (my $file = $PA_reverse{$_}) =~ tr/_//d;
+ # XXX I'm assuming that the names from %Prop don't suffer 8.3 clashes.
+ $BaseNames{lc $file}++;
+ $Prop{$_}->Write(
+ ["lib","gc_sc","$file.pl"],
+ "Binary property '$_'"
+ );
+ }
+
+ # Alphabetic is L and Other_Alphabetic.
+ New_Prop(Is => 'Alphabetic',
+ Table->Merge($Cat{L}, $Prop{Other_Alphabetic}),
+ Desc => '[\p{L}\p{OtherAlphabetic}]', # use canonical names here
+ Fuzzy => 1);
+
+ # Lowercase is Ll and Other_Lowercase.
+ New_Prop(Is => 'Lowercase',
+ Table->Merge($Cat{Ll}, $Prop{Other_Lowercase}),
+ Desc => '[\p{Ll}\p{OtherLowercase}]', # use canonical names here
+ Fuzzy => 1);
+
+ # Uppercase is Lu and Other_Uppercase.
+ New_Prop(Is => 'Uppercase',
+ Table->Merge($Cat{Lu}, $Prop{Other_Uppercase}),
+ Desc => '[\p{Lu}\p{Other_Uppercase}]', # use canonical names here
+ Fuzzy => 1);
+
+ # Math is Sm and Other_Math.
+ New_Prop(Is => 'Math',
+ Table->Merge($Cat{Sm}, $Prop{Other_Math}),
+ Desc => '[\p{Sm}\p{OtherMath}]', # use canonical names here
+ Fuzzy => 1);
+
+ # ID_Start is Ll, Lu, Lt, Lm, Lo, and Nl.
+ New_Prop(Is => 'ID_Start',
+ Table->Merge(@Cat{qw[Ll Lu Lt Lm Lo Nl]}),
+ Desc => '[\p{Ll}\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]',
+ Fuzzy => 1);
+
+ # ID_Continue is ID_Start, Mn, Mc, Nd, and Pc.
+ New_Prop(Is => 'ID_Continue',
+ Table->Merge(@Cat{qw[Ll Lu Lt Lm Lo Nl Mn Mc Nd Pc ]}),
+ Desc => '[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}]',
+ Fuzzy => 1);
+}
+
+
+##
+## These are used in:
+## MakePropTestScript()
+## WriteAllMappings()
+## for making the test script.
+##
+my %FuzzyNameToTest;
+my %ExactNameToTest;
+
+
+## This used only for making the test script
+sub GenTests($$$$)
+{
+ my $FH = shift;
+ my $Prop = shift;
+ my $MatchCode = shift;
+ my $FailCode = shift;
+
+ if (defined $MatchCode) {
+ printf $FH qq/Expect(1, "\\x{%04X}", '\\p{$Prop}' );\n/, $MatchCode;
+ printf $FH qq/Expect(0, "\\x{%04X}", '\\p{^$Prop}');\n/, $MatchCode;
+ printf $FH qq/Expect(0, "\\x{%04X}", '\\P{$Prop}' );\n/, $MatchCode;
+ printf $FH qq/Expect(1, "\\x{%04X}", '\\P{^$Prop}');\n/, $MatchCode;
+ }
+ if (defined $FailCode) {
+ printf $FH qq/Expect(0, "\\x{%04X}", '\\p{$Prop}' );\n/, $FailCode;
+ printf $FH qq/Expect(1, "\\x{%04X}", '\\p{^$Prop}');\n/, $FailCode;
+ printf $FH qq/Expect(1, "\\x{%04X}", '\\P{$Prop}' );\n/, $FailCode;
+ printf $FH qq/Expect(0, "\\x{%04X}", '\\P{^$Prop}');\n/, $FailCode;
+ }
+}
+
+## This used only for making the test script
+sub ExpectError($$)
+{
+ my $FH = shift;
+ my $prop = shift;
+
+ print $FH qq/Error('\\p{$prop}');\n/;
+ print $FH qq/Error('\\P{$prop}');\n/;
+}
+
+## This used only for making the test script
+my @GoodSeps = (
+ " ",
+ "-",
+ " \t ",
+ "",
+ "",
+ "_",
+ );
+my @BadSeps = (
+ "--",
+ "__",
+ " _",
+ "/"
+ );
+
+## This used only for making the test script
+sub RandomlyFuzzifyName($;$)
+{
+ my $Name = shift;
+ my $WantError = shift; ## if true, make an error
+
+ my @parts;
+ for my $part (split /[-\s_]+/, $Name)
+ {
+ if (@parts) {
+ if ($WantError and rand() < 0.3) {
+ push @parts, $BadSeps[rand(@BadSeps)];
+ $WantError = 0;
+ } else {
+ push @parts, $GoodSeps[rand(@GoodSeps)];
+ }
+ }
+ my $switch = int rand(4);
+ if ($switch == 0) {
+ push @parts, uc $part;
+ } elsif ($switch == 1) {
+ push @parts, lc $part;
+ } elsif ($switch == 2) {
+ push @parts, ucfirst $part;
+ } else {
+ push @parts, $part;
+ }
+ }
+ my $new = join('', @parts);
+
+ if ($WantError) {
+ if (rand() >= 0.5) {
+ $new .= $BadSeps[rand(@BadSeps)];
+ } else {
+ $new = $BadSeps[rand(@BadSeps)] . $new;
+ }
+ }
+ return $new;
+}
+
+## This used only for making the test script
+sub MakePropTestScript()
+{
+ ## this written directly -- it's huge.
+ force_unlink ("TestProp.pl");
+ if (not open OUT, ">TestProp.pl") {
+ die "$0: TestProp.pl: $!\n";
+ }
+ print OUT <DATA>;
+
+ while (my ($Name, $Table) = each %ExactNameToTest)
+ {
+ GenTests(*OUT, $Name, $Table->ValidCode, $Table->InvalidCode);
+ ExpectError(*OUT, uc $Name) if uc $Name ne $Name;
+ ExpectError(*OUT, lc $Name) if lc $Name ne $Name;
+ }
+
+
+ while (my ($Name, $Table) = each %FuzzyNameToTest)
+ {
+ my $Orig = $CanonicalToOrig{$Name};
+ my %Names = (
+ $Name => 1,
+ $Orig => 1,
+ RandomlyFuzzifyName($Orig) => 1
+ );
+
+ for my $N (keys %Names) {
+ GenTests(*OUT, $N, $Table->ValidCode, $Table->InvalidCode);
+ }
+
+ ExpectError(*OUT, RandomlyFuzzifyName($Orig, 'ERROR'));
+ }
+
+ print OUT "Finished();\n";
+ close OUT;
+}
+
+
+##
+## These are used only in:
+## RegisterFileForName()
+## WriteAllMappings()
+##
+my %Exact; ## will become %utf8::Exact;
+my %Canonical; ## will become %utf8::Canonical;
+my %CaComment; ## Comment for %Canonical entry of same key
+
+##
+## Given info about a name and a datafile that it should be associated with,
+## register that assocation in %Exact and %Canonical.
+sub RegisterFileForName($$$$)
+{
+ my $Type = shift;
+ my $Name = shift;
+ my $IsFuzzy = shift;
+ my $filename = shift;
+
+ ##
+ ## Now in details for the mapping. $Type eq 'Is' has the
+ ## Is removed, as it will be removed in utf8_heavy when this
+ ## data is being checked. In keeps its "In", but a second
+ ## sans-In record is written if it doesn't conflict with
+ ## anything already there.
+ ##
+ if (not $IsFuzzy)
+ {
+ if ($Type eq 'Is') {
+ die "oops[$Name]" if $Exact{$Name};
+ $Exact{$Name} = $filename;
+ } else {
+ die "oops[$Type$Name]" if $Exact{"$Type$Name"};
+ $Exact{"$Type$Name"} = $filename;
+ $Exact{$Name} = $filename if not $Exact{$Name};
+ }
+ }
+ else
+ {
+ my $CName = lc $Name;
+ if ($Type eq 'Is') {
+ die "oops[$CName]" if $Canonical{$CName};
+ $Canonical{$CName} = $filename;
+ $CaComment{$CName} = $Name if $Name =~ tr/A-Z// >= 2;
+ } else {
+ die "oops[$Type$CName]" if $Canonical{lc "$Type$CName"};
+ $Canonical{lc "$Type$CName"} = $filename;
+ $CaComment{lc "$Type$CName"} = "$Type$Name";
+ if (not $Canonical{$CName}) {
+ $Canonical{$CName} = $filename;
+ $CaComment{$CName} = "$Type$Name";
+ }
+ }
+ }
+}
+
+##
+## Writes the info accumulated in
+##
+## %TableInfo;
+## %FuzzyNames;
+## %AliasInfo;
+##
+##
+sub WriteAllMappings()
+{
+ my @MAP;
+
+ ## 'Is' *MUST* come first, so its names have precidence over 'In's
+ for my $Type ('Is', 'In')
+ {
+ my %RawNameToFile; ## a per-$Type cache
+
+ for my $Name (sort {length $a <=> length $b} keys %{$TableInfo{$Type}})
+ {
+ ## Note: $Name is already canonical
+ my $Table = $TableInfo{$Type}->{$Name};
+ my $IsFuzzy = $FuzzyNames{$Type}->{$Name};
+
+ ## Need an 8.3 safe filename (which means "an 8 safe" $filename)
+ my $filename;
+ {
+ ## 'Is' items lose 'Is' from the basename.
+ $filename = $Type eq 'Is' ?
+ ($PVA_reverse{sc}{$Name} || $Name) :
+ "$Type$Name";
+
+ $filename =~ s/[^\w_]+/_/g; # "L&" -> "L_"
+ substr($filename, 8) = '' if length($filename) > 8;
+
+ ##
+ ## Make sure the basename doesn't conflict with something we
+ ## might have already written. If we have, say,
+ ## InGreekExtended1
+ ## InGreekExtended2
+ ## they become
+ ## InGreekE
+ ## InGreek2
+ ##
+ while (my $num = $BaseNames{lc $filename}++)
+ {
+ $num++; ## so basenames with numbers start with '2', which
+ ## just looks more natural.
+ ## Want to append $num, but if it'll make the basename longer
+ ## than 8 characters, pre-truncate $filename so that the result
+ ## is acceptable.
+ my $delta = length($filename) + length($num) - 8;
+ if ($delta > 0) {
+ substr($filename, -$delta) = $num;
+ } else {
+ $filename .= $num;
+ }
+ }
+ };
+
+ ##
+ ## Construct a nice comment to add to the file, and build data
+ ## for the "./Properties" file along the way.
+ ##
+ my $Comment;
+ {
+ my $Desc = $TableDesc{$Type}->{$Name} || "";
+ ## get list of names this table is reference by
+ my @Supported = $Name;
+ while (my ($Orig, $Alias) = each %{ $AliasInfo{$Type} })
+ {
+ if ($Orig eq $Name) {
+ push @Supported, $Alias;
+ }
+ }
+
+ my $TypeToShow = $Type eq 'Is' ? "" : $Type;
+ my $OrigProp;
+
+ $Comment = "This file supports:\n";
+ for my $N (@Supported)
+ {
+ my $IsFuzzy = $FuzzyNames{$Type}->{$N};
+ my $Prop = "\\p{$TypeToShow$Name}";
+ $OrigProp = $Prop if not $OrigProp; #cache for aliases
+ if ($IsFuzzy) {
+ $Comment .= "\t$Prop (and fuzzy permutations)\n";
+ } else {
+ $Comment .= "\t$Prop\n";
+ }
+ my $MyDesc = ($N eq $Name) ? $Desc : "Alias for $OrigProp ($Desc)";
+
+ push @MAP, sprintf("%s %-42s %s\n",
+ $IsFuzzy ? '*' : ' ', $Prop, $MyDesc);
+ }
+ if ($Desc) {
+ $Comment .= "\nMeaning: $Desc\n";
+ }
+
+ }
+ ##
+ ## Okay, write the file...
+ ##
+ $Table->Write(["lib","gc_sc","$filename.pl"], $Comment);
+
+ ## and register it
+ $RawNameToFile{$Name} = $filename;
+ RegisterFileForName($Type => $Name, $IsFuzzy, $filename);
+
+ if ($IsFuzzy)
+ {
+ my $CName = CanonicalName($Type . '_'. $Name);
+ $FuzzyNameToTest{$Name} = $Table if !$FuzzyNameToTest{$Name};
+ $FuzzyNameToTest{$CName} = $Table if !$FuzzyNameToTest{$CName};
+ } else {
+ $ExactNameToTest{$Name} = $Table;
+ }
+
+ }
+
+ ## Register aliase info
+ for my $Name (sort {length $a <=> length $b} keys %{$AliasInfo{$Type}})
+ {
+ my $Alias = $AliasInfo{$Type}->{$Name};
+ my $IsFuzzy = $FuzzyNames{$Type}->{$Alias};
+ my $filename = $RawNameToFile{$Name};
+ die "oops [$Alias]->[$Name]" if not $filename;
+ RegisterFileForName($Type => $Alias, $IsFuzzy, $filename);
+
+ my $Table = $TableInfo{$Type}->{$Name};
+ die "oops" if not $Table;
+ if ($IsFuzzy)
+ {
+ my $CName = CanonicalName($Type .'_'. $Alias);
+ $FuzzyNameToTest{$Alias} = $Table if !$FuzzyNameToTest{$Alias};
+ $FuzzyNameToTest{$CName} = $Table if !$FuzzyNameToTest{$CName};
+ } else {
+ $ExactNameToTest{$Alias} = $Table;
+ }
+ }
+ }
+
+ ##
+ ## Write out the property list
+ ##
+ {
+ my @OUT = (
+ "##\n",
+ "## This file created by $0\n",
+ "## List of built-in \\p{...}/\\P{...} properties.\n",
+ "##\n",
+ "## '*' means name may be 'fuzzy'\n",
+ "##\n\n",
+ sort { substr($a,2) cmp substr($b, 2) } @MAP,
+ );
+ WriteIfChanged('Properties', @OUT);
+ }
+
+ use Text::Tabs (); ## using this makes the files about half the size
+
+ ## Write Exact.pl
+ {
+ my @OUT = (
+ $HEADER,
+ "##\n",
+ "## Data in this file used by ../utf8_heavy.pl\n",
+ "##\n\n",
+ "## Mapping from name to filename in ./lib/gc_sc\n",
+ "%utf8::Exact = (\n",
+ );
+
+ $Exact{InGreek} = 'InGreekA'; # this is evil kludge
+ for my $Name (sort keys %Exact)
+ {
+ my $File = $Exact{$Name};
+ $Name = $Name =~ m/\W/ ? qq/'$Name'/ : " $Name ";
+ my $Text = sprintf("%-15s => %s,\n", $Name, qq/'$File'/);
+ push @OUT, Text::Tabs::unexpand($Text);
+ }
+ push @OUT, ");\n1;\n";
+
+ WriteIfChanged('Exact.pl', @OUT);
+ }
+
+ ## Write Canonical.pl
+ {
+ my @OUT = (
+ $HEADER,
+ "##\n",
+ "## Data in this file used by ../utf8_heavy.pl\n",
+ "##\n\n",
+ "## Mapping from lc(canonical name) to filename in ./lib\n",
+ "%utf8::Canonical = (\n",
+ );
+ my $Trail = ""; ## used just to keep the spacing pretty
+ for my $Name (sort keys %Canonical)
+ {
+ my $File = $Canonical{$Name};
+ if ($CaComment{$Name}) {
+ push @OUT, "\n" if not $Trail;
+ push @OUT, " # $CaComment{$Name}\n";
+ $Trail = "\n";
+ } else {
+ $Trail = "";
+ }
+ $Name = $Name =~ m/\W/ ? qq/'$Name'/ : " $Name ";
+ my $Text = sprintf(" %-41s => %s,\n$Trail", $Name, qq/'$File'/);
+ push @OUT, Text::Tabs::unexpand($Text);
+ }
+ push @OUT, ");\n1\n";
+ WriteIfChanged('Canonical.pl', @OUT);
+ }
+
+ MakePropTestScript() if $MakeTestScript;
+}
+
+
+sub SpecialCasing_txt()
+{
+ #
+ # Read in the special cases.
+ #
+
+ my %CaseInfo;
+
+ if (not open IN, "SpecialCasing.txt") {
+ die "$0: SpecialCasing.txt: $!\n";
+ }
+ while (<IN>) {
+ next unless /^[0-9A-Fa-f]+;/;
+ s/\#.*//;
+ s/\s+$//;
+
+ my ($code, $lower, $title, $upper, $condition) = split(/\s*;\s*/);
+
+ if ($condition) { # not implemented yet
+ print "# SKIPPING $_\n" if $Verbose;
+ next;
+ }
+
+ # Wait until all the special cases have been read since
+ # they are not listed in numeric order.
+ my $ix = hex($code);
+ push @{$CaseInfo{Lower}}, [ $ix, $code, $lower ]
+ unless $code eq $lower;
+ push @{$CaseInfo{Title}}, [ $ix, $code, $title ]
+ unless $code eq $title;
+ push @{$CaseInfo{Upper}}, [ $ix, $code, $upper ]
+ unless $code eq $upper;
+ }
+ close IN;
+
+ # Now write out the special cases properties in their code point order.
+ # Prepend them to the To/{Upper,Lower,Title}.pl.
+
+ for my $case (qw(Lower Title Upper))
+ {
+ my $NormalCase = do "To/$case.pl" || die "$0: $@\n";
+
+ my @OUT =
+ (
+ $HEADER, "\n",
+ "# The key UTF-8 _bytes_, the value UTF-8 (speed hack)\n",
+ "%utf8::ToSpec$case =\n(\n",
+ );
+
+ for my $prop (sort { $a->[0] <=> $b->[0] } @{$CaseInfo{$case}}) {
+ my ($ix, $code, $to) = @$prop;
+ my $tostr =
+ join "", map { sprintf "\\x{%s}", $_ } split ' ', $to;
+ push @OUT, sprintf qq["%s" => "$tostr",\n], join("", map { sprintf "\\x%02X", $_ } unpack("U0C*", pack("U", $ix)));
+ # Remove any single-character mappings for
+ # the same character since we are going for
+ # the special casing rules.
+ $NormalCase =~ s/^$code\t\t\w+\n//m;
+ }
+ push @OUT, (
+ ");\n\n",
+ "return <<'END';\n",
+ $NormalCase,
+ "END\n"
+ );
+ WriteIfChanged(["To","$case.pl"], @OUT);
+ }
+}
+
+#
+# Read in the case foldings.
+#
+# We will do full case folding, C + F + I (see CaseFolding.txt).
+#
+sub CaseFolding_txt()
+{
+ if (not open IN, "CaseFolding.txt") {
+ die "$0: CaseFolding.txt: $!\n";
+ }
+
+ my $Fold = Table->New();
+ my %Fold;
+
+ while (<IN>) {
+ # Skip status 'S', simple case folding
+ next unless /^([0-9A-Fa-f]+)\s*;\s*([CFI])\s*;\s*([0-9A-Fa-f]+(?: [0-9A-Fa-f]+)*)\s*;/;
+
+ my ($code, $status, $fold) = (hex($1), $2, $3);
+
+ if ($status eq 'C') { # Common: one-to-one folding
+ # No append() since several codes may fold into one.
+ $Fold->RawAppendRange($code, $code, $fold);
+ } else { # F: full, or I: dotted uppercase I -> dotless lowercase I
+ $Fold{$code} = $fold;
+ }
+ }
+ close IN;
+
+ $Fold->Write("To/Fold.pl");
+
+ #
+ # Prepend the special foldings to the common foldings.
+ #
+ my $CommonFold = do "To/Fold.pl" || die "$0: To/Fold.pl: $!\n";
+
+ my @OUT =
+ (
+ $HEADER, "\n",
+ "# The ke UTF-8 _bytes_, the value UTF-8 (speed hack)\n",
+ "%utf8::ToSpecFold =\n(\n",
+ );
+ for my $code (sort { $a <=> $b } keys %Fold) {
+ my $foldstr =
+ join "", map { sprintf "\\x{%s}", $_ } split ' ', $Fold{$code};
+ push @OUT, sprintf qq["%s" => "$foldstr",\n], join("", map { sprintf "\\x%02X", $_ } unpack("U0C*", pack("U", $code)));
+ }
+ push @OUT, (
+ ");\n\n",
+ "return <<'END';\n",
+ $CommonFold,
+ "END\n",
+ );
+
+ WriteIfChanged(["To","Fold.pl"], @OUT);
+}
+
+## Do it....
+
+Build_Aliases();
+UnicodeData_Txt();
+PropList_txt();
+
+Scripts_txt();
+Blocks_txt();
+
+WriteAllMappings();
+
+LineBreak_Txt();
+ArabicShaping_txt();
+EastAsianWidth_txt();
+HangulSyllableType_txt();
+Jamo_txt();
+SpecialCasing_txt();
+CaseFolding_txt();
+
+if ( $FileList and $MakeList ) {
+
+ print "Updating '$FileList'\n"
+ if ($Verbose);
+
+ open my $ofh,">",$FileList
+ or die "Can't write to '$FileList':$!";
+ print $ofh <<"EOFHEADER";
+#
+# mktables.lst -- File list for mktables.
+#
+# Autogenerated on @{[scalar localtime]}
+#
+# - First section is input files
+# (mktables itself is automatically included)
+# - Section seperator is /^=+\$/
+# - Second section is a list of output files.
+# - Lines matching /^\\s*#/ are treated as comments
+# which along with blank lines are ignored.
+#
+
+# Input files:
+
+EOFHEADER
+ my @input=("version",glob('*.txt'));
+ print $ofh "$_\n" for
+ @input,
+ "\n=================================\n",
+ "# Output files:\n",
+ # special files
+ "Properties";
+
+
+ require File::Find;
+ my $count=0;
+ File::Find::find({
+ no_chdir=>1,
+ wanted=>sub {
+ if (/\.pl$/) {
+ s!^\./!!;
+ print $ofh "$_\n";
+ $count++;
+ }
+ },
+ },".");
+
+ print $ofh "\n# ",scalar(@input)," input files\n",
+ "# ",scalar($count+1)," output files\n\n",
+ "# End list\n";
+ close $ofh
+ or warn "Failed to close $ofh: $!";
+
+ print "Filelist has ",scalar(@input)," input files and ",
+ scalar($count+1)," output files\n"
+ if $Verbose;
+}
+print "All done\n" if $Verbose;
+exit(0);
+
+## TRAILING CODE IS USED BY MakePropTestScript()
+__DATA__
+use strict;
+use warnings;
+
+my $Tests = 0;
+my $Fails = 0;
+
+sub Expect($$$)
+{
+ my $Expect = shift;
+ my $String = shift;
+ my $Regex = shift;
+ my $Line = (caller)[2];
+
+ $Tests++;
+ my $RegObj;
+ my $result = eval {
+ $RegObj = qr/$Regex/;
+ $String =~ $RegObj ? 1 : 0
+ };
+
+ if (not defined $result) {
+ print "couldn't compile /$Regex/ on $0 line $Line: $@\n";
+ $Fails++;
+ } elsif ($result ^ $Expect) {
+ print "bad result (expected $Expect) on $0 line $Line: $@\n";
+ $Fails++;
+ }
+}
+
+sub Error($)
+{
+ my $Regex = shift;
+ $Tests++;
+ if (eval { 'x' =~ qr/$Regex/; 1 }) {
+ $Fails++;
+ my $Line = (caller)[2];
+ print "expected error for /$Regex/ on $0 line $Line: $@\n";
+ }
+}
+
+sub Finished()
+{
+ if ($Fails == 0) {
+ print "All $Tests tests passed.\n";
+ exit(0);
+ } else {
+ print "$Tests tests, $Fails failed!\n";
+ exit(-1);
+ }
+}
diff --git a/Master/tlpkg/tlperl/lib/unicore/mktables.lst b/Master/tlpkg/tlperl/lib/unicore/mktables.lst
new file mode 100644
index 00000000000..c3b6dc8b32b
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/mktables.lst
@@ -0,0 +1,505 @@
+#
+# mktables.lst -- File list for mktables.
+#
+# Autogenerated on Sun Apr 24 21:25:22 2005
+#
+# - First section is input files
+# (mktables itself is automatically included)
+# - Section seperator is /^=+$/
+# - Second section is a list of output files.
+# - Lines matching /^\s*#/ are treated as comments
+# which along with blank lines are ignored.
+#
+
+# Input files:
+
+version
+ArabicShaping.txt
+BidiMirroring.txt
+Blocks.txt
+CaseFolding.txt
+CompositionExclusions.txt
+EastAsianWidth.txt
+HangulSyllableType.txt
+Index.txt
+Jamo.txt
+LineBreak.txt
+NamedSequences.txt
+NamesList.txt
+NormalizationCorrections.txt
+PropertyAliases.txt
+PropList.txt
+PropValueAliases.txt
+ReadMe.txt
+Scripts.txt
+SpecialCasing.txt
+StandardizedVariants.txt
+UnicodeData.txt
+
+=================================
+
+# Output files:
+
+Properties
+Canonical.pl
+CombiningClass.pl
+Decomposition.pl
+Exact.pl
+Name.pl
+PVA.pl
+lib/bc/AL.pl
+lib/bc/AN.pl
+lib/bc/B.pl
+lib/bc/BN.pl
+lib/bc/CS.pl
+lib/bc/EN.pl
+lib/bc/ES.pl
+lib/bc/ET.pl
+lib/bc/L.pl
+lib/bc/LRE.pl
+lib/bc/LRO.pl
+lib/bc/NSM.pl
+lib/bc/ON.pl
+lib/bc/PDF.pl
+lib/bc/R.pl
+lib/bc/RLE.pl
+lib/bc/RLO.pl
+lib/bc/S.pl
+lib/bc/WS.pl
+lib/ccc/A.pl
+lib/ccc/AL.pl
+lib/ccc/AR.pl
+lib/ccc/ATAR.pl
+lib/ccc/ATB.pl
+lib/ccc/ATBL.pl
+lib/ccc/B.pl
+lib/ccc/BL.pl
+lib/ccc/BR.pl
+lib/ccc/DA.pl
+lib/ccc/DB.pl
+lib/ccc/IS.pl
+lib/ccc/KV.pl
+lib/ccc/L.pl
+lib/ccc/NK.pl
+lib/ccc/NR.pl
+lib/ccc/OV.pl
+lib/ccc/R.pl
+lib/ccc/VR.pl
+lib/dt/can.pl
+lib/dt/com.pl
+lib/dt/enc.pl
+lib/dt/fin.pl
+lib/dt/font.pl
+lib/dt/fra.pl
+lib/dt/init.pl
+lib/dt/iso.pl
+lib/dt/med.pl
+lib/dt/nar.pl
+lib/dt/nb.pl
+lib/dt/sml.pl
+lib/dt/sqr.pl
+lib/dt/sub.pl
+lib/dt/sup.pl
+lib/dt/vert.pl
+lib/dt/wide.pl
+lib/ea/A.pl
+lib/ea/F.pl
+lib/ea/H.pl
+lib/ea/N.pl
+lib/ea/Na.pl
+lib/ea/W.pl
+lib/gc_sc/AHex.pl
+lib/gc_sc/Alnum.pl
+lib/gc_sc/Alpha.pl
+lib/gc_sc/Alphabet.pl
+lib/gc_sc/Any.pl
+lib/gc_sc/Arab.pl
+lib/gc_sc/Armn.pl
+lib/gc_sc/ASCII.pl
+lib/gc_sc/AsciiHex.pl
+lib/gc_sc/Assigned.pl
+lib/gc_sc/Beng.pl
+lib/gc_sc/BidiC.pl
+lib/gc_sc/BidiCont.pl
+lib/gc_sc/Blank.pl
+lib/gc_sc/Bopo.pl
+lib/gc_sc/Brai.pl
+lib/gc_sc/Bugi.pl
+lib/gc_sc/Buhd.pl
+lib/gc_sc/C.pl
+lib/gc_sc/Canadian.pl
+lib/gc_sc/Cc.pl
+lib/gc_sc/Cf.pl
+lib/gc_sc/Cher.pl
+lib/gc_sc/Cn.pl
+lib/gc_sc/Cntrl.pl
+lib/gc_sc/Co.pl
+lib/gc_sc/Copt.pl
+lib/gc_sc/Cprt.pl
+lib/gc_sc/Cs.pl
+lib/gc_sc/Cyrl.pl
+lib/gc_sc/Dash.pl
+lib/gc_sc/Dash2.pl
+lib/gc_sc/Dep.pl
+lib/gc_sc/Deprecat.pl
+lib/gc_sc/Deva.pl
+lib/gc_sc/Dia.pl
+lib/gc_sc/Diacriti.pl
+lib/gc_sc/Digit.pl
+lib/gc_sc/Dsrt.pl
+lib/gc_sc/Ethi.pl
+lib/gc_sc/Ext.pl
+lib/gc_sc/Extender.pl
+lib/gc_sc/Geor.pl
+lib/gc_sc/Glag.pl
+lib/gc_sc/Goth.pl
+lib/gc_sc/Graph.pl
+lib/gc_sc/Grapheme.pl
+lib/gc_sc/Grek.pl
+lib/gc_sc/GrLink.pl
+lib/gc_sc/Gujr.pl
+lib/gc_sc/Guru.pl
+lib/gc_sc/Hang.pl
+lib/gc_sc/Hani.pl
+lib/gc_sc/Hano.pl
+lib/gc_sc/Hebr.pl
+lib/gc_sc/Hex.pl
+lib/gc_sc/HexDigit.pl
+lib/gc_sc/Hira.pl
+lib/gc_sc/Hyphen.pl
+lib/gc_sc/Hyphen2.pl
+lib/gc_sc/IdContin.pl
+lib/gc_sc/Ideo.pl
+lib/gc_sc/Ideograp.pl
+lib/gc_sc/IDSB.pl
+lib/gc_sc/IdsBinar.pl
+lib/gc_sc/IDST.pl
+lib/gc_sc/IdStart.pl
+lib/gc_sc/IdsTrina.pl
+lib/gc_sc/InAegean.pl
+lib/gc_sc/InAlphab.pl
+lib/gc_sc/InAncie2.pl
+lib/gc_sc/InAncien.pl
+lib/gc_sc/InArabi2.pl
+lib/gc_sc/InArabi3.pl
+lib/gc_sc/InArabi4.pl
+lib/gc_sc/InArabic.pl
+lib/gc_sc/InArmeni.pl
+lib/gc_sc/InArrows.pl
+lib/gc_sc/InBasicL.pl
+lib/gc_sc/InBengal.pl
+lib/gc_sc/InBlockE.pl
+lib/gc_sc/InBopom2.pl
+lib/gc_sc/InBopomo.pl
+lib/gc_sc/InBoxDra.pl
+lib/gc_sc/InBraill.pl
+lib/gc_sc/InBugine.pl
+lib/gc_sc/InBuhid.pl
+lib/gc_sc/InByzant.pl
+lib/gc_sc/InCherok.pl
+lib/gc_sc/InCjkCo2.pl
+lib/gc_sc/InCjkCo3.pl
+lib/gc_sc/InCjkCo4.pl
+lib/gc_sc/InCjkCom.pl
+lib/gc_sc/InCjkRad.pl
+lib/gc_sc/InCjkStr.pl
+lib/gc_sc/InCjkSym.pl
+lib/gc_sc/InCjkUn2.pl
+lib/gc_sc/InCjkUn3.pl
+lib/gc_sc/InCjkUni.pl
+lib/gc_sc/InCombi2.pl
+lib/gc_sc/InCombi3.pl
+lib/gc_sc/InCombi4.pl
+lib/gc_sc/InCombin.pl
+lib/gc_sc/InContro.pl
+lib/gc_sc/InCoptic.pl
+lib/gc_sc/InCurren.pl
+lib/gc_sc/InCyprio.pl
+lib/gc_sc/InCyril2.pl
+lib/gc_sc/InCyrill.pl
+lib/gc_sc/InDesere.pl
+lib/gc_sc/InDevana.pl
+lib/gc_sc/InDingba.pl
+lib/gc_sc/InEnclo2.pl
+lib/gc_sc/InEnclos.pl
+lib/gc_sc/InEthio2.pl
+lib/gc_sc/InEthio3.pl
+lib/gc_sc/InEthiop.pl
+lib/gc_sc/InGenera.pl
+lib/gc_sc/InGeomet.pl
+lib/gc_sc/InGeorg2.pl
+lib/gc_sc/InGeorgi.pl
+lib/gc_sc/InGlagol.pl
+lib/gc_sc/InGothic.pl
+lib/gc_sc/InGreekA.pl
+lib/gc_sc/InGreekE.pl
+lib/gc_sc/InGujara.pl
+lib/gc_sc/InGurmuk.pl
+lib/gc_sc/InHalfwi.pl
+lib/gc_sc/InHangu2.pl
+lib/gc_sc/InHangu3.pl
+lib/gc_sc/InHangul.pl
+lib/gc_sc/InHanuno.pl
+lib/gc_sc/InHebrew.pl
+lib/gc_sc/InHighPr.pl
+lib/gc_sc/InHighSu.pl
+lib/gc_sc/InHiraga.pl
+lib/gc_sc/InIdeogr.pl
+lib/gc_sc/InIpaExt.pl
+lib/gc_sc/InKanbun.pl
+lib/gc_sc/InKangxi.pl
+lib/gc_sc/InKannad.pl
+lib/gc_sc/InKatak2.pl
+lib/gc_sc/InKataka.pl
+lib/gc_sc/InKharos.pl
+lib/gc_sc/InKhmer.pl
+lib/gc_sc/InKhmerS.pl
+lib/gc_sc/InLao.pl
+lib/gc_sc/InLatin1.pl
+lib/gc_sc/InLatin2.pl
+lib/gc_sc/InLatin3.pl
+lib/gc_sc/InLatinE.pl
+lib/gc_sc/InLetter.pl
+lib/gc_sc/InLimbu.pl
+lib/gc_sc/InLinea2.pl
+lib/gc_sc/InLinear.pl
+lib/gc_sc/InLowSur.pl
+lib/gc_sc/InMalaya.pl
+lib/gc_sc/InMathe2.pl
+lib/gc_sc/InMathem.pl
+lib/gc_sc/InMisce2.pl
+lib/gc_sc/InMisce3.pl
+lib/gc_sc/InMisce4.pl
+lib/gc_sc/InMisce5.pl
+lib/gc_sc/InMiscel.pl
+lib/gc_sc/InModifi.pl
+lib/gc_sc/InMongol.pl
+lib/gc_sc/InMusica.pl
+lib/gc_sc/InMyanma.pl
+lib/gc_sc/InNewTai.pl
+lib/gc_sc/InNumber.pl
+lib/gc_sc/InOgham.pl
+lib/gc_sc/InOldIta.pl
+lib/gc_sc/InOldPer.pl
+lib/gc_sc/InOptica.pl
+lib/gc_sc/InOriya.pl
+lib/gc_sc/InOsmany.pl
+lib/gc_sc/InPhone2.pl
+lib/gc_sc/InPhonet.pl
+lib/gc_sc/InPrivat.pl
+lib/gc_sc/InRunic.pl
+lib/gc_sc/InShavia.pl
+lib/gc_sc/InSinhal.pl
+lib/gc_sc/InSmallF.pl
+lib/gc_sc/InSpacin.pl
+lib/gc_sc/InSpecia.pl
+lib/gc_sc/InSupers.pl
+lib/gc_sc/InSuppl2.pl
+lib/gc_sc/InSuppl3.pl
+lib/gc_sc/InSuppl4.pl
+lib/gc_sc/InSuppl5.pl
+lib/gc_sc/InSuppl6.pl
+lib/gc_sc/InSupple.pl
+lib/gc_sc/InSyloti.pl
+lib/gc_sc/InSyriac.pl
+lib/gc_sc/InTagalo.pl
+lib/gc_sc/InTagban.pl
+lib/gc_sc/InTags.pl
+lib/gc_sc/InTaiLe.pl
+lib/gc_sc/InTaiXua.pl
+lib/gc_sc/InTamil.pl
+lib/gc_sc/InTelugu.pl
+lib/gc_sc/InThaana.pl
+lib/gc_sc/InThai.pl
+lib/gc_sc/InTibeta.pl
+lib/gc_sc/InTifina.pl
+lib/gc_sc/InUgarit.pl
+lib/gc_sc/InUnifie.pl
+lib/gc_sc/InVaria2.pl
+lib/gc_sc/InVariat.pl
+lib/gc_sc/InVertic.pl
+lib/gc_sc/InYijing.pl
+lib/gc_sc/InYiRadi.pl
+lib/gc_sc/InYiSyll.pl
+lib/gc_sc/JoinC.pl
+lib/gc_sc/JoinCont.pl
+lib/gc_sc/Kana.pl
+lib/gc_sc/Khar.pl
+lib/gc_sc/Khmr.pl
+lib/gc_sc/Knda.pl
+lib/gc_sc/L.pl
+lib/gc_sc/Laoo.pl
+lib/gc_sc/Latn.pl
+lib/gc_sc/LC.pl
+lib/gc_sc/Limb.pl
+lib/gc_sc/LinearB.pl
+lib/gc_sc/Ll.pl
+lib/gc_sc/Lm.pl
+lib/gc_sc/Lo.pl
+lib/gc_sc/LOE.pl
+lib/gc_sc/LogicalO.pl
+lib/gc_sc/Lower.pl
+lib/gc_sc/Lowercas.pl
+lib/gc_sc/Lt.pl
+lib/gc_sc/Lu.pl
+lib/gc_sc/M.pl
+lib/gc_sc/Math.pl
+lib/gc_sc/Mc.pl
+lib/gc_sc/Me.pl
+lib/gc_sc/Mlym.pl
+lib/gc_sc/Mn.pl
+lib/gc_sc/Mong.pl
+lib/gc_sc/Mymr.pl
+lib/gc_sc/N.pl
+lib/gc_sc/NChar.pl
+lib/gc_sc/Nd.pl
+lib/gc_sc/NewTaiLu.pl
+lib/gc_sc/Nl.pl
+lib/gc_sc/No.pl
+lib/gc_sc/Nonchara.pl
+lib/gc_sc/OAlpha.pl
+lib/gc_sc/ODI.pl
+lib/gc_sc/Ogam.pl
+lib/gc_sc/OGrExt.pl
+lib/gc_sc/OIDC.pl
+lib/gc_sc/OIDS.pl
+lib/gc_sc/OldItali.pl
+lib/gc_sc/OldPersi.pl
+lib/gc_sc/OLower.pl
+lib/gc_sc/OMath.pl
+lib/gc_sc/Orya.pl
+lib/gc_sc/Osma.pl
+lib/gc_sc/OtherAlp.pl
+lib/gc_sc/OtherDef.pl
+lib/gc_sc/OtherGra.pl
+lib/gc_sc/OtherIdC.pl
+lib/gc_sc/OtherIdS.pl
+lib/gc_sc/OtherLow.pl
+lib/gc_sc/OtherMat.pl
+lib/gc_sc/OtherUpp.pl
+lib/gc_sc/OUpper.pl
+lib/gc_sc/P.pl
+lib/gc_sc/PatSyn.pl
+lib/gc_sc/PatternS.pl
+lib/gc_sc/PatternW.pl
+lib/gc_sc/PatWS.pl
+lib/gc_sc/Pc.pl
+lib/gc_sc/Pd.pl
+lib/gc_sc/Pe.pl
+lib/gc_sc/Pf.pl
+lib/gc_sc/Pi.pl
+lib/gc_sc/Po.pl
+lib/gc_sc/Print.pl
+lib/gc_sc/Ps.pl
+lib/gc_sc/Punct.pl
+lib/gc_sc/Qaai.pl
+lib/gc_sc/QMark.pl
+lib/gc_sc/Quotatio.pl
+lib/gc_sc/Radical.pl
+lib/gc_sc/Radical2.pl
+lib/gc_sc/Runr.pl
+lib/gc_sc/S.pl
+lib/gc_sc/Sc.pl
+lib/gc_sc/SD.pl
+lib/gc_sc/Shaw.pl
+lib/gc_sc/Sinh.pl
+lib/gc_sc/Sk.pl
+lib/gc_sc/Sm.pl
+lib/gc_sc/So.pl
+lib/gc_sc/SoftDott.pl
+lib/gc_sc/Space.pl
+lib/gc_sc/SpacePer.pl
+lib/gc_sc/STerm.pl
+lib/gc_sc/Sterm2.pl
+lib/gc_sc/SylotiNa.pl
+lib/gc_sc/Syrc.pl
+lib/gc_sc/Tagb.pl
+lib/gc_sc/TaiLe.pl
+lib/gc_sc/Taml.pl
+lib/gc_sc/Telu.pl
+lib/gc_sc/Term.pl
+lib/gc_sc/Terminal.pl
+lib/gc_sc/Tfng.pl
+lib/gc_sc/Tglg.pl
+lib/gc_sc/Thaa.pl
+lib/gc_sc/Thai.pl
+lib/gc_sc/Tibt.pl
+lib/gc_sc/Title.pl
+lib/gc_sc/Ugar.pl
+lib/gc_sc/UIdeo.pl
+lib/gc_sc/UnifiedI.pl
+lib/gc_sc/Upper.pl
+lib/gc_sc/Uppercas.pl
+lib/gc_sc/Variatio.pl
+lib/gc_sc/VS.pl
+lib/gc_sc/WhiteSpa.pl
+lib/gc_sc/Word.pl
+lib/gc_sc/WSpace.pl
+lib/gc_sc/XDigit.pl
+lib/gc_sc/Yiii.pl
+lib/gc_sc/Z.pl
+lib/gc_sc/Zl.pl
+lib/gc_sc/Zp.pl
+lib/gc_sc/Zs.pl
+lib/gc_sc/Zyyy.pl
+lib/gc_sc/_CanonDC.pl
+lib/gc_sc/_CaseIgn.pl
+lib/gc_sc/_CombAbo.pl
+lib/hst/L.pl
+lib/hst/LV.pl
+lib/hst/LVT.pl
+lib/hst/T.pl
+lib/hst/V.pl
+lib/jt/C.pl
+lib/jt/D.pl
+lib/jt/R.pl
+lib/jt/U.pl
+lib/lb/AI.pl
+lib/lb/AL.pl
+lib/lb/B2.pl
+lib/lb/BA.pl
+lib/lb/BB.pl
+lib/lb/BK.pl
+lib/lb/CB.pl
+lib/lb/CL.pl
+lib/lb/CM.pl
+lib/lb/CR.pl
+lib/lb/EX.pl
+lib/lb/GL.pl
+lib/lb/H2.pl
+lib/lb/H3.pl
+lib/lb/HY.pl
+lib/lb/ID.pl
+lib/lb/IN.pl
+lib/lb/IS.pl
+lib/lb/JL.pl
+lib/lb/JT.pl
+lib/lb/JV.pl
+lib/lb/LF.pl
+lib/lb/NL.pl
+lib/lb/NS.pl
+lib/lb/NU.pl
+lib/lb/OP.pl
+lib/lb/PO.pl
+lib/lb/PR.pl
+lib/lb/QU.pl
+lib/lb/SA.pl
+lib/lb/SG.pl
+lib/lb/SP.pl
+lib/lb/SY.pl
+lib/lb/WJ.pl
+lib/lb/XX.pl
+lib/lb/ZW.pl
+lib/nt/De.pl
+lib/nt/Di.pl
+lib/nt/Nu.pl
+To/Digit.pl
+To/Fold.pl
+To/Lower.pl
+To/Title.pl
+To/Upper.pl
+
+# 22 input files
+# 458 output files
+
+# End list
diff --git a/Master/tlpkg/tlperl/lib/unicore/version b/Master/tlpkg/tlperl/lib/unicore/version
new file mode 100644
index 00000000000..ee74734aa22
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/unicore/version
@@ -0,0 +1 @@
+4.1.0
diff --git a/Master/tlpkg/tlperl/lib/utf8.pm b/Master/tlpkg/tlperl/lib/utf8.pm
new file mode 100644
index 00000000000..56c991bef9a
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/utf8.pm
@@ -0,0 +1,214 @@
+package utf8;
+
+$utf8::hint_bits = 0x00800000;
+
+our $VERSION = '1.06';
+
+sub import {
+ $^H |= $utf8::hint_bits;
+ $enc{caller()} = $_[1] if $_[1];
+}
+
+sub unimport {
+ $^H &= ~$utf8::hint_bits;
+}
+
+sub AUTOLOAD {
+ require "utf8_heavy.pl";
+ goto &$AUTOLOAD if defined &$AUTOLOAD;
+ require Carp;
+ Carp::croak("Undefined subroutine $AUTOLOAD called");
+}
+
+1;
+__END__
+
+=head1 NAME
+
+utf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code
+
+=head1 SYNOPSIS
+
+ use utf8;
+ no utf8;
+
+ # Convert a Perl scalar to/from UTF-8.
+ $num_octets = utf8::upgrade($string);
+ $success = utf8::downgrade($string[, FAIL_OK]);
+
+ # Change the native bytes of a Perl scalar to/from UTF-8 bytes.
+ utf8::encode($string);
+ utf8::decode($string);
+
+ $flag = utf8::is_utf8(STRING); # since Perl 5.8.1
+ $flag = utf8::valid(STRING);
+
+=head1 DESCRIPTION
+
+The C<use utf8> pragma tells the Perl parser to allow UTF-8 in the
+program text in the current lexical scope (allow UTF-EBCDIC on EBCDIC based
+platforms). The C<no utf8> pragma tells Perl to switch back to treating
+the source text as literal bytes in the current lexical scope.
+
+This pragma is primarily a compatibility device. Perl versions
+earlier than 5.6 allowed arbitrary bytes in source code, whereas
+in future we would like to standardize on the UTF-8 encoding for
+source text.
+
+B<Do not use this pragma for anything else than telling Perl that your
+script is written in UTF-8.> The utility functions described below are
+useful for their own purposes, but they are not really part of the
+"pragmatic" effect.
+
+Until UTF-8 becomes the default format for source text, either this
+pragma or the L<encoding> pragma should be used to recognize UTF-8
+in the source. When UTF-8 becomes the standard source format, this
+pragma will effectively become a no-op. For convenience in what
+follows the term I<UTF-X> is used to refer to UTF-8 on ASCII and ISO
+Latin based platforms and UTF-EBCDIC on EBCDIC based platforms.
+
+See also the effects of the C<-C> switch and its cousin, the
+C<$ENV{PERL_UNICODE}>, in L<perlrun>.
+
+Enabling the C<utf8> pragma has the following effect:
+
+=over 4
+
+=item *
+
+Bytes in the source text that have their high-bit set will be treated
+as being part of a literal UTF-8 character. This includes most
+literals such as identifier names, string constants, and constant
+regular expression patterns.
+
+On EBCDIC platforms characters in the Latin 1 character set are
+treated as being part of a literal UTF-EBCDIC character.
+
+=back
+
+Note that if you have bytes with the eighth bit on in your script
+(for example embedded Latin-1 in your string literals), C<use utf8>
+will be unhappy since the bytes are most probably not well-formed
+UTF-8. If you want to have such bytes and use utf8, you can disable
+utf8 until the end the block (or file, if at top level) by C<no utf8;>.
+
+If you want to automatically upgrade your 8-bit legacy bytes to UTF-8,
+use the L<encoding> pragma instead of this pragma. For example, if
+you want to implicitly upgrade your ISO 8859-1 (Latin-1) bytes to UTF-8
+as used in e.g. C<chr()> and C<\x{...}>, try this:
+
+ use encoding "latin-1";
+ my $c = chr(0xc4);
+ my $x = "\x{c5}";
+
+In case you are wondering: yes, C<use encoding 'utf8';> works much
+the same as C<use utf8;>.
+
+=head2 Utility functions
+
+The following functions are defined in the C<utf8::> package by the
+Perl core. You do not need to say C<use utf8> to use these and in fact
+you should not say that unless you really want to have UTF-8 source code.
+
+=over 4
+
+=item * $num_octets = utf8::upgrade($string)
+
+Converts in-place the octet sequence in the native encoding
+(Latin-1 or EBCDIC) to the equivalent character sequence in I<UTF-X>.
+I<$string> already encoded as characters does no harm.
+Returns the number of octets necessary to represent the string as I<UTF-X>.
+Can be used to make sure that the UTF-8 flag is on,
+so that C<\w> or C<lc()> work as Unicode on strings
+containing characters in the range 0x80-0xFF (on ASCII and
+derivatives).
+
+B<Note that this function does not handle arbitrary encodings.>
+Therefore I<Encode.pm> is recommended for the general purposes.
+
+Affected by the encoding pragma.
+
+=item * $success = utf8::downgrade($string[, FAIL_OK])
+
+Converts in-place the character sequence in I<UTF-X>
+to the equivalent octet sequence in the native encoding (Latin-1 or EBCDIC).
+I<$string> already encoded as octets does no harm.
+Returns true on success. On failure dies or, if the value of
+C<FAIL_OK> is true, returns false.
+Can be used to make sure that the UTF-8 flag is off,
+e.g. when you want to make sure that the substr() or length() function
+works with the usually faster byte algorithm.
+
+B<Note that this function does not handle arbitrary encodings.>
+Therefore I<Encode.pm> is recommended for the general purposes.
+
+B<Not> affected by the encoding pragma.
+
+B<NOTE:> this function is experimental and may change
+or be removed without notice.
+
+=item * utf8::encode($string)
+
+Converts in-place the character sequence to the corresponding octet sequence
+in I<UTF-X>. The UTF-8 flag is turned off. Returns nothing.
+
+B<Note that this function does not handle arbitrary encodings.>
+Therefore I<Encode.pm> is recommended for the general purposes.
+
+=item * utf8::decode($string)
+
+Attempts to convert in-place the octet sequence in I<UTF-X>
+to the corresponding character sequence. The UTF-8 flag is turned on
+only if the source string contains multiple-byte I<UTF-X> characters.
+If I<$string> is invalid as I<UTF-X>, returns false; otherwise returns true.
+
+B<Note that this function does not handle arbitrary encodings.>
+Therefore I<Encode.pm> is recommended for the general purposes.
+
+B<NOTE:> this function is experimental and may change
+or be removed without notice.
+
+=item * $flag = utf8::is_utf8(STRING)
+
+(Since Perl 5.8.1) Test whether STRING is in UTF-8. Functionally
+the same as Encode::is_utf8().
+
+=item * $flag = utf8::valid(STRING)
+
+[INTERNAL] Test whether STRING is in a consistent state regarding
+UTF-8. Will return true is well-formed UTF-8 and has the UTF-8 flag
+on B<or> if string is held as bytes (both these states are 'consistent').
+Main reason for this routine is to allow Perl's testsuite to check
+that operations have left strings in a consistent state. You most
+probably want to use utf8::is_utf8() instead.
+
+=back
+
+C<utf8::encode> is like C<utf8::upgrade>, but the UTF8 flag is
+cleared. See L<perlunicode> for more on the UTF8 flag and the C API
+functions C<sv_utf8_upgrade>, C<sv_utf8_downgrade>, C<sv_utf8_encode>,
+and C<sv_utf8_decode>, which are wrapped by the Perl functions
+C<utf8::upgrade>, C<utf8::downgrade>, C<utf8::encode> and
+C<utf8::decode>. Note that in the Perl 5.8.0 and 5.8.1 implementation
+the functions utf8::is_utf8, utf8::valid, utf8::encode, utf8::decode,
+utf8::upgrade, and utf8::downgrade are always available, without a
+C<require utf8> statement-- this may change in future releases.
+
+=head1 BUGS
+
+One can have Unicode in identifier names, but not in package/class or
+subroutine names. While some limited functionality towards this does
+exist as of Perl 5.8.0, that is more accidental than designed; use of
+Unicode for the said purposes is unsupported.
+
+One reason of this unfinishedness is its (currently) inherent
+unportability: since both package names and subroutine names may need
+to be mapped to file and directory names, the Unicode capability of
+the filesystem becomes important-- and there unfortunately aren't
+portable answers.
+
+=head1 SEE ALSO
+
+L<perluniintro>, L<encoding>, L<perlrun>, L<bytes>, L<perlunicode>
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/utf8_heavy.pl b/Master/tlpkg/tlperl/lib/utf8_heavy.pl
new file mode 100644
index 00000000000..b6fdeb997b3
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/utf8_heavy.pl
@@ -0,0 +1,412 @@
+package utf8;
+use strict;
+use warnings;
+
+sub DEBUG () { 0 }
+
+sub DESTROY {}
+
+my %Cache;
+
+our (%PropertyAlias, %PA_reverse, %PropValueAlias, %PVA_reverse, %PVA_abbr_map);
+
+sub croak { require Carp; Carp::croak(@_) }
+
+##
+## "SWASH" == "SWATCH HASH". A "swatch" is a swatch of the Unicode landscape.
+## It's a data structure that encodes a set of Unicode characters.
+##
+
+sub SWASHNEW {
+ my ($class, $type, $list, $minbits, $none) = @_;
+ local $^D = 0 if $^D;
+
+ print STDERR "SWASHNEW @_\n" if DEBUG;
+
+ ##
+ ## Get the list of codepoints for the type.
+ ## Called from utf8.c
+ ##
+ ## Given a $type, our goal is to fill $list with the set of codepoint
+ ## ranges.
+ ##
+ ## To make the parsing of $type clear, this code takes the a rather
+ ## unorthodox approach of last'ing out of the block once we have the
+ ## info we need. Were this to be a subroutine, the 'last' would just
+ ## be a 'return'.
+ ##
+ my $file; ## file to load data from, and also part of the %Cache key.
+ my $ListSorted = 0;
+
+ if ($type)
+ {
+ $type =~ s/^\s+//;
+ $type =~ s/\s+$//;
+
+ print "type = $type\n" if DEBUG;
+
+ GETFILE:
+ {
+ ##
+ ## It could be a user-defined property.
+ ##
+
+ my $caller1 = $type =~ s/(.+)::// ? $1 : caller(1);
+
+ if (defined $caller1 && $type =~ /^(?:\w+)$/) {
+ my $prop = "${caller1}::$type";
+ if (exists &{$prop}) {
+ no strict 'refs';
+
+ $list = &{$prop};
+ last GETFILE;
+ }
+ }
+
+ my $wasIs;
+
+ ($wasIs = $type =~ s/^Is(?:\s+|[-_])?//i)
+ or
+ $type =~ s/^(?:(?:General(?:\s+|_)?)?Category|gc)\s*[:=]\s*//i
+ or
+ $type =~ s/^(?:Script|sc)\s*[:=]\s*//i
+ or
+ $type =~ s/^Block\s*[:=]\s*/In/i;
+
+
+ ##
+ ## See if it's in some enumeration.
+ ##
+ require "unicore/PVA.pl";
+ if ($type =~ /^([\w\s]+)[:=]\s*(.*)/) {
+ my ($enum, $val) = (lc $1, lc $2);
+ $enum =~ tr/ _-//d;
+ $val =~ tr/ _-//d;
+
+ my $pa = $PropertyAlias{$enum} ? $enum : $PA_reverse{$enum};
+ my $f = $PropValueAlias{$pa}{$val} ? $val : $PVA_reverse{$pa}{lc $val};
+
+ if ($pa and $f) {
+ $pa = "gc_sc" if $pa eq "gc" or $pa eq "sc";
+ $file = "unicore/lib/$pa/$PVA_abbr_map{$pa}{lc $f}.pl";
+ last GETFILE;
+ }
+ }
+ else {
+ my $t = lc $type;
+ $t =~ tr/ _-//d;
+
+ if ($PropValueAlias{gc}{$t} or $PropValueAlias{sc}{$t}) {
+ $file = "unicore/lib/gc_sc/$PVA_abbr_map{gc_sc}{$t}.pl";
+ last GETFILE;
+ }
+ }
+
+ ##
+ ## See if it's in the direct mapping table.
+ ##
+ require "unicore/Exact.pl";
+ if (my $base = $utf8::Exact{$type}) {
+ $file = "unicore/lib/gc_sc/$base.pl";
+ last GETFILE;
+ }
+
+ ##
+ ## If not there exactly, try the canonical form. The canonical
+ ## form is lowercased, with any separators (\s+|[-_]) removed.
+ ##
+ my $canonical = lc $type;
+ $canonical =~ s/(?<=[a-z\d])(?:\s+|[-_])(?=[a-z\d])//g;
+ print "canonical = $canonical\n" if DEBUG;
+
+ require "unicore/Canonical.pl";
+ if (my $base = ($utf8::Canonical{$canonical} || $utf8::Canonical{ lc $utf8::PropertyAlias{$canonical} })) {
+ $file = "unicore/lib/gc_sc/$base.pl";
+ last GETFILE;
+ }
+
+ ##
+ ## See if it's a user-level "To".
+ ##
+
+ my $caller0 = caller(0);
+
+ if (defined $caller0 && $type =~ /^To(?:\w+)$/) {
+ my $map = $caller0 . "::" . $type;
+
+ if (exists &{$map}) {
+ no strict 'refs';
+
+ $list = &{$map};
+ last GETFILE;
+ }
+ }
+
+ ##
+ ## Last attempt -- see if it's a standard "To" name
+ ## (e.g. "ToLower") ToTitle is used by ucfirst().
+ ## The user-level way to access ToDigit() and ToFold()
+ ## is to use Unicode::UCD.
+ ##
+ if ($type =~ /^To(Digit|Fold|Lower|Title|Upper)$/)
+ {
+ $file = "unicore/To/$1.pl";
+ ## would like to test to see if $file actually exists....
+ last GETFILE;
+ }
+
+ ##
+ ## If we reach this line, it's because we couldn't figure
+ ## out what to do with $type. Ouch.
+ ##
+
+ return $type;
+ }
+
+ if (defined $file) {
+ print "found it (file='$file')\n" if DEBUG;
+
+ ##
+ ## If we reach here, it was due to a 'last GETFILE' above
+ ## (exception: user-defined properties and mappings), so we
+ ## have a filename, so now we load it if we haven't already.
+ ## If we have, return the cached results. The cache key is the
+ ## file to load.
+ ##
+ if ($Cache{$file} and ref($Cache{$file}) eq $class)
+ {
+ print "Returning cached '$file' for \\p{$type}\n" if DEBUG;
+ return $Cache{$class, $file};
+ }
+
+ $list = do $file;
+ }
+
+ $ListSorted = 1; ## we know that these lists are sorted
+ }
+
+ my $extras;
+ my $bits = 0;
+
+ my $ORIG = $list;
+ if ($list) {
+ my @tmp = split(/^/m, $list);
+ my %seen;
+ no warnings;
+ $extras = join '', grep /^[^0-9a-fA-F]/, @tmp;
+ $list = join '',
+ map { $_->[1] }
+ sort { $a->[0] <=> $b->[0] }
+ map { /^([0-9a-fA-F]+)/; [ hex($1), $_ ] }
+ grep { /^([0-9a-fA-F]+)/ and not $seen{$1}++ } @tmp; # XXX doesn't do ranges right
+ }
+
+ if ($none) {
+ my $hextra = sprintf "%04x", $none + 1;
+ $list =~ s/\tXXXX$/\t$hextra/mg;
+ }
+
+ if ($minbits < 32) {
+ my $top = 0;
+ while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ \t]([0-9a-fA-F]+))?/mg) {
+ my $min = hex $1;
+ my $max = defined $2 ? hex $2 : $min;
+ my $val = defined $3 ? hex $3 : 0;
+ $val += $max - $min if defined $3;
+ $top = $val if $val > $top;
+ }
+ $bits =
+ $top > 0xffff ? 32 :
+ $top > 0xff ? 16 :
+ $top > 1 ? 8 : 1
+ }
+ $bits = $minbits if $bits < $minbits;
+
+ my @extras;
+ for my $x ($extras) {
+ pos $x = 0;
+ while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) {
+ my $char = $1;
+ my $name = $2;
+ print STDERR "$1 => $2\n" if DEBUG;
+ if ($char =~ /[-+!&]/) {
+ my ($c,$t) = split(/::/, $name, 2); # bogus use of ::, really
+ my $subobj;
+ if ($c eq 'utf8') {
+ $subobj = utf8->SWASHNEW($t, "", 0, 0, 0);
+ }
+ elsif (exists &$name) {
+ $subobj = utf8->SWASHNEW($name, "", 0, 0, 0);
+ }
+ elsif ($c =~ /^([0-9a-fA-F]+)/) {
+ $subobj = utf8->SWASHNEW("", $c, 0, 0, 0);
+ }
+ return $subobj unless ref $subobj;
+ push @extras, $name => $subobj;
+ $bits = $subobj->{BITS} if $bits < $subobj->{BITS};
+ }
+ }
+ }
+
+ print STDERR "CLASS = $class, TYPE => $type, BITS => $bits, NONE => $none\nEXTRAS =>\n$extras\nLIST =>\n$list\n" if DEBUG;
+
+ my $SWASH = bless {
+ TYPE => $type,
+ BITS => $bits,
+ EXTRAS => $extras,
+ LIST => $list,
+ NONE => $none,
+ @extras,
+ } => $class;
+
+ if ($file) {
+ $Cache{$class, $file} = $SWASH;
+ }
+
+ return $SWASH;
+}
+
+# NOTE: utf8.c:swash_init() assumes entries are never modified once generated.
+
+sub SWASHGET {
+ # See utf8.c:Perl_swash_fetch for problems with this interface.
+ my ($self, $start, $len) = @_;
+ local $^D = 0 if $^D;
+ my $type = $self->{TYPE};
+ my $bits = $self->{BITS};
+ my $none = $self->{NONE};
+ print STDERR "SWASHGET @_ [$type/$bits/$none]\n" if DEBUG;
+ my $end = $start + $len;
+ my $swatch = "";
+ my $key;
+ vec($swatch, $len - 1, $bits) = 0; # Extend to correct length.
+ if ($none) {
+ for $key (0 .. $len - 1) { vec($swatch, $key, $bits) = $none }
+ }
+
+ for ($self->{LIST}) {
+ pos $_ = 0;
+ if ($bits > 1) {
+ LINE:
+ while (/^([0-9a-fA-F]+)(?:[ \t]([0-9a-fA-F]+)?)?(?:[ \t]([0-9a-fA-F]+))?/mg) {
+ chomp;
+ my ($a, $b, $c) = ($1, $2, $3);
+ croak "$type: illegal mapping '$_'"
+ if $type =~ /^To/ &&
+ !(defined $a && defined $c);
+ my $min = hex $a;
+ my $max = defined $b ? hex $b : $min;
+ my $val = defined $c ? hex $c : 0;
+ next if $max < $start;
+ print "$min $max $val\n" if DEBUG;
+ if ($none) {
+ if ($min < $start) {
+ $val += $start - $min if $val < $none;
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => $val\n" if DEBUG;
+ vec($swatch, $key - $start, $bits) = $val;
+ ++$val if $val < $none;
+ }
+ }
+ else {
+ if ($min < $start) {
+ $val += $start - $min;
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++, $val++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => $val\n" if DEBUG;
+ vec($swatch, $key - $start, $bits) = $val;
+ }
+ }
+ }
+ }
+ else {
+ LINE:
+ while (/^([0-9a-fA-F]+)(?:[ \t]+([0-9a-fA-F]+))?/mg) {
+ chomp;
+ my $min = hex $1;
+ my $max = defined $2 ? hex $2 : $min;
+ next if $max < $start;
+ if ($min < $start) {
+ $min = $start;
+ }
+ for ($key = $min; $key <= $max; $key++) {
+ last LINE if $key >= $end;
+ print STDERR "$key => 1\n" if DEBUG;
+ vec($swatch, $key - $start, 1) = 1;
+ }
+ }
+ }
+ }
+ for my $x ($self->{EXTRAS}) {
+ pos $x = 0;
+ while ($x =~ /^([-+!&])(.*)/mg) {
+ my $char = $1;
+ my $name = $2;
+ print STDERR "INDIRECT $1 $2\n" if DEBUG;
+ my $otherbits = $self->{$name}->{BITS};
+ croak("SWASHGET size mismatch") if $bits < $otherbits;
+ my $other = $self->{$name}->SWASHGET($start, $len);
+ if ($char eq '+') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch |= $other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ vec($swatch, $key, $bits) = vec($other, $key, $otherbits);
+ }
+ }
+ }
+ elsif ($char eq '!') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch |= ~$other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ if (!vec($other, $key, $otherbits)) {
+ vec($swatch, $key, $bits) = 1;
+ }
+ }
+ }
+ }
+ elsif ($char eq '-') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch &= ~$other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ if (vec($other, $key, $otherbits)) {
+ vec($swatch, $key, $bits) = 0;
+ }
+ }
+ }
+ }
+ elsif ($char eq '&') {
+ if ($bits == 1 and $otherbits == 1) {
+ $swatch &= $other;
+ }
+ else {
+ for ($key = 0; $key < $len; $key++) {
+ if (!vec($other, $key, $otherbits)) {
+ vec($swatch, $key, $bits) = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (DEBUG) {
+ print STDERR "CELLS ";
+ for ($key = 0; $key < $len; $key++) {
+ print STDERR vec($swatch, $key, $bits), " ";
+ }
+ print STDERR "\n";
+ }
+ $swatch;
+}
+
+1;
diff --git a/Master/tlpkg/tlperl/lib/vars.pm b/Master/tlpkg/tlperl/lib/vars.pm
new file mode 100644
index 00000000000..a0151b84030
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/vars.pm
@@ -0,0 +1,82 @@
+package vars;
+
+use 5.006;
+
+our $VERSION = '1.01';
+
+use warnings::register;
+use strict qw(vars subs);
+
+sub import {
+ my $callpack = caller;
+ my ($pack, @imports) = @_;
+ my ($sym, $ch);
+ foreach (@imports) {
+ if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
+ if ($sym =~ /\W/) {
+ # time for a more-detailed check-up
+ if ($sym =~ /^\w+[[{].*[]}]$/) {
+ require Carp;
+ Carp::croak("Can't declare individual elements of hash or array");
+ } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
+ warnings::warn("No need to declare built-in vars");
+ } elsif (($^H &= strict::bits('vars'))) {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name under strict vars");
+ }
+ }
+ $sym = "${callpack}::$sym" unless $sym =~ /::/;
+ *$sym =
+ ( $ch eq "\$" ? \$$sym
+ : $ch eq "\@" ? \@$sym
+ : $ch eq "\%" ? \%$sym
+ : $ch eq "\*" ? \*$sym
+ : $ch eq "\&" ? \&$sym
+ : do {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name");
+ });
+ } else {
+ require Carp;
+ Carp::croak("'$_' is not a valid variable name");
+ }
+ }
+};
+
+1;
+__END__
+
+=head1 NAME
+
+vars - Perl pragma to predeclare global variable names (obsolete)
+
+=head1 SYNOPSIS
+
+ use vars qw($frob @mung %seen);
+
+=head1 DESCRIPTION
+
+NOTE: For variables in the current package, the functionality provided
+by this pragma has been superseded by C<our> declarations, available
+in Perl v5.6.0 or later. See L<perlfunc/our>.
+
+This will predeclare all the variables whose names are
+in the list, allowing you to use them under "use strict", and
+disabling any typo warnings.
+
+Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and
+C<use subs> declarations are not BLOCK-scoped. They are thus effective
+for the entire file in which they appear. You may not rescind such
+declarations with C<no vars> or C<no subs>.
+
+Packages such as the B<AutoLoader> and B<SelfLoader> that delay
+loading of subroutines within packages can create problems with
+package lexicals defined using C<my()>. While the B<vars> pragma
+cannot duplicate the effect of package lexicals (total transparency
+outside of the package), it can act as an acceptable substitute by
+pre-declaring global symbols, ensuring their availability to the
+later-loaded routines.
+
+See L<perlmodlib/Pragmatic Modules>.
+
+=cut
diff --git a/Master/tlpkg/tlperl/lib/warnings.pm b/Master/tlpkg/tlperl/lib/warnings.pm
new file mode 100644
index 00000000000..e43b686c908
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/warnings.pm
@@ -0,0 +1,497 @@
+# -*- buffer-read-only: t -*-
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# This file was created by warnings.pl
+# Any changes made here will be lost.
+#
+
+package warnings;
+
+our $VERSION = '1.05';
+
+=head1 NAME
+
+warnings - Perl pragma to control optional warnings
+
+=head1 SYNOPSIS
+
+ use warnings;
+ no warnings;
+
+ use warnings "all";
+ no warnings "all";
+
+ use warnings::register;
+ if (warnings::enabled()) {
+ warnings::warn("some warning");
+ }
+
+ if (warnings::enabled("void")) {
+ warnings::warn("void", "some warning");
+ }
+
+ if (warnings::enabled($object)) {
+ warnings::warn($object, "some warning");
+ }
+
+ warnings::warnif("some warning");
+ warnings::warnif("void", "some warning");
+ warnings::warnif($object, "some warning");
+
+=head1 DESCRIPTION
+
+The C<warnings> pragma is a replacement for the command line flag C<-w>,
+but the pragma is limited to the enclosing block, while the flag is global.
+See L<perllexwarn> for more information.
+
+If no import list is supplied, all possible warnings are either enabled
+or disabled.
+
+A number of functions are provided to assist module authors.
+
+=over 4
+
+=item use warnings::register
+
+Creates a new warnings category with the same name as the package where
+the call to the pragma is used.
+
+=item warnings::enabled()
+
+Use the warnings category with the same name as the current package.
+
+Return TRUE if that warnings category is enabled in the calling module.
+Otherwise returns FALSE.
+
+=item warnings::enabled($category)
+
+Return TRUE if the warnings category, C<$category>, is enabled in the
+calling module.
+Otherwise returns FALSE.
+
+=item warnings::enabled($object)
+
+Use the name of the class for the object reference, C<$object>, as the
+warnings category.
+
+Return TRUE if that warnings category is enabled in the first scope
+where the object is used.
+Otherwise returns FALSE.
+
+=item warnings::warn($message)
+
+Print C<$message> to STDERR.
+
+Use the warnings category with the same name as the current package.
+
+If that warnings category has been set to "FATAL" in the calling module
+then die. Otherwise return.
+
+=item warnings::warn($category, $message)
+
+Print C<$message> to STDERR.
+
+If the warnings category, C<$category>, has been set to "FATAL" in the
+calling module then die. Otherwise return.
+
+=item warnings::warn($object, $message)
+
+Print C<$message> to STDERR.
+
+Use the name of the class for the object reference, C<$object>, as the
+warnings category.
+
+If that warnings category has been set to "FATAL" in the scope where C<$object>
+is first used then die. Otherwise return.
+
+
+=item warnings::warnif($message)
+
+Equivalent to:
+
+ if (warnings::enabled())
+ { warnings::warn($message) }
+
+=item warnings::warnif($category, $message)
+
+Equivalent to:
+
+ if (warnings::enabled($category))
+ { warnings::warn($category, $message) }
+
+=item warnings::warnif($object, $message)
+
+Equivalent to:
+
+ if (warnings::enabled($object))
+ { warnings::warn($object, $message) }
+
+=back
+
+See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
+
+=cut
+
+use Carp ();
+
+our %Offsets = (
+
+ # Warnings Categories added in Perl 5.008
+
+ 'all' => 0,
+ 'closure' => 2,
+ 'deprecated' => 4,
+ 'exiting' => 6,
+ 'glob' => 8,
+ 'io' => 10,
+ 'closed' => 12,
+ 'exec' => 14,
+ 'layer' => 16,
+ 'newline' => 18,
+ 'pipe' => 20,
+ 'unopened' => 22,
+ 'misc' => 24,
+ 'numeric' => 26,
+ 'once' => 28,
+ 'overflow' => 30,
+ 'pack' => 32,
+ 'portable' => 34,
+ 'recursion' => 36,
+ 'redefine' => 38,
+ 'regexp' => 40,
+ 'severe' => 42,
+ 'debugging' => 44,
+ 'inplace' => 46,
+ 'internal' => 48,
+ 'malloc' => 50,
+ 'signal' => 52,
+ 'substr' => 54,
+ 'syntax' => 56,
+ 'ambiguous' => 58,
+ 'bareword' => 60,
+ 'digit' => 62,
+ 'parenthesis' => 64,
+ 'precedence' => 66,
+ 'printf' => 68,
+ 'prototype' => 70,
+ 'qw' => 72,
+ 'reserved' => 74,
+ 'semicolon' => 76,
+ 'taint' => 78,
+ 'threads' => 80,
+ 'uninitialized' => 82,
+ 'unpack' => 84,
+ 'untie' => 86,
+ 'utf8' => 88,
+ 'void' => 90,
+ 'y2k' => 92,
+ );
+
+our %Bits = (
+ 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..46]
+ 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29]
+ 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30]
+ 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+ 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+ 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22]
+ 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+ 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31]
+ 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+ 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+ 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+ 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23]
+ 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24]
+ 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
+ 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+ 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25]
+ 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+ 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+ 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+ 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+ 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+ 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16]
+ 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32]
+ 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+ 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17]
+ 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33]
+ 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34]
+ 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35]
+ 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36]
+ 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18]
+ 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19]
+ 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [20]
+ 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37]
+ 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38]
+ 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", # [21..25]
+ 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26]
+ 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [27]
+ 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", # [28..38]
+ 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39]
+ 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40]
+ 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41]
+ 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+ 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42]
+ 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43]
+ 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44]
+ 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45]
+ 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [46]
+ );
+
+our %DeadBits = (
+ 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..46]
+ 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29]
+ 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30]
+ 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+ 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+ 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22]
+ 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+ 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31]
+ 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+ 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+ 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+ 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23]
+ 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24]
+ 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
+ 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+ 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25]
+ 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+ 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+ 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+ 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+ 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+ 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16]
+ 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32]
+ 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+ 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17]
+ 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33]
+ 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34]
+ 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35]
+ 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36]
+ 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18]
+ 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19]
+ 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [20]
+ 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37]
+ 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38]
+ 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", # [21..25]
+ 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26]
+ 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [27]
+ 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", # [28..38]
+ 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39]
+ 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40]
+ 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41]
+ 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+ 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42]
+ 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43]
+ 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44]
+ 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45]
+ 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [46]
+ );
+
+$NONE = "\0\0\0\0\0\0\0\0\0\0\0\0";
+$LAST_BIT = 94 ;
+$BYTES = 12 ;
+
+$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
+
+sub Croaker
+{
+ local $Carp::CarpInternal{'warnings'};
+ delete $Carp::CarpInternal{'warnings'};
+ Carp::croak(@_);
+}
+
+sub bits
+{
+ # called from B::Deparse.pm
+
+ push @_, 'all' unless @_;
+
+ my $mask;
+ my $catmask ;
+ my $fatal = 0 ;
+ my $no_fatal = 0 ;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ $fatal = 1;
+ $no_fatal = 0;
+ }
+ elsif ($word eq 'NONFATAL') {
+ $fatal = 0;
+ $no_fatal = 1;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask |= $catmask ;
+ $mask |= $DeadBits{$word} if $fatal ;
+ $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ return $mask ;
+}
+
+sub import
+{
+ shift;
+
+ my $catmask ;
+ my $fatal = 0 ;
+ my $no_fatal = 0 ;
+
+ my $mask = ${^WARNING_BITS} ;
+
+ if (vec($mask, $Offsets{'all'}, 1)) {
+ $mask |= $Bits{'all'} ;
+ $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+ }
+
+ push @_, 'all' unless @_;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ $fatal = 1;
+ $no_fatal = 0;
+ }
+ elsif ($word eq 'NONFATAL') {
+ $fatal = 0;
+ $no_fatal = 1;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask |= $catmask ;
+ $mask |= $DeadBits{$word} if $fatal ;
+ $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ ${^WARNING_BITS} = $mask ;
+}
+
+sub unimport
+{
+ shift;
+
+ my $catmask ;
+ my $mask = ${^WARNING_BITS} ;
+
+ if (vec($mask, $Offsets{'all'}, 1)) {
+ $mask |= $Bits{'all'} ;
+ $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+ }
+
+ push @_, 'all' unless @_;
+
+ foreach my $word ( @_ ) {
+ if ($word eq 'FATAL') {
+ next;
+ }
+ elsif ($catmask = $Bits{$word}) {
+ $mask &= ~($catmask | $DeadBits{$word} | $All);
+ }
+ else
+ { Croaker("Unknown warnings category '$word'")}
+ }
+
+ ${^WARNING_BITS} = $mask ;
+}
+
+my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
+
+sub __chk
+{
+ my $category ;
+ my $offset ;
+ my $isobj = 0 ;
+
+ if (@_) {
+ # check the category supplied.
+ $category = shift ;
+ if (my $type = ref $category) {
+ Croaker("not an object")
+ if exists $builtin_type{$type};
+ $category = $type;
+ $isobj = 1 ;
+ }
+ $offset = $Offsets{$category};
+ Croaker("Unknown warnings category '$category'")
+ unless defined $offset;
+ }
+ else {
+ $category = (caller(1))[0] ;
+ $offset = $Offsets{$category};
+ Croaker("package '$category' not registered for warnings")
+ unless defined $offset ;
+ }
+
+ my $this_pkg = (caller(1))[0] ;
+ my $i = 2 ;
+ my $pkg ;
+
+ if ($isobj) {
+ while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
+ last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
+ }
+ $i -= 2 ;
+ }
+ else {
+ for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
+ last if $pkg ne $this_pkg ;
+ }
+ $i = 2
+ if !$pkg || $pkg eq $this_pkg ;
+ }
+
+ my $callers_bitmask = (caller($i))[9] ;
+ return ($callers_bitmask, $offset, $i) ;
+}
+
+sub enabled
+{
+ Croaker("Usage: warnings::enabled([category])")
+ unless @_ == 1 || @_ == 0 ;
+
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+
+ return 0 unless defined $callers_bitmask ;
+ return vec($callers_bitmask, $offset, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}, 1) ;
+}
+
+
+sub warn
+{
+ Croaker("Usage: warnings::warn([category,] 'message')")
+ unless @_ == 2 || @_ == 1 ;
+
+ my $message = pop ;
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+ Carp::croak($message)
+ if vec($callers_bitmask, $offset+1, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
+ Carp::carp($message) ;
+}
+
+sub warnif
+{
+ Croaker("Usage: warnings::warnif([category,] 'message')")
+ unless @_ == 2 || @_ == 1 ;
+
+ my $message = pop ;
+ my ($callers_bitmask, $offset, $i) = __chk(@_) ;
+
+ return
+ unless defined $callers_bitmask &&
+ (vec($callers_bitmask, $offset, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}, 1)) ;
+
+ Carp::croak($message)
+ if vec($callers_bitmask, $offset+1, 1) ||
+ vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
+
+ Carp::carp($message) ;
+}
+
+1;
+# ex: set ro:
diff --git a/Master/tlpkg/tlperl/lib/warnings/register.pm b/Master/tlpkg/tlperl/lib/warnings/register.pm
new file mode 100644
index 00000000000..57c865df522
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/warnings/register.pm
@@ -0,0 +1,51 @@
+package warnings::register;
+
+our $VERSION = '1.01';
+
+=pod
+
+=head1 NAME
+
+warnings::register - warnings import function
+
+=head1 SYNOPSIS
+
+ use warnings::register;
+
+=head1 DESCRIPTION
+
+Creates a warnings category with the same name as the current package.
+
+See L<warnings> and L<perllexwarn> for more information on this module's
+usage.
+
+=cut
+
+require warnings;
+
+sub mkMask
+{
+ my ($bit) = @_;
+ my $mask = "";
+
+ vec($mask, $bit, 1) = 1;
+ return $mask;
+}
+
+sub import
+{
+ shift;
+ my $package = (caller(0))[0];
+ if (! defined $warnings::Bits{$package}) {
+ $warnings::Bits{$package} = mkMask($warnings::LAST_BIT);
+ vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1;
+ $warnings::Offsets{$package} = $warnings::LAST_BIT ++;
+ foreach my $k (keys %warnings::Bits) {
+ vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0;
+ }
+ $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT);
+ vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1;
+ }
+}
+
+1;