added: richview 0.5.2.3 component

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@73 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
jesusr
2007-02-20 22:47:04 +00:00
parent 1972afaf1c
commit 99f838537c
29 changed files with 7805 additions and 0 deletions

View File

@ -0,0 +1,60 @@
object frmBackStyle: TfrmBackStyle
Left = 129
Height = 147
Top = 130
Width = 350
HorzScrollBar.Page = 349
VertScrollBar.Page = 146
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Background Styles'
Font.Height = -11
Font.Name = 'MS Sans Serif'
object RadioGroup1: TRadioGroup
Left = 8
Height = 106
Top = 4
Width = 335
AutoFill = True
Caption = 'Background Style'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ItemIndex = 0
Items.Strings = (
'No bitmap'
'Stretched bitmap'
'Tiled bitmap'
'Scrolled and tiled bitmap'
)
TabOrder = 0
end
object btnOk: TButton
Left = 186
Height = 25
Top = 115
Width = 75
BorderSpacing.InnerBorder = 4
Caption = 'Okay'
Default = True
ModalResult = 1
OnClick = btnOkClick
TabOrder = 1
end
object btnCancel: TButton
Left = 266
Height = 25
Top = 115
Width = 75
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 2
end
end

View File

@ -0,0 +1,23 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TfrmBackStyle','FORMDATA',[
'TPF0'#13'TfrmBackStyle'#12'frmBackStyle'#4'Left'#3#129#0#6'Height'#3#147#0#3
+'Top'#3#130#0#5'Width'#3'^'#1#18'HorzScrollBar.Page'#3']'#1#18'VertScrollBar'
+'.Page'#3#146#0#11'BorderIcons'#11#12'biSystemMenu'#0#11'BorderStyle'#7#8'bs'
+'Dialog'#7'Caption'#6#17'Background Styles'#11'Font.Height'#2#245#9'Font.Nam'
+'e'#6#13'MS Sans Serif'#0#11'TRadioGroup'#11'RadioGroup1'#4'Left'#2#8#6'Heig'
+'ht'#2'j'#3'Top'#2#4#5'Width'#3'O'#1#8'AutoFill'#9#7'Caption'#6#16'Backgroun'
+'d Style'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpaci'
+'ng'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27
+'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.'
+'ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14
+'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'
+#27'ChildSizing.ControlsPerLine'#2#1#9'ItemIndex'#2#0#13'Items.Strings'#1#6#9
+'No bitmap'#6#16'Stretched bitmap'#6#12'Tiled bitmap'#6#25'Scrolled and tile'
+'d bitmap'#0#8'TabOrder'#2#0#0#0#7'TButton'#5'btnOk'#4'Left'#3#186#0#6'Heigh'
+'t'#2#25#3'Top'#2's'#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#7'Capti'
+'on'#6#4'Okay'#7'Default'#9#11'ModalResult'#2#1#7'OnClick'#7#10'btnOkClick'#8
+'TabOrder'#2#1#0#0#7'TButton'#9'btnCancel'#4'Left'#3#10#1#6'Height'#2#25#3'T'
+'op'#2's'#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Capt'
+'ion'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#2#0#0#0
]);

View File

@ -0,0 +1,40 @@
{$mode objfpc}{$H+}
unit backstyl;
interface
uses
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, LResources;
type
TfrmBackStyle = class(TForm)
RadioGroup1: TRadioGroup;
btnOk: TButton;
btnCancel: TButton;
procedure btnOkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmBackStyle: TfrmBackStyle;
implementation
uses Unit1, RichView;
{.$R *.DFM}
procedure TfrmBackStyle.btnOkClick(Sender: TObject);
begin
Form1.RichView1.BackgroundStyle := TBackgroundStyle(RadioGroup1.ItemIndex);
end;
initialization
{$I BackStyl.lrs}
end.

View File

@ -0,0 +1,74 @@
object frmPrint: TfrmPrint
Left = 7
Height = 449
Top = 9
Width = 624
HorzScrollBar.Page = 623
VertScrollBar.Page = 448
Caption = 'Preview of 1st Page'
Font.Height = -11
Font.Name = 'MS Sans Serif'
object ScrollBox1: TScrollBox
Height = 416
Width = 624
HorzScrollBar.Page = 619
VertScrollBar.Page = 411
Align = alClient
Color = clWhite
ParentColor = False
TabOrder = 0
object Image1: TImage
Left = 1
Height = 91
Width = 111
AutoSize = True
end
end
object Panel1: TPanel
Height = 33
Top = 416
Width = 624
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
object Label1: TLabel
Left = 3
Height = 13
Top = 6
Width = 186
Caption = 'You can provide code to stretch bitmap'
Color = clNone
ParentColor = False
end
object Panel2: TPanel
Left = 439
Height = 33
Width = 185
Align = alRight
BevelOuter = bvNone
TabOrder = 0
object btnOk: TButton
Left = 19
Height = 25
Top = 5
Width = 75
BorderSpacing.InnerBorder = 4
Caption = 'Print'
Default = True
ModalResult = 1
TabOrder = 0
end
object btnCancel: TButton
Left = 99
Height = 25
Top = 5
Width = 75
BorderSpacing.InnerBorder = 4
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
end
end

View File

@ -0,0 +1,22 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TfrmPrint','FORMDATA',[
'TPF0'#9'TfrmPrint'#8'frmPrint'#4'Left'#2#7#6'Height'#3#193#1#3'Top'#2#9#5'Wi'
+'dth'#3'p'#2#18'HorzScrollBar.Page'#3'o'#2#18'VertScrollBar.Page'#3#192#1#7
+'Caption'#6#19'Preview of 1st Page'#11'Font.Height'#2#245#9'Font.Name'#6#13
+'MS Sans Serif'#0#10'TScrollBox'#10'ScrollBox1'#6'Height'#3#160#1#5'Width'#3
+'p'#2#18'HorzScrollBar.Page'#3'k'#2#18'VertScrollBar.Page'#3#155#1#5'Align'#7
+#8'alClient'#5'Color'#7#7'clWhite'#11'ParentColor'#8#8'TabOrder'#2#0#0#6'TIm'
+'age'#6'Image1'#4'Left'#2#1#6'Height'#2'['#5'Width'#2'o'#8'AutoSize'#9#0#0#0
+#6'TPanel'#6'Panel1'#6'Height'#2'!'#3'Top'#3#160#1#5'Width'#3'p'#2#5'Align'#7
+#8'alBottom'#10'BevelOuter'#7#6'bvNone'#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'
+#4'Left'#2#3#6'Height'#2#13#3'Top'#2#6#5'Width'#3#186#0#7'Caption'#6'&You ca'
+'n provide code to stretch bitmap'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0
+#6'TPanel'#6'Panel2'#4'Left'#3#183#1#6'Height'#2'!'#5'Width'#3#185#0#5'Align'
+#7#7'alRight'#10'BevelOuter'#7#6'bvNone'#8'TabOrder'#2#0#0#7'TButton'#5'btnO'
+'k'#4'Left'#2#19#6'Height'#2#25#3'Top'#2#5#5'Width'#2'K'#25'BorderSpacing.In'
+'nerBorder'#2#4#7'Caption'#6#5'Print'#7'Default'#9#11'ModalResult'#2#1#8'Tab'
+'Order'#2#0#0#0#7'TButton'#9'btnCancel'#4'Left'#2'c'#6'Height'#2#25#3'Top'#2
+#5#5'Width'#2'K'#25'BorderSpacing.InnerBorder'#2#4#6'Cancel'#9#7'Caption'#6#6
+'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#1#0#0#0#0#0
]);

View File

@ -0,0 +1,37 @@
{$mode objfpc}{$H+}
unit printfrm;
interface
uses
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, LResources;
type
TfrmPrint = class(TForm)
ScrollBox1: TScrollBox;
Panel1: TPanel;
Image1: TImage;
Label1: TLabel;
Panel2: TPanel;
btnOk: TButton;
btnCancel: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmPrint: TfrmPrint;
implementation
{.$R *.DFM}
initialization
{$I PrintFrm.lrs}
end.

View File

