1
0
mirror of https://github.com/moparisthebest/Simba synced 2025-01-30 23:00:18 -05:00

Kinda completed extension support..

This commit is contained in:
Raymond 2010-03-22 22:21:08 +01:00
parent 51b3c3cf94
commit a8c0ac8cf8
18 changed files with 1195 additions and 664 deletions

View File

@ -1,16 +0,0 @@
program new;
{ Creating TForm crashed for me, but probably because I'm on Linux x86_64 }
procedure init;
//var
// a: TForm;
begin
createf;
// a := TForm.Create(nil);
// a.ShowModal;
// a.Free;
end;
begin
end.

35
Extensions/test.sex Normal file
View File

@ -0,0 +1,35 @@
program new;
procedure init;
begin;
Writeln('init your extension here');
end;
procedure free;
begin
Writeln('Free your extension here');
end;
procedure Attach;
begin;
Writeln('Your extension has been enabled, do stuff here');
end;
Procedure Detach;
begin
Writeln('Your extension has ben disabled, do stuff here');
end;
//Called to retrieve the name of your extension
function GetName : string;
begin;
result := 'Test Extension';
end;
//Called to retrieve the version of your extension
function GetVersion : string;
begin;
result := '1.1b';
end;
begin
end.

53
Extensions/test2.sex Normal file
View File

@ -0,0 +1,53 @@
program new;
var
MenuItem,MenuItem2 : TMenuItem;
Started : Boolean;
procedure OnClick(sender : TObject);
begin;
Writeln('Hey you clicked the test menu item!');
end;
procedure init;
begin;
MenuItem := TMenuItem.Create(Simba_MainMenu);
MenuItem.Caption := 'Test';
Simba_MainMenu.Items.Add(menuItem);
MenuItem2 := TMenuItem.Create(MenuItem);
MenuItem2.Caption := 'Test!';
MenuItem2.OnClick := @OnClick;
MenuItem.Add(MenuItem2);
Started := True;
end;
procedure Free;
begin
if Started then
begin;
//MenuItem.Free; {Doesn't work in PS somehow}
//MenuItem2.Free;
end;
end;
procedure Attach;
begin;
//Menuitem.Visible := True;
end;
Procedure Detach;
begin
//Menuitem.Visible := False;
end;
//Called to retrieve the name of your extension
function GetName : string;
begin;
result := 'Add submenu';
end;
//Called to retrieve the version of your extension
function GetVersion : string;
begin;
result := '1.0';
end;
begin
end.

35
Extensions/test3.sex Normal file
View File

@ -0,0 +1,35 @@
program new;
procedure init;
begin;
Writeln('init your extension here');
end;
procedure free;
begin
Writeln('Free your extension here');
end;
procedure Attach;
begin;
Writeln('Your extension has been enabled, do stuff here');
end;
Procedure Detach;
begin
Writeln('Your extension has ben disabled, do stuff here');
end;
//Called to retrieve the name of your extension
function GetName : string;
begin;
result := 'Leet Extension';
end;
//Called to retrieve the version of your extension
function GetVersion : string;
begin;
result := '0.001';
end;
begin
end.

View File

@ -5,46 +5,132 @@ unit extensionmanager;
interface interface
uses uses
Classes, SysUtils; Classes, SysUtils,virtualextension,psextension,mufasabase,mufasatypes;
type type
TExtension = TVirtualSimbaExtension;
(** (**
TExtensionManager holds a list of VirtualExtensions, and TExtensionManager holds a list of TExtension, and
has functions to easily handle hooks. has functions to easily handle hooks.
*) *)
{ TExtensionManager }
TExtensionManager = class(TObject) TExtensionManager = class(TObject)
public
constructor Create;
destructor Destroy; override;
private private
Extensions: TList; FOnChange: TNotifyEvent;
procedure SetOnchange(const AValue: TNotifyEvent);
public public
function HandleHook(HookName: String; Args: Array of Variant): Variant; constructor Create;
destructor Destroy; override;
public
Extensions: TList;
StartDisabled : boolean;
property OnChange : TNotifyEvent read FOnChange write SetOnchange;
function GetExtensionIndex(Filename : string) : integer;
function LoadPSExtension(Filename : string) : boolean;
function LoadPSExtensionsDir(Directory,ext : string) : boolean;
function HandleHook(HookName: String; Args: Array of Variant): Variant;
end; end;
var
ExtManager : TExtensionManager;
implementation implementation
uses uses
pseventextension, virtualextension; TestUnit;
procedure TExtensionManager.SetOnchange(const AValue: TNotifyEvent);
var
i : integer;
begin
for i := 0 to Extensions.Count - 1 do
TExtension(Extensions[i]).OnChange := AValue;;
FOnChange:=AValue;
end;
constructor TExtensionManager.Create; constructor TExtensionManager.Create;
begin begin
inherited Create;
Extensions := TList.Create; Extensions := TList.Create;
StartDisabled := True;
end; end;
destructor TExtensionManager.Destroy; destructor TExtensionManager.Destroy;
var var
i: Integer; i: Integer;
begin begin
{
for i := 0 to Extensions.Count - 1 do for i := 0 to Extensions.Count - 1 do
TVirtualSimbaExtension(Extensions.Items[i]).Free; TExtension(Extensions.Items[i]).Free;
}
Extensions.Free; Extensions.Free;
inherited Destroy;
end;
function TExtensionManager.GetExtensionIndex(Filename: string): integer;
var
i : integer;
begin
for i := 0 to Extensions.Count - 1 do
if CompareText(TExtension(Extensions[i]).Filename,filename) = 0 then
exit(i);
result := -1;
end;
function TExtensionManager.LoadPSExtension(Filename: string): boolean;
var
Ext : TExtension;
begin
if GetExtensionIndex(filename) <> -1 then
exit(true);
Result := False;
try
Ext := TSimbaPSExtension.Create(filename,startdisabled);
result := TSimbaPSExtension(ext).Working;
Extensions.Add(ext);
ext.OnChange:= FOnChange;
if assigned(FOnChange) then
FOnChange(Self);
except
on e : exception do
formWritelnex(format('Error in LoadPSExtension(%s): %s',[FileName, e.message]));
end;
end;
function GetFiles(Path, Ext: string): TstringArray;
var
SearchRec : TSearchRec;
c : integer;
begin
c := 0;
if FindFirst(Path + '*.' + ext, faAnyFile, SearchRec) = 0 then
begin
repeat
inc(c);
SetLength(Result,c);
Result[c-1] := SearchRec.Name;
until FindNext(SearchRec) <> 0;
SysUtils.FindClose(SearchRec);
end;
end;
function TExtensionManager.LoadPSExtensionsDir(Directory,ext: string): boolean;
var
Files : TstringArray;
i : integer;
tempevent : TNotifyEvent;
begin
result := false;
if not DirectoryExists(directory) then
exit;
tempevent := FOnChange;
FOnChange := nil;
Directory := IncludeTrailingPathDelimiter(directory);
Files := GetFiles(Directory,ext);
for i := 0 to high(Files) do
result := result or LoadPSExtension(Directory + files[i]);
FOnChange := Tempevent;
if Assigned(FOnChange) then
FOnChange(self);
end; end;
// How do we return more than one result? // How do we return more than one result?
@ -53,11 +139,13 @@ var
i: Integer; i: Integer;
begin begin
for i := 0 to Extensions.Count -1 do for i := 0 to Extensions.Count -1 do
if TVirtualSimbaExtension(Extensions.Items[i]).HookExists(HookName) then with TExtension(Extensions[i]) do
if TVirtualSimbaExtension(Extensions.Items[i]).ExecuteHook(HookName, Args, Result) <> 0 then if Enabled then
begin if HookExists(HookName) then
// Not succesfull. if ExecuteHook(HookName, Args, Result) <> 0 then
end; begin
// Not succesfull.
end;
end; end;
end. end.

View File

@ -0,0 +1,74 @@
object ExtensionsForm: TExtensionsForm
Left = 200
Height = 256
Top = 139
Width = 389
Caption = 'ExtensionsForm'
ClientHeight = 256
ClientWidth = 389
OnCreate = FormCreate
LCLVersion = '0.9.29'
object ExtensionsBox: TGroupBox
Left = 0
Height = 256
Top = 0
Width = 389
Align = alClient
Caption = 'Extensions'
ClientHeight = 238
ClientWidth = 385
TabOrder = 0
object ExtensionsList: TListView
Left = 6
Height = 192
Top = 8
Width = 371
Align = alCustom
Anchors = [akTop, akLeft, akRight, akBottom]
Columns = <
item
Caption = 'Extensions'
MinWidth = 90
Width = 90
end
item
Caption = 'Name'
MinWidth = 75
Width = 150
end
item
AutoSize = True
Caption = 'Version'
MinWidth = 60
Width = 60
end>
HideSelection = False
ItemIndex = -1
ReadOnly = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
OnAdvancedCustomDrawItem = ExtensionsListAdvancedCustomDrawItem
OnSelectItem = ExtensionsListSelectItem
end
object Button: TButton
Left = 302
Height = 25
Top = 208
Width = 75
Caption = 'Refresh'
OnClick = ButtonClick
TabOrder = 1
end
object ExtEnabled: TCheckBox
Left = 6
Height = 17
Top = 208
Width = 72
Caption = 'ExtEnabled'
OnChange = ExtEnabledChange
TabOrder = 2
Visible = False
end
end
end

View File

@ -0,0 +1,23 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TExtensionsForm','FORMDATA',[
'TPF0'#15'TExtensionsForm'#14'ExtensionsForm'#4'Left'#3#200#0#6'Height'#3#0#1
+#3'Top'#3#139#0#5'Width'#3#133#1#7'Caption'#6#14'ExtensionsForm'#12'ClientHe'
+'ight'#3#0#1#11'ClientWidth'#3#133#1#8'OnCreate'#7#10'FormCreate'#10'LCLVers'
+'ion'#6#6'0.9.29'#0#9'TGroupBox'#13'ExtensionsBox'#4'Left'#2#0#6'Height'#3#0
+#1#3'Top'#2#0#5'Width'#3#133#1#5'Align'#7#8'alClient'#7'Caption'#6#10'Extens'
+'ions'#12'ClientHeight'#3#238#0#11'ClientWidth'#3#129#1#8'TabOrder'#2#0#0#9
+'TListView'#14'ExtensionsList'#4'Left'#2#6#6'Height'#3#192#0#3'Top'#2#8#5'Wi'
+'dth'#3's'#1#5'Align'#7#8'alCustom'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRig'
+'ht'#8'akBottom'#0#7'Columns'#14#1#7'Caption'#6#10'Extensions'#8'MinWidth'#2
+'Z'#5'Width'#2'Z'#0#1#7'Caption'#6#4'Name'#8'MinWidth'#2'K'#5'Width'#3#150#0
+#0#1#8'AutoSize'#9#7'Caption'#6#7'Version'#8'MinWidth'#2'<'#5'Width'#2'<'#0#0
+#13'HideSelection'#8#9'ItemIndex'#2#255#8'ReadOnly'#9#9'RowSelect'#9#8'TabOr'
+'der'#2#0#9'ViewStyle'#7#8'vsReport'#24'OnAdvancedCustomDrawItem'#7'$Extensi'
+'onsListAdvancedCustomDrawItem'#12'OnSelectItem'#7#24'ExtensionsListSelectIt'
+'em'#0#0#7'TButton'#6'Button'#4'Left'#3'.'#1#6'Height'#2#25#3'Top'#3#208#0#5
+'Width'#2'K'#7'Caption'#6#7'Refresh'#7'OnClick'#7#11'ButtonClick'#8'TabOrder'
+#2#1#0#0#9'TCheckBox'#10'ExtEnabled'#4'Left'#2#6#6'Height'#2#17#3'Top'#3#208
+#0#5'Width'#2'H'#7'Caption'#6#10'ExtEnabled'#8'OnChange'#7#16'ExtEnabledChan'
+'ge'#8'TabOrder'#2#2#7'Visible'#8#0#0#0#0
]);

View File

@ -0,0 +1,137 @@
unit extensionmanagergui;
{$mode objfpc}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, Grids,extensionmanager;
type
{ TExtensionsForm }
TExtensionsForm = class(TForm)
Button: TButton;
ExtEnabled: TCheckBox;
ExtensionsBox: TGroupBox;
ExtensionsList: TListView;
procedure ButtonClick(Sender: TObject);
procedure ExtEnabledChange(Sender: TObject);
procedure ExtensionsListAdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
procedure ExtensionsListSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
procedure Refresh;
public
procedure OnChangeExtensions(Sender: TObject);
end;
var
ExtensionsForm: TExtensionsForm;
implementation
uses
virtualextension;
{ TExtensionsForm }
procedure TExtensionsForm.ButtonClick(Sender: TObject);
begin
Refresh;
end;
procedure TExtensionsForm.ExtEnabledChange(Sender: TObject);
begin
if ExtensionsList.Selected <> nil then
with TVirtualSimbaExtension(ExtManager.Extensions[ExtensionsList.Selected.Index]) do
begin;
Enabled:= ExtEnabled.Checked;
ExtEnabled.Checked := Enabled;
end;
end;
procedure TExtensionsForm.ExtensionsListAdvancedCustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
if TVirtualSimbaExtension(ExtManager.Extensions[Item.Index]).Enabled then
Sender.Canvas.Brush.Color := $CCFFCC//$7AFF95
else
sender.canvas.brush.color := $CCCCFF//$FF3D64;
end;
procedure TExtensionsForm.ExtensionsListSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
var
str : string;
begin
if Selected = true then
begin
extEnabled.Visible := true;
with TVirtualSimbaExtension(ExtManager.Extensions[Item.Index]) do
begin
OnChange:= nil;
ExtEnabled.Checked := Enabled;
Onchange := @OnChangeExtensions;
str := GetName;
if str = '' then
str := ExtractFileName(Filename);
ExtEnabled.Caption:= 'Enable: ' + str;
end;
end else
ExtEnabled.Visible := false;
end;
procedure TExtensionsForm.FormCreate(Sender: TObject);
begin
ExtManager.OnChange:= @OnChangeExtensions;
Refresh;
end;
procedure TExtensionsForm.Refresh;
var
i , sel: integer;
Extensions : TList;
str : string;
begin
sel := -1;
if ExtensionsList.Selected <> nil then
sel := ExtensionsList.Selected.Index;
ExtensionsList.Clear;
Extensions := ExtManager.Extensions;
for i := 0 to Extensions.Count - 1 do
begin
with TVirtualSimbaExtension(Extensions[i]),ExtensionsList.Items.Add do
begin
Caption:= ExtractFileName(FileName);
str := GetName;
if str = '' then
str := caption; //Could not retrieve the name
SubItems.Add(str);
str := GetVersion;
if str = '' then
str := 'NA'; //Could not retrieve the version
SubItems.Add(str);
end;
end;
if sel <> -1 then
if sel < extensions.count then
ExtensionsList.Selected := ExtensionsList.Items[sel];
end;
procedure TExtensionsForm.OnChangeExtensions(Sender: TObject);
begin
Refresh;
end;
initialization
{$I extensionmanagergui.lrs}
end.

View File

@ -39,7 +39,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="35"> <Units Count="33">
<Unit0> <Unit0>
<Filename Value="project1.lpr"/> <Filename Value="project1.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -164,10 +164,9 @@
<UnitName Value="internets"/> <UnitName Value="internets"/>
</Unit22> </Unit22>
<Unit23> <Unit23>
<Filename Value="debugimageform.pas"/> <Filename Value="../../Units/MMLCore/mufasabase.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<HasResources Value="True"/> <UnitName Value="mufasabase"/>
<UnitName Value="debugimageform"/>
</Unit23> </Unit23>
<Unit24> <Unit24>
<Filename Value="debugimage.pas"/> <Filename Value="debugimage.pas"/>
@ -208,31 +207,22 @@
<UnitName Value="simbasettings"/> <UnitName Value="simbasettings"/>
</Unit29> </Unit29>
<Unit30> <Unit30>
<Filename Value="reportbug.pas"/> <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/tpa.inc"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="FormReportBug"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="reportbug"/>
</Unit30> </Unit30>
<Unit31> <Unit31>
<Filename Value="../../Units/MMLAddon/newinternets.pas"/> <Filename Value="extensionmanagergui.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="newinternets"/> <ComponentName Value="ExtensionsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="extensionmanagergui"/>
</Unit31> </Unit31>
<Unit32> <Unit32>
<Filename Value="../../Units/MMLCore/libloader.pas"/> <Filename Value="../../Units/MMLCore/libloader.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="libloader"/> <UnitName Value="libloader"/>
</Unit32> </Unit32>
<Unit33>
<Filename Value="../../Units/MMLAddon/PSInc/Wrappers/tpa.inc"/>
<IsPartOfProject Value="True"/>
</Unit33>
<Unit34>
<Filename Value="../../Units/MMLCore/mufasabase.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="mufasabase"/>
</Unit34>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -33,7 +33,7 @@ uses
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, Forms, testunit, colourhistory, About, internets, debugimage, Interfaces, Forms, testunit, colourhistory, About, internets, debugimage,
framefunctionlist, simpleanalyzer, updater, updateform, simbasettings, framefunctionlist, simpleanalyzer, updater, updateform, simbasettings,
libloader, mufasabase; libloader, mufasabase, extensionmanagergui;
{$R project1.res} {$R project1.res}
@ -46,6 +46,7 @@ begin
Application.CreateForm(TAboutForm, AboutForm); Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TDebugImgForm, DebugImgForm); Application.CreateForm(TDebugImgForm, DebugImgForm);
Application.CreateForm(TSimbaUpdateForm, SimbaUpdateForm); Application.CreateForm(TSimbaUpdateForm, SimbaUpdateForm);
Application.CreateForm(TExtensionsForm, ExtensionsForm);
// Application.CreateForm(TSettingsForm, SettingsForm); Done in FormCreate of MainForm // Application.CreateForm(TSettingsForm, SettingsForm); Done in FormCreate of MainForm
Application.Run; Application.Run;
end. end.

