[LON-CAPA-dev] Internationalization

Minoru Akiyama lon-capa-dev@mail.lon-capa.org
Tue, 23 Sep 2003 14:34:52 +0900


This is a multi-part message in MIME format.

------=_NextPart_000_0087_01C381DF.D9BDCA90
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hi Gerd,

here's sample jp.pm encoded in UTF-8.
Please test it if it will work or not.

Minoru
----- Original Message ----- 
From: "Gerd Kortemeyer" <korte@lite.msu.edu>
To: <lon-capa-dev@mail.lon-capa.org>
Cc: "Gerd Kortemeyer" <korte@lite.msu.edu>
Sent: Monday, September 22, 2003 4:34 AM
Subject: Re: [LON-CAPA-dev] Internationalization


> Minoru,
>
> Yes, the sample file is in ISO, but we have also successfully
worked
> with UTF-8. If you could send me a small Japanese sample file
in UTF-9,
> I can install it here, and we can test the setup.
>
> Thanks!
>
> - Gerd.
>
> On Sunday, September 21, 2003, at 01:18  AM, Minoru Akiyama
wrote:
>
> > Hi, Gerd,
> >
> > Sample file is not  encoded in UTF-8.
> > I'd like to develop Japanese lexicon, but I'm afraid it won't
> > work in the case of Japanese(double byte code).
> >
> > i-Learning / EMIT Japan
> > Minoru Akiyama
> >
> > ----- Original Message -----
> > From: "Gerd Kortemeyer" <korte@lite.msu.edu>
> > To: <lon-capa-dev@mail.lon-capa.org>; "Leonardo Mendes"
> > <lmendes@decom.fee.unicamp.br>; "Ricardo Luis Kulzer"
> > <ricardol@decom.fee.unicamp.br>; "Horst Bögel"
> > <boegel@chemie.uni-halle.de>; "Shoji Kajita"
> > <kajita@itc.nagoya-u.ac.jp>; "Timothy Takemoto"
> > <tim@yamaguchi-u.ac.jp>; "Michael Thoennessen"
> > <thoennessen@nscl.msu.edu>
> > Cc: "Gerd Kortemeyer" <korte@lite.msu.edu>; "Ed Kashy"
> > <kashy@nscl.msu.edu>; <cspeier@msu.edu>; "Deborah Kashy"
> > <kashyd@pilot.msu.edu>; "Wolfgang Bauer" <bauer@pa.msu.edu>;
> > "Helen Keefe" <helen@lon-capa.org>
> > Sent: Thursday, September 18, 2003 9:28 PM
> > Subject: [LON-CAPA-dev] Internationalization
> >
> >
> >> Hi,
> >>
> >> As you might have seen from a number of CVS commits in the
last
> > two
> >> days, we have started to internationalize LON-CAPA, so that
it
> > can run
> >> in different languages. We have also started localizing for
> > German and
> >> Portuguese. Internalizing is the bulk of the work right now,
> > localizing
> >> can be done anytime, and involves no programming.
> >>
> >> The internationalization process involves putting a wrapper
> > around
> >> on-screen user messages and menus and turning them into
keys,
> > which the
> >> Maketext library translates into the desired language output
> > using a
> >> look-up table ("lexicon").
> >>
> >> As keys we are currently using the plain English messages,
and
> > Maketext
> >> is configured to replace the message by its own key if no
> > translation
> >> is found. This makes it easy to phase in the
> > internationalization
> >> without disturbing the screen output.
> >>
> >> Internationalization is tedious, and the more we can
distribute
> > the
> >> work, the better.
> >>
> >> *** New software should be written in internationalized
format
> > from now
> >> on.
> >>
> >> *** If you feel like doing something brainless but
productive,
> > grab a
> >> module and internationalize it.
> >>
> >> *** As you come across some code during normal programming,
> > just insert
> >> the wrappers.
> >>
> >> *** HERE'S WHAT TO DO:
> >>
> >> Into the "use" section of a module, we need to insert
> >>
> >>   use Apache::lonlocal;
> >>
> >> - note that there are NO BRACKETS, we *want* to pollute our
> > namespace.
> >>
> >> Inside might be something like this
> >>
> >> sub message {
> >>     my $status=shift;
> >>     my $message='Status unknown';
> >>     if ($status eq 'WON') {
> >>        $message='You have won.';
> >>     } elsif ($status eq 'LOST') {
> >>        $message='You are a total looser.';
> >>     }
> >>     return $message;
> >> }
> >> ...
> >> $r->print('<h3>Gamble your Homework Points</h3>');
> >> ...
> >> $r->print(<<ENDMSG);
> >> <font size="1">Rules:</font>
> >> <font size="0">No purchase necessary. Illegal where not
> > allowed.</font>
> >> ENDMSG
> >>
> >> We have to now wrap the subroutine &mt() ("maketext") around
> > our
> >> messages, but not around markup, etc. We also want minimal
> > disturbance.
> >> The first two examples are easy:
> >>
> >> sub message {
> >>     my $status=shift;
> >>     my $message='Status unknown';
> >>     if ($status eq 'WON') {
> >>        $message='You have won.';
> >>     } elsif ($status eq 'LOST') {
> >>        $message='You are a total looser.';
> >>     }
> >>     return &mt($message);
> >> }
> >> ...
> >> $r->print('<h3>'.&mt('Gamble your Homework
Points').'</h3>');
> >>
> >> The last one is a bummer, since you cannot call subroutines
> > inside of
> >> (<<MARKER). I have written a little subroutine to generate a
> > translated
> >> hash for that purpose:
> >>
> >> my %lt=&Apache::lonlocal::texthash('header' => 'Rules',
> > 'disclaimer' =>
> >> 'No purchase necessary. Illegal where not allowed.');
> >> $r->print(<<ENDMSG);
> >> <font size="1">$lt{'header'}:</font>
> >> <font size="0">$lt{'disclaimer'}</font>
> >> ENDMSG
> >>
> >> As a programmer, your job is done here. If everything
worked,
> > you
> >> should see no changes on the screen.
> >>
> >> As a translator, you need to provide the lexicon for the
keys,
> > which in
> >> this case is the plain text message. The lexicons sit in
> >> loncom/localize/localize, with the language code as
filename,
> > for
> >> example de.pm for the German translation. The file then
simply
> > looks
> >> like this:
> >>
> >>     'You have won.'
> >> => 'Sie haben gewonnen.',
> >>
> >>     'You are a total looser.'
> >> => 'Sie sind der totale Verlierer.',
> >>
> >>     'Rules'
> >> => 'Regeln',
> >>
> >>     'No purchase necessary. Illegal where not allowed.'
> >> => 'Es ist erlaubt, einfach zu verlieren, und das ist Ihre
> > Schuld.'
> >>
> >> The German translation lexicon is in pretty okay shape, but
not
> >> complete yet. Portuguese currently only covers the login
> > screen.
> >> Russian is purely experimental. Looks like UTF-8 is the way
to
> > encode
> >> this, at least for latin/greek-based languages, but we still
> > have to
> >> learn a lot.
> >>
> >> This is a relatively easy programming task, and any help is
> > appreciated.
> >>
> >> Maketext can do a whole lot more, see
> >>
> >>
> >
http://search.cpan.org/dist/Locale-Maketext/lib/Locale/Maketext.pod
> >>
> >> but for most purposes, we do not have to mess with that.
> >>
> >> - Gerd.
> >>
> >>
> >>
> >> _______________________________________________
> >> LON-CAPA-dev mailing list
> >> LON-CAPA-dev@mail.lon-capa.org
> >> http://mail.lon-capa.org/mailman/listinfo/lon-capa-dev
> >>
> >
> >
> > _______________________________________________
> > LON-CAPA-dev mailing list
> > LON-CAPA-dev@mail.lon-capa.org
> > http://mail.lon-capa.org/mailman/listinfo/lon-capa-dev
>
> _______________________________________________
> LON-CAPA-dev mailing list
> LON-CAPA-dev@mail.lon-capa.org
> http://mail.lon-capa.org/mailman/listinfo/lon-capa-dev
>

------=_NextPart_000_0087_01C381DF.D9BDCA90
Content-Type: application/octet-stream;
	name="jp.pm"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="jp.pm"

IyBUaGUgTGVhcm5pbmdPbmxpbmUgTmV0d29yayB3aXRoIENBUEENCiMgSmFwYW5lc2UgTG9jYWxp
emF0aW9uIExleGljb24NCiMNCiMgJElkOiBkZS5wbSx2IDEuMTEgMjAwMy8wOS8xNyAyMzo1MDox
OCB3d3cgRXhwICQNCiMNCiMgQ29weXJpZ2h0IGktTGVhcm5pbmcgTGltaXRlZCBQYXJ0bmVyc2hp
cCBDb21wYW55DQojDQojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMZWFybmluZ09ubGluZSBO
ZXR3b3JrIHdpdGggQ0FQQSAoTE9OLUNBUEEpLg0KIw0KIyBMT04tQ0FQQSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQoj
IExPTi1DQVBBIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4NCiMNCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMgYWxvbmcgd2l0aCBMT04tQ0FQQTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQojDQojIC9o
b21lL2h0dHBkL2h0bWwvYWRtL2dwbC50eHQNCiMNCiMgaHR0cDovL3d3dy5sb24tY2FwYS5vcmcv
DQojDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KcGFja2FnZSBBcGFjaGU6Omxv
Y2FsaXplOjpqYTsNCnVzZSBiYXNlIHF3KEFwYWNoZTo6bG9jYWxpemUpOw0KJUxleGljb249KCdf
QVVUTycgPT4gMSwNCg0KICAgJ0RvbWFpbicNCj0+ICfjg4njg6HjgqTjg7MnLA0KDQogICAnU2Vy
dmVyJw0KPT4gJ+OCteODvOODkCcsDQoNCiAgICdMb2FkJw0KPT4gJ+ODreODvOODiScsDQoNCiAg
ICdVc2VyIExvYWQnDQo9PiAn44Om44O844K244KS44Ot44O844OJJywNCg0KICAgJ0hlbHAnDQo9
PiAn44OY44Or44OXJywNCg0KICAgJ0xvZyBpbicNCj0+ICfjg63jgrDjgqTjg7MnLA0KDQogICAn
VXNlcm5hbWUnDQo9PiAn44Om44O844K25ZCNJywNCg0KICAgJ1Bhc3N3b3JkJw0KPT4gJ+ODkeOC
ueODr+ODvOODiScsDQoNCiAgICdjaG9vc2UnDQo9PiAn6YG45oqeJywNCg0KICAgJ2VudGVyJw0K
PT4gJ+WFpeWKmycsDQoNCiAgICd2aWV3Jw0KPT4gJ+mWsuimpycsDQoNCiAgICdjYWxlbmRhcicN
Cj0+ICfjgqvjg6zjg7Pjg4AnLA0KDQogICAncHJlZmVyLScNCj0+ICfjgYrmsJfjgasnLA0KDQog
ICAnZW5jZXMnDQo9PiAn5YWl44KKJywNCg0KICAgJ3JvbGUnDQo9PiAn5b255YmyJywNCg0KICAg
J2NvdXJzZScNCj0+ICfjgrPjg7zjgrknLA0KDQogICAnY3JlYXRlJw0KPT4gJ+S9nOaIkCcsDQoN
CiAgICdncmFkZXMnDQo9PiAn5oiQ57i+JywNCg0KICAgJ2NvbW11LScNCj0+ICfjgrPjg5/jg6Xj
g4snLA0KDQogICAnbmljYXRpb24nDQo9PiAn44Kx44O844K344On44OzJywNCg0KICAgJ2Vucm9s
bCcNCj0+ICflh7rluK0nLA0KDQogICAnbmF2aWdhdGUnDQo9PiAn44OK44OT44Ky44O844OIJywN
Cg0KICAgJ2NvbnRlbnRzJw0KPT4gJycsDQoNCiAgICdBbm5vdW5jZW1lbnRzIGFuZCBDYWxlbmRh
cicNCj0+ICfjgYrnn6XjgonjgZvjgajjgqvjg6zjg7Pjg4AnLA0KDQogICAnQXV0aG9yJw0KPT4g
J+iRl+iAhScsDQoNCiAgICdDaGFuZ2UgWW91ciBQcmVmZXJlbmNlcycNCj0+ICfjgYrmsJfjgavl
haXjgorjgpLlpInmm7TjgZnjgosnLA0KDQogICAnQ2hvb3NlIHRoZSB1c2VyIHJvbGUnDQo9PiAn
44Om44O844K244Gu5b255Ymy44KS6YG444G2JywNCg0KICAgJ0NvLUF1dGhvcicNCj0+ICflhbHo
kZfogIUnLA0KDQogICAnQ29tbXVuaWNhdGlvbiBhbmQgTWVzc2FnZXMnDQo9PiAn44Kz44Of44Ol
44OL44Kx44O844K344On44Oz44OE44O844OrJywNCg0KICAgJ0NvdXJzZSBDb29yZGluYXRvcicN
Cj0+ICfjgrPjg7zjgrnjgrPjg7zjg4fjgqPjg43jg7zjgr8nLA0KDQogICAnQ291cnNlIFN0YXRp
c3RpY3MgYW5kIENoYXJ0cycNCj0+ICfjgrPjg7zjgrnjga7ntbHoqIjjgajlm7PooagnLA0KDQog
ICAnQ291cnNlIGFubm91bmNlbWVudHMgYW5kIG15IGNhbGVuZGFyJw0KPT4gJ+OCs+ODvOOCueOB
ruOBiuefpeOCieOBm+OBqOOCq+ODrOODs+ODgCcsDQoNCiAgICdDcmVhdGUgVXNlcnMsIENoYW5n
ZSBVc2VyIFByaXZpbGVnZXMnDQo9PiAn44Om44O844K244KS5L2c44KK44CB54m55qip44KS5aSJ
5pu044GZ44KLJywNCg0KICAgJ0RvbWFpbiBDb29yZGluYXRvcicNCj0+ICfjg4njg6HjgqTjg7Pj
grPjg7zjg4fjgqPjg43jg7zjgr/jg7wnLA0KDQogICAnRW5yb2xsbWVudCBNYW5hZ2VyJw0KPT4g
J+WHuuW4reeuoeeQhuiAhScsDQoNCiAgICdFbnRlciBncmFkZXMgZnJvbSBjaGVjay1vdXQgYXNz
ZXNzbWVudCByZXNvdXJjZXMnDQo9PiAn5oiQ57i+44KS5YWl5Yqb44GZ44KLJywNCg0KICAgJ0V4
YW0gUHJvY3RvcicNCj0+ICfoqabpqJPnrqEnLA0KDQogICAnRXhpdCBMT04tQ0FQQScNCj0+ICdM
T04tQ0FQQeOCkue1guS6huOBmeOCiycsDQoNCiAgICdHcmFkZXMgU3ByZWFkc2hlZXQnDQo9PiAn
5oiQ57i+6KGo44Gn5oiQ57i+44KS44Gk44GR44KLJywNCg0KICAgJ0dyYWRpbmcnDQo9PiAn5o6h
54K5JywNCg0KICAgJ0luc3RydWN0b3InDQo9PiAn44Kk44Oz44K544OI44Op44Kv44K/JywNCg0K
ICAgJ0xhdW5jaCBSZW1vdGUgQ29udHJvbCcNCj0+ICfjg6rjg6Ljg7zjg4jjgrPjg7Pjg4jjg63j
g7zjg6vjgpLkvb/jgYYnLA0KDQogICAnTWFpbiBNZW51Jw0KPT4gJ+ODoeOCpOODs+ODoeODi+OD
peODvCcsDQoNCiAgICdOYXZpZ2F0ZSBDb3Vyc2UgQ29udGVudHMnDQo9PiAn44Kz44O844K544KS
44OK44OT44Ky44O844OI44GZ44KLJywNCg0KICAgJ05vIFJvbGUsIEN1bXVsYXRpdmUgUHJpdmls
ZWdlcycNCj0+ICfvvK7vvY/jgIDvvLLvvY/vvYzvvYXvvIzvvKPvvZXvvY3vvZXvvYzvvYHvvZTv
vYnvvZbvvYXjgIDvvLDvvZLvvYnvvZbvvYnvvYzvvYXvvYfvvYXvvZMnLA0KDQogICAnUmV0dXJu
IHRvIExhc3QgTG9jYXRpb24nDQo9PiAn5pyA5b6M44Gr5oi744KLJywNCg0KICAgJ1NlbmQgYW5k
IHJlY2VpdmUgbWVzc2FnZXMnDQo9PiAn44Oh44OD44K744O844K444KS6YCB5Y+X5L+h44GZ44KL
JywNCg0KICAgJ1NldCBteSB1c2VyIHByZWZlcmVuY2VzJw0KPT4gJ+OBiuawl+OBq+WFpeOCiuOC
kuioreWumuOBmeOCiycsDQoNCiAgICdTdHVkZW50Jw0KPT4gJ+WtpueUnycsDQoNCiAgICdTd2l0
Y2ggdG8gYW5vdGhlciB1c2VyIHJvbGUnDQo9PiAn5LuW44Gu5b255Ymy44Gr5YiH44KK5pu/44GI
44KLJywNCg0KICAgJ1RlYWNoaW5nIEFzc2lzdGFudCcNCj0+ICfvvLTvvKEnLA0KDQogICAnVXNl
IG9yIGVkaXQgbXkgYm9va21hcmsgY29sbGVjdGlvbicNCj0+ICfjg5bjg4Pjgq/jg57jg7zjgq/j
gpLkvb/jgYbvvI/nt6jpm4bjgZnjgosnLA0KDQogICAnVXNlciBSb2xlcycNCj0+ICflvbnlibIn
LA0KDQogICAnQ2FsY3VsYXRlIGNvdXJzZSBncmFkZXMgKFNwcmVhZHNoZWV0KScNCj0+ICfjgrPj
g7zjgrnjga7miJDnuL7jgpLoqIjnrpfjgZnjgoso44K544OX44Os44OD44OJ44K344O844OIKScs
DQoNCiAgICdFbnRlciB0aGUgY2hhdHJvb20gZm9yIHRoZSBjb3Vyc2UnDQo9PiAn44Kz44O844K5
44O744OB44Oj44OD44OI44Or44O844Og44Gr5YWl44KLJywNCg0KICAgJ05hdmlnYXRlIHRoZSB0
YWJsZSBvZiBjb250ZW50cyBmb3IgdGhpcyBjb3Vyc2UnDQo9PiAn44Kz44O844K544Gu55uu5qyh
44KS44OK44OT44Ky44O844OI44GZ44KLJywNCg0KICAgJ1N5bGxhYnVzJw0KPT4gJ+OCt+ODqeOD
kOOCuScsDQoNCiAgICdWaWV3IHRoZSBjb3Vyc2UgYXNzZXNzbWVudCBwcm9ncmVzcyBjaGFydCcN
Cj0+ICfmiJDnuL7jga7kvLjplbfjgrDjg6njg5XjgpLopovjgosnLA0KDQogICAnQ2xhc3MgSG91
cnMnDQo9PiAn6Kyb576p5pmC6ZaTJywNCg0KICAgJ0NvdXJzZSBEZXNjcmlwdGlvbicNCj0+ICfj
grPjg7zjgrnjga7lhoXlrrknLA0KDQogICAnQ291cnNlcGFjaycNCj0+ICfjgrPjg7zjgrnjg5Hj
g4Pjgq8nLA0KDQogICAnQ3VycmVudCBNb250aCcNCj0+ICfku4rmnIgnLA0KDQogICAnRGVhZGxp
bmVzJw0KPT4gJ+e3oOOCgeWIh+OCiicsDQoNCiAgICdGcmknDQo9PiAn6YeRJywNCg0KICAgJ0dy
YWRpbmcgSW5mb3JtYXRpb24nDQo9PiAn5o6h54K55oOF5aCxJywNCg0KICAgJ0hlbHByb29tIEhv
dXJzJw0KPT4gJ+aUr+aPtOWupOOCteODvOODk+OCueaZgumWkycsDQoNCiAgICdJbnN0cnVjdG9y
IEluZm9ybWF0aW9uJw0KPT4gJ+OCpOODs+OCueODiOODqeOCr+OCv+aDheWgsScsDQoNCiAgICdN
b24nDQo9PiAn5pyIJywNCg0KICAgJ05leHQgTW9udGgnDQo9PiAn5p2l5pyIJywNCg0KICAgJ09m
ZmljZSBIb3VycycNCj0+ICfjgqrjg5XjgqPjgrnjgqLjg6/jg7wnLA0KDQogICAnUHJlcmVxdWlz
aXRlcycNCj0+ICfliY3mj5DmnaHku7YnLA0KDQogICAnUHJldmlvdXMgTW9udGgnDQo9PiAn5YmN
5pyIJywNCg0KICAgJ1JlYWRpbmdzJw0KPT4gJ+iqreOBv+eJqScsDQoNCiAgICdTYXQnDQo9PiAn
5ZyfJywNCg0KICAgJ0phbnVhcnknDQo9PiAn77yR5pyIJywNCg0KICAgJ0ZlYnJ1YXJ5Jw0KPT4g
J++8kuaciCcsDQoNCiAgICdNYXJjaCcNCj0+ICfvvJPmnIgnLA0KDQogICAnQXByaWwnDQo9PiAn
77yU5pyIJywNCg0KICAgJ01heScNCj0+ICfvvJXmnIgnLA0KDQogICAnSnVuZScNCj0+ICfvvJbm
nIgnLA0KDQogICAnQXVndXN0Jw0KPT4gJ++8mOaciCcsDQoNCiAgICdTZXB0ZW1iZXInDQo9PiAn
77yZ5pyIJywNCg0KICAgJ09jdG9iZXInDQo9PiAnMTDmnIgnLA0KDQogICAnTm92ZW1iZXInDQo9
PiAnMTHmnIgnLA0KDQogICAnRGVjZW1iZXInDQo9PiAnMTLmnIgnLA0KDQogICAnU3VuJw0KPT4g
J+aXpScsDQoNCiAgICdUZXh0Ym9vaycNCj0+ICfjg4bjgq3jgrnjg4gnLA0KDQogICAnVGh1Jw0K
PT4gJ+acqCcsDQoNCiAgICdUdWUnDQo9PiAn54GrJywNCg0KICAgJ1dlYiBMaW5rcycNCj0+ICfj
g6rjg7Pjgq8nLA0KDQogICAnV2VkJw0KPT4gJ+awtCcsDQoNCiAgICdEcm9wL0FkZCBzdHVkZW50
cyBpbiB0aGlzIGNvdXJzZScNCj0+ICfjgrPjg7zjgrnjgavvvI/jgYvjgonlrabnlJ/jgpLov73l
iqDvvI/liYrpmaTjgZnjgosnLA0KDQogICAnWW91IGhhdmUgZW50ZXJlZCB0aGF0IGFuc3dlciBi
ZWZvcmUnDQo9PiAn5YmN44Gr44KC44GT44Gu5Zue562U44KS5YWl5Yqb44GX44Gm44GE44G+44GZ
JywNCg0KICAgJ0Egc2NvcmUgaGFzIGJlZW4gYXNzaWduZWQuJw0KPT4gJ+aOoeeCueOBleOCjOOB
vuOBl+OBn+OAgicsDQoNCiAgICdZb3UgYXJlIGNvcnJlY3QuJw0KPT4gJ+ato+ino+OBp+OBmScs
DQoNCiAgICdZb3VyIHJlY2VpcHQgaXMnDQo9PiAn44GC44Gq44Gf44Gu5Y+X6aCY44GZ44KL44KC
44Gu44GvJywNCg0KICAgJ1lvdSBhcmUgZXhjdXNlZCBmcm9tIHRoZSBwcm9ibGVtLicNCj0+ICfj
gZ3jga7llY/poYzjga/lj5fpqJPjgZfjgarjgY/jgaboia/jgYTjgafjgZnjgIInLA0KDQogICAn
SW5jb3JyZWN0Jw0KPT4gJ+mWk+mBleOBhCcsDQoNCiAgICdTb21lIHBhcnRzIHdlcmUgbm90IHN1
Ym1pdHRlZC4nDQo9PiAn44GE44GP44Gk44GL44Gu6YOo5YiG44GM5o+Q5Ye644GV44KM44Gm44GE
44G+44Gb44KT44CCJywNCg0KICAgJ0FuIGVycm9yIG9jY3VyZWQgd2hpbGUgZ3JhZGluZyB5b3Vy
IGFuc3dlci4nDQo9PiAn44GC44Gq44Gf44Gu5Zue562U44KS5o6h54K544GX44Gm44GE44KL44Go
44GN44Gr44Ko44Op44O844GM6LW344GN44G+44GX44Gf44CCJywNCg0KICAgJ1RoZSBzdWJtaXR0
ZWQgYW5zd2VyIHdhcyB0b28gbG9uZy4nDQo9PiAn5Zue562U44GM6ZW344GZ44GO44G+44GZ44CC
JywNCg0KICAgJ1RoaXMgcXVlc3Rpb24gZXhwZWN0cyBhIG51bWVyaWMgYW5zd2VyLicNCj0+ICfj
gZPjga7os6rllY/jgafjga/mlbDlrZfjga7lm57nrZTjgpLmnJ/lvoXjgZfjgabjgYTjgb7jgZnj
gIInLA0KDQogICAnWW91IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCByYW5raW5nJw0KPT4gJ+eE
oeWKueOBquaIkOe4vuODqeODs+OCr+OCkuOBpOOBkeOBvuOBl+OBnycsDQoNCiAgICdwbGVhc2Ug
cmVmZXIgdG8nDQo9PiAn5qyh44Gu44KC44Gu44KS5Y+C54Wn44Gb44KI77yaJywNCg0KICAgJ1Ro
ZSBmaWxldHlwZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHVwbG9hZGVkIGlzIG5vdCBhbGxv
d2VkLicNCj0+ICfjgqLjg4Pjg5fjg63jg7zjg4njgZfjgZ/jg5XjgqHjgqTjg6vjga7mi6HlvLXl
rZDjga/npoHmraLjgZXjgozjgabjgYTjgb7jgZnjgIInLA0KDQogICAnUGxlYXNlIGFkanVzdCBz
aWduaWZpY2FudCBmaWd1cmVzLicNCj0+ICfmlbDlrZfjgYzlpKfjgY3jgZnjgY7jgb7jgZnjgIIn
LA0KDQogICAnVW5pdHMgaW5jb3JyZWN0LicNCj0+ICfljZjkvY3jgYzplpPpgZXjgaPjgabjgYTj
gb7jgZnjgIInLA0KDQogICAnT25seSBhIG51bWJlciByZXF1aXJlZC4nDQo9PiAn5pWw5a2X44Gg
44GR44GM6KaB5rGC44GV44KM44Gm44GE44G+44GZ44CCJywNCg0KICAgJ1VuaXRzIHJlcXVpcmVk
Jw0KPT4gJ+WNmOS9jeOBjOW/heimgeOBp+OBmScsDQoNCiAgICdVbmFibGUgdG8gdW5kZXJzdGFu
ZCBmb3JtdWxhJw0KPT4gJ+aVsOW8j+OCkuino+mHiOOBp+OBjeOBvuOBm+OCkycsDQoNCiAgICdZ
b3VyIHN1Ym1pc3Npb24gaGFzIGJlZW4gcmVjb3JkZWQuJw0KPT4gJ+aPkOWHuuOBleOCjOOBn+OC
guOBruOBr+iomOmMsuOBleOCjOOBvuOBl+OBn+OAgicsDQoNCiAgICdVbmtub3duIG1lc3NhZ2Un
DQo9PiAn5YiG44GL44KJ44Gq44GE44Oh44OD44K744O844K444Gn44GZJywNCg0KICAgJ0Fuc3dl
ciBTdWJtaXR0ZWQnDQo9PiAn5o+Q5Ye644GV44KM44Gf5Zue562UJywNCg0KICAgJ1RyaWVzJw0K
PT4gJ+WPl+mok+WbnuaVsCcsDQoNCiAgICdTdWJtaXQgQW5zd2VyJw0KPT4gJ+WbnuetlOOCkuaP
kOWHuuOBmeOCiycsDQoNCiAgICdQcmVwYXJlIGEgcHJpbnRhYmxlIGRvY3VtZW50Jw0KPT4gJ+WN
sOWIt+OBp+OBjeOCi+ODieOCreODpeODoeODs+ODiOOCkueUqOaEj+OBl+OBvuOBmScsDQoNCiAg
ICdHbyBUbyBNeSBGaXJzdCBIb21ld29yayBQcm9ibGVtJw0KPT4gJ+acgOWIneOBruWVj+mhjOOB
q+ihjOOBj20nLA0KDQogICAnRGlzY3Vzc2lvbnMnDQo9PiAn44OH44Kj44K544Kr44OD44K344On
44OzJywNCg0KICAgJ05ldyBkaXNjdXNzaW9uIHNpbmNlJw0KPT4gJ+asoeOBruaXpeS7mOOCiOOC
iuaWsOOBl+OBhOODh+OCo+OCueOCq+ODg+OCt+ODp+ODs+ODu+ODoeODg+OCu+ODvOOCuO+8mics
DQoNCiAgICdHb29kYnllJw0KPT4gJ+OBleOCiOOBhuOBquOCiScNCik7DQoNCjE7DQoNCg==

------=_NextPart_000_0087_01C381DF.D9BDCA90--