[1] SOFTWARE LICENSE AGREEMENT FOR CANON'S OR ITS LICENSORS' SOFTWARE PROGRAMS

IMPORTANT

This is a legal agreement ("Agreement") between you and Canon Inc. ("Canon") 
governing your use of Canon's or its licensors' software programs incorporated 
in this Canon's product "Canon UFR II/UFR II LT Printer Driver for Linux v2.70  
" ("Product"), and which software programs are listed in Schedule 1 of Exhibit 
attached hereto.  Such Canon's or its licensors' software programs shall be 
referred to hereinafter as the "Software."

READ CAREFULLY AND UNDERSTAND ALL OF THE RIGHTS AND RESTRICTIONS DESCRIBED IN 
THIS AGREEMENT BEFORE USING THE SOFTWARE.

BY USING THE SOFTWARE AS DESCRIBED IN SECION 1 BELOW, YOU AGREE TO BE BOUND BY 
THE TERMS AND CONDITIONS OF THIS AGREEMENT.  IF YOU DO NOT AGREE TO THE TERMS 
AND CONDITIONS OF THIS AGREEMENT, DO NOT USE THE SOFWARE AND PROMPTLY RETURN 
THE SAME TO THE PLACE WHERE YOU OBTAINED IT.


1.GRANT OF LICENSE

Canon grants you a personal, limited and non-exclusive license to use ("use" as 
used herein shall mean storing, loading, installing, accessing, executing or 
displaying), have used, copy, have copied, distribute and permit third parties 
to use and copy the Software only on the Product.  You may modify the Software 
only for your own use and reverse engineer the same for debugging such 
modifications.  You shall distribute the Software to any third party under the 
same terms and conditions as contained herein.

2.RESTRICTIONS

Except as expressly granted or permitted herein, you shall not use, assign, 
sublicense, sell, rent, lease, loan, convey or transfer to any third party the 
Software.

3.COPYRIGHT NOTICE

You shall not modify, remove or delete any copyright notice of Canon or its 
licensors contained in the Software, including any copy thereof.

4.OWNERSHIP

Canon and its licensors retain in all respects the title, ownership and 
intellectual property rights in and to the Software.  Except as expressly 
provided herein, no license or right, express or implied, is hereby conveyed or 
granted by Canon to you for any intellectual property of Canon and its licensors.

5.EXPORT RESTRICTION

You agree to comply with all export laws and restrictions and regulations of the 
country involved, and not to export or re-export, directly or indirectly, the 
Software in violation of any such laws, restrictions and regulations, or without 
all necessary approvals.

6.NO WARRANTY AND DISCLAIMER OF INDEMNITY

THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY 
AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY, FUNCTION 
AND PERFORMANCE OF THE SOFTWARE IS WITH YOU.  SHOULD THE SOFTWARE PROVE DEFECTIVE, 
YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

IN NO EVENT SHALL EITHER CANON, CANON'S SUBSIDIARIES OR AFFILIATES, THEIR 
DISTRIBUTORS, DEALERS OR CANON'S LICENSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER 
(INCLUDING WITHOUT LIMITATION, LOSS OF BUSINESS PROFITS, LOSS OF BUSINESS 
INFORMATION, BUSINESS INTERRUPTION OR OTHER COMPENSATORY, INCIDENTAL OR 
CONSEQUENTIAL DAMAGES) ARISING OUT OF THE SOFTWARE, USE THEREOF OR INABILITY TO 
USE THE SOFTWARE EVEN IF EITHER CANON, CANON'S SUBSIDIARIES OR AFFILIATES, THEIR 
DISTRIBUTORS, DEALERS OR CANON'S LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY 
OF SUCH DAMAGES.

TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, YOU HEREBY RELEASE CANON, CANON'S 
SUBSIDIARIES AND AFFILIATES, THEIR DISTRIBUTORS, DEALERS AND CANON'S LICENSORS 
FROM ANY AND ALL LIABILITY ARISING FROM OR RELATED TO ALL CLAIMS CONCERNING THE 
SOFTWARE OR ITS USE.

7.TERM

This Agreement is effective upon your acceptance hereof by using the Software 
and remains in effect until terminated.  You may terminate this Agreement by 
destroying the Software.  

Canon may terminate this Agreement if you fail to comply with any terms hereof. 
Upon such termination of this Agreement, in addition to Canon enforcing its 
respective legal rights, you must then promptly destroy the Software.  

