petersunrise
asked on
UDP multicast
I have a problem with the acquisition of UDP multicast packet from a LAN (using D7).
I'm searching to use INDY, but i'm not able to receive some packet.
Someone could help me?
Thanks a lot
Petersun
I'm searching to use INDY, but i'm not able to receive some packet.
Someone could help me?
Thanks a lot
Petersun
ASKER
My problem is correlated with the use of UDP and Multicast:
In a Form i have inserted a IdIPMCastClient, and after the definition of MulticastGroup and Defaltport, no packet is received in the IPMCASTRead events.
Where i'm doing the error?
Thanks
PeterSunrise
In a Form i have inserted a IdIPMCastClient, and after the definition of MulticastGroup and Defaltport, no packet is received in the IPMCASTRead events.
Where i'm doing the error?
Thanks
PeterSunrise
Wich Indy version are you using? AFAIK there are problems for IdIPMCastClient related to the Indy 10 version due to wrong compiled dpks.
Maybe you're having the same matter.
https://forums.embarcadero.com/thread.jspa;jsessionid=CF641F5B74DE31621E9B1BA54C45F432?messageID=90173
https://forums.codegear.com/thread.jspa;jsessionid=ABF6862D36AF7762B4B521B0E9F6CB1E?messageID=90079
Maybe you're having the same matter.
https://forums.embarcadero.com/thread.jspa;jsessionid=CF641F5B74DE31621E9B1BA54C45F432?messageID=90173
https://forums.codegear.com/thread.jspa;jsessionid=ABF6862D36AF7762B4B521B0E9F6CB1E?messageID=90079
ASKER
The version is Indy 9 and Delphi 7
Thanks
Petersun
Thanks
Petersun
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
And the client
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WinSock, ScktComp, ClientControl, MProtocol, ComCtrls, ToolWin,
Menus, ExtCtrls, Spin, ImgList;
type
TMainForm = class(TForm)
Memo1: TMemo;
cs: TClientSocket;
MCClientMainMenu: TMainMenu;
File1: TMenuItem;
Local1: TMenuItem;
Remote1: TMenuItem;
Tools1: TMenuItem;
Help1: TMenuItem;
Connect1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
About1: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
Splitter1: TSplitter;
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
StatusBar1: TStatusBar;
Splitter2: TSplitter;
Panel2: TPanel;
Splitter3: TSplitter;
Panel3: TPanel;
StatusBar2: TStatusBar;
StatusBar3: TStatusBar;
lvLocal: TListView;
ListView2: TListView;
Label2: TLabel;
Panel4: TPanel;
SpinEdit1: TSpinEdit;
Label1: TLabel;
ToolBar2: TToolBar;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ListView3: TListView;
ImageList1: TImageList;
ToolBar3: TToolBar;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ListView4: TListView;
ToolBar4: TToolBar;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ListView5: TListView;
lvRemote: TListView;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ImageList2: TImageList;
sd: TSaveDialog;
ToolButton16: TToolButton;
ToolButton18: TToolButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure csRead(Sender: TObject; Socket: TCustomWinSocket);
procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure Splitter3CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
procedure Exit1Click(Sender: TObject);
procedure ToolButton15Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure Connect1Click(Sender: TObject);
procedure ToolButton16Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ToolButton18Click(Sender: TObject);
private
{ Private declarations }
nRet:integer;
stWSAData:WSADATA;
sfList : TList;//file list from server;
mcfCln : TMultiCastFileClient;
CastAddr : String;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
procedure WriteLog(log:String);
implementation
{$R *.DFM}
var csLog:TMCriticalSection;
procedure WriteLog(log:String);
begin
csLog.Enter;
try
MainForm.Memo1.Lines.Add(l og);
finally
csLog.Leave;
end;
end;
procedure TMainForm.FormCreate(Sende r: TObject);
begin
nRet:=WSAStartup($0202, stWSAData);
sfList:=TList.Create;
mcfCln:=TMultiCastFileClie nt.Create( Self);
end;
procedure TMainForm.FormDestroy(Send er: TObject);
begin
mcfCln.ClearAll;
mcfCln.Free;
while sfList.Count>0 do
begin
Dispose(sfList[0]);
sfList.Delete(0);
end;
sfList.Free;
WSACleanup;
end;
procedure TMainForm.csRead(Sender: TObject; Socket: TCustomWinSocket);
var pfli:PFileListItem;
s:string;
i:integer;
aItem:TListItem;
begin
i:=Socket.ReceiveLength;
while i>=sizeof(TFileListItem) do
begin
new(pfli);
i:=Socket.ReceiveBuf(pfli^ ,sizeof(TF ileListIte m));
s:=copy(pfli.fname,0,pfli. namesize);
memo1.lines.add({'size:'+i nttostr(pf li.size)+# 13#10+
'port:'+inttostr(pfli.port )+#13#10+
'namelength:'+inttostr(pfl i.namesize )+#13#10+}
s);
sfList.Add(pfli);
aItem:=lvRemote.Items.Add;
aItem.Caption:=s;
aItem.SubItems.Add(inttost r(pfli.siz e));
aItem.Data:=pfli;
i:=Socket.ReceiveLength;
end;
lvRemote.Color:=clWindow;
lvRemote.Enabled:=True;
end;
procedure TMainForm.csConnect(Sender : TObject; Socket: TCustomWinSocket);
var qb:TQueryBlockPkg;
sAddr:TSockAddrIn;
begin
sAddr:=cs.Socket.Addr;
sAddr.sin_addr.S_un_b.s_b1 :=chr(CAST _ADDR);
CastAddr:=inet_ntoa(sAddr. sin_addr);
StrCopy(PChar(@(qb.CmdStr[ 0])),PChar (CTRLCMD_L IST));
cs.Socket.SendBuf(qb,sizeo f(qb));
end;
procedure TMainForm.Splitter3CanResi ze(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
if NewSize<40 then Accept:=False;
end;
procedure TMainForm.Exit1Click(Sende r: TObject);
begin
Close;
end;
procedure TMainForm.ToolButton15Clic k(Sender: TObject);
begin
Exit1Click(Sender);
end;
procedure TMainForm.ToolButton1Click (Sender: TObject);
begin
Connect1Click(Sender);
end;
procedure TMainForm.Connect1Click(Se nder: TObject);
var input:String;
begin
if InputQuery('Remote IP Address','Please input server ip here',input)
then begin
cs.Address:=input;
cs.Active:=True;
end;
end;
procedure TMainForm.ToolButton16Clic k(Sender: TObject);
var pfli:PFileListItem;
i:integer;
begin
if lvRemote.SelCount>0 then
begin
pfli:=PFileListItem(lvRemo te.Selecte d.Data);
sd.FileName:=lvRemote.Sele cted.Capti on;
if sd.Execute then
begin
memo1.Lines.Add(sd.FileNam e);
mcfCln.Add(sd.FileName,Cas tAddr,pfli ^.size,pfl i^.port);
end;
end;
end;
procedure TMainForm.About1Click(Send er: TObject);
begin
ShowMessage('Multicast File Transfer Client by She');
end;
procedure TMainForm.csDisconnect(Sen der: TObject;
Socket: TCustomWinSocket);
begin
lvRemote.Items.Clear;
lvRemote.Color:=clBtnFace;
lvRemote.Enabled:=False;
end;
procedure TMainForm.ToolButton18Clic k(Sender: TObject);
begin
cs.Close;
end;
initialization
csLog:=TMCriticalSection.C reate;
finalization
csLog.Free;
end.
----------------------
object MainForm: TMainForm
Left = 113
Top = 104
Width = 622
Height = 435
Caption = 'File Cast Client'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MCClientMainMenu
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 0
Top = 185
Width = 614
Height = 3
Cursor = crVSplit
Align = alTop
end
object Splitter2: TSplitter
Left = 185
Top = 188
Width = 3
Height = 201
Cursor = crHSplit
OnCanResize = Splitter3CanResize
end
object Splitter3: TSplitter
Left = 401
Top = 188
Width = 3
Height = 201
Cursor = crHSplit
OnCanResize = Splitter3CanResize
end
object Memo1: TMemo
Left = 0
Top = 40
Width = 614
Height = 145
Align = alTop
ReadOnly = True
TabOrder = 0
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 614
Height = 40
AutoSize = True
ButtonHeight = 38
ButtonWidth = 39
Caption = 'ToolBar1'
Flat = True
Images = ImageList2
TabOrder = 1
object ToolButton1: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton1'
ImageIndex = 0
OnClick = ToolButton1Click
end
object ToolButton14: TToolButton
Left = 39
Top = 0
Width = 8
Caption = 'ToolButton14'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton16: TToolButton
Left = 47
Top = 0
Caption = 'ToolButton16'
ImageIndex = 2
OnClick = ToolButton16Click
end
object ToolButton18: TToolButton
Left = 86
Top = 0
Caption = 'ToolButton18'
ImageIndex = 3
OnClick = ToolButton18Click
end
object ToolButton15: TToolButton
Left = 125
Top = 0
Caption = 'ToolButton15'
ImageIndex = 1
OnClick = ToolButton15Click
end
end
object Panel1: TPanel
Left = 0
Top = 188
Width = 185
Height = 201
Align = alLeft
BevelOuter = bvNone
Caption = 'Panel1'
TabOrder = 2
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 185
Height = 182
ActivePage = TabSheet2
Align = alClient
Style = tsFlatButtons
TabIndex = 1
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'Queue'
object ListView2: TListView
Left = 0
Top = 30
Width = 177
Height = 121
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 0
ViewStyle = vsReport
end
object ToolBar2: TToolBar
Left = 0
Top = 0
Width = 177
Height = 30
AutoSize = True
ButtonHeight = 30
ButtonWidth = 31
Caption = 'ToolBar2'
EdgeBorders = []
Flat = True
Images = ImageList1
TabOrder = 1
object ToolButton2: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton2'
ImageIndex = 0
end
object ToolButton3: TToolButton
Left = 31
Top = 0
Width = 8
Caption = 'ToolButton3'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton4: TToolButton
Left = 39
Top = 0
Caption = 'ToolButton4'
ImageIndex = 1
end
object ToolButton5: TToolButton
Left = 70
Top = 0
Width = 8
Caption = 'ToolButton5'
ImageIndex = 2
Style = tbsSeparator
end
object ToolButton6: TToolButton
Left = 78
Top = 0
Caption = 'ToolButton6'
ImageIndex = 2
end
object ToolButton7: TToolButton
Left = 109
Top = 0
Caption = 'ToolButton7'
ImageIndex = 3
end
end
end
object TabSheet2: TTabSheet
Caption = 'Threads'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ImageIndex = 1
ParentFont = False
object Label2: TLabel
Left = 0
Top = 25
Width = 177
Height = 26
Align = alTop
Caption = '0 threads running, total transfer speed is 0.0 kb/s'
Color = clBtnFace
ParentColor = False
WordWrap = True
end
object Panel4: TPanel
Left = 0
Top = 0
Width = 177
Height = 25
Align = alTop
BevelOuter = bvNone
TabOrder = 0
object Label1: TLabel
Left = 48
Top = 8
Width = 57
Height = 13
Caption = 'max threads'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object SpinEdit1: TSpinEdit
Left = 8
Top = 3
Width = 33
Height = 22
MaxValue = 10
MinValue = 1
TabOrder = 0
Value = 1
end
end
object ListView3: TListView
Left = 0
Top = 51
Width = 177
Height = 100
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 120
end
item
Caption = 'Status'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object TabSheet3: TTabSheet
Caption = 'Downloads'
ImageIndex = 2
object ToolBar3: TToolBar
Left = 0
Top = 0
Width = 177
Height = 29
Caption = 'ToolBar3'
EdgeBorders = []
Flat = True
TabOrder = 0
object ToolButton8: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton8'
ImageIndex = 0
end
object ToolButton9: TToolButton
Left = 23
Top = 0
Width = 8
Caption = 'ToolButton9'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton10: TToolButton
Left = 31
Top = 0
Caption = 'ToolButton10'
ImageIndex = 1
end
end
object ListView4: TListView
Left = 0
Top = 29
Width = 177
Height = 122
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object TabSheet4: TTabSheet
Caption = 'Failures'
ImageIndex = 3
object ToolBar4: TToolBar
Left = 0
Top = 0
Width = 177
Height = 29
Caption = 'ToolBar3'
EdgeBorders = []
Flat = True
TabOrder = 0
object ToolButton11: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton8'
ImageIndex = 0
end
object ToolButton12: TToolButton
Left = 23
Top = 0
Width = 8
Caption = 'ToolButton9'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton13: TToolButton
Left = 31
Top = 0
Caption = 'ToolButton10'
ImageIndex = 1
end
end
object ListView5: TListView
Left = 0
Top = 29
Width = 177
Height = 122
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 182
Width = 185
Height = 19
Panels = <>
SimplePanel = False
end
end
object Panel2: TPanel
Left = 188
Top = 188
Width = 213
Height = 201
Align = alLeft
BevelOuter = bvNone
Caption = 'Panel2'
TabOrder = 3
object StatusBar2: TStatusBar
Left = 0
Top = 182
Width = 213
Height = 19
Panels = <>
SimplePanel = False
end
object lvLocal: TListView
Left = 0
Top = 0
Width = 213
Height = 182
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 150
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object Panel3: TPanel
Left = 404
Top = 188
Width = 210
Height = 201
Align = alClient
BevelOuter = bvNone
Caption = 'Panel3'
TabOrder = 4
object StatusBar3: TStatusBar
Left = 0
Top = 182
Width = 210
Height = 19
Panels = <>
SimplePanel = False
end
object lvRemote: TListView
Left = 0
Top = 0
Width = 210
Height = 182
Align = alClient
Color = clBtnFace
Columns = <
item
Caption = 'FileName'
Width = 150
end
item
Caption = 'Size'
end>
Enabled = False
TabOrder = 1
ViewStyle = vsReport
end
end
object cs: TClientSocket
Active = False
Address = '127.0.0.1'
ClientType = ctNonBlocking
Port = 1406
OnConnect = csConnect
OnDisconnect = csDisconnect
OnRead = csRead
Left = 416
end
object MCClientMainMenu: TMainMenu
Left = 200
Top = 4
object File1: TMenuItem
Caption = '&File'
object Connect1: TMenuItem
Caption = '&Connect ...'
OnClick = Connect1Click
end
object N1: TMenuItem
Caption = '-'
end
object Exit1: TMenuItem
Caption = 'E&xit'
OnClick = Exit1Click
end
end
object Local1: TMenuItem
Caption = '&Local'
end
object Remote1: TMenuItem
Caption = '&Remote'
end
object Tools1: TMenuItem
Caption = '&Tools'
end
object Help1: TMenuItem
Caption = '&Help'
object About1: TMenuItem
Caption = '&About ...'
OnClick = About1Click
end
end
end
object ImageList1: TImageList
Height = 24
Width = 24
Left = 296
Top = 2
Bitmap = {
494C0101040009000400180018 00FFFFFFFF FF10FFFFFF FFFFFFFFFF 424D3600
00000000000036000000280000 0060000000 4800000001 0010000000 00000036
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 10421042
10420000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000001042 00000000
00001042000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0010424A29 4A294A294A 294A294A29 4A294A29
4A294A294A294A290000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000CE 39CE39CE39 CE39CE39CE 39CE39CE39 CE39CE39
CE39CE39CE39CE390000000000 0000000000 0000000000 0000000000 FF7FFF7F
FF7F0000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0010423967 3967396739 6739673967 39673967
3967396739674A290000000000 0000000000 0000000000 0000000000 CE39CE39
CE39CE39CE39CE39CE39CE39CE 39CE39CE39 CE39CE39CE 3900000000 00000000
000000000000000000000000CE 397B6FFF7F FF7FFF7FFF 7FFF7FFF7F FF7FFF7F
FF7FFF7FF75E734ECE39000000 0000000000 0000000000 0000000000 FF7FFF7F
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7F9C 739C739C73 9C739C73
9C739C7339674A290000000000 0000000000 0000000000 0000000000 CE397B6F
FF7FFF7FFF7FFF7FFF7FFF7FFF 7FFF7FFF7F FF7FF75E73 4ECE390000 00000000
000000000000000000000000CE 397B6FCE39 CE39CE39CE 39CE39CE39 CE39CE39
CE39CE39F75E1042EF3D000000 0000000000 0000000000 0000000000 00000000
F75E1042104210421042104200 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FBD 779C739C73 9C739C73
9C739C7339674A290000000000 0000000000 0000000000 0000000000 CE397B6F
CE39CE39CE39CE39CE39CE39CE 39CE39CE39 CE39F75E10 42EF3D0000 00000000
000000000000000000000000CE 397B6FF75E F75EF75EF7 5EF75EF75E F75E734E
734EF75EF75E734ECE39000000 0000000000 0000000000 0000000000 00001042
10420000000000000000000010 4210421042 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FBD779C73 9C739C73
9C739C7339674A290000000000 0000000000 0000000000 0000000000 CE397B6F
F75EF75EF75EF75EF75EF75EF7 5E734E734E F75EF75E73 4ECE390000 00000000
000000000000000000000000CE 39F75EF75E F75EF75EF7 5EF75EF75E F75EF75E
E0030002734E734ECE39000000 0000000000 0000000000 0000000000 10420000
0000FF7FFF7FFF7FFF7FFF7F00 0000000000 1042000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FBD77BD77 9C739C73
9C739C7339674A290000000000 0000000000 0000000000 0000000000 CE39F75E
F75EF75EF75EF75EF75EF75EF7 5EF75EE003 0002734E73 4ECE390000 00000000
000000000000000000000000CE 39FF7FFF7F FF7FFF7FFF 7FFF7FFF7F FF7FFF7F
FF7FFF7FFF7F734ECE39000000 0000000000 0000000000 0000001042 0000FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF 7FFF7FFF7F 0000104200 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FBD77 BD779C73
9C739C7339674A290000000000 0000000000 0000000000 0000000000 CE39FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF 7FFF7FFF7F FF7FFF7F73 4ECE390000 00000000
00000000000000000000000000 00EF3DF75E F75EF75EF7 5EF75EF75E F75EF75E
F75EA514F75EF75ECE39000000 0000000000 0000000000 0000001042 0000FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF 7FFF7FFF7F FF7F000010 4200000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FBD77 BD77BD77
9C739C7339674A290000000000 0000000000 0000000000 0000000000 0000EF3D
F75EA514A514A514F75EF75EF7 5EF75EF75E F75EF75EF7 5ECE390000 00000000
00000000000000000000000000 000000CE39 CE39CE39CE 39CE39CE39 CE39CE39
A514006CA514CE39CE39000000 0000000000 0000000000 0000000000 FF7FFF7F
FF7F1000100010001000FF7F10 0010001000 FF7FFF7F00 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F BD77BD77
9C739C7339674A290000000000 0000000000 0000000000 0000000000 00000000
CE39A514F31BA514CE39CE39A5 14A514CE39 CE39CE39CE 39CE390000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000A514
006C006C006CA5140000000000 0000000000 0000000000 0000000000 FF7FFF7F
FF7FFF7F1000FF7FFF7FFF7FFF 7F1000FF7F FF7FFF7F00 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7FBD77
9C739C7339674A290000000000 0000000000 0000000000 0000000000 00000000
0000A514F31BA51400000000A5 14F31BA514 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 A514006C
006C006C006C006CA514000000 0000000000 0000000000 0000000000 0000FF7F
FF7FFF7FFF7F1000FF7FFF7F10 0010001000 FF7FFF7F00 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7FBD77
9C733967734E4A290000000000 0000000000 0000000000 0000000000 00000000
0000A514F31BA514A514A514A5 14F31BF31B A514000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 A514A514
A514006CA514A514A514000000 0000000000 0000000000 0000000000 0000FF7F
FF7FFF7F100010001000FF7FFF 7FFF7FFF7F FF7F000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7FBD77
3967734EEF3D4A290000000000 0000000000 0000000000 0000000000 00000000
0000A514F31BF31BF31BF31BF3 1BF31BF31B F31BA51400 0000000000 00000000
00000000000000000000000000 0000000000 00000000A5 14A514A514 A5142925
2925006CA51400000000000000 0000000000 0000000000 0000000000 00000000
0000FF7FFF7FFF7FFF7FFF7FFF 7FFF7F0000 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7F3967
4A29C618C618C6180000000000 0000000000 0000000000 0000000000 00000000
0000A514A514A514A514A514A5 14F31BF31B A514000000 0000000000 00000000
00000000000000000000000000 0000000000 00000000A5 14006C006C 006C006C
006C006CA51400000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7F3967
734EFE7F4A2900000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000A5 14F31BA514 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 00000000A5 14A514A514 A514A514
A514A514A51400000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 001042FE7F FE7FFE7FFE 7FFE7FFE7F FE7F3967
734E4A29000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000A5 14A5140000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0010421042 1042104210 4210421042 10421042
10420000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 424D3E0000 0000000000 3E000000
28000000600000004800000001 0001000000 0000600300 0000000000 00000000
000000000000000000000000FF FFFF000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 000000FFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
F8FFFFFFFFFFFFFFFFFC001FF0 7FFFFC001F FC001FF800 0FF07FFFFC 001FF800
0FF80007F0FFFFFC001FF80007 F80007F807 FFFC001FF8 0007F80007 FC00FFFC
001FF80007F80007F8007FFC00 1FF80007F8 0007F0003F FC001FF800 07FC0007
F0001FFC001FFC0007FE000FF0 001FFC001F FE000FFFFC 1FF0001FFC 001FFF18
FFFFF80FF8001FFC001FFF007F FFF80FF800 3FFC001FFF 003FFFC03F FC007FFC
001FFF007FFFC03FFF01FFFC00 3FFFF8FFFF C03FFFFFFF FC007FFFF9 FFFFFFFF
FFFFFFFC00FFFFFFFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000 0000000000 0000000000 00000000
000000000000}
end
object ImageList2: TImageList
Height = 32
Width = 32
Left = 336
Top = 2
Bitmap = {
494C0101040009000400200020 00FFFFFFFF FF10FFFFFF FFFFFFFFFF 424D3600
00000000000036000000280000 0080000000 6000000001 0010000000 00000060
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E04500 2900000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000004A29 4A294A294A 2900000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E045E0 4500290000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000DF5ADF 5ABF350000 4A294A294A 294A290000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000E0 45E0450029 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000DF5A173CDF5ADF 5ABF35BF35 00004A294A 294A294A29 4A290000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0821000063 0C630C0000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000E0 45CE7FE045 0029000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5ADF 5ABF35BF35 00004A294A 294A294A29 4A294A29
4A290000000000000000000000 0000000000 0000000000 0000000000 00000000
00001042104210421042104210 4210421042 1042104210 4210421042 10421042
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000000000004A 2921048C31 94524A2900 00D65A0000 0000E77F
E77FE77F000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000000000000000E0 45CE7F607F E045002900 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5ADF 5ABF35BF35 00004A294A 294A294A29 4A294A29
4A294A294A2900000000000000 0000000000 0000000000 0000000000 00000000
00001042186318631863186318 6318631863 1863186318 6318631863 18631042
10420000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000524A0000C6 18EF3D7B6F B556F03D00 00D65AE77F E77FE77F
E77FE77F000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 00E045CE7F 607FE04500 2900000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5ADF 5ABF35BF35 00004A294A 294A294A29 4A294A29
4A294A294A2900000000000000 0000000000 0000000000 0000000000 00000000
000010421863FF7FFF7FFF7FFF 7FFF7FFF7F FF7FFF7FFF 7FFF7FFF7F 18631042
10421042000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000003146A5149452DE 7B9C735A6B B556CE39A5 14D65AE77F E77FE77F
00000000E77FE77F0000000000 0000000000 0000000000 0000000000 00000000
000000000000E045E045E045E0 45E045CE7F 607F607FE0 4500290000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5ADF 5ABF35BF35 00004A294A 294A290000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00001042186310421042104210 4210421042 1042104210 4210421042 18631042
10421042000000000000000000 0000000000 0000000000 0000000000 00000000
00000000D65A524AFF7FFF7FFF 7FBD77B556 31468C3100 0000000000 00000000
E77FE77FE77FE77F0000000000 0000000000 0000000000 0000000000 00000000
0000000000000000E045F67FCE 7F607F607F 607F607F60 7FE0450029 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5A17 3C173CBF35 00004A2900 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000010421863FF7FFF7FFF7FFF 7FFF7FFF7F FF7FFF7F18 6318631863 18631042
10421042000000000000000000 0000000000 0000000000 0000000000 0000CE39
CE39CE39CE39524AFF7FFF7F94 523146AD35 104231468C 318C314208 D65AE77F
E77FE77F000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000E045F67FCE 7F607F607F 607F607F60 7F607FE045 00290000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5A173CDF5ADF 5A173C173C 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00001042186310421042104210 4210421042 1042104218 6300020002 18631042
10421042000000000000000000 0000000000 0000000000 0000000000 CE394056
607F607F607F524A5A6B8C31D6 5A5A6B5A6B BD773967D6 5ACE392925 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E045F6 7FCE7F607F E045E045E0 45E045E045 E0450000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5ADF5ADF5ADF 5ABF35173C 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00001042186318631863186318 6318631863 1863186318 630002E003 18631042
10421042000000000000000000 0000000000 0000000000 0000000000 CE39607F
607FA514A51431468C31FF7FFF 7FFF7F9C73 9C737B6F18 631863F75E F03D0000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E045E0 45F67F607F 607FE04500 2900000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5ADF5ADF5ADF5ADF 5ABF35BF35 173C000000 0000000000 00000000
00000040004000000000000000 0000000000 0000000000 0000000000 00000000
00001042FF7FFF7FFF7FFF7FFF 7FFF7FFF7F FF7FFF7FFF 7FFF7FFF7F FF7F1042
10421042000000000000000000 0000000000 0000000000 0000000000 CE39607F
A514000000005A6B8C31734EDE 7BFF7FBD77 9C7339677B 6FDE7BFF7F FF7F0000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
E045E045E045E045E045E045E0 45E045CE7F 607F607FE0 4500290000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5ADF5ADF5ADF5ADF5ADF 5ABF35BF35 BF35000000 0000000000 00000000
00000040007C00400000000000 0000000000 0000000000 0000000000 00000000
00000000104218631863004010 4218631863 1863186318 6318631863 18631863
10421042000000000000000000 0000000000 0000000000 0000000000 CE39607F
A51400000000000031468C3110 42CE398C31 AD35A51400 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000E045F67FCE7F607F607F60 7F607F607F 607F607F60 7FE0450029 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5ADF5ADF5ADF5ADF5ADF 5ABF35BF35 BF35000000 0000000040 00400040
00400040007C007C0040000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010421863 1863186318 6318631863 18631863
18631042000000000000000000 0000000000 0000000000 0000000000 CE39607F
A5140000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000E045F67FCE7F607F607F60 7F607F607F 607F607F60 7F607FE045 00290000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5ADF5ADF5ADF5ADF5ADF 5ABF35BF35 BF35000000 0000000040 007C007C
007C007C007C007C007C004000 0000000000 0000000000 0000000000 00000000
0000000000000040007C007C00 7C00401042 1042104210 4210421042 10421042
10421042000000000000000000 0000000000 0000000000 0000000000 CE39607F
607FA514000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000E045F67FCE7F607F60 7F607F607F E045E045E0 45E045E045 E0450000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5ADF5ADF5ADF5AFF7FFF 7FDF5ABF35 BF35000000 0000000040 00400040
00400040007C007C0040000000 0000000000 0000000000 0000000000 00000000
000000000040007C007C007C00 7C007C0040 1042000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 D65ACE39
607F607FA51400000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000E045F67FCE7F607F60 7F607F607F 607FE04500 2900000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5ADF5ADF5AFF7FDF5ADF 5ADF5ADF5A BF35000000 0000000000 00000000
00000040007C00400000000000 0000000000 0000000000 0000000000 00000000
00000000004000400040007C00 4000400040 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000D65A
CE39607F607FA5140000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000E045F67FCE7F60 7F607F607F 607F607FE0 4500290000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000DF5AFF7FFF7FBF35BF35BF 35BF35BF35 DF5A000000 0000000000 00000000
00000040004000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010420000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
D65ACE39607FA5140000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000E045F67FCE7F60 7F607F607F 607F607F60 7FE0450029 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000FF7FDF5ABF350000000000 00BF350000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010420000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
D65ACE39607FA5140000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000E045F67FCE 7F607F607F 607F607F60 7F607FE045 00290000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000DF5A00004A2929254A 2900000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010420000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000D65A
CE39607F607FA5140000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000E045F67FCE 7F607F607F 607F607F60 7F607F607F E0450029
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000630C2925B556B5564A 2929250000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010420000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000CE39
607F607FA51400000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E045F6 7FCE7F607F 607F607F60 7F607F607F 607FE045
00290000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000A514B5569C73186352 4A29250000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040007C00 4010420000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
607F1042000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000E045E0 45E045E045 E045E045E0 45E045E045 E045E045
E0450000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000A5149C73FF7F9C73B5 5629250000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000040004000 4000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000A5149C73524A29 25630C0000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000630C000029 2500000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 424D3E0000 0000000000 3E000000
28000000800000006000000001 0001000000 0000000600 0000000000 00000000
000000000000000000000000FF FFFF000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 000000FFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFF3 FFFFFFF01F FFFFFFFFFF FFFFFFFF
FFF1FFFFFFC00FFFFFFFFFFFFF FFFFFFFFF8 FFFFFF0003 FFFF8001FF FFFE0C7F
FFF87FFFFF0000FFFF0000FFFF F8003FFFF8 3FFFFF0000 3FFF00007F FFE0001F
FFFC1FFFFF00003FFF00003FFF C0000FFFC0 0FFFFF000F FFFF00003F FF80000F
FFE007FFFF003FFFFF00003FFC 00001FFFE0 03FFFF007F FFFF00003F F800007F
FFF003FFFF007FFFFF00003FF8 0001FFFFF0 1FFFFF003F 3FFF00003F F8C001FF
FE000FFFFE003F1FFF80003FF8 E003FFFF00 07FFFE0030 0FFFE0003F F8FFFFFF
FF0003FFFE003007FFC0007FF8 7FFFFFFF80 03FFFE0030 0FFF807FFF F83FFFFF
FF801FFFFE003F1FFF80FFFFFC 1FFFFFFFC0 0FFFFE003F 3FFFE1FFFF FE1FFFFF
FFC007FFFE007FFFFFE1FFFFFE 1FFFFFFFE0 03FFFF01FF FFFFE1FFFF FC1FFFFF
FFE001FFFF80FFFFFFE1FFFFFC 3FFFFFFFF0 00FFFF80FF FFFFE1FFFF FE7FFFFF
FFF000FFFF80FFFFFFE3FFFFFF FFFFFFFFFF FFFFFFC1FF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFE3FFFFFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0000 0000000000 0000000000 00000000
000000000000}
end
object sd: TSaveDialog
Left = 376
Top = 2
end
end
-------------------
unit ClnCastThread;
interface
uses
Windows, Classes, SysUtils, WinSock, MProtocol, ScktComp;
const
TIMEOUT_SECONDS = 30;
type
ip_mreq = record
imr_multiaddr: in_addr ; // IP multicast address of group */
imr_interface: in_addr ; // local IP address of interface */
end;
TClnCastThread = class(TThread)
private
{ Private declarations }
FCastingFile:THandle;
FBlockLeft:integer;//Block s number left to be download
FSerialNum:integer;//the oldest package's SerialNum
FStartBlock:integer;//
protected
procedure Execute; override;
public
DstFileName:String;
DstFileSize:integer;
Addr:String;
Port:u_short;
CtrlItem:Pointer;
sClient:TClientSocket;
end;
implementation
Uses MainUnit, ClientControl;
var csQueryBlock:TMCriticalSec tion;
//Client use csQueryBlock to synchronize the call to the TClientSocket component
//used in the MainForm
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption) ;
and UpdateCaption could look like,
procedure TClnCastThread.UpdateCapti on;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TClnCastThread }
procedure TClnCastThread.Execute;
var
nRet,i,j:integer;
stLclAddr, stSrcAddr: SOCKADDR_IN;
stMreq:ip_mreq; //* Multicast interface structure */
hSocket:TSOCKET;
lTTL:u_long;
aPkg:TCastPkg;
addr_size:integer;
curB:integer;
bExpect,bLast,bTotal:integ er;
PkgSize:integer;
l,h:DWord;
fSize:Longint;
isIt:Boolean;
b:Byte;
pkgQueryBlock:TQueryBlockP kg;
begin
FBlockLeft:=DstFileSize div FILE_BLOCK_SIZE+1;
bTotal:=FBlockLeft;
FSerialNum:=MaxInt;
FStartBlock:=MaxInt;
isIt:=False;
j:=FBlockLeft;
if FileExists(DstFileName)
then begin//open and check
FCastingFile:=FileOpen(Dst FileName,f mOpenReadW rite);
l:=GetFileSize(FCastingFil e,@h);
fSize:=l or h shl 16;
//check size, and whether all bytes are 0 and 1
isIt:=True;
if fSize<>DstFileSize+FBlockL eft then isIt:=False;
FileSeek(FCastingFile,DstF ileSize,0) ;
for i:=0 to FBlockLeft-1 do
begin
FileRead(FCastingFile,b,1) ;
if (b or 1)<>1 then isIt:=False
else if b=1 then Dec(j);
end;
end
else FCastingFile:=FileCreate(D stFileName );
if not isIt
then begin//Create tail control block, and initialize to be all 0
FileSeek(FCastingFile,DstF ileSize,0) ;
b:=0;
for i:=0 to FBlockLeft-1 do
FileWrite(FCastingFile,b,1 );
SetEndOfFile(FCastingFile) ;
end
else FBlockLeft:=j;
hSocket := socket(AF_INET,
SOCK_DGRAM,
0);
lTTL:=1;
nRet := setsockopt(hSocket,SOL_SOC KET,SO_REU SEADDR,PCh ar(@lTTL), sizeof(stM req));
stLclAddr.sin_family := AF_INET;
stLclAddr.sin_addr.s_addr := htonl(INADDR_ANY);
stLclAddr.sin_port := htons(Port);
nRet := bind(hSocket,stLclAddr,siz eof(stLclA ddr));
stMreq.imr_multiaddr.s_add r := inet_addr(PChar(Addr));
stMreq.imr_interface.s_add r := INADDR_ANY;
nRet := setsockopt(hSocket,IPPROTO _IP,IP_ADD _MEMBERSHI P,PChar(@s tMreq),siz eof(stMreq ));
addr_size:=sizeof(sockaddr _in);
WriteLog('Begin listening Port '+inttostr(Port)+' for file '+DstFileName);
bExpect:=-1;
bLast:=-1;
//tell server to activate the casting thread
StrCopy(pkgQueryBlock.CmdS tr,CTRLCMD _DOWNLOAD) ;
pkgQueryBlock.FileID:=Port ;
csQueryBlock.Enter;
try
sClient.Socket.SendBuf(pkg QueryBlock ,sizeof(pk gQueryBloc k));
finally
csQueryBlock.Leave;
end;
while not Terminated do
begin
PkgSize := recvfrom(hSocket,aPkg,size of(TCastPk g),0,stSrc Addr,addr_ size);
if PkgSize = 0 then
begin
PClnCtrlItem(CtrlItem)^.St atus:=8;
WriteLog('Error End');
Terminate;
end;
//use seriallized pkg to initialize FSerialNumºÍFStartBlock
if aPkg.header.nType = PKGTYPE_SERIAL
then begin
if aPkg.header.nSerial<FSeria lNum then
begin
FSerialNum:=aPkg.header.nS erial;//in it FSerialNum
WriteLog(inttostr(Port)+' Initialize FSerialNum = '+inttostr(FSerialNum));
end;
if aPkg.header.nSerial=FSeria lNum
then begin
if aPkg.header.nBlockPos<FSta rtBlock then
begin
FStartBlock:=aPkg.header.n BlockPos;/ /init FStartBlock
WriteLog(inttostr(Port)+' Initialize FStartBlock '+inttostr(FStartBlock));
end;
end
else begin
if aPkg.header.nBlockPos<FSta rtBlock
then begin
end
else begin
end;
end;
end;
//init end
curB:=aPkg.header.nBlockPo s;
FileSeek(FCastingFile,DstF ileSize+cu rB,0);
FileRead(FCastingFile,b,1) ;
if b=0 then
begin //write this pkg to file
FileSeek(FCastingFile,curB *FILE_BLOC K_SIZE,0);
FileWrite(FCastingFile,aPk g.data,Pkg Size-sizeo f(TPkgHead er));
Dec(FBlockLeft);
FileSeek(FCastingFile,DstF ileSize+cu rB,0);
b:=1;
FileWrite(FCastingFile,b,1 );
//MainForm.Log.Caption:=in ttostr(FBl ockLeft);
if aPkg.header.nType = PKGTYPE_SERIAL then
begin
if (bExpect<>-1) then
if (curB > bExpect) and (curB > bLast)then //lack pkgs
begin
StrCopy(pkgQueryBlock.CmdS tr,CTRLCMD _QUERYBLK) ;
pkgQueryBlock.FileID:=Port ;
pkgQueryBlock.BlockStart:= bExpect;
pkgQueryBlock.BlockEnd:=(c urB+bTotal -1)mod bTotal;
csQueryBlock.Enter;
try
sClient.Socket.SendBuf(pkg QueryBlock ,sizeof(pk gQueryBloc k));
finally
csQueryBlock.Leave;
end;
//WriteLog('Query:'+inttos tr(bExpect )+'->'+int tostr(pkgQ ueryBlock. BlockEnd)) ;
end;
bLast:=curB;
bExpect:=(curB+1) mod bTotal;
end;
end;
if FBlockLeft=0 then //end
begin
PClnCtrlItem(CtrlItem)^.St atus:=4;
WriteLog(inttostr(Port)+' End');
FileSeek(FCastingFile,DstF ileSize,0) ;
SetEndOfFile(FCastingFile) ;
Terminate;
end;
PClnCtrlItem(CtrlItem)^.Li fe:=TIMEOU T_SECONDS;
end;
stMreq.imr_multiaddr.s_add r := inet_addr(PChar(Addr));
stMreq.imr_interface.s_add r := INADDR_ANY;
nRet := setsockopt(hSocket,IPPROTO _IP,IP_DRO P_MEMBERSH IP,PChar(@ stMreq),si zeof(stMre q));
closesocket(hSocket);
FileClose(FCastingFile);
end;
initialization
csQueryBlock:=TMCriticalSe ction.Crea te;
finalization
csQueryBlock.Free;
end.
-----------------
unit ClientControl;
interface
uses
Classes, extctrls, ClnCastThread;
type
PClnCtrlItem = ^TClnCtrlItem;
TClnCtrlItem = record
ID : integer; // = port
Status : integer; //0:not begin yet
//1:begun
//2:timeout error
//4:Successfully finished
//8:Error
FileSize : integer;
FileName : String; // pure name from server and when the user select the path
// FileName include the path info
Parent : TList;
Life : integer;//for timeout test
thread : TClnCastThread;
end;
TMultiCastFileClient = class(TComponent)
private
FTimeoutTimer : TTimer;
FDelTimer : TTimer;
FClnCtrlList : TList;
procedure OnTimeoutTimer(Sender:TObj ect);
procedure OnDelTimer(Sender:TObject) ;
public
constructor Create(AOwner:TComponent); override;
destructor Destroy;override;
function Add(FileName,Addr:String;S ize:intege r;port:wor d):PClnCtr lItem;
function Get(index:integer):PClnCtr lItem;
function Count:integer;
procedure Del(Item:PClnCtrlItem);ove rload;
procedure Del(index:integer);overloa d;
procedure StartAll;
procedure StopAll;
procedure ClearAll;
end;
implementation
uses MainUnit;
constructor TMultiCastFileClient.Creat e(AOwner:T Component) ;
begin
inherited Create(AOwner);
FClnCtrlList := TList.Create;
FTimeoutTimer := TTimer.Create(Self);
FTimeoutTimer.Enabled:=Fal se;
FTimeoutTimer.OnTimer:=OnT imeoutTime r;
FDelTimer := TTimer.Create(Self);
FDelTimer.Enabled:=False;
FDelTimer.OnTimer:=OnDelTi mer;
end;
destructor TMultiCastFileClient.Destr oy;
begin
ClearAll;
FClnCtrlList.Free;
FTimeoutTimer.Free;
inherited;
end;
procedure TMultiCastFileClient.OnTim eoutTimer( Sender:TOb ject);
var i:integer;
begin
for i:=0 to FClnCtrlList.Count-1 do
case PClnCtrlItem(FClnCtrlList[ i])^.Statu s of
4,8 : begin//end successfully
end;
0,1,2: if not PClnCtrlItem(FClnCtrlList[ i])^.threa d.Suspende d
then begin
Dec(PClnCtrlItem(FClnCtrlL ist[i])^.L ife);
//test life<0
if PClnCtrlItem(FClnCtrlList[ i])^.Life< 0 then
begin
//do sth.
PClnCtrlItem(FClnCtrlList[ i])^.Statu s:=2;
end;
end;
end;
end;
procedure TMultiCastFileClient.OnDel Timer(Send er:TObject );
var i:integer;
begin
i:=FClnCtrlList.Count-1;
while i>=0 do
begin
if (PClnCtrlItem(FClnCtrlList [i])^.Stat us=4)or
(PClnCtrlItem(FClnCtrlList [i])^.Stat us=8) then Del(i);
Dec(i);
end;
end;
function TMultiCastFileClient.Add(F ileName,Ad dr:String; Size:integ er;port:wo rd):PClnCt rlItem;
var Item:PClnCtrlItem;
begin
New(Item);
Item.ID:=Port;
Item.Status:=0;
Item.FileSize:=Size;
Item.FileName:=FileName;
Item.Parent:=FClnCtrlList;
Item.Life:=TIMEOUT_SECONDS ;
Item.thread:=TClnCastThrea d.Create(T rue);//not freed on terminate
Item.thread.DstFileName:=F ileName;
Item.thread.DstFileSize:=S ize;
Item.thread.Addr:=Addr;
Item.thread.Port:=port;
Item.thread.CtrlItem:=Item ;
Item.thread.sClient:=MainF orm.cs;
FClnCtrlList.Add(Item);
Item.thread.Resume;
Result:=Item;
FTimeoutTimer.Enabled:=Tru e;
FDelTimer.Enabled:=True;
end;
function TMultiCastFileClient.Get(i ndex:integ er):PClnCt rlItem;
begin
Result:=nil;
if (index<0) or (index>=FClnCtrlList.Count ) then exit;
Result:=FClnCtrlList[index ];
end;
function TMultiCastFileClient.Count :integer;
begin
Result:=FClnCtrlList.Count ;
end;
procedure TMultiCastFileClient.Del(I tem:PClnCt rlItem);
begin
Del(FClnCtrlList.IndexOf(I tem));
end;
procedure TMultiCastFileClient.Del(i ndex:integ er);
begin
if (index<0) or (index>=FClnCtrlList.Count ) then exit;
PClnCtrlItem(FClnCtrlList[ index])^.t hread.Term inate;
Dispose(FClnCtrlList[index ]);
FClnCtrlList.Delete(index) ;
if FClnCtrlList.Count=0 then
begin
FTimeoutTimer.Enabled:=Fal se;
FDelTimer.Enabled:=False;
end;
end;
procedure TMultiCastFileClient.Start All;
var i:integer;
begin
for i:=0 to FClnCtrlList.Count-1 do
PClnCtrlItem(FClnCtrlList[ i])^.threa d.Resume;
FTimeoutTimer.Enabled:=Tru e;
FDelTimer.Enabled:=True;
end;
procedure TMultiCastFileClient.StopA ll;
var i:integer;
begin
FTimeoutTimer.Enabled:=Fal se;
FDelTimer.Enabled:=False;
for i:=0 to FClnCtrlList.Count-1 do
PClnCtrlItem(FClnCtrlList[ i])^.threa d.Suspend;
end;
procedure TMultiCastFileClient.Clear All;
begin
while FClnCtrlList.Count>0 do
begin
Del(PClnCtrlItem(FClnCtrlL ist[0]));
end;
end;
end.
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WinSock, ScktComp, ClientControl, MProtocol, ComCtrls, ToolWin,
Menus, ExtCtrls, Spin, ImgList;
type
TMainForm = class(TForm)
Memo1: TMemo;
cs: TClientSocket;
MCClientMainMenu: TMainMenu;
File1: TMenuItem;
Local1: TMenuItem;
Remote1: TMenuItem;
Tools1: TMenuItem;
Help1: TMenuItem;
Connect1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
About1: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
Splitter1: TSplitter;
Panel1: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
StatusBar1: TStatusBar;
Splitter2: TSplitter;
Panel2: TPanel;
Splitter3: TSplitter;
Panel3: TPanel;
StatusBar2: TStatusBar;
StatusBar3: TStatusBar;
lvLocal: TListView;
ListView2: TListView;
Label2: TLabel;
Panel4: TPanel;
SpinEdit1: TSpinEdit;
Label1: TLabel;
ToolBar2: TToolBar;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ListView3: TListView;
ImageList1: TImageList;
ToolBar3: TToolBar;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ListView4: TListView;
ToolBar4: TToolBar;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ListView5: TListView;
lvRemote: TListView;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ImageList2: TImageList;
sd: TSaveDialog;
ToolButton16: TToolButton;
ToolButton18: TToolButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure csRead(Sender: TObject; Socket: TCustomWinSocket);
procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure Splitter3CanResize(Sender:
var Accept: Boolean);
procedure Exit1Click(Sender: TObject);
procedure ToolButton15Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure Connect1Click(Sender: TObject);
procedure ToolButton16Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure csDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ToolButton18Click(Sender: TObject);
private
{ Private declarations }
nRet:integer;
stWSAData:WSADATA;
sfList : TList;//file list from server;
mcfCln : TMultiCastFileClient;
CastAddr : String;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
procedure WriteLog(log:String);
implementation
{$R *.DFM}
var csLog:TMCriticalSection;
procedure WriteLog(log:String);
begin
csLog.Enter;
try
MainForm.Memo1.Lines.Add(l
finally
csLog.Leave;
end;
end;
procedure TMainForm.FormCreate(Sende
begin
nRet:=WSAStartup($0202, stWSAData);
sfList:=TList.Create;
mcfCln:=TMultiCastFileClie
end;
procedure TMainForm.FormDestroy(Send
begin
mcfCln.ClearAll;
mcfCln.Free;
while sfList.Count>0 do
begin
Dispose(sfList[0]);
sfList.Delete(0);
end;
sfList.Free;
WSACleanup;
end;
procedure TMainForm.csRead(Sender: TObject; Socket: TCustomWinSocket);
var pfli:PFileListItem;
s:string;
i:integer;
aItem:TListItem;
begin
i:=Socket.ReceiveLength;
while i>=sizeof(TFileListItem) do
begin
new(pfli);
i:=Socket.ReceiveBuf(pfli^
s:=copy(pfli.fname,0,pfli.
memo1.lines.add({'size:'+i
'port:'+inttostr(pfli.port
'namelength:'+inttostr(pfl
s);
sfList.Add(pfli);
aItem:=lvRemote.Items.Add;
aItem.Caption:=s;
aItem.SubItems.Add(inttost
aItem.Data:=pfli;
i:=Socket.ReceiveLength;
end;
lvRemote.Color:=clWindow;
lvRemote.Enabled:=True;
end;
procedure TMainForm.csConnect(Sender
var qb:TQueryBlockPkg;
sAddr:TSockAddrIn;
begin
sAddr:=cs.Socket.Addr;
sAddr.sin_addr.S_un_b.s_b1
CastAddr:=inet_ntoa(sAddr.
StrCopy(PChar(@(qb.CmdStr[
cs.Socket.SendBuf(qb,sizeo
end;
procedure TMainForm.Splitter3CanResi
var NewSize: Integer; var Accept: Boolean);
begin
if NewSize<40 then Accept:=False;
end;
procedure TMainForm.Exit1Click(Sende
begin
Close;
end;
procedure TMainForm.ToolButton15Clic
begin
Exit1Click(Sender);
end;
procedure TMainForm.ToolButton1Click
begin
Connect1Click(Sender);
end;
procedure TMainForm.Connect1Click(Se
var input:String;
begin
if InputQuery('Remote IP Address','Please input server ip here',input)
then begin
cs.Address:=input;
cs.Active:=True;
end;
end;
procedure TMainForm.ToolButton16Clic
var pfli:PFileListItem;
i:integer;
begin
if lvRemote.SelCount>0 then
begin
pfli:=PFileListItem(lvRemo
sd.FileName:=lvRemote.Sele
if sd.Execute then
begin
memo1.Lines.Add(sd.FileNam
mcfCln.Add(sd.FileName,Cas
end;
end;
end;
procedure TMainForm.About1Click(Send
begin
ShowMessage('Multicast File Transfer Client by She');
end;
procedure TMainForm.csDisconnect(Sen
Socket: TCustomWinSocket);
begin
lvRemote.Items.Clear;
lvRemote.Color:=clBtnFace;
lvRemote.Enabled:=False;
end;
procedure TMainForm.ToolButton18Clic
begin
cs.Close;
end;
initialization
csLog:=TMCriticalSection.C
finalization
csLog.Free;
end.
----------------------
object MainForm: TMainForm
Left = 113
Top = 104
Width = 622
Height = 435
Caption = 'File Cast Client'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MCClientMainMenu
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 0
Top = 185
Width = 614
Height = 3
Cursor = crVSplit
Align = alTop
end
object Splitter2: TSplitter
Left = 185
Top = 188
Width = 3
Height = 201
Cursor = crHSplit
OnCanResize = Splitter3CanResize
end
object Splitter3: TSplitter
Left = 401
Top = 188
Width = 3
Height = 201
Cursor = crHSplit
OnCanResize = Splitter3CanResize
end
object Memo1: TMemo
Left = 0
Top = 40
Width = 614
Height = 145
Align = alTop
ReadOnly = True
TabOrder = 0
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 614
Height = 40
AutoSize = True
ButtonHeight = 38
ButtonWidth = 39
Caption = 'ToolBar1'
Flat = True
Images = ImageList2
TabOrder = 1
object ToolButton1: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton1'
ImageIndex = 0
OnClick = ToolButton1Click
end
object ToolButton14: TToolButton
Left = 39
Top = 0
Width = 8
Caption = 'ToolButton14'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton16: TToolButton
Left = 47
Top = 0
Caption = 'ToolButton16'
ImageIndex = 2
OnClick = ToolButton16Click
end
object ToolButton18: TToolButton
Left = 86
Top = 0
Caption = 'ToolButton18'
ImageIndex = 3
OnClick = ToolButton18Click
end
object ToolButton15: TToolButton
Left = 125
Top = 0
Caption = 'ToolButton15'
ImageIndex = 1
OnClick = ToolButton15Click
end
end
object Panel1: TPanel
Left = 0
Top = 188
Width = 185
Height = 201
Align = alLeft
BevelOuter = bvNone
Caption = 'Panel1'
TabOrder = 2
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 185
Height = 182
ActivePage = TabSheet2
Align = alClient
Style = tsFlatButtons
TabIndex = 1
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'Queue'
object ListView2: TListView
Left = 0
Top = 30
Width = 177
Height = 121
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 0
ViewStyle = vsReport
end
object ToolBar2: TToolBar
Left = 0
Top = 0
Width = 177
Height = 30
AutoSize = True
ButtonHeight = 30
ButtonWidth = 31
Caption = 'ToolBar2'
EdgeBorders = []
Flat = True
Images = ImageList1
TabOrder = 1
object ToolButton2: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton2'
ImageIndex = 0
end
object ToolButton3: TToolButton
Left = 31
Top = 0
Width = 8
Caption = 'ToolButton3'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton4: TToolButton
Left = 39
Top = 0
Caption = 'ToolButton4'
ImageIndex = 1
end
object ToolButton5: TToolButton
Left = 70
Top = 0
Width = 8
Caption = 'ToolButton5'
ImageIndex = 2
Style = tbsSeparator
end
object ToolButton6: TToolButton
Left = 78
Top = 0
Caption = 'ToolButton6'
ImageIndex = 2
end
object ToolButton7: TToolButton
Left = 109
Top = 0
Caption = 'ToolButton7'
ImageIndex = 3
end
end
end
object TabSheet2: TTabSheet
Caption = 'Threads'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ImageIndex = 1
ParentFont = False
object Label2: TLabel
Left = 0
Top = 25
Width = 177
Height = 26
Align = alTop
Caption = '0 threads running, total transfer speed is 0.0 kb/s'
Color = clBtnFace
ParentColor = False
WordWrap = True
end
object Panel4: TPanel
Left = 0
Top = 0
Width = 177
Height = 25
Align = alTop
BevelOuter = bvNone
TabOrder = 0
object Label1: TLabel
Left = 48
Top = 8
Width = 57
Height = 13
Caption = 'max threads'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object SpinEdit1: TSpinEdit
Left = 8
Top = 3
Width = 33
Height = 22
MaxValue = 10
MinValue = 1
TabOrder = 0
Value = 1
end
end
object ListView3: TListView
Left = 0
Top = 51
Width = 177
Height = 100
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 120
end
item
Caption = 'Status'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object TabSheet3: TTabSheet
Caption = 'Downloads'
ImageIndex = 2
object ToolBar3: TToolBar
Left = 0
Top = 0
Width = 177
Height = 29
Caption = 'ToolBar3'
EdgeBorders = []
Flat = True
TabOrder = 0
object ToolButton8: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton8'
ImageIndex = 0
end
object ToolButton9: TToolButton
Left = 23
Top = 0
Width = 8
Caption = 'ToolButton9'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton10: TToolButton
Left = 31
Top = 0
Caption = 'ToolButton10'
ImageIndex = 1
end
end
object ListView4: TListView
Left = 0
Top = 29
Width = 177
Height = 122
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object TabSheet4: TTabSheet
Caption = 'Failures'
ImageIndex = 3
object ToolBar4: TToolBar
Left = 0
Top = 0
Width = 177
Height = 29
Caption = 'ToolBar3'
EdgeBorders = []
Flat = True
TabOrder = 0
object ToolButton11: TToolButton
Left = 0
Top = 0
Caption = 'ToolButton8'
ImageIndex = 0
end
object ToolButton12: TToolButton
Left = 23
Top = 0
Width = 8
Caption = 'ToolButton9'
ImageIndex = 1
Style = tbsSeparator
end
object ToolButton13: TToolButton
Left = 31
Top = 0
Caption = 'ToolButton10'
ImageIndex = 1
end
end
object ListView5: TListView
Left = 0
Top = 29
Width = 177
Height = 122
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 100
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 182
Width = 185
Height = 19
Panels = <>
SimplePanel = False
end
end
object Panel2: TPanel
Left = 188
Top = 188
Width = 213
Height = 201
Align = alLeft
BevelOuter = bvNone
Caption = 'Panel2'
TabOrder = 3
object StatusBar2: TStatusBar
Left = 0
Top = 182
Width = 213
Height = 19
Panels = <>
SimplePanel = False
end
object lvLocal: TListView
Left = 0
Top = 0
Width = 213
Height = 182
Align = alClient
Columns = <
item
Caption = 'FileName'
Width = 150
end
item
Caption = 'Size'
end>
TabOrder = 1
ViewStyle = vsReport
end
end
object Panel3: TPanel
Left = 404
Top = 188
Width = 210
Height = 201
Align = alClient
BevelOuter = bvNone
Caption = 'Panel3'
TabOrder = 4
object StatusBar3: TStatusBar
Left = 0
Top = 182
Width = 210
Height = 19
Panels = <>
SimplePanel = False
end
object lvRemote: TListView
Left = 0
Top = 0
Width = 210
Height = 182
Align = alClient
Color = clBtnFace
Columns = <
item
Caption = 'FileName'
Width = 150
end
item
Caption = 'Size'
end>
Enabled = False
TabOrder = 1
ViewStyle = vsReport
end
end
object cs: TClientSocket
Active = False
Address = '127.0.0.1'
ClientType = ctNonBlocking
Port = 1406
OnConnect = csConnect
OnDisconnect = csDisconnect
OnRead = csRead
Left = 416
end
object MCClientMainMenu: TMainMenu
Left = 200
Top = 4
object File1: TMenuItem
Caption = '&File'
object Connect1: TMenuItem
Caption = '&Connect ...'
OnClick = Connect1Click
end
object N1: TMenuItem
Caption = '-'
end
object Exit1: TMenuItem
Caption = 'E&xit'
OnClick = Exit1Click
end
end
object Local1: TMenuItem
Caption = '&Local'
end
object Remote1: TMenuItem
Caption = '&Remote'
end
object Tools1: TMenuItem
Caption = '&Tools'
end
object Help1: TMenuItem
Caption = '&Help'
object About1: TMenuItem
Caption = '&About ...'
OnClick = About1Click
end
end
end
object ImageList1: TImageList
Height = 24
Width = 24
Left = 296
Top = 2
Bitmap = {
494C0101040009000400180018
00000000000036000000280000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
10420000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00001042000000000000000000
00000000000000000000000000
4A294A294A294A290000000000
00000000000000000000000000
000000000000000000000000CE
CE39CE39CE39CE390000000000
FF7F0000000000000000000000
00000000000000000000000000
3967396739674A290000000000
CE39CE39CE39CE39CE39CE39CE
000000000000000000000000CE
FF7FFF7FF75E734ECE39000000
00000000000000000000000000
00000000000000000000000000
9C739C7339674A290000000000
FF7FFF7FFF7FFF7FFF7FFF7FFF
000000000000000000000000CE
CE39CE39F75E1042EF3D000000
F75E1042104210421042104200
00000000000000000000000000
9C739C7339674A290000000000
CE39CE39CE39CE39CE39CE39CE
000000000000000000000000CE
734EF75EF75E734ECE39000000
10420000000000000000000010
00000000000000000000000000
9C739C7339674A290000000000
F75EF75EF75EF75EF75EF75EF7
000000000000000000000000CE
E0030002734E734ECE39000000
0000FF7FFF7FFF7FFF7FFF7F00
00000000000000000000000000
9C739C7339674A290000000000
F75EF75EF75EF75EF75EF75EF7
000000000000000000000000CE
FF7FFF7FFF7F734ECE39000000
FF7FFF7FFF7FFF7FFF7FFF7FFF
00000000000000000000000000
9C739C7339674A290000000000
FF7FFF7FFF7FFF7FFF7FFF7FFF
00000000000000000000000000
F75EA514F75EF75ECE39000000
FF7FFF7FFF7FFF7FFF7FFF7FFF
00000000000000000000000000
9C739C7339674A290000000000
F75EA514A514A514F75EF75EF7
00000000000000000000000000
A514006CA514CE39CE39000000
FF7F1000100010001000FF7F10
00000000000000000000000000
9C739C7339674A290000000000
CE39A514F31BA514CE39CE39A5
00000000000000000000000000
006C006C006CA5140000000000
FF7FFF7F1000FF7FFF7FFF7FFF
00000000000000000000000000
9C739C7339674A290000000000
0000A514F31BA51400000000A5
00000000000000000000000000
006C006C006C006CA514000000
FF7FFF7FFF7F1000FF7FFF7F10
00000000000000000000000000
9C733967734E4A290000000000
0000A514F31BA514A514A514A5
00000000000000000000000000
A514006CA514A514A514000000
FF7FFF7F100010001000FF7FFF
00000000000000000000000000
3967734EEF3D4A290000000000
0000A514F31BF31BF31BF31BF3
00000000000000000000000000
2925006CA51400000000000000
0000FF7FFF7FFF7FFF7FFF7FFF
00000000000000000000000000
4A29C618C618C6180000000000
0000A514A514A514A514A514A5
00000000000000000000000000
006C006CA51400000000000000
00000000000000000000000000
00000000000000000000000000
734EFE7F4A2900000000000000
000000000000000000000000A5
00000000000000000000000000
A514A514A51400000000000000
00000000000000000000000000
00000000000000000000000000
734E4A29000000000000000000
000000000000000000000000A5
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
10420000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
28000000600000004800000001
000000000000000000000000FF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FFFFFFFFFFFFFFFFFFFFFFFFFF
F8FFFFFFFFFFFFFFFFFC001FF0
0FF80007F0FFFFFC001FF80007
001FF80007F80007F8007FFC00
F0001FFC001FFC0007FE000FF0
FFFFF80FF8001FFC001FFF007F
001FFF007FFFC03FFF01FFFC00
FFFFFFFC00FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF
000000000000}
end
object ImageList2: TImageList
Height = 32
Width = 32
Left = 336
Top = 2
Bitmap = {
494C0101040009000400200020
00000000000036000000280000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000E04500
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000E045E0
00000000000000000000000000
00000000000000000000DF5ADF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
000000000000000000000000E0
00000000000000000000000000
000000000000DF5A173CDF5ADF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
000000000000000000000000E0
00000000000000000000000000
00000000DF5ADF5A173CDF5ADF
4A290000000000000000000000
00001042104210421042104210
00000000000000000000000000
0000000000000000000000004A
E77FE77F000000000000000000
000000000000000000000000E0
00000000000000000000000000
00000000DF5ADF5A173CDF5ADF
4A294A294A2900000000000000
00001042186318631863186318
10420000000000000000000000
0000000000000000524A0000C6
E77FE77F000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000DF5ADF5A173CDF5ADF
4A294A294A2900000000000000
000010421863FF7FFF7FFF7FFF
10421042000000000000000000
0000000000003146A5149452DE
00000000E77FE77F0000000000
000000000000E045E045E045E0
00000000000000000000000000
00000000DF5ADF5A173CDF5ADF
00000000000000000000000000
00001042186310421042104210
10421042000000000000000000
00000000D65A524AFF7FFF7FFF
E77FE77FE77FE77F0000000000
0000000000000000E045F67FCE
00000000000000000000000000
00000000DF5ADF5A173CDF5A17
00000000000000000000000000
000010421863FF7FFF7FFF7FFF
10421042000000000000000000
CE39CE39CE39524AFF7FFF7F94
E77FE77F000000000000000000
0000000000000000E045F67FCE
00000000000000000000000000
00000000DF5ADF5A173CDF5ADF
00000000000000000000000000
00001042186310421042104210
10421042000000000000000000
607F607F607F524A5A6B8C31D6
00000000000000000000000000
00000000000000000000E045F6
00000000000000000000000000
00000000DF5ADF5ADF5ADF5ADF
00000000000000000000000000
00001042186318631863186318
10421042000000000000000000
607FA514A51431468C31FF7FFF
00000000000000000000000000
00000000000000000000E045E0
00000000000000000000000000
00000000DF5ADF5ADF5ADF5ADF
00000040004000000000000000
00001042FF7FFF7FFF7FFF7FFF
10421042000000000000000000
A514000000005A6B8C31734EDE
00000000000000000000000000
E045E045E045E045E045E045E0
00000000000000000000000000
0000DF5ADF5ADF5ADF5ADF5ADF
00000040007C00400000000000
00000000104218631863004010
10421042000000000000000000
A51400000000000031468C3110
00000000000000000000000000
0000E045F67FCE7F607F607F60
00000000000000000000000000
0000DF5ADF5ADF5ADF5ADF5ADF
00400040007C007C0040000000
00000000000000000040007C00
18631042000000000000000000
A5140000000000000000000000
00000000000000000000000000
0000E045F67FCE7F607F607F60
00000000000000000000000000
0000DF5ADF5ADF5ADF5ADF5ADF
007C007C007C007C007C004000
0000000000000040007C007C00
10421042000000000000000000
607FA514000000000000000000
00000000000000000000000000
00000000E045F67FCE7F607F60
00000000000000000000000000
0000DF5ADF5ADF5ADF5AFF7FFF
00400040007C007C0040000000
000000000040007C007C007C00
00000000000000000000000000
607F607FA51400000000000000
00000000000000000000000000
00000000E045F67FCE7F607F60
00000000000000000000000000
0000DF5ADF5ADF5AFF7FDF5ADF
00000040007C00400000000000
00000000004000400040007C00
00000000000000000000000000
CE39607F607FA5140000000000
00000000000000000000000000
000000000000E045F67FCE7F60
00000000000000000000000000
0000DF5AFF7FFF7FBF35BF35BF
00000040004000000000000000
00000000000000000040007C00
00000000000000000000000000
D65ACE39607FA5140000000000
00000000000000000000000000
000000000000E045F67FCE7F60
00000000000000000000000000
0000FF7FDF5ABF350000000000
00000000000000000000000000
00000000000000000040007C00
00000000000000000000000000
D65ACE39607FA5140000000000
00000000000000000000000000
0000000000000000E045F67FCE
00000000000000000000000000
00000000DF5A00004A2929254A
00000000000000000000000000
00000000000000000040007C00
00000000000000000000000000
CE39607F607FA5140000000000
00000000000000000000000000
0000000000000000E045F67FCE
00000000000000000000000000
00000000630C2925B556B5564A
00000000000000000000000000
00000000000000000040007C00
00000000000000000000000000
607F607FA51400000000000000
00000000000000000000000000
00000000000000000000E045F6
00290000000000000000000000
00000000A514B5569C73186352
00000000000000000000000000
00000000000000000040007C00
00000000000000000000000000
607F1042000000000000000000
00000000000000000000000000
00000000000000000000E045E0
E0450000000000000000000000
00000000A5149C73FF7F9C73B5
00000000000000000000000000
00000000000000000040004000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
000000000000A5149C73524A29
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
0000000000000000630C000029
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
28000000800000006000000001
000000000000000000000000FF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF
FFF1FFFFFFC00FFFFFFFFFFFFF
FFF87FFFFF0000FFFF0000FFFF
FFFC1FFFFF00003FFF00003FFF
FFE007FFFF003FFFFF00003FFC
FFF003FFFF007FFFFF00003FF8
FE000FFFFE003F1FFF80003FF8
FF0003FFFE003007FFC0007FF8
FF801FFFFE003F1FFF80FFFFFC
FFC007FFFE007FFFFFE1FFFFFE
FFE001FFFF80FFFFFFE1FFFFFC
FFF000FFFF80FFFFFFE3FFFFFF
FFFFFFFFFFE3FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF
000000000000}
end
object sd: TSaveDialog
Left = 376
Top = 2
end
end
-------------------
unit ClnCastThread;
interface
uses
Windows, Classes, SysUtils, WinSock, MProtocol, ScktComp;
const
TIMEOUT_SECONDS = 30;
type
ip_mreq = record
imr_multiaddr: in_addr ; // IP multicast address of group */
imr_interface: in_addr ; // local IP address of interface */
end;
TClnCastThread = class(TThread)
private
{ Private declarations }
FCastingFile:THandle;
FBlockLeft:integer;//Block
FSerialNum:integer;//the oldest package's SerialNum
FStartBlock:integer;//
protected
procedure Execute; override;
public
DstFileName:String;
DstFileSize:integer;
Addr:String;
Port:u_short;
CtrlItem:Pointer;
sClient:TClientSocket;
end;
implementation
Uses MainUnit, ClientControl;
var csQueryBlock:TMCriticalSec
//Client use csQueryBlock to synchronize the call to the TClientSocket component
//used in the MainForm
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
Synchronize(UpdateCaption)
and UpdateCaption could look like,
procedure TClnCastThread.UpdateCapti
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TClnCastThread }
procedure TClnCastThread.Execute;
var
nRet,i,j:integer;
stLclAddr, stSrcAddr: SOCKADDR_IN;
stMreq:ip_mreq; //* Multicast interface structure */
hSocket:TSOCKET;
lTTL:u_long;
aPkg:TCastPkg;
addr_size:integer;
curB:integer;
bExpect,bLast,bTotal:integ
PkgSize:integer;
l,h:DWord;
fSize:Longint;
isIt:Boolean;
b:Byte;
pkgQueryBlock:TQueryBlockP
begin
FBlockLeft:=DstFileSize div FILE_BLOCK_SIZE+1;
bTotal:=FBlockLeft;
FSerialNum:=MaxInt;
FStartBlock:=MaxInt;
isIt:=False;
j:=FBlockLeft;
if FileExists(DstFileName)
then begin//open and check
FCastingFile:=FileOpen(Dst
l:=GetFileSize(FCastingFil
fSize:=l or h shl 16;
//check size, and whether all bytes are 0 and 1
isIt:=True;
if fSize<>DstFileSize+FBlockL
FileSeek(FCastingFile,DstF
for i:=0 to FBlockLeft-1 do
begin
FileRead(FCastingFile,b,1)
if (b or 1)<>1 then isIt:=False
else if b=1 then Dec(j);
end;
end
else FCastingFile:=FileCreate(D
if not isIt
then begin//Create tail control block, and initialize to be all 0
FileSeek(FCastingFile,DstF
b:=0;
for i:=0 to FBlockLeft-1 do
FileWrite(FCastingFile,b,1
SetEndOfFile(FCastingFile)
end
else FBlockLeft:=j;
hSocket := socket(AF_INET,
SOCK_DGRAM,
0);
lTTL:=1;
nRet := setsockopt(hSocket,SOL_SOC
stLclAddr.sin_family := AF_INET;
stLclAddr.sin_addr.s_addr := htonl(INADDR_ANY);
stLclAddr.sin_port := htons(Port);
nRet := bind(hSocket,stLclAddr,siz
stMreq.imr_multiaddr.s_add
stMreq.imr_interface.s_add
nRet := setsockopt(hSocket,IPPROTO
addr_size:=sizeof(sockaddr
WriteLog('Begin listening Port '+inttostr(Port)+' for file '+DstFileName);
bExpect:=-1;
bLast:=-1;
//tell server to activate the casting thread
StrCopy(pkgQueryBlock.CmdS
pkgQueryBlock.FileID:=Port
csQueryBlock.Enter;
try
sClient.Socket.SendBuf(pkg
finally
csQueryBlock.Leave;
end;
while not Terminated do
begin
PkgSize := recvfrom(hSocket,aPkg,size
if PkgSize = 0 then
begin
PClnCtrlItem(CtrlItem)^.St
WriteLog('Error End');
Terminate;
end;
//use seriallized pkg to initialize FSerialNumºÍFStartBlock
if aPkg.header.nType = PKGTYPE_SERIAL
then begin
if aPkg.header.nSerial<FSeria
begin
FSerialNum:=aPkg.header.nS
WriteLog(inttostr(Port)+' Initialize FSerialNum = '+inttostr(FSerialNum));
end;
if aPkg.header.nSerial=FSeria
then begin
if aPkg.header.nBlockPos<FSta
begin
FStartBlock:=aPkg.header.n
WriteLog(inttostr(Port)+' Initialize FStartBlock '+inttostr(FStartBlock));
end;
end
else begin
if aPkg.header.nBlockPos<FSta
then begin
end
else begin
end;
end;
end;
//init end
curB:=aPkg.header.nBlockPo
FileSeek(FCastingFile,DstF
FileRead(FCastingFile,b,1)
if b=0 then
begin //write this pkg to file
FileSeek(FCastingFile,curB
FileWrite(FCastingFile,aPk
Dec(FBlockLeft);
FileSeek(FCastingFile,DstF
b:=1;
FileWrite(FCastingFile,b,1
//MainForm.Log.Caption:=in
if aPkg.header.nType = PKGTYPE_SERIAL then
begin
if (bExpect<>-1) then
if (curB > bExpect) and (curB > bLast)then //lack pkgs
begin
StrCopy(pkgQueryBlock.CmdS
pkgQueryBlock.FileID:=Port
pkgQueryBlock.BlockStart:=
pkgQueryBlock.BlockEnd:=(c
csQueryBlock.Enter;
try
sClient.Socket.SendBuf(pkg
finally
csQueryBlock.Leave;
end;
//WriteLog('Query:'+inttos
end;
bLast:=curB;
bExpect:=(curB+1) mod bTotal;
end;
end;
if FBlockLeft=0 then //end
begin
PClnCtrlItem(CtrlItem)^.St
WriteLog(inttostr(Port)+' End');
FileSeek(FCastingFile,DstF
SetEndOfFile(FCastingFile)
Terminate;
end;
PClnCtrlItem(CtrlItem)^.Li
end;
stMreq.imr_multiaddr.s_add
stMreq.imr_interface.s_add
nRet := setsockopt(hSocket,IPPROTO
closesocket(hSocket);
FileClose(FCastingFile);
end;
initialization
csQueryBlock:=TMCriticalSe
finalization
csQueryBlock.Free;
end.
-----------------
unit ClientControl;
interface
uses
Classes, extctrls, ClnCastThread;
type
PClnCtrlItem = ^TClnCtrlItem;
TClnCtrlItem = record
ID : integer; // = port
Status : integer; //0:not begin yet
//1:begun
//2:timeout error
//4:Successfully finished
//8:Error
FileSize : integer;
FileName : String; // pure name from server and when the user select the path
// FileName include the path info
Parent : TList;
Life : integer;//for timeout test
thread : TClnCastThread;
end;
TMultiCastFileClient = class(TComponent)
private
FTimeoutTimer : TTimer;
FDelTimer : TTimer;
FClnCtrlList : TList;
procedure OnTimeoutTimer(Sender:TObj
procedure OnDelTimer(Sender:TObject)
public
constructor Create(AOwner:TComponent);
destructor Destroy;override;
function Add(FileName,Addr:String;S
function Get(index:integer):PClnCtr
function Count:integer;
procedure Del(Item:PClnCtrlItem);ove
procedure Del(index:integer);overloa
procedure StartAll;
procedure StopAll;
procedure ClearAll;
end;
implementation
uses MainUnit;
constructor TMultiCastFileClient.Creat
begin
inherited Create(AOwner);
FClnCtrlList := TList.Create;
FTimeoutTimer := TTimer.Create(Self);
FTimeoutTimer.Enabled:=Fal
FTimeoutTimer.OnTimer:=OnT
FDelTimer := TTimer.Create(Self);
FDelTimer.Enabled:=False;
FDelTimer.OnTimer:=OnDelTi
end;
destructor TMultiCastFileClient.Destr
begin
ClearAll;
FClnCtrlList.Free;
FTimeoutTimer.Free;
inherited;
end;
procedure TMultiCastFileClient.OnTim
var i:integer;
begin
for i:=0 to FClnCtrlList.Count-1 do
case PClnCtrlItem(FClnCtrlList[
4,8 : begin//end successfully
end;
0,1,2: if not PClnCtrlItem(FClnCtrlList[
then begin
Dec(PClnCtrlItem(FClnCtrlL
//test life<0
if PClnCtrlItem(FClnCtrlList[
begin
//do sth.
PClnCtrlItem(FClnCtrlList[
end;
end;
end;
end;
procedure TMultiCastFileClient.OnDel
var i:integer;
begin
i:=FClnCtrlList.Count-1;
while i>=0 do
begin
if (PClnCtrlItem(FClnCtrlList
(PClnCtrlItem(FClnCtrlList
Dec(i);
end;
end;
function TMultiCastFileClient.Add(F
var Item:PClnCtrlItem;
begin
New(Item);
Item.ID:=Port;
Item.Status:=0;
Item.FileSize:=Size;
Item.FileName:=FileName;
Item.Parent:=FClnCtrlList;
Item.Life:=TIMEOUT_SECONDS
Item.thread:=TClnCastThrea
Item.thread.DstFileName:=F
Item.thread.DstFileSize:=S
Item.thread.Addr:=Addr;
Item.thread.Port:=port;
Item.thread.CtrlItem:=Item
Item.thread.sClient:=MainF
FClnCtrlList.Add(Item);
Item.thread.Resume;
Result:=Item;
FTimeoutTimer.Enabled:=Tru
FDelTimer.Enabled:=True;
end;
function TMultiCastFileClient.Get(i
begin
Result:=nil;
if (index<0) or (index>=FClnCtrlList.Count
Result:=FClnCtrlList[index
end;
function TMultiCastFileClient.Count
begin
Result:=FClnCtrlList.Count
end;
procedure TMultiCastFileClient.Del(I
begin
Del(FClnCtrlList.IndexOf(I
end;
procedure TMultiCastFileClient.Del(i
begin
if (index<0) or (index>=FClnCtrlList.Count
PClnCtrlItem(FClnCtrlList[
Dispose(FClnCtrlList[index
FClnCtrlList.Delete(index)
if FClnCtrlList.Count=0 then
begin
FTimeoutTimer.Enabled:=Fal
FDelTimer.Enabled:=False;
end;
end;
procedure TMultiCastFileClient.Start
var i:integer;
begin
for i:=0 to FClnCtrlList.Count-1 do
PClnCtrlItem(FClnCtrlList[
FTimeoutTimer.Enabled:=Tru
FDelTimer.Enabled:=True;
end;
procedure TMultiCastFileClient.StopA
var i:integer;
begin
FTimeoutTimer.Enabled:=Fal
FDelTimer.Enabled:=False;
for i:=0 to FClnCtrlList.Count-1 do
PClnCtrlItem(FClnCtrlList[
end;
procedure TMultiCastFileClient.Clear
begin
while FClnCtrlList.Count>0 do
begin
Del(PClnCtrlItem(FClnCtrlL
end;
end;
end.
BTW take a look here how indy is used with UDP and other related infos http://delphi.about.com/library/weekly/aa101105a.htm