Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West...

51
Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003

Transcript of Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West...

Page 1: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

Printing in the MetaFrame EnvironmentPrinting in the MetaFrame Environment

Jim WestGlobal Escalation TeamCSEIT Event 2003

Jim WestGlobal Escalation TeamCSEIT Event 2003

Page 2: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

2

Agenda• Printer Definition• Autocreation• Imported Print Servers• Windows CE• Universal Print Driver (UPD)• Follow the Print Job• Utilities

Page 3: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

3

Printer Definitions• Auto-created (Requires the client network)

– Locally Attached• Info stored in HKLM

– Locally Defined• Info stored in the user’s profile

• Autoconnected– Imported print queues assigned to users

• Retained in the data store

• Manually Mapped– Mapped from inside the session

• Retained in the users’ profile• HKCU/Printers/Connections

Page 4: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

4

Printer Autocreation: Overview

•Server Requests the printer information

•Wfica indexes and enumerates the client’s printer information.

•The ICA virtual channels are used to communicate with the server. (CTXCTL)

SD

SD

ESC

DLT

PROLIANT 8000

Page 5: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

5

Printer Autocreation: Client Side

• The basic questions that need to be answered……– What port?– Printer name?– Which print driver?

• Answered by Wfica(ICA client engine)– Wfica32 for win32 clients(Win9x, Win2k,etc).– WficaCE for Windows CE– Wfica for Linux and Unix

• Ini file entries required• Universal Print Driver now supported

Page 6: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

6

Printer Autocreation: Client Side• Printer User Interface (on local client)

– Locally Attached• Black Ice PDF Writer• Canon Bubble-Jet• Panasonic KX-P6500

– Locally Defined• HP LaserJet 4000 on Print Server: jwest-ftp

Page 7: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

7

Printer Autocreation: Client Side• Auto-created (Requires the client network)

– Locally Defined• Info stored in the user’s profile

Page 8: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

8

Printer Autocreation: Client Side• Auto-created (Requires the client network)

– Locally Attached• Info stored in HKLM

Page 9: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

9

Printer Autocreation: MetaFrame for Unix• Client side printer mapping

– Run /opt/CTXSmf/sbin/ctxcfg –p enable– Run /opt/CTXSmf/bin/ctxprinters to list

Page 10: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

10

Printer Autocreation: Server Side• Client informs the server what

virtual channels it supports.

• Wfshell: IMA flags are checked– Per server or per farm restrictions– Check for Feature Release license

• Ctxlogon: – Asynchronous or Synchronous

• Wfshell:– List the client side printers– Get the user’s SID– Check user’s profile for printer info

• Client informs the server what virtual channels it supports.

• Wfshell: IMA flags are checked– Per server or per farm restrictions– Check for Feature Release license

• Ctxlogon: – Asynchronous or Synchronous

• Wfshell:– List the client side printers– Get the user’s SID– Check user’s profile for printer info

Session Initialization

AutocreatedPrinters Allowed?

OrganizedPrinter Data

YES

NO

Page 11: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

11

Printer Autocreation: Server Side• User’s profile server-side (First Login)

– DevModePerUser • “Client” Network• Specific ICA client name: W2KPRO• Both Native AND Universal Print Drivers

•Note: HKCU\Printers\Citrix does NOT contain client network printer

information.

Page 12: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

12

Printer Autocreation: Server Side• User’s profile server-side (Next Login)

– DevModePerUser copied to ..\Citrix\DevModes2– ..\Citrix\client,Printername\PrinterDriverData– PrinterInfo2Attr (Offset to locate extended data)

•Note: HKCU\Printers\Citrix now contains client network printer info.

Page 13: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

13

Printer Autocreation: Server Side• Wfshell:

– Checks to see if the printer is allowed– Determines if printer info resides in

Profile– Checks for the printer in HKLM\CCS\

Cntrl\Print\Printers– Calls are made to build the printer

• Cdmprov.dll: Calls into Spoolsv.exe– Locates the server driver

• Inf files – Wtsuprn.inf Parsed first, takes precedence – Wtsprnt.inf Replaced by IMA during

replication

Approved?OR

Mapped?

Printer AlreadyExist?

NO

YES

Page 14: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

14

Printer Autocreation: Server Side

Driver Match inRegistry?

Silent Install?Build Print

Queue

YES

NO YES

• Cdmprov.dll: Calls into Spoolsv.exe– Locates the server driver

• Registry HKLM\CCS\CNTRL\Print\Environments\Windows NT x86\Drivers\Version-3\printer model name