Notwithstanding the foregoing, Sections 4, and 6 through 10 shall survive any 
termination of this Agreement.

8.U.S. GOVERNMENT RESTRICTED RIGHTS NOTICE

A "US Government End User" shall mean any agency or entity of the government of 
the United States.  If you are a US Government End User, the following shall apply:
The SOFTWARE is "commercial items," as that term is defined at 48 C.F.R. 2.101 
(October 1995), consisting of "commercial computer software" as such terms are 
used in 48 C.F.R. 12.212 (September 1995).  Consistent with 48 C.F.R. 12.212 and 
48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End 
Users shall acquire the SOFTWARE with only those rights set forth herein.  
The manufacturer is Canon Inc./30-2, Shimomaruko 3-chome, Ohta-ku, Tokyo 146-8501, 
Japan.

9.SEVERABILITY

In the event that any section hereof is declared or found to be illegal by any 
court or tribunal of competent jurisdiction, such section shall be null and void 
with respect to the jurisdiction of that court or tribunal and all the remaining 
provisions hereof shall remain in full force and effect.

10.ACKNOWLEDGEMENT

YOU AGREE THAT THIS AGREEMENT IS THE COMPLETE AND EXCLUSIVE STATEMENT OF AGREEMENT 
BETWEEN YOU AND CANON CONCERNING THE SUBJECT MATTER HEREOF AND SUPERSEDES ALL 
PROPOSALS OR PRIOR AGREEMENTS, VERBAL OR WRITTEN, AND ANY OTHER COMMUNICATIONS 
BETWEEN YOU AND CANON RELATING TO THE SUBJECT MATTER HEREOF.

021951

[2] IMPORTANT NOTICE FOR THE USE OF FREE SOFTWARE COMPONENTS BEING LICENSED UNDER 
GNU GENERAL PUBLIC LICENSE

This product "Canon UFR II/UFR II LT Printer Driver for Linux v2.70 " ("Product")
 of Canon Inc. ("Canon") contains the free software components as listed in 
Schedule 2 of Exhibit attached hereto, and which are licensed under GNU General 
Public License version 2 published by the Free Software Foundation ("GPL").

Such free software components are free software; you can redistribute them and/or 
modify them under the terms of GPL.

Such components are distributed in the hope that they will be useful, but WITHOUT 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 
A PARTICULAR PURPOSE.  You can find full text of GPL later within this notice and 
see it for more details.  


GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies of this license 
document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share 
and change it. By contrast, the GNU General Public License is intended to guarantee 
your freedom to share and change free software--to make sure the software is free 
for all its users. This General Public License applies to most of the Free Software 
Foundation's software and to any other program whose authors commit to using it. 
(Some other Free Software Foundation software is covered by the GNU Library 
General Public License instead.) You can apply it to your programs, too. 

When we speak of free software, we are referring to freedom, not price. Our General 
Public Licenses are designed to make sure that you have the freedom to distribute 
copies of free software (and charge for this service if you wish), that you receive 
source code or can get it if you want it, that you can change the software or use 
pieces of it in new free programs; and that you know you can do these things. 

To protect your rights, we need to make restrictions that forbid anyone to deny 
you these rights or to ask you to surrender the rights. These restrictions translate 
to certain responsibilities for you if you distribute copies of the software, 
or if you modify it. 

For example, if you distribute copies of such a program, whether gratis or for 
a fee, you must give the recipients all the rights that you have. You must make 
sure that they, too, receive or can get the source code. And you must show them 
these terms so they know their rights. 

We protect your rights with two steps: (1) copyright the software, and (2) offer 
you this license which gives you legal permission to copy, distribute and/or 
modify the software. 

Also, for each author's protection and ours, we want to make certain that everyone 
understands that there is no warranty for this free software. If the software is 
modified by someone else and passed on, we want its recipients to know that what 
they have is not the original, so that any problems introduced by others will not 
reflect on the original authors' reputations.
 
Finally, any free program is threatened constantly by software patents. We wish to
 avoid the danger that redistributors of a free program will individually obtain 
patent licenses, in effect making the program proprietary. To prevent this, we 
have made it clear that any patent must be licensed for everyone's free use or 
not licensed at all. 

The precise terms and conditions for copying, distribution and modification follow. 

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice 
placed by the copyright holder saying it may be distributed under the terms of 
this General Public License. The "Program", below, refers to any such program or 
work, and a "work based on the Program" means either the Program or any derivative 
work under copyright law: that is to say, a work containing the Program or a 
portion of it, either verbatim or with modifications and/or translated into another 
language. (Hereinafter, translation is included without limitation in the term 
"modification".) Each licensee is addressed as "you". 

