- Merged client side changes from Turley (with syntactic modifications)

- Changed alignment in frmDrawSettings
This commit is contained in:
Andreas Schneider 2008-08-12 13:46:45 +02:00
parent c95ba906a7
commit 2edc2a7424
8 changed files with 788 additions and 1116 deletions

View File

@ -78,131 +78,138 @@
<UnitName Value="UfrmInitialize"/>
</Unit4>
<Unit5>
<Filename Value="UOpenGLUI.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UOpenGLUI"/>
</Unit5>
<Unit6>
<Filename Value="UfrmAccountControl.pas"/>
<ComponentName Value="frmAccountControl"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="UfrmAccountControl.lrs"/>
<UnitName Value="UfrmAccountControl"/>
</Unit6>
<Unit7>
</Unit5>
<Unit6>
<Filename Value="UfrmEditAccount.pas"/>
<ComponentName Value="frmEditAccount"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="UfrmEditAccount.lrs"/>
<UnitName Value="UfrmEditAccount"/>
</Unit7>
<Unit8>
</Unit6>
<Unit7>
<Filename Value="Tools/UfrmDrawSettings.pas"/>
<ComponentName Value="frmDrawSettings"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="Tools/UfrmDrawSettings.lrs"/>
<UnitName Value="UfrmDrawSettings"/>
</Unit8>
<Unit9>
</Unit7>
<Unit8>
<Filename Value="Tools/UfrmBoundaries.pas"/>
<ComponentName Value="frmBoundaries"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Tools/UfrmBoundaries.lrs"/>
<UnitName Value="UfrmBoundaries"/>
</Unit9>
<Unit10>
</Unit8>
<Unit9>
<Filename Value="Tools/UfrmElevateSettings.pas"/>
<ComponentName Value="frmElevateSettings"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Tools/UfrmElevateSettings.lrs"/>
<UnitName Value="UfrmElevateSettings"/>
</Unit10>
<Unit11>
</Unit9>
<Unit10>
<Filename Value="UOverlayUI.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UOverlayUI"/>
</Unit11>
<Unit12>
</Unit10>
<Unit11>
<Filename Value="UResourceManager.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UResourceManager"/>
</Unit12>
<Unit13>
</Unit11>
<Unit12>
<Filename Value="Tools/UfrmConfirmation.pas"/>
<ComponentName Value="frmConfirmation"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Tools/UfrmConfirmation.lrs"/>
<UnitName Value="UfrmConfirmation"/>
</Unit13>
<Unit14>
</Unit12>
<Unit13>
<Filename Value="Tools/UfrmMoveSettings.pas"/>
<ComponentName Value="frmMoveSettings"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Tools/UfrmMoveSettings.lrs"/>
<UnitName Value="UfrmMoveSettings"/>
</Unit14>
<Unit15>
</Unit13>
<Unit14>
<Filename Value="UfrmAbout.pas"/>
<ComponentName Value="frmAbout"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="UfrmAbout.lrs"/>
<UnitName Value="UfrmAbout"/>
</Unit15>
<Unit16>
</Unit14>
<Unit15>
<Filename Value="Tools/UfrmHueSettings.pas"/>
<ComponentName Value="frmHueSettings"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="Tools/UfrmHueSettings.lrs"/>
<UnitName Value="UfrmHueSettings"/>
</Unit16>
<Unit17>
</Unit15>
<Unit16>
<Filename Value="UfrmRadar.pas"/>
<ComponentName Value="frmRadarMap"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="UfrmRadar.lrs"/>
<UnitName Value="UfrmRadar"/>
</Unit17>
<Unit18>
</Unit16>
<Unit17>
<Filename Value="UfrmLargeScaleCommand.pas"/>
<ComponentName Value="frmLargeScaleCommand"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="UfrmLargeScaleCommand.lrs"/>
<UnitName Value="UfrmLargeScaleCommand"/>
</Unit18>
<Unit19>
</Unit17>
<Unit18>
<Filename Value="Tools/UfrmVirtualLayer.pas"/>
<ComponentName Value="frmVirtualLayer"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="Tools/UfrmVirtualLayer.lrs"/>
<UnitName Value="UfrmVirtualLayer"/>
</Unit19>
<Unit20>
</Unit18>
<Unit19>
<Filename Value="Tools/UfrmFilter.pas"/>
<ComponentName Value="frmFilter"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="Tools/UfrmFilter.lrs"/>
<UnitName Value="UfrmFilter"/>
</Unit20>
<Unit21>
</Unit19>
<Unit20>
<Filename Value="UfrmTileInfo.pas"/>
<ComponentName Value="frmTileInfo"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="UfrmTileInfo.lrs"/>
<UnitName Value="UfrmTileInfo"/>
</Unit21>
<Unit22>
</Unit20>
<Unit21>
<Filename Value="UGUIPlatformUtils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UGUIPlatformUtils"/>
</Unit22>
<Unit23>
</Unit21>
<Unit22>
<Filename Value="UPlatformTypes.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UPlatformTypes"/>
</Unit22>
<Unit23>
<Filename Value="UfrmRegionControl.pas"/>
<ComponentName Value="frmRegionControl"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceBaseClass Value="Form"/>
<ResourceFilename Value="UfrmRegionControl.lrs"/>
<UnitName Value="UfrmRegionControl"/>
</Unit23>
</Units>
</ProjectOptions>

View File

@ -38,7 +38,7 @@ uses
UfrmElevateSettings, UOverlayUI, UResourceManager, UfrmConfirmation,
UfrmMoveSettings, UfrmAbout, UfrmHueSettings, UfrmRadar,
UfrmLargeScaleCommand, UfrmVirtualLayer, UfrmFilter, UfrmTileInfo,
UGUIPlatformUtils, UPlatformTypes;
UGUIPlatformUtils, UPlatformTypes, UfrmRegionControl;
{$IFDEF Windows}
{$R *.res}

View File

@ -1,25 +1,29 @@
object frmDrawSettings: TfrmDrawSettings
Left = 290
Height = 138
Top = 171
Width = 186
HorzScrollBar.Page = 185
VertScrollBar.Page = 137
Left = 268
Height = 181
Top = 165
Width = 243
ActiveControl = rbTileList
BorderIcons = []
BorderStyle = bsToolWindow
Caption = 'Draw settings'
ClientHeight = 138
ClientWidth = 186
ClientHeight = 181
ClientWidth = 243
FormStyle = fsStayOnTop
OnClose = FormClose
OnDeactivate = FormDeactivate
OnShow = FormShow
LCLVersion = '0.9.25'
object rbTileList: TRadioButton
Left = 8
Height = 15
Height = 21
Top = 8
Width = 113
Width = 227
Align = alTop
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 4
Caption = 'Use tile from the list'
Checked = True
State = cbChecked
@ -28,47 +32,93 @@ object frmDrawSettings: TfrmDrawSettings
end
object rbRandom: TRadioButton
Left = 8
Height = 15
Top = 32
Width = 164
Height = 21
Top = 33
Width = 227
Align = alTop
BorderSpacing.Left = 8
BorderSpacing.Top = 4
BorderSpacing.Right = 8
Caption = 'Use tiles from the random pool'
TabOrder = 1
UseOnChange = True
end
object cbForceAltitude: TCheckBox
Left = 8
Height = 15
Top = 60
Width = 89
Caption = 'Force altitude:'
TabOrder = 2
end
object seForceAltitude: TSpinEdit
Left = 104
Height = 23
Top = 56
Width = 50
MaxValue = 127
MinValue = -128
OnChange = seForceAltitudeChange
TabOrder = 3
end
object gbHue: TGroupBox
Left = 8
Height = 49
Top = 88
Width = 185
Top = 124
Width = 227
Align = alTop
BorderSpacing.Around = 8
Caption = 'Hue (Statics only)'
ClientHeight = 31
ClientWidth = 181
TabOrder = 4
ClientHeight = 30
ClientWidth = 221
TabOrder = 2
object pbHue: TPaintBox
Cursor = crHandPoint
Left = 6
Height = 16
Top = 1
Width = 169
Left = 4
Height = 26
Width = 213
Align = alClient
BorderSpacing.Left = 4
BorderSpacing.Right = 4
BorderSpacing.Bottom = 4
OnClick = pbHueClick
OnPaint = pbHuePaint
end
end
object Panel1: TPanel
Left = 8
Height = 23
Top = 62
Width = 227
Align = alTop
BorderSpacing.Around = 8
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 227
TabOrder = 3
object seForceAltitude: TSpinEdit
Left = 177
Height = 23
Width = 50
Align = alRight
MaxValue = 127
MinValue = -128
TabOrder = 0
end
object cbForceAltitude: TCheckBox
Height = 23
Width = 177
Align = alClient
Caption = 'Force altitude:'
TabOrder = 1
end
end
object Panel2: TPanel
Left = 8
Height = 23
Top = 93
Width = 227
Align = alTop
BorderSpacing.Around = 8
BevelOuter = bvNone
ClientHeight = 23
ClientWidth = 227
TabOrder = 4
object seRandomHeight: TSpinEdit
Left = 177
Height = 23
Width = 50
Align = alRight
TabOrder = 0
end
object cbRandomHeight: TCheckBox
Height = 23
Width = 177
Align = alClient
Caption = 'Add Random Altitude'
TabOrder = 1
end
end
end

View File

@ -37,19 +37,24 @@ type
{ TfrmDrawSettings }
TfrmDrawSettings = class(TForm)
cbForceAltitude: TCheckBox;
gbHue: TGroupBox;
TfrmDrawSettings = class(TForm)
cbForceAltitude: TCheckBox;
cbRandomHeight: TCheckBox;
gbHue: TGroupBox;
Panel1: TPanel;
Panel2: TPanel;
pbHue: TPaintBox;
rbRandom: TRadioButton;
rbTileList: TRadioButton;
seForceAltitude: TSpinEdit;
rbTileList: TRadioButton;
seForceAltitude: TSpinEdit;
seRandomHeight: TSpinEdit;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormDeactivate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure pbHueClick(Sender: TObject);
procedure pbHuePaint(Sender: TObject);
procedure seForceAltitudeChange(Sender: TObject);
procedure seRandomHeightChange(Sender: TObject);
protected
procedure MouseLeave(var msg: TLMessage); message CM_MouseLeave;
public
@ -115,6 +120,11 @@ begin
cbForceAltitude.Checked := True;
end;
procedure TfrmDrawSettings.seRandomHeightChange(Sender: TObject);
begin
cbRandomHeight.Checked := True;
end;
procedure TfrmDrawSettings.MouseLeave(var msg: TLMessage);
begin
try

View File

@ -78,7 +78,7 @@ uses
UGameResources, UfrmAccountControl, UfrmEditAccount, UfrmDrawSettings,
UfrmBoundaries, UfrmElevateSettings, UfrmConfirmation, UfrmMoveSettings,
UfrmAbout, UfrmHueSettings, UfrmRadar, UfrmLargeScaleCommand,
UfrmVirtualLayer, UfrmFilter, UfrmTileInfo;
UfrmVirtualLayer, UfrmFilter, UfrmTileInfo, UfrmRegionControl;
{$I version.inc}
@ -209,6 +209,7 @@ begin
frmRadarMap := TfrmRadarMap.Create(frmMain);
frmLargeScaleCommand := TfrmLargeScaleCommand.Create(frmMain);
frmTileInfo := TfrmTileInfo.Create(frmMain);
frmRegionControl := TfrmRegionControl.Create(frmMain);
frmMain.Show;
frmInitialize.Hide;
tmNoOp.Enabled := True;
@ -301,6 +302,7 @@ begin
if frmFilter <> nil then FreeAndNil(frmFilter);
if frmVirtualLayer <> nil then FreeAndNil(frmVirtualLayer);
if frmAbout <> nil then FreeAndNil(frmAbout);
if frmRegionControl <> nil then FreeAndNil(frmRegionControl);
if frmRadarMap <> nil then FreeAndNil(frmRadarMap);
if frmMain <> nil then
begin

View File