– Silent Install• PrintUIEntry /ia /m “printer model name” /q• Queries \winnt\inf\ ntprint.inf to build the printer• MF XP FR3 can disable this feature via the CMC

Page 15: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

15

Printer Autocreation: Server SideSession Initialization

AutocreatedPrinters Allowed?

Approved?OR

Mapped?

Driver Match inRegistry?

Silent Install?

OrganizedPrinter Data

Printer AlreadyExist?

Build PrintQueue

AdditionalPrinters?

End Process

YES

NO

NO

NO

NO

YES

YES

YES

NO

YES

YES

NO

• FR2 – A driver can only be

mapped OR restricted.

• FR3– A print driver can be

restricted AND Mapped

– Silent install can be disabled.

Page 16: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

16

Printer Autocreation: Server Side

• Mapping files– Wtsuprn.inf is read into IMA only during the MF XP install.

• Qprinter utility from the MetaFrame CD can be used to import WTSUPRN entries into the CMC post install.

• Qprinter /imprmapping MappingFileName– Wtsprnt.inf is rewritten not appended as changes are

replicated.• Driver entries in the registry

– HKLM\System\CCS\Control\Print\Environments\Windows NT X86\

– ..\Version-2 specifies Windows NT 4 drivers– ...\Version-3 specifies Windows 2000 drivers

• Silent install– NTprint.inf contains the file names required to install the

win2k native drivers.– Can be modified by 3rd party vendors so their drivers appear

in the pull down list during install or to update the native OS drivers.

• Mapping files– Wtsuprn.inf is read into IMA only during the MF XP install.

• Qprinter utility from the MetaFrame CD can be used to import WTSUPRN entries into the CMC post install.

• Qprinter /imprmapping MappingFileName– Wtsprnt.inf is rewritten not appended as changes are

replicated.• Driver entries in the registry

– HKLM\System\CCS\Control\Print\Environments\Windows NT X86\

– ..\Version-2 specifies Windows NT 4 drivers– ...\Version-3 specifies Windows 2000 drivers

• Silent install– NTprint.inf contains the file names required to install the

win2k native drivers.– Can be modified by 3rd party vendors so their drivers appear

in the pull down list during install or to update the native OS drivers.

Page 17: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

17

Printer Autocreation: Server Side•With FR3 You can disable the silent install process

•Allows the administrator to control the drivers used.

Page 18: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

18

Printer Autocreation: Locally Defined• Metaframe FR2 • Locally Defined Auto-Created Printer:\\PrintServer\

Printer1• Does not utilize the ICA virtual channel

server

server

Domain: Alpha

Metaframe XP FR2 Server

\\PrintServer

printQueue

\\PrintServer\Printer1

ICA Session

Print Job via SMB

Page 19: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

19

Printer Autocreation: Locally DefinedPrinter Autocreation: Locally Defined

server

server

Domain: Alpha Domain: Bravo

\\PrintServer

printQueue

\\PrintServer\Printer1

ICA Session

Metaframe XP FR2 Server

•Metaframe FR2

•Locally Defined Auto-Created Printer:\\PrintServer\Printer1

•Utilizes the ICA virtual channel

•Presentation server is not in the same domain as the print server

Page 20: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

20

Printer Autocreation: Locally DefinedPrinter Autocreation: Locally Defined

server

server

Domain: Bravo

\\PrintServerprintQueue

\\PrintServer\Printer1

ICA Session

Metaframe XP FR2 Server

•Metaframe FR2 with XE102W081

•Locally Defined Auto-Created Printer:\\PrintServer\Printer1

•Utilizes the ICA virtual channel

•HKLM\SYS\CCS\Control\Citrix\ClientPrinterAutocreate

•fCreateNetworkPrinter 1 (0 for default FR2 behavior)

Page 21: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

21

Printer Autocreation: Locally Defined•With FR3 The Citrix admin has the flexibility previously available only with registry changes.

Page 22: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

22

Printer Autocreation• Can LPT port redirection be disabled but the

users still auto-create their printers???• Can USB printers be autocreated???

Page 23: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

23

Imported Print Servers

SD

•\\Printserver\Lexmark•\\Printserver\HP4000

•Printer Info

•Data Collector

•Print server

• Data Store

-LHC is updated

SD

SD

ESC

DLT

PROLIANT 8000

Page 24: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

24

Imported Print Servers• CTXTrace 5.7

– Profiling captures the IMA communication• Data store• Dynamic store• Local host cache

Page 25: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

25

Imported Print Servers

• Print server name