Activities other than copying, distribution and modification are not covered by 
this License; they are outside its scope. The act of running the Program is not 
restricted, and the output from the Program is covered only if its contents 
constitute a work based on the Program (independent of having been made by running 
the Program). Whether that is true depends on what the Program does. 

1. You may copy and distribute verbatim copies of the Program's source code as 
you receive it, in any medium, provided that you conspicuously and appropriately 
publish on each copy an appropriate copyright notice and disclaimer of warranty; 
keep intact all the notices that refer to this License and to the absence of any 
warranty; and give any other recipients of the Program a copy of this License 
along with the Program. 

You may charge a fee for the physical act of transferring a copy, and you may 
at your option offer warranty protection in exchange for a fee. 

2. You may modify your copy or copies of the Program or any portion of it, thus 
forming a work based on the Program, and copy and distribute such modifications 
or work under the terms of Section 1 above, provided that you also meet all of 
these conditions: 

a) You must cause the modified files to carry prominent notices stating that you 
changed the files and the date of any change. 

b) You must cause any work that you distribute or publish, that in whole or in 
part contains or is derived from the Program or any part thereof, to be licensed 
as a whole at no charge to all third parties under the terms of this License. 

c) If the modified program normally reads commands interactively when run, you 
must cause it, when started running for such interactive use in the most ordinary 
way, to print or display an announcement including an appropriate copyright notice 
and a notice that there is no warranty (or else, saying that you provide a warranty) 
and that users may redistribute the program under these conditions, and telling 
the user how to view a copy of this License. (Exception: if the Program itself 
is interactive but does not normally print such an announcement, your work based 
on the Program is not required to print an announcement.) 

These requirements apply to the modified work as a whole. If identifiable sections 
of that work are not derived from the Program, and can be reasonably considered 
independent and separate works in themselves, then this License, and its terms, 
do not apply to those sections when you distribute them as separate works. But 
when you distribute the same sections as part of a whole which is a work based 
on the Program, the distribution of the whole must be on the terms of this License, 
whose permissions for other licensees extend to the entire whole, and thus to each 
and every part regardless of who wrote it. 

Thus, it is not the intent of this section to claim rights or contest your rights 
to work written entirely by you; rather, the intent is to exercise the right to 
control the distribution of derivative or collective works based on the Program. 

In addition, mere aggregation of another work not based on the Program with the 
Program (or with a work based on the Program) on a volume of a storage or 
distribution medium does not bring the other work under the scope of this License. 

3. You may copy and distribute the Program (or a work based on it, under Section 2) 
in object code or executable form under the terms of Sections 1 and 2 above 
provided that you also do one of the following: 

a) Accompany it with the complete corresponding machine-readable source code, 
which must be distributed under the terms of Sections 1 and 2 above on a medium 
customarily used for software interchange; or, 

b) Accompany it with a written offer, valid for at least three years, to give 
any third party, for a charge no more than your cost of physically performing 
source distribution, a complete machine-readable copy of the corresponding source 
code, to be distributed under the terms of Sections 1 and 2 above on a medium 
customarily used for software interchange; or, 

c) Accompany it with the information you received as to the offer to distribute 
corresponding source code. (This alternative is allowed only for noncommercial 
distribution and only if you received the program in object code or executable 
form with such an offer, in accord with Subsection b above.) 

The source code for a work means the preferred form of the work for making 
modifications to it. For an executable work, complete source code means all the 
source code for all modules it contains, plus any associated interface definition 
files, plus the scripts used to control compilation and installation of the executable. 
However, as a special exception, the source code distributed need not include 
anything that is normally distributed (in either source or binary form) with the 
major components (compiler, kernel, and so on) of the operating system on which 
the executable runs, unless that component itself accompanies the executable. 

If distribution of executable or object code is made by offering access to copy 
from a designated place, then offering equivalent access to copy the source code 
from the same place counts as distribution of the source code, even though third 
parties are not compelled to copy the source along with the object code. 

4. You may not copy, modify, sublicense, or distribute the Program except as 
expressly provided under this License. Any attempt otherwise to copy, modify, 
sublicense or distribute the Program is void, and will automatically terminate 
your rights under this License. However, parties who have received copies, or 
rights, from you under this License will not have their licenses terminated so 
long as such parties remain in full compliance. 