@ -0,0 +1,113 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="/"/>
<Version Value="5"/>
<General>
<Flags>
<SaveClosedFiles Value="False"/>
<SaveOnlyProjectUnits Value="True"/>
</Flags>
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="2"/>
</General>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="lazrichview"/>
</Item1>
</RequiredPackages>
<Units Count="4">
<Unit0>
<Filename Value="rvdemo.lpr"/>
<IsPartOfProject Value="True"/>
<CursorPos X="15" Y="5"/>
<TopLine Value="1"/>
<UsageCount Value="24"/>
</Unit0>
<Unit1>
<Filename Value="unit1.pas"/>
<ComponentName Value="Form1"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="unit1.lrs"/>
<UnitName Value="Unit1"/>
<CursorPos X="46" Y="20"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="backstyl.pas"/>
<ComponentName Value="frmBackStyle"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="backstyl.lrs"/>
<UnitName Value="backstyl"/>
<CursorPos X="39" Y="14"/>
<TopLine Value="1"/>
<UsageCount Value="24"/>
</Unit2>
<Unit3>
<Filename Value="printfrm.pas"/>
<ComponentName Value="frmPrint"/>
<HasResources Value="True"/>
<IsPartOfProject Value="True"/>
<ResourceFilename Value="printfrm.lrs"/>
<UnitName Value="printfrm"/>
<CursorPos X="5" Y="37"/>
<TopLine Value="1"/>
<UsageCount Value="24"/>
</Unit3>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<SearchPaths>
<LCLWidgetType Value="gtk2"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<Watches Count="5">
<Item1>
<Expression Value="FieldDef.FDataType"/>
<Enabled Value="False"/>
</Item1>
<Item2>
<Expression Value="FieldDef.FSize"/>
<Enabled Value="False"/>
</Item2>
<Item3>
<Expression Value="IsSeq"/>
<Enabled Value="False"/>
</Item3>
<Item4>
<Expression Value="TIBCURSOR(CURSOR).SQLDA^"/>
<Enabled Value="False"/>
</Item4>
<Item5>
<Expression Value="x"/>
</Item5>
</Watches>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,18 @@
program rvdemo;
uses
Interfaces,
Forms, OsPrinters,
Unit1 in 'unit1.pas' {Form1},
BackStyl in 'backstyl.pas' {frmBackStyle},
PrintFrm in 'printfrm.pas' {frmPrint}, lazrichview;
{.$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TfrmBackStyle, frmBackStyle);
Application.CreateForm(TfrmPrint, frmPrint);
Application.Run;
end.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,945 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TForm1','FORMDATA',[
'TPF0'#6'TForm1'#5'Form1'#4'Left'#2'~'#6'Height'#3','#1#3'Top'#2'{'#5'Width'#3
+#179#1#18'HorzScrollBar.Page'#3#178#1#23'VertScrollBar.Increment'#2#12#18'Ve'
+'rtScrollBar.Page'#3'+'#1#13'ActiveControl'#7#9'RichView1'#7'Caption'#6' TRi'
+'chView, TRVStyle and TRVPrint'#11'Font.Height'#2#245#9'Font.Name'#6#13'MS S'
+'ans Serif'#8'OnCreate'#7#10'FormCreate'#0#6'TImage'#6'Image1'#4'Left'#3'D'#1
+#6'Height'#2#24#4'Hint'#6#9'TRichView'#3'Top'#2#20#5'Width'#2#24#8'AutoSize'
+#9#12'Picture.Data'#10#162#1#0#0#7'TBitmap'#150#1#0#0'BM'#150#1#0#0#0#0#0#0
+'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0#0#0#0#0#0#0#0
+#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128
+#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0
+#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwwwwwwwwww'#0#0'w'
+'wwwwwwwwp'#187#187#7'ww'#0#0#0#0#0#0#11#187#187#0'ww'#15#255#255#255#255#240
+#187#187#187#176'ww'#15#255#255#255#255#11#11#187#187#176'ww'#15#159#0#0#15
+#11#11#187#187#176'ww'#15#255#255#255#255#11#11#187#187#176'ww'#15#159#0#0#15
+#240#11#11#11#0'ww'#15#255#255#255#255#255#11#11#11#0'ww'#15#159#0#0#0#15#11
+#0#0#7'ww'#15#255#255#255#255#255#11#15#240'www'#15#159#0#0#0#15#11#15#240'w'
+'ww'#15#255#255#255#255#255#11#15#240'www'#15#15#240#240#0#0#0#0#240'www'#15
+#15#240#240#187#187#187#176#240'www'#15#240#0#240#187#187#187#176#240'www'#15
+#240#240#240#187#187#187#176#240'www'#15#255#0#240#187#187#187#176#240'www'
+#15#255#0#240#0#0#0#0#240'www'#15#255#255#255#255#255#255#255#240'www'#0#0#0
+#0#0#0#0#0#0'wwwwwwwwwwwwwwwwwwwwwwwwww'#0#0#6'TImage'#6'Image2'#4'Left'#3']'
+#1#6'Height'#2#24#4'Hint'#6#8'TRVStyle'#3'Top'#2#19#5'Width'#2#24#8'AutoSize'
+#9#12'Picture.Data'#10#162#1#0#0#7'TBitmap'#150#1#0#0'BM'#150#1#0#0#0#0#0#0
+'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0#0#0#0#0#0#0#0
+#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128
+#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0
+#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwwwww'#247#255
+#255#255#255'wwwwww'#15'p'#0#0#7#255'www'#0#0#15#0#0''#247#0#15'www'#7'w'
+#0#7#247'p'#7#247'ww'#7'wpww'#240#0#247'ww'#7#151#0#240#240#0'p'#0#247'w'
+'w'#7'ww'#255#247''#247#0#0#247'ww'#7#151#0#0#15#247#0#0#15#247'ww'#7'www'
+#247#0#0#0#255'www'#7#151#0#15'p'#0#0#255#0'www'#7'ww'#0#0#255#247#255#247
+'ww'#7#151#0#15#0#15#247'w'#240#247'ww'#7'ww'#0#15'wpww'#7#7'p'#0#15#240
+#15#0#15'ww'#7#7'pp'#0''#247#0#15'ww'#7'p'#0'p'#255'p'#0#0''#15'ww'#7'ppp'
+#187#255#255#255#240#255'ww'#7'w'#0'p'#187#187#187#176'pwww'#7'w'#0'p'#0#0#0
+#0'pwww'#7'wwwwwwwpwww'#0#0#0#0#0#0#0#0#0'wwwwwwwwwwwwwwwwwwwwwwwwww'#0#0#6
+'TImage'#6'Image3'#4'Left'#3'E'#1#6'Height'#2' '#3'Top'#2'0'#5'Width'#2' '#8
+'AutoSize'#9#12'Picture.Data'#10#200#8#0#0#5'TIcon'#190#8#0#0#0#0#1#0#1#0' '
+#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0#8#0#0#0#0#0#0
+#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#128#0#0#0#255#0#0#0#0
+' '#0#0'@ '#0#0#128' '#0#0#255' '#0#0#0'@'#0#0'@@'#0#0#128'@'#0#0#255'@'#0#0
+#0'`'#0#0'@`'#0#0#128'`'#0#0#255'`'#0#0#0#128#0#0'@'#128#0#0#128#128#0#0#255
+#128#0#0#0#160#0#0'@'#160#0#0#128#160#0#0#255#160#0#0#0#192#0#0'@'#192#0#0
+#128#192#0#0#255#192#0#0#0#255#0#0'@'#255#0#0#128#255#0#0#255#255#0#0#0#0' '
+#0'@'#0' '#0#128#0' '#0#255#0' '#0#0' '#0'@ '#0#128' '#0#255' '#0#0'@ '#0
+'@@ '#0#128'@ '#0#255'@ '#0#0'` '#0'@` '#0#128'` '#0#255'` '#0#0#128' '#0'@'
+#128' '#0#128#128' '#0#255#128' '#0#0#160' '#0'@'#160' '#0#128#160' '#0#255
+#160' '#0#0#192' '#0'@'#192' '#0#128#192' '#0#255#192' '#0#0#255' '#0'@'#255
+' '#0#128#255' '#0#255#255' '#0#0#0'@'#0'@'#0'@'#0#128#0'@'#0#255#0'@'#0#0' '
+'@'#0'@ @'#0#128' @'#0#255' @'#0#0'@@'#0'@@@'#0#128'@@'#0#255'@@'#0#0'`@'#0
+'@`@'#0#128'`@'#0#255'`@'#0#0#128'@'#0'@'#128'@'#0#128#128'@'#0#255#128'@'#0
+#0#160'@'#0'@'#160'@'#0#128#160'@'#0#255#160'@'#0#0#192'@'#0'@'#192'@'#0#128
+#192'@'#0#255#192'@'#0#0#255'@'#0'@'#255'@'#0#128#255'@'#0#255#255'@'#0#0#0
+'`'#0'@'#0'`'#0#128#0'`'#0#255#0'`'#0#0' `'#0'@ `'#0#128' `'#0#255' `'#0#0'@'
+'`'#0'@@`'#0#128'@`'#0#255'@`'#0#0'``'#0'@``'#0#128'``'#0#255'``'#0#0#128'`'
+#0'@'#128'`'#0#128#128'`'#0#255#128'`'#0#0#160'`'#0'@'#160'`'#0#128#160'`'#0
+#255#160'`'#0#0#192'`'#0'@'#192'`'#0#128#192'`'#0#255#192'`'#0#0#255'`'#0'@'
+#255'`'#0#128#255'`'#0#255#255'`'#0#0#0#128#0'@'#0#128#0#128#0#128#0#255#0
+#128#0#0' '#128#0'@ '#128#0#128' '#128#0#255' '#128#0#0'@'#128#0'@@'#128#0
+#128'@'#128#0#255'@'#128#0#0'`'#128#0'@`'#128#0#128'`'#128#0#255'`'#128#0#0
+#128#128#0'@'#128#128#0#128#128#128#0#255#128#128#0#0#160#128#0'@'#160#128#0
+#128#160#128#0#255#160#128#0#0#192#128#0'@'#192#128#0#128#192#128#0#255#192
+#128#0#0#255#128#0'@'#255#128#0#128#255#128#0#255#255#128#0#0#0#160#0'@'#0
+#160#0#128#0#160#0#255#0#160#0#0' '#160#0'@ '#160#0#128' '#160#0#255' '#160#0
+#0'@'#160#0'@@'#160#0#128'@'#160#0#255'@'#160#0#0'`'#160#0'@`'#160#0#128'`'
,#160#0#255'`'#160#0#0#128#160#0'@'#128#160#0#128#128#160#0#255#128#160#0#0
+#160#160#0'@'#160#160#0#128#160#160#0#255#160#160#0#0#192#160#0'@'#192#160#0
+#128#192#160#0#255#192#160#0#0#255#160#0'@'#255#160#0#128#255#160#0#255#255
+#160#0#0#0#192#0'@'#0#192#0#128#0#192#0#255#0#192#0#0' '#192#0'@ '#192#0#128
+' '#192#0#255' '#192#0#0'@'#192#0'@@'#192#0#128'@'#192#0#255'@'#192#0#0'`'
+#192#0'@`'#192#0#128'`'#192#0#255'`'#192#0#0#128#192#0'@'#128#192#0#128#128
+#192#0#255#128#192#0#0#160#192#0'@'#160#192#0#128#160#192#0#255#160#192#0#0
+#192#192#0'@'#192#192#0#128#192#192#0#255#192#192#0#0#255#192#0'@'#255#192#0
+#128#255#192#0#255#255#192#0#0#0#255#0'@'#0#255#0#128#0#255#0#255#0#255#0#0
+' '#255#0'@ '#255#0#128' '#255#0#255' '#255#0#0'@'#255#0'@@'#255#0#128'@'#255
+#0#255'@'#255#0#0'`'#255#0'@`'#255#0#128'`'#255#0#255'`'#255#0#0#128#255#0'@'
+#128#255#0#128#128#255#0#255#128#255#0#0#160#255#0'@'#160#255#0#128#160#255#0
+#255#160#255#0#0#192#255#0'@'#192#255#0#128#192#255#0#255#192#255#0#0#255#255
+#0'@'#255#255#0#128#255#255#0#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#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0'$$$'#0#0'$$$$$$'#0#0#0'$$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$$'#0
+'HihHHhiH'#0#0'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$H'#0'$$H'#141#241#209#141
+#141#209#241#141'H$$'#0'H$'#0#0#0#0#0#0#0#0#0#0#0' `i$H'#136#141#173#209#209
+#209#209#209#209#173#141#136'H$i` '#0#0#0#0#0#0#0#0#0#0' `i'#141#136#241'h'
+#136#209#241#246#246#241#209#136'h'#241#136'i'#141'` '#0#0#0#0#0#0#0#0#0#0' '
+'$'#214#255#141#209'$'#0'H'#177#214#214#177'H'#0'$'#209#141#255#214'$ '#0#0#0
+#0#0#0#0#0#0#0'$'#141#246#141'$i$'#0#136#241#250#250#241#136#0'$i$'#141#246
+#141'$'#0#0#0#0#0#0#0#0#0#0'H'#141#136'i$H$Hh'#136#136#136#136'hH$H$i'#136
+#141'H'#0'h'#0#0#0#0#0#0'h'#0'H$hiH'#136'HH'#141'iHHi'#141'HH'#136'Hih$H'#0
+'$'#0#0#0#0#0#0'h'#0#0'$HhH'#209#136'hi$$$$ih'#136#209'HhH$'#0#0'h'#0#0#0#0#0
+#0'h'#0#0'$$h'#136#246#177'h$H'#136#136'H$h'#177#246#136'h$$'#0#0#141#0#0#0#0
+#0#0#141#0#0#0'H'#136#241#246#246#209#136#246#255#255#246#136#241#246#246#241
+#136'H'#0#0#0#141#0#0#0#0#0#0#141#0#0#0'h'#209#246#209#173#173#173#209#255
+#254#209#173#173#173#209#246#209'h'#0#0#0'h'#0#0#0#0#0#0#141#0#0#0'H'#173#136
+'H$$Hh'#246#241'hH$$H'#136#173'H'#0#0#0'h'#0#0#0#0#0#0'h'#0'$'#0'$h$$'#0#0#0
+'$HH$'#0#0#0'$$h$'#0'$'#0'h'#0#0#0#0#0#0'$'#0'$'#0#0#136'$'#0#0'$$h'#173#209
+'h$$'#0#0'$'#136#0#0'$'#0#0#0#0#0#0#0#0#0#0'$'#0#0'$h$H'#209#250#255#250#250
+#255#250#209'H$h$'#0#0'$'#0#0#0#0#0#0#0#0#0#0'$$'#0'$h'#173#209#241#241#209
+#173#173#209#241#241#209#173'h$'#0'$$'#0#0#0#0#0#0#0#0#0#0#0'H'#0#0#0'$$$$'#0
+#0#0#0'$$$$'#0#0#0'H'#0#0#0#0#0#0#0#0#0#0#0#0'$H'#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0'H$'#0#0#0#0#0#0#0#0#0#0#0#0#0'$HHi'#141#214#246#255#255#246#214#246#177
+#141'iHH$'#0#0#0#0#0#0#0#0#0#0#0#0#0'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$$'#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'$$%%iiii)HH%%'#5#0'$'#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'h'
+'h$h'#141#141'h'#141'hhh$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#255#255#255#255#255#255#255#255#255#255#255#255#255
+#255#0#0#255#254#0#0''#248#0#0'?'#248#0#0#31#240#0#0#31#240#0#0#15#240#0#0
+#15#240#0#0#7#224#0#0#7#224#0#0#7#224#0#0#7#224#0#0#7#224#0#0#7#224#0#0#7#224
+#0#0#7#224#0#0#15#240#0#0#15#240#0#0#15#240#0#0#31#240#0#0#31#248#0#0#31#248
+#0#0'?'#252#0#0'?'#254#0#0#255#255#192#3#255#255#255#255#255#255#255#255#255
+#255#255#255#255#7'Visible'#8#0#0#6'TImage'#6'Image4'#4'Left'#3's'#1#6'Heigh'
+'t'#2#24#4'Hint'#6#8'TRVPrint'#3'Top'#2#21#5'Width'#2#24#8'AutoSize'#9#12'Pi'
+'cture.Data'#10#162#1#0#0#7'TBitmap'#150#1#0#0'BM'#150#1#0#0#0#0#0#0'v'#0#0#0
+'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' '#1#0#0#0#0#0#0#0#0#0#0#16#0#0#0
+#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128
+#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0
+#0#255#0#255#0#255#255#0#0#255#255#255#0'wwwwwwwwwwwwwwwp'#0#0#0#0#0#0'wwwww'
+#135#136#136#136#136#136#136#7'ww'#0#0#15'wwwwww'#128'ww'#15#255#15#153'wwww'
+'w'#136#7'w'#15#255#143#255#255#255#255#255#255#136#7'w'#15#159#240'wwwwww'
+#248#7'w'#15#255#240#7#128#0#0#0#8''#7'w'#15#159#255#240#0#255#255#255#0#0
+'ww'#15#255#255#255#240#240#240#15#0'www'#15#159#0#0#255#15#240#176#240'www'
+#15#255#255#255#255#15#15#0#240'www'#15#159#0#0#15#240#255#255#255#7'ww'#15
+#255#255#255#255#240#0#0#0#7'ww'#15#15#240#240#0#0#0#0#240'www'#15#15#240#240
+#187#187#187#176#240'www'#15#240#0#240#187#187#187#176#240'www'#15#240#240
+#240#187#187#187#176#240'www'#15#255#0#240#187#187#187#176#240'www'#15#255#0
,#240#0#0#0#0#240'www'#15#255#255#255#255#255#255#255#240'www'#0#0#0#0#0#0#0#0
+#0'wwwwwwwwwwwwwwwwwwwwwwwwww'#0#0#10'TStatusBar'#10'StatusBar1'#6'Height'#2
+#20#3'Top'#3#24#1#5'Width'#3#179#1#6'Panels'#14#0#11'SimplePanel'#8#0#0#9'TR'
+'ichView'#9'RichView1'#6'Height'#3#24#1#5'Width'#3#179#1#7'TabStop'#9#8'TabO'
+'rder'#2#0#5'Align'#7#8'alClient'#8'Tracking'#9#14'VScrollVisible'#9#6'OnJum'
+'p'#7#13'RichView1Jump'#13'OnRVMouseMove'#7#20'RichView1RVMouseMove'#21'OnSa'
+'veComponentToFile'#7#28'RichView1SaveComponentToFile'#11'OnURLNeeded'#7#18
+'RichView1URLNeeded'#12'OnRVDblClick'#7#19'RichView1RVDblClick'#14'OnRVRight'
+'Click'#7#21'RichView1RVRightClick'#5'Style'#7#8'RVStyle1'#12'MaxTextWidth'#3
+'l'#2#10'LeftMargin'#2#10#11'RightMargin'#2#10#21'BackgroundBitmap.Data'#10
+#162'h'#0#0#158'h'#0#0'BM'#158'h'#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#250#0#0#0'f'
+#0#0#0#1#0#8#0#0#0#0#0'hd'#0#0#18#11#0#0#18#11#0#0#0#1#0#0#0#0#0#0#254#254
+#253#0#250#250#250#0#248#248#248#0#247#247#247#0#247#247#246#0#246#246#245#0
+#244#244#244#0#243#243#242#0#243#243#243#0#242#242#242#0#241#241#241#0#240
+#240#240#0#239#239#239#0#238#238#238#0#237#237#236#0#237#237#237#0#236#236
+#236#0#234#234#234#0#235#235#235#0#234#234#233#0#233#233#233#0#233#233#232#0
+#232#232#232#0#232#232#231#0#230#230#230#0#231#231#231#0#230#230#229#0#229
+#229#229#0#229#229#228#0#228#228#227#0#226#226#226#0#227#227#226#0#226#226
+#225#0#224#224#224#0#225#225#224#0#224#224#223#0#223#223#223#0#223#223#222#0
+#222#222#221#0#220#220#220#0#221#221#220#0#220#220#219#0#219#219#218#0#219
+#219#219#0#218#218#218#0#218#218#217#0#216#216#216#0#217#217#217#0#217#217
+#216#0#216#216#215#0#214#214#214#0#215#215#214#0#214#214#213#0#213#213#213#0
+#213#213#212#0#212#212#212#0#212#212#211#0#210#210#210#0#211#211#211#0#211
+#211#210#0#210#210#209#0#208#208#208#0#209#209#208#0#208#208#207#0#206#206
+#206#0#207#207#206#0#206#206#205#0#204#204#204#0#205#205#205#0#205#205#204#0
+#204#204#203#0#202#202#202#0#203#203#202#0#202#202#201#0#201#201#201#0#201
+#201#200#0#200#200#199#0#199#199#199#0#199#199#198#0#198#198#198#0#198#198
+#197#0#197#197#197#0#197#197#196#0#196#196#195#0#195#195#195#0#195#195#194#0
+#194#194#194#0#194#194#193#0#194#194#192#0#192#192#192#0#193#193#193#0#193
+#193#192#0#193#193#191#0#192#192#191#0#192#192#190#0#190#190#190#0#191#191
+#191#0#191#191#190#0#190#190#189#0#191#191#189#0#190#190#188#0#189#189#189#0
+#189#189#188#0#188#188#188#0#189#189#187#0#188#188#187#0#188#188#186#0#187
+#187#187#0#187#187#186#0#187#187#185#0#186#186#185#0#186#186#184#0#184#184
+#184#0#185#185#185#0#185#185#184#0#184#184#182#0#185#185#183#0#184#184#183#0
+#183#183#183#0#182#182#182#0#183#183#181#0#182#182#181#0#181#181#181#0#181
+#181#180#0#180#180#180#0#181#181#179#0#180#180#179#0#179#179#179#0#179#179
+#178#0#178#178#178#0#178#178#177#0#177#177#177#0#177#177#176#0#176#176#176#0
+#176#176#175#0#174#174#173#0#174#174#174#0#175#175#175#0#173#173#173#0#173
+#173#172#0#172#172#172#0#172#172#171#0#171#171#170#0#171#171#171#0#170#170
+#170#0#170#170#169#0#169#169#169#0#169#169#168#0#168#168#168#0#168#168#166#0
+#168#168#167#0#167#167#166#0#167#167#167#0#166#166#166#0#166#166#164#0#166
+#166#165#0#165#165#165#0#165#165#164#0#164#164#164#0#164#164#163#0#163#163
+#163#0#163#163#162#0#162#162#162#0#162#162#161#0#161#161#161#0#161#161#160#0
+#160#160#160#0#160#160#158#0#160#160#159#0#159#159#158#0#159#159#159#0#158
+#158#158#0#158#158#157#0#157#157#157#0#157#157#156#0#156#156#156#0#156#156
+#155#0#154#154#153#0#155#155#155#0#155#155#154#0#154#154#154#0#153#153#152#0
+#153#153#153#0#152#152#152#0#152#152#151#0#151#151#151#0#150#150#150#0#150
+#150#149#0#149#149#149#0#149#149#148#0#148#148#148#0#148#148#147#0#146#146
+#145#0#147#147#146#0#147#147#147#0#146#146#146#0#145#145#144#0#145#145#145#0
+#144#144#144#0#144#144#143#0#142#142#141#0#143#143#143#0#142#142#142#0#141
+#141#140#0#141#141#141#0#140#140#140#0#140#140#139#0#139#139#139#0#139#139
+#138#0#138#138#138#0#138#138#137#0#137#137#137#0#137#137#136#0#136#136#136#0
+#136#136#135#0#134#134#133#0#135#135#135#0#135#135#134#0#134#134#134#0#133
+#133#132#0#133#133#133#0#132#132#132#0#132#132#131#0#130#130#129#0#131#131
+#130#0#131#131#131#0#130#130#130#0#129#129#128#0#129#129#129#0#128#128#128#0
+#128#128''#0'~~}'#0'~'#0'}}|'#0'}}}'#0'|||'#0'||{'#0'{{z'#0'{{{'#0'zzz'#0
+'zzy'#0'xxx'#0'yyy'#0'xxw'#0'tts'#0'vvu'#0'vvv'#0'www'#0'ttt'#0'rrq'#0'sss'#0
+'qqq'#0'nnm'#0'ooo'#0'lll'#0'jjj'#0#1#1#1#1#1#1#1#1#1#1#1#2#1#2#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2
,#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2
+#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1' '#31'"'#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1'('#31#25#21#23#29'&'#8#5#5#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#2#2#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2'#'#25#25#26#31
+' #"'#31#8#4#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2','#31#28#27#27#31#31' " '#26#2#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#4#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#6'&%'#27#25#27#28#8'#'#30#22#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2#2#2#2#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#2#4#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6'&'
+'%'#29#25#22#19#6#3#2#1#1#1#1#1#1#1#1#1#1#5#9#9#5#2#2#1#2#1#1#1#1#1#1#1#1#2#4
+#4#2#1#1#1#1#1#1#2#2#4#4#5#5#5#5#5#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1
+#2#1#2#2#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#8'%"'#27#21#18#12#3#1#1#1#1
+#1#1#1#1#1#1#1#1#11#29'!'#17#10#10#9#6#2#1#1#1#1#1#1#2#4#5#5#5#2#1#1#1#1#1#2
+#2#3#4#5#6#6#6#6#5#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#9' !'#29#26#16#5#1#1#1#1#1#1#1#1#1#1#1#1#1#9
+#25'!! '#27#25#16#11#10#6#3#1#1#2#3#5#5#6#5#3#2#2#2#1#1#1#1#2#2#4#5#6#6#6#5#3
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#5#26' '#27#23#10#3#1#1#1#1#1#1#1#1#1#1#1#1#2#6#17'%( '#31' '#28
+#20#12#9#7#5#5#3#5#5#5#3#3#5#3#2#1#1#1#1#1#2#4#5#5#4#4#3#2#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#2#3#4#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13'""'
+#28#28#17#5#1#1#1#1#1#1#1#1#1#1#1#1#1#3#11#30'&$!%%!'#31#28#26#18#10#3#2#2#5
+#5#4#5#5#3#2#1#1#1#1#1#2#3#4#4#3#3#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#4
+#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#30'$ '#27#21#15#3#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#5#11#29'$&###'#29#25#18#12#5#2#1#2#5#5#5#4#4#2#1#1#1#1#1#1
+#1#3#5#5#3#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#4#2#1#1#1#2#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#8#30'(&'#30#28#12#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#5
+#16'"(#"'#29#20#9#5#4#2#1#1#2#3#3#2#2#2#5#6#9#5#3#1#1#1#2#5#5#5#3#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#5#4#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#5#28'&&$$'#28#8#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#5#12#29'&&!'#29#15#6#2#2#1#1#1
+#1#1#2#2#2#6#13#24#24#20#12#9#5#3#2#3#5#5#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#4#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#14'#(#'#30#21#9#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#9#21'"%$'#29#18#5#1#1#1#1#1#1#1#2#3#4#12#24'%%#'
+#31#25#18#12#9#6#5#3#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#3#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#29'&&"'#24#14#5#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#9#20' "#'#24#12#3#1#1#1#1#1#1#1#3#9#15#27'#((($'#30#24#25#22#16#10#6
+#10#12#9#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#5#20#29'"'#31#25#10#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#18
+#28'"!'#25#11#2#1#1#1#1#1#1#1#2#12#31')''(&%'#30#24#19#19#18#15#12#16#28#30
+#25#15#8#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#2#10#21#29#29#25#11#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13#28'#'
+'$'#31#13#5#1#1#1#1#1#1#1#3#12#29'''))&'#30#22#12#6#6#5#5#12#28'(# '#31#23#12
+#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#5#11#25#29#29#25#18#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#19' && '#21#6#1#1
+#1#1#1#1#1#5#16#31'&))&'#25#11#5#2#3#3#3#12#31'((((&'#24#10#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#2#3#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#9#21#29#27#26#20
+#12#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#9#23'#('''#29#12#4#2#1#1#1#1#1#4#12#28
+'$&)*%'#19#6#2#1#1#1#3#11#24'%(-1.&'#16#6#1#1#1#1#1#1#1#1#5#10#10#5#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#4#3#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#20#26#27#24#22#11#5#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#6#17#31'&('#31#13#5#2#2#2#1#1#1#8#17#30'#%(('#29#11#3#1#1
+#1#1#3#10#21' &.1.('#30#12#1#1#1#1#1#1#5#9#16#25#25#15#10#6#5#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#3#2#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#12#26' '#29#24#20#7#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#5#12#25'"# '#17#6#3#3#3#3#3#5#13#26' "# '#28#15#5#2#1#1#1#1#5#12#23#30
+'%)('#29#29' '#18#6#1#1#1#5#6#13#19#25#31#31#25#22#18#13#10#5#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#8#18'##'#31#24#19#8#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#5#12#22#28#31#25#15#5#3#3#5#5#6#15#26'#%$!'#28#16#9#5#3#2#1#1#1#5#15#22#31
+'"!'#29#18#18#25#22#8#1#1#2#6#15#22#22#25#27#29#28#26#25#22#25#17#11#5#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#13'#)$'#31#23#13#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#5#12#22#26#24#17#10#3#3#3#5#10#18#28'#((&'#31#22#13#6#6#6#3#3#3#3#5#10
+#19#31' '#31#25#13#12#13#10#5#1#6#11#16#17#21#23#24#27#29#31#31#27#26#31#31
+#22#10#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#10#31'(&"'#28#12#5#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#5#12#20#26#24#17#10#5#1#1#5#15#31'(-*(!'#25#13#10#8#7#6#5#5
+#5#5#5#10#19#31#30#31#25#13#9#5#3#3#1#10#22#28#25#23#25#27#31#31#29#25#22#24
+#29#26#20#10#2#1#1#1#1#1#3#5#6#8#6#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#12#12#5#1#1#1#1#1#1#5#15' (#"'#22#10#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#5#13#23#28#29#25#13#5#1#1#5#16' .0*('#31#16#10#5#6#6#5
+#5#5#5#5#5#10#20#29#29#31#25#15#5#3#1#1#5#11#21#31#27#27#27#26#24#22#13#10#12
+#22#26#25#17#13#9#5#1#1#1#5#8#12#15#15#18#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0
+#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#11' '#13#1#1#1#1#1#1#6#18'#''&&'#28#13
+#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#10#20#31' '#31#20#12#6#5#10#20'&00)('#26#13
+#5#3#3#3#3#3#4#3#3#5#11#22#29#27#29#22#11#5#1#1#1#6#15#25#29#29#31#31#22#13
+#10#5#5#5#10#18#20#20#20#22#13#5#1#1#5#12#15#16#15#16#16#8#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#9#29'%'#19#8#1#1#1#1#1#6#25
+'&))('#31#13#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#10#22'"%%!'#31#23#16#16#23'"''0'
+')$'#31#18#8#3#1#3#3#3#1#3#3#3#5#10#22#31#31#31#24#13#5#1#1#1#10#20#31#29#31
+#31#23#13#6#4#3#3#3#5#6#10#16#20#24#25#13#5#1#3#10#18#22#17#18#13#6#1#1#1#1#1
+#1#1#5#11#11#5#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13'$"'#12#1#1#1
+#1#1#5#15'#/+('#29#13#5#1#1#1#1#1#1#2#3#2#2#1#1#1#1#3#10#22'!(''('#31#25#22
+#24' (-,)'#30#18#9#5#3#3#3#3#3#3#3#3#3#5#10#20#29'"# '#17#6#1#1#3#10#20#29#29
+' '#26#15#6#3#1#1#1#1#1#3#6#10#18#25#25#20#9#1#3#10#18#25#25#20#15#6#1#1#1#1
+#1#1#5#16#31#31#17#13#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#16'($'#13
+#3#2#3#4#5#5#16'(13,'#30#16#3#1#1#1#1#1#2#3#3#3#3#2#1#1#1#5#10#25'&,,&'#29#18
+#13#16#23#31'#((#'#17#10#6#3#3#3#5#5#3#3#3#3#5#10#18#31'%("'#25#8#1#1#3#10#20
+#29#31'"'#26#13#6#1#1#1#1#1#1#1#3#6#12#16#18#13#5#3#3#8#15#20#22#20#15#6#1#1
+#1#1#1#1#11#26'# '#31#26#18#9#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#5#5#1#1#1#1#1#1#1#1#1#1#2#2#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#25'($'
+#13#3#2#1#4#5#10#25''':75('#17#6#1#1#1#1#1#1#2#2#2#2#2#1#1#1#5#11#24'&--&'#27
+#13#8#8#11#16#25#31'!#'#31#18#10#6#3#3#3#3#3#3#2#3#5#11#24'%(&'#28#13#5#1#1#3
+#10#19#26#29#31#25#12#5#1#1#1#1#1#1#1#1#3#6#11#11#6#3#1#3#5#13#17#20#18#12#6
+#1#1#1#1#1#3#10#22#31#31#27#25#20#11#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#4#4#2#1#1#1#2#1#1#1#1#1#1#2#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#2
+#13'"'''#17#10#1#1#1#3#10#24'(877('#25#10#1#1#1#2#1#1#1#1#1#1#1#1#1#1#5#10#22
+'&01)'#29#13#6#5#5#8#11#17#27'!& '#22#12#5#1#1#2#3#2#1#1#5#12#28'((&'#29#13#5
+#1#1#3#8#18#25#28#29#20#10#3#1#1#1#1#1#1#1#1#1#3#3#3#3#1#1#1#6#13#17#17#16#11
+#5#1#1#1#1#1#1#6#16#26#27#25#20#19#16#13#6#5#1#1#1#1#1#1#1#1#5#8#8#5#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#12' (('#16#5#1#1#3#5#17'#.2.#'#17#8#5#3#2#2#1#1#5#6#6#5#1#1#2#3#5#9#17'!0'
+'3-'#31#13#5#1#3#5#6#11#17#31'()#'#20#10#1#1#2#3#2#1#1#3#10#25'!(&'#31#18#6#1
+#1#1#6#14#25#28#25#16#6#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#15#20#20#16#10#6
+#1#1#1#1#1#1#10#18#25#25#20#17#16#18#17#16#9#1#1#1#1#1#1#1#2#10#17#17#13#6#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#15'".. '#15#3#1#1#5#16'",.*'#31#16#8#5#5#4#2#1#2#8#12#12#7#5#3#4#5#5#9
+#17'!/3-'#31#13#5#1#1#3#5#6#11#25'&// '#16#6#1#3#4#3#1#1#5#10#22'#''('#31#16
+#5#1#1#1#6#13#22#26#22#13#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#15#20#20#18
+#13#6#3#1#1#1#1#1#8#15#22#20#17#16#13#15#18#16#9#1#1#1#1#1#1#1#8#18#29#31#21
+#10#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#5#16'(:8+'#27#15#6#3#5#14' -1,'#30#16#8#5#5#5#3#1#5#10#18#16#11#5#4
+#5#5#6#9#18#30'*1*'#31#13#5#1#1#1#3#5#9#18'"-0('#25#10#6#5#5#5#3#1#5#13#31'('
+'+'' '#18#5#1#1#1#6#13#22#24#22#13#6#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#15
+#20#20#17#18#12#6#1#1#1#1#1#5#12#16#18#16#16#13#13#15#12#8#2#1#1#1#1#1#2#13
+#28'##'#29#13#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#3#3#1#1#2#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#2#3#5#6#17'(991('#31#17#12#10#19'"050"'#18#7#5#5#5#5#5#8#13#20
+#20#11#5#3#5#5#5#8#15#31')0*'#30#16#6#2#1#1#2#3#5#12#27'(-)'#31#18#10#6#6#5#4
+#1#5#10#25'(,,%'#22#10#1#1#1#6#16#22#25#22#16#8#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#6#13#20#20#17#20#15#8#1#1#1#1#1#5#11#16#16#16#16#13#10#11#9#5#1#1#1#1#1
+#1#5#13#29'&&'#31#18#8#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#4#5#5#5#5#5#3#1
+#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#5#5#6#13#31'&((& '#31#26#25#28'(351#'#19#10#6#6#6#6#8
+#11#17#25#20#11#5#3#4#4#5#8#16' ,1*'#30#16#8#4#2#1#1#1#4#9#19'"))"'#21#10#6#5
+#6#6#6#8#9#18'"))#'#22#7#1#1#1#3#10#16#22#23#18#10#5#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#6#12#18#20#17#18#15#6#1#1#1#1#1#8#12#18#18#18#15#11#8#5#5#3#1#1#1#1
+#1#1#5#11#23' "'#31#22#11#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#3#5#5#5#5#3
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#3#5#6#6#10#13#16#17#17#22#22#24#31'"&/551%'#22#12#9#8
+#8#8#10#15#23#26#19#11#5#3#3#3#5#9#19'#/1+'#31#13#8#4#2#1#1#1#2#6#13#29'()#'
+#25#11#6#5#9#12#13#16#16#24'#)( '#18#6#1#1#1#3#6#13#23#26#23#13#6#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#6#11#16#17#17#18#15#10#5#1#1#1#1#5#12#16#18#18#13#10#6#3
+#1#1#1#1#1#1#1#1#5#11#17#29#31#31#26#16#8#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#3#5#6#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#5#5#5#5#10#10#12#10#11#13#20#28#31
+'&,0,%'#29#22#16#13#11#10#13#19#26#26#17#10#5#1#2#2#3#7#17'"-0&'#26#13#6#3#2
+#1#1#1#3#8#16#29'&(%'#29#13#6#5#6#12#17#25#31'"&,) '#16#6#1#1#1#1#6#13#29'"'
+#28#25#13#6#1#1#1#1#1#1#1#6#8#6#5#1#1#1#1#6#12#16#17#18#16#15#11#5#1#1#1#1#5
+#10#15#18#18#15#11#6#2#1#1#1#1#1#1#1#1#5#12#22#29#27#29#29#23#12#5#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#5#5#5#5#6#6#5#3#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#3#5#5#5#5#5#6
+#8#8#8#7#11#13#15#21#29#30#31#31#29#28#24#22#17#17#21#28#31#28#17#10#5#1#1#1
+#2#6#16' *-%'#25#11#5#1#2#1#1#1#5#11#21' &&!'#26#14#6#3#5#8#12#18#22#31'#)-%'
+#20#10#1#1#1#1#6#16#31'&#'#31#17#8#1#1#1#1#1#1#8#13#17#16#10#5#1#1#1#6#12#18
+#17#18#16#13#10#5#1#1#1#1#5#10#15#16#16#15#12#6#2#1#1#1#1#1#1#1#1#5#12#20#26
+#27#27#29#29#18#8#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#13#20#18#13#13#10#6#3#1#1
+#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#3#5#5#5#5#5#6#6#5#5#6#8#10#11#13#16#16#18#19#19#20#20#23
+#25#28#31' '#29#17#10#5#2#1#1#5#9#17'"**$'#25#11#5#1#1#1#1#1#5#13#27'%(%'#30
+#23#12#5#1#3#5#6#8#10#18#29'%&#'#25#10#1#1#1#1#5#11#22'"%"'#20#10#5#1#1#1#1#6
+#18#26#31#25#18#10#3#1#1#6#12#18#17#17#18#16#13#10#5#1#1#1#5#11#15#15#13#15
+#11#6#2#1#1#1#1#1#1#1#1#5#11#20#24#27#27#31#29#21#10#2#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#6#13#26'!##"'#25#10#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#4#3#5#5#6#5#5#5#5#5#5#5#5
+#6#8#10#10#10#11#11#11#12#13#15#16#19#25#28#24#16#9#5#5#5#6#10#16#26'%))#'#23
+#11#5#1#1#1#1#2#5#15#29'()&'#31#20#11#5#1#1#1#3#5#6#10#16#20#23#22#15#6#3#1#1
+#1#3#6#10#18#28#31#31#25#13#8#1#1#1#12#28'#"'#31#20#11#5#1#1#6#13#17#17#17#17
+#17#18#15#6#1#1#1#3#8#12#13#13#13#11#8#2#1#1#1#1#1#1#1#1#8#16#22#24#27#31' '
+#31#21#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#20'!*.31!'#14#6#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#5#5#4#3#5#5#5#5#4#3#3#5#5#5#5#6#6#8#8#8#8#8#8#8#9#9#10#12#15#15#11#6#5#5#9
+#13#18#26'"(*)#'#25#11#5#1#1#1#2#3#8#16#31')-( '#20#10#5#1#1#1#1#1#3#5#8#8#10
+#8#6#3#1#1#1#1#1#3#5#8#13#24'"%'#31#13#6#1#5#13#31'&&"'#22#10#3#1#1#8#16#22
+#22#17#17#17#19#15#10#1#1#1#1#6#11#13#13#16#15#10#3#1#1#1#1#1#1#1#1#10#17#24
+#26#27'"& '#23#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#18'#1587*'#22#9#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#5#5#3#3#3#3#3#3#3#1#3#5#5#5#5#6#6#6#6#6#5#5#5#5#5#5#5#6#6#6#5#5#3#5
+#9#13#20#28'#(+)%'#27#15#8#5#1#3#5#9#13#19' (*('#31#18#9#3#1#1#1#1#1#1#1#3#5
+#5#5#3#1#1#1#1#1#1#1#1#5#8#18#31'%"'#25#10#5#8#13#24'&(#'#25#10#3#1#1#9#18#25
+#24#22#17#16#17#19#12#6#1#1#1#6#12#15#16#17#17#13#8#1#1#1#1#1#1#1#5#10#17#25
+#27#27#30'!'#31#25#15#8#2#1#1#1#1#1#1#1#1#1#1#1#1#1#6#16'!389;3('#17#9#1#1#1
+#1#1#1#6#10#11#13#11#10#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#3#5#5#3#1#1#1#3#3#4#5#5#6#8#8#6#8#6#6#6#5#5#3#3#3#3#2#3#3#3
+#3#2#2#3#5#9#13#17#25#31'!&&"'#24#18#12#10#9#12#18#25#29'"&(#'#25#13#6#4#1#1
+#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#5#10#17#31'"'#31#21#15#15#16#27'&)('
+#24#11#3#1#1#6#18#24#31#27#19#17#19#20#16#10#1#1#1#7#15#18#18#18#18#15#8#1#1
+#1#1#1#1#1#5#10#17#24#27#29#27#27#27#27#25#16#8#1#1#1#1#1#1#1#1#1#1#1#1#1#6
+#19'(1896.*%'#18#6#1#1#1#1#6#13#25#31#31#28#20#13#10#5#5#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#4#6#6#5#5#3#5#5#5#5#5#6#8#9#9#8#8
+#8#8#6#6#5#3#2#2#1#1#1#1#1#1#1#1#2#3#5#6#9#11#15#20#26#31' '#31#26#22#22#24
+#29#31' "##'#28#16#10#6#5#4#3#2#1#1#1#5#10#11#8#5#1#1#1#1#1#1#1#1#1#1#3#6#10
+#16#24#31#31#31#29#31'#(''%'#25#10#3#1#1#10#18#31' '#31#25#17#18#21#22#13#6#1
+#1#10#16#17#18#16#13#10#5#1#1#1#1#1#1#1#8#16#25#27#29#29#29#24#24#29' '#26#13
+#2#1#1#1#1#1#1#1#1#1#1#1#1#8#25'(1880''(%'#22#6#1#1#1#6#13#25'"##!'#31#25#20
+#18#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#2#2#2#2#1#5#6#6#6
+#6#6#5#5#5#5#6#8#9#10#10#9#9#9#8#6#6#5#5#3#2#1#1#1#1#1#1#1#1#1#2#2#3#5#5#8#10
+#12#16#20#23#25#26#29' '#30#31#31#31#28#19#12#8#6#5#5#5#3#2#1#5#11#19#23#18
+#10#2#1#1#1#1#1#1#1#1#1#1#3#5#8#13#20#22#22#24#31'"'#31#31#25#13#6#1#1#1#12
+#24'%# '#25#16#18#21#24#20#11#6#6#10#17#20#18#16#15#10#6#1#1#1#1#1#1#2#8#19
+#29#31#29#29#26#25#24' &'#31#16#6#1#1#1#1#1#1#1#1#1#1#1#1#6#18'#166-'#30#26
+#22#12#5#1#5#10#18#28'"#%(("'#29#25#22#18#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0
+#1#1#1#1#1#1#1#1#1#1#1#2#2#1#4#5#6#6#6#6#5#5#5#6#7#9#10#11#11#10#10#9#9#8#6#6
+#5#5#3#2#1#1#1#1#1#1#2#2#2#1#1#2#2#5#5#6#7#10#11#11#15#17#23#25#22#20#19#18
+#18#16#12#7#6#6#5#5#3#3#2#5#8#17#31#31#24#13#6#1#1#1#1#1#1#1#1#1#1#1#1#5#6#8
,#10#10#13#20#20#13#11#10#6#3#1#1#3#10#25'!& '#21#13#12#20#25#25#18#10#10#13
+#20#25#20#17#18#15#7#1#1#1#1#1#1#1#6#13#25#29#29#29#25#17#22#31'& '#17#8#2#1
+#1#1#1#1#1#1#1#1#1#1#6#18'#145)'#27#12#10#5#1#1#10#23'!&&$#!'#31#31#23#22#22
+#22#18#12#6#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#2#1#1#1#3#5#6#8#8
+#6#6#6#8#7#9#10#11#11#12#11#11#10#9#8#8#7#8#6#5#3#3#2#2#1#1#1#2#2#2#1#1#1#2#3
+#5#6#6#6#6#8#7#10#11#12#11#10#9#9#9#9#6#5#5#5#5#3#2#1#1#5#10#19#31'"'#31#17#8
+#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#5#5#6#6#6#6#5#3#3#1#1#1#3#5#16#31'&"'#24#13#10
+#10#16#20#20#18#13#18#23#25#22#20#18#12#6#1#1#1#1#1#1#1#6#13#22#28#31#30#27
+#16#16#25' '#25#11#3#1#1#1#1#1#1#1#1#1#1#1#3#18'&486,'#27#12#6#3#1#1#11#26
+'((($ '#29#20#13#13#15#18#22#22#21#15#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1
+#1#1#1#1#2#3#3#1#3#5#8#9#8#8#8#8#9#9#10#10#11#11#12#12#12#11#9#9#10#11#11#9#8
+#5#5#4#3#2#1#1#1#1#1#1#1#1#1#3#5#5#6#6#6#6#6#8#7#8#6#5#5#5#6#6#5#4#3#3#3#2#1
+#1#1#3#8#18#28#28#21#15#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#3#3#3#1#1#1#1#1
+#1#1#6#16#31'#"'#31#19#10#6#10#16#20#20#20#21#22#22#22#22#18#10#5#1#1#1#1#1#1
+#2#10#16#24#28#30'"'#29#18#11#13#23#29#25#13#6#1#1#1#1#1#1#1#1#1#1#1#3#16'%4'
+'990'#31#13#6#3#1#3#13#29'()(!'#27#18#10#6#5#5#10#16#20#22#20#13#6#1#1#1#1#1
+#1#1#1#1#1#5#10#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#2#3#3#4#5#6#8#9#10#9#9#9#9#10#10#10#10
+#11#12#13#13#12#10#10#12#13#13#12#10#8#6#5#5#2#1#1#1#1#1#1#1#1#1#2#3#5#5#6#6
+#8#8#7#8#6#5#2#2#3#5#5#3#2#2#3#2#2#1#1#1#1#6#12#14#14#11#8#5#1#1#1#1#1#1#1#1
+#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#17#31' '#29#18#10#6#6#11#15#18#21
+#22#22#20#22#22#18#10#5#1#1#1#1#1#1#3#12#25#31#28' "'#25#13#8#10#16#25#25#16
+#8#1#1#1#1#1#1#1#1#1#1#1#3#13'"18;.'#27#12#6#3#3#6#18'"'')%'#31#18#10#5#1#1#1
+#5#8#15#20#26#20#10#1#1#1#1#1#1#1#1#1#5#13#25#17#10#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#2#4#5
+#6#7#10#10#10#9#9#9#9#10#9#9#9#11#13#13#13#11#11#13#15#16#15#11#9#8#6#5#3#2#1
+#1#1#1#1#1#1#1#1#2#2#3#5#5#6#8#8#8#6#5#2#2#2#2#2#2#1#1#2#2#2#2#2#1#1#3#5#6#6
+#6#5#3#1#1#1#1#1#1#1#1#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13#25#30' '
+#27#14#6#3#3#6#10#14#20#22#22#22#22#20#16#7#5#1#1#1#1#1#1#5#13#25#31#30'"'#31
+#18#8#5#6#13#23#25#16#8#2#1#1#1#1#1#1#1#1#1#1#1#13#29'-6;.'#27#12#6#4#5#10#26
+'(*) '#18#10#5#1#1#1#1#1#5#10#16#20#20#13#6#1#1#1#1#1#1#1#1#9#18#25#22#13#5#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1
+#1#1#1#1#1#1#1#1#1#4#5#5#8#10#10#10#9#7#8#9#9#9#7#9#10#13#15#13#12#12#13#16
+#18#16#12#10#8#6#5#4#2#2#1#1#1#1#1#1#1#1#1#1#2#2#3#5#5#6#8#6#5#4#3#2#2#2#2#1
+#1#1#1#2#3#3#2#1#1#2#3#3#3#3#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2#1#1#1
+#1#2#1#1#1#3#13#27'#"'#31#17#10#1#1#3#5#12#18#20#20#20#20#16#12#6#3#1#1#1#1#1
+#1#5#13#23#31#30'"'#31#15#6#2#5#10#18#22#17#11#6#2#1#1#1#1#1#1#1#1#1#1#11#29
+'-6;3'#30#14#6#5#5#13#31'/3/'#31#13#6#1#1#1#1#1#1#3#6#12#17#22#15#6#1#1#1#1#1
+#1#1#1#10#18#22#25#18#9#1#1#1#1#1#1#5#10#10#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#2#1#1#4#5#5#6#8#9#10#9#8#8#8#8#8#7#8#9
+#11#13#15#13#12#12#13#16#18#18#13#10#8#5#5#3#2#2#3#2#2#1#1#1#1#1#1#1#1#1#2#2
+#3#5#6#6#6#5#5#3#3#3#3#3#2#1#1#1#2#3#2#1#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#2#2#3#3#3#3#3#3#2#2#1#8#18'%)("'#20#10#1#1#1#3#6#12#15#15#15#11
+#7#6#4#1#1#1#1#1#1#2#8#13#25#29#31#31#22#10#5#1#3#6#12#18#20#18#11#5#1#1#1#1
+#1#1#1#1#1#2#11#28')46-'#31#13#6#5#5#12#31'-5."'#14#6#1#1#1#1#1#1#1#3#8#16#20
+#16#8#1#1#1#1#1#1#1#5#11#18#19#21#17#10#1#1#1#1#1#1#10#25#31#18#9#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#2#3#4#4#5#5#6#6#6#8#9#9#9
+#7#8#8#6#6#6#6#7#11#13#15#13#12#11#12#15#16#16#15#10#6#5#3#2#2#2#3#4#3#2#2#1
+#1#1#1#1#1#1#1#1#2#3#5#8#8#8#6#5#4#3#4#5#4#2#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#3#3#4#4#4#3#2#1#3#12' *1) '#19#6#1#1#1#1#3#5
+#6#6#6#5#5#3#1#1#1#1#1#1#1#1#9#18#25#27#28#23#13#8#4#1#1#5#8#15#17#20#14#8#1
+#1#1#1#1#1#1#1#1#2#11#28'(01)'#27#10#5#5#5#13#27'065('#26#13#10#5#3#1#1#1#1#1
+#5#9#12#12#6#1#1#1#1#1#1#1#7#15#20#17#20#16#10#3#1#1#1#1#2#13#26'&&'#17#9#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#4#5#5#5#5#6#6#6#6
+#8#9#9#9#9#7#8#6#6#6#8#10#12#13#13#12#11#11#12#13#13#12#10#6#3#2#1#1#2#3#5#5
+#4#2#1#1#1#1#1#1#1#1#1#1#3#5#8#9#10#9#6#5#4#4#5#5#4#3#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#3#3#3#3#3#2#1#1#3#11#28'''3-"'#18#9#1
+#1#1#1#1#1#3#3#3#3#1#1#1#1#1#1#1#1#1#1#8#16#25#28#27#25#13#8#1#1#1#1#5#10#15
+#18#15#8#1#1#1#1#1#1#1#1#1#2#13#31')03-'#31#16#6#5#5#14'!16:1('#29#22#15#6#1
+#1#1#1#1#3#3#5#5#3#1#1#1#1#1#1#1#10#16#20#18#18#16#10#6#1#1#1#1#6#18#31'(*"'
+#15#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#2#3#4#5#5#5#6
+#6#6#5#6#8#9#9#9#9#8#8#6#6#6#9#10#12#12#11#10#10#10#11#11#11#9#6#3#1#1#1#2#3
,#5#5#5#3#1#1#1#1#1#1#1#1#1#1#2#3#6#8#9#9#6#5#4#4#5#5#5#5#5#3#2#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2#2#2#1#2#2#1#1#2#3#5#16'!.-('#24#11
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#13#26' '#30#29#17#9#1#1#1#1#3#6#12
+#14#15#8#1#1#1#1#1#1#1#1#1#5#13#31'-353%'#17#6#5#5#13#31')5;.('#31#29#20#13
+#10#6#4#1#1#1#1#2#1#1#1#1#1#1#1#1#5#10#18#20#18#16#16#12#6#1#1#1#1#12#28'%$('
+'"'#16#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#3
+#5#5#6#6#5#5#6#6#6#6#6#6#6#5#5#5#6#9#10#10#10#10#9#9#9#9#9#6#5#3#1#1#1#1#2#3
+#3#3#2#1#1#1#1#1#1#1#1#1#1#1#2#4#5#6#6#5#4#3#3#5#5#5#5#5#5#3#2#2#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#10#25'-43,'#31#12
+#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#18' &&'#31#17#8#1#1#1#1#1#5#10#15
+#15#10#5#1#1#1#1#1#1#1#1#1#13#31',35."'#15#5#5#5#10#21'&57('#24#17#19#20#20
+#20#16#10#5#1#1#1#1#1#1#1#1#1#1#1#1#6#15#22#19#16#15#16#15#8#3#1#1#3#12#26' '
+'""'#31#18#9#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1
+#1#1#2#5#5#6#5#5#5#6#6#5#5#5#5#3#3#5#6#8#9#10#10#10#9#8#6#6#5#5#4#2#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#2#2#2#2#2#3#5#5#5#5#3#2#2#4#5#5#6#5#5#4#3#3#2#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#8#13#25'*8;64&'#16#3
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#12#29'&,('#29#13#6#1#1#1#1#1#3#6#11#15
+#11#5#1#1#1#1#1#1#1#1#1#12#31')12,'#24#11#5#5#5#10#18'#1."'#13#10#10#12#17#22
+#20#16#7#5#1#1#1#1#1#1#1#1#1#1#1#11#25#31#26#21#19#17#15#10#3#1#1#5#10#20#27
+#28'"#'#31#18#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1
+#1#1#2#5#5#6#5#5#4#5#5#3#1#2#1#1#2#3#5#8#9#10#10#9#9#6#6#5#5#3#3#2#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#2#2#2#3#5#5#5#6#5#4#2#1#1#2#3#5#5#6#5#5#5#4#3#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#1#9#23'%*179<<('#16#3#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13#31'/1-'#31#13#5#1#1#1#1#1#1#5#10#15
+#13#8#1#1#1#1#1#1#1#1#6#10#24'(14. '#15#4#1#3#5#15' 1.'#27#12#5#4#6#11#16#16
+#15#11#8#5#3#1#1#1#1#1#1#1#1#5#12#25#31#31#29#29#24#17#10#5#1#1#5#12#17#25#27
+'%-0'#31#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1
+#1#5#5#5#5#2#1#2#4#3#1#1#1#1#1#3#5#6#7#9#9#8#8#6#6#5#5#5#4#3#3#2#2#2#2#1#1#2
+#2#3#2#2#1#1#1#1#1#1#2#4#5#6#6#6#5#3#2#1#1#1#1#3#5#5#6#6#5#5#3#2#1#1#1#1#1#1
+#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#17'")1.377('#16#3#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#15#30'/1/"'#13#5#1#1#1#1#1#1#3#10#18#20#13#8#1
+#1#1#1#5#10#13#13#16#27'''6;1"'#13#1#1#1#4#11#29',1!'#13#5#1#1#5#10#12#12#10
+#11#9#6#1#1#1#1#1#1#1#1#6#13#25#31#31' '#31#31#21#16#10#5#2#10#17#22#25#27'&'
+'15('#18#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#2#1#1#4
+#5#5#5#5#3#2#4#5#5#4#2#1#1#3#5#5#6#8#8#6#6#6#6#6#6#6#5#5#5#5#5#5#5#4#3#3#3#5
+#5#5#3#2#1#1#1#1#1#2#5#6#6#6#6#5#3#2#1#1#1#1#1#2#3#5#5#5#5#3#1#1#1#1#1#2#3#3
+#3#2#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#5#12#29'$%$(( '#16#5#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#18'",.)'#31#11#5#1#1#1#1#1#1#3#10#20#28#25#13
+#6#1#1#1#10#19' '#31#27'"0783'#31#9#2#2#4#5#8#19'(1('#17#9#1#1#1#5#9#10#10#10
+#9#5#1#1#1#1#1#1#1#5#10#19#25#27#28#31#31#25#17#22#15#8#5#10#22#28#24#28'"*.'
+','#24#9#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#2#3#5#5#5
+#5#5#5#3#4#5#6#6#6#5#5#3#4#5#6#6#6#6#5#5#5#5#6#8#8#6#6#8#8#6#5#5#5#5#5#5#5#6
+#6#5#3#2#1#1#1#1#2#5#6#6#6#6#6#5#2#1#1#1#1#1#1#1#3#5#3#3#2#1#1#1#1#2#3#4#4#3
+#3#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#5#10#17#21#25#29' '#28#15#5
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#10#25'#*/&'#20#7#4#1#1#1#1#1#1#3#6#19#31
+#31#20#7#1#1#1#7#17#28' (0892'#24#10#5#5#5#5#5#16'(4-"'#18#6#1#1#1#8#12#13
+#10#6#5#1#1#1#1#1#1#1#6#15#20#25#28#29#31#26#18#18#25#19#10#5#12#23#31#28#28
+#28#27' ("'#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#4
+#5#5#5#5#5#3#1#3#5#6#6#6#6#5#5#5#5#6#6#6#5#4#2#2#5#6#6#8#8#9#9#9#8#6#6#6#6#6
+#6#6#8#6#6#5#2#1#1#1#1#1#3#5#6#6#6#6#5#3#1#1#1#1#2#4#4#4#3#3#1#1#1#1#1#1#1#2
+#3#4#4#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#3#5#6#9#14#20#15#8#3
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#13#24'#(''"'#18#8#1#1#1#1#1#1#1#1#6#15
+#31'%'#26#10#1#1#1#3#6#10#13#21#31'&.;9('#13#3#5#5#5#6#12'#+.)'#31#13#5#1#1#9
+#18#18#12#10#8#5#1#1#1#1#1#1#6#15#20#25#29#31#28#16#12#19#25#22#12#11#18#31
+#31#29#25#20#13#16#31#31#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1
+#1#1#1#1#1#2#3#3#3#3#4#3#1#1#3#5#5#6#5#5#4#5#5#5#5#6#5#4#2#2#2#3#5#6#8#9#10#9
+#8#6#6#5#5#5#5#6#6#6#5#5#2#2#1#1#1#1#2#3#5#6#6#6#5#3#2#1#1#1#4#5#5#4#3#2#1#1
+#1#1#1#1#1#1#2#4#5#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#3
+#5#5#5#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#4#5#5#6#10#18' $$(!'#20#8#1#1#1#1#1#1#1
+#1#5#13#31'&'#31#13#3#1#1#1#3#5#5#9#12#21' (8)'#16#5#1#5#5#5#5#12#31'(-('#20
+#10#1#1#6#16#17#15#11#10#8#3#1#1#1#1#1#6#13#19#23#25#26#21#11#8#12#19#22#13
+#18#29'" '#29#19#12#8#13#23#25#12#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#3#2#1#1#1#1#5#5#4#2#1#2#3#3#4#5#5#5#4#2#1#1#2#5#8
+#9#9#8#6#5#5#3#3#3#4#5#5#5#5#3#2#2#2#2#2#1#1#3#5#5#6#6#5#4#1#1#1#1#2#3#3#3#2
,#1#1#1#1#1#1#1#1#1#2#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#8#12#13#16#22'!()+)#'#22#10#1#1#1
+#1#1#1#1#1#3#10#25' '#31#14#5#1#1#1#1#1#1#3#5#9#12#23#28#31#13#3#1#2#5#5#5#5
+#12#29'(.$'#15#3#1#3#10#18#18#13#12#9#5#1#1#1#1#5#10#13#17#20#19#15#10#5#5#9
+#14#22#20#17#24#31'" '#25#13#6#13#25#29#15#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#3#3#2#2#1#1#1#1#2#4#5#5#5#3
+#2#1#2#5#6#8#8#6#5#3#3#2#2#2#3#4#3#3#3#3#2#2#2#2#1#1#1#3#5#5#6#6#6#5#4#2#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#16#22#31'!()--0('#24
+#10#1#1#1#1#1#1#1#1#1#5#13#26' '#25#13#5#1#1#1#1#1#1#1#3#5#6#9#8#8#5#1#3#4#3
+#3#5#8#14'(.('#28#15#10#5#10#18#21#18#16#11#5#1#1#1#1#6#12#18#17#17#15#10#5#3
+#3#5#13#22#20#18#20#29'"&'#31#13#5#10#22' '#28#12#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#3#3#3#2#1#1#1#1#2#4#5#5
+#5#5#3#2#2#3#5#6#6#5#3#2#3#3#2#2#3#4#3#3#2#2#1#1#1#1#1#1#1#2#3#5#6#6#6#5#5#2
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#9#16#22#24#31'%(,'
+'..('#18#8#2#1#1#1#1#1#1#1#1#11#25'"'#31#19#10#1#2#1#1#1#1#1#3#3#3#3#5#4#1#1
+#1#2#1#1#3#5#10#22'%(-('#27#18#20#25#24#20#17#15#8#1#1#1#1#6#15#19#20#20#13#6
+#3#1#1#5#13#22#22#17#23#27#31#31#26#11#5#5#15#31'%'#16#6#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#1#1#1#1#2#2#3#2#1#1#1#1#2
+#4#5#5#5#6#5#4#2#2#3#5#5#5#3#2#3#3#3#3#3#3#3#2#1#1#1#1#1#1#1#1#1#1#2#3#4#5#5
+#5#5#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#6#6#11#16
+#22#24'"''30&'#25#12#5#1#1#1#1#1#1#2#11#28'%$'#31#13#5#3#2#2#1#1#1#3#4#4#3#1
+#1#2#1#1#1#1#1#1#1#2#5#12#29'(*)($ '#29#27#22#22#11#5#1#1#2#6#13#18#21#22#15
+#8#1#1#1#1#10#17#25#25#25#24#27#22#12#5#1#1#12'"('#30#11#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#1#1#1#1#2#2
+#3#2#3#4#5#5#3#2#2#2#2#3#3#2#2#2#2#2#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#2#2#2
+#2#3#2#2#1#2#3#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#5#5#9
+#10#16#31'##%#'#28#11#1#1#1#1#1#1#8#18'!()'''#31#11#1#1#1#1#5#11#16#19#16#12
+#5#3#5#3#3#1#1#1#1#1#3#1#5#11#22#28#30'"&%%'#30#20#16#20#13#10#10#10#12#13#16
+#21#19#15#6#1#1#1#1#6#16#22#25#23#25#24#20#10#1#1#1#10#26'"'#29#11#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#2#2#1#1#2#2#2#2#2#1#1#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#2#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#3#4#5#5#5#6#11#13#13#16#26#22#8#1#1#1#1#1#5#15' ()0.('#16#8#1#1#1#10#29'*'
+';8'#27#13#5#5#5#5#4#2#1#1#3#4#1#3#3#5#9#12#20#25#25#28#22#12#10#16#17#18#18
+#16#15#13#16#18#15#10#3#1#1#1#1#5#13#22#25#21#24#28#22#10#1#1#1#5#18#24#28#13
+#5#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#3#3#3#3#3#5#5#5#5#6#5#3#1#1#1#1#3#10#25' %()))%'#16#5#1#1#11
+#31'39>-'#17#6#5#5#4#3#1#2#3#4#1#3#1#1#1#3#3#5#6#7#8#6#5#3#8#12#16#15#15#13
+#13#13#12#11#5#3#1#1#1#1#5#16#25#29#24#27#25#20#8#1#1#1#3#10#21' '#29#10#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#3#9#18#22#28#31'#((( '#15#5#1#9#31
+',76&'#16#6#4#4#3#1#1#2#1#2#2#3#2#1#1#1#1#1#1#1#1#1#1#1#3#5#5#6#11#13#13#11#9
+#5#3#1#1#1#1#1#5#12#25#31#29#29#22#12#3#1#1#1#1#9#20#30#28#10#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#3#5#5#10#18#25#28'"$&'#26#9#1#5#20'''''('#24#9
+#4#1#1#1#1#1#1#1#1#1#2#2#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#6#9#9#9#6#3#1#1#1#1#1
+#1#1#10#19#26#27#29#22#10#1#1#1#1#1#10#26'" '#10#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#5#5#6#9#12#26#29#20#6#1#1#1#10#31#12#3#1#1#2#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#3#3#1#1#1#1#1#1#1#1#1#6#15#25
+#27#29#22#10#1#1#1#1#3#12#30'& '#10#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#3#6#5#3#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#17#26#29#28#22#8#1#1#1#3
+#10#24#30'% '#12#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#3#10#29'%'#30#13#3#1#1#5#12#31' $& '#8#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#5#13#31#28#10#1#1#1#5#25'"%(&'#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0
+#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#5#6#6#3#1#1#1
+#1#12'#)(&'#9#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#6#25'# '#11#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#6#6#6#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1
,#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#0#0#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1
+#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#0#0#10'Delimiters'#6#10' .;,:(){}"'#14'Al'
+'lowSelection'#9#0#0#8'TRVStyle'#8'RVStyle1'#10'TextStyles'#14#1#7'CharSet'#7
+#15'DEFAULT_CHARSET'#8'FontName'#6#13'MS Sans Serif'#4'Size'#2#10#5'Color'#7
+#12'clWindowText'#0#1#7'CharSet'#7#15'DEFAULT_CHARSET'#8'FontName'#6#5'Arial'
+#4'Size'#2#16#5'Color'#7#5'clRed'#5'Style'#11#6'fsBold'#8'fsItalic'#0#0#1#7
,'CharSet'#7#15'DEFAULT_CHARSET'#8'FontName'#6#5'Arial'#4'Size'#2#12#5'Color'
+#7#6'clBlue'#5'Style'#11#6'fsBold'#8'fsItalic'#0#0#1#7'CharSet'#7#15'DEFAULT'
+'_CHARSET'#8'FontName'#6#15'Times New Roman'#4'Size'#2#12#5'Color'#7#8'clMar'
+'oon'#5'Style'#11#8'fsItalic'#0#0#1#7'CharSet'#7#15'DEFAULT_CHARSET'#8'FontN'
+'ame'#6#15'Times New Roman'#4'Size'#2#12#5'Color'#7#7'clGreen'#5'Style'#11#8
+'fsItalic'#11'fsUnderline'#0#0#1#7'CharSet'#7#15'DEFAULT_CHARSET'#8'FontName'
+#6#15'Times New Roman'#4'Size'#2#12#5'Color'#7#6'clBlue'#5'Style'#11#8'fsIta'
+'lic'#11'fsUnderline'#0#0#1#7'CharSet'#7#15'DEFAULT_CHARSET'#8'FontName'#6#11
+'Courier New'#4'Size'#2#10#5'Color'#7#6'clNavy'#5'Style'#11#6'fsBold'#0#0#1#7
+'CharSet'#7#15'DEFAULT_CHARSET'#8'FontName'#6#13'MS Sans Serif'#4'Size'#2#10
+#5'Color'#7#12'clWindowText'#5'Style'#11#8'fsItalic'#0#0#0#10'JumpCursor'#2
+'e'#5'Color'#7#7'clWhite'#10'HoverColor'#7#6'clNone'#8'SelColor'#7#11'clHigh'
+'light'#12'SelTextColor'#7#15'clHighlightText'#4'left'#3#17#1#3'top'#3#194#0
+#0#0#10'TImageList'#10'ImageList1'#6'Height'#2#15#4'left'#3#17#1#3'top'#3#165
+#0#6'Bitmap'#10#148#4#0#0'li'#3#0#0#0#16#0#0#0#15#0#0#0'y'#1#0#0'/* XPM */'
+#10'static char *graphic[] = {'#10'"16 15 2 1",'#10'". c None",'#10'", c #FF'
+'6794",'#10'"................",'#10'".......,,.......",'#10'".......,.,.....'
+'.",'#10'".,,,,,,,..,.....",'#10'".,.........,....",'#10'".,..........,...",'
+#10'".,...........,..",'#10'".,............,.",'#10'".,............,.",'#10
+'".,...........,..",'#10'".,..........,...",'#10'".,.........,....",'#10'".,'
+',,,,,,..,.....",'#10'".......,.,......",'#10'".......,,......."}'#10'y'#1#0
+#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 15 2 1",'#10'". c None",'
+#10'", c #FF0000",'#10'".......,........",'#10'"......,,,.......",'#10'"....'
+'.,,,,,......",'#10'"....,,,,,,,.....",'#10'"...,,,,,,,,,....",'#10'"..,,,,,'
+',,,,,,...",'#10'".,,,,,,,,,,,,,..",'#10'".,,,,,,,,,,,,,..",'#10'"...,,,,,,,'
+',,....",'#10'"...,,,,,,,,,....",'#10'"...,,,,,,,,,....",'#10'"...,,,,,,,,,.'
+'...",'#10'"...,,,,,,,,,....",'#10'"...,,,,,,,,,....",'#10'"................'
+'"}'#10#136#1#0#0'/* XPM */'#10'static char *graphic[] = {'#10'"16 15 3 1",'
+#10'". c None",'#10'", c #FF0000",'#10'"- c #7B0000",'#10'"................"'
+','#10'".,,,,,,,,,,,,,,.",'#10'"................",'#10'".--------------.",'
+#10'"................",'#10'".--.-.---.-...-.",'#10'".--.-.-...-...-.",'#10
+'".--.-.---.-.-.-.",'#10'".-.--.-...-.-.-.",'#10'".-.--.-...--.--.",'#10'".-'
+'.--.---.--.--.",'#10'"................",'#10'".--------------.",'#10'".....'
+'...........",'#10'".,,,,,,,,,,,,,,."}'#10#0#0#8'TRVPrint'#8'RVPrint1'#12'Le'
+'ftMarginMM'#2#20#13'RightMarginMM'#2#20#11'TopMarginMM'#2#20#14'BottomMargi'
+'nMM'#2#20#12'OnFormatting'#7#18'RVPrint1Formatting'#18'OnSendingToPrinter'#7
+#24'RVPrint1SendingToPrinter'#4'left'#3#17#1#3'top'#3#225#0#0#0#11'TSaveDial'
+'og'#11'SaveDialog1'#5'Title'#6#12'Save file as'#11'FilterIndex'#2#0#7'Optio'
+'ns'#11#17'ofOverwritePrompt'#14'ofHideReadOnly'#15'ofPathMustExist'#18'ofNo'
+'ReadOnlyReturn'#0#4'left'#3#14#1#3'top'#3#4#1#0#0#10'TPopupMenu'#10'PopupMe'
+'nu1'#4'left'#2'0'#3'top'#3#179#0#0#9'TMenuItem'#11'ClickedWord'#7'Caption'#6
+#11'ClickedWord'#0#0#9'TMenuItem'#2'N1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7
+'mitCopy'#7'Caption'#6#5'&Copy'#7'OnClick'#7#12'mitCopyClick'#0#0#9'TMenuIte'
+'m'#12'mitSelectAll'#7'Caption'#6#11'&Select All'#7'OnClick'#7#17'mitSelectA'
+'llClick'#0#0#0#0
]);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
<?xml version="1.0"?>
<CONFIG>
<Package Version="2">
<Name Value="lazrichview"/>
<AutoUpdate Value="OnRebuildingAll"/>
<CompilerOptions>
<Version Value="5"/>
<SearchPaths>
<IncludeFiles Value="$(LazarusDir)/lcl/include/"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<Generate Value="Faster"/>
</CodeGeneration>
<Other>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Version Minor="5" Release="2" Build="3"/>
<Files Count="7">
<Item1>
<Filename Value="rvfreereg.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="RVFreeReg"/>
</Item1>
<Item2>
<Filename Value="rvlazintf.pas"/>
<UnitName Value="RVLazIntf"/>
</Item2>
<Item3>
<Filename Value="ptblrv.pas"/>
<UnitName Value="PtblRV"/>
</Item3>
<Item4>
<Filename Value="richview.lrs"/>
<Type Value="LRS"/>
</Item4>
<Item5>
<Filename Value="richview.pas"/>
<UnitName Value="RichView"/>
</Item5>
<Item6>
<Filename Value="rvscroll.pas"/>
<UnitName Value="RVScroll"/>
</Item6>
<Item7>
<Filename Value="rvstyle.pas"/>
<UnitName Value="RVStyle"/>
</Item7>
</Files>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="3">
<Item1>
<PackageName Value="printer4lazarus"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
<Item3>
<PackageName Value="FCL"/>
<MinVersion Major="1" Valid="True"/>
</Item3>
</RequiredPkgs>
<UsageOptions>
<UnitPath Value="$(PkgOutDir)/"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
</PublishOptions>
</Package>
</CONFIG>