• Printer devMode

• Printer share name

• User list

Page 26: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

26

Imported Print Servers• User’s profile server-side

Page 27: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

27

Imported Print Servers• Auto-connected Printers

– Do not use the ICA channel– Use MS SMB printing– The print job does not spool on the Metaframe

server– The printers do not have associated registry

keys in HKLM only HKCU– Print jobs might be slower to an autoconnected

printer if the print server is over a WAN link from the Metaframe server.

– The print jobs cannot be throttled and do not use the ICA compression

Page 28: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

28

Windows CE •Limited user interface

•Locally attached printer information is retained in the client’s registry

•Printer information specified via the CMC and retained in the DS

•Windows based printing

•LPT port redirection

Page 29: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

29

Windows CE• Printcfg.exe

– User required to select print driver and client port– Adds registry entry to the user’s profile

• \HKCU\Software\Citrix\AutocreatedClient Printer\Clientname

• Citrix Management Console– No end user action required– 2nd login required to complete the process– Admin specifies the printer information per terminal

name• Printer name• Driver• Client side Port

Page 30: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

30

Windows CE

Page 31: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

31

Windows CE• Deleting the CE client printers

– Sets the status from “downloaded” to “deleting”– Requires the client to log in again to complete the action.– Dependant upon the client name

• What if the client name is changed???– The printer will remain as “deleting”.– Does not affect the performance of the server.

• How do you clear the “deleting” printers??– The same client name needs to login to complete the

delete process

Page 32: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

32

Universal Print Driver(UPD)“People can have the Model T in any

colour--so long as it's black.” Henry

Ford

•Similar to the first version of the Universal Print Driver….Any color as long as its black.

Page 33: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

33

Universal Printdriver (UPD)• Introduced with FR2

– 300dpi– Monochrome– Based on the HP LaserJet II driver– Uses PCL4 format

– Requires Win32 ICA client 6.20 or higher • Updated with FR3

– 600dpi– Color– Based on the HP LaserJet 4500– Uses PCL5c format– Requires ICA client 7.00 or higher

• Added support for Linux and Solaris– Uses entries from the \etc\printcap or lpstat response– Uses the Post Script version of the HP 4500 driver

• Introduced with FR2– 300dpi– Monochrome– Based on the HP LaserJet II driver– Uses PCL4 format

– Requires Win32 ICA client 6.20 or higher • Updated with FR3

– 600dpi– Color– Based on the HP LaserJet 4500– Uses PCL5c format– Requires ICA client 7.00 or higher

• Added support for Linux and Solaris– Uses entries from the \etc\printcap or lpstat response– Uses the Post Script version of the HP 4500 driver

Page 34: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

34

Universal Printdriver(UPD)

UPD Print Driver

Client side “Rasterizer”

Client side print spooler

•Print driver formats the data from the application.

•Formatted document sent to the client in PCL4/PCL5c or PS format.

•The graphic is presented to the client spooler.

•The picture is formatted and spooled to the print device per the

local print driver.

•Server

•Client

Page 35: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

35

Universal Printdriver(UPD)• Registry entries

– HKLM\SW\Citrix\UniversalPrintDrivers\• Driver List: PCL4,PCL5c,PS• \PCL4

– HP LaserJet Series II• \PCL5c

– HP Color Laser Jet 4500• \PS (For Unix / Linux Clients)

– HP Color LaserJet PS– HKLM\Sys\CCS\Control\Print\Environments\Drivers

• \Version-3– HP LaserJet Series II– HP Color LaserJet 4500– HP Color LaserJet PS

Page 36: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

36

Universal Printdriver(UPD)• Can the Universal Print driver be used when

printing directly to the print server???• Can UPD II be disabled so only UPD I will be

used without changing the feature release level???

Page 37: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

37

Follow the Print Job• Graphics Device Interface

– GDI ~ Windows based printing– The user selects the document output for either the video card to

display or for the print driver to render.– The print job is formatted and converted by the print driver to be

“displayed” to the print device.– The resultant .SHD and .SPL files are sent to

\winnt\system32\spool\printers folder.– The .SHD and .SPL files are sent to the print monitor determined by

the user when the print job was initiated.

002.shd/002.splPrint Drv Print monitorWord.doc

Print Spooler

Page 38: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

38

Follow the Print Job: Server Side

•GDI printing a.k.a. “Windows Printing”

•The application formats the print job using the driver’s specifications

•Utilizes the server’s spooler system

Application

GDI

Spoolsv.exe

Print Driver

Winspool.drv