5. You are not required to accept this License, since you have not signed it. 
However, nothing else grants you permission to modify or distribute the Program 
or its derivative works. These actions are prohibited by law if you do not accept 
this License. Therefore, by modifying or distributing the Program (or any work 
based on the Program), you indicate your acceptance of this License to do so, 
and all its terms and conditions for copying, distributing or modifying the 
Program or works based on it. 

6. Each time you redistribute the Program (or any work based on the Program), 
the recipient automatically receives a license from the original licensor to copy, 
distribute or modify the Program subject to these terms and conditions. You may 
not impose any further restrictions on the recipients' exercise of the rights 
granted herein. You are not responsible for enforcing compliance by third parties 
to this License. 

7. If, as a consequence of a court judgment or allegation of patent infringement 
or for any other reason (not limited to patent issues), conditions are imposed 
on you (whether by court order, agreement or otherwise) that contradict the 
conditions of this License, they do not excuse you from the conditions of this 
License. If you cannot distribute so as to satisfy simultaneously your obligations 
under this License and any other pertinent obligations, then as a consequence 
you may not distribute the Program at all. For example, if a patent license would 
not permit royalty-free redistribution of the Program by all those who receive 
copies directly or indirectly through you, then the only way you could satisfy 
both it and this License would be to refrain entirely from distribution of the 
Program. 

If any portion of this section is held invalid or unenforceable under any 
particular circumstance, the balance of the section is intended to apply and 
the section as a whole is intended to apply in other circumstances. 

It is not the purpose of this section to induce you to infringe any patents or 
other property right claims or to contest validity of any such claims; this 
section has the sole purpose of protecting the integrity of the free software 
distribution system, which is implemented by public license practices. Many people 
have made generous contributions to the wide range of software distributed through 
that system in reliance on consistent application of that system; it is up to the 
author/donor to decide if he or she is willing to distribute software through any 
other system and a licensee cannot impose that choice. 

This section is intended to make thoroughly clear what is believed to be a 
consequence of the rest of this License. 

8. If the distribution and/or use of the Program is restricted in certain 
countries either by patents or by copyrighted interfaces, the original copyright 
holder who places the Program under this License may add an explicit geographical 
distribution limitation excluding those countries, so that distribution is 
permitted only in or among countries not thus excluded. In such case, this License 
incorporates the limitation as if written in the body of this License. 

9. The Free Software Foundation may publish revised and/or new versions of the 
General Public License from time to time. Such new versions will be similar in 
spirit to the present version, but may differ in detail to address new problems 
or concerns. 

Each version is given a distinguishing version number. If the Program specifies 
a version number of this License which applies to it and "any later version", you 
have the option of following the terms and conditions either of that version or 
of any later version published by the Free Software Foundation. If the Program 
does not specify a version number of this License, you may choose any version 
ever published by the Free Software Foundation. 

10. If you wish to incorporate parts of the Program into other free programs 
whose distribution conditions are different, write to the author to ask for 
permission. For software which is copyrighted by the Free Software Foundation, 
write to the Free Software Foundation; we sometimes make exceptions for this. 
Our decision will be guided by the two goals of preserving the free status of all 
derivatives of our free software and of promoting the sharing and reuse of 
software generally. 

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE 
PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED 
IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH 
YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 
SERVICING, REPAIR OR CORRECTION. 

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL 
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE 
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, 
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY 
TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF 
THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER 
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use 
to the public, the best way to achieve this is to make it free software which 
everyone can redistribute and change under these terms. 

To do so, attach the following notices to the program. It is safest to attach 
them to the start of each source file to most effectively convey the exclusion 
of warranty; and each file should have at least the "copyright" line and a pointer 
to where the full notice is found. 

one line to give the program's name and an idea of what it does.
Copyright (C) yyyy  name of author

This program is free software; you can redistribute it and/or modify it under 
the terms of the GNU General Public License as published by the Free Software 
Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY 
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with 
this program; if not, write to the Free Software Foundation, Inc., 59 Temple 
Place - Suite 330, Boston, MA  02111-1307, USA.

Also add information on how to contact you by electronic and paper mail. 

If the program is interactive, make it output a short notice like this when it 
starts in an interactive mode: 

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.  
This is free software, and you are welcome to redistribute it under certain 
conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts 
of the General Public License. Of course, the commands you use may be called 
something other than `show w' and `show c'; they could even be mouse-clicks or 
menu items--whatever suits your program. 