View File

@ -1,219 +0,0 @@
unit pseventextension;
{$mode objfpc}
interface
uses
Classes, SysUtils, virtualextension,
uPSComponent,uPSCompiler, uPSRuntime, uPSPreProcessor,forms;
type
{ TSimbaPSEventExtension }
TSimbaPSEventExtension = class(TVirtualSimbaExtension)
public
constructor Create(FileName: String);
destructor Destroy; override;
private
PSInstance: TPSScript;
FEnabled: Boolean;
Script: TStringList;
private
function InitScript: Boolean;
procedure OutputMessages;
public
function HookExists(HookName: String): Boolean; override;
function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer;
protected
procedure RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
procedure RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
procedure RegisterMyMethods(Sender: TPSScript);
procedure OnPSExecute(Sender: TPSScript);
end;
implementation
uses
uPSC_std, uPSC_controls,uPSC_classes,uPSC_graphics,uPSC_stdctrls,uPSC_forms,
uPSC_extctrls,uPSC_menus, //Compile libs
uPSR_std, uPSR_controls,uPSR_classes,uPSR_graphics,uPSR_stdctrls,uPSR_forms,
uPSR_extctrls,uPSR_menus, //Runtime-libs
testunit//Writeln
;
procedure createf;
var
a: TForm;
begin
a:=TForm.Create(nil);
a.ShowModal;
a.Free;
end;
function TSimbaPSEventExtension.HookExists(HookName: String): Boolean;
begin
{ FIXME: Free the .data ? }
Exit(PSInstance.GetProcMethod('init').Data <> nil);
end;
function TSimbaPSEventExtension.ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer;
begin
result := 0;
try
PSInstance.ExecuteFunction([], HookName);
except
result := 1;
end;
end;
constructor TSimbaPSEventExtension.Create(FileName: String);
var
fStr:TFileStream;
begin
inherited create;
try
Script := TStringList.Create;
fStr := TFileStream.Create(FileName, fmOpenRead);
Script.LoadFromStream(fStr);
fStr.Free;
except
raise Exception.CreateFmt('File %s could not be read', [FileName]);
end;
FEnabled := False;
{ Create script, and see if the extension is valid. (If it compiles) }
PSInstance := TPSScript.Create(nil);
PSInstance.Script := Self.Script;
PSInstance.OnCompImport:=@RegisterPSCComponents;
PSInstance.OnExecImport:=@RegisterPSRComponents;
PSInstance.OnCompile:=@RegisterMyMethods;
PSInstance.OnExecute:=@OnPSExecute;
formWritelnEx(Format('%s: Script: %s', [FileName, Self.Script.Text]));
try
FEnabled := PSInstance.Compile;
finally
if FEnabled then
formWritelnEx('Extension Enabled')
else
begin
formWritelnEx('Extension Disabled - Did not compile');
OutputMessages;
end;
end;
FEnabled := InitScript();
if FEnabled then
formWritelnEx('It exists')
else
formWritelnEx('It does not exist - or something went wrong while executing it.');
end;
function TSimbaPSEventExtension.InitScript: Boolean;
begin
if not HookExists('init') then
exit(false);
result := true;
try
PSInstance.ExecuteFunction([], 'init');
except
result := false;
end;
end;
procedure TSimbaPSEventExtension.RegisterMyMethods(Sender: TPSScript);
begin
Sender.AddFunction(@createf, 'procedure createf;');
Sender.AddFunction(@formWritelnEx,'procedure Writeln(s : string)');
Sender.AddRegisteredVariable('Simba','TForm');
Sender.AddRegisteredVariable('Simba_MainMenu','TMainMenu');
end;
procedure TSimbaPSEventExtension.OnPSExecute(Sender: TPSScript);
begin
Sender.SetVarToInstance('simba',Form1);
Sender.SetVarToInstance('Simba_MainMenu',Form1.MainMenu);
end;
procedure TSimbaPSEventExtension.RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
begin
SIRegister_Std(x);
SIRegister_Classes(x, True);
SIRegister_Controls(x);
SIRegister_Graphics(x, True);
SIRegister_stdctrls(x);
SIRegister_Forms(x);
SIRegister_ExtCtrls(x);
SIRegister_Menus(x);
end;
procedure TSimbaPSEventExtension.RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
begin
RIRegister_Std(x);
RIRegister_Classes(x, True);
RIRegister_Controls(x);
RIRegister_Graphics(x, True);
RIRegister_stdctrls(x);
RIRegister_Forms(x);
RIRegister_ExtCtrls(x);
RIRegister_Menus(x);
end;
destructor TSimbaPSEventExtension.Destroy;
begin
if Assigned(PSInstance) then
FreeAndNil(PSInstance);
formWritelnEx('Closing extension');
inherited;
end;
procedure TSimbaPSEventExtension.OutputMessages;
var
l: Longint;
b: Boolean;
begin
b := False;
for l := 0 to PSInstance.CompilerMessageCount - 1 do
begin
if (not b) and (PSInstance.CompilerMessages[l] is TIFPSPascalCompilerError) then
begin
b := True;
with PSInstance.CompilerMessages[l] do
formWritelnEx(MessageToString);
{if OnError <> nil then
with PSInstance.CompilerMessages[l] do
HandleError(Row, Col, Pos, MessageToString,errCompile, ModuleName)
else }
formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
end else
formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
end;
end;
end.

View File