View File

@ -0,0 +1,22 @@
{ This file was automatically created by Lazarus. Do not edit!
This source is only used to compile and install the package.
}
unit lazrichview;
interface
uses
RVFreeReg, RVLazIntf, PtblRV, RichView, RVScroll, RVStyle,
LazarusPackageIntf;
implementation
procedure Register;
begin
RegisterUnit('RVFreeReg', @RVFreeReg.Register);
end;
initialization
RegisterPackage('lazrichview', @Register);
end.

View File

@ -0,0 +1,80 @@
TRichView, TRVStyle and TRVPrint Components
(for Delphi 2-6 and C++ Builder 1,3-5)
ver 0.5.2 FREEWARE
(c) 1997-2001 Sergey Tkachenko
http://www.trichview.com
http://www.richedit.com
svt@trichview.com
---------------------------------------
THIS IS AN UPDATE OF VERSION RELEASED IN 1998 WHICH IS
MADE FOR DELPHI 5,6 AND C++BUILDER 5 COMPATIBILITY.
There are no new features since 1998.
You can find much more faster, powerful and convenient shareware
version of component at http://www.trichview.com, including editor,
tables, data-aware versions, Unicode support, RTF support,
higher quality print preview and much, much more.
Shareware version is constantly improved.
---------------------------------------
Full source code and demos are included.
There are two demos:
- hypertext help program (help on this components),
- program illustarating how to make a credits box
(some text scrolled on timer event over stationary background bitmap).
---------------------------------------
TRichView component can contain:
- background bitmap,
- text with various fonts and colors,
- hypertext,
- pictures,
- pictures from Image Lists,
- any Delphi controls.
It can be printed and saved as plain text or html file.
------------------------------------------
Installation:
Please delete all other versions of RichView installed in your system
(or remove them from Delphi/C++Builder library paths).
The source code is located in Source subdirectory.
- - - - - - - - - - - - - - - - - - - - - -
For Delphi2
Click menu "Component|Install", button "Add" and
select RVFreeReg.pas.
Demo projects: Demo\RVDemo.dpr and Demo2\Credits.dpr
- - - - - - - - - - - - - - - - - - - - - -
For Delphi3:
Install RVFree_D3.dpk (menu "File|Open", "Install").
Demo projects: Demo\RVDemo.dpr and Demo2\Credits.dpr
- - - - - - - - - - - - - - - - - - - - - -
For Delphi4:
Install RVFree_D4.dpk (menu "File|Open", "Install").
Demo projects: Demo\RVDemo.dpr and Demo2\Credits.dpr
- - - - - - - - - - - - - - - - - - - - - -
For Delphi5:
Install RVFree_D5.dpk (menu "File|Open", "Install").
Demo projects: Demo\RVDemo.dpr and Demo2\Credits.dpr
- - - - - - - - - - - - - - - - - - - - - -
For Delphi5:
Install RVFree_D6.dpk (menu "File|Open", "Install").
Demo projects: Demo\RVDemo.dpr and Demo2\Credits.dpr
- - - - - - - - - - - - - - - - - - - - - -
For C++Builder1
Click menu "Component|Install", button "Add" and
select RVFreeReg.pas.
Demo projects: Demo\RVDemo.mak and Demo2\Credits.mak
- - - - - - - - - - - - - - - - - - - - - -
For C++Builder3
Install RVFree_CB3.dpk (menu "File|Open", "Project|Build", then
"Components|Install Packages", "Add" button).
Demo projects: Demo\RVDemo_CB3.bpr and Demo2\Credits_CB3.bpr
- - - - - - - - - - - - - - - - - - - - - -
For C++Builder4
Install RVFree_CB4.dpk (menu "File|Open", "Install")
Demo projects: Demo\RVDemo_CB4.bpr and Demo2\Credits_CB4.bpr
- - - - - - - - - - - - - - - - - - - - - -
For C++Builder5
Install RVFree_CB5.dpk (menu "File|Open", "Install")
Demo projects: Demo\RVDemo_CB5.bpr and Demo2\Credits_CB5.bpr
Sergey Tkachenko
www.trichview.com or www.richedit.com
svt@trichview.com
Jun 29 2001