@ -3,8 +3,6 @@ object frmAccountControl: TfrmAccountControl
Height = 378
Top = 171
Width = 369
HorzScrollBar.Page = 368
VertScrollBar.Page = 377
ActiveControl = vstAccounts
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
@ -16,6 +14,7 @@ object frmAccountControl: TfrmAccountControl
OnDestroy = FormDestroy
OnShow = FormShow
Position = poOwnerFormCenter
LCLVersion = '0.9.25'
object tbMain: TToolBar
Height = 26
Width = 369
@ -106,684 +105,269 @@ object frmAccountControl: TfrmAccountControl
object ilToolbar: TImageList
left = 144
Bitmap = {
6C69040000001000000010000000F00700002F2A2058504D202A2F0A73746174
69632063686172202A677261706869635B5D203D207B0A223136203136203838
2032222C0A222E2E2063204E6F6E65222C0A222E2C2063202334463939343722
2C0A222E2D20632023343939313431222C0A222E2A2063202336354234354222
2C0A222E6120632023354641443536222C0A222E622063202335414136353022
2C0A222E6320632023353339453442222C0A222E642063202334443936343522
2C0A222E6520632023363841383630222C0A222E662063202336324132354222
2C0A222E6720632023334137453334222C0A222E682063202336384239354522
2C0A222E6920632023383343333739222C0A222E6A2063202339324341383922
2C0A222E6B20632023394344303934222C0A222E6C2063202339454431393522
2C0A222E6D20632023393943463930222C0A222E6E2063202339344342384322
2C0A222E6F20632023384643393837222C0A222E702063202338374334383022
2C0A222E7120632023353439353445222C0A222E722063202332433644323722
2C0A222E7320632023363742363543222C0A222E742063202338454339383522
2C0A222E7520632023413444343942222C0A222E762063202339384345384622
2C0A222E7720632023394143463932222C0A222E782063202339354343384422
2C0A222E7920632023393043413838222C0A222E7A2063202338424336383322
2C0A222E4120632023383543343745222C0A222E422063202337464331373922
2C0A222E4320632023344338443437222C0A222E442063202332353635323222
2C0A222E4520632023374542463735222C0A222E462063202341314432393822
2C0A222E4720632023394343463934222C0A222E482063202338444337383622
2C0A222E4920632023363541373545222C0A222E4A2063202334303836333922
2C0A222E4B20632023333337363245222C0A222E4C2063202334463930343922
2C0A222E4D20632023344138423435222C0A222E4E2063202332343633323022
2C0A222E4F20632023354541423534222C0A222E502063202338394333383022
2C0A222E5120632023384143343833222C0A222E522063202334343842334422
2C0A222E5320632023334538333337222C0A222E542063202332373636323322
2C0A222E5520632023323336313146222C0A222E562063202335354131344422
2C0A222E5720632023343238383342222C0A222E582063202333433830333522
2C0A222E5920632023364543303633222C0A222E5A2063202336414242354622
2C0A222E3020632023384543363836222C0A222E312063202338464339383822
2C0A222E3220632023373642333646222C0A222E332063202336444245363222
2C0A222E3420632023383543373742222C0A222E352063202338314332373722
2C0A222E3620632023353741333445222C0A222E372063202335313942343922
2C0A222E3820632023364241433633222C0A222E392063202338424333383322
2C0A222E4020632023383943363832222C0A222E232063202335363937353022
2C0A222E3B20632023364342433630222C0A222E3A2063202338334334373922
2C0A222E3D20632023413744373945222C0A222E2B2063202339464432393722
2C0A222E2520632023383243323741222C0A222E242063202336334134354422
2C0A222E2820632023324136423236222C0A222E292063202337434244373322
2C0A222E5B20632023394644313936222C0A222E5D2063202339364344384622
2C0A222C2E20632023393143413841222C0A222C2C2063202338424337383522
2C0A222C2D20632023383142453741222C0A222C2A2063202336434144363522
2C0A222C6120632023353139323442222C0A222C622063202332393638323422
2C0A222C6320632023364542303636222C0A222C642063202336384141363122
2C0A222C6520632023333737423332222C0A222C662063202333323734324322
2C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2E2E
2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2A2E612E622E632E642E652E
662E672E2E2E2E2E2E2E2E222C0A222E2E2E2E2E682E692E6A2E6B2E6C2E6D2E
6E2E6F2E702E712E722E2E2E2E2E2E222C0A222E2E2E732E742E752E762E772E
782E792E7A2E412E422E432E442E2E2E2E2E2E222C0A222E2E2E452E462E472E
482E492E4A2E672E4B2E4C2E4D2E4E2E2E2E2E2E2E2E2E222C0A222E4F2E502E
782E512E522E532E2E2E2E2E2E2E542E552E2E2E2E2E2E2E2E2E2E222C0A222E
562E2C2E2D2E572E582E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E22
2C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E562E2C2E2D2E
572E58222C0A222E2E2E2E2E2E2E2E2E2E2E592E5A2E2E2E2E2E2E2E632E642E
302E312E322E4B222C0A222E2E2E2E2E2E2E2E2E332E342E352E4F2E362E372E
382E392E6F2E402E232E2E222C0A222E2E2E2E2E2E2E3B2E3A2E3D2E752E2B2E
772E782E792E252E412E242E282E2E222C0A222E2E2E2E2E2E2E2A2E292E5B2E
472E5D2C2E2C2C2C2D2C2A2C612C622E2E2E2E222C0A222E2E2E2E2E2E2E2E2E
362C632C642E522E532C652C662E722E2E2E2E2E2E2E2E222C0A222E2E2E2E2E
2E2E2E2E2E2E2D2E572E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E222C0A222E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E22
7D0A310A00002F2A2058504D202A2F0A7374617469632063686172202A677261
706869635B5D203D207B0A223136203136203132342032222C0A222E2E206320
4E6F6E65222C0A222E2C20632023384434383132222C0A222E2D206320233930
34423130222C0A222E2A20632023384134383046222C0A222E61206320233744
34323131222C0A222E6220632023354233333135222C0A222E63206320233936
34453131222C0A222E6420632023394235383132222C0A222E65206320233939
35383132222C0A222E6620632023393335333131222C0A222E67206320233837
34413046222C0A222E6820632023373133453045222C0A222E69206320233442
32453133222C0A222E6A20632023393734423046222C0A222E6B206320233946
35383132222C0A222E6C20632023384134413046222C0A222E6D206320233837
34423046222C0A222E6E20632023383734423131222C0A222E6F206320233835
34433135222C0A222E7020632023373534313132222C0A222E71206320233543
33333046222C0A222E7220632023383733453043222C0A222E73206320234238
39373743222C0A222E7420632023453442373841222C0A222E75206320234338
39433731222C0A222E7620632023364534303135222C0A222E77206320233732
34343139222C0A222E7820632023364234353232222C0A222E79206320233636
33423131222C0A222E7A20632023394235453146222C0A222E41206320234637
45384439222C0A222E4220632023463143353937222C0A222E43206320234535
42423845222C0A222E4420632023443141393746222C0A222E45206320234446
42353839222C0A222E4620632023454544464344222C0A222E47206320234137
36383233222C0A222E4820632023393235423241222C0A222E49206320234545
43414136222C0A222E4A20632023454143434142222C0A222E4B206320234636
44304137222C0A222E4C20632023463644304138222C0A222E4D206320234545
43444137222C0A222E4E20632023394136323244222C0A222E4F206320233235
33433641222C0A222E5020632023413736443334222C0A222E51206320234638
43433943222C0A222E5220632023463744344146222C0A222E53206320234636
43464135222C0A222E5420632023414537343334222C0A222E55206320233244
33453638222C0A222E5620632023314334384243222C0A222E57206320234434
45324634222C0A222E5820632023413937423445222C0A222E59206320234138
37423444222C0A222E5A20632023433344364633222C0A222E30206320233143
34364245222C0A222E3120632023314634434334222C0A222E32206320234436
45344636222C0A222E3320632023413445344646222C0A222E34206320233732
44344646222C0A222E3520632023363943394646222C0A222E36206320233633
43304646222C0A222E3720632023354642364646222C0A222E38206320233738
41424145222C0A222E3920632023373239373630222C0A222E40206320233636
38453446222C0A222E2320632023353738333432222C0A222E3B206320233434
35343841222C0A222E3A20632023414243384643222C0A222E3D206320233938
44314646222C0A222E2B20632023364443374645222C0A222E25206320233638
42464645222C0A222E2420632023363442394645222C0A222E28206320233545
42314645222C0A222E2920632023363139424137222C0A222E5B206320233831
41423631222C0A222E5D20632023423444343935222C0A222C2E206320234430
45364241222C0A222C2C20632023384642423641222C0A222C2D206320233537
38463244222C0A222C2A20632023333736423139222C0A222C61206320234345
37433238222C0A222C6220632023454142333738222C0A222C63206320233934
39454233222C0A222C6420632023363042374646222C0A222C65206320233633
42364646222C0A222C6620632023363142324645222C0A222C67206320233544
41434645222C0A222C6820632023353941354645222C0A222C69206320233544
38383441222C0A222C6A20632023423144333930222C0A222C6B206320234231
44363932222C0A222C6C20632023464646464646222C0A222C6D206320233843
42433635222C0A222C6E20632023384642433637222C0A222C6F206320234431
37443239222C0A222C7020632023454542413832222C0A222C71206320233538
36363946222C0A222C7220632023383442424635222C0A222C73206320233542
41434646222C0A222C7420632023354141384645222C0A222C75206320233537
41324645222C0A222C7620632023353339434645222C0A222C77206320233443
37423331222C0A222C7820632023423644343943222C0A222C79206320234232
44323935222C0A222C7A20632023434437393235222C0A222C41206320233631
36313836222C0A222C4220632023333536304246222C0A222C43206320233631
42394645222C0A222C4420632023363242394645222C0A222C45206320233341
36453232222C0A222C4620632023384242413632222C0A222C47206320233837
42413630222C0A222C4820632023383742393630222C0A222C49206320233230
35304233222C0A222C4A20632023314634304130222C0A222C4B206320233232
34354141222C0A222C4C20632023323234364143222C0A222C4D206320233232
34344142222C0A222C4E20632023324435373543222C0A222C4F206320233533
38433238222C0A222C5020632023384442413634222C0A222E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E
2E2E2E2E2E2E2E2E2E2C2E2D2E2A2E612E622E2E2E2E2E2E2E2E2E2E222C0A22
2E2E2E2E2E2E2E2E2E2E2E632E642E652E662E672E682E692E2E2E2E2E2E2E2E
222C0A222E2E2E2E2E2E2E2E2E6A2E6B2E6C2E6D2E6E2E6F2E702E712E2E2E2E
2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E722E732E742E752E762E772E782E79
2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E7A2E412E422E432E442E45
2E462E472E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E482E492E4A2E4B
2E4C2E4A2E4D2E4E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E4F2E50
2E512E522E522E532E542E552E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E
2E562E572E582E592E592E582E5A2E302E2E2E2E2E2E2E2E222C0A222E2E2E2E
2E2E2E312E322E332E342E352E362E372E382E392E402E232E2E2E2E222C0A22
2E2E2E2E2E3B2E3A2E3D2E2B2E252E242E282E292E5B2E5D2C2E2C2C2C2D2C2A
222C0A222E2E2C612C622C632C642C652C662C672C682C692C6A2C6B2C6C2C6D
2C6E2C2A222C0A222E2E2C6F2C702C712C722C732C742C752C762C772C782C6C
2C6C2C6C2C792C2A222C0A222E2E2E2E2C7A2C412C422C432C442C442C442C45
2C462C472C6C2C482C6E2C2A222C0A222E2E2E2E2E2E2E2E2C492C4A2C4B2C4C
2C4D2C4E2C4F2C502C792C502C4F2C2A222C0A222E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2C2A2C2A2C2A2C2A2C2A2E2E227D0AF10B00002F2A205850
4D202A2F0A7374617469632063686172202A677261706869635B5D203D207B0A
223136203136203135322032222C0A222E2E2063204E6F6E65222C0A222E2C20
632023384434383132222C0A222E2D20632023393034423130222C0A222E2A20
632023384134383046222C0A222E6120632023374434323131222C0A222E6220
632023354233333135222C0A222E6320632023393634453131222C0A222E6420
632023394235383132222C0A222E6520632023393935383132222C0A222E6620
632023393335333131222C0A222E6720632023383734413046222C0A222E6820
632023373133453045222C0A222E6920632023344232453133222C0A222E6A20
632023393734423046222C0A222E6B20632023394635383132222C0A222E6C20
632023384134413046222C0A222E6D20632023383734423046222C0A222E6E20
632023383734423131222C0A222E6F20632023383534433135222C0A222E7020
632023373534313132222C0A222E7120632023354333333046222C0A222E7220
632023383733453043222C0A222E7320632023423839373743222C0A222E7420
632023453442373841222C0A222E7520632023433839433731222C0A222E7620
632023364534303135222C0A222E7720632023373234343139222C0A222E7820
632023364234353232222C0A222E7920632023363633423131222C0A222E7A20
632023394235453146222C0A222E4120632023463745384439222C0A222E4220
632023463143353937222C0A222E4320632023453542423845222C0A222E4420
632023443141393746222C0A222E4520632023444642353839222C0A222E4620
632023454544464344222C0A222E4720632023413736383233222C0A222E4820
632023443841353538222C0A222E4920632023444242313835222C0A222E4A20
632023443039443436222C0A222E4B20632023393235423241222C0A222E4C20
632023454543414136222C0A222E4D20632023454143434142222C0A222E4E20
632023463644304137222C0A222E4F20632023463644304138222C0A222E5020
632023454543444137222C0A222E5120632023423738343238222C0A222E5220
632023453742453737222C0A222E5320632023463044324234222C0A222E5420
632023464646334535222C0A222E5520632023454644324143222C0A222E5620
632023433738433438222C0A222E5720632023323533433641222C0A222E5820
632023413736443334222C0A222E5920632023463843433943222C0A222E5A20
632023463744344146222C0A222E3020632023463643464135222C0A222E3120
632023424638413245222C0A222E3220632023454244333745222C0A222E3320
632023463945334232222C0A222E3420632023453743303842222C0A222E3520
632023463644334145222C0A222E3620632023464345304334222C0A222E3720
632023443339463636222C0A222E3820632023314334384243222C0A222E3920
632023443445324634222C0A222E4020632023413937423445222C0A222E2320
632023413837423444222C0A222E3B20632023424138433432222C0A222E3A20
632023454544343744222C0A222E3D20632023464446364334222C0A222E2B20
632023463644443643222C0A222E2520632023454443413644222C0A222E2420
632023443741333633222C0A222E2820632023443239423544222C0A222E2920
632023314634434334222C0A222E5B20632023443645344636222C0A222E5D20
632023413445344646222C0A222C2E20632023373244344646222C0A222C2C20
632023363943394646222C0A222C2D20632023383642424246222C0A222C2A20
632023454544333739222C0A222C6120632023464446374337222C0A222C6220
632023463544433546222C0A222C6320632023463745323542222C0A222C6420
632023463244363741222C0A222C6520632023444639393430222C0A222C6620
632023343435343841222C0A222C6720632023414243384643222C0A222C6820
632023393844314646222C0A222C6920632023364443374645222C0A222C6A20
632023363842464645222C0A222C6B20632023383041374230222C0A222C6C20
632023453743423737222C0A222C6D20632023463544433545222C0A222C6E20
632023463745313541222C0A222C6F20632023463144343742222C0A222C7020
632023443439313436222C0A222C7120632023373236363638222C0A222C7220
632023434537433238222C0A222C7320632023454142333738222C0A222C7420
632023393439454233222C0A222C7520632023363042374646222C0A222C7620
632023363342364646222C0A222C7720632023374441334233222C0A222C7820
632023443342383736222C0A222C7920632023464446364332222C0A222C7A20
632023463744463633222C0A222C4120632023463845323544222C0A222C4220
632023463044333739222C0A222C4320632023443839353437222C0A222C4420
632023454142323735222C0A222C4520632023433737343239222C0A222C4620
632023443137443239222C0A222C4720632023454542413832222C0A222C4820
632023353836363946222C0A222C4920632023383442424635222C0A222C4A20
632023373439324137222C0A222C4B20632023443542363741222C0A222C4C20
632023443142373930222C0A222C4D20632023453443393535222C0A222C4E20
632023463544463542222C0A222C4F20632023454444303738222C0A222C5020
632023443239363531222C0A222C5120632023354436343936222C0A222C5220
632023454642433833222C0A222C5320632023434137373241222C0A222C5420
632023434437393235222C0A222C5520632023363136313836222C0A222C5620
632023333536304246222C0A222C5720632023414138393433222C0A222C5820
632023464646324530222C0A222C5920632023443839413534222C0A222C5A20
632023424537413141222C0A222C3020632023433539383439222C0A222C3120
632023423738383439222C0A222C3220632023343235343943222C0A222C3320
632023364436343741222C0A222C3420632023434537453245222C0A222C3520
632023443341323644222C0A222C3620632023323035304233222C0A222C3720
632023383136343244222C0A222C3820632023463943373934222C0A222C3920
632023463943393931222C0A222C4020632023433938353431222C0A222C2320
632023413436323233222C0A222C3B20632023334434393839222C0A222C3A20
632023323434464232222C0A222C3D20632023353533443131222C0A222C2B20
632023383735463238222C0A222C2520632023424438383439222C0A222C2420
632023424338443432222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2C2E2D2E
2A2E612E622E2E2E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E632E
642E652E662E672E682E692E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E
6A2E6B2E6C2E6D2E6E2E6F2E702E712E2E2E2E2E2E2E2E2E2E222C0A222E2E2E
2E2E2E2E722E732E742E752E762E772E782E792E2E2E2E2E2E2E2E2E2E222C0A
222E2E2E2E2E2E2E7A2E412E422E432E442E452E462E472E2E2E482E492E4A2E
2E222C0A222E2E2E2E2E2E2E4B2E4C2E4D2E4E2E4F2E4D2E502E512E522E532E
542E552E56222C0A222E2E2E2E2E2E2E572E582E592E5A2E5A2E302E312E322E
332E342E352E362E37222C0A222E2E2E2E2E2E2E382E392E402E232E232E3B2E
3A2E3D2E2B2E252E242E282E2E222C0A222E2E2E2E2E292E5B2E5D2C2E2C2C2C
2D2C2A2C612C622C632C642C652E2E2E2E222C0A222E2E2C662C672C682C692C
6A2C6B2C6C2C612C6D2C6E2C6F2C702C712E2E2E2E222C0A222C722C732C742C
752C762C772C782C792C7A2C412C422C432C442C452E2E2E2E222C0A222C462C
472C482C492C4A2C4B2C4C2C4D2C4E2C4F2C502C512C522C532E2E2E2E222C0A
222E2E2C542C552C562C572C582C592C5A2C302C312C322C332C342C352E2E2E
2E222C0A222E2E2E2E2E2E2C362C372C382C392C402C232C3B2C3A2E2E2E2E2E
2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2C3D2C2B2C252C242E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E227D0AB10A00002F2A2058504D202A2F0A737461746963
2063686172202A677261706869635B5D203D207B0A2231362031362031333220
32222C0A222E2E2063204E6F6E65222C0A222E2C20632023384434383132222C
0A222E2D20632023393034423130222C0A222E2A20632023384134383046222C
0A222E6120632023374434323131222C0A222E6220632023354233333135222C
0A222E6320632023393634453131222C0A222E6420632023394235383132222C
0A222E6520632023393935383132222C0A222E6620632023393335333131222C
0A222E6720632023383734413046222C0A222E6820632023373133453045222C
0A222E6920632023344232453133222C0A222E6A20632023393734423046222C
0A222E6B20632023394635383132222C0A222E6C20632023384134413046222C
0A222E6D20632023383734423046222C0A222E6E20632023383734423131222C
0A222E6F20632023383534433135222C0A222E7020632023373534313132222C
0A222E7120632023354333333046222C0A222E7220632023383733453043222C
0A222E7320632023423839373743222C0A222E7420632023453442373841222C
0A222E7520632023433839433731222C0A222E7620632023364534303135222C
0A222E7720632023373234343139222C0A222E7820632023364234353232222C
0A222E7920632023363633423131222C0A222E7A20632023394235453146222C
0A222E4120632023463745384439222C0A222E4220632023463143353937222C
0A222E4320632023453542423845222C0A222E4420632023443141393746222C
0A222E4520632023444642353839222C0A222E4620632023454544464344222C
0A222E4720632023413736383233222C0A222E4820632023393235423241222C
0A222E4920632023454543414136222C0A222E4A20632023454143434142222C
0A222E4B20632023463644304137222C0A222E4C20632023463644304138222C
0A222E4D20632023454543444137222C0A222E4E20632023394136323244222C
0A222E4F20632023323533433641222C0A222E5020632023413736443334222C
0A222E5120632023463843433943222C0A222E5220632023463744344146222C
0A222E5320632023463643464135222C0A222E5420632023414537343334222C
0A222E5520632023324433453638222C0A222E5620632023314334384243222C
0A222E5720632023443445324634222C0A222E5820632023413937423445222C
0A222E5920632023413837423444222C0A222E5A20632023433344364633222C
0A222E3020632023314334364245222C0A222E3120632023314634434334222C
0A222E3220632023443645344636222C0A222E3320632023413445344646222C
0A222E3420632023373244344646222C0A222E3520632023363943394646222C
0A222E3620632023363343304646222C0A222E3720632023354642364646222C
0A222E3820632023413039303935222C0A222E3920632023433135443239222C
0A222E4020632023424234323035222C0A222E2320632023423034353042222C
0A222E3B20632023343435343841222C0A222E3A20632023414243384643222C
0A222E3D20632023393844314646222C0A222E2B20632023364443374645222C
0A222E2520632023363842464645222C0A222E2420632023363442394645222C
0A222E2820632023354542314645222C0A222E2920632023384238323935222C
0A222E5B20632023434537343344222C0A222E5D20632023463742353844222C
0A222C2E20632023464544364238222C0A222C2C20632023463541383732222C
0A222C2D20632023434136423244222C0A222C2A20632023434537433238222C
0A222C6120632023454142333738222C0A222C6220632023393439454233222C
0A222C6320632023363042374646222C0A222C6420632023363342364646222C
0A222C6520632023363142324645222C0A222C6620632023354441434645222C
0A222C6720632023353941354645222C0A222C6820632023414235303234222C
0A222C6920632023463642353844222C0A222C6A20632023464639323444222C
0A222C6B20632023464637373131222C0A222C6C20632023464638363231222C
0A222C6D20632023454238413430222C0A222C6E20632023423934343033222C
0A222C6F20632023443137443239222C0A222C7020632023454542413832222C
0A222C7120632023353836363946222C0A222C7220632023383442424635222C
0A222C7320632023354241434646222C0A222C7420632023354141384645222C
0A222C7520632023353741324645222C0A222C7620632023353339434645222C
0A222C7720632023424334323035222C0A222C7820632023464543444145222C
0A222C7920632023464646464646222C0A222C7A20632023454637463138222C
0A222C4120632023424334323034222C0A222C4220632023434437393235222C
0A222C4320632023363136313836222C0A222C4420632023333536304246222C
0A222C4520632023363142394645222C0A222C4620632023363242394645222C
0A222C4720632023414635323146222C0A222C4820632023463439443633222C
0A222C4920632023464637463138222C0A222C4A20632023463837363030222C
0A222C4B20632023454537363030222C0A222C4C20632023453136383033222C
0A222C4D20632023423934353033222C0A222C4E20632023323035304233222C
0A222C4F20632023314634304130222C0A222C5020632023323234354141222C
0A222C5120632023323234364143222C0A222C5220632023323234344142222C
0A222C5320632023373434433546222C0A222C5420632023433636333237222C
0A222C5520632023453637373231222C0A222C5620632023454137393035222C
0A222C5720632023444436343031222C0A222C5820632023424434443034222C
0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A2E612E622E2E2E2E
2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E632E642E652E662E672E68
2E692E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E6A2E6B2E6C2E6D2E6E
2E6F2E702E712E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E722E732E74
2E752E762E772E782E792E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E7A
2E412E422E432E442E452E462E472E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E
2E2E2E482E492E4A2E4B2E4C2E4A2E4D2E4E2E2E2E2E2E2E2E2E222C0A222E2E
2E2E2E2E2E2E2E4F2E502E512E522E522E532E542E552E2E2E2E2E2E2E2E222C
0A222E2E2E2E2E2E2E2E2E562E572E582E592E592E582E5A2E302E2E2E2E2E2E
2E2E222C0A222E2E2E2E2E2E2E312E322E332E342E352E362E372E382E392E40
2E232E2E2E2E222C0A222E2E2E2E2E3B2E3A2E3D2E2B2E252E242E282E292E5B
2E5D2C2E2C2C2C2D2E2E222C0A222E2E2C2A2C612C622C632C642C652C662C67
2C682C692C6A2C6B2C6C2C6D2C6E222C0A222E2E2C6F2C702C712C722C732C74
2C752C762C772C782C792C792C792C7A2C41222C0A222E2E2E2E2C422C432C44
2C452C462C462C462C472C482C492C4A2C4B2C4C2C4D222C0A222E2E2E2E2E2E
2E2E2C4E2C4F2C502C512C522C532C542C552C562C572C582E2E222C0A222E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2C4D2C412C4D2E2E2E2E227D
0A
4C69040000001000000010000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000047994FFF419149FF000000000000
0000000000000000000000000000000000000000000000000000000000005BB4
65FF56AD5FFF50A65AFF4B9E53FF45964DFF60A868FF5BA262FF347E3AFF0000
000000000000000000000000000000000000000000005EB968FF79C383FF89CA
92FF94D09CFF95D19EFF90CF99FF8CCB94FF87C98FFF80C487FF4E9554FF276D
2CFF000000000000000000000000000000005CB667FF85C98EFF9BD4A4FF8FCE
98FF92CF9AFF8DCC95FF88CA90FF83C68BFF7EC485FF79C17FFF478D4CFF2265
25FF0000000000000000000000000000000075BF7EFF98D2A1FF94CF9CFF86C7
8DFF5EA765FF398640FF347E3AFF2E7633FF49904FFF458B4AFF206324FF0000
000000000000000000000000000054AB5EFF80C389FF8DCC95FF83C48AFF3D8B
44FF37833EFF000000000000000000000000236627FF1F6123FF000000000000
00000000000000000000000000004DA155FF47994FFF419149FF3B8842FF3580
3CFF000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000004DA155FF4799
4FFF419149FF3B8842FF35803CFF000000000000000000000000000000000000
000063C06EFF5FBB6AFF0000000000000000000000004B9E53FF45964DFF86C6
8EFF88C98FFF6FB376FF2E7633FF0000000000000000000000000000000062BE
6DFF7BC785FF77C281FF54AB5EFF4EA357FF499B51FF63AC6BFF83C38BFF87C9
8FFF82C689FF509756FF0000000000000000000000000000000060BC6CFF79C4
83FF9ED7A7FF9BD4A4FF97D29FFF92CF9AFF8DCC95FF88CA90FF7AC282FF7EC4
85FF5DA463FF266B2AFF000000000000000000000000000000005BB465FF73BD
7CFF96D19FFF94CF9CFF8FCD96FF8ACA91FF85C78BFF7ABE81FF65AD6CFF4B92
51FF246829FF0000000000000000000000000000000000000000000000004EA3
57FF66B06EFF61AA68FF3D8B44FF37833EFF327B37FF2C7432FF276D2CFF0000
0000000000000000000000000000000000000000000000000000000000000000
0000419149FF3B8842FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000012488DFF104B90FF0F488AFF11427DFF15335BFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000114E96FF12589BFF125899FF115393FF0F4A87FF0E3E71FF132E4BFF0000
0000000000000000000000000000000000000000000000000000000000000F4B
97FF12589FFF0F4A8AFF0F4B87FF114B87FF154C85FF124175FF0F335CFF0000
0000000000000000000000000000000000000000000000000000000000000C3E
87FF7C97B8FF8AB7E4FF719CC8FF15406EFF194472FF22456BFF113B66FF0000
0000000000000000000000000000000000000000000000000000000000001F5E
9BFFD9E8F7FF97C5F1FF8EBBE5FF7FA9D1FF89B5DFFFCDDFEEFF2368A7FF0000
0000000000000000000000000000000000000000000000000000000000002A5B
92FFA6CAEEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2D629AFF0000
0000000000000000000000000000000000000000000000000000000000006A3C
25FF346DA7FF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF3474AEFF683E2DFF0000
000000000000000000000000000000000000000000000000000000000000BC48
1CFFF4E2D4FF4E7BA9FF4D7BA8FF4D7BA8FF4E7BA9FFF3D6C3FFBE461CFF0000
0000000000000000000000000000000000000000000000000000C44C1FFFF6E4
D6FFFFE4A4FFFFD472FFFFC969FFFFC063FFFFB65FFFAEAB78FF609772FF4F8E
66FF428357FF000000000000000000000000000000008A5444FFFCC8ABFFFFD1
98FFFEC76DFFFEBF68FFFEB964FFFEB15EFFA79B61FF61AB81FF95D4B4FFBAE6
D0FF6ABB8FFF2D8F57FF196B37FF00000000287CCEFF78B3EAFFB39E94FFFFB7
60FFFFB663FFFEB261FFFEAC5DFFFEA559FF4A885DFF90D3B1FF92D6B1FFFFFF
FFFF65BC8CFF67BC8FFF196B37FF00000000297DD1FF82BAEEFF9F6658FFF5BB
84FFFFAC5BFFFEA85AFFFEA257FFFE9C53FF317B4CFF9CD4B6FFFFFFFFFFFFFF
FFFFFFFFFFFF95D2B2FF196B37FF00000000000000002579CDFF866161FFBF60
35FFFEB961FFFEB962FFFEB962FFFEB962FF226E3AFF62BA8BFF60BA87FFFFFF
FFFF60B987FF67BC8FFF196B37FF00000000000000000000000000000000B350
20FFA0401FFFAA4522FFAC4622FFAB4422FF5C572DFF288C53FF64BA8DFF95D2
B2FF64BA8DFF288C53FF196B37FF000000000000000000000000000000000000
00000000000000000000000000000000000000000000196B37FF196B37FF196B
37FF196B37FF196B37FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000012488DFF104B90FF0F488AFF11427DFF15335BFF00000000000000000000
000000000000000000000000000000000000000000000000000000000000114E
96FF12589BFF125899FF115393FF0F4A87FF0E3E71FF132E4BFF000000000000
00000000000000000000000000000000000000000000000000000F4B97FF1258
9FFF0F4A8AFF0F4B87FF114B87FF154C85FF124175FF0F335CFF000000000000
00000000000000000000000000000000000000000000000000000C3E87FF7C97
B8FF8AB7E4FF719CC8FF15406EFF194472FF22456BFF113B66FF000000000000
00000000000000000000000000000000000000000000000000001F5E9BFFD9E8
F7FF97C5F1FF8EBBE5FF7FA9D1FF89B5DFFFCDDFEEFF2368A7FF0000000058A5
D8FF85B1DBFF469DD0FF000000000000000000000000000000002A5B92FFA6CA
EEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2884B7FF77BEE7FFB4D2
F0FFE5F3FFFFACD2EFFF488CC7FF0000000000000000000000006A3C25FF346D
A7FF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF2E8ABFFF7ED3EBFFB2E3F9FF8BC0
E7FFAED3F6FFC4E0FCFF669FD3FF000000000000000000000000BC481CFFF4E2
D4FF4E7BA9FF4D7BA8FF4D7BA8FF428CBAFF7DD4EEFFC4F6FDFF6CDDF6FF6DCA
EDFF63A3D7FF5D9BD2FF000000000000000000000000C44C1FFFF6E4D6FFFFE4
A4FFFFD472FFFFC969FFBFBB86FF79D3EEFFC7F7FDFF5FDCF5FF5BE2F7FF7AD6
F2FF4099DFFF0000000000000000000000008A5444FFFCC8ABFFFFD198FFFEC7
6DFFFEBF68FFB0A780FF77CBE7FFC7F7FDFF5EDCF5FF5AE1F7FF7BD4F1FF4691
D4FF686672FF0000000000000000287CCEFF78B3EAFFB39E94FFFFB760FFFFB6
63FFB3A37DFF76B8D3FFC2F6FDFF63DFF7FF5DE2F8FF79D3F0FF4795D8FF75B2
EAFF2974C7FF0000000000000000297DD1FF82BAEEFF9F6658FFF5BB84FFA792
74FF7AB6D5FF90B7D1FF55C9E4FF5BDFF5FF78D0EDFF5196D2FF96645DFF83BC
EFFF2A77CAFF0000000000000000000000002579CDFF866161FFBF6035FF4389
AAFFE0F2FFFF549AD8FF1A7ABEFF4998C5FF4988B7FF9C5442FF7A646DFF2E7E
CEFF6DA2D3FF0000000000000000000000000000000000000000B35020FF2D64
81FF94C7F9FF91C9F9FF4185C9FF2362A4FF89493DFFB24F24FF000000000000
000000000000000000000000000000000000000000000000000000000000113D
55FF285F87FF4988BDFF428DBCFF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000012488DFF104B90FF0F488AFF11427DFF15335BFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000114E96FF12589BFF125899FF115393FF0F4A87FF0E3E71FF132E4BFF0000
0000000000000000000000000000000000000000000000000000000000000F4B
97FF12589FFF0F4A8AFF0F4B87FF114B87FF154C85FF124175FF0F335CFF0000
0000000000000000000000000000000000000000000000000000000000000C3E
87FF7C97B8FF8AB7E4FF719CC8FF15406EFF194472FF22456BFF113B66FF0000
0000000000000000000000000000000000000000000000000000000000001F5E
9BFFD9E8F7FF97C5F1FF8EBBE5FF7FA9D1FF89B5DFFFCDDFEEFF2368A7FF0000
0000000000000000000000000000000000000000000000000000000000002A5B
92FFA6CAEEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2D629AFF0000
0000000000000000000000000000000000000000000000000000000000006A3C
25FF346DA7FF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF3474AEFF683E2DFF0000
000000000000000000000000000000000000000000000000000000000000BC48
1CFFF4E2D4FF4E7BA9FF4D7BA8FF4D7BA8FF4E7BA9FFF3D6C3FFBE461CFF0000
0000000000000000000000000000000000000000000000000000C44C1FFFF6E4
D6FFFFE4A4FFFFD472FFFFC969FFFFC063FFFFB65FFF9590A0FF295DC1FF0542
BBFF0B45B0FF000000000000000000000000000000008A5444FFFCC8ABFFFFD1
98FFFEC76DFFFEBF68FFFEB964FFFEB15EFF95828BFF3D74CEFF8DB5F7FFB8D6
FEFF72A8F5FF2D6BCAFF0000000000000000287CCEFF78B3EAFFB39E94FFFFB7
60FFFFB663FFFEB261FFFEAC5DFFFEA559FF2450ABFF8DB5F6FF4D92FFFF1177
FFFF2186FFFF408AEBFF0344B9FF00000000297DD1FF82BAEEFF9F6658FFF5BB
84FFFFAC5BFFFEA85AFFFEA257FFFE9C53FF0542BCFFAECDFEFFFFFFFFFFFFFF
FFFFFFFFFFFF187FEFFF0442BCFF00000000000000002579CDFF866161FFBF60
35FFFEB961FFFEB962FFFEB962FFFEB962FF1F52AFFF639DF4FF187FFFFF0076
F8FF0076EEFF0368E1FF0345B9FF00000000000000000000000000000000B350
20FFA0401FFFAA4522FFAC4622FFAB4422FF5F4C74FF2763C6FF2177E6FF0579
EAFF0164DDFF044DBDFF00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000345B9FF0442
BCFF0345B9FF0000000000000000
}
end
object ilAccesslevel: TImageList
left = 176
Bitmap = {
6C69040000001000000010000000F10C00002F2A2058504D202A2F0A73746174
69632063686172202A677261706869635B5D203D207B0A223136203136203136
382032222C0A222E2E2063204E6F6E65222C0A222E2C20632023413341334133
222C0A222E2D20632023413041304130222C0A222E2A20632023394439443944
222C0A222E6120632023394139413941222C0A222E6220632023393739373937
222C0A222E6320632023393439343934222C0A222E6420632023413241324132
222C0A222E6520632023424342434243222C0A222E6620632023434143414341
222C0A222E6720632023434343434343222C0A222E6820632023433243324332
222C0A222E6920632023414441444144222C0A222E6A20632023384338433843
222C0A222E6B20632023413141314131222C0A222E6C20632023433443344334
222C0A222E6D20632023424542454245222C0A222E6E20632023393639363936
222C0A222E6F20632023393339333933222C0A222E7020632023414541454145
222C0A222E7120632023383438343834222C0A222E7220632023424142414241
222C0A222E7320632023424642464246222C0A222E7420632023393839383938
222C0A222E7520632023383738373837222C0A222E7620632023413841384138
222C0A222E7720632023394539453945222C0A222E7820632023383938393839
222C0A222E7920632023413941394139222C0A222E7A20632023373937393739
222C0A222E4120632023393939393939222C0A222E4220632023433643364336
222C0A222E4320632023374437443744222C0A222E4420632023414241424142
222C0A222E4520632023373637363736222C0A222E4620632023453143333631
222C0A222E4720632023413841303838222C0A222E4820632023393139313931
222C0A222E4920632023384538453845222C0A222E4A20632023444342393541
222C0A222E4B20632023444642383535222C0A222E4C20632023444542353531
222C0A222E4D20632023444442313444222C0A222E4E20632023444341443439
222C0A222E4F20632023443741383436222C0A222E5020632023373837383738
222C0A222E5120632023384437453635222C0A222E5220632023443839393331
222C0A222E5320632023453143323630222C0A222E5420632023464346334339
222C0A222E5520632023464446334342222C0A222E5620632023464546364434
222C0A222E5720632023464646364437222C0A222E5820632023464646344438
222C0A222E5920632023464646384530222C0A222E5A20632023464646384446
222C0A222E3020632023464646354441222C0A222E3120632023464346314344
222C0A222E3220632023464145444332222C0A222E3320632023464145424244
222C0A222E3420632023443639333242222C0A222E3520632023453042463543
222C0A222E3620632023464346334338222C0A222E3720632023463944463735
222C0A222E3820632023464445363839222C0A222E3920632023464645373935
222C0A222E4020632023464645353941222C0A222E2320632023464645454141
222C0A222E3B20632023464645444138222C0A222E3A20632023464645333939
222C0A222E3D20632023463944353734222C0A222E2B20632023463343433539
222C0A222E2520632023463143383446222C0A222E2420632023464145394242
222C0A222E2820632023443538443234222C0A222E2920632023444642423538
222C0A222E5B20632023464346314337222C0A222E5D20632023463944433646
222C0A222C2E20632023454442423536222C0A222C2C20632023454642443631
222C0A222C2D20632023464645373942222C0A222C2A20632023453241363335
222C0A222C6120632023453141343442222C0A222C6220632023464645323930
222C0A222C6320632023453941443439222C0A222C6420632023453341343338
222C0A222C6520632023463043343439222C0A222C6620632023463945384238
222C0A222C6720632023443438383145222C0A222C6820632023444542373533
222C0A222C6920632023464346304336222C0A222C6A20632023463844393641
222C0A222C6B20632023464445323743222C0A222C6C20632023464645383930
222C0A222C6D20632023464645393939222C0A222C6E20632023444639463332
222C0A222C6F20632023423238423534222C0A222C7020632023464645323841
222C0A222C7120632023463944303641222C0A222C7220632023463143353530
222C0A222C7320632023463043313436222C0A222C7420632023463945374236
222C0A222C7520632023443338333138222C0A222C7620632023444442323445
222C0A222C7720632023464245464333222C0A222C7820632023463844363635
222C0A222C7920632023454342363443222C0A222C7A20632023454642443541
222C0A222C4120632023464645423935222C0A222C4220632023444439373330
222C0A222C4320632023414238323444222C0A222C4420632023464645313834
222C0A222C4520632023453941393431222C0A222C4620632023453139463332
222C0A222C4720632023454642453432222C0A222C4820632023463945354234
222C0A222C4920632023443237453133222C0A222C4A20632023464245454331
222C0A222C4B20632023463744333546222C0A222C4C20632023464344423643
222C0A222C4D20632023464645353746222C0A222C4E20632023464645443846
222C0A222C4F20632023464646323937222C0A222C5020632023464645443933
222C0A222C5120632023464644463743222C0A222C5220632023463843433542
222C0A222C5320632023454642453436222C0A222C5420632023454542413343
222C0A222C5520632023463945334233222C0A222C5620632023443137393045
222C0A222C5720632023444241383433222C0A222C5820632023464245434246
222C0A222C5920632023463543463539222C0A222C5A20632023454342303431
222C0A222C3020632023454642413445222C0A222C3120632023454643323541
222C0A222C3220632023454643363630222C0A222C3320632023454643343543
222C0A222C3420632023454642363443222C0A222C3520632023453641353337
222C0A222C3620632023453139413241222C0A222C3720632023454542383338
222C0A222C3820632023463845334231222C0A222C3920632023443037353039
222C0A222C4020632023444141333344222C0A222C2320632023464145424243
222C0A222C3B20632023464345424243222C0A222C3A20632023464545454246
222C0A222C3D20632023464646344336222C0A222C2B20632023464646384345
222C0A222C2520632023464646414433222C0A222C2420632023464646384430
222C0A222C2820632023464646324337222C0A222C2920632023464345394241
222C0A222C5B20632023463945344233222C0A222C5D20632023463845324230
222C0A222D2E20632023434637313035222C0A222D2C20632023443939443336
222C0A222D2D20632023443739343243222C0A222D2A20632023443639303238
222C0A222D6120632023443538433233222C0A222D6220632023443338343141
222C0A222D6320632023443238303135222C0A222D6420632023443137433131
222C0A222D6520632023443037363041222C0A222D6620632023434637333037
222C0A222D6720632023434637303034222C0A222D6820632023434536453031
222C0A222E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A2E612E622E632E2E2E2E2E2E
2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E642E652E662E672E662E682E692E6A
2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E6B2E6C2E6D2E6B2E6E2E6F2E62
2E702E702E712E2E2E2E2E2E222C0A222E2E2E2E2E2E2E722E732E742E2E2E2E
2E2E2E2E2E752E762E772E2E2E2E2E2E222C0A222E2E2E2E2E2A2E6C2E6B2E2E
2E2E2E2E2E2E2E2E2E2E2E782E792E7A2E2E2E2E222C0A222E2E2E2E2E412E42
2E632E2E2E2E2E2E2E2E2E2E2E2E2E432E442E452E2E2E2E222C0A222E2E2E46
2E472E482E492E4A2E4B2E4C2E4D2E4E2E4F2E502E452E512E522E2E222C0A22
2E2E2E532E542E552E562E572E582E592E5A2E302E312E322E332E332E342E2E
222C0A222E2E2E352E362E372E382E392E402E232E3B2E3A2E3D2E2B2E252E24
2E282E2E222C0A222E2E2E292E5B2E5D2C2E2C2C2C2D2C2A2C612C622C632C64
2C652C662C672E2E222C0A222E2E2C682C692C6A2C6B2C6C2C6D2C6E2C6F2C70
2C712C722C732C742C752E2E222C0A222E2E2C762C772C782C792C7A2C412C42
2C432C442C452C462C472C482C492E2E222C0A222E2E2E4E2C4A2C4B2C4C2C4D
2C4E2C4F2C502C512C522C532C542C552C562E2E222C0A222E2E2C572C582C59
2C5A2C302C312C322C332C342C352C362C372C382C392E2E222C0A222E2E2C40
2C232C3B2C3A2C3D2C2B2C252C242C282C292C5B2C5D2C5D2D2E2E2E222C0A22
2E2E2D2C2E522D2D2D2A2D612C672D622D632D642C562D652D662D672D682E2E
227D0A410900002F2A2058504D202A2F0A7374617469632063686172202A6772
61706869635B5D203D207B0A223136203136203130392032222C0A222E2E2063
204E6F6E65222C0A222E2C20632023363835443536222C0A222E2D2063202337
4133463133222C0A222E2A20632023374433453044222C0A222E612063202337
3633433043222C0A222E6220632023363933393132222C0A222E632063202336
3335363445222C0A222E6420632023363936333546222C0A222E652063202337
4434443238222C0A222E6620632023393636313244222C0A222E672063202338
3834393046222C0A222E6820632023393336303243222C0A222E692063202337
3333453043222C0A222E6A20632023363033443142222C0A222E6B2063202336
3335453539222C0A222E6C20632023373935323337222C0A222E6D2063202339
3335413235222C0A222E6E20632023373633453043222C0A222E6F2063202338
3535343234222C0A222E7020632023373333453045222C0A222E712063202338
3435353236222C0A222E7220632023363933453136222C0A222E732063202335
3033303134222C0A222E7420632023363733363131222C0A222E752063202337
3134423241222C0A222E7620632023394537353443222C0A222E772063202338
4536333342222C0A222E7820632023354233353131222C0A222E792063202337
4235323238222C0A222E7A20632023353933393143222C0A222E412063202335
3533323130222C0A222E4220632023373834383138222C0A222E432063202344
3142373942222C0A222E4420632023454443394133222C0A222E452063202345
3843353946222C0A222E4620632023434441313734222C0A222E472063202344
4442303831222C0A222E4820632023434542333936222C0A222E492063202337
4534433141222C0A222E4A20632023384635443330222C0A222E4B2063202345
4543414136222C0A222E4C20632023454143434142222C0A222E4D2063202346
3644304137222C0A222E4E20632023463644304138222C0A222E4F2063202345
4543444137222C0A222E5020632023394136323245222C0A222E512063202333
4433443344222C0A222E5220632023394536463431222C0A222E532063202346
3843433943222C0A222E5420632023463744344146222C0A222E552063202346
3643464135222C0A222E5620632023413637363431222C0A222E572063202333
3733373337222C0A222E5820632023343934393439222C0A222E592063202334
4234423442222C0A222E5A20632023393839383938222C0A222E302063202335
4335433543222C0A222E3120632023413337433535222C0A222E322063202334
4334433443222C0A222E3320632023344534453445222C0A222E342063202337
3737373737222C0A222E3520632023393739373937222C0A222E362063202335
3935393539222C0A222E3720632023414241424142222C0A222E382063202341
3541354135222C0A222E3920632023353435343534222C0A222E402063202338
3638363836222C0A222E2320632023363236323632222C0A222E3B2063202334
4134413441222C0A222E3A20632023363336333633222C0A222E3D2063202341
3441344134222C0A222E2B20632023353035303530222C0A222E252063202335
3235323532222C0A222E2420632023354235423542222C0A222E282063202342
3842384238222C0A222E2920632023433143314331222C0A222E5B2063202335
3735373537222C0A222E5D20632023344434443444222C0A222C2E2063202335
4135413541222C0A222C2C20632023374537453745222C0A222C2D2063202336
3036303630222C0A222C2A20632023434537433238222C0A222C612063202345
4142333738222C0A222C6220632023374137413741222C0A222C632063202338
3338333833222C0A222C6420632023354435443544222C0A222C652063202335
3535353535222C0A222C6620632023363436343634222C0A222C672063202335
4635463546222C0A222C6820632023364436443644222C0A222C692063202345
4442383745222C0A222C6A20632023433737343239222C0A222C6B2063202344
3137443239222C0A222C6C20632023454542413832222C0A222C6D2063202338
4638463846222C0A222C6E20632023373237323732222C0A222C6F2063202336
4636463646222C0A222C7020632023383438343834222C0A222C712063202345
4642433833222C0A222C7220632023434137373241222C0A222C732063202343
4437393235222C0A222C7420632023354535453545222C0A222C752063202334
4634463446222C0A222C7620632023383038303830222C0A222C772063202334
3534353435222C0A222C7820632023434537453245222C0A222C792063202344
3341323644222C0A222C7A20632023343734373437222C0A222C412063202333
3833383338222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2C2E2D2E2A2E612E
622E632E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E642E652E662E
672E682E692E6A2E6B2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E6C2E
6D2E6E2E6F2E702E712E722E732E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E
2E2E742E752E762E772E782E792E7A2E412E2E2E2E2E2E2E2E222C0A222E2E2E
2E2E2E2E2E2E422E432E442E452E462E472E482E492E2E2E2E2E2E2E2E222C0A
222E2E2E2E2E2E2E2E2E4A2E4B2E4C2E4D2E4E2E4C2E4F2E502E2E2E2E2E2E2E
2E222C0A222E2E2E2E2E2E2E2E2E512E522E532E542E542E552E562E572E2E2E
2E2E2E2E2E222C0A222E2E2E2E2E2E2E582E592E5A2E302E312E312E322E5A2E
332E322E2E2E2E2E2E222C0A222E2E2E2E2E342E322E332E352E362E372E382E
392E402E232E3B2E2E2E2E2E2E222C0A222E2E2E2E2E3A2E3D2E2B2E252E242E
282E292E5B2E5D2C2E2C2C2C2D2E2E2E2E222C0A222E2E2C2A2C612C622C632C
2C2C642E582E322C652C662C672C682C692C6A2E2E222C0A222E2E2C6B2C6C2C
672C6D2C622E342C682E332C6E2C6F2C702C652C712C722E2E222C0A222E2E2E
2E2C732C742C752C702C702C762E392C632C702E3B2C772C782C792E2E222C0A
222E2E2E2E2E2E2E2E2E512E5D2E582C7A2C7A2C772C7A2C412E2E2E2E2E2E2E
2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E227D0A210A00002F2A2058504D202A2F0A73746174696320636861
72202A677261706869635B5D203D207B0A223136203136203132332032222C0A
222E2E2063204E6F6E65222C0A222E2C20632023453542323237222C0A222E2D
20632023463341373142222C0A222E2A20632023463441433143222C0A222E61
20632023463441383143222C0A222E6220632023463141313142222C0A222E63
20632023444541433237222C0A222E6420632023453542353238222C0A222E65
20632023463542363142222C0A222E6620632023463542363143222C0A222E67
20632023463542323143222C0A222E6820632023463441423143222C0A222E69
20632023463041413144222C0A222E6A20632023453042303238222C0A222E6B
20632023463542413144222C0A222E6C20632023463441413143222C0A222E6D
20632023463341433143222C0A222E6E20632023463041313143222C0A222E6F
20632023453439333143222C0A222E7020632023463339453142222C0A222E71
20632023434541423632222C0A222E7220632023453442373841222C0A222E73
20632023454243363345222C0A222E7420632023454439463143222C0A222E75
20632023454541343144222C0A222E7620632023454241353145222C0A222E77
20632023453939413143222C0A222E7820632023414436443145222C0A222E79
20632023454644374244222C0A222E7A20632023454443394133222C0A222E41
20632023453843353944222C0A222E4220632023454643453434222C0A222E43
20632023454643443542222C0A222E4420632023463144434138222C0A222E45
20632023424437433230222C0A222E4620632023384536313243222C0A222E47
20632023454543414136222C0A222E4820632023454143434142222C0A222E49
20632023463644304137222C0A222E4A20632023463644304138222C0A222E4B
20632023454543444137222C0A222E4C20632023393936323244222C0A222E4D
20632023343937323443222C0A222E4E20632023393937343334222C0A222E4F
20632023463843433943222C0A222E5020632023463744344146222C0A222E51
20632023463643464135222C0A222E5220632023413137413335222C0A222E53
20632023343636413441222C0A222E5420632023354439333739222C0A222E55
20632023344538353237222C0A222E5620632023433846354233222C0A222E57
20632023384638393439222C0A222E5820632023413037463442222C0A222E59
20632023424145384139222C0A222E5A20632023344438343236222C0A222E30
20632023353938433733222C0A222E3120632023414345304146222C0A222E32
20632023354439343337222C0A222E3320632023433646443946222C0A222E34
20632023423845463931222C0A222E3520632023394644363738222C0A222E36
20632023393643443646222C0A222E3720632023384643363639222C0A222E38
20632023383842463632222C0A222E3920632023393843463733222C0A222E40
20632023423946303934222C0A222E2320632023353138383330222C0A222E3B
20632023353438373738222C0A222E3A20632023364339443834222C0A222E3D
20632023364241323435222C0A222E2B20632023413945303832222C0A222E25
20632023393043373639222C0A222E2420632023384243323634222C0A222E28
20632023383542433545222C0A222E2920632023374542353537222C0A222E5B
20632023373741453530222C0A222E5D20632023393143383642222C0A222C2E
20632023384143303637222C0A222C2C20632023363639413446222C0A222C2D
20632023363439323736222C0A222C2A20632023434537433238222C0A222C61
20632023454142333738222C0A222C6220632023383142383541222C0A222C63
20632023383943303632222C0A222C6420632023383642443546222C0A222C65
20632023374342333535222C0A222C6620632023373641443446222C0A222C67
20632023373041373439222C0A222C6820632023363739453431222C0A222C69
20632023373441423444222C0A222C6A20632023454442383745222C0A222C6B
20632023433737343239222C0A222C6C20632023443137443239222C0A222C6D
20632023454542413832222C0A222C6E20632023363739453430222C0A222C6F
20632023393543433645222C0A222C7020632023383142383542222C0A222C71
20632023374542353538222C0A222C7220632023374142313533222C0A222C73
20632023373541433446222C0A222C7420632023374142313534222C0A222C75
20632023373641443531222C0A222C7620632023384143313637222C0A222C77
20632023354339323342222C0A222C7820632023454642433833222C0A222C79
20632023434137373241222C0A222C7A20632023434437393235222C0A222C41
20632023363739443432222C0A222C4220632023353838463331222C0A222C43
20632023384143313633222C0A222C4420632023353338413244222C0A222C45
20632023353338383246222C0A222C4620632023434537453245222C0A222C47
20632023443341323644222C0A222C4820632023353738433636222C0A222C49
20632023353538423432222C0A222C4A20632023353238393333222C0A222C4B
20632023353138383245222C0A222C4C20632023353038373244222C0A222C4D
20632023344538353245222C0A222C4E20632023344538353339222C0A222C4F
20632023344538323446222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2C2E2D
2E2A2E612E622E632E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E64
2E652E662E662E672E682E692E6A2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E
2E2E2E6B2E662E6C2E2A2E2A2E6D2E6E2E6F2E2E2E2E2E2E2E2E222C0A222E2E
2E2E2E2E2E2E2E702E712E722E732E742E752E762E772E2E2E2E2E2E2E2E222C
0A222E2E2E2E2E2E2E2E2E782E792E7A2E412E422E432E442E452E2E2E2E2E2E
2E2E222C0A222E2E2E2E2E2E2E2E2E462E472E482E492E4A2E482E4B2E4C2E2E
2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E4D2E4E2E4F2E502E502E512E52
2E532E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E542E552E562E572E582E58
2E572E592E5A2E302E2E2E2E2E2E222C0A222E2E2E2E2E312E322E332E342E35
2E362E372E382E392E402E232E3B2E2E2E2E222C0A222E2E2E3A2E3D2E2B2E2B
2E362E252E242E282E292E5B2E5D2C2E2C2C2C2D2E2E222C0A222E2E2C2A2C61
2C622C632C632C642C622C652C662C672C682C692C6A2C6B2E2E222C0A222E2E
2C6C2C6D2C6E2C6F2C702C712C722C732C742C752C762C772C782C792E2E222C
0A222E2E2E2E2C7A2C412C422C432C432C432C432C432C432C442C452C462C47
2E2E222C0A222E2E2E2E2E2E2E2E2C482C492C4A2C4B2C4C2C4D2C4E2C4F2E2E
2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E227D0AA10A00002F2A2058504D202A2F0A7374617469
632063686172202A677261706869635B5D203D207B0A22313620313620313331
2032222C0A222E2E2063204E6F6E65222C0A222E2C2063202336383544353622
2C0A222E2D20632023374133463133222C0A222E2A2063202337443345304422
2C0A222E6120632023373633433043222C0A222E622063202336393339313222
2C0A222E6320632023363335363445222C0A222E642063202336393633354622
2C0A222E6520632023374434443238222C0A222E662063202338413439304622
2C0A222E6720632023383834393046222C0A222E682063202338313435304522
2C0A222E6920632023373333453043222C0A222E6A2063202336303344314222
2C0A222E6B20632023363335453539222C0A222E6C2063202337393532333722
2C0A222E6D20632023384634393046222C0A222E6E2063202337363345304322
2C0A222E6F20632023373333453045222C0A222E702063202337303346313122
2C0A222E7120632023363133363046222C0A222E722063202335303330313422
2C0A222E7320632023373333373130222C0A222E742063202342353933373822
2C0A222E7520632023453442373841222C0A222E762063202343333933363722
2C0A222E7720632023354233353131222C0A222E782063202335463339313522
2C0A222E7920632023353933393143222C0A222E7A2063202335353332313022
2C0A222E4120632023393935433146222C0A222E422063202345464437424422
2C0A222E4320632023454443394133222C0A222E442063202345384335394622
2C0A222E4520632023434441313734222C0A222E462063202344444230383122
2C0A222E4720632023454244334237222C0A222E482063202341343635323322
2C0A222E4920632023383935463339222C0A222E4A2063202345454341413622
2C0A222E4B20632023454143434142222C0A222E4C2063202346364430413722
2C0A222E4D20632023463644304138222C0A222E4E2063202345454344413722
2C0A222E4F20632023393936323246222C0A222E502063202333453642393622
2C0A222E5120632023393137323533222C0A222E522063202346384343394322
2C0A222E5320632023463744344146222C0A222E542063202346364346413522
2C0A222E5520632023394137393531222C0A222E562063202333433634384322
2C0A222E5720632023343537364135222C0A222E582063202333463744423122
2C0A222E5920632023413042454438222C0A222E5A2063202337313832393622
2C0A222E3020632023413437323535222C0A222E312063202342353545343322
2C0A222E3220632023354637394132222C0A222E332063202341304245443922
2C0A222E3420632023343238304234222C0A222E352063202334363735413822
2C0A222E3620632023373039414332222C0A222E372063202334313744423222
2C0A222E3820632023394542464443222C0A222E392063202334433841424522
2C0A222E4020632023424342364334222C0A222E232063202343383637354522
2C0A222E3B20632023344438314233222C0A222E3A2063202338384230443322
2C0A222E3D20632023353939314332222C0A222E2B2063202333453741414622
2C0A222E2520632023343136463946222C0A222E242063202334413737413522
2C0A222E2820632023354239324333222C0A222E292063202342304341453222
2C0A222E5B20632023343438324236222C0A222E5D2063202334353833423722
2C0A222C2E20632023353538384238222C0A222C2C2063202344303542344122
2C0A222C2D20632023443236303530222C0A222C2A2063202334433837424122
2C0A222C6120632023343137464233222C0A222C622063202334453841424622
2C0A222C6320632023374441394430222C0A222C642063202335373844424522
2C0A222C6520632023343636463943222C0A222C662063202343453743323822
2C0A222C6720632023454142333738222C0A222C682063202337394136434522
2C0A222C6920632023383341454432222C0A222C6A2063202335393838423722
2C0A222C6B20632023413634453444222C0A222C6C2063202337433632373722
2C0A222C6D20632023344238344236222C0A222C6E2063202335433933433422
2C0A222C6F20632023353538454331222C0A222C702063202336373941433722
2C0A222C7120632023454442383745222C0A222C722063202343373734323922
2C0A222C7320632023443137443239222C0A222C742063202345454241383222
2C0A222C7520632023353538464331222C0A222C762063202339344239443822
2C0A222C7720632023373841364345222C0A222C782063202337354133434322
2C0A222C7920632023373039334241222C0A222C7A2063202334343746423222
2C0A222C4120632023364539464341222C0A222C422063202336393943433822
2C0A222C4320632023383541454433222C0A222C442063202334393834423822
2C0A222C4520632023454642433833222C0A222C462063202343413737324122
2C0A222C4720632023434437393235222C0A222C482063202335343845433022
2C0A222C4920632023343338314235222C0A222C4A2063202338354146443322
2C0A222C4B20632023374641424431222C0A222C4C2063202334373835423922
2C0A222C4D20632023334637424230222C0A222C4E2063202333433736413922
2C0A222C4F20632023434537453245222C0A222C502063202344334132364422
2C0A222C5120632023333436363939222C0A222C522063202334313741414622
2C0A222C5320632023334437394145222C0A222C542063202333433738414422
2C0A222C5520632023333937354141222C0A222C562063202333433735414122
2C0A222C5720632023333136313933222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E
2E2E2C2E2D2E2A2E612E622E632E2E2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E
2E2E2E2E642E652E662E672E682E692E6A2E6B2E2E2E2E2E2E2E2E222C0A222E
2E2E2E2E2E2E2E2E6C2E6D2E6E2E692E6F2E702E712E722E2E2E2E2E2E2E2E22
2C0A222E2E2E2E2E2E2E2E2E732E742E752E762E772E782E792E7A2E2E2E2E2E
2E2E2E222C0A222E2E2E2E2E2E2E2E2E412E422E432E442E452E462E472E482E
2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E492E4A2E4B2E4C2E4D2E4B2E
4E2E4F2E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E502E512E522E532E
532E542E552E562E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E572E582E592E
5A2E302E312E322E332E342E352E2E2E2E2E2E222C0A222E2E2E2E2E362E372E
342E382E392E402E232E3B2E3A2E3D2E2B2E252E2E2E2E222C0A222E2E2E242E
282E292E5B2E5D2C2E2C2C2C2D2C2A2C612C622C632C642C652E2E222C0A222E
2E2C662C672C682C692C632C6A2C6B2C6C2C6D2C6E2C6F2C702C712C722E2E22
2C0A222E2E2C732C742C752C762C772C782C792C7A2C412C422C432C442C452C
462E2E222C0A222E2E2E2E2C472C482C492C4A2C4A2C4B2C4C2C692C4A2C4D2C
4E2C4F2C502E2E222C0A222E2E2E2E2E2E2E2E2C512C522C532C542C542C552C
562C572E2E2E2E2E2E2E2E222C0A222E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E
2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E227D0A
4C69040000001000000010000000000000000000000000000000000000000000
0000A3A3A3FFA0A0A0FF9D9D9DFF9A9A9AFF979797FF949494FF000000000000
000000000000000000000000000000000000000000000000000000000000A2A2
A2FFBCBCBCFFCACACAFFCCCCCCFFCACACAFFC2C2C2FFADADADFF8C8C8CFF0000
0000000000000000000000000000000000000000000000000000A1A1A1FFC4C4
C4FFBEBEBEFFA1A1A1FF969696FF939393FF979797FFAEAEAEFFAEAEAEFF8484
84FF000000000000000000000000000000000000000000000000BABABAFFBFBF
BFFF989898FF00000000000000000000000000000000878787FFA8A8A8FF9E9E
9EFF00000000000000000000000000000000000000009D9D9DFFC4C4C4FFA1A1
A1FF000000000000000000000000000000000000000000000000898989FFA9A9
A9FF797979FF00000000000000000000000000000000999999FFC6C6C6FF9494
94FF0000000000000000000000000000000000000000000000007D7D7DFFABAB
ABFF767676FF00000000000000000000000061C3E1FF88A0A8FF919191FF8E8E
8EFF5AB9DCFF55B8DFFF51B5DEFF4DB1DDFF49ADDCFF46A8D7FF787878FF7676
76FF657E8DFF3199D8FF000000000000000060C2E1FFC9F3FCFFCBF3FDFFD4F6
FEFFD7F6FFFFD8F4FFFFE0F8FFFFDFF8FFFFDAF5FFFFCDF1FCFFC2EDFAFFBDEB
FAFFBDEBFAFF2B93D6FF00000000000000005CBFE0FFC8F3FCFF75DFF9FF89E6
FDFF95E7FFFF9AE5FFFFAAEEFFFFA8EDFFFF99E3FFFF74D5F9FF59CCF3FF4FC8
F1FFBBE9FAFF248DD5FF000000000000000058BBDFFFC7F1FCFF6FDCF9FF56BB
EDFF61BDEFFF9BE7FFFF35A6E2FF4BA4E1FF90E2FFFF49ADE9FF38A4E3FF49C4
F0FFB8E8F9FF1E88D4FF000000000000000053B7DEFFC6F0FCFF6AD9F8FF7CE2
FDFF90E8FFFF99E9FFFF329FDFFF548BB2FF8AE2FFFF6AD0F9FF50C5F1FF46C1
F0FFB6E7F9FF1883D3FF00000000000000004EB2DDFFC3EFFBFF65D6F8FF4CB6
ECFF5ABDEFFF95EBFFFF3097DDFF4D82ABFF84E1FFFF41A9E9FF329FE1FF42BE
EFFFB4E5F9FF137ED2FF000000000000000049ADDCFFC1EEFBFF5FD3F7FF6CDB
FCFF7FE5FFFF8FEDFFFF97F2FFFF93EDFFFF7CDFFFFF5BCCF8FF46BEEFFF3CBA
EEFFB3E3F9FF0E79D1FF000000000000000043A8DBFFBFECFBFF59CFF5FF41B0
ECFF4EBAEFFF5AC2EFFF60C6EFFF5CC4EFFF4CB6EFFF37A5E6FF2A9AE1FF38B8
EEFFB1E3F8FF0975D0FF00000000000000003DA3DAFFBCEBFAFFBCEBFCFFBFEE
FEFFC6F4FFFFCEF8FFFFD3FAFFFFD0F8FFFFC7F2FFFFBAE9FCFFB3E4F9FFB0E2
F8FFB0E2F8FF0571CFFF0000000000000000369DD9FF3199D8FF2C94D7FF2890
D6FF238CD5FF1E88D4FF1A84D3FF1580D2FF117CD1FF0E79D1FF0A76D0FF0773
CFFF0470CFFF016ECEFF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000565D68FF133F7AFF0D3E7DFF0C3C76FF123969FF4E5663FF000000000000
0000000000000000000000000000000000000000000000000000000000005F63
69FF284D7DFF2D6196FF0F4988FF2C6093FF0C3E73FF1B3D60FF595E63FF0000
0000000000000000000000000000000000000000000000000000000000003752
79FF255A93FF0C3E76FF245485FF0E3E73FF265584FF163E69FF143050FF0000
0000000000000000000000000000000000000000000000000000000000001136
67FF2A4B71FF4C759EFF3B638EFF11355BFF28527BFF1C3959FF103255FF0000
0000000000000000000000000000000000000000000000000000000000001848
78FF9BB7D1FFA3C9EDFF9FC5E8FF74A1CDFF81B0DDFF96B3CEFF1A4C7EFF0000
000000000000000000000000000000000000000000000000000000000000305D
8FFFA6CAEEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2E629AFF0000
0000000000000000000000000000000000000000000000000000000000003D3D
3DFF416F9EFF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF4176A6FF373737FF0000
0000000000000000000000000000000000000000000000000000494949FF4B4B
4BFF989898FF5C5C5CFF557CA3FF557CA3FF4C4C4CFF989898FF4E4E4EFF4C4C
4CFF0000000000000000000000000000000000000000777777FF4C4C4CFF4E4E
4EFF979797FF595959FFABABABFFA5A5A5FF545454FF868686FF626262FF4A4A
4AFF0000000000000000000000000000000000000000636363FFA4A4A4FF5050
50FF525252FF5B5B5BFFB8B8B8FFC1C1C1FF575757FF4D4D4DFF5A5A5AFF7E7E
7EFF606060FF000000000000000000000000287CCEFF78B3EAFF7A7A7AFF8383
83FF7E7E7EFF5D5D5DFF494949FF4C4C4CFF555555FF646464FF5F5F5FFF6D6D
6DFF7EB8EDFF2974C7FF0000000000000000297DD1FF82BAEEFF5F5F5FFF8F8F
8FFF7A7A7AFF777777FF6D6D6DFF4E4E4EFF727272FF6F6F6FFF848484FF5555
55FF83BCEFFF2A77CAFF0000000000000000000000002579CDFF5E5E5EFF4F4F
4FFF848484FF848484FF808080FF545454FF838383FF848484FF4A4A4AFF4545
45FF2E7ECEFF6DA2D3FF00000000000000000000000000000000000000003D3D
3DFF4D4D4DFF494949FF474747FF474747FF454545FF474747FF383838FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000027B2E5FF1BA7F3FF1CACF4FF1CA8F4FF1BA1F1FF27ACDEFF000000000000
00000000000000000000000000000000000000000000000000000000000028B5
E5FF1BB6F5FF1CB6F5FF1CB6F5FF1CB2F5FF1CABF4FF1DAAF0FF28B0E0FF0000
0000000000000000000000000000000000000000000000000000000000001DBA
F5FF1CB6F5FF1CAAF4FF1CACF4FF1CACF4FF1CACF3FF1CA1F0FF1C93E4FF0000
0000000000000000000000000000000000000000000000000000000000001B9E
F3FF62ABCEFF8AB7E4FF3EC6EBFF1C9FEDFF1DA4EEFF1EA5EBFF1C9AE9FF0000
0000000000000000000000000000000000000000000000000000000000001E6D
ADFFBDD7EFFFA3C9EDFF9DC5E8FF44CEEFFF5BCDEFFFA8DCF1FF207CBDFF0000
0000000000000000000000000000000000000000000000000000000000002C61
8EFFA6CAEEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2D6299FF0000
0000000000000000000000000000000000000000000000000000000000004C72
49FF347499FF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF357AA1FF4A6A46FF0000
000000000000000000000000000000000000000000000000000079935DFF2785
4EFFB3F5C8FF49898FFF4B7FA0FF4B7FA0FF49898FFFA9E8BAFF26844DFF738C
59FF0000000000000000000000000000000000000000AFE0ACFF37945DFF9FFD
C6FF91EFB8FF78D69FFF6FCD96FF69C68FFF62BF88FF73CF98FF94F0B9FF3088
51FF788754FF000000000000000000000000849D6CFF45A26BFF82E0A9FF82E0
A9FF6FCD96FF69C790FF64C28BFF5EBC85FF57B57EFF50AE77FF6BC891FF67C0
8AFF4F9A66FF769264FF0000000000000000287CCEFF78B3EAFF5AB881FF62C0
89FF62C089FF5FBD86FF5AB881FF55B37CFF4FAD76FF49A770FF419E67FF4DAB
74FF7EB8EDFF2974C7FF0000000000000000297DD1FF82BAEEFF409E67FF6ECC
95FF5BB881FF58B57EFF53B17AFF4FAC75FF54B17AFF51AD76FF67C18AFF3B92
5CFF83BCEFFF2A77CAFF0000000000000000000000002579CDFF429D67FF318F
58FF63C18AFF63C18AFF63C18AFF63C18AFF63C18AFF63C18AFF2D8A53FF2F88
53FF2E7ECEFF6DA2D3FF0000000000000000000000000000000000000000668C
57FF428B55FF338952FF2E8851FF2D8750FF2E854EFF39854EFF4F824EFF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000565D68FF133F7AFF0D3E7DFF0C3C76FF123969FF4E5663FF000000000000
0000000000000000000000000000000000000000000000000000000000005F63
69FF284D7DFF0F498AFF0F4988FF0E4581FF0C3E73FF1B3D60FF595E63FF0000
0000000000000000000000000000000000000000000000000000000000003752
79FF0F498FFF0C3E76FF0C3E73FF0E3E73FF113F70FF0F3661FF143050FF0000
0000000000000000000000000000000000000000000000000000000000001037
73FF7893B5FF8AB7E4FF6793C3FF11355BFF15395FFF1C3959FF103255FF0000
0000000000000000000000000000000000000000000000000000000000001F5C
99FFBDD7EFFFA3C9EDFF9FC5E8FF74A1CDFF81B0DDFFB7D3EBFF2365A4FF0000
000000000000000000000000000000000000000000000000000000000000395F
89FFA6CAEEFFABCCEAFFA7D0F6FFA8D0F6FFABCCEAFFA7CDEEFF2F6299FF0000
000000000000000000000000000000000000000000000000000000000000966B
3EFF537291FF9CCCF8FFAFD4F7FFAFD4F7FFA5CFF6FF51799AFF8C643CFF0000
0000000000000000000000000000000000000000000000000000A57645FFB17D
3FFFD8BEA0FF968271FF5572A4FF435EB5FFA2795FFFD9BEA0FFB48042FFA875
46FF0000000000000000000000000000000000000000C29A70FFB27D41FFB480
42FFDCBF9EFFBE8A4CFFC4B6BCFF5E67C8FFB3814DFFD3B088FFC29159FFAF7A
3EFF9F6F41FF000000000000000000000000A5774AFFC3925BFFE2CAB0FFB682
44FFB78345FFB88855FF4A5BD0FF5060D2FFBA874CFFB37F41FFBF8A4EFFD0A9
7DFFBE8D57FF9C6F46FF0000000000000000287CCEFF78B3EAFFCEA679FFD2AE
83FFD0A97DFFB78859FF4D4EA6FF77627CFFB6844BFFC4935CFFC18E55FFC79A
67FF7EB8EDFF2974C7FF0000000000000000297DD1FF82BAEEFFC18F55FFD8B9
94FFCEA678FFCCA375FFBA9370FFB27F44FFCA9F6EFFC89C69FFD3AE85FFB884
49FF83BCEFFF2A77CAFF0000000000000000000000002579CDFFC08E54FFB581
43FFD3AF85FFD3AF85FFD1AB7FFFB98547FFD2AE83FFD3AF85FFB07B3FFFA976
3CFF2E7ECEFF6DA2D3FF00000000000000000000000000000000000000009966
34FFAF7A41FFAE793DFFAD783CFFAD783CFFAA7539FFAA753CFF936131FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000
}
end
end

