Tools/IconTable: Updated to show a preview of the html page. By Roland Hahn.

This commit is contained in:
wp_xyz 2024-04-10 23:20:44 +02:00
parent 862911af46
commit fe7b7937f5
4 changed files with 517 additions and 427 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -19,7 +19,8 @@
<VersionInfo>
<UseVersionInfo Value="True"/>
<MajorVersionNr Value="1"/>
<StringTable CompanyName="Lazarus and Free Pascal" InternalName="IconTable" LegalCopyright="Lazarus and Free Pascal - Roland Hahn" OriginalFilename="IconTable.exe" ProductName="IconTable" ProductVersion="1.0"/>
<MinorVersionNr Value="1"/>
<StringTable CompanyName="Lazarus and Free Pascal" InternalName="IconTable" LegalCopyright="Lazarus and Free Pascal - Roland Hahn" OriginalFilename="IconTable.exe" ProductName="IconTable" ProductVersion="1.1"/>
</VersionInfo>
<BuildModes Count="2" Active="Release">
<Item1 Name="Debug" Default="True"/>
@ -79,7 +80,7 @@
<Filename Value="IconTable.lpr"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="-1"/>
<UsageCount Value="28"/>
<UsageCount Value="36"/>
</Unit0>
<Unit1>
<Filename Value="main.pas"/>
@ -88,8 +89,9 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<CursorPos X="42" Y="18"/>
<UsageCount Value="28"/>
<TopLine Value="202"/>
<CursorPos X="3" Y="206"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit1>
@ -105,122 +107,123 @@
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="main.pas"/>
<Caret Line="379" Column="45" TopLine="351"/>
<Caret Line="219" Column="7" TopLine="186"/>
</Position1>
<Position2>
<Filename Value="main.pas"/>
<Caret Line="395" Column="7" TopLine="355"/>
<Caret Line="260" Column="51" TopLine="235"/>
</Position2>
<Position3>
<Filename Value="main.pas"/>
<Caret Line="43" Column="19" TopLine="23"/>
<Caret Line="48" Column="20" TopLine="13"/>
</Position3>
<Position4>
<Filename Value="main.pas"/>
<Caret Line="466" Column="20" TopLine="442"/>
<Caret Line="485" Column="38" TopLine="450"/>
</Position4>
<Position5>
<Filename Value="main.pas"/>
<Caret Line="43" Column="14" TopLine="20"/>
<Caret Line="171" Column="17" TopLine="147"/>
</Position5>
<Position6>
<Filename Value="main.pas"/>
<Caret Line="118" Column="23" TopLine="95"/>
<Caret Line="316" Column="12" TopLine="293"/>
</Position6>
<Position7>
<Filename Value="main.pas"/>
<Caret Line="136" Column="20" TopLine="96"/>
<Caret Line="284" TopLine="260"/>
</Position7>
<Position8>
<Filename Value="main.pas"/>
<Caret Line="163" Column="75" TopLine="128"/>
<Caret Line="317" TopLine="293"/>
</Position8>
<Position9>
<Filename Value="main.pas"/>
<Caret Line="80" Column="36" TopLine="56"/>
<Caret Line="284" TopLine="260"/>
</Position9>
<Position10>
<Filename Value="main.pas"/>
<Caret Line="408" Column="10" TopLine="390"/>
<Caret Line="232" TopLine="207"/>
</Position10>
<Position11>
<Filename Value="main.pas"/>
<Caret Line="80" Column="16" TopLine="65"/>
<Caret Line="213" Column="10" TopLine="206"/>
</Position11>
<Position12>
<Filename Value="main.pas"/>
<Caret Line="107" Column="7" TopLine="67"/>
<Caret Line="182" TopLine="158"/>
</Position12>
<Position13>
<Filename Value="main.pas"/>
<Caret Line="108" Column="7" TopLine="68"/>
<Caret Line="491" Column="18" TopLine="467"/>
</Position13>
<Position14>
<Filename Value="main.pas"/>
<Caret Line="123" Column="7" TopLine="100"/>
<Caret Line="494" Column="43" TopLine="468"/>
</Position14>
<Position15>
<Filename Value="main.pas"/>
<Caret Line="126" Column="22" TopLine="100"/>
<Caret Line="492" Column="5" TopLine="476"/>
</Position15>
<Position16>
<Filename Value="main.pas"/>
<Caret Line="127" Column="32" TopLine="100"/>
<Caret Line="488" TopLine="476"/>
</Position16>
<Position17>
<Filename Value="main.pas"/>
<Caret Line="129" Column="27" TopLine="100"/>
<Caret Line="489" Column="14" TopLine="476"/>
</Position17>
<Position18>
<Filename Value="main.pas"/>
<Caret Line="163" Column="64" TopLine="139"/>
<Caret Line="48" Column="12" TopLine="24"/>
</Position18>
<Position19>
<Filename Value="main.pas"/>
<Caret Line="409" Column="7" TopLine="385"/>
<Caret Line="286" TopLine="262"/>
</Position19>
<Position20>
<Filename Value="main.pas"/>
<Caret Line="410" Column="7" TopLine="385"/>
<Caret Line="233" TopLine="209"/>
</Position20>
<Position21>
<Filename Value="main.pas"/>
<Caret Line="420" Column="3" TopLine="385"/>
<Caret Line="214" TopLine="207"/>
</Position21>
<Position22>
<Filename Value="main.pas"/>
<Caret Line="411" Column="53" TopLine="401"/>
<Caret Line="181" TopLine="158"/>
</Position22>
<Position23>
<Filename Value="main.pas"/>
<Caret Line="120" Column="43" TopLine="97"/>
<Caret Line="48" Column="20" TopLine="30"/>
</Position23>
<Position24>
<Filename Value="main.pas"/>
<Caret Line="124" Column="68" TopLine="97"/>
<Caret Line="436" Column="34" TopLine="412"/>
</Position24>
<Position25>
<Filename Value="main.pas"/>
<Caret Line="140" Column="40" TopLine="100"/>
<Caret Line="486" Column="31" TopLine="462"/>
</Position25>
<Position26>
<Filename Value="main.pas"/>
<Caret Line="337" Column="39" TopLine="314"/>
<Caret Line="438" Column="26" TopLine="414"/>
</Position26>
<Position27>
<Filename Value="main.pas"/>
<Caret Line="411" Column="7" TopLine="387"/>
<Caret Line="437" Column="31" TopLine="414"/>
</Position27>
<Position28>
<Filename Value="main.pas"/>
<Caret Line="424" Column="23" TopLine="387"/>
<Caret Line="436" Column="28" TopLine="414"/>
</Position28>
<Position29>
<Filename Value="main.pas"/>
<Caret Line="225" Column="14" TopLine="201"/>
</Position29>
<Position30>
<Filename Value="main.pas"/>
<Caret Line="37" Column="15" TopLine="13"/>
<Caret Line="26" Column="44"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -2,13 +2,13 @@ object MainForm: TMainForm
Left = 1029
Height = 515
Top = 221
Width = 600
Width = 700
AllowDropFiles = True
Caption = 'IconTable'
ClientHeight = 515
ClientWidth = 600
ClientWidth = 700
Constraints.MinHeight = 515
Constraints.MinWidth = 600
Constraints.MinWidth = 700
OnClose = FormClose
OnCreate = FormCreate
OnDropFiles = FormDropFiles
@ -25,7 +25,7 @@ object MainForm: TMainForm
Height = 23
Hint = 'Folder with images for which the html preview should be created'
Top = 10
Width = 555
Width = 655
ShowHidden = False
ButtonWidth = 23
NumGlyphs = 1
@ -50,7 +50,7 @@ object MainForm: TMainForm
Left = 0
Height = 426
Top = 43
Width = 600
Width = 700
BorderSpacing.Top = 10
BorderSpacing.Bottom = 10
Anchors = [akTop, akLeft, akRight, akBottom]
@ -565,7 +565,7 @@ object MainForm: TMainForm
object sbtnLastDirs: TSpeedButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 567
Left = 667
Height = 23
Hint = 'Last used'
Top = 10
@ -583,7 +583,7 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 514
Left = 614
Height = 26
Hint = 'Closes the application'
Top = 479
@ -598,13 +598,13 @@ object MainForm: TMainForm
ImageIndex = 2
OnClick = bbtnCloseClick
Spacing = 5
TabOrder = 6
TabOrder = 7
end
object bbtnShow: TBitBtn
AnchorSideTop.Control = bbtnClose
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = bbtnClose
Left = 430
Left = 530
Height = 26
Hint = 'Displays the generated html file in the browser.'
Top = 479
@ -618,13 +618,13 @@ object MainForm: TMainForm
ImageIndex = 5
OnClick = bbtnShowClick
Spacing = 5
TabOrder = 5
TabOrder = 6
end
object bbtnSave: TBitBtn
AnchorSideTop.Control = bbtnShow
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = bbtnShow
Left = 351
Left = 451
Height = 26
Hint = 'Save the generated html text as file "IconTable.html" in the specified folder'
Top = 479
@ -638,13 +638,13 @@ object MainForm: TMainForm
ImageIndex = 4
OnClick = bbtnSaveClick
Spacing = 5
TabOrder = 4
TabOrder = 5
end
object bbtnCreateHTML: TBitBtn
AnchorSideTop.Control = bbtnSave
AnchorSideTop.Control = bbtnPreview
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = bbtnSave
Left = 227
AnchorSideRight.Control = bbtnPreview
Left = 232
Height = 26
Hint = 'Create a html page for the images found in the selected directory'
Top = 479
@ -661,6 +661,23 @@ object MainForm: TMainForm
Spacing = 5
TabOrder = 3
end
object bbtnPreview: TBitBtn
AnchorSideTop.Control = bbtnSave
AnchorSideRight.Control = bbtnSave
Left = 356
Height = 26
Top = 479
Width = 87
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Right = 8
Caption = 'Preview'
Enabled = False
Images = ImageList
ImageIndex = 7
OnClick = bbtnPreviewClick
TabOrder = 4
end
object TaskDialog: TTaskDialog
Buttons = <>
RadioButtons = <>
@ -678,291 +695,329 @@ object MainForm: TMainForm
Left = 256
Top = 64
Bitmap = {
4C7A070000001000000010000000AE0700000000000078DAED98796C944514C0
070A655B244454A4981035C60388844411080415A8272A87280A786B3051E385
17B5D5520F2C28464A4010DB0AB4BBDD055A28D0A6402DB5DB9636C276AF42D9
D22E65DBEDDDDD5E7B3CDF9B3DFAEDEEB7DBA518A3863F5E66BE99F79B79F3E6
BDF9BE6F0080C115484DFE8CAD0DE5AB6A2E963D6F20A1BAA160464AB87CC3A9
57CE81DD0C42693CFD76FDF982993F8794FC7BB79FCDBD6D5E43C56B067F3E2C
B13542FD1F8B75627C5FBB122E9D5A09A68A17834A63E5CB505BF860A751B9DC
68567F0AE6AA8FBC5257140BCE8E0280AEDF434A8372A9ADAE68415F38BAA27C
E932DBC592276CA1746C1D45B03EBF166ED9D40F23BF74F232EE483D74B79E04
621B4A971842B1737FEE82D8343B1C3700D4B6011C3B0FF0E45E07CCDE6E813A
E57243289EE625F6622770D9AC046F7D61AA1DDEDB9DD5168A275B695E0FC3E2
07EA0568C7A4EF3AECA1F8485C2FD9FC7D898BF5083D1B5A01FBEDE8C3C5E742
CD4FEB159DBFC635BF217F6A4A43E9D26A53F9B367FD654DDAE1D645BBFB9D62
EB9FBFABCFB162DB3E65A8DC60EF42D4355F41E5DC9D60A1F5D25A68DE39F83C
2609CA59028C182CBF4847920471388E29E20BB0637949B21ED60DC64AA52CE2
4C16BBF38C94CD3A2D6577D07338F9AC96B209BAEC1BD3F53931A6DADF17341A
4B9F6BA6929E75D913D2547BD88D41599964BE3E67A2A9B30E83C3DEE497B34D
D051F78B5D9F3DD15425973C10C066B1E9D5B9B79A6D56AD0FD7DDD3ECF36CB3
68A0FAD0ADE6AA0C36CDCB27B0E1DAECF167FBDACB7D74B5A65618F3951302CF
8752D0658FAF26CEBDE6878D652BDBFCF5CAEBDB78CC889D3FC6D2156D2A198B
255E9733F1378BE9005C0E6FB9B40FD0A7A9C4EB0F4E2CA775F9AFD99F17FAC2
66A902FDC19B4A399F735399CDA2E6ED752D2D10B5DE0987F51D3E7C72910562
921D037C978A78A56BFE9874A1FD9B4E5A6054A29397C46F743FE7683B44EDAF
CA640F19CB9EF7F1DF77381FE52FF19244973D3EFE533ED3A692B2859EFDA3FD
A07D11EAAC3DD20D18E7016C6F5B09E80EDCA04774982706281E282E847E2469
E96CF18B1F3554E7DED2A4CA6277FBC720C525C567C7859DE2F17B6107C66F8C
49AB90CC0B9603941FFA9C09A928A6DAC2F9983F2B9AA9A4677DCEF85F2BA5EC
8670F290F2559BC16ED764B09954869BBFBEF9C8E2492E87C1F3621EE6C338EE
0F293B4EE2CE9171D417E2DC88C4B9D2511FAA64EC4D7F9EDAA80FF5D24E6D63
23037C2F65BB519CAA4CF6A967AD429EDA708C75A443F3F8F85CC696B8C7FED8
6F4C2FEFD5C5F1495793C99E12E82951D49EF32014CFED90322D4A31CF9D3DEC
7A6E93DFDCC1786E83947D86ED8E33BBD9B578EEDDE7B6E7D1005EC69E250968
CF648B88C118BEC7C3A34F1E09778FD15F8F7B78AD825D47F6E3981F851D57B8
56F79A3D71A2C435A9FCFD172CAEC9D7A85F22186F19B727937D10E6DC407B3E
D0CE86E17326F914C7FD50CC0E3E2FAE917428D6FCFB0DBB98C43D06D05A681C
F22909EEC15AB299C77626DB7B36978D0A91734FA35E19F729E9BB84EAA5C82E
0DD7C7744ED0BB9B24DC33E30F298B52CB467CA091473768B2F02BC1DD4E756A
A33ED209C6630C2ED0EE1FD3D359F335A815122BFA7A1217AC531BF5914E30FE
741A1BADCE1AD9EB68CF83A6CA17FA358A682309D5A98DFA4847C89CCA61D1F4
1EA092F64D238FBA60A9DD8CDFDFC7C052FB3D17577D33501FE908195CD3FB64
178D4DFDE7F3265B682EFAFE73761E4739C1EBD4467DA443BA9C2116EDA3B551
7F9761232F1DED47A0FEE442AB5A36B24F2D8FEC3516C75AA94DA8C3FD41EB93
4912C93FB446CF7F00E9E33C19E8BB6B7407D8188D429249E3719B5087748921
D61DD393348AA88B960B3F729B694EE23C3EA23AB5511FE9902E31829C08E069
EE40FE44001FCC7EAD3C4A469C8B8D92198B1F16B53F98FF8CC50F59B91D5EFF
1D15F55FE8FD3B31E8FE5D69FC5C69FCFE9DF933D4FCD51D189BA2960DB7F3F7
805C82EFDF08109C3D2EC136DC475ED72A461FA6F7F5C09935DCEED97B5C2338
7ACE077CAF529B3A2B92EF7FEDB1FBAC3486E03DE7FDE7E275E15D80EA436F9B
478FC6E0F521F25E3D113E98FDF69E1A6EFF60BCA962351FC3DF7FD4D658B97A
503E5C11E34D15AB44E716DA40F605E383ADDD7F0F83F1FEBE17131FDDFF09EF
89FFC1FCE78921AE8B8C37FFF68FDDA2960E77F0FC12CB3D410E6A303F4957B7
6FEC16B8C2BBBBBF5354B288C7F1AC6B0D6A3B7DA3CAA35B34D288C744CF3EEC
B336E586F4BDB5F110BE7B46378BF1E1EC9D77FFFE23BCADCF0C07FFEC848D79
DDB057D9052D1D2D61F3ADF8DFBA24C506B3BF75C21BE97D10FB831DE66C7080
E2D75961F19FC87B61D9561BB477B9EE0CECFD6688DBDF03F727D5C0FD227747
42DE6933C3AC6F9C905FE5FBDFDDD6D90C933F07E7943898168A77207F4F9213
0A75BEBCB5BB19A624209F003306B37FCD6F7DF06A6A3FF7A1A7EDEB43DD303D
D1D97BDB5B306A30BEDEDC0AF3921DB0E8273B2421F7D2AE7E989A003019FF86
EF4A8075A2F18BF1291C837C9772CC0AEF64F4C28623DDB0FDA81AC7B0F331A6
7C0E713E3CE6058D11327F14D1CDAF6FCAD880EBB7BBED983A945CC53D78724A
3C6CB939012470F5FEFFEAFDFF3F74FF9F776EE8F7FF5F16BAEEDFA9BCDCFBFF
1D150031C900728DABA4E7CBB9FF8F3F3E603B95F43C94FB7FA1FC5BEEFFFF02
E0501E69
4C7A080000001000000010000000C10800000000000078DAED597B7094D515BF
12814D2032B51509CE30853A7D0053C7198BE268B105A2565179D44A45FBF0D1
D25A3A6D7D544B2415A22D02964E89236A912092EC663790250193E1258F6C12
12029B7D241036649764F37EED26D9ECB77B7ACEDD47BEFDF6DB2F1F89D3691D
FF38735FE7775EF79CFBDDBD0B000CC6410DA50BDE6DAE7CAAE16AC5930E22EA
3B8E2CC8568B6F3EFBCC2510DA414CADE7D7392F1FB9EB7D452AFDDECE8BC5B7
2E6AAE7ACE21C5AB227F2B38CF2CB7CBE17D3D266839BB06DC553F4F48ADD5BF
84C6133FEC73991E77B55B5E83F6DA57A2D474321D82BD4700FA3F53A466D34A
7FD3C9253E35BCB2F8F255FEAB658FF89578FCBD2761536923CCDE360C13DF08
F236E3B01306BA4E01619BCB573894B0F7BEDF0FE939021C73003476031CBD0C
F0E8BE00DCBDD3034DA6C71D4A78D24BD8AB7DC069BB09A2FDA5BB05F8E3DEFC
6E253CD94A7A2318B661A47F04ED98F576AFA0849F84FE92CDEF9485B011A2B1
A30B705DC0182EBFA4A49FFC95D5DF10D2EF289D9FDD5CBEB2DE5DF9C44529AD
CD39D4B56CEF7050CEFFC5BB7C81D5EF1598946A83FD0192A7BE09D5F77E081E
F2977C21BDF7E038350B2A59265C3F5A7D118F260B32508E3BE9AF2060DBA2D9
04EB47C36AB52CE9423EFBF6052D5B785ECBBE456335F56CD1B219F6C29BF7D4
19D3DC8D9F2D697595FFB4835A1ADB0B67E4983F613727C4EA348BEB8C33DD7D
4D981C429BA466DBA0B7E9DF425DE14C77AD5EF383386C3EBBBDBE784EBBDF6B
8BC10D0C76C48CFD1E2BD417CD69AFCD65B745F1996C82AD70FA455F4F650CAF
CDDD05A96F0621FE7C28077BE1F47AC2857D7EC055B1A65BCA57E9ECE6392377
FEB8CA57779B752C9DF076E3CC8F3DEE03702D784F4B01604C7713BEEEE0CC4A
F24BEAB3142F8E85DF530B75076F29E778E32D157E8F85CF37757642F2A6201C
AAEB8DC16F39E981B42D81117CBF99F0A690FEB43D62FBB79DF2C0E48D41DE12
7E6B786CB4F5CADA5F9BC7EE77553C1913BFB7511FD52FE1351B43F6C4C4CFF4
936EB3962D8DEC1FED07ED8B98E7E5C30380791E871DEA2E03FB819BEA107A5D
2407281F282FC47124EAECEB94E48F05EA8B67B799F3D977A539487949F9D97B
E543F9FCBDF201E66F9ADB66D02C4A5403541F75C619BB91DC8D271663FDACEE
A096C675C6E91F556BD94D6AEA90EAD596CBBE69CD657751ABB67E63EB916D20
BA160C9E178BB01E6EE4F1D0B26344E11AB991D614CE8D49A86B0FF243AD8EFD
468AA7395A43BE9CB3EFB18971B1D7B2BD4841731E7B2DE2AB184F7328633DF1
909E9898EBD88AB0EC3F4B6446F1515E944FBCD63CF69888CF8464899C074A78
6E8796D9904EF3DAF9847D8DDB24D19D08CF6DD0B2BFE07CE0C25EF6153CF7EE
0CDBF3A338BC8E3D4114379FC796110673F88E081E63F2A0DA3DC6783D1CC1DB
0CECAB643FCA7C45755EA1AF619F237962429FCCD2F825CA6B8A35F29789E4AD
E2F6E4B11755EA06DAF39179761D8EF328A628F725393BB85EF4917828D7A4EB
8E5D4C139601E40BC9A19812E11EBC4C36F3DCCE63FB2E16B3C90A35F763E4AB
E03125FE1051BF1CB12BD5C698CE09FA7613A93D33CE6859B24577FD8B567D4A
B3351F6F09E179EAD31CAD114F223CE6E012DBFED4C1BE86B7C062D07831D6B3
38619FE6688D7812E1CFE7B02996FC8943819E1268ABFED9B0D590E222A23ECD
D11AF18831678D2C85BE03D4D2BE59F5C9573C8DDBF1FE7D143C8DEF700AF5B7
03AD118F18833EFD89EC22D9B47EB964AE8774D1FD2FD8770CE938EFD31CAD11
0FF1720C61D13EF28DD6FB1D5B791BE8390CCE534BBD16DD449F453F69C8753A
DD4B73621E1E0FF24FA7D948F1211F23BF03881FF5E462ECA6DA0FB054AB4193
47F2B84DC843BC84216C38A767590DC9573D57FEC96D269D848BC488FA34476B
C443BC8411D5441C9E74C7E38FC7E113D96FD327EB0817C226EB5CA71F90B53F
51FC5CA7EFF7723BA2F1FB54367ECAFB777CD4FD1B6FFE8C377F3FCFFA196BFD
DA0F4CCBB6E82608FC3BA0D7E0F7370944674F88700EF791F76D862987E87B3D
72664D10227B8F3E4260F072DC7D95E62CF993F8FE371EBDD34B3244DFB9E86F
2EDE17BF05985F8ACE45F84806EF8F111FE593C127B25F186CE0F68F8677573D
CD6548E34773ADD54F8F8A574B727877D553B2BAC536907D89F0897C97EE6122
BC34F67214C3FB05C147F27FB4F8457288F322265A7FFBA7EDB0682704787DC9
D59EA806AD589FC46B2F98B603C6F976F779925997F4309E755D096DA73BAA3E
A5D3AA4D7A48F6ECC3356F5BB162ECBDAD45F8ED99D2218757B377D1FDFB3FC1
FB7DED70B0A60FB6960CC03E533F74F676AAC677E1EFD615D97EB8FBEF41F8D5
1E1FA4FF43807B3607C0F0D14255F857F543B0EA5D3FF4F487DE0C84E176C8D8
3F08F76535C07D326F47627CD0DF0E0BFF1684D2DAD8DFDDDD7D1D30F77508CE
CB80DB94F001C4DF91158413F658BC77A003E665223E13168C66FFDA8F7DF0EC
EE611EC3C8DC5B450370FBC6E0D0ADBF83C9A3E19DED5DB0684B0096FD4B802C
C4FD62D730CCCF04988BBF86BF9309EB65F317F3532C8362977DD40BBFCF1D82
CD870760E7A71694217019F35E878C183CD605C950AC1F434AC7F3DB7237A3FF
42D88EF963A955DC8347E76D801D5FCF040D7CF9FEFFE5FBFF7FE9FDBFE4D2D8
DFFFDF38117A7FA7F65ADFFF3FA80248DB02A0B7865A1A5FCBFBFF866323B653
4BE3B1BCFF8BE97FF5FDDF9CCBBE8177FBE7F95B878E3D7B41CFE6A8A9637AC7
B216DC508CE47596ADF4B86B5E08504B63A4225A57C4EA535C2D352FF8823E57
EC9DD3E78496736B7DB44E6F4DB27707D44B58A57A6F39F76B9FADE006A39CBF
64A3546FDCDD17EDB0195207CE6BD96CC95BDA73E4A79A33C759F698077F373E
2379EF79D55DB34E5083779F5B27107FBCFE15EAF49F59DE2FD51FF19FFC53F6
BF09FD9F1AE77F38FE452D35BF558CBFAB7CCDB0553FB524D1FE5B0C539CB447
523B482F612DF4B6AB654348B2F747CA0DDA5FDA238A33E69F402DD94C7A091B
FE8E2694C17FC3A37F1423CA7F6A23FED27F3C881D0CCBF0E1F8916BBE23A3DE
DA583B968E5386712CDF6C7A43202CB6DFFF0F7EC71BF7
}
BitmapAdv = {
4C69020000004C7A070000001800000018000000E70B00000000000078DAED5B
7B7054D519BF09092420D28A4AA1338E43A70FA0762C7486B650681541B46AAB
50A52A6AA715A933B533DADA325348086D7DD011C1CA4B8619444C76B3812440
78C95350681221641F098F24BCF2D824BB796D4276EF7EFD7E67F7DE5C36F7EE
EEDD840A9DFCF1CDDE3D8FDF39E7F7FDBEEF9C7B772F114974139B2B7FF8A3AE
8251972BB7DFE58E3494A3BE4FF88C21779E270AB87B19CA5D85A32FF505BF72
C7DD0D7AD88A5DFCEC57CD7A6B8B65CADA63E1276ACADA63E1379F5D4E67777F
9BCEED1E6FCACEEE1A4F1585A35B6067778D336C77F1C84C0AB61E206A3B6CCA
644F11B90AEE905DF9B7CBB836DB3F1E3B533846865D0F6C05BFB27074F07AE1
039BF96F4DA4EF61E7297AF263378D59DE4D839706C5E753FCFD88EBA4DA06D8
95DBC73498C1F5B71CA197F26A2995319FB20669432951818BE88312A2272D41
51FEFBAD57443B609BC507F6D7FF25D3BE7344975B4376AEA9E77AEF59E2B5C8
620CB3F887981370A1C5B637100DC90A7D2A657B780CAC63F396C73D66F0C137
38517060A55738C92C097D6ACBC1D5EC95455D66F047BFEDA7F525A1FE657544
C72E1215BA42F8F8C47794A37E5D31D1A87F7A6433F8E026DF15E21B9C0037D2
508E7AB41B9CE92733F8D0E00766E6FF0F0FE7879197E3CD0FF3B2DD82D778F8
9F9B13A4FB56EC6B12FB178FC1B1E68E659BB73CE14DC994853EA2E967F71922
B4FBC9F2DDBF30BB1FA566D29ADBDFA42EED185AFD031BF5A94BE9DF89EC7752
06A5608CE44C92E7E450007A822FC1F7E3D9144039D7BF8F767DD957A5BFD194
C14BC99A9645EEE40CF2A72DA306FE9EC3B83FBE51CE2E768B3498ED41476EDA
3AC7D611A5CEBC5B2EC1706DB70D595B9E23CD421BD3D8195232F77BDE614B6F
E07340476DE902BFB76A0D75D41508C3756DC98B7E57C19D1D765B7A7DB9559A
8F3EF1609FD92CDD6ACF4BFFA4A2708CAFA56603EFF10D51CE090DE4AD5E4F15
055FF3396C43F7A26F2C6C9E7365F5E1FB3AE5AE2A536791EA833FED74E4A557
188E014EF2D2F7551FFA5927F9EB75718A2F7A84E9D505FD7518A3CB611BB657
8F2BF6D573E024DABCC7AE08088BB60E7075DA223D1BA913F832C4B7310FD897
60D1DAC01FF0B95657D0207412DD97F1E103C3C9BA3A6D95662AF80E5BDA7A68
30961FE3C377B3767FE7477CA8F8DB4694625DFD858FF870E68D2856F1F3865D
41DCF4177E7BDD3672709CF7E0DF72A9BD2EBF971627BC17A042678B213EEAD0
2652B3EDB55BC969EBC1E7B59478ABD6F6C2E77C284C19438B8F32A53E125FF0
B3F5D6FFA8F3E7FC857C12B9CEA28A164ACB0A0A8C6DF616157FA7ABA73CDFD1
A2E3DFDFFAEDB943566B626B1672959E3EB563DCF6469046B245C30EE9F38E0E
8EB107AEC9C31C13461A52B8485A12322D67BDB5B39638566B8BD74AA9D7E407
CEB1886DA37B49E029F846D881CE739C1F46F978BEBFD6CB6F9C63F7541F9CDE
895CA5D77F5369AB30A3FC5675607A97DD366C17C32519E667CEB1C8B546EB30
9A77D581699DCCB1D3952F0D8F7E3F2F0D77E40DDD03AE42FE88B1BF30DFAC0D
9FDD3674572C6C2D57A773A467E073E80AF9C45BB59A1083305C4383C863BC67
D4D9ADD2D3F1EE8F91791B799073D51A8E9762657F476E617DBF0F0D46EAE486
B5D09962132C112EE2E0EAAE728B44305CF70D4F4AC27ECC3E5EA4CCD5F9B174
B7828F6B8D0E16A1AD91E623ADEC23E9AB8C51A46039B2A58946F8A853CAD876
7EB155FA4A0C0E6E634D94A83C58A50D168B34C8081F7568A3E1AD18F333E4C4
221586DB76F39AE769EB75F951E6C5FA177D42F5F97A5CE1BCA99947AFFC140D
1F867854B9C2795453871861CCF3614E3ED45B5F2CFC700EDE126E73EEC00149
BDBF408C86E71D28B3496313C53F9D2D7D83EB65A18B1C69863AAE455A8532F6
ED2123DFC7831FC63A22DAE548EF68CA0E84E7BFCC103F4F1AC96DFC305C1BE2
5BA537C273DDABC17786B95F104DBFBCE669B0686D187761789D760DBE3D3CE6
C2BEE611E6E5E5307EB9067F5F989FB7FA8ACF3A5D1EC6DA1359C6F3FFACCFF8
8C21B01853CD3916697A784DC1B25CE93B0963674BE38011D6E7346D6EE7B2CA
F018DB12E6DE221584312A227304FBE50935BED94709F0FE07A53F73F4CB18F1
2DA3BD09CE5F51E296FB6D366A575C280DE5368735F3D8C13AB8D7309FE74ADF
D7EE15DCF6E0318B941E6D2EA8D7AC43B1529ED74A8EBF5761B84659449B8FAA
364A6971EFB756E931EE732A0243CF4EB2BF1EE9C3BE3E953132C1157F9E603B
CE65DB51C6B8536EE4334FF8F9CC1CF6E3641DDF4E465D22E737F429B72667D9
ADA9CD766B8A6CCF4DADD7EA02D7765B6A9DA8E336E0CACC38AE8FA531F09DFB
D4020A788AF89EE1CE2EBB257971CFBA9217A30C756883B6E863660D7CCF57DD
EC784D3CF76C399345F6DC415DC85330BB755067CBD965A20E6DD0D634F7D6E4
953587A75E559EAD567D32B14BD164D52793BA9472B441DB587E8C5C1FC7D06F
F83EAD3BD6335DB441DB487EB5CF4F8496915373D36ACA2DC9AB38B65EB0E7A6
B4D51E9F1388858F36688B3EE80BAEC267A0A5EAD92737B5097E02973587A676
634E21EC433DBF677977517BCDBBD476EE2D0A346FD78C71488C813EE00A18EE
B29748680FFAB64A73A1B380D133EED683681F745853304F1FCFA585FD1BA82F
9D2FA34EAF4FC0B39342DA95E6F219F887D032F4A668426BF525CF42FF1E9163
C2677571CFC465EEB285BD7EDB82D6849E396680ADC60B6B1A1AACDAFF03551B
E00173D5DEEB6B34F128D604DE548DED9B741518C042AED739DFCC603CF5F7BC
D6F36F12F8D0BD77C0FD12C74147CD2A159F750A4EEE8F9293EF471BA57D7BCD
4A02E7FAF75B521274D3767EB9067F90AC3D776AF72D951F5EA35633C2AFCC85
CE396A16B80B34EFE8E187B955F851F295F02FFB42F8977D13E92FF810BE0C3D
0F649E042FD2638EDC546F7DE9F3BD7E1B8546847F5933025BD5E74E437DD697
3E2763AEA1381AD48935359E7E3968ACCF22559FA118486D464C88F8E218D18B
2FF0D076FE6DEAB8F01EF3B65B3FBE3836457C71AC2266959C8D580EE787EA7E
C80F35E13C98F9BFCA6FF1E5E7499AFC3CD1547E8EB9BFB026E057757F610D2A
5A4B647FB9DEFBA3D8DFD93FEAFECE5AEEB5BF73CCA8FB3B9F05123D47C43A9F
24F4FB517F9FA3AC435E63FFF9AE3D57262146A29E3D43F5493DDFAD296E5ECF
F8DE6B4DF1353B5F27DFA5F5AA39F38651A36B19F91AF7195AA3732939B70E57
FB5C3E3A3BC0BE6AC67D52C47D0DD7AFBB26E6451963443E93AC3FFD2751874F
5FE35E71ADCD55978E3EE8E7FCD4705DF0D98023CABE54FCC3CCFF70E6372B06
FF99CCFF8884F03DAEBFE23788A8FA01B6C7B52821FC44EDCBC6F7B8FE129397
DE3CDD4A1EE7A2B8F0855F63C4957E9C8D8803DF5897D14CABD301FC01FC01FC
6BF1B5FBA3D81763E465FD3C1DDA279B9D7F0EDD9368F16D435E4559BCFB7AB4
7D5EDC63321EDDE4FF4BD67D069F2D7DCB611B5A62B724C9A6F8E1F68EBCF462
F48F7A6666EC8B471F0DF8DCBB4CF917ED2F7CFAF300C688FE1C2549F6351425
F47F61F443FF18CF8F859613C257626000FFA6C70F74BBA9B2B699BEA8F65053
4B53BFE1FBAFBA69F5FE0EFAD11B411ABF84844D607B6163379D747DDE277C60
BFB8E92ADDC377E54BF23BE9D38A163A59E3A19CE36D347B65802666C9B465E3
8C84F1316F60EFD7F94F4B87AF919E59E7A5C9594DF2D8D76984597CF00D4E30
6F23EE2E3536D3848CA03C6E31BD6216BFE28A47707DB4D21BD5EFD397CBE7B9
9DD52C3E7806FEA91A4F54FC992BE4726E576416BFD1DB24746239D166FCDF3D
BF9B26FD3DE865FC5589F8F779D6E043AC131FFB52AF3E9B7524F49A415313C1
775EF6D0C465419ABFA15BF8523B6F607F3783E89E0CF28FCBA087128DAF6367
BC34E54D59E874DE3ABF8887696FCB62DEF72E0DC75C0675B1861E4E747F696D
6FA44D47DBE98FD95DB4E0C3AB94B5BD934AAABCB4BFAC9ABE972907A28D81FD
EDC2D14712DC1F1FF6AFDD30BF12D89A311EE8B5BFF31889ECEF765BFA0947AE
F44DCC5B1963DC122ABC1EE710F6F10C60F3E7B49BFD4C35F0FED7C0FB5F03EF
7F0DBCFF753DDFFFD25A7FBFFF15F97E4D7FBFFFB5F238B0429FFDF9FE97829D
C2D84FDB429FDA31FAF2FE17FAAF3E119AF7BB9FEB7FEFCBFB5FE03B3DAB3727
F83E7459A8BEAFEF7F45FA34D2D7FDF5FE979EF5F7FB5F91D8FF4FEF7FFD1736
59E1C04C7A0700000020000000200000005B0F00000000000078DAED5C7B7454
C5199F6C38E1150ABE0AEDA952A4568B15154B6B4F11A9B6FEA3ADF86A15FB40
C18AE7547CA17D9C2A814482A825D073147CA11CAB64370920E4A120068B4000
8124BB494890040809248484BCC86377BFCE6FEEBDC96473EFEEBDBB77131FFB
C777CECDCC37DF6FEECCF79CDC1D2262F40DA68A1C36B4342B714549E68826B7
93911EA1AF246B649AC7C912ECC60776E5F61BDABA5A8A88BCF5BAD4D5524895
DBA6B595AC4F5C6E373EDE0DF28DB07BE6D07C903C59231BEDC6C7FA86C2D688
EF41B7D11E5922577C77E986313B8ADF67175BC1B78BFC5D27A8AEF8196FE9FA
D13B07035F9B03D6C10A3E74E0D88E5BA974C37911AD7FD9C68BA876FFBC9EBF
CDE21FF9F8275477600E79CF6C266AF9346CEAAECFA2A3F9BFE0769D20F06BF7
3F2CE6146ADEA559A3889AF323C2D6A8AB3E933C99C3C893914047B74F1373B2
43AE15527CDBB041C1D6F0C5FE0F027634F03F2A2EA6B919B574F98A761A99E2
1374057F7E28B396B6B88BA2867FE8D85E9AFE7A13B18544F18B88A6AC22BAE3
7D85F08C36F4DDF8461395735E3BF1F34B0AE9BCD46E1A9642F4781E91FB14D1
89E6BE54CCDBE6E792E001EFF6D2425BF0F1DE9037EE453FE51DEE8BB9E78442
725B6E05D158CE8B31588748F1B1E6C393A91F36E8A7AF2914D89E53A1ACC30C
BE1791E043D7B0A78FE5F6C7004D7E4521BDBEF9398A3EBCF1D6CD61E343CF87
2C52F6D62A7ED1494527EF495B1D363E6CECBAD5FAF243E183AEE5763161C9A1
B0F113B96DC3BE20ABA09A68EA6BBD98A0E1290AC96DE0012FC6DCCEC78E58D4
1611FECC08F11317B744B4FEF02D91ACFFA5A9653CFE0C6F422CB48A0F9F1A1F
A1FEDDB5624D27F2FACAAD53DABAEA322CE1C39FC386E687617F8FAAF697FCE6
3C17EA8F928CE1699EACE18D56F3A8A9CBB6D3B0649FF06B66FD4F7639D1D0C5
3E9A985A762CD27A86FD8B2E732CA2A60B97912F700E7AFE17BE0FBC8E246AE4
6327DA513FB0249A8E390C4D261FFC1AF6566FBFB1E6098B55EC67E9063B6B18
AC435C127D823DE573F15FBB9AFCF00DB0CF6B56911F6DE8E33CDBEC7A6FDD79
3C4737739CD5710BA994BF671B08CF68E3EB74D3D7A25E7F977DAB249D4DF7B8
D8FDEE74F60408CF68435FB4CE0838CE436E57DC876E675C97B14D3A785F5C9E
DBC5E6624CC4D849CC519CCEFEE0CE883F06F9153913BC270BE7536B6D267534
EE245FC7514178461BFA2AB22778C1EB71C51FE5F63D0B32C2C1E66313F9FB6E
80AC2F3E9CEC6BADCD325DA7B5D5E5F05A6DAA57A9B5E372F639D9688BD89778
5C0E377F077F43F90B5C665D18356E1D351C5ACAEBAB78BFC735C4039966B0CB
36B251E02F5D3FCADB7A7243C475766BED7A822C77C69012C80EB5DF5C7F3EC0
7B9BC1AE3BDB20C8CC1CB00E5CF6460E1367B8EEB029BE670DE5CB42CAAC6F6E
A0D1A97E41780EC58FBD107A099DD4DFF304FEDE555F6CB9DA6B66BFF71D6F14
3114846733FA003D862DE9D9A6B06F3E3FAC95997DB58E5F2F6C54B10936B71F
3EF72D15D9977ACDEA5538F820F810AE07B9813E95B7759F2C7C8CA28D7FF2E0
A3C24FCABEBAC8C96E54D63E33EAF8AD3519620F8029E9DE2CB4753615441DBF
A37197A203E9EC3E0D9FFBF80568F3755499B6F360F8C1FC023094F8C09E92EC
FE2905BFD2D0CE472DF1D3A7479A42E28307BC467EC177EE88E6079E946CEF3E
B1FE8DBB75F1210F3889CFF7CE410F1F7DE0411BC6E8E12356AA36786F3FFDE3
BAA1B7663B2A9B7AE63022C54FDB0E37F5C3D7E3D193D552E3D2D33F1E6B1D9D
88DF467A13287F55414B0FFE9B7B5B4C612BF6F757617F81B108794B79F6F8A0
FE479EC3B0647F0F3E30CD6083CA73BEEF454ED0DFFFB1B98A0F089E67C87B2C
93AC1BA1FC6FB193CDD18D3F19F19587F326F9A8FB54C8398C90DF3F3934B612
7FAEF2212F33CA0D7BE22F8F95A1FCC8A6D2B3A82704E13974FC4DEDE77782E6
1F26E26069ED194176E51F5AFE855C49E45F2663B199FC4BCD0113CDE69FDC1E
3D7C1D7C58B7F0F3CF54CBF9A75EFE5D917BB9AFB9FA3D0BEF9C29744DCBBFC3
AF8B581C62237416B260BB88DFF0934AFD512508CFF06BE813F6ADD41F558AAE
05DF6F936B91A0F8075E5B891A2B68FD950BFB8EC6FF6A35FD14F5277206ADFE
E4CF680B99DF7F8D08FAC9F3969520B376652771DCF9DABEE37910F09324FCA4
68E170BDFF13D7E76CAE5F33CDE283176330365CDC43EFB10BB98CF5927D9D31
8B0F5EAD8FEB46566916BBC0A26E8DE3633DB26DF3B96C318B0FDE00DFE0864C
93D8E773FE43D258EEBFD98A9D4E36DC2C3E78310663A575282BFA2F3B2F94BF
E5BC1B24EC4EEE5FEE0A57FF38E6DDBCBF4BDE8BA03ACDFDA6FCDEC52E7667A4
FAAFCE415E87D986676C4E764C92F9925DF6C7D770B9F45E557AB141CB3F55AA
09DCEF48F0F76D6223385FADA4CB7374BE83D9DAFB7D0A7BDC6EFF236295812D
A93ADFADEE8FB7F83D36D66EFC924CF61DCEEB53C7741D58CFC648FE6ABAB4F6
05A6ECD4C516F6E8940B59B8099FED649F4B7A382DF0EC47A53526F16FC65A09
E2CF2663C6BBD29A3D28E9DE33127EAA593F5994C1AE00998E25E9EC05097F41
E0F983AA7B4BA318335FD2D371BE7E0F4BF37A2B6AB1349DBDD383CFF75CD2FF
69926D7C1E357C273BA0E1F0FAFFE73DFEC1C9464BB6D16DC6FEC2C8D7C66936
0EACC09A80B77D6CC5FF58C657CF9854DAAAA31B0F4AFD270AD7B29176E6AAF0
E9D2DEFFD9C0471F97FCC3B2A8E8BD931D358A2DC8D7E4F86B14FB2D62FF4E8E
BFF87F52F0FA9F6D92E6D081F161633BD9EF450ED32B2F64FDAFDA829C7FC12E
5EC6FE98C585EEA831DF27C929355B071766B2EF21670CC8218FF1F7791A79B1
D1B8FD4E7691EACB8FCB63B92E1595BDCFBE6B65ED902BF2B1393A75AE4FF811
177B9BDBD48B42B7F8B3EA5B7C81FC1C7BB31C6BC3D8C33FF6B11DF35483F32C
9BEC3741AD83B607E853207572DE7CCC395AF53F740BF11E3E043E4DF8353E37
8E7793151DFDAA51E51A360CBEA3641DBBDE30C7E37DE001AF6DBE731D9B083D
77BB1CCAF7312EC729BDF306F50CFD94CAD3286C838F8D285EAF63533DCE389C
D9FA8EFFEF263A53B240B3A9141DFC14F48107BC1883B19011FEB7F96C3C64D6
17CDEBF9EEA8FAB35BB86C4707FA643EB455EFB8A587AFBEE811F5FBDE5EBEF0
E2B6A3BC2AFF7ABFFCDD724946025F13473A7C1488BFFB3AB4C9DF71610CE7A9
B0216F58519231D4E73FFB718FEC53FB1FE867FB68D3FAC18B31389B8A58FF9C
EC56F17F89AAE5BDF29BB65283FB09AA2F7C58109ED1A6F5B756A529B1D6C56E
33EDEF9DEC3ABDBDE232664056DDC1B9A6BF4D03AF8A3F434FA7801568635AEC
C09E89733DFEDE18CFFF6E2EDF34CE6BE51B3DF0620CC6420664611F215B8B61
B26DC256612FD059E80DF64EDB57816DF1DB3C31073E06637B7EC3C3F513B281
216C93636A6735F017B059597FB0875847BDF76E3FFE2AD5ECBE9D8E6CF9B11F
54B37B26B557AFD25D07C880EEC8FA0B2C60025B7CDFA3FA8D50EF04192776DE
A6E6E88E566E771F89B32EFE8CB613BB7ECB79B68594A3F93160A30ED1FC26FC
47B07D56B1711EF6BC1CEBF08C36F4610EC1F402189A1FD76A20F86E8C177E8D
EF136C595E2F6DCD8D7CAF54C3A48227702F200B3255BFD521B0746288F0A3DC
97E9ED07F618EB1C2CC68BBCD3E968AB29B84377BD859F0CE18FD5BC8F4E17CF
EF23037A16786E63902BE51FD93AD92F8F852C5173863C7F0C8EEF76C56D3551
E37E122E7EA4EBAFD470D6D7DF94FE719D526D664990B3FAA556F5CF92FDEDFA
0DA9B55CAABC0E6ABD83B31D3FFC9215FBB3EC7FB87DABFF6B6BC35E43DFB82C
3C0B9F68D5FF18FBDFE5C6FE97AF6FCDEE3BB84E4EF6836A0AEEE46DAB83F8DF
3443FFAB1F7F12A2107F86EAC61FBDF88B586977FC15FFA73388BF839D7F04CD
BF780EA5E45F6916F2AFE5DA59DEAD369C9FAC0C37FFC43E469EFF3A2AFAE5DF
2EEE47B82FEB937FBBF4F2EF21E591FD3658AB3F1EE9AD3F7698AD3FE6455C7F
0C76FD35D8F5E797A1FE1E08E2F39EC275D52D9F53F639C372C55B3A7BD2E3F7
64382A0B9D6C82BE8D0D71C35F9EDC773F0552D9C6F3A93C7BBCF8B6DE2C956F
BE848FBBA057CEDE59549A95E8E57A715C6F0EF0C7A7F6CFD6FF8DAACB41A78A
17187FEB737203EF7F5A90F6CD38F8314E9673EEC49B867308F45F81BF51856C
237CF4F5F840954F6B0B94A5CD81FB8A238381AFF8EED94ADFA0E13FF0D5C2B7
49FFC2C53F9CF7036E4FE3A9CEFD4FAAF73C1B92C007FB3B9C77992DF8E7AADF
1073703BE34CDE2DE110D8D0753BF0EDA6AF027E7BF5EB7438D7C29A1B529C90
833DB4828F31E5D9DFB7E4F38D63C178A13F56F043D99C150AB44553F8217C8E
35FCBEBE28861FC38FE1C7F063F85F2AFC3EF54774E38FC8BF7DFDEBAFB15E9C
1BE13CA7EC838B440E6736E70B9E0B5E2CE4412EE40387D71F45FDEACF0C4771
9FEF542DD69C41EE1AA3BEDF123B8A3C19ECDA6FF29D7BA1CE393C4E96C6D7BF
C18EF5F764C49FC6B74066CF44146C87BFBAE05E5BF23FC8813CB78BFDDB143E
9F6F75C17DB6DEF526E6C0E59ABD8FCF2EDFD3CF07C5F063F831FC18BECDF81D
1DA7695BC9595A96D74E4FBB3A2879F3394A2F68A1BAC686A8E3E71436D32F5F
F6D1A485D48FAE49F6D30BB9ED547DF01F51C17F655B5B0FD6436B3BC9B5A785
3E2B6FA2BCA2664AFAE01C4D49F18BBE7B5656D1BE7589B6E2E3BD217BEA123F
E51BFCFEB8A6A181EE7EB55BF0CD7939DD367CECB7B6E6F9217EFB7CA6B98166
2C6B17BC573C4B37DA810F5D83BCB9EF7499DA27EC0BF8AF4CA2B576E043CF21
0F72CDE037B59CA649CF917F521255D981FFB78C0E810F5D336B279317FB5B39
7E871DF8C99BCE097CE8B919ECEECE7AACBD97539D1DF8F02DC05FC46DCC0CFE
AE8A26CD4EB7D8810FBF06DF02FBAE6D087EF78EBFBB9E66AFE9D2F4EF2F76D9
BFA683B0EF3306F7FF003B255BE1BB6A31354F4EA26FDB85DFC97DC0ACD715DF
025F005B38CBF51C7DDEAE7ADAC9D75C7B6F8D7EB490F65E934463ECF2BF6DED
A7E9C9F48E3E183F4BF5D3558B7AFFBE7EA9DFD21C94FCFF5E4BF16FCF174DF4
F7CC0EFAD5721F5DBD98E886177D34E7ED2E72F23569387B9A662EAF343D07F1
BB09579CA87F22A9BD35829C3DEBC6F867A41CA9ED131F93683FD7C7F3F5EA3F
CC41D46D76D47FAEF87AD45E8FA56D1C8BF70E9843DE40D6B658F38039B40C74
7D8D39E0BD817DE573F4C437FDBC2176FF7FECFEFFD8FDFFB1FBFF63F7FFC7EE
FF8FDDFFFFF5B9FF5F8F06F2FE7F231AA8FBFFD38B151A8CFBFF5FD9A3E81C08
CF0379FFBF867DD94A858CE660E7FDFF1AADE6A6853599B882687F0D51217FCF
CBFFA3CC6165415F5E3BEFFFD7B0B5F73E50DBDB8E676D1DC023E3DB79FFFFAF
D712FD30005B9E03FAC013ADFBFF8F362A64647772FF40DCFF1F8C06E2FE7F23
1AA8FBFF8D7C5FECFEFF2FD7FDFFFF0772BC0160
4C69020000004C7A0800000018000000180000007C0D00000000000078DAED5B
7B7054D5193F09092420D2FA2CD8711C3B7D80B563A11DDB4AA1557C576D5544
ABA2765AF131AD566C6D1995845005A5AD82150119671031D9CD06F290F01248
10159A44F2B8BB9BF04822813C36BB9B04F220FBF8FAFDEEEEDD5C36F7EEEEBD
091566F2C737BB7B1EBF73CEEFFB7DDF39F7EEBD4424E81C3667FEF83B9D0597
1EAB2BBADC156D2847FD90F01923D07B84C8EF1A642877164E6C1A0A7EDD4757
B469612B76F4B3FB3C5A6B8B67CADAE3E19B3565EDF1F03D8796D1A1ADDFA5C3
5BA718B2435BA6506DE1C44ED8A12D9375DB1DDD731305BB76119D283564016F
31390B2E0E38F32F0AE0BBD1FE89D8C1C24901D899C056F0EB0A2706CF143EB0
99FF2E337D4B1D9534E743174D5AD64FA31705E5CFFBF9F71EE781481B60D715
4D6A3382EBEBDC434FE435532A63DE6F0DD2DA0AA20227D1BBE544732C41B9FC
A98DC7E576C0368A0FECCBFE19A01D87898E7585ECB07BE0FBF643C46B09C863
18C52F614EC0851A5B6A231A9315FA54CAB6F11858C7FA0D777B8DE0836F70A2
E0C02A8E73925918FA549783AB5B9717F719C19FF8BA8FD69487FA57B5107D7A
94A8D019C2C7277EA31CF5ABCB882E7DD51B30820F6EF29D21BEC10970A30DE5
A847BBD1993E32820F0DBE6B64FEAF78393F5C782CD1FCF040B64BE63511FE67
E704E9FA3776B8E5FD8BC7E05873C5B3F51BEEE948C90CC8FA88A59FAD0789D0
EEE7CBB6FEDAE87E949A49EF5CB494FAD463A8F50F6CD4A72EA2FF98D9EF4406
A5608CE44C0ADC9B437EE809BE04DF7767931FE55CFF36DA0D655F152FD175A3
1791352D8B5CC919E44B5B4C6DFC3B87717F76B69C5D248B18CD768B3D376DB5
7DE3840A47DE794D307C976C6356D5E4889BD1C630768648E67E8FDA6DE96D7C
0EE86EAE98E7EBA87F87BA5B0A64C3F7E6F2C77DCE824BBA255B7A6B8D55CC45
9F44B00FAE17E74B79E91FD7164EEAE96C5CCB7B7C5B8C73421B7534ACA1DA82
6FF4D86D63B7A36F3C6C9E735D43E9F5BD81BE7A43679186DDBFE8B5E7A5D7EA
8E014EF2D2773494FCB2977CAD9A386547BDB269D5057D2D18A3CF6E1BB75D8B
2BF6D523E024D6BCAF7CC32F5BAC7580AB6A8B78385A27F065886F7D1EB02FC1
62B5813FE073B5AEA041E824B62F13C307868375556D153729F8765BDA1A6830
9E1F13C377B176FFE0437C44F0374DA8C0BA860B1FF1E1C89B5016C1CF1B771C
71335CF8275B36919DE37C00FFBCA6932DF983B478D55B7E2A7474EAE2A30E6D
A2357BB27923396C03F8BC96F28EFA5583F0391FCAA68CA1C64799521F8D2FF3
B3F1FCFF46E6CFF90BF9247A9DC5B59D949615943136499D11FCCDCE81F27C7B
A7867F7FEF9372C7AC54C5D6CDC8555AFA548F71C192205DC8160B3BA4CF8BBB
39C66E3C2D0F734CE86948E1226961C8D49C0DD6CE2AE2586D2E5B25524FCB0F
9C6311DB7AD792C053F0F5B0FDBD87393F5CDAC3F3FDAD567EE31CBBAD61F7CC
5EE42AADFEEB2ABA64D3CB6FF5BB66F649B6715B182E49373F738E45AED55B87
DEBCEB77CDE8658E1DCE7C313EF6F5BC186FCF1BBB0D5C85FC11677F61BE591B
3D926DEC9678D86AAEAA73C443F03974857CD251BF921083307C870691C778CF
6891ACE2C144F7C7E8BC8D3CC8B9EA1D8E9732657F476E617DBF0D0D46EBE4AC
B5D099621DCC0C17097075798D45100CDF87862792B01FB38F172873757C28AE
50F0F15DA5830568ABA7F968ABFA407C9D318A152C7BB698AA878F3AA58C6DF3
171BC5D7E27070016BA23CC28355ACB558C4283D7CD4A18D8AB732CC4F97138B
280CB7EDE7353FA0AED7E4479917EB5FEE13AACFD7E20AE74DD53C06E5A758F8
30C463842B9C4755758811C63C12E6E47DADF5C5C30FE7E00DE1368777ED1291
EB0BC46878DEFE2A9BB8D22C7E75B6F816D707645DE4885991712D6205CAD8B7
257ABE4F043F8CB5476E9723FEAD2ADB159EFF625DFC3C7121B7F1C1F05D17DF
2A9684E7BA5D85EF08733F2F967E79CD3360B1DA30EE93E1754A2A7C293CE693
43CD23CCCBD361FC1A15FE8E303FAF0D159F75BA2C8CB52DBA8CE7FFD990F119
43C662CC48CEB18899E13505AB72C5F74C63678BC9C008EB73863AB773595D78
8C4DA6B9B7888230466D748E60BFDC13896FF69109DEFFA4F4678E7E1327BE03
686F80F36794B8E57EEBF5DA95158AB1DCA654358F8F5807D7E8E6F35CF143F5
5EC16D777F6A11E9B1E6827AD53A14ABE0792DE7F89B0FC3779445B5F9A0FE3D
9196F07E6B1577719FCA280C2D3BC0FEBA6308FBFA74C6C80457FCB99F6D1F97
15A18C71AF3B9BCF3CE1FB33F7B21FAFD5F0EDB5A833737E439F1A6B7296644D
F548D69480949BDAAAD605BE4BB6D416B98EDB802B23E3383F1493E03B57E53C
F27B8BF99AE1923EC992FCF2C0BA925F4619EAD0066DD1C7C81AF89AAFC1637F
5EBEEFD979308BA4DC517DC85330C93AAAB7F3D062B90E6DD0D630F7D6E4E58D
A5D34F29F756EB3F9EDAA768B2FEE3697D4A39DAA06D3C3F46AF8F63E8777C9D
D61FEF9E2EDAA06D34BFEAFB27B296915373D31A6B2CC92B38B61E9372534E34
EFBBD71F0F1F6DD0167DD0175C85CF408B22679FDC5437FC042E1B4BA6F7634E
21EC9281FFB33AB6D0C9C637E9C4E1D7C8EF29528D51228F813EE00A18AEAA27
48D61EF46D15B3A133BFDE3DEEAEDD681FB45B5330CF1E9E4B27FBD7DF5A3137
803AAD3E7EEF660A6957CCE633F04FA065E84DD184DA5ACB1F86FEBD728E099F
D5E56B262E73553D39E8BF2D684DD633C70CB023F1C29A8606EB77FE28A20DF0
80B9AAAFF5559AB8136B026F118DED98760A18C042AED738DFCC62BCC8FF795D
479612F8D0BC76C0F512C74177E38A083EEB149CDC102327DF80364AFB938DCB
099C6B5F6F8924E8E6C491652AFC5101F5B953BD6F45F8E135AA3523FB95B9D0
3847DD0CEEFC9E8F06F8616E157E947C25FB977D21FB977D13ED2FF810BE0CDD
0F649E645EC45DF6DCD48ED68A4707FD370A8DC8FE65CDC8D8117D6ED6D5676B
C52301CC351447A37AB1A6F6EAA783FAFA2C8EE8331403A91EC4841C5F1C235A
F1051E4E1C799DBABF7C8B79DBAA1D5F1C9B727C71AC2266959C8D580EE78786
61C80F8DE13C98F9FFCA6F89E5E769AAFC3CD5507E8EBBBFB026E0D7C8FEC21A
54B466667F39D3FBA3BCBFB37F22FB3B6B79D0FECE3113D9DFF92C60F61C11EF
7C62EAFFA3E13E4759C73CCFFEEB39FD5C9984188979F60CD5270DFCB6A6B878
3D5306AF35A5C7E378817A9AD644CC91378EDA9D8BA9A77D87AEB53B169163E3
F8489F637B6FF5B3AF3CB84E8ABAAEE1FAD5A7C5BC5CC618D1F7245BABFF22D7
E1B3A77DBBFC5D9DAB9AF6DEE2E3FCD47646F0D98023977DA5F8A5CCFF78E637
2B0EFF99CCFF0453F85EE7DFF11F444CFD00DBEB5C600ADFAC7DD5F85EE7DFE2
F23298A7F3C9EB589010BEECD73871A51D671312C0D7D7652C53EB74047F047F
04FF747CF5FE28EF8B71F2B2769E0EED931EC75F43D7246A7CDB98F9284B745F
8FB5CFCBD7988C47E7F873C99AF7E0B3C577ECB6B1E592252960881F6E6FCF4B
2F43FF986766C63EBAF74E7F8F6B8B21FFA2FD979FFCCA8F3162DF47490AF4B4
159B7A5E18FDD03FCEFD6359CBA6F0951818C13FE7F1FDFD2EAA6BF6D0170D5E
7277BA870DDF77CA452B7776D34F970469CA4292ED2AB6C7DEEBA703CECF8784
0FECC7D79DA2ABF9AA7C617E2F7D52DB49071ABD94B3EF04DDBADC4F53B302B4
E1BD59A6F1316F60EFD478A6A5BBA79D1E5ADD41D766B90357BE40138CE2836F
708279EB71D7D4EEA1AB328281C92FD33346F16B8F7B65AEF7D675C4F4FBCC65
8123DCCE6A141F3C03BFB2D11B13FFA6370235DCAED8287E7B875BD68965FF09
FD67F77C2E9AF68F6007E3AF30E3DF475983B7B14E7AD8975AF5D9AC2359AF19
34DD0CBEE39897A62E0ED2DCB5FDB22FD5F306F6F73388AECE20DFE40CBACD6C
7C7D7AB083AE5B1A9075FAC06A9F1C0F335E0FC8F3BE665138E632A88F3574BB
D9FDA5EB643BADDB7B929ECDEEA379EF9FA2ACA25E2AAFEFA09D550DF483CC80
3FD618D8DFBEDC7B87C9FDF176DFAAB573EB80AD1AE3C641FB3B8F61667F976C
E9FBEDB9E2DB98B732C6E485547826CE21ECE359C0E6CF19E7FA996AE4FDAF91
F7BF46DEFF1A79FFEB4CBEFFA5B6E17EFF2BFAFD9AE17EFF6BF93E60853E87F3
FD2F053B85B11FB4853ED5630CE5FD2FF45FB93F34EF373FD7FE3D94F7BFC077
7AD6604EF07BECE250FD50DFFF8AF669B4AF87EBFD2F2D1BEEF7BFA2B147DEFF
1AEA99458CC7F369765BFA5EC99A86FFFF7C922DCD2DE5A5EF91ACE28F92459C
67FA193CABB85FCA1DEDAD2DFA666F6BF57CEA3ABA9EBADB365357D307D45AF5
1CD5165DD62BD9467BAA2D628E71EC9497A4DC14BFBB7609057DCD3AEF113493
BBF655FC57E7E7F62F1A9B778A3FFA3D18DD77689A37CA63E03FFC44F80627EE
BAA586CE38EDCE5788FBB9E3F9033E03DF7A9CE819DAD7164DEA8DF73C245F1B
7CD25A35DFD439ADB5F2CFC4D724A5B1F1D33C5D4D1B4CE1771D7D9FA0DDD8BE
4DF6418366F0D10FFD63CE3F37CD0D9D9B9DBFDD96D61E97FFCAE7CCF36F4B2F
89AF9FCB8CEBA7FF38CE50F1F5C3FA45CC232E8DE97FB1ACFFCA75625C02CFD0
CE413C222E13C1F61CFC17FB3529C8FD1C5516312DC1FCF322C6405CEAE61FE6
04F306B6EA1ADB5B932D7E9CE073B1B3B166C4257C17C99FFCD95AF9ACCC37EA
ABC3CFC49B1A83FD019F212E113B4AFE874E380F3E05BEC1898C69728C849EB1
09BD9FE23EFD5E84E8D07A9EE46C1E039C6870E536FA4CABD131780FBF6F38CF
05E13114AEDA8773FE03FF11898998373EF1FB7F14E5CB484C7A080000002000
0000200000007B1100000000000078DAED5D7B745C55B9DF9974A50FC2E5A108
D7A556442E88970A852A77C9A317D47F40051F57C0AB022D02AE6B1105EFBDAE
0B4D9B48A0087DB816521EA22C85666692B6B47968436DB516D296429299499B
B4499A263369D234695E4D93CCF9EEF7DBE79CC9C9E49C997366CE2402F3C7B7
D6E9397B7FBF7DBEFD3D77CE7C2522411F606AAA10B31BCAF2D7864AE7F505BC
82CC08CF426567AC097A459EDBF8C06ED979DDD0E8401DD178B7298D0ED452CB
F66B87421BF357BB8D8F77037F2BECD81AFADFA560D919BD6EE343BEC9B075E2
3D18B3DA2347E4CB1D6BD874F6AEFAD7C4C79DE0BB45CA680775D5FF7CBC61E3
59BB67025F5F03E4E0041F3AD0B6EB666AD8744E5AF23FB0F93C8AECBF3FF66F
BBF8CD6F5C4D5DEF2CA1F1135B8906FE9A328D7597D1911D5F64BBCE93F891FD
F7C935255B7743D99944FD3BD2C2D669B4BB9482A57328E8CFA3233BAF956B72
83AF13527DDB9C19C1D6F1E5FECF007626F0FF5C5F4F4BFD11BA64ED309D5114
9574295FDF5B1AA16D81BA8CE11F6CDB4BD7BFD047623951EE0AA285CF11DDF6
9A4AB8C63D3CBBE1C53E6AE4B16EE2EF08D5D239C56334A788E8275544816344
1DFD93A99EEF2DAB243906637736D4BA828FF706BF0B9E52A8EAD064CC3D1D2A
19EF5536119DCF6331077248171F329F5B4853B0419F7F5EA5F8FB154DAA1C16
F35EA4830F5DC39E3E58391503B4E05995CC9E2DAB50F5E1C5DFDE94323EF47C
D60A756F9DE2D775AA3AF9ED35EB53C6878D5DB5DE9C7F327CD0956C17173E7E
3065FC7CB66DD81778D5B4132D7A7E021334B74825E33D8CC158CCF93ACF9DB7
62282DFC5BD3C4CF5F399096FCE15BD291FFA78A0F70FC99DB8758E8141F3E35
374DFDFBE6DA974F23AF6FA95E3834DAE577840F7F0E1B5A9682FDFD58B3BFC2
97EEF7A1FE08F9E7AE0996CDED759A472D5AB593E61446A55FB3EB7FCA1B8966
AF8CD245C507DAD2AD67C4FFD1C59E15D4F7E155148D5F8399FF85EFC3584F01
F5F2DC8BDCA81F44015D8F35CC2EA428FC1AF6D66CBF21F3BC951AF6A3749D9B
350CE49053407FC19EF25A942BD79302DF00FBBCE23952700FCF78CC76B7DEDB
741D8FD14D8CB33E673935F07B0E81708D7B2CA71BDF17F5FA1FC43F854AC4F5
419FF86EA0443C04C235EEE159A6CE0818E7DE802FE74F016FCEA8B54D7AF859
4E55C02796624EDAD805C2535F22FE33E0CF6D03FFA68A0BC73B6B97D160A494
467A775374E488245CE31E9E35955F388EB1415FEE11B6EF3BC123156C9E9BCF
EFBB09BC0EFF694174305266BB4E1BEAAAE05A6DD1B85A6BE754ECF38AB31C62
7F22E8F304F81D949EC6279967570A356E17F51C7C82EBAB5C25E89B15044F3B
D807368B3331BE61E399E3839D9BD2AEB307231B09BC02FE5921F04EB6DFAC3F
AFE3BDED60779DEC9164670D9003F3DECC30399672874DF19EF534AE4ACAB3BB
BF87CE2A5624E13AD978EC85D44BE8A4F99EE7F17BB71EDEF6B9713BFBBDEF68
AF8CA1205CDBD107E8316CC9CC36A57DF3FA202B3BFBEA1CBF5BDAA86A1362E9
147CF62D4DE59F1AB7AB57A9E083E043580F2AE37D2ADF1BEBAC7D90328DDFF9
EE8FA59F34FAEA3AAFB841957D69C6F107C37EB907C034E8DE9DB877BAAF26E3
F823BD6FAA3A5022EED0F1D9C73F8C7BD19156DB769E083F915F00861A1FC4CF
0C76FF3315BFC5D2CECF7C5CA1BF36F725C5C7188CB5F20BD153CDBA1FF8A9C1
F6EE90F2EF7DCB141FFC8093FFCB893598E1E319C6E01EE698E123566A3678FB
14FD63DD3093D9AE96BED81AE61529B4FD50DF147CB33166BC06C23E33FDE358
EB398DF86DA537F1FC9FAB1988E1BFB477C016B66A7FFF25ED2F3E16216F692C
9F9FD0FF18D730A75089E103D30E36A8B1E293E3C809A6FA3FB154F50189F30C
E31E1BC9A81BC9FC6FBD572C318D3FFEDC964355974569EC58D235CC33BE7F61
726C35FE5C1E455E66951BC6E22FC7CA647E644BC349D41392709D3CFE164FF1
3B09F30F1B71B0217242925BF9879E7F215792F997CD586C27FFD272C07CBBF9
27DB6390E51085DC52CF3F8B1DE79F66F97753E525D1FEF6571DBC73A9D4353D
FF4EBD2E1239888DD059F082ED227EC34FAAF547AB245CC3AFE199B46FB5FE68
55752DF17EDB94459EEA1FB8B6923556C2FAAB12F69D89BFD5EAFA29EB4FE40C
7AFDC9D7B89734BF7F1F11F493F3967520BB76E52631EE327DDF713D03F80506
FC824CE1B0DE7F9FF5B99CF5EB56BBF8188B39989B2AEEC157C58799C746837D
9DB08B8FB1FA33D68DB28632F12187BA7501CF0D1A6D9BD7B2CD2E3EC6C6F986
0078DAC43E97C71F34CC65FF2DD6EEF68AB976F131167330D7208703757F14E7
24F3B73C769301FB34FB976FA6AA7F8CF92D7E3E6ADC8B843ACD7ED3F8DEF53E
F18D74F55F5B83510E77599EB179459B81E7AFDCB23F96E16AC37BB59AC5063D
FFD4281CBFDFE9E0EFDB22E6F1B888419797987C07533DF17D8AF889DBFE47C6
2A0B5BD2747E4CDB9FF1FA57C5F96EE3874AC53FF3D8A83667F49D8DE26C83BF
BADE20FB1A5B76EA13CB633AE543166EC3677BC5DB063DBC36FEEC47A3976DE2
DF045949E26B9B31E30F0699DD63D0BD9F1BF08BEDFAC93ABFB814643B969488
270DF80FC79F3F68BAF7440663E6AFCC749CE5779F615DBFCD582C2D11BF8FE1
F39E1BF4FF5A836DBC9D317CAF7847C7E1FAFFDF62FEC12BCE32D8C6981DFB4B
215FBB40B77160C5D7047CEF0D27FEC731BE76C6A451B5896EDC6378DE51FB8A
38C3CD5C153EDDB0F73FB0F0D1470DFE615546F4DE2B8E58C516E46BC6F86B15
FB1D62FF8731FEE2EF4989EB7FB1C5B08611CC4F19DB2BBE237398097E49EB7F
CD168CF917ECE269EC8F5D5CE88E16F3A3063E0D76EBE0DA52F131E48C713964
1BBFCF23C88BADE6EDF78AF3345F7ED4389775A9EEC06BE2A34E64875C91E756
98D4B951E9477CE2776C534F49DDE26BCDB744E3C733F65663AC4D610FBF37C9
76EC5318E7592ED96F9E5607ED8CD3A7783ACD637760CD99AAFFA15B88F7F021
F069D2AFF1DA18EF46273AFA5EA39697C51CF88ED006718D658EC7CF3006635D
F39D1BC445D0F380CFA37E1FE3F31C333B6FD0CED08F69637AA56DF0DCB4E2F5
06B128E8CDC1996DF4E8DF6EA413A187759B2A32C12FC2338CC158CCC15CF048
FDDB7C311F3CBBEBEE8F7D77D4FEF7AF306FCF089E19C7E15EFBAEAFC4C675D7
3DA07DDF3B312EB5B8ED696CDD718D62FC6E39E4CF6399784AE0A340FCEE1B70
CFF81D17E6F0982617F286B521FFECA872F28D18EF63FBEF9E62FBB8A73FC758
CCC1D954DAFAE71537CBBF4BB4AE9EE0DF574D3D8187A8BBF63E49B8C63DFDF9
60EB1A35D6FAC42DB6FDBD575C65B657CC63317875BDBBD4F6B76918ABE12F36
D32960C5DB981E3BB067F25C8FDF1BF3F9DFFD8D5B2E1877F28D1EC6620EE682
0778611FC15B8F6146DB84ADC25EA0B3D01BEC9DBEAF12DBE1B779720D3C0773
63BFE161FD046F6048DB644CFDAC06FE02366BD41FEC21E468F6DEC3477F43E1
B7BE4ECDDBFE550185DFBA9586DB9F3395037840778CFA0B2C60025B7EDFA3F9
8D64EF041E1DBB6FD17274CF20DBDD9FE559175FE35EC79B5FE331DB93F2D1FD
18B05187E87E13FE23D13E6BD8380FFBA531D6E11AF7F00C6B48A417C0D0FDB8
5E03C17763BEF46BBC4FB065A3BC74995BF95E430D538C31F17B015EE0A9F9AD
1189651243A41F655F66B61FD863C839518C9779A7D73314AEB9CD54DED24F26
F1C75ADE47C7EB974DE2013D8B3FB7B1C8957634572F508C73C14BD69C49CF1F
13E3077C39D5366ADCBFA48A9FAEFCD51ACEB9FC6DE91FEB9466338F2738AB7F
C2A9FE39B2BF37BF4A5A2D576C948356EFE06C47815F72627F8EFD0FDBB7F6B7
B621EC35F48D79E15AFA44A7FEC7DAFFAEB6F6BF2CDFF05BB7B14E2E5040E19A
6FF0BDF509FCEF1A4BFF6B1E7FF232107F669BC61FB3F88B58E976FC957FA7B3
88BF339D7F24CCBF388752F3AF350EF2AFD5FA59DECD2E9C9FAC4B35FFC43EA6
9FFF7A9AA6E4DF3EF623ECCB26E5DF3EB3FC7B56637ABF0DD6EB8F0726EA8F5D
76EB8FFBD3AE3F66BAFE9AE9FAF31FA1FE9E0EE2752F645D0D18CF29279D61F9
721D9D3D998D0FFA3D2DB55E71A1B98DCD0AC05F76EEFB2EC5D381CDE75263F9
7CF96DBD5D6ADCFA099EF7A1093E7BEFA486B2FC71D68BA3666B803F3EB6FF2E
F3DFA8FA3C74ACFE61EB6F7D3A37F1F34724E9DF8C633CE619F99CEA78C9720D
F1FE2BFE37AAE06D858F67311FA88DD3EFC5F3D2D7C0BEA27926F055DF7D97FA
6CC6F0EF7E6FE1BBA47FA9E21FAAFA34DBD37CEA0AFC82BA838F26258C83FD1D
AABAD815FC53ED2FCA3504BC39367B4B78243674DD0D7CB7E9BD803FDCFE021D
AA7420734BCA917CB0874EF031A7B1FC938E7CBE752C982FF5C7097E329B7342
F1B6680B3F89CF71863FD91765F1B3F859FC2C7E16FF1F0A7F52FD91D9F823F3
EFE8D4FAEBFC719C1BE13CE7C0EBE7C91CCE6ECE973817FCB8E407BEE00F1CAE
3FEAA6D49F7E4FFDA4EF541DD69C097A8DD1E46F893D7541BFB8F283DC732FD9
3947D02BD6B0FC7BDC907FD09F7B1CDF02D93D1351B13D4A7BCDEDAEE47FE003
7E019F78C6163EAFB7BDE60E577BBDC935305FBBFDF8DCF23D537C50163F8B9F
C5CFE2BB8C3F32729CB6874ED2AAAA617AC43742855B4F5149CD0075F5F6641C
BFA2B69FFEFDE9285DB69CA6D015850A3D59394CEDEFFE6F46F09FDD3E14C3BA
F795D3E4DB33407F6FECA3AABA7E2A78FD142D2C52E4B36FAF6BA57D1BF25DC5
C77B83F7A2C715DA61F1FBE3704F0F7DEB376372DC92A74B5CC3C77EEB32DF91
E4B7CF27FA7B68F1AA6139F6D247E90637F0A16BE0B7F4F7A3B6F609FB82F19F
2DA057DCC0879E831FF8DAC1EF1B384E973D46CA6505D4EA06FE7FFB47243E74
CDAE9D2C58A90C32FE881BF8855B4E497CE8B91DECB1D3DD90FD3853971BF8F0
2DC05FC1366607FFCDA63EDD4EB7B9810FBF06DF02FB8EF424EEBDA38C75D35D
2F8FEAFAF743B7EC5FD741D8F7098BFE3FC02E2A57C75DBE92FA1714D047DCC2
3FCD3EE0CE1754DF025F005B38C97A8E67E3A3DDB49B65AEBFB74E9F594E7BAF
28A0B3DDF2BF43C3C7E9A725239330BE50ACD0E52B26FE7DCD138AA335A8F9FF
ED8EE2DF9EC37DF43FA523F4A5D551FADC4AA2EB9E8AD292DF8D929765D273F2
38DDBABAC5F61AE4EF267C39B2FE49A7F6D6097CF66C385B595CD41C99141F0B
683FEBE3B966F51FD620EB3637EA3F5F6E376AAF07D76C3E1FEF1DB786AAE9AC
6D21F3B8350C4C777D8D35E0BD81FDD9C7E8A10FFA7943B6FF7FB6FF7FB6FF7F
B6FF7FB6FF7FB6FF7FB6FFFFFBA7FFBF194D67FF7F2B9AAEFEFF25F52ACD44FF
FF67F7A83A07C2F574F6FFD7B12F5EA792D51ADCECFFAFD37A362DC8E4A2B544
FBC344B5FC9E97FC5A5DC3BA9AC963DDECFFAF63EBEFFD4E64E23EAE7539608C
11DFCDFEFF5F7E85E85FE2B08D6BC0338CC954FFFF23BD2A59D99DF1F974F4FF
4F44D3D1FFDF8AA6ABFFBF95EFCBF6FFCFF6FF4FA50FA5FA1B81B89EFF7CCF8D
FE92897AE6E07B8080CF1349F0BD6F04E755EEF6EC1139E82312F47986F10D6B
F3F62F28DD21DECCCED765AF4DD9EFBF7333758796F3B3CF2BDA3A86D49E4EE9
C943F6AED37E83D95CBD4819EEAAB4D5EFFFF0B6858AD65BE7B5D47F7F22DFFB
55F95BE6BDDFE71A356CBF9E1D8BC8EF2DB47DF1A52207BD0F57F8EDA529D7D5
E17D774FE9AF6DBB3F13EF21648E7749BDAE0FD3E16ADE0BE883039D947ACEBA
6667BF93EAC3B172BD8FD433F6F7DD13819EBB75BED1FCC6227C6B15B6A307F5
7E71B5FC9D1BDB985BF8DDA1C7D4FA5AFAA8A43D2E64DF67D8B45BF8E87B9CB4
DF735CFF3727FDEFEDF6B9B763077A6F30CC710F7FF7943EF309FAC2DDA1CA7F
938BF28FF51AFF8E9DDE1FAAFE2D775DFFEC7D6BA8D91FDB8C7BF677B512F47A
3AECFA61BD47276249FAFE67ABAD1EA2936C807D257CE6E1EAAB142771C7D4FF
6EBB8263A167B0B64C7CC4490CD0ED30BCEF9EB4BEF5D36320FA7A3A8EBF5EF1
C754E36FC7DEEFC5E7476D21BFB8D8E9F79FC821E4FF3BC439851D7DC07EAB32
37F9FB9F57B43B5D03E420F742EB6B801C0BF6049F1ACBBFF81A7FDF849E6BFD
10D083C5EFDE1A749D14CFC08E2CFFBEA93E7B1ABAA6F5716D73730DB13EF0EC
47A49FD4F26F5CABBE65B27D03035816EB8DD46F109FC9F8EF89B36BB0B38636
E7FEC1E535F8C48FA6E5F7E5566B98267C7D0D71B6D93A1DF28FEFF3CCF9C803
201DFBFF01B4264FDD
}
end
object popLastDirs: TPopupMenu