View File

@ -0,0 +1,582 @@
unit PtblRV;
{$mode Delphi}
interface
uses
{$IFDEF FPC}
LCLType,LclIntf,OsPrinters,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RVScroll, RichView, Printers{, CommDlg};
{$I RV_Defs.inc}
type
{------------------------------------------------------------}
TRVPrintingStep = (rvpsStarting, rvpsProceeding, rvpsFinished);
TRVPrintingEvent = procedure (Sender: TRichView; PageCompleted: Integer; Step:TRVPrintingStep) of object;
{------------------------------------------------------------}
TRVPageInfo = class (TCollectionItem)
public
StartY, StartLineNo : Integer;
procedure Assign(Source: TPersistent); override;
end;
{------------------------------------------------------------}
EInvalidPageNo = class(Exception);
EStyleNotAssigned = class(Exception);
{------------------------------------------------------------}
TPrintableRV = class(TRichView)
private
{ Private declarations }
FOnFormatting, FOnPrinting: TRVPrintingEvent;
pagescoll: TCollection;
FLeftMarginMM, FRightMarginMM, FTopMarginMM, FBottomMarginMM: Integer;
TmpLM, TmpTM, TmpRM, TmpBM: Integer;
PrinterSad: TScreenAndDevice;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function FormatPages: Integer;
procedure DrawPage(pgNo: Integer; Canvas: TCanvas);
procedure PrintPages(firstPgNo, lastPgNo: Integer; Title: String;
Copies: Integer; Collate: Boolean);
procedure Print(Title: String;
Copies: Integer; Collate: Boolean);
published
{ Published declarations }
property OnFormatting: TRVPrintingEvent read FOnFormatting write FOnFormatting;
property OnSendingToPrinter: TRVPrintingEvent read FOnPrinting write FOnPrinting;
end;
{------------------------------------------------------------}
TRVPrint = class(TComponent)
private
{ Private declarations }
FOnFormatting, FOnPrinting: TRVPrintingEvent;
function GetLM: Integer;
function GetRM: Integer;
function GetTM: Integer;
function GetBM: Integer;
procedure SetLM(mm: Integer);
procedure SetRM(mm: Integer);
procedure SetTM(mm: Integer);
procedure SetBM(mm: Integer);
function GetPagesCount: Integer;
protected
{ Protected declarations }
public
{ Public declarations }
rv: TPrintableRV;
constructor Create(AOwner: TComponent); override;
procedure AssignSource(PrintMe: TRichView);
procedure Clear;
function FormatPages(PrintOptions:TRVDisplayOptions): Integer;
procedure PrintPages(firstPgNo, lastPgNo: Integer; Title: String;
Copies: Integer; Collate: Boolean);
procedure Print(Title: String; Copies: Integer; Collate: Boolean);
procedure MakePreview(pgNo: Integer; bmp: TBitmap);
published
{ Published declarations }
property PagesCount: Integer read GetPagesCount;
property LeftMarginMM: Integer read GetLM write SetLM;
property RightMarginMM: Integer read GetRM write SetRM;
property TopMarginMM: Integer read GetTM write SetTM;
property BottomMarginMM:Integer read GetBM write SetBM;
property OnFormatting: TRVPrintingEvent read FOnFormatting write FOnFormatting;
property OnSendingToPrinter: TRVPrintingEvent read FOnPrinting write FOnPrinting;
end;
function GetPrinterDC: HDC;
implementation
{==================================================================}
procedure TRVPageInfo.Assign(Source: TPersistent);
begin
if Source is TRVPageInfo then begin
StartY := TRVPageInfo(Source).StartY;
StartLineNo := TRVPageInfo(Source).StartLineNo;
end
else
inherited Assign(Source);
end;
{==================================================================}
type
TPrinterDevice = class
Driver, Device, Port: String;
end;
{$IFDEF FPC}
function GetPrinterDC: HDC;
begin
result := 0; // not used in lazarus
end;
{$ELSE}
function GetPrinterDC: HDC;
var ADevice, ADriver, APort: array[0..79] of Char;
ADeviceMode: THandle;
DevMode: PDeviceMode;
begin
//Printer.GetPrinter(ADevice,ADriver,APort,ADeviceMode);
if ADeviceMode<>0 then
DevMode := PDeviceMode(GlobalLock(ADeviceMode))
else
DevMode := nil;
Result := CreateDC(ADriver, ADevice, APort, DevMode);
if ADeviceMode<>0 then
GlobalUnlock(ADeviceMode);
end;
{$ENDIF}
constructor TRVPrint.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
rv := TPrintableRV.Create(Self);
if not (csDesigning in ComponentState) then rv.Parent := TWinControl(Self.Owner);
LeftMarginMM := 20;
RightMarginMM := 20;
TopMarginMM := 20;
BottomMarginMM := 20;
end;
{------------------------------------------------------------------}
function TRVPrint.GetLM: Integer;
begin
GetLM := rv.FLeftMarginMM;
end;
{------------------------------------------------------------------}
function TRVPrint.GetRM: Integer;
begin
GetRM := rv.FRightMarginMM;
end;
{------------------------------------------------------------------}
function TRVPrint.GetTM: Integer;
begin
GetTM := rv.FTopMarginMM;
end;
{------------------------------------------------------------------}
function TRVPrint.GetBM: Integer;
begin
GetBM := rv.FBottomMarginMM;
end;
{------------------------------------------------------------------}
procedure TRVPrint.SetLM(mm: Integer);
begin
rv.FLeftMarginMM := mm;
end;
{------------------------------------------------------------------}
procedure TRVPrint.SetRM(mm: Integer);
begin
rv.FRightMarginMM := mm;
end;
{------------------------------------------------------------------}
procedure TRVPrint.SetTM(mm: Integer);
begin
rv.FTopMarginMM := mm;
end;
{------------------------------------------------------------------}
procedure TRVPrint.SetBM(mm: Integer);
begin
rv.FBottomMarginMM := mm;
end;
{------------------------------------------------------------------}
function TRVPrint.FormatPages(PrintOptions:TRVDisplayOptions): Integer;
begin
rv.DisplayOptions := PrintOptions;
rv.FOnFormatting := FOnFormatting;
FormatPages := rv.FormatPages;
end;
{------------------------------------------------------------------}
procedure TRVPrint.Print(Title: String; Copies: Integer; Collate: Boolean);
begin
rv.FOnPrinting := FOnPrinting;
rv.Print(Title, Copies, Collate);
end;
{------------------------------------------------------------------}
procedure TRVPrint.PrintPages(firstPgNo, lastPgNo: Integer; Title: String;
Copies: Integer; Collate: Boolean);
begin
rv.FOnPrinting := FOnPrinting;
rv.PrintPages(firstPgNo, lastPgNo, Title, Copies, Collate);
end;
{------------------------------------------------------------------}
procedure TRVPrint.AssignSource(PrintMe: TRichView);
begin
rv.ShareLinesFrom(PrintMe);
rv.Style := PrintMe.Style;
rv.BackgroundBitmap := PrintMe.BackgroundBitmap;
rv.BackgroundStyle := PrintMe.BackgroundStyle;
end;
{------------------------------------------------------------------}
procedure TRVPrint.Clear;
begin
rv.Clear;
end;
{------------------------------------------------------------------}
procedure TRVPrint.MakePreview(pgNo: Integer; bmp: TBitmap);
var w,h: Integer;
begin
w :=
MulDiv(rv.Width+rv.TmpLM+rv.TmpRM, rv.Printersad.ppixScreen, rv.Printersad.ppixDevice);
h :=
MulDiv(rv.Height+rv.TmpTM+rv.TmpBM, rv.Printersad.ppiyScreen, rv.Printersad.ppiyDevice);
if bmp.Width <> w then bmp.Width := w;
if bmp.Height <> h then bmp.Height := h;
bmp.Canvas.Brush.Color := clWhite;
bmp.Canvas.Pen.Color := clWhite;
bmp.Canvas.FillRect(Rect(0,0,bmp.Width, bmp.Height));
rv.DrawPage(pgNo, bmp.Canvas);
end;
{------------------------------------------------------------------}
function TRVPrint.GetPagesCount: Integer;
begin
GetPagesCount := rv.pagescoll.Count;
end;
{==================================================================}
constructor TPrintableRV.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
pagescoll := TCollection.Create(TRVPageInfo);
Visible := False;
lines.Free;
lines := nil;
ShareContents := True;
end;
{------------------------------------------------------------------}
destructor TPrintableRV.Destroy;
begin
pagescoll.Free;
inherited Destroy;
end;
{------------------------------------------------------------------}
function TPrintableRV.FormatPages: Integer;
var i,j : Integer;
dli, dli2, dli3 :TDrawLineInfo;
nextnewline : Integer;
rvpi : TRVPageInfo;
nPages : Integer;
PrinterCanvas : TCanvas;
PHDC: HDC;
lpy, lpx, StartY : Integer;
begin
if Assigned(FOnFormatting) then FOnFormatting(Self,0, rvpsStarting);
VScrollVisible := False;
{$IFDEF FPC}
lpy := Printer.YDPI;
lpx := Printer.XDPI;
Width := Printer.PageWidth -MulDiv(FLeftMarginMM+FRightMarginMM, 5, 127)*lpx;
Height:= Printer.PageHeight - MulDiv(FTopMarginMM+FBottomMarginMM, 5, 127)*lpy;
with Printer.PaperSize.PaperRect do begin
lpx := MulDiv(PhysicalRect.Right-PhysicalRect.Left, 127, 5*lpx);
lpy := MulDiv(PhysicalRect.Bottom-PhysicalRect.Top, 127, 5*lpy);
end;
TmpLM := MulDiv(FLeftMarginMM, Printer.PageWidth, lpx);
TmpTM := MulDiv(FTopMarginMM, Printer.PageHeight, lpy);
TmpRM := MulDiv(FRightMarginMM, Printer.PageWidth, lpx);
TmpBM := MulDiv(FBottomMarginMM, Printer.PageHeight, lpy);
Format_(False, 0, Printer.Canvas, False);
InfoAboutSaD(PrinterSaD, Printer.Canvas);
{$ELSE}
PrinterCanvas := TCanvas.Create;
PHDC := GetPrinterDC;
PrinterCanvas.Handle := PHDC;
lpy := GetDeviceCaps(PHDC, LOGPIXELSY);
lpx := GetDeviceCaps(PHDC, LOGPIXELSX);
PrinterCanvas.Font.PixelsPerInch := lpy;
Width := Printer.PageWidth -MulDiv(FLeftMarginMM+FRightMarginMM, 5, 127)*lpx;
Height:= Printer.PageHeight - MulDiv(FTopMarginMM+FBottomMarginMM, 5, 127)*lpy;
lpx := GetDeviceCaps(PHDC, HORZSIZE);
lpy := GetDeviceCaps(PHDC, VERTSIZE);
TmpLM := MulDiv(FLeftMarginMM, Printer.PageWidth, lpx);
TmpTM := MulDiv(FTopMarginMM, Printer.PageHeight, lpy);
TmpRM := MulDiv(FRightMarginMM, Printer.PageWidth, lpx);
TmpBM := MulDiv(FBottomMarginMM, Printer.PageHeight, lpy);
Format_(False, 0, PrinterCanvas, False);
InfoAboutSaD(PrinterSaD, PrinterCanvas);
PrinterCanvas.Handle := 0;
PrinterCanvas.Free;
DeleteDC(PHDC);
{$ENDIF}
PagesColl.Clear;
FormatPages := 0;
if DrawLines.Count = 0 then exit;
nPages := 1;
rvpi := TRVPageInfo(PagesColl.Add);
rvpi.StartY := 0;
rvpi.StartLineNo := 0;
StartY := 0;
i := 0;
if Assigned(FOnFormatting) then FOnFormatting(Self,0, rvpsProceeding);
while i<DrawLines.Count do
begin
dli := TDrawLineInfo(DrawLines.Objects[i]);
if dli.Top+dli.Height>StartY+Height then begin { i-th item does not fit in page }
nextnewline := i;
{ searching first item in first last in new page }
for j:=i downto 0 do
begin
dli2 := TDrawLineInfo(DrawLines.Objects[j]);
if (j<>i) and (dli2.Top + dli2.Height <= dli.Top) then break;
nextnewline := j;
end;
{ page must contain one item at least}
if nextnewline = TRVPageInfo(PagesColl.Items[nPages-1]).StartLineNo then
inc(nextnewline);
if nextnewline<>DrawLines.Count then begin
{ searching min y of first line in new page }
dli2 := TDrawLineInfo(DrawLines.Objects[nextnewline]);
StartY := dli2.Top;
for j := nextnewline+1 to DrawLines.Count-1 do begin
dli3 := TDrawLineInfo(DrawLines.Objects[j]);
if (dli3.Top >= dli2.Top + dli2.Height) then break;
if dli3.Top<StartY then StartY := dli3.Top;
end;
rvpi := TRVPageInfo(PagesColl.Add);
rvpi.StartLineNo := nextnewline;
rvpi.StartY := StartY;
if Assigned(FOnFormatting) then FOnFormatting(Self,nPages, rvpsProceeding);
inc(nPages);
end;
i := nextnewline;
end
else
inc(i);
end;
if Assigned(FOnFormatting) then FOnFormatting(Self,nPages,rvpsProceeding);
FormatPages := nPages;
if Assigned(FOnFormatting) then FOnFormatting(Self,nPages, rvpsFinished);
end;
{------------------------------------------------------------------}
procedure DrawOnDevice(Canvas: TCanvas; x,y: Integer; sad:TScreenAndDevice; gr: TGraphic);
var
Info: PBitmapInfo;
InfoSize: DWORD;
Image: Pointer;
ImageSize: DWORD;
Bits: HBITMAP;
DIBWidth, DIBHeight: Longint;
PrintWidth, PrintHeight: Longint;
begin
if gr is TBitmap then begin
Bits := TBitmap(gr).Handle;
//GetDIBSizes(Bits, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
try
Image := AllocMem(ImageSize);
try
//GetDIB(Bits, 0, Info^, Image^);
with Info^.bmiHeader do
begin
DIBWidth := biWidth;
DIBHeight := biHeight;
end;
PrintWidth := MulDiv(DIBWidth, sad.ppixDevice, sad.ppixScreen);
PrintHeight:= MulDiv(DIBHeight, sad.ppiyDevice, sad.ppiyScreen);
StretchDIBits(Canvas.Handle, x, y, PrintWidth, PrintHeight, 0, 0,
DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
end;
end;
{------------------------------------------------------------------}
procedure TPrintableRV.DrawPage(pgNo: Integer; Canvas: TCanvas);
var i,no: Integer;
dli:TDrawLineInfo;
li: TLineInfo;
zerocoord: Integer;
first, last: Integer;
sad:TScreenAndDevice;
background, tmpbmp : TBitmap;
BackWidth, BackHeight: Integer;
//wmf: TMetafile;
begin
if not Assigned(FStyle) then begin
raise EStyleNotAssigned.Create('Style of printable TRichView component is not assigned');
exit;
end;
if (pgNo<1) or (pgNo>PagesColl.Count) then begin
raise EInvalidPageNo.Create('Invalid page number is specified for printing');
exit;
end;
first := TRVPageInfo(PagesColl.Items[pgNo-1]).StartLineNo;
if pgNo=PagesColl.Count then
last := DrawLines.Count-1
else
last := TRVPageInfo(PagesColl.Items[pgNo]).StartLineNo-1;
zerocoord := TRVPageInfo(PagesColl.Items[pgNo-1]).StartY-TmpTM;
Canvas.Brush.Style := bsClear;
InfoAboutSaD(sad, Canvas);
BackWidth := MulDiv(Width, printersad.ppixScreen, printersad.ppixDevice);
BackHeight := MulDiv(Height, printersad.ppiyScreen, printersad.ppiyDevice);
if (BackGroundStyle <> bsNoBitmap) and (BackGroundBitmap<>nil) then begin
if BackGroundStyle=bsTiledAndScrolled then BackGroundStyle:=bsTiled;
background := TBitmap.Create;
background.Width := BackWidth;
background.Height := BackHeight;
DrawBack(background.Canvas.Handle, Rect(0,0, BackWidth, BackHeight),
BackWidth, BackHeight);
DrawOnDevice(Canvas,
MulDiv(TmpLM, sad.ppixDevice, Printersad.ppixDevice),
MulDiv(TmpTM, sad.ppiyDevice, Printersad.ppiyDevice),
sad, background);
end
else begin
background := nil;
Canvas.Pen.Color := Style.Color;
Canvas.Brush.Color := Style.Color;
Canvas.FillRect(
Rect(
MulDiv(TmpLM, sad.ppixDevice, Printersad.ppixDevice),
MulDiv(TmpTM, sad.ppiyDevice, Printersad.ppiyDevice),
MulDiv(TmpLM, sad.ppixDevice, Printersad.ppixDevice)+
MulDiv(BackWidth, sad.ppixDevice, sad.ppixScreen),
MulDiv(TmpTM, sad.ppiyDevice, Printersad.ppiyDevice)+
MulDiv(BackHeight, sad.ppiyScreen, sad.ppiyScreen)));
end;
tmpbmp := TBitmap.Create;
try
for i:=first to last do begin
dli := TDrawLineInfo(drawlines.Objects[i]);
li := TLineInfo(lines.Objects[dli.LineNo]);
no := li.StyleNo;
if no>=0 then { text }
with FStyle.TextStyles[no] do begin
Canvas.Font.Color := Color;
Canvas.Font.Style := Style;
Canvas.Font.Size := Size;
Canvas.Font.Name := FontName;
{$IFDEF RICHVIEWDEF3}
Canvas.Font.CharSet := CharSet;
{$ENDIF}
Canvas.TextOut(
MulDiv(dli.Left+TmpLM, sad.ppixDevice, Printersad.ppixDevice),
MulDiv( dli.Top-zerocoord, sad.ppiyDevice, Printersad.ppiyDevice),
drawlines.Strings[i]);
continue;
end;
case no of
-3,-4,-6:{ graphics } { hotspots and bullets }
begin
//if li.gr is TMetafile then begin
// wmf := TMetafile.Create;
// try
// wmf.Assign(li.gr);
// wmf.Width := MulDiv(TMetafile(li.gr).Width, sad.ppixDevice, sad.ppixScreen);
// wmf.Height := MulDiv(TMetafile(li.gr).Height, sad.ppiyDevice, sad.ppiyScreen);
// Canvas.Draw(
// MulDiv(dli.Left+TmpLM, sad.ppixDevice, Printersad.ppixDevice),
// MulDiv( dli.Top-zerocoord, sad.ppiyDevice, Printersad.ppiyDevice),
// wmf);
// finally
// wmf.free;
// end;
// end
{else} begin
if no = rvsPicture then begin
tmpbmp.Width := TGraphic(li.gr).Width;
tmpbmp.Height := TGraphic(li.gr).Height;
end
else begin
tmpbmp.Width := TImageList(li.gr).Width;
tmpbmp.Height := TImageList(li.gr).Height;
end;
if background<>nil then
tmpbmp.Canvas.CopyRect(Rect(0,0, tmpbmp.Width, tmpbmp.Height),
background.Canvas,
Rect(
MulDiv(dli.Left, Printersad.ppixScreen, Printersad.ppixDevice),
MulDiv(dli.Top-(zerocoord+TmpTM), Printersad.ppiyScreen, Printersad.ppiyDevice),
MulDiv(dli.Left, Printersad.ppixScreen, Printersad.ppixDevice)+tmpbmp.Width,
MulDiv(dli.Top-(zerocoord+TmpTM), Printersad.ppiyScreen, Printersad.ppiyDevice)+tmpbmp.Height
)
)
else begin
tmpbmp.Canvas.Pen.Color := Style.Color;
tmpbmp.Canvas.Brush.Color := Style.Color;
tmpbmp.Canvas.FillRect(Rect(0,0, tmpbmp.Width, tmpbmp.Height));
end;
if no = rvsPicture then
tmpbmp.Canvas.Draw(0,0, TGraphic(li.gr))
else
TImageList(li.gr).Draw(tmpbmp.Canvas,0,0,li.imgNo);
DrawOnDevice(Canvas,
MulDiv(dli.Left+TmpLM, sad.ppixDevice, Printersad.ppixDevice),
MulDiv( dli.Top-zerocoord, sad.ppiyDevice, Printersad.ppiyDevice),
sad, tmpbmp);
end;
end;
-1: {break line}
begin
Canvas.Pen.Color := FStyle.TextStyles[0].Color;
Canvas.MoveTo(
MulDiv(dli.Left+TmpLM+MulDiv(5, printersad.ppixDevice, printersad.ppixScreen),
sad.ppixDevice, Printersad.ppixDevice),
MulDiv(dli.Top-zerocoord+MulDiv(5, printersad.ppiyDevice, printersad.ppiyScreen),
sad.ppiyDevice, Printersad.ppiyDevice));
Canvas.LineTo(
MulDiv(Width+TmpLM-MulDiv(5+RightMargin, printersad.ppixDevice, printersad.ppixScreen),
sad.ppixDevice, Printersad.ppixDevice),
MulDiv(dli.Top-zerocoord+MulDiv(5, printersad.ppiyDevice, printersad.ppiyScreen),
sad.ppiyDevice, Printersad.ppiyDevice));
end;
{ controls is not supported yet }
end;
end;
finally
background.Free;
tmpbmp.Free;
end;
end;
{------------------------------------------------------------------}
procedure TPrintableRV.PrintPages(firstPgNo, lastPgNo: Integer; Title: String;
Copies: Integer; Collate: Boolean);
var i,copyno: Integer;
PrinterCopies: Integer;
begin
if Assigned(FOnPrinting) then FOnPrinting(Self,0, rvpsStarting);
Printer.Title := Title;
PrinterCopies := Printer.Copies; { storing }
//if pcCopies in Printer.Capabilities then
// begin
// Printer.Copies := Copies;
// // Printer can make copies and collation if needed
// Copies := 1; // TRichView need not support copies and collation itself
// end
//else
Printer.Copies := 1; // TRichView will provide copies and collation itself
Printer.BeginDoc;
if Collate then
for copyno:= 1 to Copies do
for i := firstPgNo to lastPgNo do
begin
DrawPage(i, Printer.Canvas);
if Assigned(FOnPrinting) then FOnPrinting(Self,i, rvpsProceeding);
if not ((i=lastPgNo) and (copyno=Copies)) then Printer.NewPage;
end
else
for i := firstPgNo to lastPgNo do
for copyno:= 1 to Copies do
begin
DrawPage(i, Printer.Canvas);
if Assigned(FOnPrinting) then FOnPrinting(Self,i, rvpsProceeding);
if not ((i=lastPgNo) and (copyno=Copies)) then Printer.NewPage;
end;
Printer.EndDoc;
Printer.Copies := PrinterCopies; { restoring }
if Assigned(FOnPrinting) then FOnPrinting(Self,0, rvpsFinished);
end;
{------------------------------------------------------------------}
procedure TPrintableRV.Print(Title: String; Copies: Integer; Collate: Boolean);
begin
PrintPages(1, PagesColl.Count, Title, Copies, Collate);
end;
end.

View File

@ -0,0 +1,42 @@
Lazarus RichView
Original Package: http://www.trichview.com
Contributors
Paul Burton Ported to Lazarus by Paul Burton
http://www.burtonsoftware.co.uk
Jesus Reyes A. Additional portability and fixes
jesusrmx@yahoo.com.mx
This package had been tested in Lazarus 0.9.17
under win32 and Linux.
Installation
* Create the directory lazarus\components\richview
* Unzip the files from the zip file in this directory
* Open lazarus
* Open lazrichview.lpk with Component/Open package file (.lpk)
* Click on Compile
* Click on Install
Change Log
* 30.12.05 - First Release (v0.5.2.1)
* 08.09.06 - Fixes and portability (v0.5.2.2)
- Removed Windows dependency.
- Fixed text selection highlight.
- Fixed text position.
- Added component palette icons.
- Fixed mouse cursor disappear when hovering links.
- Added Printer4Lazarus requeriment.
- Added demo
- Fixed flicker
- Fixed Scrolling in linux
- etc.

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View File

@ -0,0 +1,32 @@
/* XPM */
static char *graphic[] = {
"24 24 5 1",
". c None",
", c #000000",
"- c #FFFFFF",
"* c #FFFF00",
"a c #FF0000",
"........................",
"........................",
"..,,,,,,,,,,,,,,,,,,....",
"..,----------------,....",
"..,---,,-,,,,,,,,,-,....",
"..,---,,-,*******,-,....",
"..,--,-,-,*******,-,....",
"..,--,,,-,*******,-,....",
"..,-,--,-,*******,-,....",
"..,-,--,-,,,,,,,,,-,....",
"..,-----------,*,--,....",
"..,-a-,,,,,,,-,*,--,....",
"..,-----------,*,--,....",
"..,-a-,,,,,,,-,*,,,,,...",
"..,-----------,*,*,*,,..",
"..,-a-,,,,,--,,*,*,*,,..",
"..,---------,*,******,..",
"..,-a-,,,,,-,*,******,..",
"..,---------,*,******,..",
"..,----------,*******,..",
"..,,,,,,,,,,,,,*****,,..",
"...............,****,...",
"................,,,,....",
"........................"}

View File

@ -0,0 +1,34 @@
/* XPM */
static char *graphic[] = {
"24 24 7 1",
". c None",
", c #000000",
"- c #FFFFFF",
"* c #FFFF00",
"a c #FF0000",
"b c #C6C6C6",
"c c #848484",
"........................",
"........................",
"..,,,,,,,,,,,,,,,,,,....",
"..,----------------,....",
"..,---,,-,,,,,,,,,-,....",
"..,---,,-,*******,-,....",
"..,--,-,-,*******,-,....",
"..,--,,,-,*******,-,....",
"..,-,--,-,*******,-,....",
"..,-,--,-,,,,,,,,,-,....",
"..,----------,,,,,,,,...",
"..,-a-,,,,,--,------,...",
"..,---------,-,-,,-,....",
"..,-a-,,,,--,--,*,-,....",
"..,--------,-,-,,-,,....",
"..,-a----,,,------,,,,..",
"..,----,,bc,,,,,,,,cb-,.",
"..,-a--,bbbbbbbbbbbb-c,.",
"..,---c-------------cc,.",
"..,---,-aabbbbbbbbbbcc,.",
"..,,,,,-bbbbbbbbbbbbc,..",
"......cbcccccccccccc,...",
".......,,,,,,,,,,,,,....",
"........................"}

View File

@ -0,0 +1,32 @@
/* XPM */
static char *graphic[] = {
"24 24 5 1",
". c None",
", c #000000",
"- c #FFFF00",
"* c #FFFFFF",
"a c #FF0000",
"........................",
"........................",
"..,,,,,,,,,,,,,,,,,,....",
"..,................,....",
"..,...,,.,,,,,,,,,.,....",
"..,...,,.,-------,.,....",
"..,..,.,.,--*******,**..",
"..,..,,,.,**.,,,,,.*,*..",
"..,.,..,.*.,,,.**.,,,*..",
"..,.,..,.*,,,**,,*,,,*..",
"..,......*,,,*...*.,.*..",
"..,.a.,,,*,,,**...*,*...",
"..,......*,,,,***.***...",
"..,.a.,,,*.,,,,,**,,....",
"..,.......*.,,,,,,**....",
"..,.a.,,,,,**.,,,,,**...",
"..,.....***..**.,,,,*...",
"..,.a.,,*,*,,,.*.,,,*...",
"..,....*.,.*....*,,,*...",
"..,....*,,,.*..*.,,.*...",
"..,,,,,*,,,,.**.,,,*....",
".......*,*.,,,,,,.**....",
".......**.********......",
"........................"}

View File

@ -0,0 +1,60 @@
LazarusResources.Add('RV_JUMP_CURSOR','CUR',[
#0#0#2#0#1#0' '#0#0#6#0#0#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0
+#1#0#0#0#0#0#0#1#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#0
+#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#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#254#0#0#1#254#0#0#3#255#0#0#3#255#0#0#7#255#0#0#7#255#128#0#15
+#255#128#0#11#255#128#0#27#255#128#0';'#255#128#0'3'#253#128#0#3'm'#128#0#3
+'m'#0#0#3'l'#0#0#3'`'#0#0#3#0#0#0#3#0#0#0#3#0#0#0#3#0#0#0#3#0#0#0#0#0#0#0#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#252#0#255#255#252#0#255#255#252#0#255#255#248#0''#255#248#0''#255#240
+#0''#255#240#0'?'#255#224#0'?'#255#224#0'?'#255#192#0'?'#255#128#0'?'#255
+#128#0'?'#255#136#0'?'#255#248#0''#255#248#0#255#255#248#3#255#255#248#31
+#255#255#248''#255#255#248''#255#255#248''#255#255#248''#255#255#252#255
+#255#255
]);
LazarusResources.Add('TRICHVIEW','XPM',[
'/* XPM */'#10'static char *graphic[] = {'#10'"24 24 5 1",'#10'". c None",'#10
+'", c #000000",'#10'"- c #FFFFFF",'#10'"* c #FFFF00",'#10'"a c #FF0000",'#10
+'"........................",'#10'"........................",'#10'"..,,,,,,,,'
+',,,,,,,,,,....",'#10'"..,----------------,....",'#10'"..,---,,-,,,,,,,,,-,.'
+'...",'#10'"..,---,,-,*******,-,....",'#10'"..,--,-,-,*******,-,....",'#10'"'
+'..,--,,,-,*******,-,....",'#10'"..,-,--,-,*******,-,....",'#10'"..,-,--,-,,'
+',,,,,,,-,....",'#10'"..,-----------,*,--,....",'#10'"..,-a-,,,,,,,-,*,--,..'
+'..",'#10'"..,-----------,*,--,....",'#10'"..,-a-,,,,,,,-,*,,,,,...",'#10'".'
+'.,-----------,*,*,*,,..",'#10'"..,-a-,,,,,--,,*,*,*,,..",'#10'"..,---------'
+',*,******,..",'#10'"..,-a-,,,,,-,*,******,..",'#10'"..,---------,*,******,.'
+'.",'#10'"..,----------,*******,..",'#10'"..,,,,,,,,,,,,,*****,,..",'#10'"..'
+'.............,****,...",'#10'"................,,,,....",'#10'".............'
+'..........."}'#10
]);
LazarusResources.Add('TRVPRINT','XPM',[
'/* XPM */'#10'static char *graphic[] = {'#10'"24 24 7 1",'#10'". c None",'#10
+'", c #000000",'#10'"- c #FFFFFF",'#10'"* c #FFFF00",'#10'"a c #FF0000",'#10
+'"b c #C6C6C6",'#10'"c c #848484",'#10'"........................",'#10'"....'
+'....................",'#10'"..,,,,,,,,,,,,,,,,,,....",'#10'"..,------------'
+'----,....",'#10'"..,---,,-,,,,,,,,,-,....",'#10'"..,---,,-,*******,-,....",'
+#10'"..,--,-,-,*******,-,....",'#10'"..,--,,,-,*******,-,....",'#10'"..,-,--'
+',-,*******,-,....",'#10'"..,-,--,-,,,,,,,,,-,....",'#10'"..,----------,,,,,'
+',,,...",'#10'"..,-a-,,,,,--,------,...",'#10'"..,---------,-,-,,-,....",'#10
+'"..,-a-,,,,--,--,*,-,....",'#10'"..,--------,-,-,,-,,....",'#10'"..,-a----,'
+',,------,,,,..",'#10'"..,----,,bc,,,,,,,,cb-,.",'#10'"..,-a--,bbbbbbbbbbbb-'
+'c,.",'#10'"..,---c-------------cc,.",'#10'"..,---,-aabbbbbbbbbbcc,.",'#10'"'
+'..,,,,,-bbbbbbbbbbbbc,..",'#10'"......cbcccccccccccc,...",'#10'".......,,,,'
+',,,,,,,,,....",'#10'"........................"}'#10
]);
LazarusResources.Add('TRVSTYLE','XPM',[
'/* XPM */'#10'static char *graphic[] = {'#10'"24 24 5 1",'#10'". c None",'#10
+'", c #000000",'#10'"- c #FFFF00",'#10'"* c #FFFFFF",'#10'"a c #FF0000",'#10
+'"........................",'#10'"........................",'#10'"..,,,,,,,,'
+',,,,,,,,,,....",'#10'"..,................,....",'#10'"..,...,,.,,,,,,,,,.,.'
+'...",'#10'"..,...,,.,-------,.,....",'#10'"..,..,.,.,--*******,**..",'#10'"'
+'..,..,,,.,**.,,,,,.*,*..",'#10'"..,.,..,.*.,,,.**.,,,*..",'#10'"..,.,..,.*,'
+',,**,,*,,,*..",'#10'"..,......*,,,*...*.,.*..",'#10'"..,.a.,,,*,,,**...*,*.'
+'..",'#10'"..,......*,,,,***.***...",'#10'"..,.a.,,,*.,,,,,**,,....",'#10'".'
+'.,.......*.,,,,,,**....",'#10'"..,.a.,,,,,**.,,,,,**...",'#10'"..,.....***.'
+'.**.,,,,*...",'#10'"..,.a.,,*,*,,,.*.,,,*...",'#10'"..,....*.,.*....*,,,*..'
+'.",'#10'"..,....*,,,.*..*.,,.*...",'#10'"..,,,,,*,,,,.**.,,,*....",'#10'"..'
+'.....*,*.,,,,,,.**....",'#10'".......**.********......",'#10'".............'
+'..........."}'#10
]);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
{ Determine Delphi/C++Builder version }
{$IFNDEF VER80} { not Delphi 1.0 }
{$IFNDEF VER90} { not Delphi 2.0 }
{$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *)
{$IFNDEF VER93} { not C++Builder 1.0 }
{$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *)
{$IFNDEF VER110} { not C++Builder 3.0 }
{$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *)
{$IFNDEF VER100} { not Delphi 3.0 }
{$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *)
{$IFNDEF VER120} { not Delphi 4.0 }
{$IFNDEF VER125} { not C++Builder 4.0 }
{$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *)
{$IFNDEF VER130} { not Delphi 5.0 }
{$IFNDEF VER135} { not C++Builder 5.0 }
{$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *)
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}

