F
F
-
-
16 Modular Mission Computer
16 Modular Mission Computer
Application Software
Application Software
Achieving Cross
Achieving Cross
-
-
Platform Compatibility with
Platform Compatibility with
Increased Productivity and Quality using the
Increased Productivity and Quality using the
OMG
OMG
’
’
s
s
Model Driven Architecture
Model Driven Architecture
Lauren E. Clark
Lauren E. Clark
Chief Engineer
Chief Engineer
F
F--16 Modular Mission Computer Software16 Modular Mission Computer Software Lockheed Martin Aeronautics Company
Lockheed Martin Aeronautics Company
Terry
Terry RuthruffRuthruff
Staff Specialist
Staff Specialist
Software Engineering Core
Software Engineering Core
Lockheed Martin Aeronautics Company
Lockheed Martin Aeronautics Company
Allan Kennedy
Allan Kennedy
President
President
Kennedy Carter Limited
Kennedy Carter Limited
Bary
Bary D. HoganD. Hogan Methodology Lead
Methodology Lead
F
F--16 Modular Mission Computer Software16 Modular Mission Computer Software Lockheed Martin Aeronautics Company
Agenda
Agenda
•
•
Basic Software Components
Basic Software Components
•
•
Cross
Cross
-
-
Platform Compatibility: The Goal
Platform Compatibility: The Goal
•
•
The eXecutable
The
eXecutable
MDA Approach:
MDA Approach:
−
−
eXecutable
eXecutable
UML Modeling
UML Modeling
−
−
Platform Specific Mapping (Design Tagging)
Platform Specific Mapping (Design Tagging)
−
−
Automatic Code Generation
Automatic Code Generation
•
Software
Basic Software Components
Basic Software Components
Hardware
Hardware
Software Execution
Platform
Application Software
Application Software Interface
Application Software:
● High-level software that is unique to
the application(s) for which the
embedded computer (i.e. subsystem) exists
● 80-90% of the total software (in terms
of long-term development cost)
Application Software:
● High-level software that is unique to
the application(s) for which the
embedded computer (i.e. subsystem) exists
● 80-90% of the total software (in terms
of long-term development cost)
Software Execution Platform:
● Low-level software, the purpose of
which is to allow the Application Software to run on the hardware
Software Execution Platform:
● Low-level software, the purpose of
which is to allow the Application Software to run on the hardware
Software Execution
Platform
Board Support Package / BIT
Software Execution Platform
Software Execution Platform
Hardware
Hardware
Application Software
Application Software Interface
Device Drivers Operating System Software Architecture
Software Execution Platform:
● Low-level software, the purpose of
which is to allow the Application Software to run on the hardware
Software Execution Platform:
● Low-level software, the purpose of
which is to allow the Application Software to run on the hardware
Software Execution
Platform
Board Support Package / BIT
Board Support Package / Built
Board Support Package / Built
-
-
In Test
In Test
Hardware
Hardware
Application Software
Application Software Interface
Device Drivers Operating System Software Architecture
Board Support Package:
● Lowest-level boot software / firmware
that allows all other software (including the Operating System) to be loaded into memory and begin executing
● Unique to the hardware; and usually
delivered with the hardware (located in some type of ROM)
Built-In Test (BIT):
● Low-level software that detects and
reports hardware errors
● Unique to the hardware; and usually
delivered with the hardware
Board Support Package:
● Lowest-level boot software / firmware
that allows all other software (including the Operating System) to be loaded into memory and begin executing
● Unique to the hardware; and usually
delivered with the hardware (located in some type of ROM)
Built-In Test (BIT):
● Low-level software that detects and
reports hardware errors
● Unique to the hardware; and usually
delivered with the hardware
Board Support Package / BIT
Software Execution
Platform
Operating SystemOperating System
Operating System
Hardware
Hardware
Application Software
Application Software Interface
Operating System:
● Low-level software that, once booted,
manages all other software (this
management involving such things as multitasking, memory sharing, I/O interrupt handling, error and status reporting, etc.)
● Unique to the hardware (i.e. it must at
least be ported to each new hardware platform); and sometimes delivered with the hardware
Operating System:
● Low-level software that, once booted,
manages all other software (this
management involving such things as multitasking, memory sharing, I/O interrupt handling, error and status reporting, etc.)
● Unique to the hardware (i.e. it must at
least be ported to each new hardware platform); and sometimes delivered with the hardware
Device Drivers
Software Architecture
Operating System
Operating System
Software Execution
Platform
Device Drivers Operating System
Device Drivers
Device Drivers
Hardware
Hardware
Application Software
Application Software Interface
Device Drivers:
● Low-level software that manages the
input from and output to the various external devices in support of the Application Software
● Unique to the hardware; but usually
not delivered with the hardware
Device Drivers:
● Low-level software that manages the
input from and output to the various external devices in support of the Application Software
● Unique to the hardware; but usually
not delivered with the hardware
Software Architecture
Board Support Package / BIT
Device Drivers
Software Execution
Platform
Device Drivers Operating System Software Architecture
Software Architecture
Software Architecture
Hardware
Hardware
Application Software
Application Software Interface
Software Architecture:
● Low-level software providing the
framework within which the Application Software executes
● Provides execution control, data /
message management, error handling, and various support services to the Application Software
● Assumes a particular Application
Software language
●Unique to the hardware; but, since it
must support all requirements levied by the Application Software, is not delivered with the hardware
Software Architecture:
● Low-level software providing the
framework within which the Application Software executes
● Provides execution control, data /
message management, error handling, and various support services to the Application Software
● Assumes a particular Application
Software language
●Unique to the hardware; but, since it
must support all requirements levied by the Application Software, is not delivered with the hardware
Board Support Package / BIT
Software Architecture
Application Software InterfaceApplication Software Interface
Application Software Interface
Software Execution
Platform
Device Drivers Operating System Software Architecture
Application Software Interface
Application Software Interface
Hardware
Hardware
Application Software
Application Software Interface:
● The boundary between the Application
Software and the Software Execution Platform
● The specified methods by which the
Application Software can make
requests and use the services of the Software Execution Platform and the Software Execution Platform can
provide its services to the Application Software
● This interface is specified by the
Software Execution Platform
Application Software Interface:
● The boundary between the Application
Software and the Software Execution Platform
● The specified methods by which the
Application Software can make
requests and use the services of the Software Execution Platform and the Software Execution Platform can
provide its services to the Application Software
● This interface is specified by the
Software Execution Platform
Hardware Platform #2
Hardware Platform #2
Application Software
Board Support Package / BIT Board Support Package / BIT Device Drivers
Device Drivers Operating SystemOperating System Software Architecture
Software Architecture
Application Software Interface
Hold Constant
Hardware
Hardware
Cross
Cross
-
-
Platform Compatibility: The Usual Approach
Platform Compatibility: The Usual Approach
Hardware Platform #1
Hardware Platform #1
Application Software
Application Software Interface
Device Drivers Operating System Software Architecture
Board Support Package / BIT
Maintain a constant Application Software Interface
Maintain a constant Application Software Interface
Hardware Platform
Hardware Platform
Cross
Cross
-
-
Platform Compatibility Issues
Platform Compatibility Issues
Application Software
Device Drivers
Device Drivers Operating SystemOperating System Software Architecture
Software Architecture
Application Software Interface
Board Support Package / BIT Board Support Package / BIT
Can a constant
Can a constant
Application Software Interface
Application Software Interface
always be maintained?
always be maintained?
Consider…
● What if the language or operating
system becomes obsolete?
● What if it is necessary to port even
a part of the Application Software to a legacy platform not having the resources to support the newer Software Execution Platforms?
Consider…
● What if the language or operating
system becomes obsolete?
● What if it is necessary to port even
a part of the Application Software to a legacy platform not having the resources to support the newer Software Execution Platforms?
Hardware Platform
Hardware Platform
Cross
Cross
-
-
Platform Compatibility Issues
Platform Compatibility Issues
Application Software
Device Drivers
Device Drivers Operating SystemOperating System Software Architecture
Software Architecture
Application Software Interface
Board Support Package / BIT Board Support Package / BIT
Even if it were possible, would one
Even if it were possible, would one
always want to maintain a constant
always want to maintain a constant
Application Software Interface?
Application Software Interface?
Consider…
● What if hardware or Software
Execution Platform changes could provide more Application Software capability, but only by means of changing the Application Software Interface?
Consider…
● What if hardware or Software
Execution Platform changes could provide more Application Software capability, but only by means of changing the Application Software Interface?
Hardware Platform
Hardware Platform
Cross
Cross
-
-
Platform Compatibility: The Goal
Platform Compatibility: The Goal
Application Software
Device Drivers
Device Drivers Operating SystemOperating System Software Architecture
Software Architecture
Application Software Interface
Board Support Package / BIT Board Support Package / BIT
The goal
The goal
should be to provide
should be to provide
cross
cross
-
-
platform compatibility
platform compatibility
of Application Software
of Application Software
despite
despite
any
any
Implementation,
Implementation,
or platform specific, changes
or platform specific, changes
:
:
that is, changes to
that is, changes to
the Hardware Platform,
the Hardware Platform,
the Software Execution Platform,
the Software Execution Platform,
or the
or the
Application Software Interface
eXecutable
eXecutable
MDA: Application Software Development
MDA: Application Software Development
eXecutable
eXecutable
UML
UML
Modeling
Modeling
Requirements
Requirements
Definition
Definition
Integration
Integration
& Test
& Test
Platform Specific
Platform Specific
Mapping
Mapping
(Design Tagging)
(Design Tagging)
Automatic
Code Generation
Application
Software
Interface
Definition
The
The
eXecutable
eXecutable
MDA Approach
eXecutable
eXecutable
UML Modeling: Domain Model
UML Modeling: Domain Model
Domain Model
(Package Diagram):
● The software application space
is partitioned into multiple platform independent models (or domains)
● Mappings between the
domains (bridges) are defined
Domain Model
(Package Diagram):
● The software application space
is partitioned into multiple platform independent models (or domains)
● Mappings between the
eXecutable
eXecutable
UML Modeling: Class Diagrams
UML Modeling: Class Diagrams
Class Diagrams:
● Within each platform
independent domain model, conceptual entities
are modeled first: classes,attributes, and associations are abstracted
● Behavior, though considered, is
not modeled explicitly in this view
Class Diagrams:
● Within each platform
independent domain model, conceptual entities
are modeled first: classes,attributes, and associations are abstracted
● Behavior, though considered, is
not modeled explicitly in this view
eXecutable
eXecutable
UML Modeling: State Charts
UML Modeling: State Charts
State Charts:
● Behavior is formalized during
state modeling
● Class lifecycles are modeled
using signal-driven state machines
● Class operations are defined
State Charts:
● Behavior is formalized during
state modeling
● Class lifecycles are modeled
using signal-driven state machines
eXecutable
eXecutable
UML Modeling: ASL
UML Modeling: ASL
Action Specification Language: ● State actions and class
operations are specified using a precise Action Specification Language (ASL)
● ASL is a higher order and much
simpler language than a typical high order language (e.g. C++)
● ASL deals with object oriented
concepts, not implementation concepts
● ASL conforms to the UML
Precise Action Semantics
Action Specification Language:
● State actions and class
operations are specified using a precise Action Specification Language (ASL)
● ASL is a higher order and much
simpler language than a typical high order language (e.g. C++)
● ASL deals with object oriented
concepts, not implementation concepts
● ASL conforms to the UML
eXecutable
eXecutable
UML Modeling: Simulation
UML Modeling: Simulation
Simulation:
● Since a precise Action
Specification Language is used, models are executable and
therefore may be simulated
● Simulation features resemble
those of a high order language debugger
● Models may be validated long
before they are implemented
Simulation:
● Since a precise Action
Specification Language is used, models are executable and
therefore may be simulated
● Simulation features resemble
those of a high order language debugger
● Models may be validated long
eXecutable
eXecutable
UML Modeling: Summary
UML Modeling: Summary
eXecutable
eXecutable
UML
UML
Modeling
Modeling
•
• xUML models are a complete representation xUML models are a complete representation of the application space (not a top
of the application space (not a top-level or -level or preliminary design)
preliminary design) •
• Modeling is performed using a Unified Modeling is performed using a Unified Modeling Language (UML) representation Modeling Language (UML) representation •
• Modeling makes use of a precise Action Modeling makes use of a precise Action Specification Language (ASL) and is Specification Language (ASL) and is therefore executable (providing early therefore executable (providing early validation of the models)
validation of the models) •
• Each xUML model is a Platform Independent Each xUML model is a Platform Independent Model (PIM), or completely implementation Model (PIM), or completely implementation- -independent (i.e. -independent of the
independent (i.e. independent of the
hardware platform, the software execution hardware platform, the software execution platform, and the application software
Design Tags ● Class Allocation ● Program Allocation ● Max Instance Count ● Event Rate ● Event Queue ● Throw Away ● Initialization ● Source Type ● Subtype of ● etc. Design Tags ● Class Allocation ● Program Allocation ● Max Instance Count ● Event Rate ● Event Queue ● Throw Away ● Initialization ● Source Type ● Subtype of ● etc.
Design Tagging: Specifying the PIM to PSM Mapping
Design Tagging: Specifying the PIM to PSM Mapping
Source Code Files
...
...
...
...
Automatic
Code Generator
xUML Models...
...
Application Software Interface Definition
Software Execution Platform Specific Software Execution Platform Specific Language Specific Language Specific Defines
Design Tagging: Specifying the PIM to PSM Mapping
Design Tagging: Specifying the PIM to PSM Mapping
Design Tagging:
● Design tag values represent
implementation-specific design decisions
● Design tagging is applied to,
but not embedded in, the xUML models (tags and tag values may be included or excluded)
● Code Generator assumes the
most standard implementation, such that only exceptions must be tagged
Design Tagging:
● Design tag values represent
implementation-specific design decisions
● Design tagging is applied to,
but not embedded in, the xUML models (tags and tag values may be included or excluded)
● Code Generator assumes the
most standard implementation, such that only exceptions must be tagged
Design Tagging: Summary
Design Tagging: Summary
•
• Whereas xUML modeling is implementation-Whereas xUML modeling is implementation -independent, Design Tagging is
independent, Design Tagging is implemen-implemen -tation
tation--dependent (i.e. specific to a particular dependent (i.e. specific to a particular Application Software Interface)
Application Software Interface) •
• Implementation-Implementation-specific design decisions specific design decisions (only those needed to support code
(only those needed to support code generation) are made during Design generation) are made during Design
Tagging, and are represented with design Tagging, and are represented with design tag values that are applied to the xUML tag values that are applied to the xUML models
models •
• The most standard implementation is always The most standard implementation is always assumed by the code generator, such that assumed by the code generator, such that only exceptions must be tagged
only exceptions must be tagged •
• Design Tagging is overlaid on (not Design Tagging is overlaid on (not
embedded in) the xUML models, such that it embedded in) the xUML models, such that it may be included or excluded
may be included or excluded
Platform Specific
Platform Specific
Mapping
Mapping
(Design Tagging)
(Design Tagging)
Model of
Implementation
...
...
Automatic Code Generation: 3 Levels of Models
Automatic Code Generation: 3 Levels of Models
Model of xUML
...
...
xUML Elements: (e.g. Class, Attribute,Association, Tag, etc.)
xUML Elements:
(e.g. Class, Attribute, Association, Tag, etc.) Model of Application
...
...
Application Elements: (e.g. Aircraft, Missile,Target, etc.) Application Elements:
(e.g. Aircraft, Missile, Target, etc.)
Implementation Elements:
(e.g. Procedure, Array, Program, Event
Queue, etc.) Implementation
Elements:
(e.g. Procedure, Array, Program, Event Queue, etc.) Level 1 Level 1 Level 2 Level 2 Level 3 Level 3 Developed by Program Developed by Program Supplied by Tool Vendor Supplied by Tool Vendor Developed by Program Developed by Program
Model of xUML
...
...
xUML Elements: (e.g. Class, Attribute,Association, Tag, etc.)
xUML Elements:
(e.g. Class, Attribute, Association, Tag, etc.) Level 2 Level 2 Supplied by Tool Vendor Supplied by Tool Vendor
Automatic Code Generation: Level 2
Automatic Code Generation: Level 2
-
-
Simulation Code
Simulation Code
Step 1:
Step 1: Populate instancesPopulate instances of
of xUMLxUMLMetamodelMetamodel withwith
Code Generation: Code Generation: Generation of Generation of Simulation Code Simulation Code for Development for Development Platform Platform
(e.g. UNIX C Code)
(e.g. UNIX C Code)
Model of Application
...
...
Application Elements: (e.g. Aircraft, Missile,Target, etc.) Application Elements:
(e.g. Aircraft, Missile, Target, etc.) Level 1 Level 1 Developed by Program Developed by Program
When we say that “xUML models are executable” we mean that
Model of Implementation
...
...
Implementation Elements:(e.g. Procedure, Array, Program, Event
Queue, etc.) Implementation
Elements:
(e.g. Procedure, Array, Program, Event Queue, etc.) Level 3 Level 3 Developed by Program Developed by Program Model of xUML
...
...
xUML Elements: (e.g. Class, Attribute,Association, Tag, etc.)
xUML Elements:
(e.g. Class, Attribute, Association, Tag, etc.) Level 2 Level 2 Supplied by Tool Vendor Supplied by Tool Vendor
Automatic Code Generation: Level 3
Automatic Code Generation: Level 3
-
-
Target Code
Target Code
Step 1:
Step 1: Populate instancesPopulate instances of
of xUMLxUMLMetamodelMetamodel withwith Model of Application
...
...
Application Elements: (e.g. Aircraft, Missile,Target, etc.) Application Elements:
(e.g. Aircraft, Missile, Target, etc.) Level 1 Level 1 Developed by Program Developed by Program Step 2:
Step 2: Populate instancesPopulate instances of
of Model of ImplementationModel of Implementation with
with populated xUMLpopulated xUML Metamodel
Metamodel instancesinstances
Code Generation: Code Generation: Generation of Generation of Source Code Source Code for Target for Target (Embedded) (Embedded) Platform Platform (e.g.
The Code Generator
The Code Generator
Model of Implementation
...
...
Implementation Elements:(e.g. Procedure, Array, Program, Event
Queue, etc.) Implementation
Elements:
(e.g. Procedure, Array, Program, Event Queue, etc.) Level 3 Level 3 Developed by Program Developed by Program Model of xUML
...
...
xUML Elements: (e.g. Class, Attribute,Association, Tag etc.)
xUML Elements:
(e.g. Class, Attribute, Association, Tag etc.) Level 2 Level 2 Supplied by Tool Vendor Supplied by Tool Vendor
Automatic Code Generation: The Code Generator
Automatic Code Generation: The Code Generator
Model of Application
...
...
Application Elements: (e.g. Aircraft, Missile,Target, etc.) Application Elements:
(e.g. Aircraft, Missile, Target, etc.) Level 1 Level 1 Developed by Program Developed by Program Generated Generated Source Code Source Code for Target for Target Platform Platform
The Code Generator includes all implementation
The Code Generator includes all implementation--dependent detailsdependent details (those dependent upon the Application Software Interface
Automatic Code Generation: Code Generator Development
Automatic Code Generation: Code Generator Development
Configurable Code Generator: ● Code Generator is developed
using the same eXecutable MDA strategy
● The Tool Vendor supplies a
set of xUML models (known as the Configurable Code Generator) that serve as a generic translation framework
Configurable Code Generator: ● Code Generator is developed
using the same eXecutable MDA strategy
● The Tool Vendor supplies a
set of xUML models (known as the Configurable Code Generator) that serve as a generic translation framework
Automatic Code Generation: Code Generator Development
Automatic Code Generation: Code Generator Development
Code Generator Development: ● The Configurable Code
Generator may be adapted to the meet the requirements of any Platform Specific
Implementation (i.e. of any Application Software Interface)
● Code Generator and
Application Software develop-ment may be performed
concurrently
Code Generator Development: ● The Configurable Code
Generator may be adapted to the meet the requirements of any Platform Specific
Implementation (i.e. of any Application Software Interface)
● Code Generator and
Application Software develop-ment may be performed
Automatic Code Generation: Summary
Automatic Code Generation: Summary
•
• Automatic code generation is simply an Automatic code generation is simply an
extension of the code generation technique extension of the code generation technique used for simulation of the
used for simulation of the eXecutableeXecutable UML UML models on the development platform, this models on the development platform, this extension being for the target (embedded) extension being for the target (embedded) platform
platform •
• The code generator is developed within the The code generator is developed within the same environment as the application
same environment as the application software using the same
software using the same eXecutable eXecutable MDA MDA strategy
strategy −
− Development cost: 1Development cost: 1--2 architects2 architects
•
• Nearly all implementation-Nearly all implementation-specific design specific design tasks (all but the design decisions
tasks (all but the design decisions represented by design tag values) are represented by design tag values) are performed by the code generator, not the performed by the code generator, not the software developers
software developers
Automatic
Code Generation
Automatic Code Generator
Portable Application Software Products
Portable Application Software Products
Source Code
Source Code
Application
Software
Interface
eXecutable
eXecutable
UML
UML
Models
Models
Program Specific
Program Specific
Mapping
Mapping
(Design Tag Values)
(Design Tag Values)
Automatic Code Generator
Program Specific
Program Specific
Mapping
Mapping
(Design Tag Values)
(Design Tag Values)
Source Code
Source Code
Application
Software
Interface
eXecutable
eXecutable
UML
UML
Models
Models
The Portable Products
The Portable Products
(and therefore the Configured Products
(and therefore the Configured Products
to be placed in an Enterprise
to be placed in an Enterprise--Level Level Software Reuse Library)
Advantages of the
Advantages of the
eXecutable
eXecutable
MDA Approach
MDA Approach
•
• The majority of software developers are The majority of software developers are isolated from implementation details, isolated from implementation details, allowing them to focus on a thorough allowing them to focus on a thorough analysis of the application space
analysis of the application space •
• Maintenance of the application source code Maintenance of the application source code is eliminated, while maintenance of the xUML is eliminated, while maintenance of the xUML models is ensured
models is ensured •
• Defect injection (and the resulting rework) is Defect injection (and the resulting rework) is reduced by automating the software phase in reduced by automating the software phase in which most defects are injected
which most defects are injected −
− On a typical program, after Requirements On a typical program, after Requirements Definition approximately 2/3 of the
Definition approximately 2/3 of the
defects are injected during
defects are injected during
implementation (coding)
implementation (coding)
Increased Quality
Advantages of the
Advantages of the
eXecutable
eXecutable
MDA Approach
MDA Approach
•
• Rework is reducedRework is reduced −
− Early validation through simulation Early validation through simulation reduces rework
reduces rework •
• Increase in Increase in eXecutableeXecutable UML modeling UML modeling span time is more than offset by decrease
span time is more than offset by decrease
in Integration & Test span time
in Integration & Test span time
−
− Higher quality implementation (due to Higher quality implementation (due to automation) reduces rework
automation) reduces rework •
• Software development span time is reduced Software development span time is reduced by automating the implementation phase by automating the implementation phase
−
− Application Software development Application Software development schedule is reduced by at least 20%
schedule is reduced by at least 20% −
− The code generator, not each software The code generator, not each software developer, performs the majority of
developer, performs the majority of
implementation
implementation--specific design tasksspecific design tasks
•
• 40-60% of physical source code
Increased Productivity
Advantages of the
Advantages of the
eXecutable
eXecutable
MDA Approach
MDA Approach
•
• One Application Software xUML Model One Application Software xUML Model database may be reused (as is) on any database may be reused (as is) on any platform for which a code generator is platform for which a code generator is developed
developed −
− xUML models are compatible with any xUML models are compatible with any hardware platform, any Software
hardware platform, any Software
Execution Platform, and any Application
Execution Platform, and any Application
Software Interface
Software Interface −
− xUML models are compatible with any xUML models are compatible with any implementation language
implementation language
Cross
Cross
-
-
Platform Compatibility
Platform Compatibility
The Goal of Cross-Platform Compatibility of Application Software is Attainable with the eXecutable MDA Approach
The Goal of Cross
The Goal of Cross--Platform Compatibility of Application SoftwarePlatform Compatibility of Application Software is Attainable with the
Contact Information
Contact Information
Lauren E. Clark Lauren E. Clark Chief Engineer Chief Engineer FF--16 Modular Mission Computer Software16 Modular Mission Computer Software Lockheed Martin Aeronautics Company
Lockheed Martin Aeronautics Company
Terry
Terry RuthruffRuthruff Staff Specialist
Staff Specialist
Software Engineering Core
Software Engineering Core
Lockheed Martin Aeronautics Company
Lockheed Martin Aeronautics Company
(817) 763
(817) 763--27482748
Bary
Bary D. HoganD. Hogan
Methodology Lead
Methodology Lead
F
F--16 Modular Mission Computer Software16 Modular Mission Computer Software Lockheed Martin Aeronautics Company
Lockheed Martin Aeronautics Company
[email protected] [email protected] (817) 763 (817) 763--35253525 [email protected] [email protected] (817) 763 (817) 763--26202620 Allan Kennedy Allan Kennedy President President
Kennedy Carter Limited
Kennedy Carter Limited
allan
allan@@kckc.com.com
(+44) 1483 483 200