Page 39: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

39

Spoolss.dll ( Router )

Cdmprov.dllLocalspl.dllWin32spl.dll Network Print

Provider

Follow the Print Job : Server Side•LPT port redirection print jobs

•Windows Based printing via the spooler

•Network printing

•Autoconnected printers

Page 40: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

40

Follow the Print Job : Server Side

•To the ICA client

Cdmprov.dllLocalspl.dllWin32spl.dll Network Print

Provider

SpoolFile

Print Job Creation API

Job Scheduling API

Job Scheduler Thread

Language Monitor

Network Drivers

Cdm.sys

Cpmmon.dll (Citrix Port Monitor)Local Port Monitor

Kernel-Mode Port Driver Stack

Local Printer Port(LPT / TCP)

Print Server

Page 41: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

41

Follow the Print Job: Client Side

•From the server

•The ICA client engine hands off to

the local client

spooler

•The print job works up through the ica client

Spoolss.dll ( Router )

Localspl.dll Win32spl.dll Network PrintProvider

SpoolFile

Print Job Creation API

Job Scheduling API

Job Scheduler Thread

Language Monitor

Local Port Monitor

Kernel-Mode Port Driver Stack

Local Printer Port(LPT / TCP)

Print Server

Wfica32.exe

PCL4Rast.dll

VDCPM30N.dll

VDSPL.lib

Network Driver

Page 42: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

42

Utilities

•Print Migrator3

•SMC Console

•Project Compatibility

Page 43: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

43

Utilities: Print Migrator3• Print Migrator3 from Microsoft

– Allows all the print driver info to be saved to a cab file

– Allows a print server to be replicated in a test environment

– Allows Citrix Support to replicate the customer’s printing environment down to the exact files

Page 44: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

44

Utilities: Print Migrator

Page 45: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

45

Utilities: SMC Console• SMC console from Citrix CDN

– Allows a live session’s bandwidth to be temporarily limited to test the impact of BW restrictions for Printing.

– Provides real time insight on the Virtual channel usage.

• Citrix.com/cdn– Citrix Server SDK ver 2.3 is the latest as of 6/11/2003 and

includes the SMC components and supports FR3. No sessions are returned in the pull down list if the wrong version is used.

Page 46: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

46

Utilities: SMC Console

Page 47: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

47

Utilities:Project Compatibility• Project Compatibility

http://www.dabcc.com• Not developed by Citrix• Written using the SDKs• Pulls event viewer info from the servers• Dynamically sets print mappings• Reads and Writes to the data store

Page 48: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

48

Utilities:Project Compatibility

Page 49: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

49

Questions:• Can LPT port redirection be disabled but the client still

autocreate printers???– YES. LPT port redirection utilizes the CTXLPT1 or CTXLPT2 virtual

channels but windows printing uses the CTXCPM channel.

• Can USB printers be autocreated???– YES. Although USB redirection is not supported the printer attached to

the USB port can be autocreated as long as the client OS returns the printer info as a printer port.

• Can the Universal Print Driver be used when printing directly to the print server???

– NO. The client side PCL4RAST.dll is required to accept the print job to then hand it off to the local client spooler.

• Can UPD II be disabled so only UPD I will be used???– Yes. Removing PCL5c from the REG_SZ value located at HKLM\SW\

Citrix\UniversalPrintDrivers>>>Driver List. By default PCL4,PCL5c,PS. CTX089874

• Can LPT port redirection be disabled but the client still autocreate printers???

– YES. LPT port redirection utilizes the CTXLPT1 or CTXLPT2 virtual channels but windows printing uses the CTXCPM channel.

• Can USB printers be autocreated???– YES. Although USB redirection is not supported the printer attached to

the USB port can be autocreated as long as the client OS returns the printer info as a printer port.

• Can the Universal Print Driver be used when printing directly to the print server???

– NO. The client side PCL4RAST.dll is required to accept the print job to then hand it off to the local client spooler.

• Can UPD II be disabled so only UPD I will be used???– Yes. Removing PCL5c from the REG_SZ value located at HKLM\SW\

Citrix\UniversalPrintDrivers>>>Driver List. By default PCL4,PCL5c,PS. CTX089874

Page 50: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

•Questions???

Page 51: Printing in the MetaFrame Environment Jim West Global Escalation Team CSEIT Event 2003 Jim West Global Escalation Team CSEIT Event 2003.

Thank You!

Jim WestGlobal Escalation TeamCSEIT Event 2003

Jim WestGlobal Escalation TeamCSEIT Event 2003