View File

@ -0,0 +1,357 @@
{this file is included in RichView.pas}
{------------------------------------}
procedure ReplaceStr(var str: String; old, new: String);
var p: Integer;
begin
while true do begin
p := pos(old, str);
if p=0 then break;
Delete(str,p, Length(old));
Insert(new, str, p);
end;
end;
{------------------------------------------------------------}
procedure ReplaceStr2(var str: String; old, new: String);
var p,ptr: Integer;
s: String;
begin
s := str;
ptr := 1;
while true do begin
p := pos(old, s);
if p=0 then break;
inc(p, ptr-1);
Delete(str,p, Length(old));
Insert(new, str, p);
ptr := p+Length(new);
s := Copy(str, ptr, Length(str)+1-ptr);
end;
end;
{------------------------------------------------------------}
function MakeHTMLStr(str:String): String;
begin
ReplaceStr2(str, '&', '&amp');
ReplaceStr(str, '>', '&gt');
ReplaceStr(str, '<', '&lt');
ReplaceStr(str, ' ', '&nbsp ');
MakeHTMLStr := str;
end;
{------------------------------------------------------------}
function ColorCode(C: TColor): String;
var s: String;
begin
s := IntToHex(ColorToRGB(c),6);
s := Copy(s,5,2)+Copy(s,3,2)+Copy(s,1,2);
ColorCode := '"#'+s+'"';
end;
{------------------------------------------------------------}
function GetFontSize(pts: Integer): Integer;
begin
if pts<=8 then
GetFontSize := 1
else
case pts of
9..10: GetFontSize := 2;
11..12: GetFontSize := 3;
13..14: GetFontSize := 4;
15..18: GetFontSize := 5;
19..24: GetFontSize := 6;
else GetFontSize := 7;
end;
end;
{------------------------------------------------------------}
function OpenFontTag(ts: TFontInfo; normalfs: TFontStyles; Relative: Boolean): String;
var s: String;
begin
s := '<FONT size='+IntToStr(GetFontSize(ts.Size))+ ' color='+ColorCode(ts.Color)+
' face="'+ts.FontName+'">';
if Relative then begin
if not (fsBold in ts.Style) and (fsBold in normalfs) then s := s+'</B>';
if not (fsItalic in ts.Style) and (fsItalic in normalfs) then s := s+'</I>';
if not (fsUnderline in ts.Style) and (fsUnderline in normalfs) then s := s+'</U>';
if not (fsStrikeOut in ts.Style) and (fsStrikeOut in normalfs) then s := s+'</S>';
if (fsBold in ts.Style) and not (fsBold in normalfs) then s := s+'<B>';
if (fsItalic in ts.Style) and not (fsItalic in normalfs) then s := s+'<I>';
if (fsUnderline in ts.Style) and not (fsUnderline in normalfs) then s := s+'<U>';
if (fsStrikeOut in ts.Style) and not (fsStrikeOut in normalfs) then s := s+'<S>';
end
else begin
if (fsBold in ts.Style) then s := s+'<B>';
if (fsItalic in ts.Style) then s := s+'<I>';
if (fsUnderline in ts.Style) then s := s+'<U>';
if (fsStrikeOut in ts.Style) then s := s+'<S>';
end;
OpenFontTag := s;
end;
{------------------------------------------------------------}
function CloseFontTag(ts: TFontInfo; normalfs: TFontStyles; Relative: Boolean):String;
var s: String;
begin
if Relative then begin
if (fsBold in ts.Style) and not (fsBold in normalfs) then s := s+'</B>';
if (fsItalic in ts.Style) and not (fsItalic in normalfs) then s := s+'</I>';
if (fsUnderline in ts.Style) and not (fsUnderline in normalfs) then s := s+'</U>';
if (fsStrikeOut in ts.Style) and not (fsStrikeOut in normalfs) then s := s+'</S>';
if not (fsBold in ts.Style) and (fsBold in normalfs) then s := s+'<B>';
if not (fsItalic in ts.Style) and (fsItalic in normalfs) then s := s+'<I>';
if not (fsUnderline in ts.Style) and (fsUnderline in normalfs) then s := s+'<U>';
if not (fsStrikeOut in ts.Style) and (fsStrikeOut in normalfs) then s := s+'<S>';
end
else begin
if (fsBold in ts.Style) then s := s+'</B>';
if (fsItalic in ts.Style) then s := s+'</I>';
if (fsUnderline in ts.Style) then s := s+'</U>';
if (fsStrikeOut in ts.Style) then s := s+'</S>';
end;
s:= s+'</FONT>';
CloseFontTag := s;
end;
{------------------------------------------------------------}
function TRichView.GetNextFileName(Path: String): String;
var fn: String;
begin
while True do begin
inc(imgSaveNo);
fn := Path+imgSavePrefix+IntToStr(imgSaveNo)+'.bmp';
GetNextFileName := fn;
if not FileExists(fn) then exit;
if (rvsoOverrideImages in SaveOptions) and
((FileGetAttr(fn) and faReadOnly)=0) then exit;
end;
end;
{------------------------------------------------------------}
function TRichView.SavePicture(DocumentSaveFormat: TRVSaveFormat; Path: String; gr: TGraphic): String;
var fn: String;
bmp: TBitmap;
begin
{ DocumentSaveFormat in this version is ignored }
fn := GetNextFileName(Path);
SavePicture := ExtractFileName(fn);
if gr is TBitmap then begin
gr.SaveToFile(fn);
exit;
end;
bmp := TBitmap.Create;
try
bmp.Height := gr.Height;
bmp.Width := gr.Width;
bmp.Canvas.Brush.Color := Style.Color;
bmp.Canvas.Pen.Color := Style.Color;
bmp.Canvas.FillRect(Rect(0,0,Width,Height));
bmp.Canvas.Draw(0,0,gr);
bmp.SaveToFile(fn);
finally
bmp.Free;
end;
end;
{------------------------------------------------------------}
function TRichView.SaveHTML(FileName,Title,ImagesPrefix: String; Options: TRVSaveOptions):Boolean;
var f: TextFile;
i,j: Integer;
li: TLineInfo;
needbr: Boolean;
s: String;
cpno, jumpno: Integer;
Bullets: TStringList;
fn: String;
bmp: TBitmap;
rvi: TRVInteger2;
begin
{$I+}
SaveHTML := False;
if Style = nil then exit;
SaveHTML := True;
imgSavePrefix := ImagesPrefix;
imgSaveNo := 0;
SaveOptions := Options;
cpno := 0;
jumpno := FirstJumpNo;
Bullets := TStringList.Create;
try
AssignFile(f, FileName);
Rewrite(f);
try
WriteLn(f,'<HTML><HEAD><TITLE>'+Title+'</TITLE></HEAD>');
Writeln(f,'<BODY bgcolor='+ColorCode(Style.Color));
if (BackgroundStyle<>bsNoBitmap) and
(BackgroundBitmap<>nil) then begin
Writeln(f,' background='+ SavePicture(rvsfHTML, ExtractFilePath(FileName), BackgroundBitmap));
if (BackgroundStyle<>bsTiledAndScrolled) then
Writeln(f,' bgproperties=fixed');
end;
Writeln(f,' leftmargin='+IntToStr(LeftMargin)+'>');
WriteLn(f,OpenFontTag(Style.TextStyles[rvsNormal], Style.TextStyles[rvsNormal].Style, False));
needbr := False;
for i:=0 to Lines.Count-1 do begin
li := TLineInfo(lines.Objects[i]);
case li.StyleNo of
{*} rvsBreak:
begin
Writeln(f,'<HR noshade size=1>');
needbr := False;
end;
{*} rvsComponent:
if Assigned(FOnSaveComponentToFile) then begin
s := '';
FOnSaveComponentToFile(Self, ExtractFilePath(FileName), li.gr, rvsfHTML, s);
if s<>'' then begin
Writeln(f,s);
needbr := True;
end;
end;
{*} rvsCheckPoint:
begin
WriteLn(f);
WriteLn(f,'<A name=RichViewCheckPoint'+IntToStr(cpno)+'></A>');
inc(cpno);
end;
{*} rvsPicture:
begin
if (not li.Center) and (not li.SameAsPrev) then WriteLn(f,'<BR>');
if li.Center then Write(f,'<CENTER>');
Write(f,'<IMG src="'+
SavePicture(rvsfHTML, ExtractFilePath(FileName), TGraphic(li.gr))+
'">');
if li.Center then Write(f,'</CENTER>');
needbr := True;
end;
{*} rvsBullet, rvsHotSpot:
begin
if (not li.SameAsPrev) and needbr then WriteLn(f,'<BR>');
fn := '';
for j:=0 to Bullets.Count-1 do
if (TLineInfo(lines.Objects[i]).gr =
TLineInfo(lines.Objects[TRVInteger2(Bullets.Objects[j]).val]).gr) and
(TLineInfo(lines.Objects[i]).imgNo =
TLineInfo(lines.Objects[TRVInteger2(Bullets.Objects[j]).val]).imgNo) then begin
fn := Bullets[j];
end;
if fn='' then begin
bmp := TBitmap.Create;
bmp.Width := TImageList(li.gr).Width;
bmp.Height := TImageList(li.gr).Height;
bmp.Canvas.Brush.Color := Style.Color;
bmp.Canvas.Pen.Color := Style.Color;
bmp.Canvas.FillRect(Rect(0,0,Width,Height));
TImageList(li.gr).Draw(bmp.Canvas, 0, 0, li.imgNo);
fn := SavePicture(rvsfHTML, ExtractFilePath(FileName), bmp);
rvi := TRVInteger2.Create;
rvi.Val := i;
Bullets.AddObject(fn, rvi);
bmp.Free;
end;
s := '';
if li.StyleNo=rvsHotSpot then begin
if Assigned(FOnURLNeeded) then
FOnURLNeeded(Self,jumpno,s);
inc(jumpno);
if s<>'' then Write(f,'<A href='+s+'>');
end;
Write(f,'<IMG src="'+fn+'">');
if s<>'' then Write(f,'</A>');
needbr := True;
end;
{*} rvsJump1, rvsJump2:
begin
if (not li.Center) and (not li.SameAsPrev) and needbr then WriteLn(f,'<BR>');
if li.Center then Write(f,'<CENTER>');
s := '';
if Assigned(FOnURLNeeded) then
FOnURLNeeded(Self,jumpno,s);
inc(jumpno);
if s<>'' then Write(f,'<A href='+s+'>');
Write(f,OpenFontTag(Style.TextStyles[li.StyleNo], Style.TextStyles[rvsNormal].Style, True)+
MakeHTMLStr(Lines[i])+CloseFontTag(Style.TextStyles[li.StyleNo], Style.TextStyles[rvsNormal].Style, True));
if s<>'' then Write(f,'</A>');
needbr := not li.Center;
end;
{*} rvsNormal:
begin
if (not li.Center) and (not li.SameAsPrev) and needbr then WriteLn(f,'<BR>');
if li.Center then
Write(f,'<CENTER>'+MakeHTMLStr(Lines[i])+'</CENTER>')
else
Write(f,MakeHTMLStr(Lines[i]));
needbr := not li.Center;
end;
{*} else
begin
if (not li.Center) and (not li.SameAsPrev) and needbr then WriteLn(f,'<BR>');
if li.Center then Write(f,'<CENTER>');
Write(f,OpenFontTag(Style.TextStyles[li.StyleNo], Style.TextStyles[rvsNormal].Style, True)+
MakeHTMLStr(Lines[i])+CloseFontTag(Style.TextStyles[li.StyleNo], Style.TextStyles[rvsNormal].Style, True));
if li.Center then Write(f,'</CENTER>');
needbr := not li.Center;
end;
end;
end;
Writeln(f);
WriteLn(f,CloseFontTag(Style.TextStyles[rvsNormal], Style.TextStyles[rvsNormal].Style, False));
WriteLn(f,'</BODY></HTML>');
finally
for j:=0 to Bullets.Count-1 do begin
TRVInteger2(Bullets.Objects[j]).Free;
Bullets.Objects[j] := nil;
end;
Bullets.Free;
CloseFile(f)
end;
except
SaveHTML := False;
end;
end;
{------------------------------------------------------------------}
function TRichView.SaveText(FileName: String; LineWidth: Integer):Boolean;
var f: TextFile;
i,j: Integer;
li: TLineInfo;
s, s2: String;
begin
{$I+}
SaveText := True;
s := '';
for j:=1 to LineWidth do s := s + '-';
try
AssignFile(f, FileName);
Rewrite(f);
try
for i:=0 to Lines.Count-1 do begin
li := TLineInfo(lines.Objects[i]);
case li.StyleNo of
{*} rvsBreak:
begin Writeln(f); Write(f,s); end;
{*} rvsCheckPoint: ;
{*} rvsComponent:
begin
if (not li.SameAsPrev) then WriteLn(f);
if Assigned(FOnSaveComponentToFile) then begin
s2 := '';
FOnSaveComponentToFile(Self,ExtractFilePath(FileName), li.gr, rvsfText, s2);
if s2<>'' then Write(f,s2);
end;
end;
{*} rvsPicture,rvsHotSpot,rvsBullet: {case}
if (not li.SameAsPrev) then WriteLn(f);
{*} else {case}
begin
if (not li.SameAsPrev) then WriteLn(f);
if li.Center then begin
s2 := '';
for j:=1 to (LineWidth-Length(Lines[i])) div 2 do
s2 := s2 + ' ';
Write(f,s2+Lines[i])
end
else
Write(f,Lines[i]);
end;
end;
end;
finally
CloseFile(f)
end;
except
SaveText := False;
end;
end;

