Drive Copy

Our customer has asked us to supply quick change backup hard disks for the
embedded QNX4 based systems we have supplied. We assume (hope?) this will
not be a problem in terms of the QNX licenses since each license will only
ever run on one hard disk at a time.

We would like to make the backups a true snapshot of each systems rather
than create a fresh installation and load the application software and data
(partially because we are not sure of the true QNX patch level on each
system).

Can anyone advise whether PowerQuests Drive Copy can do this or alternately
recommend another package that could do the same thing.

TIA
Steve

Have a look at the “Raw Disk Copy Doesn’t Work” Thread in this newsgroup. You
should just be able to fit both drives to the one machine (EIDE? Master/slave
type, or two different controllers) and then do a Fsys.eide which should pick
up both drives. Make sure both drives are identical in type. (Buying drives at
different times usually means they are different.) You should then have
/dev/hd0 and /dev/hd1 available in the /dev/directory.

A cp /dev/hd0 /dev/hd1 should then make a duplicate of the hd0 drive on the hd1
drive. If I am misguided and this doesn’t work, there are another couple of
options. The first is to create identical partitions on the two drives (using
Fdisk) and then copy the partition from one drive to another. Eg:
cp /dev/hd0t77 /dev/hd1t77

The second option is the most robust to different disk types and partiton
sizes. Just take your two drives, make a partition on the second drive big
enough to hold the first and do a

cp -Rv / /hd2/
Assuming you have mounted the second drive in the filesystem as /hd2.

That should just do a file copy of all of the files on dirve 1 to drive 2.

In all cases you will probably need to reinstall the old-style licenses if you
are using them.

license /etc/licenses /hd2/etc/licenses

There may be a few other things to tidy up as well, but testing will soon show
these up.

Good luck.

Stephen F Terrell wrote:

Our customer has asked us to supply quick change backup hard disks for the
embedded QNX4 based systems we have supplied. We assume (hope?) this will
not be a problem in terms of the QNX licenses since each license will only
ever run on one hard disk at a time.

We would like to make the backups a true snapshot of each systems rather
than create a fresh installation and load the application software and data
(partially because we are not sure of the true QNX patch level on each
system).

Can anyone advise whether PowerQuests Drive Copy can do this or alternately
recommend another package that could do the same thing.

TIA
Steve

Thanks,

As you mention, buying two drives of the same type over a period of 18
months is the first challenge.

Steve

“Donald Backstrom” <donaldb@cstgroup.com.au> wrote in message
news:3A5905F9.3D00B206@cstgroup.com.au

Have a look at the “Raw Disk Copy Doesn’t Work” Thread in this newsgroup.
You
should just be able to fit both drives to the one machine (EIDE?
Master/slave
type, or two different controllers) and then do a Fsys.eide which should
pick
up both drives. Make sure both drives are identical in type. (Buying
drives at
different times usually means they are different.) You should then have
/dev/hd0 and /dev/hd1 available in the /dev/directory.

A cp /dev/hd0 /dev/hd1 should then make a duplicate of the hd0 drive on
the hd1
drive. If I am misguided and this doesn’t work, there are another couple
of
options. The first is to create identical partitions on the two drives
(using
Fdisk) and then copy the partition from one drive to another. Eg:
cp /dev/hd0t77 /dev/hd1t77

The second option is the most robust to different disk types and partiton
sizes. Just take your two drives, make a partition on the second drive big
enough to hold the first and do a

cp -Rv / /hd2/
Assuming you have mounted the second drive in the filesystem as /hd2.

That should just do a file copy of all of the files on dirve 1 to drive 2.

In all cases you will probably need to reinstall the old-style licenses if
you
are using them.

license /etc/licenses /hd2/etc/licenses

There may be a few other things to tidy up as well, but testing will soon
show
these up.

Good luck.

Donald Backstrom <donaldb@cstgroup.com.au> wrote:

Have a look at the “Raw Disk Copy Doesn’t Work” Thread in this newsgroup. You
should just be able to fit both drives to the one machine (EIDE? Master/slave
type, or two different controllers) and then do a Fsys.eide which should pick
up both drives. Make sure both drives are identical in type. (Buying drives at
different times usually means they are different.) You should then have
/dev/hd0 and /dev/hd1 available in the /dev/directory.

A cp /dev/hd0 /dev/hd1 should then make a duplicate of the hd0 drive on the hd1
drive.

Don’t just do a straight copy. =:-o

The .inodes and .bitmap files will be specific to a particular
physical drive, and shouldn’t be copied. Here’s a posting by one
of our customers from a few years ago that includes a script for
this. As you can see, there’s a bit more going on…

************** earlier posting begins *******************
Xref: quics quics.info.free:461
Newsgroups: quics.info.free
Path: quics!mjcinquini
From: mjcinquini@qnx.com (Maurice Cinquini)
Subject: Copying bootable QNX 4.24 hard drives
Organization: Philips Digital Video System Company
Message-ID: <EoC2I0.4AI@qnx.com>
X-Newsreader: TIN [version 1.2 PL2]
Date: Fri, 13 Feb 1998 20:06:01 GMT

With certain restrictions mentioned below, the following script can
quickly duplicate bootable QNX hard drives. I place it in the public
domain in the expectation that useful improvements will one day benefit
the contributors and their employers. It is also archived at
ftp://quics.qnx.com/usr/free/qnx4/os/utils/disk/QNX_drive_copy.gz

–Maurice

---------------------------------cut-here-------------------------------
#!/bin/sh
#***********************************************************************
#ifdef __USAGE

#%C duplicates QNX hard drives.

File: QNX_drive_copy

Description:

This program creates logical copies of hard drives, as opposed to “dd”

image copies. Therefore it does not rely on matching drive geometeries,

does not copy unused parts of the drive and the copy is defragmented.

This script assumes the drives use Logical Block Addressing (LBA) mode,

and are only one partition, and that partition is QNX of course.

Licenses and "bootability is preserved. A log of is saved in /tmp/log.

Keywords: duplicate hard drive disk copy image format master

Version: 1.0

Entered-date: 12-Jan-1998

Author: Maurice Cinquini <cinquini@alamar-usa.com> of Philips DVS.

Credits:

Robert Rutherford and Anthony Wei of Philips DVS,

with hints from Karl Heinz of Hughes, Soenke Nielsen

and the output of the QNX install process.

Copying-policy: This program is public domain, but using this program

to distribute the QNX OS and other software requires permission from,

and/or royalites to, the legal owners of that software.

Supplemental:

Only tested with QNX 4.24, single partition, LBA, IDE drives only.

The complete procedure to copy drives involves the following steps:

1. Insert the master (source) and slave (blank) hard drives.

Depending of the machine setup, slave drives usually needs to

have a jumper removed.

2. Boot QNX in a safe mode where there are no programs running that

may asynchronously write to the hard drive during the following

procedure. If you can’t guarantee this, you should use a QNX

boot floppy and mount the hard drive manually.

3. Login as root.

4. Verify the Master drive has the kernel built to force LBA option

during boot up. Check /boot/build/hard.?? has the line

“Fsys.eide fsys -h 64,63”, (i.e, sectors,heads for LBA mode.)

5. Run this script.

#endif
#***********************************************************************

LOG=/tmp/log # Must be an absolute path.

read ANS?“Completely overwrite /dev/hd1? Press “y” to continue.”
[ x"$ANS" = x"y" ] || exit

exec 4>&1 # Use file descriptor 4 to remember where stdin used to go to.