You should also get your employer (if you work as a programmer) or your school, 
if any, to sign a "copyright disclaimer" for the program, if necessary. Here is 
a sample; alter the names: 

Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision' (which makes passes at compilers) written 
by James Hacker.

signature of Ty Coon, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into 
proprietary programs. If your program is a subroutine library, you may consider 
it more useful to permit linking proprietary applications with the library. 
If this is what you want to do, use the GNU Library General Public License instead 
of this License. 

[3] IMPORTANT NOTICE FOR THE USE OF OTHER FREE SOFTWARE COMPONENTS

The software components contained in this product "Canon Common Printer Driver 
for Linux v2.70" which software components are listed in Schedule 3 of Exhibit 
attached hereto are free software.

Such component shall be deemed as the "Software" defined in the permission notice 
below, and you can deal in such component under the terms of such permission notice.


Copyright (c) 2007 Canon Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of 
this software and associated documentation files (the "Software"), to deal in 
the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
of the Software, and to permit persons to whom the Software is furnished to do 
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Exhibit


Schedule 1

c3pldrv
libc3pl.so.0.0.1
libcaepcm.so.1.0
libcaiousb.so.1.0.0
libcaiowrap.so.1.0.0
libcanon_slim.so.1.0.0
libColorGear.so.0.0.0
libColorGearC.so.0.0.0
CANSRGBA.ICC
CNZ005.ICC
CNZ006.ICC
CNZ007.ICC
CNZ008.ICC
CNZ055.ICC
cnpkbidi
cnpkmoduleufr2
libEnoJBIG.so.1.0.0
libEnoJPEG.so.1.0.0
libcaiocnpkbidi.so.1.0.0
libcanonufr2.la
libcanonufr2.so.1.0.0
libcnlbcm.so.1.0
libufr2filter.so.1.0.0
CNC610A.ICC
CNC610B.ICC
CNC710A.ICC
CNC710B.ICC
CNC711A.ICC
CNC711B.ICC
CNC810A.ICC
CNC810B.ICC
CNC910A.ICC
CNC910B.ICC
CNCA10A.ICC
CNCA10B.ICC
CNCB10A.ICC
CNCB10B.ICC
CNCC10A.ICC
CNCC10B.ICC
CNCD11A.ICC
CNCD11B.ICC
CNCE10A.ICC
CNCE10B.ICC
CNCF10A.ICC
CNCF10B.ICC
CNCG10A.ICC
CNCG10B.ICC
CNCI10A.ICC
CNCI11B.ICC
CNL610A.ICC
CNL610B.ICC
CNL611A.ICC
CNL611B.ICC
CNL820A.ICC
CNL820B.ICC
CNL821A.ICC
CNL821B.ICC
CNL980A.ICC
CNL980B.ICC
CNLA80A.ICC
CNLA80B.ICC
CNLB10A.ICC
CNLB10B.ICC
CNLC10A.ICC
CNLC10B.ICC
CNLD10A.ICC
CNLD10B.ICC
CNLD80A.ICC
CNLD80B.ICC
CNLF10A.ICC
CNLF10B.ICC
CNLG10A.ICC
CNLG10B.ICC
CNLH80A.ICC
CNLH80B.ICC
CnLB0021.DAT
CnLB0052.DAT
CnLB0203.DAT
CnLB03C2.DAT
CnLB050F.DAT
CnLB065C.DAT
CnLB0729.DAT
CnLB0953.DAT
CnLB0A87.DAT
CnLB0C13.DAT
CnLB0CCA.DAT
CnLB0DD6.DAT
CnLB10F8.DAT
CnLB1104.DAT
CnLB12B9.DAT
CnLB1493.DAT
CnLB157C.DAT
CnLB15C8.DAT
CnLB174D.DAT
CnLB2030.DAT
CnLB2289.DAT
CnLB22F7.DAT
CnLB2325.DAT
CnLB242B.DAT
CnLB26EB.DAT
CnLB2775.DAT
CnLB2887.DAT
CnLB3124.DAT
CnLB33CE.DAT
CnLB3547.DAT
CnLB3645.DAT
CnLB3E20.DAT
CnLB3FEB.DAT
CnLB3FFE.DAT
CnLB402B.DAT
CnLB4758.DAT
CnLB4896.DAT
CnLB495F.DAT
CnLB49AC.DAT
CnLB4B7B.DAT
CnLB4CAF.DAT
CnLB4DC9.DAT
CnLB50B6.DAT
CnLB511D.DAT
CnLB5BD1.DAT
CnLB5D7D.DAT
CnLB5F49.DAT
CnLB682C.DAT
CnLB6CC9.DAT
CnLB6D8B.DAT
CnLB71AF.DAT
CnLB75F3.DAT
CnLB7754.DAT
CnLB789E.DAT
CnLB7AAC.DAT
CnLB7C4F.DAT
CnLB7E3A.DAT
CnLB7FED.DAT
CnLB7FF3.DAT
CnLB8037.DAT
CnLB82F5.DAT
CnLB8568.DAT
CnLB8773.DAT
CnLB88EC.DAT
CnLB8925.DAT
CnLB8A05.DAT
CnLB8AEC.DAT
CnLB8AF4.DAT
CnLB9053.DAT
CnLB91CD.DAT
CnLB9263.DAT
CnLB96C4.DAT
CnLB9724.DAT
CnLB99D2.DAT
CnLB9B6F.DAT
CnLB9F62.DAT
CnLBA028.DAT
CnLBA22F.DAT
CnLBA2A9.DAT
CnLBA633.DAT
CnLBA6A8.DAT
CnLBA7E1.DAT
CnLBA811.DAT
CnLBAAB9.DAT
CnLBAC02.DAT
CnLBAD22.DAT
CnLBAE22.DAT
CnLBB00D.DAT
CnLBB051.DAT
CnLBB74A.DAT
CnLBB8C5.DAT
CnLBBC70.DAT
CnLBBC77.DAT
CnLBBD1A.DAT
CnLBBFAD.DAT
CnLBC025.DAT
CnLBC031.DAT
CnLBC07C.DAT
CnLBC0B5.DAT
CnLBC0BB.DAT
CnLBC12E.DAT
CnLBC19C.DAT
CnLBC41F.DAT
CnLBC4C1.DAT
CnLBC60E.DAT
CnLBC61C.DAT
CnLBC662.DAT
CnLBCA28.DAT
CnLBCAA4.DAT
CnLBCFCA.DAT
CnLBD2A2.DAT
CnLBD37D.DAT
CnLBD4C7.DAT
CnLBD5ED.DAT
CnLBD635.DAT
CnLBD757.DAT
CnLBD876.DAT
CnLBD9BD.DAT
CnLBDAB4.DAT
CnLBDC35.DAT
CnLBDDBE.DAT
CnLBDE79.DAT
CnLBDF09.DAT
CnLBDFA3.DAT
CnLBE1E7.DAT
CnLBE2B8.DAT
CnLBE418.DAT
CnLBE71E.DAT
CnLBE82F.DAT
CnLBEAC8.DAT
CnLBEB13.DAT
CnLBEEA4.DAT
CnLBF017.DAT
CnLBF066.DAT
CnLBF5F6.DAT
CnLBFA5E.DAT
CnLBFB32.DAT
CnLBFC60.DAT
CnLBFDB2.DAT
CnLBFDDF.DAT
CnLB_04A.DAT
CnLB_08A.DAT
CnLB_10A.DAT
CnLB_12A.DAT
CnLB_13A.DAT
CnLB_14A.DAT
CnLB_15A.DAT
CnLB_16A.DAT
CnLB_18A.DAT
CnLB_19A.DAT
CnLB_21A.DAT
CnLB_23A.DAT
CnLB_24A.DAT
CnLB_26A.DAT
CnLB_27A.DAT
CnLB_28A.DAT
CnLB_29A.DAT
CnLB_30A.DAT
CnLB_32A.DAT
CnLB_34A.DAT
CnLB_35A.DAT
CnLB_36A.DAT
CnLB_38A.DAT
CnLB_40A.DAT
CnLB_41A.DAT
CnLB_42A.DAT
CnLB_43A.DAT
cnpkbidi_info_000.xml
cnpkbidi_info_001.xml
cnpkbidi_info_002.xml
cnpkbidi_info_003.xml
cnpkbidi_info_004.xml
ThLB_27A.BIN
ThLB_28A.BIN
ThLB_40A.BIN
ThLB_41A.BIN


Schedule 2

cngplp
cnjatool
cngplp.mo
cngplp.glade
cnusb
pstoufr2cpca
libuictlufr2.la
libuictlufr2.so.1.0.0
libuictlufr2.1.0.mo
cngplp_ufr2.glade
func_config_ufr2.xml
*.res
*.ppd


Schedule 3

buflist.h
buftool.h
libbuftool.a
libcanonc3pl.so.1.0.0
cnpklibufr2.h
libcnpkufr2.a
libcnpkufr2.la