View File

@ -0,0 +1,26 @@
unit RVFreeReg;
interface
{$I RV_Defs.inc}
uses
Classes,
{$IFDEF FPC}
LResources,
{$ENDIF}
RichView, RVStyle, PtblRV;
procedure Register;
implementation
{--------------------------------------------------------------}
procedure Register;
begin
RegisterComponents('RichView', [TRVStyle, TRichView, TRVPrint]);
end;
initialization
{$I richview.lrs}
end.

View File

@ -0,0 +1,116 @@
unit RVLazIntf;
{$mode objfpc}{$H+}
interface
uses Types, LCLType, LMessages;
type
TWMSize = TLMSize;
TWMEraseBkgnd = TLMEraseBkgnd;
TMessage = TLMessage;
TSize = Types.TSize;
TWMHScroll = TLMHScroll;
TWMVScroll = TLMVScroll;
TWMKeyDown = TLMKeyDown;
TWMGetDlgCode = TLMNoParams;
const
WM_SIZE = LM_SIZE;
WM_ERASEBKGND = LM_ERASEBKGND;
WM_HSCROLL = LM_HSCROLL;
WM_VSCROLL = LM_VSCROLL;
WM_KEYDOWN = LM_KEYDOWN;
WM_GETDLGCODE = LM_GETDLGCODE;
CM_MOUSELEAVE = $B000+20;
// todo:
// - this should go to TWidgetset.GetTextExtentExPoint
// lets keep it here by now
// - merge warning message in TWidgetset.GetTextExtentExPoint
// about
function MyGetTextExtentExPoint(DC:HDC; Str:PChar; Count,MaxWidth:Integer;
AMax: PInteger; PartialWidths:PInteger; var sz: TSize): boolean;
implementation
uses LCLIntf;
function MyGetTextExtentExPoint(DC:HDC; Str:PChar; Count,MaxWidth:Integer;
AMax: PInteger; PartialWidths:PInteger; var sz: TSize): boolean;
var
TestCount: Integer;
TestSize : TSize;
Increment: Integer;
function CalcTestSize: boolean;
begin
result := GetTextExtentPoint(DC,Str,TestCount,TestSize);
end;
procedure Report;
begin
GetTextExtentExPoint(DC, Str, Count, MaxWidth, @TestCount, nil, TestSize);
if (TestCount<>AMax^) or (TestSize.Cx<>Sz.Cx) then begin
WriteLn('------> Diferencia');
WriteLn(' AMax^=',AMax^, ' Sz.Cx=',Sz.Cx);
WriteLn('TestCount=',TestCount,' TestSize.Cx=',testSize.Cx);
end;
end;
begin
TestCount := Count;
result := CalcTestSize;
if not result then
exit;
Sz := TestSize;
AMax^ := TestCount;
if (TestSize.Cx=0) or (TestSize.cx<MaxWidth) then begin
//Report;
exit;
end;
TestCount := (MaxWidth * TestCount) div TestSize.Cx;
Result := CalcTestSize;
if not result then
exit;
AMax^ := TestCount;
if TestSize.cx<MaxWidth then Increment:=1 else
if TestSize.cx>MaxWidth then Increment:=-1
else Increment:=0;
while ((Increment>0)and(TestCount<Count)) or
((Increment<0)and(TestCount>0))
do begin
Inc(TestCount, Increment);
result := CalcTestSize;
if not Result or
((Increment>0)and(TestSize.cx>MaxWidth))
then
// no valid or old AMax was correct
break;
AMax^ := TestCount;
if ((Increment<0)and(TestSize.cx<=MaxWidth))
then
// AMax just become correct
break;
end;
//Report;
end;
end.