View File

@ -18,6 +18,7 @@ type
bbtnCreateHTML: TBitBtn;
bbtnSave: TBitBtn;
bbtnShow: TBitBtn;
bbtnPreview: TBitBtn;
cbDarkMode: TCheckBox;
DirectoryEdit: TDirectoryEdit;
ImageList: TImageList;
@ -28,6 +29,7 @@ type
TaskDialog: TTaskDialog;
procedure bbtnCloseClick(Sender: TObject);
procedure bbtnCreateHTMLClick(Sender: TObject);
procedure bbtnPreviewClick(Sender: TObject);
procedure bbtnSaveClick(Sender: TObject);
procedure bbtnShowClick(Sender: TObject);
procedure cbDarkModeChange(Sender: TObject);
@ -41,8 +43,8 @@ type
private
ImgDirectory: String;
function GetImgDirectory(P: String): String;
procedure ErrorMsg(const AMsg: String);
procedure InfoMsg(const AMsg: String);
procedure CreateHTML(HTMLLines: TStrings; Preview: Boolean);
procedure ShowMsg(const AMsgCaption: String; const AMsg: String);
procedure UpdateLastDirs(ImgDir: String; Delete: Boolean);
public
@ -61,6 +63,7 @@ const
ConfigFileName = 'IconTableConfig.ini';
IconTableFileName = 'IconTable.html';
InfoTextFileName = 'lazarus_general_purpose_images.txt';
TempFileName = 'IconTableTemp.html';
DefaultDirectory = '../../images/general_purpose/';
LastDirsMax = 9;
@ -163,20 +166,83 @@ begin
Config.WriteBool('Options', 'DarkMode', cbDarkMode.Checked);
except
ErrorMsg('The configuration could not be saved.');
ShowMsg('Error', 'The configuration could not be saved.');
end;
finally
Config.Free;
end;
try
if FileExists(Application.Location + TempFileName) then
DeleteFile(Application.Location + TempFileName);
except
ShowMsg('Error', 'The temp file could not be deleted.');
end;
end;
procedure TMainForm.cbDarkModeChange(Sender: TObject);
begin
bbtnPreview.Enabled := False;
bbtnSave.Enabled := False;
bbtnShow.Enabled := False;
end;
procedure TMainForm.bbtnCreateHTMLClick(Sender: TObject);
begin
SynEdit.Lines.Clear;
CreateHTML(SynEdit.Lines, False);
bbtnPreview.Enabled := True;
bbtnSave.Enabled := True;
bbtnShow.Enabled := False;
bbtnPreview.SetFocus;
UpdateLastDirs(ImgDirectory, False);
end;
procedure TMainForm.bbtnPreviewClick(Sender: TObject);
var
HTMLLines: TStrings;
begin
HTMLLines := TStringList.Create;
CreateHTML(HTMLLines, True);
try
HTMLLines.SaveToFile(Application.Location + TempFileName);
except
ShowMsg('Error', 'The file could not be saved as: ' + Application.Location + TempFileName);
end;
HTMLLines.Free;
if FileExists(Application.Location + TempFileName) then
OpenURL(Application.Location + TempFileName);
bbtnSave.SetFocus;
end;
procedure TMainForm.bbtnSaveClick(Sender: TObject);
begin
try
SynEdit.Lines.SaveToFile(ImgDirectory + IconTableFileName);
ShowMsg('Information', 'Saved as: ' + ImgDirectory + IconTableFileName);
bbtnShow.Enabled := True;
bbtnShow.SetFocus;
except
ShowMsg('Error', 'The file could not be saved as: ' + ImgDirectory + IconTableFileName);
end;
end;
procedure TMainForm.bbtnShowClick(Sender: TObject);
begin
if FileExists(ImgDirectory + IconTableFileName) then
OpenURL(ImgDirectory + IconTableFileName);
bbtnCreateHTML.SetFocus;
end;
procedure TMainForm.bbtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.CreateHTML(HTMLLines: TStrings; Preview: Boolean);
var
AllFileList: TStringList;
IcoFileList: TStringList;
@ -201,19 +267,18 @@ var
HoverColors: String = 'color: #ffffff; background-color: #303030;}';
begin
try
Screen.BeginWaitCursor;
AllFileList := TStringList.Create;
IcoFileList := TStringList.Create;
IcoNameList := TStringList.Create;
IcoSizeList := TStringList.Create;
PixSizeList := TStringList.Create;
Screen.BeginWaitCursor;
SynEdit.Lines.BeginUpdate;
FindAllFiles(AllFileList, ImgDirectory, '*.png', False);
if AllFileList.Count = 0 then
begin
ErrorMsg('No png image files found in ' + ImgDirectory);
ShowMsg('Error', 'No png image files found in ' + ImgDirectory);
Exit;
end;
@ -232,7 +297,11 @@ begin
else
IcoName := Utf8Copy(IcoFile, 1, DPos - 1);
IcoFileList.Add(IcoFile);
if Preview then
IcoFileList.Add('file:///' + ImgDirectory + IcoFile)
else
IcoFileList.Add(IcoFile);
IcoNameList.Add(IcoName);
IcoSizeList.Add(IcoSize);
if PixSizeList.IndexOf(IcoSize) = -1 then
@ -242,7 +311,7 @@ begin
if IcoFileList.Count = 0 then
begin
ErrorMsg('No matching png image files found in ' + ImgDirectory);
ShowMsg('Error', 'No matching png image files found in ' + ImgDirectory);
Exit;
end;
@ -254,44 +323,44 @@ begin
HoverColors := 'color: #000000; background-color: #ffffff;}';
end;
SynEdit.Lines.Clear;
SynEdit.Lines.Add('<!DOCTYPE html>');
SynEdit.Lines.Add('<html>');
SynEdit.Lines.Add('<head>');
SynEdit.Lines.Add('<title>Icons</title>');
SynEdit.Lines.Add('<meta charset="UTF-8">');
SynEdit.Lines.Add('<style media="all">');
SynEdit.Lines.Add(' body {font-family: sans-serif; font-size: 16px; font-weight: 400; margin: 0 auto; padding: 30px 0px 80px 0px; ' + BodyColors);
SynEdit.Lines.Add(' table {border-collapse: collapse; margin-left: auto; margin-right: auto;}');
SynEdit.Lines.Add(' tr {border-bottom: 1px solid #ddd;}');
SynEdit.Lines.Add(' tr:hover {' + HoverColors);
SynEdit.Lines.Add(' td {padding: 10px 15px 10px 15px;}');
SynEdit.Lines.Add(' .colorset1 {' + ColorSet1);
SynEdit.Lines.Add(' .colorset2 {' + ColorSet2);
SynEdit.Lines.Add(' .text_center {text-align: center;}');
SynEdit.Lines.Add(' .right_border {border-right: 1px solid #ddd;}');
SynEdit.Lines.Add(' .no_border {border: 0;}');
SynEdit.Lines.Add(' .infobox {margin: 0 auto; width: 500px; box-shadow: 0px 0px 5px 3px rgba(192, 192, 192, 0.37); padding: 10px 15px 10px 15px; margin-top: 30px;}');
SynEdit.Lines.Add('</style>');
SynEdit.Lines.Add('</head>');
SynEdit.Lines.Add('<body>');
SynEdit.Lines.Add('<table>');
SynEdit.Lines.Add(' <tr class="no_border">');
SynEdit.Lines.Add(' <td class="colorset1 right_border"></td>');
SynEdit.Lines.Add(' <td class="colorset2 text_center" colspan="' + PixSizeList.Count.ToString + '">Appendix</td>');
SynEdit.Lines.Add(' </tr>');
SynEdit.Lines.Add(' <tr>');
SynEdit.Lines.Add(' <td class="colorset1 right_border">Name</td>');
HTMLLines.Clear;
HTMLLines.Add('<!DOCTYPE html>');
HTMLLines.Add('<html>');
HTMLLines.Add('<head>');
HTMLLines.Add('<title>Icons</title>');
HTMLLines.Add('<meta charset="UTF-8">');
HTMLLines.Add('<style media="all">');
HTMLLines.Add(' body {font-family: sans-serif; font-size: 16px; font-weight: 400; margin: 0 auto; padding: 30px 0px 80px 0px; ' + BodyColors);
HTMLLines.Add(' table {border-collapse: collapse; margin-left: auto; margin-right: auto;}');
HTMLLines.Add(' tr {border-bottom: 1px solid #ddd;}');
HTMLLines.Add(' tr:hover {' + HoverColors);
HTMLLines.Add(' td {padding: 10px 15px 10px 15px;}');
HTMLLines.Add(' .colorset1 {' + ColorSet1);
HTMLLines.Add(' .colorset2 {' + ColorSet2);
HTMLLines.Add(' .text_center {text-align: center;}');
HTMLLines.Add(' .right_border {border-right: 1px solid #ddd;}');
HTMLLines.Add(' .no_border {border: 0;}');
HTMLLines.Add(' .infobox {margin: 0 auto; width: 500px; box-shadow: 0px 0px 5px 3px rgba(192, 192, 192, 0.37); padding: 10px 15px 10px 15px; margin-top: 30px;}');
HTMLLines.Add('</style>');
HTMLLines.Add('</head>');
HTMLLines.Add('<body>');
HTMLLines.Add('<table>');
HTMLLines.Add(' <tr class="no_border">');
HTMLLines.Add(' <td class="colorset1 right_border"></td>');
HTMLLines.Add(' <td class="colorset2 text_center" colspan="' + PixSizeList.Count.ToString + '">Appendix</td>');
HTMLLines.Add(' </tr>');
HTMLLines.Add(' <tr>');
HTMLLines.Add(' <td class="colorset1 right_border">Name</td>');
for i := 0 to PixSizeList.Count - 1 do
SynEdit.Lines.Add(' <td class="colorset2 text_center">' + PixSizeList[i] + '</td>');
SynEdit.Lines.Add(' </tr>');
HTMLLines.Add(' <td class="colorset2 text_center">' + PixSizeList[i] + '</td>');
HTMLLines.Add(' </tr>');
for i := 0 to IcoFileList.Count - 1 do
begin
if (i = IcoFileList.Count - 1) or (IcoNameList[i + 1] <> IcoNameList[i]) then
begin
SynEdit.Lines.Add(' <tr>');
SynEdit.Lines.Add(' <td class="right_border">' + IcoNameList[i] + '</td>');
HTMLLines.Add(' <tr>');
HTMLLines.Add(' <td class="right_border">' + IcoNameList[i] + '</td>');
for ips := 0 to PixSizeList.Count - 1 do
begin
LineStr := '';
@ -299,76 +368,46 @@ begin
if IcoSizeList[isl] = PixSizeList[ips] then
LineStr := ' <td><img src="' + IcoFileList.Strings[isl] + '.png" loading="lazy" alt=""></td>';
if LineStr > '' then
SynEdit.Lines.Add(LineStr)
HTMLLines.Add(LineStr)
else
SynEdit.Lines.Add(' <td></td>');
HTMLLines.Add(' <td></td>');
end;
SynEdit.Lines.Add(' </tr>');
HTMLLines.Add(' </tr>');
StartIdx := i + 1;
IconGroups := IconGroups + 1;
end;
end;
SynEdit.Lines.Add('</table>');
HTMLLines.Add('</table>');
SynEdit.Lines.Add('<div class="infobox colorset2">');
SynEdit.Lines.Add('This folder contains ' + IcoFileList.Count.ToString + ' icons in ' + IconGroups.ToString + ' icon groups with ' + PixSizeList.Count.ToString + ' icon sizes.');
HTMLLines.Add('<div class="infobox colorset2">');
HTMLLines.Add('This folder contains ' + IcoFileList.Count.ToString + ' icons in ' + IconGroups.ToString + ' icon groups with ' + PixSizeList.Count.ToString + ' icon sizes.');
if FileExists(ImgDirectory + InfoTextFileName) then
begin
try
InfoTxtList := TStringList.Create;
InfoTxtList.LoadFromFile(ImgDirectory + InfoTextFileName);
SynEdit.Lines.Add('<hr>');
HTMLLines.Add('<hr>');
for i := 0 to InfoTxtList.Count - 1 do
SynEdit.Lines.Add(InfoTxtList[i] + '<br>');
HTMLLines.Add(InfoTxtList[i] + '<br>');
finally
InfoTxtList.Free;
end;
end;
SynEdit.Lines.Add('</div>');
HTMLLines.Add('</div>');
SynEdit.Lines.Add('</body>');
SynEdit.Lines.Add('</html>');
bbtnSave.Enabled := True;
bbtnSave.SetFocus;
bbtnShow.Enabled := False;
UpdateLastDirs(ImgDirectory, False);
HTMLLines.Add('</body>');
HTMLLines.Add('</html>');
finally
AllFileList.Free;
IcoFileList.Free;
IcoNameList.Free;
IcoSizeList.Free;
PixSizeList.Free;
SynEdit.Lines.EndUpdate;
Screen.EndWaitCursor;
end;
end;
procedure TMainForm.bbtnSaveClick(Sender: TObject);
begin
try
SynEdit.Lines.SaveToFile(ImgDirectory + IconTableFileName);
InfoMsg('Saved as: ' + ImgDirectory + IconTableFileName);
bbtnShow.Enabled := True;
bbtnShow.SetFocus;
except
ErrorMsg('The file could not be saved as: ' + ImgDirectory + IconTableFileName);
end;
end;
procedure TMainForm.bbtnShowClick(Sender: TObject);
begin
if FileExists(ImgDirectory + IconTableFileName) then
OpenURL(ImgDirectory + IconTableFileName);
bbtnCreateHTML.SetFocus;
end;
procedure TMainForm.bbtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.DirectoryEditChange(Sender: TObject);
begin
if DirectoryExists(DirectoryEdit.Directory) then
@ -376,6 +415,7 @@ begin
ImgDirectory := CleanAndExpandDirectory(DirectoryEdit.Directory);
SynEdit.Clear;
bbtnCreateHTML.Enabled := True;
bbtnPreview.Enabled := False;
bbtnSave.Enabled := False;
bbtnShow.Enabled := False;
bbtnCreateHTML.SetFocus;
@ -438,22 +478,14 @@ begin
sbtnLastDirs.Enabled := popLastDirs.Items[0].Caption > '';
end;
procedure TMainForm.InfoMsg(const AMsg: String);
procedure TMainForm.ShowMsg(const AMsgCaption: String; const AMsg: String);
begin
TaskDialog.Caption := 'Information';
TaskDialog.MainIcon := tdiInformation;
TaskDialog.Title := 'Information';
TaskDialog.CommonButtons := [tcbOk];
TaskDialog.DefaultButton := tcbOk;
TaskDialog.Text := AMsg;
TaskDialog.Execute;
end;
procedure TMainForm.ErrorMsg(const AMsg: String);
begin
TaskDialog.Caption := 'Error';
TaskDialog.MainIcon := tdiError;
TaskDialog.Title := 'Error';
if AMsgCaption = 'Error' then
TaskDialog.MainIcon := tdiError
else
TaskDialog.MainIcon := tdiInformation;
TaskDialog.Caption := AMsgCaption;
TaskDialog.Title := AMsgCaption;
TaskDialog.CommonButtons := [tcbOk];
TaskDialog.DefaultButton := tcbOk;
TaskDialog.Text := AMsg;