diff --git a/Client/CentrED.lpi b/Client/CentrED.lpi index 669ff6a..0fd4cbe 100644 --- a/Client/CentrED.lpi +++ b/Client/CentrED.lpi @@ -78,131 +78,138 @@ - - - - - + - - + + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + diff --git a/Client/CentrED.lpr b/Client/CentrED.lpr index 562a4c3..21b295f 100644 --- a/Client/CentrED.lpr +++ b/Client/CentrED.lpr @@ -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} diff --git a/Client/Tools/UfrmDrawSettings.lfm b/Client/Tools/UfrmDrawSettings.lfm index 318e066..160a074 100644 --- a/Client/Tools/UfrmDrawSettings.lfm +++ b/Client/Tools/UfrmDrawSettings.lfm @@ -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 diff --git a/Client/Tools/UfrmDrawSettings.pas b/Client/Tools/UfrmDrawSettings.pas index e49b136..8181422 100644 --- a/Client/Tools/UfrmDrawSettings.pas +++ b/Client/Tools/UfrmDrawSettings.pas @@ -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 diff --git a/Client/UdmNetwork.pas b/Client/UdmNetwork.pas index 54d83ec..399b8a1 100644 --- a/Client/UdmNetwork.pas +++ b/Client/UdmNetwork.pas @@ -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 diff --git a/Client/UfrmAccountControl.lfm b/Client/UfrmAccountControl.lfm index b7c281c..1c05367 100644 --- a/Client/UfrmAccountControl.lfm +++ b/Client/UfrmAccountControl.lfm @@ -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 diff --git a/Client/UfrmAccountControl.pas b/Client/UfrmAccountControl.pas index f507c70..9a2434b 100644 --- a/Client/UfrmAccountControl.pas +++ b/Client/UfrmAccountControl.pas @@ -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. + diff --git a/Client/UfrmMain.pas b/Client/UfrmMain.pas index 42e5a93..9ef4a22 100644 --- a/Client/UfrmMain.pas +++ b/Client/UfrmMain.pas @@ -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