View File

@ -0,0 +1,323 @@
unit RVScroll;
interface
uses
{$IFDEF FPC}
RVLazIntf, LCLType, LCLIntf,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Forms, Controls, Graphics;
type
{ TRVScroller }
TRVScroller = class(TCustomControl)
private
FTracking: Boolean;
FFullRedraw: Boolean;
FVScrollVisible: Boolean;
FOnVScrolled: TNotifyEvent;
function GetVScrollPos: Integer;
procedure SetVScrollPos(Pos: Integer);
function GetVScrollMax: Integer;
procedure SetVScrollVisible(vis: Boolean);
protected
SmallStep, HPos, VPos, XSize, YSize: Integer;
procedure CreateParams(var Params: TCreateParams); //override;
procedure CreateWnd; override;
procedure UpdateScrollBars(XS, YS: Integer);
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure SetVPos(p: Integer);
procedure SetHPos(p: Integer);
procedure Paint; override;
procedure ScrollChildren(dx, dy: Integer);
procedure UpdateChildren;
property FullRedraw: Boolean read FFullRedraw write FFullRedraw;
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
procedure EraseBackground(DC: HDC); override;
procedure ScrollTo(y: Integer);
property VScrollPos: Integer read GetVScrollPos write SetVScrollPos;
property VScrollMax: Integer read GetVScrollMax;
published
{ Published declarations }
property Visible;
property TabStop;
property TabOrder;
property Align;
property HelpContext;
property Tracking: Boolean read FTracking write FTracking;
property VScrollVisible: Boolean read FVScrollVisible write SetVScrollVisible;
property OnVScrolled: TNotifyEvent read FOnVScrolled write FOnVScrolled;
end;
procedure Tag2Y(AControl: TControl);
implementation
{------------------------------------------------------}
procedure Tag2Y(AControl: TControl);
begin
if AControl.Tag>10000 then
AControl.Top := 10000
else
if AControl.Tag<-10000 then
AControl.Top := -10000
else
AControl.Top := AControl.Tag;
end;
{------------------------------------------------------}
constructor TRVScroller.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
TabStop := True;
FTracking := True;
FFullRedraw := False;
FVScrollVisible := True;
end;
procedure TRVScroller.EraseBackground(DC: HDC);
begin
end;
{------------------------------------------------------}
procedure TRVScroller.CreateParams(var Params: TCreateParams);
begin
//inherited CreateParams(Params); //CreateWindow
Params.Style := Params.Style or WS_CLIPCHILDREN or WS_HSCROLL or WS_VSCROLL;
end;
{------------------------------------------------------}
procedure TRVScroller.CreateWnd;
begin
inherited CreateWnd;
SmallStep := 10;
VPos := 0;
HPos := 0;
UpdateScrollBars(ClientWidth, (ClientHeight div SmallStep));
end;
{------------------------------------------------------}
procedure TRVScroller.UpdateScrollBars(XS, YS: Integer);
var
ScrollInfo: TScrollInfo;
begin
XSize := XS;
YSize := YS;
ScrollInfo.cbSize := SizeOf(ScrollInfo);
ScrollInfo.fMask := SIF_ALL;
ScrollInfo.nMin := 0;
ScrollInfo.nPage := ClientHeight div SmallStep;
ScrollInfo.nMax := YSize;
ScrollInfo.nPos := VPos;
ScrollInfo.nTrackPos := 0;
SetScrollInfo(Handle, SB_VERT, ScrollInfo, True);
if not FVScrollVisible then
ShowScrollBar(Handle, SB_VERT, FVScrollVisible);
ScrollInfo.fMask := SIF_ALL;
ScrollInfo.nMin := 0;
ScrollInfo.nMax := XSize-1;
ScrollInfo.nPage := ClientWidth;
ScrollInfo.nPos := VPos;
ScrollInfo.nTrackPos := 0;
SetScrollInfo(Handle, SB_HORZ, ScrollInfo, True);
//UpdateChildren;
end;
{------------------------------------------------------}
procedure TRVScroller.UpdateChildren;
var i: Integer;
begin
for i:=0 to ControlCount-1 do
Tag2Y(Controls[i]);
end;
{------------------------------------------------------}
procedure TRVScroller.ScrollChildren(dx, dy: Integer);
var i: Integer;
begin
if (dx=0) and (dy=0) then exit;
for i:=0 to ControlCount-1 do begin
if dy<>0 then begin
Controls[i].Tag := Controls[i].Tag+dy;
Tag2Y(Controls[i]);
end;
if dx<>0 then Controls[i].Left := Controls[i].Left + dx;
end
end;
{------------------------------------------------------}
procedure TRVScroller.WMHScroll(var Message: TWMHScroll);
begin
with Message do
case ScrollCode of
SB_LINEUP: SetHPos(HPos - SmallStep);
SB_LINEDOWN: SetHPos(HPos + SmallStep);
SB_PAGEUP: SetHPos(HPos-10*SmallStep);
SB_PAGEDOWN: SetHPos(HPos+10*SmallStep);
SB_THUMBPOSITION: SetHPos(Pos);
SB_THUMBTRACK: if FTracking then SetHPos(Pos);
SB_TOP: SetHPos(0);
SB_BOTTOM: SetHPos(XSize);
end;
end;
{------------------------------------------------------}
procedure TRVScroller.WMVScroll(var Message: TWMVScroll);
begin
with Message do
case ScrollCode of
SB_LINEUP: SetVPos(VPos - 1);
SB_LINEDOWN: SetVPos(VPos + 1);
SB_PAGEUP: SetVPos(VPos-10);
SB_PAGEDOWN: SetVPos(VPos+10);
SB_THUMBPOSITION: SetVPos(Pos);
SB_THUMBTRACK: if FTracking then SetVPos(Pos);
SB_TOP: SetVPos(0);
SB_BOTTOM: SetVPos(YSize);
end;
end;
{------------------------------------------------------}
procedure TRVScroller.WMKeyDown(var Message: TWMKeyDown);
var vScrollNotify, hScrollNotify: Integer;
begin
vScrollNotify := -1;
hScrollNotify := -1;
with Message do
case CharCode of
VK_UP:
vScrollNotify := SB_LINEUP;
VK_PRIOR:
vScrollNotify := SB_PAGEUP;
VK_NEXT:
vScrollNotify := SB_PAGEDOWN;
VK_DOWN:
vScrollNotify := SB_LINEDOWN;
VK_HOME:
vScrollNotify := SB_TOP;
VK_END:
vScrollNotify := SB_BOTTOM;
VK_LEFT:
hScrollNotify := SB_LINELEFT;
VK_RIGHT:
hScrollNotify := SB_LINERIGHT;
end;
if (vScrollNotify <> -1) then
Perform(WM_VSCROLL, vScrollNotify, 0);
if (hScrollNotify <> -1) then
Perform(WM_HSCROLL, hScrollNotify, 0);
{$IFDEF FPC}
inherited WMKeyDown(Message);
{$ELSE}
inherited;
{$ENDIF}
end;
{------------------------------------------------------}
procedure TRVScroller.SetVPos(p: Integer);
var ScrollInfo: TScrollInfo;
oldPos: Integer;
r: TRect;
begin
OldPos := VPos;
VPos := p;
ScrollInfo.cbSize := SizeOf(ScrollInfo);
ScrollInfo.nPos := VPos;
ScrollInfo.fMask := SIF_POS;
SetScrollInfo(Handle, SB_VERT, ScrollInfo, True);
GetScrollInfo(Handle, SB_VERT, ScrollInfo);
VPos := ScrollInfo.nPos;
r := ClientRect;
if OldPos-VPos <> 0 then begin
if FFullRedraw then begin
ScrollChildren(0, (OldPos-VPos)*SmallStep);
Refresh;
end
else begin
{$IFDEF MSWINDOWS}
ScrollWindowEx(Handle, 0, (OldPos-VPos)*SmallStep, nil, @r, 0, nil, SW_INVALIDATE {or
SW_SCROLLCHILDREN});
{$ELSE}
Invalidate;
{$ENDIF}
ScrollChildren(0, (OldPos-VPos)*SmallStep);
end;
if Assigned(FOnVScrolled) then FOnVScrolled(Self);
end;
end;
{------------------------------------------------------}
procedure TRVScroller.SetHPos(p: Integer);
var ScrollInfo: TScrollInfo;
oldPos: Integer;
r: TRect;
begin
OldPos := HPos;
HPos := p;
ScrollInfo.cbSize := SizeOf(ScrollInfo);
ScrollInfo.nPos := HPos;
ScrollInfo.fMask := SIF_POS;
SetScrollInfo(Handle, SB_HORZ, ScrollInfo, True);
GetScrollInfo(Handle, SB_HORZ, ScrollInfo);
HPos := ScrollInfo.nPos;
r := ClientRect;
if OldPos-HPos <> 0 then begin
if FFullRedraw then begin
ScrollChildren((OldPos-HPos), 0);
Refresh;
end
else begin
ScrollWindowEx(Handle, (OldPos-HPos), 0, nil, @r, 0, nil, SW_INVALIDATE{or
SW_SCROLLCHILDREN});
ScrollChildren((OldPos-HPos), 0);
end;
end;
end;
{------------------------------------------------------}
procedure TRVScroller.Paint;
var i: Integer;
begin
Canvas.Font.Color := clRed;
Canvas.Font.Size := 2;
Canvas.FillRect(Canvas.ClipRect);
for i := Canvas.ClipRect.Top div SmallStep -1 to Canvas.ClipRect.Bottom div SmallStep +1 do
Canvas.TextOut(-HPos, i*SmallStep, IntToStr(i+VPos));
end;
{------------------------------------------------------}
procedure TRVScroller.ScrollTo(y: Integer);
begin
SetVPos(y div SmallStep);
end;
{-------------------------------------------------------}
function TRVScroller.GetVScrollPos: Integer;
begin
GetVScrollPos := VPos;
end;
{-------------------------------------------------------}
procedure TRVScroller.SetVScrollPos(Pos: Integer);
begin
SetVPos(Pos);
end;
{-------------------------------------------------------}
function TRVScroller.GetVScrollMax: Integer;
var ScrollInfo: TScrollInfo;
begin
ScrollInfo.cbSize := SizeOf(ScrollInfo);
ScrollInfo.nPos := HPos;
ScrollInfo.fMask := SIF_RANGE or SIF_PAGE;
GetScrollInfo(Handle, SB_VERT, ScrollInfo);
GetVScrollMax := ScrollInfo.nMax - Integer(ScrollInfo.nPage-1);
end;
{-------------------------------------------------------}
procedure TRVScroller.SetVScrollVisible(vis: Boolean);
begin
FVScrollVisible := vis;
ShowScrollBar(Handle, SB_VERT, vis);
end;
{-------------------------------------------------------}
procedure TRVScroller.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result := DLGC_WANTARROWS;
end;
end.