View File

@ -1,354 +1,363 @@
(*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* http://www.opensource.org/licenses/cddl1.php.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* http://www.opensource.org/licenses/cddl1.php. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying * information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2007 Andreas Schneider
*)
unit UfrmAccountControl;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
VirtualTrees, VTHeaderPopup, UEnhancedMemoryStream, UEnums;
type
{ TfrmAccountControl }
TfrmAccountControl = class(TForm)
ilToolbar: TImageList;
ilAccesslevel: TImageList;
tbMain: TToolBar;
tbRefresh: TToolButton;
tbAddUser: TToolButton;
tbEditUser: TToolButton;
tbDeleteUser: TToolButton;
tbSeparator1: TToolButton;
vstAccounts: TVirtualStringTree;
procedure tbEditUserClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tbAddUserClick(Sender: TObject);
procedure tbDeleteUserClick(Sender: TObject);
procedure tbRefreshClick(Sender: TObject);
procedure vstAccountsDblClick(Sender: TObject);
procedure vstAccountsGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
procedure vstAccountsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
protected
procedure OnModifyUserResponse(ABuffer: TEnhancedMemoryStream);
procedure OnDeleteUserResponse(ABuffer: TEnhancedMemoryStream);
procedure OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
function FindNode(AUsername: string): PVirtualNode;
public
{ public declarations }
end;
var
frmAccountControl: TfrmAccountControl;
implementation
uses
UdmNetwork, UPacket, UPacketHandlers, UAdminHandling, UfrmEditAccount;
type
PAccountInfo = ^TAccountInfo;
TAccountInfo = record
Username: string;
AccessLevel: TAccessLevel;
end;
{ TModifyUserPacket }
TModifyUserPacket = class(TPacket)
constructor Create(AUsername, APassword: string; AAccessLevel: TAccessLevel);
end;
{ TDeleteUserPacket }
TDeleteUserPacket = class(TPacket)
constructor Create(AUsername: string);
end;
{ TRequestUserListPacket }
TRequestUserListPacket = class(TPacket)
constructor Create;
end;
{ TModifyUserPacket }
constructor TModifyUserPacket.Create(AUsername, APassword: string;
AAccessLevel: TAccessLevel);
begin
inherited Create($03, 0);
FStream.WriteByte($05);
FStream.WriteStringNull(AUsername);
FStream.WriteStringNull(APassword);
FStream.WriteByte(Byte(AAccessLevel));
end;
{ TDeleteUserPacket }
constructor TDeleteUserPacket.Create(AUsername: string);
begin
inherited Create($03, 0);
FStream.WriteByte($06);
FStream.WriteStringNull(AUsername);
end;
{ TRequestUserListPacket }
constructor TRequestUserListPacket.Create;
begin
inherited Create($03, 0);
FStream.WriteByte($07);
end;
{ TfrmAccountControl }
procedure TfrmAccountControl.FormCreate(Sender: TObject);
begin
vstAccounts.NodeDataSize := SizeOf(TAccountInfo);
AdminPacketHandlers[$05] := TPacketHandler.Create(0, @OnModifyUserResponse);
AdminPacketHandlers[$06] := TPacketHandler.Create(0, @OnDeleteUserResponse);
AdminPacketHandlers[$07] := TPacketHandler.Create(0, @OnListUsersPacket);
end;
procedure TfrmAccountControl.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CloseAction := caHide;
end;
procedure TfrmAccountControl.tbEditUserClick(Sender: TObject);
var
selected: PVirtualNode;
accountInfo: PAccountInfo;
begin
selected := vstAccounts.GetFirstSelected;
if selected <> nil then
begin
accountInfo := vstAccounts.GetNodeData(selected);
with frmEditAccount do
begin
edUsername.Text := accountInfo^.Username;
edUsername.Color := clBtnFace;
edUsername.ReadOnly := True;
edPassword.Text := '';
lblPasswordHint.Visible := True;
SetAccessLevel(accountInfo^.AccessLevel);
if ShowModal = mrOK then
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text, edPassword.Text, GetAccessLevel));
end;
end;
end;
procedure TfrmAccountControl.FormDestroy(Sender: TObject);
begin
if AdminPacketHandlers[$05] <> nil then FreeAndNil(AdminPacketHandlers[$05]);
if AdminPacketHandlers[$06] <> nil then FreeAndNil(AdminPacketHandlers[$06]);
if AdminPacketHandlers[$07] <> nil then FreeAndNil(AdminPacketHandlers[$07]);
end;
procedure TfrmAccountControl.FormShow(Sender: TObject);
begin
tbRefreshClick(Sender);
end;
procedure TfrmAccountControl.tbAddUserClick(Sender: TObject);
begin
with frmEditAccount do
begin
edUsername.Text := '';
edUsername.Color := clWindow;
edUsername.ReadOnly := False;
edPassword.Text := '';
lblPasswordHint.Visible := False;
cbAccessLevel.ItemIndex := 2;
if ShowModal = mrOK then
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text, edPassword.Text, GetAccessLevel));
end;
end;
procedure TfrmAccountControl.tbDeleteUserClick(Sender: TObject);
var
selected: PVirtualNode;
accountInfo: PAccountInfo;
begin
selected := vstAccounts.GetFirstSelected;
if selected <> nil then
begin
accountInfo := vstAccounts.GetNodeData(selected);
if MessageDlg('Confirmation', Format('Do you really want to delete "%s"?', [accountInfo^.Username]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then
dmNetwork.Send(TDeleteUserPacket.Create(accountInfo^.Username));
end;
end;
procedure TfrmAccountControl.tbRefreshClick(Sender: TObject);
begin
dmNetwork.Send(TRequestUserListPacket.Create);
end;
procedure TfrmAccountControl.vstAccountsDblClick(Sender: TObject);
begin
tbEditUserClick(Sender);
end;
procedure TfrmAccountControl.vstAccountsGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
accountInfo: PAccountInfo;
begin
if Column = 0 then
begin
accountInfo := Sender.GetNodeData(Node);
case accountInfo^.AccessLevel of
alNone: ImageIndex := 0;
alView: ImageIndex := 1;
alNormal: ImageIndex := 2;
alAdministrator: ImageIndex := 3;
end;
end;
end;
procedure TfrmAccountControl.vstAccountsGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
accountInfo: PAccountInfo;
begin
accountInfo := Sender.GetNodeData(Node);
case Column of
1: CellText := accountInfo^.Username;
2: CellText := GetAccessLevelString(accountInfo^.AccessLevel);
else
CellText := '';
end;
end;
procedure TfrmAccountControl.OnModifyUserResponse(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
modifyStatus: TModifyUserStatus;
username: string;
accountInfo: PAccountInfo;
begin
modifyStatus := TModifyUserStatus(ABuffer.ReadByte);
username := ABuffer.ReadStringNull;
case modifyStatus of
muAdded:
begin
node := vstAccounts.AddChild(nil);
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.Username := username;
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
Messagedlg('Success', Format('The user "%s" has been added.', [username]), mtInformation, [mbOK], 0);
end;
muModified:
begin
node := FindNode(username);
if node <> nil then
begin
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
Messagedlg('Success', Format('The user "%s" has been modified.', [username]), mtInformation, [mbOK], 0);
end;
end;
muInvalidUsername:
MessageDlg('Error', Format('The username "%s" is not valid.', [username]), mtError, [mbOK], 0);
end;
end;
procedure TfrmAccountControl.OnDeleteUserResponse(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
deleteStatus: TDeleteUserStatus;
username: string;
begin
deleteStatus := TDeleteUserStatus(ABuffer.ReadByte);
username := ABuffer.ReadStringNull;
case deleteStatus of
duDeleted:
begin
node := FindNode(username);
if node <> nil then
begin
vstAccounts.DeleteNode(node);
Messagedlg('Success', Format('The user "%s" has been deleted.', [username]), mtInformation, [mbOK], 0);
end;
end;
duNotFound:
MessageDlg('Error', Format('The user "%s" could not be deleted. Maybe your list is out of date or you tried to delete yourself.', [username]), mtError, [mbOK], 0);
end;
end;
procedure TfrmAccountControl.OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
accountInfo: PAccountInfo;
i, count: Word;
begin
vstAccounts.BeginUpdate;
vstAccounts.Clear;
count := ABuffer.ReadWord;
for i := 1 to count do
begin
node := vstAccounts.AddChild(nil);
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.Username := ABuffer.ReadStringNull;
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
end;
vstAccounts.EndUpdate;
end;
function TfrmAccountControl.FindNode(AUsername: string): PVirtualNode;
var
node: PVirtualNode;
accountInfo: PAccountInfo;
begin
Result := nil;
node := vstAccounts.GetFirst;
while (node <> nil) and (Result = nil) do
begin
accountInfo := vstAccounts.GetNodeData(node);
if accountInfo^.Username = AUsername then
Result := node;
node := vstAccounts.GetNext(node);
end;
end;
initialization
{$I UfrmAccountControl.lrs}
end.
(*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* http://www.opensource.org/licenses/cddl1.php.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* http://www.opensource.org/licenses/cddl1.php. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying * information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2008 Andreas Schneider
*)
unit UfrmAccountControl;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
VirtualTrees, VTHeaderPopup, UEnhancedMemoryStream, UEnums;
type
{ TfrmAccountControl }
TfrmAccountControl = class(TForm)
ilToolbar: TImageList;
ilAccesslevel: TImageList;
tbMain: TToolBar;
tbRefresh: TToolButton;
tbAddUser: TToolButton;
tbEditUser: TToolButton;
tbDeleteUser: TToolButton;
tbSeparator1: TToolButton;
vstAccounts: TVirtualStringTree;
procedure tbEditUserClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tbAddUserClick(Sender: TObject);
procedure tbDeleteUserClick(Sender: TObject);
procedure tbRefreshClick(Sender: TObject);
procedure vstAccountsDblClick(Sender: TObject);
procedure vstAccountsGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
procedure vstAccountsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
protected
procedure OnModifyUserResponse(ABuffer: TEnhancedMemoryStream);
procedure OnDeleteUserResponse(ABuffer: TEnhancedMemoryStream);
procedure OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
function FindNode(AUsername: string): PVirtualNode;
public
{ public declarations }
end;
var
frmAccountControl: TfrmAccountControl;
implementation
uses
UdmNetwork, UPacket, UPacketHandlers, UAdminHandling, UfrmEditAccount;
type
PAccountInfo = ^TAccountInfo;
TAccountInfo = record
Username: string;
AccessLevel: TAccessLevel;
end;
{ TModifyUserPacket }
TModifyUserPacket = class(TPacket)
constructor Create(AUsername, APassword: string; AAccessLevel: TAccessLevel);
end;
{ TDeleteUserPacket }
TDeleteUserPacket = class(TPacket)
constructor Create(AUsername: string);
end;
{ TRequestUserListPacket }
TRequestUserListPacket = class(TPacket)
constructor Create;
end;
{ TModifyUserPacket }
constructor TModifyUserPacket.Create(AUsername, APassword: string;
AAccessLevel: TAccessLevel);
begin
inherited Create($03, 0);
FStream.WriteByte($05);
FStream.WriteStringNull(AUsername);
FStream.WriteStringNull(APassword);
FStream.WriteByte(Byte(AAccessLevel));
end;
{ TDeleteUserPacket }
constructor TDeleteUserPacket.Create(AUsername: string);
begin
inherited Create($03, 0);
FStream.WriteByte($06);
FStream.WriteStringNull(AUsername);
end;
{ TRequestUserListPacket }
constructor TRequestUserListPacket.Create;
begin
inherited Create($03, 0);
FStream.WriteByte($07);
end;
{ TfrmAccountControl }
procedure TfrmAccountControl.FormCreate(Sender: TObject);
begin
vstAccounts.NodeDataSize := SizeOf(TAccountInfo);
AdminPacketHandlers[$05] := TPacketHandler.Create(0, @OnModifyUserResponse);
AdminPacketHandlers[$06] := TPacketHandler.Create(0, @OnDeleteUserResponse);
AdminPacketHandlers[$07] := TPacketHandler.Create(0, @OnListUsersPacket);
end;
procedure TfrmAccountControl.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CloseAction := caHide;
end;
procedure TfrmAccountControl.tbEditUserClick(Sender: TObject);
var
selected: PVirtualNode;
accountInfo: PAccountInfo;
begin
selected := vstAccounts.GetFirstSelected;
if selected <> nil then
begin
accountInfo := vstAccounts.GetNodeData(selected);
with frmEditAccount do
begin
edUsername.Text := accountInfo^.Username;
edUsername.Color := clBtnFace;
edUsername.ReadOnly := True;
edPassword.Text := '';
lblPasswordHint.Visible := True;
SetAccessLevel(accountInfo^.AccessLevel);
if ShowModal = mrOK then
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text,
edPassword.Text, GetAccessLevel));
end;
end;
end;
procedure TfrmAccountControl.FormDestroy(Sender: TObject);
begin
if AdminPacketHandlers[$05] <> nil then FreeAndNil(AdminPacketHandlers[$05]);
if AdminPacketHandlers[$06] <> nil then FreeAndNil(AdminPacketHandlers[$06]);
if AdminPacketHandlers[$07] <> nil then FreeAndNil(AdminPacketHandlers[$07]);
end;
procedure TfrmAccountControl.FormShow(Sender: TObject);
begin
tbRefreshClick(Sender);
end;
procedure TfrmAccountControl.tbAddUserClick(Sender: TObject);
begin
with frmEditAccount do
begin
edUsername.Text := '';
edUsername.Color := clWindow;
edUsername.ReadOnly := False;
edPassword.Text := '';
lblPasswordHint.Visible := False;
cbAccessLevel.ItemIndex := 2;
if ShowModal = mrOK then
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text, edPassword.Text,
GetAccessLevel));
end;
end;
procedure TfrmAccountControl.tbDeleteUserClick(Sender: TObject);
var
selected: PVirtualNode;
accountInfo: PAccountInfo;
begin
selected := vstAccounts.GetFirstSelected;
if selected <> nil then
begin
accountInfo := vstAccounts.GetNodeData(selected);
if MessageDlg('Confirmation', Format('Do you really want to delete "%s"?',
[accountInfo^.Username]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then
dmNetwork.Send(TDeleteUserPacket.Create(accountInfo^.Username));
end;
end;
procedure TfrmAccountControl.tbRefreshClick(Sender: TObject);
begin
dmNetwork.Send(TRequestUserListPacket.Create);
end;
procedure TfrmAccountControl.vstAccountsDblClick(Sender: TObject);
begin
tbEditUserClick(Sender);
end;
procedure TfrmAccountControl.vstAccountsGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
accountInfo: PAccountInfo;
begin
if Column = 0 then
begin
accountInfo := Sender.GetNodeData(Node);
case accountInfo^.AccessLevel of
alNone: ImageIndex := 0;
alView: ImageIndex := 1;
alNormal: ImageIndex := 2;
alAdministrator: ImageIndex := 3;
end;
end;
end;
procedure TfrmAccountControl.vstAccountsGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
accountInfo: PAccountInfo;
begin
accountInfo := Sender.GetNodeData(Node);
case Column of
1: CellText := accountInfo^.Username;
2: CellText := GetAccessLevelString(accountInfo^.AccessLevel);
else
CellText := '';
end;
end;
procedure TfrmAccountControl.OnModifyUserResponse(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
modifyStatus: TModifyUserStatus;
username: string;
accountInfo: PAccountInfo;
begin
modifyStatus := TModifyUserStatus(ABuffer.ReadByte);
username := ABuffer.ReadStringNull;
case modifyStatus of
muAdded:
begin
node := vstAccounts.AddChild(nil);
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.Username := username;
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
Messagedlg('Success', Format('The user "%s" has been added.', [username]),
mtInformation, [mbOK], 0);
end;
muModified:
begin
node := FindNode(username);
if node <> nil then
begin
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
Messagedlg('Success', Format('The user "%s" has been modified.', [username]),
mtInformation, [mbOK], 0);
end;
end;
muInvalidUsername:
MessageDlg('Error', Format('The username "%s" is not valid.', [username]),
mtError, [mbOK], 0);
end;
end;
procedure TfrmAccountControl.OnDeleteUserResponse(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
deleteStatus: TDeleteUserStatus;
username: string;
begin
deleteStatus := TDeleteUserStatus(ABuffer.ReadByte);
username := ABuffer.ReadStringNull;
case deleteStatus of
duDeleted:
begin
node := FindNode(username);
if node <> nil then
begin
vstAccounts.DeleteNode(node);
Messagedlg('Success', Format('The user "%s" has been deleted.', [username]),
mtInformation, [mbOK], 0);
end;
end;
duNotFound:
MessageDlg('Error', Format('The user "%s" could not be deleted. Maybe ' +
'your list is out of date or you tried to delete yourself.', [username]),
mtError, [mbOK], 0);
end;
end;
procedure TfrmAccountControl.OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
var
node: PVirtualNode;
accountInfo: PAccountInfo;
i, count: Word;
begin
vstAccounts.BeginUpdate;
vstAccounts.Clear;
count := ABuffer.ReadWord;
for i := 1 to count do
begin
node := vstAccounts.AddChild(nil);
accountInfo := vstAccounts.GetNodeData(node);
accountInfo^.Username := ABuffer.ReadStringNull;
accountInfo^.AccessLevel := TAccessLevel(ABuffer.ReadByte);
end;
vstAccounts.EndUpdate;
end;
function TfrmAccountControl.FindNode(AUsername: string): PVirtualNode;
var
node: PVirtualNode;
accountInfo: PAccountInfo;
begin
Result := nil;
node := vstAccounts.GetFirst;
while (node <> nil) and (Result = nil) do
begin
accountInfo := vstAccounts.GetNodeData(node);
if accountInfo^.Username = AUsername then
Result := node;
node := vstAccounts.GetNext(node);
end;
end;
initialization
{$I UfrmAccountControl.lrs}
end.

View File

@ -79,6 +79,7 @@ type
lblY: TLabel;
lbClients: TListBox;
MainMenu1: TMainMenu;
mnuRegionControl: TMenuItem;
mnuVirtualLayer: TMenuItem;
mnuGrabTileID: TMenuItem;
mnuGrabHue: TMenuItem;
@ -201,6 +202,7 @@ type
procedure mnuGrabHueClick(Sender: TObject);
procedure mnuGrabTileIDClick(Sender: TObject);
procedure mnuLargeScaleCommandsClick(Sender: TObject);
procedure mnuRegionControlClick(Sender: TObject);
procedure mnuShutdownClick(Sender: TObject);
procedure oglGameWindowDblClick(Sender: TObject);
procedure oglGameWindowMouseDown(Sender: TObject; Button: TMouseButton;
@ -314,7 +316,8 @@ uses
UfrmAccountControl, UGraphicHelper, ImagingComponents, UfrmDrawSettings,
UfrmBoundaries, UfrmElevateSettings, UfrmConfirmation, UfrmMoveSettings,
UfrmAbout, UPacketHandlers, UfrmHueSettings, UfrmRadar, UfrmLargeScaleCommand,
UfrmLogin, UResourceManager, UfrmVirtualLayer, UfrmFilter, UfrmTileInfo;
UfrmLogin, UResourceManager, UfrmVirtualLayer, UfrmFilter, UfrmTileInfo,
UfrmRegionControl;
type
TGLArrayf4 = array[0..3] of GLfloat;
@ -392,6 +395,11 @@ begin
frmLargeScaleCommand.Show;
end;
procedure TfrmMain.mnuRegionControlClick(Sender: TObject);
begin
frmRegionControl.Show;
end;
procedure TfrmMain.mnuShutdownClick(Sender: TObject);
begin
dmNetwork.Send(TQuitServerPacket.Create(''));
@ -541,6 +549,8 @@ begin
map := FLandscape.MapCell[tileX, tileY];
if frmDrawSettings.cbForceAltitude.Checked then
map.Altitude := frmDrawSettings.seForceAltitude.Value;
if frmDrawSettings.cbRandomHeight.Checked then
Inc(map.Altitude, Random(frmDrawSettings.seRandomHeight.Value));
dmNetwork.Send(TDrawMapPacket.Create(map.X, map.Y, map.Z, tileInfo^.ID));
end else
begin