|Publication number||US5872995 A|
|Application number||US 08/878,687|
|Publication date||Feb 16, 1999|
|Filing date||Jun 19, 1997|
|Priority date||Jul 26, 1995|
|Publication number||08878687, 878687, US 5872995 A, US 5872995A, US-A-5872995, US5872995 A, US5872995A|
|Original Assignee||Compaq Computer Corporation|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (12), Non-Patent Citations (2), Referenced by (14), Classifications (7), Legal Events (5)|
|External Links: USPTO, USPTO Assignment, Espacenet|
This application is a continuation of U.S. application Ser. No. 08/507,808, filed Jul. 26, 1995, now abandoned.
This invention relates to keyboard scancode processing.
A computer operator may wish to control her computer's audio functions, e.g., volume, bass, treble or spatializer. While analog dials are sometimes available for audio control, control via hotkeys is more flexible and cheaper to manufacture. Controlling audio functions through keyboard hotkeys is relatively simple. A "hotkey" comprises a control, alt or shift key ("function key") and another key, which, when depressed simultaneously, trigger execution of a previously-defined routine in, e.g., a Terminate & Stay Resident (TSR) Program for controlling the appropriate audio function. Examples of hotkeys could include <alt>-v for volume control, and <cntrl>-<alt>-b for bass control.
The details of how audio functions are controlled by hotkeys is more complex. When the operator presses a key, the keyboard generates a keyboard scancode. In response to the keyboard scancode, the keyboard controller connected to the keyboard raises a keyboard interrupt (IRQ) line connected to one of two Programmable Interrupt Controllers (PICs). By default, under normal operation, this keyboard interrupt line is the second line (IRQ 1) attached to the first PIC. The PIC, upon realizing that IRQ 1 is active, is programmed to generate an interrupt vector number--by default, interrupt vector number 9hex that corresponds to IRQ 1. This interrupt vector number is then transferred to the main CPU. When the CPU receives the interrupt vector number, it looks up the interrupt vector address corresponding to the interrupt vector number and calls the interrupt service routine (ISR) pointed to by the interrupt vector address. For the computer's audio functions, the interrupt service routine would check to see whether one of the computer's hotkeys had been pressed, and if so, would perform one of the computer's audio functions.
With certain DOS applications, however, particularly including video games, when the game is loaded into the computer, the program in essence commandeers the input from the keyboard for its own purposes and prevents the operator from controlling the audio by preventing the audio control routines from ever seeing the keyboard hotkey commands. To do this, the new program replaces the keyboard interrupt vector, stored by the ROM BIOS or DOS TSR program when the computer was initially booted, with a vector pointing to the new program's own interrupt service routine (ISR). Because there is no way to guarantee that the new program's ISR will include, as part of its routine, execution of the old ISR, the old ISR that would otherwise have controlled the computer audio is effectively disabled.
In general, in one aspect, the invention features processing a scancode signal, by the following steps. In response to the scancode signal, and before capture of the scancode signal by a first program that would otherwise interfere with use of the scancode signal by a second program, causing execution of the second program. After execution of the second program, interaction with the first program is permitted.
Implementations of the invention may include one or more of the following features. The scancode signal may be a hotkey signal generated by a hotkey. The execution of the second program may be caused by a keyboard interrupt directed to a non-default interrupt line. The keyboard interrupt may trigger an interrupt service routine. The execution of the second program may be caused by an interrupt service routine which reads the scancode signal, determines whether a keyboard hotkey was activated, and executes a control routine associated with the keyboard hotkey. The second program may be one that controls an audio function of a computer. The step of permitting the interaction with the first program may be caused by triggering a second interrupt, e.g., by simulating activation of a standard interrupt line corresponding to the scancode signal. The first program may be a game application.
The execution of the second program may be caused by a system management interrupt, triggered by a keyboard interrupt corresponding to the scancode signal. The system management interrupt may read the scancode signal, determine whether a keyboard hotkey was activated, and execute a control routine associated with the keyboard hotkey. The interaction with the first program is caused by a system management interrupt. Permitting interaction with the first program may be caused by duplicating the scancode signal, e.g., by duplicating a keyboard interrupt corresponding to the scancode signal. The execution of the second program may be caused by directing a computer to commandeer subsequent scancode signals to the exclusion of the first program. Permitting the interaction with the first program may be caused by directing a computer to cease commandeering subsequent scancode signals to the exclusion of the first program. The computer may treat the subsequent scancode signals as hotkeys.
In general, in another aspect, the invention features apparatus for processing a keyboard scancode signal that occurs during interaction with a first program. The apparatus includes means for intercepting the scancode signal; and means for triggering a non-default interrupt, corresponding to the scancode signal, to enable interaction with a second program.
Among the advantages of the invention may be one or more of the following. The operator may control the audio while using a program that would otherwise prevent the audio functions from being controlled, without hampering the performance of the commandeering program. The scheme prevents the ROM BIOS or DOS TSR programs from relinquishing complete control of the keyboard. Thus, audio functions may be controlled through hotkey operations for all software applications.
Other advantages and features will become apparent from what follows.
FIG. 1 is a block diagram of hardware for processing keyboard scancode signals.
FIG. 2 is a chart of the flow of a keyboard scancode processing routine.
FIG. 3 is a chart of the flow of an interrupt service routine.
FIG. 4 is a block diagram of alternate hardware for prosing keyboard scancode signals.
FIG. 5 is a block diagram of SMI handler functions.
FIG. 6 is a chart of the flow of an alternative keyboard scancode processing routine.
As seen in FIGS. 1, 2, and 3, keyboard 2 with, e.g., key 1 is connected to an Intel 8042 keyboard controller microprocessor 3. The keyboard controller 3 and its ROM program 4 are imbedded in an input/output (I/O) controlling Application-Specific Integrated Circuit (ASIC) 5. The keyboard controller 3 is connected to an Intel 8259 Programmable Interrupt Controller (PIC) 6, which is imbedded in a processor chipset ASIC 7, by multiple interrupt (IRQ) lines 8a-8n, one of which, 8i, may be chosen for use as a keyboard IRQ. The PIC is connected to an Intel 80×86-compatible CPU 9, by both address 10 and data 88 buses and an interrupt line 11.
When a computer operator presses key 1 on the keyboard 2, the keyboard 2 generates a keyboard scancode 12 corresponding to the pressed key 1. The keyboard controller 3 has two I/O mapped read/write ports: a 60hex port 25 where the scancode is stored upon receipt and a 64hex status port 26 which indicates whether the scancode data are available for reading. These two I/O mapped ports are connected to the CPU's address 10 and data 88 buses. Upon receiving the keyboard scancode 12, the keyboard controller 3 raises a keyboard interrupt (IRQ) on line 8i. Instead of defaulting to the second keyboard interrupt line (IRQ 1), however, the I/O controlling ASIC 5 is programmed to choose an alternate keyboard IRQ line (IRQ 9), 8i, which is then activated by the keyboard controller.
When the PIC 6 detects 27 the activated alternate IRQ line 8i, the PIC 6 searches 28 its programmable table 13 for an interrupt vector number 14 associated with the activated alternate IRQ line 8i. The PIC 6 then places 29 the interrupt vector number 14 onto the address bus 10 connecting the PIC 6 to the CPU 9. The PIC 6, connected to the activated IRQ 8i, then activates 30b the interrupt line 11 connected to the CPU 9, which informs the CPU that an interrupt vector number 14 is on the address bus 11. The CPU 9 has a RAM 15 which contains user-programmable interrupt vector addresses 16a-16n, each of which is associated with an interrupt vector number. Each interrupt vector address points the CPU towards a corresponding interrupt service routine (ISR) 17a-17n. If the CPU 9 interrupts are enabled 31 when the CPU's interrupt line 11 is activated 30b by the PIC 6, the CPU saves its addresses and flags (saves state) 32, reads 33 the interrupt vector number 14 from the address bus 10, and uses the interrupt vector number 14 to look up 34 the corresponding interrupt vector address 16i in its RAM 15.
The interrupt vector address 16i corresponding to the interrupt vector number 14 associated with the alternate IRQ line 8i points 35 the CPU 9 to the address 16i in RAM where the CPU is to begin executing 36 the corresponding ISR 17i. When executed, the ISR 17i first checks the keyboard controller's status port 26 to determine 37 whether the keyboard scancode data are available for reading. If so, the ISR reads 18 the keyboard scancode 12 from the keyboard controller's 60hex I/O port 25. Once the scancode 12 has been read off the 60hex I/O port 25, the I/O port is free to accept another keyboard scancode from another keystroke. If the data are not available for reading, the ISR simulates activation 21 of the standard IRQ (IRQ 1) signal by jumping to the interrupt vector associated with IRQ 1.
The ISR 17i then determines 19 whether the operator pressed a mode key (shift, control or alt). If so, the ISR 17i updates a mode variable 20 to indicate that a mode key was pressed. If a mode key was not pressed, or after the mode variable has been updated 20, the ISR 17i then determines 22 whether the operator pressed a hotkey by comparing the current status of the mode variable together with the scancode 12 read from the keyboard controller's 60hex port 25 to a table of values 38 stored in the Terminate & Stay Resident (TSR) Program 39. If a hotkey was pressed, the ISR is directed 23 to execute the routine 24 associated with that hotkey. Once the hotkey routine has been executed 24, the ISR terminates and returns control to the application program 69. By doing so, the final scancode, corresponding to the final keystroke of the hotkey, is not transmitted to the application program 69.
If a hotkey was not pressed, then the ISR simulates activation 21 of the standard IRQ 1 in the same manner as previously described. The ISR thereby enables the scancode for the mode key to be passed to the application program 69 because the program does not yet know whether the pending hotkey command ultimately will concern an audio function or an application program function. An example of a TSR that controls the audio functions of a computer and handles the interrupts generated by the first embodiment appears in Appendix A to this application.
Since a mode key triggers a scancode (and therefore an interrupt) during both the make and break phases of a keystroke, the ISR can be programmed to trigger off either the make or break phases of the keystroke. Also, the ISR may be programmed to prevent transmission of the scancodes, which in combination do not constitute a hotkey, to the application program through simulation of IRQ 1, until the ISR finally determines whether a hotkey in the TSR table has been pressed. Once it has so determined, the ISR need not transmit any of the keystrokes constituting the hotkey to the application program because they have already been used to control an audio function.
Other embodiments are within the scope of the following claims. For example, instead of having the keyboard controller generate a signal on an alternate IRQ line 8i, a processor chipset may be altered, either through hardware modification or programming, to trigger a system management interrupt (SMI) when a particular IRQ line is activated so that the SMI performs the same function as the ISR in the first embodiment.
As shown in FIGS. 4 and 5, a processor chipset 40 has one or more external power management interrupt (EPMI) pins 41a-41n. To enable the processor chipset 40 to generate an SMI when an IRQ line 8j is activated, a parallel signal 42 is run from the IRQ line 8j to one EPMI pin 41i, so that the EPMI pin 41i is activated when the IRQ line 8j is activated. The EPMI pin on the processor chipset is connected to an SMI pin 43 on the CPU 9. When the EPMI pin 41i is activated, the SMI pin 43 on the CPU 9 is also activated. Once the SMI pin 43 is activated, an SMI is triggered and the SMI handler 44 handles the SMI generated by the keyboard IRQ 8j.
The SMI handler 44 has a flag 45 indicating the source of the IRQ. This flag has two settings, the first indicating that the next keyboard IRQ will be an original keyboard IRQ generated by an actual keystroke, and the second indicating that the next keyboard IRQ will be a duplicate IRQ.
For the SMI handler to be ready to handle an SMI generated by an IRQ, it needs to be initialized when the computer is booted. The additional initialization code has two main functions. First, it sets the flag 45 to indicate that the next keyboard IRQ will be an original keyboard IRQ generated by an actual keystroke, and second, it enables, through processor chipset modification, the generation of an SMI when a keyboard interrupt occurs. At least one currently available processor chipset, VLSI 483FC6, may be programmed to generate an SMI when a particular IRQ occurs. In processor chipsets where such programming is not possible, the parallel signal 42 from the IRQ 8i to an EPMI pin 41i connected to the SMI pin 43 performs the same function.
When the operator presses a key 1, the keyboard 2 generates a keyboard scancode 12 corresponding to the pressed key 1. Upon receiving the scancode 12, the keyboard controller 3 stores the scancode at its 60hex port 25, and raises a keyboard interrupt (IRQ) line 8i. Activation of the IRQ line also triggers the EPMI pin 41i on the processor chipset 40, which causes an SMI status flag 47 to indicate an SMI. Activation of the EPMI pin 41i in turn activates the SMI pin 43 on the CPU 9, which triggers the onset of an SMI.
For the SMI handler 44 to be able to control the computer's audio functions, additional functions are added to the existing SMI handler ("additional SMI routine") as follows.
The processor chipset 40 maintains a register 46 which indicates whether an SMI was caused by an IRQ. Once the SMI is triggered, the SMI handler 44 first determines 48 whether an IRQ caused the SMI by checking the status of register 46. If so, the SMI status flag 47 on the processor chipset is cleared 50 to allow future SMIs, because additional SMIs cannot be processed until the current SMI is cleared. If the SMI was not caused by an IRQ, the SMI handler exits 49 the additional SMI routine and resumes normal SMI procedure. Once the SMI status has been cleared 50, the SMI handler determines 51 whether keyboard data are available for reading by checking the 64hex I/O port 25 on the keyboard controller 3. If the keyboard data are not available for reading, the SMI handler exits 49 the additional SMI routine and resumes normal SMI procedure.
After determining that the data are available for reading, the SMI then checks 52 flag 45 to determine whether the IRQ 8j is either an original keyboard IRQ generated by a keystroke, or a duplicate IRQ generated by a keyboard controller resend character command. If a duplicate IRQ, the flag 45 is reset 53, indicating that the next IRQ will be generated by a keystroke, and the SMI handler exits 49 the SMI. If an original keyboard IRQ, the SMI then clears 54 the current keyboard IRQ by resetting the IRQ flag 89 on the processor chipset 40, because a duplicate IRQ will later be generated by the SMI for use in the application programs that would otherwise prevent operation of the audio functions.
The additional SMI routine then performs the same functions as the ISR in the first embodiment. The SMI reads 55 the keyboard scancode 12 by accessing the keyboard controller's 60hex I/O mapped port 25. The SMI then determines 56 whether the operator pressed a shift, control or alt key (mode key). If so, the SMI updates a mode variable 57 to indicate that a mode key was pressed. If a mode key was not pressed, or after the mode variable has been updated 57, the SMI then determines 58 whether the operator pressed a hotkey by comparing the current status of the mode variable together with the scancode 12 read from the keyboard controller's 60hex port 25 to a table of values 59 stored in the Terminate & Stay Resident (TSR) Program 60. If a hotkey was pressed, the SMI is directed 61 to execute 62 the routine 24 associated with that hotkey and then immediately exit 90 the SMI handler so that a duplicate IRQ corresponding to the final keystroke is not ordered to be sent by the keyboard controller for use by the application program.
If a hotkey was not pressed, the SMI handler disables 63 all SMIs triggered by IRQs by setting a flag 64 on the processor chipset 40 so that when the keyboard controller 3 is told to resend the scancode, another SMI is not triggered by the accompanying IRQ. The SMI handler then determines 65 whether the I/O mapped port 25 is available for writing by checking the I/O status port 26. If the controller returns a status indicating that port 25 is available, the keyboard controller is commanded 66 to retransmit the saved scancode by using the Intel 8042 resend command. The SMI handler 67 then re-enables SMIs triggered by IRQs by resetting flag 64 on the processor chipset 40. Then, the SMI sets 68 flag 45 indicating that the next keyboard IRQ will be a duplicate IRQ, so that when the SMI triggered by the duplicate IRQ determines the cause of the SMI, it will recognize it as duplicative and abort. Finally, the SMI handler terminates 90 the additional SMI routine. Because the duplicate IRQ is not commandeered by an SMI other than to check whether the SMI was in fact caused by the duplicate IRQ, the application program receives the duplicate IRQ without knowledge that the IRQ has been duplicated.
The previous embodiments require that the hotkeys used to control the audio functions be unique from any keystrokes used to control the application program. If a hotkey could be used to control both the computer's audio functions and a function in the application program, a hotkey command intended by the operator to control an audio function could also adversely affect the application if passed to the program. Conversely, a hotkey command intended to control the application program would be diverted to control the audio functions and would never get to the application. To meet the possible need for multiple uses for the same hotkey command, the following scheme assures that no hotkey combination is inaccessible while multiple environment hotkey support is enabled.
First, two infrequently-used keys are selected, e.g., F11 and F12. Whether a key is infrequently-used will depend on the applications to be driven by the keyboard. These keys are used respectively to enable and disable "hotkey mode." It is also possible to use a single key both to enable and disable the hotkey mode. For F11 and F12 to continue to be able to control other functions while in hotkey mode, the F11 and F12 scancodes can be generated indirectly, while in hotkey mode, by pressing F1 and F2, respectively. Unless hotkey mode is enabled, all other key combinations are accessible by the application program. Hotkey mode does not pause the active application in any way, but instead simply switches the keyboard away from the active application, permitting only the ROM BIOS has access to keystrokes.
As described in the second embodiment, when a key is pressed, an SMI is generated. The SMI then proceeds through the same procedure as described for FIG. 5, until it gets to the point where it clears the current keyboard IRQ 54. Referring to FIG. 6, once the IRQ is cleared 54, the SMI determines 70 whether the computer is in hotkey mode by checking a hotkey mode flag 87 stored in the RAM 15. The flag 87 is initialized to indicate no hotkey mode. If the hotkey mode flag 87 indicates that there is no hotkey mode, the SMI reads 71 the scancode and then determines 72 whether F11 was pressed, to determine whether to enter hotkey mode. If F11 was not pressed, then the SMI disables 63 the SMI triggered by the IRQ and continues as depicted in FIG. 5. If, however, F11 was pressed, the computer enters hotkey mode by setting 73 the hotkey mode flag 87 in RAM 15, before proceeding to disable 63 the SMI.
If the hotkey mode flag 87 indicates that the computer is in hotkey mode, the SMI then reads 74 the scancode and determines 76 whether F12 was pressed. If so, the SMI resets 77 the hotkey mode flag 87 and exits 78 the SMI handler. If F12 was not pressed, then the SMI determines 79 whether F1 was pressed. If so, the SMI executes 81 the hotkey routine for F11, resets 77 the hotkey mode flag 87 and exits the SMI handler 78. If F1 was not pressed, the SMI then determines 82 whether F2 was pressed. If so, the SMI executes 84 the hotkey routine for F12, resets 77 the hotkey mode flag 87 and exits the SMI handler 78. If F2 was not pressed, the SMI then determines 56 whether a mode key (cntrl, alt or shift) was pressed. If so, the mode variable is updated 57. If not, or after updating 57 the mode variable, the SMI determines 85 whether a hotkey was pressed. If so, the SMI is directed 86 to execute the hotkey routine corresponding to the pressed hotkey. After execution, or if a hotkey was not pressed, the SMI handler is exited.
In addition to enabling control of a computer's audio functions, the invention also enables control of other functions, such as CDROM-track selection; TV tuner-channel selection; keyboard macros; power management; security; en/disable data logging (keyboard input, printer output, serial I/O, display output, network I/O); en/disable status logging (hard disk, floppy disk, network errors); display scrollback; debugger; calculator; clock; en/disable print spooler; enhanced print screen; speakerphone used as dictaphone; runtime diagnostics; hibernation in which current state is stored in a disk file; lockup recovery; and on-line dictionary.
Other advantages and features will become apparent from the following descriptions and from the claims. ##SPC1##
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US4517656 *||May 11, 1981||May 14, 1985||Texas Instruments Incorporated||Programmable game with virtual CPU's sharing ALU and memory for simultaneous execution of independent game inputs|
|US4710889 *||Aug 8, 1986||Dec 1, 1987||Cain Encoder Co.||Angular position detector|
|US5056057 *||May 3, 1989||Oct 8, 1991||Compaq Computer Corporation||Keyboard interface for use in computers incorporating terminate-and-stay-resident programs|
|US5121472 *||May 31, 1989||Jun 9, 1992||Polytel Computer Products Corporation||Method for replacing keyboard data using single step process mode|
|US5333273 *||Sep 3, 1992||Jul 26, 1994||Ast Research, Inc.||Protected hot key function for microprocessor-based computer system|
|US5371871 *||Sep 28, 1992||Dec 6, 1994||Helix Software Company, Inc.||System for swapping in and out of system memory TSR programs by trapping interrupt calls for TSR and simulating system interrupt|
|US5394519 *||Jan 3, 1994||Feb 28, 1995||International Business Machines Corp.||Data processing apparatus for high resolution display in multiple virtual dos applications|
|US5440747 *||Sep 27, 1993||Aug 8, 1995||Hitachi America, Ltd.||Data processor with control logic for storing operation mode status and associated method|
|US5525978 *||Feb 28, 1994||Jun 11, 1996||Hewlett-Packard Company||Graphical key manager for computer|
|US5537544 *||Aug 16, 1993||Jul 16, 1996||Kabushiki Kaisha Toshiba||Portable computer system having password control means for holding one or more passwords such that the passwords are unreadable by direct access from a main processor|
|US5551044 *||Dec 1, 1994||Aug 27, 1996||Intel Corporation||Method and apparatus for interrupt/SMI# ordering|
|US5613135 *||Aug 16, 1993||Mar 18, 1997||Kabushiki Kaisha Toshiba||Portable computer having dedicated register group and peripheral controller bus between system bus and peripheral controller|
|1||*||Computer Dictionary, Microsoft Press, 2nd. ed., 1994, pp. 347 348.|
|2||Computer Dictionary, Microsoft Press, 2nd. ed., 1994, pp. 347-348.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US6122701 *||Dec 11, 1997||Sep 19, 2000||Compaq Computer Corporation||Device volume control in multimode computer systems|
|US6615288 *||Dec 27, 1999||Sep 2, 2003||Dell Products L.P.||Generating system management interrupt in response to usb controller signal and processing interrupt routine in upper most level of system memory|
|US6678830 *||Jul 2, 1999||Jan 13, 2004||Hewlett-Packard Development Company, L.P.||Method and apparatus for an ACPI compliant keyboard sleep key|
|US6772236 *||Apr 17, 2003||Aug 3, 2004||Microsoft Corporation||System for conveying an attribute of a device not explicitly recognized by a PS/2 communication protocol and without requiring modification of the protocol|
|US6874038 *||Jun 9, 2004||Mar 29, 2005||Microsoft Corporation||Attribute reporting over a PS/2 protocol|
|US7673161||Mar 2, 2010||Lenovo (Singapore) Pte. Ltd.||Apparatus, system, and method for selecting a waking process|
|US7757185 *||Jan 6, 2006||Jul 13, 2010||Apple Inc.||Enabling and disabling hotkeys|
|US7869890 *||Jan 11, 2011||Honeywell International Inc.||Keyboards having multiple groups of keys in the management of a process control plant|
|US20040249988 *||Jun 9, 2004||Dec 9, 2004||Microsoft Corporation||Attribute reporting over a ps/2 protocol|
|US20070162875 *||Jan 6, 2006||Jul 12, 2007||Paquette Michael J||Enabling and disabling hotkeys|
|US20070234092 *||Mar 28, 2006||Oct 4, 2007||Freeman Joseph W||Apparatus, system, and method for selecting a waking process|
|US20080058968 *||Sep 6, 2006||Mar 6, 2008||Honeywell International Inc.||Keyboards Having Multiple Groups of Keys in the Management of a Process Control Plant|
|US20100287507 *||Nov 11, 2010||Michael James Paquette||Enabling and Disabling Hotkeys|
|US20130283380 *||Dec 22, 2011||Oct 24, 2013||Paul J. Thadikaran||User controllable platform-level trigger to set policy for protecting platform from malware|
|International Classification||G06F3/023, G06F13/24|
|Cooperative Classification||G06F13/24, G06F3/023|
|European Classification||G06F3/023, G06F13/24|
|Dec 31, 2001||AS||Assignment|
Owner name: COMPAQ INFORMATION TECHNOLOGIES GROUP, L.P., TEXAS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:COMPAQ COMPUTER CORPORATION;REEL/FRAME:012418/0222
Effective date: 20010620
|Jul 25, 2002||FPAY||Fee payment|
Year of fee payment: 4
|Jan 21, 2004||AS||Assignment|
Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS
Free format text: CHANGE OF NAME;ASSIGNOR:COMPAQ INFORMATION TECHNOLOGIES GROUP, LP;REEL/FRAME:015000/0305
Effective date: 20021001
|Aug 16, 2006||FPAY||Fee payment|
Year of fee payment: 8
|Aug 16, 2010||FPAY||Fee payment|
Year of fee payment: 12