{

Sometimes the existing partition info will cause this script to fail

echo “Clearing the slave partition disk.”
echo “ERASED” | dd ibs=1k conv=sync of=/dev/hd1

set -x # to show commands as they are exectued.

Display number of cylinders free.

fdisk /dev/hd1 QUERY FREE

Creating default entries on the partition table.

1. Creating a single partition table using all available disk space

2. QNX Loader

3. Setting the boot flag

fdisk /dev/hd1 add -f1 QNX ALL BOOT QNX LOADER
mount -p /dev/hd1
dinit -h /dev/hd1t77
dinit -hb /dev/hd1t77
if mount /dev/hd1t77 /hd1 ; then
:
else
echo “############ ERROR #############”
use $0
exit
fi

Output of dcheck has been left out of the log file, due to to enormous

amount of information dcheck outputs. Also you can remove it for modern

big drives, where I’ve never seen it fail and it takes a long time.

dcheck -m /dev/hd1t77 1>&4

Copy files from master to slave drive, except for those to do with

drive geometries and the current growing log file.

cp -Rpv -P!/.inodes -P!/.bitmap -P!$LOG / /hd1

Due to the encrypting mechanism on /etc/licenses we use license program.

rm -rf /hd1/etc/licenses/*
license /etc/licenses /hd1/etc/licenses

fdisk /dev/hd1 LOADER BOOT QNX # Install QNX boot loader.
fdisk /dev/hd1 QUERY BOOT LOADER # Display # of cylinders.

} 2>&1 | tee $LOG

cp -v $LOG /hd1$LOG # Place the final full log file on the copied drive.
exit


*************** earlier posting ends ********************


I hope this helps.


Norbert Black
QSSL Training Services

Check out the attached scripts.

You can also set fdisk to force a partition definition,
thus allowing the use of completely blank drives.
See the Tape script for an example of this..

Note that the copy ignores certain files/directories that may actually be devices.

You might want to make a scipt that is a combination of tape_install.x and cp_hd01.x

-Paul

Stephen F Terrell <stephen@trsystem.demon.co.uk> wrote in message news:937jp7$t7q$1@inn.qnx.com

Our customer has asked us to supply quick change backup hard disks for the
embedded QNX4 based systems we have supplied. We assume (hope?) this will
not be a problem in terms of the QNX licenses since each license will only
ever run on one hard disk at a time.

We would like to make the backups a true snapshot of each systems rather
than create a fresh installation and load the application software and data
(partially because we are not sure of the true QNX patch level on each
system).

Can anyone advise whether PowerQuests Drive Copy can do this or alternately
recommend another package that could do the same thing.

TIA
Steve
\

begin 666 newdisk_hd01.x
M96-H;R B($-R96%T92!13E@@4&%R=&ET:6]N(@IE8VAO(“(@+6EF('!A2!E>&ES=”!T:&5N(&1E;&5T92!T:&5M(&%L;“!A;F0@
M<F5B;V]T(@IE8VAO(”(@(‘-O(‘1H870@9’)I=F4@:7,@<F5D971E8W1E9"!W
M:71H(&]P=&EM86P@<V5T=&EN9W,@&-Y8VQI;F1E<G,@/" Q,#(T2(<VQE
M97 @-0IF9&ES:R O9&5V+VAD,“XQ”@IE8VAO(“(@56YM;W5N=”!A;GD@<&%R
M=‘,@;V8@1’)I=F4@,2!A;')E861Y(&UO=6YT960B"G5M;W5N=" O:&0P,0H

M96-H;R B($UO=6YT(’!A<G1I=&EO;G,@;V8@4V5C;VYD($1R:79E(@IM;W5N
M=" M<" O9&5V+VAD,“XQ”@IE8VAO(“(@1F]R;6%T('1H92!13E@@4&%R=&ET
M:6]N(@ID:6YI=” M:" O9&5V+VAD,“XQ=#<W”@IE8VAO(“(@36]U;G0@;F5W
M(%%.6”!087)T:71I;VXB"FUO=6YT("]D978O:&0P+C%T-S<@+VAD,#$"F5C
M:&@(B!#;VYT96YT<R!O9B!N97<@<&%R=&ET:6]N.B(
;',@+6QR=%(@+VAD
M,#$"F5C:&@(B!#;W!Y:6YG('!R:6UA<GD@44Y8($1I<VLO4&%R=&ET:6]N
M('1O(&YE=R!13E@@1&ES:R]087)T:71I;VXB"G-L965P(#4
+B]C<%]H9# Q
K+G@“F5C:&@(B!&:6YI<VAE9” D&)A<V5N86UE(“0P2((R!%;F0*”@``
`
end

begin 666 cp_hd01.x
M(R!#;W!Y($AA<F1$:7-K(%-C<FEP= HC(#(P,# O,#4O,#@@4"Y2=7-S96QL
M"B,@0V]P:65S(&%L;“!F:6QE<R!T;R!396-O;F0@2&%R9”!$:7-K(“]H9# Q
M(&5X8V5P=”!S<&5C:6%L(&9I;&5S.@HC"@HC<V5T(“UV"F5X<&]R=”!(1#TO
M:&0P,0IE>'!O<G0@3$]'1DE,13UC<%]H9"YL;V<97AP;W)T($Q/1STD2$0O
M)$Q/1T9)3$4
"FEF(‘1E<W0@+60@)$A$(#L@=&AE;@H@(" @(" @(&5C:&@
M(E1A<F=E=“!/2SH@)$A$(@H@(” @(" @(&5C:&@(DQO9R!&:6QE.B @)$Q/
M1R(96QS90H@(" @(" @(&5C:&@(DYO(%1A<F=E=#H@)$A$(@H@(" @(" @
M(&5C:&@(DUO=6YT(%1A<F=E=“!D<FEV92!B969O<F4@:6YI=&EA=&EN9R!C
M;W!Y('-C<FEP=”(
(" @(" @(“!E>&ET"F9I"F5C:&@(BTM+2TM+2TM+2TB
M(” @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @/B D3$]’“G-L87D@+68@=&%I; IT86EL(“UF
M(“1,3T<@)@IE8VAO(”)38W)I<‘0Z(“0P(” @1&ER96-T;W)Y.B D*’!W9"D@
M(” D*&1A=&4I(B @(” @(" @(" @(" @(" @(" @(" @(" @(" @(" @(#X^
M(“1,3T<96-H;R B+2TM+2TM+2TM+2(@(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" ^/B D
M3$]'“F5C:&@(DYO=&4Z(%)E8V]M;65N9&5D(&5X96-U=&4@=&AI<R!C;VUM
M86YD(&9I<G-T.B!C;&5A;E]H9# Q+G@B(” @(" @(" @(" @(" @/CX@)$Q/
M1PIE8VAO(“(M+2TM+2TM+2TM(B @(” @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(#X^("1,3T<

M9F]R(%-/55)#12!I;B O+BH@+RH@.R!D;PH@(” @(" @(&5C:&@(BTM+2TM
M4V]U<F-E.B D4T]54D-%(B @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(#X^(“1,3T<(" @(" @(“!C87-E(%\D4T]54D-%
M(&EN"B,@(” @(" @(" @(" @(“!?+V)I;B!(%\O=7-R('P@7R]H;VUE('P@
M7R]R96=I2!(%\O<6YX-”!(%\O971C
0HC(” @(" @(" @(" @(" @
M(" @(" @(“!E8VAO(”(M+2U497-T:6YG($YO($-O<‘DZ(“133U520T4B(” @
M(" @(" @(" @(" @(" @(" @(#X^(“1,3T<(R @(" @(" @(" @(" @(" @
M(" @(" @.SL
(” @(" @(" @(" @(" @(%\D2$0@?“!?+V1E=B!(%\O=&UP
M('P@7R]P:7!E('P@7R]D;W,@?”!?+V9D(‘P@7R]F9# @?“!?+V-D/RX_('P@
M7R]C9"D*(” @(" @(" @(" @(" @(" @(" @(" @96-H;R B+2TM3F@0V]P
M>2!$:7)E8W1O<GD@;W(@1&5V:6-E.B D4T]54D-%(B @(" @(" @(" ^/B D
M3$]’“B @(” @(" @(" @(" @(" @(" @(" @(#L[“B @(” @(" @(" @(" @
M(“!?+R1,3T=&24Q%0H@(" @(" @(" @(" @(" @(" @(" @(“!E8VAO(”(M
M+2U.;R!/=F5R=W)I=&4@;&]G(&9I;&4Z(“133U520T4B(” @(" @(" @(" @
M(" @(#X^("1,3T<
(” @(" @(" @(" @(" @(" @(" @(" @.SL*(" @(" @
M(" @(" @(" @(%\O+FQI8V5N<V5S+F)A:R!(%\O+G!H;W1O;B!(%\O+FQA
M<W1L;V=I;BD*(" @(" @(" @(" @(" @(" @(" @(" @96-H;R B+2TM3F@
M0V]P>2!O<FEG:6YA;“!R;V]T(&QO9VEN.B D4T]54D-%(B @(” @(" @(" ^
M/B D3$]’“B @(” @(" @(" @(" @(" @(" @(" @(#L[“B @(” @(" @(" @
M(" @(“!?+RYI;F]D97,@?”!?+RYB:71M87 I"B @(" @(" @(" @(" @(" @
M(" @(" @(&5C:&@(BTM+4YO($-O<‘D@9&ES:R!F;W)M870@;W(@9&ER96-T
M;W)Y.B D4T]54D-%(B @(" @/CX@)$Q/1PH@(" @(" @(" @(" @(" @(" @
M(" @(" [.PH@(" @(" @(" @(" @(" @BD(" @(" @(" @(" @(" @(" @
M(" @(" @(R!#;W!Y.B M=B!V97)B;W-E(“U2(%)E8W5R<V4@+6,@0W)E871E
M($1I<G,(" @(" @(" @(" @(" @(" @(" @(" @(R @(" @(" M<R!3:VEP
M(&EF(&YO('!E<FUI<VEO;B!T;R!O=F5R=W)I=&4@=&%R9V5T"B @(" @(" @
M(" @(" @(" @(" @(" @(“,@(” @(" @+7 @1’5P;&EC871E($]W;F5R<VAI
M<" F(%!E<FUI<W-I;VYS"B,@(" @(" @(" @(" @(" @(" @(" @(&-P(“UV
M4F-S<” D4T]54D-%(“1(1"133U520T4@(” @(" @(" @(" @(" @(" @(" @
M(" @(" @/CX@)$Q/1PH@(" @(" @(" @(" @(" @(" @(" @(“!C<” M4F-S
M<" @)%-/55)#12 D2$0D4T]54D-%(" @(" @(" @(" @(" @(" @(" @(" @
M(" @(#X^("1,3T<
(” @(" @(" @(" @(" @(" @(" @(" @.SL*(" @(" @
M(“!E<V%C"F1O;F496-H;R B+2TM+2TM+2TM+2(@(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M(" ^/B D3$]‘“F5C:&@(D-R96%T:6YG(“1(1”]T;7 O(”]T;7 O<WES;&]G
M(“]U<W(O<W!O;VPO;W5T<'5T+VQP9”\B(" @(" @(" @(" @(" @(" @(" @
M/CX@)$Q/1PIM:V1I<B M<" D2$0O=&UP"F-H;6]D(#<W-R D2$0O=&UP"F1A
M=&4@/B D2$0O=&UP+W-Y<VQO9PIM:V1I<B M<" D2$0O=7-R+W-P;V]L+V]U
M=’!U="]L<&0
96-H;R B+2TM+2TM+2TM+2(@(” @(" @(" @(" @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" ^
M/B D3$]’“G-L965P(#$@(R!786ET(&9O<B!T86EL('1O(&-O;7!L971E"G-L
M87D@+68@=&%I; IE8VAO(”)$;VYE(@IE8VAO("(M+2TM+2TM+2TM(@HC($5N
"9 H
end

begin 666 clean_hd01.x
M"B,@+V5T8R]C;VYF:6<O<&%R=&ET:6]N<RYX"@HC(%)E:6YI=&EL:7IE($1R
M:79E"F5C:&@(E)E:6YI=&EL:7IE(“]H9# Q(@IU;6]U;G0@+VAD,#$9&EN
M:70@+6@@+V1E=B]H9# N,70W-PIP87)T:71I;VYS+G@8W @+V)O;W0O:6UA
M9V5S+VEN<W1A;&Q?,5]P,3 P,%]N=#4P,%]F<WES7V%U=&@+VAD,#$O+F)O
M;W0
8W @+V)O;W0O:6UA9V5S+VEN<W1A;&Q?,5]A;'1B;V]T7V9S>7-?875T
M;R @(" @+VAD,#$O+F%L=&)O;W0
96-H;R B4F5I;FET:6QI>F5D(”]H9# Q
K(@H*<FT@+5)F=B O:&0P,2\J(“]H9# Q+RXJ"FQS(“UL<G12(”]H9# Q”@``
`
end

begin 666 tape_install.x
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(PHC(%-C<FEP=“!T
M;R!);G-T86QL(&$@;F5W($AA<F1D<FEV92!F<F]M(%1A<&4*(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(PH*(R!697)B;W-E(&5X96-U=&4@
M9F]R(&1E8G5G9VEN9R H0V%S92!S=&%T96UE;G1S('!R:6YT(&%S(&)L;V-K
M<RD*(W-E=” M=@H*<F5A9"!?3TL_(D1O('EO=2!W:7-H(‘1O(&EN<W1A;&P@
M=&AE(‘1A<&4@=&@=&AE(’!R:6UA<GD@:&%R9&1I<VL_(“(8V%S92!?)%]/
M2R!I;@H@(" @7WEE<R!(%]915,@?"!?>2!(%]9("D
"3H@(R!/:PH@(” @
M.SL*“B @(” J0H@(" @(" @(')E='5R;B Q"B @(" [.PIE<V%C"@IR96%D
M(%]/2S\B07)E('EO=2!C97)T86EN('EO=2!W:7-H(‘1O(’!R;V-E960_("(

M8V%S92!?)%]/2R!I;@H@(" @7WEE<R!(%]915,@?"!?>2!(%]9(“D*“3H@
M(R!/:PH@(” @.SL*“B @(” J0H@(" @(" @(')E='5R;B Q"B @(" [.PIE
M<V%C"@IE8VAO(")<;E!R97!A<FEN9R!(87)D9&ES:RXN+B(
“B,@0VAE8VL@
M9F]R($AA<F1D:7-K"FEF('1E<W0@+6(@+V1E=B]H9# N,” [('1H96X*(” @
M(&5C:&@(D9O=6YD($AA<F1D:7-K(@IE;’-E"B @(“!M;W5N=%]Q;GA?9&]S
M7VAD+G@9FD"B,@56YM;W5N=”!A;GD@<&%R=&ET:6]N<R!O9B!(87)D9&ES
M:PII9B!T97-T(“UB(”]D978O:&0P+C!T-S<@.R!T:&5N"B @(“!U;6]U;G0@
M+V1E=B]H9# N,'0W-PIF:0II9B!T97-T(“UB(”]D978O:&0P+C @.R!T:&5N
M"B @(”!U;6]U;G0@+V1E=B]H9# N, IF:0H*(R!087)T:71I;VX@=&AE($AA
M<F1D:7-K"F5C:&@(E-E=“!087)T:71I;VX@=VET:”!&1&ES:SH@4VQO=" T
M+“!4>7!E(%%.6"P@,3 Q.2!#>6,L($)O;W1A8FQE+”!,;V%D97(B"F9D:7-K
M(“UF(”]D978O:&0P+C @861D(“UF(#0@=#<W(#$P,3D@8F]O=” T(&QO861E
M<@HC96-H;R B4V5T(%!A<G1I=&EO;B!W:71H($9$:7-K.B!3;&]T(#0L(%1Y
M<&4@44Y8+" Q,# @0WEC+“!”;V]T86)L92P@3&]A9&5R(@HC9F1I<VL@+68@
M+V1E=B]H9# N,“!A9&0@+68@-”!T-S<@,3 P(&)O;W0@-“!L;V%D97(“F9D
M:7-K(”]D978O:&0P+C @<VAO=PH
(R!-;W5N=”!T:&4@1&ES:R H1V5T(%!A
M<G1I=&EO;G,I"FUO=6YT(“UP(”]D978O:&0P+C "B,@26YI=&EL:7IE($AA
M<F1D:7-K("A/<'1I;VYA;"D
<F5A9"!?3TL_(D1O('EO=2!W:7-H(‘1O(&-O
M;7!L971E;‘D@97)A<V4@=&AE($AA<F1$:7-K(%!A<G1I=&EO;B!F:7)S=#@
M(@IC87-E(%\D7T]+(&EN"B @(“!?>65S('P@7UE%4R!(%]Y('P@7UD@0H@
M(" @(" @(&5C:&@(DEN:71I;&EZ:6YG($AA<F1D:7-K(@H@(" @(" @(&1I
M;FET(“UH(”]D978O:&0P+C!T-S<
(” @(" @(“!E8VAO(”)<;EQN6UM;6UM;
M6R!&;W(@0F]O=“!M=7-T('5P9&%T93H@+VAD,# O+F)O;W0@)B O:&0P,”\N
M86QT8F]O=“!=75U=75U=75QN7&XB"B @(” [.PH*(" @(“HI"B @(” @(" @
M96-H;R B7&Y<;DAA<F1$:7-K($-O;G1E;G1S(’=I;&P@;F]T(&)E(&5R87-E
M9"!B969O<F4@:6YS=&%L;&EN9R!T87!E(@H@(" @(" @(&5C:&@(EM;6UM;
M6UL@3F]T92 M(&UA;GD@9FEL97,@;6%Y(’-T:6QL(&)E(&]V97)W<FET=&5N
M(%U=75U=75U=7&Y<;B((" @(#L["F5S86,“B,@36]U;G0@=&AE(%!A<G1I
M=&EO;@IM;W5N=” O9&5V+VAD,“XP=#<W(”]H9# P"@HC($-H96-K($AA<F1D
M:7-K"F1F(“UH”@HC(%)E<W1O<F4@5&%P90IS;&5E<" R"G1A<&5?=&]?:&0P
M,“YX”@IE8VAO(")<;D1O;F4N(@HC(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C"B,@16YD"B,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C
&(R,C(R,*
`
end

begin 666 partitions.x
M"2,@0VAE8VL@9F]R(&%N9"!M;W5N=“!P87)T:71I;VYS(&]F(&%D9&ET:6]N
M86P@9’)I=F5S( H):68@=&5S=” M8B O9&5V+VAD,2 @(" @(#L@=&AE;B!M
M;W5N=" M<" O9&5V+VAD,2 @(#L@9FD*“6EF('1E<W0@+6(@+V1E=B]H9# N
M,2 @(” [('1H96X@;6]U;G0@+7 @+V1E=B]H9# N,2 [(&9I"@EI9B!T97-T
M(“UB(”]D978O:&0Q+C @(" @.R!T:&5N(&UO=6YT(“UP(”]D978O:&0Q+C @
M.R!F:0H):68@=&5S=" M8B O9&5V+VAD,2XQ(" @(#L@=&AE;B!M;W5N=" M
M<" O9&5V+VAD,2XQ(#L@9FD*“@DC($-H96-K(&9O<B!A;F0@;6]U;G0@861D
M:71I;VYA;”!13E@@<&%R=&ET:6]N<PH):68@=&5S=" M8B O9&5V+VAD,70W
M-R @(#L@=&AE;B!M;W5N=" O9&5V+VAD,70W-R @(“]H9# Q(#L@9FD*“6EF
M('1E<W0@+6(@+V1E=B]H9# N,70W-R [('1H96X@;6]U;G0@+V1E=B]H9# N
M,70W-R O:&0P,2 [(&9I”@EI9B!T97-T(“UB(”]D978O:&0Q+C!T-S<@.R!T
M:&5N(&UO=6YT(”]D978O:&0Q+C!T-S<@+VAD,3 @.R!F:0H):68@=&5S=" M
M8B O9&5V+VAD,2XQ=#<W(#L@=&AE;B!M;W5N=" O9&5V+VAD,2XQ=#<W("]H
/9#$Q(#L@9FD*(R!%;F0*
`
end