View File

@ -0,0 +1,362 @@
unit RVStyle;
{$mode Delphi}
interface
{.$R RVStyle}
uses
{$IFDEF FPC}
LCLType,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, {LibConst,}
IniFiles;
const
crJump = 101;
rvsNormal = 0;
rvsHeading = 1;
rvsSubheading = 2;
rvsKeyword = 3;
rvsJump1 = 4;
rvsJump2 = 5;
LAST_DEFAULT_STYLE_NO = rvsJump2;
{$I RV_Defs.inc}
type
{--------------------------------------------------------------}
TFontInfo = class(TCollectionItem)
private
{ Private declarations }
FFontName: TFontName;
FSize: Integer;
FColor: TColor;
FStyle: TFontStyles;
{$IFDEF RICHVIEWDEF3}
FCharSet: TFontCharSet;
{$ENDIF}
public
{ Public declarations }
constructor Create(Collection: TCollection); override;
procedure Assign(Source: TPersistent); override;
published
{ Published declarations }
{$IFDEF RICHVIEWDEF3}
property CharSet: TFontCharSet read FCharSet write FCharSet;
{$ENDIF}
property FontName: TFontName read FFontNAme write FFontName;
property Size: Integer read FSize write FSize;
property Color: TColor read FColor write FColor;
property Style: TFontStyles read FStyle write FStyle;
end;
{--------------------------------------------------------------}
TFontInfos = class (TCollection)
private
function GetItem(Index: Integer): TFontInfo;
procedure SetItem(Index: Integer; Value: TFontInfo);
public
constructor Create;
function Add: TFontInfo;
procedure Delete(Index: Integer);
procedure AddFont(Name: TFontName; Size: Integer;
Color: TColor; Style:TFontStyles);
{$IFDEF RICHVIEWDEF3}
procedure AddFontEx(Name: TFontName; Size: Integer;
Color: TColor; Style:TFontStyles;
CharSet: TFontCharSet);
{$ENDIF}
property Items[Index: Integer]: TFontInfo
read GetItem write SetItem; default;
end;
{--------------------------------------------------------------}
TRVStyle = class(TComponent)
private
{ Private declarations }
FColor, FHoverColor, FSelColor, FSelTextColor: TColor;
FCursor: TCursor;
FTextStyles: TFontInfos;
FFullRedraw: Boolean;
function GetTextStyle(Index: Integer): TFontInfo;
procedure SetTextStyles(ATextStyles: TFontInfos);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function AddTextStyle: Integer; { returns index of new style }
procedure DeleteTextStyle(Index: Integer); { removes NONSTANDARD text style}
procedure SaveINI(filename, section: String); {WARNING: before saving all section will be removed}
procedure LoadINI(filename, section: String);
published
{ Published declarations }
property TextStyles: TFontInfos read FTextStyles write SetTextStyles;
property JumpCursor: TCursor read FCursor write FCursor;
property Color: TColor read FColor write FColor;
property HoverColor: TColor read FHoverColor write FHoverColor;
property FullRedraw: Boolean read FFullRedraw write FFullRedraw;
property SelColor: TColor read FSelColor write FSelColor;
property SelTextColor: TColor read FSelTextColor write FSelTextColor;
end;
implementation
{--------------------------------------------------------------}
{ TFontInfo }
{--------------------------------------------------------------}
constructor TFontInfo.Create(Collection: TCollection);
begin
inherited Create(Collection);
FFontName := 'Arial';
FSize := 10;
FColor := clWindowText;
FStyle := [];
{$IFDEF RICHVIEWDEF3}
FCharSet := DEFAULT_CHARSET;
{$ENDIF}
end;
{--------------------------------------------------------------}
procedure TFontInfo.Assign(Source: TPersistent);
begin
if Source is TFontInfo then begin
FFontName := TFontInfo(Source).FFontName;
FSize := TFontInfo(Source).FSize;
FColor := TFontInfo(Source).FColor;
FStyle := TFontInfo(Source).FStyle;
{$IFDEF RICHVIEWDEF3}
FCharSet := TFontInfo(Source).FCharSet;
{$ENDIF}
end
else
inherited Assign(Source);
end;
{--------------------------------------------------------------}
{ TFontInfos }
{--------------------------------------------------------------}
constructor TFontInfos.Create;
begin
inherited Create(TFontInfo);
end;
{-------------------------------------------------------------}
function TFontInfos.Add: TFontInfo;
begin
Result := TFontInfo(inherited Add);
end;
{-------------------------------------------------------------}
procedure TFontInfos.AddFont(Name: TFontName; Size: Integer;
Color: TColor; Style:TFontStyles);
var v: TFontInfo;
begin
v := Add;
v.FontName := Name;
v.Size := Size;
v.Color := Color;
v.Style := Style;
end;
{-------------------------------------------------------------}
{$IFDEF RICHVIEWDEF3}
procedure TFontInfos.AddFontEx(Name: TFontName; Size: Integer;
Color: TColor; Style:TFontStyles;
CharSet: TFontCharSet);
var v: TFontInfo;
begin
v := Add;
v.FontName := Name;
v.Size := Size;
v.Color := Color;
v.Style := Style;
v.CharSet := CharSet;
end;
{$ENDIF}
{-------------------------------------------------------------}
function TFontInfos.GetItem(Index: Integer): TFontInfo;
begin
Result := TFontInfo(inherited GetItem(Index));
end;
{-------------------------------------------------------------}
procedure TFontInfos.SetItem(Index: Integer; Value: TFontInfo);
begin
inherited SetItem(Index, Value);
end;
{-------------------------------------------------------------}
procedure TFontInfos.Delete(Index: Integer);
begin
if (Index<=LAST_DEFAULT_STYLE_NO) or (Index>=Count) then exit;
Items[Index].Free;
{
c:=TFontInfos.Create;
c.Assign(Self);
Clear;
for i:=0 to c.Count-1 do
if i<>Index then
AddFont(c[i].FontName, c[i].Size, c[i].Color, c[i].Style);
c.Free;
}
end;
{--------------------------------------------------------------}
{ TRVStyle }
{--------------------------------------------------------------}
constructor TRVStyle.Create(AOwner: TComponent);
var fi: TFontInfo;
i : Integer;
begin
inherited Create(AOwner);
FFullRedraw := False;
{$IFDEF FPC}
Screen.Cursors[crJump] := LoadCursorFromLazarusREsource('RV_JUMP_CURSOR');
{$ELSE}
Screen.Cursors[crJump] := LoadCursor(hInstance,'RV_JUMP_CURSOR');
{$ENDIF}
FCursor := crJump;
FColor := clWindow;
FHoverColor := clNone;
FSelColor := clHighlight;
FSelTextColor := clHighlightText;
FTextStyles := TFontInfos.Create;
for i := 0 to LAST_DEFAULT_STYLE_NO do begin
fi := FTextStyles.Add;
case i of
rvsHeading:
begin
fi.Style := fi.Style + [fsBold];
fi.Color := clBlue;
end;
rvsSubheading:
begin
fi.Style := fi.Style + [fsBold];
fi.Color := clNavy;
end;
rvsKeyword:
begin
fi.Style := fi.Style + [fsItalic];
fi.Color := clMaroon;
end;
rvsJump1, rvsJump2:
begin
fi.Style := fi.Style + [fsUnderline];
fi.Color := clGreen;
end;
end;
end;
end;
{--------------------------------------------------------------}
destructor TRVStyle.Destroy;
begin
FTextStyles.Free;
inherited Destroy;
end;
{--------------------------------------------------------------}
function TRVStyle.GetTextStyle(Index: Integer): TFontInfo;
begin
GetTextStyle := FTextStyles[Index];
end;
{--------------------------------------------------------------}
procedure TRVStyle.SetTextStyles(ATextStyles: TFontInfos);
begin
FTextStyles.Assign(ATextStyles);
end;
{--------------------------------------------------------------}
function TRVStyle.AddTextStyle: Integer;
begin
FTextStyles.Add;
AddTextStyle := FTextStyles.Count-1;
end;
{--------------------------------------------------------------}
procedure TRVStyle.DeleteTextStyle(Index: Integer);
begin
FTextStyles.Delete(Index);
end;
{--------------------------------------------------------------}
procedure TRVStyle.SaveINI(filename, section: String);
var i: Integer;
ini: TIniFile;
s : String;
begin
ini := nil;
try
ini := TIniFile.Create(filename);
ini.EraseSection(section);
ini.WriteInteger(section,'Color',FColor);
ini.WriteInteger(section,'HoverColor',FHoverColor);
ini.WriteInteger(section,'SelColor',FSelColor);
ini.WriteInteger(section,'SelTextColor',FSelTextColor);
ini.WriteInteger(section,'JumpCursor',FCursor);
ini.WriteInteger(section,'FontsCount',FTextStyles.Count);
for i:=0 to FTextStyles.Count-1 do
begin
ini.WriteString(section,'FontName'+IntToStr(i),FTextStyles[i].FontName);
ini.WriteInteger(section,'FontSize'+IntToStr(i),FTextStyles[i].Size);
ini.WriteInteger(section,'FontColor'+IntToStr(i),FTextStyles[i].Color);
{$IFDEF RICHVIEWDEF3}
ini.WriteInteger(section,'FontCharSet'+IntToStr(i),FTextStyles[i].CharSet);
{$ENDIF}
if fsBold in FTextStyles[i].Style then
s := 'Yes'
else
s := 'No';
ini.WriteString(section,'FontBold'+IntToStr(i),s);
if fsUnderline in FTextStyles[i].Style then
s := 'Yes'
else
s := 'No';
ini.WriteString(section,'FontUnderline'+IntToStr(i),s);
if fsStrikeOut in FTextStyles[i].Style then
s := 'Yes'
else
s := 'No';
ini.WriteString(section,'FontStrikeOut'+IntToStr(i),s);
if fsItalic in FTextStyles[i].Style then
s := 'Yes'
else
s := 'No';
ini.WriteString(section,'FontItalic'+IntToStr(i),s);
end;
except
on Exception do ;
end;
ini.Free;
end;
{--------------------------------------------------------------}
procedure TRVStyle.LoadINI(filename, section: String);
var i, fontcounts: Integer;
ini: TIniFile;
begin
ini := nil;
try
ini := TIniFile.Create(filename);
FColor := ini.ReadInteger(section, 'Color', clWindow);
FHoverColor := ini.ReadInteger(section, 'HoverColor', clNone);
FSelColor := ini.ReadInteger(section, 'SelColor', clHighlight);
FSelTextColor := ini.ReadInteger(section, 'SelTextColor', clHighlightText);
FCursor := ini.ReadInteger(section, 'JumpCursor', crJump);
fontcounts := ini.ReadInteger(section, 'FontsCount', LAST_DEFAULT_STYLE_NO+1);
if fontcounts<LAST_DEFAULT_STYLE_NO+1 then fontcounts := LAST_DEFAULT_STYLE_NO+1;
while FTextStyles.Count > fontcounts do DeleteTextStyle(FTextStyles.Count-1);
while FTextStyles.Count < fontcounts do AddTextStyle;
for i:=0 to fontcounts-1 do
begin
FTextStyles[i].FontName := ini.ReadString(section,'FontName'+IntToStr(i), 'Arial');
FTextStyles[i].Size := ini.ReadInteger(section,'FontSize'+IntToStr(i), 10);
FTextStyles[i].Color := ini.ReadInteger(section,'FontColor'+IntToStr(i), clWindowText);
{$IFDEF RICHVIEWDEF3}
FTextStyles[i].CharSet := ini.ReadInteger(section,'FontCharSet'+IntToStr(i), DEFAULT_CHARSET);
{$ENDIF}
FTextStyles[i].Style := [];
if ini.ReadString(section,'FontBold'+IntToStr(i),'No')='Yes' then
FTextStyles[i].Style := FTextStyles[i].Style + [fsBold];
if ini.ReadString(section,'FontUnderline'+IntToStr(i),'No')='Yes' then
FTextStyles[i].Style := FTextStyles[i].Style + [fsUnderline];
if ini.ReadString(section,'FontStrikeOut'+IntToStr(i),'No')='Yes' then
FTextStyles[i].Style := FTextStyles[i].Style + [fsStrikeOut];
if ini.ReadString(section,'FontItalic'+IntToStr(i),'No')='Yes' then
FTextStyles[i].Style := FTextStyles[i].Style + [fsItalic];
end;
except
on Exception do ;
end;
ini.Free;
end;
end.