@ -0,0 +1,229 @@
unit psextension;
{$mode objfpc}
interface
uses
Classes, SysUtils,mufasabase, virtualextension,
uPSComponent,uPSCompiler, uPSRuntime, uPSPreProcessor,forms;
type
{ TSimbaPSExtension }
TSimbaPSExtension = class(TVirtualSimbaExtension)
public
constructor Create(FileStr: String; StartDisabled : boolean = false);
destructor Destroy; override;
private
PSInstance: TPSScript;
FWorking: Boolean;
Script: TStringList;
procedure StartExtension;
private
function FreeScript: boolean;
function InitScript: Boolean;
procedure OutputMessages;
public
function HookExists(HookName: String): Boolean;override;
function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : Variant): Integer;override;
property Working : boolean read FWorking;
protected
procedure RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
procedure RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
procedure RegisterMyMethods(Sender: TPSScript);
procedure OnPSExecute(Sender: TPSScript);
procedure SetEnabled(bool : boolean);override;
end;
implementation
uses
uPSC_std, uPSC_controls,uPSC_classes,uPSC_graphics,uPSC_stdctrls,uPSC_forms,
uPSC_extctrls,uPSC_menus, //Compile libs
uPSR_std, uPSR_controls,uPSR_classes,uPSR_graphics,uPSR_stdctrls,uPSR_forms,
uPSR_extctrls,uPSR_menus, //Runtime-libs
testunit//Writeln
;
function TSimbaPSExtension.HookExists(HookName: String): Boolean;
begin
Result := False;
if FWorking then
if PSInstance.Exec.GetProc(HookName) <> InvalidVal then
result := True;
end;
function TSimbaPSExtension.ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : Variant): Integer;
begin
result := SExt_error;
if not FWorking then
exit;
try
outvariant := PSInstance.ExecuteFunction(fArgs, HookName);
result := SExt_ok;
except
on e : exception do
formWritelnEx(format('Error in Simba extension (%s): %s',[Self.GetName,e.message]));
end;
end;
constructor TSimbaPSExtension.Create(FileStr: String; StartDisabled: boolean = false);
begin
inherited create;
FWorking := False;
FileName := FileStr;
try
Script := TStringList.Create;
Script.LoadFromFile(FileName);
except
raise Exception.CreateFmt('File %s could not be read', [FileName]);
end;
FEnabled := false;
PSInstance := nil;
if not StartDisabled then
StartExtension;
end;
function TSimbaPSExtension.InitScript: Boolean;
begin
if not HookExists('init') then
exit(false);
result := true;
try
PSInstance.ExecuteFunction([], 'init');
except
result := false;
end;
end;
function TSimbaPSExtension.FreeScript: boolean;
var
bla : variant;
begin
if not HookExists('Free') then
exit(false);
result := ExecuteHook('Free',[],bla) = SExt_ok;
end;
procedure TSimbaPSExtension.RegisterMyMethods(Sender: TPSScript);
begin
Sender.AddFunction(@formWritelnEx,'procedure Writeln(s : string)');
Sender.AddRegisteredVariable('Simba','TForm');
Sender.AddRegisteredVariable('Simba_MainMenu','TMainMenu');
end;
procedure TSimbaPSExtension.OnPSExecute(Sender: TPSScript);
begin
Sender.SetVarToInstance('simba',Form1);
Sender.SetVarToInstance('Simba_MainMenu',Form1.MainMenu);
end;
procedure TSimbaPSExtension.SetEnabled(bool: boolean);
var
temp : variant;
begin
if bool <> FEnabled then
begin
if bool then
begin;
if not assigned(PSInstance) then //We enable it for the first time, calls SetEnabled.
StartExtension
else
begin
if not FWorking then
Exit;
if hookexists('attach') then
ExecuteHook('attach',[],temp);
end;
end else
if HookExists('detach') then
ExecuteHook('detach',[],temp);
end;
inherited SetEnabled(bool);
end;
procedure TSimbaPSExtension.RegisterPSCComponents(Sender: TObject; x: TPSPascalCompiler);
begin
SIRegister_Std(x);
SIRegister_Classes(x, True);
SIRegister_Controls(x);
SIRegister_Graphics(x, True);
SIRegister_stdctrls(x);
SIRegister_Forms(x);
SIRegister_ExtCtrls(x);
SIRegister_Menus(x);
end;
procedure TSimbaPSExtension.RegisterPSRComponents(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
begin
RIRegister_Std(x);
RIRegister_Classes(x, True);
RIRegister_Controls(x);
RIRegister_Graphics(x, True);
RIRegister_stdctrls(x);
RIRegister_Forms(x);
RIRegister_ExtCtrls(x);
RIRegister_Menus(x);
end;
destructor TSimbaPSExtension.Destroy;
begin
FreeScript;
if Assigned(PSInstance) then
FreeAndNil(PSInstance);
inherited;
end;
procedure TSimbaPSExtension.StartExtension;
begin
if assigned(PSInstance) then
exit;//Already started..
{ Create script, and see if the extension is valid. (If it compiles) }
PSInstance := TPSScript.Create(nil);
PSInstance.Script := Self.Script;
PSInstance.OnCompImport:=@RegisterPSCComponents;
PSInstance.OnExecImport:=@RegisterPSRComponents;
PSInstance.OnCompile:=@RegisterMyMethods;
PSInstance.OnExecute:=@OnPSExecute;
formWritelnEx(Format('Loading extension %s', [FileName]));
try
FWorking := PSInstance.Compile;
except
on e : exception do
FormWritelnEx(format('Error in Simba extension (%s) : %s',[FileName,e.message]));
end;
if FWorking then
formWritelnEx('Extension Enabled')
else
begin
formWritelnEx('Extension Disabled - Did not compile');
OutputMessages;
end;
if InitScript then
mDebugLn('Init procedure succesfully called')
else
mDebugLn('Init procedure didn''t execute right, or couldn''t be found');
Enabled:= FWorking;
end;
procedure TSimbaPSExtension.OutputMessages;
var
l: Longint;
begin
for l := 0 to PSInstance.CompilerMessageCount - 1 do
formWritelnEx(PSInstance.CompilerErrorToStr(l) + ' at line ' + inttostr(PSInstance.CompilerMessages[l].Row));
end;
end.

View File

@ -1239,17 +1239,21 @@ object Form1: TForm1
object MenuView: TMenuItem object MenuView: TMenuItem
Caption = '&View' Caption = '&View'
object MenuItemColourHistory: TMenuItem object MenuItemColourHistory: TMenuItem
Caption = 'View &Colour History' Caption = '&Colour History'
OnClick = MenuItemColourHistoryClick OnClick = MenuItemColourHistoryClick
end end
object MenuItemDebugImage: TMenuItem object MenuItemDebugImage: TMenuItem
Caption = 'View &Debug Image' Caption = '&Debug Image'
OnClick = MenuItemDebugImageClick OnClick = MenuItemDebugImageClick
end end
object MenuItemFunctionList: TMenuItem object MenuItemFunctionList: TMenuItem
Caption = 'View &Function List' Caption = '&Function List'
OnClick = MenuItemFunctionListClick OnClick = MenuItemFunctionListClick
end end
object MenuItemExtensions: TMenuItem
Caption = '&Extensions'
OnClick = MenuItemExtensionsClick
end
end end
object MenuTools: TMenuItem object MenuTools: TMenuItem
Caption = '&Tools' Caption = '&Tools'

View File

@ -1059,346 +1059,347 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#10'ImageIndex'#2#7#7'OnClick'#7#17'Ac' +#255#255#0#255#255#255#0#255#255#255#0#10'ImageIndex'#2#7#7'OnClick'#7#17'Ac'
+'tionStopExecute'#0#0#0#9'TMenuItem'#8'MenuView'#7'Caption'#6#5'&View'#0#9'T' +'tionStopExecute'#0#0#0#9'TMenuItem'#8'MenuView'#7'Caption'#6#5'&View'#0#9'T'
+'MenuItem'#21'MenuItemColourHistory'#7'Caption'#6#20'View &Colour History'#7 +'MenuItem'#21'MenuItemColourHistory'#7'Caption'#6#15'&Colour History'#7'OnCl'
+'OnClick'#7#26'MenuItemColourHistoryClick'#0#0#9'TMenuItem'#18'MenuItemDebug' +'ick'#7#26'MenuItemColourHistoryClick'#0#0#9'TMenuItem'#18'MenuItemDebugImag'
+'Image'#7'Caption'#6#17'View &Debug Image'#7'OnClick'#7#23'MenuItemDebugImag' +'e'#7'Caption'#6#12'&Debug Image'#7'OnClick'#7#23'MenuItemDebugImageClick'#0
+'eClick'#0#0#9'TMenuItem'#20'MenuItemFunctionList'#7'Caption'#6#19'View &Fun' +#0#9'TMenuItem'#20'MenuItemFunctionList'#7'Caption'#6#14'&Function List'#7'O'
+'ction List'#7'OnClick'#7#25'MenuItemFunctionListClick'#0#0#0#9'TMenuItem'#9 +'nClick'#7#25'MenuItemFunctionListClick'#0#0#9'TMenuItem'#18'MenuItemExtensi'
+'MenuTools'#7'Caption'#6#6'&Tools'#0#9'TMenuItem'#24'MenuitemFillFunctionLis' +'ons'#7'Caption'#6#11'&Extensions'#7'OnClick'#7#23'MenuItemExtensionsClick'#0
+'t'#7'Caption'#6#19'&Fill Function List'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0 +#0#0#9'TMenuItem'#9'MenuTools'#7'Caption'#6#6'&Tools'#0#9'TMenuItem'#24'Menu'
+'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4 +'itemFillFunctionList'#7'Caption'#6#19'&Fill Function List'#11'Bitmap.Data'
+#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255 +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0
+#255#0#255#255#255#0#255#255#255#0'9'#134'@'#3'4~:x'#255#255#255#0#255#255 +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'9'#134'@'#3'4~:x'#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'A'#145'I'#156';'#136'B'#210#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'N'#163'W'#144'f'#176'n'#255'a'#170'h'#255'='#139'D'#255'7'#131'>'
+#255'2{7'#255',t2'#234'''m,'#183'#f''p'#31'a#'#29#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0'['#180'e'#132's'#189'|'#255#150
+#209#159#255#148#207#156#255#143#205#150#255#138#202#145#255#133#199#139#255
+'z'#190#129#255'e'#173'l'#255'K'#146'Q'#255'$h)'#176' c$9'#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#138'y'#196#131#255#158#215
+#167#255#155#212#164#255#151#210#159#255#146#207#154#255#141#204#149#255#136
+#202#144#255'z'#194#130#255'~'#196#133#255']'#164'c'#255'&k*'#176'"e%'#29#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'#190'm'#147'{'#199#133
+#255'w'#194#129#255'T'#171'^'#255'N'#163'W'#255'I'#155'Q'#255'c'#172'k'#255
+#131#195#139#255#135#201#143#255#130#198#137#255'P'#151'V'#255'''m,p'#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'c'#192'n'#159
+'_'#187'j'#210#255#255#255#0#255#255#255#0#255#255#255#0'K'#158'S'#141'E'#150
+'M'#225#134#198#142#255#136#201#143#255'o'#179'v'#255'.v3'#183'E'#150'Ma?'
+#142'Fa9'#134'@a4~:a.v3ag'#198's'#3'd'#194'p{'#255#255#255#0#255#255#255#0
,#255#255#255#0#255#255#255#0'M'#161'U'#131'G'#153'O'#237'A'#145'I'#246';'#136
+'B'#248'5'#128'<'#232'M'#161'U'#232'G'#153'O'#248'A'#145'I'#246';'#136'B'#237
+'5'#128'<'#131#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#30'_!'
+'{'#27'['#30#3'T'#171'^aN'#163'WaI'#155'QaC'#147'Ka='#139'DaT'#171'^'#183#128
+#195#137#255#141#204#149#255#131#196#138#255'='#139'D'#225'7'#131'>'#141#255
+#255#255#0#255#255#255#0#255#255#255#0'#f'''#210#31'a#'#159#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'['#180'epu'#191'~'#255
+#152#210#161#255#148#207#156#255#134#199#141#255'^'#167'e'#255'9'#134'@'#255
+'4~:'#255'.v3'#255'I'#144'O'#255'E'#139'J'#255' c$'#147#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0'`'#188'l'#29'\'#182'g'#176#133#201#142#255
+#155#212#164#255#143#206#152#255#146#207#154#255#141#204#149#255#136#202#144
+#255#131#198#139#255'~'#196#133#255'y'#193#127#255'G'#141'L'#255'"e%'#138#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'#190'm9^'#185'h'#176
+'y'#195#131#255#137#202#146#255#148#208#156#255#149#209#158#255#144#207#153
+#255#140#203#148#255#135#201#143#255#128#196#135#255'N'#149'T'#255'''m,'#132
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'c'#192
+'n'#29'_'#187'jp['#180'e'#183'V'#173'_'#234'P'#166'Z'#255'K'#158'S'#255'E'
+#150'M'#255'`'#168'h'#255'['#162'b'#255'4~:'#144#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'G'#153'O'#210'A'#145'I'#156#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'N'#163'WxI'#155'Q'#3#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#8'ShortCut'#3'Q@'#7'OnClick'#7#29'MenuitemFillFunctionL'
+'istClick'#0#0#9'TMenuItem'#16'UpdateMenuButton'#7'Caption'#6#7'&Update'#11
+'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0
+#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#156';'#136'B'#210#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0'N'#163'W'#144'f'#176'n'#255'a'#170'h'#255'='#139
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +'D'#255'7'#131'>'#255'2{7'#255',t2'#234'''m,'#183'#f''p'#31'a#'#29#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'['#180'e'#132
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +'s'#189'|'#255#150#209#159#255#148#207#156#255#143#205#150#255#138#202#145
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#133#199#139#255'z'#190#129#255'e'#173'l'#255'K'#146'Q'#255'$h)'#176' c$'
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +'9'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#138'y'
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#196#131#255#158#215#167#255#155#212#164#255#151#210#159#255#146#207#154#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#141#204#149#255#136#202#144#255'z'#194#130#255'~'#196#133#255']'#164'c'#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +'&k*'#176'"e%'#29#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'b'
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#0#138 +#190'm'#147'{'#199#133#255'w'#194#129#255'T'#171'^'#255'N'#163'W'#255'I'#155
+#255#139#0#138#255#244#0#138#255#139#0#138#255#150#0#138#255#255#0#138#255 +'Q'#255'c'#172'k'#255#131#195#139#255#135#201#143#255#130#198#137#255'P'#151
+#150#0#138#255#249#0#138#255#218#0#138#255#199#0#138#255#141#0#138#255#246#0 +'V'#255'''m,p'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#138#255#152#0#138#255#150#0#138#255#255#0#138#255#150#255#255#255#0#0#138 +#255#255#0'c'#192'n'#159'_'#187'j'#210#255#255#255#0#255#255#255#0#255#255
+#255#244#244#250#255#255#0#138#255#244'w'#193#255#255#255#255#255#255'w'#193 +#255#0'K'#158'S'#141'E'#150'M'#225#134#198#142#255#136#201#143#255'o'#179'v'
+#255#255#249#252#255#255#218#238#255#255#199#229#255#255#0#138#255#246#246 ,#255'.v3'#183'E'#150'Ma?'#142'Fa9'#134'@a4~:a.v3ag'#198's'#3'd'#194'p{'#255
+#251#255#255#152#208#255#255'o'#189#255#255#255#255#255#255#0#138#255#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'U'#131'G'#153'O'
+#255#255#0#0#138#255#244#244#250#255#255#0#138#255#244#238#247#255#255#244 +#237'A'#145'I'#246';'#136'B'#248'5'#128'<'#232'M'#161'U'#232'G'#153'O'#248'A'
+#250#255#255'w'#193#255#255#232#244#255#255#0#138#255#232#0#138#255#199#3#139 +#145'I'#246';'#136'B'#237'5'#128'<'#131#255#255#255#0#255#255#255#0#255#255
+#255#255#249#252#255#255#183#222#255#255#170#216#255#255#251#253#255#255'''' +#255#0#255#255#255#0#30'_!{'#27'['#30#3'T'#171'^aN'#163'WaI'#155'QaC'#147'Ka'
+#156#255#255#0#138#255'Q'#0#138#255#244#244#250#255#255#153#208#255#255'w' +'='#139'DaT'#171'^'#183#128#195#137#255#141#204#149#255#131#196#138#255'='
+#193#255#255#244#250#255#255'w'#193#255#255#249#252#255#255#218#238#255#255 +#139'D'#225'7'#131'>'#141#255#255#255#0#255#255#255#0#255#255#255#0'#f'''#210
+#199#229#255#255#159#211#255#255#228#243#255#255#220#239#255#255#227#242#255 +#31'a#'#159#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#205#232#255#255#186#223#255#255#0#138#255#186#0#138#255#246#246#251#255 +#255#0'['#180'epu'#191'~'#255#152#210#161#255#148#207#156#255#134#199#141#255
+#255#238#247#255#255#0#138#255#244#244#250#255#255'w'#193#255#255#232#244#255 +'^'#167'e'#255'9'#134'@'#255'4~:'#255'.v3'#255'I'#144'O'#255'E'#139'J'#255' '
+#255#0#138#255#232#12#144#255#255#237#247#255#255'x'#193#255#255#187#224#255 +'c$'#147#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'`'#188'l'#29
+#255#187#224#255#255'V'#177#255#255#227#242#255#255#0#138#255#227#0#138#255 +'\'#182'g'#176#133#201#142#255#155#212#164#255#143#206#152#255#146#207#154
+#238#238#247#255#255'D'#169#255#255#0#138#255#232#232#244#255#255'D'#169#255 +#255#141#204#149#255#136#202#144#255#131#198#139#255'~'#196#133#255'y'#193
+#255#244#250#255#255#218#238#255#255#203#231#255#255#171#216#255#255#12#144 +#127#255'G'#141'L'#255'"e%'#138#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255'f'#185#255#255'f'#185#255#255#0#138#255#215#215#237#255#255#24#149 +#255#255#0'b'#190'm9^'#185'h'#176'y'#195#131#255#137#202#146#255#148#208#156
+#255#255#0#138#255#133#0#138#255#238#0#138#255#133#0#138#255#127#0#138#255 +#255#149#209#158#255#144#207#153#255#140#203#148#255#135#201#143#255#128#196
+#232#0#138#255#139#0#138#255#244#0#138#255#218#0#138#255#203#0#138#255#171#0 +#135#255'N'#149'T'#255'''m,'#132#255#255#255#0#255#255#255#0#255#255#255#0
,#138#255'B'#0#138#255'f'#0#138#255'f'#0#138#255'n'#0#138#255#215#0#138#255'n' +#255#255#255#0#255#255#255#0'c'#192'n'#29'_'#187'jp['#180'e'#183'V'#173'_'
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#234'P'#166'Z'#255'K'#158'S'#255'E'#150'M'#255'`'#168'h'#255'['#162'b'#255'4'
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +'~:'#144#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#7'OnClick'#7#21'UpdateMenuButtonClick'#0#0#9'TMenuItem'#16'MenuItemDivider9'
+#7'Caption'#6#1'-'#0#0#9'TMenuItem'#22'MenuItemSettingsButton'#7'Caption'#6#8
+'Settings'#7'OnClick'#7#27'MenuItemSettingsButtonClick'#0#0#9'TMenuItem'#17
+'MenuItemDivider10'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#18'MenuItemExportHTML'
+#7'Caption'#6#22'&Export script as HTML'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
+'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
+#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#205'n#'#255#201'e'#27#255#200'`'#26
+#255#198'Y'#24#255#194'S'#23#255#192'N'#22#255#189'G'#21#255#187'A'#21#255
+#185'>'#20#255#183'9'#19#255#182'5'#18#255#180'3'#18#255#180'3'#18#255#180'3'
+#18#255#180'3'#18#255#180'3'#18#255#210'w5'#255#228#175#135#255#227#171#129
+#255#225#168'{'#255#223#163'v'#255#222#161'q'#255#220#157'm'#255#219#153'h'
+#255#218#151'c'#255#217#148'^'#255#215#145'['#255#215#143'W'#255#213#141'T'
+#255#213#140'S'#255#213#140'S'#255#180'3'#18#255#214#132'C'#255#231#181#144
+#255#224#163't'#255#222#158'n'#255#220#154'g'#255#219#149'`'#255#217#145'Z'
+#255#215#141'S'#255#213#137'M'#255#211#133'H'#255#210#129'C'#255#208'~>'#255
+#207'{9'#255#206'y5'#255#213#141'T'#255#180'3'#18#255#219#142'S'#255#234#187
+#153#255#252#246#242#255#225#166'y'#255#252#245#241#255#221#157'k'#255#252
+#246#242#255#218#148'^'#255#247#233#222#255#214#140'Q'#255#239#209#186#255
+#222#164'w'#255#253#250#247#255#247#232#221#255#215#143'Y'#255#182'5'#18#255
+#225#151'b'#255#236#193#161#255#252#247#243#255#229#173#132#255#252#246#242
+#255#225#164'w'#255#252#247#243#255#221#155'i'#255#248#235#224#255#240#211
+#190#255#243#222#206#255#224#169#127#255#250#240#233#255#210#131'D'#255#217
+#148'^'#255#183'<'#19#255#226#160'n'#255#238#199#168#255#254#253#252#255#253
+#247#243#255#254#250#248#255#227#172#129#255#252#247#244#255#224#163't'#255
+#249#236#227#255#250#242#235#255#253#248#244#255#227#174#134#255#250#241#234
+#255#213#137'M'#255#218#153'f'#255#189'C'#21#255#230#167'y'#255#240#203#176
+#255#253#248#245#255#234#186#152#255#253#248#244#255#231#179#140#255#253#248
+#245#255#227#170#128#255#249#238#229#255#238#205#180#255#253#248#245#255#229
+#179#142#255#253#249#246#255#216#143'W'#255#221#158'm'#255#192'N'#22#255#234
+#171#128#255#242#207#181#255#252#244#238#255#236#191#159#255#251#243#237#255
+#253#248#244#255#253#247#244#255#252#247#243#255#244#219#201#255#231#180#142
+#255#247#230#218#255#227#173#131#255#246#228#214#255#219#151'b'#255#223#163
+'v'#255#196'Y'#24#255#234#171#128#255#243#208#183#255#239#198#169#255#239#196
+#166#255#238#194#162#255#236#191#158#255#235#188#152#255#233#184#147#255#232
+#180#142#255#230#176#136#255#227#172#129#255#226#167'{'#255#224#163't'#255
+#222#158'n'#255#226#170#128#255#201'b'#26#255#234#171#128#255#243#208#183#255
+#243#208#183#255#243#208#183#255#242#208#183#255#241#206#179#255#240#203#176
+#255#239#201#172#255#238#198#168#255#237#194#163#255#235#192#158#255#234#187
+#153#255#232#183#148#255#230#180#143#255#228#176#137#255#205'n#'#255#234#171
+#128#255#234#171#128#255#234#171#128#255#234#171#128#255#234#171#128#255#234
+#171#128#255#232#169'|'#255#230#164'w'#255#226#160'p'#255#226#155'k'#255#225
+#151'b'#255#221#144'Y'#255#217#139'R'#255#216#133'I'#255#214#128'>'#255#210
+'w5'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#210'A'#145'I'#156#255#255
,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'N'#163'WxI'#155'Q'#3#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#8'ShortCut'#3'Q@'#7'OnC'
+'lick'#7#29'MenuitemFillFunctionListClick'#0#0#9'TMenuItem'#16'UpdateMenuBut'
+'ton'#7'Caption'#6#7'&Update'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0
+#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0
+#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#7'OnClick'#7#23'MenuItemExportHTMLClick'#0#0#0#9'TMenuItem'#8'MenuHel' +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'p'#7'Caption'#6#5'&Help'#0#9'TMenuItem'#13'MenuItemAbout'#7'Caption'#6#6'&A'
+'bout'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0
+#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0
+#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#173'tD#'#172
+'rA}'#170'p?'#219#168'm<'#243#167'k:'#243#165'i7'#219#164'h5}'#163'f3#'#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#181'~QS'#179'|N'#230#215#187#163#255#233#218#202#255#236
+#224#209#255#236#224#209#255#232#216#200#255#211#181#156#255#167'l:'#230#166
+'j8S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#189#137'_S'#187#135'['#244#231#213#196#255#229#210#191#255#201#166#133#255
+#184#142'g'#255#182#138'e'#255#197#161#128#255#224#204#186#255#227#208#190
+#255#171'p@'#244#169'n=S'#255#255#255#0#255#255#255#0#255#255#255#0#198#149
+'m"'#195#146'j'#229#234#216#201#255#227#205#186#255#192#148'k'#255#186#140'b'
+#255#207#176#148#255#207#176#148#255#183#137'_'#255#178#135'a'#255#218#192
+#170#255#228#209#192#255#174'uF'#229#173'sC"'#255#255#255#0#255#255#255#0#204
+#158'x~'#228#204#185#255#234#214#197#255#199#153'q'#255#191#144'f'#255#191
+#144'f'#255#247#241#236#255#246#240#234#255#183#137'_'#255#183#137'_'#255#181
+#137'c'#255#226#206#187#255#217#189#166#255#178'{M~'#255#255#255#0#255#255
+#255#0#211#167#132#219#239#225#211#255#217#181#149#255#199#152'l'#255#195#149
+'i'#255#193#147'g'#255#191#144'f'#255#191#144'f'#255#187#139'c'#255#185#138
+'c'#255#184#138'b'#255#203#167#134#255#234#220#204#255#184#131'W'#219#255#255
+#255#0#255#255#255#0#217#176#143#246#242#228#217#255#209#165'z'#255#197#153
+'k'#255#196#151'j'#255#196#150'i'#255#250#246#242#255#243#234#225#255#194#149
+'m'#255#190#143'e'#255#190#143'd'#255#192#149'm'#255#239#227#213#255#191#140
+'a'#246#255#255#255#0#255#255#255#0#224#185#153#246#242#229#218#255#209#166
+'~'#255#204#157'q'#255#199#154'l'#255#197#152'k'#255#226#204#182#255#248#243
+#238#255#246#238#232#255#217#189#161#255#194#148'h'#255#197#155'q'#255#240
+#226#214#255#197#149'l'#246#255#255#255#0#255#255#255#0#230#193#163#219#243
+#229#217#255#223#187#158#255#207#160'u'#255#205#158'r'#255#245#235#227#255
+#228#203#180#255#231#211#191#255#251#248#246#255#229#211#191#255#196#152'k'
+#255#214#180#145#255#238#224#210#255#204#158'x'#219#255#255#255#0#255#255#255
+#0#235#201#173'~'#244#227#212#255#239#220#205#255#213#168'~'#255#208#160'w'
+#255#251#248#245#255#252#248#245#255#252#248#245#255#251#248#245#255#209#168
+#129#255#207#164'{'#255#234#213#195#255#234#212#194#255#210#167#131'~'#255
+#255#255#0#255#255#255#0#241#208#181'"'#239#206#179#229#246#233#221#255#236
+#216#198#255#215#172#129#255#220#187#154#255#246#236#227#255#245#236#226#255
+#228#200#174#255#210#167'{'#255#230#206#186#255#241#226#213#255#219#179#145
+#229#217#176#142'"'#255#255#255#0#255#255#255#0#255#255#255#0#244#212#187'S'
+#242#210#184#244#247#234#223#255#238#222#208#255#227#193#167#255#216#174#137
+#255#215#172#134#255#221#187#156#255#235#214#199#255#243#230#217#255#227#190
+#159#244#225#187#156'S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#246#216#191'S'#245#214#189#230#249#233#220#255#246#232#221
+#255#243#229#218#255#243#229#218#255#245#231#220#255#245#228#214#255#235#200
+#172#230#233#198#169'S'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#249#219#196'#'#248#218#194'}'
+#247#216#192#219#246#215#190#243#244#213#188#243#243#211#185#219#241#209#183
+'}'#240#207#180'#'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#7'OnClick'#7#18'MenuItemAboutClick'#0#0#9'TMenuItem'#16'MenuItemHandbook'#7
+'Caption'#6#9'&Handbook'#7'OnClick'#7#21'MenuItemHandbookClick'#0#0#9'TMenuI'
+'tem'#17'MenuItemReportBug'#7'Caption'#6#13'&Report a Bug'#11'Bitmap.Data'#10
+':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
,' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2'#138#197#236'0'#135#196
+#246'/'#133#195#246'-'#131#194#246'*'#128#187#255')~'#186#255'(}'#191#246'&{'
+#190#246'%y'#189#246'#w'#189#246'"v'#188#195#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'8'#145#201#228#221#236#246#255#189#238
+#249#255#172#234#248#255#171#234#248#255#171#234#248#255#171#234#248#255#173
+#234#248#255#212#243#251#255#164#200#228#255'&{'#190#171#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'3'#135#129#200#142#194
+#225#255#151#232#249#255'a'#220#246#255'['#219#245#255'2'#136#194#255'['#219
+#245#255'j'#222#246#255#177#231#246#255'-'#131#194#233'+'#129#193'*'#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*{.'#193'+z2'#255'J'#159#188
+#255#171#219#239#255't'#224#247#255'X'#218#245#255'X'#218#245#255']'#219#245
+#255#144#230#248#255#146#193#225#255'/'#132#176#144#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0'/'#135'3'#193' t#'#255#148#192#157#255'b'#172
+#153#255'{'#189#223#255#162#234#249#255'a'#220#246#255'1'#135#194#255'w'#225
+#247#255#182#222#240#255'8'#144#188#233'8'#145#201#13#255#255#255#0#255#255
+#255#0#255#255#255#0'5'#146':'#135'-'#140'2'#255'w'#181#130#255'M'#158'T'#255
+'y'#179#141#255'M'#167#174#255#172#217#236#255#130#227#248#255'3'#136#194#255
+#172#237#250#255'C'#158#207#254'A'#155#206'S'#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'2'#149'7'#245'b'#173'h'#255'w'#190#145#255'D'#160']'
+#255'K'#159'S'#255'r'#180#153#255'Q'#174#207#255#180#235#248#255#142#230#248
+#255#181#221#238#255'>'#150#159#255'+xM'#23#255#255#255#0' f#|'#255#255#255#0
+#255#255#255#0'3'#156'8'#248'R'#169'Y'#255'm'#188#140#255'M'#170'p'#255'B'
+#159'\'#255'L'#162'T'#255'm'#187#184#255#164#215#235#255#220#244#251#255'U'
+#176#211#255'/'#130'N'#255'$s('#254'#p'''#255'"l&'#255#255#255#255#0'4'#164
+'9'#199'3'#161'8'#255'3'#158'8'#255#148#207#172#255'\'#180'~'#255'N'#172'r'
+#255'A'#161']'#255'O'#167'^'#255'`'#187#210#255#171#219#237#255'l'#186#189
+#255'*~-'#255'&y*'#244'%v)m'#255#255#255#0'7'#173'<'#250'6'#170';'#255'5'#167
+':'#162'8'#165'>'#234'P'#173'V'#255#141#204#165#255'^'#181#128#255'O'#173's'
+#255'B'#163']'#255'U'#177#134#255'i'#192#211#255#138#191#155#255')'#131'.'
+#255'%Y;'#175#255#255#255#0#255#255#255#0'8'#177'>'#241'7'#175'=#'#255#255
+#255#0#255#255#255#0'4'#166':'#254'9'#165'?'#255#144#206#168#255'b'#185#132
+#255'X'#178'{'#255'`'#178'v'#255'8'#151'>'#255')'#137'-'#255'W'#164'b'#255'&'
+'PD'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0'7'#174'=A6'#171'<'#255'8'#169'>'#240'E'#172'K'#255#158#212#173#255#164#215
+#184#255#133#195#142#255'('#143'-'#255'O'#183'_'#255#151#200#170#255','#141
+'1'#255'+'#137'0'#255'*'#133'.'#255#255#255#255#0#255#255#255#0#255#255#255#0
+'8'#179'>'#240'8'#177'='#248#255#255#255#0'8'#172'='#241'5'#168':'#255'4'#165
+'9'#255'4'#161'9'#255'r'#194'~'#255#175#227#194#255'_'#140'x'#255'2eMu'#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0':'#183'@'
+#255'9'#181'?t'#255#255#255#0#255#255#255#0'7'#173'<'#248'6'#170';'#237'F'
+#127'f'#165':'#134'P'#247'3'#157':'#254';qX'#137#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0';'#187'A#'#255#255
+#255#0#255#255#255#0#255#255#255#0'8'#178'>'#255'7'#175'='#178'N'#142'j"5'
+#169';e4'#166':'#242#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0':'#183'?'#255'9'#180'?A'#255#255#255#0'7'#174'=R6' +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#172'<'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClic' +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'k'#7#22'MenuItemReportBugClick'#0#0#0#0#10'TImageList'#17'Mufasa_Image_List' +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#4'left'#3#192#1#3'top'#3#144#0#6'Bitmap'#10#14'p'#0#0'Li'#28#0#0#0#16#0#0#0 +#255#255#0#255#255#255#0#0#138#255#139#0#138#255#244#0#138#255#139#0#138#255
+#16#0#0#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB' +#150#0#138#255#255#0#138#255#150#0#138#255#249#0#138#255#218#0#138#255#199#0
+#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#14'BBB'#0'BBB'#0'B' +#138#255#141#0#138#255#246#0#138#255#152#0#138#255#150#0#138#255#255#0#138
+'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255 +#255#150#255#255#255#0#0#138#255#244#244#250#255#255#0#138#255#244'w'#193#255
+#255#218#208#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BB' +#255#255#255#255#255'w'#193#255#255#249#252#255#255#218#238#255#255#199#229
+'B'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255 +#255#255#0#138#255#246#246#251#255#255#152#208#255#255'o'#189#255#255#255#255
+#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BBB'#0 +#255#255#0#138#255#255#255#255#255#0#0#138#255#244#244#250#255#255#0#138#255
+'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#255#218#208#255#208'^B' +#244#238#247#255#255#244#250#255#255'w'#193#255#255#232#244#255#255#0#138#255
+#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0'BB' +#232#0#138#255#199#3#139#255#255#249#252#255#255#183#222#255#255#170#216#255
+'B'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255#161'UB'#255#208'^B' +#255#251#253#255#255''''#156#255#255#0#138#255'Q'#0#138#255#244#244#250#255
+#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBBcBBB'#0'BBB'#0'BBB'#0 +#255#153#208#255#255'w'#193#255#255#244#250#255#255'w'#193#255#255#249#252
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'BBB'#11#161'UB'#255 +#255#255#218#238#255#255#199#229#255#255#159#211#255#255#228#243#255#255#220
+#255#218#208#255#161'UB'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBBcBBBLBBB' +#239#255#255#227#242#255#255#205#232#255#255#186#223#255#255#0#138#255#186#0
+#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#131 +#138#255#246#246#251#255#255#238#247#255#255#0#138#255#244#244#250#255#255'w'
+#131#131#255#255#255#255#255#161'UB'#255#255#218#208#255#161'UB'#255#161'UB' +#193#255#255#232#244#255#255#0#138#255#232#12#144#255#255#237#247#255#255'x'
,#255'BBBcBBBLBBB'#25'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255 +#193#255#255#187#224#255#255#187#224#255#255'V'#177#255#255#227#242#255#255#0
+#255#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161#255#161'U' +#138#255#227#0#138#255#238#238#247#255#255'D'#169#255#255#0#138#255#232#232
+'B'#255#255#218#208#255#161'UB'#255'BBBXBBB'#28'BBB'#3'BBB'#0'BBB'#0'BBB'#0 +#244#255#255'D'#169#255#255#244#250#255#255#218#238#255#255#203#231#255#255
+#255#255#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229#255 +#171#216#255#255#12#144#255#255'f'#185#255#255'f'#185#255#255#0#138#255#215
+#161#161#161#255#131#131#131#255'BBBc'#161'UB'#255'BBB`BBBJBBB'#14'BBB'#0'BB' +#215#237#255#255#24#149#255#255#0#138#255#133#0#138#255#238#0#138#255#133#0
+'B'#0'BBB'#0'BBB'#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229 ,#138#255#127#0#138#255#232#0#138#255#139#0#138#255#244#0#138#255#218#0#138
+#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB''BBB>BBB'#25'BBB'#3'BBB'#0 +#255#203#0#138#255#171#0#138#255'B'#0#138#255'f'#0#138#255'f'#0#138#255'n'#0
+#138#255#215#0#138#255'n'#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#7'OnClick'#7#21'UpdateMenuButtonClick'#0#0#9'TMenuI'
+'tem'#16'MenuItemDivider9'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#22'MenuItemSet'
+'tingsButton'#7'Caption'#6#8'Settings'#7'OnClick'#7#27'MenuItemSettingsButto'
+'nClick'#0#0#9'TMenuItem'#17'MenuItemDivider10'#7'Caption'#6#1'-'#0#0#9'TMen'
+'uItem'#18'MenuItemExportHTML'#7'Caption'#6#22'&Export script as HTML'#11'Bi'
+'tmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#205'n'
+'#'#255#201'e'#27#255#200'`'#26#255#198'Y'#24#255#194'S'#23#255#192'N'#22#255
+#189'G'#21#255#187'A'#21#255#185'>'#20#255#183'9'#19#255#182'5'#18#255#180'3'
+#18#255#180'3'#18#255#180'3'#18#255#180'3'#18#255#180'3'#18#255#210'w5'#255
+#228#175#135#255#227#171#129#255#225#168'{'#255#223#163'v'#255#222#161'q'#255
+#220#157'm'#255#219#153'h'#255#218#151'c'#255#217#148'^'#255#215#145'['#255
+#215#143'W'#255#213#141'T'#255#213#140'S'#255#213#140'S'#255#180'3'#18#255
+#214#132'C'#255#231#181#144#255#224#163't'#255#222#158'n'#255#220#154'g'#255
+#219#149'`'#255#217#145'Z'#255#215#141'S'#255#213#137'M'#255#211#133'H'#255
+#210#129'C'#255#208'~>'#255#207'{9'#255#206'y5'#255#213#141'T'#255#180'3'#18
+#255#219#142'S'#255#234#187#153#255#252#246#242#255#225#166'y'#255#252#245
+#241#255#221#157'k'#255#252#246#242#255#218#148'^'#255#247#233#222#255#214
+#140'Q'#255#239#209#186#255#222#164'w'#255#253#250#247#255#247#232#221#255
+#215#143'Y'#255#182'5'#18#255#225#151'b'#255#236#193#161#255#252#247#243#255
+#229#173#132#255#252#246#242#255#225#164'w'#255#252#247#243#255#221#155'i'
+#255#248#235#224#255#240#211#190#255#243#222#206#255#224#169#127#255#250#240
+#233#255#210#131'D'#255#217#148'^'#255#183'<'#19#255#226#160'n'#255#238#199
+#168#255#254#253#252#255#253#247#243#255#254#250#248#255#227#172#129#255#252
+#247#244#255#224#163't'#255#249#236#227#255#250#242#235#255#253#248#244#255
+#227#174#134#255#250#241#234#255#213#137'M'#255#218#153'f'#255#189'C'#21#255
+#230#167'y'#255#240#203#176#255#253#248#245#255#234#186#152#255#253#248#244
+#255#231#179#140#255#253#248#245#255#227#170#128#255#249#238#229#255#238#205
+#180#255#253#248#245#255#229#179#142#255#253#249#246#255#216#143'W'#255#221
+#158'm'#255#192'N'#22#255#234#171#128#255#242#207#181#255#252#244#238#255#236
+#191#159#255#251#243#237#255#253#248#244#255#253#247#244#255#252#247#243#255
+#244#219#201#255#231#180#142#255#247#230#218#255#227#173#131#255#246#228#214
+#255#219#151'b'#255#223#163'v'#255#196'Y'#24#255#234#171#128#255#243#208#183
+#255#239#198#169#255#239#196#166#255#238#194#162#255#236#191#158#255#235#188
+#152#255#233#184#147#255#232#180#142#255#230#176#136#255#227#172#129#255#226
+#167'{'#255#224#163't'#255#222#158'n'#255#226#170#128#255#201'b'#26#255#234
+#171#128#255#243#208#183#255#243#208#183#255#243#208#183#255#242#208#183#255
+#241#206#179#255#240#203#176#255#239#201#172#255#238#198#168#255#237#194#163
+#255#235#192#158#255#234#187#153#255#232#183#148#255#230#180#143#255#228#176
+#137#255#205'n#'#255#234#171#128#255#234#171#128#255#234#171#128#255#234#171
+#128#255#234#171#128#255#234#171#128#255#232#169'|'#255#230#164'w'#255#226
+#160'p'#255#226#155'k'#255#225#151'b'#255#221#144'Y'#255#217#139'R'#255#216
+#133'I'#255#214#128'>'#255#210'w5'#255#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#23'MenuItemExportHTMLCli'
+'ck'#0#0#0#9'TMenuItem'#8'MenuHelp'#7'Caption'#6#5'&Help'#0#9'TMenuItem'#13
+'MenuItemAbout'#7'Caption'#6#6'&About'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0
+'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
+#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#173'tD#'#172'rA}'#170'p?'#219#168'm<'#243#167'k:'#243
+#165'i7'#219#164'h5}'#163'f3#'#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#181'~QS'#179'|N'#230#215
+#187#163#255#233#218#202#255#236#224#209#255#236#224#209#255#232#216#200#255
+#211#181#156#255#167'l:'#230#166'j8S'#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#189#137'_S'#187#135'['#244#231#213#196#255#229
+#210#191#255#201#166#133#255#184#142'g'#255#182#138'e'#255#197#161#128#255
+#224#204#186#255#227#208#190#255#171'p@'#244#169'n=S'#255#255#255#0#255#255
+#255#0#255#255#255#0#198#149'm"'#195#146'j'#229#234#216#201#255#227#205#186
+#255#192#148'k'#255#186#140'b'#255#207#176#148#255#207#176#148#255#183#137'_'
+#255#178#135'a'#255#218#192#170#255#228#209#192#255#174'uF'#229#173'sC"'#255
+#255#255#0#255#255#255#0#204#158'x~'#228#204#185#255#234#214#197#255#199#153
+'q'#255#191#144'f'#255#191#144'f'#255#247#241#236#255#246#240#234#255#183#137
+'_'#255#183#137'_'#255#181#137'c'#255#226#206#187#255#217#189#166#255#178'{M'
+'~'#255#255#255#0#255#255#255#0#211#167#132#219#239#225#211#255#217#181#149
+#255#199#152'l'#255#195#149'i'#255#193#147'g'#255#191#144'f'#255#191#144'f'
+#255#187#139'c'#255#185#138'c'#255#184#138'b'#255#203#167#134#255#234#220#204
+#255#184#131'W'#219#255#255#255#0#255#255#255#0#217#176#143#246#242#228#217
+#255#209#165'z'#255#197#153'k'#255#196#151'j'#255#196#150'i'#255#250#246#242
+#255#243#234#225#255#194#149'm'#255#190#143'e'#255#190#143'd'#255#192#149'm'
+#255#239#227#213#255#191#140'a'#246#255#255#255#0#255#255#255#0#224#185#153
+#246#242#229#218#255#209#166'~'#255#204#157'q'#255#199#154'l'#255#197#152'k'
+#255#226#204#182#255#248#243#238#255#246#238#232#255#217#189#161#255#194#148
+'h'#255#197#155'q'#255#240#226#214#255#197#149'l'#246#255#255#255#0#255#255
+#255#0#230#193#163#219#243#229#217#255#223#187#158#255#207#160'u'#255#205#158
+'r'#255#245#235#227#255#228#203#180#255#231#211#191#255#251#248#246#255#229
+#211#191#255#196#152'k'#255#214#180#145#255#238#224#210#255#204#158'x'#219
+#255#255#255#0#255#255#255#0#235#201#173'~'#244#227#212#255#239#220#205#255
+#213#168'~'#255#208#160'w'#255#251#248#245#255#252#248#245#255#252#248#245
+#255#251#248#245#255#209#168#129#255#207#164'{'#255#234#213#195#255#234#212
+#194#255#210#167#131'~'#255#255#255#0#255#255#255#0#241#208#181'"'#239#206
+#179#229#246#233#221#255#236#216#198#255#215#172#129#255#220#187#154#255#246
+#236#227#255#245#236#226#255#228#200#174#255#210#167'{'#255#230#206#186#255
+#241#226#213#255#219#179#145#229#217#176#142'"'#255#255#255#0#255#255#255#0
+#255#255#255#0#244#212#187'S'#242#210#184#244#247#234#223#255#238#222#208#255
+#227#193#167#255#216#174#137#255#215#172#134#255#221#187#156#255#235#214#199
+#255#243#230#217#255#227#190#159#244#225#187#156'S'#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#246#216#191'S'#245#214#189#230
+#249#233#220#255#246#232#221#255#243#229#218#255#243#229#218#255#245#231#220
+#255#245#228#214#255#235#200#172#230#233#198#169'S'#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#249
+#219#196'#'#248#218#194'}'#247#216#192#219#246#215#190#243#244#213#188#243
+#243#211#185#219#241#209#183'}'#240#207#180'#'#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#7'OnClick'#7#18'MenuItemAboutClick'#0#0#9'TMenu'
+'Item'#16'MenuItemHandbook'#7'Caption'#6#9'&Handbook'#7'OnClick'#7#21'MenuIt'
+'emHandbookClick'#0#0#9'TMenuItem'#17'MenuItemReportBug'#7'Caption'#6#13'&Re'
,'port a Bug'#11'Bitmap.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0
+'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'2'#138#197#236'0'#135#196#246'/'#133#195#246'-'#131#194#246'*'#128#187
+#255')~'#186#255'(}'#191#246'&{'#190#246'%y'#189#246'#w'#189#246'"v'#188#195
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'8'#145
+#201#228#221#236#246#255#189#238#249#255#172#234#248#255#171#234#248#255#171
+#234#248#255#171#234#248#255#173#234#248#255#212#243#251#255#164#200#228#255
+'&{'#190#171#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'3'#135#129#200#142#194#225#255#151#232#249#255'a'#220#246#255'['#219
+#245#255'2'#136#194#255'['#219#245#255'j'#222#246#255#177#231#246#255'-'#131
+#194#233'+'#129#193'*'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0'*{.'#193'+z2'#255'J'#159#188#255#171#219#239#255't'#224#247#255'X'#218#245
+#255'X'#218#245#255']'#219#245#255#144#230#248#255#146#193#225#255'/'#132#176
+#144#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'/'#135'3'#193' '
+'t#'#255#148#192#157#255'b'#172#153#255'{'#189#223#255#162#234#249#255'a'#220
+#246#255'1'#135#194#255'w'#225#247#255#182#222#240#255'8'#144#188#233'8'#145
+#201#13#255#255#255#0#255#255#255#0#255#255#255#0'5'#146':'#135'-'#140'2'#255
+'w'#181#130#255'M'#158'T'#255'y'#179#141#255'M'#167#174#255#172#217#236#255
+#130#227#248#255'3'#136#194#255#172#237#250#255'C'#158#207#254'A'#155#206'S'
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2'#149'7'#245'b'#173
+'h'#255'w'#190#145#255'D'#160']'#255'K'#159'S'#255'r'#180#153#255'Q'#174#207
+#255#180#235#248#255#142#230#248#255#181#221#238#255'>'#150#159#255'+xM'#23
+#255#255#255#0' f#|'#255#255#255#0#255#255#255#0'3'#156'8'#248'R'#169'Y'#255
+'m'#188#140#255'M'#170'p'#255'B'#159'\'#255'L'#162'T'#255'm'#187#184#255#164
+#215#235#255#220#244#251#255'U'#176#211#255'/'#130'N'#255'$s('#254'#p'''#255
+'"l&'#255#255#255#255#0'4'#164'9'#199'3'#161'8'#255'3'#158'8'#255#148#207#172
+#255'\'#180'~'#255'N'#172'r'#255'A'#161']'#255'O'#167'^'#255'`'#187#210#255
+#171#219#237#255'l'#186#189#255'*~-'#255'&y*'#244'%v)m'#255#255#255#0'7'#173
+'<'#250'6'#170';'#255'5'#167':'#162'8'#165'>'#234'P'#173'V'#255#141#204#165
+#255'^'#181#128#255'O'#173's'#255'B'#163']'#255'U'#177#134#255'i'#192#211#255
+#138#191#155#255')'#131'.'#255'%Y;'#175#255#255#255#0#255#255#255#0'8'#177'>'
+#241'7'#175'=#'#255#255#255#0#255#255#255#0'4'#166':'#254'9'#165'?'#255#144
+#206#168#255'b'#185#132#255'X'#178'{'#255'`'#178'v'#255'8'#151'>'#255')'#137
+'-'#255'W'#164'b'#255'&PD'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0'7'#174'=A6'#171'<'#255'8'#169'>'#240'E'#172'K'#255
+#158#212#173#255#164#215#184#255#133#195#142#255'('#143'-'#255'O'#183'_'#255
+#151#200#170#255','#141'1'#255'+'#137'0'#255'*'#133'.'#255#255#255#255#0#255
+#255#255#0#255#255#255#0'8'#179'>'#240'8'#177'='#248#255#255#255#0'8'#172'='
+#241'5'#168':'#255'4'#165'9'#255'4'#161'9'#255'r'#194'~'#255#175#227#194#255
+'_'#140'x'#255'2eMu'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0':'#183'@'#255'9'#181'?t'#255#255#255#0#255#255#255#0'7'#173'<'
+#248'6'#170';'#237'F'#127'f'#165':'#134'P'#247'3'#157':'#254';qX'#137#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+';'#187'A#'#255#255#255#0#255#255#255#0#255#255#255#0'8'#178'>'#255'7'#175'='
+#178'N'#142'j"5'#169';e4'#166':'#242#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0':'#183'?'#255'9'#180'?A'#255#255#255#0
+'7'#174'=R6'#172'<'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#7'OnClick'#7#22'MenuItemReportBugClick'#0#0#0#0#10'TImageList'#17'Mufasa_'
+'Image_List'#4'left'#3#192#1#3'top'#3#144#0#6'Bitmap'#10#14'p'#0#0'Li'#28#0#0
+#0#16#0#0#0#16#0#0#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0
+'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#14'BBB'
+#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161
+'UB'#255#255#218#208#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'B'
+'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218
+#208#255#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'BBB'#0
+'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#161'UB'#255#255#218#208#255
+#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBB'#0'BBB'#0'B'
+'BB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#161'UB'#255#255#218#208#255#161'UB'#255
+#208'^B'#255#208'^B'#255#161'UB'#255#161'UB'#255#161'UB'#255'BBBcBBB'#0'BBB'
+#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'BBB'#11#161
+'UB'#255#255#218#208#255#161'UB'#255#208'^B'#255#161'UB'#255#161'UB'#255'BBB'
+'cBBBLBBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
,#255#0#131#131#131#255#255#255#255#255#161'UB'#255#255#218#208#255#161'UB'
+#255#161'UB'#255'BBBcBBBLBBB'#25'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#255#255
+#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161
+#161#255#161'UB'#255#255#218#208#255#161'UB'#255'BBBXBBB'#28'BBB'#3'BBB'#0'B'
+'BB'#0'BBB'#0#255#255#255#0#255#255#255#0#131#131#131#255#255#255#255#255#229
+#229#229#255#161#161#161#255#131#131#131#255'BBBc'#161'UB'#255'BBB`BBBJBBB'
+#14'BBB'#0'BBB'#0'BBB'#0'BBB'#0#255#255#255#0#131#131#131#255#255#255#255#255
+#229#229#229#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB''BBB>BBB'#25'BB'
+'B'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229
+#255#161#161#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#6'BBB'#11'BBB'#2'B'
+'BB'#0'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255
+#161#161#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0
+'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161 +'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161
+#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#6'BBB'#11'BBB'#2'BBB'#0'BBB'#0 +#161#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0
+'BBB'#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161 +'BBB'#0'BBB'#0'BBB'#0#131#131#131#255#229#229#229#255#161#161#161#255#131#131
+#255#131#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB' +#131#255'BBBcBBBLBBB'#25'BBB'#3#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BB'
+#0'BBB'#0#131#131#131#255#255#255#255#255#229#229#229#255#161#161#161#255#131 +'B'#0'BBB'#0#131#131#131#255#229#229#229#255#131#131#131#255#131#131#131#255
+#131#131#255'BBBcBBBLBBB'#25'BBB'#3'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0 +'BBBcBBBLBBB'#25'BBB'#3#255#255#255#0#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'
+'BBB'#0#131#131#131#255#229#229#229#255#161#161#161#255#131#131#131#255'BBBc' +#0'BBB'#0'BBB'#0#131#131#131#255#131#131#131#255'BBB`BBBXBBBJBBB'#25'BBB'#3
+'BBBLBBB'#25'BBB'#3#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0 +'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#0#0#0#0#0#0#0
+#131#131#131#255#229#229#229#255#131#131#131#255#131#131#131#255'BBBcBBBLBBB' +#0#225#238#225#255#197#220#197#255#219#233#219#255#244#249#244#255#0#0#0#0#0
+#25'BBB'#3#255#255#255#0#255#255#255#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BB'
+'B'#0#131#131#131#255#131#131#131#255'BBB`BBBXBBBJBBB'#25'BBB'#3'BBB'#0'BBB'
+#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0'BBB'#0#0#0#0#0#0#0#0#0#225#238
+#225#255#197#220#197#255#219#233#219#255#244#249#244#255#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#174#213#176#255#214#248#225#255#207#250#221#255#181#248#204#255'x'#216#145 +#0#0#0#0#0#174#213#176#255#214#248#225#255#207#250#221#255#181#248#204#255'x'
+#255'@'#139'@'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#216#145#255'@'#139'@'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#202#225#202#255#197#247#213#255#156#244#185 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#202#225#202#255#197#247#213#255#156
+#255'}'#228#159#255#10'Y'#12#255#0#0#0#191#0#0#0#0#195#196#237#255#0#0#0#0#0 +#244#185#255'}'#228#159#255#10'Y'#12#255#0#0#0#191#0#0#0#0#195#196#237#255#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#149#196#149#255#187#243#206 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#149#196#149#255#187
+#255#157#240#186#255'k'#212#142#255'N'#154'h'#255#10'D'#10#255#0#0#0#191#0#0 +#243#206#255#157#240#186#255'k'#212#142#255'N'#154'h'#255#10'D'#10#255#0#0#0
+#0#0#221#221#246#255'RW'#199#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132 +#191#0#0#0#0#221#221#246#255'RW'#199#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#195#132#255#134#227#165#255'l'#224#146#255'K'#170'k'#255#1'/'#1#255'*Y:'#255 +#0#0#132#195#132#255#134#227#165#255'l'#224#146#255'K'#170'k'#255#1'/'#1#255
+'6U6'#255#0#0#0#191#0#0#0#0#0#0#0#0#177#180#234#255'=F'#197#255#0#0#0#0#0#0#0 +'*Y:'#255'6U6'#255#0#0#0#191#0#0#0#0#0#0#0#0#177#180#234#255'=F'#197#255#0#0
+#0#0#0#0#0#232#243#232#255#136#221#159#255'D'#207'r'#255'&'#142'I'#255'4;4' +#0#0#0#0#0#0#0#0#0#0#232#243#232#255#136#221#159#255'D'#207'r'#255'&'#142'I'
+#255'1:1'#255'!>+'#255'[r['#255#0#0#0#191#0#0#0#0#0#0#0#0#224#225#247#255'!6' +#255'4;4'#255'1:1'#255'!>+'#255'[r['#255#0#0#0#191#0#0#0#0#0#0#0#0#224#225
+#211#255#130#132#185#255#0#0#0#0#0#0#0#0'a'#177'a'#255'7'#198'^'#255'$'#153 +#247#255'!6'#211#255#130#132#185#255#0#0#0#0#0#0#0#0'a'#177'a'#255'7'#198'^'
+'J'#255'0I0'#255#0#0#0#191#0#0#0#191#9'@'#9#255#0#0#0#191#0#0#0#191#0#0#0#0#0 +#255'$'#153'J'#255'0I0'#255#0#0#0#191#0#0#0#191#9'@'#9#255#0#0#0#191#0#0#0
+#0#0#0#151#157#232#255#0#25#192#255#21#25'g'#255#0#0#0#0#0#0#0#0#27#142#27 +#191#0#0#0#0#0#0#0#0#151#157#232#255#0#25#192#255#21#25'g'#255#0#0#0#0#0#0#0
+#255#22#139'.'#255';^;'#255#0#0#0#191#0#0#0#191#0#0#0#0#0#0#0#0'x'#135#241 +#0#27#142#27#255#22#139'.'#255';^;'#255#0#0#0#191#0#0#0#191#0#0#0#0#0#0#0#0
+#255#0#0#0#0#0#0#0#0#185#191#246#255#0','#241#255#0#20'}'#255#17#20'4'#255#0 +'x'#135#241#255#0#0#0#0#0#0#0#0#185#191#246#255#0','#241#255#0#20'}'#255#17
+#0#0#0#0#0#0#0'd'#140'd'#255#21'W"'#255'?D?'#255#0#0#0#191#0#0#0#0#0#0#0#0 +#20'4'#255#0#0#0#0#0#0#0#0'd'#140'd'#255#21'W"'#255'?D?'#255#0#0#0#191#0#0#0
+#194#201#249#255#161#189#254#255#235#237#253#255#233#235#253#255'3d'#254#255 +#0#0#0#0#0#194#201#249#255#161#189#254#255#235#237#253#255#233#235#253#255'3'
+#2' '#147#255#0#11'<'#255'99?'#255#0#0#0#0#0#0#0#0#0#0#0#0#2'.'#3#255'$5$' +'d'#254#255#2' '#147#255#0#11'<'#255'99?'#255#0#0#0#0#0#0#0#0#0#0#0#0#2'.'#3
+#255#0#0#0#191#0#0#0#0#0#0#0#0#133#151#250#255#142#182#255#255'hz'#238#255'p' +#255'$5$'#255#0#0#0#191#0#0#0#0#0#0#0#0#133#151#250#255#142#182#255#255'hz'
+#155#251#255#17'5'#156#255#3#18'A'#255#6#10'3'#255#0#0#0#191#0#0#0#0#0#0#0#0 +#238#255'p'#155#251#255#17'5'#156#255#3#18'A'#255#6#10'3'#255#0#0#0#191#0#0#0
+#0#0#0#0#0#0#0#0#2''''#2#255'DLD'#255#0#0#0#0#0#0#0#0#16'2'#251#255'r'#178 +#0#0#0#0#0#0#0#0#0#0#0#0#0#2''''#2#255'DLD'#255#0#0#0#0#0#0#0#0#16'2'#251#255
+#255#255'c'#161#245#255'6\'#154#255#19'"A'#255#5#11'7'#255#0#0#0#191#0#0#0 +'r'#178#255#255'c'#161#245#255'6\'#154#255#19'"A'#255#5#11'7'#255#0#0#0#191#0
+#191#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'=Q='#255#0#0#0#191#0#0#0#0#9'2' +#0#0#191#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'=Q='#255#0#0#0#191#0#0#0#0#9
+#181#255'S~'#161#255'5Rq'#255#26'+A'#255#23#28';'#255#0#0#0#191#0#0#0#191#0#0 +'2'#181#255'S~'#161#255'5Rq'#255#26'+A'#255#23#28';'#255#0#0#0#191#0#0#0#191
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#191#0#0#0#0#23'$e' +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#191#0#0#0#0#23
+#255#30'/A'#255'(6A'#255#30'/A'#255#20'$A'#255#1#9'7'#255#0#0#0#0#0#0#0#0#0#0 +'$e'#255#30'/A'#255'(6A'#255#30'/A'#255#20'$A'#255#1#9'7'#255#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#191'::@'#255'%(='#255#6#13'8'#255'%(='#255#0#0#0#191#0#0#0#0#0#0#0#0#0#0#0#0 +#0#191'::@'#255'%(='#255#6#13'8'#255'%(='#255#0#0#0#191#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
@ -1408,8 +1409,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#167#128#195'l'#179#146#255#168#213#195#255#197#230#219#255'q'#183#151#255 +#167#128#195'l'#179#146#255#168#213#195#255#197#230#219#255'q'#183#151#255
+#198#230#220#255#169#214#196#255'o'#181#148#255'V'#167#128#198'V'#167#128#30 +#198#230#220#255#169#214#196#255'o'#181#148#255'V'#167#128#198'V'#167#128#30
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'R'#162'}'#27'S'#163 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'R'#162'}'#27'S'#163
+'~'#228#143#198#174#255#200#232#223#255#223#242#236#255#249#253#251#255'w' ,'~'#228#143#198#174#255#200#232#223#255#223#242#236#255#249#253#251#255'w'
,#184#153#255#248#252#251#255#220#241#235#255#199#231#222#255#147#200#178#255 +#184#153#255#248#252#251#255#220#241#235#255#199#231#222#255#147#200#178#255
+'U'#164#128#232'R'#162'}'#30#255#255#255#0#255#255#255#0#255#255#255#0'M'#157 +'U'#164#128#232'R'#162'}'#30#255#255#255#0#255#255#255#0#255#255#255#0'M'#157
+'x'#192#140#195#171#255#195#230#220#255#245#251#249#255#197#230#220#255#157 +'x'#192#140#195#171#255#195#230#220#255#245#251#249#255#197#230#220#255#157
+#213#197#255'\'#170#135#255#159#214#197#255#201#232#223#255#244#250#249#255 +#213#197#255'\'#170#135#255#159#214#197#255#201#232#223#255#244#250#249#255
@ -1472,8 +1473,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#221#255#225#205#180#255#177#141']'#191#255#255#255#0#255#255#255#0#255#255 +#221#255#225#205#180#255#177#141']'#191#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#3#13#140#31#27'&'#167#153'*4'#186#204#17#28#157#137#187#152'i'#204#240#224 +#3#13#140#31#27'&'#167#153'*4'#186#204#17#28#157#137#187#152'i'#204#240#224
+#208#255#183#145'_'#197#143']'#20#11#255#255#255#0#255#255#255#0#255#255#255 ,#208#255#183#145'_'#197#143']'#20#11#255#255#255#0#255#255#255#0#255#255#255
,#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31',5' +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#3#13#140#31',5'
+#185#215'<F'#207#255'3>'#202#242'?L'#215#255#216#188#154#255#246#234#225#255 +#185#215'<F'#207#255'3>'#202#242'?L'#215#255#216#188#154#255#246#234#225#255
+#187#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255 +#187#146'Z'#191#148'b'#24';'#145'a'#26#1#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8
@ -1536,8 +1537,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#238#238#0#238#238#238#0#238#238#238#0#153'nL'#255#171'qC'#255#172'rD'#255 +#238#238#0#238#238#238#0#238#238#238#0#153'nL'#255#171'qC'#255#172'rD'#255
+#153'nL'#255#251#227#188#0#251#227#188#0#153'nL'#255#171'qC'#255#172'rD'#255 +#153'nL'#255#251#227#188#0#251#227#188#0#153'nL'#255#171'qC'#255#172'rD'#255
+#153'nL'#255#0#0#0#0#0#0#0#0#0#0#0#0#153'nL'#0#153'nL'#0#153'nL'#0#162'f7' +#153'nL'#255#0#0#0#0#0#0#0#0#0#0#0#0#153'nL'#0#153'nL'#0#153'nL'#0#162'f7'
+#255#220#191#164#255#223#198#175#255#162'f7'#255#153'nL'#0#153'nL'#0#162'f7' ,#255#220#191#164#255#223#198#175#255#162'f7'#255#153'nL'#0#153'nL'#0#162'f7'
,#255#220#191#164#255#223#198#175#255#162'f7'#255#0#0#0#0#0#0#0#0#0#0#0#0#164 +#255#220#191#164#255#223#198#175#255#162'f7'#255#0#0#0#0#0#0#0#0#0#0#0#0#164
+'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164'e' +'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164'e'
+'4'#255#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164 +'4'#255#164'e4'#0#164'e4'#0#164'e4'#255#221#188#157#255#231#209#188#255#164
+'e4'#255#0#0#0#0#0#0#0#0#0#0#0#0#164'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255 +'e4'#255#0#0#0#0#0#0#0#0#0#0#0#0#164'e4'#0#164'e4'#0#164'e4'#0#164'e4'#255
@ -1600,8 +1601,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#22'|G'#255#136#156#146#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#22'|G'#255#136#156#146#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#4's:'#255#131#220#175#255#17#195'i'#255#26#204's'#255'i'#223#163#255 +#0#0#0#4's:'#255#131#220#175#255#17#195'i'#255#26#204's'#255'i'#223#163#255
+'Z'#194#141#255#19'vC'#255#158#167#163#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +'Z'#194#141#255#19'vC'#255#158#167#163#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9'w?'#255#131#219#174#255#31#198'q'#255'r'#222 ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#9'w?'#255#131#219#174#255#31#198'q'#255'r'#222
,#167#255'K'#178#127#255#23'tE'#255#168#173#170#255#0#0#0#0#0#0#0#0#0#0#0#0#0 +#167#255'K'#178#127#255#23'tE'#255#168#173#170#255#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255#130#216#172#255'v' +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255#130#216#172#255'v'
+#214#166#255'<'#157'j'#255'''tL'#255#172#174#173#255#0#0#0#0#0#0#0#0#0#0#0#0 +#214#166#255'<'#157'j'#255'''tL'#255#172#174#173#255#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255'z'#207#164 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#4's:'#255'z'#207#164
@ -1664,8 +1665,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#135#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15'6' +#135#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15'6'
+#157#188#1')'#154#255#3'0'#166#255#4'%'#145#254#5'('#137#255#1#23'u'#255#1'1' +#157#188#1')'#154#255#3'0'#166#255#4'%'#145#254#5'('#137#255#1#23'u'#255#1'1'
+#171#254#1''''#145#255#7#30'j'#171#0#0#0#0#3#27'm'#0#0#0#0#0#0#0#0#0#127'rf' +#171#254#1''''#145#255#7#30'j'#171#0#0#0#0#3#27'm'#0#0#0#0#0#0#0#0#0#127'rf'
+#0#0#0#0#0#0#9#154#1#3'2'#172#226#15':'#133#241#11'v'#234#255#11'~'#240#255 ,#0#0#0#0#0#0#9#154#1#3'2'#172#226#15':'#133#241#11'v'#234#255#11'~'#240#255
,#18'\'#171#255#9'q'#229#255#3'('#148#255#0','#162#254#0#25'm'#255#5#27'k'#221 +#18'\'#171#255#9'q'#229#255#3'('#148#255#0','#162#254#0#25'm'#255#5#27'k'#221
+#19'&f"'#0#0#0#0#0#0#0#0'sf['#6'uli'#29'gkz!'#8'A'#183#239#19'~'#236#255#12 +#19'&f"'#0#0#0#0#0#0#0#0'sf['#6'uli'#29'gkz!'#8'A'#183#239#19'~'#236#255#12
+#137#255#254#23'p'#207#255'*x'#200#255#10'{'#243#255#5'K'#186#255#0'+'#160 +#137#255#254#23'p'#207#255'*x'#200#255#10'{'#243#255#5'K'#186#255#0'+'#160
+#255#4'*'#131#255#0#25'm'#254#2#23'f'#255#17#29'_$tz'#137#6'pjd*xdW(Td'#130 +#255#4'*'#131#255#0#25'm'#254#2#23'f'#255#17#29'_$tz'#137#6'pjd*xdW(Td'#130
@ -1728,8 +1729,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#255#255#255#0#197#128'B'#247#248#241#232#255#254#229#213#255#253#229#211 +#0#255#255#255#0#197#128'B'#247#248#241#232#255#254#229#213#255#253#229#211
+#255#253#229#211#255#252#229#211#255#252#229#211#255#252#228#209#255#252#226 +#255#253#229#211#255#252#229#211#255#252#229#211#255#252#228#209#255#252#226
+#206#255#252#226#204#255#251#224#201#255#251#225#200#255#253#250#247#255#193 +#206#255#252#226#204#255#251#224#201#255#251#225#200#255#253#250#247#255#193
+'v;'#247#255#255#255#0#255#255#255#0#196'|@'#247#247#240#230#255#248#180'U' ,'v;'#247#255#255#255#0#255#255#255#0#196'|@'#247#247#240#230#255#248#180'U'
,#255#247#180'V'#255#247#181'T'#255#248#180'S'#255#248#178'S'#255#247#179'R' +#255#247#180'V'#255#247#181'T'#255#248#180'S'#255#248#178'S'#255#247#179'R'
+#255#247#179'R'#255#247#178'Q'#255#247#178'O'#255#247#178'O'#255#252#249#245 +#255#247#179'R'#255#247#178'Q'#255#247#178'O'#255#247#178'O'#255#252#249#245
+#255#191'o6'#247#255#255#255#0#255#255#255#0#193'x<'#247#247#237#227#255#253 +#255#191'o6'#247#255#255#255#0#255#255#255#0#193'x<'#247#247#237#227#255#253
+#194'n'#255#255#216#160#255#255#215#158#255#255#214#155#255#255#215#152#255 +#194'n'#255#255#216#160#255#255#215#158#255#255#214#155#255#255#215#152#255
@ -1792,8 +1793,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246 +#0'3'#142#217#251#220#240#250#255#152#225#246#255#149#224#246#255#146#223#246
+#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215 +#255#142#222#245#255#137#220#245#255#133#218#244#255#128#217#244#255'z'#215
+#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255 +#243#255't'#213#243#255'p'#211#242#255#194#234#248#255'5'#148#218#255#255#255
+#255#0#255#255#255#0','#134#216#209'-'#136#216#247'-'#135#216#247'-'#136#216 ,#255#0#255#255#255#0','#134#216#209'-'#136#216#247'-'#135#216#247'-'#136#216
,#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216 +#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
+#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216 +#247'-'#136#216#247'-'#136#216#247'-'#135#216#247'-'#136#216#247','#134#216
+#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152 +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152'* c'#152
+#255' c'#152#255' c'#152#255' c'#152#255' c'#152#255' c'#152#240#255#255#255 +#255' c'#152#255' c'#152#255' c'#152#255' c'#152#255' c'#152#240#255#255#255
@ -1856,8 +1857,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#250#255' '#227#250#255'1'#225#246#255#173#243#251#255#0#160#196#255#5'y}'#17 +#250#255' '#227#250#255'1'#225#246#255#173#243#251#255#0#160#196#255#5'y}'#17
+#0#0#0#0#255#255#255#0#0#0#0#0#5'y}2'#19#163#193#228'A'#206#227#254'i'#231 +#0#0#0#0#255#255#255#0#0#0#0#0#5'y}2'#19#163#193#228'A'#206#227#254'i'#231
+#246#255'6'#217#236#255#22#205#227#255')'#219#241#255'/'#224#245#255')'#219 +#246#255'6'#217#236#255#22#205#227#255')'#219#241#255'/'#224#245#255')'#219
+#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10 ,#241#255'2'#226#247#255'/'#224#246#255#173#243#251#255#0#160#196#255#5'y}'#10
,#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210 +#255#255#255#0#5'y}'#10#22#161#189#202'@'#205#225#255'6'#217#236#255#29#210
+#232#255#29#210#232#255#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226 +#232#255#29#210#232#255#29#210#232#255')'#219#241#255'/'#224#245#255'2'#226
+#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160 +#247#255'2'#226#247#255'2'#226#248#255'/'#224#246#255#173#243#251#255#0#160
+#196#255#255#255#255#0#21#160#188#203#27#171#197#248'j'#229#243#255#11#200 +#196#255#255#255#255#0#21#160#188#203#27#171#197#248'j'#229#243#255#11#200
@ -1920,8 +1921,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#11#0#0#0'#'#0#0#0'#'#0#0#0#11#0#0#0#0#0 +#0#0#0#0#0#0#0#0#255#255#255#0#0#0#0#11#0#0#0'#'#0#0#0'#'#0#0#0#11#0#0#0#0#0
+#0#0#11#0#0#0';'#0#0#159#255#0#0#0#167#0#0#0#131#0#0#0';'#0#0#0#11#0#0#0#0#0 +#0#0#11#0#0#0';'#0#0#159#255#0#0#0#167#0#0#0#131#0#0#0';'#0#0#0#11#0#0#0#0#0
+#0#0#0#0#0#0#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187 +#0#0#0#0#0#0#0#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187
+'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:' ,'k6'#254#187'k6'#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'
,#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209 +#255#187'k8'#239#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209
+#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245 +#255#247#224#209#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245
+#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251 +#240#255#250#240#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251
+#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6' +#241#235#255#248#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6'
@ -1984,8 +1985,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
+#255#255#255'UUUgQQQh'#253#253#253#255#252#252#252#255#252#252#252#255#252 +#255#255#255'UUUgQQQh'#253#253#253#255#252#252#252#255#252#252#252#255#252
+#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255 +#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255
+#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252 ,#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252#255#252#252#252
,#255#253#253#253#255'QQQhMMMj'#250#250#250#255#248#248#248#255#248#248#248 +#255#253#253#253#255'QQQhMMMj'#250#250#250#255#248#248#248#255#248#248#248
+#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248 +#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248
+#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248 +#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248#248#248#255#248
+#248#248#255#250#250#250#255'MMMjIIIl'#247#247#247#255#244#244#244#255#244 +#248#248#255#250#250#250#255'MMMjIIIl'#247#247#247#255#244#244#244#255#244
@ -2048,8 +2049,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255'888s222v'#234#234#234#255#226#226#226#255#226#226#226#255#226#226#226 +#255'888s222v'#234#234#234#255#226#226#226#255#226#226#226#255#226#226#226
+#255#226#226#226#255#226#226#226#255#226#226#226#255#226#226#226#255'[['#190 +#255#226#226#226#255#226#226#226#255#226#226#226#255#226#226#226#255'[['#190
+#255'--'#179#255'--'#179#255'--'#179#255'--'#179#255'//'#181#255#17#17#129 +#255'--'#179#255'--'#179#255'--'#179#255'--'#179#255'//'#181#255#17#17#129
+#200'''''''{'#235#235#235#255#231#231#231#255#231#231#231#255#231#231#231#255 ,#200'''''''{'#235#235#235#255#231#231#231#255#231#231#231#255#231#231#231#255
,#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255'//'#167#255 +#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255'//'#167#255
+'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255#5#5#139#229#13 +'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255'^^'#247#255#5#5#139#229#13
+#13#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16 +#13#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16
+#16#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's' +#16#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'
@ -2112,8 +2113,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#210#232#255'6'#217#236#255'@'#205#225#255#22#161#189#202#5'y}'#10#0#0#0#0#5 +#210#232#255'6'#217#236#255'@'#205#225#255#22#161#189#202#5'y}'#10#0#0#0#0#5
+'y~'#17#0#160#196#255'y'#237#251#255'2'#226#248#255','#223#244#255#4#192#214 +'y~'#17#0#160#196#255'y'#237#251#255'2'#226#248#255','#223#244#255#4#192#214
+#255#4#192#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29#210#232#255 +#255#4#192#214#255#4#192#214#255#29#210#232#255#29#210#232#255#29#210#232#255
+#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#0#0#0 ,#11#200#223#255'j'#229#243#255#27#171#197#248#21#160#188#203#0#0#0#0#0#0#0#0
,#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i'#234 +#5'y}'#17#0#160#196#255'v'#237#251#255#4#195#218#255'v'#237#251#255'i'#234
+#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10#200 +#249#255'i'#234#249#255'i'#234#249#255'i'#234#249#255#5#221#247#255#10#200
+#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#0#0#0#0#0#0#0#0 +#223#255#7#194#216#255'o'#220#235#255#27#163#191#244#0#0#0#0#0#0#0#0#0#0#0#0
+#5'y}'#17#0#160#196#255'v'#237#251#255'v'#237#251#255#0#160#196#255#0#160#196 +#5'y}'#17#0#160#196#255'v'#237#251#255'v'#237#251#255#0#160#196#255#0#160#196
@ -2176,8 +2177,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#23#0#0#0#12#0#0#0#2#255#255#255#0'TTT'#0'T' +#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#23#0#0#0#12#0#0#0#2#255#255#255#0'TTT'#0'T'
+'TT'#0'TTT'#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUYUUU"TTT'#0'RRR' +'TT'#0'TTT'#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUYUUU"TTT'#0'RRR'
+#0'RRR'#0'RRR['#198#198#198#212#219#219#219#255#214#214#214#255#209#209#209 +#0'RRR'#0'RRR['#198#198#198#212#219#219#219#255#214#214#214#255#209#209#209
+#255#203#204#204#255#199#199#199#255#198#196#196#255#200#197#197#255#206#198 ,#255#203#204#204#255#199#199#199#255#198#196#196#255#200#197#197#255#206#198
,#198#255#212#201#201#255#196#183#183#212'RRR[UUU'#0'TTT'#0'PPP'#0'PPPi'#187 +#198#255#212#201#201#255#196#183#183#212'RRR[UUU'#0'TTT'#0'PPP'#0'PPPi'#187
+#187#187#255#185#185#185#255#182#182#182#255#180#180#180#255#176#176#176#255 +#187#187#255#185#185#185#255#182#182#182#255#180#180#180#255#176#176#176#255
+#173#173#173#255#169#169#169#255#166#166#166#255#162#162#162#255#160#160#160 +#173#173#173#255#169#169#169#255#166#166#166#255#162#162#162#255#160#160#160
+#255#157#157#157#255#3#3#3'fUUU'#0'UUU'#0'UUU'#0'TTTg'#255#255#255#255#255 +#255#157#157#157#255#3#3#3'fUUU'#0'UUU'#0'UUU'#0'TTTg'#255#255#255#255#255
@ -2240,8 +2241,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#141'e'#255#243#205#176#255#255#255#255#255#227#199#179#255#255#255#255#255 +#141'e'#255#243#205#176#255#255#255#255#255#227#199#179#255#255#255#255#255
+#255#255#255#255#255#255#255#255#255#255#255#255#234#191#161#255#201#137'`' +#255#255#255#255#255#255#255#255#255#255#255#255#234#191#161#255#201#137'`'
+#255#255#255#255#0#255#255#255#0#196#129'T'#201#234#182#151#201#206#152's' +#255#255#255#255#0#255#255#255#0#196#129'T'#201#234#182#151#201#206#152's'
+#248#234#190#161#248#199#134'['#255#239#192#158#255#255#255#255#255#204#147 ,#248#234#190#161#248#199#134'['#255#239#192#158#255#255#255#255#255#204#147
,'n'#255#255#255#255#255#255#255#255#255#255#251#247#255#255#248#241#255#228 +'n'#255#255#255#255#255#255#255#255#255#255#251#247#255#255#248#241#255#228
+#175#140#255#199#138'a'#255#255#255#255#0#255#255#255#0#195#127'Q'#201#239 +#175#140#255#199#138'a'#255#255#255#255#0#255#255#255#0#195#127'Q'#201#239
+#182#154#201#204#150'o'#248#214#182#145#248#200#136']'#255#239#191#161#255 +#182#154#201#204#150'o'#248#214#182#145#248#200#136']'#255#239#191#161#255
+#253#252#250#255#254#252#251#255#254#253#253#255#254#253#252#255#253#251#250 +#253#252#250#255#254#252#251#255#254#253#253#255#254#253#252#255#253#251#250
@ -2304,8 +2305,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#145#255#255#247#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252 +#145#255#255#247#240#255#255#231#213#255#253#231#214#255#253#230#212#255#252
+#228#208#255#251#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254 +#228#208#255#251#227#203#255#250#220#194#255#254#243#232#255#204#134'V'#254
+#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE'#212#200'uE'#212#199'uE'#212#202 +#199'yJ'#185#200'yK'#206#200'uE'#221#199'uE'#212#200'uE'#212#199'uE'#212#202
+#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255 ,#132'R'#255#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255
,#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U' +#255#231#215#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'
+#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0 +#254#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255 +#255#255#255#0#204#131'R'#251#251#245#238#255#255#233#217#255#255#234#219#255
+#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#251#246#239 +#255#233#217#255#255#231#215#255#255#229#210#255#255#226#203#255#251#246#239
@ -2368,8 +2369,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'ttk'#255'ttk'#255'ttk'#255'ttk'#255'ff]'#255'ZZP'#199'ZZP<ZZP'#204#191#191 +'ttk'#255'ttk'#255'ttk'#255'ttk'#255'ff]'#255'ZZP'#199'ZZP<ZZP'#204#191#191
+#184#255#244#244#241#255#246#246#244#255#246#246#244#255#246#246#244#255#246 +#184#255#244#244#241#255#246#246#244#255#246#246#244#255#246#246#244#255#246
+#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255 +#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255#246#246#244#255
+#246#246#244#255#246#246#244#255#244#244#241#255#191#191#185#255'ZZP'#204'bb' ,#246#246#244#255#246#246#244#255#244#244#241#255#191#191#185#255'ZZP'#204'bb'
,'X'#255#230#230#224#255#227#227#218#255#225#225#216#255#225#225#216#255#221 +'X'#255#230#230#224#255#227#227#218#255#225#225#216#255#225#225#216#255#221
+#221#212#255#221#221#212#255#225#225#216#255#225#225#216#255#221#221#212#255 +#221#212#255#221#221#212#255#225#225#216#255#225#225#216#255#221#221#212#255
+#221#221#212#255#225#225#216#255#225#225#216#255#227#227#218#255#231#231#225 +#221#221#212#255#225#225#216#255#225#225#216#255#227#227#218#255#231#231#225
+#255'ddZ'#255'hh^'#255#218#218#208#255#217#217#207#255#217#217#207#255#213 +#255'ddZ'#255'hh^'#255#218#218#208#255#217#217#207#255#217#217#207#255#213
@ -2432,8 +2433,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159#159 +#205#150#255#137#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159#159
+#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'#196 +#159#255'Z'#142#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'#196
+#237#255'K'#136#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135 +#237#255'K'#136#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135
+#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255 ,#255'x'#195#129#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255
,'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255 +'T'#127'W'#255'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255
+'K'#212#255#255'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132 +'K'#212#255#255'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132
+#200#141#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?' +#200#141#255#128#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'
+#255#161#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209 +#255#161#161#161#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209
@ -2496,8 +2497,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1'0'#2 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1'0'#2
+#2#2#239#21#21#21#255':::'#255'```'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#2#2#239#21#21#21#255':::'#255'```'#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1' '#2#2#2#207 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1' '#2#2#2#207
+#20#20#20#255'999'#207#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255 ,#20#20#20#255'999'#207#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
,#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUU' +#255#0#255#255#255#0'UUU"UUUYUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUUfUUU'
+'fUUUYUUU"RRR['#198#198#198#212#220#220#220#255#216#217#217#255#213#213#213 +'fUUUYUUU"RRR['#198#198#198#212#220#220#220#255#216#217#217#255#213#213#213
@ -2560,8 +2561,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#212#151#0#0#0#0#0#0#0#0#0#5#20#147#255#6#21#146#255#7#22#147#255#6#19#151 +#212#151#0#0#0#0#0#0#0#0#0#5#20#147#255#6#21#146#255#7#22#147#255#6#19#151
+#255#6#18#154#255#6#18#151#255#3#18#144#255#2#22#141#255#1#23#135#255#0#17'|' +#255#6#18#154#255#6#18#151#255#3#18#144#255#2#22#141#255#1#23#135#255#0#17'|'
+#255#8#24'y'#255#3#15'f'#255#9#17'a'#255#15#21']'#255#27#28'T'#255'^Qh'#170#0 +#255#8#24'y'#255#3#15'f'#255#9#17'a'#255#15#21']'#255#27#28'T'#255'^Qh'#170#0
+#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252#212#151#2 ,#0#0#0#0#0#0#0#188#173#160#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#252#212#151#2
,#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255#5#17#152 +#251#211#150#0#6#21#148#255#5#21#145#255#5#21#146#255#6#18#151#255#5#17#152
+#255#4#17#150#255#5#20#145#255#4#26#138#255#14'+'#142#255#2#25'w'#255#1#20'k' +#255#4#17#150#255#5#20#145#255#4#26#138#255#14'+'#142#255#2#25'w'#255#1#20'k'
+#255#2#17'a'#255#8#18'\'#255#14#23']'#255#21'!_'#255'33Q'#230#255#255#255#0#0 +#255#2#17'a'#255#8#18'\'#255#14#23']'#255#21'!_'#255'33Q'#230#255#255#255#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8#23#150#255#4 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#8#23#150#255#4
@ -2624,8 +2625,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#14#27#148#255#13#22#140#255#15#23#142#254#12#24#146#255#27#30#140#255'4' +#255#14#27#148#255#13#22#140#255#15#23#142#254#12#24#146#255#27#30#140#255'4'
+'(s'#227'bF]'#28#0#0#0#0#0#0#0#0#0#0#0#0't}~'#0#0#0#0#0#0#0#0#0#239#171'P'#1 +'(s'#227'bF]'#28#0#0#0#0#0#0#0#0#0#0#0#0't}~'#0#0#0#0#0#0#0#0#0#239#171'P'#1
+#233#168'L'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#158'ma'#0#0#0#255#0#0#0 +#233#168'L'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#158'ma'#0#0#0#255#0#0#0
+#0#0'?!S#-!o}''&s'#190'/''{'#221'2'#31'z'#231'/$t'#210'<6c'#141'{jW'#25#0#0#0 ,#0#0'?!S#-!o}''&s'#190'/''{'#221'2'#31'z'#231'/$t'#210'<6c'#141'{jW'#25#0#0#0
,#0'jM_'#0#0#0#0#0#243#174'Q'#0#0#0#0#0#0#0#0#0#241#173'Q'#0#0#0#0#0#0#0#0#0#0 +#0'jM_'#0#0#0#0#0#243#174'Q'#0#0#0#0#0#0#0#0#0#241#173'Q'#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132'Za'#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#132'Za'#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#187'tV'#14#145'\Z'#29#255#243'L'#6#0#0#0#0#0#0#0#0#146'xp'#0#243 +#0#0#0#0#0#0#187'tV'#14#145'\Z'#29#255#243'L'#6#0#0#0#0#0#0#0#0#146'xp'#0#243
+#174'R'#0#243#174'R'#0#0#0#0#0#0#0#0#0#0#0#0#0#242#174'R'#0#0#0#0#0#241#173 +#174'R'#0#243#174'R'#0#0#0#0#0#0#0#0#0#0#0#0#0#242#174'R'#0#0#0#0#0#241#173
@ -2688,8 +2689,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255#170#209#231#255 +#154#154#255#155#155#155#255#155#155#155#255'o'#157#211#255#170#209#231#255
+#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193 +#171#209#231#255#152#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193
+#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255 +#234#255#255#255#0#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255
+'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171 ,'www'#255'uuu'#255'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171
,#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255 +#211#232#255#169#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219 +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219
+'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0 +'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0
@ -2752,8 +2753,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255 +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26 +#255#0#0#0#0#9#0#0#0#22#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26
+#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0#0#0#9#13#13 ,#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#26#0#0#0#22#0#0#0#9#13#13
,#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16 +#13'g'#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16#16#133#16#16
+#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'#231 +#16#133#16#16#16#133#16#16#16#133#4#4'['#207#2#2's'#231#2#2's'#231#2#2's'#231
+#2#2's'#231#2#2's'#231#2#2'X'#176'''''''{'#235#235#235#255#231#231#231#255 +#2#2's'#231#2#2's'#231#2#2'X'#176'''''''{'#235#235#235#255#231#231#231#255
+#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231 +#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231#255#231#231#231
@ -2816,8 +2817,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#9'OnExecute'#7#18'ActionPauseExecute'#0#0#7'TAction'#16'ActionStopScript'#7 +#9'OnExecute'#7#18'ActionPauseExecute'#0#0#7'TAction'#16'ActionStopScript'#7
+'Caption'#6#5'&Stop'#9'OnExecute'#7#17'ActionStopExecute'#8'ShortCut'#2'q'#0 +'Caption'#6#5'&Stop'#9'OnExecute'#7#17'ActionStopExecute'#8'ShortCut'#2'q'#0
+#0#7'TAction'#13'ActionSaveAll'#7'Caption'#6#8'Save All'#10'ImageIndex'#2#21 +#0#7'TAction'#13'ActionSaveAll'#7'Caption'#6#8'Save All'#10'ImageIndex'#2#21
+#9'OnExecute'#7#20'ActionSaveAllExecute'#8'ShortCut'#3'S`'#0#0#7'TAction'#16 ,#9'OnExecute'#7#20'ActionSaveAllExecute'#8'ShortCut'#3'S`'#0#0#7'TAction'#16
,'ActionClearDebug'#7'Caption'#6#5'Clear'#10'ImageIndex'#2#4#9'OnExecute'#7#23 +'ActionClearDebug'#7'Caption'#6#5'Clear'#10'ImageIndex'#2#4#9'OnExecute'#7#23
+'ActionClearDebugExecute'#0#0#7'TAction'#15'ActionFindStart'#7'Caption'#6#9 +'ActionClearDebugExecute'#0#0#7'TAction'#15'ActionFindStart'#7'Caption'#6#9
+'&Find ...'#10'ImageIndex'#2#26#9'OnExecute'#7#22'ActionFindstartExecute'#8 +'&Find ...'#10'ImageIndex'#2#26#9'OnExecute'#7#22'ActionFindstartExecute'#8
+'ShortCut'#3'F@'#0#0#7'TAction'#9'ActionCut'#7'Caption'#6#4'Cu&t'#10'ImageIn' +'ShortCut'#3'F@'#0#0#7'TAction'#9'ActionCut'#7'Caption'#6#4'Cu&t'#10'ImageIn'
@ -2880,8 +2881,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'%'#228#251#255#0#160#196#255#0#160#196#255#19#161#190#231#21#159#187#207#27 +'%'#228#251#255#0#160#196#255#0#160#196#255#19#161#190#231#21#159#187#207#27
+#161#187#164#6'z|'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#161#187#164#6'z|'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#5'y}'#17#0#160#196#255#173#243#251#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0 +#5'y}'#17#0#160#196#255#173#243#251#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
,#0#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#157#191#20#0#160#196#255#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#160#196#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionUndoExecute'#0#0#9'TMenuItem'#13 +#0#0#0#0#0#0#0#0#0#0#0#7'OnClick'#7#17'ActionUndoExecute'#0#0#9'TMenuItem'#13
@ -2944,8 +2945,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2<'#195#236'#.'#173#175 +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'2<'#195#236'#.'#173#175
+#255#255#255#0#26'%'#168#153'BP'#210#255#203#163'u'#254'AO'#214#255#22'!'#163 +#255#255#255#0#26'%'#168#153'BP'#210#255#203#163'u'#254'AO'#214#255#22'!'#163
+#157'/9'#192#212'.8'#190#223#2#13#139#10#255#255#255#0#255#255#255#0#255#255 +#157'/9'#192#212'.8'#190#223#2#13#139#10#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8#18#144':'#7#17 ,#255#0#255#255#255#0#255#255#255#0#29'('#169#156';F'#204#255#8#18#144':'#7#17
,#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255':C'#209#255#15 +#144'S;H'#212#255#219#189#156#255#238#204#166#255'@L'#222#255':C'#209#255#15
+#25#152'i'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255 +#25#152'i'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#3#13#140#31',5'#185#215'<F'#207#255'3>'#202#242'?L'#215 +#255#0#255#255#255#0#3#13#140#31',5'#185#215'<F'#207#255'3>'#202#242'?L'#215
+#255#216#188#154#255#246#234#225#255#187#146'Z'#191#148'b'#24';'#145'a'#26#1 +#255#216#188#154#255#246#234#225#255#187#146'Z'#191#148'b'#24';'#145'a'#26#1
@ -3008,8 +3009,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#135'X'#254#202#132'R'#219#255#247#241#222#255#233#217#222#255#234#219#222 +#135'X'#254#202#132'R'#219#255#247#241#222#255#233#217#222#255#234#219#222
+#255#233#217#222#255#231#215#222#228#187#146#255#254#246#240#255#252#226#205 +#255#233#217#222#255#231#215#222#228#187#146#255#254#246#240#255#252#226#205
+#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243 +#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221#255#250#243
+#235#255#251#248#243#255#202#131'S'#254#203#133'S'#219#255#247#240#222#255 ,#235#255#251#248#243#255#202#131'S'#254#203#133'S'#219#255#247#240#222#255
,#231#213#222#253#231#214#222#253#230#212#222#252#228#208#222#228#187#147#255 +#231#213#222#253#231#214#222#253#230#212#222#252#228#208#222#228#187#147#255
+#254#245#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180 +#254#245#237#255#252#222#197#255#251#224#199#255#249#220#194#255#245#211#180
+#255#254#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#203#134'T' +#255#254#249#243#255#250#226#196#255#236#193#147#255#195'}H'#147#203#134'T'
+#219#255#247#242#222#254#231#213#222#254#231#213#222#253#229#209#222#250#224 +#219#255#247#242#222#254#231#213#222#254#231#213#222#253#229#209#222#250#224
@ -3072,8 +3073,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152#255 +#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152#255
+#127#191#228#255'i'#178#222#255'J'#155#218#255'D'#151#220#255'C'#150#220#255 +#127#191#228#255'i'#178#222#255'J'#155#218#255'D'#151#220#255'C'#150#220#255
+'B'#150#220#255'B'#149#220#255'A'#149#219#255'Q'#158#214#255'l'#178#222#255 +'B'#150#220#255'B'#149#220#255'A'#149#219#255'Q'#158#214#255'l'#178#222#255
+' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152 ,' c'#152#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'#152
,#224'q'#179#219#254'~'#191#228#255'N'#157#223#255#181#238#253#255'u'#212#240 +#224'q'#179#219#254'~'#191#228#255'N'#157#223#255#181#238#253#255'u'#212#240
+#255'u'#212#240#255#181#238#253#255'K'#155#222#255'n'#180#224#255'm'#179#223 +#255'u'#212#240#255#181#238#253#255'K'#155#222#255'n'#180#224#255'm'#179#223
+#249' c'#152#243#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c' +#249' c'#152#243#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0' c'
+#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239#254#255#128#219#243#255#128 +#152'2 c'#152#178' c'#152#255'7u'#164#255#182#239#254#255#128#219#243#255#128
@ -3136,8 +3137,8 @@ LazarusResources.Add('TForm1','FORMDATA',[
+'Action'#7#13'ActionReplace'#7'Caption'#6#7'Replace'#7'OnClick'#7#20'ActionR' +'Action'#7#13'ActionReplace'#7'Caption'#6#7'Replace'#7'OnClick'#7#20'ActionR'
+'eplaceExecute'#0#0#0#14'TReplaceDialog'#10'dlgReplace'#7'Options'#11#6'frDo' +'eplaceExecute'#0#0#0#14'TReplaceDialog'#10'dlgReplace'#7'Options'#11#6'frDo'
+'wn'#10'frFindNext'#12'frHideUpDown'#0#6'OnFind'#7#14'dlgReplaceFind'#9'OnRe' +'wn'#10'frFindNext'#12'frHideUpDown'#0#6'OnFind'#7#14'dlgReplaceFind'#9'OnRe'
+'place'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TTimer'#11 ,'place'#7#17'dlgReplaceReplace'#4'left'#3'`'#2#3'top'#2'h'#0#0#6'TTimer'#11
,'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0#6'TTime' +'UpdateTimer'#8'Interval'#3#16''''#4'left'#3'`'#2#3'top'#3#144#0#0#0#6'TTime'
+'r'#10'MouseTimer'#8'Interval'#2'd'#7'OnTimer'#7#17'ChangeMouseStatus'#4'lef' +'r'#10'MouseTimer'#8'Interval'#2'd'#7'OnTimer'#7#17'ChangeMouseStatus'#4'lef'
+'t'#3#192#1#3'top'#3#200#0#0#0#6'TTimer'#9'NewsTimer'#8'Interval'#3#244#1#7 +'t'#3#192#1#3'top'#3#200#0#0#0#6'TTimer'#9'NewsTimer'#8'Interval'#3#244#1#7
+'OnTimer'#7#14'NewsTimerTimer'#4'left'#3#232#1#3'top'#3#200#0#0#0#0 +'OnTimer'#7#14'NewsTimerTimer'#4'left'#3#232#1#3'top'#3#200#0#0#0#0

View File

@ -41,7 +41,7 @@ uses
SynExportHTML, SynEditKeyCmds, SynEditHighlighter, SynExportHTML, SynEditKeyCmds, SynEditHighlighter,
SynEditMarkupHighAll, LMessages, Buttons, SynEditMarkupHighAll, LMessages, Buttons,
stringutil,mufasatypesutil,mufasabase, stringutil,mufasatypesutil,mufasabase,
about, framefunctionlist, ocr, updateform, simbasettings, pseventextension, about, framefunctionlist, ocr, updateform, simbasettings, psextension, virtualextension,
extensionmanager; extensionmanager;
const const
@ -102,6 +102,7 @@ type
MenuFile: TMenuItem; MenuFile: TMenuItem;
MenuEdit: TMenuItem; MenuEdit: TMenuItem;
MenuHelp: TMenuItem; MenuHelp: TMenuItem;
MenuItemExtensions: TMenuItem;
MenuItemSettingsButton: TMenuItem; MenuItemSettingsButton: TMenuItem;
MenuItemDivider10: TMenuItem; MenuItemDivider10: TMenuItem;
MenuTools: TMenuItem; MenuTools: TMenuItem;
@ -251,6 +252,7 @@ type
procedure FunctionListChange(Sender: TObject; Node: TTreeNode); procedure FunctionListChange(Sender: TObject; Node: TTreeNode);
procedure FunctionListEnter(Sender: TObject); procedure FunctionListEnter(Sender: TObject);
procedure FunctionListExit(Sender: TObject); procedure FunctionListExit(Sender: TObject);
procedure MenuItemExtensionsClick(Sender: TObject);
procedure MenuItemHandbookClick(Sender: TObject); procedure MenuItemHandbookClick(Sender: TObject);
procedure MenuItemColourHistoryClick(Sender: TObject); procedure MenuItemColourHistoryClick(Sender: TObject);
procedure dlgReplaceFind(Sender: TObject); procedure dlgReplaceFind(Sender: TObject);
@ -397,6 +399,7 @@ uses
lclintf, lclintf,
syncobjs, // for the critical sections syncobjs, // for the critical sections
debugimage, debugimage,
extensionmanagergui,
colourhistory, colourhistory,
math; math;
@ -902,7 +905,7 @@ end;
procedure TForm1.CreateDefaultEnvironment; procedure TForm1.CreateDefaultEnvironment;
var var
IncludePath,FontPath,PluginsPath : string; IncludePath,FontPath,PluginsPath,extensionsPath : string;
begin begin
CreateSetting('Settings/Updater/CheckForUpdates','True'); CreateSetting('Settings/Updater/CheckForUpdates','True');
CreateSetting('Settings/Updater/CheckEveryXMinutes','30'); CreateSetting('Settings/Updater/CheckEveryXMinutes','30');
@ -949,6 +952,7 @@ begin
includePath:= CreateSetting('Settings/Includes/Path', ExpandFileName(MainDir+DS+'Includes' + DS)); includePath:= CreateSetting('Settings/Includes/Path', ExpandFileName(MainDir+DS+'Includes' + DS));
fontPath := CreateSetting('Settings/Fonts/Path', ExpandFileName(MainDir+DS+ 'Fonts' + DS)); fontPath := CreateSetting('Settings/Fonts/Path', ExpandFileName(MainDir+DS+ 'Fonts' + DS));
PluginsPath := CreateSetting('Settings/Plugins/Path', ExpandFileName(MainDir+ DS+ 'Plugins' + DS)); PluginsPath := CreateSetting('Settings/Plugins/Path', ExpandFileName(MainDir+ DS+ 'Plugins' + DS));
extensionsPath := CreateSetting('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS));
CreateSetting('LastConfig/MainForm/Position',''); CreateSetting('LastConfig/MainForm/Position','');
CreateSetting('LastConfig/MainForm/State','Normal'); CreateSetting('LastConfig/MainForm/State','Normal');
{$ifdef MSWindows} {$ifdef MSWindows}
@ -961,15 +965,18 @@ begin
CreateDir(FontPath); CreateDir(FontPath);
if not DirectoryExists(PluginsPath) then if not DirectoryExists(PluginsPath) then
CreateDir(PluginsPath); CreateDir(PluginsPath);
if not DirectoryExists(extensionsPath) then
CreateDir(extensionsPath);
SettingsForm.SettingsTreeView.Items.GetFirstNode.Expand(false); SettingsForm.SettingsTreeView.Items.GetFirstNode.Expand(false);
SettingsForm.SaveCurrent; SettingsForm.SaveCurrent;
LoadFormSettings;
end; end;
procedure TForm1.LoadFormSettings; procedure TForm1.LoadFormSettings;
var var
str,str2 : string; str,str2 : string;
Data : TStringArray; Data : TStringArray;
i : integer; i,ii : integer;
begin begin
str := LoadSettingDef('LastConfig/MainForm/Position',''); str := LoadSettingDef('LastConfig/MainForm/Position','');
if str <> '' then if str <> '' then
@ -1009,6 +1016,18 @@ begin
else else
ShowConsole(false); ShowConsole(false);
{$endif} {$endif}
str := LoadSettingDef('Settings/Extensions/Path',ExpandFileName(MainDir +DS + 'Extensions' + DS));
str2 := LoadSettingDef('Settings/Extensions/FileExtension','sex');
ExtManager.LoadPSExtensionsDir(str,str2);
str := LoadSettingDef('LastConfig/Extensions/EnabledExts','');
if str <> '' then
begin
data := Explode(';',str);
for i := 0 to high(data) do
for ii := 0 to ExtManager.Extensions.Count - 1 do
if data[i] = TVirtualSimbaExtension(ExtManager.Extensions[ii]).Filename then
TVirtualSimbaExtension(ExtManager.Extensions[ii]).Enabled := true;
end;
end; end;
procedure TForm1.SaveFormSettings; procedure TForm1.SaveFormSettings;
@ -1032,7 +1051,8 @@ begin
for i := 0 to high(data) do //First entry should be the last-opened for i := 0 to high(data) do //First entry should be the last-opened
data[high(data) - i] := RecentFiles[i]; data[high(data) - i] := RecentFiles[i];
SetKeyValue('LastConfig/MainForm/RecentFiles',implode(';',data)); SetKeyValue('LastConfig/MainForm/RecentFiles',implode(';',data));
end; end else
SetKeyValue('LastConfig/MainForm/RecentFiles','');
if MenuItemFunctionList.Checked then if MenuItemFunctionList.Checked then
SetKeyValue('LastConfig/MainForm/FunctionListShown','True') SetKeyValue('LastConfig/MainForm/FunctionListShown','True')
else else
@ -1043,6 +1063,18 @@ begin
else else
SetKeyValue('LastConfig/Console/Visible','false'); SetKeyValue('LastConfig/Console/Visible','false');
{$endif} {$endif}
if ExtManager.Extensions.Count > 0 then
begin
SetLength(data,0);
for i := 0 to ExtManager.Extensions.Count-1 do
if TVirtualSimbaExtension(ExtManager.Extensions[i]).Enabled then
begin
setlength(data,length(data)+1);
data[high(data)] := TVirtualSimbaExtension(ExtManager.Extensions[i]).FileName;
end;
SetKeyValue('LastConfig/Extensions/EnabledExts',Implode(';',data));
end else
SetKeyValue('LastConfig/Extensions/EnabledExts','');
SaveToXML(SimbaSettingsFile); SaveToXML(SimbaSettingsFile);
end; end;
end; end;
@ -1572,6 +1604,11 @@ begin
// StatusBar.Panels[2].Text:= ''; // StatusBar.Panels[2].Text:= '';
end; end;
procedure TForm1.MenuItemExtensionsClick(Sender: TObject);
begin
ExtensionsForm.Show;
end;
procedure TForm1.MenuItemHandbookClick(Sender: TObject); procedure TForm1.MenuItemHandbookClick(Sender: TObject);
begin begin
OpenURL('http://vila.villavu.com/mufasa/mufasa_ps_handbook/'); OpenURL('http://vila.villavu.com/mufasa/mufasa_ps_handbook/');
@ -1667,6 +1704,8 @@ begin
TT_Console.Visible:= false; TT_Console.Visible:= false;
{$endif} {$endif}
InitmDebug; InitmDebug;
ExtManager := TExtensionManager.Create;
ExtManager.StartDisabled:= True;
if FileExists(SimbaSettingsFile) then if FileExists(SimbaSettingsFile) then
begin begin
Application.CreateForm(TSettingsForm,SettingsForm); Application.CreateForm(TSettingsForm,SettingsForm);
@ -1704,6 +1743,7 @@ begin
FirstRun := true;//Our next run is the first run. FirstRun := true;//Our next run is the first run.
HandleParameters; HandleParameters;
TT_Update.Visible:= false; TT_Update.Visible:= false;
end; end;
procedure TForm1.FormDestroy(Sender: TObject); procedure TForm1.FormDestroy(Sender: TObject);
@ -1722,6 +1762,7 @@ begin
SetLength(DebugStream, 0); SetLength(DebugStream, 0);
RecentFiles.Free; RecentFiles.Free;
DebugCriticalSection.Free; DebugCriticalSection.Free;
ExtManager.free;
{$ifdef MSWindows} {$ifdef MSWindows}
if not UnRegisterHotkey(Self.Handle,0) then if not UnRegisterHotkey(Self.Handle,0) then
mDebugLn('Unable to unregister ctrl + alt + s as global hotkey'); mDebugLn('Unable to unregister ctrl + alt + s as global hotkey');

View File

@ -8,18 +8,27 @@ uses
Classes, SysUtils; Classes, SysUtils;
type type
{ TVirtualSimbaExtension }
TVirtualSimbaExtension = class(TObject) TVirtualSimbaExtension = class(TObject)
protected
FName: String;
FVersion : string;
FFilename : string;
FEnabled : boolean;
procedure SetEnabled(bool : boolean); virtual;
public public
OnChange : TNotifyEvent;
{ Must be implemented } { Must be implemented }
function HookExists(HookName: String): Boolean; virtual; abstract; function HookExists(HookName: String): Boolean; virtual; abstract;
{ No Custom Arguments just yet... } { No Custom Arguments just yet... }
function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant): Integer; virtual; abstract; function ExecuteHook(HookName: String; fArgs: Array of Variant; out OutVariant : variant): Integer; virtual; abstract;
private
FName: String;
property GetName: String read Fname;
function GetName : string;
function GetVersion : String;
property Filename : string read FFilename write FFilename;
property Enabled : boolean read FEnabled write SetEnabled;
end; end;
@ -33,7 +42,9 @@ type
ArgumentCount: Integer; ArgumentCount: Integer;
end; end;
var const
SExt_ok = 0;
SExt_error = 1;
EventHooks: Array [0..7] of TEventHook = EventHooks: Array [0..7] of TEventHook =
( (HookName : 'onScriptCompile' ; ArgumentCount : 1), ( (HookName : 'onScriptCompile' ; ArgumentCount : 1),
(HookName : 'onScriptStart' ; ArgumentCount : 1), (HookName : 'onScriptStart' ; ArgumentCount : 1),
@ -46,5 +57,48 @@ var
implementation implementation
{ TVirtualSimbaExtension }
procedure TVirtualSimbaExtension.SetEnabled(bool: boolean);
begin
if assigned(OnChange) then
OnChange(self);
FEnabled:= bool;
end;
function TVirtualSimbaExtension.GetName: string;
var
OutPut : Variant;
begin
Result := '';
if FName <> '' then
Result := FName
else if self.HookExists('GetName') then
begin;
if ExecuteHook('GetName',[],OutPut) <> SExt_ok then
FName := ''
else
FName := OutPut;
result := FName;
end;
end;
function TVirtualSimbaExtension.GetVersion: String;
var
OutPut : Variant;
begin
Result := '';
if FVersion <> '' then
Result := FVersion
else if self.HookExists('GetVersion') then
begin;
if ExecuteHook('GetVersion',[],OutPut) <> SExt_ok then
FVersion := ''
else
FVersion := Output;
result := FVersion;
end;
end;
end. end.

View File

@ -20,6 +20,7 @@ function Implode(Glue: string;Pieces: TStringArray): string;
var var
I, Len : integer; I, Len : integer;
begin begin
Result := '';
Len := high(Pieces); Len := high(Pieces);
if (Len < 0) then if (Len < 0) then
exit; exit;

View File

@ -441,7 +441,7 @@ begin
RegisterPropertyHelper(@TMENUITEMRADIOITEM_R,@TMENUITEMRADIOITEM_W,'RADIOITEM'); RegisterPropertyHelper(@TMENUITEMRADIOITEM_R,@TMENUITEMRADIOITEM_W,'RADIOITEM');
RegisterPropertyHelper(@TMENUITEMSHORTCUT_R,@TMENUITEMSHORTCUT_W,'SHORTCUT'); RegisterPropertyHelper(@TMENUITEMSHORTCUT_R,@TMENUITEMSHORTCUT_W,'SHORTCUT');
RegisterPropertyHelper(@TMENUITEMVISIBLE_R,@TMENUITEMVISIBLE_W,'VISIBLE'); RegisterPropertyHelper(@TMENUITEMVISIBLE_R,@TMENUITEMVISIBLE_W,'VISIBLE');
RegisterEventPropertyHelper(@TMENUITEMONCLICK_R,@TMENUITEMONCLICK_W,'ONCLICK'); // RegisterEventPropertyHelper(@TMENUITEMONCLICK_R,@TMENUITEMONCLICK_W,'ONCLICK');
end; end;
end; end;